# 使用MPC技术构造公链

By [Untitled](https://paragraph.com/@0xbc0a96e2f8993b65b499789fd8874b7d58e35b3d) · 2023-01-12

---

私钥和合约在公链系统中是完全解耦的，合约不需要理解签名的逻辑，公链系统会确认签名的有效性。这样的设计让合约设计策略可以更加灵活，不会依赖私钥。

通过MPC技术可以做到安全地存储密钥，单一或者小批量碎片丢失，不会对该密钥的安全性有影响。进而MPC技术可以做到私钥托管，私钥需要对每一笔进行签名，通过单点进行私钥管理很容易出现单点安全问题，而MPC技术是一种分布式的签名技术，避免了单点私钥管理的分险。通过MPC技术加上共识算法，就可以形成一套去中心化的私钥管理公链，在多链生态提供优质跨链解决方案。

### MPC技术

MPC的基础技术实现包含：

1.  常用的加密解密
    
2.  hash函数
    
3.  密钥交换
    
4.  同态加密（HE，Homomorphic Encryption）
    
5.  伪随机函数
    
6.  秘密共享
    
7.  承诺证明
    
8.  零知识证明等
    

`生成地址`

安全多方计算是指在无可信第三方的情况下，多个参与方协同计算一个约定的函数，并且保证每一方仅获取自己的计算结果，无法通过计算过程中的交互数据推测出其他任意一方的输入和输出数据。MPC节点在生成地址时需要满足以下条件:

1.  在计算过程中不生成目标私钥
    
2.  节点需要保存私钥碎片
    
3.  私钥碎片持久化
    
4.  系统中断之后恢复私钥碎片
    
5.  节点之间建立安全的通信方式
    
6.  部分私钥碎片的签名即可满足对于目标私钥签名的需求
    
7.  固定数量的节点就需要满足，节点的上下线需求，算法需要满足对于节点权限的回收以及授权
    
8.  去中心化的网络中需要识别节点恶意行为
    

共享秘密以及签名时需要生成安全随机数，可以使用VRF可验证随机函数，VRF的数据输入通常包含一对公钥和私钥（也称为“verification key”和“secret key”）以及一个seed。而seed则是选择的。将这些数值一起输入VRF，用私钥和seed来生成随机数。然后，VRF会生成一个随机数以及一份证明。最关键的一步是生成证明，用户可以通过证明来验证函数。而将私钥保密则可以确保随机数无法被预测。

使用承诺证明来保证网络的信任，承诺方案是一种加密原语，允许用户生成承诺一个选定的价值并对他人保密，并揭示承诺的价值，承诺方案的设计使得承诺人在承诺后无法改变，承诺具有约束力，具有重要的应用价值在许多加密协议中，包括安全随机数的产生、零知识证明和安全计算。

为了防止网络中节点的恶意行为，可以采用了承诺方案相互不信任的网络。每当节点需要共享它们的数据时，就需要提交承诺方案与外界的计算值。节点优先公开发送一份与他们所掌握的秘密有关的承诺，其他节点可以验证。承诺方案可以避免秘密值对网络的干扰，承诺人不能改变秘密价值。通过引入承诺方案，我们可以检测到节点可能的恶意行为，例如提交错误的秘密值或潜在的行为收集其他节点的结果，然后进行有针对性的密码攻击。承诺方案将能够在损失产生之前检测并重新启动协议。

分布式密钥生成方案分为两个阶段。首先，以去中心化、分布式的方式生成阈值Paillier加密方公私钥对，然后以分布式的方式生成ECDSA私钥对。

出现承诺不一致或任何零知识证明失败，则协议终止而无输出。

`签名`

对于签名要保证以下问题得到解决：

1.  交易合法性验证
    
2.  跨链交易的合法性验证以及证明
    
3.  节点合法性验证
    
4.  节点需要验证零知识证明
    

零知识证明是一种实用且应用广泛的协议。它指的是证明者在不提供断言的情况下说服验证者断言是正确的能力任何对验证者有用的信息。

零知识证明实质上是一个涉及两个或多个当事人的协议，即为完成一项任务，双方或多方需要采取的一系列步骤。证明人证明验证者和使他相信他知道拥有某个消息，但他不能透露

在证明过程中向验证者提供的关于已证明消息的任何信息。

零知识证明可分为互动式零知识证明和非互动式零知识证明，而零知识证明又有不同的形式

证明的内容。主要应用非交互零知识进行检测不可靠网络中节点可能的恶意行为。例如，中间产物节点提交的结果没有基于正确的私钥碎片。\*\* \*\*

### 用例:去中心化托管

可以基于MPC公链定制化的用户资金管理方案，在节点共识中定制流程。用户使用MPC公链上的私钥即可满足多链的使用以及资产管理的需求。

用户生成并且管理MPC公链的私钥，请求通过MPC生成其它链上对应的私钥。（考虑实现去中心化的二步验证，以保证用户的资产账户安全）假设用户的资产管理在ETH上，那么我们可以实现的功能：

1.  转账黑白名单
    
2.  合约访问限制
    
3.  权限控制
    
4.  审核工作流
    
5.  部分流程自动化（比如自动化触发合约等）
    

当然我们也可以处理比较复杂的工作流，比如以资金需要在Uniswap v3上提供流动性为例。在v3上提供流动性，提供的流动性区间越集中且包含当前价格的情况下，得到的手续费是最高的，随着价格的变动就需要不断的调整仓位(当然也可以根据交易的算法进行调整，例子不考虑复杂的交易算法)。在MPC公链上，就可以通过定制的流程进行管理。

主要流程。

1.  通过MPC节点生成独立使用的私钥
    
2.  用户资产转移到该私钥上
    
3.  计算需要投资的币种以及对应的金额
    
4.  在v3上建立仓位，按照设置好的区间进行投资
    
5.  监控价格变化，当前价格不在仓位所在的区间，发起调仓请求
    
6.  系统验证请求系统，关闭仓位，并进行交易，兑换成需要的币种和金额
    
7.  按照区间进行投资
    

注：例子中只是使用实例来表示流程，并不是一定要是在Uniswap v3上执行，这样的流程通用性比较差，而且使用跨链互操作性的访问解决会更好。

### 用例:跨链&跨链桥

随着多链的发展，对应的跨链需要不断会的增加，通过MPC公链也可以实现跨链的需求，跨链桥的逻辑是把A链资产转换成对应在B链的资产，基于L2的跨链技术在实时性上存在巨大的问题，Cosmos对比第一代的跨链桥方案要安全的多，比如layer 2的第一代解决方案，原因是因为：交易需要私钥进行签名才可以使用，而跨链的需求又需要自动化完成，因此这时候的跨链的解决方案就需要在实时性和易用性之间做出取舍，选择私钥保存在服务器上，这也是其不安全的原因。

而Cosmos通过IBC协议完成这部分的操作，其有共识控制，就以为脱离私钥管理，即可以做到安全性也可以做到实时性。而IBC协议的跨链协议定义非常有限，比如现在只做token之间的跨链。而且其也只能支持有IBC协议的公链。

IBC协议灵活性太差，且需要对应的公链支持IBC协议才可以完成对应的工作。

但通过共识控制信息的转移，是一种安全且高效的方式，

MPC技术本质上是把私钥分散保存在各个节点，需要使用的时候通过节点进行签名。也就完成了一种通过共识来托管私钥进行自动化的方式。

且MPC管理的是私钥，这就意味着他可以直接进行定制化的服务，就如同用户使用私钥一样访问合约，同时他不需要公链对于IBC协议的支持，EVM链，以及Bitcoin都可以支持。

同时MPC的协议之间也可以用共识的方式去沟通，这样可以做到去中心化，同时他还也可以支持智能合约，这个方向的公链，会对于Cosmos现在的使用造成比较大的影响。

跨链桥需要在对应链上部署跨链合约，用来接受用户的跨链请求，以及转移用户的资产。这样在该公链上就可以通过合约的方式直接发起跨链交易。

### 用例:跨链互操作性

通过对于MPC技术可以完成对于私钥控制管理，可以做到无侵入的Defi调用，可以帮助用户去中心化的管理资产，已经实现跨链桥，如果可以在公链上加入合约，可以以去中心化的方式实现资产的管理，消息的传递，跨链，以及跨链的Defi调用。

安全的跨链通信（即：在各个链上环境之间传输任意数据、通证和指令）是实现跨链智能合约的关键要素。

跨链智能合约是去中心化的应用，由多个部署在不同区块链网络的智能合约组成。这些智能合约之间可以实现互操作性，并共同构成一个完整的应用。

这种创新的设计范式对多链生态的发展起到了关键的推动作用，并将有潜力利用不同区块链、侧链和layer 2网络的独特优势，打造出全新的智能合约用例。

### 共识

采用比较的共识协议可以链的处理效率更加的高效，共识机制一直在发展。

Solana的优化技术，是提高TPS的一个很重要的技术，使用可验证延迟函数，他的作用是需要固定时间来执行的函数，并且可以生成它的证明。这样就可以就可以得到交易的顺序，排序好的交易就有利于后续的并行化处理。

使用领导者的方式也可以大大提供交易出来的，每个节点都只与领导者通信，而不是向领导者和其他所有节点发送消息。领导者广播要投票的消息（建议的块）；每个节点将其投票发送给收集消息的领导者。

这大大减少了通过系统的消息总数，使网络具有极强的可扩展性。

通过压缩区块以及并行化处理也是优化效率的常用手段

### 合约&Gas

EVM仍然是合约的主流，EVM的状态树MPT也是EVM执行效率不高的原因，节点基本上包含了一个键值映射，其中的键是地址，而值包括账户的声明、余额、随机数nounce、代码以及每一个账户的存储。可以修改成可以account为主就是由一些列值跟KV 数据结构组成。这些数据结构被称为表实体。这种数据层级结构使得开发者能够有效的在一大堆账户上操作少部分的数据副本或者在小部分账号上存储一大堆数据。

而 Move是一种全新的编程语言，专门为只能合约而设计，可以提供安全且高性能为主。Move VM的账户，包含任意数量的Move资源和Move模块。Move的生态随着对应的区块链不断的发展，生态也不会不断壮大。两种语言都是可以选择的。

gas的问题主要是面对跨链的问题，而且其它网络的gas费也是变化的要满足用户的使用

1.  用户只需要支付一种币种用来做为gas,其它链上的gas后端做转换
    
2.  尽可能的保证用户的gas收取合理
    

用户只需在源链上转移的资产中支付费用，所有其他费用（最终确定、中继）都在后端处理。可以考虑使用备用基金的方式，多收取的gas以及每一笔交易中用户支付的gas都打入该基金，基金可以补用户的gas费用，主要是目标链中的 gas 价格波动的情况下，用来提升用户体验。

\*\*

\*\*

---

*Originally published on [Untitled](https://paragraph.com/@0xbc0a96e2f8993b65b499789fd8874b7d58e35b3d/mpc)*
