OntologyWasm?自從上線測試網以來便受到了社區開發人員的極大關注。OntologyWasm的上線將使得業務邏輯復雜的dApp合約上鏈成本降低,極大豐富dApp生態。在進行OntologyWasm合約開發時,開發者不僅可以使用Rust,還可以使用C作為合約開發語言。本期我們將通過兩個簡單的示例來示范如何使用C進行OntologyWasm合約開發。
一、HelloWorld
按照慣例,我們還是從一個Helloworld開始
1.1合約入口
在上面的例子中,我們暫時只支持?sayHello?這個方法:這個“Helloworld!”會在節點的日志中以調試信息打印出來。在實際的應用中,?printf?只能用作調試的目的,一個實際的智能合約,需要實現更多更復雜的功能。
本體將構建波卡平行鏈將DeID解決方案集成至波卡網絡:11月11日,本體Ontology宣布與Polkadot合作,將其分布式ID解決方案DeID集成到Polkadot上,以加強兩個生態系統之間的協作。至此,本體將構建一個Polkadot平行鏈,并提供與DeID和跨鏈協作相關的一組信用基礎架構服務。[2020/11/11 12:18:51]
1.2智能合約API
OntologyWasm提供如下API與區塊鏈的底層進行交互:
二、紅包合約
下面我們通過一個更加復雜的例子來演示如何通過這些API來開發一個完整的Wasm智能合約。
很多情況下我們都會通過各種App,如微信等聊天工具發紅包。我們可以給朋友發送紅包,也可以搶其他人發送的紅包,收到的錢會記入到個人微信賬戶中。
戴姆勒公司將與本體合作建立可追蹤車輛信息的區塊鏈平臺:梅賽德斯-奔馳的母公司戴姆勒(Daimler AG)今日宣布,它將與開源區塊鏈本體(Ontology)合作,建立一個基于區塊鏈的移動平臺。該平臺允許用戶從不同地區同時獲得港口識別信息和車輛信息。(Coindesk)[2020/9/24]
類似于微信的流程,我們將嘗試創建一個智能合約。用戶使用該合約,可以發送ONT,ONG或者是標準的OEP-4的Token資產紅包給他的朋友們,而朋友們搶到的紅包可以直接轉入到他們的錢包賬戶中。
2.1創建合約
首先,我們需要新建合約的源文件,暫且命名為redEnvelope.cpp。這個合約我們需要三個接口:
?createRedEnvelope:創建紅包
?queryEnvelope:查詢紅包信息
本體Ontology將在波卡網絡搭建平行鏈:本體Ontology(ONT)正在波卡網絡上搭建平行鏈,參與平行鏈插槽競拍,還將基于其去中心化身份跨鏈通信提供一系列征信類服務。[2020/8/27]
?claimEnvelope:搶紅包
我們需要在存儲中保存一些關鍵的數據。在智能合約中,數據以KV的形式保存在該合約的上下文空間中,這些數據的KEY需要設置前綴以便于后面的查詢。下面定義了三個不同的前綴供使用:
因為我們的合約支持ONT和ONG這兩種Ontology的原生資產,我們可以預先定義好這兩種資產的合約地址。不同于標準的智能合約,Ontology原生合約的合約地址是固定的,而不是根據合約代碼的hash計算而來的。
我們需要在合約中保存紅包的信息,如紅包的資產信息。
現場 | ONTology本體主網將于6月30日發布 :金色財經現場報道,6月26日在圣何塞會議中心舉行的Blockchain Connect會議上,本體創始人李俊宣布,ONTology本體主網即將在6月30日上線。李俊表示,目前公鏈的挑戰主要由性能問題和場景兩方面組成。解決方案為建立公共服務鏈、高性能的區塊鏈架構和協議組。本體則致力于建立新架構的公鏈,分布式的信任生態平臺。李俊介紹了本體的區塊鏈網絡愿景和信任生態愿景,宣布2018年6月30日主網預上線,具體介紹了本體1.0將在基礎設施、模塊和協議、常用應用等方面進行全面建設的具體情況。為了支持開發社區,本體推進計劃(OEP,Ontology Enhancement Proposal)將為開發者群組提供1億ONT。[2018/6/27]
其中,
是由OntologyWasmCDT定義的宏操作,用于在將struct存儲前進行序列化的操作。
現場 | 本體創始人:區塊鏈是第一次通過技術建立生態:金色財經現場報道,6月26日在圣何塞會議中心舉行的Blockchain Connect會議上,本體創始人李俊指出,區塊鏈的首創之處在于其是第一次在技術的機床上建立了一個完整的機器以構建生態。但不足之處在于很多場景亟待落地。資產通證化、招聘、醫藥行業,全方位的金融都是很有前景的落地場景。[2018/6/27]
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
尊敬的BIONE用戶: BIONE交易所現正對USDT錢包進行安全升級,升級時間大約為六小時,具體恢復時間請持續關注交易所公告。在升級維護狀態下暫不審核USDT提幣申請.
1900/1/1 0:00:00今年到目前為止,XRP同比下跌20%,今年市值減少30億美元。許多人將其表現不佳歸因于兩件事:1.RippleLabs本身及其創始人出售XRP為業務提供資金;2.美國SEC將該項目歸類為證券的可.
1900/1/1 0:00:00比特幣BTC歐式看漲期權?代碼周BTC看漲0904期權標的BTC合約類型歐式看漲期權計價單位USDT最小價格單位0.0001USDT合約比例1000:1.
1900/1/1 0:00:00在2019年的數字貨幣交易所領域,幣安、火幣、OKEX等等巨頭交易所掌握著極強的行業話語權,普通區塊鏈項目登陸頭部交易所往往需要花費巨額的上幣成本.
1900/1/1 0:00:00圖片來源:攝圖網 誕生于2009年比特幣,從最初公開交易的0.0025美金,到目前約1萬美金,升值約400萬倍,吸引了無數人的眼球。比特幣,號稱絕對安全,誰有私鑰就是誰的,其他任何人都無法攻破.
1900/1/1 0:00:00活動時間 北京時間2019年8月31日16:00-9月6日16:00 活動規則 1.注冊即享空投 平臺將為活動期間注冊賬號的用戶空投50,000DVP.
1900/1/1 0:00:00