4

I'm using Ethereum Wallet 0.7.3 on OSX el capitan. When I go to the DAO hub page to check my token balance, it displays

DAO Tokens owned : 3591.5

In Ethereum Wallet, the token widget displays 3701.5 DAO tokens. DAO token widget screenshot

But when I go to my DAO account view in Ethereum Wallet it shows me the right (3591.5) token count.

Ethereum Wallet account screenshot

I only have two accounts loaded in my Ethereum Wallet, one with which I sent ETH to the DAO and my mining account. I verified that the mining account is not associated with any DAO token on the DAO hub page. So all token I have and that should be displayed in that widget are associated with the first account.

I used a blockchain explorer to check again the amount sent (using 3 tx) to the DAO and it's 35,915 ETH, so 3591.5 DAO tokens is the right count.

Any one experiences this strange thing ? How to explain the difference ?

Thanks.

6

The DAO address indeed now owns 100 (110?) tokens. This is most likely due to someone using the data field when sending a transaction to send the tokens to The DAO address.

Basically, there is a feature that is meant for users who want to send from an exchange. As you (hopefully) know, you cannot send directly from an exchange as the DAO Tokens will be sent back to the sending address which, in this case, would be Kraken or Poloniex's or whomever's hot wallet. You would not receive your tokens.

But, you can add some data to the data field that says "Hey contract! Don't send the tokens back to this address! Send them to this address instead!". Any address can be inputted by the user into this data field, and it seems like someone inputted the DAO's address instead of an address they control.

It may have been a mistake or it may have been someone wondering, "what would happen if I sent DAO Tokens to the DAO?! LOL!"

The answer to the latter question: everyone is now super confused as to why they have more DOA tokens than they thought had. (LOL!)

  • So I guess the owner of the DAO contract could transfer these tokens after the DAO funding is over and make everybody account balance display back to normal. I would let them keep these tokens for their own profit if they restore the right balance. How owns these keys? – Nicolas Massart May 15 '16 at 8:58
  • There are no keys. It's a contract. While the contract has measures in place for sending ETH (provide an accepted proposal etc etc) I'm not sure if / how the tokens could be interacted with. – tayvano May 15 '16 at 15:41
  • are they lost forever? – Nicolas Massart May 15 '16 at 15:53
3

If you click on Contracts -> "The DAO", it should show you that "The DAO" has a token balance of 110 Ð.

This token balance is associated with the "The DAO" 0xBB9bc244D798123fDe783fCc1C72d3Bb8C189413 account and Ethereum Wallet has added this amount to your total balance.

3,591.5 + 110 = 3,701.5 .



I have not been able to find a definitive source explaining the additional tokens associated with the 0xBB9bc244D798123fDe783fCc1C72d3Bb8C189413 account, but from https://forum.daohub.org/t/help-why-i-have-more-dao-than-i-actually-bought/1560/2:

It's all correct. Those are your accounts 7.6k tokens and the token contract address owns 100 tokens (someone used the proxy function with 1 eth to make the DAO buy itself 100 tokens - no idea why). The main contract address screen won't show your tokens, it'll show the tokens of that adress. But when you watch you'll see the sum total of all accounts you're tracking hence 7.7k

This 110 Ð was 100 Ð a few days ago. Someone must have added another 0.1 ETH by the proxy function.



EDIT 16/05/2016 - Following on from team member @tayvano's answer.

Tokens Assigned To Sender's Address

When you send ethers to TheDAO the normal way, the default function within the DAO contract will call the createTokenProxy() function with the senders address.

// The DAO contract itself
contract DAO is DAOInterface, Token, TokenCreation {
    ...
    function () returns (bool success) {
        if (now < closingTime + creationGracePeriod && msg.sender != address(extraBalance))
            return createTokenProxy(msg.sender);
        else
            return receiveEther();
    }
    ...


Tokens Assigned To Specified Address

If you instead call createTokenProxy() with an address other than the message sender's, the TheDAO token will be assigned to the specified address.

Here is the TokenCreationInterface interface with the comment explaining how a different address can be specified as the token owner:

contract TokenCreationInterface {
    ...
    /// @notice Create Token with `_tokenHolder` as the initial owner of the Token
    /// @param _tokenHolder The address of the Tokens's recipient
    /// @return Whether the token creation was successful
    function createTokenProxy(address _tokenHolder) returns (bool success);
    ...

And here is the implementation of createTokenProxy(_tokenHolder) with the statement balances[_tokenHolder] += token;:

contract TokenCreation is TokenCreationInterface, Token {
    ...
    function createTokenProxy(address _tokenHolder) returns (bool success) {
        if (now < closingTime && msg.value > 0
            && (privateCreation == 0 || privateCreation == msg.sender)) {

            uint token = (msg.value * 20) / divisor();
            extraBalance.call.value(msg.value - token)();
            balances[_tokenHolder] += token;
            totalSupply += token;
            ...
            return true;
        }
        throw;
    }
    ...

As noted by @Tjaden, the extra data that is sent with the transaction is a call to the function createTokenProxy() with the DAO's address that has probably created the extra 110 tokens.

And it is still 110 tokens. From The DAO - Creation: enter image description here


Example Of createTokenProxy() Usage

By chance I was looking at the following transaction 0xfb2d580342988f20c9bd4b756555d6139f55ab2e5df2c5f99886c6195221faee in my answer to What is the address and balance of The DAO's extraBalance account: enter image description here

The transaction is from the Poloniex wallet and includes the extra data 0xbaac530000000000000000000000000003f59b7e25819a64fc2f7199e89457593fe3500d.

I entered the following command in geth to find that the first 4 bytes of the sha3() of the function createTokenProxy() matches the first part of the extra data, which is how functions are called in transactions.

> web3.sha3('createTokenProxy(address)').substr(0, 10)
"0xbaac5300"

Poloniex is using this function call when individuals purchase The DAO tokens via the Poloniex - Create DAO Token screen.

  • Thanks. I wonder why someone did that and what will be the use of these tokens... The dao owning itself, strange. – Nicolas Massart May 13 '16 at 23:37
  • To be clear, calling a function of a contract is just extra data sent with the transaction. – Tjaden Hess May 15 '16 at 16:23
2

enter image description here

TheDAO now owns 52174.8 DAO Tokens.

2

This UI Bug has been resolved in the latest release of Mist (0.7.5). If you are still seeing this issue upgrade to the latest version.

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

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