From 25de9e332461d92a9308b772603276e494caa3be Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Friedemann=20F=C3=BCrst?= <59653747+friedemannf@users.noreply.github.com> Date: Tue, 26 Mar 2024 20:01:13 +0100 Subject: [PATCH] Handle zkSync "known transaction" error (SHIP-1233) (#12338) * Handle zkSync "known transaction" error (SHIP-1233) * add test case for zkSync specific known transaction error --------- Co-authored-by: Jim W <poopoothegorilla@users.noreply.github.com> Co-authored-by: Prashant Yadav <34992934+prashantkumar1982@users.noreply.github.com> --- .changeset/tiny-rabbits-crave.md | 5 +++++ core/chains/evm/client/errors.go | 3 ++- core/chains/evm/client/errors_test.go | 3 +++ 3 files changed, 10 insertions(+), 1 deletion(-) create mode 100644 .changeset/tiny-rabbits-crave.md diff --git a/.changeset/tiny-rabbits-crave.md b/.changeset/tiny-rabbits-crave.md new file mode 100644 index 00000000000..55b6f71c523 --- /dev/null +++ b/.changeset/tiny-rabbits-crave.md @@ -0,0 +1,5 @@ +--- +"chainlink": patch +--- + +Handle zkSync specific known transaction error diff --git a/core/chains/evm/client/errors.go b/core/chains/evm/client/errors.go index 8095c122508..e58d3998927 100644 --- a/core/chains/evm/client/errors.go +++ b/core/chains/evm/client/errors.go @@ -224,7 +224,8 @@ var zkSync = ClientErrors{ // can't start a transaction from a non-account - trying to send from an invalid address, e.g. estimating a contract -> contract tx // max fee per gas higher than 2^64-1 - uint64 overflow // oversized data - data too large - Fatal: regexp.MustCompile(`(?:: |^)(?:exceeds block gas limit|intrinsic gas too low|Not enough gas for transaction validation|Failed to pay the fee to the operator|Error function_selector = 0x, data = 0x|invalid sender. can't start a transaction from a non-account|max(?: priority)? fee per (?:gas|pubdata byte) higher than 2\^64-1|oversized data. max: \d+; actual: \d+)$`), + Fatal: regexp.MustCompile(`(?:: |^)(?:exceeds block gas limit|intrinsic gas too low|Not enough gas for transaction validation|Failed to pay the fee to the operator|Error function_selector = 0x, data = 0x|invalid sender. can't start a transaction from a non-account|max(?: priority)? fee per (?:gas|pubdata byte) higher than 2\^64-1|oversized data. max: \d+; actual: \d+)$`), + TransactionAlreadyInMempool: regexp.MustCompile(`known transaction. transaction with hash .* is already in the system`), } var clients = []ClientErrors{parity, geth, arbitrum, metis, substrate, avalanche, nethermind, harmony, besu, erigon, klaytn, celo, zkSync} diff --git a/core/chains/evm/client/errors_test.go b/core/chains/evm/client/errors_test.go index a59d3fbf719..5d1fa135725 100644 --- a/core/chains/evm/client/errors_test.go +++ b/core/chains/evm/client/errors_test.go @@ -127,6 +127,9 @@ func Test_Eth_Errors(t *testing.T) { {"call failed: AlreadyKnown", true, "Nethermind"}, {"call failed: OwnNonceAlreadyUsed", true, "Nethermind"}, {"known transaction", true, "Klaytn"}, + {"known transaction. transaction with hash 0x6013…3053 is already in the system", true, "zkSync"}, + // This seems to be an erroneous message from the zkSync client, we'll have to match it anyway + {"ErrorObject { code: ServerError(3), message: \\\"known transaction. transaction with hash 0xf016…ad63 is already in the system\\\", data: Some(RawValue(\\\"0x\\\")) }", true, "zkSync"}, } for _, test := range tests { err = evmclient.NewSendErrorS(test.message)