🌕 Gate 廣場 · 中秋創作激勵 Day 9 賞金話題公布- #BTC战略储备市场影响# !
創作點亮中秋,帶熱門話題發帖,瓜分 $5,000 中秋好禮!🎁
立即報名查看詳情 👉 https://www.gate.com/campaigns/1953
💝 新用戶首次發帖並完成互動任務,即可瓜分 $600 新人獎池!
🔥 Day 9 熱門話題:BTC戰略儲備市場影響
近日,美國財政部攜手跨黨派議員重啓“比特幣戰略儲備”議題,討論是否將BTC納入國家資產配置框架。支持者認爲BTC稀缺性與抗通脹特性,可與黃金形成雙保險;反對者則擔憂高波動性與監管缺口,可能衝擊現有儲備體系。你怎麼看?
發帖建議:
1️⃣ 如果美國真把 #BTC# 列入戰略儲備,會不會成爲下一輪牛市的超級導火索?
2️⃣ 機構入場往往推高價格,你預測BTC短期/長期可能會衝到多少?會不會挑戰20萬美金?
3️⃣ 你覺得這一提案最快什麼時候可能落地?若通過,其他國家會不會跟進儲備?
快帶上 #BTC战略储备市场影响# 和 #Gate广场创作点亮中秋# 發帖,內容越多越優質,越有機會贏取 $5,000 中秋好禮!
zk-SNARKs如何實現錢包的交易邏輯與資產分離
作者:@Toni Wahrstätter 譯:DeBox研究院
前言
Vitalik 建議使用zk-SNARKs 將交易邏輯帳戶與持有資產的帳戶分開。這樣可以改善隱私,使用者體驗和一鍵式社交恢復。以太坊研究員Toni Wahrstätter 對此錢包原型進行詳細解析,涵蓋工作流程和優勢。
由於多種原因,管理多個帳戶可能具有挑戰性,包括社交恢復、隱私、L2 和整體使用者體驗問題。使用隱形位址會使事情變得更加複雜,因為每次互動都需要一個新帳戶。 Vitalik建議使用zk-SNARKs 將交易邏輯帳戶與持有資產的帳戶分開。這可以改善隱私、使用者體驗和一鍵社交恢復。
簡而言之,我們試圖實現的目標是:
**在不損害隱私的情況下一站式社交恢復。 **
一、傳統的方法
一個簡單但會損害隱私的實作如下:
缺點是,這將邏輯帳戶和資產持有帳戶公開聯繫起來,從而損害了隱私。
二、使用ZK-SNARK
透過使用zk-SNARK,用戶可以證明他們有權支出,而無需透露邏輯持有帳戶和資產持有帳戶之間的聯繫。
工作流程如下圖所示:
1.1. Merkle 樹基本上包含按日期或名稱排序的每個現有合約的slot0 和slot1 值。
1.2. 每個使用者都可以根據最近的狀態在本地建立Merkle 樹。
使用者建構一個zk 證明,證明知道邏輯持有帳戶中的秘密。稍後再詳細證明。
用戶將zk-proof 發送到資產持有帳戶。
資產持有帳戶驗證證明,確認以下內容:
4.1使用者知道邏輯在哪裡。
4.2 使用者知道一個秘密值,在雜湊後對應到儲存在邏輯持有帳戶中的值。
4.3使用者可以重建在規範鏈中維護的帳戶狀態默克爾樹根(例如預編譯)
4.4使用正確的隨機數(用於切換邏輯持有帳戶中的金鑰)。
本質上,用戶可以說:“我擁有邏輯持有帳戶的可證明的權限來執行此操作,並且我知道該邏輯帳戶的位置。”
優點
此外,透過在邏輯和資產持有合約之間添加另一個(聚合器)合約,可以在一次交易中提供不同資產持有帳戶的多個證明,從而幾乎可以像UTXO 一樣對待帳戶。聚合器將能夠取得多個zk 證明並將其轉發到各自的資產持有帳戶進行驗證。當然,這樣的聚合器可以在各個資產持有帳戶之間建立連結——包括隱私。
技術細節
zk-SNARK 設定包含私有元素:
1、邏輯持有帳戶
邏輯持有帳戶的原型可能如下所示:
編譯指示可靠性 >=0.7.0 <0.9.0;
合約 LogicHoldingAccount 是可擁有的 { uint256 public slot0 = 0x1234; // 散列秘密 uint256 public nonce = 0; // 追蹤公共所有者位址的關鍵變更;
函數 updateOwner(uint256 newValue) public onlyOwner { nonce += 1; slot0 = 新值;
該合約追蹤所有者目前的支出邏輯(slot0) 並允許透過該updateOwner函數進行更新。
2、帳戶持有帳戶
編譯指示可靠性 >=0.7.0 <0.9.0;
合約 AssetHoldingAccount { uint256 公共邏輯HoldingAccountHash = 1234 ...;
// 標量欄位大小、基底欄位大小、驗證金鑰資料等 // ...
函數 verifyProof( uint [2] calldata _pA,uint [2] [2] calldata _pB,uint [2] calldata _pC,uint [2] calldata _pubSignals) public view returns (bool val) { // 用於證明驗證的 Snarkjs 組譯程式碼... // ... }
// _pubSignals [0] - Contract-slot0 ||nonce Merkle 樹的根 // _pubSignals [1] - hased 邏輯持有者地址函數 ute( 應付地址, uint256 金額, uint [2] calldata _pA,uint [2] [2] calldata _pB,uint [2] calldata _pC,uint [2] calldata _pubSignals) public {contractRootPrecompile.getRoot(block.number) uint256指定LogicHolder = _pubSignals [1] ; require(specifiedLogicHolder ==logicHoldingAccountHash, "不允許");
bool validProof = verifyProof(_pA, _pB, _pC, _pubSignals) == true; if (validProof) { (bool success,) = to.call{value:amount}("");要求(成功); } }
receive() 外部應付帳款 {
資產持有帳戶儲存ETH等資產,並允許用戶提交提款證明。透過驗證是否specifiedLogicHolder匹配logicHoldingAccountHash,所有者可以確保資產持有合約僅接受來自授權邏輯持有合約的證明,而不是任何任意合約。
在構造證明時作為私人訊號提供的秘密確保只有包含支出邏輯的帳戶的所有者才能從資產持有帳戶存取資金。
3、電路
以下電路是使用circom開發的,完整的程式碼可以在這裡找到。
雜註 circom 2.0.2;
包括“./modules/merkleTree.circom”;包括“./modules/commitmentHasher.circom”;
模板Main(levels) { 訊號輸入根;訊號輸入邏輯HoldingAddressHash;訊號輸入邏輯HoldingAddress;訊號輸入秘密;訊號輸入隨機數;訊號輸入路徑元件 [levels] ;訊號輸入路徑索引 [levels] ;元件 SecretHasher = SecretHasher(); SecretHasher.secret <== 秘密;組件哈希器 = CommitmentHasher(); hasher.logicHoldingAddress <==logicHoldingAddress; hasher.secret <== SecretHasher.hashedSecret; hasher.nonce <== 隨機數; hasher.logicHoldingAddressHash ===logicHoldingAddressHash;組件樹 = MerkleTreeChecker(levels); tree.leaf <== hasher.commitment;樹.root <== 根; for ( i = 0; i < 級別; i++) { 樹.pathElements [i] <== 路徑元素 [i] ;樹路徑索引 [i] <== 路徑索引 [i] ;
元件主 {public [root,logicHoldingAddressHash]} = Main(N);
該電路共有7 個訊號,其中2 個是公開的,即Merkle 樹根和邏輯持有帳戶的雜湊地址(在編碼到資產持有合約之前必須進行雜湊處理,以防止觀察者對帳戶進行聚類別)基於相同的邏輯持有者帳戶)。
結論
在使用者必須管理多個帳戶的世界中,對一站式社交恢復功能的需求變得越來越重要。 Zk-SNARK 可用於實現邏輯/資產分離的錢包,使用戶能夠使用帳戶A 的「邏輯」從帳戶B 進行支出,而無需在兩者之間建立連結。作為第一步,SNARK 證明可以用於風險低於資產支出的行動。例如,一個好的起點可能是允許使用者發起「提款請求」。如果邏輯持有合約的所有者沒有提出異議,用戶可以在一段時間後最終確定該請求。
這樣,邏輯持有合約的所有者仍然可以進行幹預,儘管是以破壞隱私的方式,以防出現意外情況。