В настоящее время я изучаю смарт-контракты и немного запутался в том, как они на самом деле работают.
Мой веб-сайт позволяет пользователям отправлять ETH со своего кошелька на сайте на другой адрес вне сайта. В течение которого я хотел бы вычесть 1% за комиссию на моем сайте.
Можно ли это сделать с помощью смарт-контрактов?
Что я сделал сейчас, используя Solidity, так это разработал этот очень простой контракт:
pragma solidity ^0.4.18;
contract MultiSend
{
function multiSendETH(address[] memory addresses, uint[] memory values) public payable
{
// Validate addresses and values match
if(addresses.length != values.length)
{
return;
}
else
{
for(uint i = 0; i < addresses.length; i++)
{
address(addresses[i]).transfer(values[i]);
}
msg.sender.transfer(this.balance);
}
}
}
Я успешно развернул его со значением 1 wei через remix.ethereum.org.
Можно ли повторно использовать один и тот же смарт-контракт снова и снова каждый раз, когда кто-то снимает деньги с моего сайта?
Или мне нужно создать смарт-контракт со стоимостью, равной той, что снимается?
Моя проблема заключается в том, что смарт-контракту требуется немного времени, чтобы быть добытым и стать доступным, поэтому использование этого метода финансирования с выводом надлежащей стоимости и промежутком времени, когда контракт доступен и может быть выполнен, будет иметь некоторую задержку и будет плохо для Пользовательский опыт.
Я надеялся, что можно будет повторно использовать этот смарт-контракт и, возможно, добавить параметр, из какого кошелька отправлять? Это возможно?
Также можно получить идентификатор транзакции из этой строки:
address(addresses[i]).transfer(values[i]);
Или мое понимание смарт-контрактов полностью отсутствует?
Я хотел бы назвать это так:
addresses = ['0xTheirOutputAddress', '0xMySiteAddress']
fee = total * 0.01
values = [total - fee, fee]
w3.contract.multiSendETH(addresses, values).call()
Я бы порекомендовал вам потратить некоторое время, решить эти проблемы одну за другой и поискать, если на них уже был дан ответ.
Если нет, составьте подробный, но простой вопрос для каждого из них.
Люди, которые знают гораздо больше меня, смогут вам помочь, но прямо сейчас у вас есть несколько вопросов в одном, и это очень запутывает. Просто пытаюсь помочь.
Кстати:
Конечно, вы можете использовать один и тот же контракт для всех транзакций. На самом деле это означает, что вы должны быть использованы таким образом. Вы развертываете его только один раз, и все транзакции выполняются одним и тем же контрактом.
Вам необходимо уточнить, что вы подразумеваете под «адресом моего веб-сайта», потому что то, как вы написали, «гонорар» останется в договоре. Вам все равно нужно будет перевести плату на ваш «веб-сайт».
Что я вижу в вашем коде, так это то, что вы не проверяете, связаны ли «значения» каким-либо образом с количеством ETH, переданным тем, кто вызвал эту функцию. Здесь ваш контракт развалится.