Delegate
Staking NEAR is a simple process. We will collect:
- The delegating address
- The signing public key
- The validator address (Figment's is:
figment.poolv1.near) - The amount of NEAR to be staked
- Optionally, a max gas amount (upper limit of the transaction fee to be paid)
Once the delegating transaction is confirmed on-chain, the delegation will immediately be active and earning staking rewards.
In the following guide we will illustrate how to stake NEAR.
Create New Staking Flow
To initiate the staking process, create a new flow with a POST request to /flows.
URL
https://api.figment.io/flows
Request
protocol* :stringProtocol this flow operates on (ex.near).network* :stringNetwork this flow operates on (ex.mainnet).operation* :stringThe operation to perform (ex.staking).
JSON
{
"protocol": "near",
"network": "testnet",
"operation": "staking"
}
Response
id:stringID of the flow.operation:stringThe Staking API operation being performed by this flow.state:stringThe current state of the flow.actions:arrayIt includes thename&inputsof all next possible actions.create_delegate_tx: Use this action to generate a delegation transaction to stake NEAR.validator_address: Figment validator address.delegator_address: The delegating address.delegator_pubkey: The public key of the signing account. Must start withed25519:.amount: The amount of NEAR to be delegated.max_gas: Adjust if you wish to limit the possible transaction fee.
data:objectFlow & transaction data.
JSON
{
"id": "aeb7503c-27c8-4184-8537-8f4a77f694a9",
"state": "initialized",
"actions": [
{
"name": "create_delegate_tx",
"inputs": [
{
"name": "delegator_address",
"display": "Delegator Address",
"description": "",
"type": "string",
"validations": [
{
"type": "presence",
"options": {}
},
{
"type": "account_balance",
"options": {
"on": "with_on_chain_validations",
"greater_than_or_equal_to": null
}
}
]
},
{
"name": "delegator_pubkey",
"display": "Delegator Pubkey",
"description": "",
"type": "string",
"validations": [
{
"type": "presence",
"options": {}
}
]
},
{
"name": "validator_address",
"display": "Validator Address",
"description": "",
"type": "string",
"validations": [
{
"type": "presence",
"options": {}
},
{
"type": "is_validator",
"options": {
"on": "with_on_chain_validations"
}
}
]
},
{
"name": "amount",
"display": "Amount",
"description": "",
"type": "decimal",
"validations": [
{
"type": "presence",
"options": {}
},
{
"type": "numericality",
"options": {
"greater_than": 0
}
}
]
},
{
"name": "max_gas",
"display": "Max Gas",
"description": "",
"type": "decimal",
"validations": []
}
]
}
],
"data": {
"delegator_address": null,
"delegator_pubkey": null,
"validator_address": null,
"amount": null,
"max_gas": null,
"delegate_transaction": null
},
"protocol": "near",
"network": "testnet",
"created_at": "2022-09-26T15:24:43.720Z",
"updated_at": "2022-09-26T15:24:43.720Z"
}
Submit Delegate Data
After creating a new staking flow, submit the staking account data. Collect the required inputs. Send a PUT request to /flows/[:flow_id]/next to proceed to the next step.
URL
https://api.figment.io/flows/[:flow_id]/next
Request
name* :create_delegate_txinputs* :objectdelegator_address* :stringThe delegating address.delegator_pubkey* :stringThe public key of the signing account.validator_address* :stringAddress of the validator to which you want to delegate your tokens.amount* :numberThe amount of NEAR to be delegated.max_gas:stringAdjust if you wish to limit the possible transaction fee.
JSON
{
"name": "create_delegate_tx",
"inputs": {
"delegator_address": "slate-demo.testnet",
"delegator_pubkey": "ed25519:5QA46X6NkNmsFdu9xWVBaLNowh9gGeF1c5r9u6NcxaLY",
"validator_address": "01node.pool.f863973.m0",
"amount": "25",
"max_gas": null
}
}
refresh_delegate_tx: If you need to get a fresh version of the transaction payload (i.e., the nonce has increased).sign_delegate_tx: Submit a signed transaction payload or an array of signatures to continue the flow.confirm_delegate_tx_by_hash: Submit a previously completed transaction hash to continue the flow.
data:objectFlow & transaction data.
JSON
{
"id": "11cbb22a-3505-4d9d-aa82-61a9d865dfdd",
"state": "delegate_tx_signature",
"actions": [
{
"name": "refresh_delegate_tx",
"inputs": [
{
"name": "delegator_address",
"display": "Delegator Address",
"description": "",
"type": "string",
"validations": [
{
"type": "presence",
"options": {}
}
],
"array": false,
"default_value": "136df0c876f120f3b823754f57dee6064c18a9f9560081d3.testnet"
},
{
"name": "delegator_pubkey",
"display": "Delegator Pubkey",
"description": "",
"type": "string",
"validations": [
{
"type": "presence",
"options": {}
}
],
"array": false,
"default_value": "ed25519:46c3btaWiBB2DCieDnQffBN4DixAHU69qYWqNzCBBgsQ"
},
{
"name": "validator_address",
"display": "Validator Address",
"description": "",
"type": "string",
"validations": [
{
"type": "presence",
"options": {}
}
],
"array": false,
"default_value": "legends.pool.f863973.m0"
},
{
"name": "amount",
"display": "Amount",
"description": "in NEAR",
"type": "decimal",
"validations": [
{
"type": "presence",
"options": {}
},
{
"type": "numericality",
"options": {
"greater_than": 0
}
}
],
"array": false,
"default_value": "10.0"
},
{
"name": "max_gas",
"display": "Max Gas",
"description": "in NEAR",
"type": "decimal",
"validations": [
{
"type": "numericality",
"options": {
"allow_nil": true,
"greater_than": 0
}
}
],
"array": false,
"default_value": null
}
]
},
{
"name": "sign_delegate_tx",
"inputs": [
{
"name": "transaction_payload",
"display": "Transaction Payload",
"description": "",
"type": "signed_transaction",
"validations": [
{
"type": "sign_payload",
"options": {}
}
],
"array": false,
"default_value": null,
"signers": [
"ed25519:46c3btaWiBB2DCieDnQffBN4DixAHU69qYWqNzCBBgsQ"
],
"transaction_payload": "380000003133366466306338373666313230663362383233373534663537646565363036346331386139663935363030383164332e746573746e6574002e0297153490ddde81b8f300b1a96598bc13e5c8c2f0b61d8eaf27ff40db20b741c1d946ab690000170000006c6567656e64732e706f6f6c2e663836333937332e6d3013c8809bd8dc4670762fff3fc5988e682c51f63a60013cba9d8ae6a78722f61d0100000002110000006465706f7369745f616e645f7374616b65020000007b7d00e057eb481b00000000004a480114169545080000000000"
},
{
"name": "signatures",
"display": "Signatures",
"description": "",
"type": "array_of_signatures",
"validations": [],
"array": true,
"default_value": null,
"element_type": "signature_data",
"signers": [
"ed25519:46c3btaWiBB2DCieDnQffBN4DixAHU69qYWqNzCBBgsQ"
],
"transaction_payload": "380000003133366466306338373666313230663362383233373534663537646565363036346331386139663935363030383164332e746573746e6574002e0297153490ddde81b8f300b1a96598bc13e5c8c2f0b61d8eaf27ff40db20b741c1d946ab690000170000006c6567656e64732e706f6f6c2e663836333937332e6d3013c8809bd8dc4670762fff3fc5988e682c51f63a60013cba9d8ae6a78722f61d0100000002110000006465706f7369745f616e645f7374616b65020000007b7d00e057eb481b00000000004a480114169545080000000000",
"signing_payload": "dd74125fef57262cbe445e13cceb5073873605aa0e6019ce7502c51a3e3cd8bf",
"inputs": {
"input_klass": "Workflows::Signature",
"input_instance": {
"account_address": null,
"signature": null
},
"flow": {
"workflow_state": "delegate_tx_signature",
"id": 3803,
"customer_id": 40,
"chain_id": 7,
"data": {
"delegator_address": "136df0c876f120f3b823754f57dee6064c18a9f9560081d3.testnet",
"delegator_pubkey": "ed25519:46c3btaWiBB2DCieDnQffBN4DixAHU69qYWqNzCBBgsQ",
"validator_address": "legends.pool.f863973.m0",
"amount": "10.0",
"max_gas": null,
"delegate_transaction": {
"raw": "380000003133366466306338373666313230663362383233373534663537646565363036346331386139663935363030383164332e746573746e6574002e0297153490ddde81b8f300b1a96598bc13e5c8c2f0b61d8eaf27ff40db20b741c1d946ab690000170000006c6567656e64732e706f6f6c2e663836333937332e6d3013c8809bd8dc4670762fff3fc5988e682c51f63a60013cba9d8ae6a78722f61d0100000002110000006465706f7369745f616e645f7374616b65020000007b7d00e057eb481b00000000004a480114169545080000000000",
"signing_payload": "dd74125fef57262cbe445e13cceb5073873605aa0e6019ce7502c51a3e3cd8bf",
"signed": null,
"hash": "FuTkq5oYo9t8rUoGphpcuE1sEcJzYBU7QQbgY2Ah8L1U",
"status": null,
"error": null,
"signatures": null
}
},
"created_at": "2023-02-24T22:48:42.104Z",
"updated_at": "2023-02-24T22:48:53.366Z",
"id_public": "11cbb22a-3505-4d9d-aa82-61a9d865dfdd",
"supported_operation_id": 20
},
"flow_attributes": {},
"empty_input": {
"account_address": null,
"signature": null
}
}
}
]
},
{
"name": "confirm_delegate_tx_by_hash",
"inputs": [
{
"name": "hash",
"display": "Hash",
"description": "",
"type": "string",
"validations": [
{
"type": "presence",
"options": {}
}
],
"array": false,
"default_value": null
},
{
"name": "block_number",
"display": "Block Number",
"description": "",
"type": "integer",
"validations": [],
"array": false,
"default_value": null
}
]
}
],
"data": {
"delegator_address": "136df0c876f120f3b823754f57dee6064c18a9f9560081d3.testnet",
"delegator_pubkey": "ed25519:46c3btaWiBB2DCieDnQffBN4DixAHU69qYWqNzCBBgsQ",
"validator_address": "legends.pool.f863973.m0",
"amount": "10.0",
"max_gas": null,
"delegate_transaction": {
"raw": "380000003133366466306338373666313230663362383233373534663537646565363036346331386139663935363030383164332e746573746e6574002e0297153490ddde81b8f300b1a96598bc13e5c8c2f0b61d8eaf27ff40db20b741c1d946ab690000170000006c6567656e64732e706f6f6c2e663836333937332e6d3013c8809bd8dc4670762fff3fc5988e682c51f63a60013cba9d8ae6a78722f61d0100000002110000006465706f7369745f616e645f7374616b65020000007b7d00e057eb481b00000000004a480114169545080000000000",
"signing_payload": "dd74125fef57262cbe445e13cceb5073873605aa0e6019ce7502c51a3e3cd8bf",
"signed": null,
"hash": "FuTkq5oYo9t8rUoGphpcuE1sEcJzYBU7QQbgY2Ah8L1U",
"status": null,
"error": null,
"signatures": null
}
},
"protocol": "near",
"network": "testnet",
"created_at": "2023-02-24T22:48:42.104Z",
"updated_at": "2023-02-24T22:48:53.366Z"
}
# Submit Signed Delegate Transaction for Broadcast
Before broadcasting the transaction, you must sign the `transaction_payload` you received in the previous step. After signing the transaction, send a `PUT` request to `/flows/[:flow_id]/next` with the signed payload. The Staking API will broadcast the transaction to the Near network.
### URL
`https://api.figment.io/flows/[:flow_id]/next`
### Request
- `name`\* : `string` Name of the action to execute.
- `inputs`\* : `object`
- `transaction_payload`\* : Signed transaction payload from the previous step's response.
- `signatures` : `array` of `object` The signatures array can be used **instead of sending a transaction payload** when the signing keys are kept in a custodial solution, such as Fireblocks.
JSON
```json
{
"name": "sign_delegate_tx",
"inputs": {
"transaction_payload": "12000000736c6174652d64656d6f2e746573746e657400415d57cdf21d28e35e0cfa864e895c18b4bc6a711642d38eb6762af81ec1cf3904cc1038fc5700001600000030316e6f64652e706f6f6c2e663836333937332e6d309ab9d36f31580c94fcf7eace07f4a286a6f69cdd3caef0efed5d78930df546880100000002110000006465706f7369745f616e645f7374616b65020000007b7d00e057eb481b0000000000b9340332b7f4ad14000000000000cd7538bc1db22a72cbaa19f54e9df00b9444863c74eefd5897d2ebbb7a52e7f8042d675c09d40684b7f7dd17feb73ecd09f6ae08c33e7f82450b438694f5430e"
}
}
Response
id:stringID of the flow.operation:stringThe Staking API operation being performed by this flow.state:stringThe current state of the flow.delegate_tx_broadcasting: Transaction has been broadcast and is confirming.delegated: Transaction has been confirmed and the delegation is active.
actions:arrayIt includes thename&inputsof all next possible actions.data:objectFlow & transaction data.
JSON
{
"id": "549db585-874f-4b5d-b1a2-67b7d9a3df15",
"state": "delegate_tx_broadcasting",
"actions": [
{
"name": "wait",
"estimated_state_change_at": "2023-02-27T17:48:51.908Z",
"inputs": []
}
],
"data": {
"delegator_address": "0b81cc09294fc074814ad0de50f31644e5669f856105399b.testnet",
"delegator_pubkey": "ed25519:NUbTcj78nHFFm1J8a1GFjenAnCKV32ZdBeeqem8oyLV",
"validator_address": "legends.pool.f863973.m0",
"amount": "10.0",
"max_gas": null,
"delegate_transaction": {
"raw": "380000003062383163633039323934666330373438313461643064653530663331363434653536363966383536313035333939622e746573746e657400058065d39e25bf5038afbacc1b7312c5dc3761770626288020d783f8685058aa412e4c11c36b0000170000006c6567656e64732e706f6f6c2e663836333937332e6d3060877de2656b98d64e2cecadb55050ee8aa435e81dc657911adc65bb569bf7fb0100000002110000006465706f7369745f616e645f7374616b65020000007b7d00e057eb481b00000000004a480114169545080000000000",
"signing_payload": "c9f587150ebf9aa0d8c20510a71574a094224c636a1d40e9c80e13f7d0ed04ea",
"signed": "380000003062383163633039323934666330373438313461643064653530663331363434653536363966383536313035333939622e746573746e657400058065d39e25bf5038afbacc1b7312c5dc3761770626288020d783f8685058aa412e4c11c36b0000170000006c6567656e64732e706f6f6c2e663836333937332e6d3060877de2656b98d64e2cecadb55050ee8aa435e81dc657911adc65bb569bf7fb0100000002110000006465706f7369745f616e645f7374616b65020000007b7d00e057eb481b00000000004a480114169545080000000000007a3f50c131f084dc733fc56e16c888fc7f42a0e49000e8948065e1663d1f57849788b40dfbabdc1e6734d78f6fe4e7803372a251fb9c9473ca443575102b1303",
"hash": "EbN6QPxd81V8CGViBFMtTjoqnoPV5bH34kyiV5vu9XvH",
"status": null,
"error": null,
"signatures": []
}
},
"protocol": "near",
"network": "testnet",
"created_at": "2023-02-27T17:46:45.944Z",
"updated_at": "2023-02-27T17:47:51.535Z"
}
Get Staking Flow Status
To get the current state of the existing flow, send a GET request to /flows/[:flow_id] using the flow ID from the previous step.
URL
https://api.figment.io/flows/[:flow_id]
Request
- None
JSON
{
"id": "549db585-874f-4b5d-b1a2-67b7d9a3df15",
"state": "delegated",
"actions": [],
"data": {
"delegator_address": "0b81cc09294fc074814ad0de50f31644e5669f856105399b.testnet",
"delegator_pubkey": "ed25519:NUbTcj78nHFFm1J8a1GFjenAnCKV32ZdBeeqem8oyLV",
"validator_address": "legends.pool.f863973.m0",
"amount": "10.0",
"max_gas": null,
"delegate_transaction": {
"raw": "380000003062383163633039323934666330373438313461643064653530663331363434653536363966383536313035333939622e746573746e657400058065d39e25bf5038afbacc1b7312c5dc3761770626288020d783f8685058aa412e4c11c36b0000170000006c6567656e64732e706f6f6c2e663836333937332e6d3060877de2656b98d64e2cecadb55050ee8aa435e81dc657911adc65bb569bf7fb0100000002110000006465706f7369745f616e645f7374616b65020000007b7d00e057eb481b00000000004a480114169545080000000000",
"signing_payload": "c9f587150ebf9aa0d8c20510a71574a094224c636a1d40e9c80e13f7d0ed04ea",
"signed": "380000003062383163633039323934666330373438313461643064653530663331363434653536363966383536313035333939622e746573746e657400058065d39e25bf5038afbacc1b7312c5dc3761770626288020d783f8685058aa412e4c11c36b0000170000006c6567656e64732e706f6f6c2e663836333937332e6d3060877de2656b98d64e2cecadb55050ee8aa435e81dc657911adc65bb569bf7fb0100000002110000006465706f7369745f616e645f7374616b65020000007b7d00e057eb481b00000000004a480114169545080000000000007a3f50c131f084dc733fc56e16c888fc7f42a0e49000e8948065e1663d1f57849788b40dfbabdc1e6734d78f6fe4e7803372a251fb9c9473ca443575102b1303",
"hash": "EbN6QPxd81V8CGViBFMtTjoqnoPV5bH34kyiV5vu9XvH",
"status": "confirmed",
"error": null,
"signatures": []
}
},
"protocol": "near",
"network": "testnet",
"created_at": "2023-02-27T17:46:45.944Z",
"updated_at": "2023-02-27T17:48:05.958Z"
}