尊重原创,转载请注明出处 - https://blog.csdn.net/cc007cc009/article/details/102902294
标题 | 版本号 | 作者 | 技术栈版本号 | IDE | 官网 | |
---|---|---|---|---|---|---|
问道区块链_区块链学习_v1.0.0_持续更新。。。 | v1.0.0 | 若布与宫合 | 8416837 | protobuf3.10.1 golang1.13.4 |
LiteIDE | protobuf golang |
将任意数据编码为256位的二进制串。hash碰撞的概率极低。
Java代码
public class Sha256 {
public static void main(String[] args) {
String data = "他是一个勇士。";
getSHA256( data);
getSHA256( data);
data += " ";
getSHA256( data);
}
/**
* 利用java原生的类实现SHA256加密
*
* @param data 加密后的报文
* @return
*/
public static String getSHA256(String data) {
MessageDigest messageDigest;
String encodestr = "";
try {
messageDigest = MessageDigest.getInstance("SHA-256"); // 汇编
messageDigest.update( data.getBytes("UTF-8"));
encodestr = byte2Hex(messageDigest.digest());// 字节转16进制
} catch (NoSuchAlgorithmException e) {
e.printStackTrace();
} catch (UnsupportedEncodingException e) {
e.printStackTrace();
}
System.out.println(String.format("%s%s%d",encodestr," 长度 === ", encodestr.length()));
return encodestr;
}
/**
* 将byte转为16进制
*
* @param bytes
* @return
*/
private static String byte2Hex(byte[] bytes) {
StringBuffer stringBuffer = new StringBuffer();
String temp;
for (int i = 0; i < bytes.length; i++) {
temp = Integer.toHexString(bytes[i] & 0xFF);
if (temp.length() == 1) {
stringBuffer.append("0"); // 补0
}
stringBuffer.append(temp);
}
return stringBuffer.toString();
}
}
Output
c75c7b4b24d94e4f2686022d917654d21ade275bfbfab8976a7f8540e02af462 长度 === 64
c75c7b4b24d94e4f2686022d917654d21ade275bfbfab8976a7f8540e02af462 长度 === 64
a969eac9922e2b88f48ec1f8212c8a4a747292dca1ff785812005c55d7e7c237 长度 === 64
第一个块。
可看成是服务器。客户端为什么是服务器?举个栗子,互联网诞生之初,个人电脑经常充当服务器的角色。
有向无环图.有人提出用DAG的拓扑结构来存储区块,解决区块链的效率问题.
百度超级链、Ethereum、EOS、Fabric.
Linux基金会2015年成立了超级账本项目(Hyperledger)来推动跨行业区块链技术。并非声明一个单一的区块链标准,它鼓励通过社区来合作开发区块链技术,鼓励开源知识产权,采用随时间演进的关键标准。
Hyperledger Fabric是Hyperledger区块链项目中的一员。像其他区块链技术一样,它有一个账本,使用智能合约,是一个由参与者共同管理他们的交易的系统。
需要一种机制来认可运行在区块链上的行为(包括比特币的运营,亦或是运行在区块链上的其他业务),这种机制就是共识机制。
英文即Smart Contracts
.并不是人工智能(artificial intelligence
)那个智能。萨博于1994年提出此概念。
一个智能合约是一套以数字形式定义的承诺(commitment),包括合约参与方可以在上面执行这些承诺的协议。
”Thomas Bocek. Digital Marketplaces Unleashed. Springer-Verlag GmbH. 2017-09-15: 169-184. ISBN 978-3-662-49274-1.
由合约账号部署合约。
丢失将无法找回。
运用数字货币和编程语言的结合解决问题。
Enterprise Operation System。“EOS是一个区块链开发平台,具有可扩展性强、支持大规模商业应用等特点。首先,EOS 采取DPoS共识算法及其他技术手段预期实现每秒百万级别交易请求,将能够支持数千个商业级的DAPPs。以太坊是一条公链,在以太坊链上运行的每一个应用都会消耗整条链的资源,但EOS 只是区块链基础架构,开发者可以自由地在 EOS 上创建公链,链与链之间不会影响彼此的资源使用,不会出现因个别应用资源消耗巨大而造成网络大面积拥堵。 其次,在 EOS 上转账与运行智能合约并不需要消耗 EOS代币,这将吸引更多的用户。 最后,EOS出现系统错误时,其“宪法”可用于区分此错误是否确实为BUG,判断社区的修复举措是否得当。”
一种解决系统升级问题的机制。比如修改区块大小,升级共识算法。提案整个过程涉及 到发起提案、参与投票、投票生效三个阶段。
UTXO(unspenttransaction outputs)是未花费交易输出。交易输出了,但是没花费出去,比如找零。
# 卸载旧的
sudo apt-get remove golang-go
sudo apt-get remove --auto-remove golang-go
# 下载
mkdir -p 下载目录;cd 下载目录
wget https://studygolang.com/dl/golang/go1.12.5.linux-amd64.tar.gz
sudo tar -zxvf go1.12.5.linux-amd64.tar.gz -C /usr/local
# 配置
sudo vim ~/.bashrc # centos vim /etc/profile
# 内容
export GOROOT=/usr/local/go # 安装目录
export GOPATH=$HOME/go # 工作环境 centos环境将$HOME改为/usr/local
export GOBIN=$GOPATH/bin # 可执行文件存放
export PATH=$GOPATH:$GOBIN:$GOROOT/bin:$PATH # 添加PATH路径
source ~/.bashrc
sudo apt-get install g++ # Ubuntu 18 已预置
g++ --version # 查看g++是否安装,如果安装了则output:g++ (Ubuntu 7.4.0-1ubuntu1~18.04.1) 7.4.0
apt-get install git
cd 预安装目录 # 存放源码的目录,在这里对源码make
git clone https://github.com/xuperchain/xuperunion
git clone https://gitee.com/baidu/XuperUnion # 更快
# 解压后
cd 根目录
make # 执行make后,等待 ...
cd output/ # 发现xchain、xchain-cli目录
目录名 | 功能 | 备注 |
---|---|---|
node/ | 根节点目录 | |
-----/conf | xchain.yaml:xchain服务的配置信息,plugins.conf: 插件的配置信息 防止冲突,部署时根据需要修改端口号 | |
-----/data | 数据的存放目录,创世块信息,以及共识和合约的样例 | |
-----/-----/blockchain | 账本目录 | |
-----/-----/keys | 此节点的地址,唯一性 | |
-----/-----/netkeys | 此节点的网络标识ID,唯一性 | |
-----/-----/config | 创始的共识采用tdpos模式,指定单一地址有权利出块 | |
-----/logs | 程序日志目录 | |
-----/plugins | so的存放目录 | |
-----/xchain | 服务的二进制文件 | |
-----/xchain-cli | 客户端工具 | |
-----/wasm2c | wasm工具 |
# cd到上文的output目录,执行下述命令
mkdir -p /home/app/blockChain/x;cp -r * /home/app/blockChain/x;cd /home/app/blockChain/x # 递归拷贝output里的全部文件至x目录
至此,XuperUnion程序准备完毕。
创建第一个区块
# 创建xuper链
./xchain-cli createChain # 客户端创建创世区块。若是共识搭建,请先配置再创建。
dump_chain # 丢弃命令
output log见下文,较长。
t=2019-11-17T11:29:18+0800 lvl=dbug msg="create block chain by contract" module=xchain from=xuper toCreate=xuper
t=2019-11-17T11:29:18+0800 lvl=info msg="ledger meta" module=xchain genesis_block= tip_block= trunk_height=0
t=2019-11-17T11:29:18+0800 lvl=trce msg="Start to ConfirmBlock" module=xchain
t=2019-11-17T11:29:18+0800 lvl=info msg="begin format genesis block" module=xchain
t=2019-11-17T11:29:18+0800 lvl=info msg="start to confirm block" module=xchain blockid=0d7d3ba836179b81f6e3887f3710f41e5807586678e26d36478f677feea7bd36 txCount=1
t=2019-11-17T11:29:18+0800 lvl=dbug msg="print block size when confirm block" module=xchain blockSize=1415 blockid=0d7d3ba836179b81f6e3887f3710f41e5807586678e26d36478f677feea7bd36
t=2019-11-17T11:29:18+0800 lvl=dbug msg="confirm block cost" module=xchain blkTimer="saveHeader: 0.15 ms,saveAllTxs: 0.61 ms,saveToDisk: 0.08 ms,total: 1.06ms"
t=2019-11-17T11:29:18+0800 lvl=info msg="ConfirmBlock Success" module=xchain Height=1
t=2019-11-17T11:29:18+0800 lvl=info msg="utxo total is estimated" module=xchain total=0
t=2019-11-17T11:29:18+0800 lvl=dbug msg="debug tx" module=xchain txid=92adc3e88be5cc5aec29baa17d11b78b9814b7279a1125f347ac83ad04b2bb17
t=2019-11-17T11:29:18+0800 lvl=dbug msg=txoutput module=xchain offset=0 addr=dpzuVdosQrF2kmzumhVeFQZa1aYcdgFpN amount=100000000000000000000
t=2019-11-17T11:29:18+0800 lvl=dbug msg="hit queryblock cache" module=xchain blkid=0d7d3ba836179b81f6e3887f3710f41e5807586678e26d36478f677feea7bd36
t=2019-11-17T11:29:18+0800 lvl=info msg="unconfirm table size" module=xchain unconfirmTxMap=0
t=2019-11-17T11:29:18+0800 lvl=dbug msg="autogen tx list size, before play block" module=xchain len=0
t=2019-11-17T11:29:18+0800 lvl=trce msg=" start to dotx" module=xchain txid=92adc3e88be5cc5aec29baa17d11b78b9814b7279a1125f347ac83ad04b2bb17
t=2019-11-17T11:29:18+0800 lvl=trce msg=" insert utxo key" module=xchain utxoKey=UdpzuVdosQrF2kmzumhVeFQZa1aYcdgFpN_92adc3e88be5cc5aec29baa17d11b78b9814b7279a1125f347ac83ad04b2bb17_0 amount=100000000000000000000
t=2019-11-17T11:29:18+0800 lvl=dbug msg="autogen tx list size, after play block" module=xchain len=0
cd /home/app/blockChain/x/data/blockchain/xuper # 这里存储了创世区块信息。
cd data/blockchain/ # 查看链名,bcname,即xuper,使用./xchain-cli status查询bcname
# 启动服务节点
nohup ./xchain &
ps aux|grep 'xchain' # 查看xchain进程
在根目录查看日志tail -f nohup.out -n 500
# check服务运行状况
./xchain-cli status -H 127.0.0.1:37101
head /home/app/blockChain/x/data/keys/address && echo # 当前节点的地址
--host 127.0.0.1:37101 或 -H 127.0.0.1:37101
可以省略。# 创建普通用户, 包含地址,公钥,私钥
./xchain-cli account newkeys --output data/bob # 注意这里是cli,同创世区块的创建
# 在bob目录下会看到文件address,publickey,privatekey生成
head data/bob/* && echo # 展示公私钥对
output log
create account using crypto type default
create account in data/bob
./xchain-cli account balance --keys data/keys -H 127.0.0.1:37101 # 余额为100000000000051000000
如果data/keys里面已经有账户,但是想更新它,那么执行:
./xchain-cli account newkeys --output data/keys -f # -f 强制覆盖
cat data/keys/address && echo # /home/app/moreChain/x003 YjuXEdGX3Y82JWN38WW3uMybUvSHhExgd
./xchain-cli transfer --to YjuXEdGX3Y82JWN38WW3uMybUvSHhExgd --amount 123 --keys data/keys/ -H 127.0.0.1:37101 # txid: 68e8ad93de23a0b38d9c6984e9349b54b81a686461149cfa370156d236bb89be # 需要等待几分钟才到账,测试环境,可能是要等块更新
与用户数据挂钩的最小单元。地址可以是合约账号,也可以是由公钥生成的一个长度为33的字符串。
# 查询地址,目标
cat data/bob/address && echo # fszZouvYxmyhdhV4AB3q4TfpzZd6ge1YP
# 转账命令
# --keys 从此地址 转给 --to地址 --amount 钱
./xchain-cli transfer --to fszZouvYxmyhdhV4AB3q4TfpzZd6ge1YP --amount 36 --keys data/keys/ -H 127.0.0.1:37101 # 转账后,日志输出交易id 7677e8dad33137b4161d4027d4f339de9b9c0f1d77ef96553672a13ea574e2d1 1d2c0c528b49beba1dca31f1e2238973aadd636b83997bf4214ccc31361cc274
# 根据id查询交易记录
# 可查询上一步生成的txid的交易信息
./xchain-cli tx query 1d2c0c528b49beba1dca31f1e2238973aadd636b83997bf4214ccc31361cc274 -H 127.0.0.1:37101
交易信息 - 36币
"txOutputs": [
{
"amount": "36",
"toAddr": "fszZouvYxmyhdhV4AB3q4TfpzZd6ge1YP"
},
{
"amount": "999964",
"toAddr": "dpzuVdosQrF2kmzumhVeFQZa1aYcdgFpN"
}
],
其中包含一个块id0c607121b1f182fb44b64442b1eaabd7048758e1bde030ffa4e264b7022fd3f9
。下文图示一个块id:
# 查询区块
# 可查询上一步交易所在的block id信息
./xchain-cli block 56c8cf05c5347474847e31fd34a6f83c6a6d18083db202c31fc2906775b54b92 -H 127.0.0.1:37101
./xchain-cli status -H 127.0.0.1:37101
多重签名是指在数字签名中,有时需要多个用户对同一个交易进行签名和认证,例如某些合约账户下的数据需要多个人【授权】才能修改或转账。
包括:block大小、交易大小、挖矿奖励金额和衰减速度等。
./xchain-cli netURL get -H 127.0.0.1:37101 # output "/ip4/127.0.0.1/tcp/47101/p2p/QmVxeNubpg1ZQjQT8W5yZC9fD7ZB1ViArwvyGUB53sqf8e"
./xchain-cli netURL gen -H 127.0.0.1:37101 # 如果不是以默认配置启动的,我们需要先生成它的netUrl,然后再获取
【注意】修改完每个节点的创世块配置后,需要确认各节点的 data/blockchain 目录下内容为空。然后重新按照下述步骤,在各节点上【创建链】,启动所有节点,即完成TDPoS共识的环境部署.
vim data/config/xuper.json
{
"version" : "1",
"predistribution":[
{
"address" : "mahtKhdV5SZP4FveEBzX7j6FgUGfBS9om",
"quota" : "100000000000000000000"
}
],
"maxblocksize" : "128",
"award" : "1000000",
"decimals" : "8",
"award_decay": {
"height_gap": 31536000,
"ratio": 1
},
"genesis_consensus": {
"name": "tdpos",
"config": {
# tdpos共识初始时间,声明tdpos共识的起始时间戳,建议设置为一个刚过去不久的时间戳
"timestamp": "1548123921000000000",
# 每一轮选举出的矿工数,如果某一轮的投票不足以选出足够的矿工数则默认复用前一轮的矿工
"proposer_num":"3",
# 每个矿工连续出块的出块间隔
"period":"3000",
# 每一轮内切换矿工时的时间间隔,需要为period的整数倍
"alternate_interval":"6000",
# 切换轮时的出块间隔,即下一轮第一个矿工出第一个块距离上一轮矿工出最后一个块的时间间隔,需要为period的整数配
"term_interval":"9000",
# 每一轮内每个矿工轮值任期内连续出块的个数
"block_num":"200",
# 为被提名的候选人投票时,每一票单价,即一票等于多少Xuper
"vote_unit_price":"1",
# 指定第一轮初始矿工,矿工个数需要符合proposer_num指定的个数,所指定的初始矿工需要在网络中存在,不然系统轮到该节点出块时会没有节点出块
"init_proposer": {
"1":["RU7Qv3CrecW5waKc1ZWYnEuTdJNjHc43u","XpQXiBNo1eHRQpD9UbzBisTPXojpyzkxn","SDCBba3GVYU7s2VYQVrhMGLet6bobNzbM"]
}
}
}
}
./xchain-cli tdpos -h
mkdir -p /home/app/blockChain/x003;cp -r * /home/app/blockChain/x003;cd /home/app/blockChain/x003 # 递归拷贝output里的全部文件至x目录
sudo vim conf/xchain.yaml # 配置根节点,根节点自己也要配置
p2pV2:
port: 47102
# port: 47101
bootNodes:
- "/ip4/127.0.0.1/tcp/47101/p2p/QmVxeNubpg1ZQjQT8W5yZC9fD7ZB1ViArwvyGUB53sqf8e"
./xchain-cli createChain # 与上文一样,在新节点使用客户端创建创世区块.【注意】必须先配置bootNodes再创建新链(节点)才行。
cd /home/app/blockChain/x002/data/blockchain/xuper # 查看信息
# 如果已经create了3个节点,重启bootNode。方式见下↓
kill pid
cd 节点根目录
nohup ./xchain &
如果启动报错:error="error to connect to all bootstrap"
,请检查bootNodes.不同主机的节点注意ip.
路径 | ip端口 | 是否bootNodes | |
---|---|---|---|
/home/app/newChain/x002 | 192.168.0.xxx:37001 | 否 | |
/home/app/blockChain/x002 | 192.168.0.xxx:37002 | 是 | |
/home/app/moreChain/x003 | 192.168.0.xxx:37003 | 否 |
查看分支高度,检测全部节点是否关联
./xchain-cli status -H 127.0.0.1:37101
./xchain-cli status -H 127.0.0.1:37102
./xchain-cli status -H 127.0.0.1:37103
# 启动
cd /home/app/newChain/x002/;nohup ./xchain &
cd /home/app/blockChain/x002/;nohup ./xchain &
cd /home/app/moreChain/x003/;nohup ./xchain &
# 修改配置文件
vim /home/app/newChain/x002/data/config/xuper.json
vim /home/app/blockChain/x002/data/config/xuper.json
vim /home/app/moreChain/x003/data/config/xuper.json
{
"name": "xuper",
"ledger": {
"rootBlockid": "94248ef7a1c1e8b043d4621cc3cc1bf1eb15e74c9c4fdedded0cdee199cd84d2",
"tipBlockid": "0917a9e90a7916c4bfd9de36485940b9190c06f87313769e9bc2c8cea5d45bc1",
"trunkHeight": 733
},
/home/app/newChain/x002
,这个节点的信息在上文有讲。./xchain-cli account new --account 1234560123456789 --fee 1000 # 192.168.4.132节点创建合约账户tx===1130b45b1d1b953ddb1098878a1f87d6cdc4e8cb4ada9231fdeee241e85a451e。目录为/opt/soft/xuperunion/output
上述命令output↓
contract response:
{
"pm": {
"rule": 1,
"acceptValue": 1.0
},
"aksWeight": {
"dpzuVdosQrF2kmzumhVeFQZa1aYcdgFpN": 1.0 // 此ak作为文件data/acl/addrs的内容
}
}
The gas you cousume is: 1000
有可能有这一句 You need add fee
./xchain-cli account query -H 127.0.0.1:37101 # 查询合约账号,结果为null,说明没创建成功
在文档找到解决方案:遇到The gas you cousume is: XXXX, You need add fee 通过加--fee XXXX 参数附加资源
,加上--fee 数值
后,创建账号成功。
创建MrCheng,【复习】文章开头的转账。
./xchain-cli account newkeys --output data/MrCheng
head data/MrCheng/* && echo # 查看MrCheng的公私钥,上文也有讲
cat data/MrCheng/address && echo # 查询MrCheng的地址
./xchain-cli transfer --to k8BAsKrxKhZYLXrh45eb7j7FydzApYUDC --amount 201234 --keys data/keys/ -H 127.0.0.1:37101 # 转账到上文获得的地址,获得txid 56ccc04bc98db0a4c6c11a4d64117bce3c36f0d205a5b68bf631d06caaa445e5
给合约账号转账↓
./xchain-cli transfer --to XC1234560123456789@xuper --amount 201234 # 执行转账后,output 交易id b63b62defc70e3f98c538f77360a5d3cdeaeaaca544fafbe04106797f634646f。192.168.4.132交易id===b29e4013948c5f24702e9c36c02548c4ae2162be8cf9cf0c38e18ff278bc0d59
–from指定转账来源账号,默认地址是data/keys/address。原始交易多重签名multisig send时,将该来源地址的签名写在Initiator(发起人)的位置。
{
"module_name": "xkernel",
"method_name": "NewAccount",
"args" : {
"account_name": "1234098776890654", // 说明:16位数字组成的字符串
"acl": "{
\"pm\": {\"rule\": 1,\"acceptValue\": 1},
\"aksWeight\": {\"dpzuVdosQrF2kmzumhVeFQZa1aYcdgFpN\": 1}
}" // 这里的address改成自己的address
}
}
./xchain-cli account query # 传地址,默认 -H 127.0.0.1:37101
实名合约
/home/app/newChain/source/XuperUnion
。记录地址,便于回顾。cd /home/app/newChain/source/XuperUnion # 进入源码根目录
cd contractsdk/cpp/ # 进入编译目录
cp reserved/identity.cc example
./build.sh # 执行后可能会报Unable to find image 'hub.baidubce.com/xchain/emcc:latest' locally,请等待自动下载。【注意】脚本依赖从hub.baidubce.com拉取的docker镜像,请在编译前确认docker相关环境是可用的。
cd build # 发现identity.wasm
注意事项:
问:编译cpp合约出现 “Post http:///var/run/docker.sock/v1.19/containers/create: dial unix /var/run/docker.sock: permission denied. Are you trying to connect to a TLS-enabled daemon without TLS?” 是什么原因?
答:这可能是因为用户安装docker后,没有创建docker用户组,或者当前运行的系统账号不在docker用户组中,可以尝试下面的命令:
sudo groupadd docker
sudo usermod -aG docker ${USER} // 此处${USER}为你编译合约时使用的linux账号
service docker resteart
#!/bin/bash
set -e
# check input parameter
if [ $# -lt 4 ]; then
echo "usage: sh -x deployContract.sh accountName contractName contractNamePath args fee"
exit
fi
accountName=$1
contractName=$2
contractNamePath=$3
args=$4
fee=$5
address=`cat ./data/keys/address`
# get testnet conf including ip:port and complianceCheck public key
source "./testnet.conf"
acl="./data/acl"
if [ ! -d "$acl" ]; then
mkdir $acl
fi
addrs="./data/acl/addrs"
if [ ! -f "$addrs" ]; then
touch $addrs
fi
echo $public_key > data/acl/addrs
echo "$accountName/$address" >> data/acl/addrs
./xchain-cli wasm deploy --account $accountName --cname $contractName -H $ip_port -m $contractNamePath --arg $args --output contractRawTx.out --fee $fee
./xchain-cli multisig get --tx ./contractRawTx.out --host $ip_port --output complianceCheck.out
./xchain-cli multisig sign --tx ./contractRawTx.out --output my.sign
./xchain-cli multisig send my.sign complianceCheck.out,my.sign --tx ./contractRawTx.out -H $ip_port
cp identity.wasm /home/app/newChain/x002/ # 拷贝上文编译好的合约到节点根目录
./xchain-cli wasm deploy --account XC1234560123456789@xuper --cname identity003 -H 127.0.0.1:37101 wasm/identity.wasm -a '{"creator":"MrChengMath"}' # cname:合约名称,字母开头;identity.wasm:合约代码;-a:参数,由合约确定,可以查看服务端源码确定功能,比如,将客户端参数存入数据库,即PutObject;
运行,来了
contract response: initialize identity contract success
The gas you cousume is: 148794
You need add fee
意思是请支付燃料(代币),在命令末尾加上--fee 148794
部署合约成功,响应:d225ee6ec6e58bea9e0f1206f3d3af757a29bd274c60202ebf32712f98b525f5(交易id)
./xchain-cli tx query d225ee6ec6e58bea9e0f1206f3d3af757a29bd274c60202ebf32712f98b525f5 # 查看部署结果:查询本次部署
data/keys账户也可以调用合约。
也就是调用合约的函数
调用合约的Json模板,【内容与本例无关】
{
"module_name": "wasm",
"contract_name": "counter",
"method_name": "increase", // 函数名称
"args":{
"key":"counter"
}
}
./xchain-cli acl query --account XC1234560123456789@xuper
output:
{
"pm": {
"rule": 1,
"acceptValue": 1
},
"aksWeight": {
"dpzuVdosQrF2kmzumhVeFQZa1aYcdgFpN": 1
}
}
identity_add.json
{
"module_name": "wasm",
"contract_name": "identity002",
"method_name": "register_aks",
"args":{
"aks":"ak1,ak2"
}
}
mkdir -p data/acl
vim addrs # 填入内容:XC1234560123456789@xuper/dpzuVdosQrF2kmzumhVeFQZa1aYcdgFpN 生成地址文件.dpzuVdosQrF2kmzumhVeFQZa1aYcdgFpN 对应合约账号里的ak.将需要收集签名的address写入该文件中.如果需要黄反服务背书,须在data/acl/addrs文件中写入黄反服务address.
# 1: 生成原始交易
./xchain-cli multisig gen --desc json/identity_add.json --host 127.0.0.1:37101 --output out/tx_add.out
报错:
contract response: register aks to identify contract success
The gas you cousume is: 83
The fee you pay is: 83
WriteFile error
解决办法:
创建目录out.再次执行。
# 2: 本地签名
mkdir sign # 如果没有这个目录会报错
./xchain-cli multisig sign --output sign/tx_add_my.sign --tx out/tx_add.out
./xchain-cli multisig get --tx out/tx_add.out --host 14.215.179.74:37101 --output out/complianceCheck.out
# 3: 交易发送
./xchain-cli multisig send sign/tx_add_my.sign out/complianceCheck.out --host 127.0.0.1:37101 --tx out/tx_add.out # send随后的两个参数分别为发起者的签名和acl的签名(acl中有多个AK时,用逗号连接多个签名文件)。执行成功后,返回响应TX id:59b4d44a25a304aa15069217be4b7ff85a5381f2719052d4e8864ff1a2bc1a69
./xchain-cli tx query 59b4d44a25a304aa15069217be4b7ff85a5381f2719052d4e8864ff1a2bc1a69
响应日志↓
原始交易
contract response: register aks to identify contract success
The gas you cousume is: 83
The fee you pay is: 1000
{
"txid": "",
"blockid": "",
签名
{
"PublicKey": "{\"Curvname\":\"P-256\",\"X\":74695617477160058757747208220371236837474210247114418775262229497812962582435,\"Y\":51348715319124770392993866417088542497927816017012182211244120852620959209571}",
"Sign": "MEQCIFYFeh2SfDfETkXeuGfMTbSLt1JeiY7v8k5VaMoGMAvOAiAgFBEWN+mMi76Pprn72JQXKPSCzKarP3u69WxEz5nGZw=="
}
{
"module_name": "wasm",
"contract_name": "identity002",
"method_name": "unregister_aks",
"args":{
"aks":"ak1,ak2"
}
}
# 1: 生成原始交易
vim identity_del.json # 填入上文json内容
./xchain-cli multisig gen --desc json/identity_del.json --host 127.0.0.1:37101 --output out/tx_del.out
# 2: 本地签名
./xchain-cli multisig sign --output sign/tx_del_my.sign --tx out/tx_del.out
# 3: 交易发送
./xchain-cli multisig send sign/tx_del_my.sign out/complianceCheck.out --host 127.0.0.1:37101 --tx out/tx_del.out # send随后的两个参数分别为发起者的签名和acl的签名(acl中有多个AK时,用逗号连接多个签名文件)。响应交易id:db3763d95cc6ec40ad237455ed9ed081dd30b45927fd3652131914b3e22952ad
# 检验是否成功执行,即是否删除了ak
./xchain-cli tx query db3763d95cc6ec40ad237455ed9ed081dd30b45927fd3652131914b3e22952ad #
Response:
./xchain-cli account contracts --account XC1234560123456789@xuper # 根据合约账号检索
响应↓
[
{
"contract_name": "identity001",
"txid": "d225ee6ec6e58bea9e0f1206f3d3af757a29bd274c60202ebf32712f98b525f5",
"desc": "TWF5YmUgY29tbW9uIHRyYW5zZmVyIHRyYW5zYWN0aW9u"
}
]
./xchain-cli acl query --account XC1234560123456789@xuper # account参数为合约账号名称
上述命令响应↓
{
"pm": {
"rule": 1,
"acceptValue": 1 // 须达到的阈值
},
"aksWeight": {
"dpzuVdosQrF2kmzumhVeFQZa1aYcdgFpN": 1
}
}
./xchain-cli account balance XC1234560123456789@xuper -H 127.0.0.1:37101 # output 258118
查看Protobuf教程
查看智能合约教程
版本升级时,需要更新为新版本的代码,并重新编译,然后将 plugins文件夹, 二进制文件xchain,xchain-cli 全部替换后全部重新启动即可,注意多节点模式下需要先启动bootNodes节点。
首先查询交易所在区块,然后查询区块是否在区块链主干上,如果交易所在区块在区块链主干上,表明此交易已经生效。事件通知暂不支持,后续有计划支持部分类型事务执行结果的事件通知。
首先,P-256曲线目前依然在密码学界被广泛使用。其次,这次开源的是我们的基础版本,而在xchain的代码架构下,密码学相关的模块是插件化使用的,密码学crypto模块是可以独立研发并集成进开源框架中的。同时,在ECDSA之外,也已开源了多重签名、EDDSA、环签名等多种签名算法。在尚未开源的版本中,通过可变签名算法,我们已经支持国密/NIST的多条椭圆曲线。最后,这些算法和曲线被支持混合使用,开发者可以自由选择他们认为安全的曲线和算法来保护自己的数字资产。所以,敬请期待百度xchain后续的密码学相关开源进展。
查看以太坊教程