NFT合约级mint实践

简明教程

  1. 找到对应地址

可以先试用页面触发小狐狸的审批页面,之后找对应的地址。

  1. 浏览器查看合约交互

nft 项目一般都是 mint 的方法的调用。在交易详情的advance里面看到decode 之后的内容,一般是合约的方法名和参数

  1. 看合约代码

直接找到 调用的mint 函数的定义内容,检查其逻辑。

  1. 构造调用参数,进行合约交互

实践记录

以下面的合约为例子。

https://polygonscan.com/address/0x3a67c34c7dbd846108044fed38a3154b99a97cb1

看到有大量的Mint 调用,在advence查看调用内容,如下

Function: mint(uint256 amount, uint256 timeout) ***

MethodID: 0x1b2ef1ca

这里主要是看解码出来的 Functiin name,这里的参数不一定百分百准确,因为是使用 字典来进行解码的。

这里推荐使用 4byte来进行方法名解码。有比较强大的 DB

https://www.4byte.directory/signatures/?bytes4_signature=0x1b2ef1ca

我们可以看到解码的内容是。

ID Text Signature Bytes Signature
167720 mint(uint256,uint256) 0x1b2ef1ca

在其公布的sol code的 RaremintsERC721 里面我们可以找到mint的定义:

    function mint(uint256 num, uint256 metadata) public payable {
        uint256 supply = totalSupply();
        require( !_paused,                              "Sale paused" );
        require( supply + num <= _supply - _reserved,   "Exceeds maximum supply" );
        require( msg.value >= _price * num,             "Ether sent is not correct" );
<pre><code>    for(uint256 i; i < num; i++){
        performMint(msg.sender, supply + i, metadata);
    }
}
</code></pre>

可以看到 :

  1. payable
  2. num
  3. metadata

这里第三个request就看出来我们的payable需要达到单价以上。在这里price 设置的是 0.5matic 所以我们这里就保持1:0.5 的数量价格比。另外一个参数是 metadata,这里 performMint用到了这个参数,其函数内容如下。

solidity
function performMint(address _to, uint256 _tokenId, uint256 _metadata) private {
_safeMint(_to, _tokenId);
emit MintEvent(_to, _tokenId, _metadata);
}

我们可以看到,这里只是在 emit 事件的时候用到了这个 metadata,其他地方没有,所以这里意味着我们可以进行自定义。

综上 构建出参数 ,使用 write Contract 来进行交互。

找到 mint 函数,参数如下

  1. Payable: 1.5 matic
  2. Num: 3
  3. Metadata: 0000(任意)

点击 Write 写合约 ,完成交互过程。简单轻松

从简单的流程分析来切入智能合约的路子上