0x / MultiSig

MultiSigWalletWithTimeLockExceptRemoveAuthorizedAddress

0x01d9f4d104668cdc0b6d13c45dff5e15d58d8f28
MultiSigWallet
function

addOwner

Restricted (onlyWallet, ownerDoesNotExist, notNull, validRequirement)

Inputs

ParameterTypeDescription
owneraddress

Outputs

(void)
     function addOwner(address owner)
         public
         onlyWallet
         ownerDoesNotExist(owner)
         notNull(owner)
         validRequirement(owners.length + 1, required)
     {
         isOwner[owner] = true;
         owners.push(owner);
         OwnerAddition(owner);
     }
 
function

removeOwner

Restricted (onlyWallet, ownerExists)

Inputs

ParameterTypeDescription
owneraddress

Outputs

(void)
     function removeOwner(address owner)
         public
         onlyWallet
         ownerExists(owner)
     {
         isOwner[owner] = false;
         for (uint i=0; i<owners.length - 1; i++)
             if (owners[i] == owner) {
                 owners[i] = owners[owners.length - 1];
                 break;
             }
         owners.length -= 1;
         if (required > owners.length)
             changeRequirement(owners.length);
         OwnerRemoval(owner);
     }
 
function

replaceOwner

Restricted (onlyWallet, ownerExists, ownerDoesNotExist)

Inputs

ParameterTypeDescription
owneraddress
newOwneraddress

Outputs

(void)
     function replaceOwner(address owner, address newOwner)
         public
         onlyWallet
         ownerExists(owner)
         ownerDoesNotExist(newOwner)
     {
         for (uint i=0; i<owners.length; i++)
             if (owners[i] == owner) {
                 owners[i] = newOwner;
                 break;
             }
         isOwner[owner] = false;
         isOwner[newOwner] = true;
         OwnerRemoval(owner);
         OwnerAddition(newOwner);
     }
 
function

changeRequirement

Restricted (onlyWallet, validRequirement)

Inputs

ParameterTypeDescription
_requireduint256

Outputs

(void)
     function changeRequirement(uint _required)
         public
         onlyWallet
         validRequirement(owners.length, _required)
     {
         required = _required;
         RequirementChange(_required);
     }
 
function

submitTransaction

Inputs

ParameterTypeDescription
destinationaddress
valueuint256
databytes

Outputs

TypeDescription
uint256
     function submitTransaction(address destination, uint value, bytes data)
         public
         returns (uint transactionId)
     {
         transactionId = addTransaction(destination, value, data);
         confirmTransaction(transactionId);
     }
 
function

getConfirmations

Inputs

ParameterTypeDescription
transactionIduint256

Outputs

TypeDescription
address[]
     function getConfirmations(uint transactionId)
         public
         constant
         returns (address[] _confirmations)
     {
         address[] memory confirmationsTemp = new address[](owners.length);
         uint count = 0;
         uint i;
         for (i=0; i<owners.length; i++)
             if (confirmations[transactionId][owners[i]]) {
                 confirmationsTemp[count] = owners[i];
                 count += 1;
             }
         _confirmations = new address[](count);
         for (i=0; i<count; i++)
             _confirmations[i] = confirmationsTemp[i];
     }
 
function

getTransactionIds

Inputs

ParameterTypeDescription
fromuint256
touint256
pendingbool
executedbool

Outputs

TypeDescription
uint256[]
     function getTransactionIds(uint from, uint to, bool pending, bool executed)
         public
         constant
         returns (uint[] _transactionIds)
     {
         uint[] memory transactionIdsTemp = new uint[](transactionCount);
         uint count = 0;
         uint i;
         for (i=0; i<transactionCount; i++)
             if (   pending && !transactions[i].executed
                 || executed && transactions[i].executed)
             {
                 transactionIdsTemp[count] = i;
                 count += 1;
             }
         _transactionIds = new uint[](to - from);
         for (i=from; i<to; i++)
             _transactionIds[i - from] = transactionIdsTemp[i];
     }
 
function

getOwners

Inputs

(void)

Outputs

TypeDescription
address[]
     function getOwners()
         public
         constant
         returns (address[])
     {
         return owners;
     }
 
function

getConfirmationCount

Inputs

ParameterTypeDescription
transactionIduint256

Outputs

TypeDescription
uint256
     function getConfirmationCount(uint transactionId)
         public
         constant
         returns (uint count)
     {
         for (uint i=0; i<owners.length; i++)
             if (confirmations[transactionId][owners[i]])
                 count += 1;
     }
 
function

isConfirmed

Inputs

ParameterTypeDescription
transactionIduint256

Outputs

TypeDescription
bool
     function isConfirmed(uint transactionId)
         public
         constant
         returns (bool)
     {
         uint count = 0;
         for (uint i=0; i<owners.length; i++) {
             if (confirmations[transactionId][owners[i]])
                 count += 1;
             if (count == required)
                 return true;
         }
     }
 
function

getTransactionCount

Inputs

ParameterTypeDescription
pendingbool
executedbool

Outputs

TypeDescription
uint256
     function getTransactionCount(bool pending, bool executed)
         public
         constant
         returns (uint count)
     {
         for (uint i=0; i<transactionCount; i++)
             if (   pending && !transactions[i].executed
                 || executed && transactions[i].executed)
                 count += 1;
     }
 
event

RequirementChange

Inputs

ParameterTypeDescription
requireduint256

Outputs

(void)
     event RequirementChange(uint required);
 
event

OwnerRemoval

Inputs

ParameterTypeDescription
owneraddress

Outputs

(void)
     event OwnerRemoval(address indexed owner);
 
event

OwnerAddition

Inputs

ParameterTypeDescription
owneraddress

Outputs

(void)
     event OwnerAddition(address indexed owner);
 
event

Deposit

Inputs

ParameterTypeDescription
senderaddress
valueuint256

Outputs

(void)
     event Deposit(address indexed sender, uint value);
 
event

ExecutionFailure

Inputs

ParameterTypeDescription
transactionIduint256

Outputs

(void)
     event ExecutionFailure(uint indexed transactionId);
 
event

Execution

Inputs

ParameterTypeDescription
transactionIduint256

Outputs

(void)
     event Execution(uint indexed transactionId);
 
event

Submission

Inputs

ParameterTypeDescription
transactionIduint256

Outputs

(void)
     event Submission(uint indexed transactionId);
 
event

Revocation

Inputs

ParameterTypeDescription
senderaddress
transactionIduint256

Outputs

(void)
     event Revocation(address indexed sender, uint indexed transactionId);
 
event

Confirmation

Inputs

ParameterTypeDescription
senderaddress
transactionIduint256

Outputs

(void)
     event Confirmation(address indexed sender, uint indexed transactionId);
 
MultiSigWalletWithTimeLock
function

executeTransaction

Restricted (notExecuted, fullyConfirmed, pastTimeLock)

Inputs

ParameterTypeDescription
transactionIduint256

Outputs

(void)
     function executeTransaction(uint transactionId)
         public
         notExecuted(transactionId)
         fullyConfirmed(transactionId)
         pastTimeLock(transactionId)
     {
         Transaction storage tx = transactions[transactionId];
         tx.executed = true;
         if (tx.destination.call.value(tx.value)(tx.data))
             Execution(transactionId);
         else {
             ExecutionFailure(transactionId);
             tx.executed = false;
         }
     }
 
function

changeTimeLock

Restricted (onlyWallet)

Inputs

ParameterTypeDescription
_secondsTimeLockeduint256

Outputs

(void)
     function changeTimeLock(uint _secondsTimeLocked)
         public
         onlyWallet
     {
         secondsTimeLocked = _secondsTimeLocked;
         TimeLockChange(_secondsTimeLocked);
     }
 
function

revokeConfirmation

Restricted (ownerExists, confirmed, notExecuted, notFullyConfirmed)

Inputs

ParameterTypeDescription
transactionIduint256

Outputs

(void)
     function revokeConfirmation(uint transactionId)
         public
         ownerExists(msg.sender)
         confirmed(transactionId, msg.sender)
         notExecuted(transactionId)
         notFullyConfirmed(transactionId)
     {
         confirmations[transactionId][msg.sender] = false;
         Revocation(msg.sender, transactionId);
     }
 
function

confirmTransaction

Restricted (ownerExists, transactionExists, notConfirmed, notFullyConfirmed)

Inputs

ParameterTypeDescription
transactionIduint256

Outputs

(void)
     function confirmTransaction(uint transactionId)
         public
         ownerExists(msg.sender)
         transactionExists(transactionId)
         notConfirmed(transactionId, msg.sender)
         notFullyConfirmed(transactionId)
     {
         confirmations[transactionId][msg.sender] = true;
         Confirmation(msg.sender, transactionId);
         if (isConfirmed(transactionId)) {
             setConfirmationTime(transactionId, block.timestamp);
         }
     }
 
event

TimeLockChange

Inputs

ParameterTypeDescription
secondsTimeLockeduint256

Outputs

(void)
     event TimeLockChange(uint secondsTimeLocked);
 
event

ConfirmationTimeSet

Inputs

ParameterTypeDescription
transactionIduint256
confirmationTimeuint256

Outputs

(void)
     event ConfirmationTimeSet(uint indexed transactionId, uint confirmationTime);
 
MultiSigWalletWithTimeLockExceptRemoveAuthorizedAddress
function

executeRemoveAuthorizedAddress

Restricted (notExecuted, fullyConfirmed, validRemoveAuthorizedAddressTx)

Inputs

ParameterTypeDescription
transactionIduint256

Outputs

(void)
     function executeRemoveAuthorizedAddress(uint transactionId)
         public
         notExecuted(transactionId)
         fullyConfirmed(transactionId)
         validRemoveAuthorizedAddressTx(transactionId)
     {
         Transaction storage tx = transactions[transactionId];
         tx.executed = true;
         if (tx.destination.call.value(tx.value)(tx.data))
             Execution(transactionId);
         else {
             ExecutionFailure(transactionId);
             tx.executed = false;
         }
     }
 
function

isFunctionRemoveAuthorizedAddress

Inputs

ParameterTypeDescription
databytes

Outputs

TypeDescription
bool
     function isFunctionRemoveAuthorizedAddress(bytes data)
         public
         constant
         returns (bool)
     {
         bytes4 removeAuthorizedAddressSignature = bytes4(sha3("removeAuthorizedAddress(address)"));
         for (uint i = 0; i < 4; i++) {
             require(data[i] == removeAuthorizedAddressSignature[i]);
         }
         return true;
     }
 
constructor

MultiSigWalletWithTimeLockExceptRemoveAuthorizedAddress

Restricted (MultiSigWalletWithTimeLock)

Inputs

ParameterTypeDescription
_ownersaddress[]
_requireduint256
_secondsTimeLockeduint256
_tokenTransferProxyaddress

Outputs

(void)
     function MultiSigWalletWithTimeLockExceptRemoveAuthorizedAddress(
         address[] _owners,
         uint _required,
         uint _secondsTimeLocked,
         address _tokenTransferProxy)
         public
         MultiSigWalletWithTimeLock(_owners, _required, _secondsTimeLocked)
     {
         TOKEN_TRANSFER_PROXY_CONTRACT = _tokenTransferProxy;
     }
 
fallback

(fallback)

Inputs

(void)

Outputs

(void)
function

required

Inputs

(void)

Outputs

TypeDescription
uint256
     uint public required;
 
function

MAX_OWNER_COUNT

Inputs

(void)

Outputs

TypeDescription
uint256
     uint constant public MAX_OWNER_COUNT = 50;
 
function

confirmationTimes

Inputs

ParameterTypeDescription
uint256

Outputs

TypeDescription
uint256
     mapping (uint => uint) public confirmationTimes;
 
function

transactionCount

Inputs

(void)

Outputs

TypeDescription
uint256
     uint public transactionCount;
 
function

TOKEN_TRANSFER_PROXY_CONTRACT

Inputs

(void)

Outputs

TypeDescription
address
     address public TOKEN_TRANSFER_PROXY_CONTRACT;
 
function

transactions

Inputs

ParameterTypeDescription
uint256

Outputs

TypeDescription
address
uint256
bytes
bool
     mapping (uint => Transaction) public transactions;
 
function

secondsTimeLocked

Inputs

(void)

Outputs

TypeDescription
uint256
     uint public secondsTimeLocked;
 
function

confirmations

Inputs

ParameterTypeDescription
uint256
address

Outputs

TypeDescription
bool
     mapping (uint => mapping (address => bool)) public confirmations;
 
function

isOwner

Inputs

ParameterTypeDescription
address

Outputs

TypeDescription
bool
     mapping (address => bool) public isOwner;
 
function

owners

Inputs

ParameterTypeDescription
uint256

Outputs

TypeDescription
address
     address[] public owners;