Ethereumスマートコントラクトにおけるマルチシグの実装例
Gnosis MultiSigWalletのマルチシグ実装
参考実装: MultiSigWallet.sol
mapping (uint => Transaction) public transactions code
承認待ち/済みのトランザクションを管理する
mapping (uint => mapping (address => bool)) public confirmations code
transaction_id => (承認者のアドレス => true/false) という構造でトランザクションごと承認者ごとに承認状況を管理する
isConfirmedで必要な承認数が集まったかどうか判定する
TrueUSDのマルチシグ実装例
TrueUSDのマルチシグだと2/3承認固定で実装されている。
MultisigOwner.solでマルチシグ対応する。
MultisigOwnerがTrueUSDコントラクトのオーナーであるTimeLockedControllerを持っており、必要な承認数(2以上の承認)が集まると実行される。
https://github.com/trusttoken/trueUSD/blob/master/contracts/MultisigOwner.sol#L205-L206
デプロイ時にTrueUSDコントラクトのオーナーを設定している
https://github.com/trusttoken/trueUSD/blob/master/migrations/2_deploy_contracts.js#L132