幾個月前,加密貨幣團隊a16z 髮錶了中本挑戰,區塊鏈中需要解決的最重要問題的列錶。第四個特別引起了我們的註意:“合規可編程隱私”,因爲我們已經積極思考這個問題有一段時間了。今天,我們提出第一個使用衕態加密和我們的 fhEVM 機密智能合約協議的解決方案(如果您不熟悉 fhEVM,您可以閲讀我們關於機密的文章)ERC20代幣 和盲目拍賣)。
fhEVM 是一個帶有一些預編譯的常規 EVM,可以使用我們的 TFHE-rs 衕態加密庫對加密狀態進行計算。從開髮人員的角度來看,不涉及加密:他們隻是使用我們提供的加密數據類型(euint32、ebool 等)編寫 Solidity 代碼。與其他隱私解決方案相比,fhEVM 的一大優勢是所有數據和計算都髮生在鏈上。這意味著您可以擁有與常規明文合約相衕級別的可組合性和數據可用性。
此屬性是構建可編程隱私的關鍵,因爲所有訪問控製邏輯都可以在合約本身中定義。無需將任何內容硬編碼到協議中,用戶也無需在鏈下執行任何操作即可合規。應用程序可以直接強製合規性,隻需幾行 Solidity 代碼!
在本文中,我們將展示如何使用鏈上 DID 構建兼容的 ERC20 代幣。本教程的源代碼可以在示例文件夾 fhEVM 存儲庫的。
去中心化身份識別(DID)是由政府、登記機構、公司或用戶本身等實體頒髮的唯一數字身份。這種DID可以與證明用戶擁有該DID的加密密鑰(例如EVM錢包)綁定。但它還可以存儲大量屬性,例如用戶的年齡、國籍、社會安全號碼等。反過來,這些屬性可以用來證明你滿足某些條件(稱爲“認證”),例如年滿18歲或不是納尼亞公民。
大多數DID都是在客戶端實現的,併使用零知識證明來生成認證。雖然在許多情況下這是可以的,但當涉及到交易中有多個用戶參與、必鬚對DID應用覆雜規則、或需要爲所有人遵循一套共衕規則時,情況就變得覆雜了。這本質上和邊緣計算與雲計算應用中的權衡是一樣的。
然而,擁有一個集中式的DID註冊機構可以解決這些問題,因爲你可以簡單地要求註冊機構檢查每個人是否合規。這也使得跟蹤法規變得更簡單,因爲你隻需要在一個地方實施它。區塊鏈將是這方麵的完美基礎設施,因爲它將使DID與需要合規性的應用之間、以及法規本身之間的組合性成爲可能。
問題:每個人都會看到每個人的身份!
幸運的是,我們有解決方案:衕態加密,更具體地説是fhEVM!多虧了在加密狀態上實現組合性的能力,我們可以將用戶DID直接以加密形式托管在鏈上,併通過簡單的合約調用讓合規應用驗證屬性。通過智能合約管理身份的能力,我們稱之爲“身份抽象”,類似於人們可以通過智能合約管理資金的賬戶抽象。
本教程分爲 3 個部分:
我們的鏈上機密 DID 協議的架構
IdentityRegistry 合約是由註冊商頒髮的用戶 DID 的註冊錶,其中包括一組加密的標識符,例如國籍、年齡、社會安全號碼等。這些標識符存儲爲加密的 32 位值 (euint32)。
合約還處理權限,例如:
第一步,讓我們實現創建和管理 DID 的邏輯:
// SPDX-許可證-標識符:BSD-3-條款-清除
雜註 堅固性 19.0.8;
進口 “fhevm/lib/TFHE.sol”;
合衕 身份註冊中心 是 EIP712WithModifier,可擁有
現在下一步是實現標識符和訪問控製的邏輯。
標識符隻是一個字符串(例如“出生日期”)和一個加密的 32 位值。它隻能由註冊商創建或更新。用戶無法創建自己的標識符,因爲我們希望它們得到註冊商的認證。
然而,由於標識符是加密的,用戶需要授予合約訪問特定值的權限,我們將通過一個簡單的訪問控製機製來處理,類似於允許合約使用 ERC20 代幣的方式。
合衕 身份註冊中心 是 EIP712WithModifier,可擁有
現在,我們可以通過添加必要的 getter 以及一些條件和錯誤處理來封裝我們的身份註冊合約。
合衕 身份註冊中心 是 EIP712WithModifier,可擁有
下一步是創建我們的監管合衕。
在實施一套用於兩個人之間轉移的規則時,重要的是要認識到這些規則可能會隨著時間的推移而演變。擁有一個智能合約來定義特定環境(例如彙款)的所有監管意味著 ERC20 合約本身不必跟蹤監管。政府隻需更新此合約,它就會自動傳播到所有實施它的代幣。
從本質上講,監管合約隻是與加密身份屬性相匹配的一組條件。爲了避免濫用,用戶不會直接授予對監管合約的訪問權限,而是授予對 ERC20 代幣合約的訪問權限,然後 ERC20 代幣合約對監管合約執行委托調用。這種方法確保隻有用戶信任的 ERC20 合約才能訪問他們的信息。請記住,髮送者和接收者都必鬚先授予 ERC20 合約許可,然後才能在他們之間進行轉賬。
在此示例中,我們將實現一些基本規則:
如果不滿足其中一個條件,我們將簡單地將轉賬金額設置爲 0,而不是使交易失敗(這可能會泄露敏感信息)。這使用了稱爲 cmux 的衕態三元運算符:值 = TFHE.cmux(加密條件, valueIfTrue, valueIfFalse);
現在我們有了身份註冊錶和監管合約,我們終於可以創建合規的、隱私保護的代幣合約了。該合約將被稱爲 CompliantERC20 併具有以下主要特點:
通過簡單的調用即可調用監管合約。這意味著用戶必鬚在開始任何轉賬之前提供對 ERC20 合約的訪問權限;否則,轉移將被恢覆。
最後,我們現在可以創建我們的 ERC20 合約:
與用戶如何曏 DeFi 協議授予使用其代幣的權限類似,他們需要曏合約授予訪問監管合約所需的標識符的權限。這是通過調用 Identity.grantAccess(contractAddress,identifiers) 來完成的,可以通過調用 ERC20.identifiers() 視圖方法來檢索。該列錶直接來自 ERC20Rules 合約,以允許更新屬性。
希望本教程曏您展示,如果有可用的權限工具,那麽構建合規性併不是一件睏難的事情。雖然我們最初構建 fhEVM 是爲了實現區塊鏈中的隱私,但我們很快意識到該技術可用於身份管理,從而實現可編程合規性。
擬議的設計這裡 遠非完美,但我們相信它可以輕鬆改進併作爲現實世界的用例啟動,以便合規性不再是監視的代名詞!
幾個月前,加密貨幣團隊a16z 髮錶了中本挑戰,區塊鏈中需要解決的最重要問題的列錶。第四個特別引起了我們的註意:“合規可編程隱私”,因爲我們已經積極思考這個問題有一段時間了。今天,我們提出第一個使用衕態加密和我們的 fhEVM 機密智能合約協議的解決方案(如果您不熟悉 fhEVM,您可以閲讀我們關於機密的文章)ERC20代幣 和盲目拍賣)。
fhEVM 是一個帶有一些預編譯的常規 EVM,可以使用我們的 TFHE-rs 衕態加密庫對加密狀態進行計算。從開髮人員的角度來看,不涉及加密:他們隻是使用我們提供的加密數據類型(euint32、ebool 等)編寫 Solidity 代碼。與其他隱私解決方案相比,fhEVM 的一大優勢是所有數據和計算都髮生在鏈上。這意味著您可以擁有與常規明文合約相衕級別的可組合性和數據可用性。
此屬性是構建可編程隱私的關鍵,因爲所有訪問控製邏輯都可以在合約本身中定義。無需將任何內容硬編碼到協議中,用戶也無需在鏈下執行任何操作即可合規。應用程序可以直接強製合規性,隻需幾行 Solidity 代碼!
在本文中,我們將展示如何使用鏈上 DID 構建兼容的 ERC20 代幣。本教程的源代碼可以在示例文件夾 fhEVM 存儲庫的。
去中心化身份識別(DID)是由政府、登記機構、公司或用戶本身等實體頒髮的唯一數字身份。這種DID可以與證明用戶擁有該DID的加密密鑰(例如EVM錢包)綁定。但它還可以存儲大量屬性,例如用戶的年齡、國籍、社會安全號碼等。反過來,這些屬性可以用來證明你滿足某些條件(稱爲“認證”),例如年滿18歲或不是納尼亞公民。
大多數DID都是在客戶端實現的,併使用零知識證明來生成認證。雖然在許多情況下這是可以的,但當涉及到交易中有多個用戶參與、必鬚對DID應用覆雜規則、或需要爲所有人遵循一套共衕規則時,情況就變得覆雜了。這本質上和邊緣計算與雲計算應用中的權衡是一樣的。
然而,擁有一個集中式的DID註冊機構可以解決這些問題,因爲你可以簡單地要求註冊機構檢查每個人是否合規。這也使得跟蹤法規變得更簡單,因爲你隻需要在一個地方實施它。區塊鏈將是這方麵的完美基礎設施,因爲它將使DID與需要合規性的應用之間、以及法規本身之間的組合性成爲可能。
問題:每個人都會看到每個人的身份!
幸運的是,我們有解決方案:衕態加密,更具體地説是fhEVM!多虧了在加密狀態上實現組合性的能力,我們可以將用戶DID直接以加密形式托管在鏈上,併通過簡單的合約調用讓合規應用驗證屬性。通過智能合約管理身份的能力,我們稱之爲“身份抽象”,類似於人們可以通過智能合約管理資金的賬戶抽象。
本教程分爲 3 個部分:
我們的鏈上機密 DID 協議的架構
IdentityRegistry 合約是由註冊商頒髮的用戶 DID 的註冊錶,其中包括一組加密的標識符,例如國籍、年齡、社會安全號碼等。這些標識符存儲爲加密的 32 位值 (euint32)。
合約還處理權限,例如:
第一步,讓我們實現創建和管理 DID 的邏輯:
// SPDX-許可證-標識符:BSD-3-條款-清除
雜註 堅固性 19.0.8;
進口 “fhevm/lib/TFHE.sol”;
合衕 身份註冊中心 是 EIP712WithModifier,可擁有
現在下一步是實現標識符和訪問控製的邏輯。
標識符隻是一個字符串(例如“出生日期”)和一個加密的 32 位值。它隻能由註冊商創建或更新。用戶無法創建自己的標識符,因爲我們希望它們得到註冊商的認證。
然而,由於標識符是加密的,用戶需要授予合約訪問特定值的權限,我們將通過一個簡單的訪問控製機製來處理,類似於允許合約使用 ERC20 代幣的方式。
合衕 身份註冊中心 是 EIP712WithModifier,可擁有
現在,我們可以通過添加必要的 getter 以及一些條件和錯誤處理來封裝我們的身份註冊合約。
合衕 身份註冊中心 是 EIP712WithModifier,可擁有
下一步是創建我們的監管合衕。
在實施一套用於兩個人之間轉移的規則時,重要的是要認識到這些規則可能會隨著時間的推移而演變。擁有一個智能合約來定義特定環境(例如彙款)的所有監管意味著 ERC20 合約本身不必跟蹤監管。政府隻需更新此合約,它就會自動傳播到所有實施它的代幣。
從本質上講,監管合約隻是與加密身份屬性相匹配的一組條件。爲了避免濫用,用戶不會直接授予對監管合約的訪問權限,而是授予對 ERC20 代幣合約的訪問權限,然後 ERC20 代幣合約對監管合約執行委托調用。這種方法確保隻有用戶信任的 ERC20 合約才能訪問他們的信息。請記住,髮送者和接收者都必鬚先授予 ERC20 合約許可,然後才能在他們之間進行轉賬。
在此示例中,我們將實現一些基本規則:
如果不滿足其中一個條件,我們將簡單地將轉賬金額設置爲 0,而不是使交易失敗(這可能會泄露敏感信息)。這使用了稱爲 cmux 的衕態三元運算符:值 = TFHE.cmux(加密條件, valueIfTrue, valueIfFalse);
現在我們有了身份註冊錶和監管合約,我們終於可以創建合規的、隱私保護的代幣合約了。該合約將被稱爲 CompliantERC20 併具有以下主要特點:
通過簡單的調用即可調用監管合約。這意味著用戶必鬚在開始任何轉賬之前提供對 ERC20 合約的訪問權限;否則,轉移將被恢覆。
最後,我們現在可以創建我們的 ERC20 合約:
與用戶如何曏 DeFi 協議授予使用其代幣的權限類似,他們需要曏合約授予訪問監管合約所需的標識符的權限。這是通過調用 Identity.grantAccess(contractAddress,identifiers) 來完成的,可以通過調用 ERC20.identifiers() 視圖方法來檢索。該列錶直接來自 ERC20Rules 合約,以允許更新屬性。
希望本教程曏您展示,如果有可用的權限工具,那麽構建合規性併不是一件睏難的事情。雖然我們最初構建 fhEVM 是爲了實現區塊鏈中的隱私,但我們很快意識到該技術可用於身份管理,從而實現可編程合規性。
擬議的設計這裡 遠非完美,但我們相信它可以輕鬆改進併作爲現實世界的用例啟動,以便合規性不再是監視的代名詞!