EOS源码分析(3)案例分析

栏目: 编程工具 · 发布时间: 5年前

内容简介:智能合约是在EOS节点中运行的,因此要首先把EOS节点运行起来,在这里,我们运行一个本地节点,命令如下:由于智能合约是与账号相关联的,因此在创建智能合约前,我们首先要创建账号,而账号的Key需要通过钱包来创建和保存,因此需要先创建钱包,如下:上面的命令会创建一个名称为default 的默认钱包,在创建钱包时,你也可以指定名称。钱包对应的密码需要保存,后续操作钱包状态的时候需要使用。

运行EOS节点

智能合约是在EOS节点中运行的,因此要首先把EOS节点运行起来,在这里,我们运行一个本地节点,命令如下:

cd path-to-eos/build/programs/eosiod/
./eosd

创建默认钱包

  • 创建钱包

由于智能合约是与账号相关联的,因此在创建智能合约前,我们首先要创建账号,而账号的Key需要通过钱包来创建和保存,因此需要先创建钱包,如下:

cd path-to-eos/build/programs/eosioc/
./eosioc wallet create # Outputs a password that you need to save to be able to lock/unlock the wallet

上面的命令会创建一个名称为default 的默认钱包,在创建钱包时,你也可以指定名称。钱包对应的密码需要保存,后续操作钱包状态的时候需要使用。

  • 导入测试账号的Private key

钱包创建好之后,还不能直接创建账号,每个账号的创建需要一个Creator账号,在这里,我们使用 genesis.json 中的 inita 账号作为Creator账号。作为Creator的账号,必须要把它的 Private key 导入到钱包中,否则在创建其他账号时,会提示权限不够,命令如下:

./eosioc wallet import 5KQwrPbwdL6PhXujxW37FSSQZ1JiwsST4cqQzDeyXtP79zkvFD3

创建账号

创建账号所需的key

每个账号的创建都需要 owner_keyactive_key 两个key,我们通过以下命令创建key:

cd path-to-eos/build/programs/eosioc/
./eosioc create key # owner_key
./eosioc create key # active_key
以上命令会分别输出两组 `private key` 和 `public key`,如下:

```
Private key: XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
Public key: EOSXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
```
**千万保存好以上的key,后续需要使用**。

创建账号

创建账号的所有准备都已经齐备,现在可以开始创建账号了,账号创建的命令如下:

./eosioc create account inita currency PUBLIC_KEY_1 PUBLIC_KEY_2

在以上命令中,创建的当前账号名称为 currency ,创建当前账号的 Creator 账号指定为 inita , 最后的两个 public key 分别对应 currency 账号的 owner_keyactive_key 。当账号创建成功后,你将得到一个附带 transaction IDJSON 反馈。

如果你之前没有导入过 inita 账号的 private key ,则会出现如下错误提示:

/Screen Shot 2018-02-21 at 10.36.38 PM.png

这主要是因为以上这条命令必须要有 initaactive 权限才能执行,如果没有导入私钥,则权限不够,从而会给出以上错误提示。

你也可以通过查询此账户的信息来确认账号是否创建成功:

./eosioc get account currency

以上命令将会返回如下结果:

{
"account_name": "currency",
"eos_balance": "0.0000 EOS",
"staked_balance": "0.0001 EOS",
"unstaking_balance": "0.0000 EOS",
"last_unstaking_time": "2035-10-29T06:32:22",
...

currency 账号已经创建成功,但你目前还不能使用此账号进行智能合约等操作,因为系统中目前只有此账号的 public key ,而进行交易和智能合约等操作需要用到此账号的 active 权限,因此,我们需要把此账号对应的 active private key 导入到系统中,如下:

./eosioc wallet import XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

请使用你之前创建的 active private key 替代以上命令中的 xxx 字符串。

部署智能合约

准备工作

在上传以前,首先确认 currency 账号下是没有智能合约的

./eosioc get code currency
code hash: 0000000000000000000000000000000000000000000000000000000000000000

部署智能合约

上传-智能合约到currency 账号,此处的智能合约是EOS系统自带的测试合约

./eosioc set contract currency ../../contracts/currency/currency.wast ../../contracts/currency/currency.abi

当你得到一个带有 transaction_id 字段的JSON反馈后,说明智能合约已经上传成功。你还可以通过以下命令来验证合约是否上传成功。

./eosioc get code currency

以上命令应该会返回这样的结果:

code hash: 9b9db1a7940503a88535517049e64467a6e8f4e9e03af15e9968ec89dd794975

发行货币

在使用 currency 智能合约以前,你首先要发行货币,以下命令将向 currency 中发行10,000,000 的货币

./eosioc push action currency issue  {"to":"currency","quantity":"1000.0000 CUR"}  --permission currency@active

通过以下命令可以验证 currency 账号中目前确实已经有 10,000,000 的余额了

./eosioc get table currency currency account
{
"rows": [{
"currency": 1381319428,
"balance": 10000000
}
],
"more": false
}

转账

任何账号都可以在任何时间向任何智能合约发送消息,但如果权限不够的话,智能合约会拒绝消息的执行。更加准确的来说,消息并不一定是从某个账号发出来的,只要这条消息所关联的账号和权限等级是满足的,这条消息就能被执行。以下命令展示了如何向 currency 账号发送 transfer 消息,在这条命令中,需要从 currency 账号转账到其他账号,因此,需要 currency 账号权限才能完成此操作,具体命令如下:

./eosioc push action currency transfer  {"from":"currency","to":"inita","quantity":"20.0000 CUR","memo":"my first transfer"}  --permission currency@active

上面这条命令中,出现了三次 currency , 第一次出现表示的是智能合约 currency ,第二次出现表示的转账账号 currency ,第三次出现则表示 currency 账号的权限; 如果我们换一个其他转出账号,则比较通用的命令格式应该如下:

./eosioc push action currency transfer  {"from":"${usera}","to":"${userb}","quantity":"20.0000 CUR","memo":""}  --permission ${usera}@active

以上命令是从usera 向userb转账,因此权限上面需要使用usera 的权限。此命令中 currency 只出现了一次,在这里表示智能合约的名称。


以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持 码农网

查看所有标签

猜你喜欢:

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

The Four

The Four

Scott Galloway / Portfolio / 2017-10-3 / USD 28.00

NEW YORK TIMES BESTSELLER USA TODAY BESTSELLER Amazon, Apple, Facebook, and Google are the four most influential companies on the planet. Just about everyone thinks they know how they got there.......一起来看看 《The Four》 这本书的介绍吧!

在线进制转换器
在线进制转换器

各进制数互转换器

图片转BASE64编码
图片转BASE64编码

在线图片转Base64编码工具

HEX CMYK 转换工具
HEX CMYK 转换工具

HEX CMYK 互转工具