当前位置:首页 > 比特币新闻 > 正文

精通EOS:智能合约常见概念梳理

来源: 互联网时间:2019-01-14 11:02:31

1、钱包、账户与权限

EOS 钱包里面只存放私钥,而且钱包有一个密码,需要输入密码才能解锁钱包,读取私钥。而账户里面有EOS Token以及智能合约,如果需要转移里面的 EOS Token 或者执行智能合约,你需要钱包中对应的私钥来解锁这个保险箱。

回忆一下创建账户的过程:

  1. 创建钱包
  2. 创建两个密钥对
  3. 导入私钥到钱包中
  4. 创建账户创建账户命令如下:cleos create account [OPTIONS] creator name OwnerKey [ActiveKey]OPTIONS 表示相关的选项,creator 表示为这个创建动作支付 EOS 的账户,即创建者;name 表示新创建的账户名;OwnerKeyActiveKey 表示了两个公钥,它们具有不同的权限。其中 OwnerKey 权限是账户的最高权限,可以修改其它权限,ActiveKey 权限默认可以进行转账等操作,但不能修改权限。转账和智能合约等操作的执行都是在账户中进行的,所以账户名在 EOS 世界其实是以太坊的地址。与以太坊不同,EOS 的账户名不再是一串很长很长的地址,而是一个你可以自定义的英文字母+数字(12345)+符号(.),最长12位,最短1位,全局唯一,先到先得,长度不同注册需要的EOS也不一样。

借用一张图片来表示这些关系

eos-account

2、EOS 系统资源

EOS 是 Enterprise Operation System 的简称,目标是区块链世界中的操作系统,所以一些概念和传统操作系统是类似的,其中计算机中的运行内存,在 EOS 中就可以看做是 RAM;而硬盘就可以对标 EOS 区块链数据库。

EOS 共有三大资源:CPU、NET(网络带宽)和 RAM(内存)。CPU 和 NET 需要临时抵押 EOS 获取,类似于交押金,不用了可以赎回 EOS,RAM只能用EOS直接购买,会在使用过程中被消耗掉。

对于高访问量的数据,例如账户余额、智能合约的当前状态等就会被存储在 RAM 中,并且这部分数据将长期占用 RAM;而低访问量的数据,例如交易数据,就会存储在EOS系统的硬盘中,也就是区块链中。当 RAM 不足时,转账或部署合约等相关操作就无法执行。

目前消耗 RAM 最多的场景就是 EOS 钱包的开户,其次就是转账和一些应用内的操作,因为 EOS 账号不是免费的,需要消耗 RAM。

3、什么是 WebAssembly

WebAssembly 是除了 JavaScript 以外,另一种可以在浏览器中执行的编程语言。这是由Google, Microsoft, Mozilla,Apple等几家大公司合作发起的一个关于面向Web的通用二进制和文本格式的项目。

WebAssembly 是一种新的字节码格式。它的缩写是 .wasm.wasm为文件名后缀,是一种新的底层安全的二进制语法。它被定义为“精简、加载时间短的格式和执行模型”,并且被设计为Web 多编程语言目标文件格式。 这意味着浏览器端的性能会得到极大提升,它也使得我们能够实现一个底层构建模块的集合,例如,强类型和块级作用域。

但是,这并不意味着 WebAssmbly 是为了取代 JavaScript 而生的,就像 Bjarne Stroustup说的:“JS会活得很好,因为世界上只有两种类型的语言:一类语言被人们不断的地吐槽,而另一类语言压根儿没人用!” 而Eric Elliott认为:”最好不要把WebAssembly仅仅当做一门编程语言,实际上它更像是一个编译器。”

WebAssembly 也并不是只有 wasm 一种格式,它还有 wast 格式。这两种格式是等价的,最大的区别就是 wast 是可读文本格式的,而 wasm 是二进制格式的,他们可以通过工具相互转换。

在上一篇我的 hello 合约中,其中一步就是生成 Hello.wasmHello.wast 两个文件,大家可以看下这两个文件的内容。还有,如果大家浏览过 eos 合约目录,就会看到很多 .wasm.wast 文件。

4、什么是 ABI

ABI 是应用程序二进抽接口的缩写,是从区块链外部与合约进行交互,以及合约与合约之间进行交互的一种标准方式。它定义了函数签名、参数编码、返回结果编码等的规则。当合约被编译后,那么它的 ABI 也就确定了。

EOS中 ABI 的作用也和以太坊中大致类似,它定义了函数被调用的规则;定义了参数在调用者和被调用者之间是如何传递的。

5、合约核心概念

  1. actiontransaction 的区别和联系。
    • action 是一个动作,账户和合约交互是通过 action 进行的,可以单独发送一个 action。每个action代表一条合约条款,实现了条款中的具体规则。
    • transaction 是一个或几个 action 组成的原子性操作,类似于传统环境下的事务。所有 action 全部成功,该 transaction 才会成功。

    action 的执行环境被称为 action 上下文,action 上下文提供了执行 action 所需的一些条件,其中一个就是 action 的工作内存,这是 action 保存工作状态的地方。

    在处理一个 action 之前,系统会先为它清理一次内存,因此当变量在一个 action 中被赋值后,另一个 action 的上下文是拿不到这个值的。在 action 之间传递状态的唯一方法就是把它持久存储到 EOS 数据库中。

  2. 合约之间的交互模式合约之间有两种交互模式,即内联和延迟。
    • 内联,意思就是直接采用内部函数体发起,调用其他函数的方式。这可以保证交易无阻碍执行,不必通知外部失败或者成功结果,同时内联也可保证交易始终处于同一作用域以及权限。
    • 延迟,通过生产者的判定来决定延后按时执行,可能会发生超时的问题,但是这种方式可以跨多个作用域工作,并且可以携带着发送给它的合约权限。
  3. 合约之间数据传递智能合约之间通过 action 和共享数据文件来进行交互。

免责声明:

1.本文内容综合整理自互联网,观点仅代表作者本人,不代表本站立场。

2.资讯内容不构成投资建议,投资者应独立决策并自行承担风险。