简明教程
- 找到对应地址
可以先试用页面触发小狐狸的审批页面,之后找对应的地址。
- 浏览器查看合约交互
nft 项目一般都是 mint 的方法的调用。在交易详情的advance里面看到decode 之后的内容,一般是合约的方法名和参数
- 看合约代码
直接找到 调用的mint 函数的定义内容,检查其逻辑。
- 构造调用参数,进行合约交互
实践记录
以下面的合约为例子。
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>
可以看到 :
- payable
- num
- 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 函数,参数如下
- Payable: 1.5 matic
- Num: 3
- Metadata: 0000(任意)
点击 Write 写合约 ,完成交互过程。简单轻松
后
从简单的流程分析来切入智能合约的路子上