[Core Protocol] Prove and finalize pre-bedrock withdrawal in 2025 #894
Unanswered
lhcadmins
asked this question in
Core Protocol
Replies: 1 comment 3 replies
-
|
https://www.npmjs.com/package/@eth-optimism/sdk const args = [
[
withdrawal.messageNonce,
withdrawal.sender,
withdrawal.target,
withdrawal.value,
withdrawal.minGasLimit,
withdrawal.message,
],
proof.l2OutputIndex,
[
proof.outputRootProof.version,
proof.outputRootProof.stateRoot,
proof.outputRootProof.messagePasserStorageRoot,
proof.outputRootProof.latestBlockhash,
],
proof.withdrawalProof,
(opts === null || opts === void 0 ? void 0 : opts.overrides) || {},
];
return this.contracts.l1.OptimismPortal.populateTransaction.proveWithdrawalTransaction(...args); |
Beta Was this translation helpful? Give feedback.
3 replies
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment

Uh oh!
There was an error while loading. Please reload this page.
Uh oh!
There was an error while loading. Please reload this page.
-
Did you check the documentation and specs?
Was there anything unclear or missing?
I'm trying to claim tokens withdrawal of which was initiated back in late 2022, tokens burned, message stored in 0x42..00 bridge slot, slot is known(I traced it with debug_traceCall method using "OP classic" free node in blockpi, debug_traceTransaction won't work and will always fail with "tracing failed: insufficient funds for gas * price + value: address 0x... have 0 want ...", debug_traceCall with block number -1 of actual is your friend to get the pre/post slot in 0x42....00 contract).
Initially I thought I'll need to use OptimismPortal.proveWithdrawalTransaction, and I've gathered eth_getProof of that slot at that block, gathered latestL2Block block info from the recent "game" contract to populate all fields exactly like it's done nowadays, but this approach didn't work, reverting at OptimismPortal_InvalidOutputRootProof(). I've built it exactly like today's withdrawals do. It's all undocumented basically and very obscured in viem library. I will do a writeup on all this once I'm finished but for now key question is what do I do with this withdrawal? How do I claim that? Using which contract? Back in the day it wasn't OptimismPortal it was L1CrossDomainMessenger.relayMessage(). Am I supposed to be using that contract instead today? If so, how/where do I gather that proof(and proof of what exactly? slot at that block that stored withdrawal message hash? or what?)?
A lot(most) links to older docs and sources are broken some are not in web archive either.
Please help preserve this sacred knowledge and I'll do a full writeup on manual withdrawals, pre-bedrock and post-bedrock, without libraries, all by hand. I think this is going to be invaluable resource for future as while I was looking for sample txes to compare to I found a lot of people who didn't finalize their pre-bedrock withdrawals too. Perhaps due to lack of any docs on how to do it today and bridge apps support.
// I won't be posting my withdrawal txid but can post any other finalized ones for reference.
If you are from OP team I also have an open thread in DC.
Did you check for duplicate questions?
Similar Questions or Issues Found
No response
Please select the type of request
Steps to Reproduce
No response
Expected vs. Actual Behaviour
No response
Software Versions
No response
Operating System
No response
Hardware Resources
No response
Configuration Files, Startup Flags & Environment Variables
No response
Error Messages / Logs
No response
Feature Description
No response
Purpose and Benefits
No response
Relevant Context or Examples
No response
Beta Was this translation helpful? Give feedback.
All reactions