以太坊 solidity 多重签名合约 —— 他好,你也好

    建立一个多重签名合约,这个合约可以有多个账户。每次通过这个合约转出ETH时,就需要一定数量的账户同意(例如总共有3个用户,可以设置需要2个同意)。这个应用场景也比较明显,例如公司的一份文件经常需要几个单位或部门分别签名才有效,多重签名技术就是在网络环境里解决这类问题的一种方法,用于同一文档必须经过多人的签名才有效的情形。在推广一下,个人合资创业也是一样,防止其中某个人卷钱跑路。

    我们先来简单的说一下,原理和框架。

   创建合约之后,我们先添加多个账号,每个人都可以向账户里存钱以及把账户的钱转到其他账户。如果有人想转账,我们先构建一笔交易,放入pending队列中;其他账户可以通过函数接口观察pending队列里的所有交易;如果他认为可行就对认可的交易进行签名,当一笔处于pending状态的交易被规定的人数认可之后,这笔交易就可以发送出去了;这是整个多重签名的过程。

   以太坊 solidity 多重签名合约 —— 他好,你也好_第1张图片

     看了上图理解起来,应该更简单了。所有人都可以创建交易,然后交易发送到pending队列里,然后所有人都可以进行签名,如果一笔交易达到了签名数量的要求,这笔交易就会被发送出去了。

     源码:https://github.com/XuHugo/solidityproject/tree/master/MultiSigWallet

   只介绍一下,创建交易和签名两部分;

  创建交易,

以太坊 solidity 多重签名合约 —— 他好,你也好_第2张图片

    比较简单,就是把你要发送的交易,进行解析,放入pendingTransactions中,然后等待签名就好了;这里不需要考虑什么nonce值,因为nonce值在你发送这笔交易的时候已经消耗了。

    签名也很简单,这里的签名并不是密码学里的签名,只是一个确认;签名的时候你需要制定签名的交易ID,如果这笔交易签名的数量达到要求了,就可以认为这笔交易被认可里,可以发送里。签名之后,需要对pendingTransactions里的交易进行更新,把已经完成的交易进行删除。

    怎么样,是不是很简单。

以太坊 solidity 多重签名合约 —— 他好,你也好_第3张图片

你可能感兴趣的:(以太坊那点币事儿,智能合约安全与实践)