以太坊交易所 以太坊交易所
Ctrl+D 以太坊交易所
ads
首頁 > 幣贏 > Info

Rust智能合約養成日記(1)_UST:Siamese Neko

Author:

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

1.EVMorWASM?

隨著Ethereum的普及,我們在談論智能合約時,往往默認都是利用Solidity語言開發,基于EVM的智能合約。然而,由于Ethereum本身出塊時間慢,交易所需手續費高的一些缺點,越來越多的優化技術和新的公鏈得以推出。而WASM則是其中的一個代表性技術。作為一種全新的二進制語法,WASM有著諸多的優點,如指令體積小,運行速度快,并且內存安全。因此,運行在WASM上的智能合約可以大大減少占用的區塊鏈資源,明顯的提升出塊速度和效率,并且運行時更加穩定,使得用戶獲得更好的使用體驗。WASM支持多種不同的前端開發語言,包括Rust、C、C、TypeScript、AssemblyScript等。考慮到適配以及工具鏈,并且語言本身的安全性,Rust是非常好的選擇之一。

2.BlockSec的選擇

BlockSec的使命是讓整個Defi生態更加的安全。因此,我們除了提供審計服務之外,也希望可以從安全開發的角度給予社區更多的支持。基于Rust和WASM的諸多優點,我們決定專門針對這一技術棧給大家帶來一系列的分享,也希望大家可以持續的關注我們。我們調研了如今一些比較流行的公鏈項目,其中NEAR公鏈也采用了同樣的技術棧。NEAR原生支持WASM合約,并且支持Rust語言和AssemblyScript開發智能合約。因此,我們將以NEAR公鏈為基礎,展開我們的分享與討論。

法官駁回ForUSAll對勞工部的訴訟,加密貨幣或不被納入退休計劃:金色財經報道,一名美國聯邦法官駁回了ForUSAll對勞工部的訴訟。此舉秉承了該機構的謹慎立場,即加密貨幣可能不適合退休儲蓄。

去年6月,ForUSAll起訴美國勞工部,稱其限制退休賬戶中加密貨幣的努力是“武斷且反復無常的”。今年3月,美國勞工部發布了考慮加密貨幣投資的 401(k) 計劃指南,并警告稱,可能會對提供此類選擇的人進行調查。ForUsAll請求法院裁定勞工部的聲明違法,并予以撤銷和推翻。美國法官Christopher Cooper表示,退休計劃不太可能輕易與ForUsAll重新合作,因為它仍然受信托責任的約束,而信托責任可能會由一個對加密貨幣持懷疑態度的部門嚴格執行。

ForUsAll于2021年開始提供401(k)退休計劃的另類投資選擇,使用Coinbase機構進行數字資產托管和交易。該公司管理著15億美元的資產,通過500多個計劃為8萬多名退休儲戶提供服務,客戶包括Solana、TaxBit和Uniswap。[2023/8/30 13:07:18]

3.用Rust開發智能合約

Rust語言由Mozilla主導開發,程序編譯后的運行速度驚人,且有相當高的內存利用率,并且支持函數式和面向對象的編程風格。也許很多同學還對Rust這門語言比較陌生。不過不用擔心,從本期博客開始,BlockSec會跟大家一起撥開Rust的迷霧,讓每個人都能利用Rust開發出高效,安全的智能合約。

加密IRA平臺iTrustCapital完成1.25 億美元融資,Left Lane Capital領投:1月19日消息,加密 IRA 平臺 iTrustCapital 以 31 億美元估值完成 1.25 億美元 A 輪融資,本輪融資由 Left Lane Capital 領投,其他具體融資信息暫未透露。本輪融資資金將用于開發新產品,例如質押治理 Token,并探索更多收購機會。

iTrustCapital 是一個允許用戶通過個人退休賬戶 (IRA) 購買加密貨幣的平臺,該平臺的托管合作伙伴是 Coinbase Custody 和 Fireblocks。iTrustCapital 高級副總裁 Kevin Maloney 表示,自推出以來,該平臺已創建超過 120,000 個新帳戶,每月活躍用戶超過 25,000 個。[2022/1/20 9:00:13]

4.環境配置

4.1IDE使用

當我們在學習利用一門新的語言去開發時,選擇一個優秀的IDE一定是有必要的。在此,BlockSec推薦大家使用VisualStudioCode配合Rust的插件(例如Rust-analyzer),幾乎可以滿足大家的日常所需。如果大家有條件,也可以嘗試一下JetbrainsClionRust插件,學生可以免費使用哦。

GMO Trust與Celsius達成合作,支持穩定幣ZUSD作為加密貸款抵押品:日本互聯網集團GMO旗下的合規加密貨幣子公司GMO Trust宣布與加密貨幣借貸平臺Celsius展開新合作。客戶將能夠使用ZUSD作為加密貸款的抵押品。ZUSD是GMO Trust發行的一種受監管的、與美元掛鉤的穩定幣。據悉,ZUSD最初將上線Celsius平臺。(PRNewswire)[2021/5/7 21:35:15]

4.2安裝Rust工具鏈

當有了一個優秀的IDE后,我們自然還需要下載安裝Rust。Rust提供了非常簡單便捷的安裝方法。在Linux系統中,我們只需要運行如下一行代碼,即可自動下載安裝Rust。

$curl?--proto?'=https'?--tlsv1.2?-sSf?https://sh.rustup.rs|?sh

安裝完畢后,我們可以通過執行$rustup--version來檢查安裝是否成功。rustup作為Rust工具鏈的管理器,提供了安裝、刪除、更新、選擇和管理這些工具鏈及其相關部件的方法。再此我們需要通過執行如下命令,將WASM(WebAssembly)目標添加到工具鏈:

$rustup?targetaddwasm32-unknown-unknown

Taurus獲瑞士證券牌照,將于5月10日推出Taurus數字交易所:據官方消息,瑞士金融科技公司Taurus SA周一從該國金融監管機構FINMA獲得了證券牌照,可以運營獨立監管的數字資產市場。據悉,Taurus將于5月10日推出Taurus數字交易所(TDX)。[2021/4/19 20:36:57]

5.第一個Rust合約

終于,我們到了正題。在這里,我們將通過深入剖析一個個智能合約的項目,帶大家了解并且掌握如何利用Rust編寫智能合約。如果大家對Rust語言本身感興趣,網上有很多的教程,大家也可以參考。

5.1Rust的包管理器

隨著整個開源社區對Rust的支持,各種各樣的第三方庫層出不窮。為了更好的管理這些庫,Cargo應運而生。上述的安裝命令,也會同時幫大家安裝Cargo。Cargo可協助開發者處理諸多任務,例如創建新的Rust項目,下載并編譯Rust項目所依賴的庫,以及完整地構建整個項目等。

5.2創建第一個Rust合約項目

當我們準備好開發環境后,首先利用Cargo新建一個合約項目,并命名為StatusMessage。

$cargo?init?--lib?StatusMessage

動態 | IOST與Suterusu達成合作 探索公鏈生態建設中隱私保護的應用:近日,IOST宣布與隱私保護項目Suterusu達成戰略合作。雙方將在區塊鏈隱私保護、密碼學應用等方面展開深度技術合作。Suterusu將使用原創的零知識證明協議ZK-ConSNARK,為IOST構建layer-2的側鏈,助力IOST實現隱私轉賬、隱私金融、隱私合約等功能,并在此基礎上為基于IOST公鏈的DeFi產品提供更好的隱私保護功能。這將極大地拓寬IOST公鏈技術在現實中的應用,也將為IOST主網用戶提供更為隱私、安全的服務。[2020/2/10]

該項目的目錄樹如下:

StatusMessage/├──Cargo.toml└──src?????└──lib.rs

5.3聲明一個合約

一個智能合約(SmartContract)往往需要維護一組合約狀態數據。如下一段編寫于src/lib.rs的代碼聲明了一個簡單的合約,叫做StatusMessage。

1??#2??#3??pub?struct?StatusMessage?{4????records:?LookupMap<String,?String>,5?}

接下來,我們將仔細的分析上述的五行代碼。第1,2行以#開頭,類似注解。事實上,這是Rust中的一種宏的表現形式。它會接收第3-5行作為輸入,根據宏的定義,產生輸出。例如,第一行中的#事實上是在near-sdk-macros-version包中通過nearbindgen函數定義,這是利用宏自動生成注入代碼的地方(Macros-Auto-GeneratedInjectedCode,簡稱M.A.G.I.C.)。

如果不理解,沒關系。我們只需要知道第1,2行的作用即可。具體的來說,被#注解的struct將會成為NEAR上的一個智能合約。而其他的struct只是普通的struct。因此是由NEAR開發并且提供給開發者使用的包。而第2行中的#則是用來做序列化和反序列化,從而將合約的狀態可以在鏈上以二進制格式傳輸。第3-5行即為一個名為StatusMessage的結構體,其維護了一個智能合約的狀態。而狀態的內容在第4行中被描述。這一結構體中只含有一個成員變量,名為records。其類型為LookupMap,這里可以簡單的看作一個字典類型。key和value都是普通的字符串類型。

5.4設定合約默認值

當我們聲明了一個合約后,我們往往需要定義其默認值。如下代碼設定了合約StatusMessage的默認值。

1??impl?Default?for?StatusMessage?{2????fn?default()?->?Self?{3??????Self?{4????????records:?LookupMap::new(b"r".to_vec()),5?????}6???}7?}

其中,第1行聲明了這是對于StatusMessage默認值的一個實現。第2行聲明該方法名稱為default,返回值為Self。Self在Rust中即表示當前的模塊作用域,具體來說,即代表一個StatusMessage實例。而第3-5行即為該實例的定義。由于該實例僅包含records一個類型為LookupMap的變量。通過傳入一個二進制數組b"r".tovec(),即可將LookupMap初始化。其中LookupMap的new方法由NEAR自己定義,b"r".tovec()表明存儲于該LookupMap中鍵的前綴。

5.5定義合約方法

當我們用一個結構體定義了合約的狀態后,我們還需要定義一系列方法,從而可以通過外部交易,去調用這些暴露出來的方法。如下是兩個定義的方法,分別可以修改和獲得當前合約中的records值。注意,定義合約的方法時,也需要我們加上#,如第1行所示:

1??#2??impl?StatusMessage?{3????pub?fn?set_status(&mut?self,?message:?String){4??????let?account_id?=?env::signer_account_id();5??????self.records.insert(&account_id,&message);6???}78????pub?fn?get_status(&self,?account_id:?String)?->?Option<String>??{9??????return?self.records.get(&account_id);10???}11?}

第2行impl關鍵字表明,我們在對StatusMessage做具體的實現。?

第3-6行定義了方法setstatus。該函數用來設置當前合約的狀態。其中第三個聲明了方法名和變量。該函數共有兩個變量,分別為&mutself和message:String。&mut表示對self的引用,并且可能修改self的內容。而message:String表明了message的類型為String。同時該函數用關鍵字pub修飾,注意,只有被pubfn修飾的函數才可以被外部的交易調用,表明其是public。?

第4行會定義一個局部變量accountid,其值通過env::signeraccountid()中獲取,表明發起這筆交易簽名的用戶id。?

第5行將accountid做為鍵,message做為值插入到records中。注意,message是一個String類型的變量,由用戶傳入。而&message則表示對message的引用。?

第8-10行則聲明了另外一個函數名為getstatus。不同于setstatus,getstatus會返回一個None或者是String類型的值,這里我們用Option表示。

第9行則是通過查詢用戶給定的account_id,得到對應的message。

本期總結和預告

這是BlockSec針對Rust合約開發的第一期blog,本期我們講述了Rust合約的背景,以及如何基于NEAR鏈去創建一個簡單的合約。下一期我們將進一步描述如何利用Rust對我們創建的合約編寫單元測試用例,從而調試我們的合約。

Tags:USTMESESSSTATThe Swedish TrustSiamese NekoPlatonic QuintessenceReal Estate Token

幣贏
BKEX 關于ETP專區ZIL3S、MINA3S、SKL3S等10種標的進行份額合并的公告_BAL:KEX

尊敬的用戶:?? 由于ETP專區部分標的觸發了BKEXETP產品份額合并機制。BKEX將在2022年3月28日14:00對ETP專區部分標的進行合并操作,詳情如下:合并后新份額的名稱、簡稱、交易.

1900/1/1 0:00:00
BKEX 關于\"MRI交易大賽\"活動的公告_KEX:GLO

尊敬的用戶: ?? 為回饋廣大用戶,BKEXGlobal聯合MRI團隊舉行"MRI交易大賽"活動.

1900/1/1 0:00:00
2022年的匿名幣哪個最有前景?_區塊鏈:ONE

根據市場內所有的匿名幣投資回報率來分析投資價值和前景,下面是聚鏈網小編為大家統計出來的發展比較好的5種匿名幣: 1、XMR Monero于2014年4月18日推出,原名為BitMonero.

1900/1/1 0:00:00
Flag Network (FLAG)_WOR:Flag Network

一、項目介紹 作為一種協議和框架,FLAGNetwork是為構建和連接與以太坊兼容的區塊鏈網絡而開發的。它還在以太坊上組裝了支持多鏈以太坊生態系統的可擴展解決方案.

1900/1/1 0:00:00
阿爾法債券:影響融資效果的風險調整型聯合曲線_區塊鏈:區塊鏈技術就業前景

原文作者:BlockScience原文標題:AlphaBonds:Risk-adjustedBondingCurvesforFinancingImpactBlockScience和ixo在Int.

1900/1/1 0:00:00
贊助體育賽事還不夠,Crypto 又打入了「世界杯」_CRYP:Cryptosolartech

出品|白澤研究院 Crypto與體育界的融合,已不是什么新鮮事。實際上,加密貨幣平臺與體育營銷的淵源最早可以追溯到2014年.

1900/1/1 0:00:00
ads