EOS的测试网络已经具备了上传和运行智能合约的能力,下面我们参照github上的说明一步一步建立一个示例的智能合约。首先进入eosd目录,启动输入命令:./eosd,使能够产生区块。
测试EOS客户端是否可用:
区块运行起来后就可以使用eos的客户端eosc进行一些操作了,比如说查看区块链的信息
先进入eos/build/progrems/eosc目录,执行以下命令,并得到如下的结果,结果中就是区块的信息:./eosc get info
创建一个钱包并导入密钥:
如下命令: ./eosc wallet create
任何智能合约都要与一个账户关联,因此需要先创建一个钱包,执行该条命令会输出一个密码,需要保持下来,该密码是用来解锁钱包的,如图生产的密码为:PW5Jr57KkkuL9upnncrRUVtDVGUnq8o21SYhqsMm21GLjBvfgpL4t
这里仅仅是做的测试网络,inita账户的私钥导入。这个账户在genesis.json有定义,就会有权限发送API命令。该账户的私钥可以在config.ini文件中找到。config.ini文件在上一篇生成的data-dir中。
为currency创建一个账户
运行如下安排:./eosc create key #owner_key
./eosc create key #active_key
先使用以下命令创建两把公私钥对,后续会将这两对密钥分配为owner_key和active_key。
目前仅仅是两个密钥而已,没有跟任何账户关联。注意:这两个密钥要保存下来,后面要用到。
执行如下的命令:
./eosc create account inita currency EOS5rtK7P1oc4NhJ5pK5FExbD8nVKJwiuF99HsCpujcaTN8NqS215 EOS87iB1zUi8dq4zPoSb3sy3B2CX4NjBEGEQ9fhqKrX8BmphxHQfM6
运行结果如下:
使用如下命令检查是否成功:
root@ubuntu:/home/devSoft/eos/build/programs/eosc# ./eosc get account currency
返回:
将active_key导入的钱包,还记得我们产生的两个公私钥对吗?将active_key私钥写到参数里面:
./eosc wallet import 5JT7PUxHN7UV7oFLmSBZPvqty8ixYRdJcu9zXmcxgV9wBRDAD3y
将currency合约上传到区块链
在上传之前先确认一下当前的合约是否已经在区块链上了./eosc get code currency
上面返回结果的是为0000000*,说明合约还未上传到区块链上,上次合约的命令如下:./eosc set contract currency ../../contracts/currency/currency.wast ../../contracts/currency/currency.abi
再次确认合约是否在区块链上:./eosc get code currency
上面返回的结果,说明合约已经在区块链上了,使用命令确认currency合约是否有余额。
命令如下:./eosc get table currency currency account
返回结果如下:
使用currency合约转移资金
任何人都可以在任何时间发送任何消息到任何合约上,但是合约可以拒绝那些没有给出任何权限的消息。消息不能被随意发送,而是需要带有权限等级一个或多个账号来发送。下面的命令说明一个“transfer”的消息是如何发送给currency合约的。
'{"from":"currency","to":"inita","quantity":50}' #从currency到inita账号,金额是50元
使用如下命令进行资金的转移:
./eosc push message currency transfer'{"from":"currency","to":"inita","quantity":50}'--scope currency,inita --permission currency@active
返回:
假如上述命令,你得到了一个错误的返回
An error occurred while submitting the transaction for this command!
The transaction requires permissions that could not be authorized by the wallet.
Missing authrizations:
- currency@active
Please make sure the proper keys are imported into an unlocked wallet and try again!
需要你打开钱包并解锁,解锁时会让你输入密码,就是我们最初产生钱包时的密码。然后重新执行上面的命令。
./eosc wallet open
./eosc wallet unlock
查询两个账户的余额
命令如下:
1》》》./eosc get table inita currency account
2》》》./eosc get table currency currency account
今天的讲解就到这里。