ETH Price: $2,787.08 (+2.87%)

Transaction Decoder

Block:
6203939 at Aug-24-2018 08:02:00 AM +UTC
Transaction Fee:
0.003457344 ETH $9.64
Gas Used:
52,384 Gas / 66 Gwei

Emitted Events:

2 XaurumToken.0xbff18be960d6b68b36595d778b20694fb0e5bf000b02434cdc0a122f32e7bff4( 0xbff18be960d6b68b36595d778b20694fb0e5bf000b02434cdc0a122f32e7bff4, 00000000000000000000000000000000000000000000000000009866a51f00f8, 00000000000000000000000000000000000000000000000000000027b2978900 )
3 MeltingContract.MeltDone( xaurAmount=167566624358648, goldAmount=170500000000 )

Account State Difference:

  Address   Before After State Difference Code
0x333f254b...87279a342
0.34218470553164 Eth
Nonce: 327
0.33872736153164 Eth
Nonce: 328
0.003457344
0x4DF812F6...CC98D2D81
(Spark Pool)
5,913.132190837088142501 Eth5,913.135648181088142501 Eth0.003457344
0x6A25216f...2233BC69b

Execution Trace

MeltingContract.doMelt( _xaurAmount=167566624358648, _goldAmount=170500000000 ) => ( False )
  • XaurumToken.70a08231( )
  • XaurumToken.7997b997( )
    File 1 of 2: MeltingContract
    contract Owned {
        address public owner;
        address public newOwner;
    
       function Owned() public {
            owner = msg.sender;
        }
    
        modifier onlyOwner {
            assert(msg.sender == owner);
            _;
        }
    
        function transferOwnership(address _newOwner) public onlyOwner {
            require(_newOwner != owner);
            newOwner = _newOwner;
        }
    
        function acceptOwnership() public {
            require(msg.sender == newOwner);
            emit OwnerUpdate(owner, newOwner);
            owner = newOwner;
            newOwner = 0x0;
        }
    
        event OwnerUpdate(address _prevOwner, address _newOwner);
    }
    
    contract XaurumInterface {
        function doMelt(uint256 _xaurAmount, uint256 _goldAmount) public returns (bool);
        function balanceOf(address _owner) public constant returns (uint256 balance);
    }
    
    contract MeltingContract is Owned{
        address XaurumAddress;
        uint public XaurumAmountMelted;
        uint public GoldAmountMelted;
        
        event MeltDone(uint xaurAmount, uint goldAmount);
        
        function MeltingContract() public {
            XaurumAddress = 0x4DF812F6064def1e5e029f1ca858777CC98D2D81;
        }
        
        function doMelt(uint256 _xaurAmount, uint256 _goldAmount) public onlyOwner returns (bool) {
            uint actualBalance = XaurumInterface(XaurumAddress).balanceOf(address(this));
            require(actualBalance > XaurumAmountMelted);
            require(actualBalance - XaurumAmountMelted >= _xaurAmount);
            XaurumInterface(XaurumAddress).doMelt(_xaurAmount, _goldAmount);
            XaurumAmountMelted += _xaurAmount;
            GoldAmountMelted += _goldAmount;
            MeltDone(_xaurAmount, _goldAmount);
        }
    }

    File 2 of 2: XaurumToken
    contract ERC20TokenInterface {
    
        /// @return total amount of tokens
        function totalSupply() constant returns (uint256 supply) {}
    
        /// @param _owner The address from which the balance will be retrieved
        /// @return The balance
        function balanceOf(address _owner) constant returns (uint256 balance) {}
    
        /// @notice send `_value` token to `_to` from `msg.sender`
        /// @param _to The address of the recipient
        /// @param _value The amount of token to be transferred
        /// @return Whether the transfer was successful or not
        function transfer(address _to, uint256 _value) returns (bool success) {}
    
        /// @notice send `_value` token to `_to` from `_from` on the condition it is approved by `_from`
        /// @param _from The address of the sender
        /// @param _to The address of the recipient
        /// @param _value The amount of token to be transferred
        /// @return Whether the transfer was successful or not
        function transferFrom(address _from, address _to, uint256 _value) returns (bool success) {}
    
        /// @notice `msg.sender` approves `_addr` to spend `_value` tokens
        /// @param _spender The address of the account able to transfer the tokens
        /// @param _value The amount of wei to be approved for transfer
        /// @return Whether the approval was successful or not
        function approve(address _spender, uint256 _value) returns (bool success) {}
    
        /// @param _owner The address of the account owning tokens
        /// @param _spender The address of the account able to transfer the tokens
        /// @return Amount of remaining tokens allowed to spent
        function allowance(address _owner, address _spender) constant returns (uint256 remaining) {}   
    
        event Transfer(address indexed _from, address indexed _to, uint256 _value);
        event Approval(address indexed _owner, address indexed _spender, uint256 _value);
    }
    
    contract XaurumProxyERC20 is ERC20TokenInterface {
    
        bool public xaurumProxyWorking;
    
        XaurumToken xaurumTokenReference; 
    
        address proxyCurrator;
        address owner;
        address dev;
    
        /* Public variables of the token */
        string public standard = 'XaurumERCProxy';
        string public name = 'Xaurum';
        string public symbol = 'XAUR';
        uint8 public decimals = 8;
    
    
        modifier isWorking(){
            if (xaurumProxyWorking && !xaurumTokenReference.lockdown()){
                _
            }
        }
    
        function XaurumProxyERC20(){
            dev = msg.sender;
            xaurumProxyWorking = true;
        }
    
        function setTokenReference(address _xaurumTokenAress) returns (bool){
            if (msg.sender == proxyCurrator){
                xaurumTokenReference = XaurumToken(_xaurumTokenAress);
                return true;
            }
            return false;
        }
    
        function EnableDisableTokenProxy() returns (bool){
            if (msg.sender == proxyCurrator){        
                xaurumProxyWorking = !xaurumProxyWorking;
                return true;
            }
            return false;
        }
    
        function setProxyCurrator(address _newCurratorAdress) returns (bool){
            if (msg.sender == owner || msg.sender == dev){        
                proxyCurrator = _newCurratorAdress;
                return true;
            }
            return false;
        }
    
        function setOwner(address _newOwnerAdress) returns (bool){
            if ( msg.sender == dev ){        
                owner = _newOwnerAdress;
                return true;
            }
            return false;
        }
    
        function totalSupply() constant returns (uint256 supply) {
            return xaurumTokenReference.totalSupply();
        }
    
        function balanceOf(address _owner) constant returns (uint256 balance) {
            return xaurumTokenReference.balanceOf(_owner);
        }
    
        function transfer(address _to, uint256 _value) isWorking returns (bool success) {
            bool answerStatus;
            address sentFrom;
            address sentTo;
            uint256 sentToAmount;
            address burningAddress;
            uint256 burningAmount;
    
            (answerStatus, sentFrom, sentTo, sentToAmount, burningAddress, burningAmount) = xaurumTokenReference.transferViaProxy(msg.sender, _to, _value);
            if(answerStatus){
                Transfer(sentFrom, sentTo, sentToAmount);
                Transfer(sentFrom, burningAddress, burningAmount);
                return true;
            }
            return false;
        }
    
        function transferFrom(address _from, address _to, uint256 _value) isWorking returns (bool success) {
            bool answerStatus;
            address sentFrom;
            address sentTo;
            uint256 sentToAmount;
            address burningAddress;
            uint256 burningAmount;
    
            (answerStatus, sentFrom, sentTo, sentToAmount, burningAddress, burningAmount) = xaurumTokenReference.transferFromViaProxy(msg.sender, _from, _to, _value);
            if(answerStatus){
                Transfer(sentFrom, sentTo, sentToAmount);
                Transfer(sentFrom, burningAddress, burningAmount);
                return true;
            }
            return false;
        }
    
        function approve(address _spender, uint256 _value) isWorking returns (bool success) {
            if (xaurumTokenReference.approveFromProxy(msg.sender, _spender, _value)){
                Approval(msg.sender, _spender, _value);
                return true;
            }
            return false;
        }
    
        function allowance(address _owner, address _spender) constant returns (uint256 remaining) {
            return xaurumTokenReference.allowanceFromProxy(msg.sender, _owner, _spender);
        } 
    }
    
    contract tokenRecipient { function receiveApproval(address _from, uint256 _value, address _token, bytes _extraData); }
    
    contract XaurumToken {
        
        /* Public variables of the token */
        string public standard = 'Xaurum v1.0';
        string public name = 'Xaurum';
        string public symbol = 'XAUR';
        uint8 public decimals = 8;
    
        uint256 public totalSupply = 0;
        uint256 public totalGoldSupply = 0;
        bool public lockdown = false;
        uint256 numberOfCoinages;
    
        /* Private variabiles for the token */
        mapping (address => uint256) balances;
        mapping (address => mapping (address => uint256)) allowed;
        mapping (address => uint) lockedAccounts;
    
        /* Events */
        event Transfer(address indexed from, address indexed to, uint256 value);
        event Approval(address indexed _owner, address indexed _spender, uint256 _value);
        event Burn(address from, uint256 value, BurningType burningType);
        event Melt(uint256 xaurAmount, uint256 goldAmount);
        event Coinage(uint256 coinageId, uint256 usdAmount, uint256 xaurAmount, uint256 goldAmount, uint256 totalGoldSupply, uint256 totalSupply);
    
        /*enums*/
        enum BurningType { TxtFee, AllyDonation, ServiceFee }
    
       /* Contracts */
        XaurumMeltingContract public meltingContract;
        function setMeltingContract(address _meltingContractAddress){
            if (msg.sender == owner || msg.sender == dev){
                meltingContract = XaurumMeltingContract(_meltingContractAddress);
            }
        }
    
        XaurumDataContract public dataContract;
        function setDataContract(address _dataContractAddress){
            if (msg.sender == owner || msg.sender == dev){
                dataContract = XaurumDataContract(_dataContractAddress);
            }
        }
    
        XaurumCoinageContract public coinageContract;
        function setCoinageContract(address _coinageContractAddress){
            if (msg.sender == owner || msg.sender == dev){
                coinageContract = XaurumCoinageContract(_coinageContractAddress);
            }
        }
    
        XaurmProxyContract public proxyContract;
        function setProxyContract(address _proxyContractAddress){
            if (msg.sender == owner || msg.sender == dev){
                proxyContract = XaurmProxyContract(_proxyContractAddress);
            }
        }
    
        XaurumAlliesContract public alliesContract;
        function setAlliesContract(address _alliesContractAddress){
            if (msg.sender == owner || msg.sender == dev){
                alliesContract = XaurumAlliesContract(_alliesContractAddress);
            }
        }
        
        
        
    
        /* owner */
        address public owner;
        function setOwner(address _newOwnerAdress) returns (bool){
            if ( msg.sender == dev ){        
                owner = _newOwnerAdress;
                return true;
            }
            return false;
        }
    
        address public dev;
    
        /* Xaur for gas */
        address xaurForGasCurrator;
        function setXauForGasCurrator(address _curratorAddress){
            if (msg.sender == owner || msg.sender == dev){
                xaurForGasCurrator = _curratorAddress;
            }
        }
    
        /* Burrning */
        address public burningAdress;
    
        /* Constructor */
        function XaurumToken(address _burningAddress) { 
            burningAdress = _burningAddress;
            lockdown = false;
            dev = msg.sender;
           
            
            // initial
             numberOfCoinages += 1;
             balances[0x097B7b672fe0dc3eF61f53B954B3DCC86382e7B9] += 5999319593600000;
             totalSupply += 5999319593600000;
             totalGoldSupply += 1696620000000;
             Coinage(numberOfCoinages, 0, 5999319593600000, 1696620000000, totalGoldSupply, totalSupply);      
    		
    
            // Mint 1
             numberOfCoinages += 1;
             balances[0x097B7b672fe0dc3eF61f53B954B3DCC86382e7B9] += 1588947591000000;
             totalSupply += 1588947591000000;
             totalGoldSupply += 1106042126000;
             Coinage(numberOfCoinages, 60611110000000, 1588947591000000, 1106042126000, totalGoldSupply, totalSupply);
            		
    		
            // Mint 2
             numberOfCoinages += 1;
             balances[0x097B7b672fe0dc3eF61f53B954B3DCC86382e7B9] += 151127191000000;
             totalSupply += 151127191000000;
             totalGoldSupply += 110134338200;
             Coinage(numberOfCoinages, 6035361000000, 151127191000000, 110134338200, totalGoldSupply, totalSupply);
            
    		
    		   // Mint 3
             numberOfCoinages += 1;
             balances[0x097B7b672fe0dc3eF61f53B954B3DCC86382e7B9] += 63789854418800;
             totalSupply += 63789854418800;
             totalGoldSupply +=  46701000000;
             Coinage(numberOfCoinages, 2559215000000, 63789854418800, 46701000000, totalGoldSupply, totalSupply);
            
    
    		   // Mint 4
             numberOfCoinages += 1;
             balances[0x097B7b672fe0dc3eF61f53B954B3DCC86382e7B9] +=  393015011191000;
             totalSupply += 393015011191000;
             totalGoldSupply +=  290692000000;
             Coinage(numberOfCoinages, 15929931000000, 393015011191000, 290692000000, totalGoldSupply, totalSupply);
            
    
    		   // Mint 5
             numberOfCoinages += 1;
             balances[0x097B7b672fe0dc3eF61f53B954B3DCC86382e7B9] +=  49394793870000;
             totalSupply += 49394793870000;
             totalGoldSupply +=  36891368614;
             Coinage(numberOfCoinages, 2021647000000, 49394793870000, 36891368614, totalGoldSupply, totalSupply);
        }
        
        function freezeCoin(){
            if (msg.sender == owner || msg.sender == dev){
                lockdown = !lockdown;
            }
        }
    
        /* Get balance of the account */
        function balanceOf(address _owner) constant returns (uint256 balance) {
            return balances[_owner];
        }
    
        /* Send coins */
        function transfer(address _to, uint256 _amount) returns (bool status) {
            uint256 goldFee = dataContract.goldFee();
    
            if (balances[msg.sender] >= _amount &&                                  // Check if the sender has enough
                balances[_to] + _amount > balances[_to] &&                          // Check for overflows
                _amount > goldFee &&                                                // Check if there is something left after burning fee
                !lockdown &&                                                        // Check if coin is on lockdown
                lockedAccounts[msg.sender] <= block.number) {                       // Check if the account is locked
                balances[msg.sender] -= _amount;                                    // Subtract from the sender minus the fee
                balances[_to] += (_amount - goldFee );                              // Add the same to the recipient
                Transfer(msg.sender, _to, (_amount - goldFee ));                    // Notify anyone listening that this transfer took place
                doBurn(msg.sender, goldFee, BurningType.TxtFee);                    // Notify anyone listening that this burn took place
                return true;
            } else {
                return false;
            }
        }
        
        /* A contract attempts to get the coins and sends them*/
        function transferFrom(address _from, address _to, uint256 _amount) returns (bool status) {
            uint256 goldFee = dataContract.goldFee();
    
            if (balances[_from] >= _amount &&                                  // Check if the sender has enough
                balances[_to] + _amount > balances[_to] &&                          // Check for overflows
                _amount > goldFee &&                                                // Check if there is something left after burning fee
                !lockdown &&                                                        // Check if coin is on lockdown
                lockedAccounts[_from] <= block.number) {                       // Check if the account is locked
                if (_amount > allowed[_from][msg.sender]){                          // Check allowance
                    return false;
                }
                balances[_from] -= _amount;                                    // Subtract from the sender minus the fee
                balances[_to] += (_amount - goldFee);                               // Add the same to the recipient
                Transfer(_from, _to, (_amount - goldFee));                     // Notify anyone listening that this transfer took place
                doBurn(_from, goldFee, BurningType.TxtFee);                    
                allowed[_from][msg.sender] -= _amount;                              // Update allowance
                return true;
            } else {
                return false;
            }
        }
        
        /* Allow another contract to spend some tokens in your behalf */
        function approveAndCall(address _spender, uint256 _value, bytes _extraData)
            returns (bool success) {
            allowed[msg.sender][_spender] = _value;
            tokenRecipient spender = tokenRecipient(_spender);
            spender.receiveApproval(msg.sender, _value, this, _extraData);
            return true;
        }
    
         function approve(address _spender, uint256 _value) returns (bool success) {
            allowed[msg.sender][_spender] = _value;
            Approval(msg.sender, _spender, _value);
            return true;
        }
    
        function allowance(address _owner, address _spender) constant returns (uint256 remaining) {
          return allowed[_owner][_spender];
        }
    
        /* Send coins via proxy */
        function transferViaProxy(address _source, address _to, uint256 _amount) returns (bool status, address sendFrom, address sentTo, uint256 sentToAmount, address burnAddress, uint256 burnAmount){
            if (!proxyContract.isProxyLegit(msg.sender)){                                        // Check if proxy is legit
                return (false, 0, 0, 0, 0, 0);
            }
    
            uint256 goldFee = dataContract.goldFee();
    
            if (balances[_source] >= _amount &&                                     // Check if the sender has enough
                balances[_to] + _amount > balances[_to] &&                          // Check for overflows
                _amount > goldFee &&                                                // Check if there is something left after burning fee
                !lockdown &&                                                        // Check if coin is on lockdown
                lockedAccounts[_source] <= block.number) {                          // Check if the account is locked
                
                balances[_source] -= _amount;                                       // Subtract from the sender minus the fee
                balances[_to] += (_amount - goldFee );                              // Add the same to the recipient
                Transfer(_source, _to, ( _amount - goldFee ));                    // Notify anyone listening that this transfer took place
                doBurn(_source, goldFee, BurningType.TxtFee);                         // Notify anyone listening that this burn took place
            
                return (true, _source, _to, (_amount - goldFee), burningAdress, goldFee);
            } else {
                return (false, 0, 0, 0, 0, 0);
            }
        }
        
        /* a contract attempts to get the coins and sends them via proxy */
        function transferFromViaProxy(address _source, address _from, address _to, uint256 _amount) returns (bool status, address sendFrom, address sentTo, uint256 sentToAmount, address burnAddress, uint256 burnAmount) {
            if (!proxyContract.isProxyLegit(msg.sender)){                                            // Check if proxy is legit
                return (false, 0, 0, 0, 0, 0);
            }
    
            uint256 goldFee = dataContract.goldFee();
    
            if (balances[_from] >= _amount &&                                       // Check if the sender has enough
                balances[_to] + _amount > balances[_to] &&                          // Check for overflows
                _amount > goldFee &&                                                // Check if there is something left after burning fee
                !lockdown &&                                                        // Check if coin is on lockdown
                lockedAccounts[_from] <= block.number) {                            // Check if the account is locked
    
                if (_amount > allowed[_from][_source]){                             // Check allowance
                    return (false, 0, 0, 0, 0, 0); 
                }               
    
                balances[_from] -= _amount;                                         // Subtract from the sender minus the fee
                balances[_to] += ( _amount - goldFee );                             // Add the same to the recipient
                Transfer(_from, _to, ( _amount - goldFee ));                        // Notify anyone listening that this transfer took place
                doBurn(_from, goldFee, BurningType.TxtFee);
                allowed[_from][_source] -= _amount;                                 // Update allowance
                return (true, _from, _to, (_amount - goldFee), burningAdress, goldFee);
            } else {
                return (false, 0, 0, 0, 0, 0);
            }
        }
        
         function approveFromProxy(address _source, address _spender, uint256 _value) returns (bool success) {
            if (!proxyContract.isProxyLegit(msg.sender)){                                        // Check if proxy is legit
                return false;
            }
            allowed[_source][_spender] = _value;
            Approval(_source, _spender, _value);
            return true;
        }
    
        function allowanceFromProxy(address _source, address _owner, address _spender) constant returns (uint256 remaining) {
          return allowed[_owner][_spender];
        }
        
        /* -----------------------------------------------------------------------*/
        
        /* Lock account for X amount of blocks */
        function lockAccount(uint _block) returns (bool answer){
            if (lockedAccounts[msg.sender] < block.number + _block){
                lockedAccounts[msg.sender] = block.number + _block;
                return true;
            }
            return false;
        }
    
        function isAccountLocked(address _accountAddress) returns (bool){
            if (lockedAccounts[_accountAddress] > block.number){
                return true;
            }
            return false;
        }
        
        ///
        /// Xaur for gas region
        ///
    
        /* user get small amout of wei for a small amout of Xaur */
        function getGasForXau(address _to) returns (bool sucess){
            uint256 xaurForGasLimit = dataContract.xaurForGasLimit();
            uint256 weiForXau = dataContract.weiForXau();
    
            if (balances[msg.sender] > xaurForGasLimit && 
                balances[xaurForGasCurrator] < balances[xaurForGasCurrator]  + xaurForGasLimit &&
                this.balance > dataContract.weiForXau()) {
                if (_to.send(dataContract.weiForXau())){
                    balances[msg.sender] -= xaurForGasLimit;
                    balances[xaurForGasCurrator] += xaurForGasLimit;
                    return true;
                }
            } 
            return false;
        }
        
        /* Currator fills eth through this function */
        function fillGas(){
            if (msg.sender != xaurForGasCurrator) { 
                throw; 
            }
        }
    
        ///
        /// Melting region
        ///
    
        function doMelt(uint256 _xaurAmount, uint256 _goldAmount) returns (bool){
            if (msg.sender == address(meltingContract)){
                totalSupply -= _xaurAmount;
                totalGoldSupply -= _goldAmount;
                Melt(_xaurAmount, _goldAmount);
                return true;
            }
            return false;
        }
        
        ///
        /// Proxy region
        ///
    
        
    
        ///
        /// Coinage region
        ///
        function doCoinage(address[] _coinageAddresses, uint256[] _coinageAmounts, uint256 _usdAmount, uint256 _xaurCoined, uint256 _goldBought) returns (bool){
            if (msg.sender == address(coinageContract) && 
                _coinageAddresses.length == _coinageAmounts.length){
                
                totalSupply += _xaurCoined;
                totalGoldSupply += _goldBought;
                numberOfCoinages += 1;
                Coinage(numberOfCoinages, _usdAmount, _xaurCoined, _goldBought, totalGoldSupply, totalSupply);
                for (uint256 cnt = 0; cnt < _coinageAddresses.length; cnt++){
                    balances[_coinageAddresses[cnt]] += _coinageAmounts[cnt]; 
                }
                return true;
            }
            return false;
        }
    
        ///
        /// Burining region
        ///
        function doBurn(address _from, uint256 _amountToBurn, BurningType _burningType) internal {
            balances[burningAdress] += _amountToBurn;                              // Burn the fee
            totalSupply -= _amountToBurn;                                          // Edit total supply
            Burn(_from, _amountToBurn, _burningType);                              // Notify anyone listening that this burn took place
        }
    
        function doBurnFromContract(address _from, uint256 _amount) returns (bool){
            if (msg.sender == address(alliesContract)){
                balances[_from] -= _amount;
                doBurn(_from, _amount, BurningType.AllyDonation);
                return true;
            }
            else if(msg.sender == address(coinageContract)){
                balances[_from] -= _amount;
                doBurn(_from, _amount, BurningType.ServiceFee);
                return true;
            }
            else{
                return false;
            }
    
        }
    
        /* This unnamed function is called whenever someone tries to send ether to it */
        function () {
            throw;     // Prevents accidental sending of ether
        }
    }
    
    contract XaurumMeltingContract {}
    
    contract XaurumAlliesContract {}
    
    contract XaurumCoinageContract {}
    
    contract XaurmProxyContract{
    
        address public owner;
        address public curator;
        address public dev;
    
        function XaurmProxyContract(){
            dev = msg.sender;
        }
    
        function setProxyCurrator(address _newCurratorAdress) returns (bool){
            if (msg.sender == owner || msg.sender == dev){        
                curator = _newCurratorAdress;
                return true;
            }
            return false;
        }
    
        function setOwner(address _newOwnerAdress) returns (bool){
            if ( msg.sender == dev ){        
                owner = _newOwnerAdress;
                return true;
            }
            return false;
        }
    
        /* Proxy Contract */
        
        address[] approvedProxys; 
        mapping (address => bool) proxyList;
        
        /* Adds new proxy to proxy lists and grants him the permission to use transferViaProxy */
        function addNewProxy(address _proxyAdress){
            if(msg.sender == curator){
                proxyList[_proxyAdress] = true;
                approvedProxys.push(_proxyAdress);
            }
        }
    
        function isProxyLegit(address _proxyAddress) returns (bool){
            return proxyList[_proxyAddress];
        }
        
        function getApprovedProxys() returns (address[] proxys){
            return approvedProxys;
        }
    
        function () {
            throw;
        }
    }
    
    contract XaurumDataContract {
    
        /* Minting data */
        uint256 public xauToEur;
        uint256 public goldToEur;
        uint256 public mintingDataUpdatedAtBlock;
    
        /* Gas for xaur data */
        uint256 public xaurForGasLimit;
        uint256 public weiForXau;
        uint256 public gasForXaurDataUpdateAtBlock;
    
        /* Other data */
        uint256 public goldFee;
        uint256 public goldFeeDataUpdatedAtBlock;
    
        address public owner;
        address public curator;
        address public dev;
    
        function XaurumDataContract(){
            xaurForGasLimit = 100000000;
            weiForXau = 100000000000000000;
            goldFee = 50000000;
           // dev = _dev;
    	   dev = msg.sender;
        }
    
        function setProxyCurrator(address _newCurratorAdress) returns (bool){
            if (msg.sender == owner || msg.sender == dev){        
                curator = _newCurratorAdress;
                return true;
            }
            return false;
        }
    
        function setOwner(address _newOwnerAdress) returns (bool){
            if ( msg.sender == dev ){        
                owner = _newOwnerAdress;
                return true;
            }
            return false;
        }
    
        function updateMintingData(uint256 _xauToEur, uint256 _goldToEur) returns (bool status){
            if (msg.sender == curator || msg.sender == dev){
                xauToEur = _xauToEur;
                goldToEur = _goldToEur;
                mintingDataUpdatedAtBlock = block.number;
                return true;
            }
            return false;
        }
    
        function updateGasForXaurData(uint256 _xaurForGasLimit, uint256 _weiForXau) returns (bool status){
            if (msg.sender == curator || msg.sender == dev){
                xaurForGasLimit = _xaurForGasLimit;
                weiForXau = _weiForXau;
                gasForXaurDataUpdateAtBlock = block.number;
                return true;
            }
            return false;
        }
    
        function updateGoldFeeData(uint256 _goldFee) returns (bool status){
            if (msg.sender == curator || msg.sender == dev){
                goldFee = _goldFee;
                goldFeeDataUpdatedAtBlock = block.number;
                return true;
            }
            return false;
        }
    
        function () {
            throw;
        }
    }