-
Notifications
You must be signed in to change notification settings - Fork 0
/
RarityCommon.sol
48 lines (40 loc) · 2.15 KB
/
RarityCommon.sol
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
// SPDX-License-Identifier: MPL-2.0
pragma solidity 0.8.7;
import {IRarity} from "contracts/external/rarity/IRarity.sol";
import {IRarityAdventure} from "contracts/external/rarity/IRarityAdventure.sol";
import {IRarityAttributes} from "contracts/external/rarity/IRarityAttributes.sol";
import {IRarityCrafting} from "contracts/external/rarity/IRarityCrafting.sol";
import {IRarityMaterials} from "contracts/external/rarity/IRarityMaterials.sol";
import {IRarityGold} from "contracts/external/rarity/IRarityGold.sol";
import {IRaritySkills} from "contracts/external/rarity/IRaritySkills.sol";
import "contracts/infrastructure/Errors.sol";
abstract contract RarityCommon {
IRarity internal constant RARITY = IRarity(0xce761D788DF608BD21bdd59d6f4B54b2e27F25Bb);
IRarityGold internal constant RARITY_GOLD = IRarityGold(0x2069B76Afe6b734Fb65D1d099E7ec64ee9CC76B2);
IRarityAttributes internal constant RARITY_ATTRIBUTES =
IRarityAttributes(0xB5F5AF1087A8DA62A23b08C00C6ec9af21F397a1);
IRarityCrafting internal constant RARITY_CRAFTING_1 = IRarityCrafting(0xf41270836dF4Db1D28F7fd0935270e3A603e78cC);
IRarityMaterials internal constant RARITY_MATERIALS_1 =
IRarityMaterials(0x2A0F1cB17680161cF255348dDFDeE94ea8Ca196A);
IRaritySkills internal constant RARITY_SKILLS = IRaritySkills(0x51C0B29A1d84611373BA301706c6B4b72283C80F);
// TODO: what else? Names?
uint immutable RARITY_CRAFTING_1_ID;
constructor() {
RARITY_CRAFTING_1_ID = RARITY_CRAFTING_1.SUMMMONER_ID();
}
function _isApprovedOrOwner(address spender, uint256 summoner) internal view returns (bool) {
// require(_exists(summoner), "ERC721: operator query for nonexistent token");
address summoner_owner = RARITY.ownerOf(summoner);
return (
spender == summoner_owner
|| RARITY.getApproved(summoner) == spender
|| RARITY.isApprovedForAll(summoner_owner, spender)
);
}
function requireAuthSummoner(uint summoner) internal view {
// TODO: if delgatecall, allow?
if (!_isApprovedOrOwner(msg.sender, summoner)) {
revert NotApprovedOrOwner(msg.sender, summoner);
}
}
}