안녕하세요.
바오밥 테스트넷에서, 기존에 민트되었던 NFT를 소각하려고 하는데,
개별 토큰을 caver를 통해 소각하려니, KAS API사용량이 너무 많아질것같아서,
새로운 컨트랙트를 만들어서 KIP17 컨트랙트의 mint 또는 burn 명령어를 for loop을 통해 한번에 진행하고자 합니다.
이 경우 새로 생성된 컨트랙트가 NFT 컨트랙트내의 토큰 소유자가 아니기 때문에 delegatecall을 써야하는것 같아서 수행해봤는데, Scope 의 input data를 보면, Decoded Value에 확인이 되고, 트랜잭션이 성공했음에도 불구하고, 실제 민팅이나 소각이 실행되지 않았습니다.
byte로 인코딩하는 문제에서 생긴것 같은데, 혹시 도움받을수 있을까요?
delegatecall 은 컨트랙트 내에서 다음과 같이 호출했습니다.
contract BurnHelper {
using SafeMath for uint256;
address public nftAddress;
constructor(address _nftAddress) public {
nftAddress = _nftAddress;
}
function massMint(uint256 start, uint256 end) external {
for (uint256 i = start; i <= end; i += 1) {
(bool success, bytes memory data) =
nftAddress.delegatecall(abi.encodeWithSignature("burn(uint256)",i));
}
}
}
일단 위에 있는 방법을 개선하는 것이 가장 원하는 방법이긴 한데,
혹시 제 접근방법이 틀렸다면, 어떻게 접근하면 좋을지 도움을 구하고 싶습니다.
제가 구현하고 싶은것은 한마디로 말씀드리면, 다른 컨트랙트를 호출하는 새로운 컨트랙트 생성해, 기존에 onlyMinter 혹은 onlyOwner등의 modifier 가 붙은 함수를 그 새로운 컨트랙트를 통해 반복수행하고 싶습니다.
회신 기다리겠습니다.
감사합니다.