Skip to main content

Staking actions

These actions move MTF into and out of staking, delegate stake and claim rewards.

They are actions on POST /exchange. That page describes the request envelope, the EIP-712 signing rules, the number planes and the response shape. These apply to every action here.

Move MTF into free staking balance​

This action moves whole MTF from the spot MTF balance of the sender into the free staking balance of the sender. The free staking balance is the undelegated pool that token_delegate draws from. The action moves value between two ledgers. It does not mint or burn. It does not change delegations, vote power or the validator set. The action is sender-authorized and has no owner field.

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

Response. This is a non-order action. It returns the 202 Accepted admission envelope. Confirm the resulting balances with /info.

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

amount must be on the wei grid of the token. The chain refuses an amount that is finer than the declared wei_decimals of the token, with PRECONDITION_FAILED and the message amount is finer than the token's wei_decimals. MTF declares 8 wei_decimals. The chain accepts "0.00000001" and refuses "0.000000001". Trailing zeros do not count: "1.000000000" is on an 8-decimal grid. The check exists because a sub-wei amount leaves dust that no ledger row can show. The same rule applies to c_withdraw.


Move MTF out of staking balance​

This action is the exact reverse of c_deposit. It moves whole MTF from the free staking balance of the sender back to the spot MTF balance of the sender. No unbonding window applies, because this is the free (undelegated) balance. Delegated stake has its own undelegation window through token_delegate. This action does not change it. The action is sender-authorized and has no owner field.

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

Response. This is a non-order action. It returns the 202 Accepted admission envelope.

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


Delegate or undelegate stake​

This action delegates stake to a validator, or undelegates it. A delegation draws from the free staking balance, which c_deposit funds. An undelegation enters a slashable unbonding window. After the window, the stake returns to the free staking 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 and queue an undelegation. false = delegate
lock_monthsuint8Optional, default 0. One of 0 (flexible), 1, 6 or 24. The chain ignores it on an undelegation. It admits a non-zero value only for a validator on the governance allowlist

Claim staking rewards​

This action claims staking rewards. It can claim from one validator only.

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

A claim pays into the free staking pool, not into spot. That is the balance that token_delegate spends, so you can delegate a claimed reward again with no second step. To spend it, move it to spot with c_withdraw. The free pool returns it with no unbonding window.

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


This action makes a staking target address an alias of the sender.

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