百度联盟链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 语言,并且配置好了 GOPATH 和 GOROOT 环境变量。你可以通过运行 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)。你需要确保该节点正在运行,并且可以从你的开发环境访问。

相关推荐
DcMedia元宇宙17 小时前
谁能登上「数字化」的「诺亚方舟」
web3·数字化
木西17 小时前
从 “跑鞋” 到实体卡牌藏品:户外 AR 互动游戏 GoCollect,产品架构全景解析
web3·智能合约·solidity
重明链迹实验室2 天前
重明链迹丨每周区块链安全要闻(0921-0927)
安全·web3·区块链
木西12 天前
链上再保险怎么落地?Re Protocol RWA 分层合约架构深度拆解
web3·智能合约·solidity
Web3李李14 天前
Meme 币绑定美股:Robinhood Chain 掀起链上传统市场新实验
web3·区块链·软件开发·dapp·robinhood chain·meme 币
Web3李李15 天前
读懂跨链安全:如何判断跨链消息风险,规避协议攻击陷阱
web3·区块链·系统安全·软件开发·web3开发·跨链安全·协议攻击
木西15 天前
CME 大宗商品链上实验:基于 Uniswap v4 Hook 的合约架构深度解析
web3·智能合约·solidity
木西18 天前
深度拆解 Ether.fi 核心架构:当 Liquid Restaking 遇上 ERC-4337 与智能金库
web3·智能合约·solidity
明月_清风18 天前
Foundry Invariant Testing 实战:ERC-4626 + Handler + Ghost Variable
后端·web3·solidity
明月_清风18 天前
Foundry Invariant Testing:让测试自动寻找复杂状态下的 Solidity Bug
后端·web3·solidity