Использование узла Ethereum RPC При звонке вы часто сталкиваетесь only replay-protected (EIP-155) transactions allowed over RPC
сообщение об ошибке. Эта ошибка обычно возникает при попытке отправить сообщение, не соответствующее EIP-155 Стандартное торговое время. В этой статье объясняется, почему возникает эта ошибка, а также кратко представлены EIP-155 стандарты и их предпосылки.
Причина ошибки:
В Ethereum подпись транзакции обычно содержит номер транзакции. nonce
、gasPrice
、to
、data
и другая информация для обеспечения уникальности транзакции. Первоначальный дизайн Ethereum не был специально нацелен на атаки повтора транзакций. атака), что приводит к возможности повторных атак на разные цепочки.
С форками Ethereum (например, расколом между Ethereum и Ethereum Classic),Этот риск становится более серьезным. Во избежание повтора транзакций между разными цепочками,EIP-155 Предлагается новый стандарт транзакций, гарантирующий, что подписи транзакций однозначно идентифицируют конкретную сеть. В частности, ЭИП-155 добавил один Идентификатор цепочки (цепочка ID) поле, в результате чего транзакции в разных цепочках не могут воспроизводить друг друга.
Если вы неправильно указали идентификатор цепи при отправке транзакции на узел Ethereum или отправленная транзакция не соответствует EIP-155 стандартный,Тогда вылезет ошибка:only replay-protected (EIP-155) transactions allowed over RPC
,Обратите внимание, что вы должны отправить сообщение, соответствующее стандарту EIP-155 «Защищенные транзакции».
Распространенные причины, вызывающие эту ошибку:
EIP-155 — это предложение Ethereum, целью которого является предотвращение переигратьатаковать。переигратьатаковатьотносится к,атаковать копировать Действительная транзакция,и повторно отправить его в другую цепочку,Это может привести к вредоносному поведению или неправильной работе.
EIP-155 Представлен Идентификатор цепочки (цепочка ID) и требует, чтобы каждая транзакция включала идентификатор цепочки при подписании. Идентификатор цепочки Это цифровой идентификатор, связанный с цепочкой, который используется для различения различных сетей блокчейна. Например:
1
。4
。3
。В частности, EIP-155 реализует механизм защиты транзакций путем изменения подписи транзакции. Традиционные подписи транзакций Ethereum не содержат идентификаторов цепочки и подвержены атакам повторного воспроизведения. EIP-155 добавляет идентификатор цепочки при подписании транзакций, чтобы гарантировать уникальность транзакций в каждой цепочке.
В Ethereum транзакции обычно подписываются по следующей формуле:
в,ChainID
Это новое поле, которое предотвращает повторение транзакций в других цепочках. Встраивая идентификатор цепочки в процесс подписи, действительность транзакции ограничивается определенной цепочкой, гарантируя, что транзакция не может быть повторно использована в других цепочках.
Для транзакции, если не используется EIP-155 стандарту, его подпись будет основана на содержимом транзакции (например, nonce
、gasPrice
и т. д.). Если транзакция не включает идентификатор цепочки, она может быть воспроизведена в разных цепочках Ethereum, что приведет к потенциальным проблемам безопасности. И в EIP-155 Согласно дизайну, подпись транзакции включает идентификатор цепочки, поэтому транзакция может быть действительна только в определенной цепочке.
существовать 2016 год,Эфириум прошел DAO атаковать инцидент, этот инцидент привел к тому, что сообщество Ethereum решило провести хард-форк блокчейна Ethereum и создать Ethereum Classic. Classic) и Ethereum — две независимые цепочки. существовать Во время этого процесса форка,переигратьатаковать стать серьезной проблемой безопасности,атаковать может копировать транзакции из одной цепочки в другую для повторного воспроизведения,Результатом является потеря средств или некорректная работа.
Чтобы избежать этой проблемы, Ethereum предложил EIP-155,Он вводит защиту идентификатора цепочки, чтобы гарантировать, что транзакции не могут быть воспроизведены между разными цепочками. Например,Для Эфириума Существующая транзакция сети не будет действительна в цепочке Ethereum Classic.,Поскольку идентификатор цепочки, содержащийся в подписи, не соответствует целевой цепочке.,Тем самым предотвращая повтор атаковать.
Узлы EIP-155 в EIP-155 будут проверять идентификатор цепочки при приеме транзакций. Если идентификатор цепочки в транзакции не совпадает с идентификатором цепочки текущей сети, транзакция будет отклонена. Это позволяет избежать проблемы воспроизведения транзакций между несколькими цепочками.
EIP-155 в основном используется в следующих сценариях:
chainId
возможность указать идентификатор цепочки:web3.eth.sendTransaction({
from: '0xYourAddress',
to: '0xRecipientAddress',
value: web3.utils.toWei('1', 'ether'),
gas: 21000,
chainId: 1 // Основная сеть
});
Если вы подключены к RPC узел (напр. Infura, Alchemy), убедитесь, что узел поддерживает EIP-155 и тысуществовать Подключитесь к нужной сети(Например Основная сеть、тестовая сеть)。
Если вы используете более старую версию инструмента или библиотеки, она может не поддерживать стандарт EIP-155. Убедитесь, что вы используете последнюю версию, поддерживающую EIP-155.
EIP-155 Это важное улучшение сети Ethereum. Оно успешно позволяет избежать проблемы повтора за счет введения механизма защиты идентификатора цепочки. понимая EIP-155 Принцип работы и опыт позволяют нам лучше обеспечивать безопасность наших транзакций. Появляться only replay-protected (EIP-155) transactions allowed over RPC
В случае ошибки мы можем проверить идентификатор цепочки в подписи транзакции, чтобы убедиться, что транзакция соответствует EIP-155 стандарты для беспрепятственного проведения транзакций.