liquid_stake
Stake SOL for a liquid-staking token (non-custodial).
amount in lamports. protocol: marinade | jito | blaze. Returns an UNSIGNED base64 tx + the LST received + current APY. The technology service fee is charged on the staked-SOL notional past the daily free tier (x402 payment_header; set pay_in_crank for the $CRANK discount).
Workflow: EXECUTE step (yield leg) -- stake the idle slice after comparing get_lst_yields. Non-custodial. Monitor via portfolio_snapshot. See get_trading_workflow.
idempotency_key (optional): a client-generated UUID.
Retrying with the same key + same args replays the original result instead
of re-staking. Reuse the SAME key across the build call and its
signed_transaction completion call -- the two legs
dedupe independently, so this never raises IDEMPOTENCY_CONFLICT; a NEW
key means a genuinely new stake.
signed_transaction / verify (two-phase execution):
re-call this tool with the SIGNED base64 tx and Crank broadcasts it, then
awaits on-chain confirmation and re-reads the LST + SOL balances -- the
response carries a real verification block ({confirmed, slot,
post_state, expected_vs_actual}). Gate follow-on decisions on
verification.confirmed, never on tx_signature alone. verify=false skips
only the confirmation wait.
Input Schema
| Name | Required | Description | Default |
|---|---|---|---|
| amount | Yes | ||
| verify | No | ||
| protocol | Yes | ||
| caller_id | No | ||
| pay_in_crank | No | ||
| payment_header | No | ||
| wallet_address | Yes | ||
| idempotency_key | No | ||
| allow_unverified | No | ||
| signed_transaction | No |
Output Schema
| Name | Required | Description | Default |
|---|---|---|---|
No arguments | |||