讨论:异构链多签钱包的可行性与必要性 - 20230122更新

一、什么是异构链多签?

指通过不同公链(比如Eth+Arweave+Solana)的钱包进行签名,甚至包括MPC钱包签名。比如我在DNA中实现的:

比如我自己的号,绑了5个地址,就可以进行n/5的多签操作:


image
image

二、可行性

一直没见到这种钱包,估计确实很难
Nervos支持密码学原语,对这些流行公链的验签逻辑应该都能实现。(如果不考虑成本)

三、必要性

  • Neuron的多签模式有点麻烦,当然主要是Nervos生态的钱包不多,支持签名验证的更少。
  • DNA目前是中心化的,如果想上链(DID部分),那条链必须支持密码学原语,必须支持多种链的验签——而这又是多签钱包的基础——有必要一试

四、感兴趣的一起来玩~

Twitter: https://twitter.com/_runebox_
Discord: https://discord.gg/H22UQuKUrA

五、参考资料

1. CKB Auth

2. CKB合约:验证RSA签名

六、草稿(20230122更新)

  • dna:多签。
    • 接收参数:
      • account
      • public_key
      • message:签名的原始文本内容
      • signature:签名的结果。
      • account_key:比如eth=did:pkh:slip0044:60, ckb=did:pkh:slip0044:309, UniPassID=did:ns:unipassid
      • lock:预期通过exec调用的的{chain}-lock
      • lock_version:{chain}-lock的版本
  • {chain}-lock:处理某条链的具体逻辑。account_key和lock_version是与某条链和具体的lock实现版本绑定的。
    • 需要检查传入的account_key和lock_version。
    • 方法:verify_message。非Eth链。
    • 方法:recover_message。仅限Eth链。
    • 方法:sign_message
1 Like

报名…
BTW, safe的多签钱包很灵活。

怎么个灵活法?介绍一下?

之前雷兔的portal wallet,实现了多链单签钱包:

这在基础上,可以配合多签代码进行修改:

1 Like

谢谢回复。
我还有几个问题 :pray:

  1. 可以介绍下,多签地址是怎么生成的呢?我只查到了Neuron的实现。CKB合约的多签地址也是类似的吗?
  2. 多签地址有没有一个私钥?如果有,以什么形式保存在哪里呢?貌似是没有的。不过neuron多签的问题是,不能像Safe那样更换签名的地址。
  3. 其实第2个问题想问的是,CKB的多签逻辑能不能复用一下,比如生成其它公链的地址?

下面的代码是我在Neuron代码中查到的:

static hash(blake160s: string[], r: number = 0, m: number = 1, n: number = 1): string {
    const serializeResult = Multisig.serialize(blake160s, r, m, n)
    return Blake2b.digest(serializeResult).slice(0, 42)
  }

static getMultisigScript(blake160s: string[], r: number, m: number, n: number) {
    return SystemScriptInfo.generateMultiSignScript(Multisig.hash(blake160s, r, m, n))
  }

嗯,我知道Script可以转换成CKB地址。。。。
所以,第3个问题有点难办到了。

我预想的需求:
A. 签名地址可以更换、增加、移除,但是不影响生成的多签地址。参考Safe。
B. 生成其它公链的地址。这个可能离不开私钥。

  1. 多签的地址,参见 https://nervosnetwork/ckb-system-scripts/blob/master/c/secp256k1_blake160_multisig_all.c
    rfcs/0021-ckb-address-format.md at master · nervosnetwork/rfcs · GitHub
  2. 多签地址,需要N个私钥才能解锁,不存在一个私钥

A. 签名地址可以更换、增加、移除,但是不影响生成的多签地址。参考Safe。

要实现这个,可以在一个cell里包含不同的公钥,该cell可以通过type id升级,即实现更换,增加,移除等操作。多签算法在解锁时,要引用该cell。

2 Likes

支持动态增加多签的成员,支持多个区块链网络。