首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何使用solana/web3.js作为参数传递enum?

如何使用solana/web3.js作为参数传递enum?
EN

Stack Overflow用户
提问于 2022-02-24 13:33:30
回答 1查看 591关注 0票数 0

我在Solana程序中定义了UserAction枚举。

代码语言:javascript
运行
复制
#[derive(AnchorDeserialize)]
#[derive(AnchorSerialize)]
pub enum UserAction {
    VIEW,
    LIKE,
    SHARE,
    COMMENT,
    DOWNLOAD,
}

在入口点使用这个。

代码语言:javascript
运行
复制
    pub fn my_fun(ctx: Context<DoPost>, action: UserAction) -> ProgramResult {
        // Do something
        Ok(())
    }

如何使用@solana/web3.js传递enum?

EN

Stack Overflow用户

发布于 2022-02-28 22:04:40

正如您已经注意到的,在JS中没有本地的方法来实现这一点,所以您必须手动进行编码,首先是一个字节来定义指令类型,然后是所有其他字节来定义指令数据。

下面是一个简单的调用VIEW的例子,假设它也需要一个u64

代码语言:javascript
运行
复制
import * as BufferLayout from '@solana/buffer-layout';
const instructionLayout = BufferLayout.struct([
  BufferLayout.u8('instruction'),
  BufferLayout.ns64('number'),
]);
const data = Buffer.alloc(instructionLayout.span);
instructionLayout.encode({instruction: 0, number: 42}, data);
const instruction = TransactionInstruction({
      keys: [
        {pubkey: myPubkey, isSigner: false, isWritable: true},
// .. add all your account keys here
      ],
      programId: myProgramId,
      data,
    });

要获得更完整的示例,请查看web3.js:createAccount中如何为系统程序定义https://github.com/solana-labs/solana/blob/f0a235d16fd21da11176c21297176234121a3d8c/web3.js/src/system-program.ts#L655

票数 0
EN
查看全部 1 条回答
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/71252795

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档