Dies ist der Beispiel-Smart-Vertrag, den ich ausführen möchte. Alle Methoden funktionieren, außer "payVendor" - es schlägt fehl, wenn das benötigte Gas die Freigrenze überschreitet oder die Transaktion immer fehlschlägt . Ich habe versucht, das Gas zu erhöhen, aber es hilft nicht.
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;
}
}
Bei mir scheint es gut zu funktionieren. Es gibt ein paar Dinge, die dies verursachen können:
Sie senden weniger ETH als contractValue
, und es wirft ab, weil der Vertrag nicht genug ETH zum Senden enthält.
Stellen Sie sicher, dass Sie den Vertrag korrekt mit dem Wert initialisieren. Jeder übergebene Wert ist in WEI .
Als Anregungen sind in diesem Vertrag noch weitere Dinge zu beachten:
Die Art und Weise, wie Sie Ihren Konstruktor aufgerufen haben, ist zugunsten der constructor
Funktion veraltet.
throw
wird zugunsten von revert
, require
, und verworfen assert
.
Nagen
Nagen