Esta es una función en mi contrato. Hay una observación compleja sobre esto, muestra una advertencia de que el requerimiento de gas es grande remix
. Especulo que esta podría ser una de las razones por las que tuve problemas con el gas al intentar implementar usando truffle
.
En primer lugar, necesito entender el problema.
function sendEther(string data) payable {
address sender = msg.sender;
uint value = msg.value;
voter[sender].data = data;
voter[sender].amount = value;
voterIndex[voter_count] = sender;
voter_count = voter_count + 1;
Deposit(sender, value);
}
Nota: Encontré un problema similar en el que el usuario intentaba enviar una transacción que podría ser una dirección normal o un contrato y, por lo tanto, tenía el problema. Ni idea de por qué me pasa a mí.
EDITAR: La constant
palabra clave era un error tipográfico. Pero la pregunta real fue respondida precisamente a continuación.
Dos cosas.
Primero, el uso de payable
y constant
juntos es contradictorio. En segundo lugar, el uso de un string
significa que el tamaño de la carga útil de la transacción y el costo de almacenamiento son impredecibles, debido a la longitud variable del archivo string
.
Lo desarrollé hasta que se compilara, reproduje el error de advertencia de gas y eliminé la advertencia con un cambio a good'ol bytes32
. Otra ventaja de la interfaz de tamaño fijo es que se puede llamar desde otros contratos.
Actualizar:
Puede pasar cadenas entre contratos con los nuevos compiladores de Solidity.
pragma solidity ^0.4.15;
contract X {
struct Voter {
bytes32 data;
uint amount;
}
mapping(address => Voter) voter;
address[] voterIndex;
uint voter_count;
event Deposit(address a, uint b);
function sendEther(bytes32 data) public payable {
address sender = msg.sender;
uint value = msg.value;
voter[sender].data = data;
voter[sender].amount = value;
voterIndex[voter_count] = sender;
voter_count = voter_count + 1;
Deposit(sender, value);
}
}
Espero eso ayude.
kannan ravindran
constant
eso que no fue intencional. Por cierto, ¿puedes también explicar o dar un enlace donde pueda aprender cómo depurar el error en el depurador de remezclas o dentro de etherscan? Gracias de nuevo.Rob Hitchens