一、什么是异构链多签?
指通过不同公链(比如Eth+Arweave+Solana)的钱包进行签名,甚至包括MPC钱包签名。比如我在DNA中实现的:
比如我自己的号,绑了5个地址,就可以进行n/5的多签操作:
二、可行性
一直没见到这种钱包,估计确实很难
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
七、实现(20230227更新)
- DNA wallet @ DoraHacks
- Rust Playground :在不考虑CKB合约的情况下,使用Rust实现各个公链的消息签名的验证。
- Playground >> CKB合约。
- CKB多签地址。
- 多签钱包(CKB)
- 多签钱包(多链)——可行性?
1 Like
xjd
4
之前雷兔的portal wallet,实现了多链单签钱包:
这在基础上,可以配合多签代码进行修改:
1 Like
谢谢回复。
我还有几个问题
- 可以介绍下,多签地址是怎么生成的呢?我只查到了Neuron的实现。CKB合约的多签地址也是类似的吗?
- 多签地址有没有一个私钥?如果有,以什么形式保存在哪里呢?貌似是没有的。不过neuron多签的问题是,不能像Safe那样更换签名的地址。
- 其实第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. 生成其它公链的地址。这个可能离不开私钥。
xjd
6
2 Likes
嗯嗯。学习Rust有些痛苦啊
希望有更多认同 多链 的朋友一起做出来:
- 多链(钱包)多签;
- 多链恢复(而非社交恢复)
- 目前看,只有CKB能做,再搞一个爆品出来啊~
(我已经实现了一个中心化版本了:DNA - RuneBox )
1 Like