forked from DecentralizedClimateFoundation/DCIPs
54 lines
1.4 KiB
Solidity
54 lines
1.4 KiB
Solidity
// SPDX-License-Identifier: CC0-1.0
|
|
|
|
pragma solidity ^0.8.0;
|
|
|
|
import "../factory/IERC5058Factory.sol";
|
|
import "../factory/IERC721Bound.sol";
|
|
import "../ERC5058.sol";
|
|
|
|
abstract contract ERC5058Bound is ERC5058 {
|
|
address public bound;
|
|
|
|
function _setFactory(address _factory) internal {
|
|
bound = IERC5058Factory(_factory).boundOf(address(this));
|
|
}
|
|
|
|
function _setBoundBaseTokenURI(string memory uri) internal {
|
|
IERC721Bound(bound).setBaseTokenURI(uri);
|
|
}
|
|
|
|
function _setBoundContractURI(string memory uri) internal {
|
|
IERC721Bound(bound).setContractURI(uri);
|
|
}
|
|
|
|
function burnBound(uint256 tokenId) external {
|
|
IERC721Bound(bound).burn(tokenId);
|
|
}
|
|
|
|
// NOTE:
|
|
//
|
|
// this will be called when `lock` or `unlock`
|
|
function _afterTokenLock(
|
|
address operator,
|
|
address from,
|
|
uint256 tokenId,
|
|
uint256 expired
|
|
) internal virtual override {
|
|
super._afterTokenLock(operator, from, tokenId, expired);
|
|
|
|
if (bound != address(0)) {
|
|
if (expired != 0) {
|
|
// lock mint
|
|
if (operator != address(0)) {
|
|
IERC721Bound(bound).safeMint(msg.sender, tokenId, "");
|
|
}
|
|
} else {
|
|
// unlock
|
|
if (IERC721Bound(bound).exists(tokenId)) {
|
|
IERC721Bound(bound).burn(tokenId);
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|