簡介
Tinyram是一個簡單的RISC隨機存取機器,具有字節尋址的random-accessmemory和inputtapes。TinyRAM有兩個變體:一個遵循哈佛架構,一個遵循馮諾依曼架構(本文我們主要討論馮諾依曼架構)。
簡明計算完整性和隱私研究項目構建了證明TinyRAM程序正確執行的機制,而TinyRAM的設計是為了在這種情況下提高效率。它在“擁有足夠表達能力”和“足夠簡約”這兩個對立面之間取得平衡:
?當從高級編程語?編譯時,有足夠的表達能力來支持簡短高效的匯編代碼。
?小指令集,指令通過運算電路簡單驗證,利用SCIPR的算法和密碼機制實現高效驗證。
本文對于tinyram不再進行重復介紹,會對上一篇文章進行補充,然后重點是指令介紹和電路約束介紹。tinyram基礎介紹可以參考我們團隊上一篇文章:TinyRam介紹
Tinyram指令集
Tinyram總共有29個指令,每條指令都由一個操作碼和最多三個操作數組成。一個操作數可以是一個寄存器的名稱。除非特別說明,否則指令不會單獨修改flag。每條指令默認將pc增加i(i%2^W),對于vnTinyram來說i=2W/8。
一般來說,第一個操作數是指令計算的目標寄存器,其他的操作數指定指令需要的參數,最后,所有指令都需要機器的一個周期來執行。
位操作
整數操作
這些是各種無符號和有符號的整數操作。在每種情況下,如果發生算術溢出或錯誤,flag被設置為1,否則被設置為0。
shift操作
?shl指令shlrirjA將左移位ubit得到的W位string存儲在ri寄存器中。移位后的空白位置被填充為0。此外flag被設置為的最高有效位。
?shr指令shrrirjA將右移位ubit得到的W位string存儲在ri寄存器中。移位后的空白位置被填充為0。此外flag被設置為的最低有效位。
Avalanche將進行Cortina升級,將遷移X-Chain以運行Snowman++共識:3月24日消息,據官方博客,Avalanche宣布將于3月27日在Fuji測試網上發布 Avalanche Cortina升級的預發布代碼,Fuji測試網Cortina升級將于北京時間3月30日23:00激活。在Fuji測試網上的Cortina升級成功之前,將公布Avalanche主網激活時間,并發布官方Cortina AvalancheGo版本 (v1.10.0)。
最新版本的AvalancheGo將遷移X-Chain以運行Snowman++共識,這意味著整個網絡已經遷移到一個單一的共識引擎,這減少了可信計算基礎的規模并增加了現有研發工作的杠桿作用,這解除了Avalanche Warp Messaging (AWM)在X-Chain上的集成,并使交易所更容易支持X-Chain,其中將包含子網上使用的許多質押代幣。Cortina升級還引入了批處理授權獎勵并將C-Chain gas上限提高至1500 gas。[2023/3/24 13:23:46]
比較操作
比較操作中的指令每一個都不會修改任何寄存器;比較的結果存儲在flag中。
move操作
?mov指令movriA將存儲到ri寄存器中。
?cmov指令cmovriA如果flag=1,將存儲到ri寄存器中。否則ri寄存器的值不會改變。
Jump操作
這些jump和條件jump指令都不會修改寄存器和flag但是會修改pc。
?jmp指令jmpA將存儲到pc中。
?cjmp指令cjmpA在flag=1的條件下將存儲到pc中,否則pc自增1。
?cnjmp指令cnjmpA在flag=0的條件下將存儲到pc中,否則pc自增1。
Memory操作
這些是簡單的memoryload和store操作,其中memory的地址由立即數或寄存器的內容確定。這些是tinyram中唯一的尋址方式。。
加密一站式解決方案提供商PlatinX Technology完成500萬美元融資:金色財經報道,加密一站式解決方案提供商PlatinX Technology宣布完成了一筆500萬美元的融資,用以完善其算法交易軟件PTX Algo,并進一步擴大公司規模。據悉,這款交易軟件基于AI技術,具有低延遲性的特點,為交易所和投資人提供定制化的交易解決方案,目前已與世界頂級交易所Binance、FTX、KuCoin、Huobi Global、Coinbase、Bitmart、Wazirx、Kraken CoinDCX達成了合作伙伴關系。(aninews)[2022/5/24 3:38:04]
輸入操作
該指令是唯一一個訪問兩個tapes中的任意一個的指令。第0個tape用于primary輸入,第1個tape用戶auxiliary輸入。
輸出操作
該指令表示程序已經完成了計算,因此不能再允許其他操作。
指令集約束
Tinyram采用R1CS約束形式進行電路約束,具體形式如下:
一個R1CS約束,可以有a,b,c三個linear_combination表示,一個R1CS系統中的所有變量的賦值,可以分為兩個部分:primaryinput和auxilaryinput。Primary就是我們經常說的“statement”。auxiliary就是“witness”。
一個R1CS約束系統包含多個R1CS約束。每個約束的向量長度是固定的。
Tinyram在libsnark的代碼實現中大量使用了一些定制gadgtes來表述vm的約束以及opcode執行和memory的約束。具體代碼在gadgetslib1/gadgets/cpu_checkers/tinyram文件夾下。
Strong Block與Sentinel達成合作,將提高dVPN節點的擴展性:4月30日消息,Cosmos生態dVPN項目Sentinel與區塊鏈解決方案提供商Strong Block達成合作,將在全球范圍內提高dVPN節點的擴展性。Sentinel和StrongBlock將共同提供一個去中心化的VPN,其性能和用戶體驗可超過目前集中化的競爭對手,如NordVPN、TunnelBear、Mullvad和ExpressVPN等因其集中化設計而存在單點故障。
此外,StrongBlock和bitcoin.com都將與Pangea區塊鏈基金合作,在Sentinel網絡上運營驗證器節點。該基金由區塊鏈企業家RogerVer和新的PangeaResearch項目支持。[2021/4/30 21:14:44]
位操作約束
?and約束公式:
and的R1CS約束將參數1和參數2以及計算結果逐bit位進行乘法計算驗證,約束步驟如下:
1.計算過程約束,代碼如下:
2.結果編碼約束
3.計算結果非全0約束
4.flag約束
?or約束公式:
具體約束步驟如下:
1.計算過程約束,代碼如下:
聲音 | Weiss Ratings:印度新加密法案將導致其陷入金融欠發達的境地:加密貨幣評級機構Weiss Ratings發推就“印度將考慮對持有、交易、開采加密貨幣的人判處1至10年監禁”一事評論稱:如果該法案獲得通過,印度將在未來幾年陷入金融欠發達的境地。[2019/6/11]
2.結果編碼約束
3.計算結果非全0約束
4.flag約束
?xor約束公式:
具體約束步驟如下:
1.計算過程約束,代碼如下:
步驟2,3,4同上
?not約束公式:
具體約束步驟如下:
步驟2,3,4同上
整數操作約束
?add:約束公式:
具體約束步驟如下:
1.計算過程約束,代碼如下:
2.解碼結果約束和boolean約束
3.編碼結果約束
?sub:約束公式:sub約束比add稍微復雜一些,采用了一個中間變量表示a-b的結果,同時為了保證結果計算表示為正整數和符號的形式,給結果加上了2^w。具體約束步驟如下:
日本加密貨幣錢包“Ginco”宣布與Sentinel Protocol公司合作開發預防非法轉賬的系統:日本加密貨幣錢包“Ginco”宣布與開發分布式系統,檢測非法地址并提高加密貨幣交易安全性的Sentinel Protocol公司(總部位于新加坡, Uppsala Foundation)進行合作,進行預防非法轉賬系統的開發。[2018/5/2]
1.計算過程約束
2.解碼結果約束和boolean約束
3.符號位約束
?mull、umulh、smulh約束公式:
mull相關的約束都涉及以下幾個步驟
1.計算乘法約束
2.計算結果編碼約束
3.計算結果flag約束
?udiv、umod約束公式:
B為除數,q商,r為余數。余數與需要滿足不能超過除數的條件。具體約束代碼如下:
shift操作約束
?shl、shr約束公式
比較操作
比較操作中的指令每一個都不會修改任何寄存器;比較的結果存儲在flag中。比較指令包含cmpe、cmpa、cmpae、cmpg、cmpge。比較指令可以分為兩類,分別為有符號數的比較和無符號數比較,兩者約束過程核心都利用了libsnark中實現的comparison_gadget。
其他剩余過程跟有符號數比較約束相同
move操作約束
?mov約束公式:
mov的約束比較簡單,只需要確保將存儲到ri寄存器中,由于mov操作沒有修改flag,所以約束需要確保flag的值沒有產生變化。約束代碼如下:
?cmov約束公式:
cmov的約束條件比mov復雜一些,主要mov的行為跟flag值的變化有關系,同時cmov不會修改flag,所以約束需要確保flag的值沒有變化,cmov的代碼如下:
Jump操作約束
這些jump和條件jump指令都不會修改寄存器和flag但是會修改pc。
?jmp
Jmp操作約束pc值與指令執行結果一致,具體約束代碼如下:
?cjmp
cjmp根據flag條件進行跳轉,flag=1進行跳轉,否則pc自增1
約束公式如下:
約束代碼如下:
?cnjmp
cnjmp根據flag條件進行跳轉,flag=0進行跳轉,否則pc自增1
約束公式如下:
約束代碼如下:
Memory操作約束
這些是簡單的memoryload和store操作,其中memory的地址由立即數或寄存器的內容確定。這些是tinyram中唯一的尋址方式。。
?store.b和store.w
對于store.w取整個arg1val的值,對于store.b操作碼只會取arg1val的必要部分,約束代碼如下:
?load.b和load.w
這兩個指令我們要求從內存中加載的內容被存儲在instruction_results中,約束代碼如下:
輸入操作約束
?read
read操作跟tape有關,具體的約束規則是:
1.上一個tape中的內容被讀完,沒有內容可讀,不會讀取下一個tape。
2.上一個tape中的內容被讀完,沒有內容可讀,flag被設置為1
3.如果當前執行的指令是read,那么read讀取到的內容和tape輸入內容一致
4.從tape1以外的地方讀取內容,flag被設置為1
5.result為不為0,意味著flag為0
約束代碼:
輸出操作約束
該指令表示程序已經完成了計算,因此不能再允許其他操作
?answer
當程序的輸出值被接受,has_accepted會被設置為1,程序返回值能夠被正常接受意味著當前的指令為answner以及arg2value為0。
約束代碼如下:
其他
當然除了上述提到的一些指令相關的約束外,tinyram還有一些pc一致性、參數編解碼、內存檢查等各種約束。這些約束通過R1CS系統組合起來構成一個完成的tinyram約束系統。所以這也是R1CS形式的tinyram生成約束數量較多的根本原因。
這里引用一個tinyram介紹ppt的圖片,展示一個ERC20transfer用tinyram生成證明需要的時間消耗。
從上圖的例子可以得出結論:使用vnTinyram+zk-SNARKs驗證所有EVM操作是不可能的,只適合驗證少量的指令的計算驗證,可以使用vnTinyram驗證EVM的部分計算類型的opcode。
關于我們
Sin7y成立于2021年,由頂尖的區塊鏈開發者組成。我們既是項目孵化器也是區塊鏈技術研究團隊,探索EVM、Layer2、跨鏈、隱私計算、自主支付解決方案等最重要和最前沿的技術。
微信公眾號:Sin7Y
GitHub|Twitter|Telegram|Medium|Mirror|HackMD|HackerNoon
太長不讀版: Nomadhack是由用于在兩個不同區塊鏈架構之間創建鏈接的復雜智能合約引起的漏洞的結果.
1900/1/1 0:00:00Aug.2022,ThiagoFreitasDataSource:ArtBlocksDashboardArtBlocks是一個NFT平臺,使其用戶能夠鑄造所謂的"生成藝術".
1900/1/1 0:00:00據官方消息,SUN.io正在持續調整新2pool(USDD/USDT)LP礦池APY以跟進官方支持傾斜,當前APY高達35.98%.
1900/1/1 0:00:00一、隱私市場分析:為什么Web3.0需要隱私功能?1.區塊鏈最大的特點之一是匿名性,但匿名性不代表隱私性,用戶的交易數據、操作過程都是完全公開透明的,有心者可以通過跟蹤交易記錄判斷賬戶所屬.
1900/1/1 0:00:001.指令結構 CairoCPU原生支持的word是一個域元素,而這個域是特征值大于P>2^63.
1900/1/1 0:00:00據最新消息,波場TRON被加密碳評級研究所認定為“最環保的區塊鏈之一”。與此同時,CCRI還發布了《波場TRON能源效率和碳足跡報告》,報告顯示,波場TRON的能耗比比特幣和以太坊低99.9%.
1900/1/1 0:00:00