技术指南 | 手把手教你Wasm合约开发(C++篇)

本文手把手教你使用C++进行Ontology Wasm合约开发,通过创建Hello World和红包合约两个示例,详细介绍合约入口、智能合约API的使用,并提供完整红包合约代码。红包合约允许用户创建、查询和领取红包,演示了如何与区块链底层交互。
摘要由CSDN通过智能技术生成

Ontology Wasm 自从上线测试网以来便受到了社区开发人员的极大关注。Ontology Wasm 的上线将使得业务逻辑复杂的 dApp 合约上链成本降低,极大丰富 dApp 生态。在进行 Ontology Wasm 合约开发时,开发者不仅可以使用 Rust,还可以使用 C++ 作为合约开发语言。本期我们将通过两个简单的示例来示范如何使用 C++ 进行Ontology Wasm 合约开发。

1

一、Hello World

按照惯例,我们还是从一个 Hello world 开始

#include<ontiolib/ontio.hpp>#include<stdio.h>using namespace ontio;class hello:public contract {
  public:using contract::contract:void sayHello(){
  printf("hello world!");}};ONTIO_DISPATCH(hello, (sayHello));

 

1.1 合约入口

 

Ontology Wasm CDT 编译器已经对入口和参数解析进行了封装,所以开发者不需要重新定义入口方法。接下来是定义合约的对外接口,这是智能合约对外提供服务的方法。

ONTIO_DISPATCH(hello, (sayHello));

在上面的例子中, 我们暂时只支持 sayHello 这个方法:

printf("hello world!");

这个“Hello world!”会在节点的日志中以调试信息打印出来。在实际的应用中, printf 只能用作调试的目的, 一个实际的智能合约,需要实现更多更复杂的功能。

 

1.2 智能合约 API

Ontology Wasm 提供如下 API 与区块链的底层进行交互:

二、红包合约

下面我们通过一个更加复杂的例子来演示如何通过这些 API 来开发一个完整的 Wasm 智能合约。

很多情况下我们都会通过各种 App,如微信等聊天工具发红包。我们可以给朋友发送红包,也可以抢其他人发送的红包,收到的钱会记入到个人微信账户中。

类似于微信的流程,我们将尝试创建一个智能合约。用户使用该合约,可以发送 ONT,ONG 或者是标准的 OEP-4的 Token 资产红包给他的朋友们,而朋友们抢到的红包可以直接转入到他们的钱包账户中。

 

2.1 创建合约

首先,我们需要新建合约的源文件,暂且命名为 redEnvelope.cpp。这个合约我们需要三个接口:

  •  createRedEnvelope: 创建红包

  •  queryEnvelope: 查询红包信息

  •  claimEnvelope: 抢红包

#include<ontiolib/ontio.hpp>using namespace ontio;class redEnvelope: public contract{
  }ONTIO_DISPATCH(redEnvelope, (createRedEnvelope)(queryEnvelope)(claimEnvelope));

我们需要在存储中保存一些关键的数据。在智能合约中, 数据以 KV 的形式保存在该合约的上下文空间中,这些数据的 KEY 需要设置前缀以便于后面的查询。下面定义了三个不同的前缀供使用:

std::string rePrefix = "RE_PREFIX_";std::string sentPrefix = "SENT_COUNT_";std::string claimPrefix = "CLAIM_PREFIX_";

因为我们的合约支持 ONT 和 ONG 这两种 Ontology 的原生资产, 我们可以预先定义好这两种资产的合约地址。不同于标准的

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值