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

相关推荐
Web3李李4 天前
链游想要获得市场认可,核心从来不是极致去中心化
web3·去中心化·区块链·软件开发·链游开发
mykj15515 天前
稳定的DOO算力质押系统DAPP合约底层逻辑
web3·区块链·dapp·rwa·质押挖矿
Web3_Daisy8 天前
Pump.fun 与 FOMO 竞争背后的 Meme 市场变局
大数据·人工智能·金融·web3·区块链
磐链科技10 天前
区块链钱包开发新范式:如何用原生技术打造下一代Web3入口
web3·区块链
Web3李李11 天前
如何选择适合自己的Web3项目本位模式?金本位与币本位选型指南
web3·区块链·软件开发·金本位·币本位·dapp经济模型设计·defi质押理财
穗余13 天前
链上套利残酷共学-DAY01
web3
Web3_Daisy14 天前
Uniswap 入局 Robinhood Chain Launchpad
网络·金融·web3·区块链
龙虾PRO15 天前
AI智能化+Web3.0去中心化,落地重构全球贸易
人工智能·web3·去中心化
Web3李李17 天前
自建公链:Web3生态长期可持续发展的核心底层布局
web3·区块链·软件开发·定制开发·公链开发·主链开发·主网开发
Web3_Daisy18 天前
如何在Robinhood Chain创建 Uniswap V3 流动性池
大数据·人工智能·web3·区块链