Skip to main content

Staking actions

Actions on POST /exchange. The request envelope, the EIP-712 signing rules, the number planes and the response shape are on that page and apply to every action here.

Move MTF into free staking balance

Move whole-MTF from the sender's spot MTF balance into their free staking balance (the undelegated pool that token_delegate draws from). Pure value-move between two ledgers — no mint, no burn — and it does not touch delegations, vote power, or the validator set. Sender-authorized — no owner field.

{
"type": "c_deposit",
"params": { "amount": "1000" }
}
FieldTypeDescription
amountdecimal stringMTF to move spot → free staking balance (> 0), as a JSON string

Response. Non-order action → 202 Accepted admission envelope. Confirm the resulting balances via /info.

Common errors (at commit): amount must be positive, insufficient spot MTF balance, MTF spot asset not configured on this chain.

amount must sit on the token's wei grid. An amount finer than the token's declared wei_decimals is refused with INVALID_REQUEST and the message amount is finer than the token's wei_decimals. MTF declares 8 wei_decimals, so "0.00000001" is accepted and "0.000000001" is refused. Trailing zeros do not count: "1.000000000" is on an 8-decimal grid. Not live yet: the check ships with the next node release. A live node commits a sub-wei amount and leaves dust no ledger row can render. The same rule applies to c_withdraw.


Move MTF out of staking balance

The exact reverse of c_deposit: move whole-MTF from the sender's free staking balance back to their spot MTF balance. No unbonding window applies — this is the free (undelegated) balance; delegated stake has its own undelegation window via token_delegate, which this does not touch. Sender-authorized — no owner field.

{
"type": "c_withdraw",
"params": { "amount": "250.25" }
}
FieldTypeDescription
amountdecimal stringMTF to move free staking balance → spot (> 0), as a JSON string

Response. Non-order action → 202 Accepted admission envelope.

Common errors (at commit): amount must be positive, insufficient staking balance, MTF spot asset not configured on this chain.


Delegate or undelegate stake

Delegate or undelegate stake to a validator. The delegate side draws from the free staking balance (funded by c_deposit); undelegation enters a slashable unbonding window before the stake returns to that balance.

{
"type": "token_delegate",
"params": {
"validator": "0x00000000000000000000000000000000000000aa",
"amount": "100.5",
"is_undelegate": false,
"lock_months": 0
}
}
FieldTypeDescription
validatorhex address20-byte validator address
amountdecimal (string or number)Stake amount
is_undelegatebooltrue = unstake / queue undelegation; false = delegate
lock_monthsuint8Optional, default 0. One of 0 (flexible) / 1 / 6 / 24. Ignored on undelegate; a non-zero value is admitted only for a governance-allowlisted validator

Claim staking rewards

Claim staking rewards, optionally scoped to one validator.

{
"type": "claim_rewards",
"params": { "validator": "0x00000000000000000000000000000000000000bb" }
}
FieldTypeDescription
validatorhex address | nullnull / omitted = claim across all delegations

A claim pays into the STAKING free pool, not into spot. That is the same balance token_delegate spends, so a claimed reward can be re-delegated with no second step. To spend it, move it to spot with c_withdraw, which the free pool returns with no unbonding window.

Claiming nothing is not an error. A claim with no accrued reward commits, moves no money, and writes no ledger row.


Alias a staking target address to the sender.

{
"type": "link_staking_user",
"params": { "target": "0x00000000000000000000000000000000000000aa" }
}
FieldTypeDescription
targethex address20-byte staking target address