百度联盟链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)。你需要确保该节点正在运行,并且可以从你的开发环境访问。

相关推荐
薛定e的猫咪3 小时前
区块链、NFT、DeFi深度拆解:从零搭建Web3知识体系
web3·区块链
明月_清风7 小时前
🕵️ MEV 与链上交易:理解区块链的"暗面"
后端·web3
明月_清风7 小时前
🤖 Web3 + AI 融合:去中心化智能的未来
后端·web3
木西1 天前
深度拆解 FWA 核心智能合约:从 Loss-to-Earn 到链上动态定价的实现逻辑
web3·智能合约·solidity
3D小将1 天前
Web3D 轻量化定制工具落地民用场景:全屋收纳隔断在线可视化设计方案实践
web3
磐链科技1 天前
从比特币到Web3:一场关于信任的“操作系统”升级
web3
明月_清风1 天前
🧙 零知识证明(ZKP)入门:隐私与扩容的黑魔法
后端·web3
明月_清风1 天前
🏦 RWA 现实世界资产代币化:万亿市场的入门指南
后端·web3
明月_清风2 天前
📊 Tokenomics 入门:如何看懂一个项目的代币经济?
后端·web3