由比特币的签名机制可知,如果丢失了私钥,没有任何办法可以花费对应地址的资金。
这样就使得因为丢失私钥导致资金丢失的风险会很高。为了避免一个私钥的丢失导致地址的资金丢失,比特币引入了多重签名机制,可以实现分散风险的功能。
具体来说,就是假设N个人分别持有N个私钥,只要其中M个人同意签名就可以动用某个“联合地址”的资金。
多重签名地址实际上是一个Script Hash,以2-3类型的多重签名为例,它的创建过程如下:
const pubkeys = [
'026477115981fe981a6918a6297d9803c4dc04f328f22041bedff886bbc2962e01',
'02c96db2302d19b43d4c69368babace7854cc84eb9e061cde51cfa77ca4a22b8b9',
'03c6103b3b83e4a24a0e33a4df246ef11772f9992663db0c35759a5e2ebf68d8e9'
].map((hex) => Buffer.from(hex, 'hex'));
const { address } = bitcoin.payments.p2sh({
redeem: bitcoin.payments.p2ms({ m: 2, pubkeys })
});
console.log(address); //36NUkt6FWUi3LAWBqWRdDmdTWbt91Yvfu7
// 使用Base58编码即得到总是以3开头的多重签名地址,这个地址实际上是一个脚本哈希后的编码。
以3开头的地址就是比特币的多重签名地址,但从地址本身无法得知签名所需的M/N。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)