docs: modify image path
This commit is contained in:
parent
6d6d23e342
commit
7d68796942
|
@ -1,5 +1,5 @@
|
|||
# 社区介绍
|
||||
![](assets/community.png)
|
||||
![](../assets/community.png)
|
||||
|
||||
开源在区块链的发展历程中,发挥着至关重要的作用。开源的本质是共享技术,而技术是生产资料的组成部分,因此开源的社会意义实际上是实现了生产资料的共享。开源的商业意义则在于通过共享技术、推广技术标准从而打造了一个多方商业共同体。无论是对区块链行业,还是对趣链科技本身,开源都具有极为重要的意义,通过开源社区,我们希望:
|
||||
|
|
@ -1,16 +1,16 @@
|
|||
# 共识算法插件
|
||||
在本教程中,你将构建一个完整功能的共识服务。过程中能学习基本的概念和具体使用细节。该示例将展示如何快速、轻松地**接入自己的共识算法到BitXHub中来**。
|
||||
|
||||
# 1. 开发要求
|
||||
## 1. 开发要求
|
||||
- 安装 [__go1.13+__](https://golang.org/doc/install)
|
||||
|
||||
- 设置好$GOPATH等环境
|
||||
|
||||
# 2. 准备
|
||||
## 2. 准备
|
||||
|
||||
为了更加便捷的开发共识服务接入到`BitXHub`中来,我们提供了一些接口和参数。
|
||||
|
||||
## 2.1 Order接口
|
||||
### 2.1 Order接口
|
||||
|
||||
我们规定了下面一些必要的接口,这些接口是`BitXHub`与共识服务的交互接口。
|
||||
|
||||
|
@ -42,7 +42,7 @@ type Order interface {
|
|||
}
|
||||
```
|
||||
|
||||
## 2.2 Config参数
|
||||
### 2.2 Config参数
|
||||
|
||||
我们规定了下面一些参数可以从BitXHub传递给共识服务。
|
||||
|
||||
|
@ -63,7 +63,7 @@ type Config struct {
|
|||
}
|
||||
```
|
||||
|
||||
## 2.3 Filter过滤器
|
||||
### 2.3 Filter过滤器
|
||||
|
||||
为了更加方便过滤重复交易,我们提供了布隆过滤器的组件。
|
||||
|
||||
|
@ -80,11 +80,11 @@ type ReqLookUp struct {
|
|||
}
|
||||
```
|
||||
|
||||
# 3. 程序目的
|
||||
## 3. 程序目的
|
||||
|
||||
本教程以开发一个简单Solo版本的共识算法为例。
|
||||
|
||||
## 3.1 开始编写你的程序
|
||||
### 3.1 开始编写你的程序
|
||||
|
||||
首先选择你的工程目录,按照正常的GO程序的流程建立项目
|
||||
|
||||
|
@ -97,7 +97,7 @@ $ go mod init
|
|||
|
||||
|
||||
|
||||
## 3.2 Node对象
|
||||
### 3.2 Node对象
|
||||
|
||||
首先创建一个`node.go`文件,这个文件是共识Plugin的核心和入口,来看看`Node`具体结构
|
||||
|
|
@ -166,7 +166,7 @@ public interface DataSwapper {
|
|||
}
|
||||
```
|
||||
|
||||
# 具体实现
|
||||
## 具体实现
|
||||
|
||||
对于想要接入到我们的跨链平台中的Fabric区块链,我们已经有提供跨链管理合约Broker和相应的Plugin,你只需要对你的业务合约进行一定的改造便可拥有跨链功能。
|
||||
|
||||
|
@ -180,8 +180,6 @@ public interface DataSwapper {
|
|||
|
||||
如果你需要新的语言编写合约,你可以按照我们的设计思路和参考实现进行进一步的开发。
|
||||
|
||||
# 改造业务合约
|
||||
|
||||
现在我们支持Hyperchain EVM合约以及Fabric上chaincode合约编写跨链合约。
|
||||
|
||||
## Hyperchain
|
|
@ -11,7 +11,7 @@
|
|||
|
||||
从总体架构来说,跨链网关根据不同的功能采取了模块划分的方式,主要的功能模块有Monitor,Executor,Exchanger,Validate Engine,Appchain Manager,Network等。
|
||||
|
||||
![](/assets/pier.png)
|
||||
![](../..//assets/pier.png)
|
||||
|
||||
## 处理流程
|
||||
|
|
@ -3,7 +3,7 @@
|
|||
|
||||
在跨链场景中,中继链需要记录不同的应用链的跨链请求,所有的跨链交易对于加入了中继链跨链系统的应用链来说都是可见的。这种情况下,如果应用链用户发起的跨链交易带有隐私数据,隐私数据非常容易泄露。
|
||||
|
||||
![](/assets/privacy1.png)
|
||||
![](../..//assets/privacy1.png)
|
||||
|
||||
所以我们在中继链的设计中需要隐私保护相关的机制,并且能够保持比较高的灵活度。在跨链系统中,我们提出了两种可行的隐私保护机制。
|
||||
|
||||
|
@ -11,14 +11,14 @@
|
|||
|
||||
跨链交易在提交到中继链的共识节点之后,会通过共识发送到所有的其他节点去,所以跨链交易对于整个中继链来说没有隐私性可言。而隐私交易这种机制下,收到跨链交易的节点并不会将跨链交易的内容直接进行共识,而是计算跨链交易的哈希值进行共识。跨链交易在共识完成之后,参与方的共识节点将完整的跨链交易直接发送到参与方负责的中继链节点。
|
||||
|
||||
![](/assets/privacy2.png)
|
||||
![](../..//assets/privacy2.png)
|
||||
这样不相关的节点就无法直接获取到跨链交易,能够保护用户的交易隐私信息。
|
||||
|
||||
## 端到端加密
|
||||
|
||||
另一种进行隐私保护的思路是在跨链交易提交之前,就对跨链交易进行加密操作。为了提升加解密的效率,采用对称加密和秘钥协商的机制来实现。具体的一次加密交易过程如下图:
|
||||
|
||||
![](/assets/privacy3.png)
|
||||
![](../..//assets/privacy3.png)
|
||||
|
||||
|
||||
要进行加密交易的双方需要在中继链上注册自己的私钥衍生的公钥,这样双方通过自己拥有的私钥和对方注册的公钥,能够计算出一个相同的对称加密的秘钥,用于提交跨链交易之前的加密和获取跨链交易之后的解密。这个秘钥只有公钥的话无法解出用于加密的对称秘钥,所以能够保证跨链交易的隐私性。
|
|
@ -4,13 +4,13 @@
|
|||
|
||||
如果你需要接入自己的开发的区块链到BitXHub跨链平台来的话,可以根据你们自己的区块链来定制开发Plugin,通过我们跨链网关加入到跨链平台来。
|
||||
|
||||
# 开发要求
|
||||
## 开发要求
|
||||
|
||||
- 安装 [__go1.13+__](https://golang.org/doc/install)
|
||||
|
||||
- 设置好$GOPATH等环境
|
||||
|
||||
# 教程章节
|
||||
## 教程章节
|
||||
|
||||
1. 重要概念
|
||||
|
||||
|
@ -22,7 +22,7 @@
|
|||
|
||||
1. 编译你的Plugin
|
||||
|
||||
# 重要概念
|
||||
## 重要概念
|
||||
|
||||
在解释具体的接口之前,先明确几个概念:
|
||||
|
||||
|
@ -34,7 +34,7 @@
|
|||
|
||||
**目的链:**在跨链请求A->B中,B即为目的链。
|
||||
|
||||
# Plugin接口
|
||||
## Plugin接口
|
||||
|
||||
为了更加便捷的开发Plugin接入到Pier中来,我们规定了下面一些必要的接口。
|
||||
|
||||
|
@ -78,11 +78,11 @@ type Client interface {
|
|||
}
|
||||
```
|
||||
|
||||
# 程序目的
|
||||
## 程序目的
|
||||
|
||||
本教程以开发一个简单的连接Fabric区块链网络的Plugin为例,最终的程序能够实现从负责的区块链获取`Hello World`信息并返回到跨链平台中。
|
||||
|
||||
# 开始编写你的程序
|
||||
## 开始编写你的程序
|
||||
|
||||
首先选择你的工程目录,按照正常的GO程序的流程建立项目
|
||||
|
||||
|
@ -93,7 +93,7 @@ $ cd ${YOUR_PROJECT}
|
|||
$ go mod init
|
||||
```
|
||||
|
||||
## Client对象
|
||||
### Client对象
|
||||
|
||||
首先创建一个`client.go`文件,这个文件是Plugin的核心和入口。
|
||||
|
||||
|
@ -172,7 +172,7 @@ func NewClient(configPath, pierId string, extra []byte) (client.Client, error) {
|
|||
}
|
||||
```
|
||||
|
||||
## consumer
|
||||
### consumer
|
||||
|
||||
consumer 负责监听区块链上的由跨链合约抛出的跨链事件以及和调用chaincode。
|
||||
|
||||
|
@ -204,7 +204,7 @@ type Consumer struct {
|
|||
|
||||
- ctx:用来结束consumer的 gorountine
|
||||
|
||||
## Event
|
||||
### Event
|
||||
|
||||
由于在Fabric上抛出的事件内容是可以自定义的,而跨链请求要在跨链平台上传递的话,需要使用IBTP包,所以我们需要一定的代码来执行这种转换。
|
||||
|
||||
|
@ -226,7 +226,7 @@ type Event struct {
|
|||
|
||||
Event结构也是自定义的,需要和在你的跨链合约中抛出的事件结构一致。一个跨链交易事件,一般来说需要指定目标应用的ID `DstChainID`,目标应用链上智能合约的地址或者ID(Fabric上的chaincode没有合约地址)`DstContractID`,这次跨链交易的发起者的合约地址`SrcContractID`,跨链调用的函数名 `Func`,该函数的参数 `Args`,是否有跨链调用之后要执行的回调函数 `Callback`,为了该应用链上对于该事件的证明 `Proof`,用户课自定义的部分 `Extra`。
|
||||
|
||||
## 读取配置
|
||||
### 读取配置
|
||||
|
||||
Plugin的配置文件路径是通过NewClient的方法动态传入的,这意味着你可以方便的修改关于你的区块链的参数信息。我们新建文件 `./config.go` 文件,负责配置读取的所有操作。
|
||||
|
||||
|
@ -291,7 +291,7 @@ func UnmarshalConfig(configPath string) (*Fabric, error) {
|
|||
|
||||
|
||||
|
||||
# 编译你的Plugin
|
||||
## 编译你的Plugin
|
||||
|
||||
我们采用GO语言提供的插件模式,实现Pier对于你编写的Plugin的动态加载。
|
||||
|
|
@ -1,5 +1,7 @@
|
|||
# FAQ
|
||||
## 【跨链技术】
|
||||
|
||||
## 跨链技术
|
||||
|
||||
### 1. 跨链的必要性
|
||||
|
||||
**一是技术层面,区块链技术在单链架构下本身存在着性能、容量不足等问题**。单链由于受到目前共识速度的限制,节点的执行性能无法做到线性扩展,这限制了高交易吞吐量低延迟的商业场景的应用。除此之外,随着区块链运行时间的增长,其存储容量也将逐渐增长,且这种数据增长的速度甚至会超过单链存储介质的容量上限。目前的区块链共识算法、存储结构、和安全机制不同导致链与链之间缺乏统一的互联互通机制,这极大限制了区块链技术和应用生态的健康发展。
|
||||
|
@ -14,7 +16,8 @@
|
|||
2. 跨链事务的原子性问题,如何管理跨链事务中的各子交易确保跨链事务整体完整的原子性,即跨链事务的发生只存在两中状态完成或失败;
|
||||
3. 不同区块链之间的协议适配问题,如何对采用不同架构与协议的区块链之间进行适配,需要跨链协议中设计可以兼容多种异构区块链的数据结构、命名规范以及通信方式等。
|
||||
|
||||
## 【产品功能】
|
||||
## 产品功能
|
||||
|
||||
### 1. 产品简介
|
||||
趣链科技跨链技术平台BitXHub,提出了一套完整的通用跨链传输协议IBTP(Inter-Blokcchain Transfer Protocol), 能够完美支持和兼容任意区块链系统,实现异构区块链的无缝连接。BitXHub采用先进的中继+网关的组合技术,解决了跨链中的交易捕获、传输以及验证的核心难题,所有关键技术均具有完全自主知识产权。同时,平台具备完善的跨链接口管理、异构链成员治理、联盟权限管控等联盟跨链专用机制,是目前业界最完备的异构联盟链跨链技术平台,已经在金融、政务等业务场景中进行了相关应用验证。
|
||||
|
||||
|
@ -77,8 +80,7 @@ BitXHub提出一种可扩展的适应不同异构区块链系统之间的跨链
|
|||
- 验证引擎会对跨链交易、跨链交易执行结果采用SPV证明机制进行验证,来确保跨链交易和跨链交易的执行都是真实在链中发生的。
|
||||
- 应用链中跨链的接口必须按照规定实现,验证引擎会对比跨链调用的接口以及通过SPV机制验证调用接口执行后返回的数据的有效性。
|
||||
|
||||
# 技术问题
|
||||
## 【跨链准备】
|
||||
## 跨链准备
|
||||
### 1. 中继链由谁维护?如何搭建?
|
||||
中继链本身就是一条联盟链,作为去中心化的可信中介,推荐的搭建方案是由参与跨链的各方共同维护节点来搭建中继链。
|
||||
|
||||
|
@ -93,7 +95,7 @@ BitXHub提出一种可扩展的适应不同异构区块链系统之间的跨链
|
|||
4. 将应用链的信息注册到BitXHub中,如链的ID,节点数量,共识算法类型等
|
||||
5. 根据应用链的共识机制编写交易的验证规则,详见[验证规则编写文档](https://github.com/meshplus/bitxhub/wiki/验证引擎规则编写)
|
||||
|
||||
## 【跨链操作】
|
||||
## 跨链操作
|
||||
### 1. Fabric没有token,在跨链转账时使用的是什么资产模型?
|
||||
wiki中给出的例子是一个模拟资产操作的一个合约,对资产模型没做特定的假设。
|
||||
|
|
@ -2,7 +2,7 @@
|
|||
|
||||
BitXHub中继链的技术架构自下而上分为物理层、基础层、跨链服务层、接口层四个部分。
|
||||
|
||||
![Tech Arch](/assets/tech-arch.png)
|
||||
![Tech Arch](../../assets/tech-arch.png)
|
||||
|
||||
第一层是物理层,中继链的设计为了满足不同场景下用户物理环境需求,支持在普通物理机、云主机或者嵌入式设备上稳定运行,兼顾多场景适用性。
|
||||
|
|
@ -10,7 +10,7 @@ BitXHub 于 2020 年 3 月正式开源,希望在开源社区共建下,针对
|
|||
|
||||
趣链科技跨链技术平台 BitXHub 由三部分组成:中继链、跨链网关、应用链。
|
||||
|
||||
![Arch](/assets/arch.png)
|
||||
![Arch](../..//assets/arch.png)
|
||||
|
||||
**中继链(Relay-chain**:用于应用链管理以及跨链交易的可信验证与可靠路由,是一种实现 IBTP 协议的开放许可链,确保跨链交易的事务一致性;
|
||||
|
||||
|
@ -24,7 +24,7 @@ BitXHub 于 2020 年 3 月正式开源,希望在开源社区共建下,针对
|
|||
|
||||
中继链架构由中继链和跨链网关组成。对于简单跨链场景,如下图 1-1 中,应用链 A 和应用链 C 之间的跨链操作,中继链 A 负责跨链交易的验证和存证,跨链网关在中继链和应用链间负责跨链交易的监听、同步和执行。
|
||||
|
||||
![Relay Arch](/assets/relay-arch.png)
|
||||
![Relay Arch](../../assets/relay-arch.png)
|
||||
|
||||
但由于中继链接入应用链的数量有限,为了更好地满足大规模跨链场景,需要接入多个中继链进行跨链。中继链间跨链通过跨链网关组成的跨链交易路由网络进行路由。如图 1-1 所示,应用链 A 想发送跨链交易到应用链 B 时,首先需要把跨链交易提交到中继链 A 中,跨链网关 A 同步到该跨链交易后,发现目的链不在中继链 A 负责的应用链联盟里面,就把跨链交易同步到跨链交易路由网络中。跨链网关 B 从路由网络中同步到该跨链交易后,提交到中继链 B,最后,由跨链网关提交到应用链 B 完成整个跨链操作。
|
||||
|
||||
|
@ -34,20 +34,20 @@ BitXHub 于 2020 年 3 月正式开源,希望在开源社区共建下,针对
|
|||
|
||||
对于安全性要求不高的场景,可以不借助中继链进行跨链操作,如图 1-2 是由跨链网关组成的链对链架构。如应用链 A 和应用链 B 的跨链互操作直接通过中间的跨链路由网络进行跨链交易的同步和传输,跨链交易的真实性验证也由跨链网关完成。
|
||||
|
||||
![Direct Arch](/assets/direct-arch.png)
|
||||
![Direct Arch](../../assets/direct-arch.png)
|
||||
|
||||
### 主侧链架构
|
||||
|
||||
如果参与方存在上下级的治理关系,可以选用主侧链架构。如图 1-3 中,中继链充当主链,负责侧链成员管理、数据一致性保障、核心数据存证等,且中继链的不可篡改特性可以方便实现跨链交易的原子性保障,中继链通过高性能智能合约的方式将跨链安全性验证规则化,方便实现异构区块链之间跨链交易验证的方法注入、升级;侧链通过跨链网关接入主链,负责承载具体的业务服务,形成可横向扩展的侧链集群。采用跨链网关的方式对接具体的应用侧链可以减少对具体数据治理链的侵入性,特别是针对异构数据治理链,网关可以将跨链交易转换成中继可解析验证的格式,对跨链互联服务屏蔽具体区块链的数据差异性;网关和中继链分离的方案可以保证中继链的稳定性。
|
||||
|
||||
![Master Arch](/assets/master-arch.png)
|
||||
![Master Arch](../../assets/master-arch.png)
|
||||
|
||||
## 跨链协议
|
||||
|
||||
不同区块链由于其底层平台的加密算法、区块结构等不同,不同区块链之间的消息不能直接通信。为了能够支持异构区块链之间的跨链交易路由和可信验证,BitXHub 设计了通用的跨链传输协议 IBTP(InterBlockchain Transfer Protocol),允许异构资产、数据及服务进行跨链调用。
|
||||
该协议内容指定了相关跨链事件的来源链、目的链、跨链交易方法以及验证策略、签名等诸多信息,支持应用链与中继链、应用链与应用链间的交互操作,其结构如图 1-4 所示。应用链的跨链消息通过跨链网关转换成 IBTP 结构提交至中继链,中继链通过 IBTP 内容进行跨链交易的合法性验证及可靠路由。基于 IBTP 协议跨链网关可将不同应用链抛出的事件数据格式转换为统一结构。
|
||||
|
||||
![IBTP](/assets/ibtp.png)
|
||||
![IBTP](../../assets/ibtp.png)
|
||||
|
||||
IBTP 消息采用 P2P 的方式进行传输,消息的主体内容均采用对方的公钥进行加密确保消息内容传播的不被第三方窃取。同时调用内容经跨链网关间协商的对称密钥加密后再发送至中继链,保障传输调用的安全性与可靠性。
|
||||
|
||||
|
@ -79,17 +79,17 @@ IBTP 消息采用 P2P 的方式进行传输,消息的主体内容均采用对
|
|||
|
||||
BitXHub 提供跨链网关插件机制,其一大特点是将跨链网关中与应用链的交互模块和核心模块进行解耦,从而方便更多的应用链加入跨链系统。如下图 1-5 所示,在跨链网关运行时,通过动态加载插件的方式完成应用链的接入。
|
||||
|
||||
![Plugin](/assets/plugin.png)
|
||||
![Plugin](../../assets/plugin.png)
|
||||
|
||||
### 网关高可用
|
||||
|
||||
为了更好的保障跨链网络之间互通的稳定性,BitXHub 提供主备跨链网关功能,如图 1-6 所示,基于中继链,主备跨链网关和中继链上的节点建立连接,通过竞争机制,按照连接节点的先后决定主备网关次序,保障中继链上网关主节点的唯一性。并支持主备网关进行灵活切换,当主节点网关出现异常宕机时,系统可进行自动无缝切换,为中继链提供高可靠的跨链服务,实现更加稳定的数据互通互联。
|
||||
![HA](/assets/ha.png)
|
||||
![HA](../../assets/ha.png)
|
||||
|
||||
## 区块链互联网络
|
||||
|
||||
在最新的 BitXHub 跨链平台中,中继链在原有功能的基础上增加了大规模跨链网络的功能,如图 1-7 所示,通过跨链网关形成一个 P2P 网络,对不同中继链的跨链消息进行消息路由,达到平行扩展中继链的效果。在中继链之间的跨链网络中,增加大规模网络中的消息路由机制,并通过多签认证的方式,实现不同中继链上的应用链间的身份验证。目前平台可支持超过 1000+的应用链的并发接入性能。
|
||||
|
||||
![Large scale](/assets/large-scale.png)
|
||||
![Large scale](../../assets/large-scale.png)
|
||||
|
||||
跨链技术作为连接各区块链的桥梁,实现了不同区块链之间的资产原子性交易、信息数据互通、业务服务互补等功能,打破不同区块链间的数据孤岛。跨链技术是构建区块链互联互通网络生态,实现区块链“价值互联网”的关键枢纽。
|
|
@ -3,9 +3,9 @@
|
|||
|
||||
- **BitXHub开源社区微信群·小助手**
|
||||
|
||||
![](/assets/wechat.png)
|
||||
![](../assets/wechat.png)
|
||||
|
||||
- **趣链科技官方公共号 **
|
||||
|
||||
![](/assets/public wechat.png)
|
||||
![](../assets/public wechat.png)
|
||||
|
|
@ -2,8 +2,8 @@
|
|||
我们提供了脚本来快速启动中继链、两条Fabric应用链A和B和跨链网关。
|
||||
|
||||
|
||||
# 启动BitXHub
|
||||
BitXHub依赖于[golang](https://golang.org/) 和[tmux](https://github.com/tmux/tmux/wiki),需要提前进行安装。
|
||||
## 启动BitXHub
|
||||
BitXHub依赖于[golang](https://golang.org/)和[tmux](https://github.com/tmux/tmux/wiki),需要提前进行安装。
|
||||
|
||||
使用下面的命令克隆项目:
|
||||
|
|
@ -1,5 +1,5 @@
|
|||
# 硬件环境
|
||||
### 服务器
|
||||
## 服务器
|
||||
|
||||
| 服务器| 配置要求
|
||||
---|---
|
||||
|
@ -8,7 +8,7 @@ CPU | 64位8核及其以上
|
|||
内存 | 大于等于16GB
|
||||
|
||||
|
||||
### 软件环境
|
||||
## 软件环境
|
||||
**操作系统**
|
||||
|
||||
目前BitXHub支持的操作系统以及对应版本号如下:
|
||||
|
@ -21,7 +21,7 @@ SLES |11SP3或更新|amd64,386
|
|||
Ubuntu |14.04或更新|amd64,386
|
||||
MacOS |10.8或更新|amd64,386
|
||||
|
||||
### 安装go
|
||||
## 安装go
|
||||
Go为Mac OS X、Linux和Windows提供二进制发行版。如果您使用的是不同的操作系统,您可以下载Go源代码并从源代码安装。
|
||||
|
||||
在这里下载适用于您的平台的最新版本Go:[下载](https://golang.org/dl/) - 请下载 1.13.x 或更新
|
||||
|
@ -40,7 +40,7 @@ export PATH=$PATH:$GOROOT/bin
|
|||
```
|
||||
|
||||
|
||||
### 设置GOPATH
|
||||
## 设置GOPATH
|
||||
您的Go工作目录 (GOPATH) 是用来存储您的Go代码的地方,您必须要将他跟您的Go安装目录区分开 (GOROOT)。
|
||||
以下命令是用了设置您的GOPATH环境变量的,您也可以参考Go官方文档,来获得更详细的内容: [https://golang.org/doc/code.html](https://golang.org/doc/code.html).
|
||||
|
|
@ -14,7 +14,7 @@
|
|||
|
||||
|
||||
|
||||
## UPier配置和部署
|
||||
## Pier配置和部署
|
||||
|
||||
### 部署前准备
|
||||
|
|
@ -1,34 +1,38 @@
|
|||
# Goduck运维小工具
|
||||
# 1 安装
|
||||
|
||||
---
|
||||
## 1 安装
|
||||
|
||||
## 1.1 获取源码
|
||||
### 1.1 获取源码
|
||||
|
||||
```
|
||||
git clone git@github.com:meshplus/goduck
|
||||
```
|
||||
## 1.2 编译安装
|
||||
|
||||
### 1.2 编译安装
|
||||
|
||||
```
|
||||
cd goduck
|
||||
sudo make install
|
||||
```
|
||||
|
||||
## 1.3 初始化
|
||||
### 1.3 初始化
|
||||
|
||||
```
|
||||
goduck init
|
||||
```
|
||||
|
||||
使用之前一定要先初始化
|
||||
|
||||
# 2 使用
|
||||
## 2.1 命令格式
|
||||
## 2 使用
|
||||
|
||||
### 2.1 命令格式
|
||||
|
||||
```
|
||||
goduck [global options] command [command options] [arguments...]
|
||||
```
|
||||
|
||||
**command**
|
||||
|
||||
- `deploy` 远程部署bitxhub和pier
|
||||
- `version` 查看组件版本信息
|
||||
- `init` 初始化配置
|
||||
|
@ -44,18 +48,24 @@ goduck [global options] command [command options] [arguments...]
|
|||
这些命令中,比较重要的是init(使用前一定要初始化)、status(查看当前运行组件状态)、bitxhub、pier。
|
||||
|
||||
**global options**
|
||||
|
||||
- `--repo value` goduck配置文件默认存储路径
|
||||
- `--help, -h`
|
||||
|
||||
## 2.2 关于BitXHub的操作
|
||||
### 2.2 关于BitXHub的操作
|
||||
|
||||
```
|
||||
goduck bitxhub command [command options] [arguments...]
|
||||
```
|
||||
### 2.2.1 启动BitXHub节点
|
||||
|
||||
#### 2.2.1 启动BitXHub节点
|
||||
|
||||
```
|
||||
goduck bitxhub start
|
||||
```
|
||||
|
||||
该命令会初始化并启动BitXHub节点,如果有已启动的BitXHub节点会执行失败。执行成功后提示如下:
|
||||
|
||||
```
|
||||
1 BitXHub nodes at /Users/fangbaozhu/.goduck/bitxhub are initialized successfully
|
||||
exec: /bin/bash /Users/fangbaozhu/.goduck/playground.sh up v1.4.0 solo binary 4
|
||||
|
@ -64,6 +74,7 @@ Start bitxhub solo by binary
|
|||
```
|
||||
|
||||
这是默认启动方式,也可以携带参数自定义启动,参数设置如下:
|
||||
|
||||
- `--type value` 配置类型,binary或docker (默认:“binary”)
|
||||
- `--mode value` 配置模式,solo或cluster (默认:“solo”)
|
||||
- `--num value` 节点个数,只在cluster 模式下作用(默认:4)
|
||||
|
@ -71,17 +82,21 @@ Start bitxhub solo by binary
|
|||
- `--version value` BitXHub版本 (default: "v1.4.0")
|
||||
- `--help, -h`
|
||||
|
||||
### 2.2.2 为BitXHub节点生成配置文件
|
||||
#### 2.2.2 为BitXHub节点生成配置文件
|
||||
|
||||
```
|
||||
goduck bitxhub config
|
||||
```
|
||||
|
||||
该命令默认初始化4个BitXHub节点。执行成功后当前文件夹会生成相关证书、私钥文件以及四个节点的文件夹,成功提示如下:
|
||||
|
||||
```
|
||||
initializing 4 BitXHub nodes at .
|
||||
4 BitXHub nodes at . are initialized successfully
|
||||
```
|
||||
|
||||
You can see the following in the current directory:
|
||||
|
||||
```
|
||||
.
|
||||
├── agency.cert
|
||||
|
@ -96,16 +111,19 @@ You can see the following in the current directory:
|
|||
```
|
||||
|
||||
可以携带参数自定义配置情况:
|
||||
|
||||
- `--num value` 节点个数,只在cluster 模式下作用(默认:4)
|
||||
- `--type value` 配置类型,binary或docker (默认:“binary”)
|
||||
- `--mode value` 配置模式,solo或cluster (默认:“solo”)
|
||||
- `--ips value` 节点IP, 默认所有节点为127.0.0.1, e.g. --ips "127.0.0.1" --ips "127.0.0.2" --ips "127.0.0.3" --ips "127.0.0.4"
|
||||
- `--ips value` 节点IP, 默认所有节点为127.0.0.1, e.g. --ips "127.0.0.1" --ips "127.0.0.2" --ips "127.0.0.3" --ips "
|
||||
127.0.0.4"
|
||||
- `--target value` 节点的配置文件位置(默认:当前目录)
|
||||
- `--tls` 是否启动TLS, 只在v1.4.0+版本有效 (default: false)
|
||||
- `--version value` BitXHub版本 (default: "v1.4.0")
|
||||
- `--help, -h`
|
||||
|
||||
### 2.2.3 关闭BitXHub节点
|
||||
#### 2.2.3 关闭BitXHub节点
|
||||
|
||||
```
|
||||
goduck bitxhub stop
|
||||
```
|
||||
|
@ -118,7 +136,8 @@ exec: /bin/bash /Users/fangbaozhu/.goduck/playground.sh down
|
|||
node pid:65246 exit
|
||||
```
|
||||
|
||||
### 2.2.4 清除BitXHub节点
|
||||
#### 2.2.4 清除BitXHub节点
|
||||
|
||||
```
|
||||
goduck bitxhub clean
|
||||
```
|
||||
|
@ -144,15 +163,18 @@ node pid:65686 exit
|
|||
remove bitxhub configure nodeSolo
|
||||
```
|
||||
|
||||
## 2.3 关于pier的操作
|
||||
### 2.3 关于pier的操作
|
||||
|
||||
```
|
||||
GoDuck pier command [command options] [arguments...]
|
||||
```
|
||||
|
||||
### 2.3.1 启动pier
|
||||
#### 2.3.1 启动pier
|
||||
|
||||
```
|
||||
goduck pier start
|
||||
```
|
||||
|
||||
参数设置如下:
|
||||
|
||||
- `--chain value` 应用链类型,ethereum 或 fabric(默认:ethereum)
|
||||
|
@ -168,6 +190,7 @@ goduck pier start
|
|||
- `--help, -h`
|
||||
|
||||
在使用此命令之前,您需要启动一个相同版本的BitxHub和一个需要pier连接的应用链。如果应用链或bitxhub不存在,pier将无法启动,打印提示如下:
|
||||
|
||||
```
|
||||
exec: /bin/bash run_pier.sh up -m ethereum -t docker -r .pier_ethereum -v v1.4.0 -c -p 44550 -a 8080
|
||||
===> Start pier of ethereum-v1.4.0 in docker...
|
||||
|
@ -178,6 +201,7 @@ exec: /bin/bash run_pier.sh up -m ethereum -t docker -r .pier_ethereum -v v1.4.
|
|||
```
|
||||
|
||||
如果要连接的应用链和BitxHub已经启动,且PIER已经启动成功,打印提示如下:
|
||||
|
||||
```
|
||||
exec: /bin/bash run_pier.sh up -m ethereum -t docker -r .pier_ethereum -v v1.0.0-rc1 -c -p 44550 -a 8080
|
||||
===> Start pier of ethereum-v1.0.0-rc1 in docker...
|
||||
|
@ -187,21 +211,24 @@ exec: /bin/bash run_pier.sh up -m ethereum -t docker -r .pier_ethereum -v v1.0.
|
|||
===> Start pier successfully
|
||||
```
|
||||
|
||||
### 2.3.2 关闭pier
|
||||
#### 2.3.2 关闭pier
|
||||
|
||||
```
|
||||
goduck pier stop
|
||||
```
|
||||
|
||||
该命令可以关闭pier,可以通过携带参数指定关闭那种类型应用链的pier
|
||||
|
||||
#### 2.3.3 清除Pier
|
||||
|
||||
### 2.3.3 清除Pier
|
||||
```
|
||||
goduck pier clean
|
||||
```
|
||||
|
||||
该命令可以清除pier的配置文件,如果pier还没有关闭,该命令会先关闭pier再清除其配置文件。
|
||||
|
||||
#### 2.3.4 生成Pier的配置文件
|
||||
|
||||
### 2.3.4 生成Pier的配置文件
|
||||
```
|
||||
goduck pier config
|
||||
```
|
||||
|
@ -209,10 +236,15 @@ goduck pier config
|
|||
- `--mode value` 配置模式, 直连模式或者中继模式(默认: "direct")
|
||||
- `--type value` 配置类型, binary或者docker (默认: "binary")
|
||||
- `--bitxhub value` BitXHub的地址,只在中继模式有效
|
||||
- `--validators value` BitXHub的验证人地址,只在中继模式有效, 例如 --validators "0xc7F999b83Af6DF9e67d0a37Ee7e900bF38b3D013" --validators "0x79a1215469FaB6f9c63c1816b45183AD3624bE34" --validators "0x97c8B516D19edBf575D72a172Af7F418BE498C37" --validators "0x97c8B516D19edBf575D72a172Af7F418BE498C37"
|
||||
- `--validators value` BitXHub的验证人地址,只在中继模式有效, 例如 --validators "0xc7F999b83Af6DF9e67d0a37Ee7e900bF38b3D013"
|
||||
--validators "0x79a1215469FaB6f9c63c1816b45183AD3624bE34" --validators "0x97c8B516D19edBf575D72a172Af7F418BE498C37"
|
||||
--validators "0x97c8B516D19edBf575D72a172Af7F418BE498C37"
|
||||
- `--port value` pier的端口号,只在直连模式有效 (默认: 5001)
|
||||
- `--peers value` 连接节点的地址,只在直连模式有效, 例如 --peers "/ip4/127.0.0.1/tcp/4001/p2p/Qma1oh5JtrV24gfP9bFrVv4miGKz7AABpfJhZ4F2Z5ngmL"
|
||||
- `--connectors value` 待连接节点的地址,只在v1.4.0+版本的union模式有效, 例如 --connectors "/ip4/127.0.0.1/tcp/4001/p2p/Qma1oh5JtrV24gfP9bFrVv4miGKz7AABpfJhZ4F2Z5ngmL" --connectors "/ip4/127.0.0.1/tcp/4002/p2p/Qma1oh5JtrV24gfP9bFrVv4miGKz7AABpfJhZ4F2Z5abcD"
|
||||
- `--peers value` 连接节点的地址,只在直连模式有效, 例如 --peers "
|
||||
/ip4/127.0.0.1/tcp/4001/p2p/Qma1oh5JtrV24gfP9bFrVv4miGKz7AABpfJhZ4F2Z5ngmL"
|
||||
- `--connectors value` 待连接节点的地址,只在v1.4.0+版本的union模式有效, 例如 --connectors "
|
||||
/ip4/127.0.0.1/tcp/4001/p2p/Qma1oh5JtrV24gfP9bFrVv4miGKz7AABpfJhZ4F2Z5ngmL" --connectors "
|
||||
/ip4/127.0.0.1/tcp/4002/p2p/Qma1oh5JtrV24gfP9bFrVv4miGKz7AABpfJhZ4F2Z5abcD"
|
||||
- `--appchain-type value` 应用链类型, ethereum或者fabric (默认: "ethereum")
|
||||
- `--appchain-IP value` 应用链IP地址 (默认: "127.0.0.1")
|
||||
- `--target value` 生成配置文件路径 (默认: ".")
|
||||
|
@ -220,6 +252,7 @@ goduck pier config
|
|||
- `--http-port value` pier的http端口号, 只在v1.4.0+版本有效 (默认: "44544")
|
||||
- `--pprof-port value` pier的pprof端口号 (默认: "44550")
|
||||
- `--api-port value` pier的api端口号 (默认: "8080")
|
||||
- `--cryptoPath value` crypto-config文件的路径,只对fabric链有效,例如 $HOME/crypto-config (default: "$HOME/.goduck/crypto-config")
|
||||
- `--cryptoPath value` crypto-config文件的路径,只对fabric链有效,例如 $HOME/crypto-config (default: "
|
||||
$HOME/.goduck/crypto-config")
|
||||
- `--version value` pier版本 (默认: "v1.4.0")
|
||||
- `--help, -h`
|
|
@ -0,0 +1 @@
|
|||
hljs.initHighlighting()
|
|
@ -4,13 +4,13 @@ Premo是BitXHub跨链系统测试框架,目前支持系统集成测试、接
|
|||
|
||||
## 安装
|
||||
|
||||
#### 获取源码
|
||||
### 获取源码
|
||||
|
||||
```shell
|
||||
git clone git@github.com:meshplus/premo.git
|
||||
```
|
||||
|
||||
#### 编译
|
||||
### 编译
|
||||
|
||||
进入premo工程目录:
|
||||
|
||||
|
@ -31,7 +31,7 @@ premo init
|
|||
premo [global options] command [command options] [arguments...]
|
||||
```
|
||||
|
||||
#### COMMANDS:
|
||||
### COMMANDS:
|
||||
|
||||
- `init` init config home for premo
|
||||
- `version` Premo version
|
||||
|
@ -43,7 +43,7 @@ premo [global options] command [command options] [arguments...]
|
|||
- `status` List the status of instantiated components
|
||||
- `help, h` Shows a list of commands or help for one command
|
||||
|
||||
#### GLOBAL OPTIONS:
|
||||
### GLOBAL OPTIONS:
|
||||
|
||||
- `--repo value` Premo storage repo path
|
||||
- `--help, -h` show help (default: false)
|
|
@ -1,15 +1,15 @@
|
|||
# Go SDK
|
||||
# 1 前言
|
||||
## 1 前言
|
||||
|
||||
此SDK文档面向BitXHub平台的应用开发者,提供BitXHub Go SDK的使用指南。
|
||||
|
||||
# 2 接口使用流程示例
|
||||
## 2 接口使用流程示例
|
||||
|
||||
## 2.1 基础流程示例
|
||||
### 2.1 基础流程示例
|
||||
|
||||
为了更好的理解接口的使用,本示例将从初始化Client,部署合约,调用合约和返回值解析这个大致流程作介绍,具体详细接口可参考第三章SDK文档。
|
||||
|
||||
### 2.1.1 初始化Client
|
||||
#### 2.1.1 初始化Client
|
||||
|
||||
配置集群网络地址、日志以及密钥。
|
||||
|
||||
|
@ -41,7 +41,7 @@ cli, err := New(
|
|||
)
|
||||
```
|
||||
|
||||
### 2.1.2 部署合约
|
||||
#### 2.1.2 部署合约
|
||||
|
||||
开发者需提供已经编译的`WebAssembly`文件。
|
||||
|
||||
|
@ -59,7 +59,7 @@ contract, err := ioutil.ReadFile("./testdata/example.wasm")
|
|||
addr, err := cli.DeployContract(contract, nil) // 第二个参数为跨链交易nonce,为nil时可以自动获取
|
||||
```
|
||||
|
||||
### 2.1.3 调用合约
|
||||
#### 2.1.3 调用合约
|
||||
|
||||
调用合约需传入合约地址、合约方法名和对应的参数。
|
||||
|
||||
|
@ -69,7 +69,7 @@ addr, err := cli.DeployContract(contract, nil) // 第二个参数为跨链交易
|
|||
result, err := cli.InvokeXVMContract(addr, "a", nil, Int32(1), Int32(2)) // 方法名为a,跨链交易nonce,传参1,传参2
|
||||
```
|
||||
|
||||
### 2.1.4 返回值解析
|
||||
#### 2.1.4 返回值解析
|
||||
|
||||
得到返回值结果后,获得状态码可以判断是否调用成功,若调用成功,解析返回值可看到调用之后的结果。
|
||||
|
||||
|
@ -81,7 +81,7 @@ if cli.CheckReceipt(result) {
|
|||
}
|
||||
```
|
||||
|
||||
### 2.1.5 完整示例
|
||||
#### 2.1.5 完整示例
|
||||
|
||||
```go
|
||||
//获取wasm合约字节数组
|
||||
|
@ -99,11 +99,11 @@ if cli.CheckReceipt(result) {
|
|||
}
|
||||
```
|
||||
|
||||
## 2.2 应用链管理流程示例
|
||||
### 2.2 应用链管理流程示例
|
||||
|
||||
本示例展示应用链管理流程中的注册、审核以及注销操作。
|
||||
|
||||
### 2.2.1 应用链注册
|
||||
#### 2.2.1 应用链注册
|
||||
|
||||
调用BVM合约的`Register`方法,向BitXHub注册应用链。
|
||||
|
||||
|
@ -139,7 +139,7 @@ ret, err := cli.InvokeBVMContract(constant.InterchainContractAddr.Address(), "Re
|
|||
}
|
||||
```
|
||||
|
||||
### 2.2.2 应用链审核
|
||||
#### 2.2.2 应用链审核
|
||||
|
||||
调用BVM合约的`Aduit`方法,向BitXHub审核应用链。
|
||||
|
||||
|
@ -155,7 +155,7 @@ ret, err = cli.InvokeBVMContract(constant.InterchainContractAddr.Address(),"Adui
|
|||
|
||||
```
|
||||
|
||||
### 2.2.3 应用链注销
|
||||
#### 2.2.3 应用链注销
|
||||
|
||||
调用BVM合约的`DeleteAppchain`方法,向BitXHub注销应用链。
|
||||
|
||||
|
@ -165,11 +165,11 @@ ret, err = cli.InvokeBVMContract(constant.InterchainContractAddr.Address(),"Adui
|
|||
ret, err = cli.InvokeBVMContract(constant.InterchainContractAddr.Address(), "DeleteAppchain", nil, rpcx.String(appchainID))
|
||||
```
|
||||
|
||||
## 2.3 验证规则使用示例
|
||||
### 2.3 验证规则使用示例
|
||||
|
||||
本示例展示验证规则中的注册、审核操作,以及WebAssembly合约示例。
|
||||
|
||||
### 2.3.1 验证规则注册
|
||||
#### 2.3.1 验证规则注册
|
||||
|
||||
调用BVM合约的`RegisterRule`方法,向应用链注册验证规则(WebAssembly合约),这里我们需要先注册应用链和部署验证规则合约,然后获取应用链ID和合约地址。
|
||||
|
||||
|
@ -179,7 +179,7 @@ ret, err = cli.InvokeBVMContract(constant.InterchainContractAddr.Address(), "Del
|
|||
ret, err = cli.InvokeBVMContract(constant.RoleContractAddr.Address(), "RegisterRule", nil, rpcx.String(chainAddr), rpcx.String(contractAddr))
|
||||
```
|
||||
|
||||
### 2.3.2 验证规则审核
|
||||
#### 2.3.2 验证规则审核
|
||||
|
||||
调用BVM合约的`Aduit`方法,向BitXHub审核验证规则。
|
||||
|
||||
|
@ -195,7 +195,7 @@ ret, err = cli.InvokeBVMContract(constant.RuleManagerContractAddr.Address(),"Adu
|
|||
|
||||
```
|
||||
|
||||
### 2.3.3 验证规则示例(WebAssembly合约, Fabric实例)
|
||||
#### 2.3.3 验证规则示例(WebAssembly合约, Fabric实例)
|
||||
|
||||
```rust
|
||||
extern crate protobuf;
|
||||
|
@ -233,11 +233,11 @@ pub fn verify(proof: &[u8], validator: &[u8]) -> bool {
|
|||
|
||||
|
||||
|
||||
# 3 SDK文档
|
||||
## 3 SDK文档
|
||||
|
||||
## 3.1 初始化和启动
|
||||
### 3.1 初始化和启动
|
||||
|
||||
### 3.1.1 初始化Client
|
||||
#### 3.1.1 初始化Client
|
||||
|
||||
用途:调用该接口获取与中继链交互的Client。
|
||||
|
||||
|
@ -249,7 +249,7 @@ pub fn verify(proof: &[u8], validator: &[u8]) -> bool {
|
|||
func New(opts ...Option) (*ChainClient, error)
|
||||
```
|
||||
|
||||
### 3.1.2 停止Client
|
||||
#### 3.1.2 停止Client
|
||||
|
||||
用途:调用该接口将与中继链交互的`Client`关闭。
|
||||
|
||||
|
@ -257,9 +257,9 @@ func New(opts ...Option) (*ChainClient, error)
|
|||
func Stop() error
|
||||
```
|
||||
|
||||
## 3.2 交易接口
|
||||
### 3.2 交易接口
|
||||
|
||||
### 3.2.1 发送交易
|
||||
#### 3.2.1 发送交易
|
||||
|
||||
用途:调用该接口向中继链发送交易,交易类型包括普通交易、跨链交易和智能合约。
|
||||
|
||||
|
@ -274,7 +274,7 @@ func SendTransaction(tx *pb.Transaction, opts *TransactOpts) (string, error)
|
|||
|
||||
|
||||
|
||||
### 3.2.2 查询交易回执
|
||||
#### 3.2.2 查询交易回执
|
||||
|
||||
用途:调用该接口向BitXHub查询交易回执。
|
||||
|
||||
|
@ -335,7 +335,7 @@ func TestChainClient_SendTransactionWithReceipt(t *testing.T) {
|
|||
}
|
||||
```
|
||||
|
||||
### 3.2.3 查询交易
|
||||
#### 3.2.3 查询交易
|
||||
|
||||
用途:调用该接口向BitXHub查询交易。
|
||||
|
||||
|
@ -349,7 +349,7 @@ func GetTransaction(hash string) (*proto.GetTransactionResponse, error)
|
|||
|
||||
|
||||
|
||||
## 3.3 合约接口
|
||||
### 3.3 合约接口
|
||||
|
||||
合约类型:
|
||||
|
||||
|
@ -357,7 +357,7 @@ func GetTransaction(hash string) (*proto.GetTransactionResponse, error)
|
|||
|
||||
- XVM:WebAssembly合约。
|
||||
|
||||
### 3.3.1 部署合约
|
||||
#### 3.3.1 部署合约
|
||||
|
||||
用途:调用该接口向BitXHub部署XVM合约,返回合约地址。
|
||||
|
||||
|
@ -370,7 +370,7 @@ func GetTransaction(hash string) (*proto.GetTransactionResponse, error)
|
|||
func DeployContract(contract []byte, opts *TransactOpts) (contractAddr *types.Address, err error)
|
||||
```
|
||||
|
||||
### 3.3.2 调用合约
|
||||
#### 3.3.2 调用合约
|
||||
|
||||
用途:该接口向中继链调用合约获取交易回执。
|
||||
|
||||
|
@ -442,9 +442,9 @@ func TestChainClient_InvokeBVMContract(t *testing.T) {
|
|||
}
|
||||
```
|
||||
|
||||
## 3.4 区块接口
|
||||
### 3.4 区块接口
|
||||
|
||||
### 3.4.1 查询区块
|
||||
#### 3.4.1 查询区块
|
||||
|
||||
参数:
|
||||
|
||||
|
@ -457,7 +457,7 @@ GetBlock(value string, blockType pb.GetBlockRequest_Type) (*pb.Block, error)
|
|||
|
||||
|
||||
|
||||
### 3.4.2 批量查询区块
|
||||
#### 3.4.2 批量查询区块
|
||||
|
||||
用途:批量查询区块,返回指定块高度范围(start到end)的区块信息。
|
||||
|
||||
|
@ -472,7 +472,7 @@ func GetBlocks(start uint64, end uint64) (*pb.GetBlocksResponse, error)
|
|||
|
||||
|
||||
|
||||
### 3.4.3 查询区块Meta
|
||||
#### 3.4.3 查询区块Meta
|
||||
|
||||
用途:返回当前链的高度和区块哈希。
|
||||
|
||||
|
@ -482,7 +482,7 @@ func GetChainMeta() (*pb.ChainMeta, error)
|
|||
|
||||
|
||||
|
||||
### 3.4.4 查询区块链状态
|
||||
#### 3.4.4 查询区块链状态
|
||||
|
||||
用途:返回当前区块链共识的状态(正常或者不正常)。
|
||||
|
||||
|
@ -492,9 +492,9 @@ func GetChainStatus() (*pb.Response, error)
|
|||
|
||||
|
||||
|
||||
## 3.5 订阅接口
|
||||
### 3.5 订阅接口
|
||||
|
||||
### 3.5.1 订阅事件
|
||||
#### 3.5.1 订阅事件
|
||||
|
||||
用途:调用该接口向中继链发起订阅事件的。
|
||||
|
||||
|
@ -565,7 +565,7 @@ func TestChainClient_Subscribe(t *testing.T) {
|
|||
```
|
||||
|
||||
|
||||
### 3.5.2 获取MerkleWrapper
|
||||
#### 3.5.2 获取MerkleWrapper
|
||||
|
||||
用途:获取指定区块高度范围的MerkleWrapper
|
||||
|
||||
|
@ -580,9 +580,9 @@ func TestChainClient_Subscribe(t *testing.T) {
|
|||
func GetInterchainTxWrappers(ctx context.Context, pid string, begin, end uint64, ch chan<- *pb.InterchainTxWrapper) error
|
||||
```
|
||||
|
||||
## 3.6 其它接口
|
||||
### 3.6 其它接口
|
||||
|
||||
### 3.6.1 查询节点网络信息
|
||||
#### 3.6.1 查询节点网络信息
|
||||
|
||||
用途:返回当前区块链网络的节点信息。
|
||||
|
||||
|
@ -590,7 +590,7 @@ func GetInterchainTxWrappers(ctx context.Context, pid string, begin, end uint64,
|
|||
func GetNetworkMeta() (*pb.Response, error)
|
||||
```
|
||||
|
||||
### 3.6.2 查询账户余额
|
||||
#### 3.6.2 查询账户余额
|
||||
|
||||
参数:
|
||||
|
||||
|
@ -600,7 +600,7 @@ func GetNetworkMeta() (*pb.Response, error)
|
|||
func GetAccountBalance(address string) (*pb.Response, error)
|
||||
```
|
||||
|
||||
### 3.6.3 删除节点
|
||||
#### 3.6.3 删除节点
|
||||
|
||||
用途:删除区块链网络中的节点(须往f+1个节点发送请求才可以删除)
|
||||
|
|
@ -1,15 +1,15 @@
|
|||
# Java SDK
|
||||
# 1 前言
|
||||
## 1 前言
|
||||
|
||||
此SDK文档面向BitXHub平台的应用开发者,提供BitXHub Java SDK的使用指南。
|
||||
|
||||
# 2 接口使用流程示例
|
||||
## 2 接口使用流程示例
|
||||
|
||||
## 2.1 基础流程示例
|
||||
### 2.1 基础流程示例
|
||||
|
||||
为了更好的理解接口的使用,本示例将从初始化Client,部署合约,调用合约和返回值解析这个大致流程作介绍,具体详细接口可参考第三章SDK文档。
|
||||
|
||||
### 2.1.1 初始化Client
|
||||
#### 2.1.1 初始化Client
|
||||
|
||||
使用默认的配置类初始化Grpc Client。
|
||||
|
||||
|
@ -32,7 +32,7 @@ Config config = Config.builder()
|
|||
GrpcClient client = new GrpcClientImpl(config);
|
||||
```
|
||||
|
||||
### 2.1.2 部署合约
|
||||
#### 2.1.2 部署合约
|
||||
|
||||
开发者需提供已经编译的`WebAssembly`文件。
|
||||
|
||||
|
@ -50,7 +50,7 @@ byte[] contractBytes = IOUtils.toByteArray(new FileInputStream("./example.wasm")
|
|||
String contractAddress = client.deployContract(contractBytes);
|
||||
```
|
||||
|
||||
### 2.1.3 调用合约
|
||||
#### 2.1.3 调用合约
|
||||
|
||||
调用合约需传入合约地址、合约方法名和对应的参数。
|
||||
|
||||
|
@ -61,7 +61,7 @@ ReceiptOuterClass.Receipt receipt =
|
|||
client.invokeXVMContract(contractAddress, "a", Types.i32(1), Types.i32(1)); \\方法名为a,传参1,传参2
|
||||
```
|
||||
|
||||
### 2.1.4 返回值解析
|
||||
#### 2.1.4 返回值解析
|
||||
|
||||
得到返回值结果后,获得状态码可以判断是否调用成功,若调用成功,解析返回值可看到调用之后的结果。
|
||||
|
||||
|
@ -73,7 +73,7 @@ if (receipt.getStatus() == ReceiptOuterClass.Receipt.Status.SUCCESS) {
|
|||
}
|
||||
```
|
||||
|
||||
### 2.1.5 完整示例
|
||||
#### 2.1.5 完整示例
|
||||
|
||||
```java
|
||||
//获取wasm字节数组
|
||||
|
@ -92,11 +92,11 @@ if (receipt.getStatus() == ReceiptOuterClass.Receipt.Status.SUCCESS) {
|
|||
}
|
||||
```
|
||||
|
||||
## 2.2 应用链管理流程示例
|
||||
### 2.2 应用链管理流程示例
|
||||
|
||||
本示例展示应用链管理流程中的注册、审核以及注销操作。
|
||||
|
||||
### 2.2.1 应用链注册
|
||||
#### 2.2.1 应用链注册
|
||||
|
||||
调用BVM合约的`Register`方法,向BitXHub注册应用链。
|
||||
|
||||
|
@ -132,7 +132,7 @@ ReceiptOuterClass.Receipt receipt = client.invokeBVMContract(BVMAddr.APPCHAIN_MA
|
|||
}
|
||||
```
|
||||
|
||||
### 2.2.2 应用链审核
|
||||
#### 2.2.2 应用链审核
|
||||
|
||||
调用BVM合约的`Audit`方法,向BitXHub审核应用链。
|
||||
|
||||
|
@ -146,7 +146,7 @@ ArgOuterClass.Arg[] adultArgs = Types.toArgArray(
|
|||
ReceiptOuterClass.Receipt adultReceipt = client.invokeBVMContract(BVMAddr.APPCHAIN_MANAGER_CONTRACT_ADDR, "Audit", adultArgs);
|
||||
```
|
||||
|
||||
### 2.2.3 应用链注销
|
||||
#### 2.2.3 应用链注销
|
||||
|
||||
调用BVM合约的`DeleteAppchain`方法,向BitXHub注销应用链。
|
||||
|
||||
|
@ -158,11 +158,11 @@ ArgOuterClass.Arg[] deleteArgs = Types.toArgArray(
|
|||
ReceiptOuterClass.Receipt deleteReceipt = client.invokeBVMContract(BVMAddr.APPCHAIN_MANAGER_CONTRACT_ADDR, "DeleteAppchain", deleteArgs);
|
||||
```
|
||||
|
||||
## 2.3 验证规则使用示例
|
||||
### 2.3 验证规则使用示例
|
||||
|
||||
本示例展示验证规则中的注册、审核操作,以及WebAssembly合约示例。
|
||||
|
||||
### 2.3.1 验证规则注册
|
||||
#### 2.3.1 验证规则注册
|
||||
|
||||
调用BVM合约的`RegisterRule`方法,向应用链注册验证规则(WebAssembly合约),这里我们需要先注册应用链和部署验证规则合约,然后获取应用链ID和合约地址。
|
||||
|
||||
|
@ -175,7 +175,7 @@ ArgOuterClass.Arg[] ruleArgs = Types.toArgArray(
|
|||
ReceiptOuterClass.Receipt ruleReceipt = client.invokeBVMContract(BVMAddr.RULE_MANAGER_CONTRACT_ADDR, "RegisterRule", ruleArgs);
|
||||
```
|
||||
|
||||
### 2.3.2 验证规则审核
|
||||
#### 2.3.2 验证规则审核
|
||||
|
||||
调用BVM合约的`Audit`方法,向BitXHub审核验证规则。
|
||||
|
||||
|
@ -189,7 +189,7 @@ ArgOuterClass.Arg[] adultArgs = Types.toArgArray(
|
|||
ReceiptOuterClass.Receipt adultReceipt = client.invokeBVMContract(BVMAddr.RULE_MANAGER_CONTRACT_ADDR, "Audit", adultArgs);
|
||||
```
|
||||
|
||||
### 2.3.3 验证规则示例(WebAssembly合约, Fabric实例)
|
||||
#### 2.3.3 验证规则示例(WebAssembly合约, Fabric实例)
|
||||
|
||||
```rust
|
||||
extern crate protobuf;
|
||||
|
@ -222,11 +222,11 @@ pub fn verify(proof: &[u8], validator: &[u8]) -> bool {
|
|||
|
||||
|
||||
|
||||
# 3 SDK文档
|
||||
## 3 SDK文档
|
||||
|
||||
## 3.1 初始化
|
||||
### 3.1 初始化
|
||||
|
||||
### 3.1.1 初始化Client
|
||||
#### 3.1.1 初始化Client
|
||||
|
||||
用途:调用该接口获取与BitXHub交互的Client。
|
||||
|
||||
|
@ -238,7 +238,7 @@ GrpcClient client = new GrpcClientImpl(Config.defaultConfig());
|
|||
|
||||
返回值:与BitXHub交互的`Client`。
|
||||
|
||||
### 3.1.2 停止Client
|
||||
#### 3.1.2 停止Client
|
||||
|
||||
用途:调用该接口将与BitXHub交互的`Client`关闭。
|
||||
|
||||
|
@ -246,9 +246,9 @@ GrpcClient client = new GrpcClientImpl(Config.defaultConfig());
|
|||
public void stop() throws InterruptedException
|
||||
```
|
||||
|
||||
## 3.2 交易接口
|
||||
### 3.2 交易接口
|
||||
|
||||
### 3.2.1 发送交易
|
||||
#### 3.2.1 发送交易
|
||||
|
||||
用途:调用该接口向BitXHub发送交易,交易类型包括普通交易、跨链交易和智能合约交易。
|
||||
|
||||
|
@ -277,7 +277,7 @@ public void sendTransaction() {
|
|||
}
|
||||
```
|
||||
|
||||
### 3.2.2 查询交易回执
|
||||
#### 3.2.2 查询交易回执
|
||||
|
||||
参数:
|
||||
|
||||
|
@ -287,7 +287,7 @@ public void sendTransaction() {
|
|||
ReceiptOuterClass.Receipt getReceipt(String hash);
|
||||
```
|
||||
|
||||
### 3.2.3 查询交易
|
||||
#### 3.2.3 查询交易
|
||||
|
||||
参数:
|
||||
|
||||
|
@ -297,7 +297,7 @@ ReceiptOuterClass.Receipt getReceipt(String hash);
|
|||
Broker.GetTransactionResponse getTransaction(String hash);
|
||||
```
|
||||
|
||||
## 3.3 合约接口
|
||||
### 3.3 合约接口
|
||||
|
||||
合约类型:
|
||||
|
||||
|
@ -305,7 +305,7 @@ Broker.GetTransactionResponse getTransaction(String hash);
|
|||
|
||||
- XVM:WebAssembly合约
|
||||
|
||||
### 3.3.1 部署合约
|
||||
#### 3.3.1 部署合约
|
||||
|
||||
用途:调用该接口向BitXHub部署XVM合约。
|
||||
|
||||
|
@ -317,7 +317,7 @@ Broker.GetTransactionResponse getTransaction(String hash);
|
|||
String deployContract(byte[] contract);
|
||||
```
|
||||
|
||||
### 3.3.2 调用合约
|
||||
#### 3.3.2 调用合约
|
||||
|
||||
用途:调用该接口向BitXHub调用BVM或者XVM合约。
|
||||
|
||||
|
@ -344,9 +344,9 @@ public void invokeContract() throws IOException {
|
|||
}
|
||||
```
|
||||
|
||||
## 3.4 区块接口
|
||||
### 3.4 区块接口
|
||||
|
||||
### 3.4.1 查询区块
|
||||
#### 3.4.1 查询区块
|
||||
|
||||
参数:
|
||||
|
||||
|
@ -359,7 +359,7 @@ BlockOuterClass.Block getBlock(String value, Broker.GetBlockRequest.Type type);
|
|||
|
||||
|
||||
|
||||
### 3.4.2 批量查询区块
|
||||
#### 3.4.2 批量查询区块
|
||||
|
||||
用途:批量查询区块,返回指定块高度范围(start到end)的区块信息。
|
||||
|
||||
|
@ -374,7 +374,7 @@ Broker.GetBlocksResponse getBlocks(Long start, Long end);
|
|||
|
||||
|
||||
|
||||
### 3.4.3 查询区块Meta
|
||||
#### 3.4.3 查询区块Meta
|
||||
|
||||
用途:返回当前链的高度和区块哈希。
|
||||
|
||||
|
@ -384,7 +384,7 @@ Chain.ChainMeta getChainMeta();
|
|||
|
||||
|
||||
|
||||
### 3.4.4 查询区块链状态
|
||||
#### 3.4.4 查询区块链状态
|
||||
|
||||
用途:返回当前区块链共识的状态(正常或者不正常)。
|
||||
|
||||
|
@ -394,9 +394,9 @@ Broker.Response getChainStatus();
|
|||
|
||||
|
||||
|
||||
## 3.5 订阅接口
|
||||
### 3.5 订阅接口
|
||||
|
||||
### 3.5.1 订阅事件
|
||||
#### 3.5.1 订阅事件
|
||||
|
||||
用途:调用该接口向BitXHub发起订阅事件。
|
||||
|
||||
|
@ -444,9 +444,9 @@ public void subscribe() throws InterruptedException {
|
|||
|
||||
|
||||
|
||||
## 3.6 其它接口
|
||||
### 3.6 其它接口
|
||||
|
||||
### 3.6.1 查询节点网络信息
|
||||
#### 3.6.1 查询节点网络信息
|
||||
|
||||
用途:返回当前区块链网络的节点信息。
|
||||
|
||||
|
@ -454,7 +454,7 @@ public void subscribe() throws InterruptedException {
|
|||
Broker.Response getNetworkMeta();
|
||||
```
|
||||
|
||||
### 3.6.2 查询账户余额
|
||||
#### 3.6.2 查询账户余额
|
||||
|
||||
参数:
|
||||
|
|
@ -1,14 +1,14 @@
|
|||
# Js SDK
|
||||
# 1 前言
|
||||
## 1 前言
|
||||
|
||||
此SDK文档面向BitXHub平台的应用开发者,提供BitXHub JS SDK的使用指南。
|
||||
|
||||
# 2 接口使用流程示例
|
||||
## 2 接口使用流程示例
|
||||
|
||||
为了更好的理解接口的使用,本示例将从初始化Client,部署合约,调用合约和返回值解析这个大致流程作介绍,具体详细接口可参考第三章SDK文档。
|
||||
|
||||
## 2.1 基本流程
|
||||
### 2.1.1 安装并初始化Client
|
||||
### 2.1 基本流程
|
||||
#### 2.1.1 安装并初始化Client
|
||||
|
||||
可以通过npm安装JS SDK并引入到JS的项目中
|
||||
```shell
|
||||
|
@ -60,7 +60,7 @@ let contract = fs.readFileSync("./testdata/example.wasm");
|
|||
let address = await cli.DeployContract(contract)
|
||||
```
|
||||
|
||||
### 2.1.3 调用合约
|
||||
#### 2.1.3 调用合约
|
||||
|
||||
调用合约需传入合约地址、合约方法名和对应的参数。
|
||||
|
||||
|
@ -71,7 +71,7 @@ result = cli.InvokeContract(0, address, "a", PbType.pbInt32(1), PbType.pbInt32(2
|
|||
//第一个参数指定调用XVM合约还是BVM合约,第二个参数是合约地址, 方法名为a,传参1,传参2
|
||||
```
|
||||
|
||||
### 2.1.4 完整示例
|
||||
#### 2.1.4 完整示例
|
||||
|
||||
```javascript
|
||||
import { fs } from 'fs';
|
||||
|
@ -90,11 +90,11 @@ result = cli.InvokeContract(1, address, "a", PbType.pbInt32(1), PbType.pbInt32(2
|
|||
console.log(result);
|
||||
```
|
||||
|
||||
## 2.2 应用链管理流程示例
|
||||
### 2.2 应用链管理流程示例
|
||||
|
||||
本示例展示应用链管理流程中的注册、审核以及注销操作。
|
||||
|
||||
### 2.2.1 应用链注册
|
||||
#### 2.2.1 应用链注册
|
||||
|
||||
调用BVM合约的`Register`方法,向BitXHub注册应用链。
|
||||
|
||||
|
@ -124,7 +124,7 @@ let ret = cli.InvokeContract(0, InterchainContractAddr, "Register", PbType.pbStr
|
|||
}
|
||||
```
|
||||
|
||||
### 2.2.2 应用链审核
|
||||
#### 2.2.2 应用链审核
|
||||
|
||||
调用BVM合约的`Aduit`方法,向BitXHub审核应用链。
|
||||
|
||||
|
@ -136,7 +136,7 @@ let ret = cli.InvokeContract(0, InterchainContractAddr, "Aduit", PbType.pbString
|
|||
);
|
||||
```
|
||||
|
||||
### 2.2.3 应用链注销
|
||||
#### 2.2.3 应用链注销
|
||||
|
||||
调用BVM合约的`DeleteAppchain`方法,向BitXHub注销应用链。
|
||||
|
||||
|
@ -146,11 +146,11 @@ let ret = cli.InvokeContract(0, InterchainContractAddr, "Aduit", PbType.pbString
|
|||
let ret = cli.InvokeContract(0, InterchainContractAddr, "DeleteAppchain", PbType.pbString(address));
|
||||
```
|
||||
|
||||
## 2.3 验证规则使用示例
|
||||
### 2.3 验证规则使用示例
|
||||
|
||||
本示例展示验证规则中的注册、审核操作,以及WebAssembly合约示例。
|
||||
|
||||
### 2.3.1 验证规则注册
|
||||
#### 2.3.1 验证规则注册
|
||||
|
||||
调用BVM合约的`RegisterRule`方法,向应用链注册验证规则(WebAssembly合约),这里我们需要先注册应用链和部署验证规则合约,然后获取应用链ID和合约地址。
|
||||
|
||||
|
@ -160,7 +160,7 @@ let ret = cli.InvokeContract(0, InterchainContractAddr, "DeleteAppchain", PbType
|
|||
let ret = cli.InvokeContract(0, RoleContractAddr, "RegisterRule", PbType.pbString(chainAddr), PbType.pbString(contractAddr));
|
||||
```
|
||||
|
||||
### 2.3.2 验证规则审核
|
||||
#### 2.3.2 验证规则审核
|
||||
|
||||
调用BVM合约的`Aduit`方法,向BitXHub审核验证规则。
|
||||
|
||||
|
@ -172,7 +172,7 @@ let ret = cli.InvokeContract(0, RoleContractAddr, "Aduit", PbType.pbString(chain
|
|||
);
|
||||
```
|
||||
|
||||
### 2.3.3 验证规则示例(WebAssembly合约, Fabric实例)
|
||||
#### 2.3.3 验证规则示例(WebAssembly合约, Fabric实例)
|
||||
|
||||
```rust
|
||||
extern crate protobuf;
|
||||
|
@ -210,11 +210,11 @@ pub fn verify(proof: &[u8], validator: &[u8]) -> bool {
|
|||
|
||||
|
||||
|
||||
# 3 SDK文档
|
||||
## 3 SDK文档
|
||||
|
||||
## 3.1 交易接口
|
||||
### 3.1 交易接口
|
||||
|
||||
### 3.1.1 发送交易
|
||||
#### 3.1.1 发送交易
|
||||
|
||||
用途:调用该接口向中继链发送交易,交易类型包括普通交易、跨链交易和智能合约。
|
||||
|
||||
|
@ -228,7 +228,7 @@ function SendTransaction(transaction)
|
|||
|
||||
|
||||
|
||||
### 3.1.2 查询交易回执
|
||||
#### 3.1.2 查询交易回执
|
||||
|
||||
用途:调用该接口向BitXHub查询交易回执。
|
||||
|
||||
|
@ -240,7 +240,7 @@ function SendTransaction(transaction)
|
|||
function GetReceipt(hash)
|
||||
```
|
||||
|
||||
### 3.1.3 查询交易
|
||||
#### 3.1.3 查询交易
|
||||
|
||||
用途:调用该接口向BitXHub查询交易。
|
||||
|
||||
|
@ -254,7 +254,7 @@ function GetTransaction(hash)
|
|||
|
||||
|
||||
|
||||
## 3.2 合约接口
|
||||
### 3.2 合约接口
|
||||
|
||||
合约类型:
|
||||
|
||||
|
@ -262,7 +262,7 @@ function GetTransaction(hash)
|
|||
|
||||
- XVM:WebAssembly合约。
|
||||
|
||||
### 3.2.1 部署合约
|
||||
#### 3.2.1 部署合约
|
||||
|
||||
用途:调用该接口向BitXHub部署XVM合约,返回合约地址。
|
||||
|
||||
|
@ -275,7 +275,7 @@ function GetTransaction(hash)
|
|||
function DeployContract(ctx)
|
||||
```
|
||||
|
||||
### 3.2.2 调用合约
|
||||
#### 3.2.2 调用合约
|
||||
|
||||
用途:该接口向中继链调用合约获取交易回执。
|
||||
|
||||
|
@ -294,9 +294,9 @@ function DeployContract(ctx)
|
|||
function InvokeContract(vmType, address, method, ...args)
|
||||
```
|
||||
|
||||
## 3.3 区块接口
|
||||
### 3.3 区块接口
|
||||
|
||||
### 3.3.1 查询区块
|
||||
#### 3.3.1 查询区块
|
||||
|
||||
参数:
|
||||
|
||||
|
@ -309,7 +309,7 @@ function GetBlock(type, value)
|
|||
|
||||
|
||||
|
||||
### 3.3.2 批量查询区块
|
||||
#### 3.3.2 批量查询区块
|
||||
|
||||
用途:批量查询区块,返回指定块高度范围(start到end)的区块信息。
|
||||
|
|
@ -6,3 +6,40 @@
|
|||
width: auto;
|
||||
height: 2rem;
|
||||
}
|
||||
|
||||
.md-sidebar--secondary .md-nav {
|
||||
font-size: 13px;
|
||||
}
|
||||
|
||||
:root {
|
||||
font-size: 123%;
|
||||
}
|
||||
|
||||
.md-content .md-typeset h1 {
|
||||
color: inherit;
|
||||
}
|
||||
|
||||
.md-content h1, .md-content h2, .md-content h3 {
|
||||
font-weight: 600;
|
||||
}
|
||||
|
||||
.md-typeset__table {
|
||||
/*width: 100%;*/
|
||||
}
|
||||
|
||||
.md-typeset pre {
|
||||
margin: 2em 0;
|
||||
}
|
||||
|
||||
.md-typeset pre>code {
|
||||
padding: 1.5em 2em;
|
||||
border-radius: 4px;
|
||||
}
|
||||
|
||||
.md-typeset a {
|
||||
font-weight: 600;
|
||||
}
|
||||
|
||||
.md-content__inner {
|
||||
margin-bottom: 3.5rem;
|
||||
}
|
|
@ -4,8 +4,70 @@ repo_name: meshplus/bitxhub
|
|||
extra_css:
|
||||
- stylesheets/extra.css
|
||||
theme:
|
||||
logo: /assets/logo.png
|
||||
logo: assets/logo.png
|
||||
name: material
|
||||
features:
|
||||
- navigation.tabs
|
||||
- navigation.sections
|
||||
font:
|
||||
text: Roboto
|
||||
code: Roboto Mono
|
||||
palette:
|
||||
scheme: blue
|
||||
accent: blue
|
||||
primary: red
|
||||
scheme: default
|
||||
accent: red
|
||||
|
||||
version:
|
||||
provider: mike
|
||||
|
||||
markdown_extensions:
|
||||
- pymdownx.highlight:
|
||||
linenums: false
|
||||
use_pygments: true
|
||||
- pymdownx.superfences
|
||||
|
||||
#extra_javascript:
|
||||
# - https://cdnjs.cloudflare.com/ajax/libs/highlight.js/10.1.1/highlight.min.js
|
||||
# - javascripts/config.js
|
||||
#extra_css:
|
||||
# - https://cdnjs.cloudflare.com/ajax/libs/highlight.js/10.1.1/styles/default.min.css
|
||||
|
||||
nav:
|
||||
- Home:
|
||||
- 快速开始: bitxhub/quick_start.md
|
||||
- 产品介绍:
|
||||
- 产品优势: bitxhub/introduction/advantage.md
|
||||
- 技术架构: bitxhub/introduction/arch.md
|
||||
- 基本概念: bitxhub/introduction/conception.md
|
||||
- 应用场景: bitxhub/introduction/scenaries.md
|
||||
- 跨链服务平台介绍: bitxhub/introduction/summary.md
|
||||
- 开发手册:
|
||||
- 共识算法插件: bitxhub/dev/consensus.md
|
||||
- 跨链合约: bitxhub/dev/cross_contract.md
|
||||
- 应用链插件编写: bitxhub/dev/plugin.md
|
||||
- 验证规则编写: bitxhub/dev/rule.md
|
||||
- 设计文档:
|
||||
- 共识算法插件方案: bitxhub/dev/design/consensus_plugin.md
|
||||
- 跨链事务方案: bitxhub/dev/design/interchain_transaction.md
|
||||
- 跨链网关设计方案: bitxhub/dev/design/pier.md
|
||||
- 隐私保护方案: bitxhub/dev/design/privacy_protection.md
|
||||
- 使用手册:
|
||||
- 硬件环境: bitxhub/usage/env.md
|
||||
- 中继链部署: bitxhub/usage/deploy.md
|
||||
- 中继跨链部署: bitxhub/usage/inter_relay_deploy.md
|
||||
- 跨链网关直连模式部署: bitxhub/usage/pier_direct_mode_deploy.md
|
||||
- 版本发布记录:
|
||||
- BitXHub v1.0.0: bitxhub/changelog/bitxhub_v1.0.0.md
|
||||
- BitXHub v1.3.0: bitxhub/changelog/bitxhub_v1.3.0.md
|
||||
- BitXHub v1.4.0: bitxhub/changelog/bitxhub_v1.4.0.md
|
||||
- BitXHub v1.5.0: bitxhub/changelog/bitxhub_v1.5.0.md
|
||||
- FAQ: bitxhub/faq.md
|
||||
- 加入我们: bitxhub/join_us.md
|
||||
- 社区介绍: bitxhub/community_introduction.md
|
||||
- 小工具:
|
||||
- Goduck运维工具: goduck/index.md
|
||||
- Premo测试工具: premo/usage.md
|
||||
- SDK文档:
|
||||
- GoSDK使用文档: sdk/gosdk.md
|
||||
- JavaSDK使用: sdk/javasdk.md
|
||||
- JsSDK使用文档: sdk/jssdk.md
|
||||
|
|
Loading…
Reference in New Issue