Whitehat Withdrawal contract - Update and Next Steps

Note: the Whitehat withdraw contract is only available on the Classic chain of Ethereum and will allow DTH to receive ETC (not ETH). This is NOT related to the extra balance, or the DAO Withdraw contract.

The withdraw contract has been reviewed by the community and a lot of the feedback has been incorporated into the contract. We would like to thank the community for the time they took to audit and review the contract.

Community Feedback

Acting on feedback from the community we have:

  • Made various changes to the contract for readability and security purposes.
  • Removed the botWithdraw() option. It was an option meant to ease user experience for people who did not want to sync the ETC chain but could also be seen as a potential security risk.
  • Added more events and made sure all events contain the withdrawal type for easier auditing of the contract’s activity in the blockchain.

Next Steps

Escape hatch Multisig

The contract has an escape hatch which can be used if a terrible security risk is found that neither our tests or the audit by the community has seen. In such an event we can call the escape hatch and send all remaining funds of the contract to a multisig wallet managed by us.


By removing botWithdraw() we are only left with the proxyWithdraw() option if users want to withdraw without syncing the ETC chain. proxyWithdraw() requires the user to sign his withdrawal intent in the ETH chain using web3.eth.sign(). This can not be done by contract accounts such as multisig wallets. That is another reason why botWithdraw() was designed the way it was.

In order to allow people who held DAO tokens at the HF in a multisig wallet to also be able to withdraw using proxyWithdraw() we have deployed the whauthorizeaddres.sol at address (0xd4fb7fd0c254a8c6211e441f7236fa9479708a99) in the ETH chain. This contract can be used in the aforementioned situations to have multisig wallets (or other contracts) authorize an end-user-account address to sign for them.

The contract ABI is the following:


The way to use it is rather simple. Make a call to authorizeAddress(address _authorizedAddress) from your contract with a regular address as a parameter that will be used to sign petitions for withdrawal in ETC chain.

You can find the verification of the contract here: http://etherscan.io/address/0xd4fb7fd0c254a8c6211e441f7236fa9479708a99#code

Some time before the deployment of the actual withdrawal contract, whauthorizeaddress.sol will be closed and a ledger of authorized accounts will be created, combined with the current HF snapshot and used as the ledger of user balances.

The relevant code for the authorization ledger can be seen here. In the actual withdrawal contract it’s used in the proxyWithdraw() function.

Deployment of the withdrawal Contract

If there are no major objections or exploits found, the withdrawal contract will be deployed on Aug, 30th, 2016 at 17:00 CET. All the users will have 6 months from that day on to claim their refund.

The withdraw contract will probably be topped up multiple times, since there is still another small DAO we are waiting to come out of its creation period and also some funds are held by exchanges. So people would need to claim the remaining of their portion each time funds are sent to the contract.

We are also actively working with exchanges to resolve the issue of frozen funds and will post an update as soon as there is new information so these funds can be added to the withdraw contract as well.

After 6 months, all remaining funds will be sent to a multisig controlled by the whitehat group and will either be kept as donation for the efforts they have done to bring this value back to the token holders or donated to community developments.

Discussion channel

A dedicated channel has been created on the DAO Slack in order for users to help each other with problems or questions regarding the withdrawal contract and the process around it.


You can donate to the WHG at these following addresses:

  • ETH - 0xf63d257fc3576f9736fd9014cf0f0e1f0e7dd531
  • ETC - 0xe79aca5c8cda44d834efa969906a377cb987e02e