文章/教程 Rust 代码质押 solana 委托投票权给验证者

wuaoxiang · 2024年08月12日 · 82 次阅读

首先要创建一个质押账户,并转入要质押的 SOL,对标 solana create-stake-account cli 的功能

let staker = Keypair::new();
let authorized = stake::state::Authorized {
    staker: staker.pubkey(),
    withdrawer: staker.pubkey(),
};
let lockup = stake::state::Lockup {
    unix_timestamp: unsafe { libc::time(std::ptr::null_mut()) },
    epoch: 0,
    custodian: staker.pubkey(),
};
let lamports = 10u64.pow(9);
let ixs = stake::instruction::create_account( // stake::program::id();
    &payer.pubkey(),
    &staker.pubkey(),
    &authorized,
    &lockup,
    lamports,
);
let transaction = Transaction::new_signed_with_payer(&ixs, Some(&payer.pubkey()), &[&staker], blockhash);
let txhash = client.send_and_confirm_transaction(&transaction).unwrap();

注意创建完质押账户并不能获得奖励,就像我以前以为质押 JUP 获得 JUP 打新奖励,结果 JUP 要求行使了投票权的质押者才能获得奖励。

所以我们的质押账户必须要行使投票权,例如投票/验证 solana 网络最新区块的某个交易是否正确,给网络做出贡献才能获得质押奖励

当然我不是验证者,或者懒得投票,这时候可以将质押账户的 SOL 对应的投票权益,委托给验证者节点进行投票以此获得奖励

通过 solana validators 查询当前所有验证者节点然后选其中一个 vote addr 投票地址即可

为了网络稳定,质押/解除质押 1 个 SOL 不会立即获得 1SOL 同等的投票权力,质押后会随着时间增加投票权力直到 1 个 SOL 的完整投票权力,解除质押也是慢慢解除,这样避免大户突然质押或者取消质押大量资金造成 solana 网络投票权力的不稳定

质押账户创建完之后,对标 solana delate-stake cli 的功能进行质押委托

let ix = stake::instruction::delegate_stake(
    &staker.pubkey(),
    &staker.pubkey(),
    &solana_sdk::pubkey!("F2UsSsRHezY1U4h8FWMmWHkgyVd8r5hVVPNXViod9ZnJ"),
);
let transaction = Transaction::new_signed_with_payer(
    &vec![ix],
    Some(&payer.pubkey()),
    &[&payer, &staker],
    blockhash,
);
let txhash = client.send_and_confirm_transaction(&transaction).unwrap();
println!("{txhash}");

质押的 tx 成功后,可以命令行查询当前质押账户的状态,如果想要赎回质押的钱,可以 solana deactivate-stake

w@w:~$ p solana stake-account BYMscUVgenNz6kaRsBuyG2WroXtkE8LyX2yZoq9uvX4W
ProxyChains-3.1 (http://proxychains.sf.net)
Balance: 1 SOL
Rent Exempt Reserve: 0.00228288 SOL
Delegated Stake: 0.99771712 SOL
Active Stake: 0 SOL
Activating Stake: 0.99771712 SOL
Stake activates starting from epoch: 736
Delegated Vote Account Address: F2UsSsRHezY1U4h8FWMmWHkgyVd8r5hVVPNXViod9ZnJ
Stake Authority: BYMscUVgenNz6kaRsBuyG2WroXtkE8LyX2yZoq9uvX4W
Withdraw Authority: BYMscUVgenNz6kaRsBuyG2WroXtkE8LyX2yZoq9uvX4W

或者在 solflare 之类的钱包就看到质押记录了

暂无回复。
需要 登录 后方可回复, 如果你还没有账号请 注册新账号