以太坊中的交易结构

1. 以太坊黄皮书中的交易结构

以太坊黄皮书定义了交易的核心结构。以下是相关部分的摘要:

交易格式(Transaction Format)

一个以太坊交易由以下字段组成:

  • nonce: 交易序列号,用于防止重放攻击。

  • gasPrice: 每单位gas的价格(以wei为单位)。

  • gasLimit: 交易允许消耗的最大gas量。

  • to: 目标地址(合约地址或外部账户地址)。如果为空,表示创建合约。

  • value: 发送的以太币数量(以wei为单位)。

  • data: 调用合约时的输入数据(ABI编码的函数选择器和参数)。

  • vrs: 交易的签名数据。

黄皮书中的定义

在黄皮书的Appendix F. Signing Transactions部分,交易的结构被正式定义为:

 
复制
T ≡ (nonce, gasPrice, gasLimit, to, value, data, v, r, s)

2. EVM执行模型

EVM执行交易时,会根据交易的tovaluedata字段执行相应的操作。以下是黄皮书中关于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字节。

  • 参数编码:根据参数类型(如uint256address等)进行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合约交互的数据格式由以下标准定义:

  1. 以太坊黄皮书:定义了交易的核心结构(tovaluedata等)。

  2. Solidity ABI规范:定义了如何编码data字段。

  3. Gnosis Safe文档:定义了operation字段的用途。

如果你需要更详细的规范内容,可以参考以下链接:

  • 以太坊黄皮书: https://ethereum.github.io/yellowpaper/paper.pdf

  • Solidity ABI规范: https://docs.soliditylang.org/en/v0.8.0/abi-spec.html

  • Gnosis Safe文档: https://docs.gnosis.io/safe/docs/

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/893704.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

记录一下用烧录夹给M710Q刷魔改bios

买了一台nec7想尝试一下linux桌面系统,机器本来仅仅支持六到七代的CPU,一开始选择的是G4600,但在Ubuntu24.04 桌面环境下有些卡顿,浏览器开的比较慢,于是萌生了上八代U的想法 于是买了CH341A编程器和烧录夹,直接开干 首先一定要说的是,烧录夹真的很不好用,夹成功的完全…

win11家庭版安装wsl2

开启功能 新建一个xxx.bat,右键编辑,将下面这段代码粘贴进去,保存回到桌面,然后右键以管理员身份运行。 然后需要重启。 pushd "%~dp0" dir /b %SystemRoot%\servicing\Packages\*Hyper-V*.mum >hyper-v.txt for /f %%i in (findstr /i . hyper-v.txt 2^>n…

1。11

@所有人 网络安全C10-2025.1.11作业:对bluecms进行代码审计,分析复现文件上传、ssti模板注入、文件删除等漏洞2、复习ThinkPHP框架基础知识,重点掌握url传参方式以及获取用户参数的写法3、复习ThinkPHP框架漏洞,重点掌握框架代码执行漏洞及工具使用,了解sql注入漏洞及常见…

1。18

@所有人 网络安全C10-2025.1.18作业:安装jdk并配置多版本jdk切换脚本。安装并破解最新版IDEA,并汉化使用IDEA创建java项目,输出helloworld并打包使用IDEA进行调试,熟练掌握调试方法5、复习java se基础,重点掌握面向对象编程。6、申请deepseek key,安装chatbox、continue、…

Day03_vhdl学习的完善

VHDL代码功能: 针对七段数码管的译码器,将输入的bcd码转换为适合共阴极七段数码管的并行输出代码功能: 不同的结构体使同一实体实现不同功能 注:下次采用Typora自带代码功能插入代码 补充注释,增加注释量 完成设计作业,具有一定创新性和难度英语单词注:今天为第一次练习…

几只毛毛虫?

几只毛毛虫? 题目描述 一天,在生物课上,老师带着小羊和他的同学去公园观察动物。 他看到了草丛里有很多毛毛虫,于是他想,毛毛虫有什么特征呢? 于是他把一条毛毛虫抽象成了一棵有 $n$ 个节点的树。树是一个有 $n$ 个点 $n−1$ 条无向边组成的连通图。 这棵树被称为一条毛毛…

C基础1

基础回顾 Hello World到底是什么🤔 //预处理 #include <stdio.h> //include是找的意思,找到stdio这个头文件//.h是头文件的后缀,.c是c语言源文件的后缀,.cpp是c++源文件的后缀//std是standard标准,i是input输入,o是output输出 //程序的主入口 int main( ) //int表示…

我的Redission使用初体验

本文记录作者第一次使用Redission实现分布式锁的体验。对于碰到的问题进行了一些总结。当我们实际使用redis手写实现分布式锁时,会产生不可重入、不可重试、超时释放和主从一致的问题,此时redission为我们提供的锁完美达成以上要求,适合我们生产时使用。Redisson的实际使用 …

Power Automate 格式化JSON时字段为空

前言最近,在使用Power Automate处理JSON的时候,碰到一个错误。正文1.处理JSON的过程,一般是这样的,如下图:2.测试一下,这样,我们就很容易操作JSON字符串中的属性了,如下图:3.但是,大家在开发中,碰到过这样的问题没有?4.详细的错误信息,如下图:[{"message&qu…

ChromaDB

ChromaDB是一个开源的嵌入式向量数据库,专为存储和查询高维向量数据而设计,特别适用于与大型语言模型(LLMs)和嵌入模型(Embeddings)相关的应用场景 安装pip install chromadb启动服务chroma run --path ./chroma_data --host 0.0.0.0 --port 8000说明: --path ./chroma_…

如何为 Power Automate 配置 Azure Key Vault 权限

前言最近,在Power Automate中使用Azure Key Vault,然后,就需要配置一下AKV的权限。正文1.我们在Azure Portal里新建一个Key vault,如下图:2.进入Access policies,点击Create,如下图:3.如果只是为Power Automate使用,只需要勾选红框的权限就好,如下图:4.搜索需要的服…

P2671 [NOIP 2015 普及组] 求和

好题,思想很好。 首先看到这个题一个显然的思路是\(O(n^3)\)的暴力,直接枚举三个判断可行性计算贡献。 思考简单的优化,题目条件限制z-y=y-x变形可得\(y=\frac{z-x}{2}\),由于\(y\)一定是正整数,所以\(z\)与\(x\)正负性相同,考虑将原数组拆分为奇数和偶数两个集合,并在两…