我们用eos-dev docker镜像作为开发环境,这样省去很多eos编译带来的麻烦
docker的安装这里就不具体说可以查看相关docker安装资料
镜像的安装参考: https://developers.eos.io/eosio-nodeos/docs/docker-quickstart
镜像我用当前最新的版本:

启动 eos-dev docker命令
sudo docker run --rm --name eosio -d -p 8888:8888 -p 9876:9876 -v /tmp/work:/work -v /tmp/eosio/data:/mnt/dev/data -v /tmp/eosio/config:/mnt/dev/config eosio/eos-dev /bin/bash -c "nodeos -e -p eosio --plugin eosio::wallet_api_plugin --plugin eosio::wallet_plugin --plugin eosio::producer_plugin --plugin eosio::history_plugin --plugin eosio::chain_api_plugin --plugin eosio::history_api_plugin --plugin eosio::http_plugin -d /mnt/dev/data --config-dir /mnt/dev/config --http-server-address=0.0.0.0:8888 --access-control-allow-origin=* --contracts-console"
查看eosio日志(可以看到不断打印,因为不断在打block)
sudo docker logs -f --tail 10 eosio
打开另外终端,进入eosio实例docker容器,以下的所有操作都在docker镜像实例执行
docker exec -it eosio /bin/bash
vim config.ini
找eosio账户公私钥,下步需要用到
signature-provider = EOS6MRyAjQq8ud7hVNYcfnVPJqcVpscN5So8BhtHuGYqET5GDW5CV=KEY:5KQwrPbwdL6PhXujxW37FSSQZ1JiwsST4cqQzDeyXtP79zkvFD3
5KQwrPbwdL6PhXujxW37FSSQZ1JiwsST4cqQzDeyXtP79zkvFD3
为初始账户eosio主秘钥
创建钱包
wbscleos wallet create -n wbs
解锁
cleos wallet unlock -n wbs PW5JE3CtprTwbJkhrgAprF8Zn8mZGvtK42mgypNmGKS2ukrPkYviC
PW5JE3CtprTwbJkhrgAprF8Zn8mZGvtK42mgypNmGKS2ukrPkYviC 为wallet密码,改为自己生成的密码
导入初始账户eosio的主秘钥到钱包 (重要)
cleos wallet import 5KQwrPbwdL6PhXujxW37FSSQZ1JiwsST4cqQzDeyXtP79zkvFD3 -n wbs
载入默认合约eosio.bios
cleos set contract eosio contracts/eosio.bios -p eosio
创建秘钥
cleos create key
导入私钥到钱包
cleos wallet import -n wbs ${key private}
创建账户hw.a(cleos create account eosio user ${key public} ${key public})
cleos create account eosio hw.a EOS6eMjWnvZGev391ZAqswvz74nsWBU26WQT5dFnqLZhsmf9zfBKv EOS6eMjWnvZGev391ZAqswvz74nsWBU26WQT5dFnqLZhsmf9zfBKv
进入contracts文件夹创建自己的合约
cd contracts
mkdir helloworld
cd helloworld
vim helloworld.cpp
helloworld.cpp的代码内容:
#include <eosiolib/eosio.hpp>
#include <eosiolib/print.hpp>
using namespace eosio;
class helloworld : public eosio::contract {
public:
using contract::contract;
/// @abi action
void hi(account_name user) {
print("helloworld, ", name{user});
}
};
EOSIO_ABI(helloworld, (hi))
编译生成wast文件
eosiocpp -o helloworld.wast helloworld.cpp
生成abi文件
eosiocpp -g helloworld.abi helloworld.cpp
返回根目录
cd ../../
发布合约
cleos set contract hw.a contracts/helloworld -p hw.a
合约调用
cleos push action hw.a hi '["jc"]' -p hw.a
效果:

网友评论