以太坊怎么创建合约账户?很多小伙伴不知道怎么在以太坊中创建合约账户,其实方法很简单,玩家们只要稍微的了解一下就会了,那么接下来就和fx小编一起来了解一下吧,希望对小伙伴们能够有所帮助。
以太坊怎么创建合约账户?
1. 合约
合约(Contract)是 EVM 用来执行(虚拟机)指令的结构体。
2. 合约的结构
Contract 的结构定义于:core/vm/contract.go 中,在这些成员变量里,
caller 是转帐转出方地址(账户),
self 是转入方地址,不过它们的类型都用接口 ContractRef 来表示;
Code 是指令数组,其中每一个 byte 都对应于一个预定义的虚拟机指令;
CodeHash 是 Code 的 RLP 哈希值;
Input 是数据数组,是指令所操作的数据集合;
Args 是参数。
3. self变量
有意思的是 self 这个变量,为什么转入方地址要被命名成 self 呢?
Contract 实现了ContractRef 接口,返回的恰恰就是这个 self 地址。
所以当 Contract 对象作为一个 ContractRef 接口出现时,它返回的地址就是它的 self地址。
那什么时候 Contract 会被类型转换成 ContractRef 呢?
当 Contract A 调用另一个Contract B 时,A 就会作为 B 的 caller 成员变量出现。
Contract 可以调用 Contract,这就为系统在业务上的潜在扩展,提供了空间。
创建一个 Contract 对象时,重点关注对 self 的初始化,以及对 Code, CodeAddr 和Input 的赋值。
另外,StateDB 提供
方法 SetCode(),可以将指令数组 Code 存储在某个 stateObject 对象中;
方法 GetCode(),可以从某个 stateObject 对象中读取已有的指令数组 Code。
4. stateObject
stateObject (core/state/state_object.go)是 Ethereum 里用来管理一个账户所有信息修改的结构体,它以一个 Address 类型变量为唯一标示符。
StateDB 在内部用一个巨大的map 结构来管理这些 stateObject 对象。
所有账户信息-包括 Ether 余额,指令数组 Code,该账户发起合约次数 nonce 等-它们发生的所有变化,会首先缓存到 StateDB 里的某个stateObject 里,然后在合适的时候,被 StateDB 一起提交到底层数据库。
5. 创建并执行 Contract
EVM(core/vm/evm.go)中 目前有五个函数可以创建并执行 Contract,按照作用和调用方式,可以分成两类:
Create(), Call(): 二者均在 StateProcessor 的 ApplyTransaction()被调用以执行单个交易,并且都有调用转帐函数完成转帐。
CallCode(), DelegateCall(), StaticCall():三者由于分别对应于不同的虚拟机指令(1 byte)操作,不会用以执行单个交易,也都不能处理转帐。
以上所述的就是关于以太坊怎么创建合约账户的全部快讯内容了,如果还想了解更多关于区块链的相关资讯内容尽在fxdiv外汇汇率查询网,这里会持续更新有关区块链的相关资讯。