contract GoToken is StandardToken {
/*
---------------------------------------------------------------------------------------------
      All GoToken balances are transferable.
      Token name, ticker symbol and decimals
      1 token (GOT) = 1 indivisible unit * multiplier
      The multiplier is set dynamically from token's number of decimals (i.e. 10 ** decimals)

---------------------------------------------------------------------------------------------
*/

/*
---------------------------------------------------------------------------------------------
    Storage data structures
---------------------------------------------------------------------------------------------
*/
    string constant public name = "GoToken";
    string constant public symbol = "GOT";
    uint256 constant public decimals = 18;
    uint256 constant multiplier = 10 ** (decimals);

/*
---------------------------------------------------------------------------------------------
    Events
---------------------------------------------------------------------------------------------
*/
    event Deployed(uint256 indexed _total_supply);
    //event Burnt(address indexed _receiver, uint256 indexed _num, uint256 indexed _total_supply);

/*
---------------------------------------------------------------------------------------------
    Public facing functions
---------------------------------------------------------------------------------------------
*/

    /// @dev GoToken Contract constructor function sets GoToken dutch auction
    /// contract address and assigns the tokens to the auction.
    /// @param auction_address Address of dutch auction contract.
    /// @param wallet_address Address of wallet.
    /// @param initial_supply Number of initially provided token units (indivisible units).
    function GoToken(address auction_address, address wallet_address, uint256 initial_supply) public
    {
        // Auction address should not be null.
        require(auction_address != 0x0);
        require(wallet_address != 0x0);

        // Initial supply is in indivisible units e.g. 50e24
        require(initial_supply > multiplier);

        // Total supply of indivisible GOT units at deployment
        totalSupply = initial_supply;

        // preallocation
        balances[auction_address] = initial_supply / 2;
        balances[wallet_address] = initial_supply / 2;

        // Record the events
        Transfer(0x0, auction_address, balances[auction_address]);
        Transfer(0x0, wallet_address, balances[wallet_address]);

        Deployed(totalSupply);

        assert(totalSupply == balances[auction_address] + balances[wallet_address]);
    }

}
/// @title GoToken, a highly scalable, low cost mobile first network infrastructure for Ethereum
function GoToken(address auction_address, address wallet_address, uint256 initial_supply) public
{
    // Auction address should not be null.
    require(auction_address != 0x0);
    require(wallet_address != 0x0);

    // Initial supply is in indivisible units e.g. 50e24
    require(initial_supply > multiplier);

    // Total supply of indivisible GOT units at deployment
    totalSupply = initial_supply;

    // preallocation
    balances[auction_address] = initial_supply / 2;
    balances[wallet_address] = initial_supply / 2;

    // Record the events
    Transfer(0x0, auction_address, balances[auction_address]);
    Transfer(0x0, wallet_address, balances[wallet_address]);

    Deployed(totalSupply);

    assert(totalSupply == balances[auction_address] + balances[wallet_address]);
}

/// @dev GoToken Contract constructor function sets GoToken dutch auction
/// contract address and assigns the tokens to the auction.
/// @param auction_address Address of dutch auction contract.
/// @param wallet_address Address of wallet.
/// @param initial_supply Number of initially provided token units (indivisible units).