{"compiler":{"version":"0.8.17+commit.8df45f5f"},"language":"Solidity","output":{"abi":[{"inputs":[{"internalType":"contract IERC20","name":"acceptedToken","type":"address"},{"internalType":"address","name":"_admin","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"bytes32","name":"role","type":"bytes32"},{"indexed":true,"internalType":"bytes32","name":"previousAdminRole","type":"bytes32"},{"indexed":true,"internalType":"bytes32","name":"newAdminRole","type":"bytes32"}],"name":"RoleAdminChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"bytes32","name":"role","type":"bytes32"},{"indexed":true,"internalType":"address","name":"account","type":"address"},{"indexed":true,"internalType":"address","name":"sender","type":"address"}],"name":"RoleGranted","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"bytes32","name":"role","type":"bytes32"},{"indexed":true,"internalType":"address","name":"account","type":"address"},{"indexed":true,"internalType":"address","name":"sender","type":"address"}],"name":"RoleRevoked","type":"event"},{"inputs":[],"name":"DEFAULT_ADMIN_ROLE","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes32","name":"role","type":"bytes32"}],"name":"getRoleAdmin","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes32","name":"role","type":"bytes32"},{"internalType":"uint256","name":"index","type":"uint256"}],"name":"getRoleMember","outputs":[{"internalType":"address","name":"member","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes32","name":"role","type":"bytes32"}],"name":"getRoleMemberCount","outputs":[{"internalType":"uint256","name":"count","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getTokenBalance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes32","name":"role","type":"bytes32"},{"internalType":"address","name":"account","type":"address"}],"name":"grantRole","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes32","name":"role","type":"bytes32"},{"internalType":"address","name":"account","type":"address"}],"name":"hasRole","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes32","name":"role","type":"bytes32"},{"internalType":"address","name":"account","type":"address"}],"name":"hasRoleWithSwitch","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes[]","name":"data","type":"bytes[]"}],"name":"multicall","outputs":[{"internalType":"bytes[]","name":"results","type":"bytes[]"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"receiveToken","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes32","name":"role","type":"bytes32"},{"internalType":"address","name":"account","type":"address"}],"name":"renounceRole","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes32","name":"role","type":"bytes32"},{"internalType":"address","name":"account","type":"address"}],"name":"revokeRole","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_address","type":"address"}],"name":"setRole","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferToken","outputs":[],"stateMutability":"nonpayable","type":"function"}],"devdoc":{"details":"Contract to manage the rewards tokens accepted and transferred in the system.","kind":"dev","methods":{"constructor":{"details":"Initializes the contract by setting the acceptedToken and granting the DEFAULT_ADMIN_ROLE to the deployer.","params":{"acceptedToken":"The token that will be accepted and transferred as reward."}},"getRoleAdmin(bytes32)":{"details":"See {grantRole} and {revokeRole}.                  To change a role's admin, use {_setRoleAdmin}.","params":{"role":"keccak256 hash of the role. e.g. keccak256(\"TRANSFER_ROLE\")"}},"getRoleMember(bytes32,uint256)":{"details":"Returns `member` who has `role`, at `index` of role-members list.                  See struct {RoleMembers}, and mapping {roleMembers}","params":{"index":"Index in list of current members for the role.","role":"keccak256 hash of the role. e.g. keccak256(\"TRANSFER_ROLE\")"},"returns":{"member":" Address of account that has `role`"}},"getRoleMemberCount(bytes32)":{"details":"Returns `count` of accounts that have `role`.                  See struct {RoleMembers}, and mapping {roleMembers}","params":{"role":"keccak256 hash of the role. e.g. keccak256(\"TRANSFER_ROLE\")"},"returns":{"count":"  Total number of accounts that have `role`"}},"getTokenBalance()":{"details":"Returns the balance of the acceptedToken held in the contract.","returns":{"_0":"The balance of the acceptedToken."}},"grantRole(bytes32,address)":{"details":"Caller must have admin role for the `role`.                  Emits {RoleGranted Event}.","params":{"account":"Address of the account to which the role is being granted.","role":"keccak256 hash of the role. e.g. keccak256(\"TRANSFER_ROLE\")"}},"hasRole(bytes32,address)":{"details":"Returns `true` if `account` has been granted `role`.","params":{"account":"Address of the account for which the role is being checked.","role":"keccak256 hash of the role. e.g. keccak256(\"TRANSFER_ROLE\")"}},"hasRoleWithSwitch(bytes32,address)":{"details":"Returns `true` if `account` has been granted `role`.                  Role restrictions can be swtiched on and off:                      - If address(0) has ROLE, then the ROLE restrictions                        don't apply.                      - If address(0) does not have ROLE, then the ROLE                        restrictions will apply.","params":{"account":"Address of the account for which the role is being checked.","role":"keccak256 hash of the role. e.g. keccak256(\"TRANSFER_ROLE\")"}},"multicall(bytes[])":{"details":"Receives and executes a batch of function calls on this contract.","params":{"data":"The bytes data that makes up the batch of function calls to execute."},"returns":{"results":"The bytes data that makes up the result of the batch of function calls executed."}},"receiveToken(uint256)":{"details":"Allows anyone to deposit tokens into the contract as a reward.","params":{"amount":"The amount of tokens to be transferred."}},"renounceRole(bytes32,address)":{"details":"Caller must have the `role`, with caller being the same as `account`.                  Emits {RoleRevoked Event}.","params":{"account":"Address of the account from which the role is being revoked.","role":"keccak256 hash of the role. e.g. keccak256(\"TRANSFER_ROLE\")"}},"revokeRole(bytes32,address)":{"details":"Caller must have admin role for the `role`.                  Emits {RoleRevoked Event}.","params":{"account":"Address of the account from which the role is being revoked.","role":"keccak256 hash of the role. e.g. keccak256(\"TRANSFER_ROLE\")"}},"setRole(address)":{"details":"Allows the DEFAULT_ADMIN_ROLE to set a new address to the DEFAULT_ADMIN_ROLE.","params":{"_address":"The address to which the DEFAULT_ADMIN_ROLE will be granted."}},"transferToken(address,uint256)":{"details":"Allows the DEFAULT_ADMIN_ROLE to transfer tokens as rewards to a recipient.","params":{"amount":"The amount of tokens to be transferred.","recipient":"The address to which the tokens will be transferred."}}},"title":"NTSRewardVault","version":1},"userdoc":{"kind":"user","methods":{"getRoleAdmin(bytes32)":{"notice":"Returns the admin role that controls the specified role."},"getRoleMember(bytes32,uint256)":{"notice":"Returns the role-member from a list of members for a role,                  at a given index."},"getRoleMemberCount(bytes32)":{"notice":"Returns total number of accounts that have a role."},"grantRole(bytes32,address)":{"notice":"Grants a role to an account, if not previously granted."},"hasRole(bytes32,address)":{"notice":"Checks whether an account has a particular role."},"hasRoleWithSwitch(bytes32,address)":{"notice":"Checks whether an account has a particular role;                  role restrictions can be swtiched on and off."},"multicall(bytes[])":{"notice":"Receives and executes a batch of function calls on this contract."},"renounceRole(bytes32,address)":{"notice":"Revokes role from the account."},"revokeRole(bytes32,address)":{"notice":"Revokes role from an account."}},"version":1}},"settings":{"compilationTarget":{"contracts/module/RewardVault.sol":"NTSRewardVault"},"evmVersion":"london","libraries":{},"metadata":{"bytecodeHash":"ipfs"},"optimizer":{"enabled":true,"runs":200},"remappings":[]},"sources":{"@openzeppelin/contracts/token/ERC20/IERC20.sol":{"keccak256":"0x9750c6b834f7b43000631af5cc30001c5f547b3ceb3635488f140f60e897ea6b","license":"MIT","urls":["bzz-raw://5a7d5b1ef5d8d5889ad2ed89d8619c09383b80b72ab226e0fe7bde1636481e34","dweb:/ipfs/QmebXWgtEfumQGBdVeM6c71McLixYXQP5Bk6kKXuoY4Bmr"]},"@openzeppelin/contracts/token/ERC20/extensions/draft-IERC20Permit.sol":{"keccak256":"0xf41ca991f30855bf80ffd11e9347856a517b977f0a6c2d52e6421a99b7840329","license":"MIT","urls":["bzz-raw://b2717fd2bdac99daa960a6de500754ea1b932093c946388c381da48658234b95","dweb:/ipfs/QmP6QVMn6UeA3ByahyJbYQr5M6coHKBKsf3ySZSfbyA8R7"]},"@openzeppelin/contracts/token/ERC20/utils/SafeERC20.sol":{"keccak256":"0x9b72f93be69ca894d8492c244259615c4a742afc8d63720dbc8bb81087d9b238","license":"MIT","urls":["bzz-raw://f5a7b96e511be78d5cdf635c784e6ab8cdd38625bb8cafb8a80914a1c89cf0f6","dweb:/ipfs/QmVzTCwJxQAkjRQHboT5QrvsVJGWQHgfEjeTbvyxoKBrds"]},"@openzeppelin/contracts/utils/Address.sol":{"keccak256":"0xf96f969e24029d43d0df89e59d365f277021dac62b48e1c1e3ebe0acdd7f1ca1","license":"MIT","urls":["bzz-raw://ec772b45a624be516f1c81970caa8a2e144301e9d0921cbc1a2789fef39a1269","dweb:/ipfs/QmNyjwxCrGhQMyzLD93oUobJXVe9ceJvRvfXwbEtuxPiEj"]},"@thirdweb-dev/contracts/extension/Multicall.sol":{"keccak256":"0x737a71c74307fa360863550d64bbaef599bbcb47829b19c3743ed1ff22b9af55","license":"Apache 2.0","urls":["bzz-raw://7e82a79ee183dffa3ec01faac0907e04d72a185e55b7c24bff8e8e952b05f4c2","dweb:/ipfs/QmQ9neZqpcgJtGgm84FBzMqFntZ1Sk1KFTWhjCMq8vnKDg"]},"@thirdweb-dev/contracts/extension/Permissions.sol":{"keccak256":"0xe7e18181f2d2c8bae4afc7ee69ce1d547e7aa583182e8e0853ca33c49a28c04d","license":"Apache-2.0","urls":["bzz-raw://75d5f5a9356c290e398a5dd05914b59c3d09e6fedde2da80b6f1012aedf323f8","dweb:/ipfs/QmNrrf8Uyq33XBsE2NqVTW6HVX3XixFTjCG8KGbGxdEE84"]},"@thirdweb-dev/contracts/extension/PermissionsEnumerable.sol":{"keccak256":"0x434a6ffc16ddc437ffb37b8fbe4c9696385252f15a617c4606b8c5e10561caf3","license":"Apache-2.0","urls":["bzz-raw://1a9d4dac4bf2ae3c3c086af1956dc25e8b149b0914125e660cc0648791c247cb","dweb:/ipfs/QmTMEggPdBea1JCamsShwRf3en2FgVTXNTPJ2isFtBk4Kk"]},"@thirdweb-dev/contracts/extension/interface/IMulticall.sol":{"keccak256":"0xe2bbd37b8fdb9cc8b933e598512a068ebb214b3f5abc2bc634916def55be4ef3","license":"MIT","urls":["bzz-raw://012352099c262348ac755a53b082af520babc6c66dc5f1251fc23609728340ca","dweb:/ipfs/QmcXEgzQ53jdJX5ZNy8zivvUjDq7J8WTnR1yAiwTpkQ2ar"]},"@thirdweb-dev/contracts/extension/interface/IPermissions.sol":{"keccak256":"0xc0cd1f87bac474a06f85e2b341b9b57662aee957fc24180d42c872481c2f2ae3","license":"Apache-2.0","urls":["bzz-raw://7dec3eed451d63867531d693f0be3279fa2c9aef3130f0826c3520c06820fa5d","dweb:/ipfs/QmTYANrcPdd9SCe99DWsKJ19evNRQKQGZeoS1Keew4M2cS"]},"@thirdweb-dev/contracts/extension/interface/IPermissionsEnumerable.sol":{"keccak256":"0x2e742c18a4481bad41d56424cd16c52def2fb415f69e5fb5f67d8d979300ff95","license":"Apache-2.0","urls":["bzz-raw://d9be33bb865e3e82aca540a3e38cbc2bf2e431f9d1bf39c50d6c757e7b7bf3ee","dweb:/ipfs/Qmdad1Xqj5SQ44Bk4bwD2uA36XnGHtqnVYSomKZQvnUBVG"]},"@thirdweb-dev/contracts/lib/TWAddress.sol":{"keccak256":"0x460f032cf3bf43d586e126ab2ec8be4335767f497ccb699741546a1cfba94a7e","license":"Apache 2.0","urls":["bzz-raw://28fcbf6dde6c2eeb9864f6ec6f21dcc81ec426877debf4b912f2f3bc5b0fc91e","dweb:/ipfs/QmS1SHrZDfefX8EE7DdvszTY6VPCHydf4HM7NKJ2gP72e6"]},"@thirdweb-dev/contracts/lib/TWStrings.sol":{"keccak256":"0xef7e9954d888f99baffc10db1d9bf6a2beb66c842d81dea90352ddded22cbbf8","license":"Apache 2.0","urls":["bzz-raw://832415134684f5413f9d0f3f5536aa30848690cfe54769f7730a3807438f3bf9","dweb:/ipfs/QmduTiUdtsnyJVMXpdomohEWDVg46aZhnS9uTURu4x1NYt"]},"contracts/module/RewardVault.sol":{"keccak256":"0xa29c64ed6b088d9d2ab353ac0fa40e7f1f3211166da381b8cd2482fa4c40ffe5","license":"UNLICENSED","urls":["bzz-raw://7b4a77729cc27e01bdf79ceb92417f56796df3fe7e07e2e9b44cc0f862606af0","dweb:/ipfs/QmP3JZtnEuviLr6im2q86k8zs3qYd3fLWVXgKztb6gGC3t"]}},"version":1}