第二步,需要生成参与 mint 地址的 Merkle 证明,假设使用 0xc12ae5Ba30Da6eB11978939379D383beb5Df9b33 地址进行 mint 操作:
let leaf = keccak256('0xc12ae5Ba30Da6eB11978939379D383beb5Df9b33'); let proof = tree.getHexProof(leaf); console.log('Proof of 0xc12ae5Ba30Da6eB11978939379D383beb5Df9b33: ', proof);
对应生成的证明为
Proof of 0xc12ae5Ba30Da6eB11978939379D383beb5Df9b33: [ '0x1575cc1dded49f942913392f94716824d29b8fa45876b2db6295d16a606533a4', '0x6c42c6099e51e28eef8f19f71765bb42c571d5c7177996f177606138f65c0c2b', '0xb0d6f760008340e3f60414d84b305702faa6418f44f31de07b10e05bf369eb3b', '0x4c880bf401add28c4e51270dfe16b28c3ca1b3d263ff7c5863fc8214b4046364' ]
同时我们将生成一个假的证明:
// another proof, for example
let anotherWhitelistAddresses = [ '0x169841AA3024cfa570024Eb7Dd6Bf5f774092088', '0xc12ae5Ba30Da6eB11978939379D383beb5Df9b33', '0x0a290c8cE7C35c40F4F94070a9Ed592fC85c62B9', '0x43Be076d3Cd709a38D2f83Cd032297a194196517', ]; let anotherLeafNodes = anotherWhitelistAddresses.map(address => keccak256(address)); let badTree = new MerkleTree(anotherLeafNodes, keccak256, { sortPairs: true });
let badLeaf = keccak256('0xc12ae5Ba30Da6eB11978939379D383beb5Df9b33'); let badProof = badTree.getHexProof(badLeaf); console.log('Bad proof of 0xc12ae5Ba30Da6eB11978939379D383beb5Df9b33: ', badProof);
// Bad proof of 0xc12ae5Ba30Da6eB11978939379D383beb5Df9b33: [ // '0x1575cc1dded49f942913392f94716824d29b8fa45876b2db6295d16a606533a4', // '0x6c42c6099e51e28eef8f19f71765bb42c571d5c7177996f177606138f65c0c2b' // ]
调用 mint ,传入非法 Merkle 证明:["0x1575cc1dded49f942913392f94716824d29b8fa45876b2db6295d16a606533a4","0x6c42c6099e51e28eef8f19f71765bb42c571d5c7177996f177606138f65c0c2b"] ,可以看到交易失败,显示 Fail with error 'Address does not exist in list ;
验证 0xc12ae5Ba30Da6eB11978939379D383beb5Df9b33 地址对应 mint 状态是否为 false;