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

相关推荐
木西6 天前
AI 驱动的去中心化资产管理:QuantixAI 核心金库与智能风控架构解析
web3·智能合约·solidity
m0_547486668 天前
《Web开发技术基础》全套PPT课件2026
web3·web开发
徐征6399 天前
邮件安全防护体系技术拆解:从入口过滤到大模型研判的检测流水线 北京方向标
web3·生活
米小虾9 天前
币安 63 亿美元被盗:被攻破的不是私钥,是那台负责签名的机器
黑客·web3
OxYGC11 天前
[Web3] 的⛽ Gas 革命:五大协议群组如何终结“Gas 痛点
web3·1024程序员节·layer2·gas·erc-4337
OxYGC11 天前
[Web3] 去中心化基石 - BIP铁三角(BIP32/39/44)
web3·1024程序员节·钱包·bip32·bip44
磐链科技11 天前
IM聊天Web3钱包定制开发指南:从业务场景梳理、系统功能规划到产品迭代与生态扩展
web3
limit007513 天前
三维 WebGIS 工具选型:加载、样式、分析、交付,一套界面能做完什么
android·前端·web3·安卓·webgl
木西13 天前
dAppOS 意图执行网络核心技术剖析:从智能账户、生息资产金库到 OMS 乐观质押仲裁的 Solidity 0.8.28 实现
web3·智能合约·solidity
limit007514 天前
公开 WMTS / XYZ 瓦片接入 Cesium:6 类常见问题与排查顺序
chrome·低代码·arcgis·web3·旅游