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?
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!
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:
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:
geth
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
});
geth
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
:
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
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
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
Puede verificar que ha asignado sus variables correctamente escribiendo el siguiente comando en geth
:
> myContract
{
address: "0xf5D623C03d245D36286D97689f8dE8B629c8f46a",
allEvents: function(),
getNumber: function(),
setNumber: function()
}
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"
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
}
Puede llamar a la getNumber()
función geth
usando el siguiente comando:
> myContract.getNumber()
123
Wang
privacidadisahumanright.eth
geth
.Wang
jeff