「For Developers」を編集中
この編集を取り消せます。
下記の差分を確認して、本当に取り消していいか検証してください。よろしければ変更を保存して取り消しを完了してください。
最新版 | 編集中の文章 | ||
1行目: | 1行目: | ||
== Waves Node REST API == | == Waves Node REST API == | ||
− | === | + | === Contents === |
− | ==== | + | ==== Address ==== |
− | ===== GET / addresses ===== | + | ===== GET /addresses ===== |
− | + | Get list of all accounts addresses in the node's wallet. | |
− | ''' | + | '''Response:''' |
− | + | [ | |
− | + | "3NBVqYXrapgJP9atQccdBPAgJPwHDKkh6A8", | |
− | + | "3Mx2afTZ2KbRrLNbytyzTtXukZvqEB8SkW7" | |
− | + | ] | |
− | ===== GET / addresses / seq / {from} / {to} ===== | + | ===== GET /addresses/seq/{from}/{to} ===== |
− | + | Get list of accounts addresses with indexes at this range in the node's wallet. | |
− | ''' | + | '''Response:''' |
− | + | [ | |
− | + | "3NBVqYXrapgJP9atQccdBPAgJPwHDKkh6A8", | |
− | + | "3Mx2afTZ2KbRrLNbytyzTtXukZvqEB8SkW7" | |
− | + | ] | |
− | ===== POST / addresses ===== | + | ===== POST /addresses ===== |
− | + | Generate a new account address in the wallet. Requires API_KEY to be provided | |
− | ''' | + | '''Request:''' |
− | + | ||
− | + | ||
− | '' ' | + | '''Response JSON example:''' |
− | + | { | |
− | + | "address": "3Mx2afTZ2KbRrLNbytyzTtXukZvqEB8SkW7" | |
− | + | } | |
− | ===== | + | ===== GET /addresses/balance/{address} ===== |
− | { | + | Get account balance in WAVES in {address}: |
− | + | "address" - account's address in Base58 format | |
− | '' ' | + | '''Response JSON example:''' |
− | + | { | |
− | + | "address": "3N3keodUiS8WLEw9W4BKDNxgNdUpwSnpb3K", | |
− | + | "confirmations": 0, | |
− | + | "balance": 100945889661986 | |
− | + | } | |
− | ===== | + | ===== GET /addresses/balance/{address}/{confirmations}===== |
− | { | + | Get account balance in WAVES by {address} after {confirmations} from now: |
− | + | "address" - account's address in Base58 format | |
− | + | "confirmations" - N of confirmations | |
− | '' ' | + | '''Response JSON example:''' |
− | + | { | |
− | + | "address": "3N3keodUiS8WLEw9W4BKDNxgNdUpwSnpb3K", | |
− | + | "confirmations": 500, | |
− | + | "balance": 100945388397565 | |
− | + | } | |
− | === | + | === Assets Transactions === |
− | ==== | + | ==== Public Functions ==== |
− | ===== GET / assets / balance / { | + | ===== GET /assets/balance/{address} ===== |
− | + | Balances for all assets that the given account ever had (besides WAVES). | |
− | + | "address" - account's address in Base58 format | |
− | '' ' | + | '''Response params:''' |
− | + | "address" - Account's address in Base58 format | |
− | + | "balances" - List of balance objects for assets that the given account has ever | |
− | + | "assetId" - Asset ID in Base58 format | |
− | + | "balance" - Balance of that Asset on account | |
− | + | "issued" - Boolean flag whether this asset was issued by that account | |
− | '' ' | + | '''Response JSON example:''' |
− | + | { | |
− | + | "address": "3Mv61qe6egMSjRDZiiuvJDnf3Q1qW9tTZDB", | |
− | + | "balances": [ | |
− | + | { | |
− | + | "assetId": "Ax9T4grFxx5m3KPUEKjMdnQkCKtBktf694wU2wJYvQUD", | |
− | + | "balance": 4879179221, | |
− | + | "issued": true | |
− | + | }, | |
− | + | { | |
− | + | "assetId": "49KfHPJcKvSAvNKwM7CTofjKHzL87SaSx8eyADBjv5Wi", | |
− | + | "balance": 0, | |
− | + | "issued": false | |
− | + | } | |
− | + | ] | |
− | + | } | |
− | ===== GET / assets / balance / {address} / {assetId} ===== | + | ===== GET /assets/balance/{address}/{assetId} ===== |
− | + | Account's balance for the given asset. | |
− | + | "address" - account's address in Base58 format | |
− | + | "assetId" - Asset ID in Base58 format | |
− | '' ' | + | '''Response JSON example:''' |
− | + | { | |
− | + | "address": "3Mv61qe6egMSjRDZiiuvJDnf3Q1qW9tTZDB", | |
− | + | "assetId": "Ax9T4grFxx5m3KPUEKjMdnQkCKtBktf694wU2wJYvQUD", | |
− | + | "balance": 4879179221 | |
− | + | } | |
− | ===== POST / assets / broadcast / issue ===== | + | ===== POST /assets/broadcast/issue ===== |
− | + | Publish signed Asset issue transaction to the network. | |
− | '' ' | + | '''Request params:''' |
− | + | "name" - Asset name, can be not unique, length from 4 to 16 bytes, in plain text. | |
− | + | "description" - Asset description, max length is 1000 bytes, in plain text. | |
− | + | "sender" - Sender account's address that exists in the node's wallet, Base58-encoded | |
− | + | "senderPublicKey" - Sender account's public key, Base58-encoded | |
− | + | "fee" - Transaction fee for Asset issue, min = 100000000 (1WAVES). | |
− | + | "decimals" - Number of decimals to represent a piece of asset, max = 8. | |
− | + | "quantity" - Quantity of asset'lets to issue (number of indivisible pieces of assets). | |
− | + | "reissuable" - Boolean flag whether it is possible to issue additional assets. | |
− | + | "signature" - Signature of all transaction data, Base58-encoded | |
− | '' ' | + | '''Request JSON example:''' |
− | + | { | |
− | + | "name": "Test Asset 1", | |
− | + | "description": "Some description", | |
− | + | "sender": "3NBVqYXrapgJP9atQccdBPAgJPwHDKkh6A8", | |
− | + | "senderPublicKey": "CRxqEuxhdZBEHX42MU4FfyJxuHmbDBTaHMhM3Uki7pLw", | |
− | + | "quantity": 100000000000, | |
− | + | "decimals": 8, | |
− | + | "reissuable": true, | |
− | + | "fee": 100000000, | |
− | + | "timestamp": 1479287120875, | |
− | + | "signature": "3cCKi3D17ysyEVg2cd3JGpCzm6ovL3HF8qDksX41oPLEqiRmMVZ2C8QJjs2Utd9YfQfzuEVRyzLsqPer89qAfo1A" | |
− | + | } | |
− | '' ' | + | '''Response params:''' |
− | + | "type" - Transaction type (3 for IssueTransaction) | |
− | + | "id" - Id(hash) of transaction in Base58 format | |
− | + | "assetId" - Asset ID in Base58 format, effectively equals tx id | |
− | + | "fee" - Transaction fee | |
− | + | "timestamp" - Transaction timestamp | |
− | + | "sender" - Sender account's address, Base58-encoded | |
− | + | "senderPublicKey" - Sender account's public key, Base58-encoded | |
− | + | "name" - Asset name | |
− | + | "description" - Asset description | |
− | + | "quantity" - Quantity of asset'lets | |
− | + | "decimals" - Number of decimals to represent a piece of asset | |
− | + | "reissuable" - Boolean flag whether it is possible to issue additional assets. | |
− | + | "signature" - Signature of all transaction data, Base58-encoded | |
− | '' ' | + | '''Response JSON example:''' |
− | + | { | |
− | + | "type": 3, | |
− | + | "id": "E9yZC4cVhCDfbjFJCc9CqkAtkoFy5KaCe64iaxHM2adG", | |
− | + | "sender": "3NBVqYXrapgJP9atQccdBPAgJPwHDKkh6A8", | |
− | + | "senderPublicKey": "CRxqEuxhdZBEHX42MU4FfyJxuHmbDBTaHMhM3Uki7pLw", | |
− | + | "assetId": "E9yZC4cVhCDfbjFJCc9CqkAtkoFy5KaCe64iaxHM2adG", | |
− | + | "name": "2bNcNL6HTQeVaJe9v", | |
− | + | "description": "BJa6cfyHD5f9r6B4A9kEmB", | |
− | + | "quantity": 100000000000, | |
− | + | "decimals": 8, | |
− | + | "reissuable": true, | |
− | + | "fee": 100000000, | |
− | + | "timestamp": 1479210401734, | |
− | + | "signature": "4AKyeVcMMx9hUNpqQpeF5QPf5oWquyWk8avy524ZCXM6KdbYWpQZYf72NidzqSF3Prc6HA3DKEgdrCEhCcqw6Xbq" | |
− | + | } | |
− | ===== | + | ===== POST /assets/broadcast/reissue ===== |
− | + | Re-issue additional quantity of the Asset. Publish signed Asset re-issue transaction to the network. | |
− | '' ' | + | '''Request params:''' |
− | + | "assetId" - Asset ID previously issued, Base58-encoded | |
− | + | "senderPublicKey" - Sender account's public key, Base58-encoded | |
− | + | "fee" - Transaction fee for Asset issue, min = 100000 | |
− | + | "quantity" - Additional quantity of asset'lets to issue (number of indivisible pieces of assets) | |
− | + | "reissuable" - Boolean flag whether it is possible to issue additional assets | |
− | + | "timestamp" - Transaction timestamp | |
− | + | "signature" - Signature of all transaction data, Base58-encoded | |
− | '' ' | + | '''Request JSON example:''' |
− | + | { | |
− | + | "quantity": 22300000000, | |
− | + | "assetId": "E9yZC4cVhCDfbjFJCc9CqkAtkoFy5KaCe64iaxHM2adG", | |
− | + | "senderPublicKey": "CRxqEuxhdZBEHX42MU4FfyJxuHmbDBTaHMhM3Uki7pLw", | |
− | + | "reissuable": true, | |
− | + | "fee": 100000, | |
− | + | "timestamp": 1479221697312, | |
− | + | "signature": "49Gp5qit4GF5723LxQLjsBRoyJKKH41LpNUzwwi2ZM6dXuE9a18ApAJt9sfK3uMpjD1PiHXshS31nN9NtpYm8veu" | |
− | '' ' | + | } |
+ | '''Response params:''' | ||
− | + | "type" - Transaction type (5 for ReissueTransaction) | |
− | + | Others the same as in [Broadcast Issue Assets] | |
− | '' ' | + | '''Response JSON example:'''' |
− | + | { | |
− | + | "type": 5, | |
− | + | "id": "2fA4nzfCXrPmpAscwGrLoL6JHTa1u4eRLv5vbohzVxBn", | |
− | + | "sender": "3NBVqYXrapgJP9atQccdBPAgJPwHDKkh6A8", | |
− | + | "senderPublicKey": "CRxqEuxhdZBEHX42MU4FfyJxuHmbDBTaHMhM3Uki7pLw", | |
− | + | "assetId": "E9yZC4cVhCDfbjFJCc9CqkAtkoFy5KaCe64iaxHM2adG", | |
− | + | "quantity": 22300000000, | |
− | + | "reissuable": true, | |
− | + | "fee": 100000, | |
− | + | "timestamp": 1479221697312, | |
− | + | "signature": "49Gp5qit4GF5723LxQLjsBRoyJKKH41LpNUzwwi2ZM6dXuE9a18ApAJt9sfK3uMpjD1PiHXshS31nN9NtpYm8veu" | |
− | + | } | |
− | ===== POST / assets / broadcast / burn ===== | + | ===== POST /assets/broadcast/burn ===== |
− | + | Burn quantity of the Asset. Publish signed Asset burn transaction to the network. | |
− | '' ' | + | '''Request params:''' |
− | + | "assetId" - Asset ID previously issued, Base58-encoded | |
− | + | "senderPublicKey" - Sender account's public key, Base58-encoded | |
− | + | "fee" - Transaction fee for Asset issue, min = 100000 | |
− | + | "amount" - amount of asset'lets to burn (number of indivisible pieces of assets) | |
− | + | "timestamp" - Transaction timestamp | |
− | + | "signature" - Signature of all transaction data, Base58-encoded | |
− | '' ' | + | '''Request JSON example:''' |
− | + | { | |
− | + | "senderPublicKey" : "EHDZiTW9uhZmpfKRyJtusHXCQ3ABwJ3t9dxZdiPp2GZC", | |
− | + | "fee" : 100000000, | |
− | + | "timestamp" : 1495623946088, | |
− | + | "signature" : "4sWPrZFpR379XC4Med1y8AK2Avmx8nVUxVAzsE4QMzEeMtQyHgjzfQsi2Y5VY7diCqMAzohy9ZSTP3yfiB3QPQMd", | |
− | + | "assetId" : "AP5dp4LsmdU7dKHDcgm6kcWmeaqzWi2pXyemrn4yTzfo", | |
− | + | "amount" : 50000 | |
− | + | } | |
− | '' ' | + | '''Response JSON example:''' |
− | + | { | |
− | + | "type" : 6, | |
− | + | "id" : "AoqmyXSurAoLqH5zbcKPtksdPwadgudhE7tZ495cQDWs", | |
− | + | "sender" : "3HRUALDoUaWAmAndWRqhbiQFoqgamhAVggE", | |
− | + | "senderPublicKey" : "EHDZiTW9uhZmpfKRyJtusHXCQ3ABwJ3t9dxZdiPp2GZC", | |
− | + | "fee" : 100000000, | |
− | + | "timestamp" : 1495623946088, | |
− | + | "signature" : "4sWPrZFpR379XC4Med1y8AK2Avmx8nVUxVAzsE4QMzEeMtQyHgjzfQsi2Y5VY7diCqMAzohy9ZSTP3yfiB3QPQMd", | |
− | + | "assetId" : "AP5dp4LsmdU7dKHDcgm6kcWmeaqzWi2pXyemrn4yTzfo", | |
− | + | "amount" : 50000 | |
− | + | } | |
− | ===== POST / assets / broadcast / transfer ===== | + | ===== POST /assets/broadcast/transfer===== |
− | + | Publish signed Asset transfer from one address to another as a transaction to the network. | |
− | '' ' | + | '''Request params:''' |
− | + | "assetId" [optional] - Asset ID to transfer or omit that param when transfer WAVES, Base58-encoded | |
− | + | "senderPublicKey" - Sender account's public key, Base58-encoded | |
− | + | "recipient" - Recipient account's address, Base58-encoded | |
− | + | "fee" - Transaction fee for Asset transfer, min = 100000 (WAVElets) | |
− | + | "feeAssetId" [optional] - Asset ID of transaction fee. WAVES by default, if empty or absent | |
− | + | "amount" - amount of asset'lets (or wavelets) to transfer | |
− | + | "attachment" - Arbitrary additional data included in transaction, max length is 140 bytes, Base58-encoded | |
− | + | "timestamp" - Transaction timestamp | |
− | + | "signature" - Signature of all transaction data, Base58-encoded | |
− | '' ' | + | '''Request JSON example:''' |
− | + | { | |
− | + | "assetId": "E9yZC4cVhCDfbjFJCc9CqkAtkoFy5KaCe64iaxHM2adG", | |
− | + | "senderPublicKey": "CRxqEuxhdZBEHX42MU4FfyJxuHmbDBTaHMhM3Uki7pLw", | |
− | + | "recipient": "3Mx2afTZ2KbRrLNbytyzTtXukZvqEB8SkW7", | |
− | + | "fee": 100000, | |
− | + | "amount": 5500000000, | |
− | + | "attachment": "BJa6cfyGUmzBFTj3vvvaew", | |
− | + | "timestamp": 1479222433704, | |
− | + | "signature": "2TyN8pNS7mS9gfCbX2ktpkWVYckoAmRmDZzKH3K35DKs6sUoXHArzukV5hvveK9t79uzT3cA8CYZ9z3Utj6CnCEo" | |
− | + | } | |
− | '' ' | + | '''Response params:''' |
− | + | "type" - Transaction type (4 for TransferTransaction) | |
− | + | "id" - Id(hash) of transaction, Base58-encoded | |
− | + | "assetId" - Asset ID in Base58 format, effectively equals transaction id | |
− | + | "timestamp" - Transaction timestamp | |
− | + | "sender" - Sender account's address, Base58-encoded | |
− | + | "senderPublicKey" - Sender account's public key, Base58-encoded | |
− | + | "recipient" - Recipient account's address, Base58-encoded | |
− | + | "feeAsset" - Asset ID of transaction fee, currently is null, i.e. WAVES | |
− | + | "fee" - Amount of transaction fee | |
− | + | "attachment" - Attachment, Base58-encoded | |
− | + | "signature" - Signature of all transaction data, Base58-encoded | |
− | + | '''Response JSON example:''' | |
− | '' ' | ||
− | + | { | |
− | + | "type": 4, | |
− | + | "id": "3xPyT73TGV7c5PKEJpicwSsX7PXyi3Lm1JFNQivFRLuy", | |
− | + | "sender": "3NBVqYXrapgJP9atQccdBPAgJPwHDKkh6A8", | |
− | + | "senderPublicKey": "CRxqEuxhdZBEHX42MU4FfyJxuHmbDBTaHMhM3Uki7pLw", | |
− | + | "recipient": "3Mx2afTZ2KbRrLNbytyzTtXukZvqEB8SkW7", | |
− | + | "assetId": "E9yZC4cVhCDfbjFJCc9CqkAtkoFy5KaCe64iaxHM2adG", | |
− | + | "amount": 5500000000, | |
− | + | "feeAsset": null, | |
− | + | "fee": 100000, | |
− | + | "timestamp": 1479222433704, | |
− | + | "attachment": "BJa6cfyGUmzBFTj3vvvaew", | |
− | + | "signature": "2TyN8pNS7mS9gfCbX2ktpkWVYckoAmRmDZzKH3K35DKs6sUoXHArzukV5hvveK9t79uzT3cA8CYZ9z3Utj6CnCEo" | |
− | + | } | |
− | ===== POST / assets / broadcast / batch-transfer ===== | + | ===== POST /assets/broadcast/batch-transfer ===== |
− | + | Publish many signed Asset transfer from one address to another as a transaction to the network. The current limit on the size of the JSON object sent is 1 megabyte. | |
− | '' ' | + | '''Request params:''' |
− | + | Array of JSON Objects: | |
− | + | "assetId" [optional] - Asset ID to transfer or omit that param when transfer WAVES, Base58-encoded | |
− | + | "senderPublicKey" - Sender account's public key, Base58-encoded | |
− | + | "recipient" - Recipient account's address, Base58-encoded | |
− | + | "fee" - Transaction fee for Asset transfer, min = 100000 (WAVElets) | |
− | + | "feeAssetId" [optional] - Asset ID of transaction fee. WAVES by default, if empty or absent | |
− | + | "amount" - amount of asset'lets (or wavelets) to transfer | |
− | + | "attachment" - Arbitrary additional data included in transaction, max length is 140 bytes, Base58-encoded | |
− | + | "timestamp" - Transaction timestamp | |
− | + | "signature" - Signature of all transaction data, Base58-encoded | |
− | '' ' | + | '''Request JSON example:''' |
− | + | [{ | |
− | + | "assetId": "E9yZC4cVhCDfbjFJCc9CqkAtkoFy5KaCe64iaxHM2adG", | |
− | + | "senderPublicKey": "CRxqEuxhdZBEHX42MU4FfyJxuHmbDBTaHMhM3Uki7pLw", | |
− | + | "recipient": "3Mx2afTZ2KbRrLNbytyzTtXukZvqEB8SkW7", | |
− | + | "fee": 100000, | |
− | + | "amount": 5500000000, | |
− | + | "attachment": "BJa6cfyGUmzBFTj3vvvaew", | |
− | + | "timestamp": 1479222433704, | |
− | + | "signature": "2TyN8pNS7mS9gfCbX2ktpkWVYckoAmRmDZzKH3K35DKs6sUoXHArzukV5hvveK9t79uzT3cA8CYZ9z3Utj6CnCEo" | |
− | + | }] | |
− | '' ' | + | '''Response params:''' |
− | + | Array of JSON Objects: | |
− | + | "type" - Transaction type (4 for TransferTransaction) | |
− | + | "id" - Id(hash) of transaction, Base58-encoded | |
− | + | "assetId" - Asset ID in Base58 format, effectively equals transaction id | |
− | + | "timestamp" - Transaction timestamp | |
− | + | "sender" - Sender account's address, Base58-encoded | |
− | + | "senderPublicKey" - Sender account's public key, Base58-encoded | |
− | + | "recipient" - Recipient account's address, Base58-encoded | |
− | + | "feeAsset" - Asset ID of transaction fee, currently is null, i.e. WAVES | |
− | + | "fee" - Amount of transaction fee | |
− | + | "attachment" - Attachment, Base58-encoded | |
− | + | "signature" - Signature of all transaction data, Base58-encoded | |
− | '' ' | + | '''Response JSON example:''' |
− | + | [{ | |
− | + | "type": 4, | |
− | + | "id": "3xPyT73TGV7c5PKEJpicwSsX7PXyi3Lm1JFNQivFRLuy", | |
− | + | "sender": "3NBVqYXrapgJP9atQccdBPAgJPwHDKkh6A8", | |
− | + | "senderPublicKey": "CRxqEuxhdZBEHX42MU4FfyJxuHmbDBTaHMhM3Uki7pLw", | |
− | + | "recipient": "3Mx2afTZ2KbRrLNbytyzTtXukZvqEB8SkW7", | |
− | + | "assetId": "E9yZC4cVhCDfbjFJCc9CqkAtkoFy5KaCe64iaxHM2adG", | |
− | + | "amount": 5500000000, | |
− | + | "feeAsset": null, | |
− | + | "fee": 100000, | |
− | + | "timestamp": 1479222433704, | |
− | + | "attachment": "BJa6cfyGUmzBFTj3vvvaew", | |
− | + | "signature": "2TyN8pNS7mS9gfCbX2ktpkWVYckoAmRmDZzKH3K35DKs6sUoXHArzukV5hvveK9t79uzT3cA8CYZ9z3Utj6CnCEo" | |
− | + | }] | |
− | ==== | + | ====Private Functions==== |
− | + | All private functions bellow require API Key to be provided in every HTTP request as api_key header. That key should correspond with apiKeyHash setting in the .json configuration file. | |
− | ===== | + | =====POST /assets/issue===== |
− | + | Issue a new Asset for an address that exists in the node's wallet. | |
− | '' ' | + | '''Request params:''' |
− | + | The same as in [Broadcast Issue Assets] besides `senderPublicKey`, `timestamp` and `signature` params. | |
− | + | "sender" - Sender account's address that exists in the node's wallet, Base58-encoded | |
− | '' ' | + | '''Request JSON example:''' |
− | + | { | |
− | + | "name": "Test Asset 1", | |
− | + | "quantity": 100000000000, | |
− | + | "description": "Some description", | |
− | + | "sender": "3NBVqYXrapgJP9atQccdBPAgJPwHDKkh6A8", | |
− | + | "decimals": 8, | |
− | + | "reissuable": true, | |
− | + | "fee": 100000000 | |
− | + | } | |
− | '' ' | + | '''Response params:''' |
− | + | The same as in [Broadcast Issue Assets] | |
− | '' ' | + | '''Response JSON example:''' |
− | + | The same as in [Broadcast Issue Assets] | |
− | ===== | + | =====POST /assets/reissue===== |
− | + | Re-issue an additional quantity of the Asset | |
− | '' ' | + | '''Request params:''' |
− | + | The same as in [Broadcast Reissue Assets] besides `senderPublicKey`, `timestamp` and `signature` params. | |
− | + | "sender" - Sender account's address that exists in the node's wallet, Base58-encoded | |
− | '' ' | + | '''Request JSON example:''' |
− | + | { | |
− | + | "quantity": 22300000000, | |
− | + | "assetId": "E9yZC4cVhCDfbjFJCc9CqkAtkoFy5KaCe64iaxHM2adG", | |
− | + | "sender": "3NBVqYXrapgJP9atQccdBPAgJPwHDKkh6A8", | |
− | + | "reissuable": true, | |
− | '' ' | + | "fee": 100000 |
+ | } | ||
+ | '''Response params:''' | ||
− | + | The same as in [Broadcast Reissue Assets] | |
− | '' ' | + | '''Response JSON example:''' |
− | + | The same as in [Broadcast Reissue Assets] | |
− | ===== POST / assets / burn ===== | + | =====POST /assets/burn===== |
− | + | Burn quantity of the Asset. | |
− | '' ' | + | '''Request params:''' |
− | + | "assetId" - Asset ID previously issued, Base58-encoded | |
− | + | "sender" - Sender address, Base58-encoded | |
− | + | "fee" - Transaction fee for Asset issue, min = 100000 | |
− | + | "amount" - amount of asset'lets to burn (number of indivisible pieces of assets) | |
− | '' ' | + | '''Request JSON example:''' |
− | + | { | |
− | + | "sender" : "EHDZiTW9uhZmpfKRyJtusHXCQ3ABwJ3t9dxZdiPp2GZC", | |
− | + | "fee" : 100000000, | |
− | + | "assetId" : "AP5dp4LsmdU7dKHDcgm6kcWmeaqzWi2pXyemrn4yTzfo", | |
− | + | "amount" : 50000 | |
− | + | } | |
− | '' ' | + | '''Response JSON example:''' |
− | + | { | |
− | + | "type" : 6, | |
− | + | "id" : "AoqmyXSurAoLqH5zbcKPtksdPwadgudhE7tZ495cQDWs", | |
− | + | "sender" : "3HRUALDoUaWAmAndWRqhbiQFoqgamhAVggE", | |
− | + | "senderPublicKey" : "EHDZiTW9uhZmpfKRyJtusHXCQ3ABwJ3t9dxZdiPp2GZC", | |
− | + | "fee" : 100000000, | |
− | + | "timestamp" : 1495623946088, | |
− | + | "signature" : "4sWPrZFpR379XC4Med1y8AK2Avmx8nVUxVAzsE4QMzEeMtQyHgjzfQsi2Y5VY7diCqMAzohy9ZSTP3yfiB3QPQMd", | |
− | + | "assetId" : "AP5dp4LsmdU7dKHDcgm6kcWmeaqzWi2pXyemrn4yTzfo", | |
− | + | "amount" : 50000 | |
− | + | } | |
− | ===== POST / assets / transfer ===== | + | =====POST /assets/transfer===== |
− | + | Create transaction to transfer assets from one address to another. | |
− | '' ' | + | '''Request params:''' |
− | + | The same as in [Broadcast Transfer Assets] besides `senderPublicKey`, `timestamp` and `signature` params. | |
− | + | "sender" - Sender account's address that exists in the node's wallet, Base58-encoded | |
− | '' ' | + | '''Request JSON example:''' |
− | + | { | |
− | + | "assetId": "E9yZC4cVhCDfbjFJCc9CqkAtkoFy5KaCe64iaxHM2adG", | |
− | + | "sender": "3NBVqYXrapgJP9atQccdBPAgJPwHDKkh6A8", | |
− | + | "recipient": "3Mx2afTZ2KbRrLNbytyzTtXukZvqEB8SkW7", | |
− | + | "fee": 100000, | |
− | + | "amount": 5500000000, | |
− | + | "attachment": "BJa6cfyGUmzBFTj3vvvaew" | |
− | + | } | |
− | '' ' | + | '''Response params:''' |
− | [ | + | The same as in [Broadcast Transfer Assets] |
− | '' ' | + | '''Response JSON example:''' |
− | + | The same as in [Broadcast Transfer Assets] | |
− | ===== POST / assets / make-asset-name-unique ===== | + | =====POST /assets/make-asset-name-unique===== |
− | + | Create transaction to make asset name unique. | |
− | '' ' | + | '''Request params:''' |
− | + | "assetId" - Asset ID previously issued, Base58-encoded | |
− | + | "sender" - Sender address, Base58-encoded | |
− | + | "fee" - Transaction fee for Asset issue, min = 100000 | |
− | + | "networkByte" - network byte ('W' - 87 - mainnet, 'T' - 84 - testnet) | |
− | '' ' | + | '''Request JSON example:''' |
− | + | { | |
− | + | "sender" : "3Hb3qXPdr3UikMBefgyu6dZKwG5Hjuphpc4", | |
− | + | "fee" : 1000000000, | |
− | + | "assetId" : "91MxUYbum9hrpJUcRwVe4no36ViqnQGAUaSmM8V8L8Jx", | |
− | + | "networkByte" : 73 | |
− | + | } | |
− | '' ' | + | '''Response JSON example:''' |
− | + | { | |
− | + | "type" : 11, | |
− | + | "id" : "GRhSHwLLNFz2HmxabiPU521U4NAkLshk2wgqbD9EBqEA", | |
− | + | "sender" : "3Hb3qXPdr3UikMBefgyu6dZKwG5Hjuphpc4", | |
− | + | "senderPublicKey" : "8fYJWvPAyUQgVCMuSVNwpZEAgg4E4vn8gz9hRWMsRu31", | |
− | + | "fee" : 1000000000, | |
− | + | "timestamp" : 1495637586986, | |
− | + | "signature" : "2XCbkLbKhKJrcnCUg18LEBykC54cUqtxCMbVpNrzDkXHJG11ZLQB9vSz2Ha8r4hCqgFPRAvvoo4zFecv27v4DCB3", | |
− | + | "assetId" : "91MxUYbum9hrpJUcRwVe4no36ViqnQGAUaSmM8V8L8Jx", | |
− | + | "networkByte" : 73 | |
− | + | } | |
− | ==== | + | ====Lease Transactions==== |
− | ===== | + | =====POST /leasing/lease===== |
− | + | Creates lease transaction. | |
− | '' ' | + | '''Request params''' |
− | + | "sender" - Sender address, Base58-encoded | |
− | + | "fee" - Amount of transaction fee | |
− | + | "amount" - amount of leased waves | |
− | '' ' | + | '''Request JSON example''' |
− | + | { | |
− | + | "sender" : "3HgqG68qfeVz5dqbyvqnxQceFaH49xmGvUS", | |
− | + | "fee" : 500000000, | |
− | + | "amount" : 500000000, | |
− | + | "recipient" : "address:3HQanDJhZSsSLbCjTCsMYpPvuj2ieGwKwQ9" | |
− | + | } | |
− | '' ' | + | '''Response JSON example''' |
− | + | { | |
− | + | "type":10, | |
− | + | "id":"9q7X84wFuVvKqRdDQeWbtBmpsHt9SXFbvPPtUuKBVxxr", | |
− | + | "sender":"3MtrNP7AkTRuBhX4CBti6iT21pQpEnmHtyw", | |
− | + | "senderPublicKey":"G6h72icCSjdW2A89QWDb37hyXJoYKq3XuCUJY2joS3EU", | |
− | + | "fee":100000000, | |
− | + | "timestamp":46305781705234713, | |
− | + | "signature":"4gQyPXzJFEzMbsCd9u5n3B2WauEc4172ssyrXCL882oNa8NfNihnpKianHXrHWnZs1RzDLbQ9rcRYnSqxKWfEPJG", | |
− | + | "alias":"dajzmj6gfuzmbfnhamsbuxivc" | |
− | + | } | |
− | ===== | + | =====POST /leasing/cancel===== |
− | + | Creates lease cancel transaction. | |
− | '' ' | + | '''Request params''' |
− | + | "sender" - Sender address, Base58-encoded | |
− | + | "fee" - Amount of transaction fee | |
− | + | "leaseId" - lease id for cancel | |
− | '' ' | + | '''Request JSON example''' |
− | + | { | |
− | + | "sender" : "3HgqG68qfeVz5dqbyvqnxQceFaH49xmGvUS", | |
− | + | "fee" : 500000000, | |
− | + | "leaseId" : "CYPYhYe9M94t958Nsa3DcYNBZTURwcFgQ3ojyjwEeZiK" | |
− | + | } | |
− | '' ' | + | '''Response JSON example''' |
− | + | { | |
− | + | "type" : 9, | |
− | + | "id" : "895ryYABK7KQWLvSbw8o8YSjTTXHCqRJw1yzC63j4Fgk", | |
− | + | "sender" : "3HgqG68qfeVz5dqbyvqnxQceFaH49xmGvUS", | |
− | + | "senderPublicKey" : "DddGQs63eWAA1G1ZJnJDVSrCpMS97NH4odnggwUV42kE", | |
− | + | "fee" : 500000000, | |
− | + | "timestamp" : 1495625418143, | |
− | + | "signature" : "2SUmFj4zo7NfZK7Xoqvqh7m7bhzFR8rT7eLtqe9Rrp18ugFH9SSvoTx1BtekWhU7PN1uLrnQCpJdS8JhmcBAjmb9", | |
− | + | "leaseId" : "CYPYhYe9M94t958Nsa3DcYNBZTURwcFgQ3ojyjwEeZiK" | |
− | + | } | |
− | ===== | + | =====POST /leasing/broadcast/lease===== |
− | + | Creates signed lease transaction. | |
− | '' ' | + | '''Request params''' |
− | + | "senderPublicKey" - Sender account's public key, Base58-encoded | |
− | + | "fee" - Amount of transaction fee | |
− | + | "amount" - amount of leased waves | |
− | + | "timestamp" - Transaction timestamp | |
− | + | "signature" - Signature of all transaction data, Base58-encoded | |
− | '' ' | + | '''Request JSON example''' |
− | + | { | |
− | + | "senderPublicKey" : "DddGQs63eWAA1G1ZJnJDVSrCpMS97NH4odnggwUV42kE", | |
− | + | "fee" : 500000000, | |
− | + | "timestamp" : 1495625416995, | |
− | + | "signature" : "rpvX5xpSZBxHSp8bais3MAzi4RbqiSWiCUQsgTt392ni8xEoohXv9TaHNYcXG4AsYNs8iUi8jQ5kLNokZiYDV1f", | |
− | + | "amount" : 500000000, | |
− | + | "recipient" : "address:3HQanDJhZSsSLbCjTCsMYpPvuj2ieGwKwQ9" | |
− | + | } | |
− | '' ' | + | '''Response JSON example''' |
− | + | { | |
− | + | "type" : 8, | |
− | + | "id" : "CYPYhYe9M94t958Nsa3DcYNBZTURwcFgQ3ojyjwEeZiK", | |
− | + | "sender" : "3HgqG68qfeVz5dqbyvqnxQceFaH49xmGvUS", | |
− | + | "senderPublicKey" : "DddGQs63eWAA1G1ZJnJDVSrCpMS97NH4odnggwUV42kE", | |
− | + | "fee" : 500000000, | |
− | + | "timestamp" : 1495625416995, | |
− | + | "signature" : "rpvX5xpSZBxHSp8bais3MAzi4RbqiSWiCUQsgTt392ni8xEoohXv9TaHNYcXG4AsYNs8iUi8jQ5kLNokZiYDV1f", | |
− | + | "amount" : 500000000, | |
− | + | "recipient" : "address:3HQanDJhZSsSLbCjTCsMYpPvuj2ieGwKwQ9" | |
− | + | } | |
− | ===== | + | =====POST /leasing/broadcast/cancel===== |
− | + | Creates signed lease cancel transaction. | |
− | '' ' | + | '''Request params''' |
− | + | "senderPublicKey" - Sender account's public key, Base58-encoded | |
− | + | "fee" - Amount of transaction fee | |
− | + | "leaseId" - lease id for cancel | |
− | + | "timestamp" - Transaction timestamp | |
− | + | "signature" - Signature of all transaction data, Base58-encoded | |
− | '' ' | + | '''Request JSON example''' |
− | + | { | |
− | + | "senderPublicKey" : "DddGQs63eWAA1G1ZJnJDVSrCpMS97NH4odnggwUV42kE", | |
− | + | "fee" : 500000000, | |
− | + | "timestamp" : 1495625418143, | |
− | + | "signature" : "2SUmFj4zo7NfZK7Xoqvqh7m7bhzFR8rT7eLtqe9Rrp18ugFH9SSvoTx1BtekWhU7PN1uLrnQCpJdS8JhmcBAjmb9", | |
− | + | "leaseId" : "CYPYhYe9M94t958Nsa3DcYNBZTURwcFgQ3ojyjwEeZiK" | |
− | + | } | |
− | '' ' | + | '''Response JSON example''' |
− | + | { | |
− | + | "type" : 9, | |
− | + | "id" : "895ryYABK7KQWLvSbw8o8YSjTTXHCqRJw1yzC63j4Fgk", | |
− | + | "sender" : "3HgqG68qfeVz5dqbyvqnxQceFaH49xmGvUS", | |
− | + | "senderPublicKey" : "DddGQs63eWAA1G1ZJnJDVSrCpMS97NH4odnggwUV42kE", | |
− | + | "fee" : 500000000, | |
− | + | "timestamp" : 1495625418143, | |
− | + | "signature" : "2SUmFj4zo7NfZK7Xoqvqh7m7bhzFR8rT7eLtqe9Rrp18ugFH9SSvoTx1BtekWhU7PN1uLrnQCpJdS8JhmcBAjmb9", | |
− | + | "leaseId" : "CYPYhYe9M94t958Nsa3DcYNBZTURwcFgQ3ojyjwEeZiK" | |
− | + | } | |
− | ==== | + | ====Alias Transactions==== |
− | ===== POST / | + | =====POST /alias/broadcast/create===== |
− | + | Creates signed alias transaction for sender's address. | |
− | '' ' | + | '''Request params''' |
− | + | "senderPublicKey" - Sender account's public key, Base58-encoded | |
− | + | "fee" - Amount of transaction fee | |
− | + | "alias" - alias for a sender's address | |
− | + | "timestamp" - Transaction timestamp | |
− | + | "signature" - Signature of all transaction data, Base58-encoded | |
− | '' ' | + | '''Request JSON example''' |
− | + | { | |
− | + | "senderPublicKey": "CRxqEuxhdZBEHX42MU4FfyJxuHmbDBTaHMhM3Uki7pLw", | |
− | "fee" | + | "fee": 100000, |
− | + | "alias": "ALIAS", | |
− | + | "timestamp": 1488807184731, | |
− | + | "signature": "3aB6cL1osRNopWyqBYpJQCVCXNLibkwM58dvK85PaTK5sLV4voMhe5E8zEARM6YDHnQP5YE3WX8mxdFp3ciGwVfy" | |
− | + | } | |
− | '' ' | + | '''Response JSON example''' |
− | + | { | |
− | + | "type":10, | |
− | + | "id":"9q7X84wFuVvKqRdDQeWbtBmpsHt9SXFbvPPtUuKBVxxr", | |
− | + | "sender":"3MtrNP7AkTRuBhX4CBti6iT21pQpEnmHtyw", | |
− | + | "senderPublicKey":"G6h72icCSjdW2A89QWDb37hyXJoYKq3XuCUJY2joS3EU", | |
− | + | "fee":100000000, | |
− | + | "timestamp":46305781705234713, | |
− | + | "signature":"4gQyPXzJFEzMbsCd9u5n3B2WauEc4172ssyrXCL882oNa8NfNihnpKianHXrHWnZs1RzDLbQ9rcRYnSqxKWfEPJG", | |
− | + | "alias":"dajzmj6gfuzmbfnhamsbuxivc" | |
− | + | } | |
− | ===== POST / | + | =====POST /alias/create===== |
− | '' ' | + | '''Request params''' |
− | + | "sender" - Sender's addresss, Base58-encoded | |
− | + | "fee" - Amount of transaction fee | |
− | + | "alias" - alias for a sender's address | |
− | '' ' | + | '''Request JSON example''' |
− | + | { | |
− | + | "sender": "3MtrNP7AkTRuBhX4CBti6iT21pQpEnmHtyw", | |
− | + | "fee": 100000, | |
− | + | "alias": "ALIAS", | |
− | + | } | |
− | '' ' | + | '''Response JSON example''' |
− | + | { | |
− | + | "type":10, | |
− | + | "id":"9q7X84wFuVvKqRdDQeWbtBmpsHt9SXFbvPPtUuKBVxxr", | |
− | + | "sender":"3MtrNP7AkTRuBhX4CBti6iT21pQpEnmHtyw", | |
− | + | "senderPublicKey":"G6h72icCSjdW2A89QWDb37hyXJoYKq3XuCUJY2joS3EU", | |
− | + | "fee":100000000, | |
− | + | "timestamp":46305781705234713, | |
− | + | "signature":"4gQyPXzJFEzMbsCd9u5n3B2WauEc4172ssyrXCL882oNa8NfNihnpKianHXrHWnZs1RzDLbQ9rcRYnSqxKWfEPJG", | |
− | + | "alias":"dajzmj6gfuzmbfnhamsbuxivc" | |
− | + | } | |
− | ===== GET / | + | =====GET /alias/by-alias/{alias}===== |
− | '' ' | + | '''Request params''' |
− | + | "alias" - alias | |
− | '' ' | + | '''Response JSON example''' |
− | + | { | |
− | + | "address": "address:3Mx2afTZ2KbRrLNbytyzTtXukZvqEB8SkW7" | |
− | + | } | |
− | ===== GET / | + | =====GET /alias/by-address/{address}===== |
− | '' ' | + | '''Request params''' |
− | + | "address" - address | |
− | '' ' | + | '''Response JSON example''' |
− | + | [ | |
− | + | "alias:HUMANREADABLE1", | |
− | + | "alias:HUMANREADABLE2", | |
− | + | "alias:HUMANREADABLE3", | |
− | + | ] | |
− | ==== | + | ====Payment Transactions==== |
− | ===== | + | =====POST /waves/create-signed-payment===== |
− | + | Sign payment using provided wallet seed. | |
− | + | Deprecated. Use Broadcast Transfer Assets instead. | |
− | '' ' | + | '''Request JSON example:''' |
− | + | { | |
− | + | "recipient": "3Mx2afTZ2KbRrLNbytyzTtXukZvqEB8SkW7", | |
− | + | "senderWalletSeed": "FQgbSAm6swGbtqA3NE8PttijPhT4N3Ufh4bHFAkyVnQz", | |
− | + | "timestamp": 1479217631000, | |
− | + | "senderAddressNonce": 0, | |
− | + | "amount": 100000000, | |
− | + | "fee": 100000 | |
− | + | } | |
− | '' ' | + | '''Response JSON example:''' |
− | + | { | |
− | + | "timestamp": 1479217631000, | |
− | + | "amount": 100000000, | |
− | + | "fee": 100000, | |
− | + | "recipient": "3Mx2afTZ2KbRrLNbytyzTtXukZvqEB8SkW7", | |
− | + | "senderPublicKey": "DZUxn4pC7QdYrRqacmaAJghatvnn1Kh1mkE2scZoLuGJ", | |
− | + | "sender": "3N3keodUiS8WLEw9W4BKDNxgNdUpwSnpb3K", | |
− | + | "signature": "2neH3aRvLcoeu21cvW1Cj49DsSpByK67DUVAbU7Gtody2DY1h6moqE4Aio1L7LgEwVb7A3jgD84czCC5mrkd98uW" | |
− | + | } | |
− | ===== POST / waves / broadcast-signed-payment ===== | + | =====POST /waves/broadcast-signed-payment===== |
− | + | Publish signed payment (created via /waves/create-signed-payment) to the network. | |
− | + | Deprecated. Use Broadcast Transfer Assets instead. | |
− | ''' | + | '''Request:''' |
− | + | { | |
− | + | "timestamp": 1479217631000, | |
− | + | "amount": 100000000, | |
− | + | "fee": 100000, | |
− | + | "recipient": "3Mx2afTZ2KbRrLNbytyzTtXukZvqEB8SkW7", | |
− | + | "senderPublicKey": "DZUxn4pC7QdYrRqacmaAJghatvnn1Kh1mkE2scZoLuGJ", | |
− | + | "sender": "3N3keodUiS8WLEw9W4BKDNxgNdUpwSnpb3K", | |
− | + | "signature": "2neH3aRvLcoeu21cvW1Cj49DsSpByK67DUVAbU7Gtody2DY1h6moqE4Aio1L7LgEwVb7A3jgD84czCC5mrkd98uW" | |
− | + | } | |
− | '' ' | + | '''Response params:''' |
− | + | "type" - Transaction type (2 for PaymentTransaction) | |
− | + | "id" - Id of transaction = signature | |
− | + | "fee" - Transaction fee | |
− | + | "timestamp" - Transaction timestamp | |
− | + | "seder" - Sender account's address, Base58-encoded | |
− | + | "senderPublicKey" - Sender account's public key, Base58-encoded | |
− | + | "recipient" - Recipient account's address, Base58-encoded | |
− | + | "amount" - Transaction amount in WAVES | |
− | + | "signature" - Signature of all transaction data, Base58-encoded | |
− | '' ' | + | '''Response JSON example:''' |
− | + | { | |
− | + | "type": 2, | |
− | + | "id": "2neH3aRvLcoeu21cvW1Cj49DsSpByK67DUVAbU7Gtody2DY1h6moqE4Aio1L7LgEwVb7A3jgD84czCC5mrkd98uW", | |
− | + | "fee": 100000, | |
− | + | "timestamp": 1479217631000, | |
− | + | "signature": "2neH3aRvLcoeu21cvW1Cj49DsSpByK67DUVAbU7Gtody2DY1h6moqE4Aio1L7LgEwVb7A3jgD84czCC5mrkd98uW", | |
− | + | "sender": "3N3keodUiS8WLEw9W4BKDNxgNdUpwSnpb3K", | |
− | + | "senderPublicKey": "DZUxn4pC7QdYrRqacmaAJghatvnn1Kh1mkE2scZoLuGJ", | |
− | + | "recipient": "3Mx2afTZ2KbRrLNbytyzTtXukZvqEB8SkW7", | |
− | + | "amount": 100000000 | |
− | + | } | |
− | ## | + | ##Transactions |
− | ===== GET / transactions / info / {id} ===== | + | =====GET /transactions/info/{id}===== |
− | + | Return transaction data by transaction ID (signature or hash). | |
− | '' ' | + | '''Request params:''' |
− | + | "signature" - Transaction ID | |
− | '' ' | + | '''Response JSON example:''' |
− | + | { | |
− | + | "type": 4, | |
− | + | "id": "52GG9U2e6foYRKp5vAzsTQ86aDAABfRJ7synz7ohBp19", | |
− | + | "sender": "3NBVqYXrapgJP9atQccdBPAgJPwHDKkh6A8", | |
− | + | "senderPublicKey": "CRxqEuxhdZBEHX42MU4FfyJxuHmbDBTaHMhM3Uki7pLw", | |
− | + | "recipient": "3NBVqYXrapgJP9atQccdBPAgJPwHDKkh6A8", | |
− | + | "assetId": "E9yZC4cVhCDfbjFJCc9CqkAtkoFy5KaCe64iaxHM2adG", | |
− | + | "amount": 100000, | |
− | + | "feeAsset": null, | |
− | + | "fee": 100000, | |
− | + | "timestamp": 1479313236091, | |
− | + | "attachment": "string", | |
− | + | "signature": "GknccUA79dBcwWgKjqB7vYHcnsj7caYETfncJhRkkaetbQon7DxbpMmvK9LYqUkirJp17geBJCRTNkHEoAjtsUm", | |
− | + | "height": 7782 | |
− | + | } | |
− | ===== GET / | + | =====GET /transactions/address/{address}/limit/{limit}===== |
− | + | Return the specified number of the latest transactions by the given account address. | |
− | '' ' | + | '''Request params:''' |
− | + | "address" - Account's address Base58-encoded | |
− | + | "limit" - Number of transaction to return, max = 50. | |
− | '' ' | + | '''Response JSON example:''' |
− | + | [ | |
− | + | [ | |
− | + | { | |
− | + | "type": 2, | |
− | + | "id": "4XE4M9eSoVWVdHwDYXqZsXhEc4q8PH9mDMUBegCSBBVHJyP2Yb1ZoGi59c1Qzq2TowLmymLNkFQjWp95CdddnyBW", | |
− | + | "fee": 100000, | |
− | + | "timestamp": 1479313097422, | |
− | + | "signature": "4XE4M9eSoVWVdHwDYXqZsXhEc4q8PH9mDMUBegCSBBVHJyP2Yb1ZoGi59c1Qzq2TowLmymLNkFQjWp95CdddnyBW", | |
− | + | "sender": "3NBVqYXrapgJP9atQccdBPAgJPwHDKkh6A8", | |
− | + | "senderPublicKey": "CRxqEuxhdZBEHX42MU4FfyJxuHmbDBTaHMhM3Uki7pLw", | |
− | + | "recipient": "3N9iRMou3pgmyPbFZn5QZQvBTQBkL2fR6R1", | |
− | + | "amount": 1000000000 | |
− | + | } | |
− | + | ] | |
− | + | ] | |
− | ===== GET / | + | =====GET /transactions/unconfirmed===== |
− | + | Return a list of unconfirmed transactions in the node pool. | |
− | '' ' | + | '''Response JSON example:''' |
− | + | [ | |
− | + | { | |
− | + | "type": 4, | |
− | + | "id": "52GG9U2e6foYRKp5vAzsTQ86aDAABfRJ7synz7ohBp19", | |
− | sender" | + | "sender": "3NBVqYXrapgJP9atQccdBPAgJPwHDKkh6A8", |
− | + | "senderPublicKey": "CRxqEuxhdZBEHX42MU4FfyJxuHmbDBTaHMhM3Uki7pLw", | |
− | + | "recipient": "3NBVqYXrapgJP9atQccdBPAgJPwHDKkh6A8", | |
− | + | "assetId": "E9yZC4cVhCDfbjFJCc9CqkAtkoFy5KaCe64iaxHM2adG", | |
− | + | "amount": 100000, | |
− | + | "feeAsset": null, | |
− | + | "fee": 100000, | |
− | + | "timestamp": 1479313236091, | |
− | + | "attachment": "string", | |
− | + | "signature": "GknccUA79dBcwWgKjqB7vYHcnsj7caYETfncJhRkkaetbQon7DxbpMmvK9LYqUkirJp17geBJCRTNkHEoAjtsUm" | |
− | + | } | |
− | + | ] | |
− | ==== | + | ====Peers==== |
− | '' ' | + | '''Connected peers''' |
− | + | Returns list of all currently connected peers to the node. | |
− | '' ' | + | '''Response JSON example:''' |
− | + | { | |
− | + | "peers": [ | |
− | + | { | |
− | + | "address": "52.51.92.182/52.51.92.182:6863", | |
− | + | "declaredAddress": "N/A", | |
− | + | "peerName": "zx 182", | |
− | + | "peerNonce": 183759 | |
− | + | }, | |
− | + | { | |
− | + | "address": "ec2-52-28-66-217.eu-central-1.compute.amazonaws.com/52.28.66.217:6863", | |
− | + | "declaredAddress": "N/A", | |
− | + | "peerName": "zx 217", | |
− | + | "peerNonce": 1021800 | |
− | + | } | |
− | + | ] | |
− | + | } | |
− | '' ' | + | '''Blacklisted peers''' |
− | + | Returns list of all currently blacklisted peers to the node. | |
− | '' ' | + | '''All known peers''' |
− | + | Returns list of all ever known not blacklisted peers with publicly available declared address. | |
− | ==== | + | ====Blocks==== |
− | ===== GET / | + | =====GET /blocks/height===== |
− | + | Return the current blockchain height | |
− | '' ' | + | '''Response JSON example:''' |
− | + | { | |
− | + | "height": 7788 | |
− | + | } | |
− | ===== GET / | + | =====GET /blocks/last===== |
− | + | Return the last block data | |
− | '' ' | + | '''Response JSON example:''' |
− | + | { | |
− | + | "version": 2, | |
− | + | "timestamp": 1479313809528, | |
− | + | "reference": "4MLXQDbARiJDEAoy5vZ8QYh1yNnDhdGhGWkDKna8J6QXb7agVpFEi16hHBGUxxnq8x4myG4w66DR4Ze8FM5dh8Gi", | |
− | + | "nxtconsensus": { | |
− | + | "basetarget": 464, | |
− | "generationsignature" | + | "generationsignature": "7WUV2TufaRAyjiCPFdnAWbn2Q7Jk7nBmWbnnDXKDEeJv" |
− | + | }, | |
− | + | "transactions": [ | |
− | + | { | |
− | + | "type": 2, | |
− | + | "id": "64hxaxZvB9iD1cfRf1j8KPTXs4qE7SHaDWTZKoUvgfVZotaJUtSGa5Bxi86ufAfp5ifoNAGknBqS9CpxBKG9RNVR", | |
− | + | "fee": 100000, | |
− | + | "timestamp": 1479313757194, | |
− | + | "signature": "64hxaxZvB9iD1cfRf1j8KPTXs4qE7SHaDWTZKoUvgfVZotaJUtSGa5Bxi86ufAfp5ifoNAGknBqS9CpxBKG9RNVR", | |
− | + | "sender": "3NBVqYXrapgJP9atQccdBPAgJPwHDKkh6A8", | |
− | + | "senderPublicKey": "CRxqEuxhdZBEHX42MU4FfyJxuHmbDBTaHMhM3Uki7pLw", | |
− | + | "recipient": "3N8UPtqiy322NVr1fLP7SaK1AaCU7oPaVuy", | |
− | + | "amount": 1000000000 | |
− | + | } | |
− | + | ], | |
− | + | "generator": "3N5GRqzDBhjVXnCn44baHcz2GoZy5qLxtTh", | |
− | + | "signature": "4ZhZdLAvaGneLU4K4b2eTgRQvbBjEZrtwo1qAhM9ar3A3weGEutbfNKM4WJ9JZnV8BXenx8JRGVNwpfxf3prGaxd", | |
− | + | "fee": 100000, | |
− | + | "blocksize": 369 | |
− | + | } | |
− | ===== GET / | + | =====GET /blocks/at/{height}===== |
− | + | Return block data at the given height | |
− | ===== GET / blocks / seq / {from} / {to} ===== | + | =====GET /blocks/seq/{from}/{to}===== |
− | + | Return block data at the given height range | |
− | ===== GET / | + | ===== GET /blocks/signature/{signature}===== |
− | + | Return block data by a specified Base58encoded signature | |
− | ===== GET / | + | ===== GET /blocks/address/{address}/{from}/{to}===== |
− | + | Get list of blocks generated by specified address | |
− | ==== Utils ==== | + | ====Utils==== |
− | ===== POST / utils / hash / secure ===== | + | =====POST /utils/hash/secure===== |
− | + | Produce a secure hash of a specified message. | |
− | ''' | + | '''Request:''' |
− | + | ridethewaves! | |
− | '' ' | + | '''Response JSON example:''' |
− | + | { | |
− | + | "message": "ridethewaves!", | |
− | + | "hash": "H6nsiifwYKYEx6YzYD7woP1XCn72RVvx6tC1zjjLXqsu" | |
− | + | } | |
− | ===== POST / utils / hash / fast ===== | + | =====POST /utils/hash/fast===== |
− | + | Fast hash of specified message. | |
− | ''' | + | '''Request:''' |
− | + | ridethewaves! | |
− | '' ' | + | '''Response JSON example:''' |
− | + | { | |
− | + | "message": "ridethewaves!", | |
− | + | "hash": "DJ35ymschUFDmqCnDJewjcnVExVkWgX7mJDXhFy9X8oQ" | |
− | + | } | |
− | ===== GET / utils / seed / {length} ===== | + | ===== GET /utils/seed/{length} ===== |
− | + | Generate a random seed of specified length. | |
− | '' ' | + | '''Response JSON example:''' |
− | + | { | |
− | + | "seed": "3XcHLU6bYRax1c" | |
− | + | } | |
− | ===== GET / utils / seed ===== | + | ===== GET /utils/seed ===== |
− | + | Generate a random seed. | |
− | '' ' | + | '''Response JSON example:''' |
− | + | ||
− | + | { | |
− | + | "seed": "2uwLAe7Rp7TuNiBTKsmTEJ5wxGqkBHjcyPq2tMXiWye7" | |
− | + | } | |
− | == | + | == Cryptographic practical details == |
− | === | + | === Description === |
− | + | This document describes how the algorithms used in the project to create private and public keys from seed, addresses from public key, blocks and transactions signing. There are all the details of the use of cryptographic algorithms in the project area. | |
− | + | Briefly: in the project to create a cryptographic hashes used '''Blake2b256''' and '''Keccak256''' algorithms (in the form of hash chain and separately). '''Curve25519''' scheme applied to create and verify signatures. '''Base58''' is used to create the string form of bytes. If you want to create an application, you should find the implementation of these algorithms on your programming language | |
− | === | + | === Bytes encoding Base58 === |
− | + | In order to ease human readable, all arrays of bytes in the project are encoded by Base58 algorithm with Bitcoin alphabet. | |
− | ==== | + | ==== Example ==== |
− | + | The string ''teststring'' are coded into the bytes ''[5, 83, 9, -20, 82, -65, 120, -11]''. The bytes ''[1, 2, 3, 4, 5]'' are coded into the string ''7bWpTW''. | |
− | === | + | === Creating a private key from a seed === |
− | + | A seed string is a representation of entropy, from which you can re-create deterministically all the private keys for one wallet. It should be long enough so that the probability of selection was a unrealistic negligible. | |
− | + | In fact, seed can be any array of bytes, but for ease of memorization lite wallet uses [https://en.bitcoin.it/wiki/Brainwallet Brainwallet], to ensure that the seed is made up of words, that is easy to write down or remember. The app takes the UTF-8 bytes of the string and uses them to create keys and addresses. | |
− | + | For example, seed string ''manage manual recall harvest series desert melt police rose hollow moral pledge kitten position add'' after reading as UTF-8 bytes and encoding them to Base58 string are coded as ''xrv7ffrv2A9g5pKSxt7gHGrPYJgRnsEMDyc4G7srbia6PhXYLDKVsDxnqsEqhAVbbko7N1tDyaSrWCZBoMyvdwaFNjWNPjKdcoZTKbKr2Vw9vu53Uf4dYpyWCyvfPbRskHfgt9q''. | |
− | + | A seed string is involved with the creation of private keys. To create private key, to 4 bytes of int 'nonce' field (big-endian representation), which initially has a value of 0 and increases every time you create the new address, should be prepended to seed bytes. Then we use this array of bytes for calculate hash `keccak256(blake2b256(bytes))`. This resulting array of bytes we call `account seed`, from it you can definitely generate one private and public key pair. Then this bytes hash passed in the method of creating a pair of public and private key of `Curve25519` algorithm. Some `Curve25519` libraries (as the one used in our project) have the `Sha256` hashing integrated, some not (such as most of c/c++/python libraries), so you may need to apply it manually. | |
− | + | Then this bytes hash passed in the method of creating a pair of public and private key of ''Curve25519'' algorithm. | |
− | ==== | + | ====Example ==== |
− | + | Brainwallet seed string | |
− | + | manage manual recall harvest series desert melt police rose hollow moral pledge kitten position add | |
− | + | As UTF-8 bytes encoded in Base58 | |
− | xrv7ffrv2A9g5pKSxt7gHGrPYJgRnsEMDyc4G7srbia6PhXYLDKVsDxnqsEqhAVbbko7N1tDyaSrWCZBoMyvdwaFNjWNPjKdcoZTKbKr2Vw9vu53Uf4dYpyWCyvfPbRskHfgt9q | + | xrv7ffrv2A9g5pKSxt7gHGrPYJgRnsEMDyc4G7srbia6PhXYLDKVsDxnqsEqhAVbbko7N1tDyaSrWCZBoMyvdwaFNjWNPjKdcoZTKbKr2Vw9vu53Uf4dYpyWCyvfPbRskHfgt9q |
− | + | Account seed bytes before apply hash function | |
− | + | 1111xrv7ffrv2A9g5pKSxt7gHGrPYJgRnsEMDyc4G7srbia6PhXYLDKVsDxnqsEqhAVbbko7N1tDyaSrWCZBoMyvdwaFNjWNPjKdcoZTKbKr2Vw9vu53Uf4dYpyWCyvfPbRskHfgt9q | |
− | + | Account seed | |
− | + | H4do9ZcPUASvtFJHvESapnxfmQ8tjBXMU7NtUARk9Jrf | |
− | `Sha256` | + | Account seed after `Sha256` hashing (optional, if your library does not do it yourself) |
− | + | 49mgaSSVQw6tDoZrHSr9rFySgHHXwgQbCRwFssboVLWX | |
− | + | Created private key | |
− | + | 3kMEhU5z3v8bmer1ERFUUhW58Dtuhyo9hE5vrhjqAWYT | |
− | + | Created public key | |
− | + | HBqhfdFASRQ5eBBpu2y6c6KKi1az6bMx8v1JxX4iW1Q8 | |
− | === | + | ===Creating address from public key === |
− | + | Our network address obtained from the public key depends on the byte chainId ('T' for testnet and 'W' for mainnet), so different networks obtained a different address for a single seed (and hence public keys). Creating a byte addresses described in more detail [https://github.com/wavesplatform/Waves/wiki/Data-Structures#address here]. | |
− | ==== | + | ====Example==== |
− | + | For public key | |
− | + | HBqhfdFASRQ5eBBpu2y6c6KKi1az6bMx8v1JxX4iW1Q8 | |
− | + | in mainnet network (chainId 'W') will be created this address | |
− | + | 3PPbMwqLtwBGcJrTA5whqJfY95GqnNnFMDX | |
− | === | + | ===Signing=== |
− | '' Curve25519 '' | + | ''Curve25519'' is used for all the signatures in the project. |
− | + | The process is as follows: create the special bytes for signing (for transaction or block, you can find it [https://github.com/wavesplatform/Waves/wiki/Data-Structures here]), then create a signature using these bytes and the private key bytes. | |
− | + | For the validation of signature is enough signature bytes, signed object bytes and the public key. | |
− | + | Do not forget that there are many valid (not unique!) signatures for a one array of bytes (block or transaction). Also you should not assume that the id of block or transaction is unique. The collision can occur one day! They have already taken place for some weak keys. | |
− | ==== | + | ==== Example ==== |
− | + | Transaction data: | |
− | + | <table> | |
− | + | <tr> | |
− | + | <th align="left">Field</th> | |
− | + | <th align="right">Value</th> | |
− | + | </tr> | |
− | + | <tr> | |
− | + | <td align="left">Sender address (not used, just for information)</td> | |
− | + | <td align="right">3N9Q2sdkkhAnbR4XCveuRaSMLiVtvebZ3wp</td> | |
− | + | </tr> | |
− | + | <tr> | |
− | + | <td align="left">Private key (used for signing, not in tx data)</td> | |
− | + | <td align="right">7VLYNhmuvAo5Us4mNGxWpzhMSdSSdEbEPFUDKSnA6eBv</td> | |
− | + | </tr> | |
− | + | <tr> | |
− | + | <td align="left">Public key</td> | |
− | + | <td align="right">EENPV1mRhUD9gSKbcWt84cqnfSGQP5LkCu5gMBfAanYH</td> | |
− | + | </tr> | |
− | + | <tr> | |
− | + | <td align="left">Recipient address</td> | |
− | + | <td align="right">3NBVqYXrapgJP9atQccdBPAgJPwHDKkh6A8</td> | |
− | + | </tr> | |
− | + | <tr> | |
− | + | <td align="left">Asset id</td> | |
− | + | <td align="right">BG39cCNUFWPQYeyLnu7tjKHaiUGRxYwJjvntt9gdDPxG</td> | |
− | + | </tr> | |
− | + | <tr> | |
− | + | <td align="left">Amount</td> | |
− | + | <td align="right">1</td> | |
− | + | </tr> | |
− | + | <tr> | |
− | + | <td align="left">Fee</td> | |
− | + | <td align="right">1</td> | |
− | + | </tr> | |
− | + | <tr> | |
− | + | <td align="left">Fee asset id</td> | |
− | + | <td align="right">BG39cCNUFWPQYeyLnu7tjKHaiUGRxYwJjvntt9gdDPxG</td> | |
− | + | </tr> | |
− | + | <tr> | |
− | + | <td align="left">Timestamp</td> | |
− | + | <td align="right">1479287120875</td> | |
− | + | </tr> | |
− | + | <tr> | |
− | + | <td align="left">Attachment (as byte array)</td> | |
− | + | <td align="right">[1, 2, 3, 4]</td> | |
− | + | </tr> | |
− | + | </table> | |
− | + | Bytes: | |
− | + | <table> | |
− | + | <tr> | |
− | + | <th align="right">#</th> | |
− | + | <th align="left">Field name</th> | |
− | + | <th align="center">Type</th> | |
− | + | <th align="right">Position</th> | |
− | + | <th align="right">Length</th> | |
− | + | <th align="right">Value</th> | |
− | + | <th align="right">Base58 bytes value</th> | |
− | + | </tr> | |
− | + | <tr> | |
− | + | <td align="right">1</td> | |
− | + | <td align="left">Transaction type (0x04)</td> | |
− | + | <td align="center">Byte</td> | |
− | + | <td align="right">0</td> | |
− | + | <td align="right">1</td> | |
− | + | <td align="right">4</td> | |
− | + | <td align="right">5</td> | |
− | + | </tr> | |
− | + | <tr> | |
− | + | <td align="right">2</td> | |
− | + | <td align="left">Sender's public key</td> | |
− | + | <td align="center">Bytes</td> | |
− | + | <td align="right">1</td> | |
− | + | <td align="right">32</td> | |
− | + | <td align="right">...</td> | |
− | + | <td align="right">EENPV1mRhUD9gSKbcWt84cqnfSGQP5LkCu5gMBfAanYH</td> | |
− | + | </tr> | |
− | + | <tr> | |
− | + | <td align="right">3</td> | |
− | + | <td align="left">Amount's asset flag (0-Waves, 1-Asset)</td> | |
− | + | <td align="center">Byte</td> | |
− | + | <td align="right">33</td> | |
− | + | <td align="right">1</td> | |
− | + | <td align="right">1</td> | |
− | + | <td align="right">2</td> | |
− | + | </tr> | |
− | + | <tr> | |
− | + | <td align="right">4</td> | |
− | + | <td align="left">Amount's asset ID (*if used)</td> | |
− | + | <td align="center">Bytes</td> | |
− | + | <td align="right">34</td> | |
− | + | <td align="right">0 (32*)</td> | |
− | + | <td align="right">...</td> | |
− | + | <td align="right">BG39cCNUFWPQYeyLnu7tjKHaiUGRxYwJjvntt9gdDPxG</td> | |
− | + | </tr> | |
− | + | <tr> | |
− | + | <td align="right">5</td> | |
− | + | <td align="left">Fee's asset flag (0-Waves, 1-Asset)</td> | |
− | + | <td align="center">Byte</td> | |
− | + | <td align="right">34 (66*)</td> | |
− | + | <td align="right">1</td> | |
− | + | <td align="right">1</td> | |
− | + | <td align="right">2</td> | |
− | + | </tr> | |
− | + | <tr> | |
− | + | <td align="right">6</td> | |
− | + | <td align="left">Fee's asset ID (**if used)</td> | |
− | + | <td align="center">Bytes</td> | |
− | + | <td align="right">35 (67*)</td> | |
− | + | <td align="right">0 (32**)</td> | |
− | + | <td align="right">...</td> | |
− | + | <td align="right">BG39cCNUFWPQYeyLnu7tjKHaiUGRxYwJjvntt9gdDPxG</td> | |
− | + | </tr> | |
− | + | <tr> | |
− | + | <td align="right">7</td> | |
− | + | <td align="left">Timestamp</td> | |
− | + | <td align="center">Long</td> | |
− | + | <td align="right">35 (67*) (99**)</td> | |
− | + | <td align="right">8</td> | |
− | + | <td align="right">1479287120875</td> | |
− | + | <td align="right">11frnYASv</td> | |
− | + | </tr> | |
− | + | <tr> | |
− | + | <td align="right">8</td> | |
− | + | <td align="left">Amount</td> | |
− | + | <td align="center">Long</td> | |
− | + | <td align="right">43 (75*) (107**)</td> | |
− | + | <td align="right">8</td> | |
− | + | <td align="right">1</td> | |
− | + | <td align="right">11111112</td> | |
− | + | </tr> | |
− | + | <tr> | |
− | + | <td align="right">9</td> | |
− | + | <td align="left">Fee</td> | |
− | + | <td align="center">Long</td> | |
− | + | <td align="right">51 (83*) (115**)</td> | |
− | + | <td align="right">8</td> | |
− | + | <td align="right">1</td> | |
− | + | <td align="right">11111112</td> | |
− | + | </tr> | |
− | + | <tr> | |
− | + | <td align="right">10</td> | |
− | + | <td align="left">Recipient's address</td> | |
− | + | <td align="center">Bytes</td> | |
− | + | <td align="right">59 (91*) (123**)</td> | |
− | + | <td align="right">26</td> | |
− | + | <td align="right">...</td> | |
− | + | <td align="right">3NBVqYXrapgJP9atQccdBPAgJPwHDKkh6A8</td> | |
− | + | </tr> | |
− | + | <tr> | |
− | + | <td align="right">11</td> | |
− | + | <td align="left">Attachment's length (N)</td> | |
− | + | <td align="center">Short</td> | |
− | + | <td align="right">85 (117*) (149**)</td> | |
− | + | <td align="right">2</td> | |
− | + | <td align="right">4</td> | |
− | + | <td align="right">15</td> | |
− | + | </tr> | |
− | + | <tr> | |
− | + | <td align="right">12</td> | |
− | + | <td align="left">Attachment's bytes</td> | |
− | + | <td align="center">Bytes</td> | |
− | + | <td align="right">87 (119*) (151**)</td> | |
− | + | <td align="right">N</td> | |
− | + | <td align="right">[1,2,3,4]</td> | |
− | + | <td align="right">2VfUX</td> | |
− | + | </tr> | |
− | + | </table> | |
− | + | Total data bytes for sign: | |
− | + | Ht7FtLJBrnukwWtywum4o1PbQSNyDWMgb4nXR5ZkV78krj9qVt17jz74XYSrKSTQe6wXuPdt3aCvmnF5hfjhnd1gyij36hN1zSDaiDg3TFi7c7RbXTHDDUbRgGajXci8PJB3iJM1tZvh8AL5wD | |
− | + | 4o4DCo1VJoKk2PUWX3cUydB7brxWGUxC6mPxKMdXefXwHeB4khwugbvcsPgk8F6YB | |
− | + | Signature of transaction data bytes (one of an infinite number of valid signatures): | |
− | + | 2mQvQFLQYJBe9ezj7YnAQFq7k9MxZstkrbcSKpLzv7vTxUfnbvWMUyyhJAc1u3vhkLqzQphKDecHcutUrhrHt22D | |
− | + | Total transaction bytes with signature: | |
− | + | 6zY3LYmrh981Qbzj7SRLQ2FP9EmXFpUTX9cA7bD5b7VSGmtoWxfpCrP4y5NPGou7XDYHx5oASPsUzB92aj3623SUpvc1xaaPjfLn6dCPVEa6SPjTbwvmDwMT8UVoAfdMwb7t4okLcURcZCFugf2Wc | |
− | + | 9tBGbVu7mgznLGLxooYiJmRQSeAACN8jYZVnUuXv4V7jrDJVXTFNCz1mYevnpA5RXAoehPRXKiBPJLnvVmV2Wae2TCNvweHGgknioZU6ZaixSCxM1YzY24Prv9qThszohojaWq4cRuRHwMAA5VUBvUs | |
− | === | + | ===Calculating Transaction Id === |
− | + | Transaction Id is not stored in the transaction bytes and for most of transactions (except Payment) it can be easily calculated from the special bytes for signing using ''blake2b256(bytes_for_signing''. For Payment transaction Id is just the signature of this transaction. | |
− | == | + | ==Source== |
[http://waveswiki.org/ http://waveswiki.org/] | [http://waveswiki.org/ http://waveswiki.org/] |