区块链教程之Bitcoin多重签名

由比特币的签名机制可知,如果丢失了私钥,没有任何办法可以花费对应地址的资金。

这样就使得因为丢失私钥导致资金丢失的风险会很高。为了避免一个私钥的丢失导致地址的资金丢失,比特币引入了多重签名机制,可以实现分散风险的功能。

具体来说,就是假设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。

猜你喜欢

转载自blog.csdn.net/sinat_36728518/article/details/122036245