IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 区块链 -> XuperChain 百度区块链简易学习帖 -> 正文阅读

[区块链]XuperChain 百度区块链简易学习帖

环境配置

目前 XuperChain 节点主要运行在linux和mac上,windows不能运行 XuperChain 节点。

go语言安装

ubuntu16.04下 通过apt-get install 安装go 默认版本为1.6。但百度区块链要求安装go版本为1.11或更高。如果不想做从官网下载go压缩包并解压、配置环境变量这些繁琐流程。可以尝试这篇帖子: link
帖子中详细介绍了直接将默认1.6低版本的升级为高版本go。

git安装

详情见百度区块链开发手册:link

$ sudo apt install git

客户端安装

使用git下载源码到本地:

$ git clone https://github.com/xuperchain/xuperchain.git

git完后当前目录有一个文件夹叫xuperchain。这个时候我们可以make一下了,输入命令

$ cd xuperchain
$ make

这里make一般出大问题。make完后一定要去xuperchain/output/bin文件夹看有没有出来三个可执行文件。
在这里插入图片描述
如果缺少xchain、xchain-cli文件,那就说明失败了。根据这两天改这个bug经验,总结有两个原因比较关键:

  1. 和国内网络防火墙有关。官方开发手册给出如下说明:

make 时,可能出现拉取失败的情况,可以配置GOPROXY解决此问题

$ export GOPROXY=https://goproxy.cn,direct

GOPATH问题报错,不推荐使用go1.11版本之前的版本

GCC版本需要升级到4或5以上

  1. go编译失败,会出现一长串go : could not … permission denied
    此时不妨试试上述安装go目录给出的帖子,按照里面步骤更新一下go。
    如果make成功,出现如下三个可执行文件,此时说明编译成功。
    在这里插入图片描述

启动私链

启动命令:

$ bash control.sh start

在这里插入图片描述
这样,我们就成功启动一条链。在每次执行代码时都需要先进行启动操作。
control.sh 脚本提供 start | stop | restart | forcestop 四个命令,可以使用bash control.sh help查看。
也可以查看服务运行的状态:

$ bin/xchain-cli status -H 127.0.0.1:37101

在这里插入图片描述

基本操作命令

1. 创建普通用户

$ bin/xchain-cli account newkeys --output data/bob

生成的地址,公钥,私钥在–output 指定位置。可以看到在output/data/bob里面已经成功创建普通用户
在这里插入图片描述

2. 创建合约账号

$ bin/xchain-cli account new --account 1111111111111111 --fee 2000

在这里插入图片描述

3. 查询余额

根据账户存储的路径,查询该账户的余额。–keys为要查询的账户的地址
也可以根据地址查询该账户余额

$ bin/xchain-cli account balance --keys data/keys
$ bin/xchain-cli account balance TeyyPLpp9L7QAcxHangtcHTu7HUZ6iydY

在这里插入图片描述
注明:
两条命令查询的是同一个地址的余额,即目录output/data/keys的,和之前创建的bob无关。
打开keys文件夹,里面有一个address文件,点开即是地址的十六进制代码。
在这里插入图片描述
而回顾之前创建合约账号的文本中,记录了合约地址,同为Teyy …iydY:
在这里插入图片描述
至于为什么查询到的余额在不停的变化,可认为该合约是个公共合约,很多人在使用此合约进行各种转账操作。
为了验证说法正确性,可以去查询之前创建好的个人账户bob文件夹,文件夹里面同样有一个address文件,点开即是16进制地址,查询此地址的余额,发现是0,验证说法完成。
在这里插入图片描述

4. 转账

转账操作需要提供源账号的私钥目录,并不需要提供目标账号的任何密钥,只需要提供地址即可。
–keys 从此地址 转给 --to地址 --amount 金额
命令执行后,返回一个交易id(txid)。

$ bin/xchain-cli transfer --to czojZcZ6cHSiDVJ4jFoZMB1PjKnfUiuFQ --amount 10 --keys data/keys/ -H 127.0.0.1:37101

可以先查询此命令中地址czoj…iuFQ地址余额,为0。完成转账交易后,再次查询地址余额,说明转账交易完成。
在这里插入图片描述

5. 查询交易信息

根据上述转账操作得到的交易id c0ae…69e2,输入命令得到交易信息。

$ bin/xchain-cli tx query 交易id -H 127.0.0.1:37101

在这里插入图片描述

6. 查询block信息

通过上述查询txid可得到blockid的值,继而可以查询区块的相关信息,包括区块内打包的交易、所在链的高度、前驱/后继区块的id等内容。

$ bin/xchain-cli block txid中得到的blockid -H 127.0.0.1:37101

在这里插入图片描述

网络部署(选择性阅读)

1. 创建网络部署环境

部署说明:
第一,如果没有下载tree,返回到根目录下载安装tree

$ sudo apt install tree

第二,在执行如下命令时,需要先返回到xuperchain目录下,因为需要使用make命令编译出testnet,而编译文件makefile在xuperchain目录。

$ make testnet

编译完成后,xuperchain目录得到一个名为testnet的文件夹,输入命令:

$ tree testnet

在这里插入图片描述
此时网络配置完成。节点加入网络需要通过网络中一个或者多个种子节点,区块链网络中任何一个节点都可以作为种子节点,通过配置种子节点的网络连接地址netURL可以加入网络。

2. 配置种子节点netURL、运行节点

以node1为例。进入目录testnet/node1,输入命令查看node1节点连接地址netURL。

$ cd testnet/node1
$ ./bin/xchain-cli netURL preview

在这里插入图片描述
可以看到ip地址为127.0.0.1。实际使用时,需要将ip配置节点的真实ip,port配置成如下模板:

 /ip4/{{ip地址}}/tcp/{{port配置}}/p2p/Qmf2HeHe4sspGkfRCTq6257Vm3UHzvh2TeQJHHvHzzuFw6

如果想给节点分配一个新的网络连接地址,可以使用如下命令:

$ cd node1
$ ./bin/xchain-cli netURL gen

使用cat命令可以查看p2p网络配置

$ cat conf/network.yaml

在这里插入图片描述

注意: 如果是部署在同一个节点上,p2p模块端口应该配置不同,同时不要和其他已经被占用的端口冲突

启动命令、查看运行状态命令:

$ bash ./control.sh start
$ ./bin/xchain-cli status -H :37101

在这里插入图片描述

注:如果是启动node2,则端口写37102;node3则写37103。

常见问题:
1、端口冲突:注意如果在一台机器上部署多个节点,各个节点的RPC监听端口以及p2p监听端口都需要设置地不相同,避免冲突;

2、不同节点公私钥和netURL冲突:注意网络中不同节点./data/keys下的文件和./data/netkeys下的内容都应该不一样,这两个文件夹是节点在网络中的唯一标识,每个节点需要独自生成,否则网络启动异常;

3、启动时连接种子节点失败:注意要先将种子节点启动,再起动其他节点,否则会因为加入网络失败而启动失败;

编写一个Solidity合约

1. 提前准备

选择最为主流的Solidity语言来编译合约。Solidity是官方推出的编译语言。
用以下命令查看是否安装好solc 用于编译sol文件。

$ solc --version

在这里插入图片描述
如果显示没有安装,则使用如下命令安装:

$ sudo apt-get install solc

合约默认处于关闭状态,在部署、调用合约之前,请先查看 conf/contract.yaml 中如下图划红线部分,确保合约功能开启。
在这里插入图片描述
以counter合约为例来看如何编写一个Solidity合约。counter合约是一个简单的计数器合约,每调用一次合约即计数+1。
为简化操作,在/output/data目录下新建文件夹“shishi”(名字随便取的)。可以去图形化界面操作,比终端上输入命令简单。
在这里插入图片描述
在shishi文件夹里新建一个文本文档,重命名为Counter.sol
双击打开此文本文档,复制粘贴如下代码:

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;
    }

}

保存后退出。

2. 编译合约

在当前目录新打开一个终端,通过solc编译合约源码,输入命令:

$ solc --bin --abi Counter.sol -o .

目录中出现两个文件,合约二进制文件和abi文件分别存放在当前目录下,Counter.bin和Counter.abi

–bin :表示需要生成合约二进制文件

–abi :表示需要生成合约abi文件,用于合约方法以及参数编解码

-o:表示编译结果输出路径

在这里插入图片描述
在这里插入图片描述
编译合约完成。

3. 部署合约

返回到output目录。部署合约前需要先向合约账户中转账,合约没有余额的话无法执行合约,也无法调用合约中函数,错误如图所示:(显示utxo error,即交易池中没有余额,不能执行命令。)
在这里插入图片描述
查询合约余额,为0
在这里插入图片描述
用如下命令给合约账户充值:

$ bin/xchain-cli transfer --to XC1111111111111111@xuper --amount 100000000

在这里插入图片描述
返回一个tx id,说明转账操作成功。合约账户有余额后即可部署合约了,用如下命令部署合约:

$ bin/xchain-cli evm deploy --account XC1111111111111111@xuper --cname counterevm  --fee 5200000 Counter.bin --abi Counter.abi

在这里插入图片描述
合约部署完成。

4. 调用合约

接下来调用合约,合约中increase方法每调用一次,计数器加1。 调用合约get方法即可返回合约中的计数数值。命令如下:

# 合约increase方法调用
$ bin/xchain-cli evm invoke --method increase -a '{"key":"stones"}' counterevm --fee 22787517 --abi Counter.abi
# 合约get方法调用
$ bin/xchain-cli evm query --method get -a '{"key":"stones"}' counterevm --abi Counter.abi

在这里插入图片描述
通过上面运行截图可得到,执行第一句increase方法调用语句后,返回汽油费:支付费用和tx id,说明调用成功;执行第二局get方法调用语句后,看到返回的数字“1”,说明计数器合约成功执行。如果重复increase方法调用语句,则计数不断往上加,结果如下:
在这里插入图片描述

  区块链 最新文章
盘点具备盈利潜力的几大加密板块,以及潜在
阅读笔记|让区块空间成为商品,打造Web3云
区块链1.0-比特币的数据结构
Team Finance被黑分析|黑客自建Token“瞒天
区块链≠绿色?波卡或成 Web3“生态环保”标
期货从入门到高深之手动交易系列D1课
以太坊基础---区块验证
进入以太坊合并的五个数字
经典同态加密算法Paillier解读 - 原理、实现
IPFS/Filecoin学习知识科普(四)
上一篇文章      下一篇文章      查看所有文章
加:2021-10-28 12:26:51  更:2021-10-28 12:26:55 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年12日历 -2024/12/28 4:33:53-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码
数据统计