【问题标题】:How can a Solana Rust smart contract get block height or Unix time?Solana Rust 智能合约如何获得区块高度或 Unix 时间?
【发布时间】:2021-10-14 08:38:03
【问题描述】:

我知道如何从前端传递当前的 Unix 时间:

web3.js:

anchor.web3.SYSVAR_CLOCK_PUBKEY

生锈:

let current_time = ctx.accounts.clock.unix_timestamp;

我不想那样。我需要智能合约本身来获取当前时间。

【问题讨论】:

    标签: rust blockchain unix-timestamp solana


    【解决方案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)?;
    

    【讨论】:

      猜你喜欢
      • 2021-10-14
      • 2021-12-28
      • 2023-01-19
      • 2017-09-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-08-04
      • 1970-01-01
      相关资源
      最近更新 更多