# Smart Contracts

### Contracts Library

Instamint maintains a library of smart contracts that serve different purposes. This includes ERC721 and ERC1155 contracts and variations of them. Each *deployed* smart contract is identified by a name ("moniker") and the name is identified during API calls. A moniker maps to an existing smart contract deployed on chain, and thus a smart contract address.

<table><thead><tr><th width="147.33333333333331">Moniker</th><th width="249">Description</th><th>Location</th></tr></thead><tbody><tr><td><mark style="color:orange;">INSTA1</mark></td><td>Clean OpenZeppelin 4.4.1 ERC721</td><td>../ethereum/contracts/Instamint721.sol</td></tr><tr><td><mark style="color:orange;">INSTA2</mark></td><td>Clean OpenZeppelin 4.4.1 ERC1155</td><td>../ethereum/contracts/Instamint1155.sol</td></tr><tr><td></td><td></td><td></td></tr></tbody></table>

All smart contracts can be found at <https://github.com/instamint/smartcontracts>

Smart contracts can be deployed or minted to. When deployed, a smart contract type is specified. For example, deploying a new ERC721 or ERC115 and assigning it a moniker. If minting to an existing smart contract, as is the case with an ERC721 or ERC1155, a moniker is used in lieu of a contract address.&#x20;

### Algorand ASAs

For Algorand ASA’s, a token and smart contract are identical and therefore specifying a contract type of ARC3 both deploys and mints the asset. By default, an ASA's unit name is INSTA. This will be overridable in the Q4 2022 release.

### Contract Types Library

New contracts, above and beyond INSTA1 and INSTA2 can be deployed by specifying the `contractType`parameter to one of the following types.

<table><thead><tr><th width="129">Type</th><th width="297">Description</th><th>Reference</th></tr></thead><tbody><tr><td>erc721</td><td>Deploys the latest version of OpenZeppelin ERC721</td><td><a href="https://docs.openzeppelin.com/contracts/2.x/api/token/erc721">https://docs.openzeppelin.com/contracts/2.x/api/token/erc721</a></td></tr><tr><td>erc1155</td><td>Deploys the latest version of OpenZeppelin ERC721</td><td><a href="https://docs.openzeppelin.com/contracts/3.x/erc1155">https://docs.openzeppelin.com/contracts/3.x/erc1155</a></td></tr><tr><td>arc3</td><td>Deploys and mints an Algorand Asset</td><td><a href="https://github.com/algorandfoundation/ARCs/blob/main/ARCs/arc-0003.md

"><https://github.com/algorandfoundation/ARCs/blob/main/ARCs/arc-0003.md> <br> <br></a></td></tr><tr><td>arc18</td><td>Deploys, mints and adds royalties to Algorand Asset</td><td><a href="https://github.com/barnjamin/ARCs/blob/royalty/ARCs/arc-0018.md"><https://github.com/barnjamin/ARCs/blob/royalty/ARCs/arc-0018.md></a></td></tr></tbody></table>


---

# Agent Instructions: Querying This Documentation

If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://docs.scifn.com/instamint/smart-contracts.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
