Допис
Діліться своїми знаннями.
Чому мої транзакції включені після 2 блоків?
Я запускаю вузол, і я помітив, що мої транзакції завжди включаються на два блоки пізніше, а не в наступному блоці. Я перевірив в Інтернеті і знайшов інших з тією ж проблемою, але без відповідей. Чи може це бути пов'язано з проблемами одноліткового підключення? Я навіть спростив створення нового блоку, але затримка все ще призводить до того, що моя транзакція вводиться в блок 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")
Якщо ваш вузол недостатньо підключений, подумайте про додаваннязавантажувальних вузлівабо збільшення максимальної кількості однорангових з'єднань у конфігурації клієнта.
###2. Оцініть затримку мережі та синхронізацію блоку Навіть при достатній кількості однолітків затримка мережі може затримати прийом блоків. Ви можете виміряти час, необхідний вашому вузлу для розпізнавання нових блоків, виконавши:
> eth.syncing
Якщо ваш вузол трохи відстає, це означає, що він отримує блоки пізніше, ніж решта мережі. Порівняйте останній блок у вашому вузлі з провідником блоків, як-от PolygonScan:
> eth.blockNumber
Якщо між вашим вузлом і мережею є значна затримка, подумайте про оптимізацію підключення, розмістивши ваш вузол наVPS з меншою затримкоюабо скориставшисьшвидшим підключенням до Інтернету.
###3. Моніторинг розповсюдження транзакцій Ваші транзакції можуть не надходити до валідаторів досить швидко. Використовуйте mempool, щоб перевірити, чи ефективно поширюється ваша транзакція:
> 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.
- Як додати багатокутник Amoy Testnet на MetaMask: Посібник13
- Відновлення USDT, надісланого до смарт-контракту на Polygon14
- Відправка USDCoins з гаманця Ethereum на PayPal за допомогою Moonpay17
- Вирішення непідтверджених транзакцій у мережі Polygon13
- Відображення транзакцій для контрактів B, C і D у договорі A17