第一步:代码准备
在之前我们已经获取、编译EOS 代码、并运行 EOS 单机节点 eosd 程序和使用 EOS 命令行工具 eosc。
在开始正式编写之前,我们首先要获取 EOS 最新代码,包括两个分支的最新更新(不然会导致编译错误):
git pull
git submodule update –init –recursive
然后对 eos/libraries/chain/include/eos/chain/chain_controller.hpp 文件 339 行,进行修改,将_skip_flags 赋值为 skip_authority_check。
这样可以跳过权限校验过程。重新编译代码,至此已经可以发布和执行智能合约。
第二步:EOS 智能合约编写
按照 EOS 的官方文档,以及代码中给出的例子,EOS 的智能合约主要需要编写abi 接口和用 C++编写逻辑,并使用 WASM 编译器编译成 wast 文件。
C++里面主要实现 init 和 apply 两个函数
以 currency 为例:
实际上 currency 发行了一个代币 CurrencyTokens,并提供了代币之间的转账操作 apply_currency_transfer(currentMessage< TOKEN_NAME::Transfer >()))。
EOS 代码在 eos/contracts/eoslib/token.hpp 给出了代币的模板,并给出了代币的一些简单操作,比如增减、比较等,这样开发者可以直接通过
定义发布自己的代币(参见 eos/contracts/currency/currency.hpp 第 14 行)。
第三步:发布和执行智能合约
通过编译可以得到 wast 文件,然后通过命令行可以发布 currency 合约(代币)。首先创建智能合约账号:
./eosc create account oraclechain currency
EOS4toFS3YXEQCkuuw1aqDLrtHim86Gz9u3hBdcBw5KNPZcursVHq
EOS6KdkmwhPyc2wxN9SAFwo2PU2h74nWs7urN1uRduAwkcns2uXsa
注意,需要保证 oraclechain 账户拥有 eos_balance,可通过账号 eos 进行转账
发布智能合约:
./eosc setcode currency
../../contracts/currency/currency.wast
../../contracts/currency/currency.abi
首先修改 eos/programs/eosc/main.cpp 文件第 261 行,将“cmd_line”改为“args”:
其次修改同一文件第 271 行,将“bincmd_line”该成“binargs”:
此处修改依据参考了
eos/plugins/chain_plugin/include/eos/chain_plugin/chain_plugin.hpp 文件中关于 abi_json_to_bin_params 函数和 abi_bin_to_json_params 函数对参数的定义。
然后可以通过命令行完成代币的转账:
./eosc exec currency transfer
‘{“from”:”currency”,”to”:”oraclechain”,”amount”:”50″}’
‘[“currency”,”oraclechain”]’ ‘[{“account”:”currency”,”permission”:”active”}]’
至此,我们完成了代币发行和转账的智能合约编写。值得注意的是,目前该合约没有涉及到用户权限的控制,任何人都可以完成任意账户间的转账。
文章原标题:[区块链研究实验室]EOS 智能合约:发行代币 原作者: 链三丰
根据国家《关于防范代币发行融资风险的公告》,大家应警惕代币发行融资与交易的风险隐患。
本文来自LIANYI转载,不代表链一财经立场,转载请联系原作者。