bitpie安卓版官网下载|xuper
百度超级链-区块链开放平台
百度超级链-区块链开放平台
产品
可信基础设施
超级链BaaS
可信数字身份
可信跨链
智能预言机
开放网络
可信数据流通
智能链网
隐私计算
可信数字经济
数字商品可信登记平台
电子签约
可信存证
解决方案
司法
版权
金融
政务
溯源
教育
教程
开源社区
XuperChain
链桨
技术论坛
文档中心
服务与支持
充值
工作台
首页
产品
超级链BaaS
开放网络
可信存证
电子签约
隐私计算
可信跨链
可信数字身份
数字商品可信登记平台
超级链智能预言机
智能链网
解决方案
司法
版权
金融
政务
溯源
教育
教程
开源社区
XuperChain
链桨
技术论坛
文档中心
服务与支持
视频介绍
XuperOS
开放网络
提供区块链的快速部署和运行环境,只花2元立即体验区块链服务
查看详情
XuperChain
XuperChain开源
自研可控 / 四大核心技术支持 / 灵活高效支持各类业务应用场景
查看详情
【最新消息】
星际社区悄然预备:AI聊天机器人即将上线,共创社交新篇章
【最新消息】
XuperOS新年致辞
【最新消息】
百度超级链DAPP互通计划发布
超级链数据动态
-
用户数
-
区块高度
-
历史并发峰值
-
总交易笔数
超级链技术优势
超级节点技术
利用超级计算机和分布式架构
具备计算力和储存力
对外呈现为节点,内部为分布式网络
链内并行技术
事务能并行处理的核心技术
能够充分利用多核和多机的计算资源
可插拔共识机制
支持单链上多种共识机制无缝切换
当前支持:DPOS、授权共识、PBFT
支持根据需求定制开发插件
立体网络技术
基于平行链、侧链、链内 DAG 并行技术的逻辑处理
单链:8.7万TPS
整体网络:20万TPS
一体化智能合约
智能合约和核心架构分离技术
具备合约生命周期管理、预执行等特色
合约语言:C++、Go、Solidity等
账号权限系统
去中心化的账号权限系统
可扩展的权限模型,支持多种权限模型配置
产品介绍
超级链BaaS
超级链BaaS提供的标准化区块链产品,可以简单快速的实现业务与区块链的融合,帮助您便捷地完成区块链网络的部署、监控和运维。
查看更多
开放网络
自主研发的开源技术搭建的区块链基础服务网络,为开发者提供区块链应用快速部署和运行的环境。
查看更多
可信存证
通过司法权威节点见证,发挥区块链防篡改、安全的优势,使电子数据作为电子证据对接到互联网法院,具备全链路可信
查看更多
数据协同平台
数据协同平台是基于百度超级链、多方安全计算、数据隐私保护等技术打造的国内首个多企业数据安全协同计算方案
查看更多
解决方案
司法
是由法院、公证处、司法鉴定中心等为节点构建的区块链法院联盟体系,实现数据从生成、存储、传输到最终提交的整个环节真实可信,并具有法律效力。全链路可信,全流程司法权威节点见证
查看详情 >
版权
基于区块链技术,为原创作者和机构提供版权保护、传播变现到监控维权的全链路服务。全方位推动版权存证、监控取证及司法维权全链条。图片机构、确权机构、司法机构三类联盟节点加持,提升版权链公信力,打造真正可信、可靠的版权保护。
查看详情 >
金融
百度超级链与可信计算技术的集成,实现数据不出库,即可完成多方安全建模和共享,为金融机构提供安全可控、保护隐私的数据流通共享的解决方案。大大提升金融机构的风险定价、信用评估,反欺诈系统等金融风控能力
查看详情 >
政务
百度区块链能够助力政府构建“一号申请、一窗受理、一网通办”的政务体系,实现政务数据互认。通过百度超级链的数据协同平台能够在保护用户隐私不受侵害、国家机密安全可靠基础上,用跨链计算方式实现协同工作,提升社会运转效率。
查看详情 >
溯源
通过区块链与物联网技术,将农产品从生产,加工,质检,运输,经销商,零售商一直到消费者手里全流程信息的可信记录,解决了信息孤岛,信息流转不畅,信息缺乏透明度等行业问题。构建数字化一站式消费生态
查看详情 >
开源社区
百度超级链开源技术是百度自主研发创新的产物,拥有链内并行技术、可插拔共识机制、一体化智能合约等业内领先技术支撑,让区块链应用搭建更灵活、性能更高效、安全性更强,全面赋能区块链开发者
进入开源社区
超级链历程
2015年
启动战略投资和方向布局
2017年
区块链技术部门成立
2017年3月
支持长安新生公募ABS发行
2018年3月
区块链版权保护平台上线
2018年9月
百度区块链白皮书V1.0发布
2018年12月
与北京互联网法院共建“天平链”
2019年4月
获得网信办首批区块链信息服务备案
2019年5月
XuperChain宣布开源
2019年7月
通过工信部电子一所安全性、性能测评
2019年8月
与重庆市达成区块链医疗处方流转平台合作
2019年12月
中国唯一代表出席WTO区块链论坛
2020年1月
开放网络正式发布
2020年2月
首个区块链广告监播案例落地
2020年4月
推动区块链首次写入防伪溯源国家标准
2020年6月
牵头制定IEEE跨链国际标准
2020年9月
捐赠开放原子开源基金会
2021年3月
超级链动态内核发布
2021年5月
超级链累计接入全国百余家法院电子证据平台
2021年7月
超级链创新中心落户上海
2021年9月
首个NFT产品发布
2021年12月
首个区块链+AI产品链桨发布
2022年1月
百度超级链数字藏品平台上线
合作伙伴
咨询反馈
请留下您的联系方式与需求,我们将尽快联系您
业务咨询类型*
超级链BaaS开放网络可信存证合作咨询问题反馈可信跨链可信数字身份数字商品可信登记平台超级链智能预言机智能链网
错误信息
姓名*
错误信息
手机号码*
错误信息
邮箱地址*
错误信息
企业名称*
错误信息
行业*
错误信息
咨询反馈*
错误信息
错误信息
提交
关闭
提交成功
xchain-help@baidu.com
邮件联系我们
联系小助手
扫二维码下载
产品
超级链BaaS
开放网络
可信存证
电子签约
隐私计算
可信跨链
可信数字身份
数字商品可信登记平台
教育实训
超级链智能预言机
智能链网
解决方案
司法
版权
金融
政务
溯源
开源社区
XuperChain
链桨
技术论坛
文档中心
服务与支持
服务与支持
关于我们
联系我们
加入我们
官方微信
联系邮箱
xchain-help@baidu.com
友情链接
京公网安备 11000002000001号
北京ICP证030173号
京网信备 11010819390879370022号
使用百度前必读
© Baidu
XuperChain文档 — XuperChain 官方文档 文档
XuperChain文档 — XuperChain 官方文档 文档
XuperChain 官方文档 5.3
XUPERCHAIN介绍
1. 整体介绍
2. 基本概念
快速入门
1. 环境部署
2. 基本操作
进阶使用
1. 网络部署
2. 合约管理
3. 权限管理
4. 共识使用
5. 链上治理
6. 联盟链配置
7. 压测工具
8. 监控说明
9. 高级功能
开放网络
1. 开放网络介绍
2. Go SDK 接入指南
3. Java SDK 接入指南
4. Js SDK 接入指南
开发手册
1. 多语言SDK介绍
2. DAPP开发手册
应用案例
1. 标杆应用
设计原理
1. 整体流程
2. 智能合约
3. 密码学基础
4. p2p网络
5. 共识算法
6. 账本状态机
7. 权限管理
8. 监管机制
9. 其他
贡献指南
代码提交指南
更多资料
1. 源码解读
2. 配置文件
3. 视频教程
XuperChain 官方文档
首页
XuperChain文档
编辑此页
XuperChain文档¶
快速入口
工具介绍
应用案例
技术生态
社区交流
快速入口
工具介绍
应用案例
技术生态
社区交流
XuperChain是百度100%自主研发,拥有完全自主知识产权的区块链底层技术。拥有500+篇核心技术专利。XuperChain以高性能、自主可控、开源为主要设计目标,响应国家政策,打破了国外技术在区块链技术领域的垄断,致力于创建最快、最通用、最好用的区块链底层技术。2019年5月,XuperChain正式向全社会开源。2020年9月,百度将XuperChain的内核技术XuperCore捐赠给开放原子开源基金会,以全新的开源治理模式面向全社会。
快速入口
快速入门
环境部署
基本操作
进阶使用
网络部署
合约管理
权限管理
共识使用
开发手册
多语言SDK介绍
DAPP开发手册
设计原理
整体流程
账本状态机
共识机制
工具介绍
XuperIDE
由生态伙伴黑曜石实验室(Obsidian Labs)贡献的开源项目,支持开发者一键创建节点、编写、编译、部署、调用合约等
查看详情
XuperScan
由生态合作伙伴超级共识贡献的开源项目,支持通过浏览器以可视化的方式查看区块,交易,合约等链上信息
查看详情
XuperBench
XuperChain 官方压测工具,支持转账、存证和合约的压测,也可以根据压测场景构造数据集;具备控制并发数、恒定RPS、阶梯发压、异步发压等能力
查看详情
XuperWallet
区块链密钥管理工具,保护用户隐私,方便备份以及权限管理
即将上线
应用案例下载案例集
消费金融ABS融资系统
依托区块链技术实现资产交易等全流程数据的实时上链,对现金流进行实时监控和精准预测,打造ABS平台上的“真资产”,有效解决资产质量真实性问题
查看详情
百度文库版权区块链服务
借助区块链技术实现版权上链存证,解决取证难题,为原创作者和机构提供从版权保护、传播变现到监控维权的全链路服务
查看详情
云南省生物医药可信供应链金融平台
利用区块链技术实现“融信”的流通、拆分、兑付、融资上链管理,打造可信的供应链服务生态,解决交易信用难题
查看详情
重庆市渝中区电子处方流转平台
基于区块链技术,推动电子处方上链,解决传统医疗服务中数据共享、流通、归集和安全问题,促进了电子处方可信、安全、高效流转
查看详情
上海市徐家汇商圈积分平台
依托区块链技术使多渠道、多终端、多商品品种的数字资产上链管理,实现多个商场的积分打通,赋能徐家汇商圈智慧化升级
查看详情
大闸蟹区块链溯源平台
利用区块链+AI技术实现大闸蟹信息透明、安全上链存储且可追溯,保障大闸蟹品质,重塑周边产业生态
查看详情
技术生态
XuperChain 核心
XuperChain 区块链底层解决方案 源码 文档
XuperCore 区块链内核 源码 文档
智能合约开发工具
C++ 合约 SDK 源码 文档
GO 合约 SDK 源码 文档
JAVA 合约 SDK源码 文档
合约构建测试工具 源码 文档
JAVA SDK 源码 文档
GO SDK 源码 文档
JS SDK 源码 文档
OC SDK 源码 文档
XuperChain 技术生态
XuperIDE 智能合约IDE 源码 文档
XuperFront 接入网关 源码 文档
XuperCA 证书中心 源码 文档
XuperBench 压测工具 源码 文档
XuperScan 区块浏览器
文档
Crypto 密码学库 源码 文档
XuperCross 可信跨链 文档
XuperDID 分布式身份 文档
XuperData 可信计算 文档
XuperWallet 区块链钱包 即将上线
社区交流
超级链官方GitHub
加入论坛
官方技术交流群
扫码加入微信社群
取消
常见问题
Next
© 版权所有 2021, xuper.
Built with Sphinx using a
theme
provided by Read the Docs.
Other Versions
v: master
Branches
master
v3.1
v3.10
v3.12
v3.2
v3.7
v3.8
v3.9
v5.1
v5.3
1. 整体介绍 — XuperChain 官方文档 文档
1. 整体介绍 — XuperChain 官方文档 文档
XuperChain 官方文档 5.3
XUPERCHAIN介绍
1. 整体介绍
1.1. 简介
1.2. 核心优势
1.2.1. 超高性能
1.2.2. 高可扩展
1.2.3. 高度易用
1.2.4. 自主研发
1.3. 架构设计
1.3.1. 协议层
1.3.2. 核心组件层
1.3.3. 基础组件层
1.4. 生态技术
1.4.1. 内核技术
1.4.2. 核心方向
1.4.3. 生态工具
1.4.4. 交叉学科
1.4.5. 解决方案
2. 基本概念
快速入门
1. 环境部署
2. 基本操作
进阶使用
1. 网络部署
2. 合约管理
3. 权限管理
4. 共识使用
5. 链上治理
6. 联盟链配置
7. 压测工具
8. 监控说明
9. 高级功能
开放网络
1. 开放网络介绍
2. Go SDK 接入指南
3. Java SDK 接入指南
4. Js SDK 接入指南
开发手册
1. 多语言SDK介绍
2. DAPP开发手册
应用案例
1. 标杆应用
设计原理
1. 整体流程
2. 智能合约
3. 密码学基础
4. p2p网络
5. 共识算法
6. 账本状态机
7. 权限管理
8. 监管机制
9. 其他
贡献指南
代码提交指南
更多资料
1. 源码解读
2. 配置文件
3. 视频教程
XuperChain 官方文档
首页
1. 整体介绍
编辑此页
1. 整体介绍¶
1.1. 简介¶
XuperChain是百度100%自主研发,拥有完全自主知识产权的区块链底层技术。拥有500+篇核心技术专利。XuperChain以 高性能、自主可控、开源 为主要设计目标,响应国家政策,打破了国外技术在区块链技术领域的垄断,致力于创建 最快、 最通用、 最好用 的区块链底层技术。2019年5月,XuperChain正式向全社会开源。2020年9月,百度将XuperChain的内核技术XuperCore捐赠给开放原子开源基金会,以全新的开源治理模式面向全社会。
1.2. 核心优势¶
1.2.1. 超高性能¶
XuperChain致力于打造最快的区块链底层技术。性能一直是区块链技术被广泛应用的最大障碍。XuperChain基于独创的XuperModel技术、大规模节点快速共识技术、AOT加速的WASM虚拟机技术等核心技术,保证了XuperChain的超高性能。并高分通过全行业的功能、性能测评,单链性能达8.7WTPS。
1.2.2. 高可扩展¶
XuperChain致力于打造最通用的区块链底层技术。不同的应用场景对于区块链的使用需求不同,为了适应更多的场景,底层技术需要能够可扩展。XuperChain基于动态内核技术,实现无内核代码侵入的自由扩展内核核心组件和轻量级的扩展订制内核引擎,满足面向不同场景的区块链实现的需求。并且不同的模块有丰富的技术选型。
1.2.3. 高度易用¶
XuperChain致力于打造最好用的区块链底层技术。XuperChain具有丰富的生态工具、官方文档教程、7*24小时开源社区支持,大大降低开发者的使用门槛。能够帮助用户快速上手,构建自己的区块链应用。
1.2.4. 自主研发¶
XuperChain是百度100%自主研发的技术,核心技术完全自主可控,并采用Apache2.0协议向全社会免费开源。
1.3. 架构设计¶
XuperChain的系统架构设计,采用模块化架构,基础组件模块化共用,内核层聚合各组件,提供能力实现业务需求,从而实现核心流程低成本订制。通过对业务抽象分层、划分子领域和模块化,最大限度的提升代码复用和系统可扩展性。从而做到,通过低成本的定制不同流程来满足不同场景的需求,最大限度的复用核心基础能力。通过分治降低系统复杂度,提升系统可维护性。
整个系统分成四层,其中下面三层构成整个XuperChain内核的核心组成部分,分别为协议层、核心组件层、基础组件层。
1.3.1. 协议层¶
这一层定义区块链的各个模块API、核心结构和流程,并管理各模块的加载和初始化,聚合和调度各核心组件实现系统需求。
1.3.2. 核心组件层¶
这一层负责区块链核心组件的具体实现,通过实现核心层定义的、接口和加载方式,接入到系统。这层的组件可以针对不同的需求场景有多种不同的实现。
1.3.3. 基础组件层¶
这一层实现业务无关的通用基础库,各层都可以引用。
1.4. 生态技术¶
围绕者XuperChain底层核心技术,构建起了整个开源生态技术体系,形成强大的开源技术生态。整个技术生态主要包括内核技术、核心方向、生态工具、交叉学科、解决方案五大组成部分。
1.4.1. 内核技术¶
内核层就是XuperChain内核技术,其定义了一系列标准API,构建一个区块链体系结构,规定了各个模块的逻辑结构、功能特征和各模块间的交互关系,并提供了各个模块适用不同场景的标准实现。
1.4.2. 核心方向¶
核心技术方向是基于内核标准API定义的区块链体系结构之上,各个组成可以独立发展起来的技术方向,主要包括九大核心技术方向,分别包括共识技术、密码服务、存储账本、节点通信、智能合约、系统安全、监管治理、隐私保护、跨链技术等。
1.4.3. 生态工具¶
生态工具技术是围绕着分布式账本技术的周边技术,主要包括区块链管理工具技术、区块链测试技术、钱包技术、浏览器技术、业务集成工具集、合约开发工具集(IDE、XDEV)等等。
1.4.4. 交叉学科¶
主要是XuperChain技术和其他技术相结合的交叉学科技术,比如去中心化身份技术、可信计算技术、边缘技术以及5G技术等等。
1.4.5. 解决方案¶
行业领域技术主要是区块链应用具体行业所产生的行业领域技术,比如与金融行业、供应链领域、医疗行业、政务行业等,目前XuperChain已经在30+场景,100+应用落地。
Next
Previous
© 版权所有 2021, xuper.
Built with Sphinx using a
theme
provided by Read the Docs.
Other Versions
v: master
Branches
master
v3.1
v3.10
v3.12
v3.2
v3.7
v3.8
v3.9
v5.1
v5.3
对百度超级链Xuper使用过程中的进一步理解 - 知乎
对百度超级链Xuper使用过程中的进一步理解 - 知乎首发于平凡人笔记切换模式写文章登录/注册对百度超级链Xuper使用过程中的进一步理解平凡人笔记前言之前写过一篇文章,在百度超级链Xuper上部署智能合约并实现存证功能这里叙述了 搭建3个节点 将节点1作为出块节点,这篇文章 咱们配置下将节点1和节点2作为出块节点,节点3作为同步节点 如何配置以及需要注意的几点,以免读者在操作实践的时候入坑或者由于理解不透彻导致耽误很多时间.我对百度链使用时间不长,可能理解的比较片面,我写这篇浅文,就当抛砖引玉吧,希望大佬前辈们指出错误的地方或者有其他需要探讨的地方 欢迎发送到我的邮箱(pingfanrenbiji@163.com) 咱们交流下吧配置多个出块节点将节点1和节点2配置为出块节点
节点3作为同步节点
修改节点1的配置查看节点2的地址cd pn2
cat data/keys/address
WJHuX9haAL7Sea6rUo8VBhhsQmMJbTopk
配置到节点1的xuper.json中删除配置项将 init_proposer_neturl 配置项删除
将节点1的配置复制到节点2和节点3cp pn1/data/config/xuper.json pn2/data/config/xuper.json
cp pn1/data/config/xuper.json pn3/data/config/xuper.json
启动每一个节点先删除节点下面的 data/blockchain/xuper 文件夹
./xchain-cli createChain
nohup ./xchain --vm ixvm &
确认下节点2是否在出块cd pn2
tail -f logs/xchain.log|grep 'isCoreMiner=true'
思考:每次修改配置都要删除数据吗如果修改共识算法的话 可以动态配置通过发起提案的方式
官方文档
https://xuperchain.readthedocs.io/zh/latest/advanced_usage/initiate_proposals.html
每次访问这个文档都很慢 有没有快速访问的方法?
如果增加一个出块节点有动态添加节点的接口,所以不用重做数据
另外 节点刚加入的时候是先同步数据再出块的
修改其他配置需要重做数据(这一点没有公司能够容忍吧,修改一个配置,就需要把之前的历史数据删除掉 然后重新整数据)
关于合约部署这块 出现签名错误的原因和解决方法javasdk关于连接节点环境第一个圈红的地方是一个ip和port 这个地址可以是多节点环境中的任何一个节点 这里可以做负载均衡比如有3个节点 通过nginx做负载均衡
所以这里配置的是nginx的ip和port(这一点我没有实践 猜想是可以的)
关于第二个圈红的地方 keys 表示 读取的是 resources文件夹下面的keys文件夹下面的private.key私钥文件关于这个私钥文件它是一个节点账户
这里咱结合实际使用过程来说明下这里的注意点
a、连接节点环境并读取keys文件夹下面的私钥文件获取账户信息b、部署合约./xchain-cli wasm deploy --account XC1111111111112222@xuper --cname eleccertest1 -a '{"creator": "someone"}' -A data/acl/addrs -o tx.output --name xuper -H localhost:37101 /Users/mengfanxiao/Documents/project/company/XinPools_INFO/document/business/baidu/xuperchain/data/blockchain/xuper/wasm/eleccert --fee 5568187 --runtime=go -a '{"owner":"mengfanxiao"}'
此时如果报错
Failed to post tx:TX_SIGN_ERROR
这说明没有获取到当前账户的私钥文件,因为做交易的时候 需要获取操作账户的私钥信息进行签名 那么为什么没有获取到私钥文件呢?
首先看下执行当前命令所使用的客户端是哪个节点 比如 节点3
然后再看 当前连接的节点是哪个节点 -H localhost:37101 这个是节点1
使用节点3的客户端连接节点1的服务是可以的 关键节点3 data/keys/下面是否有XC1111111111112222@xuper 这个合约账户的
私钥文件 data/keys/ 目录下是否具有该合约账户的私钥文件
acl 多签这块官方文档
https://xuperchain.readthedocs.io/zh/latest/advanced_usage/contract_accounts.html
acl多签交易时使用的,如果不需要多签名,不需要关注这一块
操作日志 未同步这块比如 上面的 部署合约的命令 如果执行报错 会有一个日志编号
拿着日志编号去对应的节点服务下面的日志文件中查看具体的错误信息
比如上面连接的是 -H localhost:37101 是节点1 ,那么只需要去节点1
下面的日志去找下该日志编号对应的详细日志即可
定时出块的优势和劣势关于这一点 我说的也不够专业 并且我对百度超级链使用的时间比较短 研究的还不太深入 所以我只能说下 目前的想法 就当作抛砖引玉吧
先说下使用场景吧 然后针对使用场景里面的问题具体阐述下
先来类比下比特币
首先比特币在公网有一条root链,全世界的交易都发生在该链上,自己在本地启动一个比特币的客户端,都会先同步下root链上的交易,然后自己发起的交易,也会上到root链上,然后在同步给其他的交易端
然后在看下搭建百度链的过程
A公司在自己的服务器上搭建了4个节点,节点环境搭建好之后,咦?怎么在一直不断的在出块?我自己的服务器内网里面还没有交易上链,怎么一直不断的在出块呢?不是应该同步下公网联盟链上的节点数据嘛?然后才意识到百度超级链是定时出块的,每个3秒就会出现一个块,无论有没有交易,都会出块
由此咱分析下有哪些劣势
劣势:
1、仅仅是公司内部范围内使用的数据 并没有其他公司的数据 使用的范围比较小,即先搭建一个root链,然后在加入的节点才会同步root链上的数据,而不是想其他的区块链一样 比如比特币 公网上已经有一条包含全世界交易的root链了,然后自己启动一个客户端,会先同步所有的数据
2、无论有没有交易都在定时出块,那么就会累计到很高的高度,但在业务量比较少的情况下 就会产生大量的空交易的块
3、既然产生大量的空交易的块 那么通过区块高度差值来做区块确认是否合理有待商榷
因为一般的话 确认链有2种方式
a、通过当前区块后面追加的区块的数据 如果追加了6个区块 即当前区块和最新区块之间的高度差 如果超过6个 就认为当前区块确认上链了
b、通过时间戳 查询当前区块的交易时间戳和当前时间差 超过一定的数值也认为是确认上链了
4、一旦配置错误 需要修改配置的话 那么之前积累的数据都需要先清空 这一点也是任何公司都不能够容忍发生的事情 ,所以第一次配置需要很谨慎发布于 2020-07-13 15:11智能合约CONFIG区块链(Blockchain)赞同添加评论分享喜欢收藏申请转载文章被以下专栏收录平凡人笔记微信公众号:平凡人笔记 , 作者:
XuperChain开源:真正开源与完美落地的孪生体 - 知乎
XuperChain开源:真正开源与完美落地的孪生体 - 知乎首发于孟永辉切换模式写文章登录/注册XuperChain开源:真正开源与完美落地的孪生体孟永辉数字经济学者,行业观察家经历了早期的资本乱战、政策监管寒冬之后,区块链行业的发展开始进入到精耕细作的全新时代。工信部信息中心《2018年中国区块链产业发展白皮书》显示,我国以区块链业务为主营业务的区块链公司数量达456家。作为一种全新的技术类型,即使经历了市场的洗礼之后,区块链本身的魅力依然存在。伴随着区块链技术在各行各业应用的持续展开,人们的需求不断增多。区块链诞生于海外的现实让其核心技术通常掌握在国外公司手中,如何打造具有鲜明中国特色的区块链技术,使之更好地服务于国内用户的需求成为一个不可回避的话题。5月28日,中国国际大数据产业博览会(简称数博会)在贵州贵阳举办。大会现场,百度首次发布区块链品牌——Xuper,同时宣布自研底层区块链技术XuperChain正式开源。同样在本次数博会上,工业和信息化部信息化和软件服务业司副司长李冠宇就区块链发展发出重要政策信号。他表示,国家将推动建设区块链开源社区,探索创新发展的新路径。工信部将助力区块链技术创新和产业应用发展,促进区块链技术为实体经济赋能,为进一步驱动我国转型升级提供新动能。对于一直坚持“区块链核心技术自主研发和创新”的百度区块链实验室来讲,敢于在这样一个时刻将整合了包括自研底层技术XuperChain、司法解决方案XuperFair、知识产权解决方案XuperIPR、数据协同解决方案XuperData、边缘计算解决方案XuperEdge、开放平台XuperEngine在内的六大核心产品公开发布并开源,显示了百度区块链实验室响应国家号召,助力中国和中国的开发者弯道超车的决心。经历了国家权威机构的验证和行业实战检验后,百度区块链的底层技术愈加成熟,性能和安全都有了较高保障。此次将自研的底层区块链技术开放出来,体验了百度构建中国自己的区块链应用生态圈的决心。那么,区块链的开源有着怎样的意义呢?区块链技术开源的意义:增效、普惠、创新、超车开源始终都是区块链的本质特征。按照区块链的经典理论,存在一个必要的私链是非常必要的,然而,很多人并不将私链看成是区块链,造成这种现象的主要原因在于开放并不存在。从这个逻辑来看,区块链必然也必须开放才能真正满足开发者各类业务场景需求,让区块链应用搭建更灵活、更安全、更高效,全面赋能区块链开发者。探讨区块链开源的意义,我们才能对百度区块链技术XuperChain的正式开源有更加深入的理解,并且真正找到XuperChain对于整个区块链行业的巨大意义。总体来讲,区块链技术开源的意义主要包括:增效、普惠、创新、超车四个方面的意义。增效。深度了解区块链技术的开源,我们会发现真正促使开源的主要因素还是效率。我们都知道所谓的开源就是要建构一个共享开放的社区,并且将相关各方全部都聚拢到社区当中。在社区当中,成员之间由于有着诸多共同利益,最终让他们可以快速获得社区里合作伙伴的认同,快速聚拢到不同的力量朝着共同方向努力,从而让优秀项目更快地实现。从这个逻辑来看,区块链技术开源的最大意义就是在于能够聚拢更多有着共同目标的人去做同样一件事情,通过这些人的通力合作去解决那些以往封闭条件下需要耗费更多人力才能解决的痛点和难题,从而真正把项目效率提升到一个全新水平。此外,开源在一定程度上将原本行业当中的“权力”进一步下放,从而将原本需要诸多流程才能完成的环节,现在只需要在开源平台上实现共享便可以轻松实现。普惠。其实,区块链技术的开放就是一个将底层技术进行开放并惠及更多人的过程。每一个加入到开源社区的参与者们都将自身的技术共享,最终让开源社区变成了一个信息、技术共享的平台。借助不断增加的开发出来的代码,原本只能满足某个或者某些领域的区块链技术得到了最大程度上的释放,从而让更多人享受到了实惠。对于正在不同行业落地的区块链技术来讲,借助开源的方式,我们可以将区块链技术在不同行业上应用的先进经验得到释放,从而为其他领域提供借鉴,最终让区块链技术更多地惠及到更多的开发者、更多的行业。创新。去中心化是区块链的本质所在。以开源的方式将区块链去中间化的特质得到最大程度的发挥,造成这种现象的主要原因是因为通过开源让社区变得更加多元。不同的开发者加入到开源社区当中,通过不断迭代和更新区块链的底层代码,原本看似毫无联系的代码之间可能会发生“化学反应”,从而引发创新。对于原本仅仅只是应用于某个行业的区块链代码来讲,如果我们可以将其加入到开源社区当中,不仅能够解决同行业里不同开发者面临的问题,同样可以解决不同行业面临的问题,最终完成一次完美的创新。此外,随着开源社区的逐渐成熟,特别是不同的开发者不断强化在开源方面的投入,从而触发新的创新,同样可以降低其他开发者的成本。超车。对于中国的区块链的从业者来讲,我们始终都要面对国外区块链从业者的技术封锁。造成这种现象的主要原因除了与区块链技术诞生于国外有关之外,更多地是意识形态上的壁垒。对于中国的区块链开发者来讲,通过区块链技术开源,可以将区块链的技术创新、区块链与产业融合上的优秀经验进一步放大,缩短与国外区块链之间的差距。从这个角度来看,区块链技术的开源可以让中国的区块链行业以及中国的区块链开发者实现弯道超车,从而真正将区块链发展成为继互联网之后的另外一个引领全新发展的新机会。对于中国的区块链技术开发者来讲,或许,区块链开源的更大意义还呈现在超车上。多方角力,区块链技术开源哪家强?开源始终伴随区块链始终,因此,它是各个区块链玩家角逐的主要领域。从比特币时代开始,不同的区块链技术的玩家们便开始了在开源上的角力。无论是比特币、以太坊,还是EOS、Fabric以及百度XuperChain,我们都可以看出了他们在开源上的不断进化与角力。早期的区块链开源社区其实就是比特币。比特币区块链的核心技术框架采用脚本开发,共识算法采用POW算法,通过工作量(挖矿)证明获得记账权,容错率为50%,实现全网记账。其缺点也较明显,包括公网性能较低、耗费算力、难以在此之上构建应用等。比特币的继任者是以太坊。以太坊区块链的核心技术框架采用的是Solidity实现协议,共识算法采用POW、POS算法。通过灵活多变的智能合约,以太坊可以满足多样化用户的需求。然而,以太坊社区对于算力的要求极高,商用难度很大。EOS项目的基本功能是通过系统合约提供的,用户可以调用已经部署上链的智能合约实现特定的功能,也可以通过C++语言自行编辑.cpp智能合约,并通过系统提供的eosiocpp编译器将.cpp、.hpp文件编译成.wasm和.abi文件部署上链。尽管EOS的性能得到了提升,但是,性能表现依然有很大的提升空间。Fabric区块链是IBM等公司为了破解以太坊无法大规模商用的痛点和难题打造的HyperLedger开源社区的核心技术。Fabric区块链的部署方式可传统可docker化,共识算法实现插件化,支持用Go和JavaScript等开发智能合约,尤以企业级的安全机制和CA机制为特色。虽然Fabric区块链解决了以太坊的诸多痛点和难题,但是,在性能表现上依然不佳是困扰Fabric区块链的最大难题所在。对于XuperChain来讲,它具备其他区块链技术所没有的特点和独特优势。第一,提供多组件、可实现定制化开发。智能合约、共识机制等能力被拆解成单个模块,开发者根据场景应用需求进行灵活调用,让区块链应用搭建更加高效。第二,支持全球部署,可在高效的广域网数据交换。第三,性能行业领先,采用独创的链内并行技术,实现单链6.5万TPS,整体网络20万TPS。第四,提供了多私钥保护的账户体系,且账户系统是内置在账本,实现了去中心化的权限校验,权限模型支持权重累计、集合运算等灵活的策略。除此之外,百度自建区块链社区,提供完善、周全的开发者服务,保证开发者快速、便捷搭建应用。通过对比,我们不难看出,XuperChain无论在核心功能上,还是在总体性能上都取得了巨大领先。可以预见,XuperChain开源必将会把国内区块链技术的发展带入到一个全新阶段。那么,当XuperChain正式开源之后,它将会给中国的区块链市场带来怎么样的改变呢?XuperChain开源:一次真正开源与应用落地的完美结合此次百度XuperChain开源是基于百度区块链实验室多年以来致力于区块链核心技术自主研发和创新的直接体现。通过此次开源,我们不仅看到了百度区块链本身在技术上的诸多优势,同样看到了百度区块链在落地到行业上的诸多积累。可以说,XuperChain开源是一次真正意义上的开源与真正意义上的应用落地的完美结合。与现有开源技术相比,百度XuperChain是行业内真正的区块链底层技术开源。具体主要表现在如下几个方面:第一,不仅是底层技术代码的公开展示,开发者可基于对代码进行编译和运转。百度资深工程师在线实时响应,辅助开发者自主搭建和运维应用;第二,并非通过fabric等国外开源技术改造,而是基于全新的自研架构,是对拥有知识产权的核心技术“真开源”;第三,XuperChain的开源不是一劳永逸的,而是动态进步的。未来将会根据百度区块链的研发进展和行业实践,进行持续优化和迭代。同国外的开源技术相比,百度XuperChain更适合中国开发者彰显了其浓浓的爱国情怀。国外的开源技术在快速响应、本土化商业场景等方面难免水土不服。特别是在安全性上,中国企业甚至政府的隐私数据在国外开源技术上流动面临着不可控的风险。在当前复杂多变的国际环境下,特别是面临美国的技术封锁,科技企业必须将核心技术牢牢掌握在自己手中,才不会在关键领域受制于人。XuperChain致力于打造适合中国开发者的开源技术,将自研底层技术开源出来,更好地为本土区块链创业者和开发者提供基础设施,促进区块链在中国各行各业的应用,显示了百度区块链在关键技术领域浓浓的爱国情怀。第三,百度XuperChain更加贴近应用,多种行业解决方案已经落地。XuperChain从一开始便开始贴近行业,通过将区块链技术应用到不同行业当中来寻找区块链与产业的融合之道。目前,基于XuperChain搭建了司法、版权、数据协同、边缘计算等多套行业解决方案,并与国家工业信息安全发展研究中心、北京互联网法院、北京大学等数十家权威机构合作。以XuperFair司法解决方案为例,基于法院、公证处、司法鉴定中心等为节点构建了区块链法院联盟体系,实现数据从生成、存储、传输到最终提交的整个环节真实可信,并具有法律效力。目前已经实现与北京互联网法院、广州互联网法院合作。除了XuperFair之外,XuperIPR从版权确权,交易、维权三端切入,为各类数字内容(包含但不限于图片,音视频)提供版权存证,版权交易、侵权监测、取证,维权,司法服务全链路版权保护解决方案,实现创作即确权、使用即授权、发现即维权的愿景。XuperData基于区块链、大数据和可信计算的融合解决方案,用于处理多企业之间数据流通问题,实现数据可信不可见。XuperEdge基于区块链的边缘计算解决方案,通过区块链技术能力,将闲散的边缘计算资源整合为弹性更好的算力、带宽、存储资源。XuperEngin为开发者提供一键部署网络、创建链、网络监控、智能合约的基础技术服务平台,开放平台拥有联盟链、公有链等多种技术解决方案以及各针对不同行业的区块链解决方案。未来,随着XuperChain开源的逐步开展,它将更好地建设开发者社区、举办开发者沙龙等线下活动,给开发者提供技术和应用搭建指导,并为开发者、企业等各角色赋能,推动区块链深入落地到各行各业,构建中国区块链应用生态圈,引领民族自主创新,助推建设信用社会。结论XuperChain开源在我们展示着百度区块链技术强大的技术实力以及精耕中国市场的巨大努力之外,同样让我们看到了它在开源上具备的与生俱来的落地应用优势。可以预见的是,随着未来XuperChain开源的不断展开,我们将会看到更多的百度区块链核心技术和行业解决方案,从而构建起中国人自己的区块链应用生态圈。发布于 2019-06-03 11:17区块链(Blockchain)赞同添加评论分享喜欢收藏申请转载文章被以下专栏收录孟永辉孟永辉,资深撰
百度开源超级链XuperChain:过去这一年,百度在区块链领域做了些什么?_开源_Tina_InfoQ精选文章
百度开源超级链XuperChain:过去这一年,百度在区块链领域做了些什么?_开源_Tina_InfoQ精选文章
新手入门 | 上链第一步!如何完成XuperChain环境、服务部署 - 知乎
新手入门 | 上链第一步!如何完成XuperChain环境、服务部署 - 知乎切换模式写文章登录/注册新手入门 | 上链第一步!如何完成XuperChain环境、服务部署百度超级链XUPER本文面向零区块链基础入门XuperChain的开发者,介绍了如何部署XuperChain基础可用环境以及XuperChain服务部署基本操作和配置,帮助开发者们快速了解XuperChain部署流程和基本功能,完成上链第一步。本文主要分为两大模块:XuperChain环境部署和Xuperchain服务部署。 XuperChain环境部署第一步 准备环境XuperChain主要由Golang语言开发,首先需要准备编译运行的环境:(1)根据您使用的电脑操作系统,安装go语言编译环境 (推荐使用的版本为1.14或1.15):https://go.dev/dl/(2)安装Git,帮助有效、高速地完成项目版本管理:https://git-scm.com/download第二步 编译XuperChain(1) 完成XuperChain编译运行环境后,使用Git将XuperChain源代码下载到本地:https://github.com/xuperchain/xuperchain(2)完成源代码下载后,在XuperChain目录下执行以下命令:$ cd xuperchain
$ git checkout v5.1.0
$ make执行命令后,在output目录可以得到bin、conf、data 三个文件夹以及一个 control.sh 脚本,各目录的功能如下表:经过以上的操作就已经完成对XuperChain编译环境的基本部署。 Xuperchain服务部署完成XuperChain基本环境部署后,接下来将对XuperChain服务进行部署,此部分内容将以XuperChain单节点single共识的链为例操作,教大家如何快速启动一条链,并在链上使用一些基本功能。启动单节点 single 共识的链XuperChain的最新版本为启动服务提供了方便的脚本,只需要在output下执行一条命令【control.sh】即可启动单节点 single 共识的链。# 启动xuper链
$ bash control.sh start
/home/ubuntu/go/src/github.com/xuperchain/output/bin/xchain
/home/ubuntu/go/src/github.com/xuperchain/output/conf/env.yaml
2021/08/10 19:26:57 start create chain.bc_name:xuper genesis_conf:./data/genesis/xuper.json env_conf:./conf/env.yaml
2021/08/10 19:26:57 create ledger succ.bc_name:xuper start xchain. cmd:nohup /home/ubuntu/go/src/github.com/xuperchain/output/bin/xchain startup --conf /home/ubuntu/go/src/github.com/xuperchain/output/conf/env.yaml >/home/ubuntu/go/src/github.com/xuperchain/output/logs/nohup.out 2>&1 &
.start proc succ.
start finish.pid:17242
Done!【control.sh】脚本提供了 start、stop、restart、forcestop 四个命令,可以通过执行【bash control.sh help】命令查看。按照默认配置,Xuperchain服务会监听37101端口,可以使用如下命令查看Xuperchain服务的运行状态:# check服务运行状况
$ bin/xchain-cli status -H 127.0.0.1:37101
{
"blockchains": [
{
"name": "xuper",
"ledger": {
"rootBlockid": "d93c260ea5639a55e1fcad3df494495efad5c65d46e846b6db3a9194a4212886",
"tipBlockid": "9555ca5af579db67734f27013dfaae48d93e4c3e8adcf6ca8f3dc1adb06d0b6f",
"trunkHeight": 137
},
....
"9555ca5af579db67734f27013dfaae48d93e4c3e8adcf6ca8f3dc1adb06d0b6f"
]
}
],
"peers": null,
"speeds": {}
}XuperChain基本功能使用第一步 创建账号在XuperChain中,账号类型分为“普通账号”和“合约账号”。普通账号由程序离线生成,在本地保存;合约账号是XuperChain中用于智能合约管理的单元,由普通账户发起交易,在链上生成的一个16位数字的账户,存储在链上。发起合约相关交易,比如合约调用时,需要使用合约账户。创建账号的操作如下:# 创建普通用户, 生成的地址,公钥,私钥在--output 指定位置
$ bin/xchain-cli account newkeys --output data/bob
create account using crypto type default
create account in data/bob
## 创建合约账号
bin/xchain-cli account new --account 1111111111111111 --fee 2000账号创建完成后会在data/bob目录下会看到文件address,publickey,privatekey生成,这就是本次创建账号的地址、公钥和私钥,在下面的操作中将会用到。第二步 查询资源余额以普通账号为例,使用如下命令查询账号资源余额,其中-H参数为Xuperchain服务的地址。# 根据账户存储的路径,查询该账户的余额。--keys为要查询的账户的地址
$ bin/xchain-cli account balance --keys data/keys
100000000000338000000
# 根据地址查询该账户余额
$ bin/xchain-cli account balance TeyyPLpp9L7QAcxHangtcHTu7HUZ6iydY
100000000000401000000第三步 转账转账操作需要提供源账号的私钥目录,也就类似“创建新账号”中生成的目录,这里注意到并不需要提供目标账号的任何密钥,只需要提供地址即可。命令执行的返回是转账操作的交易id(txid)。# --keys 从此地址 转给 --to地址 --amount 金额
$ bin/xchain-cli transfer --to czojZcZ6cHSiDVJ4jFoZMB1PjKnfUiuFQ --amount 10 --keys data/keys/ -H 127.0.0.1:37101
24d53ea6e61ede8dc4fe65a04fd30da17c079a359e700738f8795dfddc55ffb4第四步 查询账号交易信息通过以下命令可以查询交易的信息,包括交易状态、交易的目标账号、交易的金额、所在的区块(如果已上链)等内容。# 可查询上一步生成的txid的交易信息
$ bin/xchain-cli tx query 24d53ea6e61ede8dc4fe65a04fd30da17c079a359e700738f8795dfddc55ffb4 -H 127.0.0.1:37101
{
"txid": "24d53ea6e61ede8dc4fe65a04fd30da17c079a359e700738f8795dfddc55ffb4",
"blockid": "e83eae0750d0f48cc2b45f25d853fb587d124552851bf6693757e0715837b377",
"txInputs": [
{
"refTxid": "2650aa0c0e8088def98093a327b475fa7577fa8e266c5775435f7c022fe0f463",
"refOffset": 0,
"fromAddr": "TeyyPLpp9L7QAcxHangtcHTu7HUZ6iydY",
"amount": "1000000"
}
],
......
"authRequireSigns": [
{
"publickey": "{\"Curvname\":\"P-256\",\"X\":36505150171354363400464126431978257855318414556425194490762274938603757905292,\"Y\":79656876957602994269528255245092635964473154458596947290316223079846501380076}",
"sign": "30460221009509e35b1341284b5d1f22b48c862ecfe2856056196c5650bc203b8a4ed0d454022100f8d286c63ad8eb3bc605bc08da4ff417aaff3c0433a31039f608bb47a90b1267"
}
],
"receivedTimestamp": 1628596303271475925,
"modifyBlock": {
"marked": false,
"effectiveHeight": 0,
"effectiveTxid": ""
}
}第五步 查询block信息通过block id可以查询区块的相关信息,包括区块内打包的交易、所在链的高度、前驱/后继区块的id等内容。# 可查询上一步交易所在的block id信息
$ bin/xchain-cli block e83eae0750d0f48cc2b45f25d853fb587d124552851bf6693757e0715837b377 -H 127.0.0.1:37101
{
"version": 1,
"blockid": "e83eae0750d0f48cc2b45f25d853fb587d124552851bf6693757e0715837b377",
"preHash": "41c74e22ccea7dcf1db6ba0d7e1eefd6cfbd7bac7659c3d8cd33d2a009201003",
"proposer": "TeyyPLpp9L7QAcxHangtcHTu7HUZ6iydY",
"sign": "3044021f349da2d5c238175a6e7df23262eeb122014f0a0040fc4ce109a3ab2c22b2700221009d92198061193fcd47e25c8f5c2b54e1ea2ffb4aaab675384c4d6408ab2b63de",
"pubkey": "{\"Curvname\":\"P-256\",\"X\":36505150171354363400464126431978257855318414556425194490762274938603757905292,\"Y\":79656876957602994269528255245092635964473154458596947290316223079846501380076}",
"merkleRoot": "d22d2423a93911e42f96370167d878f6780fea44fac6a13771c7532e1969c949",
"height": 492,
......
"txCount": 2,
"merkleTree": [
"4a7e42654cf79d6525f6b6d55673b57a92048ee96de950e962db99b102e048a4",
"24d53ea6e61ede8dc4fe65a04fd30da17c079a359e700738f8795dfddc55ffb4",
"d22d2423a93911e42f96370167d878f6780fea44fac6a13771c7532e1969c949"
],
"inTrunk": true,
"nextHash": "a541ed97789537166bec5778aad7ba0f68e52a04d1073b244ee1ea6cd38d8f63",
"failedTxs": null,
"curTerm": 0,
"curBlockNum": 0,
"justify": {}
}到这里,你已经完成了XuperChain编译运行的环境部署,构建了第一条链并完成了建链后的一些基本操作!如果你对以上操作有任何疑问的,欢迎添加百度超级链小助手,进入技术交流群跟我们一同探讨!发布于 2022-01-05 12:01区块链(Blockchain)赞同添加评论分享喜欢收藏申请
Xuper-SDK介绍 - 超级链BaaS平台 | 百度智能云文档
r-SDK介绍 - 超级链BaaS平台 | 百度智能云文档百度智能云
最新活动产品解决方案企业服务云市场合作与生态开发者服务与支持了解智能云
备案文档管理控制台
This app works best with JavaScript enabled.文档中心推荐文档云服务器千帆大模型平台文字识别人脸识别实名认证介绍备案介绍财务功能概述搜索本产品文档关键词Xuper-SDK介绍 超级链BaaS平台功能发布记录产品描述介绍核心概念特性应用场景定价与购买产品定价选购指南操作指南XuperChainXuperChain试用网络Fabric联盟链组织管理联盟管理联盟介绍创建联盟加入联盟节点管理节点监控区块链浏览器通道管理链码管理上传链码编辑链码操作链码事件中心联盟事件通道事件SDK应用证书管理quorum联盟链组织管理联盟管理节点管理合约管理账号管理事件中心兼容性说明JSON-RPC防火墙以太坊概念介绍购买创建JSON-RPC防火墙可信跨链平台跨链服务特性介绍跨链服务控制台跨链应用多用户访问控制典型实践浦发银行区块链催收开发者指南以太坊Dapp开发指南Dapp架构及概要设计智能合约开发及部署Dapp应用层开发Dapp部署Fabric-Dapp开发指南Dapp架构及概要设计链码开发及部署Dapp应用层开发Dapp部署视频指南操作指导API参考简介概述接口使用规范服务域名公共请求头公共响应头错误码网络创建相关接口Quorum相关接口联盟相关接口获取Quorum联盟列表获取Quorum联盟详情获取Quorum联盟节点退出Quorum联盟组织相关接口创建组织获取组织列表获取组织详情删除组织事件相关接口发起加入联盟邀请获取申请列表获取审批列表获取审批流通过/驳回审批钱包账户相关接口创建新账户获取钱包账户列表查询账户私钥下载账户keystore删除账户合约管理相关接口获取合约列表获取合约详情销毁合约合约网关相关接口接口说明调用合约方法接口交易结果查询接口Event日志检索接口Event监听注册接口Event监听查询接口Event监听注销接口Ethereum相关接口获取以太坊网络部署列表查询以太坊网络删除以太坊网络查询账户列表创建新账户查询账户私钥下载keystore删除账户查询合约列表获取合约详情销毁合约合约网关相关接口接口说明交易结果查询接口调用合约方法接口Event日志检索接口Event监听注销接口Event监听注册接口Event监听查询接口fabric联盟链相关接口组织管理创建组织查询组织详细信息查询组织列表删除组织联盟管理邀请加入联盟查询某联盟通道列表查询某联盟详细信息查询某联盟组织列表查看联盟列表退出联盟删除联盟通道管理申请创建通道创建通道申请加入通道加入通道修改通道描述查询通道详情查询通道出块配置修改通道出块配置申请、审批和通知管理通过审批查看通知列表查看审批列表查询审批流更新通知状态驳回审批查询申请列表链码管理链码安装链码实例化链码升级查询Chaincode详情查询channel下chaincode列表节点管理节点列表查询节点资源列表cpu和内存时序图证书管理查询证书列表申请证书下载证书超级链相关接口删除超级链网络获取超级链网络全量信息获取超级链部署列表查询预定义超级节点账户获取代币总量附录公共部分以太坊相关创建接口相关Quorum联盟相关Fabric联盟相关功能更新记录Xuper-SDK介绍常见问题服务等级协议SLA所有文档没有找到结果,请重新输入 超级链BaaS平台功能发布记录产品描述介绍核心概念特性应用场景定价与购买产品定价选购指南操作指南XuperChainXuperChain试用网络Fabric联盟链组织管理联盟管理联盟介绍创建联盟加入联盟节点管理节点监控区块链浏览器通道管理链码管理上传链码编辑链码操作链码事件中心联盟事件通道事件SDK应用证书管理quorum联盟链组织管理联盟管理节点管理合约管理账号管理事件中心兼容性说明JSON-RPC防火墙以太坊概念介绍购买创建JSON-RPC防火墙可信跨链平台跨链服务特性介绍跨链服务控制台跨链应用多用户访问控制典型实践浦发银行区块链催收开发者指南以太坊Dapp开发指南Dapp架构及概要设计智能合约开发及部署Dapp应用层开发Dapp部署Fabric-Dapp开发指南Dapp架构及概要设计链码开发及部署Dapp应用层开发Dapp部署视频指南操作指导API参考简介概述接口使用规范服务域名公共请求头公共响应头错误码网络创建相关接口Quorum相关接口联盟相关接口获取Quorum联盟列表获取Quorum联盟详情获取Quorum联盟节点退出Quorum联盟组织相关接口创建组织获取组织列表获取组织详情删除组织事件相关接口发起加入联盟邀请获取申请列表获取审批列表获取审批流通过/驳回审批钱包账户相关接口创建新账户获取钱包账户列表查询账户私钥下载账户keystore删除账户合约管理相关接口获取合约列表获取合约详情销毁合约合约网关相关接口接口说明调用合约方法接口交易结果查询接口Event日志检索接口Event监听注册接口Event监听查询接口Event监听注销接口Ethereum相关接口获取以太坊网络部署列表查询以太坊网络删除以太坊网络查询账户列表创建新账户查询账户私钥下载keystore删除账户查询合约列表获取合约详情销毁合约合约网关相关接口接口说明交易结果查询接口调用合约方法接口Event日志检索接口Event监听注销接口Event监听注册接口Event监听查询接口fabric联盟链相关接口组织管理创建组织查询组织详细信息查询组织列表删除组织联盟管理邀请加入联盟查询某联盟通道列表查询某联盟详细信息查询某联盟组织列表查看联盟列表退出联盟删除联盟通道管理申请创建通道创建通道申请加入通道加入通道修改通道描述查询通道详情查询通道出块配置修改通道出块配置申请、审批和通知管理通过审批查看通知列表查看审批列表查询审批流更新通知状态驳回审批查询申请列表链码管理链码安装链码实例化链码升级查询Chaincode详情查询channel下chaincode列表节点管理节点列表查询节点资源列表cpu和内存时序图证书管理查询证书列表申请证书下载证书超级链相关接口删除超级链网络获取超级链网络全量信息获取超级链部署列表查询预定义超级节点账户获取代币总量附录公共部分以太坊相关创建接口相关Quorum联盟相关Fabric联盟相关功能更新记录Xuper-SDK介绍常见问题服务等级协议SLA文档中心 超级链BaaS平台API参考Xuper-SDK介绍Xuper-SDK介绍更新时间:2023-09-14为方便GO开发者调试和快速接入百度超级链,提供了一套使用百度超级链的强有力工具Xuper-SDK。Xuper-SDK简单易用,这里向您提供Xuper-SDK调试文档,并通过简单的示例帮助您快速熟悉Xuper-SDK的使用方法,并构建自己的应用。
您可以通过点击「查看SDK操作说明」,可通过SDK进行试用。上一篇功能更新记录下一篇常见问题文档反馈
关于智能云百度智能云2.0云智技术论坛行业白皮书智能云公告最新资讯客户案例服务案例方案手册产品手册热门产品云服务器对象存储数据可视化文字识别语音识别图像识别域名服务BML全功能AI开发平台曦灵·数字人直播平台内容分发网络CDN负载均衡智能解决方案智慧城市智能制造智慧能源智慧水务智慧金融智慧媒体智慧电信智慧教育企业上云快速入口控制台备案帮助产品促销企业服务云市场合作伙伴中心支持计划专家服务帮助文档售前服务咨询支持热线(4008-777-818)技术工单建议反馈违规举报关于百度智能云云智一体2.0AI体验中心最新资讯产品动态市场活动客户案例行业解读公告通知联系我们服务与支持文档中心入门指南视频中心培训与认证企业支持计划专家服务重大保障服务自助服务智能助手账户管理管理控制台实名认证域名管理备案管理个人中心财务与订单发票申请消息中心我的工单快速入口成为合作伙伴云市场最新活动企业服务开发者社区SDK中心API平台开发者沙龙飞桨大赛实用工具短网址域名信息查询SSL证书文字识别语音识别图片识别卡证识别文档翻译图片翻译售前咨询热线4008-777-818转1售前在线咨询售后智能助手技术工单违规举报头部7*24小时服务企业支持计划电子化备案建议反馈热门推荐云服务器云磁盘商标注册文字识别弹性公网IP海外CDN数据传输服务内容分发网络人脸与人体识别弹性裸金属服务器SSL证书域名服务容器引擎专线接入音视频直播智能推荐引擎GPU云服务器Elasticsearch云数据库HBase爱速搭低代码平台智能边缘私有网络应用引擎文件存储智能云解析MapReduce简单消息服务轻量应用服务器智能视联网平台云数据库GaiaDB-X日志服务消息服务负载均衡对象存储云虚拟主机数据仓库Palo容器镜像服务云数据库DocDB超级链BaaS平台云原生微服务应用平台解决方案智慧城市智慧金融智能制造智慧能源智慧媒体智慧水务智能图云企业上云区块链物联网热门搜索数字人云手机直播平台数据分析边缘计算域名解析数据可视化自然语言处理数据采集虚拟主机快速链接百度搜索百度大脑百度VR百度AI市场百度统计百度指数百度云加速百度阿波罗百度地图慧眼百度翻译开放平台百度营销百度如流百度安全百度短网址百度有驾百度联盟百度超级链百度数据众包百度网盘企业版百度搜索资源平台
1.2. JS SDK 使用说明 — XuperChain 官方文档 文档
1.2. JS SDK 使用说明 — XuperChain 官方文档 文档
XuperChain 官方文档 5.3
XUPERCHAIN介绍
1. 整体介绍
2. 基本概念
快速入门
1. 环境部署
2. 基本操作
进阶使用
1. 网络部署
2. 合约管理
3. 权限管理
4. 共识使用
5. 链上治理
6. 联盟链配置
7. 压测工具
8. 监控说明
9. 高级功能
开放网络
1. 开放网络介绍
2. Go SDK 接入指南
3. Java SDK 接入指南
4. Js SDK 接入指南
开发手册
1. 多语言SDK介绍
1.1. Go SDK 使用说明
1.2. JS SDK 使用说明
1.2.1. 下载
1.2.2. 安装
1.2.3. 使用 SDK
1.2.4. 账户
1.2.5. 合约
1.2.5.1. 合约账户
1.2.5.2. 部署合约
1.2.5.3. 调用合约
1.2.5.4. 查询合约
1.2.5.5. 转账
1.2.5.6. 查询链上信息
1.2.5.7. 背书服务插件
1.3. Java SDK 使用说明
1.4. Python SDK 使用说明
1.5. XuperChain RPC 接口使用说明
1.6. XuperChain http 接口使用说明
2. DAPP开发手册
应用案例
1. 标杆应用
设计原理
1. 整体流程
2. 智能合约
3. 密码学基础
4. p2p网络
5. 共识算法
6. 账本状态机
7. 权限管理
8. 监管机制
9. 其他
贡献指南
代码提交指南
更多资料
1. 源码解读
2. 配置文件
3. 视频教程
XuperChain 官方文档
首页
1.2. JS SDK 使用说明
编辑此页
1.2. JS SDK 使用说明¶
1.2.1. 下载¶
JS SDK 代码可在github上下载:JS SDK,可以查看详细的 接口文档
1.2.2. 安装¶
npm install –save @xuperchain/xuper-sdk
1.2.3. 使用 SDK¶
接下来你可以使用 JS SDK 进行合约的部署以及合约的调用等操作。首先你需要使用 SDK 与节点创建一个 client。
1
2
3
4
5
6
7
8import XuperSDK from '@xuperchain/xuper-sdk';
const node = '127.0.0.1:37101'; // node
// const node = '39.156.69.83:37100' // 开放网络地址 grpc
const chain = 'xuper'; // chain
const xsdk = XuperSDK.getInstance({
node,
chain
});
默认 JS sdk 会与节点之间使用 gRPC,你可以选择使用 http 方式:
1
2
3
4
5
6
7
8
9const xsdk = XuperSDK.getInstance({
const node = '127.0.0.1:37101'; // node
const chain = 'xuper'; // chain
env: {
node: {
disableGRPC: true // disable gRPC
}
}
});
1.2.4. 账户¶
你可以使用 SDK 创建一个账户,同时记录下对应的助记词,或者保存好私钥文件:
1
2
3const acc = xsdk.create();
console.log(acc.mnemonic);
console.log(acc.address);
默认创建的助记词长度为12,并且为中文,你可以修改参数来指定其他长度或者英文:
1
2
3const acc = xsdk.create(Language.English, Strength.Middle);
console.log(acc.mnemonic);
console.log(acc.address);
创建账户之后你同样可以通过助记词来恢复账户,恢复账户时助记词难度级别、语言需要和创建时保持一直:
1
2
3const acc = xsdk.retrieve('fork remind carry tennis flavor draw island decrease salute hamster cool parrot circle twist width humor genre mammal', Language.English);
console.log(acc.mnemonic);
console.log(acc.address);
如果你的账户私钥是从开放网络下载的,那么会有对应的密码,你可以将私钥文件内容读取出来,然后用密码加载账户:
1
2// 其中最后一个参数 true 代表缓存起来,之后 sdk 发送交易默认使用本次 import 的账户。
const acc = xsdk.import("你的密码", "你的私钥文件内容", true);
除此之外,SDK 还支持导出账户、检查地址和助记词以等,更多功能可以参考 接口文档
1.2.5. 合约¶
有了账户之后,便可以向链上发送交易(前提是账户有足够的余额),接下来便可以进行部署、调用合约的完整流程。
1.2.5.1. 合约账户¶
部署合约之前,首先需要创建一个合约账户(形如:XC8888888888888888@xuper),同时转账给合约账户:
1
2
3
4
5
6
7
8
9
10
11var num = new Number(8888888888888888);
const demo = await xsdk.createContractAccount(num);
await xsdk.postTransaction(demo.transaction);
// 转账给合约账户
const tx = await xsdk.transfer({
to: 'XC8888888888888888@xuper',
amount: '1000000000',
fee: '1000'
});
await xsdk.postTransaction(tx);
1.2.5.2. 部署合约¶
有了合约账户后便可以部署合约,合约的编写、编译等这里不再赘述。你可以使用 SDK 来部署你的合约:
1
2
3
4
5
6
7
8
9
10
11
12
13
14// evm 合约的 abi 以及 bin。这里只是示例,你可以编写自己的合约,然后编译出 abi 和 bin。
const abi = "[{"inputs":[],"payable":false,"stateMutability":"nonpayable","type":"constructor"},{"constant":true,"inputs":[{"internalType":"string","name":"key","type":"string"}],"name":"get","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"getOwner","outputs":[{"internalType":"address","name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"internalType":"string","name":"key","type":"string"}],"name":"increase","outputs":[],"payable":true,"stateMutability":"payable","type":"function"},{"constant":false,"inputs":[{"internalType":"string","name":"a","type":"string"},{"internalType":"string","name":"b","type":"string"}],"name":"join","outputs":[{"internalType":"string","name":"c","type":"string"},{"internalType":"string","name":"d","type":"string"}],"payable":false,"stateMutability":"nonpayable","type":"function"}]";
const bin = "608060405234801561001057600080fd5b50336000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506106ef806100606000396000f3fe60806040526004361061003f5760003560e01c806329803b2114610044578063693ec85e14610288578063893d20e814610364578063ae896c87146103bb575b600080fd5b34801561005057600080fd5b506101a16004803603604081101561006757600080fd5b810190808035906020019064010000000081111561008457600080fd5b82018360208201111561009657600080fd5b803590602001918460018302840111640100000000831117156100b857600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f8201169050808301925050505050505091929192908035906020019064010000000081111561011b57600080fd5b82018360208201111561012d57600080fd5b8035906020019184600183028401116401000000008311171561014f57600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f820116905080830192505050505050509192919290505050610476565b604051808060200180602001838103835285818151815260200191508051906020019080838360005b838110156101e55780820151818401526020810190506101ca565b50505050905090810190601f1680156102125780820380516001836020036101000a031916815260200191505b50838103825284818151815260200191508051906020019080838360005b8381101561024b578082015181840152602081019050610230565b50505050905090810190601f1680156102785780820380516001836020036101000a031916815260200191505b5094505050505060405180910390f35b34801561029457600080fd5b5061034e600480360360208110156102ab57600080fd5b81019080803590602001906401000000008111156102c857600080fd5b8201836020820111156102da57600080fd5b803590602001918460018302840111640100000000831117156102fc57600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f82011690508083019250505050505050919291929050505061049d565b6040518082815260200191505060405180910390f35b34801561037057600080fd5b50610379610510565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b610474600480360360208110156103d157600080fd5b81019080803590602001906401000000008111156103ee57600080fd5b82018360208201111561040057600080fd5b8035906020019184600183028401116401000000008311171561042257600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f820116905080830192505050505050509192919290505050610539565b005b606080836002908051906020019061048f929190610615565b508284915091509250929050565b60006001826040518082805190602001908083835b602083106104d557805182526020820191506020810190506020830392506104b2565b6001836020036101000a0380198251168184511680821785525050505050509050019150509081526020016040518091039020549050919050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b600180826040518082805190602001908083835b60208310610570578051825260208201915060208101905060208303925061054d565b6001836020036101000a038019825116818451168082178552505050505050905001915050908152602001604051809103902054016001826040518082805190602001908083835b602083106105db57805182526020820191506020810190506020830392506105b8565b6001836020036101000a03801982511681845116808217855250505050505090500191505090815260200160405180910390208190555050565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f1061065657805160ff1916838001178555610684565b82800160010185558215610684579182015b82811115610683578251825591602001919060010190610668565b5b5090506106919190610695565b5090565b6106b791905b808211156106b357600081600090555060010161069b565b5090565b9056fea265627a7a72315820cf953dc1839436e254d5a3c4c228d708600f054f50da1950ddc1960647386ef364736f6c63430005110032";
const demo = await xsdk.deploySolidityContract(
'XC8888888888888888@xuper', // 合约账户
'counter', // 合约名字
bin, // evm 合约 bin
abi, "evm" // evm 合约 abi
//{
// "creator": "bob" // 如果合约有初始化参数可以写在这里
//}
);
await xsdk.postTransaction(demo.transaction);
1.2.5.3. 调用合约¶
合约部署成功后,你可以调用这个合约,调用合约时需要指定合约名字、方法以及参数:
1
2
3
4
5
6
7
8
9
10
11// evm 合约的 abi 以及 bin。这里只是示例,你可以编写自己的合约,然后编译出 abi 和 bin。
const demo = await xsdk.invokeSolidityContarct(
"counter", // 合约名字
"increase", // 合约方法
"evm", // 合约模块,本合约为 evm 合约
{
"key": "hello" // 参数
}
//"100" // 调用合约同时转账给合约的金额,方法具有 payable 关键字才可使用
);
await xsdk.postTransaction(demo.transaction);
1.2.5.4. 查询合约¶
合约中同样有查询接口,你可以调用这些接口查询数据,同时不消耗手续费,执行合约后,只要不将 transaction 再 post 到链上即可:
1
2
3
4
5
6
7
8
9// 执行合约即可。
const demo = await xsdk.invokeSolidityContarct(
"counter", // 合约名字
"get", // 合约方法
"evm", // 合约模块,本合约为 evm 合约
{
"key": "hello" // 参数
}
);
1.2.5.5. 转账¶
除了合约相关操作,你还可以进行转账:
1
2
3
4
5
6const tx = await xsdk.transfer({
to: 'dpzuVdosQrF2kmzumhVeFQZa1aYcdgFpN',
amount: '100',
fee: '100'
});
await xsdk.postTransaction(tx);
转账后还可以查询某个地址的余额:
1
2
3
4
5
6
7// 查询自己的余额
const result = await xsdk.getBalance();
console.log(result);
// 查询指定地址的余额
const result = await xsdk.getBalance('dpzuVdosQrF2kmzumhVeFQZa1aYcdgFpN');
console.log(result);
1.2.5.6. 查询链上信息¶
SDK 还支持链上的查询接口,例如查询区块,查询交易,链上的状态等:
1
2
3
4
5
6
7
8// 查询链上状态
const status = await xsdk.checkStatus();
// 根据高度查询区块
const result = await xsdk.getBlockByHeight('8');
// 根据交易 ID 查询交易
const result = await xsdk.queryTransaction('242de4ae4b09d25e2103a29725fb2f865538669780e5759be61d17e2c2e4afec');
1.2.5.7. 背书服务插件¶
连接开放网络,必须使用背书服务插件:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38// 引入插件
import Endorsement from '@xuperchain/xuper-sdk/dist/plugins/endorsement';
// 背书服务配置 grpc
const params = {
server: "39.156.69.83:37100", // 服务地址 grpc
fee: "400", // 服务费
endorseServiceCheckAddr: "jknGxa6eyum1JrATWvSJKW3thJ9GKHA9n", // 背书签名地址
endorseServiceFeeAddr: "aB2hpHnTBDxko3UoP2BpBZRujwhdcAFoT" // 背书服务费地址
}
// 背书服务配置 测试网络
// const params = {
// server: "14.215.179.74:37101", // 服务地址
// fee: "100", // 服务费
// endorseServiceCheckAddr: "XDxkpQkfLwG6h56e896f3vBHhuN5g6M9u", // 背书签名地址
// endorseServiceFeeAddr: "cHvBK1TTB52GYtVxHK7HnW8N9RTqkN99R" // 背书服务费地址
// }
// 插件配置
const plugins = [
Endorsement({
transfer: params,
makeTransaction: params
})
];
// 使用插件
const xsdk = XuperSDK.getInstance({
node,
chain,
env:{
node:{
disableGRPC:true // 关闭grpc
}
},
plugins
});
上面为部署 EVM 合约、转账以及查询接口示例,wasm 以及 native 合约部署、升级、调用等其他接口接口请参考 接口文档
Next
Previous
© 版权所有 2021, xuper.
Built with Sphinx using a
theme
provided by Read the Docs.
Other Versions
v: master
Branches
master
v3.1
v3.10
v3.12
v3.2
v3.7
v3.8
v3.9
v5.1
v5.3
开发手册 - 2. 智能合约开发详解 - 《百度超级链 XuperChain v3.12 文档手册》 - 书栈网 · BookStack
开发手册 - 2. 智能合约开发详解 - 《百度超级链 XuperChain v3.12 文档手册》 - 书栈网 · BookStack
×
思维导图备注
关闭
百度超级链 XuperChain v3.12 文档手册
首页
白天
夜间
小程序
阅读
书签
我的书签
添加书签
移除书签
2. 智能合约开发详解
来源:百度
浏览 1141
扫码
分享
2021-06-08 00:18:01
2. 智能合约开发详解2.1. 简介2.2. 准备工作2.2.1. 环境要求2.2.2. 下载编译xuperchain2.2.3. 设置环境变量2.2.4. 启动xuperchain2.2.5. 创建合约账号2.2.6. 小结2.3. 快速体验2.3.1. 创建合约工程2.3.2. 编译合约2.3.3. 部署合约2.3.4. 调用合约2.3.5. 小结2.4. 合约编写详解2.4.1. Solidity合约2.4.1.1. 编译环境准备2.4.1.2. 合约样例2.4.1.3. 代码2.4.1.4. 合约编译2.4.1.5. 合约部署2.4.1.6. 合约调用2.4.2. C++合约2.4.2.1. 合约样例2.4.2.2. 代码解析2.4.3. Go合约2.4.3.1. 合约样例2.4.3.2. 合约编译2.4.3.3. 合约部署2.4.4. Java合约2.4.4.1. 编译环境准备2.4.4.2. 合约样例2.4.4.3. 合约编译2.4.4.4. 合约部署2.4.5. 小结2.5. 合约单测2.6. VSCode编辑器集成2.6.1. 配置编译和测试task2.6.2. 编译合约2.6.3. 跑合约单测2.6.4. 代码补全2.7. 开放网络集成环境2.7.1. 账户注册2.7.2. 创建合约账户2.7.3. 合约开发和部署2.7.4. 合约调用2.8. 结语2. 智能合约开发详解2.1. 简介百度超级链是一个支持多语言合约的区块链框架,有多种语言来供大家选择使用开发智能合约。目前超级链的智能合约可以使用solidity、c++、go以及 java语言来编写,solidity为EVM合约,c++和go 支持 wasm合约,go和java支持native合约。solidity合约应用最为广泛,完美兼容以太坊开源社区以及相关开发工具,c++合约合约性能会更好些,go合约在易用性上更好,java合约的开发者会更多些。大家可以根据需要选择自己喜欢的语言来编写智能合约,这篇文章会通过一步步的指引来帮助大家使用solidity、c++、go或者java来编写超级链的智能合约,在阅读完文章后,希望大家对如何编写,部署和测试超级链的智能合约有初步的认识。
或使用超级链XuperOS,支持合约可视化管理、在线上链。 点击了解
2.2. 准备工作2.2.1. 环境要求目前超级链节点主要运行在linux和mac上,windows不能运行超级链节点。
go >= 1.12.x && <= 1.13.x
g++ >= 4.8.2 或者 clang++ >= 3.3
Docker
2.2.2. 下载编译xuperchain智能合约只有部署到链上才能运行,因此我们首先要编译并启动xuperchain节点。
如果需要使用特定分支,使用git checkout来切换特定分支,如 **git checkout v3.7**$ cd $HOME$ git clone https://github.com/xuperchain/xuperchain.git xuperchain$ cd xuperchain && make2.2.3. 设置环境变量这些环境变量有助于我们更方便的执行一些命令而不用指定命令的全路径。
export PATH=$HOME/xuperchain/output:$PATHexport XDEV_ROOT=$HOME/xuperchain/core/contractsdk/cpp2.2.4. 启动xuperchain–vm ixvm参数是选择ixvm合约虚拟机,开发合约过程中使用ixvm虚拟机能加快合约部署
$ cd output## 首先创建链$ ./xchain-cli createChain## 后台启动xuperchain节点$ nohup ./xchain --vm ixvm &2.2.5. 创建合约账号合约账号用来进行合约管理,比如合约的权限控制等,要部署合约必须创建合约账号,同时合约账号里面需要有充足的xuper来部署合约。
创建合约账号XC1111111111111111@xuper.
$ ./xchain-cli account new --account 1111111111111111 --fee 2000contract response: { "pm": { "rule": 1, "acceptValue": 1.0 }, "aksWeight": { "dpzuVdosQrF2kmzumhVeFQZa1aYcdgFpN": 1.0 } }The gas you cousume is: 1000The fee you pay is: 2000Tx id: d62704970705a2682e2bd2c5b4f791065871fd45f64c87815b91d8a00039de35account name: XC1111111111111111@xuper给合约账号转账
$ ./xchain-cli transfer --to XC1111111111111111@xuper --amount 100000000cd26657006f6f75f07bd53ad0a7fe74d76985cd592542d8cc87dc3fcdde115f52.2.6. 小结至此我们完成了所有的准备工作,包括编译xuperchain,创建链,启动节点,创建合约账号,后面我们开始体验怎么编译,部署和调用智能合约。
2.3. 快速体验在开始编写智能合约之前首先通过一个简单的例子来给大家演示合约是如何从代码到字节码,以及如何部署到链上,如何发起对智能合约的调用。 我们使用一个c++合约为例来展示如何编译、部署、调用合约。
2.3.1. 创建合约工程xdev工具是随xuperchain发布的一个合约编译和测试工具,在编译完xuperchain之后生成在output目录。
xdev提供了一个默认的c++合约工程模板
$ xdev init hello-cpp这个命令创建了一个hello-cpp的合约工程
2.3.2. 编译合约第一次编译的时间会长一点,因为xdev需要下载编译器镜像,以及编译超级链的标准库。$ xdev build -o hello.wasmCC main.ccLD wasm编译结果为hello.wasm,后面我们使用这个文件来部署合约
2.3.3. 部署合约$ ./xchain-cli wasm deploy --account XC1111111111111111@xuper --cname hello --fee 5200000 --runtime c ./hello-cpp/hello.wasmcontract response: initialize succeedThe gas you cousume is: 151875The fee you pay is: 5200000Tx id: 8c33a91c5cf564a28e7b62cad827ba91e19abf961702659dd8b70a3fb872bdf1此命令看起来很长,但是其中很多参数都有默认值,我们先来看一下参数的含义:
wasm deploy :此为部署wasm合约的命令参数,不做过多解释
–account XC1111111111111111@xuper :此为部署wasm合约的账号(只有合约账号才能进行合约的部署)
–cname hello :这里的hello是指部署后在链上的合约名字,可以自行命名(但有规则,长度在4~16字符)
–runtime c 指明我们部署的是一个c++代码编译的合约,如果是go合约这里填 go 即可。
–fee 为我们部署这个合约所需要的xuper
最后的hello.wasm是合约编译好的文件
2.3.4. 调用合约$ ./xchain-cli wasm invoke --method hello --fee 110000 hellocontract response: hello worldThe gas you cousume is: 35The fee you pay is: 110000Tx id: d8989ad1bfd2d08bd233b7a09a544cb07976fdf3429144c42f6166d28e9ff695参数解释如下:
wasm invoke 表示我们要调用一个合约
–method hello 表示我们要调用合约的 hello 方法
–fee 指明我们这次调用合约花费的xuper
最后的参数指明我们调用的合约名字 hello
2.3.5. 小结通过本节的学习,我们快速掌握了如果编译,部署和调用合约,在下面的章节里面我们学些如果使用solidity、c++、go或者java语言来编写智能合约。
2.4. 合约编写详解XuperChain目前主要支持以太坊solidity合约,两种编译成wasm格式的合约语言, c++ 和 go,以及两种native合约 go 和 java ,合约框架的整体结构是一致的,在不同语言上的表现形式不太一样,但熟悉一种语言的SDK之后很容易迁移到其他语言。
下面大概说明如何编写这四种类型的合约
2.4.1. Solidity合约如果本地搭建超级链环境,在部署、调用solidity合约之前,请先查看`conf/xchain.yaml` 中evm一节,确保evm合约功能开启。
# evm合约配置evm: driver: "evm" enable: true2.4.1.1. 编译环境准备安装solc编译器,请参见**https://solidity-cn.readthedocs.io/zh/latest/installing-solidity.html\*\*。
solc --version// solc, the solidity compiler commandline interface// Version: 0.5.9+commit.c68bc34e.Darwin.appleclang// 以上打印说明编译器安装成功
以counter合约为例来看如何编写一个Solidity合约。
2.4.1.2. 合约样例代码在 contractsdk/evm/example/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.4.1.3. 代码
solidity合约相关文档请参见 https://github.com/ethereum/solidity 。
更多的Solidity语言合约例子在超级链项目的 core/contractsdk/evm/example 以及 https://github.com/OpenZeppelin/openzeppelin-contracts 里面寻找。
2.4.1.4. 合约编译Solidity合约使用如下命令来编译合约
// 通过solc编译合约源码solc --bin --abi Counter.sol -o .// 合约二进制文件和abi文件分别存放在当前目录下,Counter.bin和Counter.abi
--bin :表示需要生成合约二进制文件
--abi :表示需要生成合约abi文件,用于合约方法以及参数编解码
-o:表示编译结果输出路径
2.4.1.5. 合约部署Solidity合约部署完整命令如下
$ ./xchain-cli evm deploy --account XC1111111111111111@xuper --cname counterevm --fee 5200000 Counter.bin --abi Counter.abi
--abi :表示合约abi文件
2.4.1.6. 合约调用// 合约increase方法调用$ ./xchain-cli evm invoke --method increase -a '{"key":"stones"}' counterevm --fee 22787517 --abi Counter.abi// 合约get方法调用$ ./xchain-cli evm query --method get -a '{"key":"stones"}' counterevm --abi Counter.abi
--abi :表示合约abi文件
2.4.2. C++合约以counter合约为例来看如何编写一个C++合约。
2.4.2.1. 合约样例代码在 contractsdk/cpp/example/counter.cc
#include "xchain/xchain.h"struct Counter : public xchain::Contract {};DEFINE_METHOD(Counter, initialize) { xchain::Context* ctx = self.context(); const std::string& creator = ctx->arg("creator"); if (creator.empty()) { ctx->error("missing creator"); return; } ctx->put_object("creator", creator); ctx->ok("initialize succeed");}DEFINE_METHOD(Counter, increase) { xchain::Context* ctx = self.context(); const std::string& key = ctx->arg("key"); std::string value; ctx->get_object(key, &value); int cnt = 0; cnt = atoi(value.c_str()); char buf[32]; snprintf(buf, 32, "%d", cnt + 1); ctx->put_object(key, buf); ctx->ok(buf);}DEFINE_METHOD(Counter, get) { xchain::Context* ctx = self.context(); const std::string& key = ctx->arg("key"); std::string value; if (ctx->get_object(key, &value)) { ctx->ok(value); } else { ctx->error("key not found"); }}2.4.2.2. 代码解析下面我们逐行解析合约代码:
#include
struct Counter : public xchain::Contract {}: 声明了我们的合约类,所有的合约类都要继承自 xchain::Contract 。
DEFINE_METHOD(Counter, initialize) 我们通过 DEFINE_METHOD 来为合约类定义合约方法,在这个例子里面我们为 Counter 类定义了一个叫 initialize 的合约方法。
xchain::Context* ctx = self.context() :用来获取合约的上下文,每个合约都有一个对应的合约执行上下文,通过上下文我们可以获取合约参数,写入合约数据,context对象是我们经常要操作的一个对象。
const std::string& creator = ctx->arg(“creator”); ,用于从合约上下文里面获取合约方法的参数,这里我们获取了名字叫 creator 的合约参数,合约的参数列表是一个map结构, key为合约参数的名字,value为参数对应的用户传递的值。
ctx->put_object(“creator”, creator); 通过合约上下文的 put_object 方法,我们可以向链上写入数据。
ctx->ok(“initialize succeed”); 用于返回合约的执行结果,如果合约执行失败则调用 ctx->error 。
通过上面的代码分析我们得到了如下知识
一个合约有多个方法组成,如counter合约的 initialize , increase , get 方法。
initialize 是每个合约必须实现的方法,这个合约方法会在部署合约的时候自动执行。
每个合约方法有一个 Context 对象,通过这个对象我们能获取到很多有用的方法,如获取用户参数等。
通过 Context 对象的 ok 或者 error 方法我们能给调用方反馈合约的执行情况:成功或者失败。
更多的c++语言合约例子在超级链项目的 core/contractsdk/cpp/example 里面寻找。
2.4.3. Go合约以counter合约为例来看如何编写一个go合约。
2.4.3.1. 合约样例代码在 contractsdk/go/example/counter/counter.go
package mainimport ( "strconv" "github.com/xuperchain/xuperchain/core/contractsdk/go/code" "github.com/xuperchain/xuperchain/core/contractsdk/go/driver")type counter struct{}func (c *counter) Initialize(ctx code.Context) code.Response { creator, ok := ctx.Args()["creator"] if !ok { return code.Errors("missing creator") } err := ctx.PutObject([]byte("creator"), creator) if err != nil { return code.Error(err) } return code.OK(nil)}func (c *counter) Increase(ctx code.Context) code.Response { key, ok := ctx.Args()["key"] if !ok { return code.Errors("missing key") } value, err := ctx.GetObject(key) cnt := 0 if err == nil { cnt, _ = strconv.Atoi(string(value)) } cntstr := strconv.Itoa(cnt + 1) err = ctx.PutObject(key, []byte(cntstr)) if err != nil { return code.Error(err) } return code.OK([]byte(cntstr))}func (c *counter) Get(ctx code.Context) code.Response { key, ok := ctx.Args()["key"] if !ok { return code.Errors("missing key") } value, err := ctx.GetObject(key) if err != nil { return code.Error(err) } return code.OK(value)}func main() { driver.Serve(new(counter))}go合约的整体框架结构跟c++合约一样,在表现形式上稍微有点不一样:
c++合约使用 DEFINE_METHOD 来定义合约方法,go通过结构体方法来定义合约方法。
c++通过 ctx->ok 来返回合约数据,go通过返回 code.Response 对象来返回合约数据。
go合约需要在main函数里面调用 driver.Serve 来启动合约。
更多的go语言合约例子在超级链项目的 core/contractsdk/go/example 里面寻找。
2.4.3.2. 合约编译Go合约使用如下命令来编译合约
GOOS=js GOARCH=wasm go build -o hello.wasm2.4.3.3. 合约部署Go合约部署唯一跟c++合约不一样的地方在于 –runtime 参数,完整命令如下
$ ./xchain-cli wasm deploy --account XC1111111111111111@xuper --cname hello --fee 5200000 --runtime go ./hello-go/hello.wasmGo合约的调用跟c++合约参数一致。
2.4.4. Java合约java合约目前只支持native合约。
如果本地搭建超级链环境,在部署、调用native合约之前,请先查看`conf/xchain.yaml` 中native一节,确保native合约功能开启。
# 管理native合约的配置native: enable: true以counter合约为例来看如何编写一个java合约。
2.4.4.1. 编译环境准备编译Java sdk:Java版本不低于Java1.8版本
包管理器:maven,mvn版本3.6+
# 编译java sdkcd contractsdk/javamvn install -f pom.xml# 产出二进制文件target/java-contract-sdk-0.1.0.jar,并自动安装到mvn本地仓库下
2.4.4.2. 合约样例代码在 contractsdk/java/example/counter/src/main/java/com/baidu/xuper/example/Counter.java
package com.baidu.xuper.example;import java.math.BigInteger;import com.baidu.xuper.Context;import com.baidu.xuper.Contract;import com.baidu.xuper.ContractMethod;import com.baidu.xuper.Driver;import com.baidu.xuper.Response;/*** Counter*/public class Counter implements Contract { @Override @ContractMethod public Response initialize(Context ctx) { return Response.ok("ok".getBytes()); } @ContractMethod public Response increase(Context ctx) { byte[] key = ctx.args().get("key"); if (key == null) { return Response.error("missing key"); } BigInteger counter; byte[] value = ctx.getObject(key); if (value != null) { counter = new BigInteger(value); } else { ctx.log("key " + new String(key) + " not found, initialize to zero"); counter = BigInteger.valueOf(0); } ctx.log("get value " + counter.toString()); counter = counter.add(BigInteger.valueOf(1)); ctx.putObject(key, counter.toByteArray()); return Response.ok(counter.toString().getBytes()); } @ContractMethod public Response get(Context ctx) { byte[] key = ctx.args().get("key"); if (key == null) { return Response.error("missing key"); } BigInteger counter; byte[] value = ctx.getObject(key); if (value != null) { counter = new BigInteger(value); } else { return Response.error("key " + new String(key) + " not found)"); } ctx.log("get value " + counter.toString()); return Response.ok(counter.toString().getBytes()); } public static void main(String[] args) { Driver.serve(new Counter()); }}java合约的整体框架结构跟c++、go合约一样,在表现形式上稍微有点不一样:
c++合约使用 DEFINE_METHOD 来定义合约方法,go通过结构体方法来定义合约方法,java通过定义class类方法来定义合约。
c++通过 ctx->ok 来返回合约数据,go通过返回 code.Response 对象来返回合约数据,java通过 Response.ok 来返回合约数据。
java合约需要在main函数里面调用 Driver.serve 来启动合约。
更多的java语言合约例子在超级链项目的 core/contractsdk/java/example 里面寻找。
2.4.4.3. 合约编译java合约使用如下命令来编译合约
cd contractsdk/java/example/countermvn package -f pom.xml# 产出二进制文件target/counter-0.1.0-jar-with-dependencies.jar,用于合约部署2.4.4.4. 合约部署native合约和wasm合约在合约部署和合约执行上通过 native 和 wasm 字段进行区分。
不同语言的合约通过 –runtime 参数进行指定,完整命令如下。
# 部署golang native合约./xchain-cli native deploy --account XC1111111111111111@xuper --fee 15587517 --runtime java counter-0.1.0-jar-with-dependencies.jar --cname javacounter
--runtime c :表示部署的是c++合约
--runtime go :表示部署的是golang合约
--runtime java:表示部署的是java合约
java合约的调用跟c++、go合约参数一致。
2.4.5. 小结在这个章节里面我们学习了如何使用solidity、c++、go和java语言来编写合约,更多的合约例子可以在对应语言SDK的example目录里面寻找,在下一章节我们学习如果给合约编写单元测试。
2.5. 合约单测如果每次测试合约都需要部署到链上再发起调用会特别麻烦,xdev工具提供了单测能力,可以脱离链上环境运行合约。
test目录下放着合约测试文件,文件以 .test.js结尾,可以有多个测试文件。 以hello-cpp目录下的test/hello.test.js为例,文件内容如下:
var assert = require("assert");Test("hello", function (t) { var contract; t.Run("deploy", function (tt) { contract = xchain.Deploy({ name: "hello", code: "../hello.wasm", lang: "c", init_args: {} }) }); t.Run("invoke", function (tt) { resp = contract.Invoke("hello", {}); assert.equal(resp.Body, "hello world"); })})使用Test函数来定义测试case,hello为测试名字, 匿名js function作为测试的body。 全局对象xchain是我们跟xchain环境打交道的入口,xchain.Deploy用来部署一个合约到xchain环境,返回的contract对象,调用contract.Invoke方法即可调用合约。 Deploy和Invoke方法都是通过抛出异常的方式来处理错误,测试框架会自动捕获错误来结束测试case。t.Run可以定义子测试case。
使用如下命令来启动测试
$ cd hello-cpp$ xdev test # 测试test目录下的所有case=== RUN hello=== RUN hello/deploy=== RUN hello/invoke--- PASS: hello (0.11s) --- PASS: hello/deploy (0.07s) --- PASS: hello/invoke (0.02s)PASS2.6. VSCode编辑器集成2.6.1. 配置编译和测试task为了方便在vscode里面编译和测试合约,在 .vscode/tasks.json 里面添加如下内容
{ // See https://go.microsoft.com/fwlink/?LinkId=733558 // for the documentation about the tasks.json format "version": "2.0.0", "tasks": [ { "label": "xdev build", "type": "shell", "command": "xdev build -p", "options": { "cwd": "${workspaceFolder}" }, "group": { "kind": "build", "isDefault": true } }, { "label": "xdev test", "type": "shell", "command": "xdev test", "options": { "cwd": "${workspaceFolder}" } } ]}2.6.2. 编译合约Run Build Task(⇧⌘B)来启动构建
2.6.3. 跑合约单测调用Run Task命令之后,选择xdev test来触发单元测试
2.6.4. 代码补全为了让vscode帮我们自动补全代码,需要做如下配置,在项目的.vscode/settings.json文件里面加上这一个配置
{ "C_Cpp.default.compileCommands": "${workspaceFolder}/compile_commands.json"}之后就能用vscode的自动补全功能了.
2.7. 开放网络集成环境超级链开放网络是基于百度自研底层技术搭建的区块链基础服务网络,符合中国标准,超级节点遍布全国,区块链网络完全开放,为用户提供区块链快速部署和运行的环境,最低2元钱就用上的区块链服务,让信任链接更加便利。
超级链开放网络为开发者提供了合约开发、编译、部署、管理的一站式可视化集成环境,下面介绍如何在开放网络上开发部署智能合约。
2.7.1. 账户注册
在超级链官网 https://xchain.baidu.com/ 使用百度账号登录,如果没有百度账号请先注册。
进入超级链开放网络控制台,第一次登录的用户,平台会为用户创建区块链账户,请按照创建账户指引文档完成安全码设置,并记录自己的助记词和私钥。
2.7.2. 创建合约账户
在工作台,选择「开放网络 —> 合约管理」,点击「创建合约账户」
进入创建合约账户页,输入安全码后点击「确认创建」,系统自动生成账户名称后,即创建完毕
2.7.3. 合约开发和部署
在工作台,选择「开放网络 —> 合约管理」,点击「创建智能合约」
进入新页面,按要求填写基本信息、编辑合约代码,编译成功后点击「安装」,即可进入合约安装(部署)流程。 合约代码编译有两种方式:
模板合约;选择模板后,只需在模板代码中填写相关参数即可(参考模板详情完成参数填写)
自定义合约;在编辑器内完成C++语言的合约编辑即可
进入安装流程,用户需按合约代码完成预执行操作。点击「开始验证」,执行通过会进入安装确认页
模板合约;系统会提供模板的函数,只需填写参数即可(可参考模板详情)
自定义合约;根据页面操作说明,完成函数、参数填写
进入确认安装页,页面显示安装合约预计消耗的余额。点击「安装合约」将合约上链,上链过程需要等待10S左右。安装完成后,在合约管理列表中可看到合约状态变更为‘安装成功’,即该合约已完成安装。
2.7.4. 合约调用目前开放网络支持通过Go和Javascript两种SDK调用智能合约。
Go SDK:https://github.com/xuperchain/xuper-java-sdk
Javascript SDK:https://github.com/xuperchain/xuper-sdk-js
2.8. 结语通过上面的学习,相信大家已经掌握了如何编写超级链智能合约的方法,想要更深入了解超级链,可以通过访问超级链开源项目 https://github.com/xuperchain/xuperchain 来获取更多的学习资料。
当前内容版权归 百度 或其关联方所有,如需对内容或内容相关联开源项目进行关注与资助,请访问 百度 .
上一篇:
下一篇:
XuperChain介绍1. 简介2. 模块3. 核心数据结构4. 智能合约5. 权限系统6. 隐私和保密7. 性能8. 可信账本9. 总结快速入门1. XuperChain环境部署技术设计文档1. XuperModel2. XuperBridge3. XVM虚拟机4. 账号权限控制模型5. 超级链p2p网络6. 身份认证7. 提案和投票机制8. 密码学和隐私保护9. 插件机制10. 超级链共识框架11. Chained-BFT共识公共组件12. XPoS共识13. XPoA共识14. Single及PoW共识15. 超级链监管机制16. 多盘散列17. 平行链与群组18. 超级链跨链技术19. 可信账本进阶使用1. 合约账号2. 多节点部署3. 创建合约4. 发起提案5. 配置变更6. 使用平行链与群组7. 使用事件订阅功能8. 只读跨链场景使用文档9. 非事务场景跨链使用文档10. 搭建XPoA共识的超级链网络11. 可信账本使用文档12. 监控使用文档开发应用1. 电子存证合约2. 数字资产交易开发手册1. 智能合约SDK使用说明2. 智能合约开发详解3. XuperChain RPC 接口使用说明超级链测试环境1. 超级链测试环境说明2. 超级链测试环境使用指南其他1. 操作指导2. 视频教程3. 指令介绍(API)4. 常见问题解答5. 词汇表6. 超级链小课堂
暂无相关搜索结果!
本文档使用 BookStack 构建
×
分享,让知识传承更久远
取消分享
×
文章二维码
手机扫一扫,轻松掌上读
关闭
×
文档下载
普通下载
下载码下载(免登录无限下载)
你与大神的距离,只差一个APP
请下载您需要的格式的文档,随时随地,享受汲取知识的乐趣!
PDF文档
EPUB文档
MOBI文档
温馨提示 每天每在网站阅读学习一分钟时长可下载一本电子书,每天连续签到可增加阅读时长
下载码方式下载:免费、免登录、无限制。 免费获取下载码
下载码
文档格式
EPUB
MOBI
码上下载
关闭窗口
×
微信小程序阅读
您与他人的薪资差距,只差一个随时随地学习的小程序
关闭窗口
×
书签列表
关闭
×
阅读记录
阅读进度: 0.00% ( 0/0 )
重置阅读进度
关闭