#decode #starknet #transfer #selector #calldata

decode-starknet-calldata

解码Starknet calldata

3个版本

0.1.2 2024年1月26日
0.1.1 2024年1月26日
0.1.0 2024年1月26日

#37#starknet

每月 21 次下载

MIT 许可证

28KB
514

decode-starknet-calldata

一个用于解码Starknet交易calldata的小工具,使用Rust编写。

用法

use decode_starknet_calldata::decode;
use starknet::macros::felt;

fn main() {
    // Transfer transaction calldata at https://starkscan.co/tx/0x001e18fa87db70d0a535d448959c452b739652e6c854959e90b699c572ea3e7f#overview
    let calldata = vec![
        felt!("0x1"),
        felt!("0x49d36570d4e46f48e99674bd3fcc84644ddd6b96f7c741b1562b82f9e004dc7"),
        felt!("0x83afd3f4caedc6eebf44246fe54e38c95e3179a5ec9ea81740eca5b482d12e"),
        felt!("0x0"),
        felt!("0x3"),
        felt!("0x3"),
        felt!("0x7521c84e175b5b36c3a59f8a737cbd4a4dd372d5570989770f4b99dd1a49dd"),
        felt!("0x71afd498d0011"),
        felt!("0x0"),
    ];

    let decoded = decode(&calldata).unwrap();

    // decoded: [Call { to: FieldElement { inner: 0x049d36570d4e46f48e99674bd3fcc84644ddd6b96f7c741b1562b82f9e004dc7 }, selector: FieldElement { inner: 0x0083afd3f4caedc6eebf44246fe54e38c95e3179a5ec9ea81740eca5b482d12e }, calldata: [FieldElement { inner: 0x007521c84e175b5b36c3a59f8a737cbd4a4dd372d5570989770f4b99dd1a49dd }, FieldElement { inner: 0x00000000000000000000000000000000000000000000000000071afd498d0011 }, FieldElement { inner: 0x0000000000000000000000000000000000000000000000000000000000000000 }] }]
    println!("decoded: {:?}", decoded);
}

注意

该库尚未完全测试其是否能够完全区分旧版calldata和新的calldata格式。如果您确信calldata的格式是旧版或新版,请直接导入decode_legacydecode_new进行解码,而不是使用decode,后者首先尝试decode_legacy,然后尝试在失败时使用decode_new

依赖项

~13–26MB
~421K SLoC