eth_ava_bridge/contracts/ERC721Safe.sol

74 lines
2.7 KiB
Solidity

pragma solidity 0.6.12;
import "@openzeppelin/contracts/math/SafeMath.sol";
import "@openzeppelin/contracts/token/ERC721/IERC721.sol";
import "./ERC721MinterBurnerPauser.sol";
/**
@title Manages deposited ERC721s.
@author ChainSafe Systems.
@notice This contract is intended to be used with ERC721Handler contract.
*/
contract ERC721Safe {
using SafeMath for uint256;
/**
@notice Used to transfer tokens into the safe to fund proposals.
@param tokenAddress Address of ERC721 to transfer.
@param owner Address of current token owner.
@param tokenID ID of token to transfer.
*/
function fundERC721(address tokenAddress, address owner, uint tokenID) public {
IERC721 erc721 = IERC721(tokenAddress);
erc721.transferFrom(owner, address(this), tokenID);
}
/**
@notice Used to gain custoday of deposited token.
@param tokenAddress Address of ERC721 to transfer.
@param owner Address of current token owner.
@param recipient Address to transfer token to.
@param tokenID ID of token to transfer.
*/
function lockERC721(address tokenAddress, address owner, address recipient, uint tokenID) internal {
IERC721 erc721 = IERC721(tokenAddress);
erc721.transferFrom(owner, recipient, tokenID);
}
/**
@notice Transfers custody of token to recipient.
@param tokenAddress Address of ERC721 to transfer.
@param owner Address of current token owner.
@param recipient Address to transfer token to.
@param tokenID ID of token to transfer.
*/
function releaseERC721(address tokenAddress, address owner, address recipient, uint256 tokenID) internal {
IERC721 erc721 = IERC721(tokenAddress);
erc721.transferFrom(owner, recipient, tokenID);
}
/**
@notice Used to create new ERC721s.
@param tokenAddress Address of ERC721 to mint.
@param recipient Address to mint token to.
@param tokenID ID of token to mint.
@param data Optional data to send along with mint call.
*/
function mintERC721(address tokenAddress, address recipient, uint256 tokenID, bytes memory data) internal {
ERC721MinterBurnerPauser erc721 = ERC721MinterBurnerPauser(tokenAddress);
erc721.mint(recipient, tokenID, string(data));
}
/**
@notice Used to burn ERC721s.
@param tokenAddress Address of ERC721 to burn.
@param tokenID ID of token to burn.
*/
function burnERC721(address tokenAddress, uint256 tokenID) internal {
ERC721MinterBurnerPauser erc721 = ERC721MinterBurnerPauser(tokenAddress);
erc721.burn(tokenID);
}
}