140 lines
3.3 KiB
Solidity
140 lines
3.3 KiB
Solidity
// SPDX-License-Identifier: MIT
|
|
pragma solidity 0.8.10;
|
|
import "@openzeppelin/contracts/access/Ownable.sol";
|
|
import "@openzeppelin/contracts/proxy/utils/Initializable.sol";
|
|
import "../interfaces/IEvolveFactory.sol";
|
|
import "../interfaces/IBEERC721.sol";
|
|
import "../interfaces/IBEERC1155.sol";
|
|
|
|
contract UserEvolveFactory is Ownable, Initializable {
|
|
IEvolveFactory factory;
|
|
IBEERC721 public hero;
|
|
IBEERC721 public equip;
|
|
IBEERC1155 public chip;
|
|
|
|
event TokenEvolveFail (
|
|
address indexed to,
|
|
bytes signature,
|
|
string reason,
|
|
bytes byteReason
|
|
);
|
|
|
|
function init(address[3] calldata _nfts) external initializer onlyOwner {
|
|
hero = IBEERC721(_nfts[0]);
|
|
equip = IBEERC721(_nfts[1]);
|
|
chip = IBEERC1155(_nfts[2]);
|
|
}
|
|
|
|
/**
|
|
* @dev evolve function Hero NFT
|
|
* tokenIds: [hero_to_evolve, hero_for_burn, chip]
|
|
*/
|
|
function evolveHero(
|
|
uint256[3] calldata tokenIds,
|
|
uint256 startTime,
|
|
uint256 saltNonce,
|
|
bytes calldata signature
|
|
) external returns (bool success){
|
|
address to = _msgSender();
|
|
try factory.evolve721NFT(to, tokenIds, startTime, saltNonce, signature, hero) {
|
|
return true;
|
|
} catch Error(string memory reason) {
|
|
bytes memory by;
|
|
factory.useSignature(signature);
|
|
emit TokenEvolveFail(
|
|
to,
|
|
signature,
|
|
reason,
|
|
by
|
|
);
|
|
return false;
|
|
} catch (bytes memory lowLevelData) {
|
|
factory.useSignature(signature);
|
|
string memory reason;
|
|
emit TokenEvolveFail(
|
|
to,
|
|
signature,
|
|
reason,
|
|
lowLevelData
|
|
);
|
|
return false;
|
|
}
|
|
}
|
|
/**
|
|
* @dev evolve function for equip NFT
|
|
* tokenIds: [equip_to_evolve, equip_for_burn, chip]
|
|
*/
|
|
function evolveEquip(
|
|
uint256[3] calldata tokenIds,
|
|
uint256 startTime,
|
|
uint256 saltNonce,
|
|
bytes calldata signature
|
|
) external returns (bool success){
|
|
address to = _msgSender();
|
|
try factory.evolve721NFT(to, tokenIds, startTime, saltNonce, signature, equip) {
|
|
return true;
|
|
} catch Error(string memory reason) {
|
|
bytes memory by;
|
|
factory.useSignature(signature);
|
|
emit TokenEvolveFail(
|
|
to,
|
|
signature,
|
|
reason,
|
|
by
|
|
);
|
|
return false;
|
|
} catch (bytes memory lowLevelData) {
|
|
factory.useSignature(signature);
|
|
string memory reason;
|
|
emit TokenEvolveFail(
|
|
to,
|
|
signature,
|
|
reason,
|
|
lowLevelData
|
|
);
|
|
return false;
|
|
}
|
|
}
|
|
|
|
/**
|
|
* @dev evolve function for chip
|
|
*/
|
|
function evolveChip(
|
|
uint256[] memory ids,
|
|
uint256 startTime,
|
|
uint256 saltNonce,
|
|
bytes calldata signature
|
|
) external returns (bool success){
|
|
address to = _msgSender();
|
|
try factory.evolveChip(
|
|
to,
|
|
ids,
|
|
startTime,
|
|
saltNonce,
|
|
signature
|
|
) {
|
|
return true;
|
|
} catch Error(string memory reason) {
|
|
bytes memory by;
|
|
factory.useSignature(signature);
|
|
emit TokenEvolveFail(
|
|
to,
|
|
signature,
|
|
reason,
|
|
by
|
|
);
|
|
return false;
|
|
} catch (bytes memory lowLevelData) {
|
|
factory.useSignature(signature);
|
|
string memory reason;
|
|
emit TokenEvolveFail(
|
|
to,
|
|
signature,
|
|
reason,
|
|
lowLevelData
|
|
);
|
|
return false;
|
|
}
|
|
}
|
|
}
|