python调用solana的一些麻烦事

晓道 发布于 2025-03-03 阅读 3086

python 使用anchor idl 问题分析

这两天在网上找了一个anchor idl,发给一个搞机器人的,发现他都调用不了。老是出什么

solders.SerdeJSONError: data did not match any variant of untagged enum IdlAccountItem at line 

在下面代码地方就出错了

idl = Idl.from_json(content)

激发了我的好奇心,我不是去年搞pumpfun的idl就给anchorpy修复了2个bug给搞定了吗,怎么还有?

所以深入分析了一番这个问题,其实也很简单,主要和anchor几个版本的升级变更有关系,就是版本升级了,关键字的名字改变了。 直接看看代码 https://github.com/kevinheavey/anchorpy-core/blob/main/src/idl.rs

impl IdlAccount {
    #[new]
    pub fn new(
        name: String,
        is_mut: bool,
        is_signer: bool,
        is_optional: Option<bool>,
        docs: Option<Vec<String>>,
        pda: Option<IdlPda>,
        relations: Vec<String>,
    ) ->...

剩余50%的内容订阅专栏后可查看

该文章收录于
晓道秘籍
4 订阅 16 篇内容

5 条评论

我去申请了codama的python支持,如果能成功的,1-2个月应该可以搞定。

2025-05-09 17:59

申请通过了,让我来努力改变这种状况。

2025-05-13 18:01

目前已经可用,还没合并到codama主项目。生成的代码基于anchorpy,使用到了anchorpy,但是和anchorpy有一些差异,前端使用codama解析idl,所以对于idl的兼容性好于anchorpy,codama同事支持anchor idl v00,v10,还支持shank idl格式,目前我这个生成器也把shank idl给支持起来了,我把anchor 0.31.1的指令动态签名长度都支持了。功能演示:https://github.com/Solana-ZH/idl-lib-renderers-py

2025-06-03 23:07

看来只能用js 或者 rust 啊, python 似乎真不行呀

2025-05-09 15:55

自己搞了个anchorpy的版本升级到最新的anchor 0.31.0了,这个codama python也我自己的写的,再出个这个会不会是自己砸自己的锅。

2025-07-19 10:34