Депозиты смарт-контрактов от нескольких пользователей

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

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

Ответы (1)

Ваша первая идея была лучшей, но следующая оценка вводит вас в заблуждение:

однако это помешает мне идентифицировать депозиты для конкретных пользователей

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

То, что вы делаете с этой информацией, относится к нераскрытым деталям варианта использования. Возможно есть деталь реализации с неочевидным решением?

Ну да, поэтому я хочу, чтобы у людей была учетная запись с именем пользователя/паролем, и они могли вносить депозит с любого произвольного адреса (биржа, coinbase, кошелек и т. д.)... Следуя модели ethcrash, если вы знакомы с ней, поэтому идентифицируйте несколько счетов, с которых один пользователь может вносить депозиты, были бы невозможны, используя только один контракт для всех транзакций.