Должен ли я использовать разные адреса отправителя для нескольких транзакций в одном блоке?

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

В Несколько транзакций с одного и того же адреса , Paul S пишет:

  

Если у вас есть зависимые транзакции в приложении off-blockchain, вы должны дождаться, пока предыдущая транзакция не будет добыта до отправки следующей транзакции.

У меня нет функциональных зависимостей транзакций, но все же: в качестве примера такой проблемы, которую я бы хотел избежать, предположим, что я одновременно отправляю N транзакций с одного и того же адреса, правильно увеличивая число бездействий для каждого. Если все эти транзакции должны быть включены в один и тот же блок, шахтер должен обеспечить, чтобы они выполнялись в порядке увеличения, чтобы составить действительный блок. Или, если включено только подмножество транзакций K <N, подмножество должно быть первым K-транзакциями, снова по порядку. Учитывая, что ожидающие транзакции вероятностно ретранслируются по всей сети, я обеспокоен тем, что пакет транзакций с одного и того же адреса не может быть надежно занесен в блок.

Лучший подход к использованию другого адреса отправителя для каждой транзакции?

Это, похоже, решает проблему с пулом транзакций и nonce, но усложняет другие аспекты dapp, такие как управление закрытым ключом и белым списком отправителя в контрактах.

5 голосов | спросил Michael Maurer 21 12016vEurope/Moscow11bEurope/MoscowMon, 21 Nov 2016 23:54:49 +0300 2016, 23:54:49

1 ответ


4

Я не уверен, что это необходимо на практике; Совет, который вы цитируете, касается ситуации, когда вы делаете сырые транзакции в автономном режиме и можете отказаться от некоторых из них, но если вы просто отправляете свои транзакции через Geth, он должен обрабатывать трансляцию транзакций и приращение nonce, а вещи вообще должны быть просто Работа. Тем не менее, по крайней мере теоретически, что отправка транзакций с одного и того же аккаунта делает каскадные отказы передачи таким образом, что вам не нужно.

Если вы хотите отправлять транзакции с разных учетных записей, но не хотите, чтобы остальная часть вашего приложения имела дело с сотнями разных адресов, вы могли бы абстрагировать эту часть: используйте один ключ для сделать отдельную подпись, которую вы передаете в части данных транзакции. Отправьте это промежуточному контракту, который принимает транзакции, поступающие с любого адреса, и вместо этого проверяет, что подпись, переданная ему в качестве параметра, соответствует вашему единственному ключу. Затем заключите промежуточный контракт с тем, что вы изначально планировали сделать. Это будет означать, что любые последующие контракты заключаются из промежуточного контракта, поэтому у вас будет один общий msg.sender, как если бы вы вы отправляли все транзакции с одного и того же адреса.

ответил Edmund Edgar 22 22016vEurope/Moscow11bEurope/MoscowTue, 22 Nov 2016 01:11:00 +0300 2016, 01:11:00

Похожие вопросы

Популярные теги

security × 330linux × 316macos × 2827 × 268performance × 244command-line × 241sql-server × 235joomla-3.x × 222java × 189c++ × 186windows × 180cisco × 168bash × 158c# × 142gmail × 139arduino-uno × 139javascript × 134ssh × 133seo × 132mysql × 132