几个月前,知名加密货币投资机构a16z发布了一项引人注目的中本挑战,列出了区块链领域亟待解决的关键问题。其中”合规可编程隐私”这一议题尤其引起了我们的关注,因为这正是我们团队长期探索的方向。今天,我们很高兴地分享首个基于同态加密和fhEVM机密智能合约协议的解决方案(若您对fhEVM尚不熟悉,可以参考我们此前关于机密ERC20代币和链上盲拍的技术文章)。
fhEVM本质上是一个配备了特殊预编译功能的EVM虚拟机,能够通过我们的TFHE-rs同态加密库对加密状态执行计算。对开发者而言,整个过程完全无需处理加密细节:他们只需使用我们提供的加密数据类型(如euint32、ebool等)编写常规的Solidity代码即可。相较于其他隐私解决方案,fhEVM的显著优势在于所有数据和计算都完全在链上进行。这意味着开发者可以获得与传统明文合约同等级别的可组合性和数据可用性。
这一特性为构建可编程隐私奠定了基础,因为所有访问控制逻辑都可以直接在智能合约中定义。既不需要在协议层硬编码任何规则,用户也无需执行任何链下操作来满足合规要求。应用程序仅需几行Solidity代码就能直接强制执行合规性!
本文将重点演示如何利用链上DID构建合规的ERC20代币。完整教程的源代码已开源在fhEVM代码库的示例目录中。
基于链上加密的去中心化身份抽象
去中心化身份(DID)是由政府机构、注册商、企业或用户本人颁发的数字身份凭证。这种DID不仅能够与用户的加密密钥(如EVM钱包)绑定,还可以存储包括年龄、国籍、社保号码等在内的多种属性信息。这些属性进而可以用于证明用户满足特定条件(即”认证”),例如年满18岁或非特定国家公民等。
目前大多数DID方案都采用客户端实现,依赖零知识证明来生成认证。虽然这种方案在多数场景下可行,但当交易涉及多方参与、需要应用复杂规则或必须遵循统一标准时就会面临挑战。这本质上类似于边缘计算与云计算应用中的取舍问题。
建立中心化的DID注册机构能够有效解决这些问题,因为它可以统一验证所有参与者的合规状态。同时,这种集中化管理也简化了法规更新流程,只需在单一位置实施变更即可。区块链技术恰好为此提供了理想的基础设施,它能实现DID与合规应用之间、以及不同法规之间的无缝组合。
但随之而来的问题是:所有人的身份信息都将公开可见!
幸运的是,我们通过同态加密技术(特别是fhEVM)完美解决了这个难题。借助在加密状态下实现可组合性的能力,我们可以将用户DID以加密形式直接存储在链上,同时允许合规应用通过简单的合约调用来验证属性。这种通过智能合约管理数字身份的能力,我们称之为”身份抽象”,其重要性堪比通过智能合约管理资金的账户抽象概念。
本教程包含三个核心组成部分:
首先,身份抽象通过专门的注册合约实现,该合约负责管理身份信息和认证流程。在本案例中,我们假设DID对应的是官方政府颁发的身份证明。注册机构由中央权威(如AFNIC)管理,它们可以授权注册商(如KYC服务提供商Onfido、Jumio等)创建用户DID,而用户则通过其注册商来管理和更新自己的身份信息。
其次,法规合约定义了基于DID信息的代币转账规则集。这实际上是在合约层面而非用户层面实施监管要求。
最后,合规机密转账在特殊的ERC20合约中实现,该合约通过调用法规合约来强制执行转账合规性,同时完全保持标准ERC20接口不变。本示例中我们使用的是加密版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,可拥有
最后,我们通过添加必要的查询方法以及条件判断和错误处理来完善身份注册合约。
合同 身份注册中心 是 EIP712WithModifier,可拥有
构建智能监管合约
接下来我们需要创建监管合约。
在设计两人之间的转账规则时,必须考虑到这些规则可能会随时间演变。通过独立的智能合约来定义特定场景(如跨境汇款)的所有监管要求,意味着ERC20合约本身无需关注具体监管细节。当政府更新监管规则时,只需升级监管合约,所有依赖它的代币将自动获得最新规则。
本质上,监管合约就是一组与加密身份属性匹配的条件判断。为防止滥用,用户不会直接向监管合约授权,而是授权给ERC20代币合约,后者再通过委托调用来访问监管合约。这种设计确保只有用户信任的ERC20合约才能访问其敏感信息。请注意,在转账双方之间进行交易前,发送方和接收方都必须预先向ERC20合约授予相应权限。
在本示例中,我们实现了以下基本规则:境内转账不受限制,但跨境转账上限设为10,000个代币;被列入黑名单的用户既不能发送也不能接收代币;同时禁止向黑名单国家转账。
当条件不满足时,我们不会直接使交易失败(这可能泄露敏感信息),而是将转账金额设为0。这使用了同态加密特有的cmux三元选择运算符:value = TFHE.cmux(加密条件, valueIfTrue, valueIfFalse);
实现合规加密ERC20合约
在完成身份注册表和监管合约后,我们现在可以创建兼具合规性和隐私保护功能的代币合约了。这个名为CompliantERC20的合约具有以下核心特性:用户余额和转账金额全程加密;通过调用监管合约强制实施合规要求;同时允许向白名单地址(如监管机构)选择性披露余额信息。
监管合约通过简单调用即可集成。需要注意的是,用户必须在发起任何转账前预先向ERC20合约授予访问权限,否则转账将被拒绝执行。
最终的ERC20合约实现如下:
与用户授权DeFi协议使用其代币类似,他们需要向合约授予访问监管合约所需标识符的权限。这通过调用Identity.grantAccess(contractAddress,identifiers)实现,其中标识符列表可通过ERC20.identifiers()视图方法获取。该列表直接来源于ERC20Rules合约,确保属性更新能够及时同步。
合规与隐私的完美融合
希望通过本教程,您已经认识到在拥有适当工具的情况下,构建合规解决方案并非难事。虽然我们最初开发fhEVM的目的是实现区块链隐私保护,但很快发现这项技术同样适用于身份管理领域,为实现可编程合规性开辟了新途径。
我们在这里提出的设计方案远非完美,但我们相信它为进一步优化提供了良好基础,并有望发展为真实可用的解决方案,最终证明合规性不必以牺牲隐私为代价!
延伸阅读
欢迎通过以下方式深入了解我们的工作:为Zama的fhEVM代码库点亮Star支持我们的开发;查阅Zama的fhEVM技术文档获取详细说明;加入我们的社区频道获得技术支持;或者参与Zama赏金计划开发基于fhEVM可编程隐私的链上游戏(奖金高达15,000欧元),共同推动全同态加密领域的发展。
声明:文章不代表CHAINTT观点及立场,不构成本平台任何投资建议。投资决策需建立在独立思考之上,本文内容仅供参考,风险 自担!转载请注明出处:https://www.chaintt.cn/10941.html