主页 > imtoken官网怎么找到 > 以太坊虚拟机EVM-合约创建过程
以太坊虚拟机EVM-合约创建过程
1)摘要合约创建:
eth_sendTransaction:创建一个新的消息调用交易,如果data字段包含code,则创建一个合约;
RPC(Romote Procedure Call):远程过程调用,允许计算机程序远程调用另一台计算机的子程序,而无需关心底层网络通信。
1.编译合约代码,生成字节码:
"0x60606040523415600e57600080fd5b603580601b6000396000f3006060604052600080fd00a165627a7a723058204bf1accefb2526a5077bcdfeaeb8020162814272245a9741cc2fddd89191af1c0029"
2. 向以太坊节点发送eth_sendTransaction RPC(Remote Procedure Call)请求创建交易
大概参数:
{
"from": "0xbd04d16f09506e80d1fd1fd8d0c79afa49bd9976",
"to": null,
"gas": "68653", // 30400,
"gasPrice": "1", // 10000000000000
"data": "0x60606040523415600e57600080fd5b603580601b6000396000f3006060604052600080fd00a165627a7a723058204bf1accefb2526a5077bcdfeaeb8020162814272245a9741cc2fddd89191af1c0029"
}
该事务机制还用于:
@Transfer ether 到账户或合约;
@call 带参数的合约方法;
当处理一笔交易时,EVM会执行输入的数据,即:data as code,并创建合约
2)字节码详解:
编译生成的字节码可以分为三部分:
//部署代码
60606040523415600e57600080fd5b5b603680601c6000396000f300
//合约代码
60606040525b600080fd00
// Auxdata
a165627a7a723058209747525da0f525f1132dde30c8276ec70c4786d4b08a798eda3c8314bf796cc30029
创建合约时运行部署代码;
合约创建成功后,调用方法时,运行合约代码;
(可选)Auxdata是源码的加密指纹,用于校验。 这只是数据,EVM 永远不会执行;
2.1 部署代码的主要功能:
* 运行构造函数并设置初始化的内存变量;
* 计算(读取)合约代码并返回给EVM;
solidity编译器生成的部署代码会将字节码中的合约代码加载到内存中,并作为合约代码返回。
3)合约创建详情:
Nonce:在比特币中,nonce主要用于调整POW挖矿难度,而在以太坊中,除了调整挖矿难度外以太坊虚拟机源代码,外部账户的每笔交易也有一个nonce。 这个nonce是一个连续整数,在每个账户发送交易时产生,其主要设计目的是防止双花。
双重支付:双重支付是指在数字货币系统中以太坊虚拟机源代码,由于数据的可复制性,同一数字资产可能因系统操作不当而被重复使用。
1、检测调用方是否有足够的余额进行转账;
2. 从调用者的地址中推导出一个新合约的地址(通过创建者账户的随机数);
3.使用派生的合约地址创建新的合约账户;
4. 将初始以太币资金从调用者转移到新合约;
5、将输入数据设置为合约的部署代码,然后使用EVM执行;
6. 检查错误,如果合约代码太长则失败。 收取用户的煤气并设置合同代码。
4)构造函数参数:
除了生成合约代码外,部署代码的另一个功能是运行构造函数进行设置。 如果有构造函数参数,那么部署代码需要从某处加载参数。
参考: