返回文章库

EOSIO 开发者指南中文版

查找币 学术研究 安全研究 Web3安全 区块链安全
EOSIO 开发者指南中文版

查找币安全研究院

链上取证分析 | Web3 风险核验 | Web3 事件响应
以合法授权、证据保全、隐私保护和可复核流程为前提,不要求用户在线提交敏感凭证或非公开材料。

查看研究院 研究报告中心
## EOSIO 开发者指南中文版 本文由查找币安全团队基于安全研究整理发布,旨在分享Web3安全技术,帮助用户提高安全意识。 --- 本文由IMEOS猫片翻译,校对:查找币安全团队,IMEOS—EOS技术团队刘伟江大佬。转载必须保留以上声明,仅授权原文转载。 本教程的目的是演示如何配置可用于开发智能合约的本地EOS网络。本教程的第一部分将着重于: 启动一个节点  创建一个钱包 创建账户   部署合约 与合约交互 本教程的第二部分将引导你创建和部署自己的合约。 本教程默认你已经安装了 eosio ,并且已经生成了 nodeos、cleos 工具。 Part1·启动一个私链 你可以使用下面命令运行单节点网络: 该命令设置了许多标志并加载了一些可选的插件,我们将在本教程的其余部分中使用这些插件。假设一切正常,你应该每0.5秒看到一个区块生成消息。 这意味着你的本地网络处于激活状态,正在生成区块,并可投入使用。参阅更多关于 nodeos 参数信息请执行: Part2·创建一个钱包 钱包是一个可授权对区块链执行操作的私钥库。这些秘钥加密后存储在磁盘上,加密密码是随机生成的高强度密码,建议把这个密码存储在安全的密码管理器中。 为了实现这个简单的开发环境,你的钱包由本地节点配置的 eosio::wallet_api_plugin 管理,这个插件在我们启动 nodeos 时自动激活。无论任何时候你重新启动 nodeos  ,在你使用密钥之前,你必须要解锁你的钱包。 在命令行中直接使用密码通常是不安全的,它会被记录到你的 bash 历史记录中。因此你也可以在交互模式下解锁: 出于安全考虑,通常最好在不使用钱包时锁定钱包。要锁定你的钱包而不关闭 nodeos ,你可以这样做: 本教程的其余部分需要你解锁钱包后执行。所有新的区块链都是以唯一初始帐户 eosio 的私钥开始。为了与区块链互动,你需要将此初始帐户的密钥导入钱包。将 eosio 帐户的私钥导入你的钱包 Part3·加载 Bios 合约 现在我们有一个带有 eosio 用户私钥的钱包,我们可以设置默认的系统合约。为了开发的目的,默认可以使用 eosio.bios 合约。此合约使你可以直接控制其他帐户的资源分配并访问其他特权 API 。在公链中,该合同将管理 Token 的 staking 和 unstaking ,为合约预留 CPU 、网络活动和内存资源。 智能合约 eosio.bios 在 eosio 源代码的 contracts 文件夹里。cleos 指令默认是在 eosio 源码根目录中执行,但可以通过指定 ${EOSIO_SOURCE}/contracts/eosio.bios 的全路径从任意位置来执行。 cleos 用两个 action 产生一个交易, eosio::setcode 和eosio::setabi 代码定义了合约如何运行,abi 描述了如何在 binary 和参数的 json 描述文件之间转换。虽然 abi 文件是可选的,但是所有的 eosio 工具都依赖于它以便于使用。 无论何时,你执行一个交易都会看到如下输出: 这可以理解为:由 eosio 所定义的 action 'setcode' 被 eosio 合约以参数 {args...} 执行。 正如我们稍后会看到的,actions 可以被多个合约所处理。这次调用的最后一个参数是 -p eosio ,这个参数告诉 cleos 使用我们之前导入的 active 权限私钥来签名这个 action。 Part4·创建一个账户 现在我们已经建立了基础系统合约,我们可以开始创建自己的账户。 为此,我们首先为该帐户生成一对密钥。 然后我们将私钥导入我们的钱包: 密钥不会自动添加到钱包,因此跳过此步骤可能会导致你对你的帐户失去控制权。 Part5·创建两个用户账号 接下来,我们将使用上一步骤中创建和导入的密钥,创建两个帐户: user 和 tester 因为我们正在使用 eosio::account_history_api_plugin ,所以我们能够查询所有由我们的密钥控制的账户: Part6·创建Token合约 在这个阶段,区块链还不能做很多事,让我们来部署 eosio.token 合约。该合约允许创建许多不同的 token,这些 token 都运行在同一个合约上,但可能由不同的用户管理。 首先需要创建一个账户来部署这个合约。 接下来就可以开始部署了(合约代码位于  ${EOSIO_SOURCE}/contracts/eosio.token ) Part7·创建EOS Token 你可以在 contracts/eosio.token/eosio.token.hpp 头文件中查看定义 eosio.token 合约的接口: 要创建一个新的 tok [...内容已精简...] 是否生成任何输出。 从技术上说,eosio.token 合约可以跳过 inline transfer 并选择直接修改余额,但在这种情况下,eosio.token 合约遵循我们的 token 约定,该约定要求所有账户余额可以通过他们传输 actions 的总和推论出来。它还要求通知资金的发送者和收款人,以便他们能够自动处理存款和提款。 如果你想要看到广播的实际交易,你可以使用  -d -j 选项来表示 "don't broadcast" 和 "return transaction as json". Part9·转移 Tokens 到 Tester 现在 user 账户有一些 token, 我们将会把他们转移到账户 tester 并使用权限 -p user。 Part10·Hello World 合约 下一步我们将创建我们的第一个"hello world"合约。创建一个名为"hello"的新文件夹,然后创建内容文件 "hello/hello.cpp": hello/hello.cpp 然后你可以像这样将它编译成 Web Assembly(.wast): 接着你可以生成 abi: 下一步我们创建账户并上传合约: 现在我们可以运行合约: 这时合约允许任何人授权,我们也可以这样: 这时 tester 是授权者,user 只是一个参数。如果想要合约对用户进行身份认证,那么我们可以修改下 hi() 方法: 现在,用户(对应下文的 tester )和授权者(对应下文的 user )不匹配,那么合同会抛出一个错误 我们可以通过授予 tester 权限来解决此问题 Part11·部署 Exchange 合约 翻译的原文内容链接来自于 EOSIO 官方 GitHub,链接地址:https://github.com/EOSIO/eos/blob/master/TUTORIAL.md, 如果有表述不一致的地方,以英文版本为准! --- *本文由查找币安全团队整理,来源:安全研究。*
在文章库中查看和回复