EOS区块链技术开发(一)环境搭建

news/2025/1/12 18:00:59/

强烈建议直接去看EOSIO官网上的教程:https://developers.eos.io/

不要看我的??博文了,以下博文就是我当时随便写写的,现在也没有什么时间详细修改。如果有问题可以提问。

注:由于EOSIO仍在不断更新,所以以下内容的一些步骤可能会在将来某天失效。本开发手册编写时间是在2018.10至2018.11.可能会不断更新。

0 前言——About development

  1. 可以使用docker,但是docker 是 Setup the development environment neither the production environment。see https://developers.eos.io/eosio-home/docs

  2. 但是编译EOS的方式有很多种(四种:https://developers.eos.io/eosio-nodeos/docs/install-nodeos),一种是运行build_bash,一种是docker,一种是直接编译源码。对于新手而言:通过docker(我已经完成。)

  3. Start develop
    First you need enough general knowledge about EOS then you can use your programming skill for EOS.
    编写合约:
    ==>创建账号:create account [OPTIONS] creator name OwnerKey [ActiveKey]
    like:cleos create account eosio hello EOS5YScRTMfjR69M4k4pP5qjAzDRfxtP9DY1Rx4WrZP4JnYj4MTRP -p eosio@active
    ==>编译合约eosio-cpp -o hello.wasm hello.cpp –abigen
    ==>设置合约:cleos set contract hello $CONTRACTS_DIR/hello -p hello@active
    ==>运行:cleos push action hello hi ‘[“bob”]’ -p bob@active
    4.EOS的ABI文件。

1 EOS开发环境搭建

所谓开发环境就是大家所理解的开发环境…不多说了。我们把区块链和操作系统做个类比吧。这一步就相当于是把操作系统在自己计算机上装好。

参见:https://developers.eos.io/eosio-nodeos/docs/getting-the-code
1.get the code
2.build
3.install executables

2 EOS测试环境搭建(Configure Nodeos)

所谓测试环境,就是你要现在本地建立一个启动一个EOS区块链的私有链。前面的开发环境就相当于是装好了操作系统,这一步是要启动这个操作系统,让其运行起来。

2.1 Creating and Launching a Single Node Testnet

启动本地测试网(单节点):

nodeos -e -p eosio --plugin eosio::wallet_api_plugin --plugin eosio::chain_api_plugin --plugin eosio::history_api_plugin --contracts-console

参数说明:

-e -Enable block production, even if the chain is stale 
-p <producer_name> - ID of producer controlled by this node
--contracts-console:To print contract's output to console by default add:

关于EOS测试网启动的设置:
修改一个叫做config.ini的文件即可,主要是针对插件 --plugin,文件位置:

cd ~/Library/Application*Support/eosio/nodeos/config

我遇到了一些问题,第一个是wallet_api_plugin找不到。于是我先不使用这个插件。而是:

nodeos -e -p eosio --plugin eosio::chain_api_plugin --plugin eosio::history_api_plugin

但是这样也遇到了服务器地址被占用的情况。应该是keosd已经运行了。所以我参考了:https://eosio.stackexchange.com/questions/829/address-already-in-use-when-launching-nodeos
ps -ax | grep keosd(或者ps,防止kid跳来跳去)
再使用kill -9 pid把已经在运行的keosd进程结束,再次重新运行上面的单节点命令。出现以下的输出:

info  2018-10-22T13:24:31.501 thread-0  producer_plugin.cpp:1490      produce_block        ] Produced block 00000175ab67071f... #373 @ 2018-10-22T13:24:31.500 signed by eosio [trxs: 0, lib: 372, confirmed: 0]
…
22T13:24:50.500 signed by eosio [trxs: 0, lib: 380, confirmed: 0]
info  2018-10-22T13:24:51.000 thread-0  producer_plugin.cpp:1490      produce_block        ] Produced block 0000017e96de5909... #382 @ 2018-10-22T13:24:51.000 signed by eosio [trxs: 0, lib: 381, confirmed: 0]
^Z
[1]+  Stopped                 nodeos -e -p eosio --plugin eosio::chain_api_plugin --plugin eosio::history_api_plugin
MacBook-Plou:data treaser$ fg
nodeos -e -p eosio --plugin eosio::chain_api_plugin --plugin eosio::history_api_plugin
…
info  2018-10-22T13:24:54.003 thread-0  producer_plugin.cpp:1490      produce_block        ] Produced block 00000182c744770c... #386 @ 2018-10-22T13:24:54.000 signed by eosio [trxs: 0, lib: 385, confirmed: 0]
^Z
[1]+  Stopped                 nodeos -e -p eosio --plugin eosio::chain_api_plugin --plugin eosio::history_api_plugin

以上就是区块链启动成功了。console输出就是每个区块的数据。然后可以暂停一下。(如果不暂停,一直跑就会很耗电…)
如果暂停了以后,再次运行启动测试网的命令:nodeos -e -p eosio --plugin eosio::chain_api_plugin --plugin eosio::history_api_plugin
出现database dirty flag set的错误,需要进入:

~/Library/Application Support/eosio/nodeos/data

把blocks 和 state 目录删掉。重启nodeos
(说实话这样干非常蠢,但是目前我还没找到替代方案,GitHub上的相应的issue也是还没有解决方案)
而如果是用kill (-9) pid的办法来退出nodeos也是一样的问题。(ATN:nodeos每次重启,原来创建的账户就都没了。)

总结:这里说明了启动本地测试网后,你可以暂停这个网络。但是如果因为某种原因结束了这个跑测试网的进程,你们你需要删除 ~/Library/Application Support/eosio/nodeos/data下的一些数据才能再次启动,否则会出错,不让你重新启动。

2.2管理钱包(在CDTtutorial中已经学过)

关于钱包的一些列操作命令回顾:
创建钱包:cleos wallet create --to-console
打开钱包:cleos wallet open
罗列钱包:cleos wallet list
解锁钱包:cleos wallet unlock(需要用到私钥)
把私钥导入钱包:cleos wallet create_key(可以得到公钥)
查看钱包中的私钥:cleos wallet keys
钱包是什么?是存储你密钥的地方。

2.3管理账户

(1)创建账户:cleos create account [OPTIONS] creator name OwnerKey [ActiveKey]
注:这其实是一笔交易,因为花费ram。OwnerKey和ActiveKey都是公钥,说明一个账号被绑定了2个密钥,这是因为不同密钥的权限是不同的。OwnerKey对的权限大,ActiveKey对的权限小。EOS的权限系统也是非常复杂的。
这里你可能需要自己产生一对密钥对。通过命令:cleos create key —to-console

(2)导入私钥到钱包:cleos wallet import
你必须把产生的私钥导入到wallet里,这样你才能用公钥来创建账户!!直接手动导入。导入后,你也只能查看到了这几个的公钥,私钥自然不会显示,但是已经存到了wallet里。
这里最重要的是还需要把eosio的私钥导入到wallet里:

5KQwrPbwdL6PhXujxW37FSSQZ1JiwsST4cqQzDeyXtP79zkvFD3

然后cleos create account eosio token {public-OwnerKey} {public-ActiveKey}
比如:

cleos create account eosio tokentest EOS5hU9GFTV4qsBCjAeRU1aMLKd2QFhpz858MXWdqoJiewZmtHEux EOS5HoU5MJ5rr1fn2aM9P4dXR1UEhHzANGpFFNU8ZjHpEfJfeZPoP

实测:创建账户需要nodeos跑起来。并且要包含wallet_api_plugin?好像不用,我没用wallet_api_plugin,跑了其他插件,但是能够正常创建账号。
(2)查看账户:cleos get account ACCOUNTNAME –json(-j)
比如:

cleos get account tokentest --json

得到输出:

{"account_name": "tokentest","head_block_num": 443,"head_block_time": "2018-10-23T01:21:04.500","privileged": false,"last_code_update": "1970-01-01T00:00:00.000","created": "2018-10-23T01:18:35.500","ram_quota": -1,"net_weight": -1,"cpu_weight": -1,"net_limit": {"used": -1,"available": -1,"max": -1},"cpu_limit": {"used": -1,"available": -1,"max": -1},"ram_usage": 2724,"permissions": [{"perm_name": "active","parent": "owner","required_auth": {"threshold": 1,"keys": [{"key": "EOS5HoU5MJ5rr1fn2aM9P4dXR1UEhHzANGpFFNU8ZjHpEfJfeZPoP","weight": 1}],"accounts": [],"waits": []}},{"perm_name": "owner","parent": "","required_auth": {"threshold": 1,"keys": [{"key": "EOS5hU9GFTV4qsBCjAeRU1aMLKd2QFhpz858MXWdqoJiewZmtHEux","weight": 1}],"accounts": [],"waits": []}}],"total_resources": null,"self_delegated_bandwidth": null,"refund_request": null,"voter_info": null
}

也可以使用cleos get accounts PUBLICEKEY
来查看此一个公钥对应的用户名是否存在,要注意,这里加了”s“。

2.4管理智能合约

(1)编译合约:很简单
(2)部署合约:以eosio.token为例。
先进入合约代码文件所在的目录:

cd eosio.contracts/eosio.token

由于这里已经编译好了,所以不需要再重新编译,直接部署合约就行啦。
然后:

cleos set contract CONTRACT_ACCOUNT_NAME{path_to_contract_folder} {path_to_wasm_file} {path_to_abi_file}

以我为例:

cleos set contract tokentest . ./eosio.token.wasm ./eosio.token.abi

输出为:

Reading WASM from ./eosio.token.wasm...
Publishing contract...
executed transaction: cdcd9913fd8be204c0fa82b26082c86a1810458aca00798ac6ae564e6d9eb5e1  8104 bytes  10298 us
#         eosio <= eosio::setcode               {"account":"tokentest","vmtype":0,"vmversion":0,"code":"0061736d01000000017e1560037f7e7f0060057f7e7e...
#         eosio <= eosio::setabi                {"account":"tokentest","abi":"0e656f73696f3a3a6162692f312e30010c6163636f756e745f6e616d65046e616d6505...
warning: transaction executed locally, but may not be confirmed by the network yet         ]

这里要注意是wasm文件而不是wast文件,我看的教程里写错了。
然后你可以验证一下:cleos get code tokentest会得到了一些输出。
使用token这部署好的智能合约。这你要了解token合约里开放那些动作给你使用。与智能合约的交互(去中心化意义下的服务器)都是通过
cleos push action CONTRACT_ACCOUNT_NAME action options
的模式来进行的。
1)在这里,先来创建token,交互命令为:

cleos push action tokentest create '{"issuer":"tokentest","maximum_supply":"1000000.0000 TKN","can_freeze":"0","can_recall":"0","can_whitelist":"0"}' -p tokentest

输出为:

executed transaction: 8c6aed748071fc422bb42e306d89684ae1631e99b198ba30a9b218c21a0cdabb  120 bytes  2733 us
#     tokentest <= tokentest::create            {"issuer":"token","maximum_supply":"1000000.0000 TKN"}
warning: transaction executed locally, but may not be confirmed by the network yet  

2)创建完了之后可以来分发token:

cleos push action tokentest issue '{"to":"tokentest","quantity":"1000.0000 TKN","memo":""}' -p tokentest

关于token合约的一些action见:https://developers.eos.io/eosio-home/docs/token-contract
但是怎么关闭这个部署上去的合约呢?
到此为止,总结一下:

Let’s summarize all the steps so far. We first installed EOSIO and we
set up our development environment. We installed the executables
needed for contract development and we have started our first testnet
node which generates blocks on the blockchain. We learned how to
generate public/private keys and import them into our wallet. We
created an account using our public keys – OwnerKey & ActiveKey and we
deployed the eosio.token contract. As a finale, we transferred funds
using the eosio.token contract between the accounts.


http://www.ppmy.cn/news/159313.html

相关文章

[服务器图片上传demo]

目录 前言: Java 实现华为云服务器图片上传和下载的示例代码&#xff1a; 图片下载 Java 实现阿里云服务器图片上传和下载的示例代码&#xff1a; 图片下载 Java 实现腾讯云服务器图片上传和下载的示例代码&#xff1a; 图片下载 依赖: 前言: 记录一…

哪家蓝牙耳机性价比高?盘点2022无线蓝牙耳机性价比排行

说到无线蓝牙耳机相信大家都不陌生吧&#xff0c;这玩意儿可以算的上是我们除了充电头和数据线之外最常用的手机配件了。目前市面上的蓝牙耳机产品也是非常众多&#xff0c;品牌各异。为了给用户带来更加极致的使用体验&#xff0c;很多手机厂商都开始致力于蓝牙耳机的生产。但…

android手机性价比,最新安卓手机性价比排行:荣耀小米霸榜

【手机中国新闻】国内知名的跑分平台安兔兔&#xff0c;每月都会定期更新智能手机性能榜单和性价比榜单等&#xff0c;这为换机用户提供了非常好的参考。近日&#xff0c;安兔兔官方又为大家带来了最新一期的Android手机性价比排行榜单&#xff0c;根据不同价格区间分类&#x…

运动蓝牙耳机排行、五款运动型蓝牙耳机推荐性价比高

现在这么炎热的天气&#xff0c;平时很多小伙伴都是宅在家里吃吃喝喝一天&#xff0c;早上或是晚上稍微凉快的时候出门溜达&#xff0c;运动一下&#xff0c;说到运动&#xff0c;除了少不了的运动鞋就属耳机最受欢迎了&#xff0c;尤其受欢迎的当属近两年最火爆的运动蓝牙耳机…

android 充电模式deamon_安兔兔公布6月Android手机性价比排行榜

月初的时候&#xff0c;安兔兔根据后台统计到的数据公布了2020年6月1日到6月30日Android手机性能榜单&#xff0c;其中OPPO find X2 Pro以608049分成功霸榜&#xff0c;小米 10 Pro为603266&#xff0c;排在第二位&#xff0c;OPPO find X2为599306&#xff0c;排在第三位&…

计算机专业游戏本推荐,十大高性价比游戏本(小虫2021年6月游戏本排行榜)

此文最后更新日期为:2021年6月15日 极速空间是电脑配置专业研究网站,小虫站长有25年电脑软硬件经验,接触过上万种不同配置的电脑,热心传授电脑知识。由于不少用户在购买游戏本时候有选择困难症,因此小虫站长把目前市场在售的游戏本做了一个榜单,每一款机型均做了简单点评…

手机内置摄像头接线图解_安兔兔发布:2019年1月手机性价比排行榜

今天&#xff0c;安兔兔根据后台统计到的数据&#xff0c;结合京东当前手机售价&#xff0c;发布了2019年1月份Android手机性能排行榜&#xff0c;为大家购买手机提供参考。 需要说明的是&#xff0c;性价比排行榜除了参考手机的平均跑分以及当前售价外&#xff0c;是否有货也是…

2014 android 机型排行榜,Android手机性价比排行公布:联想Z6 Pro成为性价最高855机型...

11月8日消息&#xff0c;安兔兔公布了Android手机性价比排行榜双11特别版。 0-1449元 该价位段性价比最高机型是魅族16th 6GB64GB&#xff0c;这是魅族2018年推出的旗舰。 它搭载骁龙845旗舰平台&#xff0c;这是魅族旗下首款骁龙845手机&#xff0c;也是魅族2018年最强悍的机型…