Este es el contrato inteligente de muestra que estoy tratando de ejecutar. Todos los métodos funcionan, excepto "payVendor": falla con el gas requerido excede la asignación o siempre falla la transacción . He intentado aumentar el gas, pero no ayuda.
contract vendorContract {
uint public vendorID;
uint public ownerID;
uint256 public contractValue;
string public contractDescription;
string public contractStatus;
string public paymentStatus;
address public contractOwner;
address public contractVendor;
string constant newcon = "New";
string constant wipcon = "WIP";
string constant reqcon = "Requested";
string constant shipcon = "Shipped";
string constant endcon = "Completed";
string constant err = "Error";
modifier isOwner()
{
if (msg.sender != contractOwner) throw;
_ ;
}
modifier isVendor()
{
if (msg.sender != contractVendor) throw;
_ ;
}
function vendorContract(uint _vid, string _desc) public {
vendorID = _vid;
contractStatus="New";
contractOwner=msg.sender;
contractDescription= _desc;
}
function acceptContract(uint256 _cvalue, uint _vidd) public {
if (vendorID != _vidd) {
contractStatus = err;
throw;
}
contractStatus=wipcon;
contractValue = _cvalue;
contractVendor = msg.sender;
}
function requestPayment() isVendor {
paymentStatus=reqcon;
contractStatus=shipcon;
}
function paymentStatus() returns (string) {
return paymentStatus;
}
function payVendor() payable isOwner {
if (!contractVendor.send(contractValue))
throw;
//contractVendor.send(contractValue);
contractStatus = endcon;
}
}
Parece funcionar bien para mí. Hay algunas cosas que pueden estar causando esto:
Está enviando menos ETH que contractValue
, y está tirando porque no hay suficiente ETH en el contrato para enviar.
Asegúrese de inicializar correctamente el contrato con el valor. Cada valor que pasa está en WEI .
Hay otras cosas a tener en cuenta como sugerencias en este contrato:
La forma en que llamó a su constructor está obsoleta a favor de la constructor
función.
throw
está en desuso en favor de revert
, require
y assert
.
Nagen
Nagen