主页 > imtoken官网怎么找到 > 以太坊虚拟机EVM-合约创建过程

以太坊虚拟机EVM-合约创建过程

imtoken官网怎么找到 2023-02-28 07:05:12

1)摘要合约创建:

eth_sendTransaction:创建一个新的消息调用交易,如果data字段包含code,则创建一个合约;

RPC(Romote Procedure Call):远程过程调用,允许计算机程序远程调用另一台计算机的子程序,而无需关心底层网络通信。

1.编译合约代码,生成字节码:

"0x60606040523415600e57600080fd5b603580601b6000396000f3006060604052600080fd00a165627a7a723058204bf1accefb2526a5077bcdfeaeb8020162814272245a9741cc2fddd89191af1c0029"

2. 向以太坊节点发送eth_sendTransaction RPC(Remote Procedure Call)请求创建交易

大概参数:

{

以太坊虚拟机源代码_sitebtc798.com 以太坊开源代码_以太坊的股票代码是多少

  "from": "0xbd04d16f09506e80d1fd1fd8d0c79afa49bd9976",   "to": null,   "gas": "68653", // 30400,   "gasPrice": "1", // 10000000000000   "data": "0x60606040523415600e57600080fd5b603580601b6000396000f3006060604052600080fd00a165627a7a723058204bf1accefb2526a5077bcdfeaeb8020162814272245a9741cc2fddd89191af1c0029" }

该事务机制还用于:

sitebtc798.com 以太坊开源代码_以太坊虚拟机源代码_以太坊的股票代码是多少

@Transfer ether 到账户或合约;

@call 带参数的合约方法;

当处理一笔交易时,EVM会执行输入的数据,即:data as code,并创建合约

2)字节码详解:

编译生成的字节码可以分为三部分:

//部署代码
60606040523415600e57600080fd5b5b603680601c6000396000f300

以太坊虚拟机源代码_sitebtc798.com 以太坊开源代码_以太坊的股票代码是多少

//合约代码 60606040525b600080fd00 // Auxdata a165627a7a723058209747525da0f525f1132dde30c8276ec70c4786d4b08a798eda3c8314bf796cc30029

创建合约时运行部署代码;

合约创建成功后,调用方法时,运行合约代码;

(可选)Auxdata是源码的加密指纹,用于校验。 这只是数据,EVM 永远不会执行;

以太坊虚拟机源代码_sitebtc798.com 以太坊开源代码_以太坊的股票代码是多少

2.1 部署代码的主要功能:

* 运行构造函数并设置初始化的内存变量;

* 计算(读取)合约代码并返回给EVM;

solidity编译器生成的部署代码会将字节码中的合约代码加载到内存中,并作为合约代码返回。

3)合约创建详情:

Nonce:在比特币中,nonce主要用于调整POW挖矿难度,而在以太坊中,除了调整挖矿难度外以太坊虚拟机源代码,外部账户的每笔交易也有一个nonce。 这个nonce是一个连续整数,在每个账户发送交易时产生,其主要设计目的是防止双花。

双重支付:双重支付是指在数字货币系统中以太坊虚拟机源代码,由于数据的可复制性,同一数字资产可能因系统操作不当而被重复使用。

sitebtc798.com 以太坊开源代码_以太坊虚拟机源代码_以太坊的股票代码是多少

1、检测调用方是否有足够的余额进行转账;

2. 从调用者的地址中推导出一个新合约的地址(通过创建者账户的随机数);

3.使用派生的合约地址创建新的合约账户;

4. 将初始以太币资金从调用者转移到新合约;

5、将输入数据设置为合约的部署代码,然后使用EVM执行;

6. 检查错误,如果合约代码太长则失败。 收取用户的煤气并设置合同代码。

4)构造函数参数:

除了生成合约代码外,部署代码的另一个功能是运行构造函数进行设置。 如果有构造函数参数,那么部署代码需要从某处加载参数。

参考: