EVM contracts
Register an Ethereum or Polygon smart contract
If you haven't deployed a smart contract yet, this is the time! Here are tutorials for Ethereum and Polygon.
Once you have your smart contract ready:
π€ Check it meets our requirements
- Your contract must be ERC-721, ERC-721A, or ERC-1155 compliant.
- The minting function must allow minting directly to an address different than the one which invoked the contract. And it must contain at least one parameter that specifies that recipient address.
- A single address must be able to call the mint function unlimited times but does not need to be able to hold unlimited NFTs.
If your contract doesn't meet criteria 1 or 2, reach out to us. We can probably still make it work, it may just require some manual work from our side.
π Register your contract
From the console on the Payments tab, click on your collection and then on Contract registration. Paste your contract address and the rest of fields should update automatically. Edge cases may not be processed correctly, so please verify everything is in order:
- ABI section for mint function, the section of your abi file for the mint function in JSON format.
- NFT recipient address mint function argument, the name of the argument in your mint function that specifies who the NFT will be minted too.
- NFT amount mint function argument, the name of the argument in your mint function that specifies the amount of NFTs to mint in a single transaction.
π Appendix: How to obtain your contract information
Example of minting function:
// save as property of contract
address public crossmintAddress;
function crossmint(address _to) public payable {
require(mintPrice == msg.value, "Incorrect value sent");
require(_tokenIdCounter.current() + 1 <= maxSupply, "No more left");
// NOTE THAT the address is different for ethereum, polygon, and mumbai
// ethereum (all) = 0xdab1a1854214684ace522439684a145e62505233
// polygon mainnet = 0x12A80DAEaf8E7D646c4adfc4B107A2f1414E2002
// polygon mumbai = 0xDa30ee0788276c093e686780C25f6C9431027234
require(msg.sender == crossmintAddress,
"This function is for Crossmint only."
);
uint256 newTokenId = _tokenIdCounter.current();
_tokenIdCounter.increment();
_safeMint(_to, newTokenId);
}
// include a setting function so that you can change this later
function setCrossmintAddress(address _crossmintAddress) public onlyOwner {
crossmintAddress = _crossmintAddress;
}
Note that the mint function may have any name and contain any number of additional parameters as long as it meets the requirements listed above.
Grabbing the ABI section for your minting function
ABI Update
Previously, weβve requested only a specific portion of your ABI. We now require the full ABI.
When you compile your smart contract there will be a corresponding abi file with an .abi
or .json
extension.
Inside this file, you'll see an array called abi
which contains various objects. Here's an example of what your abi
file will look like, but yours might have more objects.
// Example generated abi file for smart contract
{
"abi":[
{
"inputs":[
],
"stateMutability":"nonpayable",
"type":"constructor"
},
{
"inputs":[
{
"internalType":"address",
"name":"to",
"type":"address"
},
{
"internalType":"uint256",
"name":"_count",
"type":"uint256"
}
],
"name":"mintTo",
"outputs":[
],
"stateMutability":"payable",
"type":"function"
}
]
}
Now copy that object, and paste it into the ABI section for mint function
field on the developer console.

Specifying the remaining parameters
After entering your ABI function, you will see in a dropdown all the options where you can easily choose the recipient address parameter and the NFT amount mint function argument.
Double check that both are correct, otherwise you will have to register the contract from scratch, as both fields are immutable.

Updated 17 days ago