Transfer() будет передавать эфир в виде wei или эфира по умолчанию?

                pragma solidity ^0.4.17;
                //  I want to write a code for  loyalty points when user pays 
                contract GiveRefreceId {

                     mapping(address => uint256) public referenceid;
                        address[] public clients;
                        uint256 idcounter;

                    struct  MlMMembership_Payment{
                        string CompanyName;
                        uint256 DistributorId;
                        uint256 RefrenceDistributorId;
                        uint256 Amount;
                    }


                    MlMMembership_Payment[] MlMember;

                        event createdId(address user, uint256 id);

                        function giveRefrenceId() public returns (uint256)  { 
                            require(referenceid[msg.sender]==0);
                            idcounter += 1;
                            clients.push(msg.sender);
                            referenceid[msg.sender] = idcounter;
                            emit createdId(msg.sender,idcounter);
                            // return createdId[1]
                            return idcounter;
                        }


    function MLMloyalityPoints(string _Compney_name,uint256 _refreeid) public payable {
        uint256 temprefreeid  =  _refreeid-1;
        var  tempaddress = clients[temprefreeid];
        //return tempaddress;
         tempaddress.transfer(1000000000000000);

        }

}

1) Я написал код в солидных клиентах типа, arrayкоторый хранит адрес

2) Теперь моя функция MLMloyalityPointsполучит идентификатор, и я передам идентификатор моему массиву clents[]

3) Я ожидаю, что он даст адрес с индексом 0

4) Теперь я хочу передать значение на этот адрес, используя метод передачи. Я получаю сообщение об ошибке при вводе

5) Любые предложения в коде, я думаю, что что-то не так в методе передачи (), который я перепроверил на многие документы, они говорят, что разница между отправкой и передачей

Не могли бы вы объяснить, что должен делать MLMloyaltyPoints?, также в ваших клиентах кода есть массив адресов, а не uint256. Насколько я понимаю, вы хотите передать 1000000000000000 wei клиентам в массиве, верно? Дело в том, что любой, у кого есть идентификатор, может периодически запрашивать переводы. Пожалуйста, опишите ожидаемый функционал функции MLMloyaltyPoints
все трансферы в Вэй
я хочу, чтобы муравей передал 1000000000000000 wei клиентам в массиве в зависимости от массива на идентификаторе, переданном пользователем
Привет, Джейми, я дал идентификатор рефренса в заказе. 2) Кто когда-либо платит платеж с идентификатором рефрижератора, получает рефрижер получит немного эфира 3) в моей функции я хочу сделать то же самое, когда пользователь передает идентификатор рефрижера, который я хочу дать немного вэй
Хорошо, я понимаю, что те, у кого есть эталонный идентификатор, получат оплату. Последний вопрос: вы хотите контролировать, чтобы они не использовали один и тот же идентификатор ссылки для получения оплаты дважды, или это не важно?
также, какую ошибку вы получаете?
1) пользователь не должен иметь возможность вызывать функцию дважды (я не учил ее, пока вы не спросили меня) 2) Оценка газа не удалась Оценка газа завершилась ошибкой со следующим сообщением (см. ниже). Выполнение транзакции, скорее всего, завершится ошибкой. Вы хотите принудительно отправить? JsonRpcEngine - в ответе нет ошибки или результата для запроса: { "jsonrpc": "2.0", "id": 4200630498, "method": "eth_estimateGas", "params": [ { "from": "0xc", "value ": "0x0" } ] }

Ответы (1)

Все транзакции в вэй.

Это сработает. Наиболее вероятной причиной ошибки является то, что в вашем контракте недостаточно эфира.

mapping(uint256 => bool) public paid;

function MLMloyalityPoints(string _Compney_name,uint256 _refreeid) public payable {
    require(!payed[_refreeid]);
    address  tempaddress = clients[_refreeid-1];
    //return tempaddress;
    tempaddress.transfer(1000000000000000);
    paid[_refreeid] = true;
}

paid indicates if the user with the reference id_refreeid` уже забрал эфир.

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

но Джейми, я отправил немного эфира до этого контракта, потому что я написал, пожалуйста, посмотрите на следующую ссылку remix.ethereum.org/…
давай, спасибо, я посылаю меньше эфира и прошу больше эфира
одно небольшое сомнение, но если другой пользователь вводит тот же идентификатор ссылки, он должен получить эфир. один человек не должен вызывать функцию два раза? один и тот же идентификатор ссылки должен быть оплачен, сколько раз пользователь входит
идентификатор ссылки оплачивается только один раз, обратите внимание, что ссылки привязаны к одному пользователю. если другой пользователь введет ссылочный идентификатор, который уже был оплачен, контракт будет отменен. обратите внимание, что в вашем текущем коде любой может запросить идентификатор ссылки, а затем перейти к другой функции и получить эфир. Я не знаю, хотите ли вы этого. Вы можете избежать всего этого со ссылками, имея отображение, которое подсчитывает, сколько платежей может сделать каждый субъект. Также я думаю, что giveRefrenceIdдолжна быть какая-то проверка, потому что, как я уже сказал, любой может получить referenceId