3

I have 2 Ether in my wallet contract:0x83ca83fF078f651E1B69CD70F43Ec11B4Aa0af2b

I created this contract from my main Ethereum (Mist) address: 0xB3C3e20312Ded30a651Ce746CdE0534dc0433604

I have been trying to withdraw from this contract with no success. I tried everything I could think of: - I used MyEtherWallet - I added another owner (my Jaxx address: 0x34106338b3ff3539dc2a183b7c49da67a7ac8ce6) - I removed this other owner - I even tried to KILL the contract, both from Mist (Ethereum Wallet) and from MyEtherWallet, and from both addresses - nothing happens!

Can anybody help me? The history of my transaction to this contract are here.

2
  • Initial preview of the code shows that some modifiers do not throw, instead die off silently. Probably why you are not getting errors from the transactions. I will update once i get more information.
    – Adibas03
    Commented Oct 24, 2017 at 17:38
  • This was s standard contract wallet I created with Mist in 2016...
    – arytbk
    Commented Oct 25, 2017 at 7:22

3 Answers 3

2

Your contract source code isn't posted. I suspect this points to a hidden assumption and likely bad news.

One cannot "withdraw from" a contract, or anything else for that matter. One can only sign a transaction, attach some data, and send it. The receiving contract then looks at the data, perchance that it matches a function and is acceptable.

The contract can be persuaded to send money, of its own accord, if it has a function withdrawFunds() and the rest is acceptable. This is all defined in the contract itself.

If no provision for withdrawals exists in the contract code, then funds cannot be withdrawn.

Hoping the contract source code will reveal a way to recover the funds.

2
  • This was a standard simple wallet contract I created with Mist in 2016... The source code shows in Etherscan: etherscan.io/address/…
    – arytbk
    Commented Oct 25, 2017 at 7:22
  • And I used the "Execute" function to ask the contract to send Ethers back to my normal Ethereum address (or my Jaxx wallet)...
    – arytbk
    Commented Oct 25, 2017 at 7:24
2

I've really bad news for you.

First you have replaced the old owner ("0xb3c3e20312ded30a651ce746cde0534dc0433604") with a new owner ("34106338b3ff3539dc2a183b7c49da67a7ac8ce6").

Then the new owner has removed itself from the list of owners. We can argue there's a bug in the contract that allows such situation.

Unless there's a vulnerability in the contract I'm afraid the funds are frozen in the contract.

Details follow:

  • On Jun-03-2016 01:00:24 PM +UTC your contract was create at 0xfb22970491e5...

    The constructor has the signature

    function Wallet(address[] _owners, uint _required, uint _daylimit)
    

    Decoding the transaction parameters with the following script

    const abi = require('ethereumjs-abi');
    const data = Buffer.from([
      '0000000000000000000000000000000000000000000000000000000000000060',
      '0000000000000000000000000000000000000000000000000000000000000000',
      '00000000000000000000000000000000000000000052b7d2dcc80cd2e4000000',
      '0000000000000000000000000000000000000000000000000000000000000001',
      '000000000000000000000000b3c3e20312ded30a651ce746cde0534dc0433604'
    ].join(''), 'hex');
    const decoded = abi.rawDecode(['address[]', 'uint256', 'uint256'], data);
    console.log(`Decoded: ${JSON.stringify(decoded, null, '  ')}`);
    

    We have that

    _owners = ["b3c3e20312ded30a651ce746cde0534dc0433604"]
    _required = 0
    _daylimit = "52b7d2dcc80cd2e4000000"
    

    This means only one owner "0xb3c3e20312ded30a651ce746cde0534dc0433604", zero confirmations required, and 10,000,000 ethers as daily limit.

  • On "Oct-23-2017 09:19:39 AM +UTC" some interesting happens again. In transaction 0x240c65c1c1ae.... The owner "0xb3c3e20312ded30a651ce746cde0534dc0433604" successfuly replaces itself with "0x34106338b3ff3539dc2a183b7c49da67a7ac8ce6".

    Function: changeOwner(address _from, address _to) ***
    
    MethodID: 0xf00d4b5d
    [0]:000000000000000000000000b3c3e20312ded30a651ce746cde0534dc0433604
    [1]:00000000000000000000000034106338b3ff3539dc2a183b7c49da67a7ac8ce6
    

    As result the new owner "0x34106338b3ff3539dc2a183b7c49da67a7ac8ce6" is the only one that can interact with the contract.

  • There are several attempts by the old owner "0xb3c3e20312de..." to interact with the contract after but all of them do nothing, since it is no longer the owner.

  • Then on Oct-24-2017 07:50:55 AM +UTC at transaction 0x15455442a346..., the new owner "0x34106338b3ff..." removes itself from the list of owners:

    Function: removeOwner(address _owner) ***
    
    MethodID: 0x173825d9
    [0]:00000000000000000000000034106338b3ff3539dc2a183b7c49da67a7ac8ce6
    

    This transaction executes successfuly, and the owner "0x34106338b3ff3539dc2a183b7c49da67a7ac8ce6" is removed from the list of owners. There is a bug in reorganizeOwners that will not decrease m_numOwners below 1.

    The result is the contract has no owners and the funds are blocked inside it.

0
0

Looking at your contract deployment date and the code content, it seems your problem is the compiler version.
A lot of things have changed since June 2016 when you created the contract. The solidity compiler version back then was 0.3.4.
You can read through this to get more information:
http://blog.curvegrid.com/daysofblock/2017/05/12/daysofblock-02-solc-versions.html
I am yet to find a functioning way to run codes as the remix solidity seems to keep running forever once you try to compile your code using the correct compiler version or add pragma solidity^0.3.4; as the first line of the code.
I would update once i am able to find a working way. Just putting this here, should anyone have a functioning way.

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Not the answer you're looking for? Browse other questions tagged or ask your own question.