Skip to content

Conversation

@ravinagill15
Copy link

@ravinagill15 ravinagill15 commented Jul 18, 2025

This PR aims to migrate liquidity from PlumeOFTAdapter to an OrbitAdapter and ultimately integrate Plume into the existing Ethereum/Solana/Hyperevm mesh for Plume ERC-20

Please see the detailed plan below that will be executed once Plume chain is on ArbOS v41

Detailed Plan for Migration and Integration

Architecture Diagram

Note: Blocked until the ArbOwner precompile is live on Plume (ArboS Version 41), -- there is a 1 week delay before minters can be authorized. (Documentation here).

  1. [LZ] Deploy OrbitERC20OFTAdapterUpgradeable on Ethereum. This will be initialized with the Arbitrum-native ERC20 Bridge since that is where funds will actually be locked
  2. [LZ] Deploy PlumeOFTMock on Plume
  3. [LZ] Deploy (MintBurn) OrbitNativeOFTAdapterUpgradeable on Plume
  4. [PLUME] Set the (MintBurn) OrbitNativeOFTAdapterUpgradeable on Plume to be an authorized caller of the ArbNativeTokenManager contract -- this is done through the ArbOwner precompile
  5. [PLUME] Pause the mesh by setting all send libraries for the existing PlumeOFTAdapter and existing PlumeOFT contracts on Ethereum, Solana, and Hyperevm to the blocked message lib. Blocked message lib address for each chain can be found here
  6. [PLUME] Once all in flight messages have been delivered in the current mesh (Ethereum, Solana, Hyperevm), set all receive libraries for the existing PlumeOFTAdapter and existing PlumeOFT contracts on Ethereum, Solana, and Hyperevm to the blocked message lib
  7. [PLUME] Wire the PlumeOFTMock on Plume to the existing PlumeOFTAdapter on Ethereum
  8. [LZ] Determine total amount of locked liquidity within existing PlumeOFTAdapter – the exact balance should be minted on PlumeOFTMock
  9. [LZ] Send tx from PlumeOFTMock on Plume to OrbitERC20OFTAdapterUpgradeable on Ethereum (via existing PlumeOFTAdapter peer) with amount == total amount of locked liquidity within existing PlumeOFTAdapter
  10. [LZ] Sanity check that Plume ERC-20 balance of ERC20Bridge on Ethereum == amount that was previously locked in existing PlumeOFTAdapter
  11. [LZ] Sanity check that Plume ERC-20 balance of existing PlumeOFTAdapter is 0
  12. [PLUME] Rewire existing PlumeOFT contracts on Solana and Hyperevm to the OrbitERC20OFTAdapterUpgradeable on Ethereum and the (MintBurn) OrbitNativeOFTAdapterUpgradeable on Plume
  13. [LZ] Wire the OrbitERC20OFTAdapterUpgradeable on Ethereum to the (MintBurn) OrbitNativeOFTAdapterUpgradeable on Plume
  14. [PLUME] Ensure all send and receive libraries for the mesh are set (should no longer be blocked)
  15. [LZ] Transfer delegate and ownership of OrbitERC20OFTAdapterUpgradeable on Ethereum and the (MintBurn) OrbitNativeOFTAdapterUpgradeable on Plume to the Plume multisig

@octane-security-app
Copy link

octane-security-app bot commented Jul 18, 2025

Summary by Octane

New Contracts

  • OrbitERC20OFTAdapterUpgradeable.sol: An upgradeable ERC20 LayerZero adapter enabling cross-chain token transfers using a bridge for token locking and unlocking.
  • IBridge.sol: The smart contract manages message passing for a bridge, enabling sequencer and delayed message handling, with controls for authorized inboxes and outboxes.
  • IERC20Bridge.sol: The smart contract manages token bridging between L1 and L2, handling native token escrow on L1 and minting on L2, with message enqueuing capabilities.
  • IOwnable.sol: The .sol file defines an IOwnable interface to retrieve the owner address of a contract.
  • ArbNativeOFTAdapterUpgradeable.sol: The smart contract adapts LayerZero's OFT for Arbitrum, managing gasless cross-chain native token transfers with minting and burning functionality.
  • OrbitNativeOFTAdapterUpgradeable.sol: The smart contract is an upgradeable adapter for native tokens on LayerZero, with Ownable access control.
  • PlumeOFTMock.sol: The smart contract is a LayerZero-compatible fungible token with minting capability restricted to the owner.
  • ArbNativeTokenManager.sol: The contract allows authorized users to mint and burn native tokens on Arbitrum through a precompiled contract.
  • AbsBridge.sol: The smart contract manages message sequencing and delaying for a Rollup, controlling authorized inboxes/outboxes and executing cross-chain messages.
  • ERC20Bridge.sol: ERC20Bridge manages ERC20 token transfers for L2 transactions, with escrow, restricted calls, and custom fee handling.
  • IDelayedMessageProvider.sol: A smart contract interface for emitting events when an inbox message is added to a delayed accumulator on a bridge.
  • IEthBridge.sol: The smart contract enqueues delayed messages for a bridge, initializes with a rollup, and interfaces with the Ethereum bridge system.
  • IInbox.sol: The contract manages L1 to L2 transactions, deposits, withdrawals, retryable tickets, and supports L1 forks.
  • IInboxBase.sol: The smart contract facilitates L2 messaging, unsigned and contract transactions, fee calculations, and admin controls like pausing and allowlist management.
  • ISequencerInbox.sol: The smart contract manages sequencer inbox operations, including batch delivery, authentication, keyset management, and address authorization for batch posting and sequencing.
  • Messages.sol: The smart contract library provides functions to hash messages and accumulate message hashes for an inbox.
  • AddressAliasHelper.sol: The smart contract provides utility functions to convert addresses between L1 and L2 by applying an offset.
  • DelegateCallAware.sol: The contract checks and enforces delegate call context and proxy ownership, using onlyDelegated, notDelegated, and onlyProxyOwner modifiers.
  • Error.sol: The smart contract defines error conditions for access control, validation failures, and operational constraints in a blockchain bridge system.
  • IGasRefunder.sol: The smart contract defines an interface for refunding gas costs, allowing tracking of gas used by a spender.
  • MessageTypes.sol: This Solidity file defines constants for various message and event types within an Ethereum smart contract system.
  • BridgeStub.sol: The smart contract manages delayed and sequencer message accumulators, allows toggleable messaging inboxes, and updates the sequencer inbox.
  • GasToken.sol: A mintable ERC20 token contract, allowing only the owner to mint new tokens.
  • InboxStub.sol: The InboxStub contract facilitates sending L2 messages to a bridge, supporting sendL2Message and sendL2MessageFromOrigin, while other functionalities are not implemented.
  • MockArbNativeOFTAdapterUpgradeable.sol: A mock upgradeable contract for testing and exposing internal LayerZero debit/credit functions with initialization in Ethereum-based systems.
  • MockNativeTokenManager.sol: The smart contract manages native tokens, allowing users to mint and burn tokens while tracking the total minted and burned amounts.
  • MockOFT.sol: The smart contract "MockOFT" is an Ownable token contract that allows minting of tokens, inheriting LayerZero's OFT capabilities.
  • RollupStub.sol: A simple smart contract to set and manage an owner address, implementing IOwnable interface.
  • SimpleProxy.sol: SimpleProxy is a smart contract that proxies calls to a fixed implementation contract address.
  • UpgradeExecutorMock.sol: The smart contract manages role-based access for executing upgrades or target calls via safe, non-reentrant delegate calls.

Updated Contracts

No contracts were updated in this PR.


🔗 Commit Hash: ba48790

@octane-security-app
Copy link

octane-security-app bot commented Jul 18, 2025

Overview

Warnings found: 1                                                                                

Warnings

plume-oft-adapter-migration/contracts/ethereum/OrbitERC20OFTAdapterUpgradeable.sol

  • Zero Address Validation Missing in initialize(). See more

🔗 Commit Hash: ba48790
🛡️ Octane Dashboard: All vulnerabilities

Copy link

@ItsAdel ItsAdel left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

base pr with no changes. lgtm

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants