1.密钥
2.部署本地链
// 下载xuperchain源码
git clone https://github.com/xuperchain/xuperchain.git
// 执行命令
$ cd xuperchain
$ git checkout -b v5.1.0 v5.1.0
$ make
//编译报错问题解决方案
//部署成功
check服务运行状态
[root@mayi output]# bin/xchain-cli status -H 127.0.0.1:37101
{
"blockchains": [
{
"name": "xuper",
"ledger": {
"rootBlockid": "d93c260ea5639a55e1fcad3df494495efad5c65d46e846b6db3a9194a4212886",
"tipBlockid": "a39cd15914bf6631dfcf2cd8c3febfb2193ae2f6de97aac0d224906b9bcc9cc1",
"trunkHeight": 32
},
"utxo": {
"latestBlockid": "a39cd15914bf6631dfcf2cd8c3febfb2193ae2f6de97aac0d224906b9bcc9cc1",
"lockKeyList": null,
"utxoTotal": "100000000000032000000",
"avgDelay": 0,
"unconfirmed": 0,
"maxBlockSize": 134217728,
"reservedContracts": [],
"forbiddenContract": {
"moduleName": "",
"contractName": "",
"methodName": "",
"args": {},
"resource_limits": null
},
"newAccountResourceAmount": 1000,
"irreversibleBlockHeight": 0,
"irreversibleSlideWindow": 0,
"gasPrice": {
"cpu_rate": 1000,
"mem_rate": 1000000,
"disk_rate": 1,
"xfee_rate": 1
}
},
"branchBlockid": [
"a39cd15914bf6631dfcf2cd8c3febfb2193ae2f6de97aac0d224906b9bcc9cc1"
]
}
],
"peers": null,
"speeds": {}
}
创建普通用户,生成的地址、公钥、私钥再output指定位置
创建合约账号
通过账户存储的路径查询账户余额
通过账户地址查询账户余额
查询合约账户余额
创世账户就是data/keys
转账代码
// --keys 从此地址 转给 --to地址 --amount 金额
$ bin/xchain-cli transfer --to czojZcZ6cHSiDVJ4jFoZMB1PjKnfUiuFQ --amount 10 --keys data/keys/ -H 127.0.0.1:37101
24d53ea6e61ede8dc4fe65a04fd30da17c079a359e700738f8795dfddc55ffb4
// 命令执行的返回是转账操作的交易id(txid) .. note:
通过txid查询交易的信息,包括交易状态、交易的源和目标账号、交易的金额、所在的区块(如果已上链)
[root@mayi output]# bin/xchain-cli tx query 19262916082876338d876e49a0cbba4d5215a9a779a4d49c319f3b60d1b8e0f7 -H 127.0.0.1:37101
{
"txid": "19262916082876338d876e49a0cbba4d5215a9a779a4d49c319f3b60d1b8e0f7",
"blockid": "597363411a793bf4d266812876c4b6792dabf923df32f214878465fb033ee5fd",
"txInputs": [
{
"refTxid": "c64d97ba83c76cc2a210bbcf4709929f4069715846b2a40a63a0aaeaf66db96c",
"refOffset": 0,
"fromAddr": "TeyyPLpp9L7QAcxHangtcHTu7HUZ6iydY",
"amount": "1000000"
}
],
"txOutputs": [
{
"amount": "100000",
"toAddr": "SYjeA5QtEhRPTZshmAnijXN7gPKFTyx5u"
},
{
"amount": "900000",
"toAddr": "TeyyPLpp9L7QAcxHangtcHTu7HUZ6iydY"
}
],
"desc": "transfer from console",
"nonce": "17088681334468250316599064",
"timestamp": 1708868133322295341,
"version": 3,
"autogen": false,
"coinbase": false,
"txInputsExt": null,
"txOutputsExt": null,
"contractRequests": null,
"initiator": "TeyyPLpp9L7QAcxHangtcHTu7HUZ6iydY",
"authRequire": [
"TeyyPLpp9L7QAcxHangtcHTu7HUZ6iydY"
],
"initiatorSigns": [
{
"publickey": "{\"Curvname\":\"P-256\",\"X\":36505150171354363400464126431978257855318414556425194490762274938603757905292,\"Y\":79656876957602994269528255245092635964473154458596947290316223079846501380076}",
"sign": "3044022025d3da1e7b4284f18ee0b5e4d1fbd25c17f21a217fd703c5b3a0e36f0b56ed06022071ad9078800d975d4d08dbd466f7bec79cbd2a498c22aa0f5dd34c06bead3eef"
}
],
"authRequireSigns": [
{
"publickey": "{\"Curvname\":\"P-256\",\"X\":36505150171354363400464126431978257855318414556425194490762274938603757905292,\"Y\":79656876957602994269528255245092635964473154458596947290316223079846501380076}",
"sign": "30450220691f447c8688e61dd1c44a79f89e872a5f7899191b57c1f72483a5e88c04c5a0022100c666e4a68a9b853d3cd929d3da7ea454bf2c0dfcec1923c86d836cf87fe8b8f1"
}
],
"receivedTimestamp": 1708868133327709139,
"modifyBlock": {
"marked": false,
"effectiveHeight": 0,
"effectiveTxid": ""
}
}
通过block id查询block信息
bin/xchain-cli block 597363411a793bf4d266812876c4b6792dabf923df32f214878465fb033ee5fd -H 127.0.0.1:37101
{
"version": 1,
"blockid": "597363411a793bf4d266812876c4b6792dabf923df32f214878465fb033ee5fd",
"preHash": "8bef708752d86e56f676b2740ba665c0300bd250f6ee5ac5ab7fc8c499ac6af4",
"proposer": "TeyyPLpp9L7QAcxHangtcHTu7HUZ6iydY",
"sign": "3045022029879a53cda3633b10e066ec7f5c44030fd2aed1d3def013059586cf7523b9d1022100d559caf5b90279d6eaae633c442cde1e2be4bac3d711c23c781d79cce1273760",
"pubkey": "{\"Curvname\":\"P-256\",\"X\":36505150171354363400464126431978257855318414556425194490762274938603757905292,\"Y\":79656876957602994269528255245092635964473154458596947290316223079846501380076}",
"merkleRoot": "9223a3d32eec5369b9e11b2f5a75ef2958af648734a39d017c8472d70bc4c6c5",
"height": 5448,
"timestamp": 1708868133439135867,
"transactions": [
{
"txid": "d8390b851bca31022c0a060d7043d636c7be43cc467feb978f239ead1b65d4a5",
"blockid": "597363411a793bf4d266812876c4b6792dabf923df32f214878465fb033ee5fd",
"txInputs": null,
"txOutputs": [
{
"amount": "1000000",
"toAddr": "TeyyPLpp9L7QAcxHangtcHTu7HUZ6iydY"
}
],
"desc": "award",
"nonce": "",
"timestamp": 1708868133439425900,
"version": 1,
"autogen": false,
"coinbase": true,
"txInputsExt": null,
"txOutputsExt": null,
"contractRequests": null,
"initiator": "",
"authRequire": null,
"initiatorSigns": null,
"authRequireSigns": null,
"receivedTimestamp": 0,
"modifyBlock": {
"marked": false,
"effectiveHeight": 0,
"effectiveTxid": ""
}
},
{
"txid": "19262916082876338d876e49a0cbba4d5215a9a779a4d49c319f3b60d1b8e0f7",
"blockid": "597363411a793bf4d266812876c4b6792dabf923df32f214878465fb033ee5fd",
"txInputs": [
{
"refTxid": "c64d97ba83c76cc2a210bbcf4709929f4069715846b2a40a63a0aaeaf66db96c",
"refOffset": 0,
"fromAddr": "TeyyPLpp9L7QAcxHangtcHTu7HUZ6iydY",
"amount": "1000000"
}
],
"txOutputs": [
{
"amount": "100000",
"toAddr": "SYjeA5QtEhRPTZshmAnijXN7gPKFTyx5u"
},
{
"amount": "900000",
"toAddr": "TeyyPLpp9L7QAcxHangtcHTu7HUZ6iydY"
}
],
"desc": "transfer from console",
"nonce": "17088681334468250316599064",
"timestamp": 1708868133322295341,
"version": 3,
"autogen": false,
"coinbase": false,
"txInputsExt": null,
"txOutputsExt": null,
"contractRequests": null,
"initiator": "TeyyPLpp9L7QAcxHangtcHTu7HUZ6iydY",
"authRequire": [
"TeyyPLpp9L7QAcxHangtcHTu7HUZ6iydY"
],
"initiatorSigns": [
{
"publickey": "{\"Curvname\":\"P-256\",\"X\":36505150171354363400464126431978257855318414556425194490762274938603757905292,\"Y\":79656876957602994269528255245092635964473154458596947290316223079846501380076}",
"sign": "3044022025d3da1e7b4284f18ee0b5e4d1fbd25c17f21a217fd703c5b3a0e36f0b56ed06022071ad9078800d975d4d08dbd466f7bec79cbd2a498c22aa0f5dd34c06bead3eef"
}
],
"authRequireSigns": [
{
"publickey": "{\"Curvname\":\"P-256\",\"X\":36505150171354363400464126431978257855318414556425194490762274938603757905292,\"Y\":79656876957602994269528255245092635964473154458596947290316223079846501380076}",
"sign": "30450220691f447c8688e61dd1c44a79f89e872a5f7899191b57c1f72483a5e88c04c5a0022100c666e4a68a9b853d3cd929d3da7ea454bf2c0dfcec1923c86d836cf87fe8b8f1"
}
],
"receivedTimestamp": 1708868133327709139,
"modifyBlock": {
"marked": false,
"effectiveHeight": 0,
"effectiveTxid": ""
}
}
],
"txCount": 2,
"merkleTree": [
"d8390b851bca31022c0a060d7043d636c7be43cc467feb978f239ead1b65d4a5",
"19262916082876338d876e49a0cbba4d5215a9a779a4d49c319f3b60d1b8e0f7",
"9223a3d32eec5369b9e11b2f5a75ef2958af648734a39d017c8472d70bc4c6c5"
],
"inTrunk": true,
"nextHash": "597a1199fae141fde1be5aff332036b6cbc103b11efc7db2f35d111028c2fa18",
"failedTxs": null,
"curTerm": 0,
"curBlockNum": 0,
"justify": {}
}
百度超级链进阶使用
开启测试网络
查看种子节点URL
得到如下结果,实际使用时,需要将ip配置节点的真实ip,port配置成真实port
如果想给该节点分配一个新的网络连接地址,可以使用如下命令:
cd node1
./bin/xchain-cli netURL gen
p2p网络配置
# 查看
cd node1
cat conf/network.yaml
分别启动每个节点
cd ./testnet/node1
sh ./control.sh start
# 如果sh命令运行不成功的话可以使用bash命令
# bash ./control.sh start
cd ../node2
sh ./control.sh start
# 如果sh命令运行不成功的话可以使用bash命令
# bash ./control.sh start
cd ../node3
sh ./control.sh start
# 如果sh命令运行不成功的话可以使用bash命令
# bash ./control.sh start
分别查看每个节点运行状态
./bin/xchain-cli status -H :37101
./bin/xchain-cli status -H :37102
./bin/xchain-cli status -H :37103
在已运行的网络中添加节点
1. 网络部署 — XuperChain 官方文档 文档 (baidu.com)
合约部署
部署Solidty合约
在部署、调用solidity合约之前,请先查看`conf/contract.yaml` 中evm一节,确保evm合约功能开启。
# evm合约配置
evm:
driver: "evm"
enable: true
失败解决方案
用一下合约作为示例
pragma solidity >= 0.0.0;
contract Counter {
address owner;
mapping (string => uint256) values;
constructor() public{
owner = msg.sender;
}
function increase(string memory key) public payable{
values[key] = values[key] + 1;
}
function get(string memory key) view public returns (uint) {
return values[key];
}
function getOwner() view public returns (address) {
return owner;
}
}
使用solc编译智能合约为wasm,可以被联盟链部署
可以把生成的 Counter.abi 和 Counter.bin 拷贝到 xuperchain 下的 output 目录,以简化后续命令的执行
[root@mayi output]# ./bin/xchain-cli evm deploy --account XC1111111111111111@xuper --cname counterevm --fee 5200000 Counter.bin --abi Counter.abi
contract response:
The gas you cousume is: 1688
The fee you pay is: 5200000
Tx id: 48e28f9251770e5a74087510bc7b145e9a105948f430918ee731f3eabb25b4fb
--abi Counter.abi :表示部署需要使用的abi文件,用于合约方法参数编解码
-a :如果合约需要构造函数,通过-a进行指定
调用合约
# 调用solidity合约,increase方法,counterevm为合约名
$ bin/xchain-cli evm invoke --method increase -a '{"key":"test"}' counterevm --fee 22787517
# 调用solidity合约,get方法,counterevm为合约名
$ bin/xchain-cli evm query --method get -a '{"key":"test"}' counterevm
# 调用结果,其中0表示返回值的次序,1为返回值
# key,value: 0 1
# xchain合约账户地址转evm地址,contract-account表示 XuperChain 合约账户
xchain-cli evm addr-trans -t x2e -f XC1111111111111113@xuper
result, 3131313231313131313131313131313131313133 contract-account
# evm地址转xchain合约账户,contract-account表示 XuperChain 合约账户
xchain-cli evm addr-trans -t e2x -f 3131313231313131313131313131313131313133
result, XC1111111111111113@xuper contract-account
# evm地址转xchain普通账户地址,xchain表示 XuperChain 普通账户
xchain-cli evm addr-trans -t e2x -f 93F86A462A3174C7AD1281BCF400A9F18D244E06
result, dpzuVdosQrF2kmzumhVeFQZa1aYcdgFpN xchain
# xchain普通账户地址转evm地址,xchain表示 XuperChain 普通账户
xchain-cli evm addr-trans -t x2e -f dpzuVdosQrF2kmzumhVeFQZa1aYcdgFpN
result, 93F86A462A3174C7AD1281BCF400A9F18D244E06 xchain
# xchain合约名地址转evm地址,contract-name表示 XuperChain 合约名
xchain-cli evm addr-trans -t x2e -f storagedata11
result, 313131312D2D2D73746F72616765646174613131 contract-name
# evm地址转xchain合约名,contract-name表示 XuperChain 合约名
xchain-cli evm addr-trans -t e2x -f 313131312D2D2D73746F72616765646174613131
result, storagedata11 contract-name
# 合约通用配置
contract:
enableUpgrade: true