Пост
Поделитесь своими знаниями.
Почему мои транзакции учитываются после двух блоков?
Я запускаю ноду и заметил, что мои транзакции всегда включаются на два блока позже, а не в следующий блок. Я заглянул в Интернет и нашел других людей с той же проблемой, но ответов на них нет. Может быть, это связано с проблемами однорангового соединения? Я даже приступил к созданию нового блока, но из-за задержки моя транзакция все равно попадает в блок n+2. Кто-нибудь знает, почему это происходит?
- Polygon PoS
Ответы
3Возможно, проблема не в геолокации. Обычно блок создается и запечатывается менее чем за 500 миллисекунд. Валидатор публикует блок, а затем ожидает его публикации около 2 секунд. Из-за задержки распространения транзакция может быть включена в блок n+2. Я все еще изучаю этот вопрос и сообщу вам, как только у меня будет больше информации.
Убедитесь, что вы подключены к достаточному количеству одноранговых узлов и что сетевое соединение вашего узла стабильно. Если возникла проблема с задержкой, возможно, она связана со скоростью подключения или синхронизации вашего узла.
Постоянное включение транзакций в блокn+2, а не в следующий блок, скорее всего, связано с задержками распространения по сети, а не с фундаментальной проблемой вашего узла. В таких сетях, как Polygon, блоки обычно создаются и закрываются менее чем за 500 миллисекунд, а валидаторы ждут около 2 секунд, прежде чем создать следующий блок. Из-за задержки в сети ваша транзакция может не дойти до валидатора вовремя для включения вn+1. Вместо этого она появится в спискеn+2. На это могут повлиять одноранговые соединения, скорость распространения блоков, время ретрансляции транзакций и общее состояние сети.
Чтобы диагностировать и устранить эту проблему, выполните следующие шаги:
###1. Проверьте одноранговые соединения Получение новых блоков и передача транзакций вашим узлом зависят от одноранговых узлов. Если на узле слишком мало одноранговых узлов или они работают медленно, распространение транзакций может занять больше времени, что приведет к задержкам.
Вы можете проверить количество одноранговых узлов, подключенных к узлу, используя:
geth attach http://127.0.0.1:8545
> net.peerCount
Для узлов на базе Ethereum, таких как Polygon, эта команда вернет количество одноранговых узлов. Если их количество невелико (например, меньше 10), возможно, ваш узел плохо подключен. Чтобы добавить больше одноранговых узлов, включите их вручную с помощью admin.addPeer()
команды:
> admin.addPeer("enode://your-peer-node")
Если ваш узел плохо подключен, попробуйте добавитьbootnodesили увеличить максимальное количество одноранговых подключений в конфигурации клиента.
###2. Оцените задержку в сети и синхронизацию блоков Даже при наличии достаточного количества одноранговых узлов задержка в сети может привести к задержке приема блоков. Вы можете измерить время, необходимое узлу для распознавания новых блоков, выполнив следующую команду:
> eth.syncing
Если ваш узел немного отстает, это означает, что он получает блоки позже, чем остальная часть сети. Сравните последний блок на вашем узле с обозревателем блоков, например PolygonScan:
> eth.blockNumber
Если между вашим узлом и сетью существует значительная задержка, рассмотрите возможность оптимизации соединения, разместив узел на VPSс низкой задержкой или использовавболее быстрое подключение к Интернету**.
###3. Отслеживайте распространение транзакций Возможно, ваши транзакции недостаточно быстро доходят до валидаторов. Используйте пул памяти, чтобы проверить, эффективно ли распространяется ваша транзакция:
> txpool.inspect
Если ваша транзакция появляется в локальном пуле, но не включается в следующий блок, возможно, она не достигает достаточного количества партнеров быстро. Вы можете использовать такие инструменты, как Mempool Explorer, чтобы проверить, видна ли ваша транзакция в сети.
Чтобы вручную повторно транслировать отложенную транзакцию, используйте:
> eth.sendRawTransaction("0x-your-transaction-hash")
Это обеспечивает ретрансляцию транзакции большему количеству партнеров, что повышает ее шансы на включение в следующий блок.
###4. При необходимости скорректируйте плату за газов Хотя плата за газ, возможно, и не является основной причиной, снижение платы за газ иногда может привести к задержкам. Сравните плату за газ по вашим транзакциям с тарифами, включенными в блокиn+1:
> eth.getTransaction("0x-your-tx-hash")
Найдите gasPrice
значение и сравните его с недавними транзакциями в последних блоках, используя:
> eth.getBlock("latest", true)
При необходимости повторно отправьте транзакцию с более высокой платой за газ, используя новую транзакцию (если она еще не завершена).
###5. Изучите механизм выбора валидатора и достижения консенсуса Если ваш блокчейн работает по схемеProof of Stake (PoS), выбор валидатора может повлиять на время транзакции. Некоторые валидаторы распространяют блоки быстрее, чем другие, а это значит, что транзакции, которые не дойдут до них быстро, могут быть отложены.
Проверьте, какой валидатор включил вашу транзакцию, загрузив сведения о блоке:
> eth.getBlock(n+2, true)
Это вернет данные валидатора, который обработал вашу транзакцию. Если транзакции часто обрабатывают одни и те же валидаторы, возможно, ваш узел лучше подключен к определенным валидаторам, а другие отсутствуют.
Если проблема не исчезнет, возможно, она возникла не только у вас. Рассмотрите возможность обсуждения проблемы на форуме сообщества Polygon. Другие операторы узлов, возможно, сталкивались с подобным поведением и могли бы поделиться дополнительной информацией.
Скорее всего, проблема вскорости распространения транзакцийизадержке сети. Если ваш узел недостаточно быстро транслирует транзакции или получает блоки с небольшими задержками, это может привести к тому, что транзакции попадут в форматеn+2вместоn+1.
Знаете ответ?
Пожалуйста, войдите в систему и поделитесь им.
Polygon is a decentralised Ethereum scaling platform that enables developers to build scalable user-friendly dApps with low transaction fees without ever sacrificing on security.
- Как добавить тестовую сеть Polygon Amoy в MetaMask: руководство13
- Восстановление USDT отправлено на смарт-контракт на Polygon14
- Отправка монет в долларах США из кошелька Ethereum на PayPal с помощью Moonpay17
- Разрешение неподтвержденных транзакций в сети Polygon13
- Отображение транзакций по контрактам B, C и D в контракте A17