Ethereum Environment Interface (EEI)——以太坊环境接口

以太坊环境接口将核心以太坊API暴露给ewasm。以太坊模块将以以太坊客户端的本地语言实现。所有参数和返回都被限制为32或64位整数。不允许使用浮点数。(注:返回值被限制为32和64,这是由于WebAssembly限制的)

数据类型


我们定义了以下以太坊数据类型:

- bytes:长度不受限制的字节数组

- address:一个160位的数字,在内存中表示为20字节长的小endian无符号整数

- u128:一个128位的数字,在内存中表示为16字节长的小endian无符号整数

- u256:一个256位的数字,在内存中表示为32字节长的小endian无符号整数

我们还定义了以下WebAssembly数据类型:

- i32:与WebAssembly的i32相同

- i32ptr:与WebAssembly的i32相同,但被视为WebAssembly内存偏移的指针

- i64:与WebAssembly的i64相同

API


useGas


在gas计数器中减去一个数额

参数

amount i64 要减去气体计数器的金额。
返回结果

getAddress


获取当前执行账户的地址,并将其存储在内存中的给定偏移量处。

参数

resultOffset i32ptr 要存储地址的内存偏移(地址)。
返回结果

getExternalBalance


获取给定账户的余额,并将其加载到给定偏移量的内存中。

参数

addressOffset i32ptr 要加载地址的内存偏移量(地址)
resultOffset i32ptr 要加载余额的内存偏移量(u128)
返回

getBlockHash


获取区块的哈希值,只能从最近256个块中获取。

参数

number i64 要加载的块
resultOffset i32ptr 要加载哈希值的内存偏移量(u256)
返回结果

result i32 成功时返回0,失败时返回1

注意:在失败的情况下,resultOffset所指向的输出内存是不变的。

call


向一个给定的地址路径发送一个带有任意数据的消息

参数

gas i64 gas限制
addressOffset i32ptr 要加载地址的内存偏移量(地址)
valueOffset i32ptr 加载数值的内存偏移量(u128)
dataOffset i32ptr 加载数据的内存偏移量(bytes)
dataLength i32 数据的长度
返回结果

result i32 成功时返回0,失败时返回1,恢复时返回2。

CallDataCopy


将当前环境中的输入数据复制到内存中。这涉及到与消息调用指令或交易一起传递的输入数据。

参数

resultOffset i32ptr 要载入数据的内存偏移量(bytes)
dataOffset i32 输入数据的偏移量
length i32 要复制的数据的长度
返回

getCallDataSize


获取当前环境中输入数据的大小。这涉及到与消息调用指令或交易一起传递的输入数据。

参数

返回

callDataSize i32

callCode


用另一个账户的代码对该账户进行消息调用。

参数

gas i64 gas限制
addressOffset i32ptr 要加载地址的内存偏移量(地址)
valueOffset i32ptr 加载值的内存偏移量(u128)
dataOffset i32ptr 加载数据的内存偏移量(字节数)
dataLength i32 数据的长度
返回结果

result i32 成功时返回0,失败时返回1,恢复时返回2。

CallDelegate


用另一个账户的代码对这个账户进行消息调用,但保持当前的发送者和值。

参数

gas i64 gas限制
addressOffset i32ptr 用于加载地址的内存偏移量(地址)。
dataOffset i32ptr 加载数据的内存偏移量(字节数)
dataLength i32 数据的长度
返回结果

result i32 成功时返回0,失败时返回1,恢复时返回2。

callStatic


向一个给定的地址路径发送一个带有任意数据的消息,但不允许修改状态。这包括日志、创建、自毁和非零值的调用。

参数

gas i64 gas限制
addressOffset i32ptr 要加载地址的内存偏移量(地址)
dataOffset i32ptr 加载数据的内存偏移量(字节数)
dataLength i32 数据的长度
返回结果

result i32 成功时返回0,失败时返回1,恢复时返回2。

storageStore


将内存中的256-bit存储到持久性存储中

参数

pathOffset i32ptr 加载路径的内存偏移(u256)。
valueOffset i32ptr 要加载值的内存偏移量(u256)
返回结果

storageLoad


从持久性存储中加载一个256-bit到内存。

参数

pathOffset i32ptr 要加载路径的内存偏移量(u256)
resultOffset i32ptr 用于存储结果的内存偏移量(u256)
返回结果

getCaller


获取调用者地址,并在给定的偏移量处将其加载到内存中。这是直接负责此次执行的账户的地址。

参数

resultOffset i32ptr 要加载地址的内存偏移量(地址)。
返回

getCallValue


获取负责此次执行的指令/交易的存入值,并将其加载到内存的给定位置。

参数

resultOffset i32ptr 要加载的内存偏移量

返回

codeCopy


将当前环境中运行的代码复制到内存中。

参数

resultOffset i32ptr 要载入结果的内存偏移量(字节)。
codeOffset i32 代码中的偏移量
length i32 要复制的代码的长度
返回

getCodeSize


获取在当前环境中运行的代码的大小。

参数

返回

codeSize i32

getBlockCoinbase


获取该区块的旷工地址并加载到内存中。

参数

resultOffset i32ptr 要载入coinbase地址的内存偏移量(地址)。
返回

create


创建一个具有给定值的新合约。

参数

valueOffset i32ptr 从内存中加载值的偏移量(u128)
dataOffset i32ptr 从内存中加载新合同的代码的偏移量(字节)
length i32 数据长度
resultOffset i32ptr 写入新合同地址的内存偏移量(地址)
注意:在成功的情况下,create将清除返回缓冲区,或者用来自revert的数据填充它。

返回

result i32 成功时返回0,失败时返回1,恢复时返回2。

getBlockDifficulty


获取区块的难度。

参数

resultOffset i32ptr 用于加载难度的内存偏移(u256)。
返回结果

externalCodeCopy


将一个账户的代码复制到内存中。

参数

addressOffset i32ptr 要加载地址的内存偏移量(地址)
resultOffset i32ptr 要载入结果的内存偏移量(字节)
codeOffset i32 代码中的偏移量
length i32 要复制的代码的长度
返回

getExternalCodeSize


获取一个账户的代码大小。

参数

addressOffset i32ptr 要加载地址的内存偏移量(地址)
返回

extCodeSize i32

getGasLeft


返回当前的gasCounter。

参数

返回

gasLeft i64 

getBlockGasLimit


获取区块的gas限制。

参数

返回

blockGasLimit i64

getTxGasPrice


获取当前环境中的gas价格

参数

valueOffset i32ptr 写入数值的内存偏移(u128)。
返回

log


在当前环境中创建一个新的日志

参数

dataOffset i32ptr 要加载数据的内存偏移量(字节)。
length i32 数据长度
numberOfTopics i32 下面的主题数量(0到4)。
topic1 i32ptr 加载topic1的内存偏移量(u256)
topic2 i32ptr 加载topic2的内存偏移量(u256)
topic3 i32ptr 加载topic3的内存偏移量(u256)
topic4 i32ptr 加载topic4的内存偏移量(u256)
返回

getBlockNumber


获取块的编号。

参数

返回

blockNumber i64

getTxOrigin


获取执行的起始地址,并按给定的偏移量将其加载到内存中。这是原始交易的发送者;它绝不是一个具有非空关联代码的账户。

参数

resultOffset i32ptr 要加载起始地址的内存偏移量(地址)
返回

finish


设置返回输出数据。这将引起一个trap,立即中止执行。

参数

dataOffset i32ptr 输出数据的内存偏移(字节数)
length i32 输出数据的长度
返回

revert


设置返回输出数据。这将引起一个trap,立即中止执行。

参数

dataOffset i32ptr 输出数据的内存偏移(字节数)
length i32 输出数据的长度
返回

getReturnDataSize


获取当前返回数据缓冲区到内存的大小。这包含最后执行的调用、callCode、callDelegate、callStatic或create的返回数据。

注意:创建只在失败的情况下填充返回数据缓冲区。

参数

返回数据

dataSize i32

returnDataCopy


将当前的返回数据缓冲区复制到内存中。这包含了最后执行的调用、callCode、callDelegate、callStatic或create的返回数据。

注意:创建只在失败的情况下填充返回数据缓冲区。

参数

resultOffset i32ptr 要加载数据的内存偏移(字节数)
dataOffset i32 返回数据中的偏移量
length i32 要复制的数据的长度
返回结果

selfDestruct


标记账户以便以后删除,并将剩余的余额交给指定的受益人地址。这将引起一个trap,立即中止执行。

参数

addressOffset i32ptr 要加载地址的内存偏移量(地址)。
返回

getBlockTimestamp


获取该块的时间戳。

参数

返回

blockTimestamp i64

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值