Чем отличается исключение эфира из смарт-контракта от обычного адреса?

Мы реализуем платеж Ethereum для наших клиентов, и нам нужно выбрать между депозитами на смарт-контракт или на индивидуальные адреса клиентов. Каковы плюсы и минусы? Можно ли скрыть баланс нашего смарт-контракта, если мы используем его для всех платежей? Почему некоторые биржи не принимают платежи со смарт-контрактов — это из-за отсутствия информации об отслеживании клиентов?

Ответы (1)

Он другой, но лишь немного сложнее. Транзакции из EOA (внешние учетные записи, например, закрытый ключ подписывает транзакцию) имеют назначение и сумму. Биржа или сервис могут следить за мемпулом и видеть, что транзакция отправлена ​​на их адрес, и сообщать вам: «Эй, мы видим вашу транзакцию, мы ждем, пока она будет добыта, и x подтверждений для ее подтверждения!».

Однако сделки с контрактами отличаются. Транзакции из контрактов даже не являются транзакциями, это «вызовы сообщений». Поскольку все транзакции из контрактов запускаются из учетных записей EOA, вызовы сообщений из контрактов не отображаются в мемпуле и даже не включаются в блоки, в блоке находится только исходная транзакция, вызвавшая транзакцию контракта. Вот как платежи по контрактам будут работать на практике:

  1. Я отправляю tx на свой контракт Multisig со словами «отправить 1 ETH на этот адрес».

  2. Multisig в ​​той же транзакции отправляет вызов сообщения на адрес, который я ему указал, с суммой ETH, которую я сказал ему отправить.

Поскольку транзакция, из-за которой ETH переходит к сервису, на самом деле не к сервису, а к Multisig, сервис/биржа не может просто отслеживать транзакции на свой адрес. Им придется запускать каждую транзакцию, которую они видят, и проверять, отправляется ли она на их адрес. Кроме того, возможно, что результат транзакций может измениться в будущем блоке. Скажем, мой Multisig говорит: «Если текущий номер блока нечетный, никогда не отправляйте ETH», но биржа проверила транзакцию в четном блоке, они ошиблись бы, получив ETH, если бы он был добыт в нечетном блоке.

В конце концов, сервис/биржа может просто пинговать изменения баланса своего кошелька вместо того, чтобы пытаться прослушивать транзакции на свой адрес, но многие просто не хотят этого делать.

спасибо, не могли бы вы предоставить более подробную информацию, как определить, какой платеж пришел от какого клиента? Если я просто отслеживаю изменения баланса своего счета, как мне узнать, что произошло?
Есть несколько способов. Обычный способ обмена — иметь отдельные адреса для каждого пользователя, и они просто генерируют новый для каждого пользователя. Они тогда знают, кто отправляет на службу. Другим вариантом является ваш адрес получателя, являющийся контрактом, который требует, чтобы какой-то тип идентификатора был передан платной функции, которая уникальна для каждого человека.
Спасибо - это то, что я узнал до сих пор. В случае со смарт-контрактом, какие проблемы возникают при отправке из другого смарт-контракта? Вероятно ли, что кошелек пользователя не поддерживает добавление идентификатора в данные транзакции или отправка с другой биржи?
Если бы вы использовали идентификатор в своем методе смарт-контракта, то да, люди не смогли бы отправлять напрямую с биржи, поскольку биржа не будет знать об этом идентификаторе. Если вам нужна полная совместимость, вам придется использовать 1 адрес для каждого пользователя и обрабатывать переводы как из EOA, так и из контрактов.
поэтому в случае отдельных адресов мне нужно будет перевести средства на накопительный счет, потому что, в отличие от биткойнов, неудобно иметь дело со всеми этими счетами. Есть ли лучшая практика для этого?