EIP-2930交易引入了访问列表(Access List)功能,以优化Gas费和提高交易效率。 特点: - 访问列表(Access List):提前声明交易将访问的存储和合约地址,减少Gas费 - Gas价格和Gas限额:与Legacy交易类似,但增加了访问列表字段。 示例:
{
"from": "0xSenderAddress",
"to": "0xRecipientAddress",
"value": "1000000000000000000", // 1 ETH in Wei
"gas": 21000,
"gasPrice": "20000000000", // 20 Gwei
"accessList": [
{
"address": "0xContractAddress",
"storageKeys": ["0xStorageKey1", "0xStorageKey2"]
}
]
}
如何理解 from, to, address, storageKeys?
1. from(发送方地址)
代表交易发起者,即签名交易并支付 Gas 费的账户地址。 这个地址通常是一个 EOA (Externally Owned Account, 外部账户),即普通钱包账户,而不是合约账户。 交易需要 from 地址的私钥签名,以证明交易的合法性。 示例:
📌 理解:
from 是钱包地址,必须与交易签名匹配。 例如,你用 MetaMask 发送交易,from 就是你的钱包地址。
2. to(接收方地址)
代表交易的接收者,可以是 外部账户(EOA)或合约地址。 如果 to 是 EOA,表示普通转账交易。 如果 to 是 智能合约地址,表示调用智能合约,可能包含 data 字段来调用特定合约方法。 示例:
📌 理解: to 可以是: 普通账户(EOA) 👉 直接收款。 智能合约 👉 触发合约逻辑(如 DEX 交易、NFT 购买)。
3. address(访问列表中的合约地址)
accessList 里面的 address 指的是合约地址,表示该交易会访问这个合约的存储。 访问列表的作用是提前声明要访问的存储位置,从而减少 Gas 费,因为 EVM 会减少 Cold Storage 访问的 Gas 消耗。 示例:
📌 理解:
address 是即将读取或修改存储的智能合约地址。 EIP-2930 允许提前声明它,避免额外的 Gas 消耗(Cold Storage Access 变成 Warm Storage Access)。
4. storageKeys(存储键)
storageKeys 代表交易中即将访问的存储槽(Storage Slot),用于 SSTORE / SLOAD 操作。 这是 EVM 存储变量的底层数据结构,智能合约的所有状态变量都存储在 256-bit 宽的 slot 里。 示例:
📌 理解: - storageKeys 指定 存储变量的位置,这样 EVM 运行时无需额外查找,降低 Gas 成本。 例如: - storageKeys[0] 可能对应于合约中的 uint256 public balance; - storageKeys[1] 可能对应 mapping(address => uint256) balances;
总结
字段名 作用 具体内容 from 交易发送者 EOA 账户,支付 Gas 费 to 交易接收者 可能是 EOA 或合约地址 address 访问列表中的合约 交易需要访问的智能合约地址 storageKeys 访问的存储键 指定智能合约的存储位置,减少 Gas 费
🌟 关键点 from 是 谁发送交易(需要签名)。 to 是 交易的目标(EOA 账户 or 智能合约)。 address 是 交易会访问的合约。 storageKeys 是 交易会访问的合约存储位置,用于优化 Gas 费。
💡EIP-2930 主要通过 Access List(访问列表)优化存储访问的 Gas 费用,使合约调用更高效。