久久久精品国产免大香伊-99国产精品无码-一区二区国产精品精华液-亚洲国产精品久久久久网站-九九99亚洲精品久久久久

  • 元宇宙:本站分享元宇宙相關資訊,資訊僅代表作者觀點與平臺立場無關,僅供參考.

Bitcoin擴展概念驗證:在支持 OP_CAT 的Bitcoin上實現橋契約

  • 2024年12月04日 17:00

來源:Starknet中文社區精選速覽

深入探討在Bitcoin上構建demo橋契約,為Starknet的生產級橋奠定基礎

實施存取款聚合器、橋和取款擴展器四種智能合約

利用遞歸契約和默克爾樹有效地批量處理存款和取款請求,同時保持用戶賬戶的完整性和安全性引言

本文,我們深入探討了sCrypt如何在Bitcoin上構建一個demo橋契約。該概念驗證實現旨在為Starknet二層(L2)網絡的生產級橋奠定基礎。該橋的設計允許將多個存款或取款請求交易合并為一個根交易,并將其并入主橋契約中,更新其狀態,該狀態由一組以默克爾樹組織的賬戶組成。

由于橋契約腳本非常復雜,我們在sCrypt利用了sCrypt專屬領域語言(DSL)來編寫其實現方式。概覽

該橋由一個遞歸契約Bitcoin腳本構成。在這里,「契約」意味著鎖定腳本能夠對支出交易施加條件,而「遞歸」則意味著上述規則足夠強大,可以在鏈上實現持久的邏輯和狀態(這是任何鏈上智能合約的基本要求)。

該腳本存在于一系列交易中,每筆交易都對后續交易結構施加約束,而后續交易解鎖當前交易的輸出。每當一筆新交易添加到這條鏈中時,就代表了橋狀態的更新。因此,這條鏈的末端保存著當前的橋狀態。

該默克爾樹保存了一組固定賬戶槽的數據。葉節點包含各自賬戶數據的哈希值,其中包括地址和余額。為了表示空的賬戶槽,這些槽被標記為零字節。

每次橋的更新都會導致賬戶樹發生變化。為了方便這種更新,我們依賴于默克爾證明,其驗證在Bitcoin腳本中非常高效。更新主要包含兩個步驟。首先,我們驗證一個默克爾證明,以證明證明默克爾樹包含了特定賬戶的當前狀態。然后,在計算該賬戶的新狀態后,我們使用前述默克爾證明中的相同輔助節點來推導出新的根哈希值。

更新可以是存款,也可以是取款。橋可在單筆交易中執行這些更新的批量操作。存款

我們的目標是讓用戶能夠獨立提交存款或取款請求。為此,用戶分別創建交易,分別支付給存款或取款聚合契約。該契約將這些請求匯總成一棵默克爾樹。該樹的根哈希值可以合并到主橋契約中,主橋契約隨后處理每筆存款或取款。

在存款交易中,除了對存款數據進行哈希并構建默克爾樹之外,契約還確保鎖定在契約輸出中的存款satoshis按正確的方式累積至樹的根節點。聚合契約確保只有正確的鏈上智能合約才能使用這些資金。(當然,在生產環境中,我們也會允許用戶取消其存款交易)。

這種樹形結構的設計源于契約腳本構建的限制,即不允許包含過多輸入和輸出的交易。樹形結構使我們能夠擴展到潛在的任意吞吐量。取款請求

取款請求的聚合與存款類似,但有幾處不同。首先,我們需要一種認證方法,以便用戶可以從自己的賬戶取款。這與存款不同,存款是任何人可以向任何賬戶存款,這與Bitcoin地址的使用方式類似。認證在聚合樹的葉節點層完成。取款請求聚合契約會檢查提款地址是否與葉交易中第一個輸入的P2WPKH地址匹配。

這確保了地址的所有者批準取款,因為他們已經簽署了請求取款的交易。與存款聚合相比,另一個細微的不同之處在于,我們還會將中間的累計金額進行哈希,向上傳遞到樹結構中。這是因為在擴展取款時,我們需要這些數據,稍后會詳細說明。

敏銳的讀者可能會注意到這種取款請求認證模型的潛在問題。假如操作員決定作弊,創建一個聚合樹的根交易,而聚合樹的數據是通過未經認證的虛假取款請求在本地偽造的,那該怎么辦?我們需要一種有效的方法來驗證根交易是否來自有效的葉交易。

為了解決這個問題,我們執行了所謂的「創世檢查(genesischeck)」。本質上,我們讓聚合契約檢查其前一筆交易以及前兩筆交易,即其「祖先交易」。契約驗證這些交易是否包含相同的契約腳本,并執行相同的檢查。通過這種方式,我們實現了一個歸納式的交易歷史檢查。由于前兩筆交易與當前契約一樣,執行了相同的檢查,我們可以確認這些交易的「祖先」也執行了相同的檢查,一直追溯到葉節點(即創世交易)。

當然,我們對樹的兩個分支都執行了驗證。因此,每個聚合節點交易總共檢查最多六筆交易。取款擴展

現在讓我們進入解決方案的最后部分:取款擴展。在處理一批取款請求后,主橋契約會強制執行一個輸出,將總取款金額支付給擴展契約。我們可以將這個契約視為執行取款請求聚合契約所做操作的逆向過程。其從取款樹的根節點開始,將其擴展為兩個分支,每個分支包含應支付到該分支的相應取款金額。這個過程一直延續到取款樹的葉節點。葉交易強制執行一個簡單的支付輸出,向賬戶所有者的地址支付他們要求提取的金額。

實現方式

為了實現我們的橋契約,我們開發了四個sCrypt智能合約,分別處理系統的不同方面。本節,我們將簡要概述每個合約的功能。

存款聚合器合約

存款聚合器(DepositAggregator)合約將單個存款聚合成一棵默克爾樹,然后將其合并到主橋契約中。這種聚合可實現批量存款處理,減少需要由橋單獨處理的交易數量。此外,它還允許用戶獨立提交存款,稍后由操作員進行處理。

合約構建函數有兩個參數:

operator:橋操作員的公鑰,該操作員有權聚合存款。

bridgeSPK:主橋契約的腳本公鑰(SPK),確保聚合存款正確合并。

存款聚合器的核心功能封裝在「聚合(aggregate)」方法中。該方法執行以下步驟:

驗證Sighash原像和操作員簽名:確保交易經過橋操作員授權,并且sighash原像格式正確且屬于正在執行的交易。通過這篇文章了解關于sighash原像驗證的更多信息。

rEnq9qEO4cCSkK9cEmetlRSO3iIRrHBZiFHMKjrz.jpeg

默克爾樹聚合:驗證作為見證哈希值傳遞的存款數據是否與前置交易中存儲的狀態匹配。

金額驗證:確認前置輸出中的金額與指定的存款金額匹配,確保資金在聚合中正確計算。

狀態更新:通過連接前置交易的哈希值計算新的哈希值,并更新OP_RETURN輸出中的狀態。

重入攻擊防范:強制執行嚴格的輸出腳本和金額,以防止未經授權的修改或雙花。

一旦存款被聚合,它們必須合并到主橋契約中。這一過程由「最終確認(finalize)」方法處理,其步驟包括:

驗證前置交易:與「聚合(aggregate)」方法類似,驗證前置交易,以確保合并數據的完整性。

與橋契約的集成:通過引用橋的交易ID和腳本公鑰,檢查聚合后的存款是否正確地合并至主橋契約中。

存款聚合合約的完整源代碼可查看GitHub。

取款聚合器合約

取款聚合器(WithdrawalAggregator)合約旨在將單個取款請求聚合成一棵默克爾樹,與存款聚合器處理存款的方式類似。不過,取款操作需要額外的認證,以確保只有合法的賬戶所有者才能從其賬戶中提取資金。

取款聚合器的核心功能封裝在「聚合(aggregate)」方法中,該方法執行以下步驟:

構建和驗證前置交易ID:該過程驗證已聚合的前置交易是否有效并正確引用。

所有權證明驗證:驗證所有權證明交易確保只有合法的所有者才能從賬戶中提取資金。

所有權證明交易:一種證明控制取款地址的交易。合約檢查取款請求中的地址是否與所有權證明交易中的地址匹配。

ECUfdrM2BVM7XXXvF6v2hqlOIEWuRvsfQDBaR1YQ.jpeg

金額驗證和總金額計算:該方法通過將取款請求或之前的聚合進行金額相加,計算出要提取的總金額。

狀態更新:計算一個新的哈希值,其中包含前置交易的哈希值和取款金額的總和。這個哈希值存儲在OP_RETURN輸出中,以更新狀態。

重入攻擊防范和輸出強制:確保嚴格定義輸出,以防止未經授權的修改或重入攻擊。

取款聚合合約的完整源代碼可查看GitHub。

橋合約

橋(Bridge)合約是我們系統的核心組件,是維護橋狀態的主要契約,包括以默克爾樹組織的賬戶及其余額。其通過與我們之前討論的聚合器合約集成,處理存款和取款操作。

合約構建函數有兩個參數:

operator:橋操作員的公鑰,該操作員有權更新橋狀態。

expanderSPK:取款擴展器(WithdrawalExpander)合約的腳本公鑰(SPK),在取款過程中使用。

存款方法負責處理聚合的存款交易,并相應更新賬戶余額。

KQWileQ0AFapniJoIRFe2yjCJetPLlzxpnxKhGDo.jpeg

存款方法執行的步驟包括:

處理存款并更新賬戶:

遍歷存款,并使用「應用存款(applyDeposit)」方法將每筆存款應用到相應的賬戶。

更新橋狀態和輸出:

處理存款后,計算新的賬戶默克爾根。

創建新的狀態哈希值,表示更新后的橋狀態。

構建合約輸出,將總存款金額添加至橋余額中。

保證輸出符合預期格式,以維護數據完整性。

取款方法處理聚合的取款交易,更新賬戶余額,并通過取款擴展器準備分配的資金。

vXlGx3uewC8GiI2ID0vW6ds13sVMjxSsnFdQUkvR.jpeg

取款方法執行的步驟包括:

處理取款請求并更新賬戶:

遍歷取款請求,并使用「應用存款(applyDeposit)」方法將每筆取款應用到相應的賬戶。

更新橋狀態和輸出:

處理取款后,計算新的賬戶默克爾根。

創建新的狀態哈希值,表示更新后的橋狀態。

構建合約輸出,將總取款金額從橋余額中扣除。

為取款擴展器合約創建一個擴展輸出,其中包含總取款金額。

保證輸出符合預期格式,以維護數據完整性。

完整源代碼可查看GitHub。取款擴展器合約

取款擴展器(WithdrawalExpander)是我們橋系統的最終組件,負責根據用戶的取款請求將聚合的取款金額分發回各個用戶。它逆轉了取款聚合器執行的聚合過程,將聚合的取款數據擴展回單個用戶的支付。

YqKpamtkBxqmV4fUoOZkWnmA7Bgnq3VORWKfdbRv.jpeg

進一步擴展:如果該方法尚未達到葉節點層,則會繼續擴展,將聚合數據分成兩個分支,并創建輸出,以供進一步擴展的交易消費。

結語

在這個概念驗證實現中,我們使用sCrypt嵌入式領域專屬語言(DSL)開發了一個基于OP_CAT支持的Bitcoin的橋契約。該橋利用遞歸契約和默克爾樹有效地批量處理存款和取款請求,同時保持用戶賬戶的完整性和安全性。通過設計和實施存款聚合器(DepositAggregator)、取款聚合器(WithdrawalAggregator)、橋(Bridge)和取款擴展器(WithdrawalExpander)這四種智能合約,我們提供了一種在Bitcoin上管理有狀態交互的方法,促進了與像Starknet這樣的二層網絡的互操作性。這項工作為構建生產級橋提供了技術基礎,可能增強Bitcoin生態系統中的可擴展性和功能性。

所有代碼實現以及端到端測試均可在GitHub上獲取。

[全文完]

原文鏈接:https://starkware.co/blog/implementing-a-bridge-covenant-on-op-cat-bitcoin/

Mirror: https://mirror.xyz/starknet-zh.eth/zFbhQB7gfmSTV4CcTv5MRqJBUnKuwMLTNOgZ6jUgDK8

Copyright © 2021.Company 元宇宙YITB.COM All rights reserved.元宇宙YITB.COM

主站蜘蛛池模板: 欧美黑人又粗又硬xxxxx喷水| 亚洲日韩av无码中文| 久久66热人妻偷产国产| 日本艳妓bbw高潮一19| 欧洲黑大粗无码免费| 一本久道综合在线无码88| 可以直接免费观看的av网站| 人妻av中文字幕一区二区三区| 国产亚洲欧美精品一区| 免费网禁国产you女网站下载| 九九视频免费精品视频| 中文成人无码精品久久久不卡| 中文字幕日韩一区二区三区不卡| 肉色欧美久久久久久久免费看| 西西444www无码大胆| 曰韩少妇内射免费播放| 熟妇与小伙子matur老熟妇e| 国产亚洲精品久久久久久| 99国内精品久久久久久久| 成人久久精品一区二区三区| 2021亚洲爆乳无码专区| 久久视热这里只有精品| 国产清纯在线一区二区| 久久午夜福利无码1000合集| 婷婷成人丁香五月综合激情| 亚洲国产av一区二区三区四区 | 97精品亚成在人线免视频| 一级丰满老熟女毛片免费观看| 久久99热精品免费观看| 国产成人精品免费久久久久| 国产乱色国产精品播放视频| 国产做a爰片久久毛片a片美国| 成 人影片 免费观看| 日韩性爱视频| 色欲天天婬色婬香综合网| 中文精品久久久久人妻| 国产网友自拍在线视频| 免费国精产品—品二品| 曰韩无码av片免费播放不卡| 亚洲国产天堂久久综合| 一区二区三区无码被窝影院 |