commit
aa89ed11d0
|
@ -6,6 +6,19 @@ pragma solidity ^0.4.15;
|
||||||
*/
|
*/
|
||||||
contract MultiSigStub {
|
contract MultiSigStub {
|
||||||
|
|
||||||
|
address[] public owners;
|
||||||
|
address[] public tokens;
|
||||||
|
mapping (uint => Transaction) public transactions;
|
||||||
|
mapping (uint => mapping (address => bool)) public confirmations;
|
||||||
|
uint public transactionCount;
|
||||||
|
|
||||||
|
struct Transaction {
|
||||||
|
address destination;
|
||||||
|
uint value;
|
||||||
|
bytes data;
|
||||||
|
bool executed;
|
||||||
|
}
|
||||||
|
|
||||||
function MultiSigStub(address[] _owners, uint256 _required) {
|
function MultiSigStub(address[] _owners, uint256 _required) {
|
||||||
//bytes4 sig = bytes4(sha3("Constructor(address[],uint256)"));
|
//bytes4 sig = bytes4(sha3("Constructor(address[],uint256)"));
|
||||||
bytes4 sig = 0xe0c4e63b;
|
bytes4 sig = 0xe0c4e63b;
|
||||||
|
@ -21,9 +34,7 @@ contract MultiSigStub {
|
||||||
_delegatecall(m_data, size);
|
_delegatecall(m_data, size);
|
||||||
}
|
}
|
||||||
|
|
||||||
function()
|
modifier delegated {
|
||||||
payable
|
|
||||||
{
|
|
||||||
uint size = msg.data.length;
|
uint size = msg.data.length;
|
||||||
bytes32 m_data = _malloc(size);
|
bytes32 m_data = _malloc(size);
|
||||||
|
|
||||||
|
@ -32,12 +43,166 @@ contract MultiSigStub {
|
||||||
}
|
}
|
||||||
|
|
||||||
bytes32 m_result = _delegatecall(m_data, size);
|
bytes32 m_result = _delegatecall(m_data, size);
|
||||||
|
_;
|
||||||
assembly {
|
assembly {
|
||||||
return(m_result, 0x20)
|
return(m_result, 0x20)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
function()
|
||||||
|
payable
|
||||||
|
delegated
|
||||||
|
{
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
function submitTransaction(address destination, uint value, bytes data)
|
||||||
|
public
|
||||||
|
delegated
|
||||||
|
returns (uint)
|
||||||
|
{
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
function confirmTransaction(uint transactionId)
|
||||||
|
public
|
||||||
|
delegated
|
||||||
|
{
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
function watch(address _tokenAddr, bytes _data)
|
||||||
|
public
|
||||||
|
delegated
|
||||||
|
{
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
function setMyTokenList(address[] _tokenList)
|
||||||
|
public
|
||||||
|
delegated
|
||||||
|
{
|
||||||
|
|
||||||
|
}
|
||||||
|
/// @dev Returns the confirmation status of a transaction.
|
||||||
|
/// @param transactionId Transaction ID.
|
||||||
|
/// @return Confirmation status.
|
||||||
|
function isConfirmed(uint transactionId)
|
||||||
|
public
|
||||||
|
constant
|
||||||
|
delegated
|
||||||
|
returns (bool)
|
||||||
|
{
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Web3 call functions
|
||||||
|
*/
|
||||||
|
function tokenBalances(address)
|
||||||
|
public
|
||||||
|
constant
|
||||||
|
delegated
|
||||||
|
returns (uint)
|
||||||
|
{
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/// @dev Returns number of confirmations of a transaction.
|
||||||
|
/// @param transactionId Transaction ID.
|
||||||
|
/// @return Number of confirmations.
|
||||||
|
function getConfirmationCount(uint transactionId)
|
||||||
|
public
|
||||||
|
constant
|
||||||
|
delegated
|
||||||
|
returns (uint)
|
||||||
|
{
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
/// @dev Returns total number of transactions after filters are applied.
|
||||||
|
/// @param pending Include pending transactions.
|
||||||
|
/// @param executed Include executed transactions.
|
||||||
|
/// @return Total number of transactions after filters are applied.
|
||||||
|
function getTransactionCount(bool pending, bool executed)
|
||||||
|
public
|
||||||
|
constant
|
||||||
|
delegated
|
||||||
|
returns (uint)
|
||||||
|
{
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
/// @dev Returns list of owners.
|
||||||
|
/// @return List of owner addresses.
|
||||||
|
function getOwners()
|
||||||
|
public
|
||||||
|
constant
|
||||||
|
returns (address[])
|
||||||
|
{
|
||||||
|
return owners;
|
||||||
|
}
|
||||||
|
|
||||||
|
/// @dev Returns list of tokens.
|
||||||
|
/// @return List of token addresses.
|
||||||
|
function getTokenList()
|
||||||
|
public
|
||||||
|
constant
|
||||||
|
returns (address[])
|
||||||
|
{
|
||||||
|
return tokens;
|
||||||
|
}
|
||||||
|
|
||||||
|
/// @dev Returns array with owner addresses, which confirmed transaction.
|
||||||
|
/// @param transactionId Transaction ID.
|
||||||
|
/// @return Returns array of owner addresses.
|
||||||
|
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];
|
||||||
|
}
|
||||||
|
|
||||||
|
/// @dev Returns list of transaction IDs in defined range.
|
||||||
|
/// @param from Index start position of transaction array.
|
||||||
|
/// @param to Index end position of transaction array.
|
||||||
|
/// @param pending Include pending transactions.
|
||||||
|
/// @param executed Include executed transactions.
|
||||||
|
/// @return Returns array of transaction IDs.
|
||||||
|
function getTransactionIds(uint from, uint to, bool pending, bool executed)
|
||||||
|
public
|
||||||
|
constant
|
||||||
|
returns (uint[] _transactionIds)
|
||||||
|
{
|
||||||
|
uint total = transactionCount;
|
||||||
|
uint[] memory transactionIdsTemp = new uint[](total);
|
||||||
|
uint count = 0;
|
||||||
|
uint i;
|
||||||
|
for (i=0; i<total; 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 _malloc(uint size)
|
function _malloc(uint size)
|
||||||
private
|
private
|
||||||
returns(bytes32 m_data)
|
returns(bytes32 m_data)
|
||||||
|
@ -52,7 +217,7 @@ contract MultiSigStub {
|
||||||
private
|
private
|
||||||
returns(bytes32 m_result)
|
returns(bytes32 m_result)
|
||||||
{
|
{
|
||||||
address target = 0x370A93cd1DC15875fF02aa0b952D44Bb3dD905E5; //will be replaced by correct value
|
address target = 0x9485e92ab84b62c31c64465d8ff98fab87a8c908; //Rinkby only
|
||||||
m_result = _malloc(32);
|
m_result = _malloc(32);
|
||||||
bool failed;
|
bool failed;
|
||||||
|
|
||||||
|
@ -64,4 +229,3 @@ contract MultiSigStub {
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -14,16 +14,16 @@ contract ERC20 {
|
||||||
contract MultiSigTokenWallet {
|
contract MultiSigTokenWallet {
|
||||||
|
|
||||||
address[] public owners;
|
address[] public owners;
|
||||||
|
address[] public tokens;
|
||||||
mapping (uint => Transaction) public transactions;
|
mapping (uint => Transaction) public transactions;
|
||||||
mapping (uint => mapping (address => bool)) public confirmations;
|
mapping (uint => mapping (address => bool)) public confirmations;
|
||||||
|
|
||||||
mapping (address => bool) public isOwner;
|
|
||||||
mapping (address => uint) public tokenBalances;
|
|
||||||
mapping (address => address[]) public userList;
|
|
||||||
address[] public tokens;
|
|
||||||
uint public required;
|
|
||||||
uint public transactionCount;
|
uint public transactionCount;
|
||||||
uint nonce;
|
|
||||||
|
mapping (address => uint) public tokenBalances;
|
||||||
|
mapping (address => bool) public isOwner;
|
||||||
|
mapping (address => address[]) public userList;
|
||||||
|
uint public required;
|
||||||
|
uint public nonce;
|
||||||
|
|
||||||
struct Transaction {
|
struct Transaction {
|
||||||
address destination;
|
address destination;
|
||||||
|
|
|
@ -17,7 +17,7 @@
|
||||||
{:factory-create (eth/event-sig->topic-id "Create(address,address)")
|
{:factory-create (eth/event-sig->topic-id "Create(address,address)")
|
||||||
:submission (eth/event-sig->topic-id "Submission(uint256)")})
|
:submission (eth/event-sig->topic-id "Submission(uint256)")})
|
||||||
|
|
||||||
(defonce factory-contract-addr "0xbcBc5b8cE5c76Ed477433636926f76897401f838")
|
(defonce factory-contract-addr "0xb1d6Bf03e99bB2e9c5eBE010ecB0fc910a1CD65b")
|
||||||
|
|
||||||
(defn create-new
|
(defn create-new
|
||||||
[owner1 owner2 required]
|
[owner1 owner2 required]
|
||||||
|
|
Loading…
Reference in New Issue