Cálculo del precio del gas

tengo este codigo:

pragma solidity ^0.4.11;

contract Bank  {
    struct Balance {
      address owner;
      uint vault;
      uint profit;
    }

    Balance balance;
      mapping (address => uint) balances;

    function Bank() {
        balance.owner = msg.sender;
        balance = Balance(msg.sender, 0, 0);
    }

    function getBalance() constant returns (uint) {
        if(msg.sender == balance.owner) {
           return this.balance;
        }
        throw;
    }

    function withdrawOwner() returns (bool) {
        if(msg.sender == balance.owner) {
           balance.vault = balance.vault - balance.profit;
           bool sent = balance.owner.send(balance.profit);
           balance.profit = 0;
           return sent;
        }
        return false;
    }

    function withdraw() returns (bool) {
        uint customerBalance = balances[msg.sender];
        if(customerBalance == 0) {
          throw;
        }

        balance.vault -= customerBalance;

        balances[msg.sender] = 0;
        return msg.sender.send(customerBalance);
    }

    function deposit() payable returns (bool) {
        uint take = 100;

        uint depositAmount = msg.value;
        balance.vault += depositAmount;
        balance.profit += take;

        balances[msg.sender] = depositAmount - take;

        if(msg.value < 20) {
          throw;
        } 

        return true;
    }
}

La gasolina estimada dice 4.700.000, lo que parece alto. ¿Es por el lanzamiento o por el envío? A juzgar por eso, con un precio de éter de alrededor de $ 200, ¿eso costaría $ 18?

Estoy multiplicando 20Gwei * 4.7e6 = 94000000000000000 = 0.094 ether

¿Se puede publicar todo el contrato con el tipo declaración de saldos?
¿Es correcto mi cálculo?
El cálculo parece correcto, es la estimación de retorno de gas la que parece demasiado alta. El contrato completo debe enviarse para ayudar

Respuestas (1)

Agregué una estructura simulada y un mapeo a su ejemplo y lo compilé en Remix.

pragma solidity ^0.4.11;
// mock contracts
contract c{
 // mock mapping
 mapping (address=>uint) balances;
 // mock struct
 struct foo  {
     uint vault;
 }
function withdraw() returns (bool) {
    // init struct
    foo memory balance; 

    uint customerBalance = balances[msg.sender];
    if(customerBalance == 0) {
      throw;
    }

    balance.vault -= customerBalance;
    balances[msg.sender] = 0;
    return msg.sender.send(customerBalance);
}
}

El compilador regresa. Gastas tu gasolina en otro lado. Proporcione el contrato completo.

Costo de transacción: 160457 gas. Costo de ejecución: 81525 gas.

UPD: Costo total del contrato

Costo de transacción: 379244 gas. Costo de ejecución: 245228 gas.

Editado, supongo que es el envío.
¿UPD? Dice desconocido en Remix para gasEstimate al retirar.
Result: "0x0000000000000000000000000000000000000000000000000000000000000001" Transaction cost: 23673 gas. Execution cost: 17401 gas. Decoded: bool: truepara retirar en Remix
@JustinThomas Establecí el valor en 1000 y ejecuté Depósito, eliminé Valor y ejecuté getBalance para verificar el saldo y luego ejecuté Retiro sin valor