精通EOS:智能合约常见概念梳理
1、钱包、账户与权限
EOS 钱包里面只存放私钥,而且钱包有一个密码,需要输入密码才能解锁钱包,读取私钥。而账户里面有EOS Token以及智能合约,如果需要转移里面的 EOS Token 或者执行智能合约,你需要钱包中对应的私钥来解锁这个保险箱。
回忆一下创建账户的过程:
- 创建钱包
- 创建两个密钥对
- 导入私钥到钱包中
- 创建账户创建账户命令如下:
cleos create account [OPTIONS] creator name OwnerKey [ActiveKey]
OPTIONS
表示相关的选项,creator
表示为这个创建动作支付 EOS 的账户,即创建者;name
表示新创建的账户名;OwnerKey
、ActiveKey
表示了两个公钥,它们具有不同的权限。其中OwnerKey
权限是账户的最高权限,可以修改其它权限,ActiveKey
权限默认可以进行转账等操作,但不能修改权限。转账和智能合约等操作的执行都是在账户中进行的,所以账户名在 EOS 世界其实是以太坊的地址。与以太坊不同,EOS 的账户名不再是一串很长很长的地址,而是一个你可以自定义的英文字母+数字(12345)+符号(.),最长12位,最短1位,全局唯一,先到先得,长度不同注册需要的EOS也不一样。
借用一张图片来表示这些关系
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.wasm
和 Hello.wast
两个文件,大家可以看下这两个文件的内容。还有,如果大家浏览过 eos 合约目录,就会看到很多 .wasm
和 .wast
文件。
4、什么是 ABI
ABI 是应用程序二进抽接口的缩写,是从区块链外部与合约进行交互,以及合约与合约之间进行交互的一种标准方式。它定义了函数签名、参数编码、返回结果编码等的规则。当合约被编译后,那么它的 ABI 也就确定了。
EOS中 ABI 的作用也和以太坊中大致类似,它定义了函数被调用的规则;定义了参数在调用者和被调用者之间是如何传递的。
5、合约核心概念
action
与transaction
的区别和联系。action
是一个动作,账户和合约交互是通过action
进行的,可以单独发送一个action
。每个action代表一条合约条款,实现了条款中的具体规则。transaction
是一个或几个action
组成的原子性操作,类似于传统环境下的事务。所有action
全部成功,该transaction
才会成功。
action
的执行环境被称为action
上下文,action
上下文提供了执行action
所需的一些条件,其中一个就是action
的工作内存,这是action
保存工作状态的地方。在处理一个
action
之前,系统会先为它清理一次内存,因此当变量在一个action
中被赋值后,另一个action
的上下文是拿不到这个值的。在action
之间传递状态的唯一方法就是把它持久存储到 EOS 数据库中。- 合约之间的交互模式合约之间有两种交互模式,即内联和延迟。
- 内联,意思就是直接采用内部函数体发起,调用其他函数的方式。这可以保证交易无阻碍执行,不必通知外部失败或者成功结果,同时内联也可保证交易始终处于同一作用域以及权限。
- 延迟,通过生产者的判定来决定延后按时执行,可能会发生超时的问题,但是这种方式可以跨多个作用域工作,并且可以携带着发送给它的合约权限。
- 合约之间数据传递智能合约之间通过
action
和共享数据文件来进行交互。
免责声明:
1.本文内容综合整理自互联网,观点仅代表作者本人,不代表本站立场。
2.资讯内容不构成投资建议,投资者应独立决策并自行承担风险。
- 贝佐斯最后一封股东信:宇宙希望你成为普通人,千万别让它成为现实2021-04-19 17:02
- Props,让互联网与区块链无缝对接的「中间件」2021-04-19 17:02
- Coinbase高管到底卖了多少股票?2021-04-19 16:03
- 通往未来之路:下一代互联网与Metaverse2021-04-19 16:03
- 央行前行长周小川谈比特币:要提醒,要小心2021-04-19 15:03
- 链上新知 |电子图片卖出7000万美金,让马斯克都来站台的NFT究竟是什么?2021-04-19 15:02
- Crypto VC,LP怎么投?2021-04-19 13:03
- 周末比特币融资利率跌至-0.03%低点,为7个月以来最低水平2021-04-19 11:02