比特幣交易所 比特幣交易所
Ctrl+D 比特幣交易所
ads
首頁 > Gateio > Info

本體技術視點 | 使用C 進行Wasm合約開發_OLO

Author:

Time:1900/1/1 0:00:00

OntologyWasm?自從上線測試網以來便受到了社區開發人員的極大關注。OntologyWasm的上線將使得業務邏輯復雜的dApp合約上鏈成本降低,極大豐富dApp生態。在進行OntologyWasm合約開發時,開發者不僅可以使用Rust,還可以使用C作為合約開發語言。本期我們將通過兩個簡單的示例來示范如何使用C進行OntologyWasm合約開發。

一、HelloWorld

按照慣例,我們還是從一個Helloworld開始

1.1合約入口

在上面的例子中,我們暫時只支持?sayHello?這個方法:這個“Helloworld!”會在節點的日志中以調試信息打印出來。在實際的應用中,?printf?只能用作調試的目的,一個實際的智能合約,需要實現更多更復雜的功能。

本體已完成EVM兼容開發:區塊鏈平臺本體(Ontology)已完成以太坊虛擬機 EVM 兼容開發,用以本體賬戶與以太坊賬戶體系互通的轉接橋也已完成全部開發任務。對本體鏈以及以太坊工具鏈的兼容性測試和增強正在全面進行中。升級完成后,本體將支持包括 EVM,NeoVM、Native 和 Wasm 等虛擬機。另外,本體重要技術協議 ONT ID 也將進行關鍵性升級,實現更大程度的數據可信互通,與本體鏈本身、其他技術協議和相關應用產品共同組成支持用戶邁入 Web 3.0 的基礎性設施。[2021/7/30 1:24:12]

1.2智能合約API

OntologyWasm提供如下API與區塊鏈的底層進行交互:

二、紅包合約

下面我們通過一個更加復雜的例子來演示如何通過這些API來開發一個完整的Wasm智能合約。

Waves Enterprise電子投票系統將集成本體去中心化身體驗證工具:12月16日消息,區塊鏈平臺Waves Enterprise宣布與本體Ontology簽署諒解備忘錄,將本體的去中心化身份驗證工具集成到Waves Enterprise電子投票系統中。(Cointelegraph)[2020/12/16 15:25:39]

很多情況下我們都會通過各種App,如微信等聊天工具發紅包。我們可以給朋友發送紅包,也可以搶其他人發送的紅包,收到的錢會記入到個人微信賬戶中。

類似于微信的流程,我們將嘗試創建一個智能合約。用戶使用該合約,可以發送ONT,ONG或者是標準的OEP-4的Token資產紅包給他的朋友們,而朋友們搶到的紅包可以直接轉入到他們的錢包賬戶中。

2.1創建合約

首先,我們需要新建合約的源文件,暫且命名為redEnvelope.cpp。這個合約我們需要三個接口:

本體基金會:截至3月31日,基金會持有資產合計約2.58億美元:本體基金會(Ontology Foundation)已更新2019年12月至2020年3月的財務數據報告。報告顯示,截至2020年3月1日,本體基金會持有價值184496961美元的ONT,價值16669517美元的其他加密貨幣,以及價值57112364美元的法幣,合計約258251842美元。報告還顯示,2019年12月至2020年3月,本體基金會人力成本、運營成本和質押獎金分別支出640萬美元、332316 ONT、3333333 ONG。[2020/4/16]

?createRedEnvelope:創建紅包

?queryEnvelope:查詢紅包信息

?claimEnvelope:搶紅包

我們需要在存儲中保存一些關鍵的數據。在智能合約中,數據以KV的形式保存在該合約的上下文空間中,這些數據的KEY需要設置前綴以便于后面的查詢。下面定義了三個不同的前綴供使用:

聲音 | 本體聯合創始人季宙棟:區塊鏈對于實體經濟最大價值是信任和連接:7月21日,本體聯合創始人季宙棟指出,當前區塊鏈應用存在著偽場景,比如供應鏈金融、溯源、單據等,原因在于技術信任無法解決業務競爭意識形態。區塊鏈對于實體經濟的最大價值是信任和連接,一些區塊鏈項目在設計上缺乏商業邏輯和賬戶體系,而且區塊鏈技術本身在性能、安全和擴展性上依然存在問題。[2018/7/21]

因為我們的合約支持ONT和ONG這兩種Ontology的原生資產,我們可以預先定義好這兩種資產的合約地址。不同于標準的智能合約,Ontology原生合約的合約地址是固定的,而不是根據合約代碼的hash計算而來的。

我們需要在合約中保存紅包的信息,如紅包的資產信息。

其中,

是由OntologyWasmCDT定義的宏操作,用于在將struct存儲前進行序列化的操作。

本體“物”戰略啟航,COT成為首個智能硬件和物聯網技術戰略伙伴:今日,本體與基于區塊鏈的通用智能硬件基礎方案平臺COT(Chains of Things)宣布正式啟動技術戰略合作。在本體“以實體為本”的戰略指導下,COT將與本體共同建設基于區塊鏈的智能硬件與物聯網的通用性基礎平臺,結合本體的鏈網模式和COT的物聯網與智能硬件通用體系,來支持實體社會與商業基于物的可信任識別、信任交互、信任交易和信任傳遞。[2018/5/29]

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

Tags:ONTTOLNTOOLOSunContractTOLL幣TORONTO價格ECP Technology

Gateio
10BTC懸賞最懂LBK的人—白話藍貝殼經濟模型_LBK

尊敬的LBank用戶: 由于社區反饋,LBK的經濟模型普遍被認為雖然精密但卻較為復雜,至今仍有不少社區成員對LBK經濟模型抱有困惑。為了拓展LBK社區,并增進社區成員對LBK經濟模型的理解.

1900/1/1 0:00:00
ZDCoin關于獨家首發上線SF,并舉辦《交易競賽》活動的公告_888

尊敬的ZDCoin用戶:SF獨家首發ZDCoin支點交易所,并觀察區開放SF/USDT交易對。充提開放時間:2019年8月28日20:00交易開放時間:2019年8月29日20:28《交易競賽,

1900/1/1 0:00:00
加密貨幣與傳統市場之間是否存在相關性?_比特幣

在前面的文章中,我們探討了關于比特幣和其他加密貨幣之間是否存在相關性。我們已經清楚地證明了,幾乎所有數字資產之間都存在直接的相關性。加密貨幣之間的相關性程度或多或少.

1900/1/1 0:00:00
以太坊DApp王者歸來:穩定幣“占山為王” DeFi不足預期_以太坊

EOS和TRON上線后促進了DApp的發展,現在,“生態繁榮程度”成了衡量公鏈的新標準之一。今年1月以來,EOS和TRON上的DApp生態在數量、日活和日均交易額方面的數據均一路領先“公鏈之王”.

1900/1/1 0:00:00
關于ZT上線CQC開啟凈買入排位賽,瓜分122000枚CQC的公告_CQC

尊敬的ZT用戶: 活動期間,用戶在ZT交易CQC/USDT,凈買入量大于5000枚CQC,TOP50名用戶可瓜分122000枚CQC.

1900/1/1 0:00:00
從 CA 到 Handshake:域名的去中心化之路_AND

引言 證書頒發機構自誕生以來,一直就是DNS及網絡的中心,并且在保護網絡安全方面扮演著不可或缺的角色。簡而言之,CA就是現代互聯網的信任之錨,發行著用于代表網絡實體的數字證書.

1900/1/1 0:00:00
ads