上一期 中,我们实现了在本地环境中发币这件事情,本期我们就来讲讲这波操作背后的原理——EOS 开发中的 5 个最基础的知识点:
nodeos 区块链操作系统、cleos 命令行工具、钱包与账户、智能合约、默认合约。
上一期中,我们通过这个命令来在本机上运行「区块链操作系统」:
./nodeos -e -p eosio --plugin eosio::wallet_api_plugin --plugin eosio::chain_api_plugin --plugin eosio::account_history_api_plugin
那么这个 nodeos 究竟是什么呢?在官方的文档中是这样定义的:nodeos 是服务器端区块链节点组件( component ),这个组件支持在运行的时候加载各种插件( plugin )。事实上,通过这行命令可以看到,我们运行时加载了钱包( wallet )、链( chain )和账户历史( account history )三个插件。
对于初学者来说,把组件替换为「操作系统」,可能更好理解一些。那么我们运行的是叫做「 nodeos 」的区块链操作系统。只有将操作系统运行起来,我们才能在上面进行开发。而操作系统上面加载了一些插件,通过这些插件,我们才能和操作系统交互。
那么,操作系统前面的「区块链」又是什么意思呢?部分读者是从事传统开发的,对区块链还不了解。因此,虽然有些啰嗦,但仍要在此处普及一下区块链的概念:
区块链:一本「大账本」,上面记载了所有与交易相关的操作。
区块:区块中记载了当前时段与交易相关的操作。所有区块串在一起,就是区块链。
知道了什么是区块链,就能理解为什么我们在上期实操时会有这样的现象:我们右侧屏幕操作时,左侧的屏幕上会跳出一些内容。
这从「区块链」的角度去看,意思是我们的操作「上链」了;从「操作系统」的角度去看,意思是我们和操作系统发生了交互。
从上一期的第四步开始,我们所有命令的最开始都是 cleos ,例如创建钱包:./cleos wallet create 。
cleos 是 EOS 的命令行工具,负责在 nodeos 上 做三件事情——与区块链系统的交互、管理钱包、管理账户,因此需要在启用了 nodeos 的情况下使用。
如果说 nodeos 是一个操作系统,那么 cleos 就是相当于 Terminal 的「命令行工具」。也许,通过下面这张图,你能更好地理解这一点:
在计算机上我们通过终端 Terminal 和操作系统交互,在区块链中我们通过 cleos 命令行工具与区块链操作系统交互。
钱包 是存储密钥对(公钥和私钥)的仓库,在区块链上执行的操作需要经过钱包的签名。
账户 是拥有相应访问权限的链上的安全主体,可以类比为我们计算机上的账户。
那么,钱包和账户的联系是什么呢?
钱包和账户相互独立( no inherent relationship )。当操作需要签名时,例如签署交易,两者才会发生关系。钱包将密钥本地存储在一个加密仓库中(仓库可加锁),能让我们以安全的方式获得签名。在实际项目中,为了更加安全,钱包和 nodeos 应该部署在不同的服务器上。但是在测试的时候从简,给 nodeos 加上 wallet-plugin 插件即可。
上一期中,我们加载了 bios 和 currency 两种智能合约。那么,什么是智能合约?
不用看二手资料,EOS 官方对此有准确清晰的定义:每个账户可以发送结构化的操作( Structured Actions ),并且可以定义代码来处理收到后的操作。EOS为每个账户提供自己的私有数据库,只能由该账户的操作处理程序(Action Handler)访问。除此之外,操作处理程序还可以发送操作到其它账户。
操作 与 自动化操作处理程序 相结合,便是 EOS 所定义的智能合约。
打开 eos 根目录下的 contract 文件夹,我们会看见其中包含一些官方提供的智能合约,这些合约可以称作默认合约。可以看到,我们上一期中使用的 bios 合约位列其中:
但是! currency 合约在新版本中已经没有了——是因为 EOS 官方已经将 currency 合约换成了 token 合约。
现在,我来给大家介绍一下 bios 合约与 token 合约是什么。
bios 合约:
bios的全称是 Basic Input/Output System 「基本输入输出系统」。EOS 官方对它的定义是,通过此合约第一我们可以直接控制其它账户的资源分配,第二可以使用其它需要权限的API调用。
出于实用主义的角度我们先对此不做过多探讨——如果把 EOS 或者说 nodeos 看做一个操作系统,我们把 bios 合约看做启动计算式时按 F8 就能进入的 bios 系统就可以了。这东西必不可少,软件的运行建立在这个基础上,但我们一般情况下不用去管它,只要保证它顺利加载就行。
token 合约:
token 合约提供了代币的发行与转账功能。所以我们才能实现一行代码发币,因为就是一个智能合约嘛!
在这一期里面,我们通过探寻上一期操作背后的原理,学习了 EOS 的 5 个最基础的知识点。实操与理论相结合,我们才能走得更远。所以,今后本课程也将沿用这种一期实操一期理论的形式。
在下一期。我们将往前继续跨一步,学会编写智能合约。有人可能觉得,我没有 C++ 的基础。没关系,实操中学会够用的 C++,是完全有可能的!
为了更好的服务 EOS 开发者,本教程推出基于小密圈的收费版本。收费版本和免费版本的具体差异请看下图。
教程迭代这件事情的重要性,通过第二课我们就能体会到。第二课中的 currency 合约在 EOS 系统更新后变成了 token 合约。所以,如果坚持使用免费课程,可能需要付出更多的时间和精力。
要进小密圈请扫下方二维码:
通过扫描下方二维码答题可部分减免学费:
= END =
长按识别下方二维码
即可关注IMEOS.ONE公众号