EOSIO 开发者指南中文版

admin 2024-02-05 42次阅读

本文由IMEOS猫片翻译,校对:慢雾安全团队,IMEOS—EOS技术团队刘伟江大佬。转载必须保留以上声明,仅授权原文转载。

本教程的目的是演示如何配置可用于开发智能合约的本地EOS网络。本教程的第一部分将着重于:

tokenpocet官网

启动一个节点

token平台

创建一个钱包

创建账户

部署合约

与合约交互

本教程的第二部分将引导你创建和部署自己的合约。

本教程默认你已经安装了 eosio ,并且已经生成了 、cleos 工具。

Part1·启动一个私链

你可以使用下面命令运行单节点网络:

token 权限管理·(中国)官方网站_token平台_tokenpocet官网

该命令设置了许多标志并加载了一些可选的插件,我们将在本教程的其余部分中使用这些插件。假设一切正常,你应该每0.5秒看到一个区块生成消息。

这意味着你的本地网络处于激活状态,正在生成区块,并可投入使用。参阅更多关于 参数信息请执行:

Part2·创建一个钱包

钱包是一个可授权对区块链执行操作的私钥库。这些秘钥加密后存储在磁盘上,加密密码是随机生成的高强度密码,建议把这个密码存储在安全的密码管理器中。

tokenpocet官网_token 权限管理·(中国)官方网站_token平台

为了实现这个简单的开发环境,你的钱包由本地节点配置的 eosio:: 管理,这个插件在我们启动 时自动激活。无论任何时候你重新启动 ,在你使用密钥之前,你必须要解锁你的钱包。

token 权限管理·(中国)官方网站_token平台_tokenpocet官网

在命令行中直接使用密码通常是不安全的,它会被记录到你的 bash 历史记录中。因此你也可以在交互模式下解锁:

出于安全考虑,通常最好在不使用钱包时锁定钱包。要锁定你的钱包而不关闭 ,你可以这样做:

本教程的其余部分需要你解锁钱包后执行。所有新的区块链都是以唯一初始帐户 eosio 的私钥开始。为了与区块链互动,你需要将此初始帐户的密钥导入钱包。将 eosio 帐户的私钥导入你的钱包

Part3·加载 Bios 合约

现在我们有一个带有 eosio 用户私钥的钱包,我们可以设置默认的系统合约。为了开发的目的,默认可以使用 eosio.bios 合约。此合约使你可以直接控制其他帐户的资源分配并访问其他特权 API 。在公链中,该合同将管理 Token 的 和 ,为合约预留 CPU 、网络活动和内存资源。

智能合约 eosio.bios 在 eosio 源代码的 文件夹里。cleos 指令默认是在 eosio 源码根目录中执行,但可以通过指定 ${}//eosio.bios 的全路径从任意位置来执行。

tokenpocet官网_token 权限管理·(中国)官方网站_token平台

cleos 用两个 产生一个交易, eosio:: 和eosio::

代码定义了合约如何运行,abi 描述了如何在 和参数的 json 描述文件之间转换。虽然 abi 文件是可选的,但是所有的 eosio 工具都依赖于它以便于使用。

无论何时,你执行一个交易都会看到如下输出:

token 权限管理·(中国)官方网站_token平台_tokenpocet官网

这可以理解为:由 eosio 所定义的 '' 被 eosio 合约以参数 {args...} 执行。

正如我们稍后会看到的, 可以被多个合约所处理。这次调用的最后一个参数是 -p eosio ,这个参数告诉 cleos 使用我们之前导入的 权限私钥来签名这个 。

Part4·创建一个账户

现在我们已经建立了基础系统合约,我们可以开始创建自己的账户。

为此,我们首先为该帐户生成一对密钥。

token平台_tokenpocet官网_token 权限管理·(中国)官方网站

然后我们将私钥导入我们的钱包:

密钥不会自动添加到钱包,因此跳过此步骤可能会导致你对你的帐户失去控制权。

Part5·创建两个用户账号

接下来,我们将使用上一步骤中创建和导入的密钥,创建两个帐户: user 和

tokenpocet官网_token平台_token 权限管理·(中国)官方网站

因为我们正在使用 eosio:: ,所以我们能够查询所有由我们的密钥控制的账户:

token 权限管理·(中国)官方网站_token平台_tokenpocet官网

Part6·创建Token合约

在这个阶段,区块链还不能做很多事,让我们来部署 eosio.token 合约。该合约允许创建许多不同的 token,这些 token 都运行在同一个合约上,但可能由不同的用户管理。

首先需要创建一个账户来部署这个合约。

token平台_token 权限管理·(中国)官方网站_tokenpocet官网

接下来就可以开始部署了(合约代码位于 ${}//eosio.token )

tokenpocet官网_token平台_token 权限管理·(中国)官方网站

Part7·创建EOS Token

你可以在 /eosio.token/eosio.token.hpp 头文件中查看定义 eosio.token 合约的接口:

tokenpocet官网_token平台_token 权限管理·(中国)官方网站

要创建一个新的 token,我们必须用合适的参数来调用 (...) 。该命令将使用最大的符号,用来从其他 token 中,唯一地鉴别这个 token。发行人将有权要求发行和执行其他 ,例如冻结,召回以及将所有者列入白名单。

根据参数位置来调用这个方法:

token 权限管理·(中国)官方网站_tokenpocet官网_token平台

也可以使用参数名键值对来调用:

tokenpocet官网_token平台_token 权限管理·(中国)官方网站

该命令创建了一个名为 EOS 的新的 token,其精密度为 4 位数,最大供应量为 .0000 EOS。

为了创建这个 token,我们需要获得 eosio.token 合约的许可,因为它“拥有”符号(比如 EOS)的命名空间。该合约的未来版本可能允许其他地方自动购买符号名称。当前我们必须通过 -p eosio.token 在此授权。

Part8·发行 给用户

现在我们已经创建了 token,发行者可以用我们之前创建的 user 账户发行新的 token。我们根据参数位置来调用 issue 这个 。

token平台_token 权限管理·(中国)官方网站_tokenpocet官网

这次输出包含着几个不同的 , issue 和 3 次转账。尽管我们仅仅执行了 issue这个 ,但是 issue 默认执行了 " "," " 通知了发件人和收件人帐户。输出指明所有被调用的 处理程序、被调用的顺序,以及是否生成任何输出。

token平台_tokenpocet官网_token 权限管理·(中国)官方网站

token 权限管理·(中国)官方网站_token平台_tokenpocet官网

从技术上说imToken下载,eosio.token 合约可以跳过 并选择直接修改余额,但在这种情况下,eosio.token 合约遵循我们的 token 约定,该约定要求所有账户余额可以通过他们传输 的总和推论出来。它还要求通知资金的发送者和收款人,以便他们能够自动处理存款和提款。

如果你想要看到广播的实际交易,你可以使用 -d -j 选项来表示 "don't " 和 " as json".

Part9·转移 到

现在 user 账户有一些 token,我们将会把他们转移到账户 并使用权限 -p user。

tokenpocet官网_token平台_token 权限管理·(中国)官方网站

·Hello World 合约

下一步我们将创建我们的第一个"hello world"合约。创建一个名为"hello"的新文件夹token 权限管理·(中国)官方网站,然后创建内容文件 "hello/hello.cpp":

hello/hello.cpp

token平台_token 权限管理·(中国)官方网站_tokenpocet官网

然后你可以像这样将它编译成 Web (.wast):

接着你可以生成 abi:

下一步我们创建账户并上传合约:

token平台_tokenpocet官网_token 权限管理·(中国)官方网站

现在我们可以运行合约:

token平台_token 权限管理·(中国)官方网站_tokenpocet官网

这时合约允许任何人授权,我们也可以这样:

tokenpocet官网_token 权限管理·(中国)官方网站_token平台

这时 是授权者,user 只是一个参数。如果想要合约对用户进行身份认证,那么我们可以修改下 hi() 方法:

token 权限管理·(中国)官方网站_tokenpocet官网_token平台

现在,用户(对应下文的 )和授权者(对应下文的 user )不匹配,那么合同会抛出一个错误

tokenpocet官网_token平台_token 权限管理·(中国)官方网站

我们可以通过授予 权限来解决此问题

token平台_token 权限管理·(中国)官方网站_tokenpocet官网

·部署 合约

tokenpocet官网_token 权限管理·(中国)官方网站_token平台

翻译的原文内容链接来自于 EOSIO 官方 ,链接地址:,

如果有表述不一致的地方,以英文版本为准!