# AirdropDesk Contract Addresses and Verification

Checked against public RPC endpoints and explorer verification results on 2026-07-13.

## Deployed Contracts

| Network | Chain ID | Contract | Explorer | Source status |
| --- | ---: | --- | --- | --- |
| Ethereum | 1 | `0x3FFEB97DABA42CDfeECB1200f190477C991c432b` | [Etherscan](https://etherscan.io/address/0x3FFEB97DABA42CDfeECB1200f190477C991c432b#code) | Exact-match verified |
| BNB Chain | 56 | `0x1CfF989BF2464586BCfA4Edd0f1CCa791c11006E` | [BscScan](https://bscscan.com/address/0x1CfF989BF2464586BCfA4Edd0f1CCa791c11006E#code) | Exact-match verified |
| Arbitrum One | 42161 | `0x9209618E0b2B1EA085C5d8a3DB613768A9c9de15` | [Arbiscan](https://arbiscan.io/address/0x9209618E0b2B1EA085C5d8a3DB613768A9c9de15#code) / [Blockscout](https://arbitrum.blockscout.com/address/0x9209618E0b2B1EA085C5d8a3DB613768A9c9de15?tab=contract) | Exact-match verified on Arbiscan; also verified on Blockscout |
| Base | 8453 | `0xF2b32a7D21827AB3f55182Cf31523E7523bCEdd1` | [BaseScan](https://basescan.org/address/0xF2b32a7D21827AB3f55182Cf31523E7523bCEdd1#code) | Exact-match verified |

All four deployments have the same runtime logic after removing the Solidity metadata suffix:

```text
keccak256(runtime logic) = 0xea91b4897b1bf1fe18f9fba628f727b553ac05cb730c12b9ff868d10a6739abf
```

The full runtime hashes differ because each deployment contains a different IPFS metadata hash. This does not change the executable contract logic.

## Current On-Chain Configuration

| Network | Owner | Fee recipient | Service token | Price per recipient | Max recipients per transaction |
| --- | --- | --- | --- | ---: | ---: |
| Ethereum | `0xfD148d89eF7D87FFbB18183DbE50EA3baD67FF7c` | same as owner | USDC `0xA0b8...6eB48` | `10000` (0.01 USDC) | 300 |
| BNB Chain | `0xfD148d89eF7D87FFbB18183DbE50EA3baD67FF7c` | same as owner | USDC `0x8AC7...580d` | `10000000000000000` (0.01 USDC) | 300 |
| Arbitrum One | `0xfD148d89eF7D87FFbB18183DbE50EA3baD67FF7c` | same as owner | USDC `0xaf88...5831` | `10000` (0.01 USDC) | 300 |
| Base | `0xfD148d89eF7D87FFbB18183DbE50EA3baD67FF7c` | same as owner | USDC `0x8335...2913` | `10000` (0.01 USDC) | 300 |

## Verification Source and Compiler Settings

Use [contracts/BulkAirdropWithFee.remix.sol](contracts/BulkAirdropWithFee.remix.sol) for single-file verification.

```text
Contract name: BulkAirdropWithFee
Compiler: v0.8.34+commit.80d5c536
Optimization: No
Optimizer runs field: 200
EVM version: default
License setting on existing deployments: None
```

The source compiles successfully with:

```bash
npx --yes solc@0.8.34 --bin --abi contracts/BulkAirdropWithFee.remix.sol
```

For BscScan and BaseScan, the fastest route is the **Cross-chain Verify** option because Ethereum already has an exact-match verification and all deployments share the same executable logic. Manual verification can use the settings and constructor arguments below.

## Original Constructor Arguments

The original deployments used 0.30 USDC per recipient. The owner later changed the live price to 0.01 USDC using `setPricing`. Explorer verification must use the **original constructor values**, not the current storage values.

### Ethereum

```text
initialOwner: 0xfD148d89eF7D87FFbB18183DbE50EA3baD67FF7c
initialServiceToken: 0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48
initialPricePerRecipient: 300000
initialFeeRecipient: 0xfD148d89eF7D87FFbB18183DbE50EA3baD67FF7c
ABI-encoded arguments:
000000000000000000000000fd148d89ef7d87ffbb18183dbe50ea3bad67ff7c000000000000000000000000a0b86991c6218b36c1d19d4a2e9eb0ce3606eb4800000000000000000000000000000000000000000000000000000000000493e0000000000000000000000000fd148d89ef7d87ffbb18183dbe50ea3bad67ff7c
```

### BNB Chain

```text
initialOwner: 0xfD148d89eF7D87FFbB18183DbE50EA3baD67FF7c
initialServiceToken: 0x8AC76a51cc950d9822D68b83fE1Ad97B32Cd580d
initialPricePerRecipient: 300000000000000000
initialFeeRecipient: 0xfD148d89eF7D87FFbB18183DbE50EA3baD67FF7c
ABI-encoded arguments:
000000000000000000000000fd148d89ef7d87ffbb18183dbe50ea3bad67ff7c0000000000000000000000008ac76a51cc950d9822d68b83fe1ad97b32cd580d0000000000000000000000000000000000000000000000000429d069189e0000000000000000000000000000fd148d89ef7d87ffbb18183dbe50ea3bad67ff7c
```

### Arbitrum One

```text
initialOwner: 0xfD148d89eF7D87FFbB18183DbE50EA3baD67FF7c
initialServiceToken: 0xaf88d065e77c8cC2239327C5EDb3A432268e5831
initialPricePerRecipient: 300000
initialFeeRecipient: 0xfD148d89eF7D87FFbB18183DbE50EA3baD67FF7c
ABI-encoded arguments:
000000000000000000000000fd148d89ef7d87ffbb18183dbe50ea3bad67ff7c000000000000000000000000af88d065e77c8cc2239327c5edb3a432268e583100000000000000000000000000000000000000000000000000000000000493e0000000000000000000000000fd148d89ef7d87ffbb18183dbe50ea3bad67ff7c
```

### Base

```text
initialOwner: 0xfD148d89eF7D87FFbB18183DbE50EA3baD67FF7c
initialServiceToken: 0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913
initialPricePerRecipient: 300000
initialFeeRecipient: 0xfD148d89eF7D87FFbB18183DbE50EA3baD67FF7c
ABI-encoded arguments:
000000000000000000000000fd148d89ef7d87ffbb18183dbe50ea3bad67ff7c000000000000000000000000833589fcd6edb6e08f4c7c32d4f71b54bda0291300000000000000000000000000000000000000000000000000000000000493e0000000000000000000000000fd148d89ef7d87ffbb18183dbe50ea3bad67ff7c
```

## Upgradeability and Administrator Permissions

The deployed contracts are **not upgradeable**. They do not use a proxy, `delegatecall`, an implementation address, or an upgrade function. Replacing contract logic requires deploying a new contract and updating the website configuration.

The owner can:

- change the service-fee token, price per recipient, and fee recipient with `setPricing`;
- change `maxRecipientsPerTx` between 1 and 500;
- transfer ownership to another non-zero address.

The owner cannot:

- execute an airdrop from a user's wallet;
- pull tokens without the user calling `airdropERC20`;
- withdraw arbitrary user funds from the contract;
- replace the deployed bytecode.
