Я хочу заключить договор аренды автомобиля.
В договоре Заказчика есть в страт с 4 поля. И функция registerToProvider. В контракте с провайдером есть две функции для установки арендной платы и регистрационного взноса. Все это работает нормально. Если клиент регистрируется в службе провайдера, и провайдер устанавливает некоторую арендную плату и регистрационный сбор, он работает, и в MIST это отображается.
Но когда клиент вызывает плату payRent или payRegistration, они не работают и не обновляются в MIST. не могли бы вы проверить мой код и сказать, в чем проблема.
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;
}
}
}
когда я вызываю эту функцию, транзакция работает правильно, но статус не меняется. Пожалуйста, посмотрите на изображение ниже. Я хочу, чтобы после отправки арендной платы и арендная плата, и регистрационный взнос были равны 0.
Я довольно смущен тем, что должно происходить. Отсутствует «GeneralAccount», поэтому предполагается, что там находятся оплачиваемые функции.
После некоторой возни я нашел последовательность, но я очень смущен тем, кто есть кто и почему мы делаем определенные вещи.
Я внес небольшие изменения для поддержки теста:
GeneralAccount
(отсутствует)onlyOwner
(отсутствует)payTestFunds() payable
.Тест:
Я рассмотрел различные вещи, которые должны произойти в первую очередь, чтобы эта функция заработала, и придумал последовательность:
payable
добавленной мной функцией. Весьма важно, потому что если в контракте нет денег, то он send()
провалится.registerToCarRentalServiceProvider
У меня проблемы с бизнес-логикой, но он устанавливает значения, как и ожидалось .
Функции, которые send()
структурно небезопасны , но это не по теме, поэтому отложите их.
Надеюсь, поможет.
Роб Хитченс
ТАМИМ ХАЙДЕР
Роб Хитченс
ТАМИМ ХАЙДЕР
ТАМИМ ХАЙДЕР
Роб Хитченс