使用百度链的智能合约来落地公司业务场景(3)

本文涉及的产品
日志服务 SLS,月写入数据量 50GB 1个月
简介: 使用百度链的智能合约来落地公司业务场景(3)

通过xdev可执行命令来测试


dev工具是随xuperchain发布的一个合约编译和测试工具


先来运行下官方给的例子 熟悉下流程和确保运行环境没有问题



咱们目前的环境是最新版的master版本


使用默认的方式启动的 nohup ./xchain &


使用 xdev 测试c++语言合约


  • 配置环境变量


export PATH=$HOME/xuperchain/output:$PATH
export XDEV_ROOT=$HOME/xuperchain/core/contractsdk/cpp
注意这里配置的是cpp目录


  • 初始化代码


xdev init hello-cpp


image.png


目录结构和图【空白模版】是对应的


  • 编译


cd hello-cpp
xdev build -o hello.wasm


  • 部署下合约


./xchain-cli wasm deploy --account XC1111111111111111@xuper --cname hello  --fee 5200000 --runtime c ./hello-cpp/hello.wasm


  • 调用合约


./xchain-cli wasm invoke --method hello --fee 110000 hello


  • 测试


xdev test


image.png


合约部署和调用都可以通过


使用xdev测试go语言存证模版合约


  • 编译


cd xuperchain/core/contractsdk/go/example/eleccert
GOOS=js GOARCH=wasm go build -o hello.wasm


  • 合约部署


./xchain-cli wasm deploy --account XC1111111111111111@xuper --cname hello  --fee 5200000 --runtime go ./hello-go/hello.wasm
此时会报错使得当前节点挂掉


梳理下问题现象


1、当前节点环境是通过 nohup ./xchain & 方式启动的


2、通过wsam部署方式部署c++合约对应的合约文件是可以的


3、通过wsam部署方式部署go合约对应的合约文件是不可以的 会导致节点挂掉


调整启动方式


nohup ./xchain --vm ixvm &


然后再执行上面的部署命令是可以的


结论


目前版本可能还不支持没有指定--vm ixvm虚拟机的情况下通过wasm的方式部署go语言合约


还有一种可能是上面配置的环境变量配置的是cpp 这里是不是需要配置成go?朋友们感兴趣的话 可以尝试下


  • 测试


image.png


下面咱通过同样的方式部署下咱们自定义的存证的智能合约


1、先对go源码文件编译生成hello.wasm文件


2、复制到 hello-go 文件夹


3、执行 xdev test命令


image.png


此时心里十万个茶叶蛋飞奔而过


我辛辛苦苦使用xdev测试我的合约文件 想找出里面是哪里的代码有问题 但你却告诉我这种结构,遂“含恨”放弃这种方式


第三种方式 是通过vscode来编译源码文件


这种方式就不演示了 原理就是用的xdev命令对源码进行编译(build)和测试(test)

因为我对vscode编译go不太熟 所以这里简单的记录下步骤 以免下次用vscode再对go编译的时候看看这里就知道了


1、打开vscode 添加add workspace 工作目录 指定一个文件夹 该文件夹下面包含go源码文件


2、Terminal-Configure Tasks-create task.json


{
    // See https://go.microsoft.com/fwlink/?LinkId=733558
    // for the documentation about the tasks.json format
    "version": "2.0.0",
    "tasks": [
        {
            "label": "xdev build",
            "type": "shell",
            "command": "xdev build -p",
            "options": {
                "cwd": "${workspaceFolder}"
            },
            "group": {
                "kind": "build",
                "isDefault": true
            }
        },
        {
            "label": "xdev test",
            "type": "shell",
            "command": "xdev test",
            "options": {
                "cwd": "${workspaceFolder}"
            }
        }
    ]
}


3、然后Terminal-run Build Task 的时候也一直报错 说找不到 XDEV_ROOT,XCHAIN_ROOT环境变量


因为我知道原理就是利用的xdev来做的,我对xdev已经不抱什么希望了,所以就没有再去解决这个问题


后来转变了下方向 终于找到了适合的方向


比较合适的方法【推荐】


我一开始想着既然是合约源码有问题,那么在源码文件中添加一些日志,然后一行一行的进行定位不就可以找到问题代码了吗,后来看了下存证模版源码文件中没有输出日志的代码 所以我就没有采用这种方式


大家可以试下 添加写日志文件 然后去logs/contract.log日志文件中找下日志

我最终采用的方式是:


1、一份存证模版文件源码 这个肯定是没有问题的


2、我基于模版文件源码新写的一份文件


我在想在模版文件中添加了这么多代码 第一次执行肯定会有问题的

类似于“步子垮大了 容易扯蛋”,“一口不能吃下一个大胖子”


那么我将新增的代码一点一点的放入模版文件,每次放入都会经历编译、部署、调用执行的过程 确保每次新增的代码没有问题,遂很快的解决了这个问题


手续费去向问题


通过节点账户调用合约发起交易,那么手续费来源节点账户,目的账户是出块节点账户吗

咱们查看交易详情


./xchain-cli tx query 1fcc2d5cc2e6bad345a21d14871bd641167c44b5a5ac69076d3095458ed94784


image.png


不查不知道 一查吓一跳 请看蓝色字体


1、来源账户余额不止这个数 怎么是 1000000



2、目的账户怎么是$


大家是不是在担心账户余额要是不够了,是不是发起不了交易了?

这个担心是多余的


原因:


  • 因为当前节点是出块节点,每次出块都会有奖励, 每次奖励的金额可以调整 如果担心的话 可以调大点


  • 再一个就是定时出块机制 每隔3秒出一次奖励一次


  • 初始金额可以调大些


还不放心的话 可以多个节点账户做备用账户 若一个账户余额不够了 则使用其他的账户来发起合约交易(当然需要对应账户下面的合约账户部署的合约喽)


上面遗留的2个问题 咱们下回分解哦


自定义合约文件源码地址


https://gitee.com/pingfanrenbiji/xuper-java-sdk/blob/master/src/test/resources/com/baidu/xuperunion/api/eleccert.g
相关实践学习
日志服务之使用Nginx模式采集日志
本文介绍如何通过日志服务控制台创建Nginx模式的Logtail配置快速采集Nginx日志并进行多维度分析。
相关文章
|
供应链 监控 安全
企业如何搭建自己的联盟链 | 区块链落地项目运用开发
企业如何搭建自己的联盟链 | 区块链落地项目运用开发
|
TensorFlow API 区块链
合约跟单开发案例丨合约跟单对接API火币/币安/OK交易所系统开发逻辑方案/成熟技术/项目案例/源码平台
dapp定制开发技术主要包括以太坊智能合约定制开发,包括智能合约语言Solidity开发,以太坊智能合约框架Truffle开发,Web3.js开发,以太坊区块链浏览器Mist开发等。这些技术可以帮助开发者快速构建出功能强大、可靠性高的dapp。
|
安全 区块链
区块链交易所开发运营版丨区块链交易所系统开发规则详细/项目案例/设计功能/需求逻辑/源码部署
Blockchain exchange refers to an online platform built on blockchain technology for trading and managing digital assets, such as cryptocurrencies (such as Bitcoin, Ethereum, etc.) and other digital assets or tokens. Blockchain exchanges allow users to buy, sell, store, and manage digital assets.
|
存储 算法 安全
联盟链的优势 | 联盟链开发建设思路
联盟链采用身份认证和权限控制,可以精确控制节点的访问权限。同时,所有的节点均参与数据验证和共识机制,确保数据的安全性和不可篡改性。此外,在联盟链中,每个节点都有自己的存储设备,可以避免数据遗失和中心化失效的风险。
|
安全 区块链
区块链币币交易所系统开发成熟技术/方案逻辑/源码部署
Blockchain is a distributed ledger technology that stores data in the form of a gradually growing, linked data block (block), and uses cryptographic methods and consensus algorithms to ensure data security and reliability
|
存储 前端开发 JavaScript
区块链交易所系统开发(海外版)丨交易所系统开发详细规则/方案介绍/项目逻辑/源码平台
  区块链是一种基于分布式账本技术的去中心化数据库系统。它通过一系列的区块(blocks)来记录和存储交易和数据,形成一个连续的、不可篡改的链式结构。
|
存储 安全 算法
dapp公链游戏链上合约系统开发技术详细/案例开发/方案逻辑/成熟技术
  随着区块链技术的不断发展和普及,越来越多的游戏开发商开始将区块链技术应用于游戏中。区块链游戏系统开发可以带来许多好处,例如提高游戏的安全性、透明度、公正性等,同时还可以让玩家拥有更好的游戏体
|
机器学习/深度学习 自然语言处理 机器人
什么是永续合约交易所/秒合约交易所系统开发玩法规则/项目方案/成熟技术/源码平台
  从本质上说,交易机器人是一种软件程序,它直接与金融交易所进行交互(通常使用API获取和解释相关信息),并根据市场数据的解释发出买卖订单。这些机器人通过监测市场价格走势,并根据一套预先设定和编程的规则做出反应,从而做出这些决定。
|
存储 人工智能 供应链
BSC币安智能链DAPP发行代币合约模式系统开发成熟技术/案例介绍/方案项目/源码平台
  区块链+人工智能的结合可以实现更加智能化和自动化的操作方式,使得操作更加简单、高效和安全。例如,在智能合约中,人工智能可以自动检测合约中的条件并执行相应的操作,大大减少了人工干预的需求

热门文章

最新文章

下一篇
开通oss服务