Rust代码质押solana委托投票权给验证者

首先要创建一个质押账户,并转入要质押的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 之类的钱包就看到质押记录了

全部评论(0)
推荐文章
Pectra 升级的核心:EIP-7702的原理分析和实操
来 The Web3, 学习史上最全面的区块链教程,挑战高薪
TON钱包签名、私钥导入与发送交易
Rust 实战:构建高效的异步 P2P 网络节点
深入理解solana-keygen
solana账户总结
以太坊POS工作原理详解:Epoch、Slot 与信标区块
以太坊发币 - 超简单发行 ERC-20 代币并上线到 holesky 上
NFT发行 - 超简单发行 NFT 到 holesky 上(包含 ERC165、ERC721Receiver 的含义)
The Web3 社区--区块链运维课程大纲
wrapped SOL 与 naive SOL 互相转换
带你手搓一个预言机 - 极简版的 ChainLink VRF 随机数生成
更安全的签名 - EIP712 结构化签名
The Web3 区块链钱包教程大纲
以太坊代理模式的天花板 - 信标代理
DeFi 项目的基石 - ERC4626 代币金库协议的实现
SOL合约部署调用与销毁
Uniswap价格批量查询与ws订阅行情
智能合约的身份保证 - 数字签名
Solana USDC 转账交易的细节
ERC20授权的更优方案 - ERC20Permit 签名授权
The Web3 社区 Move 共学招募
abigen 工具和 sol! 宏生成智能合约 ABI 数据结构
事件监听 - 合约事件监听的方案汇总
MPC托管系统工作原理
The Web3 社区第三期区块链技术培训课程火热招生中--四个月高强度挑战,成为区块链技术高手
监听合约事件 -- 手把手带你在线、离线部署 The Graph
代币集大成者 - 手搓一个ERC1155合约并上线 holesky
如何成为一名专业的 Web3 产品经理 ——Web3 产品经理课程招募!
Solana ts/rs 代码 nonce-account 签名