• Ethersacn的交易数据是什么样的(2)


    分析 Raw Transanction

    RLP(Recursive Length Prefix)是一种以太坊中用于序列化数据编码方式。它被用于将各种数据结构转换为二进制格式,以便在以太坊中传输和存储。RLP 是一种递归的编码方式,允许对复杂的数据结构进行编码。所以分析交易数据就是对数据进行RLP解码

    选取一个交易

    get origin data

    获取的数据如下:

    0x02f87283aa36a707843b9aca00847735940083030d40946e006ce71555b03de544f984a0ac28a72b528d52843b9aca0080c001a098abbcc6169baaa6491235d0cee189f6ca97b2f70ed5ec05b8c06780112d507da003320b01aadd5ab06e22fa52e03a70e53020e978e089a17368203ac0acbce3e5
    
    • 1

    代码解析

    import rlp
    from web3 import Web3
    
    ## chainId
    ## nonce
    ## value
    ## maxFeePerGas
    ## gasLimit
    ## to
    ## maxPriorityFeePerGas
    ## v
    ## r
    ## s
    
    data_list = []
    
    
    def decode(i):
        for j in i:
            if j is list:
                decode(j)
            else:
                if len(j) == 0:
                    data_list.append('')
                else:
                    data_list.append(j.hex())
    
    
    if __name__ == "__main__":
        raw = 'f87283aa36a707843b9aca00847735940083030d40946e006ce71555b03de544f984a0ac28a72b528d52843b9aca0080c001a098abbcc6169baaa6491235d0cee189f6ca97b2f70ed5ec05b8c06780112d507da003320b01aadd5ab06e22fa52e03a70e53020e978e089a17368203ac0acbce3e5' # 这里开头没有0x02,因为0x02是一个交易版本标识,并不参与RLP编码
        decode(rlp.decode(Web3.to_bytes(hexstr=raw)))
        print("chainId:".ljust(30), data_list[0])
        print("nonce:".ljust(30), data_list[1])
        print("value:".ljust(30), data_list[2])
        print("maxFeePerGas:".ljust(30), data_list[3])
        print("gasLimit:".ljust(30), data_list[4])
        print("to:".ljust(30), data_list[5])
        print("maxPriorityFeePerGas:".ljust(30), data_list[6])
        print("method1:", data_list[7])
        print("method2:", data_list[8])
        print("v:".ljust(30), data_list[9])
        print("r:".ljust(30), data_list[10])
        print("s:".ljust(30), data_list[11])
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43

    源码地址: Gitee

    输出结果:

    chainId:                       aa36a7
    nonce:                         07
    value:                         3b9aca00
    maxFeePerGas:                  77359400
    gasLimit:                      030d40
    to:                            6e006ce71555b03de544f984a0ac28a72b528d52
    maxPriorityFeePerGas:          3b9aca00
    method1: 
    method2: 
    v:                             01
    r:                             98abbcc6169baaa6491235d0cee189f6ca97b2f70ed5ec05b8c06780112d507d
    s:                             03320b01aadd5ab06e22fa52e03a70e53020e978e089a17368203ac0acbce3e5
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12

    输出结果分析

    ItemvalueDesc
    👓ChainIdaa26a7转成10进制的结果是:11151015,这个是Sepolia测试网的ChainId
    🦺nonce07交易数量
    👔value3b9aca00转账金额,10进制是:1000000000(0.000000001 ETH)
    👕maxFeePerGas77359400表示你愿意支付的每单位燃气的最高费率。以 Gwei 为单位,它决定了交易中每一单位燃气的费用
    👜gasLimit030d40表示你愿意为这笔交易分配的最大燃气量。燃气是以太坊中的计算资源单位,用于执行智能合约或发送以太
    👟to6e006ce71555b03de544f984a0ac28a72b528d52转入地址
    🩰maxPriorityFeePerGas3b9aca00用户愿意支付的额外费用,用于提高交易的优先级
    💎v,r,s签名数据

    关注我,一起走进Web3的世界

  • 相关阅读:
    数据库的基本操作(期末复习大全)
    2022年湖北省中国专利奖申报条件以及认定流程(附奖项设置解析)
    计算机毕业设计Java银行招聘系统设计(系统+程序+mysql数据库+Lw文档)
    【数据库系统概论】第四章数据库安全性
    python如何判断是否是闰年 闰年共有366天 2月份多一天29天
    一致性 Hash 算法
    linux进程间通讯--信号量
    Node的知识理解
    LintCode 1359: Convert Sorted Array to Binary Search Tree
    linux安装visual studio code
  • 原文地址:https://blog.csdn.net/weixin_29491885/article/details/136445585