-
Notifications
You must be signed in to change notification settings - Fork 48
Description
One of wallets Bitcoin transactions (tx) cannot be proven in the Bridge in Ethereum Sepolia testnet.
Proving transactions in the Bridge requires calling functions like submitRedemptionProof. One of the checks performed during the call evaluates difficulty in a series of headers from the proof.
The transaction entered the Bitcoin blockchain in a block (height 4300125
) with a very high difficulty (67108864
) which was followed by a long series of low difficulty blocks:
difficulty for block at hight 4300125 : 67108864 <- block containing the transaction; beginning of the headers chain we need for a proof
difficulty for block at hight 4300126 : 1 <- other blocks with low difficulties
difficulty for block at hight 4300127 : 1
difficulty for block at hight 4300128 : 3
difficulty for block at hight 4300129 : 3
difficulty for block at hight 4300130 : 3
etc
The txProofDifficultyFactor
in the Bridge on Sepolia Testnet is 6
. So to prove the transaction above we need 6
* 67108864
of total difficulty in the headers chain. The total difficulty in the chain will be the sum of all difficulties ( 67108864 + 1 + 1 +3 + 3 +3, etc). Since the difficulties following the first block are very low, even a very long headers chain is not enough.
The transaction cannot be proven automatically (by the maintainer bot) or manually (by running a custom CLI command).
When we try to prove the transaction manually by calling:
KEEP_ETHEREUM_PASSWORD=<hidden-password> ./keep-client maintainer-cli submit-redemption-proof --transaction-hash 66d1d97644866f43abbd44808acf582450b630d4a8cd5dced9d5b3b87006f1dd --confirmations 100 --config /Users/tslabon/projekt/keep-core/configs/maintainer.toml --testnet
we get an error:
2025-06-27T18:31:10.672+0200 FATAL keep-main keep-core/main.go:26 failed to submit redemption proof [failed to submit redemption proof with reimbursement: [execution reverted: Insufficient accumulated difficulty in header chain]]
One idea for a fix is to upgrade the Bridge contract with txProofDifficultyFactor
set to 1
. This way we can prove any transactions with just a single block header.