EOS系列 - WASM智能合约 - 数据类型与RAM

注意事项

  1. EOSIO支持创建智能合约,其执行和资源消耗的方式与在操作系统上运行的应用程序类似。智能合约使用C++编写并转换为WebAssembly。

  2. 计算量和速度由带宽和CPU资源负责,持久信息的存储由RAM负责。只有在执行某些智能合约操作时才需要CPU和带宽,这些资源可以通过抵押Token获得。

  3. 持久性资源RAM需要根据需求预先购买。RAM通常为易失性内存,但在EOS中,它是智能合约的持久性内存。

  4. 必须注意的是,这种持久性信息不存储在区块链中。区块链仅用于记录显示智能合约持久信息发生了变化的交易和事件。

  5. 智能合约是在EOSIO节点上运行的软件,其持久性数据存储在节点的RAM中,操作事件在区块链中存储和同步。

  6. EOS上的智能合约可以处理来自其它合约的通知,还可以调用其它合约的操作,但前提是这些合约已获得必要的权限(eosio.code权限)。

  7. 必须注意的是,一个账户只能与一个智能合约相关联,我们可以在同一账户上更改或升级智能合约代码。

  8. 与ERC20标准不同的是,我们可以在单个Token合约上定义多个币种

数据类型

eosio :: asset

eosio :: asset是一种用于有效处理Token的类型。它可以防止数字溢出,并且能够轻松安全地处理Token。eosio :: asset包含两个字段:存储Token数量的金额和符号,以及Token的符号。因此,值100.0000 SYM可以表示为资产,金额为100,符号为“SYM”。另外请注意,符号本身由eosio :: symbol_type和整数精度定义。在我们的示例中,symbol_type为’SYM’,精度为4。

eosio :: name

eosio :: name是一种用于表示智能合约内账户的类型。它包含了一个字符串和其整数表示。它还显示了一个重载operator _n,可以将字符串转换为eosio :: name类型。例如,我们可以将字符串“mystring”转换为eosio :: name,如“mystring”_n。

使用宏SEND_INLINE_ACTION()来从合约内部调用操作。这需要4个参数:合约的账户名称、方法名称、关联权限以及要传递给操作的数据。

wasm与wabt

Wasm智能合约的效率并不是最优
由于C++最终也是编译成wasm字节码并在虚拟机中运行,效率并不能达到和编译成native code一样高。Wasm可以在三种模式下运行:binaryen, wavm和wabt。其中,binaryen的运行模式是字节码的方式,运行速度最慢。wavm模式是JIT运行方式,速度最快,但是由于需要预编译,加载速度实在是太慢了,并不能为Eos的主链所用。

wabt是最近才支持的运行模式,是基于栈的虚拟机,运行效率会比binaryen运行效率高三倍,算是有了比较大的优化,但是执行的效率和编译成native code后运行仍然还是有一定的差距的。

你可能感兴趣的:(智能合约,EOS系列,DApp)