Skip to content

Commit aa5b367

Browse files
authored
Merge pull request #657 from 0xPolygon/feature/#656_revert_reason
Feature/#656 revert reason
2 parents 9937f18 + ba79b84 commit aa5b367

File tree

3 files changed

+298
-13
lines changed

3 files changed

+298
-13
lines changed

cmd/ulxly/ulxly.go

Lines changed: 20 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -30,6 +30,7 @@ import (
3030
ethclient "github.com/ethereum/go-ethereum/ethclient"
3131
ethrpc "github.com/ethereum/go-ethereum/rpc"
3232

33+
smcerror "github.com/0xPolygon/polygon-cli/errors"
3334
"github.com/0xPolygon/polygon-cli/bindings/tokens"
3435
"github.com/0xPolygon/polygon-cli/bindings/ulxly"
3536
"github.com/0xPolygon/polygon-cli/bindings/ulxly/polygonrollupmanager"
@@ -545,12 +546,12 @@ type JsonError struct {
545546
Data interface{} `json:"data"`
546547
}
547548

548-
func logAndReturnJsonError(cmd *cobra.Command, client *ethclient.Client, tx *types.Transaction, opts *bind.TransactOpts, err error) error {
549+
func logAndReturnJsonError(ctx context.Context, client *ethclient.Client, tx *types.Transaction, opts *bind.TransactOpts, err error) error {
549550

550551
var callErr error
551552
if tx != nil {
552553
// in case the error came down to gas estimation, we can sometimes get more information by doing a call
553-
_, callErr = client.CallContract(cmd.Context(), ethereum.CallMsg{
554+
_, callErr = client.CallContract(ctx, ethereum.CallMsg{
554555
From: opts.From,
555556
To: tx.To(),
556557
Gas: tx.Gas(),
@@ -599,24 +600,30 @@ func logAndReturnJsonError(cmd *cobra.Command, client *ethclient.Client, tx *typ
599600
return err
600601
}
601602

603+
reason, decodeErr := smcerror.DecodeSmcErrorCode(jsonError.Data)
604+
if decodeErr != nil {
605+
log.Error().Err(err).Msg("unable to decode smart contract error")
606+
return err
607+
}
602608
errLog := log.Error().
603609
Err(err).
604610
Str("message", jsonError.Message).
605611
Int("code", jsonError.Code).
606-
Interface("data", jsonError.Data)
612+
Interface("data", jsonError.Data).
613+
Str("reason", reason)
607614

608615
if callErr != nil {
609616
errLog = errLog.Err(callErr)
610617
}
611618

619+
customErr := errors.New(err.Error()+": " + reason)
612620
if errCode, isValid := jsonError.Data.(string); isValid && errCode == "0x646cf558" {
613621
// I don't want to bother with the additional error logging for previously claimed deposits
614-
return err
622+
return customErr
615623
}
616624

617625
errLog.Msg("Unable to interact with bridge contract")
618-
619-
return err
626+
return customErr
620627
}
621628

622629
// Function to parse deposit count from bridge transaction logs
@@ -725,7 +732,7 @@ func bridgeAsset(cmd *cobra.Command) error {
725732

726733
// Approve the bridge contract to spend the tokens on behalf of the user
727734
approveTxn, iErr := tokenContract.Approve(auth, bridgeAddress, value)
728-
if iErr = logAndReturnJsonError(cmd, client, approveTxn, auth, iErr); iErr != nil {
735+
if iErr = logAndReturnJsonError(cmd.Context(), client, approveTxn, auth, iErr); iErr != nil {
729736
return iErr
730737
}
731738
log.Info().Msg("approveTxn: " + approveTxn.Hash().String())
@@ -736,7 +743,7 @@ func bridgeAsset(cmd *cobra.Command) error {
736743
}
737744

738745
bridgeTxn, err := bridgeV2.BridgeAsset(auth, destinationNetwork, toAddress, value, tokenAddress, isForced, callData)
739-
if err = logAndReturnJsonError(cmd, client, bridgeTxn, auth, err); err != nil {
746+
if err = logAndReturnJsonError(cmd.Context(), client, bridgeTxn, auth, err); err != nil {
740747
log.Info().Err(err).Str("calldata", callDataString).Msg("Bridge transaction failed")
741748
return err
742749
}
@@ -790,7 +797,7 @@ func bridgeMessage(cmd *cobra.Command) error {
790797
}
791798

792799
bridgeTxn, err := bridgeV2.BridgeMessage(auth, destinationNetwork, toAddress, isForced, callData)
793-
if err = logAndReturnJsonError(cmd, client, bridgeTxn, auth, err); err != nil {
800+
if err = logAndReturnJsonError(cmd.Context(), client, bridgeTxn, auth, err); err != nil {
794801
log.Info().Err(err).Str("calldata", callDataString).Msg("Bridge transaction failed")
795802
return err
796803
}
@@ -847,7 +854,7 @@ func bridgeWETHMessage(cmd *cobra.Command) error {
847854
callData := common.Hex2Bytes(strings.TrimPrefix(callDataString, "0x"))
848855

849856
bridgeTxn, err := bridgeV2.BridgeMessageWETH(auth, destinationNetwork, toAddress, value, isForced, callData)
850-
if err = logAndReturnJsonError(cmd, client, bridgeTxn, auth, err); err != nil {
857+
if err = logAndReturnJsonError(cmd.Context(), client, bridgeTxn, auth, err); err != nil {
851858
log.Info().Err(err).Str("calldata", callDataString).Msg("Bridge transaction failed")
852859
return err
853860
}
@@ -911,7 +918,7 @@ func claimAsset(cmd *cobra.Command) error {
911918
merkleProofArray, rollupMerkleProofArray, mainExitRoot, rollupExitRoot := getMerkleProofsExitRoots(bridgeServiceProofEndpoint)
912919

913920
claimTxn, err := bridgeV2.ClaimAsset(auth, merkleProofArray, rollupMerkleProofArray, globalIndex, [32]byte(mainExitRoot), [32]byte(rollupExitRoot), claimOriginalNetwork, originAddress, claimDestNetwork, toAddress, amount, metadata)
914-
if err = logAndReturnJsonError(cmd, client, claimTxn, auth, err); err != nil {
921+
if err = logAndReturnJsonError(cmd.Context(), client, claimTxn, auth, err); err != nil {
915922
return err
916923
}
917924
log.Info().Msg("claimTxn: " + claimTxn.Hash().String())
@@ -964,7 +971,7 @@ func claimMessage(cmd *cobra.Command) error {
964971
merkleProofArray, rollupMerkleProofArray, mainExitRoot, rollupExitRoot := getMerkleProofsExitRoots(bridgeServiceProofEndpoint)
965972

966973
claimTxn, err := bridgeV2.ClaimMessage(auth, merkleProofArray, rollupMerkleProofArray, globalIndex, [32]byte(mainExitRoot), [32]byte(rollupExitRoot), claimOriginalNetwork, originAddress, claimDestNetwork, toAddress, amount, metadata)
967-
if err = logAndReturnJsonError(cmd, client, claimTxn, auth, err); err != nil {
974+
if err = logAndReturnJsonError(cmd.Context(), client, claimTxn, auth, err); err != nil {
968975
return err
969976
}
970977
log.Info().Msg("claimTxn: " + claimTxn.Hash().String())
@@ -1252,7 +1259,7 @@ func claimSingleDeposit(cmd *cobra.Command, client *ethclient.Client, bridgeCont
12521259
claimTx, err = bridgeContract.ClaimMessage(opts, merkleProofArray, rollupMerkleProofArray, globalIndex, [32]byte(mainExitRoot), [32]byte(rollupExitRoot), deposit.OrigNet, originAddress, deposit.DestNet, toAddress, amount, metadata)
12531260
}
12541261

1255-
if err = logAndReturnJsonError(cmd, client, claimTx, opts, err); err != nil {
1262+
if err = logAndReturnJsonError(cmd.Context(), client, claimTx, opts, err); err != nil {
12561263
log.Warn().
12571264
Uint32("DepositCnt", deposit.DepositCnt).
12581265
Uint32("OrigNet", deposit.OrigNet).

errors/smc.go

Lines changed: 245 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,245 @@
1+
package errors
2+
3+
import "errors"
4+
5+
var ErrorMessages = map[string]string{
6+
"0x812a372d":"BatchAlreadyVerifiedError",
7+
"0x98c5c014":"BatchNotSequencedOrNotSequenceEndError",
8+
"0xb59f753a":"ExceedMaxVerifyBatchesError",
9+
"0xb9b18f57":"FinalNumBatchBelowLastVerifiedBatchError",
10+
"0x32a2a77f":"FinalNumBatchDoesNotMatchPendingStateError",
11+
"0xbfa7079f":"FinalPendingStateNumInvalidError",
12+
"0x24eff8c3":"ForceBatchNotAllowedError",
13+
"0xc44a0821":"ForceBatchTimeoutNotExpiredError",
14+
"0xf6ba91a1":"ForceBatchesAlreadyActiveError",
15+
"0xc630a00d":"ForceBatchesOverflowError",
16+
"0xce3d755e":"ForcedDataDoesNotMatchError",
17+
"0x73bd668d":"GlobalExitRootNotExistError",
18+
"0xd257555a":"HaltTimeoutNotExpiredError",
19+
"0x1e56e9e2":"InitNumBatchAboveLastVerifiedBatchError",
20+
"0x2bd2e3e7":"InitNumBatchDoesNotMatchPendingStateError",
21+
"0x09bde339":"InvalidProofError",
22+
"0xe067dfe8":"InvalidRangeBatchTimeTargetError",
23+
"0xf5e37f2f":"InvalidRangeForceBatchTimeoutError",
24+
"0x4c2533c8":"InvalidRangeMultiplierBatchFeeError",
25+
"0x66385b51":"NewAccInputHashDoesNotExistError",
26+
"0x48a05a90":"NewPendingStateTimeoutMustBeLowerError",
27+
"0x176b913c":"NewStateRootNotInsidePrimeError",
28+
"0x401636df":"NewTrustedAggregatorTimeoutMustBeLowerError",
29+
"0x4732fdb5":"NotEnoughMaticAmountError",
30+
"0x6818c29e":"OldAccInputHashDoesNotExistError",
31+
"0x4997b986":"OldStateRootDoesNotExistError",
32+
"0x47556579": "OnlyAdminError",
33+
"0x53866981":"OnlyEmergencyStateError",
34+
"0x2f0047fc":"OnlyNotEmergencyStateError",
35+
"0xd1ec4b23":"OnlyPendingAdminError",
36+
"0xbbcbbc05":"OnlyTrustedAggregatorError",
37+
"0x11e7be15":"OnlyTrustedSequencerError",
38+
"0xbb14c205":"PendingStateDoesNotExistError",
39+
"0xd086b70b":"PendingStateInvalidError",
40+
"0x0ce9e4a2":"PendingStateNotConsolidableError",
41+
"0xcc965070":"PendingStateTimeoutExceedHaltAggregationTimeoutError",
42+
"0xcb591a5f":"SequenceZeroBatchesError",
43+
"0x7f7ab872":"SequencedTimestampBelowForcedTimestampError",
44+
"0xea827916":"SequencedTimestampInvalidError",
45+
"0xa47276bd":"StoredRootMustBeDifferentThanNewRootError",
46+
"0xa29a6c7c":"TransactionsLengthAboveMaxError",
47+
"0x1d06e879":"TrustedAggregatorTimeoutExceedHaltAggregationTimeoutError",
48+
"0x8a0704d3":"TrustedAggregatorTimeoutNotExpiredError",
49+
"0x646cf558":"AlreadyClaimedError",
50+
"0xb89240f5":"AmountDoesNotMatchMsgValueError",
51+
"0x0595ea2e":"DestinationNetworkInvalidError",
52+
"0x6747a288":"EtherTransferFailedError",
53+
"0x002f6fad":"GlobalExitRootInvalidError",
54+
"0xe0417cec":"InvalidSmtProofError",
55+
"0xef5ccf66":"MerkleTreeFullError",
56+
"0x37e391c3":"MessageFailedError",
57+
"0x798ee6f1":"MsgValueNotZeroError",
58+
"0x03fffc4b":"NotValidAmountError",
59+
"0x912ecce7":"NotValidOwnerError",
60+
"0xe282c0ba":"NotValidSignatureError",
61+
"0x750643af":"NotValidSpenderError",
62+
"0xe2e8106b":"OnlyPolygonZkEVMError",
63+
"0x1f97a582":"GlobalExitRootAlreadySetError",
64+
"0xf4a66f9d":"GlobalExitRootNotFoundError",
65+
"0xf6b2911f":"InvalidZeroAddressError",
66+
"0xb49365dd":"OnlyAllowedContractsError",
67+
"0xa34ddeb1":"OnlyGlobalExitRootRemoverError",
68+
"0xc758fc1a":"OnlyGlobalExitRootUpdaterError",
69+
"0x7ca4d27a":"OnlyPendingGlobalExitRootRemoverError",
70+
"0x5f063f01":"OnlyPendingGlobalExitRootUpdaterError",
71+
"0xc10b1590":"VersionAlreadyUpdatedError",
72+
"0x9996b315":"AddressEmptyCodeError",
73+
"0xcd786059":"AddressInsufficientBalanceError",
74+
"0x1ae0e033":"BridgeAddressNotAllowedError",
75+
"0x1425ea42":"FailedInnerCallError",
76+
"0x62d05d1a":"FailedProxyDeploymentError",
77+
"0x1a874c12":"GasTokenNetworkMustBeZeroOnEtherError",
78+
"0xf57ac683":"InvalidInitializeFunctionError",
79+
"0x188f622f":"InvalidProxyAdminError",
80+
"0x54a0d80a":"InvalidZeroProxyAdminOwnerError",
81+
"0xdde3cda7":"NativeTokenIsEtherError",
82+
"0x6f625c40":"NoValueInMessagesOnGasTokenNetworksError",
83+
"0x2d67bc9c":"OnlyPendingProxiedTokensManagerError",
84+
"0x08667503":"OnlyProxiedTokensManagerError",
85+
"0xb9b3a2c8":"OnlyRollupManagerError",
86+
"0x5274afe7":"SafeERC20FailedOperationError",
87+
"0xf645eedf":"ECDSAInvalidSignatureError",
88+
"0xfce698f7":"ECDSAInvalidSignatureLengthError",
89+
"0xd78bce0c":"ECDSAInvalidSignatureSError",
90+
"0xfb8f41b2":"ERC20InsufficientAllowanceError",
91+
"0xe450d38c":"ERC20InsufficientBalanceError",
92+
"0xe602df05":"ERC20InvalidApproverError",
93+
"0xec442f05":"ERC20InvalidReceiverError",
94+
"0x96c6fd1e":"ERC20InvalidSenderError",
95+
"0x94280d62":"ERC20InvalidSpenderError",
96+
"0x62791302":"ERC2612ExpiredSignatureError",
97+
"0x4b800e46":"ERC2612InvalidSignerError",
98+
"0x752d88c0":"InvalidAccountNonceError",
99+
"0xf92ee8a9":"InvalidInitializationError",
100+
"0xd7e6bcf8":"NotInitializingError",
101+
"0x38da3b15":"OnlyBridgeError",
102+
"0x988066a1":"WrongVerifierSelectorError",
103+
"0xead1340b":"InitBatchMustMatchCurrentForkIDError",
104+
"0x6697b232":"AccessControlBadConfirmationError",
105+
"0xe2517d3f":"AccessControlUnauthorizedAccountError",
106+
"0x22a1bdc4":"AggchainVKeyAlreadyExistsError",
107+
"0x925e5a3a":"AggchainVKeyNotFoundError",
108+
"0xae80851c":"InvalidProofBytesLengthError",
109+
"0x4c939ed7":"OnlyAggLayerAdminError",
110+
"0xce074d87":"OnlyPendingAggLayerAdminError",
111+
"0x7500f209":"PPSelectorCannotBeZeroError",
112+
"0x4bc7c278":"RouteAlreadyExistsError",
113+
"0xc7b4a1f2":"RouteIsAlreadyFrozenError",
114+
"0xebf10823":"RouteIsFrozenError",
115+
"0xf208777e":"RouteNotFoundError",
116+
"0x6745305e":"VKeyCannotBeZeroError",
117+
"0x5a568e68":"AccessControlOnlyCanRenounceRolesForSelfError",
118+
"0xec2b7c3e":"AddressDoNotHaveRequiredRoleError",
119+
"0x0ded782d":"AggchainDataMustBeZeroForPessimisticVerifierTypeError",
120+
"0x44541072":"AllBatchesMustBeVerifiedError",
121+
"0xcc862d4a":"AllSequencedMustBeVerifiedError",
122+
"0x5c998a86":"AllzkEVMSequencedBatchesMustBeVerifiedError",
123+
"0x85869525":"BatchFeeOutOfRangeError",
124+
"0x9d59507b":"CannotUpdateWithUnconsolidatedPendingStateError",
125+
"0x6f91fc12":"ChainIDAlreadyExistError",
126+
"0x4c753f57":"ChainIDOutOfRangeError",
127+
"0x8a51facb":"EmptyVerifySequencesDataError",
128+
"0x42f31f92":"FinalNumSequenceBelowLastVerifiedSequenceError",
129+
"0xb7d5b4a3":"FinalNumSequenceDoesNotMatchPendingStateError",
130+
"0xf5f2eb13":"InitSequenceMustMatchCurrentForkIDError",
131+
"0x686446b1":"InitSequenceNumDoesNotMatchPendingStateError",
132+
"0x85db4c96":"InvalidConstructorInputsError",
133+
"0xc970156c":"InvalidImplementationAddressError",
134+
"0x6fc5557f":"InvalidInputsForRollupTypeError",
135+
"0x52ad525a":"InvalidPessimisticProofError",
136+
"0x44ceee73":"InvalidRangeMultiplierZkGasPriceError",
137+
"0xe04b5d74":"InvalidRangeSequenceTimeTargetError",
138+
"0x43ba19f2":"InvalidRollupError",
139+
"0x63d722e7":"InvalidRollupTypeError",
140+
"0x10c40e8c":"InvalidVerifierAddressError",
141+
"0xe4ffd914":"InvalidVerifierTypeError",
142+
"0xa60721e1":"L1InfoTreeLeafCountInvalidError",
143+
"0x2590ccf9":"MustSequenceSomeBatchError",
144+
"0x562a9374":"MustSequenceSomeBlobError",
145+
"0x1a06d0fe":"NotAllowedAddressError",
146+
"0x696072e9":"OnlyRollupAdminError",
147+
"0x90db0d07":"OnlyStateTransitionChainsError",
148+
"0x60dbf8ae":"PendingStateNumExistError",
149+
"0x3ee5aeb5":"ReentrancyGuardReentrantCallError",
150+
"0x9753965f":"RollbackBatchIsNotEndOfSequenceError",
151+
"0xcb23ebdf":"RollbackBatchIsNotValidError",
152+
"0xd409b930":"RollupAddressAlreadyExistError",
153+
"0x51fcf62a":"RollupIDNotAscendingOrderError",
154+
"0x74a086a3":"RollupMustExistError",
155+
"0x7512e5cb":"RollupTypeDoesNotExistError",
156+
"0x3b8d3d99":"RollupTypeObsoleteError",
157+
"0x71653c15":"SenderMustBeRollupError",
158+
"0x5b6602b7":"StateTransitionChainsNotAllowedError",
159+
"0xb541abe2":"UpdateNotCompatibleError",
160+
"0x3e37e233":"UpdateToOldRollupTypeIDError",
161+
"0x4f61d519":"UpdateToSameRollupTypeIDError",
162+
"0x0c0bbd27":"zkGasPriceOfRangeError",
163+
"0xd6bdac3f":"AggchainManagerCannotBeZeroError",
164+
"0xda5bceb9":"FinalAccInputHashDoesNotMatchError",
165+
"0xc89374d8":"ForceBatchesDecentralizedError",
166+
"0x39258d18":"ForceBatchesNotAllowedOnEmergencyStateError",
167+
"0x3d49ed4c":"HaltTimeoutNotExpiredAfterEmergencyStateError",
168+
"0x248b8f82":"HugeTokenMetadataNotSupportedError",
169+
"0x1a070d9a":"InitSequencedBatchDoesNotMatchError",
170+
"0xae7e6e0f":"InvalidAggLayerGatewayAddressError",
171+
"0x30639654":"InvalidAggchainDataLengthError",
172+
"0x45707950":"InvalidAggchainTypeError",
173+
"0xcd161966":"InvalidInitializeTransactionError",
174+
"0xadc06ae7":"InvalidInitializerError",
175+
"0x0a00feb3":"MaxTimestampSequenceInvalidError",
176+
"0x2354600f":"NotEnoughPOLAmountError",
177+
"0x660a7ce5":"OnlyAggchainManagerError",
178+
"0x3ac87ac9":"OnlyPendingAggchainManagerError",
179+
"0x05882cf0":"OnlyPendingVKeyManagerError",
180+
"0xe4d753bd":"OnlyVKeyManagerError",
181+
"0xe3cc7610":"OwnedAggchainVKeyAlreadyAddedError",
182+
"0xf360deaf":"OwnedAggchainVKeyNotFoundError",
183+
"0x62de0445":"UseDefaultGatewayAlreadyDisabledError",
184+
"0x93be8051":"UseDefaultGatewayAlreadyEnabledError",
185+
"0xe1dbcf2e":"ZeroValueAggchainVKeyError",
186+
"0x580a5fa8":"AggregationVkeyMustBeDifferentThanZeroError",
187+
"0x0dffe818":"CannotProposeFutureL2OutputError",
188+
"0x541d595b":"L2BlockNumberLessThanNextBlockNumberError",
189+
"0xff5f8600":"L2BlockTimeMustBeGreaterThanZeroError",
190+
"0x80bcf515":"L2OutputRootCannotBeZeroError",
191+
"0x43826089":"OnlyOptimisticModeManagerError",
192+
"0x93f1e094":"OnlyPendingOptimisticModeManagerError",
193+
"0x98b31779":"OptimisticModeEnabledError",
194+
"0x873dabd2":"OptimisticModeNotEnabledError",
195+
"0x87b761a2":"RangeVkeyCommitmentMustBeDifferentThanZeroError",
196+
"0x4bf41e17":"RollupConfigHashMustBeDifferentThanZeroError",
197+
"0x2403afcb":"StartL2TimestampMustBeLessThanCurrentTimeError",
198+
"0xd685d8e7":"SubmissionIntervalMustBeGreaterThanZeroError",
199+
"0xe12afaf5":"CommitteeAddressDoesNotExistError",
200+
"0xb54b70e4":"EmptyURLNotAllowedError",
201+
"0x2e7dcd6e":"TooManyRequiredSignaturesError",
202+
"0x6b8eec46":"UnexpectedAddrsAndSignaturesSizeError",
203+
"0x2ab6a129":"UnexpectedAddrsBytesLengthError",
204+
"0x6b156b28":"UnexpectedCommitteeHashError",
205+
"0xd53cfbe0":"WrongAddrOrderError",
206+
"0x821935b4":"SequenceWithDataAvailabilityNotAllowedError",
207+
"0x5f0e7abe":"SwitchToSameValueError",
208+
"0x318dafb8":"ClaimNotSetError",
209+
"0x441845b1":"EmergencyStateNotAllowedError",
210+
"0x869e93ea":"InputArraysLengthMismatchError",
211+
"0x1cdc46ea":"InvalidSovereignWETHAddressParamsError",
212+
"0x4e702fa5":"InvalidZeroNetworkIDError",
213+
"0x23d72133":"LocalBalanceTreeOverflowError",
214+
"0x14603c01":"LocalBalanceTreeUnderflowError",
215+
"0xaf6e71a2":"OnlyBridgeManagerError",
216+
"0x26898bbe":"OnlyEmergencyBridgePauserError",
217+
"0x8e9d821f":"OnlyEmergencyBridgeUnpauserError",
218+
"0x7bb0100f":"OnlyPendingEmergencyBridgePauserError",
219+
"0xd491f0c1":"OnlyPendingEmergencyBridgeUnpauserError",
220+
"0x658b23ad":"OriginNetworkInvalidError",
221+
"0x5eaf7bac":"TokenAlreadyMappedError",
222+
"0xe273c4a1":"TokenAlreadyUpdatedError",
223+
"0x828d5663":"TokenNotMappedError",
224+
"0xe0c897a7":"TokenNotRemappedError",
225+
"0x9968e226":"WETHRemappingNotSupportedOnGasTokenNetworksError",
226+
"0x5c3f3c1e":"InvalidZeroProxyAdminOwnerError",
227+
"0x62e77ba2":"ERC1967InvalidAdminError",
228+
"0x4c9c8ce3":"ERC1967InvalidImplementationError",
229+
"0xb398979f":"ERC1967NonPayableError",
230+
"0xbefb0920":"FailedTokenWrappedDeploymentError",
231+
"0x56feb4f5":"NotEnoughGlobalExitRootsInsertedError",
232+
"0xae765ff6":"NotLastInsertedGlobalExitRootError",
233+
"0x3a64d973":"OnlyChainsWithPessimisticProofsError",
234+
}
235+
236+
func DecodeSmcErrorCode(errorCode interface{}) (string, error) {
237+
codeStr, ok := errorCode.(string)
238+
if !ok {
239+
return "", errors.New("jsonError.Data is not a string, unable to decode smart contract error")
240+
}
241+
if msg, exists := ErrorMessages[codeStr]; exists {
242+
return msg, nil
243+
}
244+
return codeStr + " (unknown selector)", nil
245+
}

0 commit comments

Comments
 (0)