OntologyWasm?自从上线测试网以来便受到了社区开发人员的极大关注。OntologyWasm的上线将使得业务逻辑复杂的dApp合约上链成本降低,极大丰富dApp生态。在进行OntologyWasm合约开发时,开发者不仅可以使用Rust,还可以使用C作为合约开发语言。本期我们将通过两个简单的示例来示范如何使用C进行OntologyWasm合约开发。
一、HelloWorld
按照惯例,我们还是从一个Helloworld开始
1.1合约入口
在上面的例子中,我们暂时只支持?sayHello?这个方法:这个“Helloworld!”会在节点的日志中以调试信息打印出来。在实际的应用中,?printf?只能用作调试的目的,一个实际的智能合约,需要实现更多更复杂的功能。
日本体操运动员内村航平在OpenSea上发行退役纪念NFT:3月21日消息,日本体操运动员内村航平的退役纪念NFT已在OpenSea上拍卖,起拍价12.5ETH。内村航平曾于2012年伦敦奥运会取得个人全能冠军,在2016年里约奥运会取得男子个人全能冠军。内村航平于今年1月份宣布退役。(Coinpost)[2022/3/21 14:08:54]
1.2智能合约API
OntologyWasm提供如下API与区块链的底层进行交互:
二、红包合约
下面我们通过一个更加复杂的例子来演示如何通过这些API来开发一个完整的Wasm智能合约。
很多情况下我们都会通过各种App,如微信等聊天工具发红包。我们可以给朋友发送红包,也可以抢其他人发送的红包,收到的钱会记入到个人微信账户中。
基于本体区块链平台的融合信用要素的DeFi项目Wing即将发布:今日,去中心化金融服务自组织平台Wing宣布将基于本体区块链平台,依托本体去中心化身份、数据和信用评分(OScore),推出融合信用要素的DeFi服务。Wing官方团队透露,后续将聚焦于抵押品种类扩展,融入去中心化信用要素和扩展去中心化金融服务自主组织Wing DAO三个方面。同时,Wing DAO支持社区自发提出各类去中心化金融服务提案,根据社区的参与度自动决定产品启动,社区也对产品规则、终止和取消等事宜具备自主管理能力。[2020/8/27]
类似于微信的流程,我们将尝试创建一个智能合约。用户使用该合约,可以发送ONT,ONG或者是标准的OEP-4的Token资产红包给他的朋友们,而朋友们抢到的红包可以直接转入到他们的钱包账户中。
2.1创建合约
声音 | 本体联合创始人季宙栋:区块链面临来自技术、生态、商业三方面的问题:杭州市金融办指导,巴比特主办的2019全球区块链(杭州)高峰论坛上,本体联合创始人季宙栋表示,目前区块链所面临的问题来自技术、生态、商业三方面。而可拓展性是区块链所面临的巨大难题,目前公链项目众多,而且尚处于社区治理的阶段,难以为企业服务,未来可伴随激励机制等服务的加成来为企业服务。区块链未来的机遇在数字资产、身份与数据、信任协作这三方面,比如供应链在多方协作的场景下可以引入区块链,提高效率。[2019/5/17]
首先,我们需要新建合约的源文件,暂且命名为redEnvelope.cpp。这个合约我们需要三个接口:
?createRedEnvelope:创建红包
?queryEnvelope:查询红包信息
?claimEnvelope:抢红包
动态 | 本体将进一步发展基于ONT ID的信任协同应用体系:7月28日消息,本体在其官方微信公众号中发布下一阶段规划:日后,本体在持续优化主链基础设施之外,将集中于本体应用生态和同构链跨链原型的实现和商业试点,进一步发展基于ONT ID的信任协同应用体系。[2018/7/28]
我们需要在存储中保存一些关键的数据。在智能合约中,数据以KV的形式保存在该合约的上下文空间中,这些数据的KEY需要设置前缀以便于后面的查询。下面定义了三个不同的前缀供使用:
因为我们的合约支持ONT和ONG这两种Ontology的原生资产,我们可以预先定义好这两种资产的合约地址。不同于标准的智能合约,Ontology原生合约的合约地址是固定的,而不是根据合约代码的hash计算而来的。
我们需要在合约中保存红包的信息,如红包的资产信息。
本体创始人:公有链真正提供的产品是哲学和价值观:Ontology本体创始人李俊今日在第二届区块链新金融高峰论坛上表示,公有链真正提供的产品是哲学和价值观,不过这些价值观无关对错好坏,只看是否适合,“用户喜欢哪一套哲学就在哪个项目里玩”。而这一点伤,国外团队做得比较好,中国则相对较弱,更倾向于以技术、以团队、以钱服人,不过本体希望能够在这个方面做到世界领先水平。[2018/6/6]
其中,
是由OntologyWasmCDT定义的宏操作,用于在将struct存储前进行序列化的操作。
2.2创建红包
准备工作差不多了,下面我们开始开发具体的接口逻辑。1.创建红包需要指定创建者地址,红包数量,红包金额和资产的合约地址:2.检查是否有创建者的签名,否则交易回滚退出:
3.如果红包资产是ONT,由于ONT的不可分割性,红包的金额要大于或等于红包的数量,保证每个红包最少有1个ONT:
4.对于每个红包的创建者,我们需要记录一下他发送红包的总数量:
5.生成红包hash,这个hash就是之后标识这个红包的唯一ID:
6.根据token资产的类型,将资产转入合约中,self_address()可以取得当前执行的合约地址,我们根据用户输入的token类型,将指定数量的token转入合约:
7.将合约的信息保存在存储中:
8.发送创建红包的事件。对于智能合约的调用是一个异步的过程,合约会在执行成功后发送一个事件来通知客户端执行结果,这个事件的格式可以由合约的编写者来指定。
一个简单的红包就创建完成了,下一步我们需要实现如何查询这个红包的信息.
2.3?查询红包
查询红包的逻辑非常简单,只需要将存储中的红包信息取出并格式化返回即可:
2.4?领取红包
我们已经把资产成功地转入到智能合约中了,接下来就可以把这个红包的ID发送给你的朋友们让他们去抢红包了。
1.领取红包需要输入领取人的账户和红包的hash:
2.同样,我们需要验证领取账户的签名,不允许替其他人抢红包,而且每个账户每个红包只能抢一次:
3.按照hash从存储中取出红包的信息,判断这个红包是否没有被抢完:
4.新建一条领取的记录:
5.计算本次领取红包的资产数量。如果是最后一个红包,数量为剩余的金额,否则根据当前区块hash计算随机数,确定本次领取的数量,并更新红包信息:
6.根据计算结果,将对应资产从合约中转到领取的账户:
7.记录领取的信息,将更新后的红包信息写回存储并发送通知事件:
如前面所说,这个合约只能通过claimEnvelope这个接口将资产转出合约。所以,合约中的资产是安全的,任何人都无法随意的取走里面的资产。至此,一个简单的红包合约逻辑完成,完整的合约代码如下:https://github.com/JasonZhouPW/pubdocs/blob/master/redEnvelope.cpp
2.5?合约测试
合约测试可以有两种方法:
使用CLI
请参考:https://github.com/ontio/ontology-wasm-cdt-cpp/blob/master/How_To_Run_ontologywasm_node.md
使用GolangSDK
请参考:https://github.com/ontio/ontology-wasm-cdt-cpp/blob/master/example/other/main.go
三、总结
本示例只是为了展示如何编写一个完整的OntologyWasm智能合约,如何通过调用API和底层的区块链进行交互。如果要作为正式的产品,还需要解决红包的隐私问题:所有人都可以通过监控合约的事件来取得红包的hash,意味着每个人都可以抢这个红包。一种比较简单的解决方法,就是在创建红包时指定哪些账户能够领取。如果有兴趣,您也可以尝试修改测试一下。
Ontology作为领先公链,率先支持Wasm合约,为Wasm技术的成熟贡献自己的一份力量。我们欢迎更多的Wasm技术爱好者加入本体开发社区,共同打造技术生态。
*详细代码信息可能显示不全,可参考:https://mp.weixin.qq.com/s/LlvuX4NzZackasuvQyBDlg
标签:ONTWASTOLOLONew Frontier Presentsswash币的发展前景TOLL价格Colony Network Token
EOS看涨期权 代码月EOS看涨0923期权标的EOS合约类型欧式看涨期权计价单位USDT最小价格单位0.0001USDT合约比例1:1.
1900/1/1 0:00:00尊敬的用户: CEO全球站运营及研发周报汇总如下: 技术研发 1、CEO全球站星火燎原项目开发。2、主流币交易赛活动跟踪及开发.
1900/1/1 0:00:00最近,去年的热度王EOS风波不断,就在前几天,EOS生态海外社区的一个知名DApp开发者突然发难表示:“EOS超级节点几乎全被中国人控制了,他将放弃在EOS上开发的DApp”.
1900/1/1 0:00:00亲爱的BKEXer: 为推动区块链行业健康发展,保护投资者合法权益,根据《BKEX通证管理规则》,BKEX定期对平台内的通证进行综合性审查;根据新加坡时间2019年8月27日的审查结果,以下通证因交易额恢复正常,予以“ST”风险警示.
1900/1/1 0:00:00FunTwitter 每日最新大咖观点,看我就够了! 2019/08/27期 本期作者:三月既望 币安上线理财产品币安宝,为保证金交易输血币安官方推特发布公告称,将上线币安宝,为用户提供闲散数字资产增值服务.
1900/1/1 0:00:00据彭博社报道,市值第二大的加密货币以太坊网络如今正在被稳定币USDT的发行者Tether所堵塞.
1900/1/1 0:00:00