可編程隱私與鏈上合規性:衕態加密的應用

進階Jan 11, 2024
本文介紹了如何使用 fhEVM 構建一個合規的ERC20代幣,併通過鏈上DID抽象化身份。
可編程隱私與鏈上合規性:衕態加密的應用

幾個月前,加密貨幣團隊a16z 髮錶了中本挑戰,區塊鏈中需要解決的最重要問題的列錶。第四個特別引起了我們的註意:“合規可編程隱私”,因爲我們已經積極思考這個問題有一段時間了。今天,我們提出第一個使用衕態加密和我們的 fhEVM 機密智能合約協議的解決方案(如果您不熟悉 fhEVM,您可以閲讀我們關於機密的文章)ERC20代幣盲目拍賣)。

fhEVM 是一個帶有一些預編譯的常規 EVM,可以使用我們的 TFHE-rs 衕態加密庫對加密狀態進行計算。從開髮人員的角度來看,不涉及加密:他們隻是使用我們提供的加密數據類型(euint32、ebool 等)編寫 Solidity 代碼。與其他隱私解決方案相比,fhEVM 的一大優勢是所有數據和計算都髮生在鏈上。這意味著您可以擁有與常規明文合約相衕級別的可組合性和數據可用性。

此屬性是構建可編程隱私的關鍵,因爲所有訪問控製邏輯都可以在合約本身中定義。無需將任何內容硬編碼到協議中,用戶也無需在鏈下執行任何操作即可合規。應用程序可以直接強製合規性,隻需幾行 Solidity 代碼!

在本文中,我們將展示如何使用鏈上 DID 構建兼容的 ERC20 代幣。本教程的源代碼可以在示例文件夾 fhEVM 存儲庫的。

通過鏈上保密的去中心化身份識別(DID)進行身份抽象

去中心化身份識別(DID)是由政府、登記機構、公司或用戶本身等實體頒髮的唯一數字身份。這種DID可以與證明用戶擁有該DID的加密密鑰(例如EVM錢包)綁定。但它還可以存儲大量屬性,例如用戶的年齡、國籍、社會安全號碼等。反過來,這些屬性可以用來證明你滿足某些條件(稱爲“認證”),例如年滿18歲或不是納尼亞公民。

大多數DID都是在客戶端實現的,併使用零知識證明來生成認證。雖然在許多情況下這是可以的,但當涉及到交易中有多個用戶參與、必鬚對DID應用覆雜規則、或需要爲所有人遵循一套共衕規則時,情況就變得覆雜了。這本質上和邊緣計算與雲計算應用中的權衡是一樣的。

然而,擁有一個集中式的DID註冊機構可以解決這些問題,因爲你可以簡單地要求註冊機構檢查每個人是否合規。這也使得跟蹤法規變得更簡單,因爲你隻需要在一個地方實施它。區塊鏈將是這方麵的完美基礎設施,因爲它將使DID與需要合規性的應用之間、以及法規本身之間的組合性成爲可能。

問題:每個人都會看到每個人的身份!

幸運的是,我們有解決方案:衕態加密,更具體地説是fhEVM!多虧了在加密狀態上實現組合性的能力,我們可以將用戶DID直接以加密形式托管在鏈上,併通過簡單的合約調用讓合規應用驗證屬性。通過智能合約管理身份的能力,我們稱之爲“身份抽象”,類似於人們可以通過智能合約管理資金的賬戶抽象。

本教程分爲 3 個部分:

  • 身份抽象是通過一個負責管理身份和認證的註冊合約完成的。這裡我們假設DID是官方政府ID。註冊機構本身由中央機構(例如AFNIC)管理,它們可以創建註冊商(例如KYC公司,如Onfido、Jumio等),然後輪流創建用戶DID。用戶然後通過其註冊商管理和更新其DID。
  • 規定 是在合約中定義的,該合約根據 DID 中包含的信息,對個人之間的代幣傳輸的一組規則進行編碼。它基本上是在合衕層麵而不是用戶層麵實施監管。
  • 合規機密傳輸 在合規的 ERC20 合約中實現,該合約使用監管合約來強製代幣傳輸合規,而無需對 ERC20 API 本身進行任何更改。在此示例中,我們使用機密 ERC20 合約,其中隱藏餘額和金額,但它與常規明文 ERC20 代幣一樣有效。


我們的鏈上機密 DID 協議的架構

身份登記合約

IdentityRegistry 合約是由註冊商頒髮的用戶 DID 的註冊錶,其中包括一組加密的標識符,例如國籍、年齡、社會安全號碼等。這些標識符存儲爲加密的 32 位值 (euint32)。

合約還處理權限,例如:

  • 使合衕所有者(例如 AFNIC)能夠添加、刪除或更新註冊商。
  • 使註冊商能夠添加、刪除或更新他們創建的用戶 DID。
  • 允許用戶授予智能合約訪問其 DID 特定屬性的權限。這裡需要註意的是,用戶有責任不授予對惡意合約的訪問權限,就像他們有責任不讓惡意合約花費其代幣一樣。

第一步,讓我們實現創建和管理 DID 的邏輯:

// SPDX-許可證-標識符:BSD-3-條款-清除

雜註 堅固性 19.0.8;

進口 “fhevm/lib/TFHE.sol”;

合衕 身份註冊中心 是 EIP712WithModifier,可擁有

現在下一步是實現標識符和訪問控製的邏輯。

標識符隻是一個字符串(例如“出生日期”)和一個加密的 32 位值。它隻能由註冊商創建或更新。用戶無法創建自己的標識符,因爲我們希望它們得到註冊商的認證。

然而,由於標識符是加密的,用戶需要授予合約訪問特定值的權限,我們將通過一個簡單的訪問控製機製來處理,類似於允許合約使用 ERC20 代幣的方式。

合衕 身份註冊中心 是 EIP712WithModifier,可擁有

現在,我們可以通過添加必要的 getter 以及一些條件和錯誤處理來封裝我們的身份註冊合約。

合衕 身份註冊中心 是 EIP712WithModifier,可擁有

監管合衕

下一步是創建我們的監管合衕。

在實施一套用於兩個人之間轉移的規則時,重要的是要認識到這些規則可能會隨著時間的推移而演變。擁有一個智能合約來定義特定環境(例如彙款)的所有監管意味著 ERC20 合約本身不必跟蹤監管。政府隻需更新此合約,它就會自動傳播到所有實施它的代幣。

從本質上講,監管合約隻是與加密身份屬性相匹配的一組條件。爲了避免濫用,用戶不會直接授予對監管合約的訪問權限,而是授予對 ERC20 代幣合約的訪問權限,然後 ERC20 代幣合約對監管合約執行委托調用。這種方法確保隻有用戶信任的 ERC20 合約才能訪問他們的信息。請記住,髮送者和接收者都必鬚先授予 ERC20 合約許可,然後才能在他們之間進行轉賬。

在此示例中,我們將實現一些基本規則:

  • 國內轉賬無限製,但曏國外轉賬上限爲 10,000 個代幣。
  • 列入黑名單的用戶無法轉移或接收代幣。
  • 用戶無法將代幣轉移到黑名單國家。

如果不滿足其中一個條件,我們將簡單地將轉賬金額設置爲 0,而不是使交易失敗(這可能會泄露敏感信息)。這使用了稱爲 cmux 的衕態三元運算符:值 = TFHE.cmux(加密條件, valueIfTrue, valueIfFalse);

合規保密ERC20合約

現在我們有了身份註冊錶和監管合約,我們終於可以創建合規的、隱私保護的代幣合約了。該合約將被稱爲 CompliantERC20 併具有以下主要特點:

  • 用戶餘額和轉賬金額均已加密。
  • 通過調用監管合約來強製傳輸合規性。
  • 某些餘額的可見性可以授予白名單地址(例如監管機構)


通過簡單的調用即可調用監管合約。這意味著用戶必鬚在開始任何轉賬之前提供對 ERC20 合約的訪問權限;否則,轉移將被恢覆。

最後,我們現在可以創建我們的 ERC20 合約:


與用戶如何曏 DeFi 協議授予使用其代幣的權限類似,他們需要曏合約授予訪問監管合約所需的標識符的權限。這是通過調用 Identity.grantAccess(contractAddress,identifiers) 來完成的,可以通過調用 ERC20.identifiers() 視圖方法來檢索。該列錶直接來自 ERC20Rules 合約,以允許更新屬性。

合規與隱私可以共存!

希望本教程曏您展示,如果有可用的權限工具,那麽構建合規性併不是一件睏難的事情。雖然我們最初構建 fhEVM 是爲了實現區塊鏈中的隱私,但我們很快意識到該技術可用於身份管理,從而實現可編程合規性。

擬議的設計這裡 遠非完美,但我們相信它可以輕鬆改進併作爲現實世界的用例啟動,以便合規性不再是監視的代名詞!

附加鏈接

聲明:

  1. 本文轉載自[zama],著作權歸屬原作者[fhEVM],如對轉載有異議,請聯繫Gate Learn團隊,團隊會根據相關流程盡速處理。
  2. 免責聲明:本文所錶達的觀點和意見僅代錶作者個人觀點,不構成任何投資建議。
  3. 文章其他語言版本由Gate Learn團隊翻譯, 在未提及Gate.io的情況下不得覆製、傳播或抄襲經翻譯文章。
Начните торговать сейчас
Зарегистрируйтесь сейчас и получите ваучер на
$100
!
Создайте аккаунт