¿Cómo especificar el gas al implementar un nuevo contrato en Mist?

Cuando envío transacciones a mi contrato, la billetera me dice que se acabó el gas, entonces, ¿cómo puedo especificar la cantidad de gas cuando despliegue un nuevo contrato?

Respuestas (1)

ACTUALIZACIÓN 2 de abril de 2017

Como señaló @jeff en el comentario a continuación:

Una corrección; en la segunda imagen, donde Mist propone 113,250 de gas, ese texto azul en realidad es editable (aunque no está nada claro). Entonces puedes especificar el límite de gas :)

Gracias @jeff!



Asumiendo la billetera Ethereum

Supongo que la "billetera" en su pregunta se refiere a Ethereum Wallet (Mist) ya que su pregunta original no especificaba "Mist".

P : ¿Cómo especificar el gas cuando se implementa un nuevo contrato en Mist?

R : Cuando implementa un contrato en Mist (Contratos -> Implementar nuevo contrato), puede cambiar la tarifa en la pantalla. Esto representa la gasolina x el precio estimado de la gasolina como se muestra en la siguiente pantalla:

ingrese la descripción de la imagen aquí

P : Cuando envío transacciones a mi contrato, la billetera me dice que se acabó el gas, entonces, ¿cómo puedo especificar la cantidad de gas cuando implemento un nuevo contrato?

R : No puede especificar el gas máximo en la interfaz de niebla estándar. Mist parece tratar de estimar el gas requerido y agrega 100,000 unidades de gas además de su estimación. En la pantalla de abajo, la estimación es 13,250 de gas. Mist especifica el máximo de 113,250 de gas:

ingrese la descripción de la imagen aquí



Si estás usandogeth

Si está utilizando geth, a partir de 2 estructuras asignadas con una matriz de direcciones, la inserción no funciona :

Para especificar el gas al crear el contrato:

> var twoStructsContract = web3.eth.contract(twoStructsCompiled.TwoStructs.info.abiDefinition);
> var twoStructs = twoStructsContract.new({from:web3.eth.accounts[0], data: twoStructsCompiled.TwoStructs.code, gas: 1000000}, 
  function(e, contract) {
    if (!e) {
      if (!contract.address) {
        console.log("Contract transaction send: TransactionHash: " + 
          contract.transactionHash + " waiting to be mined...");
      } else {
        console.log("Contract mined! Address: " + contract.address);
        console.log(contract);
      }
    }
  }
)

Para especificar el gas al enviar una transacción a su contrato:

> twoStructs.add(eth.accounts[0], 123, {
  from:web3.eth.accounts[0], 
  data: twoStructsCompiled.TwoStructs.code,
  gas: 1000000
});



Si creó su contrato en Mist y desea enviar una transacción a través degeth

En esta sección, implementé el siguiente código en Mist on Testnet. Puede replicar este ejemplo en Testnet usando la dirección y la información a continuación:

contract TestMistGas {
    uint256 number;

    function getNumber() constant returns (uint) {
        return number;
    }

    function setNumber(uint256 _number) {
        number = _number;
    }
}

Para luego obtener los detalles del contrato y usarlo en geth:

  1. Obtenga la dirección en la que Mist implementó su contrato. Para hacer esto, haga clic en su contrato en Mist y copie la dirección. En geth, asigne la dirección a una variable:

    > var myContractAddress = "0xf5D623C03d245D36286D97689f8dE8B629c8f46a";
    undefined
    
  2. Obtenga la interfaz binaria de la aplicación JSON (ABI). Para hacer esto, haga clic en su contrato en Mist, haga clic en Mostrar interfaz. En geth, asigne esta cadena a una variable:

    > var myContractABI = [ { "constant": false, "inputs": [ { "name": "_number", "type": "uint256" } ], "name": "setNumber", "outputs": [], "type": "function" }, { "constant": true, "inputs": [], "name": "getNumber", "outputs": [ { "name": "", "type": "uint256", "value": "12345" } ], "type": "function" } ];
    undefined
    
  3. Cree una variable que apunte a su dirección de contrato con las funciones ABI expuestas escribiendo el siguiente comando en geth:

    > var myContract = eth.contract(myContractABI).at(myContractAddress);
    undefined
    
  4. Puede verificar que ha asignado sus variables correctamente escribiendo el siguiente comando en geth:

    > myContract
    {
      address: "0xf5D623C03d245D36286D97689f8dE8B629c8f46a",
      allEvents: function(),
      getNumber: function(),
      setNumber: function()
    }
    
  5. Puede enviar una transacción para llamar a la setNumber()función usando el siguiente comando en geth:

    > myContract.setNumber(123, {from: eth.accounts[0], gas: 100000});
    

    "0xc8eeba52b5970c93e8d8be91632548b1d6400b74bd6dbbc7017e08bcc0b15648"

  6. Puede verificar el estado de su transacción usando el siguiente comando en geth:

    > eth.getTransaction("0xc8eeba52b5970c93e8d8be91632548b1d6400b74bd6dbbc7017e08bcc0b15648")
    {
      blockHash: "0x964860acb5cd6af52ff01004ba471e2c5304ea47a788bc34462c973e9f969c80",
      blockNumber: 1000864,
      from: "0x3b449dfd7c15c60a45ce1d401b5a1a6081d2a400",
      gas: 90000,
      gasPrice: 20000000000,
      hash: "0xc8eeba52b5970c93e8d8be91632548b1d6400b74bd6dbbc7017e08bcc0b15648",
      input: "0x3fb5c1cb000000000000000000000000000000000000000000000000000000000000007b",
      nonce: 1048582,
      to: "0xf5d623c03d245d36286d97689f8de8b629c8f46a",
      transactionIndex: 1,
      value: 0
    }
    
  7. Puede llamar a la getNumber()función gethusando el siguiente comando:

    > myContract.getNumber()
    123
    
cuando uso el comando "sendtransaction", por qué me dice que "dirección no válida", implemento ese contrato usando mist
Acabo de agregar un ejemplo en el que implementé el contrato en Mist y llamé a las funciones del contrato en geth.
Construyo una cadena privada e implemento el contrato con geth CLI, ¿por qué no hay respuesta? incluso ninguna transacción recibida por la cadena de acuerdo con el registro
Una corrección; en la segunda imagen, donde Mist propone 113,250 de gas, ese texto azul en realidad es editable (aunque no está nada claro). Entonces puedes especificar el límite de gas :)