百度联盟链XuperChain-06-开放网络实战

8 超级链开放网络

基于百度完全自主研发的开源技术搭建的区块链基础服务网络,由分布在全国的超级联盟节点组成,符合中国标准,为用户提供区块链应用快速部署和运行的环境,以及计算和存储等资源的弹性付费能力,直接降低用户部署和运维成本,让信任链接更加便利。

开放网络需要经过实名认证,目前支持C++和Solidity合约,不支持合约升级不支持合约内获取时间戳,交易需要经过背书服务。

  1. 合约实现 code.Contract 接囗
  2. 通过结构体方法来定义合约方法
  3. 用 drverserve 启动合约
  4. 调用 ctx 上的方法完成功能
    1. ctx.GetObject 读取数据
    2. ctx.PutObject 写入数据
    3. ctx.Args 获取调用参数
    4. code.OK 返回结果
    5. code.Error 返回错误

9 XuperIDE使用

  1. 创建密钥对
  2. 启动节点
  3. 区块浏览器
  4. 创建智能合约账户
  5. 创建智能合约项目
  6. 编译智能合约项目
  7. 部署智能合约项目
  8. 调用合约

10 SDK调用合约

  1. 加载Account私钥
  2. 设置合约账户
  3. 初始化客户端
  4. 调用Increase方法
  5. Invoke调用Ge方法
  6. Query调用Get方法
  7. 解析返回值
go 复制代码
func main() {
    // 从明文文件中获取账户信息,路径为"F:/keys/"
    acc, err := account.GetAccountFromPlainFile("F:/keys/")
    if err != nil {
        fmt.Println("Failed to get account:", err)
        return
    }
    
    // 注释掉设置合约账户的代码
    // acc.SetContractAccount("XC11111111111111@xuper")
    
    // 打印账户地址
    fmt.Println(acc.Address)
    
    // 节点地址
    node := "192.168.1.111:37101"
    
    // 创建节点客户端
    xclient, err := xuper.New(node)
    if err != nil {
        fmt.Println("Failed to create xclient:", err)
        return
    }

    // 创建参数map
    args := make(map[string]string)
    args["key"] = "stones"

    // 调用合约方法--->Increase
    tx, err := xclient.InvokeNativeContract(acc, "counter", "Increase", args)
    if err != nil {
        fmt.Println("Failed to invoke Increase method:", err)
        return
    }
    // 打印交易ID的十六进制编码
    fmt.Println(hex.EncodeToString(tx.Tx.Ixid))

    // 调用合约方法--->Get
    tx, err = xclient.QueryNativeContract(acc, "counter", "Get", args)
    if err != nil {
        fmt.Println("Failed to query Get method:", err)
        return
    }
    // 打印合约响应体
    fmt.Println(string(tx.ContractResponse.Body))
    
    // 关闭客户端连接
    xclient.Close()

    // EVM 合约返回值
    var returnData map[string]interface{}
    // 解析合约响应体为JSON
    err = json.Unmarshal(tx.ContractResponse.Body, &returnData)
    if err != nil {
        fmt.Println("Failed to unmarshal JSON:", err)
        return
    }

    // 转换返回值为uint64类型
    value, ok := returnData["key"].(string)
    if !ok {
        fmt.Println("Invalid JSON structure")
        return
    }
    u, err := strconv.ParseUint(value, 10, 64)
    if err != nil {
        fmt.Println("Failed to parse uint:", err)
        return
    }
    // 返回u的值
    fmt.Println("Parsed value:", u)
}

环境和依赖项

  1. Go 语言环境 :确保你已经安装了 Go 语言,并且配置好了 GOPATHGOROOT 环境变量。你可以通过运行 go version 来检查是否安装成功。

  2. 依赖管理工具 :推荐 go mod 管理依赖项。在项目根目录运行 go mod init 来初始化一个新的模块,再用 go mod tidy 下载所需依赖项

  3. XuperChain SDK:这段代码使用了 XuperChain 的 SDK。你需要确保已经安装了 XuperChain 的 Go SDK。可以通过以下命令来获取:

    复制代码
    go get github.com/xuperchain/xuper-sdk-go/v2
  4. 账户和密钥文件 :代码中使用了 account.GetAccountFromPlainFile 方法来读取账户信息。你需要确保在 F:/keys/ 目录下有相应的账户和密钥文件。

  5. XuperChain 节点 :代码中连接到了一个 XuperChain 节点(192.168.1.111:37101)。你需要确保该节点正在运行,并且可以从你的开发环境访问。

相关推荐
磐链科技2 天前
交易所开发核心:钱包提现引擎的设计——从风控拦截、多级审批到自动广播上链
web3·区块链
磐链科技4 天前
Web3钱包开发中的交易风控体系:模拟执行、沙盒隔离与授权拦截
web3·区块链
磐链科技6 天前
Web3钱包开发扩展比特币生态:BRC20与Runes协议的集成实践
web3
磐链科技6 天前
Web3钱包安全架构设计:抵御攻击与防护策略
安全·web3·安全架构
mykj155110 天前
Web3开发系统不是炒币,是互联网的“对账本”逻辑
web3·区块链·rwa·钱包区块链系统开发
磐链科技13 天前
轻量级与模块化:面向移动端的Web3钱包开发框架选型与技术精简策略
web3
人民新视野13 天前
LV纪元:褪去行业浮躁情绪,以真知锚定Web3长期价值
web3
Web3_Daisy17 天前
从流动性到执行:如何降低 MEV 对 Web3 市场
大数据·人工智能·web3·区块链
2601_9657984717 天前
Salient Theme Setup Guide for Fast Creative WordPress Sites
数据库·web3·php·wordpress
Web3李李20 天前
Web3项目拆分模式:项目方核心诉求与实战逻辑
web3·区块链·软件开发·dapp·dapp拆分模式·案例msa