Оплачиваемый контракт с несколькими «вариантами»?

Я пытаюсь создать контракт, который ведет себя по-разному в зависимости от выбора пользователя. Я, однако, понятия не имею, как позволить пользователю «выбрать» опцию. В настоящее время у меня есть базовая резервная функция, которая выполняет основную логику, но эта логика имеет 2 важные переменные, которые я бы хотел, чтобы пользователь мог изменить. Каков наилучший подход для достижения этой цели? Я знаю, что могу создать платную функцию с двумя входами, которая изменит это поведение, но как люди вообще будут использовать эту функцию? Ни один кошелек (кроме MyEtherWallet) не поддерживает функции, и даже с MEW вам нужно знать ABI. Есть ли обходной путь или что-то в этом роде?

Спасибо, SEnergy

Ответы (1)

На самом деле, практически никто не предоставляет контракты конечным пользователям в том виде, в каком они есть. Почти всегда между пользователем и вашим смарт-контрактом (-ами) есть более старомодные интерфейсные слои, такие как web3. Таким образом, пользователь использует простой в использовании интерфейс, а в фоновом режиме web3 и выбранный узел заботятся о взаимодействии смарт-контрактов.

Однако, если это больше теоретический вопрос или вы действительно хотите, чтобы ваши конечные пользователи подключались напрямую к смарт-контрактам:

Прямое подключение к вашим контрактам без простых в использовании слоев

Если вы не хотите, чтобы конечные пользователи использовали кошелек, который поддерживает пользовательские контракты (или не хотите, чтобы они проходили настройку и все такое), у вас осталось не так много вариантов.

Единственное, что я мог придумать, это определить выбор, исходя из количества отправленного эфира. Например, последняя цифра может быть выбором - если пользователь отправляет 5003 или 4239082482390482903 weis, это означает выбор 3. Денежная разница незначительна, когда речь идет о weis.

Другая (глупая) идея — потребовать от них отправки необходимого количества транзакций. Если только одна транзакция, это означает выбор 1 и так далее.

Я считаю, что типичным решением является создание собственного внешнего интерфейса (DApp с web3.js).
Конечно. Я надеялся, что это больше теоретический вопрос. Во всяком случае, включу это также "на всякий случай"