百度超级链入门【详解】

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