Ich möchte einen Mietwagenvertrag abschließen.
Im Kundenvertrag gibt es nur 4 Felder. Und eine registerToProvider-Funktion. Im Anbietervertrag gibt es zwei Funktionen zum Festlegen der Miete und der Registrierungsgebühr. All dies funktioniert gut. Wenn sich ein Kunde beim Anbieterdienst registriert und der Anbieter eine Miete und eine Registrierungsgebühr festlegt, funktioniert es und in MIST wird es angezeigt.
Aber wenn der Kunde die payRent- oder payRegistration-Gebühr anruft, funktionieren diese nicht und es gibt kein Update auf MIST. Können Sie bitte meinen Code überprüfen und sagen, was das Problem ist.
contract CarRentalServiceCustomer is GeneralAccount{
string public customerName;
string public postalAddress;
string public phoneNumber;
string public emailAddress;
mapping(address=>CarRentService) public rentCar;
struct CarRentService{
bool active;
uint lastUpdate;
uint registrationFee;
uint rent;
}
function CarRentalServiceCustomer(string _name,string _postalAddress,string _phoneNumber,string _emailAddress){
customerName = _name;
postalAddress = _postalAddress;
phoneNumber = _phoneNumber;
emailAddress = _emailAddress;
}
function registerToCarRentalServiceProvider(address _providerAddress) onlyOwner {
rentCar[_providerAddress] = CarRentService({
active: true,
lastUpdate: now,
registrationFee: 0,
rent: 0
});
}
function setRegistrationFee(uint _registrationFee) {
if(rentCar[msg.sender].active){
rentCar[msg.sender].lastUpdate = now;
rentCar[msg.sender].registrationFee = _registrationFee;
}
else{
throw;
}
}
function setCarRent(uint _rent) {
if(rentCar[msg.sender].active){
rentCar[msg.sender].lastUpdate = now;
rentCar[msg.sender].rent = _rent;
}
else{
throw;
}
}
function payRegistrationFeeToCarRentalServiceProvider(address _providerAddress) returns (bool){
bool regFeeStatus = true;
if(_providerAddress.send(rentCar[_providerAddress].registrationFee))
{
rentCar[_providerAddress].registrationFee = 0;
return regFeeStatus;
}
else{
return !regFeeStatus;
}
}
function payRentToCarRentalServiceProvider(address _providerAddress) returns (bool){
bool payStatus = true;
if(_providerAddress.send(rentCar[_providerAddress].rent))
{
rentCar[_providerAddress].rent = 0;
return payStatus;
}
else{
return !payStatus;
}
}
function unsubscribeFromCarRentalService(address _providerAddress){
if(rentCar[_providerAddress].active = false && rentCar[_providerAddress].rent == 0
&& rentCar[_providerAddress].registrationFee == 0 ){
rentCar[_providerAddress].active = false;
} else {
throw;
}
}
}
Wenn ich diese Funktion aufrufe, funktioniert die Transaktion ordnungsgemäß, aber der Status ändert sich nicht. Bitte sehen Sie sich das folgende Bild an. Ich möchte, dass nach dem Absenden der Miete sowohl die Miete als auch die Anmeldegebühr 0 betragen.
Ich bin ziemlich verwirrt darüber, was los sein soll. Fehlendes "GeneralAccount", also davon ausgegangen, dass sich dort die kostenpflichtigen Funktionen befinden.
Nach einigem Fummeln habe ich die Sequenz gefunden, aber ich bin sehr verwirrt darüber, wer wer ist und warum wir bestimmte Dinge tun.
Ich habe geringfügige Änderungen vorgenommen, um den Test zu unterstützen:
GeneralAccount
(fehlt)onlyOwner
(fehlt)payTestFunds() payable
.Prüfen:
Ich habe mir die verschiedenen Dinge angesehen, die zuerst passieren müssen, damit diese Funktion funktioniert, und mir eine Sequenz ausgedacht:
payable
Funktion gesendet, die ich hinzugefügt habe. Ganz wichtig, denn wenn der Vertrag kein Geld hat, send()
wird er scheitern.registerToCarRentalServiceProvider
Ich habe Probleme, der Geschäftslogik zu folgen, aber die Werte werden wie erwartet festgelegt .
Die Funktionen, die send()
strukturell unsicher sind , aber nicht zum Thema gehören, also beiseite legen.
Ich hoffe es hilft.
Rob Hitchens
Tamim Haider
Rob Hitchens
Tamim Haider
Tamim Haider
Rob Hitchens