加密貨幣交易所 加密貨幣交易所
Ctrl+D 加密貨幣交易所
ads
首頁 > KuCoin > Info

Cairo 1.0 的內部機制:探索 Sierra_CAI:SIE

Author:

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

譯者導讀

Cairo是一個圖靈完備的ZK友好高級語言,也是以太坊L2-Starknet的合約開發語言,它正在進行改版升級。本篇文章是分析Cairo1.0系列文章的第一篇,作者?Mathieu?分析了Sierra作為Cairo高級語言到Cairo匯編的中間層的設計動機與實現原理。文中提到了大量Cairo0存在問題、Cairo1改進之處,并附有豐富的代碼細節,推薦Cairo開發者閱讀全文以深入了解Cairo1.0。

TL;DR

Sierra在高級Cairo編程語言與更原始的編譯目標之間擔任了重要的中間人角色,確保生成的CASM可在Starknet上安全運行。它的設計以安全為中心,使用一組函數來生成安全的CASM代碼,結合強大的編譯器和線性類型系統來防止運行時錯誤,以及內置Gas系統來防止無限循環。在接下來的部分,我們將專注于理解Sierra程序的結構,提供了閱讀和理解Sierra程序所需的基本要求。

簡介

我最近參加了StarkwareSessions的兩場會議,分別是ShaharPapini的“EnforcingSafetyUsingTypesystems”和OriZiv的“NotStoppingattheHaltingProblem”。如果你想了解更多有關Cairo堆棧的信息,我強烈建議你觀看這些視頻。以下文章是一個系列的第一篇,我將深入了解Sierra以更好地理解Cairo、其機制以及整個Starknet。

Sierra是高級語言Cairo和諸如CairoAssembly之類的編譯目標之間的中間層。該語言旨在確保安全并防止運行時錯誤。它使用編譯器檢測可能在編譯時失敗的操作,以確保每個函數都返回并且沒有無限循環。Sierra使用簡單但強大的類型系統來表達中間層代碼,同時確保安全性。這使得可以有效地編譯成CASM。

Strike支持美國用戶向尼日利亞、肯尼亞和加納付款:金色財經報道,比特幣閃電網絡上的支付平臺Strike,通過其“全球發送”功能,美國用戶可以向尼日利亞、肯尼亞和加納立即支付低成本的款項。根據一份新聞稿,這項新功能由與非洲支付平臺Bitnob合作提供。加密貨幣支付會被立即轉換為奈拉、塞地或先令,并存入收款人的銀行、移動貨幣或Bitnob賬戶。(the block)[2022/12/6 21:26:36]

動機

在Cairo0中,開發人員會使用Cairo編寫Starknet合約,將其編譯為CASM,并直接部署編譯輸出到Starknet上。用戶可以通過調用智能合約函數、簽署交易并將其發送給排序器來與Starknet合約交互。排序器將運行交易以獲取用戶的交易費用,證明者將為包括此交易的批次生成ZK證明,排序器將收取包括交易在內的交易費用。

Cairo0交易流程

然而,該Cairo0流程會產生一些問題:

在Cairo中只有有效的語句才能被證明,所以無法證明失敗的交易。無法證明無效的語句,例如?assert0=1,因為它轉換為無法滿足的多項式約束。交易執行可能會失敗,導致交易未被包括在塊中。在這種情況下,排序器會做無償的工作。由于失敗的交易沒有有效的證明,它們不能被包括在內,也沒有辦法強制排序器收費。排序器可能被DDoS攻擊,攻擊者使用無效交易使其白干一場,而排序器無法收取運行這些交易的任何費用。無法區分審查制度censorship和無效交易,因為這兩種類型的交易都不會被包括在塊中。在以太坊上,所有失敗的交易都被標記為?reverted,但仍包括在塊中,允許驗證者在失敗時收取交易費用。為了防止惡意用戶用無效交易轟擊網絡并使排序器不堪重負,從而使合法交易無法處理,Starknet需要一個類似的系統,允許排序器收取失敗交易的費用。為了解決上述問題,Starknet網絡需要實現兩個目標:完整性和有效性。完整性確保交易執行始終可以被證明,即使它預計會失敗。有效性確保不會拒絕有效交易,從而防止審查制度。

早期風投公司Ansible Ventures完成800萬美元募資,將重點投資Web3領域:11月10日消息,總部位于越南胡志明市的早期風險投資公司 Ansible Ventures 宣布完成 800 萬美元募資,計劃在 pre-seed 和種子輪階段投資大約 15 家初創公司,重點關注的核心投資領域為 Web3 應用、消費互聯網和 SME/MSME。[2022/11/10 12:44:27]

Sierra是構造正確的,讓排序器為所有交易收費。我們可以部署分支代碼,而不是可能失敗的代碼。Cairo1的asserts被翻譯成分支Sierra代碼,允許錯誤傳播回返回布爾值的原始入口點,表示交易成功或失敗。如果入口點返回值為true/false,則Starknet操作系統可以確定交易是否有效,并決定是否應用狀態更新,如果交易成功。

Cairo1提供類似于Rust的語法,并通過抽象Sierra的安全構造來創建可證明的、開發人員友好的編程語言。它編譯為Sierra,這是Cairo代碼的構造正確的中間表示,不包含任何失敗語義。這確保了沒有Sierra代碼會失敗,并且它最終編譯為CASM的安全子集。開發人員可以專注于編寫高效的智能合約,而不必擔心編寫非失敗的代碼,所有這些都具有改進的安全原語。

開發人員將會將他們的Cairo1代碼編譯為Sierra,并將Sierra程序部署到Starknet上,而不是將CASM代碼部署到Starknet上。在聲明交易時,排序器將負責將Sierra代碼編譯為CASM,以確保不能在Starknet上部署失敗的代碼。

構造正確

央行:試點地區數字人民幣交易額破千億元:金色財經報道,中國人民銀行數字貨幣研究所發布的數據顯示,數字人民幣在批發零售、餐飲文旅、教育醫療、公共服務等領域已形成一大批涵蓋線上線下、可復制可推廣的應用模式。截至8月31日,15個省(市)的試點地區累計交易筆數3.6億筆、金額1000.4億元,支持數字人民幣的商戶門店數量超過560萬個。

此外,2022年以來,各試點地區政府圍繞“促進消費”“抗擊疫情”“低碳出行”等主題累計開展了近30次數字人民幣消費紅包活動,各商業機構還開展了多次市場化推廣活動,有力促進社會消費回補與潛力釋放。(光明日報)[2022/10/13 14:26:19]

為了設計一個不會失敗的語言,我們必須首先確定Cairo0中的不安全操作。包括:

非法的內存地址引用;嘗試訪問未分配的內存單元斷言,因為它們可能會失敗而無法恢復由于Cairo的一次性寫入內存模型,導致對同一內存地址的多次寫入無限循環,這使得無法確定程序是否會退出確保解引用不會失敗

在Cairo0中,開發人員可以編寫以下代碼,試圖訪問未分配的內存單元的內容。

let(ptr:felt*)=alloc();

tempvarx=;

Sierra的類型系統通過強制執行嚴格的所有權規則并利用?Box?等智能指針來防止常見的指針相關錯誤,從而使得在編譯時能夠檢測和防止無效指針解引用。Box<T>?類型用作指向有效和已初始化指針實例的指針,并提供兩個函數進行實例化和解引用:box_new()?和?box_deref()。通過使用類型系統在編譯時捕獲解引用錯誤,從而使得從Sierra編譯的CASM避免了無效指針解引用。

THORChain將逐步停用其非原生代幣:7月19日消息,跨鏈DeFi協議THORChain已激活killswitch,將逐步減少對基于BEP-20和ERC-20的RUNE代幣變體的支持。BNB.RUNE和ETH.RUNE(IOU代幣)正在被兌換為升級后完全原生的RUNE代幣。

今后,這些代幣將在未來12個月內逐漸失去價值,因為該項目旨在促進采用其完全統一的RUNE變體,實現更強的資產互操作性。

在中心化交易平臺上持有其IOU代幣的用戶,其代幣將自動升級到新的原生RUNE,將代幣保存在私人錢包中的用戶必須創建一個由THORChain支持的新錢包,然后點擊升級按鈕來進行轉換。(Cointelegraph)[2022/7/19 2:22:34]

確保不會重復寫入任何內存單元

在Cairo0中,用戶將使用如下數組:

let(array:felt*)=alloc();

assertarray=1;

assertarray=2;

assertarray=3;//fails

然而,嘗試兩次寫入同一數組索引會導致運行時錯誤,因為內存單元只能被寫入一次。為避免這個問題,Sierra引入了一個?Array<T>?類型以及一個?array_append<T>(Array<T>,value:T)->Array<T>?函數。該函數接受一個數組實例和一個要附加的值,并返回指向新的下一個空閑內存單元的更新的數組實例。因此,值會按順序附加到數組的末尾,而不必擔心由于已經寫入的內存單元可能導致的沖突問題。

IMF:美國經濟可能在未來兩年放緩,將勉強避免衰退:6月25日消息,國際貨幣基金組織周五發表聲明稱,美國經濟可能在 2022 年和 2023 年放緩,但隨著美聯儲實施其利率收緊計劃以遏制通脹,美國經濟將勉強避免衰退。現在的政策重點必須是在不引發衰退的情況下迅速減緩工資和物價的增長,這將是一項棘手的任務。

IMF總裁格奧爾基耶娃表示:美聯儲迅速將基準利率升至 3.5% 至 4% 的計劃應該會使金融狀況提前收緊,從而迅速將通脹拉回目標水平。我們意識到,避免美國陷入衰退的道路越來越窄。美國目前面臨的物價壓力是廣泛的,遠遠超出了能源和食品價格的上漲。(金十)[2022/6/25 1:30:26]

為確保已經附加的先前使用的數組實例不會被重復使用,Sierra使用線性類型系統確保對象僅使用一次。因此,任何已經被附加的Array實例不能在另一個?array_append?調用中重復使用。

下面的代碼顯示了一個Sierra程序的片段,該程序創建了一個felt數組,并使用?array_append?庫函數兩次追加值?1。在代碼中,第一個?array_append?調用使用id??的數組變量作為輸入,并返回一個表示更新的數組的id??變量。然后將此變量用作下一個?array_append?調用的輸入參數。重要的是要注意,一旦被庫函數使用,id??的變量就不能被重復使用,嘗試使用id??作為輸入參數調用?array_append?將導致編譯錯誤。

array_new<felt>()->();

felt_const<1>()->();

store_temp<felt>()->();

array_append<felt>(,)->();

felt_const<1>()->();

store_temp<felt>()->();

array_append<felt>(,)->();

對于可以多次重新使用的對象,比如?felts,Sierra提供了?dup<T>(T)->(T,T)?函數,返回兩個相同對象的實例,可以用于不同的操作。這個函數僅適用于安全可復制的類型,通常是不包含數組或字典的類型。

非故障斷言

通常使用斷言來評估代碼中特定點布爾表達式的結果。如果評估結果不符,就會引發錯誤。與Cairo0中不同,Cairo1斷言指令的編譯將生成分支Sierra代碼。如果不滿足斷言,則該代碼將提前終止當前函數執行,并繼續執行下一條指令。

確保使用字典的程序的健全性

字典和數組一樣存在多次添加值的問題,可以通過引入特殊的?Dict<K,V>?類型和一組工具函數來實例化、檢索和設置字典中的值來解決這個問題。然而,字典存在一個健全性問題。每個Dict都必須在程序結束時調用?dict_squash(Dict<K,V>)->()?函數來壓縮,以驗證鍵更新序列的一致性。未壓縮的字典是危險的,因為惡意證明者可以證明不一致更新的正確性。

正如我們之前所見,線性類型系統強制對象只能使用一次。唯一使用“使用”Dict的方法是調用?dict_squash?函數,該函數使用字典實例并不返回任何內容。這意味著在將Sierra代碼編譯為CASM時將檢測到未壓縮的字典,并在編譯時引發錯誤。對于其他不需要一次性使用的類型,通常是不包含Dict的類型,Sierra引入?drop<T>(T)->()?函數,該函數使用對象的實例并不返回任何內容。

值得注意的是,drop?和?dup?都不會產生任何CASM代碼。它們僅在Sierra層提供類型安全,確保變量僅使用一次。

防止死循環

確定程序最終會停止或永遠運行是計算機科學中的一個基本問題,被稱為停機問題,在一般情況下是無法解決的。在像Starknet這樣的分布式環境中,用戶可以部署和運行任意代碼,因此防止用戶運行無限循環代碼是很重要的,例如以下Cairo代碼。

fnfoo(){foo(。

由于遞歸函數如果停止條件永遠不滿足就可能導致無限循環,因此Cairo-to-Sierra編譯器將在遞歸函數開頭注入?withdraw_gas方法。由于該功能尚未實現,因此開發人員仍需要在遞歸函數中調用?withdraw_gas并自行處理結果,盡管在未來版本中應該會包含在編譯器中。

該?withdraw_gas?函數將通過計算函數中每條指令的運行成本來從交易總可用Gas中扣除運行函數所需的Gas數量。成本是通過確定每個操作需要多少步來分析的,大多數操作的步在編譯時是已知的。在Cairo程序執行期間,如果?withdraw_gas?調用返回null或負值,則當前函數執行會停止,所有待處理的變量都將通過對未壓縮字典調用?dict_squash?和對其他變量調用?drop?來消耗,并將被認為是執行失敗。由于Starknet上的所有交易都有一個有限的可用Gas量來執行交易,因此避免了無限循環,并通過確保仍有足夠的Gas可用來刪除變量并停止執行,排序器將能夠從事務失敗中收取費用。

通過一組有限的指令實現安全的CASM

Sierra的主要目標是確保生成的CASM代碼不會失敗。為實現這一目標,Sierra程序由調用?libfuncs?的語句組成。這些是一組內置庫函數,為這些函數生成的CASM代碼是保證安全的。例如,array_append?庫函數生成的安全CASM代碼可用于將值附加到數組中。

通過僅允許一組安全和可信賴的庫函數來實現代碼安全的這種方法類似于Rust編程語言的哲學。通過提供一組安全和可信賴的抽象,這兩種語言都有助于避免常見的編程錯誤,并增加代碼的安全性和可靠性。Cairo1使用了與Rust類似的所有權和借用系統,為開發人員提供了一種在編譯時推理代碼安全性的方式,這有助于防止錯誤并提高整體代碼質量。

免責聲明

本文旨在為讀者提供通用信息和理解,不表示Nethermind支持任何特定資產、項目或團隊,也不保證其安全性。Nethermind沒有明示或暗示地向本文中包含的信息或觀點的準確性或完整性作出任何陳述或保證。任何第三方不得以任何方式依賴本文,包括但不限于金融、投資、稅收、監管、法律或其他建議,或將本文解釋為任何形式的建議。請注意,雖然Nethermind為Starkware提供服務,但本文不是這些服務的一部分。

Tags:CAICAIROAIRSIEMCAI價格CAIRO價格AirNFTsSIE幣

KuCoin
美聯儲加息25個基點,鮑威爾警告“今年不會看到降息”_IMM:ABLE

紐約時間3月22日下午,美聯儲宣布將基準聯邦基金利率上調25個基點至4.75%-5%的目標區間,與大多數市場參與者估計的一致.

1900/1/1 0:00:00
夾子被夾子夾了,解析MEV機器人如何淪為黑客提款機_MEV:RENS

今天下午,加密用戶?3155.eth?發文稱,一些頂級?MEV?機器人正成為黑客的攻擊目標,其「三明治攻擊」中的交易模塊被替換,目前已造成超過2000萬美元的損失.

1900/1/1 0:00:00
長推:Arb上線后的價格漲跌、長期價值和入手時機分析_ARB:shibla幣最新消息

注:本文來自@BTW0205推特,MarsBit整理如下:每天都很多朋友問關于Arb上線后的價格分析,主要說三點1,從當下事實分析:Arb當前價格到底是低估還是高估?當前參考購買價格!2.

1900/1/1 0:00:00
多人創作:解放參與性媒體_NFT:WEB

創作者和他們的最終受眾之間的關系大多是單向的。創作者在有圍墻的花園里孤立地生產作品,而最終消費者則得到最終產品——無論是音樂、文章、播客集,還是藝術——參與創作過程的手段有限.

1900/1/1 0:00:00
零知證明與zkEVM:從何而來,去往何處?_ROLL:ROL

在當下火熱的zk-Rollup賽道背后,我們一直希望能夠梳理這一區塊鏈最前沿技術為何應運而生,不同團隊解決方案大大小小的差異,以及這些差異最后可能會為我們帶來一個個如何截然不同的生態.

1900/1/1 0:00:00
Myria 是一個全面 的 Web3 游戲區塊鏈生態系統_MYRIA:Compound 0x

???Myria是一個將游戲平臺與應用程序、工具和擴展基礎設施相結合的全面的Web3游戲區塊鏈生態系統.

1900/1/1 0:00:00
ads