以太坊中的交易结构
1. 以太坊黄皮书中的交易结构
以太坊黄皮书定义了交易的核心结构。以下是相关部分的摘要:
交易格式(Transaction Format)
一个以太坊交易由以下字段组成:
- 
nonce: 交易序列号,用于防止重放攻击。
- 
gasPrice: 每单位gas的价格(以wei为单位)。
- 
gasLimit: 交易允许消耗的最大gas量。
- 
to: 目标地址(合约地址或外部账户地址)。如果为空,表示创建合约。
- 
value: 发送的以太币数量(以wei为单位)。
- 
data: 调用合约时的输入数据(ABI编码的函数选择器和参数)。
- 
v,r,s: 交易的签名数据。
黄皮书中的定义
在黄皮书的Appendix F. Signing Transactions部分,交易的结构被正式定义为:
T ≡ (nonce, gasPrice, gasLimit, to, value, data, v, r, s)2. EVM执行模型
EVM执行交易时,会根据交易的to、value和data字段执行相应的操作。以下是黄皮书中关于EVM执行模型的摘要:
执行环境(Execution Environment)
EVM的执行环境由以下字段定义:
- 
address: 当前合约的地址(即交易的to字段)。
- 
caller: 调用者的地址。
- 
value: 发送的以太币数量(即交易的value字段)。
- 
data: 调用合约时的输入数据(即交易的data字段)。
黄皮书中的定义
在黄皮书的Section 9.3. Substate部分,EVM的执行环境被定义为:
I ≡ (Ia, Io, Ip, Id, Is, Iv, Ib, IH, Ie, Iw)其中:
- 
Ia是当前合约的地址(to)。
- 
Iv是发送的以太币数量(value)。
- 
Id是调用合约时的输入数据(data)。
3. Solidity ABI规范
Solidity文档中定义了如何编码data字段。以下是相关部分的摘要:
函数选择器(Function Selector)
函数选择器是函数签名的Keccak-256哈希的前4字节。例如,函数transfer(address,uint256)的选择器为:
keccak256("transfer(address,uint256)") → 0xa9059cbb参数编码(Parameter Encoding)
参数根据其类型进行ABI编码。例如,调用transfer(address,uint256)时,data字段的格式为:
0xa9059cbb + <address> + <uint256>Solidity文档中的定义
在Solidity文档的ABI Specification部分,ABI编码规则被定义为:
- 
函数选择器:函数签名的Keccak-256哈希的前4字节。 
- 
参数编码:根据参数类型(如 uint256、address等)进行ABI编码。
4. Gnosis Safe的operation字段
operation字段是Gnosis Safe多签钱包中定义的扩展字段,用于指定调用类型。以下是相关部分的摘要:
调用类型(Operation Type)
- 
0: 普通调用(CALL),EVM会执行目标合约的代码。
- 
1: 委托调用(DELEGATECALL),EVM会在当前合约的上下文中执行目标合约的代码。
Gnosis Safe文档中的定义
在Gnosis Safe的文档中,operation字段的定义如下:
operation: 0 | 1- 
0表示CALL。
- 
1表示DELEGATECALL。
总结
与EVM合约交互的数据格式由以下标准定义:
- 
以太坊黄皮书:定义了交易的核心结构( to、value、data等)。
- 
Solidity ABI规范:定义了如何编码 data字段。
- 
Gnosis Safe文档:定义了 operation字段的用途。
如果你需要更详细的规范内容,可以参考以下链接:
- 
Solidity ABI规范: https://docs.soliditylang.org/en/v0.8.0/abi-spec.html 
- 
Gnosis Safe文档: https://docs.gnosis.io/safe/docs/ 
 
                    
                     
                    
                 
                    
                
 
                
            
         
         浙公网安备 33010602011771号
浙公网安备 33010602011771号