Skip to content

feat: add lock / unlock functionality to agg_bridge for native miden assets#2771

Open
partylikeits1983 wants to merge 9 commits intoagglayerfrom
ajl-agg-bridge-lock-unlock
Open

feat: add lock / unlock functionality to agg_bridge for native miden assets#2771
partylikeits1983 wants to merge 9 commits intoagglayerfrom
ajl-agg-bridge-lock-unlock

Conversation

@partylikeits1983
Copy link
Copy Markdown
Contributor

@partylikeits1983 partylikeits1983 commented Apr 14, 2026

Closes #2700. Adds a lock/unlock path for Miden-native tokens to the AggLayer bridge, mirroring PolygonZkEVMBridgeV2.claimAsset()'s handling of originNetwork == networkID.

The bridge no longer needs to be the faucet's owner to support it, so user-created faucets are now bridgeable once the bridge admin registers them via a CONFIG_AGG_BRIDGE note with is_native = true. Registration is still admin-gated (register_faucet is caller-restricted); what changed is the ownership requirement.

Approach

Native faucet branch, end-to-end:

  • Bridge-out: if is_native, call lock_assetnative_account::add_asset to park the asset in the bridge's own vault. No BURN note is emitted.
  • Bridge-in: if is_native, call unlock_and_sendnative_account::remove_asset + p2id::new to emit a P2ID note to the recipient. No MINT note, no faucet ntx. PROOF_DATA_KEY is used as the serial number so the note commitment is deterministic per claim.
  • LET leaf construction and the existing non-native burn/mint flow are untouched.

Metadata moved to the bridge. All three FPI calls from the bridge into the faucet (asset_to_origin_asset, get_metadata_hash, get_scale) are replaced with bridge-local reads out of a new faucet_metadata_map.

A single map with four faucet-ID-keyed sub-keys holds everything:

Sub-key Value
[0, 0, fid_s, fid_p] [addr0, addr1, addr2, addr3]
[1, 0, fid_s, fid_p] [addr4, origin_network, scale, 0]
[2, 0, fid_s, fid_p] [mh_lo0..3]
[3, 0, fid_s, fid_p] [mh_hi0..3]

faucet_registry_map is extended from [1, 0, 0, 0] to [1, is_native, 0, 0], which is backward-compatible since existing entries have is_native = 0 implicitly. CONFIG_AGG_BRIDGE carries the full metadata payload at registration (split across two calls to fit the 16-element stack).

AggLayer faucet slimmed. With metadata on the bridge, the faucet's conversion-info / metadata-hash slots and its asset_to_origin_asset / get_metadata_hash / get_scale procs are dead code. Removed: the AggLayerFaucet component now only re-exports mint_and_send + burn on top of Ownable2Step + OwnerControlled. A Miden-native faucet which wants to integrate with Agglayer, now is just a plain network fungible faucet, no AggLayer-specific storage or FPI surface needed.

Follow-ups

Not in this PR; filing separately per @bobbinth's comments in the original issue for this PR:

@partylikeits1983 partylikeits1983 changed the title feat: add scale data to bridge storage feat: add lock / unlock functionality to agg_bridge for native miden assets Apr 16, 2026
@mmagician mmagician added agglayer PRs or issues related to AggLayer bridging integration pr-from-maintainers PRs that come from internal contributors or integration partners. They should be given priority labels Apr 16, 2026
Bumps rand 0.9.2 → 0.9.4 and rand 0.10.0 → 0.10.1 to resolve
RUSTSEC-2026-0097 flagged by `cargo deny check` in CI.
@partylikeits1983 partylikeits1983 marked this pull request as ready for review April 20, 2026 17:27
@partylikeits1983 partylikeits1983 self-assigned this Apr 20, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

agglayer PRs or issues related to AggLayer bridging integration pr-from-maintainers PRs that come from internal contributors or integration partners. They should be given priority

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants