- Contract name:
- RentResolver
- Optimization enabled
- true
- Compiler version
- v0.8.17+commit.8df45f5f
- Optimization runs
- 200
- EVM Version
- london
- Verified at
- 2024-09-05T07:40:18.134547Z
Constructor Arguments
0x000000000000000000000000ea6a031bbaf2eadb5ecfd32b8aa39e9a95659e46000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000c0000000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000200000000000000000000000099ebd96615a50933c69b435f8a59539caff95d7c000000000000000000000000750449925085a335b58b6706e0cf17039caa606f
Arg [0] (address) : 0xea6a031bbaf2eadb5ecfd32b8aa39e9a95659e46
Arg [1] (uint8[]) : [1, 2]
Arg [2] (address[]) : [0x99ebd96615a50933c69b435f8a59539caff95d7c, 0x750449925085a335b58b6706e0cf17039caa606f]
project:/contracts/rent/RentResolver.sol
// SPDX-License-Identifier: PROPRIERTARY // For development, we used some code from open source with an MIT license // https://github.com/re-nft/legacy-contracts pragma solidity =0.8.17; import "./interfaces/IRentResolver.sol"; import "../utils/GuardExtension.sol"; error InvalidInput(); error PtAlreadySet(); contract RentResolver is IRentResolver, GuardExtension { mapping(uint8 => address) private _addresses; constructor( address rights_, uint8[] memory pts_, address[] memory addresses_ ) GuardExtension(rights_) { if (pts_.length != addresses_.length) { revert InvalidInput(); } for (uint i; i < pts_.length; ++i) { _setPaymentToken(pts_[i], addresses_[i]); } } function getPaymentToken(uint8 pt_) external view override returns (address tokenAddress) { tokenAddress = _addresses[pt_]; } function setPaymentToken(uint8 pt_, address v_) external override haveRights { _setPaymentToken(pt_, v_); } function _setPaymentToken(uint8 pt_, address v_) private { if (pt_ == 0) { revert InvalidInput(); } if (_addresses[pt_] != address(0)) { revert PtAlreadySet(); } _addresses[pt_] = v_; emit PaymentTokenAdded(pt_, v_); } }
project:/contracts/utils/GuardExtension.sol
// SPDX-License-Identifier: PROPRIERTARY // Author: Ilya A. Shlyakhovoy // Email: is@unicsoft.com pragma solidity 0.8.17; import "./interfaces/IRights.sol"; import "../utils/Guard.sol"; abstract contract GuardExtension is Guard { IRights private _rightsContract; string private constant SAME_VALUE = "Guard: same value"; string private constant ZERO_ADDRESS = "Guard: zero address"; constructor(address rights_) { require(rights_ != address(0), ZERO_ADDRESS); _rightsContract = IRights(rights_); } function _rights() internal view virtual override returns (IRights) { return _rightsContract; } function setRights(address rights_) external virtual override haveRights { require(address(_rightsContract) != rights_, SAME_VALUE); require(rights_ != address(0), ZERO_ADDRESS); _rightsContract = IRights(rights_); } }
project:/contracts/rent/interfaces/IRentResolver.sol
// SPDX-License-Identifier: PROPRIERTARY pragma solidity =0.8.17; interface IRentResolver { event PaymentTokenAdded(uint8 pt, address tokenAddress); function getPaymentToken(uint8 pt_) external view returns (address); function setPaymentToken(uint8 pt_, address v_) external; }
project:/contracts/utils/Guard.sol
// SPDX-License-Identifier: PROPRIERTARY // Author: Ilya A. Shlyakhovoy // Email: is@unicsoft.com pragma solidity 0.8.17; import "./interfaces/IRights.sol"; abstract contract Guard { string constant NO_RIGHTS = "Guard: No rights"; /// @notice only if person with rights calls the contract modifier haveRights() { require(_rights().haveRights(address(this), msg.sender), NO_RIGHTS); _; } /// @notice only if someone with rights calls the contract modifier haveRightsPerson(address who_) { require(_rights().haveRights(address(this), who_), NO_RIGHTS); _; } /// @notice only if who with rights calls the target function modifier haveRightsExt(address target_, address who_) { require(_rights().haveRights(target_, who_), NO_RIGHTS); _; } function _rights() internal view virtual returns (IRights); function setRights(address rights_) external virtual; }
project:/contracts/utils/interfaces/IRights.sol
// SPDX-License-Identifier: PROPRIERTARY // Author: Ilya A. Shlyakhovoy // Email: is@unicsoft.com pragma solidity 0.8.17; interface IRights { event AdminAdded(address indexed admin); event AdminDefined(address indexed admin, address indexed contractHash); event AdminRemoved(address indexed admin); event AdminCleared(address indexed admin, address indexed contractHash); /** @notice Add a new admin for the Rigths contract @param admin_ New admin address */ function addAdmin(address admin_) external; /** @notice Add a new admin for the any other contract @param contract_ Contract address packed into address @param admin_ New admin address */ function addAdmin(address contract_, address admin_) external; /** @notice Remove the existing admin from the Rigths contract @param admin_ Admin address */ function removeAdmin(address admin_) external; /** @notice Remove the existing admin from the specified contract @param contract_ Contract address packed into address @param admin_ Admin address */ function removeAdmin(address contract_, address admin_) external; /** @notice Get the rights for the contract for the caller @param contract_ Contract address packed into address @return have rights or not */ function haveRights(address contract_) external view returns (bool); /** @notice Get the rights for the contract @param contract_ Contract address packed into address @param admin_ Admin address @return have rights or not */ function haveRights(address contract_, address admin_) external view returns (bool); }
Compiler Settings
{"viaIR":true,"outputSelection":{"*":{"*":["abi","evm.bytecode","evm.deployedBytecode","evm.methodIdentifiers"]}},"optimizer":{"runs":200,"enabled":true},"libraries":{},"evmVersion":"london"}
Contract ABI
[{"type":"constructor","inputs":[{"type":"address","name":"rights_","internalType":"address"},{"type":"uint8[]","name":"pts_","internalType":"uint8[]"},{"type":"address[]","name":"addresses_","internalType":"address[]"}]},{"type":"function","stateMutability":"view","outputs":[{"type":"address","name":"tokenAddress","internalType":"address"}],"name":"getPaymentToken","inputs":[{"type":"uint8","name":"pt_","internalType":"uint8"}]},{"type":"function","stateMutability":"nonpayable","outputs":[],"name":"setPaymentToken","inputs":[{"type":"uint8","name":"pt_","internalType":"uint8"},{"type":"address","name":"v_","internalType":"address"}]},{"type":"function","stateMutability":"nonpayable","outputs":[],"name":"setRights","inputs":[{"type":"address","name":"rights_","internalType":"address"}]},{"type":"event","name":"PaymentTokenAdded","inputs":[{"type":"uint8","name":"pt","indexed":false},{"type":"address","name":"tokenAddress","indexed":false}],"anonymous":false},{"type":"error","name":"InvalidInput","inputs":[]},{"type":"error","name":"PtAlreadySet","inputs":[]}]
Contract Creation Code
0x604060808152346102b75761079d8038038061001a816102d5565b92833981016060828203126102b757610032826102fa565b92602091828401519260018060401b03938481116102b75785019482601f870112156102b75785519561006c6100678861030e565b6102d5565b96838089838152019160051b830101918583116102b7578401905b8282106102bc5750505083810151908582116102b757019180601f840112156102b75782516100b86100678261030e565b93838086848152019260051b8201019283116102b75783809101915b83831061029f57505084516001600160a01b03988916969092508286019150811182821017610289578452601381527f47756172643a207a65726f20616464726573730000000000000000000000000082820152841561022d575060018060a01b03199060009482865416178555855183510361021c57845b865181101561020e5760ff6101628289610325565b51168861016f8387610325565b511681156101fd5781885260018085528a888a2054166101ec57828952845286882080548616821790558651918252818401527f89b954abec8c6073400b74ce5aab0c055211fdb308b8ebd29cab9a10b66daa06908690a160001981146101d85760010161014d565b634e487b7160e01b86526011600452602486fd5b87516304a657bf60e51b8152600490fd5b865163b4fa3fb360e01b8152600490fd5b845161044d90816103508239f35b835163b4fa3fb360e01b8152600490fd5b8351809262461bcd60e51b82528060048301528251908160248401526000935b828510610270575050604492506000838284010152601f80199101168101030190fd5b848101820151868601604401529381019385935061024d565b634e487b7160e01b600052604160045260246000fd5b81906102aa846102fa565b81520191019083906100d4565b600080fd5b815160ff811681036102b7578152908401908401610087565b6040519190601f01601f191682016001600160401b0381118382101761028957604052565b51906001600160a01b03821682036102b757565b6001600160401b0381116102895760051b60200190565b80518210156103395760209160051b010190565b634e487b7160e01b600052603260045260246000fdfe608060408181526004918236101561001657600080fd5b600092833560e01c918263321c6aea146101dd5750816337d2aae914610084575063c6ee427f1461004657600080fd5b346100805760203660031901126100805760209160ff61006461032f565b168152600183528190205490516001600160a01b039091168152f35b5080fd5b9050346101d9576020806003193601126101d5576001600160a01b038235818116949193908590036101d15785548251630f6266a760e01b81523092810192835233602084015290948516918490829081906040010381855afa9081156101c7577247756172643a207a65726f206164647265737360681b9261013f61018a969593610170938b9161019a575b5084519061011e82610344565b601082526f47756172643a204e6f2072696768747360801b888301526103b0565b8783519161014c83610344565b601183527047756172643a2073616d652076616c756560781b8784015214156103b0565b519161017b83610344565b601383528201528315156103b0565b6001600160a01b03191617815580f35b6101ba9150873d89116101c0575b6101b28183610376565b810190610398565b38610111565b503d6101a8565b83513d89823e3d90fd5b8580fd5b8380fd5b8280fd5b838591346101d957816003193601126101d9576101f861032f565b6001600160a01b039160243583811692908390036101d1578554630f6266a760e01b835230888401908152336020828101919091529391849183918816908290819060400103915afa9081156103255760ff9291610285918991610308575b5087519061026482610344565b601082526f47756172643a204e6f2072696768747360801b868301526103b0565b169283156102f8578386526001825284862054166102e8578285526001815283852080546001600160a01b0319168317905583519283528201529192507f89b954abec8c6073400b74ce5aab0c055211fdb308b8ebd29cab9a10b66daa0691a180f35b83516304a657bf60e51b81528690fd5b845163b4fa3fb360e01b81528790fd5b61031f9150853d87116101c0576101b28183610376565b8a610257565b86513d89823e3d90fd5b6004359060ff8216820361033f57565b600080fd5b6040810190811067ffffffffffffffff82111761036057604052565b634e487b7160e01b600052604160045260246000fd5b90601f8019910116810190811067ffffffffffffffff82111761036057604052565b9081602091031261033f5751801515810361033f5790565b156103b85750565b6040519062461bcd60e51b82528160208060048301528251908160248401526000935b8285106103fe575050604492506000838284010152601f80199101168101030190fd5b84810182015186860160440152938101938593506103db56fea26469706673582212208b2dea165610b93242fb2be5dd6f7601f2e8da772381d9b8b844a25ddf20aabc64736f6c63430008110033000000000000000000000000ea6a031bbaf2eadb5ecfd32b8aa39e9a95659e46000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000c0000000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000200000000000000000000000099ebd96615a50933c69b435f8a59539caff95d7c000000000000000000000000750449925085a335b58b6706e0cf17039caa606f
Deployed ByteCode
0x608060408181526004918236101561001657600080fd5b600092833560e01c918263321c6aea146101dd5750816337d2aae914610084575063c6ee427f1461004657600080fd5b346100805760203660031901126100805760209160ff61006461032f565b168152600183528190205490516001600160a01b039091168152f35b5080fd5b9050346101d9576020806003193601126101d5576001600160a01b038235818116949193908590036101d15785548251630f6266a760e01b81523092810192835233602084015290948516918490829081906040010381855afa9081156101c7577247756172643a207a65726f206164647265737360681b9261013f61018a969593610170938b9161019a575b5084519061011e82610344565b601082526f47756172643a204e6f2072696768747360801b888301526103b0565b8783519161014c83610344565b601183527047756172643a2073616d652076616c756560781b8784015214156103b0565b519161017b83610344565b601383528201528315156103b0565b6001600160a01b03191617815580f35b6101ba9150873d89116101c0575b6101b28183610376565b810190610398565b38610111565b503d6101a8565b83513d89823e3d90fd5b8580fd5b8380fd5b8280fd5b838591346101d957816003193601126101d9576101f861032f565b6001600160a01b039160243583811692908390036101d1578554630f6266a760e01b835230888401908152336020828101919091529391849183918816908290819060400103915afa9081156103255760ff9291610285918991610308575b5087519061026482610344565b601082526f47756172643a204e6f2072696768747360801b868301526103b0565b169283156102f8578386526001825284862054166102e8578285526001815283852080546001600160a01b0319168317905583519283528201529192507f89b954abec8c6073400b74ce5aab0c055211fdb308b8ebd29cab9a10b66daa0691a180f35b83516304a657bf60e51b81528690fd5b845163b4fa3fb360e01b81528790fd5b61031f9150853d87116101c0576101b28183610376565b8a610257565b86513d89823e3d90fd5b6004359060ff8216820361033f57565b600080fd5b6040810190811067ffffffffffffffff82111761036057604052565b634e487b7160e01b600052604160045260246000fd5b90601f8019910116810190811067ffffffffffffffff82111761036057604052565b9081602091031261033f5751801515810361033f5790565b156103b85750565b6040519062461bcd60e51b82528160208060048301528251908160248401526000935b8285106103fe575050604492506000838284010152601f80199101168101030190fd5b84810182015186860160440152938101938593506103db56fea26469706673582212208b2dea165610b93242fb2be5dd6f7601f2e8da772381d9b8b844a25ddf20aabc64736f6c63430008110033