В договоре аренды функция payRent не работает или не обновляется на MIST!

Я хочу заключить договор аренды автомобиля.

В договоре Заказчика есть в страт с 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.

введите описание изображения здесь

Можно ли выложить оставшуюся часть контракта? У этого есть неопределенные структуры и другие проблемы, поэтому он не может скомпилироваться. Мы нигде не видим установленного .rent, и это проблема ( send(0) ), но это не обязательно проблема . Нужно посмотреть, что делают остальные.
Я загрузил полный код....пожалуйста, посмотрите...
Спасибо. Я получил его для компиляции, удалив модификаторы «is General Account» и onlyOwner. Достаточно хорошо для устранения неполадок. Обнаружил некоторые проблемы.
Является ли проблема с внутренним контрактом или модификатором. Модификатор imp для безопасности. Извините, я совсем новичок. Пожалуйста, не стесняйтесь предложить мне разработать этот контракт.
У меня есть план добавить некоторые функции, такие как #клиент может выбрать автомобиль # например, у поставщика есть 5 автомобилей, тогда клиент не может арендовать автомобиль, и сообщение обувает все забронированные автомобили. У #провайдера есть база данных, сколько клиентов зарегистрировано в сервисе.... Но как я могу сопоставить это, я понятия не имею....
Полезный. Спасибо. Таким образом, контракт заключается на одно розничное бюро по аренде автомобилей (давайте придерживаться одного магазина), как я имел дело, и у них есть парк автомобилей, которые могут быть арендованы только одним человеком за раз, ставка устанавливается офисом и заказчик является стороной договора. Итак, это три вещи. 1) Инвентарь и доступность. 2) Арендная ставка (варьируется по договоренности) так устанавливается службой поддержки, а затем 3) клиент оплачивает счет при возврате автомобиля. Некоторые довольно хитрые взаимодействия вокруг цены и процесса. О праве? Сложный первый проект! :-)

Ответы (1)

Я довольно смущен тем, что должно происходить. Отсутствует «GeneralAccount», поэтому предполагается, что там находятся оплачиваемые функции.

После некоторой возни я нашел последовательность, но я очень смущен тем, кто есть кто и почему мы делаем определенные вещи.

Я внес небольшие изменения для поддержки теста:

  1. Удалено GeneralAccount(отсутствует)
  2. Удалено onlyOwner(отсутствует)
  3. Добавлена ​​функция ничегонеделания payTestFunds() payable.

Тест:

Я рассмотрел различные вещи, которые должны произойти в первую очередь, чтобы эта функция заработала, и придумал последовательность:

  1. Прислал контракт немного Eth с payableдобавленной мной функцией. Весьма важно, потому что если в контракте нет денег, то он send()провалится.
  2. Отправила свой адрес наregisterToCarRentalServiceProvider

введите описание изображения здесь

  1. Отправлено "1" наsetCarRent введите описание изображения здесь

  2. Проверено rentCar[myAddress]. 1. Правильно.введите описание изображения здесь

  3. Отправила свой адрес наpayRentToCarRentalServiceProvider введите описание изображения здесь

  4. Проверил аренду автомобиля[myAddress]. 0. Правильно.введите описание изображения здесь

У меня проблемы с бизнес-логикой, но он устанавливает значения, как и ожидалось .

Функции, которые send()структурно небезопасны , но это не по теме, поэтому отложите их.

Надеюсь, поможет.

Я думаю, это проблема. У меня контракт GeneralAccount и его модификатор onlyowner тоже. Мой клиентский контракт наследует этот контракт. Я предполагаю, что моя проблема в том, что я не дал эфира на свой контрактный счет. Я думал, что эфир функции отправки будет вычитаться из моего внешнего счета. Я был неправ. Теперь, когда я развертываю свой клиентский контракт с некоторыми ETHAR, я получаю следующую ошибку в своем кошельке MIST. «Кажется, эта транзакция завершится неудачно, если «вы отправите ее, она может поглотить весь газ, который вы отправляете».... и я добавил следующую оплачиваемую функцию function payTestFunds() payable{ } Tnx много
простого добавления функции payTestFunds() payable{ } было недостаточно, поэтому я сделал свой конструктор также платным. Теперь на моем контрактном счете у меня 5 эфиров, теперь я плачу по счету, но все равно показываю старое значение ... не становится 0 после оплаты аренды ...
отредактировал мой ответ с картинками. Я думаю, что этот контракт может быть слишком занят, чтобы найти прочную основу.
странная вещь... я тоже пробовал подобное.... но не работает...
Одна вещь, которая бросалась в глаза во время тестирования, — непоследовательное использование переданных адресов и msg.sender. Я должен был следить за тем, чтобы адреса, которые я передал функциям, совпадали с msg.sender в setCarRent(), потому что код работает таким образом.
извините, чувак, я вас сильно побеспокоил... я не могу решить эту крошечную проблему, как мне построить большой проект... я в восторге.... для последней попытки вот мой полный код ethereum.github.io/ надежность браузера/…