> For the complete documentation index, see [llms.txt](https://calnix.gitbook.io/eth-dev/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://calnix.gitbook.io/eth-dev/ercs-and-eips/landing/erc721.sol.md).

# ERC721.sol

https\://docs.openzeppelin.com/contracts/3.x/erc721#constructing\_an\_erc721\_token\_contract

### Why are there 2 functions named \_safeMint?

![](https://1628544884-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FTgomzlmn9NrxUY0OQ3cD%2Fuploads%2FDp68YLVXo9omhZodtVPW%2Fimage.png?alt=media\&token=b8785ca7-81f6-45bb-911e-7449ac2ccdcc)

* You can have multiple functions with the same name, as long as their signature is not the same.&#x20;
* Function parameters are also part of the signature, so the function signature of these two functions are different. Hence, they do not get mixed up in any way.&#x20;
* Whenever you call a contract function, you have to provide the parameters as well. The executed function is chosen based on the name and provided parameters.
* The first function is just a shorthand version of the second hand, since it calls the second function.
  * it makes the "data" field optional by using overloading - if data is included, it'll use the 4-arg version, if it's not included, it'll call the three-arg version, which in turn just puts in an empty string for data calling the 4-arg version

<br>
