编译器
0.8.19+commit.7dd6d404
文件 1 的 3:IERC721Burnable.sol
pragma solidity ^0.8.19;
interface IERC721Burnable {
function burn(uint256 tokenId) external;
function ownerOf(uint256 tokenId) external view returns (address owner);
function setApprovalForAll(address operator, bool approved) external;
function balanceOf(address owner) external view returns (uint256 balance);
}
文件 2 的 3:ITitanV2.sol
pragma solidity ^0.8.19;
interface ITitanV2 {
function migrateMint(address _to, uint256 _tokenId) external;
}
文件 3 的 3:TitanMigration.sol
pragma solidity ^0.8.19;
import "./IERC721Burnable.sol";
import "./ITitanV2.sol";
contract TitanMigration {
IERC721Burnable public titanV1;
ITitanV2 public titanV2;
event Migrated(address indexed from, uint256 tokenId);
constructor(address _titanV1, address _titanV2) {
titanV1 = IERC721Burnable(_titanV1);
titanV2 = ITitanV2(_titanV2);
}
function migrate(uint256[] calldata _tokenIds) external {
uint256 i = 0;
for (i = 0; i < _tokenIds.length; i++) {
uint256 tokenId = _tokenIds[i];
require(titanV1.ownerOf(tokenId) == msg.sender, "Not owner");
titanV1.burn(tokenId);
titanV2.migrateMint(msg.sender, tokenId);
emit Migrated(msg.sender, tokenId);
}
}
}
{
"compilationTarget": {
"contracts/TitanMigration.sol": "TitanMigration"
},
"evmVersion": "paris",
"libraries": {},
"metadata": {
"bytecodeHash": "ipfs",
"useLiteralContent": true
},
"optimizer": {
"enabled": true,
"runs": 7777
},
"remappings": []
}
[{"inputs":[{"internalType":"address","name":"_titanV1","type":"address"},{"internalType":"address","name":"_titanV2","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":false,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"Migrated","type":"event"},{"inputs":[{"internalType":"uint256[]","name":"_tokenIds","type":"uint256[]"}],"name":"migrate","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"titanV1","outputs":[{"internalType":"contract IERC721Burnable","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"titanV2","outputs":[{"internalType":"contract ITitanV2","name":"","type":"address"}],"stateMutability":"view","type":"function"}]