/2024-07-ark-project

Primary LanguageTypeScriptApache License 2.0Apache-2.0

ArkProject NFT Bridge

Prize Pool

  • Total Pool - $60,000
  • H/M - $50,000
  • Low - $5,500
  • Community Judging - $4,500

Starts: July 31, 2024 Noon UTC

Ends: August 28, 2024 Noon UTC

  • nSLOC: 2301

About the Project

The ArkProject NFT Bridge allows users to bridge NFTs (ERC-721) between Ethereum (L1) and Starknet (L2).

The ArkProject NFT Bridge currently supports the bridging of the Everai NFT collection exclusively. Holders of Everai NFTs can seamlessly transfer their assets from Ethereum (L1) to Starknet (L2) and vice versa, pioneering the integration of NFTs into the next generation of blockchain technology.

The ArkProject NFT Bridge uses the Starknet (L1↔L2) messaging protocol for ERC-721 bridging smart contracts.

Website

Twitter

GitHub

Actors

Actors:

  • Starknet messaging protocol: ensure message exchange between Ethereum and Starknet.
  • Bridge admin: can enable/disable bridge, enable/disable global whitelist, enable/disable whitelist for a given collection and set L1L2 mapping.
  • User: can bridge a NFT from Ethereum to Starknet or from Starknet to Ethereum.

Please note that Users need to approve bridge contract to transfer the owned NFT on their behalf.

Scope (contracts)

Ethereum

The following contracts are in scope

ethereum/src/
├── Bridge.sol
├── Escrow.sol
├── IStarklaneEvent.sol
├── IStarklane.sol
├── Messaging.sol
├── Protocol.sol
├── sn
   └── Cairo.sol
├── State.sol
├── token
   ├── CollectionManager.sol
   ├── Deployer.sol
   └── TokenUtil.sol
└── UUPSProxied.sol

The following contracts are NOT in scope

ethereum/src/
├── sn
   ├── IStarknetMessagingLocal.sol
   └── StarknetMessagingLocal.sol
├── TestMessaging.sol
└── token
    ├── ERC1155Bridgeable.sol
    ├── ERC721Bridgeable.sol
    ├── IERC1155Bridgeable.sol
    └── IERC721Bridgeable.sol

Starknet

The following contracts are in scope

starknet/src/
├── bridge.cairo
├── byte_array_extra.cairo
├── interfaces.cairo
├── lib.cairo
├── request.cairo
├── token
   ├── collection_manager.cairo
   ├── erc721_bridgeable.cairo
   └── interfaces.cairo
└── token.cairo

The following contracts are NOT in scope

starknet/src/
├── tests
   └── bridge_t.cairo
└── tests.cairo

Please Note: Tests are not in scope. Several contracts may include embedded tests tagged with #[cfg(test), issues with tests or test values will not be considered valid

Compatibilities

Since ArkProject NFT Bridge uses the Starknet (L1↔L2) messaging only Ethereum and Starknet blockchains are supported.

Compatibilities:
  Blockchains:
      - Ethereum/Starknet
  Tokens:
      - [ERC721](www.tokenstandard.com)

On mainnet, only the following collections are whitelisted:

Setup

Clone the Repo:

git clone --recursive https://github.com/Cyfrin/2024-07-ark-project.git

Unit tests for smart contracts are available, using foundry and starknet foundry

Ethereum tests:

cd apps/blockchain/ethereum
forge test

Starknet tests:

cd apps/blockchain/starknet
snforge test

A guide for a local setup of ArkProject NFT Bridge is available.

Known Issues

An audit is available in github repository.

Known Issues:

  • Due to a payload size limit in Starknet L1<->L2 messaging protocol if user try to transfert a large number of NFTs, message will not to transmit and so NFT will be locked in bridge contract.

  • Bridge admin is a trusted role.

Additional Known Issues as detected by LightChaser, available here