以太坊怎么创建合约账户

作者: | 2022-11-17 14:16:12 | 6864人阅读 |

以太坊怎么创建合约账户?很多小伙伴不知道怎么在以太坊中创建合约账户,其实方法很简单,玩家们只要稍微的了解一下就会了,那么接下来就和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外汇汇率查询网,这里会持续更新有关区块链的相关资讯。

相关阅读
汇率 | 美金汇率 | 人民币汇率 | 欧元汇率 | 澳元汇率 | 加币汇率 | 卢布汇率人民币 | 越南盾汇率对人民币 | 外汇牌价 | 美元指数 | 汇率换算器
版权所有 © 2013 外汇汇率查询网 www.fxdiv.com 蜀ICP备2022011134号-2