Using Clusters for ETH->SOL Airdrops

Overview

Crosschain airdrops (like airdropping a Solana SPL-20 coin to holders of an Ethereum or EVM-based NFT) are tricky because Solana addresses are different than Ethereum addresses. Users have to link, or cluster, their authenticated EVM and SOL addresses together to ensure the airdrop goes to the right place.

For example, with the Pudgy Penguin $PENGU airdrop, users held Ethereum NFTs and were eligible to claim a Solana SPL-20. They linked their wallets together, with an option for full privacy, using Clusters. Clusters powered over 1.3 million unique claim events and over $1 billion of value.

Using Clusters is better than building your own bespoke internal system because:

  • Faster time to ship, we've already built this infra and run several top airdrops through it, like $PENGU and $ANIME

  • Users can preregister ahead of time, reducing first-hour load on launch servers and improving both uptime & throughput

  • Easy compatibility with delegate.xyz claims, which are critical for smart contract wallets like Gnosis Safe and 4337 wallets that cannot make an EIP-712 signature

  • Battle-tested across literal billions of dollars worth of value already

  • Reusable composable state, so your community becomes legible and can make even more money from third-party airdrops (or future first-party airdrops)

How Clusters Works

Clusters are bundles of wallets, for example here is a cluster of one ETH address, one SOL address, and one BTC address:

[
    0xd8dA6BF26964aF9D7eEd9e03E53415D37aA96045, 
    HWEoBxYs7ssKuudEjzjmpfJVX7Dvi7wescFsVx2L5yoY, 
    1A1zP1eP5QGefi2DMPTfTL5SLmv7DivfNa
]

A verified wallet can only be apart of one wallet at a time.

Any verified wallet in a bundle can publicly or privately add wallets to a bundle.

Clusters uses a bundling framework. Where a wallet creates a “bundle” they then can publicly or privately add wallets to the bundle.

  1. Authentication

Clusters protocol authentication works via offline wallets based signatures via EVM or Solana wallets.

// 1. Get signing message
POST /v1/auth/message

// 2. Get auth token from signed item
POST /v1/auth/token
body={ signature, signginDate, type, wallet }
  1. Creating a bundle

POST /v1/bundle

The connected wallet will create a bundle.

(Alternatively, a user can skip this step and go straight to adding wallets to a bundle. If no bundle exists, it will create one beforehand)

The initial created bundle

  1. Adding wallets privately OR publicly

POST /v1/bundle/wallets

The authenticated wallet can add wallets of any type to the bundle they are in. These wallets can be public to everyone OR can be completely private and hidden to the outside world.

*When privately adding wallets, no events will be emitted to our Data Availability Layer, completely shielding the identity of the wallet and their associated bundle connections.

  1. Claiming airdrops

GET /v1/airdrop/claim/doodles

Any wallet that is apart of a bundle can authenticate themselves and privately call the associated airdrop endpoint. The clusters backend will determine what wallets are eligible by traversing all bundles they are associated with.

Return objects can be associated merkle roots, transaction call data, etc.

In the below example, solana wallet Gg1..fwz tries to claim an airdrop. The system determines it’s associated with EVM wallet 0x000…123. If this EVM wallet is eligible for a claim, we can process it accordingly.

  1. Post claim

  • Register the user a new community name doodles/foobar

  • Assign the above bundle to the community name (POST /bundles/assign)

Last updated