# Example: Cross-Chain Airdrop

{% hint style="info" %}
This feature is in beta, so please fill out [this form](https://airtable.com/shrKT6HrHi2oDcmrf) to get in touch with the Succinct team about using it.
{% endhint %}

We've built a simple example contract that allows users that own an ERC721 on mainnet to receive an airdrop such as a new NFT or other tokens on another chain (ex. Polygon). The contract reads [`ERC721.ownerOf(uint256)`](https://github.com/OpenZeppelin/openzeppelin-contracts/blob/e739144cb02dbbd73256a2ae79f024faf3c7ea0a/contracts/token/ERC721/ERC721.sol#LL70C38-L70C38) from mainnet to ensure that the wallet is the correct owner.

Since the `_giveAirdrop` function is abstract, you can add any logic you want for airdrop claimers. This base contract could be used to migrate an NFT to a new chain, give tokens to claimers, or otherwise provide additional utility to ERC721 tokens on mainnet.

Here's an example that gives 1 ETH to airdrop claimers.

```solidity
contract SimpleNFTAirdrop is NFTAirdrop {
    constructor(address _nft, address _oracle)
        payable
        NFTAirdrop(_nft, _oracle)
    {
        require(msg.value == 10 ether);
    }

    function _giveAirdrop(address _to, uint256 _tokenId) internal override {
        (bool success, ) = payable(_to).call{value: 1 ether}("");
        require(success);
    }
}
```

The full source code for the contracts used in this below can be found at the Github [NFTAirdrop.sol](https://github.com/succinctlabs/telepathy-oracle/blob/main/src/examples/nft/NFTAirdrop.sol) example.
