How to convert The DAO token to ETH

in #etherium8 years ago

Withdrawing Using Ethereum Wallet


Make sure that you have downloaded Ethereum Wallet 0.8.1 or later.


Start Ethereum Wallet and select "Yes" to the question "Do you want to activate the chain in which funds linked to the exploit are restored to a contract where they can be withdrawn by The DAO token holders?".


If you have not already added a watch on The DAO contract, see The DAO - How to add and watch the DAO contract. This step will give you access to approve the transfer of DAOs to the Withdrawal contract.


Add a watch on The DAO Withdrawal contact. Use the same procedure as in the link directly above, but set:


Contract Name: The DAO Withdrawal

Contract Address: 0xbf4ed7b27f1d666546e30d74d50d173d20bca754

JSON Interface: [{"constant":false,"inputs":[],"name":"trusteeWithdraw","outputs":[],"type":"function"},{"constant":false,"inputs":[],"name":"withdraw","outputs":[],"type":"function"},{"constant":true,"inputs":[],"name":"mainDAO","outputs":[{"name":"","type":"address"}],"type":"function"},{"constant":true,"inputs":[],"name":"trustee","outputs":[{"name":"","type":"address"}],"type":"function"}]

NOTE that the steps below have not been tested yet and I'll update this answer when I've tested it after the hard fork


Get the balance of your accounts The DAO token balance by calling The DAO's balanceOf() with your account as the parameter.

Execute The DAO's approve() function with following parameters:

The Withdrawal contract address 0xbf4ed7b27f1d666546e30d74d50d173d20bca754; and

The DAO token balance of the address from step 1. above.

Execute The DAO Withdrawal's withdraw() function.





Withdrawal Process Explanation


There is a two step process to convert your DAOs into ETHs.


a) Approve The Transfer Of DAOs From The DAO To The Withdrawal Contract


The first step is to approve the transfer of DAOs from The DAO into the Withdrawal contract. This is done by calling The DAO's approve(...) function, listed below:


From The DAO's source code, here is the TokenInterface.approve() function definition:


/// @notice `msg.sender` approves `_spender` to spend `_amount` tokens on

/// its behalf

/// @param _spender The address of the account able to transfer the tokens

/// @param _amount The amount of tokens to be approved for transfer

/// @return Whether the approval was successful or not

function approve(address _spender, uint256 _amount) returns (bool success);

Here is the Token.approve(...) function that implements the function defined above:


function approve(address _spender, uint256 _amount) returns (bool success) {

    allowed[msg.sender][_spender] = _amount;

    Approval(msg.sender, _spender, _amount);

    return true;

}

Once you have called The DAO's approve(...) function, you have created an approval for the Withdrawal contract to transfer your DAOs into the Withdrawal contract.




b) Convert Your DAOs Into ETHs With The Withdrawal Contract


The second step is to call the Withdrawal contract's withdraw() function to transfer DAOs from The DAO into the Withdrawal contract, and for the Withdrawal contract to send your account the equivalent amount in ETH.


Here is the source code for the withdraw() function:


function withdraw(){

    uint balance = mainDAO.balanceOf(msg.sender);


    if (!mainDAO.transferFrom(msg.sender, this, balance) || !msg.sender.send(balance))

        throw;

}








Source of information

User @lefteris in thedao.slack.com stated that The DAO Withdrawal contract can be found at 0xbf4ed7b27f1d666546e30d74d50d173d20bca754 and the process to convert DAOs into ETHs are the following:

a) call dao.approve("0xbf4ed7b27f1d666546e30d74d50d173d20bca754", dao.balanceOf(youraccount))

b) call withdrawContract.withdraw()


http://ethereum.stackexchange.com/questions/7204/how-do-i-convert-my-the-dao-tokens-into-ethers-using-the-withdrawal-contract-aft



Notes


This Withdrawal contract only allows the conversion of The DAO tokens (DAO) into ethers (ETH) at the rate of 100 DAOs = 1 ETH.

Anyone who bought DAOs in the last two weeks of The DAO crowdfunding phase paid more than 1 ETH per 100 DAOs. The amount in excess of 1 ETH per 100 DAOs was stored in The DAO's extraBalance account. The balance of the extraBalance account has now been transferred into a child DAO. There is a separate process for purchasers who paid more than 1 ETH per 100 DAOs to get refunded the extra amount paid (over the 1 ETH per 100 DAOs). This process is not covered in this answer.

Wait for some time after the hard fork before attempting to convert your DAOs into ETHs.