-
Notifications
You must be signed in to change notification settings - Fork 256
视频课程
linj edited this page Nov 23, 2022
·
1 revision
[TOC]
介绍DApp和智能合约的基本概念, 石头剪刀布游戏合约的逻辑,以及如何在Windows操作系统上搭建一个单节点的开发环境用于调试。 视频地址: DApp介绍及Chain33开发环境搭建 第一课用到的一些命令
#生成seed,注意:生成的seed要记住,如果不小心误删钱包,通过seed可以找回钱包
./chain33-cli.exe seed generate -l 0
#保存seed,-p后跟的是钱包密码。 注意:密码可以自定义,并且牢牢记住,后面解锁钱包时会用到。密码需满足8位字母数字组合的要求。
./chain33-cli.exe seed save -s [上一步生成的seed值] -p tech1234
#解锁钱包
./chain33-cli.exe wallet unlock -p tech1234 -t 0
#导入创始账户地址,创始账户在配置文件中配的
./chain33-cli.exe account import_key -k 3990969DF92A5914F7B71EEB9A4E58D6E255F32BF042FEA5318FC8B3D50EE6E8 -l genesis
#新创建一个标签为testA的账户
./chain33-cli.exe account create -l testA
#创始账户向账户A中发起转账
./chain33-cli send coins transfer -a 1000 -t 1FbuCnz6Bnw3EiECrv9QYKcnYhP19JL5gb -n "test for transfer bty" -k 3990969DF92A5914F7B71EEB9A4E58D6E255F32BF042FEA5318FC8B3D50EE6E8
#查询交易
./chain33-cli.exe tx query_hash -s [上一步生成的交易hash]
介绍在chain33上,使用GO语言开发石头剪刀布合约的流程。 视频地址: 石头剪刀布合约开发介绍
介绍石头剪刀布合约的调用。 视频地址: 石头剪刀布合约调用 第三课用到的一些命令
#获取合约地址
curl --data-binary '{"jsonrpc":"2.0", "id": 1, "method":"Chain33.ConvertExectoAddr","params":[{"execname":"fingerguessing"}] }' \
-H 'content-type:text/plain;' \
http://localhost:8801
#往合约中打入金额
#构建往合约中打币的交易
curl --data-binary '{"jsonrpc":"2.0", "id": 1, "method":"Chain33.CreateRawTransaction","params":[{"to":"1MwyBkj94REkZadQveucgsH9PRzpSSxTyx","amount":1000000000}] }' \
-H 'content-type:text/plain;' \
http://localhost:8801
#签名交易,对上一步返回的hash值进行签名
curl --data-binary '{"jsonrpc":"2.0", "id": 1, "method":"Chain33.SignRawTx","params":[{"addr":"1FbuCnz6Bnw3EiECrv9QYKcnYhP19JL5gb", "expire":"2h", "txHex":"上一步生成的数据"}] }' \
-H 'content-type:text/plain;' \
http://localhost:8801
#发送交易
curl --data-binary '{"jsonrpc":"2.0", "id": 1, "method":"Chain33.SendTransaction","params":[{"data":"上一步生成的数据"}] }' \
-H 'content-type:text/plain;' \
http://localhost:8801
#查询用户A在合约地址中的金额
curl --data-binary '{"jsonrpc":"2.0", "id": 1, "method":"Chain33.GetBalance","params":[{"addresses":["1FbuCnz6Bnw3EiECrv9QYKcnYhP19JL5gb"],"execer":"fingerguessing"}] }' \
-H 'content-type:text/plain;' \
http://localhost:8801
#创建石头剪刀布游戏步骤
#构建游戏
curl --data-binary '{"jsonrpc":"2.0", "id": 1, "method":"Chain33.CreateTransaction","params":[{"execer":"fingerguessing", "actionName":"createGame", "payload":{"amount": 200000000,"hashType":"sha256","hashValue":"001c470a12512811dfc5d1cd5c60deb2ee6acafb1ca153a0ca26e19d1b5995a7"}}] }' \
-H 'content-type:text/plain;' \
http://localhost:8801
#签名交易,用户A的私钥签名,调用方式同上面描述的签名方样一样
#发送交易,调用方式同上
#匹配石头剪刀布游戏步骤
#构建交易
curl --data-binary '{"jsonrpc":"2.0", "id": 1, "method":"Chain33.CreateTransaction","params":[{"execer":"fingerguessing", "actionName":"matchGame", "payload":{"gameId": "0xae020e911efad0f7ed1a297b915d906c2a0bb9f357b973cd6fe5cce9fcbce471","guess":2}}] }' \
-H 'content-type:text/plain;' \
http://localhost:8801
#签名交易,用户B的私钥签名,调用方式同上
#发送交易,调用方式同上
#用户A开奖石头剪刀布游戏步骤
#构建交易
curl --data-binary '{"jsonrpc":"2.0", "id": 1, "method":"Chain33.CreateTransaction","params":[{"execer":"fingerguessing", "actionName":"closeGame", "payload":{"gameId": "0xf7275f95c7de6e06fd93567e4c565386ef93a048f07357ea0d08b1484bfd24d3","secret":"123456","result":1}}] }' \
-H 'content-type:text/plain;' \
http://localhost:8801
#签名交易,用户A的私钥签名,调用方式同上
#发送交易,调用方式同上
介绍平行链的概念,如何搭建一条平行链,如何在平行链上发行token 视频地址: 平行链上发行Token 平行链上发token的步骤(命令行模式) 最简化配置下,只要一台服务器就可以部署一个主链节点+多条平行链(不同的平行链通过端口区分),服务器的配置4核CPU,8G内存
#下载主链,解压,执行(如果已经有可以链接的主链,就不需要重复创建主链节点,支持一个主链节点同时下挂多个平行链节点):
wget https://bty.oss-ap-southeast-1.aliyuncs.com/chain33/mainChain.tar.gz
tar -zxvf mainChain.tar.gz
cd mainChain
nohup ./chain33 -f chain33.toml >> bty.out&
#检查同步情况,这一步会从主链上同步执行区块,需要花一定的时间,目前主网区块已经超过100万,预计要6个小时同步完。
#通过执行以下命令来查看区块同步结果,返回true表示同步完成:
./chain33-cli net is_sync
#通过执行以下命令来查看区块同步情况:
./chain33-cli net peer_info
#运行平行链节点,这一步需要在主链节点同步完成后进行
#下载平行链,解压
wget https://bty.oss-ap-southeast-1.aliyuncs.com/chain33/paraChain.tar.gz
tar -zxvf paraChain.tar.gz
#修改配置文件
cd paraChain/
修改chain33.toml配置文件,这里仅列出需要修改的配置项
# 设置title为自己平行链的名称,注意最后一个.不能省略
Title="user.p.devtest."
# 同主链相链的json/rpc的地址,分别对应主链的ip和端口
mainnetJrpcAddr="http://172.26.8.152:8801"
# 同主链相链的grpc地址,分别对应主链的ip和端口
ParaRemoteGrpcClient = "172.26.8.152:8802"
#指定从主链某高度的区块开始同步,建议配置,可以配成比当前主链高度略小。
startHeight=1000000
#超级管理员地址,配成自己掌握私钥的地址(注意,这个地址里要有比特元,用于缴纳手续费)
superManager=[
"15WgpzXZWM5QrVadD4hb4eMNWkhQ85HpfX",
]
#token创建人地址,配成掌握私钥的地址(跟上面那个一样就行)
tokenApprs = [
"15WgpzXZWM5QrVadD4hb4eMNWkhQ85HpfX",
]
# 启动平行链
nohup ./chain33 -f chain33.para.toml >> para.out&
#查询平行链上的区块同步信息
./chain33-cli --rpc_laddr="http://localhost:8901" block last_header
#配置token-finisher
./chain33-cli --rpc_laddr="http://localhost:8901" --paraName "user.p.devtest." config config_tx -c token-finisher -o add -v [token-finisher的地址,直接填上面的superManager地址也行]
./chain33-cli --rpc_laddr="http://localhost:8901" wallet sign -k [superManager对应的私钥匙] -d [上一步生成的数据]
./chain33-cli --rpc_laddr="http://localhost:8901" wallet send -d [上一步生成的签名后的数据]
#配置token-blacklist
./chain33-cli --rpc_laddr="http://localhost:8901" --paraName "user.p.devtest." config config_tx -c token-blacklist -o add -v BTY
./chain33-cli --rpc_laddr="http://localhost:8901" wallet sign -k [superManager对应的私钥匙] -d [上一步生成的数据]
./chain33-cli --rpc_laddr="http://localhost:8901" wallet send -d [上一步生成的签名后的数据]
#上两步结果的查询,注意只有上两步配置成功才可以进入下面的流程
./chain33-cli --rpc_laddr="http://localhost:8901" --paraName "user.p.devtest." config query_config -k token-blacklist
./chain33-cli --rpc_laddr="http://localhost:8901" --paraName "user.p.devtest." config query_config -k token-finisher
#token预创建
./chain33-cli --rpc_laddr="http://localhost:8901" --paraName "user.p.devtest." token precreate -f 0.001 -i 开发者币 -n "DEVELOP COINS" -a [token接收者的地址,可以是自己,也可以指定别人] -p 0 -s "COINSDEVX" -t 19900000000
./chain33-cli --rpc_laddr="http://localhost:8901" wallet sign -k [token-finisher的私钥] -d [上一步生成的签名后的数据]
./chain33-cli --rpc_laddr="http://localhost:8901" wallet send -d [上一步生成的签名后的数据]
#查询,这一步完成,才可以进入到下面的流程
./chain33-cli --rpc_laddr="http://localhost:8901" --paraName "user.p.devtest." token get_precreated
#token finish
./chain33-cli --rpc_laddr="http://localhost:8901" --paraName "user.p.devtest." token finish -s COINSDEVX -f 0.001 -a [token接收者的地址]
./chain33-cli --rpc_laddr="http://localhost:8901" wallet sign -k [token-finisher的私钥] -d [上一步生成的签名后的数据]
./chain33-cli --rpc_laddr="http://localhost:8901" wallet send -d [上一步生成的签名后的数据]
#查询
./chain33-cli --rpc_laddr="http://localhost:8901" --paraName "user.p.devtest." token get_finish_created
#根据地址查询
./chain33-cli --rpc_laddr="http://localhost:8901" --paraName "user.p.devtest." token token_balance -e "user.p.devtest.token" -a [token接收者的地址] -s COINSDEVX
hello world