Cockatoo: TrustNote Payment & IoT Hackathon API

Bob Lu
RingNetwork
Published in
4 min readDec 2, 2018

What is Cockatoo?

Cockatoo is TrustNote’s Payment & IoT Hackathon API providing a simple web application interface that gives you easy access to instant payment and online transactions from your wallet on any device, with anyone, in just a few lines of JavaScript code.

What I can do with Cockatoo?

Here are some of the sample codes that are developed using Cockatoo:

How to create the TrustNote Wallet?

Before use the Cockatoo, you will need to create a valid TrustNote wallet address, which starts with installing the wallet base library using npm:

npm install wallet-base — save

Then, in a few lines of JavaScript code, you will be able to create your wallet and get your wallet address:

// Import the wallet base
const Client = require('wallet-base')
// Generate the mnemonic code
let mnemonic = Client.mnemonic()
// Generate the private key using the mnemonic code
let privkey = Client.xPrivKey(mnemonic)
// Generate the public key using the private key
let walletPubkey = Client.walletPubKey(privkey, 0)
// Generate the wallet address using the public key
let address = Client.walletAddress(walletPubkey, 0, 0)

Register the wallet

Register the wallet, the wallet address will be returned if successful. A wallet must be registered before use.

Method: POST

URL: http://cockatoo.trustnote.org/api/v1/account/register

  • pubkey The public key of the wallet

Response:

  • address Return the address of the wallet if the registration is successful

Example of parameters:

{“pubkey”: “xpub6BwQQwThGkpzP5uLJ8NMXMFLsFt1B7rqNyeNTB3VXGb95eoK1caM5JpmPAMg8vJQf7d86689qwtGeRC4KL4fVTvMtp9u5W8jo5V5GiRNMNo”}

Example of returned JSON object:

{“address”:”xxxxxx”}

Getting the balance of an address

Retrieve the balance of a TrustNote address, the total balance should include both the balance in stable state and the balance in pending state

Method: GET

URL: http://cockatoo.trustnote.org/api/v1/asset/balance/:address/:asset

  • :address The TrustNote addtress to lookup
  • :asset The name of the TRC20 based asset to lookup, TTT is the only supported asset name in Cockatoo API

Response:

  • stable The balance of the address that is in stable state
  • pending The balance of the address that is in pending state

Example of returned JSON object:

{“network”: “devnet”,“errCode”: 0,“errMsg”: “success”,“data”: {“stable”: 25,“pending”: 80451}}

Creating a payment message

Creating an unsigned payment message including the payment details. The payment transaction will only take place after the message is signed with the private key.

Method: POST

URL: http://cockatoo.trustnote.org/api/v1/asset/transfer

  • payer The address of the payer’s wallet
  • address The address of receiver’s wallet
  • amount The amount of the asset to be transferred

Response:

  • b64_to_sign the unsigned payment transaction message
  • txid Id of the transaction

Example of parameters:

{“asset”: “TTT”,“payer”: “ZDKNB2DQJPQR7PKYI37A5M2MTU5SIZ2A”,“message”: “hello world”,“outputs”: [{“address”: “FYQXBPQWBPXWMJGCHWJ52AK2QMEOICR5”,“amount”: 5}]}

Example of returned JSON object:

{network”: “devnet”,“errCode”: 0,“errMsg”: “success”,“data”: {“b64_to_sign”: “iQjSol75QjDLtzapgxZBWPMgxJnRj2IoOO6pt41eBW8=”,“txid”: “XQ/8hrHpYgtVZxAHSdScUaQGjyVaKwsv52q2qmqLtQE=”}}

Signing a transaction

The unsigned payment message returned from the transfer API can be signed using the sign method from the wallet base library.

  • message The message to be signed with
  • privatekey The private key
  • path The default path, must be specified as “m/44'/0'/0'/0/0”
// Sign a transaction
let sig = Client.sign(b64_to_sign, privkey, “m/44'/0'/0'/0/0”)

Committing the payment message

Committing a signed payment message to complete the payment transaction.

Method: POST

URL: http://cockatoo.trustnote.org/api/v1/asset/commit

  • txid Id of the transaction
  • sig The signed message

Response:

  • errMsg Error message

Example of parameters:

{“txid”: “BWEGp9t1yKEttWrLkshn7b3brWMy/tHMdyisLFL/3ck=”,“sig”: “li4xPfMMbiMyw7YWGuiHjklWu6IPxQOnlB9S0rjlUkAplCyP5OrlfcjOWOuRO4Ua99cgCTI23wI6rg0outpUwA==”}

Example of returned JSON object:

{“network”: “devnet”,“errMsg”: “not enough asset: TTT from address OQXCPQ6NQVKPI46U2YFBY55EBCPAV3GF”,“data”: “null”}

Retrieving the transaction history

Creating an unsigned payment message including the payment details. The payment transaction will only take place after the message is signed with the private key.

Method: GET

URL: http://cockatoo.trustnote.org/api/v1/asset/txhistory/:address/:asset/:page/:itemsPerPage

  • payer The address of the payer’s wallet
  • address The address of receiver’s wallet
  • amount The amount of the asset to be transferred

Response:

  • b64_to_sign the unsigned payment transaction message
  • txid Id of the transaction

Example of parameters:

{“asset”: “TTT”,“payer”: “ZDKNB2DQJPQR7PKYI37A5M2MTU5SIZ2A”,“message”: “hello world”,“outputs”: [{“address”: “FYQXBPQWBPXWMJGCHWJ52AK2QMEOICR5”,“amount”: 5}]}

Example of returned JSON object:

{“network”: “devnet”,“errCode”: 0,“errMsg”: “success”,“data”: {“unit”: {“unit”: “F8ofJgi8wokp0uIetxK/xwg3aAJ5t7Pvln2MNLGyS8M=”,“version”: “1.0”,“alt”: “1”,“witness_list_unit”: “MtzrZeOHHjqVZheuLylf0DX7zhp10nBsQX5e/+cA3PQ=”,“last_ball_unit”: “FU7+kILFFfH4UK2pIctXWbO6kNliAVP3toei/HHxbiE=”,“last_ball”: “HlVm3tqKy6hWYR3ia/Qat5oNeOxTbxW2siBwhGtdmrc=”,“headers_commission”: 714,“payload_commission”: 358,“main_chain_index”: 153960,“timestamp”: 1539789830,“parent_units”: [“91IvDcfFy37zKdJ30WXbyUl6/bD2ip1Y6tmBUnK4YW8=”],“earned_headers_commission_recipients”: [{“address”: “OHLL5L5W57IROOH4A3GISUGSP6KMFBRQ”,“earned_headers_commission_share”: 100}],“authors”: [{“address”: “5AOABXFRL5AX3MWEPWKQ6QY3MY6A5TMH”,“authentifiers”: {“r”: “nC+l/MzXcqsYyHjurBqEUasUz3Eje8TF6XbIuKXZgWw0CsXBF8ORE+0EiHO4PdqGUijDtQ3XNCaa1OFT7I3NpA==”}}, {“address”: “OHLL5L5W57IROOH4A3GISUGSP6KMFBRQ”,“authentifiers”: {“r.0.0”: “nC+l/MzXcqsYyHjurBqEUasUz3Eje8TF6XbIuKXZgWw0CsXBF8ORE+0EiHO4PdqGUijDtQ3XNCaa1OFT7I3NpA==”},“definition”: [“or”, [[“and”, [[“address”, “5AOABXFRL5AX3MWEPWKQ6QY3MY6A5TMH”],[“in data feed”, [[“4VYYR2YO6NV4NTF572AUBEKJLSTM4J4E”], “timestamp”, “>”, 1531299600000]]]],[“and”, [[“address”, “752L4B7Y7WQF3BRFEI2IGIN5RDZE54DM”],[“in data feed”, [[“4VYYR2YO6NV4NTF572AUBEKJLSTM4J4E”], “timestamp”, “=”, 0]]]]]]}],“messages”: [{“app”: “payment”,“payload_hash”: “FOfA6SWV/0UVgefXXHMsGk0U4u7lNqo5ewVwZLhNaMc=”,“payload_location”: “inline”,“payload”: {“inputs”: [{“unit”: “4Cq1KWx1vmXO1L35F6cUj6yXilweVgBn9lCG6d/MLa4=”,“message_index”: 0,“output_index”: 1}],“outputs”: [{“address”: “OHLL5L5W57IROOH4A3GISUGSP6KMFBRQ”,“amount”: 88928}]}}, {“app”: “payment”,“payload_hash”: “grQJshnOKYhYUQCuS1tXEJ7X3schjU5FyGdJ8uvUUy8=”,“payload_location”: “inline”,“payload”: {“inputs”: [{“unit”: “eap7glIf3PDZ95doA+ngk3vdhFDUhhoQmBn+Cj5SU/A=”,“message_index”: 1,“output_index”: 0}],“asset”: “7acKn25O/OuxUHJFXFHOACvNWpSDejx/BzxcWsQ8qzY=”,“outputs”: [{“address”: “LVP5X4PB2T757EIWJPACVLACLOOEMAVV”,“amount”: 150}]}}]},“ball”: “ZEHEija1zDNT2Bc52pmmrEZ+Az89lkLAnEpiClUxt94=”,“skiplist_units”: [“KkXI52tTaQSiOz6buEK7i/rJEYuz6rGW7tCGfeqms0M=”],“arrShareDefinition”: [{“arrDefinition”: [“or”, [[“and”, [[“address”, “5AOABXFRL5AX3MWEPWKQ6QY3MY6A5TMH”],[“in data feed”, [[“4VYYR2YO6NV4NTF572AUBEKJLSTM4J4E”], “timestamp”, “>”, 1531299600000]]]],[“and”, [[“address”, “752L4B7Y7WQF3BRFEI2IGIN5RDZE54DM”],[“in data feed”, [[“4VYYR2YO6NV4NTF572AUBEKJLSTM4J4E”], “timestamp”, “=”, 0]]]]]],“assocSignersByPath”: {“r.0.0”: {“device_address”: “0YJBUFXU6NX3YII2NZWXBE63CMCKH53BM”,“address”: “5AOABXFRL5AX3MWEPWKQ6QY3MY6A5TMH”,“member_signing_path”: “r”},“r.1.0”: {“device_address”: “0IQQISCHCS7OHLNPSZKG2W4CLJCNV3QXW”,“address”: “752L4B7Y7WQF3BRFEI2IGIN5RDZE54DM”,“member_signing_path”: “r”}}

--

--