EOSIO 开发者指南中文版
本文由IMEOS猫片翻译,校对:慢雾安全团队,IMEOS—EOS技术团队刘伟江大佬。转载必须保留以上声明,仅授权原文转载。
本教程的目的是演示如何配置可用于开发智能合约的本地EOS网络。本教程的第一部分将着重于:
启动一个节点
创建一个钱包
创建账户
部署合约
与合约交互
本教程的第二部分将引导你创建和部署自己的合约。
本教程默认你已经安装了 eosio ,并且已经生成了 、cleos 工具。
Part1·启动一个私链
你可以使用下面命令运行单节点网络:
该命令设置了许多标志并加载了一些可选的插件,我们将在本教程的其余部分中使用这些插件。假设一切正常,你应该每0.5秒看到一个区块生成消息。
这意味着你的本地网络处于激活状态,正在生成区块,并可投入使用。参阅更多关于 参数信息请执行:
Part2·创建一个钱包
钱包是一个可授权对区块链执行操作的私钥库。这些秘钥加密后存储在磁盘上,加密密码是随机生成的高强度密码,建议把这个密码存储在安全的密码管理器中。
为了实现这个简单的开发环境,你的钱包由本地节点配置的 eosio:: 管理,这个插件在我们启动 时自动激活。无论任何时候你重新启动 ,在你使用密钥之前,你必须要解锁你的钱包。
在命令行中直接使用密码通常是不安全的,它会被记录到你的 bash 历史记录中。因此你也可以在交互模式下解锁:
出于安全考虑,通常最好在不使用钱包时锁定钱包。要锁定你的钱包而不关闭 ,你可以这样做:
本教程的其余部分需要你解锁钱包后执行。所有新的区块链都是以唯一初始帐户 eosio 的私钥开始。为了与区块链互动,你需要将此初始帐户的密钥导入钱包。将 eosio 帐户的私钥导入你的钱包
Part3·加载 Bios 合约
现在我们有一个带有 eosio 用户私钥的钱包,我们可以设置默认的系统合约。为了开发的目的,默认可以使用 eosio.bios 合约。此合约使你可以直接控制其他帐户的资源分配并访问其他特权 API 。在公链中,该合同将管理 Token 的 和 ,为合约预留 CPU 、网络活动和内存资源。
智能合约 eosio.bios 在 eosio 源代码的 文件夹里。cleos 指令默认是在 eosio 源码根目录中执行,但可以通过指定 ${}//eosio.bios 的全路径从任意位置来执行。
cleos 用两个 产生一个交易, eosio:: 和eosio::
代码定义了合约如何运行,abi 描述了如何在 和参数的 json 描述文件之间转换。虽然 abi 文件是可选的,但是所有的 eosio 工具都依赖于它以便于使用。
无论何时,你执行一个交易都会看到如下输出:
这可以理解为:由 eosio 所定义的 '' 被 eosio 合约以参数 {args...} 执行。
正如我们稍后会看到的, 可以被多个合约所处理。这次调用的最后一个参数是 -p eosio ,这个参数告诉 cleos 使用我们之前导入的 权限私钥来签名这个 。
Part4·创建一个账户
现在我们已经建立了基础系统合约,我们可以开始创建自己的账户。
为此,我们首先为该帐户生成一对密钥。
然后我们将私钥导入我们的钱包:
密钥不会自动添加到钱包,因此跳过此步骤可能会导致你对你的帐户失去控制权。
Part5·创建两个用户账号
接下来,我们将使用上一步骤中创建和导入的密钥,创建两个帐户: user 和
因为我们正在使用 eosio:: ,所以我们能够查询所有由我们的密钥控制的账户:
Part6·创建Token合约
在这个阶段,区块链还不能做很多事,让我们来部署 eosio.token 合约。该合约允许创建许多不同的 token,这些 token 都运行在同一个合约上,但可能由不同的用户管理。
首先需要创建一个账户来部署这个合约。
接下来就可以开始部署了(合约代码位于 ${}//eosio.token )
Part7·创建EOS Token
你可以在 /eosio.token/eosio.token.hpp 头文件中查看定义 eosio.token 合约的接口:
要创建一个新的 token,我们必须用合适的参数来调用 (...) 。该命令将使用最大的符号,用来从其他 token 中,唯一地鉴别这个 token。发行人将有权要求发行和执行其他 ,例如冻结,召回以及将所有者列入白名单。
根据参数位置来调用这个方法:
也可以使用参数名键值对来调用:
该命令创建了一个名为 EOS 的新的 token,其精密度为 4 位数,最大供应量为 .0000 EOS。
为了创建这个 token,我们需要获得 eosio.token 合约的许可,因为它“拥有”符号(比如 EOS)的命名空间。该合约的未来版本可能允许其他地方自动购买符号名称。当前我们必须通过 -p eosio.token 在此授权。
Part8·发行 给用户
现在我们已经创建了 token,发行者可以用我们之前创建的 user 账户发行新的 token。我们根据参数位置来调用 issue 这个 。
这次输出包含着几个不同的 , issue 和 3 次转账。尽管我们仅仅执行了 issue这个 ,但是 issue 默认执行了 " "," " 通知了发件人和收件人帐户。输出指明所有被调用的 处理程序、被调用的顺序,以及是否生成任何输出。
从技术上说imToken下载,eosio.token 合约可以跳过 并选择直接修改余额,但在这种情况下,eosio.token 合约遵循我们的 token 约定,该约定要求所有账户余额可以通过他们传输 的总和推论出来。它还要求通知资金的发送者和收款人,以便他们能够自动处理存款和提款。
如果你想要看到广播的实际交易,你可以使用 -d -j 选项来表示 "don't " 和 " as json".
Part9·转移 到
现在 user 账户有一些 token,我们将会把他们转移到账户 并使用权限 -p user。
·Hello World 合约
下一步我们将创建我们的第一个"hello world"合约。创建一个名为"hello"的新文件夹token 权限管理·(中国)官方网站,然后创建内容文件 "hello/hello.cpp":
hello/hello.cpp
然后你可以像这样将它编译成 Web (.wast):
接着你可以生成 abi:
下一步我们创建账户并上传合约:
现在我们可以运行合约:
这时合约允许任何人授权,我们也可以这样:
这时 是授权者,user 只是一个参数。如果想要合约对用户进行身份认证,那么我们可以修改下 hi() 方法:
现在,用户(对应下文的 )和授权者(对应下文的 user )不匹配,那么合同会抛出一个错误
我们可以通过授予 权限来解决此问题
·部署 合约
翻译的原文内容链接来自于 EOSIO 官方 ,链接地址:,
如果有表述不一致的地方,以英文版本为准!
发表评论:
◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。