package
0.0.0-20220601090406-a293c92ca3e8
Repository: https://github.com/33cn/plugincgo.git
Documentation: pkg.go.dev
# Functions
注意该接口只能在执行本地交易查询时使用,否则会破坏数据.
NewContractAccount 创建一个新的合约对象 注意,此时合约对象有可能已经存在也有可能不存在 需要通过LoadContract进行判断.
NewMemoryStateDB 基于执行器框架的三个DB构建内存状态机对象 此对象的生命周期对应一个区块,在同一个区块内的多个交易执行时共享同一个DB对象 开始执行下一个区块时(执行器框架调用setEnv设置的区块高度发生变更时),会重新创建此DB对象.
该函数只是方便用来帮助进行单元测试,不可以在正常业务逻辑中使用.
# Variables
ContractDataPrefix 在StateDB中合约账户保存的键值有以下几种 合约数据,前缀+合约地址,第一次生成合约时设置,后面不会发生变化.
ContractStateItemKey 合约中存储的具体状态数据,包含两个参数:合约地址、状态KEY.
ContractStatePrefix 合约状态,前缀+合约地址,保存合约nonce以及其它数据,可变.
No description provided by the author
No description provided by the author
# Structs
ContractAccount 合约账户对象.
MemoryStateDB 内存状态数据库,保存在区块操作时内部的数据变更操作 本数据库不会直接写文件,只会暂存变更记录 在区块打包完成后,这里的缓存变更数据会被清空(通过区块打包分别写入blockchain和statedb数据库) 在交易执行过程中,本数据库会暂存并变更,在交易执行结束后,会返回变更的数据集,返回给blockchain 执行器的Exec阶段会返回:交易收据、合约账户(包含合约地址、合约代码、合约存储信息) 执行器的ExecLocal阶段会返回:合约创建人和合约的关联信息.
Snapshot 版本结构,包含版本号以及当前版本包含的变更对象在变更序列中的开始序号.
# Interfaces
DataChange 数据状态变更接口 所有的数据状态变更事件实现此接口,并且封装各自的变更数据以及回滚动作 在调用合约时(具体的Tx执行时),会根据操作生成对应的变更对象并缓存下来 如果合约执行出错,会按生成顺序的倒序,依次调用变更对象的回滚接口进行数据回滚,并同步删除变更对象缓存 如果合约执行成功,会按生成顺序的郑旭,依次调用变更对象的数据和日志变更记录,回传给区块链.
jvmStateDB 状态数据库封装,面向EVM业务执行逻辑; 生命周期为一个区块,在同一个区块内多个交易执行时使用的是同一个StateDB实例; StateDB包含区块的状态和交易的状态(当前上下文),所以不支持并发操作,区块内的多个交易只能按顺序单线程执行; StateDB除了查询状态数据,还会保留在交易执行时对数据的变更信息,每个交易完成之后会返回变更影响的数据给执行器;.