Solana Rust 智能合约如何获得区块高度或 Unix 时间?
Posted
技术标签:
【中文标题】Solana Rust 智能合约如何获得区块高度或 Unix 时间?【英文标题】:How can a Solana Rust smart contract get block height or Unix time? 【发布时间】:2021-10-14 08:38:03 【问题描述】:我知道如何从前端传递当前的 Unix 时间:
web3.js:
anchor.web3.SYSVAR_CLOCK_PUBKEY
生锈:
let current_time = ctx.accounts.clock.unix_timestamp;
我不想那样。我需要智能合约本身来获取当前时间。
【问题讨论】:
【参考方案1】:我假设你正在使用锚
let now_ts = Clock::get().unwrap().unix_timestamp;
你需要传入系统程序账号
【讨论】:
您好,谢谢。我用你的代码弄明白了,并使用了 solana_program::sysvar::clock::Clock;这就是您所说的“系统程序帐户”吗? 您可以在您的上下文中设置此帐户pub system_program: AccountInfo<'info>,
并传入systemProgram: SystemProgram.programId
【参考方案2】:
查看本页顶部的 sysvar 数据示例:https://docs.solana.com/developing/runtime-facilities/sysvars
智能合约/链上程序有两种方式:
let clock = Clock::get();
或者你将账户传入外部指令,然后反序列化来自该账户的时钟:
let clock_sysvar_info = next_account_info(account_info_iter)?;
let clock = Clock::from_account_info(&clock_sysvar_info)?;
【讨论】:
以上是关于Solana Rust 智能合约如何获得区块高度或 Unix 时间?的主要内容,如果未能解决你的问题,请参考以下文章
智能合约开发——Sui/Move vs. Solana/Rust