内容简介:智能合约是在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_key
和 active_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_key
和 active_key
。当账号创建成功后,你将得到一个附带 transaction ID
的 JSON
反馈。
如果你之前没有导入过 inita
账号的 private key
,则会出现如下错误提示:
/Screen Shot 2018-02-21 at 10.36.38 PM.png
这主要是因为以上这条命令必须要有 inita
的 active
权限才能执行,如果没有导入私钥,则权限不够,从而会给出以上错误提示。
你也可以通过查询此账户的信息来确认账号是否创建成功:
./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 Art of UNIX Programming
Eric S. Raymond / Addison-Wesley / 2003-10-3 / USD 54.99
Writing better software: 30 years of UNIX development wisdom In this book, five years in the making, the author encapsulates three decades of unwritten, hard-won software engineering wisdom. Raymond b......一起来看看 《The Art of UNIX Programming》 这本书的介绍吧!