9. 开放网络介绍

9.1. 开放网络集成环境

XuperChain 开放网络是基于百度自研底层技术搭建的区块链基础服务网络,符合中国标准,超级节点遍布全国,区块链网络完全开放,为用户提供区块链快速部署和运行的环境,最低2元钱就用上的区块链服务,让信任链接更加便利。

XuperChain 开放网络为开发者提供了合约开发、编译、部署、管理的一站式可视化集成环境,下面介绍如何在开放网络上开发部署智能合约。

../_images/xuperos-dashboard.png

9.1.1. 账户注册

  1. 在 XuperChain 官网 https://xchain.baidu.com/ 使用百度账号登录,如果没有百度账号请先注册。

  2. 进入 XuperChain 开放网络控制台,第一次登录的用户,平台会为用户创建区块链账户,请按照创建账户指引文档完成安全码设置,并记录自己的助记词和私钥。

../_images/xuperos-create-account.png

9.1.2. 创建合约账户

  1. 在工作台,选择「开放网络 —> 合约管理」,点击「创建合约账户」

  2. 进入创建合约账户页,输入安全码后点击「确认创建」,系统自动生成账户名称后,即创建完毕

../_images/xuperos-no-account.png

9.1.3. 合约开发和部署

  1. 在工作台,选择「开放网络 —> 合约管理」,点击「创建智能合约」

  2. 进入新页面,按要求填写基本信息、编辑合约代码,编译成功后点击「安装」,即可进入合约安装(部署)流程。 合约代码编译有两种方式:

    • 模板合约;选择模板后,只需在模板代码中填写相关参数即可(参考模板详情完成参数填写)

    • 自定义合约;在编辑器内完成C++语言的合约编辑即可

../_images/xuperos-create-contract.png
  1. 进入安装流程,用户需按合约代码完成预执行操作。点击「开始验证」,执行通过会进入安装确认页

    • 模板合约;系统会提供模板的函数,只需填写参数即可(可参考模板详情)

    • 自定义合约;根据页面操作说明,完成函数、参数填写

../_images/xuperos-install-contract.png
  1. 进入确认安装页,页面显示安装合约预计消耗的余额。点击「安装合约」将合约上链,上链过程需要等待10S左右。安装完成后,在合约管理列表中可看到合约状态变更为‘安装成功’,即该合约已完成安装。

9.1.4. 合约调用

开放网络上的部署的合约,除了可以在页面上调用还支持使用 SDK 调用。目前开放网络支持通过Go和Javascript、Java SDK调用智能合约,建议使用 Go SDK 或者 JavaScript SDK,Java SDK 目前功能较少。

9.2. 使用 SDK 连接开放网络

下载 SDK 请参考 Go SDKJava SDKJS SDK 建议使用最新版本。

使用 SDK 连接开放网络整体流程都是一样的:

  1. 下载私钥;

  2. 使用 SDK 加载私钥;

  3. 修改配置文件连接开放网络;

  4. 使用 SDK 连接开放网络节点。

9.2.1. 下载个人私钥

在开放网络上创建账户后,会为用户生成加密的私钥,使用时需要使用密码解密后才可使用。

登录到开放网络后,通过控制台可以下载个人账户的私钥文件

../_images/xuperos-private-key-dl.png

9.2.2. 使用 Go SDK 连接开放网络

9.2.2.1. 加载私钥

下载私钥文件后,私钥文件是加密的,使用时需要使用密码解密才可发送交易。

注解

目前开放网络不支持本次生成账户并发送交易,只能在开放网络注册账户后,使用对应的私钥才可以发送交易。

 1package main
 2
 3import (
 4    "fmt"
 5
 6    "github.com/xuperchain/xuper-sdk-go/v2/account"
 7)
 8
 9func accountExample() {
10    privateKeyFile := "your private key file path"
11    password := "your password"
12    yourAccount, err := account.GetAccountFromFile(privateKeyFile, password)
13    if err != nil {
14        fmt.Println(err)
15        return
16    }
17
18    fmt.Println(yourAccount.Address)
19}

9.2.2.2. 修改配置文件

在 Go SDK 中的 conf 目录下有两个配置文件:sdk.yaml 和 sdk.testnet.yaml,一个是连接开放网络使用,另外一个连接开放测试网络使用。

Go SDK 使用配置文件有两种方式:

  1. 默认加载 ./conf/sdk.yaml;

  2. 指定配置文件。

默认加载是指你的项目引用的 Go SDK 后,在运行目录的 ./conf 目录下,如果存在 sdk.yaml 文件,则 Go SDK 使用此配置文件,没有则用默认配置文件(不支持连接开放网络)。

指定配置文件是指在你的项目中,使用 Go SDK 创建 client 时,可以指定任意的配置文件(yaml 格式),示例代码如下:

 1func clientConfigExample() {
 2    // 39.156.69.83:37100 为开放网络节点地址。
 3    // xuper.WithConfigFile("yourSDK.yaml") 设置使用的配置文件。
 4    xclient, err := xuper.New("39.156.69.83:37100", xuper.WithConfigFile("yourSDK.yaml"))
 5    if err != nil {
 6        fmt.Println(err)
 7        return
 8    }
 9
10    status, err := xclient.QuerySystemStatus()
11    if err != nil {
12        fmt.Println(err)
13        return
14    }
15    fmt.Println(status)
16}

以上两种方式都可以设置配置文件,配置文件中的内容如下(在 go sdk 的 conf 目录下已经有此文件模板,需要修改成如下内容):

 1# endorseService Info
 2endorseServiceHost: "39.156.69.83:37100"
 3complianceCheck:
 4# 是否需要进行合规性背书
 5isNeedComplianceCheck: true
 6# 是否需要支付合规性背书费用
 7isNeedComplianceCheckFee: true
 8# 合规性背书费用
 9complianceCheckEndorseServiceFee: 400
10# 支付合规性背书费用的收款地址
11complianceCheckEndorseServiceFeeAddr: aB2hpHnTBDxko3UoP2BpBZRujwhdcAFoT
12# 如果通过合规性检查,签发认证签名的地址
13complianceCheckEndorseServiceAddr: jknGxa6eyum1JrATWvSJKW3thJ9GKHA9n
14#创建平行链所需要的最低费用
15minNewChainAmount: "100"
16crypto: "xchain"
17txVersion: 1

此时你的 SDK client 便连接到了开放网络,可以进行部署、调用合约了,具体接口文档参考 Go SDK 使用文档

9.2.3. 使用 JS SDK 连接开放网络

JS SDK 连接开放网络与 Go SDK 有些许不同之处,主要在配置文件,JS SDK 不需要配置文件,只需要在创建客户端时指定参数即可。

9.2.3.1. 加载私钥

加载私钥时同样需要指定密码,示例如下:

1// 第一个参数为密钥的密码,第二个参数为下载的私钥文件内容。
2const yourAccount = xsdk.import("yourPassword", "yourPrivateKeyString", true)
3console.log(yourAccount.address)

9.2.3.2. 创建开放网络 client

JS SDK 不需要指定配置文件,在创建客户端时,指定需要的参数即可,内容与 Go SDK 中使用的配置文件内容类似,示例如下:

 1const xsdk = XuperSDK.getInstance({
 2    node: 'https://xuper.baidu.com/nodeapi',
 3    chain: 'xuper',
 4    env :{
 5        node: {
 6            disableGRPC: true // 代表禁用 grpc,使用 http。
 7        }
 8    },
 9    plugins: [
10        Endorsement({
11            transfer: {
12                server: "https://xuper.baidu.com/nodeapi", // https 地址
13                fee: "400", // 背书手续费。
14                endorseServiceCheckAddr:"jknGxa6eyum1JrATWvSJKW3thJ9GKHA9n", // 可以看到这里的地址和 Go SDK 中配置文件的对应地址相同。
15                endorseServiceFeeAddr: "aB2hpHnTBDxko3UoP2BpBZRujwhdcAFoT"
16            },
17            makeTransaction: {
18                server: "https://xuper.baidu.com/nodeapi",
19                fee: "400",
20                endorseServiceCheckAddr: "jknGxa6eyum1JrATWvSJKW3thJ9GKHA9n",
21                endorseServiceFeeAddr: "aB2hpHnTBDxko3UoP2BpBZRujwhdcAFoT"
22            }
23        })
24    ]
25});

创建 client 后便可以发送交易,使用请参考 JS SDK 使用文档

9.2.4. 使用 Java SDK 连接开放网络

Java SDK 连接开放网络和 Go SDK 有些类似,主要也是通过配置文件。

9.2.4.1. 加载私钥

使用 Java SDK 同样需要加载你的私钥文件:

1Account account = Account.getAccountFromFile("yourPrivateKeyFile", "yourPassword");

9.2.4.2. 设置配置文件

连接开放网络时同样需要指定 Java SDK 需要使用的配置文件(没错,和 Go SDK 的配置文件相同)。

1Config.setConfigPath("./conf/sdk.yaml");

此时便可以使用 Java SDK 连接开放网络,详细操作参考 创建 client 后便可以发送交易,使用请参考 Java SDK 使用文档