diff --git a/.env.30 b/.env.30 new file mode 100644 index 00000000..bf32d58b --- /dev/null +++ b/.env.30 @@ -0,0 +1,23 @@ +# Required +export DEPLOYMENT_CONTEXT="mainnet" +export RPC_URL="https://public-node.rsk.co" +export NO_DD=true +export GAS_PRICE=66000000 + +# RIF Token +export REWARD_TOKEN_ADDRESS="0x2acc95758f8b5f583470ba265eb685a8f45fc9d5" +# STRIF Token +export STAKING_TOKEN_ADDRESS="0x5db91e24bd32059584bbdb831a901f1199f3d459" +# Governor configured in https://github.com/RootstockCollective/dao-frontend/blob/develop/.env.mainnet +export GOVERNOR_ADDRESS="0x71ac6ff904a17f50f2c07b693376ccc1c92627f0" + +export KYC_APPROVER_ADDRESS="0x4736535f8c9a2571d18410133fc0d3dde3ae44ce" +export FOUNDATION_TREASURY_ADDRESS="0x267a6073637408b6A1d34d685ff5720A0CbCbD9d" +export UPGRADER_ADDRESS="0x3e4a679e27c2ff3381d1140d41eefb83c4a9d1db" + +export REWARD_PERCENTAGE_COOLDOWN=604800 # 7 days +export CYCLE_DURATION=1209600 # 14 days +export DISTRIBUTION_DURATION=3600 # 1 hour +export CYCLE_START_OFFSET=0 + +export CHAIN_ID=30 diff --git a/.env.31.qa b/.env.31.qa index 6913eb3a..f83165ab 100644 --- a/.env.31.qa +++ b/.env.31.qa @@ -1,18 +1,26 @@ # Required +# FOR QA, we deployed the contracts with the distribution window set to 10 minutes export DEPLOYMENT_CONTEXT="testnet_qa" export RPC_URL="https://public-node.testnet.rsk.co" -export REWARD_TOKEN_ADDRESS="0x19F64674D8A5B4E652319F5e239eFd3bc969A1fE" +# QA-controlled address export GOVERNOR_ADDRESS="0x5e3edE6781F811cb3fe03F9A687Bd7FFF8Dc19e7" -export KYC_APPROVER_ADDRESS="0xF4695CFF1E7dD0201b71a8A4F01D0450f89cC46C" +# QA-controlled address +export FOUNDATION_TREASURY_ADDRESS="0x21Fd219C937F7501d867CE660c3Bf605c7Fa629e" +# QA-controlled address +export KYC_APPROVER_ADDRESS="0x5e3edE6781F811cb3fe03F9A687Bd7FFF8Dc19e7" + +export REWARD_TOKEN_ADDRESS="0x19F64674D8A5B4E652319F5e239eFd3bc969A1fE" +export STAKING_TOKEN_ADDRESS="0xC4b091d97AD25ceA5922f09fe80711B7ACBbb16f" +export REWARD_PERCENTAGE_COOLDOWN=300 # 5 minutes +export CYCLE_DURATION=1260 # 21 minutes +export CYCLE_START_OFFSET=0 + export NO_DD=true export GAS_PRICE=66000000 -export STAKING_TOKEN_ADDRESS="0x14f6504A7ca4e574868cf8b49e85187d3Da9FA71" -export FOUNDATION_TREASURY_ADDRESS="0x14f6504A7ca4e574868cf8b49e85187d3Da9FA74" -export UPGRADER_ADDRESS="0x14f6504A7ca4e574868cf8b49e85187d3Da9FA74" -export REWARD_PERCENTAGE_COOLDOWN=1209600 #2 weeks -export CYCLE_DURATION=604800 #1 weeks -export DISTRIBUTION_DURATION=3600 #1 hour -export CYCLE_START_OFFSET=0 +export UPGRADER_ADDRESS="0x5e3edE6781F811cb3fe03F9A687Bd7FFF8Dc19e7" +export DISTRIBUTION_DURATION=120 #10 mins + +export CHAIN_ID=31 diff --git a/.env.31.qa.dapp b/.env.31.qa.dapp index 126b2b9e..7048c452 100644 --- a/.env.31.qa.dapp +++ b/.env.31.qa.dapp @@ -1,16 +1,22 @@ # Required +# FOR QA, we deployed the contracts with the distribution window set to 10 minutes export DEPLOYMENT_CONTEXT="testnet_qa_dapp" export RPC_URL="https://public-node.testnet.rsk.co" -## RIF Token -export REWARD_TOKEN_ADDRESS="0x19F64674D8A5B4E652319F5e239eFd3bc969A1fE" -## Governor configured in the dapp QA env +## Governor from the DAO dev env export GOVERNOR_ADDRESS="0xB1A39B8f57A55d1429324EEb1564122806eb297F" -## QA +# QA-controlled address +export FOUNDATION_TREASURY_ADDRESS="0x21Fd219C937F7501d867CE660c3Bf605c7Fa629e" +# QA-controlled address export KYC_APPROVER_ADDRESS="0x5e3edE6781F811cb3fe03F9A687Bd7FFF8Dc19e7" -export REWARD_PERCENTAGE_COOLDOWN=1209600 #2 weeks -export CYCLE_DURATION=604800 #1 weeks + +export REWARD_TOKEN_ADDRESS="0x19F64674D8A5B4E652319F5e239eFd3bc969A1fE" +export STAKING_TOKEN_ADDRESS="0xC4b091d97AD25ceA5922f09fe80711B7ACBbb16f" +export UPGRADER_ADDRESS="0x5e3edE6781F811cb3fe03F9A687Bd7FFF8Dc19e7" +export REWARD_PERCENTAGE_COOLDOWN=120 # 5 minutes +export CYCLE_DURATION=240 # 21 minutes export CYCLE_START_OFFSET=0 -export DISTRIBUTION_DURATION=3600 #1 hour +export DISTRIBUTION_DURATION=120 #10 mins export NO_DD=true export GAS_PRICE=66000000 + export CHAIN_ID=31 \ No newline at end of file diff --git a/.solhint.test.json b/.solhint.test.json index dbcbc156..31aff6ed 100644 --- a/.solhint.test.json +++ b/.solhint.test.json @@ -14,6 +14,8 @@ "bim/private-vars-leading-underscore-lib": "error", "bim/func-return-param-name-trailing-underscore": "error", "func-name-mixedcase": "off", - "foundry-test-functions": ["warn", ["setUp"]] + "foundry-test-functions": ["warn", ["setUp"]], + "no-empty-blocks": "off", + "one-contract-per-file": "off" } } diff --git a/README.md b/README.md index 84ca3ba6..f69b9b2b 100644 --- a/README.md +++ b/README.md @@ -32,7 +32,8 @@ The following tools are required to be installed: - [jq](https://jqlang.github.io/jq/download/) - Again, this is packaged to a variety of OSs, but if you don't have it follow the link to install it for your system -> [!IMPORTANT] Please make sure to install foundry using the branch `f625d0fa7c51e65b4bf1e8f7931cd1c6e2e285e9`. By using +> [!IMPORTANT] +> Please make sure to install foundry using the branch `f625d0fa7c51e65b4bf1e8f7931cd1c6e2e285e9`. By using > the latest version we experienced the following error on RSKj: > `... deserialization error: missing field ``effectiveGasPrice`` ...` @@ -59,7 +60,8 @@ cd collective-rewards-sc bun install # install Solhint, Prettier, Hardhat and other Node.js deps ``` -> [!WARNING] `.env.` could be public, don't put your private key or mnemonic there. Use `.env` for that. +> [!WARNING] +> `.env.` could be public, don't put your private key or mnemonic there. Use `.env` for that. ```sh cp .env.private.example .env @@ -81,10 +83,23 @@ direnv allow upon which you'll be asked to present the chain id of the network you wish to use. This will be written in a file called `.chain_id`. Alternatively, you can create this file yourself (content of which is only the chain id number itself) -before calling `direnv allow`. This will subsequently create environment variables (will unload after exiting the -directory; for more info see [direnv docs](https://direnv.net)) specified for given network inside the `.env.` -file. If such file does not exist you will be asked to create one for your network. This can be done by copying/moving -the `.env.example` file and changing the example vars to match your desired network. For example: +before calling `direnv allow`. This could be particularly useful when wishing to load configs for and to deploy to +multiple networks. + +```sh +echo "31" > .chain_id && direnv allow +``` + +Or non-persistently (deleted upon reboot) with: + +```sh +echo "31" > $(mktemp .chain_id) && direnv allow +``` + +This will subsequently create environment variables (will unload after exiting the directory; for more info see +[direnv docs](https://direnv.net)) specified for given network inside the `.env.` file. If such file does not +exist you will be asked to create one for your network. This can be done by copying/moving the `.env.example` file and +changing the example vars to match your desired network. For example: ```sh mv .env.example .env.42 @@ -111,7 +126,7 @@ export DEPLOYER_ADDRESS="0xCD2a3d9F938E13CD947Ec05AbC7FE734Df8DD826" export RPC_KEY="someRandomJWTToken" # if any ``` -after changing these, the shell should remind you to re-run `direnv allow`, again. Do it even if it doesn't. +Then re-run `direnv allow` to load the new env vars. If for development purposes you'd like to avoid using the deterministic deployer (CREATE2), so that your node doesn't need to be restarted every time you want to redeploy, you can use `NO_DD=true` environment variable to deploy using @@ -359,23 +374,25 @@ Generate coverage report: ### Reward token -TODO: +The reward token for the collective incentives program is `RIF`. ### Staking token -TODO: +The staking token is `stRIF`, where the token balance represents the backing power a backer has to vote for builders. ### Governor -TODO: +The Governor represents the DAO’s governance mechanism and is in charge of the community approval and de-whitelisting of +builders. ### KYC Approver -TODO: +The RoostockCollective Foundation requires builders to got through a KYC process and is in charge of submitting said +approval as well as revoking it if necessary. ### Foundation treasury -TODO: +The RoostockCollective Foundation is in charge of holding and distributing the rewards from the program. ## Acknowledgment diff --git a/deployments/mainnet/BackersManagerRootstockCollective.json b/deployments/mainnet/BackersManagerRootstockCollective.json new file mode 100644 index 00000000..1fd77968 --- /dev/null +++ b/deployments/mainnet/BackersManagerRootstockCollective.json @@ -0,0 +1,2897 @@ +{ + "abi": [ + { + "type": "constructor", + "inputs": [], + "stateMutability": "nonpayable" + }, + { + "type": "function", + "name": "UPGRADE_INTERFACE_VERSION", + "inputs": [], + "outputs": [ + { + "name": "", + "type": "string", + "internalType": "string" + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "activateBuilder", + "inputs": [ + { + "name": "builder_", + "type": "address", + "internalType": "address" + }, + { + "name": "rewardReceiver_", + "type": "address", + "internalType": "address" + }, + { + "name": "rewardPercentage_", + "type": "uint64", + "internalType": "uint64" + } + ], + "outputs": [], + "stateMutability": "nonpayable" + }, + { + "type": "function", + "name": "allocate", + "inputs": [ + { + "name": "gauge_", + "type": "address", + "internalType": "contract GaugeRootstockCollective" + }, + { + "name": "allocation_", + "type": "uint256", + "internalType": "uint256" + } + ], + "outputs": [], + "stateMutability": "nonpayable" + }, + { + "type": "function", + "name": "allocateBatch", + "inputs": [ + { + "name": "gauges_", + "type": "address[]", + "internalType": "contract GaugeRootstockCollective[]" + }, + { + "name": "allocations_", + "type": "uint256[]", + "internalType": "uint256[]" + } + ], + "outputs": [], + "stateMutability": "nonpayable" + }, + { + "type": "function", + "name": "approveBuilderKYC", + "inputs": [ + { + "name": "builder_", + "type": "address", + "internalType": "address" + } + ], + "outputs": [], + "stateMutability": "nonpayable" + }, + { + "type": "function", + "name": "approveBuilderRewardReceiverReplacement", + "inputs": [ + { + "name": "builder_", + "type": "address", + "internalType": "address" + }, + { + "name": "rewardReceiverReplacement_", + "type": "address", + "internalType": "address" + } + ], + "outputs": [], + "stateMutability": "nonpayable" + }, + { + "type": "function", + "name": "backerRewardPercentage", + "inputs": [ + { + "name": "builder", + "type": "address", + "internalType": "address" + } + ], + "outputs": [ + { + "name": "previous", + "type": "uint64", + "internalType": "uint64" + }, + { + "name": "next", + "type": "uint64", + "internalType": "uint64" + }, + { + "name": "cooldownEndTime", + "type": "uint128", + "internalType": "uint128" + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "backerTotalAllocation", + "inputs": [ + { + "name": "backer", + "type": "address", + "internalType": "address" + } + ], + "outputs": [ + { + "name": "allocation", + "type": "uint256", + "internalType": "uint256" + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "builderRewardReceiver", + "inputs": [ + { + "name": "builder", + "type": "address", + "internalType": "address" + } + ], + "outputs": [ + { + "name": "rewardReceiver", + "type": "address", + "internalType": "address" + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "builderRewardReceiverReplacement", + "inputs": [ + { + "name": "builder", + "type": "address", + "internalType": "address" + } + ], + "outputs": [ + { + "name": "rewardReceiverReplacement", + "type": "address", + "internalType": "address" + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "builderState", + "inputs": [ + { + "name": "builder", + "type": "address", + "internalType": "address" + } + ], + "outputs": [ + { + "name": "activated", + "type": "bool", + "internalType": "bool" + }, + { + "name": "kycApproved", + "type": "bool", + "internalType": "bool" + }, + { + "name": "communityApproved", + "type": "bool", + "internalType": "bool" + }, + { + "name": "paused", + "type": "bool", + "internalType": "bool" + }, + { + "name": "revoked", + "type": "bool", + "internalType": "bool" + }, + { + "name": "reserved", + "type": "bytes7", + "internalType": "bytes7" + }, + { + "name": "pausedReason", + "type": "bytes20", + "internalType": "bytes20" + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "builderToGauge", + "inputs": [ + { + "name": "builder", + "type": "address", + "internalType": "address" + } + ], + "outputs": [ + { + "name": "gauge", + "type": "address", + "internalType": "contract GaugeRootstockCollective" + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "canWithdraw", + "inputs": [ + { + "name": "targetAddress_", + "type": "address", + "internalType": "address" + }, + { + "name": "", + "type": "uint256", + "internalType": "uint256" + } + ], + "outputs": [ + { + "name": "", + "type": "bool", + "internalType": "bool" + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "cancelRewardReceiverReplacementRequest", + "inputs": [], + "outputs": [], + "stateMutability": "nonpayable" + }, + { + "type": "function", + "name": "claimBackerRewards", + "inputs": [ + { + "name": "gauges_", + "type": "address[]", + "internalType": "contract GaugeRootstockCollective[]" + } + ], + "outputs": [], + "stateMutability": "nonpayable" + }, + { + "type": "function", + "name": "claimBackerRewards", + "inputs": [ + { + "name": "rewardToken_", + "type": "address", + "internalType": "address" + }, + { + "name": "gauges_", + "type": "address[]", + "internalType": "contract GaugeRootstockCollective[]" + } + ], + "outputs": [], + "stateMutability": "nonpayable" + }, + { + "type": "function", + "name": "communityApproveBuilder", + "inputs": [ + { + "name": "builder_", + "type": "address", + "internalType": "address" + } + ], + "outputs": [ + { + "name": "gauge_", + "type": "address", + "internalType": "contract GaugeRootstockCollective" + } + ], + "stateMutability": "nonpayable" + }, + { + "type": "function", + "name": "cycleData", + "inputs": [], + "outputs": [ + { + "name": "previousDuration", + "type": "uint32", + "internalType": "uint32" + }, + { + "name": "nextDuration", + "type": "uint32", + "internalType": "uint32" + }, + { + "name": "previousStart", + "type": "uint64", + "internalType": "uint64" + }, + { + "name": "nextStart", + "type": "uint64", + "internalType": "uint64" + }, + { + "name": "offset", + "type": "uint24", + "internalType": "uint24" + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "cycleNext", + "inputs": [ + { + "name": "timestamp_", + "type": "uint256", + "internalType": "uint256" + } + ], + "outputs": [ + { + "name": "", + "type": "uint256", + "internalType": "uint256" + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "cycleStart", + "inputs": [ + { + "name": "timestamp_", + "type": "uint256", + "internalType": "uint256" + } + ], + "outputs": [ + { + "name": "", + "type": "uint256", + "internalType": "uint256" + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "dewhitelistBuilder", + "inputs": [ + { + "name": "builder_", + "type": "address", + "internalType": "address" + } + ], + "outputs": [], + "stateMutability": "nonpayable" + }, + { + "type": "function", + "name": "distribute", + "inputs": [], + "outputs": [ + { + "name": "finished_", + "type": "bool", + "internalType": "bool" + } + ], + "stateMutability": "nonpayable" + }, + { + "type": "function", + "name": "distributionDuration", + "inputs": [], + "outputs": [ + { + "name": "", + "type": "uint32", + "internalType": "uint32" + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "endDistributionWindow", + "inputs": [ + { + "name": "timestamp_", + "type": "uint256", + "internalType": "uint256" + } + ], + "outputs": [ + { + "name": "", + "type": "uint256", + "internalType": "uint256" + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "gaugeFactory", + "inputs": [], + "outputs": [ + { + "name": "", + "type": "address", + "internalType": "contract GaugeFactoryRootstockCollective" + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "gaugeToBuilder", + "inputs": [ + { + "name": "gauge", + "type": "address", + "internalType": "contract GaugeRootstockCollective" + } + ], + "outputs": [ + { + "name": "builder", + "type": "address", + "internalType": "address" + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "getCycleStartAndDuration", + "inputs": [], + "outputs": [ + { + "name": "", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "", + "type": "uint256", + "internalType": "uint256" + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "getGaugeAt", + "inputs": [ + { + "name": "index_", + "type": "uint256", + "internalType": "uint256" + } + ], + "outputs": [ + { + "name": "", + "type": "address", + "internalType": "address" + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "getGaugesLength", + "inputs": [], + "outputs": [ + { + "name": "", + "type": "uint256", + "internalType": "uint256" + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "getHaltedGaugeAt", + "inputs": [ + { + "name": "index_", + "type": "uint256", + "internalType": "uint256" + } + ], + "outputs": [ + { + "name": "", + "type": "address", + "internalType": "address" + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "getHaltedGaugesLength", + "inputs": [], + "outputs": [ + { + "name": "", + "type": "uint256", + "internalType": "uint256" + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "getRewardPercentageToApply", + "inputs": [ + { + "name": "builder_", + "type": "address", + "internalType": "address" + } + ], + "outputs": [ + { + "name": "", + "type": "uint64", + "internalType": "uint64" + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "governanceManager", + "inputs": [], + "outputs": [ + { + "name": "", + "type": "address", + "internalType": "contract IGovernanceManagerRootstockCollective" + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "haltedGaugeLastPeriodFinish", + "inputs": [ + { + "name": "gauge", + "type": "address", + "internalType": "contract GaugeRootstockCollective" + } + ], + "outputs": [ + { + "name": "lastPeriodFinish", + "type": "uint256", + "internalType": "uint256" + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "hasBuilderRewardReceiverPendingApproval", + "inputs": [ + { + "name": "builder_", + "type": "address", + "internalType": "address" + } + ], + "outputs": [ + { + "name": "", + "type": "bool", + "internalType": "bool" + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "indexLastGaugeDistributed", + "inputs": [], + "outputs": [ + { + "name": "", + "type": "uint256", + "internalType": "uint256" + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "initialize", + "inputs": [ + { + "name": "governanceManager_", + "type": "address", + "internalType": "contract IGovernanceManagerRootstockCollective" + }, + { + "name": "rewardToken_", + "type": "address", + "internalType": "address" + }, + { + "name": "stakingToken_", + "type": "address", + "internalType": "address" + }, + { + "name": "gaugeFactory_", + "type": "address", + "internalType": "address" + }, + { + "name": "rewardDistributor_", + "type": "address", + "internalType": "address" + }, + { + "name": "cycleDuration_", + "type": "uint32", + "internalType": "uint32" + }, + { + "name": "cycleStartOffset_", + "type": "uint24", + "internalType": "uint24" + }, + { + "name": "distributionDuration_", + "type": "uint32", + "internalType": "uint32" + }, + { + "name": "rewardPercentageCooldown_", + "type": "uint128", + "internalType": "uint128" + } + ], + "outputs": [], + "stateMutability": "nonpayable" + }, + { + "type": "function", + "name": "isBuilderOperational", + "inputs": [ + { + "name": "builder_", + "type": "address", + "internalType": "address" + } + ], + "outputs": [ + { + "name": "", + "type": "bool", + "internalType": "bool" + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "isBuilderPaused", + "inputs": [ + { + "name": "builder_", + "type": "address", + "internalType": "address" + } + ], + "outputs": [ + { + "name": "", + "type": "bool", + "internalType": "bool" + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "isGaugeHalted", + "inputs": [ + { + "name": "gauge_", + "type": "address", + "internalType": "address" + } + ], + "outputs": [ + { + "name": "", + "type": "bool", + "internalType": "bool" + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "isGaugeOperational", + "inputs": [ + { + "name": "gauge_", + "type": "address", + "internalType": "contract GaugeRootstockCollective" + } + ], + "outputs": [ + { + "name": "", + "type": "bool", + "internalType": "bool" + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "isGaugeRewarded", + "inputs": [ + { + "name": "gauge_", + "type": "address", + "internalType": "address" + } + ], + "outputs": [ + { + "name": "", + "type": "bool", + "internalType": "bool" + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "migrateBuilder", + "inputs": [ + { + "name": "builder_", + "type": "address", + "internalType": "address" + }, + { + "name": "rewardAddress_", + "type": "address", + "internalType": "address" + }, + { + "name": "rewardPercentage_", + "type": "uint64", + "internalType": "uint64" + } + ], + "outputs": [], + "stateMutability": "nonpayable" + }, + { + "type": "function", + "name": "notifyRewardAmount", + "inputs": [ + { + "name": "amount_", + "type": "uint256", + "internalType": "uint256" + } + ], + "outputs": [], + "stateMutability": "payable" + }, + { + "type": "function", + "name": "onDistributionPeriod", + "inputs": [], + "outputs": [ + { + "name": "", + "type": "bool", + "internalType": "bool" + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "pauseBuilder", + "inputs": [ + { + "name": "builder_", + "type": "address", + "internalType": "address" + }, + { + "name": "reason_", + "type": "bytes20", + "internalType": "bytes20" + } + ], + "outputs": [], + "stateMutability": "nonpayable" + }, + { + "type": "function", + "name": "periodFinish", + "inputs": [], + "outputs": [ + { + "name": "", + "type": "uint256", + "internalType": "uint256" + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "permitBuilder", + "inputs": [ + { + "name": "rewardPercentage_", + "type": "uint64", + "internalType": "uint64" + } + ], + "outputs": [], + "stateMutability": "nonpayable" + }, + { + "type": "function", + "name": "proxiableUUID", + "inputs": [], + "outputs": [ + { + "name": "", + "type": "bytes32", + "internalType": "bytes32" + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "revokeBuilder", + "inputs": [], + "outputs": [], + "stateMutability": "nonpayable" + }, + { + "type": "function", + "name": "revokeBuilderKYC", + "inputs": [ + { + "name": "builder_", + "type": "address", + "internalType": "address" + } + ], + "outputs": [], + "stateMutability": "nonpayable" + }, + { + "type": "function", + "name": "rewardDistributor", + "inputs": [], + "outputs": [ + { + "name": "", + "type": "address", + "internalType": "address" + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "rewardPercentageCooldown", + "inputs": [], + "outputs": [ + { + "name": "", + "type": "uint128", + "internalType": "uint128" + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "rewardToken", + "inputs": [], + "outputs": [ + { + "name": "", + "type": "address", + "internalType": "address" + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "rewardsCoinbase", + "inputs": [], + "outputs": [ + { + "name": "", + "type": "uint256", + "internalType": "uint256" + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "rewardsERC20", + "inputs": [], + "outputs": [ + { + "name": "", + "type": "uint256", + "internalType": "uint256" + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "setBackerRewardPercentage", + "inputs": [ + { + "name": "rewardPercentage_", + "type": "uint64", + "internalType": "uint64" + } + ], + "outputs": [], + "stateMutability": "nonpayable" + }, + { + "type": "function", + "name": "setCycleDuration", + "inputs": [ + { + "name": "newCycleDuration_", + "type": "uint32", + "internalType": "uint32" + }, + { + "name": "cycleStartOffset_", + "type": "uint24", + "internalType": "uint24" + } + ], + "outputs": [], + "stateMutability": "nonpayable" + }, + { + "type": "function", + "name": "setDistributionDuration", + "inputs": [ + { + "name": "newDistributionDuration_", + "type": "uint32", + "internalType": "uint32" + } + ], + "outputs": [], + "stateMutability": "nonpayable" + }, + { + "type": "function", + "name": "stakingToken", + "inputs": [], + "outputs": [ + { + "name": "", + "type": "address", + "internalType": "contract IERC20" + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "startDistribution", + "inputs": [], + "outputs": [ + { + "name": "finished_", + "type": "bool", + "internalType": "bool" + } + ], + "stateMutability": "nonpayable" + }, + { + "type": "function", + "name": "submitRewardReceiverReplacementRequest", + "inputs": [ + { + "name": "newRewardReceiver_", + "type": "address", + "internalType": "address" + } + ], + "outputs": [], + "stateMutability": "nonpayable" + }, + { + "type": "function", + "name": "supportsInterface", + "inputs": [ + { + "name": "interfaceId_", + "type": "bytes4", + "internalType": "bytes4" + } + ], + "outputs": [ + { + "name": "", + "type": "bool", + "internalType": "bool" + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "tempTotalPotentialReward", + "inputs": [], + "outputs": [ + { + "name": "", + "type": "uint256", + "internalType": "uint256" + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "timeUntilNextCycle", + "inputs": [ + { + "name": "timestamp_", + "type": "uint256", + "internalType": "uint256" + } + ], + "outputs": [ + { + "name": "", + "type": "uint256", + "internalType": "uint256" + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "totalPotentialReward", + "inputs": [], + "outputs": [ + { + "name": "", + "type": "uint256", + "internalType": "uint256" + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "unpauseBuilder", + "inputs": [ + { + "name": "builder_", + "type": "address", + "internalType": "address" + } + ], + "outputs": [], + "stateMutability": "nonpayable" + }, + { + "type": "function", + "name": "upgradeToAndCall", + "inputs": [ + { + "name": "newImplementation", + "type": "address", + "internalType": "address" + }, + { + "name": "data", + "type": "bytes", + "internalType": "bytes" + } + ], + "outputs": [], + "stateMutability": "payable" + }, + { + "type": "event", + "name": "BackerRewardPercentageUpdateScheduled", + "inputs": [ + { + "name": "builder_", + "type": "address", + "indexed": true, + "internalType": "address" + }, + { + "name": "rewardPercentage_", + "type": "uint256", + "indexed": false, + "internalType": "uint256" + }, + { + "name": "cooldown_", + "type": "uint256", + "indexed": false, + "internalType": "uint256" + } + ], + "anonymous": false + }, + { + "type": "event", + "name": "BuilderActivated", + "inputs": [ + { + "name": "builder_", + "type": "address", + "indexed": true, + "internalType": "address" + }, + { + "name": "rewardReceiver_", + "type": "address", + "indexed": false, + "internalType": "address" + }, + { + "name": "rewardPercentage_", + "type": "uint64", + "indexed": false, + "internalType": "uint64" + } + ], + "anonymous": false + }, + { + "type": "event", + "name": "BuilderMigrated", + "inputs": [ + { + "name": "builder_", + "type": "address", + "indexed": true, + "internalType": "address" + }, + { + "name": "migrator_", + "type": "address", + "indexed": true, + "internalType": "address" + } + ], + "anonymous": false + }, + { + "type": "event", + "name": "BuilderRewardReceiverReplacementApproved", + "inputs": [ + { + "name": "builder_", + "type": "address", + "indexed": true, + "internalType": "address" + }, + { + "name": "newRewardReceiver_", + "type": "address", + "indexed": false, + "internalType": "address" + } + ], + "anonymous": false + }, + { + "type": "event", + "name": "BuilderRewardReceiverReplacementCancelled", + "inputs": [ + { + "name": "builder_", + "type": "address", + "indexed": true, + "internalType": "address" + }, + { + "name": "newRewardReceiver_", + "type": "address", + "indexed": false, + "internalType": "address" + } + ], + "anonymous": false + }, + { + "type": "event", + "name": "BuilderRewardReceiverReplacementRequested", + "inputs": [ + { + "name": "builder_", + "type": "address", + "indexed": true, + "internalType": "address" + }, + { + "name": "newRewardReceiver_", + "type": "address", + "indexed": false, + "internalType": "address" + } + ], + "anonymous": false + }, + { + "type": "event", + "name": "CommunityApproved", + "inputs": [ + { + "name": "builder_", + "type": "address", + "indexed": true, + "internalType": "address" + } + ], + "anonymous": false + }, + { + "type": "event", + "name": "Dewhitelisted", + "inputs": [ + { + "name": "builder_", + "type": "address", + "indexed": true, + "internalType": "address" + } + ], + "anonymous": false + }, + { + "type": "event", + "name": "GaugeCreated", + "inputs": [ + { + "name": "builder_", + "type": "address", + "indexed": true, + "internalType": "address" + }, + { + "name": "gauge_", + "type": "address", + "indexed": true, + "internalType": "address" + }, + { + "name": "creator_", + "type": "address", + "indexed": false, + "internalType": "address" + } + ], + "anonymous": false + }, + { + "type": "event", + "name": "Initialized", + "inputs": [ + { + "name": "version", + "type": "uint64", + "indexed": false, + "internalType": "uint64" + } + ], + "anonymous": false + }, + { + "type": "event", + "name": "KYCApproved", + "inputs": [ + { + "name": "builder_", + "type": "address", + "indexed": true, + "internalType": "address" + } + ], + "anonymous": false + }, + { + "type": "event", + "name": "KYCRevoked", + "inputs": [ + { + "name": "builder_", + "type": "address", + "indexed": true, + "internalType": "address" + } + ], + "anonymous": false + }, + { + "type": "event", + "name": "NewAllocation", + "inputs": [ + { + "name": "backer_", + "type": "address", + "indexed": true, + "internalType": "address" + }, + { + "name": "gauge_", + "type": "address", + "indexed": true, + "internalType": "address" + }, + { + "name": "allocation_", + "type": "uint256", + "indexed": false, + "internalType": "uint256" + } + ], + "anonymous": false + }, + { + "type": "event", + "name": "NewCycleDurationScheduled", + "inputs": [ + { + "name": "newCycleDuration_", + "type": "uint256", + "indexed": false, + "internalType": "uint256" + }, + { + "name": "cooldownEndTime_", + "type": "uint256", + "indexed": false, + "internalType": "uint256" + } + ], + "anonymous": false + }, + { + "type": "event", + "name": "NewDistributionDuration", + "inputs": [ + { + "name": "newDistributionDuration_", + "type": "uint256", + "indexed": false, + "internalType": "uint256" + }, + { + "name": "by_", + "type": "address", + "indexed": false, + "internalType": "address" + } + ], + "anonymous": false + }, + { + "type": "event", + "name": "NotifyReward", + "inputs": [ + { + "name": "rewardToken_", + "type": "address", + "indexed": true, + "internalType": "address" + }, + { + "name": "sender_", + "type": "address", + "indexed": true, + "internalType": "address" + }, + { + "name": "amount_", + "type": "uint256", + "indexed": false, + "internalType": "uint256" + } + ], + "anonymous": false + }, + { + "type": "event", + "name": "Paused", + "inputs": [ + { + "name": "builder_", + "type": "address", + "indexed": true, + "internalType": "address" + }, + { + "name": "reason_", + "type": "bytes20", + "indexed": false, + "internalType": "bytes20" + } + ], + "anonymous": false + }, + { + "type": "event", + "name": "Permitted", + "inputs": [ + { + "name": "builder_", + "type": "address", + "indexed": true, + "internalType": "address" + }, + { + "name": "rewardPercentage_", + "type": "uint256", + "indexed": false, + "internalType": "uint256" + }, + { + "name": "cooldown_", + "type": "uint256", + "indexed": false, + "internalType": "uint256" + } + ], + "anonymous": false + }, + { + "type": "event", + "name": "Revoked", + "inputs": [ + { + "name": "builder_", + "type": "address", + "indexed": true, + "internalType": "address" + } + ], + "anonymous": false + }, + { + "type": "event", + "name": "RewardDistributed", + "inputs": [ + { + "name": "sender_", + "type": "address", + "indexed": true, + "internalType": "address" + } + ], + "anonymous": false + }, + { + "type": "event", + "name": "RewardDistributionFinished", + "inputs": [ + { + "name": "sender_", + "type": "address", + "indexed": true, + "internalType": "address" + } + ], + "anonymous": false + }, + { + "type": "event", + "name": "RewardDistributionStarted", + "inputs": [ + { + "name": "sender_", + "type": "address", + "indexed": true, + "internalType": "address" + } + ], + "anonymous": false + }, + { + "type": "event", + "name": "Unpaused", + "inputs": [ + { + "name": "builder_", + "type": "address", + "indexed": true, + "internalType": "address" + } + ], + "anonymous": false + }, + { + "type": "event", + "name": "Upgraded", + "inputs": [ + { + "name": "implementation", + "type": "address", + "indexed": true, + "internalType": "address" + } + ], + "anonymous": false + }, + { + "type": "error", + "name": "AddressEmptyCode", + "inputs": [ + { + "name": "target", + "type": "address", + "internalType": "address" + } + ] + }, + { + "type": "error", + "name": "AddressInsufficientBalance", + "inputs": [ + { + "name": "account", + "type": "address", + "internalType": "address" + } + ] + }, + { + "type": "error", + "name": "AlreadyActivated", + "inputs": [] + }, + { + "type": "error", + "name": "AlreadyCommunityApproved", + "inputs": [] + }, + { + "type": "error", + "name": "AlreadyKYCApproved", + "inputs": [] + }, + { + "type": "error", + "name": "AlreadyRevoked", + "inputs": [] + }, + { + "type": "error", + "name": "BeforeDistribution", + "inputs": [] + }, + { + "type": "error", + "name": "BuilderAlreadyExists", + "inputs": [] + }, + { + "type": "error", + "name": "BuilderDoesNotExist", + "inputs": [] + }, + { + "type": "error", + "name": "CycleDurationTooShort", + "inputs": [] + }, + { + "type": "error", + "name": "DistributionDurationTooLong", + "inputs": [] + }, + { + "type": "error", + "name": "DistributionDurationTooShort", + "inputs": [] + }, + { + "type": "error", + "name": "DistributionModifiedDuringDistributionWindow", + "inputs": [] + }, + { + "type": "error", + "name": "DistributionPeriodDidNotStart", + "inputs": [] + }, + { + "type": "error", + "name": "ERC1967InvalidImplementation", + "inputs": [ + { + "name": "implementation", + "type": "address", + "internalType": "address" + } + ] + }, + { + "type": "error", + "name": "ERC1967NonPayable", + "inputs": [] + }, + { + "type": "error", + "name": "FailedInnerCall", + "inputs": [] + }, + { + "type": "error", + "name": "GaugeDoesNotExist", + "inputs": [] + }, + { + "type": "error", + "name": "InvalidBackerRewardPercentage", + "inputs": [] + }, + { + "type": "error", + "name": "InvalidBuilderRewardReceiver", + "inputs": [] + }, + { + "type": "error", + "name": "InvalidInitialization", + "inputs": [] + }, + { + "type": "error", + "name": "NoGaugesForDistribution", + "inputs": [] + }, + { + "type": "error", + "name": "NotActivated", + "inputs": [] + }, + { + "type": "error", + "name": "NotCommunityApproved", + "inputs": [] + }, + { + "type": "error", + "name": "NotEnoughStaking", + "inputs": [] + }, + { + "type": "error", + "name": "NotInDistributionPeriod", + "inputs": [] + }, + { + "type": "error", + "name": "NotInitializing", + "inputs": [] + }, + { + "type": "error", + "name": "NotKYCApproved", + "inputs": [] + }, + { + "type": "error", + "name": "NotOperational", + "inputs": [] + }, + { + "type": "error", + "name": "NotPaused", + "inputs": [] + }, + { + "type": "error", + "name": "NotRevoked", + "inputs": [] + }, + { + "type": "error", + "name": "NotValidChangerOrFoundation", + "inputs": [] + }, + { + "type": "error", + "name": "OnlyInDistributionWindow", + "inputs": [] + }, + { + "type": "error", + "name": "PositiveAllocationOnHaltedGauge", + "inputs": [] + }, + { + "type": "error", + "name": "SafeERC20FailedOperation", + "inputs": [ + { + "name": "token", + "type": "address", + "internalType": "address" + } + ] + }, + { + "type": "error", + "name": "UUPSUnauthorizedCallContext", + "inputs": [] + }, + { + "type": "error", + "name": "UUPSUnsupportedProxiableUUID", + "inputs": [ + { + "name": "slot", + "type": "bytes32", + "internalType": "bytes32" + } + ] + }, + { + "type": "error", + "name": "UnequalLengths", + "inputs": [] + } + ], + "address": "0x263701442A322418fF5b3D5F5AAb762834bE082B", + "args": [], + "bytecode": "0x60a0604052306080523480156200001557600080fd5b506200002062000030565b6200002a62000030565b620000e4565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805468010000000000000000900460ff1615620000815760405163f92ee8a960e01b815260040160405180910390fd5b80546001600160401b0390811614620000e15780546001600160401b0319166001600160401b0390811782556040519081527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b50565b608051615c396200010e60003960008181613ca601528181613ccf0152613f130152615c396000f3fe60806040526004361061042f5760003560e01c806374c0dff111610228578063c15382d811610128578063e2ab7cf2116100bb578063ebe2b12b1161008a578063f0527f8f1161006f578063f0527f8f14610f11578063f7c618c114610f31578063fd472fde14610f5157600080fd5b8063ebe2b12b14610e3c578063efbdb54314610e5157600080fd5b8063e2ab7cf214610d3e578063e45572ea14610d5e578063e4fc6b6d14610e07578063e64638d714610e1c57600080fd5b8063d2e6d1c3116100f7578063d2e6d1c314610cc9578063d3a954bb14610ce9578063d83623dd14610d09578063dff6874814610d1e57600080fd5b8063c15382d814610c45578063c58a1e4d14610c7e578063caa9915e14610c93578063d2d8c93214610cb357600080fd5b80639f96d06e116101bb578063acc2166a1161018a578063b2e15eca1161016f578063b2e15eca14610be5578063b78b52df14610c05578063c042e76e14610c2557600080fd5b8063acc2166a14610b6f578063ad3cb1cc14610b8f57600080fd5b80639f96d06e14610aef578063a0d961c014610b0f578063a7c0782b14610b2f578063a8a90af714610b4f57600080fd5b80638dcb7ea4116101f75780638dcb7ea414610a645780639626f35814610a9a57806397e57cf914610aba5780639dcde81214610acf57600080fd5b806374c0dff1146109c45780637572392c14610a0e57806377bd9c2d14610a2457806381d8bd2c14610a4457600080fd5b80632ed480f7116103335780634be50762116102c6578063579e8c8e1161029557806371d8a4891161027a57806371d8a4891461094e57806372b874ad1461098457806372f702f3146109a457600080fd5b8063579e8c8e146109235780636912be2d1461093957600080fd5b80634be50762146108c55780634f1ef286146108e5578063517b989c146108f857806352d1902d1461090e57600080fd5b80634356d671116103025780634356d6711461083857806345b5cd311461085857806348d57282146108785780634b1d41fc1461089857600080fd5b80632ed480f7146107c65780633c6b16ab146107e65780633f1c49bf146107f957806341f265801461080e57600080fd5b806312ad2387116103c65780631f56d39c1161039557806323e978c11161037a57806323e978c11461075a578063278fdc691461079057806329ad14d3146107a657600080fd5b80631f56d39c146106fa57806323ae495b1461073a57600080fd5b806312ad238714610587578063187256eb146105a15780631d156dcf146105ce5780631d5cd0e61461060057600080fd5b80630d52333c116104025780630d52333c146104d95780630fa36b8214610511578063119234dd1461053157806311fb601a1461055157600080fd5b806301ffc9a71461043457806303184e311461046957806309022b13146104895780630b739693146104b7575b600080fd5b34801561044057600080fd5b5061045461044f366004615342565b610f71565b60405190151581526020015b60405180910390f35b34801561047557600080fd5b50610454610484366004615399565b61100a565b34801561049557600080fd5b506104a96104a43660046153b6565b611017565b604051908152602001610460565b3480156104c357600080fd5b506104d76104d23660046153e3565b611036565b005b3480156104e557600080fd5b506070546104f9906001600160a01b031681565b6040516001600160a01b039091168152602001610460565b34801561051d57600080fd5b506104d761052c366004615416565b6112f7565b34801561053d57600080fd5b506104d761054c366004615538565b611525565b34801561055d57600080fd5b506104f961056c366004615399565b606a602052600090815260409020546001600160a01b031681565b34801561059357600080fd5b5060af546104549060ff1681565b3480156105ad57600080fd5b506104a96105bc366004615399565b60b06020526000908152604090205481565b3480156105da57600080fd5b506034546105eb9063ffffffff1681565b60405163ffffffff9091168152602001610460565b34801561060c57600080fd5b5061067861061b366004615399565b60686020526000908152604090205460ff808216916101008104821691620100008204811691630100000081048216916401000000008204169065010000000000810460c81b906c01000000000000000000000000900460601b87565b6040805197151588529515156020880152931515948601949094529015156060850152151560808401527fffffffffffffff0000000000000000000000000000000000000000000000000090911660a08301527fffffffffffffffffffffffffffffffffffffffff0000000000000000000000001660c082015260e001610460565b34801561070657600080fd5b50610454610715366004615399565b6001600160a01b03166000908152606860205260409020546301000000900460ff1690565b34801561074657600080fd5b506104d7610755366004615580565b6115fa565b34801561076657600080fd5b506104f9610775366004615399565b6069602052600090815260409020546001600160a01b031681565b34801561079c57600080fd5b506104a960ac5481565b3480156107b257600080fd5b506104d76107c1366004615416565b6119a4565b3480156107d257600080fd5b506104546107e1366004615399565b611cdc565b6104d76107f43660046153b6565b611d32565b34801561080557600080fd5b506104d7611e93565b34801561081a57600080fd5b50610823611ef7565b60408051928352602083019190915201610460565b34801561084457600080fd5b506104d76108533660046155ff565b61205c565b34801561086457600080fd5b506104d761087336600461566b565b612171565b34801561088457600080fd5b506104f96108933660046153b6565b6122ad565b3480156108a457600080fd5b506104a96108b3366004615399565b60736020526000908152604090205481565b3480156108d157600080fd5b506104d76108e03660046156bb565b6122ba565b6104d76108f3366004615786565b6124a2565b34801561090457600080fd5b506104a960a95481565b34801561091a57600080fd5b506104a96124c1565b34801561092f57600080fd5b506104a960ab5481565b34801561094557600080fd5b506104d76124f0565b34801561095a57600080fd5b506104f9610969366004615399565b6071602052600090815260409020546001600160a01b031681565b34801561099057600080fd5b506104a961099f3660046153b6565b612701565b3480156109b057600080fd5b5060a7546104f9906001600160a01b031681565b3480156109d057600080fd5b506074546109ed906fffffffffffffffffffffffffffffffff1681565b6040516fffffffffffffffffffffffffffffffff9091168152602001610460565b348015610a1a57600080fd5b506104a960aa5481565b348015610a3057600080fd5b50610454610a3f366004615399565b612725565b348015610a5057600080fd5b506104d7610a5f36600461584c565b61274b565b348015610a7057600080fd5b506104f9610a7f366004615399565b6072602052600090815260409020546001600160a01b031681565b348015610aa657600080fd5b50610454610ab5366004615399565b6127ca565b348015610ac657600080fd5b506104a96127d7565b348015610adb57600080fd5b506104d7610aea366004615399565b6127e8565b348015610afb57600080fd5b506104d7610b0a366004615399565b612990565b348015610b1b57600080fd5b506104a9610b2a3660046153b6565b6129d4565b348015610b3b57600080fd5b506104a9610b4a3660046153b6565b6129f0565b348015610b5b57600080fd5b506104d7610b6a366004615399565b612a2b565b348015610b7b57600080fd5b506067546104f9906001600160a01b031681565b348015610b9b57600080fd5b50610bd86040518060400160405280600581526020017f352e302e3000000000000000000000000000000000000000000000000000000081525081565b60405161046091906158b7565b348015610bf157600080fd5b506104d7610c00366004615908565b612c1e565b348015610c1157600080fd5b506104d7610c20366004615941565b612d9f565b348015610c3157600080fd5b506104d7610c4036600461584c565b612e16565b348015610c5157600080fd5b50610c65610c60366004615399565b612eda565b60405167ffffffffffffffff9091168152602001610460565b348015610c8a57600080fd5b506104a9612f65565b348015610c9f57600080fd5b506104d7610cae36600461596d565b612f71565b348015610cbf57600080fd5b506104a960ad5481565b348015610cd557600080fd5b506000546104f9906001600160a01b031681565b348015610cf557600080fd5b506104f9610d04366004615399565b613086565b348015610d1557600080fd5b50610454613109565b348015610d2a57600080fd5b50610454610d39366004615399565b6131ec565b348015610d4a57600080fd5b50610454610d59366004615941565b6132f0565b348015610d6a57600080fd5b50610dce610d79366004615399565b606b6020526000908152604090205467ffffffffffffffff808216916801000000000000000081049091169070010000000000000000000000000000000090046fffffffffffffffffffffffffffffffff1683565b6040805167ffffffffffffffff94851681529390921660208401526fffffffffffffffffffffffffffffffff1690820152606001610460565b348015610e1357600080fd5b506104546133ab565b348015610e2857600080fd5b506104f9610e373660046153b6565b6133f6565b348015610e4857600080fd5b506104a9613403565b348015610e5d57600080fd5b50603354610ecf9063ffffffff8082169164010000000081049091169067ffffffffffffffff68010000000000000000820481169170010000000000000000000000000000000081049091169062ffffff78010000000000000000000000000000000000000000000000009091041685565b6040805163ffffffff968716815295909416602086015267ffffffffffffffff9283169385019390935216606083015262ffffff16608082015260a001610460565b348015610f1d57600080fd5b506104d7610f2c366004615399565b61342e565b348015610f3d57600080fd5b5060a8546104f9906001600160a01b031681565b348015610f5d57600080fd5b506104d7610f6c366004615399565b613604565b60007fffffffff0000000000000000000000000000000000000000000000000000000082167fe2ab7cf200000000000000000000000000000000000000000000000000000000148061100457507f01ffc9a7000000000000000000000000000000000000000000000000000000007fffffffff000000000000000000000000000000000000000000000000000000008316145b92915050565b6000611004606c83613724565b60345460009063ffffffff1661102c836129f0565b61100491906159ef565b6000546040517fe053dd610000000000000000000000000000000000000000000000000000000081523360048201526001600160a01b039091169063e053dd619060240160006040518083038186803b15801561109257600080fd5b505afa1580156110a6573d6000803e3d6000fd5b505050508063ffffffff166000036110ea576040517fe7b421c800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60006110f5426129f0565b9050804211801561112557506034546111189063ffffffff908116908416613746565b61112290826159ef565b42105b1561115c576040517fb2f1777700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040805160a08101825260335463ffffffff80821683526401000000008204166020830181905267ffffffffffffffff6801000000000000000083048116948401949094527001000000000000000000000000000000008204909316606083015262ffffff7801000000000000000000000000000000000000000000000000909104166080820152906111f090849061375c565b611226576040517f84153c9100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b806060015167ffffffffffffffff164210156112805761124a83826000015161375c565b611280576040517f84153c9100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040805163ffffffff851681523360208201527ffc521917f7d89bd122571083737b90fea921fe4dc631865293f5c5c450b74652910160405180910390a15050603480547fffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000001663ffffffff92909216919091179055565b611300336131ec565b611335576040517ead0c9500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b670de0b6b3a76400008167ffffffffffffffff161115611381576040517fcb3f365b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b336000818152606b60209081526040918290208251606081018452905467ffffffffffffffff808216835268010000000000000000820416928201929092527001000000000000000000000000000000009091046fffffffffffffffffffffffffffffffff1691810191909152906113f890612eda565b67ffffffffffffffff90811682528216602082015260745461142c906fffffffffffffffffffffffffffffffff1642615a02565b6fffffffffffffffffffffffffffffffff166040828101829052805167ffffffffffffffff85168152602081019290925233917f029674ff064f2d0d5b88c006bca2b7583291550ccf6462e8ae1a9b03d0479515910160405180910390a2336000908152606b6020908152604091829020835181549285015193909401516fffffffffffffffffffffffffffffffff9081167001000000000000000000000000000000000267ffffffffffffffff94851668010000000000000000027fffffffffffffffffffffffffffffffff000000000000000000000000000000009094169490951693909317919091179190911691909117905550565b805160005b818110156115f55761155483828151811061154757611547615a2b565b6020026020010151613780565b82818151811061156657611566615a2b565b60209081029190910101516040517f4c4d0d730000000000000000000000000000000000000000000000000000000081523360048201526001600160a01b0390911690634c4d0d7390602401600060405180830381600087803b1580156115cc57600080fd5b505af11580156115e0573d6000803e3d6000fd5b505050506115ee8160010190565b905061152a565b505050565b6000546040517fd994d6d50000000000000000000000000000000000000000000000000000000081523360048201526001600160a01b039091169063d994d6d590602401602060405180830381865afa15801561165b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061167f9190615a6a565b158015611712575060008054906101000a90046001600160a01b03166001600160a01b031663ce7ee5ac6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156116d8573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906116fc9190615a85565b6001600160a01b0316336001600160a01b031614155b15611749576040517f39f34f8400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60345461175c9063ffffffff168361375c565b611792576040517f7fc5120500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60008061179d611ef7565b6040805160a08101825260335467ffffffffffffffff700100000000000000000000000000000000820481166060840152780100000000000000000000000000000000000000000000000090910462ffffff16608083015263ffffffff848116808452908a1660208401529085169282018390529395509193509091611824919042613824565b67ffffffffffffffff166060820181905262ffffff851660808301526040805163ffffffff8816815260208101929092527f15c8ad9af95537fe83718dcd140a2b725b6e190fb5e68c4f13ff38232b86b77c910160405180910390a180516033805460208401516040850151606086015160809096015163ffffffff9586167fffffffffffffffffffffffffffffffffffffffffffffffff0000000000000000909416939093176401000000009590921694909402177fffffffffffffffff00000000000000000000000000000000ffffffffffffffff166801000000000000000067ffffffffffffffff948516027fffffffffffffffff0000000000000000ffffffffffffffffffffffffffffffff16177001000000000000000000000000000000009390941692909202929092177fffffffffff000000ffffffffffffffffffffffffffffffffffffffffffffffff16780100000000000000000000000000000000000000000000000062ffffff9092169190910217905550505050565b336000908152607160205260409020546001600160a01b0316806119f4576040517f412a573000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b33600090815260686020526040902054610100900460ff16611a42576040517fdfac5c4a00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b3360009081526068602052604090205462010000900460ff16611a91576040517f2272386e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b33600090815260686020526040902054640100000000900460ff16611ae2576040517f73f7ab1e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b670de0b6b3a76400008267ffffffffffffffff161115611b2e576040517fcb3f365b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b33600081815260686020908152604080832080547fffffffffffffffffffffffffffffffffffffffffffffffffffffff00ffffffff169055606b8252918290208251606081018452905467ffffffffffffffff808216835268010000000000000000820416928201929092527001000000000000000000000000000000009091046fffffffffffffffffffffffffffffffff169181019190915290611bd290612eda565b67ffffffffffffffff90811682528381166020808401918252336000908152606b909152604090819020845181549351928601516fffffffffffffffffffffffffffffffff9081167001000000000000000000000000000000000293861668010000000000000000027fffffffffffffffffffffffffffffffff0000000000000000000000000000000090951691909516179290921792909216919091179055611c7b8261383b565b604080820151815167ffffffffffffffff861681526fffffffffffffffffffffffffffffffff909116602082015233917f7dba82990ac719cd904649f1701fcda6db3c92f2ff9cd31ceed2eb989a441d3191015b60405180910390a2505050565b6001600160a01b038181166000908152606a6020526040812054909116158015906110045750506001600160a01b039081166000908152606a602090815260408083205460699092529091205482169116141590565b60af5460ff1615611d6f576040517fbc1eb20900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b611d77612f65565b600003611db0576040517fb9927e0d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b3415611e19573460ac6000828254611dc891906159ef565b9091555050604051348152339073f7ab6cfaebbadfe8b5494022c4c6db776bd63b6b907ff70d5c697de7ea828df48e5c4573cb2194c659f1901f70110c52b066dcf508269060200160405180910390a35b8015611e90578060ab6000828254611e3191906159ef565b909155505060a85460405182815233916001600160a01b0316907ff70d5c697de7ea828df48e5c4573cb2194c659f1901f70110c52b066dcf508269060200160405180910390a360a854611e90906001600160a01b031633308461386a565b50565b336000908152606960205260409020546001600160a01b0316611eb5816138f2565b6040516001600160a01b038216815233907f4815977db1df3778807ed9d5a0c32398684440c2cd8cfc0a411b47528214df7b906020015b60405180910390a250565b6040805160a08101825260335463ffffffff8082168352640100000000820416602083015268010000000000000000810467ffffffffffffffff90811693830193909352700100000000000000000000000000000000810490921660608201819052780100000000000000000000000000000000000000000000000090920462ffffff166080820152600091829190421061203957806080015162ffffff16816020015163ffffffff168260600151611fb09190615aa2565b611fba9190615aa2565b67ffffffffffffffff1642101561200257806060015167ffffffffffffffff16816080015162ffffff168260200151611ff39190615ac3565b63ffffffff1692509250509091565b806080015162ffffff16816060015161201b9190615aa2565b67ffffffffffffffff16816020015163ffffffff1692509250509091565b806040015167ffffffffffffffff16816000015163ffffffff1692509250509091565b60af5460ff1615612099576040517fbc1eb20900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b828181146120d3576040517fccab218c00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b33600090815260b0602052604081205460a95490916120f142612701565b905060005b8481101561215b5760008061214c8b8b8581811061211657612116615a2b565b905060200201602081019061212b9190615399565b8a8a8681811061213d5761213d615a2b565b90506020020135888888613979565b909650945050506001016120f6565b50612167338484613b0a565b5050505050505050565b805160005b818110156122a75760006001600160a01b03166072600085848151811061219f5761219f615a2b565b6020908102919091018101516001600160a01b039081168352908201929092526040016000205416036121fe576040517f3c91aa3a00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b82818151811061221057612210615a2b565b60209081029190910101516040517ff7b761580000000000000000000000000000000000000000000000000000000081526001600160a01b0386811660048301523360248301529091169063f7b7615890604401600060405180830381600087803b15801561227e57600080fd5b505af1158015612292573d6000803e3d6000fd5b505050506122a08160010190565b9050612176565b50505050565b6000611004606c83613be4565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805468010000000000000000810460ff16159067ffffffffffffffff166000811580156123055750825b905060008267ffffffffffffffff1660011480156123225750303b155b905081158015612330575080155b15612367576040517ff92ee8a900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b84547fffffffffffffffffffffffffffffffffffffffffffffffff000000000000000016600117855583156123c85784547fffffffffffffffffffffffffffffffffffffffffffffff00ffffffffffffffff16680100000000000000001785555b6123d78e8c8c8c8c8c8c613bf0565b8c60a860006101000a8154816001600160a01b0302191690836001600160a01b031602179055508b60a760006101000a8154816001600160a01b0302191690836001600160a01b0316021790555061242e426129d4565b60ae5583156124925784547fffffffffffffffffffffffffffffffffffffffffffffff00ffffffffffffffff168555604051600181527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b5050505050505050505050505050565b6124aa613c9b565b6124b382613d6d565b6124bd8282613de4565b5050565b60006124cb613f08565b507f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc90565b336000908152607160205260409020546001600160a01b031680612540576040517f412a573000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b33600090815260686020526040902054610100900460ff1661258e576040517fdfac5c4a00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b3360009081526068602052604090205462010000900460ff166125dd576040517f2272386e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b33600090815260686020526040902054640100000000900460ff161561262f576040517f905e710700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b33600090815260686020526040902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffff00ffffffff1664010000000017905560745461268a906fffffffffffffffffffffffffffffffff16426159ef565b336000908152606b6020526040902080546fffffffffffffffffffffffffffffffff9283167001000000000000000000000000000000000292169190911790556126d381613f6a565b60405133907fb6fa8b8bd5eab60f292eca876e3ef90722275b785309d84b1de113ce0b8c4e7490600090a250565b600080600061270e611ef7565b9150915061271d828286613f98565b949350505050565b6001600160a01b03808216600090815260726020526040812054909161100491166131ec565b6000546040517f445ac6330000000000000000000000000000000000000000000000000000000081523360048201526001600160a01b039091169063445ac6339060240160006040518083038186803b1580156127a757600080fd5b505afa1580156127bb573d6000803e3d6000fd5b505050506115f5838383613fc2565b6000611004606e83613724565b60006127e3606e6141d9565b905090565b6000546040517f7e185f570000000000000000000000000000000000000000000000000000000081523360048201526001600160a01b0390911690637e185f579060240160006040518083038186803b15801561284457600080fd5b505afa158015612858573d6000803e3d6000fd5b505050506001600160a01b0381811660009081526071602052604090205416806128ae576040517f412a573000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001600160a01b03821660009081526068602052604090205462010000900460ff16612906576040517f2272386e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001600160a01b038216600090815260686020526040902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ffff16905561294d81613f6a565b6129588160006141e3565b6040516001600160a01b038316907f78c8e01ebc9b1b82f14af9f3a9b6fa7bdba5e36f9e96d15ca3aebc36cf72ce8590600090a25050565b612999816138f2565b6040516001600160a01b038216815233907ffd86eb6a6fd802b0b2edabf5bc13b0ada6e619b69bb19a08d048e2d2374de2d190602001611eec565b60008060006129e1611ef7565b9150915061271d828286613824565b60008060006129fd611ef7565b90925090506000612a0e8386615ae0565b9050818181612a1f57612a1f615af3565b06909403949350505050565b6000546040517f445ac6330000000000000000000000000000000000000000000000000000000081523360048201526001600160a01b039091169063445ac6339060240160006040518083038186803b158015612a8757600080fd5b505afa158015612a9b573d6000803e3d6000fd5b505050506001600160a01b038181166000908152607160205260409020541680612af1576040517f412a573000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001600160a01b03821660009081526068602052604090205460ff16612b43576040517f037c597f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001600160a01b038216600090815260686020526040902054610100900460ff1615612b9b576040517f0c60c81000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001600160a01b038216600090815260686020526040902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff16610100179055612be68161383b565b6040516001600160a01b038316907f333bb19eeef0621b32888db778cc7a481a89fc1d59adb2cecb59b40ef048941e90600090a25050565b6000546040517f445ac6330000000000000000000000000000000000000000000000000000000081523360048201526001600160a01b039091169063445ac6339060240160006040518083038186803b158015612c7a57600080fd5b505afa158015612c8e573d6000803e3d6000fd5b50505050612c9b826131ec565b612cd0576040517ead0c9500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001600160a01b038083166000908152606a602052604090205481169082168114612d27576040517f3b7db6df00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001600160a01b0383811660008181526069602090815260409182902080547fffffffffffffffffffffffff0000000000000000000000000000000000000000168686161790559051928516835290917f390b365b1e8016ae28db114a7764f9e95293831d64e8958261d56cf59a2c01739101611ccf565b60af5460ff1615612ddc576040517fbc1eb20900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b33600090815260b0602052604081205460a9548291612e079186918691612e0242612701565b613979565b915091506122a7338383613b0a565b6000546040517f445ac6330000000000000000000000000000000000000000000000000000000081523360048201526001600160a01b039091169063445ac6339060240160006040518083038186803b158015612e7257600080fd5b505afa158015612e86573d6000803e3d6000fd5b50505050612e9383614273565b50612e9f838383613fc2565b60405133906001600160a01b038516907f8af41f46390f96b58351b4d4f8afb27eea35637de1fb1b9538308b25497a27dc90600090a3505050565b6001600160a01b0381166000908152606b602090815260408083208151606081018352905467ffffffffffffffff808216835268010000000000000000820416938201939093527001000000000000000000000000000000009092046fffffffffffffffffffffffffffffffff169082018190524210612f5e576020015192915050565b5192915050565b60006127e3606c6141d9565b6000546040517f445ac6330000000000000000000000000000000000000000000000000000000081523360048201526001600160a01b039091169063445ac6339060240160006040518083038186803b158015612fcd57600080fd5b505afa158015612fe1573d6000803e3d6000fd5b505050506001600160a01b038216600081815260686020908152604091829020805463010000006bffffffffffffffff00ffffff9091166c01000000000000000000000000606088901c021717905590517fffffffffffffffffffffffffffffffffffffffff000000000000000000000000841681527f6525882b4c209582fe16abd1257106636114aefe60495f27fcf096a21c8a6d34910160405180910390a25050565b600080546040517f7e185f570000000000000000000000000000000000000000000000000000000081523360048201526001600160a01b0390911690637e185f579060240160006040518083038186803b1580156130e357600080fd5b505afa1580156130f7573d6000803e3d6000fd5b5050505061100482614273565b919050565b600061311442611017565b421061314c576040517f137d765400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60af5460ff1615613189576040517fbc1eb20900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60405133907fe64e289f2bf6b4f5ccbc1597d14be6638e1517b1b29e2ec5a05101f57d8d81e890600090a26131bc6143cf565b60af80547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00168215179055919050565b6001600160a01b0381166000908152606860209081526040808320815160e081018352905460ff8082161515835261010082048116158015958401869052620100008304821615159484019490945263010000008204811615156060808501919091526401000000008304909116151560808401527fffffffffffffff0000000000000000000000000000000000000000000000000065010000000000830460c81b1660a08401527fffffffffffffffffffffffffffffffffffffffff0000000000000000000000006c01000000000000000000000000909204901b1660c082015291906132db575080604001515b80156132e957508060600151155b9392505050565b6001600160a01b038216600090815260b0602052604081205480820361331a576001915050611004565b60a7546040517f70a082310000000000000000000000000000000000000000000000000000000081526001600160a01b038681166004830152839216906370a0823190602401602060405180830381865afa15801561337d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906133a19190615b22565b1015949350505050565b60af5460009060ff16151581036133ee576040517f3d0a971800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6131bc6143cf565b6000611004606e83613be4565b600061340e336127ca565b1561342757503360009081526073602052604090205490565b5060ae5490565b6000546040517f445ac6330000000000000000000000000000000000000000000000000000000081523360048201526001600160a01b039091169063445ac6339060240160006040518083038186803b15801561348a57600080fd5b505afa15801561349e573d6000803e3d6000fd5b505050506001600160a01b038116600090815260686020526040902054610100900460ff166134f9576040517fdfac5c4a00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001600160a01b03808216600090815260686020908152604080832080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff16905560719091529020541680156135cc5761355381613f6a565b6067546040517f95f948dc0000000000000000000000000000000000000000000000000000000081526001600160a01b039182166004820152908216906395f948dc90602401600060405180830381600087803b1580156135b357600080fd5b505af11580156135c7573d6000803e3d6000fd5b505050505b6040516001600160a01b038316907ffb4ca6a2470de95e9f648557fae63380f22c4b760bd27b0571caf5977a30278a90600090a25050565b6000546040517f445ac6330000000000000000000000000000000000000000000000000000000081523360048201526001600160a01b039091169063445ac6339060240160006040518083038186803b15801561366057600080fd5b505afa158015613674573d6000803e3d6000fd5b505050506001600160a01b0381166000908152606860205260409020546301000000900460ff166136d1576040517f6cd6020100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001600160a01b03811660008181526068602052604080822080546bffffffffffffffff00ffffff169055517f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa9190a250565b6001600160a01b038116600090815260018301602052604081205415156132e9565b600081831161375557816132e9565b5090919050565b6000613769836002615b3b565b63ffffffff168263ffffffff161015905092915050565b6001600160a01b0380821660009081526072602052604090205416806137d2576040517f3c91aa3a00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001600160a01b03811660009081526068602052604090205460ff166124bd576040517f037c597f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000613831848484613f98565b9091019392505050565b6138448161452a565b15611e9057613854606c82614639565b50613860606e8261464e565b50611e9081614663565b604080516001600160a01b0385811660248301528416604482015260648082018490528251808303909101815260849091019091526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f23b872dd000000000000000000000000000000000000000000000000000000001790526122a7908590614870565b336138fc816131ec565b613931576040517ead0c9500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001600160a01b039081166000908152606a602052604090208054919092167fffffffffffffffffffffffff0000000000000000000000000000000000000000909116179055565b60008061398587613780565b6040517fab3f22d50000000000000000000000000000000000000000000000000000000081523360048201526024810187905260448101849052600090819081906001600160a01b038b169063ab3f22d5906064016060604051808303816000875af11580156139f9573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613a1d9190615b63565b925092509250613a2c8a6127ca565b15613a805780613a68576040517f8b6f39e300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b613a728389615ae0565b9450869350613b0092505050565b8015613aa357613a908389615ae0565b9450613a9c8288615ae0565b9350613abc565b613aad83896159ef565b9450613ab982886159ef565b93505b6040518981526001600160a01b038b169033907fed07ca57097393e77ba36105a07f6810afc2180b72a9c02a4b0da4b51a73a6ec9060200160405180910390a35050505b9550959350505050565b6001600160a01b03838116600081815260b060205260409081902085905560a984905560a75490517f70a082310000000000000000000000000000000000000000000000000000000081526004810192909252909116906370a0823190602401602060405180830381865afa158015613b87573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613bab9190615b22565b8211156115f5576040517f2e0aee6200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60006132e983836148ec565b613bf8614916565b613c048785858561497d565b613c0c614ae4565b607080547fffffffffffffffffffffffff00000000000000000000000000000000000000009081166001600160a01b03988916179091556067805490911695909616949094179094555050607480547fffffffffffffffffffffffffffffffff00000000000000000000000000000000166fffffffffffffffffffffffffffffffff9092169190911790555050565b306001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000161480613d3457507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316613d287f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc546001600160a01b031690565b6001600160a01b031614155b15613d6b576040517fe07c8dba00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b565b6000546040517feb6f7abf0000000000000000000000000000000000000000000000000000000081523360048201526001600160a01b039091169063eb6f7abf9060240160006040518083038186803b158015613dc957600080fd5b505afa158015613ddd573d6000803e3d6000fd5b5050505050565b816001600160a01b03166352d1902d6040518163ffffffff1660e01b8152600401602060405180830381865afa925050508015613e5c575060408051601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0168201909252613e5991810190615b22565b60015b613ea2576040517f4c9c8ce30000000000000000000000000000000000000000000000000000000081526001600160a01b03831660048201526024015b60405180910390fd5b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc8114613efe576040517faa1d49a400000000000000000000000000000000000000000000000000000000815260048101829052602401613e99565b6115f58383614aec565b306001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614613d6b576040517fe07c8dba00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b613f73816127ca565b611e9057613f82606e82614639565b50613f8e606c8261464e565b50611e9081614b42565b600080613fa58584615ae0565b9050838181613fb657613fb6615af3565b06909303949350505050565b6001600160a01b03831660009081526068602052604090205460ff1615614015576040517fef65161f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001600160a01b03838116600090815260686020908152604080832080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000166101011790556069909152902080547fffffffffffffffffffffffff000000000000000000000000000000000000000016918416919091179055670de0b6b3a764000067ffffffffffffffff821611156140db576040517fcb3f365b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001600160a01b038381166000818152606b602081815260408084208151606081018352815467ffffffffffffffff8a8116808452838701818152426fffffffffffffffffffffffffffffffff9081168689019081529a8c905298885284519051995189167001000000000000000000000000000000000299831668010000000000000000027fffffffffffffffffffffffffffffffff0000000000000000000000000000000090941692169190911791909117909516959095179055805195881686529085019190915290927f7c17fc62e6995162bad4a8b971071389b16be69a2aad3ffec7b89101ccf832f2910160405180910390a250505050565b6000611004825490565b60a8546040517f095ea7b30000000000000000000000000000000000000000000000000000000081526001600160a01b038481166004830152602482018490529091169063095ea7b3906044016020604051808303816000875af115801561424f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906115f59190615a6a565b6001600160a01b03811660009081526068602052604081205462010000900460ff16156142cc576040517f9add58c500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001600160a01b03828116600090815260716020526040902054161561431e576040517f7fe8efbb00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001600160a01b038216600090815260686020526040902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ffff166201000017905561436a82614c16565b9050614396817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6141e3565b6040516001600160a01b038316907f65b21a2a34a615112fde6cfc7e1bfef6dd30a04b0d2003751618b1571cab53d990600090a2919050565b60aa5460ad5460009190826143e2612f65565b905060006143fa826143f56014866159ef565b614d4f565b60ab5460ac5460a95460ae549394509192909190600080614419611ef7565b915091505b868910156144545761443d6144328a6122ad565b878787878787614d5e565b614447908b6159ef565b995060018901985061441e565b60405133907fcc320ee5dbf17441226d664c195a950e95eef67dc4dbebde435456c5389b427e90600090a287870361450f5760405133907f2e0a637781c44a621d21ae02c97a62860799594e47e453e0491eb348ebf83bff90600090a2600060ad81905560ac81905560ab81905560af80547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016905560aa5560a98a90556144fb426129d4565b60ae555060019a9950505050505050505050565b50505060ad9590955550505060aa9290925550600092915050565b6001600160a01b03808216600090815260726020908152604080832054909316825260688152828220835160e081018552905460ff8082161515835261010082048116158015948401859052620100008304821615159684019690965263010000008204811615156060808501919091526401000000008304909116151560808401527fffffffffffffff0000000000000000000000000000000000000000000000000065010000000000830460c81b1660a08401527fffffffffffffffffffffffffffffffffffffffff0000000000000000000000006c01000000000000000000000000909204901b1660c08201529192614627575080604001515b80156132e95750608001511592915050565b60006132e9836001600160a01b038416614ede565b60006132e9836001600160a01b038416614f2d565b60af5460ff16156146a0576040517fbc1eb20900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b4260ae54116146db576040517fd0f0904700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60ae546001600160a01b03821660009081526073602052604090205410156147dd57600080614708611ef7565b6001600160a01b0385166000818152607360205260408082205490517fa505626a0000000000000000000000000000000000000000000000000000000081526004810183905260248101839052604481019190915260648101859052608481018490529395509193509163a505626a919060a40160206040518083038185885af115801561479a573d6000803e3d6000fd5b50505050506040513d601f19601f820116820180604052508101906147bf9190615b22565b60a960008282546147d091906159ef565b9091555061485692505050565b806001600160a01b031663e52595466040518163ffffffff1660e01b8152600401602060405180830381865afa15801561481b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061483f9190615b22565b60a9600082825461485091906159ef565b90915550505b6001600160a01b0316600090815260736020526040812055565b60006148856001600160a01b03841683615027565b905080516000141580156148aa5750808060200190518101906148a89190615a6a565b155b156115f5576040517f5274afe70000000000000000000000000000000000000000000000000000000081526001600160a01b0384166004820152602401613e99565b600082600001828154811061490357614903615a2b565b9060005260206000200154905092915050565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a005468010000000000000000900460ff16613d6b576040517fd7e6bcf800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b614985614916565b61498e84615035565b6040805160a0810182526033805463ffffffff9687168084526020840181905267ffffffffffffffff42169484018590526060840185905262ffffff9690961660809093018390527fffffffffffffffffffffffffffffffffffffffffffffffff0000000000000000168517640100000000909502949094177fffffffffffffffff00000000000000000000000000000000ffffffffffffffff166801000000000000000083027fffffffffffffffff0000000000000000ffffffffffffffffffffffffffffffff1617700100000000000000000000000000000000909202919091177fffffffffff000000ffffffffffffffffffffffffffffffffffffffffffffffff16780100000000000000000000000000000000000000000000000090910217909155603480547fffffffffffffffffffffffffffffffffffffffffffffffffffffffff00000000169190921617905550565b613d6b614916565b614af58261507f565b6040516001600160a01b038316907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a2805115614b3a576115f58282615127565b6124bd61519d565b60af5460ff1615614b7f576040517fbc1eb20900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b806001600160a01b031663e52595466040518163ffffffff1660e01b8152600401602060405180830381865afa158015614bbd573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190614be19190615b22565b60a96000828254614bf29190615ae0565b909155505060ae546001600160a01b03909116600090815260736020526040902055565b607054604080517fdc5a417900000000000000000000000000000000000000000000000000000000815290516000926001600160a01b03169163dc5a4179916004808301926020929190829003018187875af1158015614c7a573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190614c9e9190615a85565b6001600160a01b03808416600081815260716020908152604080832080549587167fffffffffffffffffffffffff0000000000000000000000000000000000000000968716811790915583526072909152902080549092161790559050614d06606c82614639565b506040513381526001600160a01b0380831691908416907f9b8203efe7fe42185a7755b0510f87c8b693971d6a7c22520aaf683e6b1242619060200160405180910390a3919050565b600081831061375557816132e9565b600080886001600160a01b031663e52595466040518163ffffffff1660e01b8152600401602060405180830381865afa158015614d9f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190614dc39190615b22565b9050600086614dd28a84615b8f565b614ddc9190615ba6565b9050600087614deb8a85615b8f565b614df59190615ba6565b6001600160a01b03808d1660009081526072602052604081205492935091614e1d9116612eda565b6040517fa505626a0000000000000000000000000000000000000000000000000000000081526004810185905267ffffffffffffffff9190911660248201819052604482018a9052606482018990526084820188905291506001600160a01b038d169063a505626a90849060a40160206040518083038185885af1158015614ea9573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190614ece9190615b22565b9c9b505050505050505050505050565b6000818152600183016020526040812054614f2557508154600181810184556000848152602080822090930184905584548482528286019093526040902091909155611004565b506000611004565b60008181526001830160205260408120548015615016576000614f51600183615ae0565b8554909150600090614f6590600190615ae0565b9050808214614fca576000866000018281548110614f8557614f85615a2b565b9060005260206000200154905080876000018481548110614fa857614fa8615a2b565b6000918252602080832090910192909255918252600188019052604090208390555b8554869080614fdb57614fdb615be1565b600190038181906000526020600020016000905590558560010160008681526020019081526020016000206000905560019350505050611004565b6000915050611004565b5092915050565b60606132e9838360006151d5565b61503d614916565b615045614ae4565b600080547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b0392909216919091179055565b806001600160a01b03163b6000036150ce576040517f4c9c8ce30000000000000000000000000000000000000000000000000000000081526001600160a01b0382166004820152602401613e99565b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc80547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b0392909216919091179055565b6060600080846001600160a01b0316846040516151449190615c10565b600060405180830381855af49150503d806000811461517f576040519150601f19603f3d011682016040523d82523d6000602084013e615184565b606091505b509150915061519485838361528b565b95945050505050565b3415613d6b576040517fb398979f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b606081471015615213576040517fcd786059000000000000000000000000000000000000000000000000000000008152306004820152602401613e99565b600080856001600160a01b0316848660405161522f9190615c10565b60006040518083038185875af1925050503d806000811461526c576040519150601f19603f3d011682016040523d82523d6000602084013e615271565b606091505b509150915061528186838361528b565b9695505050505050565b6060826152a05761529b82615300565b6132e9565b81511580156152b757506001600160a01b0384163b155b156152f9576040517f9996b3150000000000000000000000000000000000000000000000000000000081526001600160a01b0385166004820152602401613e99565b50806132e9565b8051156153105780518082602001fd5b6040517f1425ea4200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60006020828403121561535457600080fd5b81357fffffffff00000000000000000000000000000000000000000000000000000000811681146132e957600080fd5b6001600160a01b0381168114611e9057600080fd5b6000602082840312156153ab57600080fd5b81356132e981615384565b6000602082840312156153c857600080fd5b5035919050565b803563ffffffff8116811461310457600080fd5b6000602082840312156153f557600080fd5b6132e9826153cf565b803567ffffffffffffffff8116811461310457600080fd5b60006020828403121561542857600080fd5b6132e9826153fe565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016810167ffffffffffffffff811182821017156154a7576154a7615431565b604052919050565b600082601f8301126154c057600080fd5b8135602067ffffffffffffffff8211156154dc576154dc615431565b8160051b6154eb828201615460565b928352848101820192828101908785111561550557600080fd5b83870192505b8483101561552d57823561551e81615384565b8252918301919083019061550b565b979650505050505050565b60006020828403121561554a57600080fd5b813567ffffffffffffffff81111561556157600080fd5b61271d848285016154af565b803562ffffff8116811461310457600080fd5b6000806040838503121561559357600080fd5b61559c836153cf565b91506155aa6020840161556d565b90509250929050565b60008083601f8401126155c557600080fd5b50813567ffffffffffffffff8111156155dd57600080fd5b6020830191508360208260051b85010111156155f857600080fd5b9250929050565b6000806000806040858703121561561557600080fd5b843567ffffffffffffffff8082111561562d57600080fd5b615639888389016155b3565b9096509450602087013591508082111561565257600080fd5b5061565f878288016155b3565b95989497509550505050565b6000806040838503121561567e57600080fd5b823561568981615384565b9150602083013567ffffffffffffffff8111156156a557600080fd5b6156b1858286016154af565b9150509250929050565b60008060008060008060008060006101208a8c0312156156da57600080fd5b89356156e581615384565b985060208a01356156f581615384565b975060408a013561570581615384565b965060608a013561571581615384565b955060808a013561572581615384565b945061573360a08b016153cf565b935061574160c08b0161556d565b925061574f60e08b016153cf565b91506101008a01356fffffffffffffffffffffffffffffffff8116811461577557600080fd5b809150509295985092959850929598565b6000806040838503121561579957600080fd5b82356157a481615384565b915060208381013567ffffffffffffffff808211156157c257600080fd5b818601915086601f8301126157d657600080fd5b8135818111156157e8576157e8615431565b615818847fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f84011601615460565b9150808252878482850101111561582e57600080fd5b80848401858401376000848284010152508093505050509250929050565b60008060006060848603121561586157600080fd5b833561586c81615384565b9250602084013561587c81615384565b915061588a604085016153fe565b90509250925092565b60005b838110156158ae578181015183820152602001615896565b50506000910152565b60208152600082518060208401526158d6816040850160208701615893565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169190910160400192915050565b6000806040838503121561591b57600080fd5b823561592681615384565b9150602083013561593681615384565b809150509250929050565b6000806040838503121561595457600080fd5b823561595f81615384565b946020939093013593505050565b6000806040838503121561598057600080fd5b823561598b81615384565b915060208301357fffffffffffffffffffffffffffffffffffffffff0000000000000000000000008116811461593657600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b80820180821115611004576110046159c0565b6fffffffffffffffffffffffffffffffff818116838216019080821115615020576150206159c0565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b8051801515811461310457600080fd5b600060208284031215615a7c57600080fd5b6132e982615a5a565b600060208284031215615a9757600080fd5b81516132e981615384565b67ffffffffffffffff818116838216019080821115615020576150206159c0565b63ffffffff818116838216019080821115615020576150206159c0565b81810381811115611004576110046159c0565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b600060208284031215615b3457600080fd5b5051919050565b63ffffffff818116838216028082169190828114615b5b57615b5b6159c0565b505092915050565b600080600060608486031215615b7857600080fd5b835192506020840151915061588a60408501615a5a565b8082028115828204841417611004576110046159c0565b600082615bdc577f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b500490565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fd5b60008251615c22818460208701615893565b919091019291505056fea164736f6c6343000814000a", + "deployedBytecode": "0x60806040526004361061042f5760003560e01c806374c0dff111610228578063c15382d811610128578063e2ab7cf2116100bb578063ebe2b12b1161008a578063f0527f8f1161006f578063f0527f8f14610f11578063f7c618c114610f31578063fd472fde14610f5157600080fd5b8063ebe2b12b14610e3c578063efbdb54314610e5157600080fd5b8063e2ab7cf214610d3e578063e45572ea14610d5e578063e4fc6b6d14610e07578063e64638d714610e1c57600080fd5b8063d2e6d1c3116100f7578063d2e6d1c314610cc9578063d3a954bb14610ce9578063d83623dd14610d09578063dff6874814610d1e57600080fd5b8063c15382d814610c45578063c58a1e4d14610c7e578063caa9915e14610c93578063d2d8c93214610cb357600080fd5b80639f96d06e116101bb578063acc2166a1161018a578063b2e15eca1161016f578063b2e15eca14610be5578063b78b52df14610c05578063c042e76e14610c2557600080fd5b8063acc2166a14610b6f578063ad3cb1cc14610b8f57600080fd5b80639f96d06e14610aef578063a0d961c014610b0f578063a7c0782b14610b2f578063a8a90af714610b4f57600080fd5b80638dcb7ea4116101f75780638dcb7ea414610a645780639626f35814610a9a57806397e57cf914610aba5780639dcde81214610acf57600080fd5b806374c0dff1146109c45780637572392c14610a0e57806377bd9c2d14610a2457806381d8bd2c14610a4457600080fd5b80632ed480f7116103335780634be50762116102c6578063579e8c8e1161029557806371d8a4891161027a57806371d8a4891461094e57806372b874ad1461098457806372f702f3146109a457600080fd5b8063579e8c8e146109235780636912be2d1461093957600080fd5b80634be50762146108c55780634f1ef286146108e5578063517b989c146108f857806352d1902d1461090e57600080fd5b80634356d671116103025780634356d6711461083857806345b5cd311461085857806348d57282146108785780634b1d41fc1461089857600080fd5b80632ed480f7146107c65780633c6b16ab146107e65780633f1c49bf146107f957806341f265801461080e57600080fd5b806312ad2387116103c65780631f56d39c1161039557806323e978c11161037a57806323e978c11461075a578063278fdc691461079057806329ad14d3146107a657600080fd5b80631f56d39c146106fa57806323ae495b1461073a57600080fd5b806312ad238714610587578063187256eb146105a15780631d156dcf146105ce5780631d5cd0e61461060057600080fd5b80630d52333c116104025780630d52333c146104d95780630fa36b8214610511578063119234dd1461053157806311fb601a1461055157600080fd5b806301ffc9a71461043457806303184e311461046957806309022b13146104895780630b739693146104b7575b600080fd5b34801561044057600080fd5b5061045461044f366004615342565b610f71565b60405190151581526020015b60405180910390f35b34801561047557600080fd5b50610454610484366004615399565b61100a565b34801561049557600080fd5b506104a96104a43660046153b6565b611017565b604051908152602001610460565b3480156104c357600080fd5b506104d76104d23660046153e3565b611036565b005b3480156104e557600080fd5b506070546104f9906001600160a01b031681565b6040516001600160a01b039091168152602001610460565b34801561051d57600080fd5b506104d761052c366004615416565b6112f7565b34801561053d57600080fd5b506104d761054c366004615538565b611525565b34801561055d57600080fd5b506104f961056c366004615399565b606a602052600090815260409020546001600160a01b031681565b34801561059357600080fd5b5060af546104549060ff1681565b3480156105ad57600080fd5b506104a96105bc366004615399565b60b06020526000908152604090205481565b3480156105da57600080fd5b506034546105eb9063ffffffff1681565b60405163ffffffff9091168152602001610460565b34801561060c57600080fd5b5061067861061b366004615399565b60686020526000908152604090205460ff808216916101008104821691620100008204811691630100000081048216916401000000008204169065010000000000810460c81b906c01000000000000000000000000900460601b87565b6040805197151588529515156020880152931515948601949094529015156060850152151560808401527fffffffffffffff0000000000000000000000000000000000000000000000000090911660a08301527fffffffffffffffffffffffffffffffffffffffff0000000000000000000000001660c082015260e001610460565b34801561070657600080fd5b50610454610715366004615399565b6001600160a01b03166000908152606860205260409020546301000000900460ff1690565b34801561074657600080fd5b506104d7610755366004615580565b6115fa565b34801561076657600080fd5b506104f9610775366004615399565b6069602052600090815260409020546001600160a01b031681565b34801561079c57600080fd5b506104a960ac5481565b3480156107b257600080fd5b506104d76107c1366004615416565b6119a4565b3480156107d257600080fd5b506104546107e1366004615399565b611cdc565b6104d76107f43660046153b6565b611d32565b34801561080557600080fd5b506104d7611e93565b34801561081a57600080fd5b50610823611ef7565b60408051928352602083019190915201610460565b34801561084457600080fd5b506104d76108533660046155ff565b61205c565b34801561086457600080fd5b506104d761087336600461566b565b612171565b34801561088457600080fd5b506104f96108933660046153b6565b6122ad565b3480156108a457600080fd5b506104a96108b3366004615399565b60736020526000908152604090205481565b3480156108d157600080fd5b506104d76108e03660046156bb565b6122ba565b6104d76108f3366004615786565b6124a2565b34801561090457600080fd5b506104a960a95481565b34801561091a57600080fd5b506104a96124c1565b34801561092f57600080fd5b506104a960ab5481565b34801561094557600080fd5b506104d76124f0565b34801561095a57600080fd5b506104f9610969366004615399565b6071602052600090815260409020546001600160a01b031681565b34801561099057600080fd5b506104a961099f3660046153b6565b612701565b3480156109b057600080fd5b5060a7546104f9906001600160a01b031681565b3480156109d057600080fd5b506074546109ed906fffffffffffffffffffffffffffffffff1681565b6040516fffffffffffffffffffffffffffffffff9091168152602001610460565b348015610a1a57600080fd5b506104a960aa5481565b348015610a3057600080fd5b50610454610a3f366004615399565b612725565b348015610a5057600080fd5b506104d7610a5f36600461584c565b61274b565b348015610a7057600080fd5b506104f9610a7f366004615399565b6072602052600090815260409020546001600160a01b031681565b348015610aa657600080fd5b50610454610ab5366004615399565b6127ca565b348015610ac657600080fd5b506104a96127d7565b348015610adb57600080fd5b506104d7610aea366004615399565b6127e8565b348015610afb57600080fd5b506104d7610b0a366004615399565b612990565b348015610b1b57600080fd5b506104a9610b2a3660046153b6565b6129d4565b348015610b3b57600080fd5b506104a9610b4a3660046153b6565b6129f0565b348015610b5b57600080fd5b506104d7610b6a366004615399565b612a2b565b348015610b7b57600080fd5b506067546104f9906001600160a01b031681565b348015610b9b57600080fd5b50610bd86040518060400160405280600581526020017f352e302e3000000000000000000000000000000000000000000000000000000081525081565b60405161046091906158b7565b348015610bf157600080fd5b506104d7610c00366004615908565b612c1e565b348015610c1157600080fd5b506104d7610c20366004615941565b612d9f565b348015610c3157600080fd5b506104d7610c4036600461584c565b612e16565b348015610c5157600080fd5b50610c65610c60366004615399565b612eda565b60405167ffffffffffffffff9091168152602001610460565b348015610c8a57600080fd5b506104a9612f65565b348015610c9f57600080fd5b506104d7610cae36600461596d565b612f71565b348015610cbf57600080fd5b506104a960ad5481565b348015610cd557600080fd5b506000546104f9906001600160a01b031681565b348015610cf557600080fd5b506104f9610d04366004615399565b613086565b348015610d1557600080fd5b50610454613109565b348015610d2a57600080fd5b50610454610d39366004615399565b6131ec565b348015610d4a57600080fd5b50610454610d59366004615941565b6132f0565b348015610d6a57600080fd5b50610dce610d79366004615399565b606b6020526000908152604090205467ffffffffffffffff808216916801000000000000000081049091169070010000000000000000000000000000000090046fffffffffffffffffffffffffffffffff1683565b6040805167ffffffffffffffff94851681529390921660208401526fffffffffffffffffffffffffffffffff1690820152606001610460565b348015610e1357600080fd5b506104546133ab565b348015610e2857600080fd5b506104f9610e373660046153b6565b6133f6565b348015610e4857600080fd5b506104a9613403565b348015610e5d57600080fd5b50603354610ecf9063ffffffff8082169164010000000081049091169067ffffffffffffffff68010000000000000000820481169170010000000000000000000000000000000081049091169062ffffff78010000000000000000000000000000000000000000000000009091041685565b6040805163ffffffff968716815295909416602086015267ffffffffffffffff9283169385019390935216606083015262ffffff16608082015260a001610460565b348015610f1d57600080fd5b506104d7610f2c366004615399565b61342e565b348015610f3d57600080fd5b5060a8546104f9906001600160a01b031681565b348015610f5d57600080fd5b506104d7610f6c366004615399565b613604565b60007fffffffff0000000000000000000000000000000000000000000000000000000082167fe2ab7cf200000000000000000000000000000000000000000000000000000000148061100457507f01ffc9a7000000000000000000000000000000000000000000000000000000007fffffffff000000000000000000000000000000000000000000000000000000008316145b92915050565b6000611004606c83613724565b60345460009063ffffffff1661102c836129f0565b61100491906159ef565b6000546040517fe053dd610000000000000000000000000000000000000000000000000000000081523360048201526001600160a01b039091169063e053dd619060240160006040518083038186803b15801561109257600080fd5b505afa1580156110a6573d6000803e3d6000fd5b505050508063ffffffff166000036110ea576040517fe7b421c800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60006110f5426129f0565b9050804211801561112557506034546111189063ffffffff908116908416613746565b61112290826159ef565b42105b1561115c576040517fb2f1777700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040805160a08101825260335463ffffffff80821683526401000000008204166020830181905267ffffffffffffffff6801000000000000000083048116948401949094527001000000000000000000000000000000008204909316606083015262ffffff7801000000000000000000000000000000000000000000000000909104166080820152906111f090849061375c565b611226576040517f84153c9100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b806060015167ffffffffffffffff164210156112805761124a83826000015161375c565b611280576040517f84153c9100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040805163ffffffff851681523360208201527ffc521917f7d89bd122571083737b90fea921fe4dc631865293f5c5c450b74652910160405180910390a15050603480547fffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000001663ffffffff92909216919091179055565b611300336131ec565b611335576040517ead0c9500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b670de0b6b3a76400008167ffffffffffffffff161115611381576040517fcb3f365b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b336000818152606b60209081526040918290208251606081018452905467ffffffffffffffff808216835268010000000000000000820416928201929092527001000000000000000000000000000000009091046fffffffffffffffffffffffffffffffff1691810191909152906113f890612eda565b67ffffffffffffffff90811682528216602082015260745461142c906fffffffffffffffffffffffffffffffff1642615a02565b6fffffffffffffffffffffffffffffffff166040828101829052805167ffffffffffffffff85168152602081019290925233917f029674ff064f2d0d5b88c006bca2b7583291550ccf6462e8ae1a9b03d0479515910160405180910390a2336000908152606b6020908152604091829020835181549285015193909401516fffffffffffffffffffffffffffffffff9081167001000000000000000000000000000000000267ffffffffffffffff94851668010000000000000000027fffffffffffffffffffffffffffffffff000000000000000000000000000000009094169490951693909317919091179190911691909117905550565b805160005b818110156115f55761155483828151811061154757611547615a2b565b6020026020010151613780565b82818151811061156657611566615a2b565b60209081029190910101516040517f4c4d0d730000000000000000000000000000000000000000000000000000000081523360048201526001600160a01b0390911690634c4d0d7390602401600060405180830381600087803b1580156115cc57600080fd5b505af11580156115e0573d6000803e3d6000fd5b505050506115ee8160010190565b905061152a565b505050565b6000546040517fd994d6d50000000000000000000000000000000000000000000000000000000081523360048201526001600160a01b039091169063d994d6d590602401602060405180830381865afa15801561165b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061167f9190615a6a565b158015611712575060008054906101000a90046001600160a01b03166001600160a01b031663ce7ee5ac6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156116d8573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906116fc9190615a85565b6001600160a01b0316336001600160a01b031614155b15611749576040517f39f34f8400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60345461175c9063ffffffff168361375c565b611792576040517f7fc5120500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60008061179d611ef7565b6040805160a08101825260335467ffffffffffffffff700100000000000000000000000000000000820481166060840152780100000000000000000000000000000000000000000000000090910462ffffff16608083015263ffffffff848116808452908a1660208401529085169282018390529395509193509091611824919042613824565b67ffffffffffffffff166060820181905262ffffff851660808301526040805163ffffffff8816815260208101929092527f15c8ad9af95537fe83718dcd140a2b725b6e190fb5e68c4f13ff38232b86b77c910160405180910390a180516033805460208401516040850151606086015160809096015163ffffffff9586167fffffffffffffffffffffffffffffffffffffffffffffffff0000000000000000909416939093176401000000009590921694909402177fffffffffffffffff00000000000000000000000000000000ffffffffffffffff166801000000000000000067ffffffffffffffff948516027fffffffffffffffff0000000000000000ffffffffffffffffffffffffffffffff16177001000000000000000000000000000000009390941692909202929092177fffffffffff000000ffffffffffffffffffffffffffffffffffffffffffffffff16780100000000000000000000000000000000000000000000000062ffffff9092169190910217905550505050565b336000908152607160205260409020546001600160a01b0316806119f4576040517f412a573000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b33600090815260686020526040902054610100900460ff16611a42576040517fdfac5c4a00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b3360009081526068602052604090205462010000900460ff16611a91576040517f2272386e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b33600090815260686020526040902054640100000000900460ff16611ae2576040517f73f7ab1e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b670de0b6b3a76400008267ffffffffffffffff161115611b2e576040517fcb3f365b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b33600081815260686020908152604080832080547fffffffffffffffffffffffffffffffffffffffffffffffffffffff00ffffffff169055606b8252918290208251606081018452905467ffffffffffffffff808216835268010000000000000000820416928201929092527001000000000000000000000000000000009091046fffffffffffffffffffffffffffffffff169181019190915290611bd290612eda565b67ffffffffffffffff90811682528381166020808401918252336000908152606b909152604090819020845181549351928601516fffffffffffffffffffffffffffffffff9081167001000000000000000000000000000000000293861668010000000000000000027fffffffffffffffffffffffffffffffff0000000000000000000000000000000090951691909516179290921792909216919091179055611c7b8261383b565b604080820151815167ffffffffffffffff861681526fffffffffffffffffffffffffffffffff909116602082015233917f7dba82990ac719cd904649f1701fcda6db3c92f2ff9cd31ceed2eb989a441d3191015b60405180910390a2505050565b6001600160a01b038181166000908152606a6020526040812054909116158015906110045750506001600160a01b039081166000908152606a602090815260408083205460699092529091205482169116141590565b60af5460ff1615611d6f576040517fbc1eb20900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b611d77612f65565b600003611db0576040517fb9927e0d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b3415611e19573460ac6000828254611dc891906159ef565b9091555050604051348152339073f7ab6cfaebbadfe8b5494022c4c6db776bd63b6b907ff70d5c697de7ea828df48e5c4573cb2194c659f1901f70110c52b066dcf508269060200160405180910390a35b8015611e90578060ab6000828254611e3191906159ef565b909155505060a85460405182815233916001600160a01b0316907ff70d5c697de7ea828df48e5c4573cb2194c659f1901f70110c52b066dcf508269060200160405180910390a360a854611e90906001600160a01b031633308461386a565b50565b336000908152606960205260409020546001600160a01b0316611eb5816138f2565b6040516001600160a01b038216815233907f4815977db1df3778807ed9d5a0c32398684440c2cd8cfc0a411b47528214df7b906020015b60405180910390a250565b6040805160a08101825260335463ffffffff8082168352640100000000820416602083015268010000000000000000810467ffffffffffffffff90811693830193909352700100000000000000000000000000000000810490921660608201819052780100000000000000000000000000000000000000000000000090920462ffffff166080820152600091829190421061203957806080015162ffffff16816020015163ffffffff168260600151611fb09190615aa2565b611fba9190615aa2565b67ffffffffffffffff1642101561200257806060015167ffffffffffffffff16816080015162ffffff168260200151611ff39190615ac3565b63ffffffff1692509250509091565b806080015162ffffff16816060015161201b9190615aa2565b67ffffffffffffffff16816020015163ffffffff1692509250509091565b806040015167ffffffffffffffff16816000015163ffffffff1692509250509091565b60af5460ff1615612099576040517fbc1eb20900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b828181146120d3576040517fccab218c00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b33600090815260b0602052604081205460a95490916120f142612701565b905060005b8481101561215b5760008061214c8b8b8581811061211657612116615a2b565b905060200201602081019061212b9190615399565b8a8a8681811061213d5761213d615a2b565b90506020020135888888613979565b909650945050506001016120f6565b50612167338484613b0a565b5050505050505050565b805160005b818110156122a75760006001600160a01b03166072600085848151811061219f5761219f615a2b565b6020908102919091018101516001600160a01b039081168352908201929092526040016000205416036121fe576040517f3c91aa3a00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b82818151811061221057612210615a2b565b60209081029190910101516040517ff7b761580000000000000000000000000000000000000000000000000000000081526001600160a01b0386811660048301523360248301529091169063f7b7615890604401600060405180830381600087803b15801561227e57600080fd5b505af1158015612292573d6000803e3d6000fd5b505050506122a08160010190565b9050612176565b50505050565b6000611004606c83613be4565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805468010000000000000000810460ff16159067ffffffffffffffff166000811580156123055750825b905060008267ffffffffffffffff1660011480156123225750303b155b905081158015612330575080155b15612367576040517ff92ee8a900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b84547fffffffffffffffffffffffffffffffffffffffffffffffff000000000000000016600117855583156123c85784547fffffffffffffffffffffffffffffffffffffffffffffff00ffffffffffffffff16680100000000000000001785555b6123d78e8c8c8c8c8c8c613bf0565b8c60a860006101000a8154816001600160a01b0302191690836001600160a01b031602179055508b60a760006101000a8154816001600160a01b0302191690836001600160a01b0316021790555061242e426129d4565b60ae5583156124925784547fffffffffffffffffffffffffffffffffffffffffffffff00ffffffffffffffff168555604051600181527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b5050505050505050505050505050565b6124aa613c9b565b6124b382613d6d565b6124bd8282613de4565b5050565b60006124cb613f08565b507f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc90565b336000908152607160205260409020546001600160a01b031680612540576040517f412a573000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b33600090815260686020526040902054610100900460ff1661258e576040517fdfac5c4a00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b3360009081526068602052604090205462010000900460ff166125dd576040517f2272386e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b33600090815260686020526040902054640100000000900460ff161561262f576040517f905e710700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b33600090815260686020526040902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffff00ffffffff1664010000000017905560745461268a906fffffffffffffffffffffffffffffffff16426159ef565b336000908152606b6020526040902080546fffffffffffffffffffffffffffffffff9283167001000000000000000000000000000000000292169190911790556126d381613f6a565b60405133907fb6fa8b8bd5eab60f292eca876e3ef90722275b785309d84b1de113ce0b8c4e7490600090a250565b600080600061270e611ef7565b9150915061271d828286613f98565b949350505050565b6001600160a01b03808216600090815260726020526040812054909161100491166131ec565b6000546040517f445ac6330000000000000000000000000000000000000000000000000000000081523360048201526001600160a01b039091169063445ac6339060240160006040518083038186803b1580156127a757600080fd5b505afa1580156127bb573d6000803e3d6000fd5b505050506115f5838383613fc2565b6000611004606e83613724565b60006127e3606e6141d9565b905090565b6000546040517f7e185f570000000000000000000000000000000000000000000000000000000081523360048201526001600160a01b0390911690637e185f579060240160006040518083038186803b15801561284457600080fd5b505afa158015612858573d6000803e3d6000fd5b505050506001600160a01b0381811660009081526071602052604090205416806128ae576040517f412a573000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001600160a01b03821660009081526068602052604090205462010000900460ff16612906576040517f2272386e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001600160a01b038216600090815260686020526040902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ffff16905561294d81613f6a565b6129588160006141e3565b6040516001600160a01b038316907f78c8e01ebc9b1b82f14af9f3a9b6fa7bdba5e36f9e96d15ca3aebc36cf72ce8590600090a25050565b612999816138f2565b6040516001600160a01b038216815233907ffd86eb6a6fd802b0b2edabf5bc13b0ada6e619b69bb19a08d048e2d2374de2d190602001611eec565b60008060006129e1611ef7565b9150915061271d828286613824565b60008060006129fd611ef7565b90925090506000612a0e8386615ae0565b9050818181612a1f57612a1f615af3565b06909403949350505050565b6000546040517f445ac6330000000000000000000000000000000000000000000000000000000081523360048201526001600160a01b039091169063445ac6339060240160006040518083038186803b158015612a8757600080fd5b505afa158015612a9b573d6000803e3d6000fd5b505050506001600160a01b038181166000908152607160205260409020541680612af1576040517f412a573000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001600160a01b03821660009081526068602052604090205460ff16612b43576040517f037c597f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001600160a01b038216600090815260686020526040902054610100900460ff1615612b9b576040517f0c60c81000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001600160a01b038216600090815260686020526040902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff16610100179055612be68161383b565b6040516001600160a01b038316907f333bb19eeef0621b32888db778cc7a481a89fc1d59adb2cecb59b40ef048941e90600090a25050565b6000546040517f445ac6330000000000000000000000000000000000000000000000000000000081523360048201526001600160a01b039091169063445ac6339060240160006040518083038186803b158015612c7a57600080fd5b505afa158015612c8e573d6000803e3d6000fd5b50505050612c9b826131ec565b612cd0576040517ead0c9500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001600160a01b038083166000908152606a602052604090205481169082168114612d27576040517f3b7db6df00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001600160a01b0383811660008181526069602090815260409182902080547fffffffffffffffffffffffff0000000000000000000000000000000000000000168686161790559051928516835290917f390b365b1e8016ae28db114a7764f9e95293831d64e8958261d56cf59a2c01739101611ccf565b60af5460ff1615612ddc576040517fbc1eb20900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b33600090815260b0602052604081205460a9548291612e079186918691612e0242612701565b613979565b915091506122a7338383613b0a565b6000546040517f445ac6330000000000000000000000000000000000000000000000000000000081523360048201526001600160a01b039091169063445ac6339060240160006040518083038186803b158015612e7257600080fd5b505afa158015612e86573d6000803e3d6000fd5b50505050612e9383614273565b50612e9f838383613fc2565b60405133906001600160a01b038516907f8af41f46390f96b58351b4d4f8afb27eea35637de1fb1b9538308b25497a27dc90600090a3505050565b6001600160a01b0381166000908152606b602090815260408083208151606081018352905467ffffffffffffffff808216835268010000000000000000820416938201939093527001000000000000000000000000000000009092046fffffffffffffffffffffffffffffffff169082018190524210612f5e576020015192915050565b5192915050565b60006127e3606c6141d9565b6000546040517f445ac6330000000000000000000000000000000000000000000000000000000081523360048201526001600160a01b039091169063445ac6339060240160006040518083038186803b158015612fcd57600080fd5b505afa158015612fe1573d6000803e3d6000fd5b505050506001600160a01b038216600081815260686020908152604091829020805463010000006bffffffffffffffff00ffffff9091166c01000000000000000000000000606088901c021717905590517fffffffffffffffffffffffffffffffffffffffff000000000000000000000000841681527f6525882b4c209582fe16abd1257106636114aefe60495f27fcf096a21c8a6d34910160405180910390a25050565b600080546040517f7e185f570000000000000000000000000000000000000000000000000000000081523360048201526001600160a01b0390911690637e185f579060240160006040518083038186803b1580156130e357600080fd5b505afa1580156130f7573d6000803e3d6000fd5b5050505061100482614273565b919050565b600061311442611017565b421061314c576040517f137d765400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60af5460ff1615613189576040517fbc1eb20900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60405133907fe64e289f2bf6b4f5ccbc1597d14be6638e1517b1b29e2ec5a05101f57d8d81e890600090a26131bc6143cf565b60af80547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00168215179055919050565b6001600160a01b0381166000908152606860209081526040808320815160e081018352905460ff8082161515835261010082048116158015958401869052620100008304821615159484019490945263010000008204811615156060808501919091526401000000008304909116151560808401527fffffffffffffff0000000000000000000000000000000000000000000000000065010000000000830460c81b1660a08401527fffffffffffffffffffffffffffffffffffffffff0000000000000000000000006c01000000000000000000000000909204901b1660c082015291906132db575080604001515b80156132e957508060600151155b9392505050565b6001600160a01b038216600090815260b0602052604081205480820361331a576001915050611004565b60a7546040517f70a082310000000000000000000000000000000000000000000000000000000081526001600160a01b038681166004830152839216906370a0823190602401602060405180830381865afa15801561337d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906133a19190615b22565b1015949350505050565b60af5460009060ff16151581036133ee576040517f3d0a971800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6131bc6143cf565b6000611004606e83613be4565b600061340e336127ca565b1561342757503360009081526073602052604090205490565b5060ae5490565b6000546040517f445ac6330000000000000000000000000000000000000000000000000000000081523360048201526001600160a01b039091169063445ac6339060240160006040518083038186803b15801561348a57600080fd5b505afa15801561349e573d6000803e3d6000fd5b505050506001600160a01b038116600090815260686020526040902054610100900460ff166134f9576040517fdfac5c4a00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001600160a01b03808216600090815260686020908152604080832080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff16905560719091529020541680156135cc5761355381613f6a565b6067546040517f95f948dc0000000000000000000000000000000000000000000000000000000081526001600160a01b039182166004820152908216906395f948dc90602401600060405180830381600087803b1580156135b357600080fd5b505af11580156135c7573d6000803e3d6000fd5b505050505b6040516001600160a01b038316907ffb4ca6a2470de95e9f648557fae63380f22c4b760bd27b0571caf5977a30278a90600090a25050565b6000546040517f445ac6330000000000000000000000000000000000000000000000000000000081523360048201526001600160a01b039091169063445ac6339060240160006040518083038186803b15801561366057600080fd5b505afa158015613674573d6000803e3d6000fd5b505050506001600160a01b0381166000908152606860205260409020546301000000900460ff166136d1576040517f6cd6020100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001600160a01b03811660008181526068602052604080822080546bffffffffffffffff00ffffff169055517f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa9190a250565b6001600160a01b038116600090815260018301602052604081205415156132e9565b600081831161375557816132e9565b5090919050565b6000613769836002615b3b565b63ffffffff168263ffffffff161015905092915050565b6001600160a01b0380821660009081526072602052604090205416806137d2576040517f3c91aa3a00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001600160a01b03811660009081526068602052604090205460ff166124bd576040517f037c597f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000613831848484613f98565b9091019392505050565b6138448161452a565b15611e9057613854606c82614639565b50613860606e8261464e565b50611e9081614663565b604080516001600160a01b0385811660248301528416604482015260648082018490528251808303909101815260849091019091526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f23b872dd000000000000000000000000000000000000000000000000000000001790526122a7908590614870565b336138fc816131ec565b613931576040517ead0c9500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001600160a01b039081166000908152606a602052604090208054919092167fffffffffffffffffffffffff0000000000000000000000000000000000000000909116179055565b60008061398587613780565b6040517fab3f22d50000000000000000000000000000000000000000000000000000000081523360048201526024810187905260448101849052600090819081906001600160a01b038b169063ab3f22d5906064016060604051808303816000875af11580156139f9573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613a1d9190615b63565b925092509250613a2c8a6127ca565b15613a805780613a68576040517f8b6f39e300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b613a728389615ae0565b9450869350613b0092505050565b8015613aa357613a908389615ae0565b9450613a9c8288615ae0565b9350613abc565b613aad83896159ef565b9450613ab982886159ef565b93505b6040518981526001600160a01b038b169033907fed07ca57097393e77ba36105a07f6810afc2180b72a9c02a4b0da4b51a73a6ec9060200160405180910390a35050505b9550959350505050565b6001600160a01b03838116600081815260b060205260409081902085905560a984905560a75490517f70a082310000000000000000000000000000000000000000000000000000000081526004810192909252909116906370a0823190602401602060405180830381865afa158015613b87573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613bab9190615b22565b8211156115f5576040517f2e0aee6200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60006132e983836148ec565b613bf8614916565b613c048785858561497d565b613c0c614ae4565b607080547fffffffffffffffffffffffff00000000000000000000000000000000000000009081166001600160a01b03988916179091556067805490911695909616949094179094555050607480547fffffffffffffffffffffffffffffffff00000000000000000000000000000000166fffffffffffffffffffffffffffffffff9092169190911790555050565b306001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000161480613d3457507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316613d287f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc546001600160a01b031690565b6001600160a01b031614155b15613d6b576040517fe07c8dba00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b565b6000546040517feb6f7abf0000000000000000000000000000000000000000000000000000000081523360048201526001600160a01b039091169063eb6f7abf9060240160006040518083038186803b158015613dc957600080fd5b505afa158015613ddd573d6000803e3d6000fd5b5050505050565b816001600160a01b03166352d1902d6040518163ffffffff1660e01b8152600401602060405180830381865afa925050508015613e5c575060408051601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0168201909252613e5991810190615b22565b60015b613ea2576040517f4c9c8ce30000000000000000000000000000000000000000000000000000000081526001600160a01b03831660048201526024015b60405180910390fd5b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc8114613efe576040517faa1d49a400000000000000000000000000000000000000000000000000000000815260048101829052602401613e99565b6115f58383614aec565b306001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614613d6b576040517fe07c8dba00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b613f73816127ca565b611e9057613f82606e82614639565b50613f8e606c8261464e565b50611e9081614b42565b600080613fa58584615ae0565b9050838181613fb657613fb6615af3565b06909303949350505050565b6001600160a01b03831660009081526068602052604090205460ff1615614015576040517fef65161f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001600160a01b03838116600090815260686020908152604080832080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000166101011790556069909152902080547fffffffffffffffffffffffff000000000000000000000000000000000000000016918416919091179055670de0b6b3a764000067ffffffffffffffff821611156140db576040517fcb3f365b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001600160a01b038381166000818152606b602081815260408084208151606081018352815467ffffffffffffffff8a8116808452838701818152426fffffffffffffffffffffffffffffffff9081168689019081529a8c905298885284519051995189167001000000000000000000000000000000000299831668010000000000000000027fffffffffffffffffffffffffffffffff0000000000000000000000000000000090941692169190911791909117909516959095179055805195881686529085019190915290927f7c17fc62e6995162bad4a8b971071389b16be69a2aad3ffec7b89101ccf832f2910160405180910390a250505050565b6000611004825490565b60a8546040517f095ea7b30000000000000000000000000000000000000000000000000000000081526001600160a01b038481166004830152602482018490529091169063095ea7b3906044016020604051808303816000875af115801561424f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906115f59190615a6a565b6001600160a01b03811660009081526068602052604081205462010000900460ff16156142cc576040517f9add58c500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001600160a01b03828116600090815260716020526040902054161561431e576040517f7fe8efbb00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001600160a01b038216600090815260686020526040902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ffff166201000017905561436a82614c16565b9050614396817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6141e3565b6040516001600160a01b038316907f65b21a2a34a615112fde6cfc7e1bfef6dd30a04b0d2003751618b1571cab53d990600090a2919050565b60aa5460ad5460009190826143e2612f65565b905060006143fa826143f56014866159ef565b614d4f565b60ab5460ac5460a95460ae549394509192909190600080614419611ef7565b915091505b868910156144545761443d6144328a6122ad565b878787878787614d5e565b614447908b6159ef565b995060018901985061441e565b60405133907fcc320ee5dbf17441226d664c195a950e95eef67dc4dbebde435456c5389b427e90600090a287870361450f5760405133907f2e0a637781c44a621d21ae02c97a62860799594e47e453e0491eb348ebf83bff90600090a2600060ad81905560ac81905560ab81905560af80547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016905560aa5560a98a90556144fb426129d4565b60ae555060019a9950505050505050505050565b50505060ad9590955550505060aa9290925550600092915050565b6001600160a01b03808216600090815260726020908152604080832054909316825260688152828220835160e081018552905460ff8082161515835261010082048116158015948401859052620100008304821615159684019690965263010000008204811615156060808501919091526401000000008304909116151560808401527fffffffffffffff0000000000000000000000000000000000000000000000000065010000000000830460c81b1660a08401527fffffffffffffffffffffffffffffffffffffffff0000000000000000000000006c01000000000000000000000000909204901b1660c08201529192614627575080604001515b80156132e95750608001511592915050565b60006132e9836001600160a01b038416614ede565b60006132e9836001600160a01b038416614f2d565b60af5460ff16156146a0576040517fbc1eb20900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b4260ae54116146db576040517fd0f0904700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60ae546001600160a01b03821660009081526073602052604090205410156147dd57600080614708611ef7565b6001600160a01b0385166000818152607360205260408082205490517fa505626a0000000000000000000000000000000000000000000000000000000081526004810183905260248101839052604481019190915260648101859052608481018490529395509193509163a505626a919060a40160206040518083038185885af115801561479a573d6000803e3d6000fd5b50505050506040513d601f19601f820116820180604052508101906147bf9190615b22565b60a960008282546147d091906159ef565b9091555061485692505050565b806001600160a01b031663e52595466040518163ffffffff1660e01b8152600401602060405180830381865afa15801561481b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061483f9190615b22565b60a9600082825461485091906159ef565b90915550505b6001600160a01b0316600090815260736020526040812055565b60006148856001600160a01b03841683615027565b905080516000141580156148aa5750808060200190518101906148a89190615a6a565b155b156115f5576040517f5274afe70000000000000000000000000000000000000000000000000000000081526001600160a01b0384166004820152602401613e99565b600082600001828154811061490357614903615a2b565b9060005260206000200154905092915050565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a005468010000000000000000900460ff16613d6b576040517fd7e6bcf800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b614985614916565b61498e84615035565b6040805160a0810182526033805463ffffffff9687168084526020840181905267ffffffffffffffff42169484018590526060840185905262ffffff9690961660809093018390527fffffffffffffffffffffffffffffffffffffffffffffffff0000000000000000168517640100000000909502949094177fffffffffffffffff00000000000000000000000000000000ffffffffffffffff166801000000000000000083027fffffffffffffffff0000000000000000ffffffffffffffffffffffffffffffff1617700100000000000000000000000000000000909202919091177fffffffffff000000ffffffffffffffffffffffffffffffffffffffffffffffff16780100000000000000000000000000000000000000000000000090910217909155603480547fffffffffffffffffffffffffffffffffffffffffffffffffffffffff00000000169190921617905550565b613d6b614916565b614af58261507f565b6040516001600160a01b038316907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a2805115614b3a576115f58282615127565b6124bd61519d565b60af5460ff1615614b7f576040517fbc1eb20900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b806001600160a01b031663e52595466040518163ffffffff1660e01b8152600401602060405180830381865afa158015614bbd573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190614be19190615b22565b60a96000828254614bf29190615ae0565b909155505060ae546001600160a01b03909116600090815260736020526040902055565b607054604080517fdc5a417900000000000000000000000000000000000000000000000000000000815290516000926001600160a01b03169163dc5a4179916004808301926020929190829003018187875af1158015614c7a573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190614c9e9190615a85565b6001600160a01b03808416600081815260716020908152604080832080549587167fffffffffffffffffffffffff0000000000000000000000000000000000000000968716811790915583526072909152902080549092161790559050614d06606c82614639565b506040513381526001600160a01b0380831691908416907f9b8203efe7fe42185a7755b0510f87c8b693971d6a7c22520aaf683e6b1242619060200160405180910390a3919050565b600081831061375557816132e9565b600080886001600160a01b031663e52595466040518163ffffffff1660e01b8152600401602060405180830381865afa158015614d9f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190614dc39190615b22565b9050600086614dd28a84615b8f565b614ddc9190615ba6565b9050600087614deb8a85615b8f565b614df59190615ba6565b6001600160a01b03808d1660009081526072602052604081205492935091614e1d9116612eda565b6040517fa505626a0000000000000000000000000000000000000000000000000000000081526004810185905267ffffffffffffffff9190911660248201819052604482018a9052606482018990526084820188905291506001600160a01b038d169063a505626a90849060a40160206040518083038185885af1158015614ea9573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190614ece9190615b22565b9c9b505050505050505050505050565b6000818152600183016020526040812054614f2557508154600181810184556000848152602080822090930184905584548482528286019093526040902091909155611004565b506000611004565b60008181526001830160205260408120548015615016576000614f51600183615ae0565b8554909150600090614f6590600190615ae0565b9050808214614fca576000866000018281548110614f8557614f85615a2b565b9060005260206000200154905080876000018481548110614fa857614fa8615a2b565b6000918252602080832090910192909255918252600188019052604090208390555b8554869080614fdb57614fdb615be1565b600190038181906000526020600020016000905590558560010160008681526020019081526020016000206000905560019350505050611004565b6000915050611004565b5092915050565b60606132e9838360006151d5565b61503d614916565b615045614ae4565b600080547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b0392909216919091179055565b806001600160a01b03163b6000036150ce576040517f4c9c8ce30000000000000000000000000000000000000000000000000000000081526001600160a01b0382166004820152602401613e99565b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc80547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b0392909216919091179055565b6060600080846001600160a01b0316846040516151449190615c10565b600060405180830381855af49150503d806000811461517f576040519150601f19603f3d011682016040523d82523d6000602084013e615184565b606091505b509150915061519485838361528b565b95945050505050565b3415613d6b576040517fb398979f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b606081471015615213576040517fcd786059000000000000000000000000000000000000000000000000000000008152306004820152602401613e99565b600080856001600160a01b0316848660405161522f9190615c10565b60006040518083038185875af1925050503d806000811461526c576040519150601f19603f3d011682016040523d82523d6000602084013e615271565b606091505b509150915061528186838361528b565b9695505050505050565b6060826152a05761529b82615300565b6132e9565b81511580156152b757506001600160a01b0384163b155b156152f9576040517f9996b3150000000000000000000000000000000000000000000000000000000081526001600160a01b0385166004820152602401613e99565b50806132e9565b8051156153105780518082602001fd5b6040517f1425ea4200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60006020828403121561535457600080fd5b81357fffffffff00000000000000000000000000000000000000000000000000000000811681146132e957600080fd5b6001600160a01b0381168114611e9057600080fd5b6000602082840312156153ab57600080fd5b81356132e981615384565b6000602082840312156153c857600080fd5b5035919050565b803563ffffffff8116811461310457600080fd5b6000602082840312156153f557600080fd5b6132e9826153cf565b803567ffffffffffffffff8116811461310457600080fd5b60006020828403121561542857600080fd5b6132e9826153fe565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016810167ffffffffffffffff811182821017156154a7576154a7615431565b604052919050565b600082601f8301126154c057600080fd5b8135602067ffffffffffffffff8211156154dc576154dc615431565b8160051b6154eb828201615460565b928352848101820192828101908785111561550557600080fd5b83870192505b8483101561552d57823561551e81615384565b8252918301919083019061550b565b979650505050505050565b60006020828403121561554a57600080fd5b813567ffffffffffffffff81111561556157600080fd5b61271d848285016154af565b803562ffffff8116811461310457600080fd5b6000806040838503121561559357600080fd5b61559c836153cf565b91506155aa6020840161556d565b90509250929050565b60008083601f8401126155c557600080fd5b50813567ffffffffffffffff8111156155dd57600080fd5b6020830191508360208260051b85010111156155f857600080fd5b9250929050565b6000806000806040858703121561561557600080fd5b843567ffffffffffffffff8082111561562d57600080fd5b615639888389016155b3565b9096509450602087013591508082111561565257600080fd5b5061565f878288016155b3565b95989497509550505050565b6000806040838503121561567e57600080fd5b823561568981615384565b9150602083013567ffffffffffffffff8111156156a557600080fd5b6156b1858286016154af565b9150509250929050565b60008060008060008060008060006101208a8c0312156156da57600080fd5b89356156e581615384565b985060208a01356156f581615384565b975060408a013561570581615384565b965060608a013561571581615384565b955060808a013561572581615384565b945061573360a08b016153cf565b935061574160c08b0161556d565b925061574f60e08b016153cf565b91506101008a01356fffffffffffffffffffffffffffffffff8116811461577557600080fd5b809150509295985092959850929598565b6000806040838503121561579957600080fd5b82356157a481615384565b915060208381013567ffffffffffffffff808211156157c257600080fd5b818601915086601f8301126157d657600080fd5b8135818111156157e8576157e8615431565b615818847fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f84011601615460565b9150808252878482850101111561582e57600080fd5b80848401858401376000848284010152508093505050509250929050565b60008060006060848603121561586157600080fd5b833561586c81615384565b9250602084013561587c81615384565b915061588a604085016153fe565b90509250925092565b60005b838110156158ae578181015183820152602001615896565b50506000910152565b60208152600082518060208401526158d6816040850160208701615893565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169190910160400192915050565b6000806040838503121561591b57600080fd5b823561592681615384565b9150602083013561593681615384565b809150509250929050565b6000806040838503121561595457600080fd5b823561595f81615384565b946020939093013593505050565b6000806040838503121561598057600080fd5b823561598b81615384565b915060208301357fffffffffffffffffffffffffffffffffffffffff0000000000000000000000008116811461593657600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b80820180821115611004576110046159c0565b6fffffffffffffffffffffffffffffffff818116838216019080821115615020576150206159c0565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b8051801515811461310457600080fd5b600060208284031215615a7c57600080fd5b6132e982615a5a565b600060208284031215615a9757600080fd5b81516132e981615384565b67ffffffffffffffff818116838216019080821115615020576150206159c0565b63ffffffff818116838216019080821115615020576150206159c0565b81810381811115611004576110046159c0565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b600060208284031215615b3457600080fd5b5051919050565b63ffffffff818116838216028082169190828114615b5b57615b5b6159c0565b505092915050565b600080600060608486031215615b7857600080fd5b835192506020840151915061588a60408501615a5a565b8082028115828204841417611004576110046159c0565b600082615bdc577f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b500490565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fd5b60008251615c22818460208701615893565b919091019291505056fea164736f6c6343000814000a", + "devdoc": { + "version": 1, + "kind": "dev", + "methods": { + "activateBuilder(address,address,uint64)": { + "details": "reverts if it is not called by the owner address reverts if it is already activated", + "params": { + "builder_": "address of the builder", + "rewardPercentage_": "reward percentage(100% == 1 ether)", + "rewardReceiver_": "address of the builder reward receiver" + } + }, + "allocate(address,uint256)": { + "details": "reverts if it is called during the distribution period reverts if gauge does not have a builder associated", + "params": { + "allocation_": "amount of votes to allocate", + "gauge_": "address of the gauge where the votes will be allocated" + } + }, + "allocateBatch(address[],uint256[])": { + "details": "reverts if it is called during the distribution period reverts if gauge does not have a builder associated", + "params": { + "allocations_": "array of amount of votes to allocate", + "gauges_": "array of gauges where the votes will be allocated" + } + }, + "approveBuilderKYC(address)": { + "details": "reverts if it is not called by the owner address reverts if it is not activated reverts if it is already KYC approved reverts if it does not have a gauge associated", + "params": { + "builder_": "address of the builder" + } + }, + "approveBuilderRewardReceiverReplacement(address,address)": { + "details": "reverts if provided `rewardReceiverReplacement_` doesn't match Builder's request", + "params": { + "builder_": "address of the builder", + "rewardReceiverReplacement_": "new address the builder is requesting to use" + } + }, + "canWithdraw(address,uint256)": { + "details": "user token balance should already account for the update, meaning the check is applied AFTER the withdraw accounting has become effective.", + "params": { + "targetAddress_": "address who wants to withdraw stakingToken param value_ amount of stakingToken to withdraw, not used on current version" + } + }, + "cancelRewardReceiverReplacementRequest()": { + "details": "reverts if Builder is not Operational" + }, + "claimBackerRewards(address,address[])": { + "params": { + "gauges_": "array of gauges to claim", + "rewardToken_": "address of the token rewarded address(uint160(uint256(keccak256(\"COINBASE_ADDRESS\")))) is used for coinbase address" + } + }, + "claimBackerRewards(address[])": { + "params": { + "gauges_": "array of gauges to claim" + } + }, + "communityApproveBuilder(address)": { + "details": "reverts if it is not called by the governor address or authorized changer reverts if is already community approved reverts if it has a gauge associated", + "params": { + "builder_": "address of the builder" + }, + "returns": { + "gauge_": "gauge contract" + } + }, + "constructor": {}, + "cycleNext(uint256)": { + "params": { + "timestamp_": "timestamp to calculate" + }, + "returns": { + "_0": "cycleNext timestamp when the cycle ends or the next starts" + } + }, + "cycleStart(uint256)": { + "params": { + "timestamp_": "timestamp to calculate" + }, + "returns": { + "_0": "cycleStart timestamp when the cycle starts" + } + }, + "dewhitelistBuilder(address)": { + "details": "reverts if it is not called by the governor address or authorized changer reverts if it does not have a gauge associated reverts if it is not community approved", + "params": { + "builder_": "address of the builder" + } + }, + "distribute()": { + "details": "reverts if distribution period has not yet started This function is paginated and it finishes once all gauges distribution are completed, ending the distribution period and voting restrictions.", + "returns": { + "finished_": "true if distribution has finished" + } + }, + "endDistributionWindow(uint256)": { + "params": { + "timestamp_": "timestamp to calculate" + }, + "returns": { + "_0": "endDistributionWindow timestamp when the cycle distribution ends" + } + }, + "getRewardPercentageToApply(address)": { + "params": { + "builder_": "address of the builder" + } + }, + "hasBuilderRewardReceiverPendingApproval(address)": { + "params": { + "builder_": "address of the builder" + } + }, + "initialize(address,address,address,address,address,uint32,uint24,uint32,uint128)": { + "params": { + "cycleDuration_": "Collective Rewards cycle time duration", + "cycleStartOffset_": "offset to add to the first cycle, used to set an specific day to start the cycles", + "distributionDuration_": "duration of the distribution window", + "gaugeFactory_": "address of the GaugeFactoryRootstockCollective contract", + "governanceManager_": "contract with permissioned roles", + "rewardDistributor_": "address of the rewardDistributor contract", + "rewardPercentageCooldown_": "time that must elapse for a new reward percentage from a builder to be applied", + "rewardToken_": "address of the token rewarded to builder and voters", + "stakingToken_": "address of the staking token for builder and voters" + } + }, + "migrateBuilder(address,address,uint64)": { + "params": { + "builder_": "address of the builder whitelisted on the V1's SimplifiedRewardDistributor contract", + "rewardAddress_": "address of the builder reward receiver whitelisted on the V1's SimplifiedRewardDistributor contract", + "rewardPercentage_": "reward percentage(100% == 1 ether)" + } + }, + "notifyRewardAmount(uint256)": { + "details": "reverts if it is called during the distribution period reverts if there are no gauges available for the distribution" + }, + "pauseBuilder(address,bytes20)": { + "details": "reverts if it is not called by the owner address", + "params": { + "builder_": "address of the builder", + "reason_": "reason for the pause" + } + }, + "permitBuilder(uint64)": { + "details": "reverts if it does not have a gauge associated reverts if it is not KYC approved reverts if it is not community approved reverts if it is not revoked reverts if it is executed in distribution period because changing the totalPotentialReward produce a miscalculation of rewards", + "params": { + "rewardPercentage_": "reward percentage(100% == 1 ether)" + } + }, + "proxiableUUID()": { + "details": "Implementation of the ERC1822 {proxiableUUID} function. This returns the storage slot used by the implementation. It is used to validate the implementation's compatibility when performing an upgrade. IMPORTANT: A proxy pointing at a proxiable contract should not be considered proxiable itself, because this risks bricking a proxy that upgrades to it, by delegating to itself until out of gas. Thus it is critical that this function revert if invoked through a proxy. This is guaranteed by the `notDelegated` modifier." + }, + "revokeBuilder()": { + "details": "reverts if it does not have a gauge associated reverts if it is not KYC approved reverts if it is not community approved reverts if it is already revoked reverts if it is executed in distribution period because changing the totalPotentialReward produce a miscalculation of rewards" + }, + "revokeBuilderKYC(address)": { + "details": "reverts if it is not called by the owner address reverts if it is not KYC approved", + "params": { + "builder_": "address of the builder" + } + }, + "setBackerRewardPercentage(uint64)": { + "details": "reverts if builder is not operational", + "params": { + "rewardPercentage_": "reward percentage(100% == 1 ether)" + } + }, + "setCycleDuration(uint32,uint24)": { + "details": "reverts if is too short. It must be greater than 2 time the distribution windowonly callable by an authorized changer or the foundation", + "params": { + "cycleStartOffset_": "offset to add to the first cycle, used to set an specific day to start the cycles", + "newCycleDuration_": "new cycle duration" + } + }, + "setDistributionDuration(uint32)": { + "details": "reverts if is too short. It must be greater than 0reverts if the new distribution is greater than half of the cycle durationreverts if the distribution window is modified during the distribution windowonly callable by the foundation", + "params": { + "newDistributionDuration_": "new distribution window duration" + } + }, + "startDistribution()": { + "details": "reverts if is called outside the distribution window reverts if it is called during the distribution period", + "returns": { + "finished_": "true if distribution has finished" + } + }, + "submitRewardReceiverReplacementRequest(address)": { + "details": "reverts if Builder is not Operational", + "params": { + "newRewardReceiver_": "new address the builder is requesting to use" + } + }, + "supportsInterface(bytes4)": { + "details": "See {IERC165-supportsInterface}." + }, + "timeUntilNextCycle(uint256)": { + "params": { + "timestamp_": "timestamp to calculate" + }, + "returns": { + "_0": "timeUntilNextCycle amount of time until next cycle" + } + }, + "unpauseBuilder(address)": { + "details": "reverts if it is not called by the owner address reverts if it is not paused", + "params": { + "builder_": "address of the builder" + } + }, + "upgradeToAndCall(address,bytes)": { + "details": "Upgrade the implementation of the proxy to `newImplementation`, and subsequently execute the function call encoded in `data`. Calls {_authorizeUpgrade}. Emits an {Upgraded} event." + } + }, + "events": { + "Initialized(uint64)": { + "details": "Triggered when the contract has been initialized or reinitialized." + }, + "Upgraded(address)": { + "details": "Emitted when the implementation is upgraded." + } + }, + "errors": { + "AddressEmptyCode(address)": [ + { + "details": "There's no code at `target` (it is not a contract)." + } + ], + "AddressInsufficientBalance(address)": [ + { + "details": "The ETH balance of the account is not enough to perform the operation." + } + ], + "ERC1967InvalidImplementation(address)": [ + { + "details": "The `implementation` of the proxy is invalid." + } + ], + "ERC1967NonPayable()": [ + { + "details": "An upgrade function sees `msg.value > 0` that may be lost." + } + ], + "FailedInnerCall()": [ + { + "details": "A call to an address target failed. The target may have reverted." + } + ], + "InvalidInitialization()": [ + { + "details": "The contract is already initialized." + } + ], + "NotInitializing()": [ + { + "details": "The contract is not initializing." + } + ], + "SafeERC20FailedOperation(address)": [ + { + "details": "An operation with an ERC20 token failed." + } + ], + "UUPSUnauthorizedCallContext()": [ + { + "details": "The call is from an unauthorized context." + } + ], + "UUPSUnsupportedProxiableUUID(bytes32)": [ + { + "details": "The storage `slot` is unsupported as a UUID." + } + ] + }, + "title": "BackersManagerRootstockCollective" + }, + "metadata": "{\"compiler\":{\"version\":\"0.8.20+commit.a1b79de6\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"target\",\"type\":\"address\"}],\"type\":\"error\",\"name\":\"AddressEmptyCode\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"type\":\"error\",\"name\":\"AddressInsufficientBalance\"},{\"inputs\":[],\"type\":\"error\",\"name\":\"AlreadyActivated\"},{\"inputs\":[],\"type\":\"error\",\"name\":\"AlreadyCommunityApproved\"},{\"inputs\":[],\"type\":\"error\",\"name\":\"AlreadyKYCApproved\"},{\"inputs\":[],\"type\":\"error\",\"name\":\"AlreadyRevoked\"},{\"inputs\":[],\"type\":\"error\",\"name\":\"BeforeDistribution\"},{\"inputs\":[],\"type\":\"error\",\"name\":\"BuilderAlreadyExists\"},{\"inputs\":[],\"type\":\"error\",\"name\":\"BuilderDoesNotExist\"},{\"inputs\":[],\"type\":\"error\",\"name\":\"CycleDurationTooShort\"},{\"inputs\":[],\"type\":\"error\",\"name\":\"DistributionDurationTooLong\"},{\"inputs\":[],\"type\":\"error\",\"name\":\"DistributionDurationTooShort\"},{\"inputs\":[],\"type\":\"error\",\"name\":\"DistributionModifiedDuringDistributionWindow\"},{\"inputs\":[],\"type\":\"error\",\"name\":\"DistributionPeriodDidNotStart\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"implementation\",\"type\":\"address\"}],\"type\":\"error\",\"name\":\"ERC1967InvalidImplementation\"},{\"inputs\":[],\"type\":\"error\",\"name\":\"ERC1967NonPayable\"},{\"inputs\":[],\"type\":\"error\",\"name\":\"FailedInnerCall\"},{\"inputs\":[],\"type\":\"error\",\"name\":\"GaugeDoesNotExist\"},{\"inputs\":[],\"type\":\"error\",\"name\":\"InvalidBackerRewardPercentage\"},{\"inputs\":[],\"type\":\"error\",\"name\":\"InvalidBuilderRewardReceiver\"},{\"inputs\":[],\"type\":\"error\",\"name\":\"InvalidInitialization\"},{\"inputs\":[],\"type\":\"error\",\"name\":\"NoGaugesForDistribution\"},{\"inputs\":[],\"type\":\"error\",\"name\":\"NotActivated\"},{\"inputs\":[],\"type\":\"error\",\"name\":\"NotCommunityApproved\"},{\"inputs\":[],\"type\":\"error\",\"name\":\"NotEnoughStaking\"},{\"inputs\":[],\"type\":\"error\",\"name\":\"NotInDistributionPeriod\"},{\"inputs\":[],\"type\":\"error\",\"name\":\"NotInitializing\"},{\"inputs\":[],\"type\":\"error\",\"name\":\"NotKYCApproved\"},{\"inputs\":[],\"type\":\"error\",\"name\":\"NotOperational\"},{\"inputs\":[],\"type\":\"error\",\"name\":\"NotPaused\"},{\"inputs\":[],\"type\":\"error\",\"name\":\"NotRevoked\"},{\"inputs\":[],\"type\":\"error\",\"name\":\"NotValidChangerOrFoundation\"},{\"inputs\":[],\"type\":\"error\",\"name\":\"OnlyInDistributionWindow\"},{\"inputs\":[],\"type\":\"error\",\"name\":\"PositiveAllocationOnHaltedGauge\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"}],\"type\":\"error\",\"name\":\"SafeERC20FailedOperation\"},{\"inputs\":[],\"type\":\"error\",\"name\":\"UUPSUnauthorizedCallContext\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"slot\",\"type\":\"bytes32\"}],\"type\":\"error\",\"name\":\"UUPSUnsupportedProxiableUUID\"},{\"inputs\":[],\"type\":\"error\",\"name\":\"UnequalLengths\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"builder_\",\"type\":\"address\",\"indexed\":true},{\"internalType\":\"uint256\",\"name\":\"rewardPercentage_\",\"type\":\"uint256\",\"indexed\":false},{\"internalType\":\"uint256\",\"name\":\"cooldown_\",\"type\":\"uint256\",\"indexed\":false}],\"type\":\"event\",\"name\":\"BackerRewardPercentageUpdateScheduled\",\"anonymous\":false},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"builder_\",\"type\":\"address\",\"indexed\":true},{\"internalType\":\"address\",\"name\":\"rewardReceiver_\",\"type\":\"address\",\"indexed\":false},{\"internalType\":\"uint64\",\"name\":\"rewardPercentage_\",\"type\":\"uint64\",\"indexed\":false}],\"type\":\"event\",\"name\":\"BuilderActivated\",\"anonymous\":false},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"builder_\",\"type\":\"address\",\"indexed\":true},{\"internalType\":\"address\",\"name\":\"migrator_\",\"type\":\"address\",\"indexed\":true}],\"type\":\"event\",\"name\":\"BuilderMigrated\",\"anonymous\":false},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"builder_\",\"type\":\"address\",\"indexed\":true},{\"internalType\":\"address\",\"name\":\"newRewardReceiver_\",\"type\":\"address\",\"indexed\":false}],\"type\":\"event\",\"name\":\"BuilderRewardReceiverReplacementApproved\",\"anonymous\":false},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"builder_\",\"type\":\"address\",\"indexed\":true},{\"internalType\":\"address\",\"name\":\"newRewardReceiver_\",\"type\":\"address\",\"indexed\":false}],\"type\":\"event\",\"name\":\"BuilderRewardReceiverReplacementCancelled\",\"anonymous\":false},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"builder_\",\"type\":\"address\",\"indexed\":true},{\"internalType\":\"address\",\"name\":\"newRewardReceiver_\",\"type\":\"address\",\"indexed\":false}],\"type\":\"event\",\"name\":\"BuilderRewardReceiverReplacementRequested\",\"anonymous\":false},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"builder_\",\"type\":\"address\",\"indexed\":true}],\"type\":\"event\",\"name\":\"CommunityApproved\",\"anonymous\":false},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"builder_\",\"type\":\"address\",\"indexed\":true}],\"type\":\"event\",\"name\":\"Dewhitelisted\",\"anonymous\":false},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"builder_\",\"type\":\"address\",\"indexed\":true},{\"internalType\":\"address\",\"name\":\"gauge_\",\"type\":\"address\",\"indexed\":true},{\"internalType\":\"address\",\"name\":\"creator_\",\"type\":\"address\",\"indexed\":false}],\"type\":\"event\",\"name\":\"GaugeCreated\",\"anonymous\":false},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"version\",\"type\":\"uint64\",\"indexed\":false}],\"type\":\"event\",\"name\":\"Initialized\",\"anonymous\":false},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"builder_\",\"type\":\"address\",\"indexed\":true}],\"type\":\"event\",\"name\":\"KYCApproved\",\"anonymous\":false},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"builder_\",\"type\":\"address\",\"indexed\":true}],\"type\":\"event\",\"name\":\"KYCRevoked\",\"anonymous\":false},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"backer_\",\"type\":\"address\",\"indexed\":true},{\"internalType\":\"address\",\"name\":\"gauge_\",\"type\":\"address\",\"indexed\":true},{\"internalType\":\"uint256\",\"name\":\"allocation_\",\"type\":\"uint256\",\"indexed\":false}],\"type\":\"event\",\"name\":\"NewAllocation\",\"anonymous\":false},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"newCycleDuration_\",\"type\":\"uint256\",\"indexed\":false},{\"internalType\":\"uint256\",\"name\":\"cooldownEndTime_\",\"type\":\"uint256\",\"indexed\":false}],\"type\":\"event\",\"name\":\"NewCycleDurationScheduled\",\"anonymous\":false},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"newDistributionDuration_\",\"type\":\"uint256\",\"indexed\":false},{\"internalType\":\"address\",\"name\":\"by_\",\"type\":\"address\",\"indexed\":false}],\"type\":\"event\",\"name\":\"NewDistributionDuration\",\"anonymous\":false},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"rewardToken_\",\"type\":\"address\",\"indexed\":true},{\"internalType\":\"address\",\"name\":\"sender_\",\"type\":\"address\",\"indexed\":true},{\"internalType\":\"uint256\",\"name\":\"amount_\",\"type\":\"uint256\",\"indexed\":false}],\"type\":\"event\",\"name\":\"NotifyReward\",\"anonymous\":false},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"builder_\",\"type\":\"address\",\"indexed\":true},{\"internalType\":\"bytes20\",\"name\":\"reason_\",\"type\":\"bytes20\",\"indexed\":false}],\"type\":\"event\",\"name\":\"Paused\",\"anonymous\":false},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"builder_\",\"type\":\"address\",\"indexed\":true},{\"internalType\":\"uint256\",\"name\":\"rewardPercentage_\",\"type\":\"uint256\",\"indexed\":false},{\"internalType\":\"uint256\",\"name\":\"cooldown_\",\"type\":\"uint256\",\"indexed\":false}],\"type\":\"event\",\"name\":\"Permitted\",\"anonymous\":false},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"builder_\",\"type\":\"address\",\"indexed\":true}],\"type\":\"event\",\"name\":\"Revoked\",\"anonymous\":false},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"sender_\",\"type\":\"address\",\"indexed\":true}],\"type\":\"event\",\"name\":\"RewardDistributed\",\"anonymous\":false},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"sender_\",\"type\":\"address\",\"indexed\":true}],\"type\":\"event\",\"name\":\"RewardDistributionFinished\",\"anonymous\":false},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"sender_\",\"type\":\"address\",\"indexed\":true}],\"type\":\"event\",\"name\":\"RewardDistributionStarted\",\"anonymous\":false},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"builder_\",\"type\":\"address\",\"indexed\":true}],\"type\":\"event\",\"name\":\"Unpaused\",\"anonymous\":false},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"implementation\",\"type\":\"address\",\"indexed\":true}],\"type\":\"event\",\"name\":\"Upgraded\",\"anonymous\":false},{\"inputs\":[],\"stateMutability\":\"view\",\"type\":\"function\",\"name\":\"UPGRADE_INTERFACE_VERSION\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}]},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"builder_\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"rewardReceiver_\",\"type\":\"address\"},{\"internalType\":\"uint64\",\"name\":\"rewardPercentage_\",\"type\":\"uint64\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\",\"name\":\"activateBuilder\"},{\"inputs\":[{\"internalType\":\"contract GaugeRootstockCollective\",\"name\":\"gauge_\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"allocation_\",\"type\":\"uint256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\",\"name\":\"allocate\"},{\"inputs\":[{\"internalType\":\"contract GaugeRootstockCollective[]\",\"name\":\"gauges_\",\"type\":\"address[]\"},{\"internalType\":\"uint256[]\",\"name\":\"allocations_\",\"type\":\"uint256[]\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\",\"name\":\"allocateBatch\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"builder_\",\"type\":\"address\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\",\"name\":\"approveBuilderKYC\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"builder_\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"rewardReceiverReplacement_\",\"type\":\"address\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\",\"name\":\"approveBuilderRewardReceiverReplacement\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"builder\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\",\"name\":\"backerRewardPercentage\",\"outputs\":[{\"internalType\":\"uint64\",\"name\":\"previous\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"next\",\"type\":\"uint64\"},{\"internalType\":\"uint128\",\"name\":\"cooldownEndTime\",\"type\":\"uint128\"}]},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"backer\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\",\"name\":\"backerTotalAllocation\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"allocation\",\"type\":\"uint256\"}]},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"builder\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\",\"name\":\"builderRewardReceiver\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"rewardReceiver\",\"type\":\"address\"}]},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"builder\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\",\"name\":\"builderRewardReceiverReplacement\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"rewardReceiverReplacement\",\"type\":\"address\"}]},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"builder\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\",\"name\":\"builderState\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"activated\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"kycApproved\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"communityApproved\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"paused\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"revoked\",\"type\":\"bool\"},{\"internalType\":\"bytes7\",\"name\":\"reserved\",\"type\":\"bytes7\"},{\"internalType\":\"bytes20\",\"name\":\"pausedReason\",\"type\":\"bytes20\"}]},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"builder\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\",\"name\":\"builderToGauge\",\"outputs\":[{\"internalType\":\"contract GaugeRootstockCollective\",\"name\":\"gauge\",\"type\":\"address\"}]},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"targetAddress_\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\",\"name\":\"canWithdraw\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}]},{\"inputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\",\"name\":\"cancelRewardReceiverReplacementRequest\"},{\"inputs\":[{\"internalType\":\"contract GaugeRootstockCollective[]\",\"name\":\"gauges_\",\"type\":\"address[]\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\",\"name\":\"claimBackerRewards\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"rewardToken_\",\"type\":\"address\"},{\"internalType\":\"contract GaugeRootstockCollective[]\",\"name\":\"gauges_\",\"type\":\"address[]\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\",\"name\":\"claimBackerRewards\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"builder_\",\"type\":\"address\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\",\"name\":\"communityApproveBuilder\",\"outputs\":[{\"internalType\":\"contract GaugeRootstockCollective\",\"name\":\"gauge_\",\"type\":\"address\"}]},{\"inputs\":[],\"stateMutability\":\"view\",\"type\":\"function\",\"name\":\"cycleData\",\"outputs\":[{\"internalType\":\"uint32\",\"name\":\"previousDuration\",\"type\":\"uint32\"},{\"internalType\":\"uint32\",\"name\":\"nextDuration\",\"type\":\"uint32\"},{\"internalType\":\"uint64\",\"name\":\"previousStart\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"nextStart\",\"type\":\"uint64\"},{\"internalType\":\"uint24\",\"name\":\"offset\",\"type\":\"uint24\"}]},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"timestamp_\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\",\"name\":\"cycleNext\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}]},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"timestamp_\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\",\"name\":\"cycleStart\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}]},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"builder_\",\"type\":\"address\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\",\"name\":\"dewhitelistBuilder\"},{\"inputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\",\"name\":\"distribute\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"finished_\",\"type\":\"bool\"}]},{\"inputs\":[],\"stateMutability\":\"view\",\"type\":\"function\",\"name\":\"distributionDuration\",\"outputs\":[{\"internalType\":\"uint32\",\"name\":\"\",\"type\":\"uint32\"}]},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"timestamp_\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\",\"name\":\"endDistributionWindow\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}]},{\"inputs\":[],\"stateMutability\":\"view\",\"type\":\"function\",\"name\":\"gaugeFactory\",\"outputs\":[{\"internalType\":\"contract GaugeFactoryRootstockCollective\",\"name\":\"\",\"type\":\"address\"}]},{\"inputs\":[{\"internalType\":\"contract GaugeRootstockCollective\",\"name\":\"gauge\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\",\"name\":\"gaugeToBuilder\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"builder\",\"type\":\"address\"}]},{\"inputs\":[],\"stateMutability\":\"view\",\"type\":\"function\",\"name\":\"getCycleStartAndDuration\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}]},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"index_\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\",\"name\":\"getGaugeAt\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}]},{\"inputs\":[],\"stateMutability\":\"view\",\"type\":\"function\",\"name\":\"getGaugesLength\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}]},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"index_\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\",\"name\":\"getHaltedGaugeAt\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}]},{\"inputs\":[],\"stateMutability\":\"view\",\"type\":\"function\",\"name\":\"getHaltedGaugesLength\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}]},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"builder_\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\",\"name\":\"getRewardPercentageToApply\",\"outputs\":[{\"internalType\":\"uint64\",\"name\":\"\",\"type\":\"uint64\"}]},{\"inputs\":[],\"stateMutability\":\"view\",\"type\":\"function\",\"name\":\"governanceManager\",\"outputs\":[{\"internalType\":\"contract IGovernanceManagerRootstockCollective\",\"name\":\"\",\"type\":\"address\"}]},{\"inputs\":[{\"internalType\":\"contract GaugeRootstockCollective\",\"name\":\"gauge\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\",\"name\":\"haltedGaugeLastPeriodFinish\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"lastPeriodFinish\",\"type\":\"uint256\"}]},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"builder_\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\",\"name\":\"hasBuilderRewardReceiverPendingApproval\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}]},{\"inputs\":[],\"stateMutability\":\"view\",\"type\":\"function\",\"name\":\"indexLastGaugeDistributed\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}]},{\"inputs\":[{\"internalType\":\"contract IGovernanceManagerRootstockCollective\",\"name\":\"governanceManager_\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"rewardToken_\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"stakingToken_\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"gaugeFactory_\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"rewardDistributor_\",\"type\":\"address\"},{\"internalType\":\"uint32\",\"name\":\"cycleDuration_\",\"type\":\"uint32\"},{\"internalType\":\"uint24\",\"name\":\"cycleStartOffset_\",\"type\":\"uint24\"},{\"internalType\":\"uint32\",\"name\":\"distributionDuration_\",\"type\":\"uint32\"},{\"internalType\":\"uint128\",\"name\":\"rewardPercentageCooldown_\",\"type\":\"uint128\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\",\"name\":\"initialize\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"builder_\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\",\"name\":\"isBuilderOperational\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}]},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"builder_\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\",\"name\":\"isBuilderPaused\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}]},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"gauge_\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\",\"name\":\"isGaugeHalted\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}]},{\"inputs\":[{\"internalType\":\"contract GaugeRootstockCollective\",\"name\":\"gauge_\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\",\"name\":\"isGaugeOperational\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}]},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"gauge_\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\",\"name\":\"isGaugeRewarded\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}]},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"builder_\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"rewardAddress_\",\"type\":\"address\"},{\"internalType\":\"uint64\",\"name\":\"rewardPercentage_\",\"type\":\"uint64\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\",\"name\":\"migrateBuilder\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"amount_\",\"type\":\"uint256\"}],\"stateMutability\":\"payable\",\"type\":\"function\",\"name\":\"notifyRewardAmount\"},{\"inputs\":[],\"stateMutability\":\"view\",\"type\":\"function\",\"name\":\"onDistributionPeriod\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}]},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"builder_\",\"type\":\"address\"},{\"internalType\":\"bytes20\",\"name\":\"reason_\",\"type\":\"bytes20\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\",\"name\":\"pauseBuilder\"},{\"inputs\":[],\"stateMutability\":\"view\",\"type\":\"function\",\"name\":\"periodFinish\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}]},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"rewardPercentage_\",\"type\":\"uint64\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\",\"name\":\"permitBuilder\"},{\"inputs\":[],\"stateMutability\":\"view\",\"type\":\"function\",\"name\":\"proxiableUUID\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}]},{\"inputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\",\"name\":\"revokeBuilder\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"builder_\",\"type\":\"address\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\",\"name\":\"revokeBuilderKYC\"},{\"inputs\":[],\"stateMutability\":\"view\",\"type\":\"function\",\"name\":\"rewardDistributor\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}]},{\"inputs\":[],\"stateMutability\":\"view\",\"type\":\"function\",\"name\":\"rewardPercentageCooldown\",\"outputs\":[{\"internalType\":\"uint128\",\"name\":\"\",\"type\":\"uint128\"}]},{\"inputs\":[],\"stateMutability\":\"view\",\"type\":\"function\",\"name\":\"rewardToken\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}]},{\"inputs\":[],\"stateMutability\":\"view\",\"type\":\"function\",\"name\":\"rewardsCoinbase\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}]},{\"inputs\":[],\"stateMutability\":\"view\",\"type\":\"function\",\"name\":\"rewardsERC20\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}]},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"rewardPercentage_\",\"type\":\"uint64\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\",\"name\":\"setBackerRewardPercentage\"},{\"inputs\":[{\"internalType\":\"uint32\",\"name\":\"newCycleDuration_\",\"type\":\"uint32\"},{\"internalType\":\"uint24\",\"name\":\"cycleStartOffset_\",\"type\":\"uint24\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\",\"name\":\"setCycleDuration\"},{\"inputs\":[{\"internalType\":\"uint32\",\"name\":\"newDistributionDuration_\",\"type\":\"uint32\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\",\"name\":\"setDistributionDuration\"},{\"inputs\":[],\"stateMutability\":\"view\",\"type\":\"function\",\"name\":\"stakingToken\",\"outputs\":[{\"internalType\":\"contract IERC20\",\"name\":\"\",\"type\":\"address\"}]},{\"inputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\",\"name\":\"startDistribution\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"finished_\",\"type\":\"bool\"}]},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newRewardReceiver_\",\"type\":\"address\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\",\"name\":\"submitRewardReceiverReplacementRequest\"},{\"inputs\":[{\"internalType\":\"bytes4\",\"name\":\"interfaceId_\",\"type\":\"bytes4\"}],\"stateMutability\":\"view\",\"type\":\"function\",\"name\":\"supportsInterface\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}]},{\"inputs\":[],\"stateMutability\":\"view\",\"type\":\"function\",\"name\":\"tempTotalPotentialReward\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}]},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"timestamp_\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\",\"name\":\"timeUntilNextCycle\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}]},{\"inputs\":[],\"stateMutability\":\"view\",\"type\":\"function\",\"name\":\"totalPotentialReward\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}]},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"builder_\",\"type\":\"address\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\",\"name\":\"unpauseBuilder\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newImplementation\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"}],\"stateMutability\":\"payable\",\"type\":\"function\",\"name\":\"upgradeToAndCall\"}],\"devdoc\":{\"kind\":\"dev\",\"methods\":{\"activateBuilder(address,address,uint64)\":{\"details\":\"reverts if it is not called by the owner address reverts if it is already activated\",\"params\":{\"builder_\":\"address of the builder\",\"rewardPercentage_\":\"reward percentage(100% == 1 ether)\",\"rewardReceiver_\":\"address of the builder reward receiver\"}},\"allocate(address,uint256)\":{\"details\":\"reverts if it is called during the distribution period reverts if gauge does not have a builder associated\",\"params\":{\"allocation_\":\"amount of votes to allocate\",\"gauge_\":\"address of the gauge where the votes will be allocated\"}},\"allocateBatch(address[],uint256[])\":{\"details\":\"reverts if it is called during the distribution period reverts if gauge does not have a builder associated\",\"params\":{\"allocations_\":\"array of amount of votes to allocate\",\"gauges_\":\"array of gauges where the votes will be allocated\"}},\"approveBuilderKYC(address)\":{\"details\":\"reverts if it is not called by the owner address reverts if it is not activated reverts if it is already KYC approved reverts if it does not have a gauge associated\",\"params\":{\"builder_\":\"address of the builder\"}},\"approveBuilderRewardReceiverReplacement(address,address)\":{\"details\":\"reverts if provided `rewardReceiverReplacement_` doesn't match Builder's request\",\"params\":{\"builder_\":\"address of the builder\",\"rewardReceiverReplacement_\":\"new address the builder is requesting to use\"}},\"canWithdraw(address,uint256)\":{\"details\":\"user token balance should already account for the update, meaning the check is applied AFTER the withdraw accounting has become effective.\",\"params\":{\"targetAddress_\":\"address who wants to withdraw stakingToken param value_ amount of stakingToken to withdraw, not used on current version\"}},\"cancelRewardReceiverReplacementRequest()\":{\"details\":\"reverts if Builder is not Operational\"},\"claimBackerRewards(address,address[])\":{\"params\":{\"gauges_\":\"array of gauges to claim\",\"rewardToken_\":\"address of the token rewarded address(uint160(uint256(keccak256(\\\"COINBASE_ADDRESS\\\")))) is used for coinbase address\"}},\"claimBackerRewards(address[])\":{\"params\":{\"gauges_\":\"array of gauges to claim\"}},\"communityApproveBuilder(address)\":{\"details\":\"reverts if it is not called by the governor address or authorized changer reverts if is already community approved reverts if it has a gauge associated\",\"params\":{\"builder_\":\"address of the builder\"},\"returns\":{\"gauge_\":\"gauge contract\"}},\"constructor\":{\"custom:oz-upgrades-unsafe-allow\":\"constructor\"},\"cycleNext(uint256)\":{\"params\":{\"timestamp_\":\"timestamp to calculate\"},\"returns\":{\"_0\":\"cycleNext timestamp when the cycle ends or the next starts\"}},\"cycleStart(uint256)\":{\"params\":{\"timestamp_\":\"timestamp to calculate\"},\"returns\":{\"_0\":\"cycleStart timestamp when the cycle starts\"}},\"dewhitelistBuilder(address)\":{\"details\":\"reverts if it is not called by the governor address or authorized changer reverts if it does not have a gauge associated reverts if it is not community approved\",\"params\":{\"builder_\":\"address of the builder\"}},\"distribute()\":{\"details\":\"reverts if distribution period has not yet started This function is paginated and it finishes once all gauges distribution are completed, ending the distribution period and voting restrictions.\",\"returns\":{\"finished_\":\"true if distribution has finished\"}},\"endDistributionWindow(uint256)\":{\"params\":{\"timestamp_\":\"timestamp to calculate\"},\"returns\":{\"_0\":\"endDistributionWindow timestamp when the cycle distribution ends\"}},\"getRewardPercentageToApply(address)\":{\"params\":{\"builder_\":\"address of the builder\"}},\"hasBuilderRewardReceiverPendingApproval(address)\":{\"params\":{\"builder_\":\"address of the builder\"}},\"initialize(address,address,address,address,address,uint32,uint24,uint32,uint128)\":{\"params\":{\"cycleDuration_\":\"Collective Rewards cycle time duration\",\"cycleStartOffset_\":\"offset to add to the first cycle, used to set an specific day to start the cycles\",\"distributionDuration_\":\"duration of the distribution window\",\"gaugeFactory_\":\"address of the GaugeFactoryRootstockCollective contract\",\"governanceManager_\":\"contract with permissioned roles\",\"rewardDistributor_\":\"address of the rewardDistributor contract\",\"rewardPercentageCooldown_\":\"time that must elapse for a new reward percentage from a builder to be applied\",\"rewardToken_\":\"address of the token rewarded to builder and voters\",\"stakingToken_\":\"address of the staking token for builder and voters\"}},\"migrateBuilder(address,address,uint64)\":{\"params\":{\"builder_\":\"address of the builder whitelisted on the V1's SimplifiedRewardDistributor contract\",\"rewardAddress_\":\"address of the builder reward receiver whitelisted on the V1's SimplifiedRewardDistributor contract\",\"rewardPercentage_\":\"reward percentage(100% == 1 ether)\"}},\"notifyRewardAmount(uint256)\":{\"details\":\"reverts if it is called during the distribution period reverts if there are no gauges available for the distribution\"},\"pauseBuilder(address,bytes20)\":{\"details\":\"reverts if it is not called by the owner address\",\"params\":{\"builder_\":\"address of the builder\",\"reason_\":\"reason for the pause\"}},\"permitBuilder(uint64)\":{\"details\":\"reverts if it does not have a gauge associated reverts if it is not KYC approved reverts if it is not community approved reverts if it is not revoked reverts if it is executed in distribution period because changing the totalPotentialReward produce a miscalculation of rewards\",\"params\":{\"rewardPercentage_\":\"reward percentage(100% == 1 ether)\"}},\"proxiableUUID()\":{\"details\":\"Implementation of the ERC1822 {proxiableUUID} function. This returns the storage slot used by the implementation. It is used to validate the implementation's compatibility when performing an upgrade. IMPORTANT: A proxy pointing at a proxiable contract should not be considered proxiable itself, because this risks bricking a proxy that upgrades to it, by delegating to itself until out of gas. Thus it is critical that this function revert if invoked through a proxy. This is guaranteed by the `notDelegated` modifier.\"},\"revokeBuilder()\":{\"details\":\"reverts if it does not have a gauge associated reverts if it is not KYC approved reverts if it is not community approved reverts if it is already revoked reverts if it is executed in distribution period because changing the totalPotentialReward produce a miscalculation of rewards\"},\"revokeBuilderKYC(address)\":{\"details\":\"reverts if it is not called by the owner address reverts if it is not KYC approved\",\"params\":{\"builder_\":\"address of the builder\"}},\"setBackerRewardPercentage(uint64)\":{\"details\":\"reverts if builder is not operational\",\"params\":{\"rewardPercentage_\":\"reward percentage(100% == 1 ether)\"}},\"setCycleDuration(uint32,uint24)\":{\"details\":\"reverts if is too short. It must be greater than 2 time the distribution windowonly callable by an authorized changer or the foundation\",\"params\":{\"cycleStartOffset_\":\"offset to add to the first cycle, used to set an specific day to start the cycles\",\"newCycleDuration_\":\"new cycle duration\"}},\"setDistributionDuration(uint32)\":{\"details\":\"reverts if is too short. It must be greater than 0reverts if the new distribution is greater than half of the cycle durationreverts if the distribution window is modified during the distribution windowonly callable by the foundation\",\"params\":{\"newDistributionDuration_\":\"new distribution window duration\"}},\"startDistribution()\":{\"details\":\"reverts if is called outside the distribution window reverts if it is called during the distribution period\",\"returns\":{\"finished_\":\"true if distribution has finished\"}},\"submitRewardReceiverReplacementRequest(address)\":{\"details\":\"reverts if Builder is not Operational\",\"params\":{\"newRewardReceiver_\":\"new address the builder is requesting to use\"}},\"supportsInterface(bytes4)\":{\"details\":\"See {IERC165-supportsInterface}.\"},\"timeUntilNextCycle(uint256)\":{\"params\":{\"timestamp_\":\"timestamp to calculate\"},\"returns\":{\"_0\":\"timeUntilNextCycle amount of time until next cycle\"}},\"unpauseBuilder(address)\":{\"details\":\"reverts if it is not called by the owner address reverts if it is not paused\",\"params\":{\"builder_\":\"address of the builder\"}},\"upgradeToAndCall(address,bytes)\":{\"custom:oz-upgrades-unsafe-allow-reachable\":\"delegatecall\",\"details\":\"Upgrade the implementation of the proxy to `newImplementation`, and subsequently execute the function call encoded in `data`. Calls {_authorizeUpgrade}. Emits an {Upgraded} event.\"}},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{\"activateBuilder(address,address,uint64)\":{\"notice\":\"activates builder for the first time, setting the reward receiver and the reward percentage Sets activate flag to true. It cannot be switched to false anymore\"},\"allocate(address,uint256)\":{\"notice\":\"allocates votes for a gauge\"},\"allocateBatch(address[],uint256[])\":{\"notice\":\"allocates votes for a batch of gauges\"},\"approveBuilderKYC(address)\":{\"notice\":\"approves builder's KYC after a revocation\"},\"approveBuilderRewardReceiverReplacement(address,address)\":{\"notice\":\"KYCApprover approves Builder's request to replace his rewardReceiver address\"},\"backerRewardPercentage(address)\":{\"notice\":\"map of builder's backers reward percentage data\"},\"backerTotalAllocation(address)\":{\"notice\":\"total amount of stakingToken allocated by a backer\"},\"builderRewardReceiver(address)\":{\"notice\":\"map of builders reward receiver\"},\"builderRewardReceiverReplacement(address)\":{\"notice\":\"map of builders reward receiver replacement, used as a buffer until the new address is accepted\"},\"builderState(address)\":{\"notice\":\"map of builders state\"},\"builderToGauge(address)\":{\"notice\":\"gauge contract for a builder\"},\"canWithdraw(address,uint256)\":{\"notice\":\"returns true if can withdraw, remaining balance should exceed the current allocation\"},\"cancelRewardReceiverReplacementRequest()\":{\"notice\":\"Builder cancels his request to replace his rewardReceiver address\"},\"claimBackerRewards(address,address[])\":{\"notice\":\"claims backer rewards from a batch of gauges\"},\"claimBackerRewards(address[])\":{\"notice\":\"claims backer rewards from a batch of gauges\"},\"communityApproveBuilder(address)\":{\"notice\":\"community approve builder and create its gauge\"},\"cycleData()\":{\"notice\":\"cycle data\"},\"cycleNext(uint256)\":{\"notice\":\"gets when an cycle ends or the next one starts based on given `timestamp_`\"},\"cycleStart(uint256)\":{\"notice\":\"gets when an cycle starts based on given `timestamp_`\"},\"dewhitelistBuilder(address)\":{\"notice\":\"de-whitelist builder\"},\"distribute()\":{\"notice\":\"continues pagination to distribute accumulated reward tokens to the gauges\"},\"endDistributionWindow(uint256)\":{\"notice\":\"gets when an cycle distribution ends based on given `timestamp_`\"},\"gaugeFactory()\":{\"notice\":\"gauge factory contract address\"},\"gaugeToBuilder(address)\":{\"notice\":\"builder address for a gauge contract\"},\"getCycleStartAndDuration()\":{\"notice\":\"returns cycle start and duration If there is a new one and cooldown time has expired, apply that one; otherwise, apply the previous one\"},\"getGaugeAt(uint256)\":{\"notice\":\"get gauge from array at a given index\"},\"getGaugesLength()\":{\"notice\":\"get length of gauges array\"},\"getHaltedGaugeAt(uint256)\":{\"notice\":\"get halted gauge from array at a given index\"},\"getHaltedGaugesLength()\":{\"notice\":\"get length of halted gauges array\"},\"getRewardPercentageToApply(address)\":{\"notice\":\"returns reward percentage to apply. If there is a new one and cooldown time has expired, apply that one; otherwise, apply the previous one\"},\"haltedGaugeLastPeriodFinish(address)\":{\"notice\":\"map of last period finish for halted gauges\"},\"hasBuilderRewardReceiverPendingApproval(address)\":{\"notice\":\"returns true if the builder has an open request to replace his receiver address\"},\"indexLastGaugeDistributed()\":{\"notice\":\"index of tha last gauge distributed during a distribution period\"},\"initialize(address,address,address,address,address,uint32,uint24,uint32,uint128)\":{\"notice\":\"contract initializer\"},\"isBuilderOperational(address)\":{\"notice\":\"return true if builder is operational kycApproved == true && communityApproved == true && paused == false\"},\"isBuilderPaused(address)\":{\"notice\":\"return true if builder is paused\"},\"isGaugeHalted(address)\":{\"notice\":\"return true is gauge is halted\"},\"isGaugeOperational(address)\":{\"notice\":\"return true if gauge is operational kycApproved == true && communityApproved == true && paused == false\"},\"isGaugeRewarded(address)\":{\"notice\":\"return true is gauge is rewarded\"},\"migrateBuilder(address,address,uint64)\":{\"notice\":\"migrate v1 builder to the new builder registry\"},\"notifyRewardAmount(uint256)\":{\"notice\":\"transfers reward tokens from the sender to be distributed to the gauges\"},\"onDistributionPeriod()\":{\"notice\":\"true if distribution period started. Allocations remain blocked until it finishes\"},\"pauseBuilder(address,bytes20)\":{\"notice\":\"pause builder\"},\"periodFinish()\":{\"notice\":\"returns timestamp end of current rewards period If it is called by a halted gauge returns the timestamp of the last period distributed This is important because unclaimed rewards must stop accumulating rewards and halted gauges are not updated on the distribution anymore\"},\"permitBuilder(uint64)\":{\"notice\":\"permit builder\"},\"revokeBuilder()\":{\"notice\":\"revoke builder\"},\"revokeBuilderKYC(address)\":{\"notice\":\"revokes builder's KYC and sent builder unclaimed rewards to rewardDistributor contract\"},\"rewardDistributor()\":{\"notice\":\"reward distributor address. If a builder is KYC revoked their unclaimed rewards will sent back here\"},\"rewardPercentageCooldown()\":{\"notice\":\"time that must elapse for a new reward percentage from a builder to be applied\"},\"rewardToken()\":{\"notice\":\"address of the token rewarded to builder and voters\"},\"rewardsCoinbase()\":{\"notice\":\"Coinbase rewards to distribute [N]\"},\"rewardsERC20()\":{\"notice\":\"ERC20 rewards to distribute [N]\"},\"setBackerRewardPercentage(uint64)\":{\"notice\":\"allows a builder to set his backers reward percentage\"},\"setCycleDuration(uint32,uint24)\":{\"notice\":\"schedule a new cycle duration. It will be applied for the next cycle\"},\"setDistributionDuration(uint32)\":{\"notice\":\"set the duration of the distribution window\"},\"stakingToken()\":{\"notice\":\"address of the token used to stake\"},\"startDistribution()\":{\"notice\":\"starts the distribution period blocking all the allocations until all the gauges were distributed\"},\"submitRewardReceiverReplacementRequest(address)\":{\"notice\":\"Builder submits a request to replace his rewardReceiver address, the request will then need to be approved by `approveBuilderRewardReceiverReplacement`\"},\"tempTotalPotentialReward()\":{\"notice\":\"on a paginated distribution we need to temporarily store the totalPotentialReward\"},\"timeUntilNextCycle(uint256)\":{\"notice\":\"gets time left until the next cycle based on given `timestamp_`\"},\"totalPotentialReward()\":{\"notice\":\"total potential reward\"},\"unpauseBuilder(address)\":{\"notice\":\"unpause builder\"}},\"version\":1}},\"settings\":{\"remappings\":[\"@openzeppelin/contracts-upgradeable/=node_modules/@openzeppelin/contracts-upgradeable/\",\"@openzeppelin/contracts/=node_modules/@openzeppelin/contracts/\",\"eth-gas-reporter/=node_modules/eth-gas-reporter/\",\"forge-std/=node_modules/forge-std/\",\"hardhat/=node_modules/hardhat/\"],\"optimizer\":{\"enabled\":true,\"runs\":10000},\"metadata\":{\"bytecodeHash\":\"none\"},\"compilationTarget\":{\"src/BackersManagerRootstockCollective.sol\":\"BackersManagerRootstockCollective\"},\"evmVersion\":\"london\",\"libraries\":{}},\"sources\":{\"node_modules/@openzeppelin/contracts-upgradeable/proxy/utils/Initializable.sol\":{\"keccak256\":\"0x631188737069917d2f909d29ce62c4d48611d326686ba6683e26b72a23bfac0b\",\"urls\":[\"bzz-raw://7a61054ae84cd6c4d04c0c4450ba1d6de41e27e0a2c4f1bcdf58f796b401c609\",\"dweb:/ipfs/QmUvtdp7X1mRVyC3CsHrtPbgoqWaXHp3S1ZR24tpAQYJWM\"],\"license\":\"MIT\"},\"node_modules/@openzeppelin/contracts-upgradeable/proxy/utils/UUPSUpgradeable.sol\":{\"keccak256\":\"0x3f13b947637c4969c0644cab4ef399cdc4b67f101463b8775c5a43b118558e53\",\"urls\":[\"bzz-raw://c6683e6ade6985d394d32baaef5eea0d8b9ff0b3eca86ae413d6cdde114a9930\",\"dweb:/ipfs/QmdBE8T1BTddZxpdECMsb3KiCFyjNWmxcCddYrWFTXmWPj\"],\"license\":\"MIT\"},\"node_modules/@openzeppelin/contracts-upgradeable/utils/ReentrancyGuardUpgradeable.sol\":{\"keccak256\":\"0xb44e086e941292cdc7f440de51478493894ef0b1aeccb0c4047445919f667f74\",\"urls\":[\"bzz-raw://942dad22fbdc1669f025540ba63aa3ccfad5f8458fc5d4525b31ebf272e7af45\",\"dweb:/ipfs/Qmdo4X2M82aM3AMoW2kf2jhYkSCyC4T1pHNd6obdsDFnAB\"],\"license\":\"MIT\"},\"node_modules/@openzeppelin/contracts-upgradeable/utils/introspection/ERC165Upgradeable.sol\":{\"keccak256\":\"0xdaba3f7c42c55b2896353f32bd27d4d5f8bae741b3b05d4c53f67abc4dc47ce8\",\"urls\":[\"bzz-raw://1fa2e61141c602510bcd2cd936ed9561922ac8772a9b9c9a9db091a74e354a45\",\"dweb:/ipfs/QmcHQDDoEBwJmwUbzoVkytvJsBx3KVHYFFnDkvRGWh9Wmh\"],\"license\":\"MIT\"},\"node_modules/@openzeppelin/contracts/interfaces/draft-IERC1822.sol\":{\"keccak256\":\"0x2a1f9944df2015c081d89cd41ba22ffaf10aa6285969f0dc612b235cc448999c\",\"urls\":[\"bzz-raw://ef381843676aec64421200ee85eaa0b1356a35f28b9fc67e746a6bbb832077d9\",\"dweb:/ipfs/QmY8aorMYA2TeTCnu6ejDjzb4rW4t7TCtW4GZ6LoxTFm7v\"],\"license\":\"MIT\"},\"node_modules/@openzeppelin/contracts/proxy/ERC1967/ERC1967Utils.sol\":{\"keccak256\":\"0x06a78f9b3ee3e6d0eb4e4cd635ba49960bea34cac1db8c0a27c75f2319f1fd65\",\"urls\":[\"bzz-raw://547d21aa17f4f3f1a1a7edf7167beff8dd9496a0348d5588f15cc8a4b29d052a\",\"dweb:/ipfs/QmT16JtRQSWNpLo9W23jr6CzaMuTAcQcjJJcdRd8HLJ6cE\"],\"license\":\"MIT\"},\"node_modules/@openzeppelin/contracts/proxy/Proxy.sol\":{\"keccak256\":\"0xc3f2ec76a3de8ed7a7007c46166f5550c72c7709e3fc7e8bb3111a7191cdedbd\",\"urls\":[\"bzz-raw://e73efb4c2ca655882dc237c6b4f234a9bd36d97159d8fcaa837eb01171f726ac\",\"dweb:/ipfs/QmTNnnv7Gu5fs5G1ZMh7Fexp8N4XUs3XrNAngjcxgiss3e\"],\"license\":\"MIT\"},\"node_modules/@openzeppelin/contracts/proxy/beacon/BeaconProxy.sol\":{\"keccak256\":\"0x387ebdcb365b8e620f26645d2b34a161cd39eedfb0219e8baff55630c5ae113c\",\"urls\":[\"bzz-raw://744ea187c195e31cb9201e63ca291fca9e623747f54f0ba390b366a6213b8964\",\"dweb:/ipfs/Qmc547qfV4sz65DC9B4okx1HvgxwUzJR7zTfKKbTzL3UQT\"],\"license\":\"MIT\"},\"node_modules/@openzeppelin/contracts/proxy/beacon/IBeacon.sol\":{\"keccak256\":\"0xc59a78b07b44b2cf2e8ab4175fca91e8eca1eee2df7357b8d2a8833e5ea1f64c\",\"urls\":[\"bzz-raw://5aa4f07e65444784c29cd7bfcc2341b34381e4e5b5da9f0c5bd00d7f430e66fa\",\"dweb:/ipfs/QmWRMh4Q9DpaU9GvsiXmDdoNYMyyece9if7hnfLz7uqzWM\"],\"license\":\"MIT\"},\"node_modules/@openzeppelin/contracts/token/ERC20/IERC20.sol\":{\"keccak256\":\"0xc6a8ff0ea489379b61faa647490411b80102578440ab9d84e9a957cc12164e70\",\"urls\":[\"bzz-raw://0ea104e577e63faea3b69c415637e99e755dcbf64c5833d7140c35a714d6d90c\",\"dweb:/ipfs/Qmau6x4Ns9XdyynRCNNp3RhLqijJjFm7z5fyZazfYFGYdq\"],\"license\":\"MIT\"},\"node_modules/@openzeppelin/contracts/token/ERC20/extensions/IERC20Permit.sol\":{\"keccak256\":\"0x6008dabfe393240d73d7dd7688033f72740d570aa422254d29a7dce8568f3aff\",\"urls\":[\"bzz-raw://f5196ec75139918c6c7bb4251b36395e668f1fa6d206beba7e7520e74913940d\",\"dweb:/ipfs/QmSyqjksXxmm2mCG6qRd1yuwLykypkSVBbnBnGqJRcuJMi\"],\"license\":\"MIT\"},\"node_modules/@openzeppelin/contracts/token/ERC20/utils/SafeERC20.sol\":{\"keccak256\":\"0x37bb49513c49c87c4642a891b13b63571bc87013dde806617aa1efb54605f386\",\"urls\":[\"bzz-raw://b3036b3a83b7c48f96641f2a9002b9f2dcb6a5958dd670894ada21ae8229b3d0\",\"dweb:/ipfs/QmUNfSBdoVtjhETaUJCYcaC7pTMgbhht926tJ2uXJbiVd3\"],\"license\":\"MIT\"},\"node_modules/@openzeppelin/contracts/utils/Address.sol\":{\"keccak256\":\"0xaf28a975a78550e45f65e559a3ad6a5ad43b9b8a37366999abd1b7084eb70721\",\"urls\":[\"bzz-raw://b7bd24e224f67f65bfadf85dc2929fa965456bb2415478bd0125471b5ce35245\",\"dweb:/ipfs/QmRaydGr8BTHs1kvaZfsNU69pKzUAGFrvABn1KiRSbE51y\"],\"license\":\"MIT\"},\"node_modules/@openzeppelin/contracts/utils/StorageSlot.sol\":{\"keccak256\":\"0x32ba59b4b7299237c8ba56319110989d7978a039faf754793064e967e5894418\",\"urls\":[\"bzz-raw://1ae50c8b562427df610cc4540c9bf104acca7ef8e2dcae567ae7e52272281e9c\",\"dweb:/ipfs/QmTHiadFCSJUPpRjNegc5SahmeU8bAoY8i9Aq6tVscbcKR\"],\"license\":\"MIT\"},\"node_modules/@openzeppelin/contracts/utils/introspection/IERC165.sol\":{\"keccak256\":\"0x4296879f55019b23e135000eb36896057e7101fb7fb859c5ef690cf14643757b\",\"urls\":[\"bzz-raw://87b3541437c8c443ccd36795e56a338ed12855eec17f8da624511b8d1a7e14df\",\"dweb:/ipfs/QmeJQCtZrQjtJLr6u7ZHWeH3pBnjtLWzvRrKViAi7UZqxL\"],\"license\":\"MIT\"},\"node_modules/@openzeppelin/contracts/utils/math/Math.sol\":{\"keccak256\":\"0x005ec64c6313f0555d59e278f9a7a5ab2db5bdc72a027f255a37c327af1ec02d\",\"urls\":[\"bzz-raw://4ece9f0b9c8daca08c76b6b5405a6446b6f73b3a15fab7ff56e296cbd4a2c875\",\"dweb:/ipfs/QmQyRpyPRL5SQuAgj6SHmbir3foX65FJjbVTTQrA2EFg6L\"],\"license\":\"MIT\"},\"node_modules/@openzeppelin/contracts/utils/structs/EnumerableSet.sol\":{\"keccak256\":\"0x86c1470cbfd878491e5de030072b647352d36bd27122cffb928970b1945282aa\",\"urls\":[\"bzz-raw://ad85dd393ee0a1917c57046abc5155f51f77844b2c6a42c05c1b8dd26d6ff3c1\",\"dweb:/ipfs/QmNqYc8To2NdnpP6E1tGz7t6A7beuENde5yovwov5pW1fA\"],\"license\":\"MIT\"},\"src/BackersManagerRootstockCollective.sol\":{\"keccak256\":\"0x4bce92547845ef35a1b71fdfff864309938051142bd13fcc671785aad6dbc36b\",\"urls\":[\"bzz-raw://e21d16501b5cd62d1838223c2dcc2189e372e71096d4fa2977c5f9c62887a57c\",\"dweb:/ipfs/QmZdhG6Be7UTrKmDUXc8UxfCWH5ifXs9czSBPNrdC46ZGZ\"],\"license\":\"MIT\"},\"src/BuilderRegistryRootstockCollective.sol\":{\"keccak256\":\"0x73cac24bc0bc44d662b352480b1bd3c5e0b60a3aa3f01fcbb3b23e1c3e2e4cd2\",\"urls\":[\"bzz-raw://3ecf3584d6e6cb321ef7ebbafc9744d61a63f01866addd656f480968d7dc4be5\",\"dweb:/ipfs/QmPrjNKwfvmvQ8hnopYJEo5sn2z8aXtuuvXc2bhoxu3BVZ\"],\"license\":\"MIT\"},\"src/CycleTimeKeeperRootstockCollective.sol\":{\"keccak256\":\"0x111d42f321259b53ff1b11e65fde44d8b582a5801299a665c7c39a003a9e4bfd\",\"urls\":[\"bzz-raw://40fe5761b6948b9d89fc2977e246738466ca65f2718d3ead305de92fe4ac4e45\",\"dweb:/ipfs/QmNj27MbZSmGN8Wfre4dngJSbNb1ZBUZ3cHoVUMb6B2n9W\"],\"license\":\"MIT\"},\"src/gauge/GaugeFactoryRootstockCollective.sol\":{\"keccak256\":\"0xbcf8f9f1038468632211aa7b936d63a35caa7e54f03793ba44f701b17e489a0d\",\"urls\":[\"bzz-raw://82beb9f7be678d3edb72cd181e198e00ead8c8383c36414ce0e388094272914b\",\"dweb:/ipfs/QmSmMx3RT4gjYRFggbEWAyDie5X4JLyBW3VgpHdRFcAmii\"],\"license\":\"MIT\"},\"src/gauge/GaugeRootstockCollective.sol\":{\"keccak256\":\"0xc938acb7b0a1fe48d81115d9c78554cf52578cfa079b7e2fa61ad6f7d938cfa5\",\"urls\":[\"bzz-raw://b0705939ef67abd05f05cd9c3f7d2d0f82c42048046c9daefc360d0d3335761d\",\"dweb:/ipfs/QmaPRBk5oeoQajXGLpCCq1B2BNRHbToSrD7a7ZbcqnhwKx\"],\"license\":\"MIT\"},\"src/governance/UpgradeableRootstockCollective.sol\":{\"keccak256\":\"0x22b56cfe51772a18fc6b7f4e64c53a2a9e73654826cfcb8b24e84c25058e2541\",\"urls\":[\"bzz-raw://57900df94f4b5b41038bb78594317680c8ea5ea74b2c5ca00875b3815b5e6dc5\",\"dweb:/ipfs/QmbANYcAgWYQ4Fthch7qeMCSXHQucRGPfVRjCTgUzcWTmL\"],\"license\":\"MIT\"},\"src/interfaces/IBackersManagerRootstockCollective.sol\":{\"keccak256\":\"0x7eacff4e2d906e1f38636bdc81646f213dc3820724b0bb4f61d2e105272f4087\",\"urls\":[\"bzz-raw://00e4ac507e8377040962f89fb774df725422c400114965eee8c45fcc401a7f87\",\"dweb:/ipfs/QmNsqV2naFxx8s6AG8YVDZqhvnUvXmnDZVhWH1WMsFesf6\"],\"license\":\"MIT\"},\"src/interfaces/IChangeContractRootstockCollective.sol\":{\"keccak256\":\"0x00fb3eb72286348dd06d581c5044cb045dfd3bd24725d05dd9c4b008567dd496\",\"urls\":[\"bzz-raw://7f4a03e06197ae7d6e478097afbbecf936ce7029ca49909a1fee0b4ba1b5b517\",\"dweb:/ipfs/QmfByMJ1SQAmcYkouS5WM3akMmSKU3MCyACpFmQwuFSYe9\"],\"license\":\"MIT\"},\"src/interfaces/ICollectiveRewardsCheckRootstockCollective.sol\":{\"keccak256\":\"0x3fa8e50c66e322c8023aed564a442404bdcb942ae1fe95fa60bf9982e8baf7ee\",\"urls\":[\"bzz-raw://df7c927919599e72f70fdcfaf5713d859f447d4258ea7a6ed8f9bcac851d3d72\",\"dweb:/ipfs/Qmb54kMmV1UD45oZntyxB7yWaUfKwMC136ftDHctVmNrge\"],\"license\":\"UNLICENSED\"},\"src/interfaces/IGovernanceManagerRootstockCollective.sol\":{\"keccak256\":\"0x1416991dd129bb36f43cc0854dfa824b5b85838e5c5018566b6cf78f527747e3\",\"urls\":[\"bzz-raw://8652a18ec39d5527fefb829eca619f4cf4bbec3ee4f6231e8888f1549feedd3d\",\"dweb:/ipfs/Qmczi6GipLy9B9TcDMx5UaZZPFBaMT2k49iYzQuLCFgnfS\"],\"license\":\"MIT\"},\"src/libraries/UtilsLib.sol\":{\"keccak256\":\"0x4660e2e62cb370b17052cd21238722bfe3cdaaf3f69cf4c9b2d87236070d12ac\",\"urls\":[\"bzz-raw://e8759237b67bb6e641c7a92eb0d94300770e32c25c2c5bf387bea2ea68513753\",\"dweb:/ipfs/QmbkRDUnzyL9QQbwJcFGd6kiERFFgxZgnxqsu14snpCvhp\"],\"license\":\"MIT\"}},\"version\":1}", + "numDeployments": 1, + "receipt": { + "transactionHash": "0x9c892efd569bd700ceb4a8e1f182e2c4dcee3d2d3ff1f76fffd6dc796e8eca9f", + "transactionIndex": "0x1", + "blockHash": "0x00bfbf3d1c75dd035577a9085a4e0594da5c6ff30636b98141f93a275329d720", + "blockNumber": "0x6a2e73", + "from": "0xa3eda7A0b22d97DEFb7e223088F4c86a3Ce4B152", + "to": null, + "cumulativeGasUsed": "0x4ed126", + "gasUsed": "0x4e5368", + "contractAddress": "0x263701442A322418fF5b3D5F5AAb762834bE082B", + "logs": [ + { + "address": "0x263701442A322418fF5b3D5F5AAb762834bE082B", + "topics": [ + "0xc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d2" + ], + "data": "0x000000000000000000000000000000000000000000000000ffffffffffffffff", + "blockHash": "0x00bfbf3d1c75dd035577a9085a4e0594da5c6ff30636b98141f93a275329d720", + "blockNumber": "0x6a2e73", + "transactionHash": "0x9c892efd569bd700ceb4a8e1f182e2c4dcee3d2d3ff1f76fffd6dc796e8eca9f", + "transactionIndex": "0x1", + "logIndex": "0x0" + } + ], + "status": "0x1", + "logsBloom": "0x00000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800000000000000000000000080000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000040000000000000000000000000004000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "type": "0x0" + }, + "solcInputHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "storageLayout": { + "storage": [ + { + "astId": 60228, + "contract": "src/BackersManagerRootstockCollective.sol:BackersManagerRootstockCollective", + "label": "governanceManager", + "offset": 0, + "slot": "0", + "type": "t_contract(IGovernanceManagerRootstockCollective)60552" + }, + { + "astId": 60260, + "contract": "src/BackersManagerRootstockCollective.sol:BackersManagerRootstockCollective", + "label": "__gap", + "offset": 0, + "slot": "1", + "type": "t_array(t_uint256)50_storage" + }, + { + "astId": 57662, + "contract": "src/BackersManagerRootstockCollective.sol:BackersManagerRootstockCollective", + "label": "cycleData", + "offset": 0, + "slot": "51", + "type": "t_struct(CycleData)57658_storage" + }, + { + "astId": 57664, + "contract": "src/BackersManagerRootstockCollective.sol:BackersManagerRootstockCollective", + "label": "distributionDuration", + "offset": 0, + "slot": "52", + "type": "t_uint32" + }, + { + "astId": 58109, + "contract": "src/BackersManagerRootstockCollective.sol:BackersManagerRootstockCollective", + "label": "__gap", + "offset": 0, + "slot": "53", + "type": "t_array(t_uint256)50_storage" + }, + { + "astId": 56233, + "contract": "src/BackersManagerRootstockCollective.sol:BackersManagerRootstockCollective", + "label": "rewardDistributor", + "offset": 0, + "slot": "103", + "type": "t_address" + }, + { + "astId": 56239, + "contract": "src/BackersManagerRootstockCollective.sol:BackersManagerRootstockCollective", + "label": "builderState", + "offset": 0, + "slot": "104", + "type": "t_mapping(t_address,t_struct(BuilderState)56223_storage)" + }, + { + "astId": 56244, + "contract": "src/BackersManagerRootstockCollective.sol:BackersManagerRootstockCollective", + "label": "builderRewardReceiver", + "offset": 0, + "slot": "105", + "type": "t_mapping(t_address,t_address)" + }, + { + "astId": 56249, + "contract": "src/BackersManagerRootstockCollective.sol:BackersManagerRootstockCollective", + "label": "builderRewardReceiverReplacement", + "offset": 0, + "slot": "106", + "type": "t_mapping(t_address,t_address)" + }, + { + "astId": 56255, + "contract": "src/BackersManagerRootstockCollective.sol:BackersManagerRootstockCollective", + "label": "backerRewardPercentage", + "offset": 0, + "slot": "107", + "type": "t_mapping(t_address,t_struct(RewardPercentageData)56230_storage)" + }, + { + "astId": 56259, + "contract": "src/BackersManagerRootstockCollective.sol:BackersManagerRootstockCollective", + "label": "_gauges", + "offset": 0, + "slot": "108", + "type": "t_struct(AddressSet)4717_storage" + }, + { + "astId": 56263, + "contract": "src/BackersManagerRootstockCollective.sol:BackersManagerRootstockCollective", + "label": "_haltedGauges", + "offset": 0, + "slot": "110", + "type": "t_struct(AddressSet)4717_storage" + }, + { + "astId": 56267, + "contract": "src/BackersManagerRootstockCollective.sol:BackersManagerRootstockCollective", + "label": "gaugeFactory", + "offset": 0, + "slot": "112", + "type": "t_contract(GaugeFactoryRootstockCollective)58441" + }, + { + "astId": 56273, + "contract": "src/BackersManagerRootstockCollective.sol:BackersManagerRootstockCollective", + "label": "builderToGauge", + "offset": 0, + "slot": "113", + "type": "t_mapping(t_address,t_contract(GaugeRootstockCollective)59801)" + }, + { + "astId": 56279, + "contract": "src/BackersManagerRootstockCollective.sol:BackersManagerRootstockCollective", + "label": "gaugeToBuilder", + "offset": 0, + "slot": "114", + "type": "t_mapping(t_contract(GaugeRootstockCollective)59801,t_address)" + }, + { + "astId": 56285, + "contract": "src/BackersManagerRootstockCollective.sol:BackersManagerRootstockCollective", + "label": "haltedGaugeLastPeriodFinish", + "offset": 0, + "slot": "115", + "type": "t_mapping(t_contract(GaugeRootstockCollective)59801,t_uint256)" + }, + { + "astId": 56288, + "contract": "src/BackersManagerRootstockCollective.sol:BackersManagerRootstockCollective", + "label": "rewardPercentageCooldown", + "offset": 0, + "slot": "116", + "type": "t_uint128" + }, + { + "astId": 57579, + "contract": "src/BackersManagerRootstockCollective.sol:BackersManagerRootstockCollective", + "label": "__gap", + "offset": 0, + "slot": "117", + "type": "t_array(t_uint256)50_storage" + }, + { + "astId": 55097, + "contract": "src/BackersManagerRootstockCollective.sol:BackersManagerRootstockCollective", + "label": "stakingToken", + "offset": 0, + "slot": "167", + "type": "t_contract(IERC20)2025" + }, + { + "astId": 55100, + "contract": "src/BackersManagerRootstockCollective.sol:BackersManagerRootstockCollective", + "label": "rewardToken", + "offset": 0, + "slot": "168", + "type": "t_address" + }, + { + "astId": 55103, + "contract": "src/BackersManagerRootstockCollective.sol:BackersManagerRootstockCollective", + "label": "totalPotentialReward", + "offset": 0, + "slot": "169", + "type": "t_uint256" + }, + { + "astId": 55106, + "contract": "src/BackersManagerRootstockCollective.sol:BackersManagerRootstockCollective", + "label": "tempTotalPotentialReward", + "offset": 0, + "slot": "170", + "type": "t_uint256" + }, + { + "astId": 55109, + "contract": "src/BackersManagerRootstockCollective.sol:BackersManagerRootstockCollective", + "label": "rewardsERC20", + "offset": 0, + "slot": "171", + "type": "t_uint256" + }, + { + "astId": 55112, + "contract": "src/BackersManagerRootstockCollective.sol:BackersManagerRootstockCollective", + "label": "rewardsCoinbase", + "offset": 0, + "slot": "172", + "type": "t_uint256" + }, + { + "astId": 55115, + "contract": "src/BackersManagerRootstockCollective.sol:BackersManagerRootstockCollective", + "label": "indexLastGaugeDistributed", + "offset": 0, + "slot": "173", + "type": "t_uint256" + }, + { + "astId": 55118, + "contract": "src/BackersManagerRootstockCollective.sol:BackersManagerRootstockCollective", + "label": "_periodFinish", + "offset": 0, + "slot": "174", + "type": "t_uint256" + }, + { + "astId": 55121, + "contract": "src/BackersManagerRootstockCollective.sol:BackersManagerRootstockCollective", + "label": "onDistributionPeriod", + "offset": 0, + "slot": "175", + "type": "t_bool" + }, + { + "astId": 55126, + "contract": "src/BackersManagerRootstockCollective.sol:BackersManagerRootstockCollective", + "label": "backerTotalAllocation", + "offset": 0, + "slot": "176", + "type": "t_mapping(t_address,t_uint256)" + }, + { + "astId": 56051, + "contract": "src/BackersManagerRootstockCollective.sol:BackersManagerRootstockCollective", + "label": "__gap", + "offset": 0, + "slot": "177", + "type": "t_array(t_uint256)50_storage" + } + ], + "types": { + "t_address": { + "encoding": "inplace", + "label": "address", + "numberOfBytes": "20" + }, + "t_array(t_bytes32)dyn_storage": { + "encoding": "dynamic_array", + "label": "bytes32[]", + "numberOfBytes": "32", + "base": "t_bytes32" + }, + "t_array(t_uint256)50_storage": { + "encoding": "inplace", + "label": "uint256[50]", + "numberOfBytes": "1600", + "base": "t_uint256" + }, + "t_bool": { + "encoding": "inplace", + "label": "bool", + "numberOfBytes": "1" + }, + "t_bytes20": { + "encoding": "inplace", + "label": "bytes20", + "numberOfBytes": "20" + }, + "t_bytes32": { + "encoding": "inplace", + "label": "bytes32", + "numberOfBytes": "32" + }, + "t_bytes7": { + "encoding": "inplace", + "label": "bytes7", + "numberOfBytes": "7" + }, + "t_contract(GaugeFactoryRootstockCollective)58441": { + "encoding": "inplace", + "label": "contract GaugeFactoryRootstockCollective", + "numberOfBytes": "20" + }, + "t_contract(GaugeRootstockCollective)59801": { + "encoding": "inplace", + "label": "contract GaugeRootstockCollective", + "numberOfBytes": "20" + }, + "t_contract(IERC20)2025": { + "encoding": "inplace", + "label": "contract IERC20", + "numberOfBytes": "20" + }, + "t_contract(IGovernanceManagerRootstockCollective)60552": { + "encoding": "inplace", + "label": "contract IGovernanceManagerRootstockCollective", + "numberOfBytes": "20" + }, + "t_mapping(t_address,t_address)": { + "encoding": "mapping", + "key": "t_address", + "label": "mapping(address => address)", + "numberOfBytes": "32", + "value": "t_address" + }, + "t_mapping(t_address,t_contract(GaugeRootstockCollective)59801)": { + "encoding": "mapping", + "key": "t_address", + "label": "mapping(address => contract GaugeRootstockCollective)", + "numberOfBytes": "32", + "value": "t_contract(GaugeRootstockCollective)59801" + }, + "t_mapping(t_address,t_struct(BuilderState)56223_storage)": { + "encoding": "mapping", + "key": "t_address", + "label": "mapping(address => struct BuilderRegistryRootstockCollective.BuilderState)", + "numberOfBytes": "32", + "value": "t_struct(BuilderState)56223_storage" + }, + "t_mapping(t_address,t_struct(RewardPercentageData)56230_storage)": { + "encoding": "mapping", + "key": "t_address", + "label": "mapping(address => struct BuilderRegistryRootstockCollective.RewardPercentageData)", + "numberOfBytes": "32", + "value": "t_struct(RewardPercentageData)56230_storage" + }, + "t_mapping(t_address,t_uint256)": { + "encoding": "mapping", + "key": "t_address", + "label": "mapping(address => uint256)", + "numberOfBytes": "32", + "value": "t_uint256" + }, + "t_mapping(t_bytes32,t_uint256)": { + "encoding": "mapping", + "key": "t_bytes32", + "label": "mapping(bytes32 => uint256)", + "numberOfBytes": "32", + "value": "t_uint256" + }, + "t_mapping(t_contract(GaugeRootstockCollective)59801,t_address)": { + "encoding": "mapping", + "key": "t_contract(GaugeRootstockCollective)59801", + "label": "mapping(contract GaugeRootstockCollective => address)", + "numberOfBytes": "32", + "value": "t_address" + }, + "t_mapping(t_contract(GaugeRootstockCollective)59801,t_uint256)": { + "encoding": "mapping", + "key": "t_contract(GaugeRootstockCollective)59801", + "label": "mapping(contract GaugeRootstockCollective => uint256)", + "numberOfBytes": "32", + "value": "t_uint256" + }, + "t_struct(AddressSet)4717_storage": { + "encoding": "inplace", + "label": "struct EnumerableSet.AddressSet", + "numberOfBytes": "64", + "members": [ + { + "astId": 4716, + "contract": "src/BackersManagerRootstockCollective.sol:BackersManagerRootstockCollective", + "label": "_inner", + "offset": 0, + "slot": "0", + "type": "t_struct(Set)4402_storage" + } + ] + }, + "t_struct(BuilderState)56223_storage": { + "encoding": "inplace", + "label": "struct BuilderRegistryRootstockCollective.BuilderState", + "numberOfBytes": "32", + "members": [ + { + "astId": 56210, + "contract": "src/BackersManagerRootstockCollective.sol:BackersManagerRootstockCollective", + "label": "activated", + "offset": 0, + "slot": "0", + "type": "t_bool" + }, + { + "astId": 56212, + "contract": "src/BackersManagerRootstockCollective.sol:BackersManagerRootstockCollective", + "label": "kycApproved", + "offset": 1, + "slot": "0", + "type": "t_bool" + }, + { + "astId": 56214, + "contract": "src/BackersManagerRootstockCollective.sol:BackersManagerRootstockCollective", + "label": "communityApproved", + "offset": 2, + "slot": "0", + "type": "t_bool" + }, + { + "astId": 56216, + "contract": "src/BackersManagerRootstockCollective.sol:BackersManagerRootstockCollective", + "label": "paused", + "offset": 3, + "slot": "0", + "type": "t_bool" + }, + { + "astId": 56218, + "contract": "src/BackersManagerRootstockCollective.sol:BackersManagerRootstockCollective", + "label": "revoked", + "offset": 4, + "slot": "0", + "type": "t_bool" + }, + { + "astId": 56220, + "contract": "src/BackersManagerRootstockCollective.sol:BackersManagerRootstockCollective", + "label": "reserved", + "offset": 5, + "slot": "0", + "type": "t_bytes7" + }, + { + "astId": 56222, + "contract": "src/BackersManagerRootstockCollective.sol:BackersManagerRootstockCollective", + "label": "pausedReason", + "offset": 12, + "slot": "0", + "type": "t_bytes20" + } + ] + }, + "t_struct(CycleData)57658_storage": { + "encoding": "inplace", + "label": "struct CycleTimeKeeperRootstockCollective.CycleData", + "numberOfBytes": "32", + "members": [ + { + "astId": 57649, + "contract": "src/BackersManagerRootstockCollective.sol:BackersManagerRootstockCollective", + "label": "previousDuration", + "offset": 0, + "slot": "0", + "type": "t_uint32" + }, + { + "astId": 57651, + "contract": "src/BackersManagerRootstockCollective.sol:BackersManagerRootstockCollective", + "label": "nextDuration", + "offset": 4, + "slot": "0", + "type": "t_uint32" + }, + { + "astId": 57653, + "contract": "src/BackersManagerRootstockCollective.sol:BackersManagerRootstockCollective", + "label": "previousStart", + "offset": 8, + "slot": "0", + "type": "t_uint64" + }, + { + "astId": 57655, + "contract": "src/BackersManagerRootstockCollective.sol:BackersManagerRootstockCollective", + "label": "nextStart", + "offset": 16, + "slot": "0", + "type": "t_uint64" + }, + { + "astId": 57657, + "contract": "src/BackersManagerRootstockCollective.sol:BackersManagerRootstockCollective", + "label": "offset", + "offset": 24, + "slot": "0", + "type": "t_uint24" + } + ] + }, + "t_struct(RewardPercentageData)56230_storage": { + "encoding": "inplace", + "label": "struct BuilderRegistryRootstockCollective.RewardPercentageData", + "numberOfBytes": "32", + "members": [ + { + "astId": 56225, + "contract": "src/BackersManagerRootstockCollective.sol:BackersManagerRootstockCollective", + "label": "previous", + "offset": 0, + "slot": "0", + "type": "t_uint64" + }, + { + "astId": 56227, + "contract": "src/BackersManagerRootstockCollective.sol:BackersManagerRootstockCollective", + "label": "next", + "offset": 8, + "slot": "0", + "type": "t_uint64" + }, + { + "astId": 56229, + "contract": "src/BackersManagerRootstockCollective.sol:BackersManagerRootstockCollective", + "label": "cooldownEndTime", + "offset": 16, + "slot": "0", + "type": "t_uint128" + } + ] + }, + "t_struct(Set)4402_storage": { + "encoding": "inplace", + "label": "struct EnumerableSet.Set", + "numberOfBytes": "64", + "members": [ + { + "astId": 4397, + "contract": "src/BackersManagerRootstockCollective.sol:BackersManagerRootstockCollective", + "label": "_values", + "offset": 0, + "slot": "0", + "type": "t_array(t_bytes32)dyn_storage" + }, + { + "astId": 4401, + "contract": "src/BackersManagerRootstockCollective.sol:BackersManagerRootstockCollective", + "label": "_positions", + "offset": 0, + "slot": "1", + "type": "t_mapping(t_bytes32,t_uint256)" + } + ] + }, + "t_uint128": { + "encoding": "inplace", + "label": "uint128", + "numberOfBytes": "16" + }, + "t_uint24": { + "encoding": "inplace", + "label": "uint24", + "numberOfBytes": "3" + }, + "t_uint256": { + "encoding": "inplace", + "label": "uint256", + "numberOfBytes": "32" + }, + "t_uint32": { + "encoding": "inplace", + "label": "uint32", + "numberOfBytes": "4" + }, + "t_uint64": { + "encoding": "inplace", + "label": "uint64", + "numberOfBytes": "8" + } + } + }, + "transactionHash": "0x9c892efd569bd700ceb4a8e1f182e2c4dcee3d2d3ff1f76fffd6dc796e8eca9f", + "userdoc": { + "version": 1, + "kind": "user", + "methods": { + "activateBuilder(address,address,uint64)": { + "notice": "activates builder for the first time, setting the reward receiver and the reward percentage Sets activate flag to true. It cannot be switched to false anymore" + }, + "allocate(address,uint256)": { + "notice": "allocates votes for a gauge" + }, + "allocateBatch(address[],uint256[])": { + "notice": "allocates votes for a batch of gauges" + }, + "approveBuilderKYC(address)": { + "notice": "approves builder's KYC after a revocation" + }, + "approveBuilderRewardReceiverReplacement(address,address)": { + "notice": "KYCApprover approves Builder's request to replace his rewardReceiver address" + }, + "backerRewardPercentage(address)": { + "notice": "map of builder's backers reward percentage data" + }, + "backerTotalAllocation(address)": { + "notice": "total amount of stakingToken allocated by a backer" + }, + "builderRewardReceiver(address)": { + "notice": "map of builders reward receiver" + }, + "builderRewardReceiverReplacement(address)": { + "notice": "map of builders reward receiver replacement, used as a buffer until the new address is accepted" + }, + "builderState(address)": { + "notice": "map of builders state" + }, + "builderToGauge(address)": { + "notice": "gauge contract for a builder" + }, + "canWithdraw(address,uint256)": { + "notice": "returns true if can withdraw, remaining balance should exceed the current allocation" + }, + "cancelRewardReceiverReplacementRequest()": { + "notice": "Builder cancels his request to replace his rewardReceiver address" + }, + "claimBackerRewards(address,address[])": { + "notice": "claims backer rewards from a batch of gauges" + }, + "claimBackerRewards(address[])": { + "notice": "claims backer rewards from a batch of gauges" + }, + "communityApproveBuilder(address)": { + "notice": "community approve builder and create its gauge" + }, + "cycleData()": { + "notice": "cycle data" + }, + "cycleNext(uint256)": { + "notice": "gets when an cycle ends or the next one starts based on given `timestamp_`" + }, + "cycleStart(uint256)": { + "notice": "gets when an cycle starts based on given `timestamp_`" + }, + "dewhitelistBuilder(address)": { + "notice": "de-whitelist builder" + }, + "distribute()": { + "notice": "continues pagination to distribute accumulated reward tokens to the gauges" + }, + "endDistributionWindow(uint256)": { + "notice": "gets when an cycle distribution ends based on given `timestamp_`" + }, + "gaugeFactory()": { + "notice": "gauge factory contract address" + }, + "gaugeToBuilder(address)": { + "notice": "builder address for a gauge contract" + }, + "getCycleStartAndDuration()": { + "notice": "returns cycle start and duration If there is a new one and cooldown time has expired, apply that one; otherwise, apply the previous one" + }, + "getGaugeAt(uint256)": { + "notice": "get gauge from array at a given index" + }, + "getGaugesLength()": { + "notice": "get length of gauges array" + }, + "getHaltedGaugeAt(uint256)": { + "notice": "get halted gauge from array at a given index" + }, + "getHaltedGaugesLength()": { + "notice": "get length of halted gauges array" + }, + "getRewardPercentageToApply(address)": { + "notice": "returns reward percentage to apply. If there is a new one and cooldown time has expired, apply that one; otherwise, apply the previous one" + }, + "haltedGaugeLastPeriodFinish(address)": { + "notice": "map of last period finish for halted gauges" + }, + "hasBuilderRewardReceiverPendingApproval(address)": { + "notice": "returns true if the builder has an open request to replace his receiver address" + }, + "indexLastGaugeDistributed()": { + "notice": "index of tha last gauge distributed during a distribution period" + }, + "initialize(address,address,address,address,address,uint32,uint24,uint32,uint128)": { + "notice": "contract initializer" + }, + "isBuilderOperational(address)": { + "notice": "return true if builder is operational kycApproved == true && communityApproved == true && paused == false" + }, + "isBuilderPaused(address)": { + "notice": "return true if builder is paused" + }, + "isGaugeHalted(address)": { + "notice": "return true is gauge is halted" + }, + "isGaugeOperational(address)": { + "notice": "return true if gauge is operational kycApproved == true && communityApproved == true && paused == false" + }, + "isGaugeRewarded(address)": { + "notice": "return true is gauge is rewarded" + }, + "migrateBuilder(address,address,uint64)": { + "notice": "migrate v1 builder to the new builder registry" + }, + "notifyRewardAmount(uint256)": { + "notice": "transfers reward tokens from the sender to be distributed to the gauges" + }, + "onDistributionPeriod()": { + "notice": "true if distribution period started. Allocations remain blocked until it finishes" + }, + "pauseBuilder(address,bytes20)": { + "notice": "pause builder" + }, + "periodFinish()": { + "notice": "returns timestamp end of current rewards period If it is called by a halted gauge returns the timestamp of the last period distributed This is important because unclaimed rewards must stop accumulating rewards and halted gauges are not updated on the distribution anymore" + }, + "permitBuilder(uint64)": { + "notice": "permit builder" + }, + "revokeBuilder()": { + "notice": "revoke builder" + }, + "revokeBuilderKYC(address)": { + "notice": "revokes builder's KYC and sent builder unclaimed rewards to rewardDistributor contract" + }, + "rewardDistributor()": { + "notice": "reward distributor address. If a builder is KYC revoked their unclaimed rewards will sent back here" + }, + "rewardPercentageCooldown()": { + "notice": "time that must elapse for a new reward percentage from a builder to be applied" + }, + "rewardToken()": { + "notice": "address of the token rewarded to builder and voters" + }, + "rewardsCoinbase()": { + "notice": "Coinbase rewards to distribute [N]" + }, + "rewardsERC20()": { + "notice": "ERC20 rewards to distribute [N]" + }, + "setBackerRewardPercentage(uint64)": { + "notice": "allows a builder to set his backers reward percentage" + }, + "setCycleDuration(uint32,uint24)": { + "notice": "schedule a new cycle duration. It will be applied for the next cycle" + }, + "setDistributionDuration(uint32)": { + "notice": "set the duration of the distribution window" + }, + "stakingToken()": { + "notice": "address of the token used to stake" + }, + "startDistribution()": { + "notice": "starts the distribution period blocking all the allocations until all the gauges were distributed" + }, + "submitRewardReceiverReplacementRequest(address)": { + "notice": "Builder submits a request to replace his rewardReceiver address, the request will then need to be approved by `approveBuilderRewardReceiverReplacement`" + }, + "tempTotalPotentialReward()": { + "notice": "on a paginated distribution we need to temporarily store the totalPotentialReward" + }, + "timeUntilNextCycle(uint256)": { + "notice": "gets time left until the next cycle based on given `timestamp_`" + }, + "totalPotentialReward()": { + "notice": "total potential reward" + }, + "unpauseBuilder(address)": { + "notice": "unpause builder" + } + }, + "notice": "Creates gauges, manages backers votes and distribute rewards" + } +} \ No newline at end of file diff --git a/deployments/mainnet/BackersManagerRootstockCollectiveProxy.json b/deployments/mainnet/BackersManagerRootstockCollectiveProxy.json new file mode 100644 index 00000000..1283dca9 --- /dev/null +++ b/deployments/mainnet/BackersManagerRootstockCollectiveProxy.json @@ -0,0 +1,166 @@ +{ + "abi": [ + { + "type": "constructor", + "inputs": [ + { + "name": "implementation", + "type": "address", + "internalType": "address" + }, + { + "name": "_data", + "type": "bytes", + "internalType": "bytes" + } + ], + "stateMutability": "payable" + }, + { + "type": "fallback", + "stateMutability": "payable" + }, + { + "type": "event", + "name": "Upgraded", + "inputs": [ + { + "name": "implementation", + "type": "address", + "indexed": true, + "internalType": "address" + } + ], + "anonymous": false + }, + { + "type": "error", + "name": "AddressEmptyCode", + "inputs": [ + { + "name": "target", + "type": "address", + "internalType": "address" + } + ] + }, + { + "type": "error", + "name": "ERC1967InvalidImplementation", + "inputs": [ + { + "name": "implementation", + "type": "address", + "internalType": "address" + } + ] + }, + { + "type": "error", + "name": "ERC1967NonPayable", + "inputs": [] + }, + { + "type": "error", + "name": "FailedInnerCall", + "inputs": [] + } + ], + "address": "0x7995C48D987941291d8008695A4133E557a11530", + "args": [ + "0x263701442A322418fF5b3D5F5AAb762834bE082B", + "0x4be507620000000000000000000000007749f092834e4446466c1a14ccc8edd526a5c1fb0000000000000000000000002acc95758f8b5f583470ba265eb685a8f45fc9d50000000000000000000000005db91e24bd32059584bbdb831a901f1199f3d459000000000000000000000000e78daa2b54bbda0384cd9cf1bdfe605b30023b830000000000000000000000005603ba40257e317e45ba13c3732819af5e81a9a1000000000000000000000000000000000000000000000000000000000012750000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e100000000000000000000000000000000000000000000000000000000000093a80" + ], + "bytecode": "0x60806040526040516103ee3803806103ee83398101604081905261002291610268565b61002c8282610033565b5050610352565b61003c82610092565b6040516001600160a01b038316907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a280511561008657610081828261010e565b505050565b61008e610185565b5050565b806001600160a01b03163b6000036100cd57604051634c9c8ce360e01b81526001600160a01b03821660048201526024015b60405180910390fd5b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc80546001600160a01b0319166001600160a01b0392909216919091179055565b6060600080846001600160a01b03168460405161012b9190610336565b600060405180830381855af49150503d8060008114610166576040519150601f19603f3d011682016040523d82523d6000602084013e61016b565b606091505b50909250905061017c8583836101a6565b95945050505050565b34156101a45760405163b398979f60e01b815260040160405180910390fd5b565b6060826101bb576101b682610205565b6101fe565b81511580156101d257506001600160a01b0384163b155b156101fb57604051639996b31560e01b81526001600160a01b03851660048201526024016100c4565b50805b9392505050565b8051156102155780518082602001fd5b604051630a12f52160e11b815260040160405180910390fd5b634e487b7160e01b600052604160045260246000fd5b60005b8381101561025f578181015183820152602001610247565b50506000910152565b6000806040838503121561027b57600080fd5b82516001600160a01b038116811461029257600080fd5b60208401519092506001600160401b03808211156102af57600080fd5b818501915085601f8301126102c357600080fd5b8151818111156102d5576102d561022e565b604051601f8201601f19908116603f011681019083821181831017156102fd576102fd61022e565b8160405282815288602084870101111561031657600080fd5b610327836020830160208801610244565b80955050505050509250929050565b60008251610348818460208701610244565b9190910192915050565b608e806103606000396000f3fe6080604052600a600c565b005b60186014601a565b605e565b565b600060597f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5473ffffffffffffffffffffffffffffffffffffffff1690565b905090565b3660008037600080366000845af43d6000803e808015607c573d6000f35b3d6000fdfea164736f6c6343000814000a", + "deployedBytecode": "0x6080604052600a600c565b005b60186014601a565b605e565b565b600060597f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5473ffffffffffffffffffffffffffffffffffffffff1690565b905090565b3660008037600080366000845af43d6000803e808015607c573d6000f35b3d6000fdfea164736f6c6343000814000a", + "devdoc": { + "version": 1, + "kind": "dev", + "details": "This contract implements an upgradeable proxy. It is upgradeable because calls are delegated to an implementation address that can be changed. This address is stored in storage in the location specified by https://eips.ethereum.org/EIPS/eip-1967[EIP1967], so that it doesn't conflict with the storage layout of the implementation behind the proxy.", + "methods": { + "constructor": { + "details": "Initializes the upgradeable proxy with an initial implementation specified by `implementation`. If `_data` is nonempty, it's used as data in a delegate call to `implementation`. This will typically be an encoded function call, and allows initializing the storage of the proxy like a Solidity constructor. Requirements: - If `data` is empty, `msg.value` must be zero." + } + }, + "events": { + "Upgraded(address)": { + "details": "Emitted when the implementation is upgraded." + } + }, + "errors": { + "AddressEmptyCode(address)": [ + { + "details": "There's no code at `target` (it is not a contract)." + } + ], + "ERC1967InvalidImplementation(address)": [ + { + "details": "The `implementation` of the proxy is invalid." + } + ], + "ERC1967NonPayable()": [ + { + "details": "An upgrade function sees `msg.value > 0` that may be lost." + } + ], + "FailedInnerCall()": [ + { + "details": "A call to an address target failed. The target may have reverted." + } + ] + } + }, + "metadata": "{\"compiler\":{\"version\":\"0.8.20+commit.a1b79de6\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"address\",\"name\":\"implementation\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"_data\",\"type\":\"bytes\"}],\"stateMutability\":\"payable\",\"type\":\"constructor\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"target\",\"type\":\"address\"}],\"type\":\"error\",\"name\":\"AddressEmptyCode\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"implementation\",\"type\":\"address\"}],\"type\":\"error\",\"name\":\"ERC1967InvalidImplementation\"},{\"inputs\":[],\"type\":\"error\",\"name\":\"ERC1967NonPayable\"},{\"inputs\":[],\"type\":\"error\",\"name\":\"FailedInnerCall\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"implementation\",\"type\":\"address\",\"indexed\":true}],\"type\":\"event\",\"name\":\"Upgraded\",\"anonymous\":false},{\"inputs\":[],\"stateMutability\":\"payable\",\"type\":\"fallback\"}],\"devdoc\":{\"kind\":\"dev\",\"methods\":{\"constructor\":{\"details\":\"Initializes the upgradeable proxy with an initial implementation specified by `implementation`. If `_data` is nonempty, it's used as data in a delegate call to `implementation`. This will typically be an encoded function call, and allows initializing the storage of the proxy like a Solidity constructor. Requirements: - If `data` is empty, `msg.value` must be zero.\"}},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"remappings\":[\"@openzeppelin/contracts-upgradeable/=node_modules/@openzeppelin/contracts-upgradeable/\",\"@openzeppelin/contracts/=node_modules/@openzeppelin/contracts/\",\"eth-gas-reporter/=node_modules/eth-gas-reporter/\",\"forge-std/=node_modules/forge-std/\",\"hardhat/=node_modules/hardhat/\"],\"optimizer\":{\"enabled\":true,\"runs\":10000},\"metadata\":{\"bytecodeHash\":\"none\"},\"compilationTarget\":{\"node_modules/@openzeppelin/contracts/proxy/ERC1967/ERC1967Proxy.sol\":\"ERC1967Proxy\"},\"evmVersion\":\"london\",\"libraries\":{}},\"sources\":{\"node_modules/@openzeppelin/contracts/proxy/ERC1967/ERC1967Proxy.sol\":{\"keccak256\":\"0xbfb6695731de677140fbf76c772ab08c4233a122fb51ac28ac120fc49bbbc4ec\",\"urls\":[\"bzz-raw://68f8fded7cc318efa15874b7c6a983fe17a4a955d72d240353a9a4ca1e1b824c\",\"dweb:/ipfs/QmdcmBL9Qo4Tk3Dby4wFYabGyot9JNeLPxpSXZUgUm92BV\"],\"license\":\"MIT\"},\"node_modules/@openzeppelin/contracts/proxy/ERC1967/ERC1967Utils.sol\":{\"keccak256\":\"0x06a78f9b3ee3e6d0eb4e4cd635ba49960bea34cac1db8c0a27c75f2319f1fd65\",\"urls\":[\"bzz-raw://547d21aa17f4f3f1a1a7edf7167beff8dd9496a0348d5588f15cc8a4b29d052a\",\"dweb:/ipfs/QmT16JtRQSWNpLo9W23jr6CzaMuTAcQcjJJcdRd8HLJ6cE\"],\"license\":\"MIT\"},\"node_modules/@openzeppelin/contracts/proxy/Proxy.sol\":{\"keccak256\":\"0xc3f2ec76a3de8ed7a7007c46166f5550c72c7709e3fc7e8bb3111a7191cdedbd\",\"urls\":[\"bzz-raw://e73efb4c2ca655882dc237c6b4f234a9bd36d97159d8fcaa837eb01171f726ac\",\"dweb:/ipfs/QmTNnnv7Gu5fs5G1ZMh7Fexp8N4XUs3XrNAngjcxgiss3e\"],\"license\":\"MIT\"},\"node_modules/@openzeppelin/contracts/proxy/beacon/IBeacon.sol\":{\"keccak256\":\"0xc59a78b07b44b2cf2e8ab4175fca91e8eca1eee2df7357b8d2a8833e5ea1f64c\",\"urls\":[\"bzz-raw://5aa4f07e65444784c29cd7bfcc2341b34381e4e5b5da9f0c5bd00d7f430e66fa\",\"dweb:/ipfs/QmWRMh4Q9DpaU9GvsiXmDdoNYMyyece9if7hnfLz7uqzWM\"],\"license\":\"MIT\"},\"node_modules/@openzeppelin/contracts/utils/Address.sol\":{\"keccak256\":\"0xaf28a975a78550e45f65e559a3ad6a5ad43b9b8a37366999abd1b7084eb70721\",\"urls\":[\"bzz-raw://b7bd24e224f67f65bfadf85dc2929fa965456bb2415478bd0125471b5ce35245\",\"dweb:/ipfs/QmRaydGr8BTHs1kvaZfsNU69pKzUAGFrvABn1KiRSbE51y\"],\"license\":\"MIT\"},\"node_modules/@openzeppelin/contracts/utils/StorageSlot.sol\":{\"keccak256\":\"0x32ba59b4b7299237c8ba56319110989d7978a039faf754793064e967e5894418\",\"urls\":[\"bzz-raw://1ae50c8b562427df610cc4540c9bf104acca7ef8e2dcae567ae7e52272281e9c\",\"dweb:/ipfs/QmTHiadFCSJUPpRjNegc5SahmeU8bAoY8i9Aq6tVscbcKR\"],\"license\":\"MIT\"}},\"version\":1}", + "numDeployments": 1, + "receipt": { + "transactionHash": "0x25ebdc70eb2ccd8466bbd80157ddc4fb29f3fecdeaa31f9356e045d072b5edd6", + "transactionIndex": "0x2", + "blockHash": "0x00bfbf3d1c75dd035577a9085a4e0594da5c6ff30636b98141f93a275329d720", + "blockNumber": "0x6a2e73", + "from": "0xa3eda7A0b22d97DEFb7e223088F4c86a3Ce4B152", + "to": null, + "cumulativeGasUsed": "0x541364", + "gasUsed": "0x5423e", + "contractAddress": "0x7995C48D987941291d8008695A4133E557a11530", + "logs": [ + { + "address": "0x7995C48D987941291d8008695A4133E557a11530", + "topics": [ + "0xbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b", + "0x000000000000000000000000263701442a322418ff5b3d5f5aab762834be082b" + ], + "data": "0x", + "blockHash": "0x00bfbf3d1c75dd035577a9085a4e0594da5c6ff30636b98141f93a275329d720", + "blockNumber": "0x6a2e73", + "transactionHash": "0x25ebdc70eb2ccd8466bbd80157ddc4fb29f3fecdeaa31f9356e045d072b5edd6", + "transactionIndex": "0x2", + "logIndex": "0x0" + }, + { + "address": "0x7995C48D987941291d8008695A4133E557a11530", + "topics": [ + "0xc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d2" + ], + "data": "0x0000000000000000000000000000000000000000000000000000000000000001", + "blockHash": "0x00bfbf3d1c75dd035577a9085a4e0594da5c6ff30636b98141f93a275329d720", + "blockNumber": "0x6a2e73", + "transactionHash": "0x25ebdc70eb2ccd8466bbd80157ddc4fb29f3fecdeaa31f9356e045d072b5edd6", + "transactionIndex": "0x2", + "logIndex": "0x1" + } + ], + "status": "0x1", + "logsBloom": "0x00000000000000000000001000000000400000008000000000000000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100002000000000000000000400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800000000000000000000000080000000000000000000000000000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000008000000000000000000000000000", + "type": "0x0" + }, + "solcInputHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "storageLayout": { + "storage": [], + "types": {} + }, + "transactionHash": "0x25ebdc70eb2ccd8466bbd80157ddc4fb29f3fecdeaa31f9356e045d072b5edd6", + "userdoc": { + "version": 1, + "kind": "user" + } +} \ No newline at end of file diff --git a/deployments/mainnet/GaugeBeaconRootstockCollective.json b/deployments/mainnet/GaugeBeaconRootstockCollective.json new file mode 100644 index 00000000..044d54fa --- /dev/null +++ b/deployments/mainnet/GaugeBeaconRootstockCollective.json @@ -0,0 +1,309 @@ +{ + "abi": [ + { + "type": "constructor", + "inputs": [ + { + "name": "governanceManager_", + "type": "address", + "internalType": "contract IGovernanceManagerRootstockCollective" + }, + { + "name": "gaugeImplementation_", + "type": "address", + "internalType": "address" + } + ], + "stateMutability": "nonpayable" + }, + { + "type": "function", + "name": "governanceManager", + "inputs": [], + "outputs": [ + { + "name": "", + "type": "address", + "internalType": "contract IGovernanceManagerRootstockCollective" + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "implementation", + "inputs": [], + "outputs": [ + { + "name": "", + "type": "address", + "internalType": "address" + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "owner", + "inputs": [], + "outputs": [ + { + "name": "", + "type": "address", + "internalType": "address" + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "renounceOwnership", + "inputs": [], + "outputs": [], + "stateMutability": "nonpayable" + }, + { + "type": "function", + "name": "transferOwnership", + "inputs": [ + { + "name": "newOwner", + "type": "address", + "internalType": "address" + } + ], + "outputs": [], + "stateMutability": "nonpayable" + }, + { + "type": "function", + "name": "upgradeTo", + "inputs": [ + { + "name": "newImplementation", + "type": "address", + "internalType": "address" + } + ], + "outputs": [], + "stateMutability": "nonpayable" + }, + { + "type": "event", + "name": "OwnershipTransferred", + "inputs": [ + { + "name": "previousOwner", + "type": "address", + "indexed": true, + "internalType": "address" + }, + { + "name": "newOwner", + "type": "address", + "indexed": true, + "internalType": "address" + } + ], + "anonymous": false + }, + { + "type": "event", + "name": "Upgraded", + "inputs": [ + { + "name": "implementation", + "type": "address", + "indexed": true, + "internalType": "address" + } + ], + "anonymous": false + }, + { + "type": "error", + "name": "BeaconInvalidImplementation", + "inputs": [ + { + "name": "implementation", + "type": "address", + "internalType": "address" + } + ] + }, + { + "type": "error", + "name": "OwnableInvalidOwner", + "inputs": [ + { + "name": "owner", + "type": "address", + "internalType": "address" + } + ] + }, + { + "type": "error", + "name": "OwnableUnauthorizedAccount", + "inputs": [ + { + "name": "account", + "type": "address", + "internalType": "address" + } + ] + } + ], + "address": "0x21Cc53Cc2209E071FAb91F1495051A45b3c7E7d3", + "args": [ + "0x7749f092834E4446466C1A14CcC8edD526A5C1fB", + "0x277bF826F399Ecf671607380dD76f7643Be1A756" + ], + "bytecode": "0x608060405234801561001057600080fd5b5060405161062338038061062383398101604081905261002f916101e6565b80826001600160a01b0316630c340a246040518163ffffffff1660e01b8152600401602060405180830381865afa15801561006e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906100929190610220565b806001600160a01b0381166100c257604051631e4fbdf760e01b8152600060048201526024015b60405180910390fd5b6100cb816100fe565b506100d58261014e565b5050600280546001600160a01b0319166001600160a01b03939093169290921790915550610244565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b806001600160a01b03163b6000036101845760405163211eb15960e21b81526001600160a01b03821660048201526024016100b9565b600180546001600160a01b0319166001600160a01b0383169081179091556040517fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a250565b6001600160a01b03811681146101e357600080fd5b50565b600080604083850312156101f957600080fd5b8251610204816101ce565b6020840151909250610215816101ce565b809150509250929050565b60006020828403121561023257600080fd5b815161023d816101ce565b9392505050565b6103d0806102536000396000f3fe608060405234801561001057600080fd5b50600436106100725760003560e01c80638da5cb5b116100505780638da5cb5b146100d7578063d2e6d1c3146100f5578063f2fde38b1461011557600080fd5b80633659cfe6146100775780635c60da1b1461008c578063715018a6146100cf575b600080fd5b61008a610085366004610386565b610128565b005b60015473ffffffffffffffffffffffffffffffffffffffff165b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200160405180910390f35b61008a61013c565b60005473ffffffffffffffffffffffffffffffffffffffff166100a6565b6002546100a69073ffffffffffffffffffffffffffffffffffffffff1681565b61008a610123366004610386565b610150565b6101306101b6565b61013981610239565b50565b6101446101b6565b61014e6000610311565b565b6101586101b6565b73ffffffffffffffffffffffffffffffffffffffff81166101ad576040517f1e4fbdf7000000000000000000000000000000000000000000000000000000008152600060048201526024015b60405180910390fd5b61013981610311565b6002546040517feb6f7abf00000000000000000000000000000000000000000000000000000000815233600482015273ffffffffffffffffffffffffffffffffffffffff9091169063eb6f7abf9060240160006040518083038186803b15801561021f57600080fd5b505afa158015610233573d6000803e3d6000fd5b50505050565b8073ffffffffffffffffffffffffffffffffffffffff163b6000036102a2576040517f847ac56400000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff821660048201526024016101a4565b600180547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff83169081179091556040517fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a250565b6000805473ffffffffffffffffffffffffffffffffffffffff8381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b60006020828403121561039857600080fd5b813573ffffffffffffffffffffffffffffffffffffffff811681146103bc57600080fd5b939250505056fea164736f6c6343000814000a", + "deployedBytecode": "0x608060405234801561001057600080fd5b50600436106100725760003560e01c80638da5cb5b116100505780638da5cb5b146100d7578063d2e6d1c3146100f5578063f2fde38b1461011557600080fd5b80633659cfe6146100775780635c60da1b1461008c578063715018a6146100cf575b600080fd5b61008a610085366004610386565b610128565b005b60015473ffffffffffffffffffffffffffffffffffffffff165b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200160405180910390f35b61008a61013c565b60005473ffffffffffffffffffffffffffffffffffffffff166100a6565b6002546100a69073ffffffffffffffffffffffffffffffffffffffff1681565b61008a610123366004610386565b610150565b6101306101b6565b61013981610239565b50565b6101446101b6565b61014e6000610311565b565b6101586101b6565b73ffffffffffffffffffffffffffffffffffffffff81166101ad576040517f1e4fbdf7000000000000000000000000000000000000000000000000000000008152600060048201526024015b60405180910390fd5b61013981610311565b6002546040517feb6f7abf00000000000000000000000000000000000000000000000000000000815233600482015273ffffffffffffffffffffffffffffffffffffffff9091169063eb6f7abf9060240160006040518083038186803b15801561021f57600080fd5b505afa158015610233573d6000803e3d6000fd5b50505050565b8073ffffffffffffffffffffffffffffffffffffffff163b6000036102a2576040517f847ac56400000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff821660048201526024016101a4565b600180547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff83169081179091556040517fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a250565b6000805473ffffffffffffffffffffffffffffffffffffffff8381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b60006020828403121561039857600080fd5b813573ffffffffffffffffffffffffffffffffffffffff811681146103bc57600080fd5b939250505056fea164736f6c6343000814000a", + "devdoc": { + "version": 1, + "kind": "dev", + "methods": { + "constructor": { + "params": { + "gaugeImplementation_": "address of the Gauge initial implementation", + "governanceManager_": "contract with permissioned roles" + } + }, + "implementation()": { + "details": "Returns the current implementation address." + }, + "owner()": { + "details": "Returns the address of the current owner." + }, + "renounceOwnership()": { + "details": "Leaves the contract without owner. It will not be possible to call `onlyOwner` functions. Can only be called by the current owner. NOTE: Renouncing ownership will leave the contract without an owner, thereby disabling any functionality that is only available to the owner." + }, + "transferOwnership(address)": { + "details": "Transfers ownership of the contract to a new account (`newOwner`). Can only be called by the current owner." + }, + "upgradeTo(address)": { + "details": "Upgrades the beacon to a new implementation. Emits an {Upgraded} event. Requirements: - msg.sender must be the owner of the contract. - `newImplementation` must be a contract." + } + }, + "events": { + "Upgraded(address)": { + "details": "Emitted when the implementation returned by the beacon is changed." + } + }, + "errors": { + "BeaconInvalidImplementation(address)": [ + { + "details": "The `implementation` of the beacon is invalid." + } + ], + "OwnableInvalidOwner(address)": [ + { + "details": "The owner is not a valid owner account. (eg. `address(0)`)" + } + ], + "OwnableUnauthorizedAccount(address)": [ + { + "details": "The caller account is not authorized to perform an operation." + } + ] + } + }, + "metadata": "{\"compiler\":{\"version\":\"0.8.20+commit.a1b79de6\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"contract IGovernanceManagerRootstockCollective\",\"name\":\"governanceManager_\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"gaugeImplementation_\",\"type\":\"address\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"implementation\",\"type\":\"address\"}],\"type\":\"error\",\"name\":\"BeaconInvalidImplementation\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"}],\"type\":\"error\",\"name\":\"OwnableInvalidOwner\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"type\":\"error\",\"name\":\"OwnableUnauthorizedAccount\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"previousOwner\",\"type\":\"address\",\"indexed\":true},{\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\",\"indexed\":true}],\"type\":\"event\",\"name\":\"OwnershipTransferred\",\"anonymous\":false},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"implementation\",\"type\":\"address\",\"indexed\":true}],\"type\":\"event\",\"name\":\"Upgraded\",\"anonymous\":false},{\"inputs\":[],\"stateMutability\":\"view\",\"type\":\"function\",\"name\":\"governanceManager\",\"outputs\":[{\"internalType\":\"contract IGovernanceManagerRootstockCollective\",\"name\":\"\",\"type\":\"address\"}]},{\"inputs\":[],\"stateMutability\":\"view\",\"type\":\"function\",\"name\":\"implementation\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}]},{\"inputs\":[],\"stateMutability\":\"view\",\"type\":\"function\",\"name\":\"owner\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}]},{\"inputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\",\"name\":\"renounceOwnership\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\",\"name\":\"transferOwnership\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newImplementation\",\"type\":\"address\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\",\"name\":\"upgradeTo\"}],\"devdoc\":{\"kind\":\"dev\",\"methods\":{\"constructor\":{\"params\":{\"gaugeImplementation_\":\"address of the Gauge initial implementation\",\"governanceManager_\":\"contract with permissioned roles\"}},\"implementation()\":{\"details\":\"Returns the current implementation address.\"},\"owner()\":{\"details\":\"Returns the address of the current owner.\"},\"renounceOwnership()\":{\"details\":\"Leaves the contract without owner. It will not be possible to call `onlyOwner` functions. Can only be called by the current owner. NOTE: Renouncing ownership will leave the contract without an owner, thereby disabling any functionality that is only available to the owner.\"},\"transferOwnership(address)\":{\"details\":\"Transfers ownership of the contract to a new account (`newOwner`). Can only be called by the current owner.\"},\"upgradeTo(address)\":{\"details\":\"Upgrades the beacon to a new implementation. Emits an {Upgraded} event. Requirements: - msg.sender must be the owner of the contract. - `newImplementation` must be a contract.\"}},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{\"constructor\":{\"notice\":\"constructor\"}},\"version\":1}},\"settings\":{\"remappings\":[\"@openzeppelin/contracts-upgradeable/=node_modules/@openzeppelin/contracts-upgradeable/\",\"@openzeppelin/contracts/=node_modules/@openzeppelin/contracts/\",\"eth-gas-reporter/=node_modules/eth-gas-reporter/\",\"forge-std/=node_modules/forge-std/\",\"hardhat/=node_modules/hardhat/\"],\"optimizer\":{\"enabled\":true,\"runs\":10000},\"metadata\":{\"bytecodeHash\":\"none\"},\"compilationTarget\":{\"src/gauge/GaugeBeaconRootstockCollective.sol\":\"GaugeBeaconRootstockCollective\"},\"evmVersion\":\"london\",\"libraries\":{}},\"sources\":{\"node_modules/@openzeppelin/contracts/access/Ownable.sol\":{\"keccak256\":\"0xff6d0bb2e285473e5311d9d3caacb525ae3538a80758c10649a4d61029b017bb\",\"urls\":[\"bzz-raw://8ed324d3920bb545059d66ab97d43e43ee85fd3bd52e03e401f020afb0b120f6\",\"dweb:/ipfs/QmfEckWLmZkDDcoWrkEvMWhms66xwTLff9DDhegYpvHo1a\"],\"license\":\"MIT\"},\"node_modules/@openzeppelin/contracts/proxy/beacon/IBeacon.sol\":{\"keccak256\":\"0xc59a78b07b44b2cf2e8ab4175fca91e8eca1eee2df7357b8d2a8833e5ea1f64c\",\"urls\":[\"bzz-raw://5aa4f07e65444784c29cd7bfcc2341b34381e4e5b5da9f0c5bd00d7f430e66fa\",\"dweb:/ipfs/QmWRMh4Q9DpaU9GvsiXmDdoNYMyyece9if7hnfLz7uqzWM\"],\"license\":\"MIT\"},\"node_modules/@openzeppelin/contracts/proxy/beacon/UpgradeableBeacon.sol\":{\"keccak256\":\"0x5920bac7215d12961e23b207f6e81a1d64aa4935a4469abe95b64a96a3c3007b\",\"urls\":[\"bzz-raw://b34bb828c45c3a4ebf6c2c585971abf5089e61357a3818a2900c7e85b74a1299\",\"dweb:/ipfs/QmewGAzKsPXYfSjCKxuH1SekKxtdyzhdbdyxjF5gohLigt\"],\"license\":\"MIT\"},\"node_modules/@openzeppelin/contracts/utils/Context.sol\":{\"keccak256\":\"0x493033a8d1b176a037b2cc6a04dad01a5c157722049bbecf632ca876224dd4b2\",\"urls\":[\"bzz-raw://6a708e8a5bdb1011c2c381c9a5cfd8a9a956d7d0a9dc1bd8bcdaf52f76ef2f12\",\"dweb:/ipfs/Qmax9WHBnVsZP46ZxEMNRQpLQnrdE4dK8LehML1Py8FowF\"],\"license\":\"MIT\"},\"src/gauge/GaugeBeaconRootstockCollective.sol\":{\"keccak256\":\"0x983671fcb0f2432c5c7626b0505f12861efdafc60fe760f856fb7b5caae02494\",\"urls\":[\"bzz-raw://516a39edc09befe00ec6faa924fb1c6bfe3208eef12b631075f93f7fb41a53d3\",\"dweb:/ipfs/QmZnXYuTp9EodYyx2Z1MPKfbakyUW8AfdQihHiisEWhDdo\"],\"license\":\"MIT\"},\"src/interfaces/IChangeContractRootstockCollective.sol\":{\"keccak256\":\"0x00fb3eb72286348dd06d581c5044cb045dfd3bd24725d05dd9c4b008567dd496\",\"urls\":[\"bzz-raw://7f4a03e06197ae7d6e478097afbbecf936ce7029ca49909a1fee0b4ba1b5b517\",\"dweb:/ipfs/QmfByMJ1SQAmcYkouS5WM3akMmSKU3MCyACpFmQwuFSYe9\"],\"license\":\"MIT\"},\"src/interfaces/IGovernanceManagerRootstockCollective.sol\":{\"keccak256\":\"0x1416991dd129bb36f43cc0854dfa824b5b85838e5c5018566b6cf78f527747e3\",\"urls\":[\"bzz-raw://8652a18ec39d5527fefb829eca619f4cf4bbec3ee4f6231e8888f1549feedd3d\",\"dweb:/ipfs/Qmczi6GipLy9B9TcDMx5UaZZPFBaMT2k49iYzQuLCFgnfS\"],\"license\":\"MIT\"}},\"version\":1}", + "numDeployments": 1, + "receipt": { + "transactionHash": "0xa26d58e7e6998e02e9669c96358b18c1ec7611704dc49370e8b9e83b13253ead", + "transactionIndex": "0x5", + "blockHash": "0x1443c369bea56eb1861cdd046d78c8f783b13e99632004589c8cb625545e16eb", + "blockNumber": "0x6a2e72", + "from": "0xa3eda7A0b22d97DEFb7e223088F4c86a3Ce4B152", + "to": null, + "cumulativeGasUsed": "0x3ff811", + "gasUsed": "0x52d94", + "contractAddress": "0x21Cc53Cc2209E071FAb91F1495051A45b3c7E7d3", + "logs": [ + { + "address": "0x21Cc53Cc2209E071FAb91F1495051A45b3c7E7d3", + "topics": [ + "0x8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x00000000000000000000000071ac6ff904a17f50f2c07b693376ccc1c92627f0" + ], + "data": "0x", + "blockHash": "0x1443c369bea56eb1861cdd046d78c8f783b13e99632004589c8cb625545e16eb", + "blockNumber": "0x6a2e72", + "transactionHash": "0xa26d58e7e6998e02e9669c96358b18c1ec7611704dc49370e8b9e83b13253ead", + "transactionIndex": "0x5", + "logIndex": "0x0" + }, + { + "address": "0x21Cc53Cc2209E071FAb91F1495051A45b3c7E7d3", + "topics": [ + "0xbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b", + "0x000000000000000000000000277bf826f399ecf671607380dd76f7643be1a756" + ], + "data": "0x", + "blockHash": "0x1443c369bea56eb1861cdd046d78c8f783b13e99632004589c8cb625545e16eb", + "blockNumber": "0x6a2e72", + "transactionHash": "0xa26d58e7e6998e02e9669c96358b18c1ec7611704dc49370e8b9e83b13253ead", + "transactionIndex": "0x5", + "logIndex": "0x1" + } + ], + "status": "0x1", + "logsBloom": "0x0000000000000000000000000000000040000000000000000080200000000000000000000000000000000000000080000000000000000000000000000000000000000400000000000000000000000200000120000000000000000800000000000000000002000000000000000000080000000000000000000000000000000040000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002000000000000000000000000c000000000000000000000000000020000000000000000000000000000000000000000000200000000000000000000000", + "type": "0x0" + }, + "solcInputHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "storageLayout": { + "storage": [ + { + "astId": 613, + "contract": "src/gauge/GaugeBeaconRootstockCollective.sol:GaugeBeaconRootstockCollective", + "label": "_owner", + "offset": 0, + "slot": "0", + "type": "t_address" + }, + { + "astId": 1357, + "contract": "src/gauge/GaugeBeaconRootstockCollective.sol:GaugeBeaconRootstockCollective", + "label": "_implementation", + "offset": 0, + "slot": "1", + "type": "t_address" + }, + { + "astId": 58344, + "contract": "src/gauge/GaugeBeaconRootstockCollective.sol:GaugeBeaconRootstockCollective", + "label": "governanceManager", + "offset": 0, + "slot": "2", + "type": "t_contract(IGovernanceManagerRootstockCollective)60552" + } + ], + "types": { + "t_address": { + "encoding": "inplace", + "label": "address", + "numberOfBytes": "20" + }, + "t_contract(IGovernanceManagerRootstockCollective)60552": { + "encoding": "inplace", + "label": "contract IGovernanceManagerRootstockCollective", + "numberOfBytes": "20" + } + } + }, + "transactionHash": "0xa26d58e7e6998e02e9669c96358b18c1ec7611704dc49370e8b9e83b13253ead", + "userdoc": { + "version": 1, + "kind": "user", + "methods": { + "constructor": { + "notice": "constructor" + } + } + } +} \ No newline at end of file diff --git a/deployments/mainnet/GaugeFactoryRootstockCollective.json b/deployments/mainnet/GaugeFactoryRootstockCollective.json new file mode 100644 index 00000000..fa79af84 --- /dev/null +++ b/deployments/mainnet/GaugeFactoryRootstockCollective.json @@ -0,0 +1,116 @@ +{ + "abi": [ + { + "type": "constructor", + "inputs": [ + { + "name": "beacon_", + "type": "address", + "internalType": "address" + }, + { + "name": "rewardToken_", + "type": "address", + "internalType": "address" + } + ], + "stateMutability": "nonpayable" + }, + { + "type": "function", + "name": "beacon", + "inputs": [], + "outputs": [ + { + "name": "", + "type": "address", + "internalType": "address" + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "createGauge", + "inputs": [], + "outputs": [ + { + "name": "gauge_", + "type": "address", + "internalType": "contract GaugeRootstockCollective" + } + ], + "stateMutability": "nonpayable" + }, + { + "type": "function", + "name": "rewardToken", + "inputs": [], + "outputs": [ + { + "name": "", + "type": "address", + "internalType": "address" + } + ], + "stateMutability": "view" + } + ], + "address": "0xe78DaA2B54bBDa0384cD9cF1bDfe605B30023b83", + "args": [ + "0x21Cc53Cc2209E071FAb91F1495051A45b3c7E7d3", + "0x2AcC95758f8b5F583470ba265EB685a8F45fC9D5" + ], + "bytecode": "0x60c060405234801561001057600080fd5b5060405161090c38038061090c83398101604081905261002f91610062565b6001600160a01b039182166080521660a052610095565b80516001600160a01b038116811461005d57600080fd5b919050565b6000806040838503121561007557600080fd5b61007e83610046565b915061008c60208401610046565b90509250929050565b60805160a0516108476100c56000396000818160a3015260df015260008181604b015261018e01526108476000f3fe608060405234801561001057600080fd5b50600436106100415760003560e01c806359659e9014610046578063dc5a417914610096578063f7c618c11461009e575b600080fd5b61006d7f000000000000000000000000000000000000000000000000000000000000000081565b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200160405180910390f35b61006d6100c5565b61006d7f000000000000000000000000000000000000000000000000000000000000000081565b60405173ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001660248201523360448201526000908190606401604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f485cc95500000000000000000000000000000000000000000000000000000000179052519091507f00000000000000000000000000000000000000000000000000000000000000009082906101b9906101e7565b6101c49291906101f4565b604051809103906000f0801580156101e0573d6000803e3d6000fd5b5091505090565b6105bc8061027f83390190565b73ffffffffffffffffffffffffffffffffffffffff8316815260006020604081840152835180604085015260005b8181101561023e57858101830151858201606001528201610222565b5060006060828601015260607fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f83011685010192505050939250505056fe60a06040526040516105bc3803806105bc83398101604081905261002291610387565b61002c828261003e565b506001600160a01b031660805261047e565b610047826100fe565b6040516001600160a01b038316907f1cf3b03a6cf19fa2baba4df148e9dcabedea7f8a5c07840e207e5c089be95d3e90600090a28051156100f2576100ed826001600160a01b0316635c60da1b6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156100c3573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906100e79190610447565b82610211565b505050565b6100fa610288565b5050565b806001600160a01b03163b60000361013957604051631933b43b60e21b81526001600160a01b03821660048201526024015b60405180910390fd5b807fa3f0ad74e5423aebfd80d3ef4346578335a9a72aeaee59ff6cb3582b35133d5080546001600160a01b0319166001600160a01b0392831617905560408051635c60da1b60e01b81529051600092841691635c60da1b9160048083019260209291908290030181865afa1580156101b5573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906101d99190610447565b9050806001600160a01b03163b6000036100fa57604051634c9c8ce360e01b81526001600160a01b0382166004820152602401610130565b6060600080846001600160a01b03168460405161022e9190610462565b600060405180830381855af49150503d8060008114610269576040519150601f19603f3d011682016040523d82523d6000602084013e61026e565b606091505b50909250905061027f8583836102a9565b95945050505050565b34156102a75760405163b398979f60e01b815260040160405180910390fd5b565b6060826102be576102b982610308565b610301565b81511580156102d557506001600160a01b0384163b155b156102fe57604051639996b31560e01b81526001600160a01b0385166004820152602401610130565b50805b9392505050565b8051156103185780518082602001fd5b604051630a12f52160e11b815260040160405180910390fd5b80516001600160a01b038116811461034857600080fd5b919050565b634e487b7160e01b600052604160045260246000fd5b60005b8381101561037e578181015183820152602001610366565b50506000910152565b6000806040838503121561039a57600080fd5b6103a383610331565b60208401519092506001600160401b03808211156103c057600080fd5b818501915085601f8301126103d457600080fd5b8151818111156103e6576103e661034d565b604051601f8201601f19908116603f0116810190838211818310171561040e5761040e61034d565b8160405282815288602084870101111561042757600080fd5b610438836020830160208801610363565b80955050505050509250929050565b60006020828403121561045957600080fd5b61030182610331565b60008251610474818460208701610363565b9190910192915050565b6080516101246104986000396000602401526101246000f3fe608060405261000c61000e565b005b61001e610019610020565b6100b6565b565b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16635c60da1b6040518163ffffffff1660e01b8152600401602060405180830381865afa15801561008d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906100b191906100da565b905090565b3660008037600080366000845af43d6000803e8080156100d5573d6000f35b3d6000fd5b6000602082840312156100ec57600080fd5b815173ffffffffffffffffffffffffffffffffffffffff8116811461011057600080fd5b939250505056fea164736f6c6343000814000aa164736f6c6343000814000a", + "deployedBytecode": "0x608060405234801561001057600080fd5b50600436106100415760003560e01c806359659e9014610046578063dc5a417914610096578063f7c618c11461009e575b600080fd5b61006d7f000000000000000000000000000000000000000000000000000000000000000081565b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200160405180910390f35b61006d6100c5565b61006d7f000000000000000000000000000000000000000000000000000000000000000081565b60405173ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001660248201523360448201526000908190606401604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f485cc95500000000000000000000000000000000000000000000000000000000179052519091507f00000000000000000000000000000000000000000000000000000000000000009082906101b9906101e7565b6101c49291906101f4565b604051809103906000f0801580156101e0573d6000803e3d6000fd5b5091505090565b6105bc8061027f83390190565b73ffffffffffffffffffffffffffffffffffffffff8316815260006020604081840152835180604085015260005b8181101561023e57858101830151858201606001528201610222565b5060006060828601015260607fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f83011685010192505050939250505056fe60a06040526040516105bc3803806105bc83398101604081905261002291610387565b61002c828261003e565b506001600160a01b031660805261047e565b610047826100fe565b6040516001600160a01b038316907f1cf3b03a6cf19fa2baba4df148e9dcabedea7f8a5c07840e207e5c089be95d3e90600090a28051156100f2576100ed826001600160a01b0316635c60da1b6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156100c3573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906100e79190610447565b82610211565b505050565b6100fa610288565b5050565b806001600160a01b03163b60000361013957604051631933b43b60e21b81526001600160a01b03821660048201526024015b60405180910390fd5b807fa3f0ad74e5423aebfd80d3ef4346578335a9a72aeaee59ff6cb3582b35133d5080546001600160a01b0319166001600160a01b0392831617905560408051635c60da1b60e01b81529051600092841691635c60da1b9160048083019260209291908290030181865afa1580156101b5573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906101d99190610447565b9050806001600160a01b03163b6000036100fa57604051634c9c8ce360e01b81526001600160a01b0382166004820152602401610130565b6060600080846001600160a01b03168460405161022e9190610462565b600060405180830381855af49150503d8060008114610269576040519150601f19603f3d011682016040523d82523d6000602084013e61026e565b606091505b50909250905061027f8583836102a9565b95945050505050565b34156102a75760405163b398979f60e01b815260040160405180910390fd5b565b6060826102be576102b982610308565b610301565b81511580156102d557506001600160a01b0384163b155b156102fe57604051639996b31560e01b81526001600160a01b0385166004820152602401610130565b50805b9392505050565b8051156103185780518082602001fd5b604051630a12f52160e11b815260040160405180910390fd5b80516001600160a01b038116811461034857600080fd5b919050565b634e487b7160e01b600052604160045260246000fd5b60005b8381101561037e578181015183820152602001610366565b50506000910152565b6000806040838503121561039a57600080fd5b6103a383610331565b60208401519092506001600160401b03808211156103c057600080fd5b818501915085601f8301126103d457600080fd5b8151818111156103e6576103e661034d565b604051601f8201601f19908116603f0116810190838211818310171561040e5761040e61034d565b8160405282815288602084870101111561042757600080fd5b610438836020830160208801610363565b80955050505050509250929050565b60006020828403121561045957600080fd5b61030182610331565b60008251610474818460208701610363565b9190910192915050565b6080516101246104986000396000602401526101246000f3fe608060405261000c61000e565b005b61001e610019610020565b6100b6565b565b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16635c60da1b6040518163ffffffff1660e01b8152600401602060405180830381865afa15801561008d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906100b191906100da565b905090565b3660008037600080366000845af43d6000803e8080156100d5573d6000f35b3d6000fd5b6000602082840312156100ec57600080fd5b815173ffffffffffffffffffffffffffffffffffffffff8116811461011057600080fd5b939250505056fea164736f6c6343000814000aa164736f6c6343000814000a", + "devdoc": { + "version": 1, + "kind": "dev", + "methods": { + "constructor": { + "params": { + "beacon_": "address of the beacon", + "rewardToken_": "address of the token rewarded to builder and voters" + } + } + } + }, + "metadata": "{\"compiler\":{\"version\":\"0.8.20+commit.a1b79de6\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"address\",\"name\":\"beacon_\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"rewardToken_\",\"type\":\"address\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"inputs\":[],\"stateMutability\":\"view\",\"type\":\"function\",\"name\":\"beacon\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}]},{\"inputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\",\"name\":\"createGauge\",\"outputs\":[{\"internalType\":\"contract GaugeRootstockCollective\",\"name\":\"gauge_\",\"type\":\"address\"}]},{\"inputs\":[],\"stateMutability\":\"view\",\"type\":\"function\",\"name\":\"rewardToken\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}]}],\"devdoc\":{\"kind\":\"dev\",\"methods\":{\"constructor\":{\"params\":{\"beacon_\":\"address of the beacon\",\"rewardToken_\":\"address of the token rewarded to builder and voters\"}}},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{\"beacon()\":{\"notice\":\"address of beacon contract who stores gauge implementation address which is where gauge proxies will delegate all function calls\"},\"constructor\":{\"notice\":\"constructor\"},\"rewardToken()\":{\"notice\":\"address of the token rewarded to builder and voters\"}},\"version\":1}},\"settings\":{\"remappings\":[\"@openzeppelin/contracts-upgradeable/=node_modules/@openzeppelin/contracts-upgradeable/\",\"@openzeppelin/contracts/=node_modules/@openzeppelin/contracts/\",\"eth-gas-reporter/=node_modules/eth-gas-reporter/\",\"forge-std/=node_modules/forge-std/\",\"hardhat/=node_modules/hardhat/\"],\"optimizer\":{\"enabled\":true,\"runs\":10000},\"metadata\":{\"bytecodeHash\":\"none\"},\"compilationTarget\":{\"src/gauge/GaugeFactoryRootstockCollective.sol\":\"GaugeFactoryRootstockCollective\"},\"evmVersion\":\"london\",\"libraries\":{}},\"sources\":{\"node_modules/@openzeppelin/contracts-upgradeable/proxy/utils/Initializable.sol\":{\"keccak256\":\"0x631188737069917d2f909d29ce62c4d48611d326686ba6683e26b72a23bfac0b\",\"urls\":[\"bzz-raw://7a61054ae84cd6c4d04c0c4450ba1d6de41e27e0a2c4f1bcdf58f796b401c609\",\"dweb:/ipfs/QmUvtdp7X1mRVyC3CsHrtPbgoqWaXHp3S1ZR24tpAQYJWM\"],\"license\":\"MIT\"},\"node_modules/@openzeppelin/contracts-upgradeable/utils/ReentrancyGuardUpgradeable.sol\":{\"keccak256\":\"0xb44e086e941292cdc7f440de51478493894ef0b1aeccb0c4047445919f667f74\",\"urls\":[\"bzz-raw://942dad22fbdc1669f025540ba63aa3ccfad5f8458fc5d4525b31ebf272e7af45\",\"dweb:/ipfs/Qmdo4X2M82aM3AMoW2kf2jhYkSCyC4T1pHNd6obdsDFnAB\"],\"license\":\"MIT\"},\"node_modules/@openzeppelin/contracts/proxy/ERC1967/ERC1967Utils.sol\":{\"keccak256\":\"0x06a78f9b3ee3e6d0eb4e4cd635ba49960bea34cac1db8c0a27c75f2319f1fd65\",\"urls\":[\"bzz-raw://547d21aa17f4f3f1a1a7edf7167beff8dd9496a0348d5588f15cc8a4b29d052a\",\"dweb:/ipfs/QmT16JtRQSWNpLo9W23jr6CzaMuTAcQcjJJcdRd8HLJ6cE\"],\"license\":\"MIT\"},\"node_modules/@openzeppelin/contracts/proxy/Proxy.sol\":{\"keccak256\":\"0xc3f2ec76a3de8ed7a7007c46166f5550c72c7709e3fc7e8bb3111a7191cdedbd\",\"urls\":[\"bzz-raw://e73efb4c2ca655882dc237c6b4f234a9bd36d97159d8fcaa837eb01171f726ac\",\"dweb:/ipfs/QmTNnnv7Gu5fs5G1ZMh7Fexp8N4XUs3XrNAngjcxgiss3e\"],\"license\":\"MIT\"},\"node_modules/@openzeppelin/contracts/proxy/beacon/BeaconProxy.sol\":{\"keccak256\":\"0x387ebdcb365b8e620f26645d2b34a161cd39eedfb0219e8baff55630c5ae113c\",\"urls\":[\"bzz-raw://744ea187c195e31cb9201e63ca291fca9e623747f54f0ba390b366a6213b8964\",\"dweb:/ipfs/Qmc547qfV4sz65DC9B4okx1HvgxwUzJR7zTfKKbTzL3UQT\"],\"license\":\"MIT\"},\"node_modules/@openzeppelin/contracts/proxy/beacon/IBeacon.sol\":{\"keccak256\":\"0xc59a78b07b44b2cf2e8ab4175fca91e8eca1eee2df7357b8d2a8833e5ea1f64c\",\"urls\":[\"bzz-raw://5aa4f07e65444784c29cd7bfcc2341b34381e4e5b5da9f0c5bd00d7f430e66fa\",\"dweb:/ipfs/QmWRMh4Q9DpaU9GvsiXmDdoNYMyyece9if7hnfLz7uqzWM\"],\"license\":\"MIT\"},\"node_modules/@openzeppelin/contracts/token/ERC20/IERC20.sol\":{\"keccak256\":\"0xc6a8ff0ea489379b61faa647490411b80102578440ab9d84e9a957cc12164e70\",\"urls\":[\"bzz-raw://0ea104e577e63faea3b69c415637e99e755dcbf64c5833d7140c35a714d6d90c\",\"dweb:/ipfs/Qmau6x4Ns9XdyynRCNNp3RhLqijJjFm7z5fyZazfYFGYdq\"],\"license\":\"MIT\"},\"node_modules/@openzeppelin/contracts/token/ERC20/extensions/IERC20Permit.sol\":{\"keccak256\":\"0x6008dabfe393240d73d7dd7688033f72740d570aa422254d29a7dce8568f3aff\",\"urls\":[\"bzz-raw://f5196ec75139918c6c7bb4251b36395e668f1fa6d206beba7e7520e74913940d\",\"dweb:/ipfs/QmSyqjksXxmm2mCG6qRd1yuwLykypkSVBbnBnGqJRcuJMi\"],\"license\":\"MIT\"},\"node_modules/@openzeppelin/contracts/token/ERC20/utils/SafeERC20.sol\":{\"keccak256\":\"0x37bb49513c49c87c4642a891b13b63571bc87013dde806617aa1efb54605f386\",\"urls\":[\"bzz-raw://b3036b3a83b7c48f96641f2a9002b9f2dcb6a5958dd670894ada21ae8229b3d0\",\"dweb:/ipfs/QmUNfSBdoVtjhETaUJCYcaC7pTMgbhht926tJ2uXJbiVd3\"],\"license\":\"MIT\"},\"node_modules/@openzeppelin/contracts/utils/Address.sol\":{\"keccak256\":\"0xaf28a975a78550e45f65e559a3ad6a5ad43b9b8a37366999abd1b7084eb70721\",\"urls\":[\"bzz-raw://b7bd24e224f67f65bfadf85dc2929fa965456bb2415478bd0125471b5ce35245\",\"dweb:/ipfs/QmRaydGr8BTHs1kvaZfsNU69pKzUAGFrvABn1KiRSbE51y\"],\"license\":\"MIT\"},\"node_modules/@openzeppelin/contracts/utils/StorageSlot.sol\":{\"keccak256\":\"0x32ba59b4b7299237c8ba56319110989d7978a039faf754793064e967e5894418\",\"urls\":[\"bzz-raw://1ae50c8b562427df610cc4540c9bf104acca7ef8e2dcae567ae7e52272281e9c\",\"dweb:/ipfs/QmTHiadFCSJUPpRjNegc5SahmeU8bAoY8i9Aq6tVscbcKR\"],\"license\":\"MIT\"},\"node_modules/@openzeppelin/contracts/utils/math/Math.sol\":{\"keccak256\":\"0x005ec64c6313f0555d59e278f9a7a5ab2db5bdc72a027f255a37c327af1ec02d\",\"urls\":[\"bzz-raw://4ece9f0b9c8daca08c76b6b5405a6446b6f73b3a15fab7ff56e296cbd4a2c875\",\"dweb:/ipfs/QmQyRpyPRL5SQuAgj6SHmbir3foX65FJjbVTTQrA2EFg6L\"],\"license\":\"MIT\"},\"src/gauge/GaugeFactoryRootstockCollective.sol\":{\"keccak256\":\"0xbcf8f9f1038468632211aa7b936d63a35caa7e54f03793ba44f701b17e489a0d\",\"urls\":[\"bzz-raw://82beb9f7be678d3edb72cd181e198e00ead8c8383c36414ce0e388094272914b\",\"dweb:/ipfs/QmSmMx3RT4gjYRFggbEWAyDie5X4JLyBW3VgpHdRFcAmii\"],\"license\":\"MIT\"},\"src/gauge/GaugeRootstockCollective.sol\":{\"keccak256\":\"0xc938acb7b0a1fe48d81115d9c78554cf52578cfa079b7e2fa61ad6f7d938cfa5\",\"urls\":[\"bzz-raw://b0705939ef67abd05f05cd9c3f7d2d0f82c42048046c9daefc360d0d3335761d\",\"dweb:/ipfs/QmaPRBk5oeoQajXGLpCCq1B2BNRHbToSrD7a7ZbcqnhwKx\"],\"license\":\"MIT\"},\"src/interfaces/IBackersManagerRootstockCollective.sol\":{\"keccak256\":\"0x7eacff4e2d906e1f38636bdc81646f213dc3820724b0bb4f61d2e105272f4087\",\"urls\":[\"bzz-raw://00e4ac507e8377040962f89fb774df725422c400114965eee8c45fcc401a7f87\",\"dweb:/ipfs/QmNsqV2naFxx8s6AG8YVDZqhvnUvXmnDZVhWH1WMsFesf6\"],\"license\":\"MIT\"},\"src/libraries/UtilsLib.sol\":{\"keccak256\":\"0x4660e2e62cb370b17052cd21238722bfe3cdaaf3f69cf4c9b2d87236070d12ac\",\"urls\":[\"bzz-raw://e8759237b67bb6e641c7a92eb0d94300770e32c25c2c5bf387bea2ea68513753\",\"dweb:/ipfs/QmbkRDUnzyL9QQbwJcFGd6kiERFFgxZgnxqsu14snpCvhp\"],\"license\":\"MIT\"}},\"version\":1}", + "numDeployments": 1, + "receipt": { + "transactionHash": "0x99318b0929f870f0255982c18826214ef9f246a4c62a2c98026ddf947a71c0f5", + "transactionIndex": "0x6", + "blockHash": "0x1443c369bea56eb1861cdd046d78c8f783b13e99632004589c8cb625545e16eb", + "blockNumber": "0x6a2e72", + "from": "0xa3eda7A0b22d97DEFb7e223088F4c86a3Ce4B152", + "to": null, + "cumulativeGasUsed": "0x47c7eb", + "gasUsed": "0x7cfda", + "contractAddress": "0xe78DaA2B54bBDa0384cD9cF1bDfe605B30023b83", + "logs": [], + "status": "0x1", + "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "type": "0x0" + }, + "solcInputHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "storageLayout": { + "storage": [], + "types": {} + }, + "transactionHash": "0x99318b0929f870f0255982c18826214ef9f246a4c62a2c98026ddf947a71c0f5", + "userdoc": { + "version": 1, + "kind": "user", + "methods": { + "beacon()": { + "notice": "address of beacon contract who stores gauge implementation address which is where gauge proxies will delegate all function calls" + }, + "constructor": { + "notice": "constructor" + }, + "rewardToken()": { + "notice": "address of the token rewarded to builder and voters" + } + } + } +} \ No newline at end of file diff --git a/deployments/mainnet/GovernanceManagerRootstockCollective.json b/deployments/mainnet/GovernanceManagerRootstockCollective.json new file mode 100644 index 00000000..9eef46c8 --- /dev/null +++ b/deployments/mainnet/GovernanceManagerRootstockCollective.json @@ -0,0 +1,844 @@ +{ + "abi": [ + { + "type": "constructor", + "inputs": [], + "stateMutability": "nonpayable" + }, + { + "type": "function", + "name": "UPGRADE_INTERFACE_VERSION", + "inputs": [], + "outputs": [ + { + "name": "", + "type": "string", + "internalType": "string" + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "executeChange", + "inputs": [ + { + "name": "changeContract_", + "type": "address", + "internalType": "contract IChangeContractRootstockCollective" + } + ], + "outputs": [], + "stateMutability": "nonpayable" + }, + { + "type": "function", + "name": "foundationTreasury", + "inputs": [], + "outputs": [ + { + "name": "", + "type": "address", + "internalType": "address" + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "governor", + "inputs": [], + "outputs": [ + { + "name": "", + "type": "address", + "internalType": "address" + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "initialize", + "inputs": [ + { + "name": "governor_", + "type": "address", + "internalType": "address" + }, + { + "name": "foundationTreasury_", + "type": "address", + "internalType": "address" + }, + { + "name": "kycApprover_", + "type": "address", + "internalType": "address" + }, + { + "name": "upgrader_", + "type": "address", + "internalType": "address" + } + ], + "outputs": [], + "stateMutability": "nonpayable" + }, + { + "type": "function", + "name": "isAuthorizedChanger", + "inputs": [ + { + "name": "account_", + "type": "address", + "internalType": "address" + } + ], + "outputs": [ + { + "name": "", + "type": "bool", + "internalType": "bool" + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "kycApprover", + "inputs": [], + "outputs": [ + { + "name": "", + "type": "address", + "internalType": "address" + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "proxiableUUID", + "inputs": [], + "outputs": [ + { + "name": "", + "type": "bytes32", + "internalType": "bytes32" + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "updateFoundationTreasury", + "inputs": [ + { + "name": "foundationTreasury_", + "type": "address", + "internalType": "address" + } + ], + "outputs": [], + "stateMutability": "nonpayable" + }, + { + "type": "function", + "name": "updateGovernor", + "inputs": [ + { + "name": "governor_", + "type": "address", + "internalType": "address" + } + ], + "outputs": [], + "stateMutability": "nonpayable" + }, + { + "type": "function", + "name": "updateKYCApprover", + "inputs": [ + { + "name": "kycApprover_", + "type": "address", + "internalType": "address" + } + ], + "outputs": [], + "stateMutability": "nonpayable" + }, + { + "type": "function", + "name": "updateUpgrader", + "inputs": [ + { + "name": "upgrader_", + "type": "address", + "internalType": "address" + } + ], + "outputs": [], + "stateMutability": "nonpayable" + }, + { + "type": "function", + "name": "upgradeToAndCall", + "inputs": [ + { + "name": "newImplementation", + "type": "address", + "internalType": "address" + }, + { + "name": "data", + "type": "bytes", + "internalType": "bytes" + } + ], + "outputs": [], + "stateMutability": "payable" + }, + { + "type": "function", + "name": "upgrader", + "inputs": [], + "outputs": [ + { + "name": "", + "type": "address", + "internalType": "address" + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "validateAuthorizedChanger", + "inputs": [ + { + "name": "account_", + "type": "address", + "internalType": "address" + } + ], + "outputs": [], + "stateMutability": "view" + }, + { + "type": "function", + "name": "validateAuthorizedUpgrader", + "inputs": [ + { + "name": "account_", + "type": "address", + "internalType": "address" + } + ], + "outputs": [], + "stateMutability": "view" + }, + { + "type": "function", + "name": "validateFoundationTreasury", + "inputs": [ + { + "name": "account_", + "type": "address", + "internalType": "address" + } + ], + "outputs": [], + "stateMutability": "view" + }, + { + "type": "function", + "name": "validateGovernor", + "inputs": [ + { + "name": "account_", + "type": "address", + "internalType": "address" + } + ], + "outputs": [], + "stateMutability": "view" + }, + { + "type": "function", + "name": "validateKycApprover", + "inputs": [ + { + "name": "account_", + "type": "address", + "internalType": "address" + } + ], + "outputs": [], + "stateMutability": "view" + }, + { + "type": "event", + "name": "ChangeExecuted", + "inputs": [ + { + "name": "changeContract_", + "type": "address", + "indexed": false, + "internalType": "contract IChangeContractRootstockCollective" + }, + { + "name": "executor_", + "type": "address", + "indexed": false, + "internalType": "address" + } + ], + "anonymous": false + }, + { + "type": "event", + "name": "FoundationTreasuryUpdated", + "inputs": [ + { + "name": "foundationTreasury_", + "type": "address", + "indexed": false, + "internalType": "address" + }, + { + "name": "updatedBy_", + "type": "address", + "indexed": false, + "internalType": "address" + } + ], + "anonymous": false + }, + { + "type": "event", + "name": "GovernorUpdated", + "inputs": [ + { + "name": "governor_", + "type": "address", + "indexed": false, + "internalType": "address" + }, + { + "name": "updatedBy_", + "type": "address", + "indexed": false, + "internalType": "address" + } + ], + "anonymous": false + }, + { + "type": "event", + "name": "Initialized", + "inputs": [ + { + "name": "version", + "type": "uint64", + "indexed": false, + "internalType": "uint64" + } + ], + "anonymous": false + }, + { + "type": "event", + "name": "KycApproverUpdated", + "inputs": [ + { + "name": "kycApprover_", + "type": "address", + "indexed": false, + "internalType": "address" + }, + { + "name": "updatedBy_", + "type": "address", + "indexed": false, + "internalType": "address" + } + ], + "anonymous": false + }, + { + "type": "event", + "name": "Upgraded", + "inputs": [ + { + "name": "implementation", + "type": "address", + "indexed": true, + "internalType": "address" + } + ], + "anonymous": false + }, + { + "type": "event", + "name": "UpgraderUpdated", + "inputs": [ + { + "name": "upgrader_", + "type": "address", + "indexed": false, + "internalType": "address" + }, + { + "name": "updatedBy_", + "type": "address", + "indexed": false, + "internalType": "address" + } + ], + "anonymous": false + }, + { + "type": "error", + "name": "AddressEmptyCode", + "inputs": [ + { + "name": "target", + "type": "address", + "internalType": "address" + } + ] + }, + { + "type": "error", + "name": "ERC1967InvalidImplementation", + "inputs": [ + { + "name": "implementation", + "type": "address", + "internalType": "address" + } + ] + }, + { + "type": "error", + "name": "ERC1967NonPayable", + "inputs": [] + }, + { + "type": "error", + "name": "FailedInnerCall", + "inputs": [] + }, + { + "type": "error", + "name": "InvalidAddress", + "inputs": [ + { + "name": "account_", + "type": "address", + "internalType": "address" + } + ] + }, + { + "type": "error", + "name": "InvalidInitialization", + "inputs": [] + }, + { + "type": "error", + "name": "NotAuthorizedChanger", + "inputs": [] + }, + { + "type": "error", + "name": "NotAuthorizedUpgrader", + "inputs": [] + }, + { + "type": "error", + "name": "NotFoundationTreasury", + "inputs": [] + }, + { + "type": "error", + "name": "NotGovernor", + "inputs": [] + }, + { + "type": "error", + "name": "NotInitializing", + "inputs": [] + }, + { + "type": "error", + "name": "NotKycApprover", + "inputs": [] + }, + { + "type": "error", + "name": "NotUpgrader", + "inputs": [] + }, + { + "type": "error", + "name": "UUPSUnauthorizedCallContext", + "inputs": [] + }, + { + "type": "error", + "name": "UUPSUnsupportedProxiableUUID", + "inputs": [ + { + "name": "slot", + "type": "bytes32", + "internalType": "bytes32" + } + ] + } + ], + "address": "0x5AF268A29f8aB0bA9c34FC2bC4418A10c62010B5", + "args": [], + "bytecode": "0x60a06040523060805234801561001457600080fd5b5061001d610022565b6100d4565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805468010000000000000000900460ff16156100725760405163f92ee8a960e01b815260040160405180910390fd5b80546001600160401b03908116146100d15780546001600160401b0319166001600160401b0390811782556040519081527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b50565b6080516115d46100fd60003960008181610c4701528181610c700152610e9401526115d46000f3fe6080604052600436106101425760003560e01c80637e185f57116100c0578063ce7ee5ac11610074578063e053dd6111610059578063e053dd61146103e3578063eb6f7abf14610403578063f8c8765e1461042357600080fd5b8063ce7ee5ac14610386578063d994d6d5146103b357600080fd5b8063ad3cb1cc116100a5578063ad3cb1cc146102e3578063af26974514610339578063b887e63e1461036657600080fd5b80637e185f57146102a35780638c777e82146102c357600080fd5b80633f80fbf7116101175780634f1ef286116100fc5780634f1ef2861461024d57806352d1902d1461026057806362f384ad1461028357600080fd5b80633f80fbf71461020d578063445ac6331461022d57600080fd5b806212851a14610147578062c4e39c146101695780630c340a24146101c057806312811d94146101ed575b600080fd5b34801561015357600080fd5b50610167610162366004611393565b610443565b005b34801561017557600080fd5b506003546101969073ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020015b60405180910390f35b3480156101cc57600080fd5b506000546101969073ffffffffffffffffffffffffffffffffffffffff1681565b3480156101f957600080fd5b50610167610208366004611393565b610458565b34801561021957600080fd5b50610167610228366004611393565b6104ac565b34801561023957600080fd5b50610167610248366004611393565b6104be565b61016761025b3660046113df565b610512565b34801561026c57600080fd5b50610275610531565b6040519081526020016101b7565b34801561028f57600080fd5b5061016761029e366004611393565b610560565b3480156102af57600080fd5b506101676102be366004611393565b610572565b3480156102cf57600080fd5b506101676102de366004611393565b6105b1565b3480156102ef57600080fd5b5061032c6040518060400160405280600581526020017f352e302e3000000000000000000000000000000000000000000000000000000081525081565b6040516101b791906114e5565b34801561034557600080fd5b506004546101969073ffffffffffffffffffffffffffffffffffffffff1681565b34801561037257600080fd5b50610167610381366004611393565b610722565b34801561039257600080fd5b506002546101969073ffffffffffffffffffffffffffffffffffffffff1681565b3480156103bf57600080fd5b506103d36103ce366004611393565b61077c565b60405190151581526020016101b7565b3480156103ef57600080fd5b506101676103fe366004611393565b6107c8565b34801561040f57600080fd5b5061016761041e366004611393565b61081c565b34801561042f57600080fd5b5061016761043e366004611536565b6108c0565b61044c33610572565b61045581610a66565b50565b60005473ffffffffffffffffffffffffffffffffffffffff828116911614610455576040517fee3675d400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6104b533610572565b61045581610b51565b60035473ffffffffffffffffffffffffffffffffffffffff828116911614610455576040517fc01ef51700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61051a610c2f565b61052382610d35565b61052d8282610d3e565b5050565b600061053b610e7c565b507f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc90565b61056933610572565b61045581610eeb565b61057b8161077c565b610455576040517f7746c6d400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60005473ffffffffffffffffffffffffffffffffffffffff163314610602576040517fee3675d400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600180547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff83161790558073ffffffffffffffffffffffffffffffffffffffff1663614619546040518163ffffffff1660e01b8152600401600060405180830381600087803b15801561068a57600080fd5b505af115801561069e573d6000803e3d6000fd5b5050600180547fffffffffffffffffffffffff0000000000000000000000000000000000000000169055506106d09050565b6040805173ffffffffffffffffffffffffffffffffffffffff831681523360208201527f2a8cd1b8f6553d34945708e311b2f74dfcd2b8cc712d12c6fcea24a1ccb4c43991015b60405180910390a150565b60045473ffffffffffffffffffffffffffffffffffffffff163314610773576040517fa417450200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61045581610fc9565b60015460009073ffffffffffffffffffffffffffffffffffffffff838116911614806107c2575060005473ffffffffffffffffffffffffffffffffffffffff8381169116145b92915050565b60025473ffffffffffffffffffffffffffffffffffffffff828116911614610455576040517f2887a65400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60015473ffffffffffffffffffffffffffffffffffffffff828116911614801590610862575060005473ffffffffffffffffffffffffffffffffffffffff828116911614155b8015610889575060045473ffffffffffffffffffffffffffffffffffffffff828116911614155b15610455576040517fe5f11cf600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805468010000000000000000810460ff16159067ffffffffffffffff1660008115801561090b5750825b905060008267ffffffffffffffff1660011480156109285750303b155b905081158015610936575080155b1561096d576040517ff92ee8a900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b84547fffffffffffffffffffffffffffffffffffffffffffffffff000000000000000016600117855583156109ce5784547fffffffffffffffffffffffffffffffffffffffffffffff00ffffffffffffffff16680100000000000000001785555b6109d6611041565b6109df89610eeb565b6109e888610b51565b6109f187610a66565b6109fa86610fc9565b8315610a5b5784547fffffffffffffffffffffffffffffffffffffffffffffff00ffffffffffffffff168555604051600181527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b505050505050505050565b8073ffffffffffffffffffffffffffffffffffffffff8116610ad1576040517f8e4c8aa600000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff821660048201526024015b60405180910390fd5b600380547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff8416908117909155604080519182523360208301527f24d9d91bc040e466fc78b3bb1f93bb81e7410b9bbed45d92b668b52a2ff4c1a991015b60405180910390a15050565b8073ffffffffffffffffffffffffffffffffffffffff8116610bb7576040517f8e4c8aa600000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff82166004820152602401610ac8565b600280547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff8416908117909155604080519182523360208301527fc6681cfb842ccb239555647a438f9ec49bcd12dc4f4d0c5544d3973528b63a459101610b45565b3073ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000161480610cfc57507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16610ce37f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5473ffffffffffffffffffffffffffffffffffffffff1690565b73ffffffffffffffffffffffffffffffffffffffff1614155b15610d33576040517fe07c8dba00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b565b6104553361081c565b8173ffffffffffffffffffffffffffffffffffffffff166352d1902d6040518163ffffffff1660e01b8152600401602060405180830381865afa925050508015610dc3575060408051601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0168201909252610dc091810190611592565b60015b610e11576040517f4c9c8ce300000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff83166004820152602401610ac8565b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc8114610e6d576040517faa1d49a400000000000000000000000000000000000000000000000000000000815260048101829052602401610ac8565b610e778383611049565b505050565b3073ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001614610d33576040517fe07c8dba00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff8116610f51576040517f8e4c8aa600000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff82166004820152602401610ac8565b600080547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff8416908117909155604080519182523360208301527f5af6a85e864342d4f108c43dd574d98480c91f1de0ac2a9f66d826dee49bd9bb9101610b45565b600480547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff8316908117909155604080519182523360208301527f98a54b72a08b0900e0ef7f964fa2f6c3820c0d5dd3e6fb48809acdacd9e5620e9101610717565b610d336110ac565b61105282611113565b60405173ffffffffffffffffffffffffffffffffffffffff8316907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a28051156110a457610e7782826111e2565b61052d611265565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a005468010000000000000000900460ff16610d33576040517fd7e6bcf800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff163b60000361117c576040517f4c9c8ce300000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff82166004820152602401610ac8565b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc80547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff92909216919091179055565b60606000808473ffffffffffffffffffffffffffffffffffffffff168460405161120c91906115ab565b600060405180830381855af49150503d8060008114611247576040519150601f19603f3d011682016040523d82523d6000602084013e61124c565b606091505b509150915061125c85838361129d565b95945050505050565b3415610d33576040517fb398979f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6060826112b2576112ad8261132f565b611328565b81511580156112d6575073ffffffffffffffffffffffffffffffffffffffff84163b155b15611325576040517f9996b31500000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff85166004820152602401610ac8565b50805b9392505050565b80511561133f5780518082602001fd5b6040517f1425ea4200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff8116811461045557600080fd5b6000602082840312156113a557600080fd5b813561132881611371565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080604083850312156113f257600080fd5b82356113fd81611371565b9150602083013567ffffffffffffffff8082111561141a57600080fd5b818501915085601f83011261142e57600080fd5b813581811115611440576114406113b0565b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0908116603f01168101908382118183101715611486576114866113b0565b8160405282815288602084870101111561149f57600080fd5b8260208601602083013760006020848301015280955050505050509250929050565b60005b838110156114dc5781810151838201526020016114c4565b50506000910152565b60208152600082518060208401526115048160408501602087016114c1565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169190910160400192915050565b6000806000806080858703121561154c57600080fd5b843561155781611371565b9350602085013561156781611371565b9250604085013561157781611371565b9150606085013561158781611371565b939692955090935050565b6000602082840312156115a457600080fd5b5051919050565b600082516115bd8184602087016114c1565b919091019291505056fea164736f6c6343000814000a", + "deployedBytecode": "0x6080604052600436106101425760003560e01c80637e185f57116100c0578063ce7ee5ac11610074578063e053dd6111610059578063e053dd61146103e3578063eb6f7abf14610403578063f8c8765e1461042357600080fd5b8063ce7ee5ac14610386578063d994d6d5146103b357600080fd5b8063ad3cb1cc116100a5578063ad3cb1cc146102e3578063af26974514610339578063b887e63e1461036657600080fd5b80637e185f57146102a35780638c777e82146102c357600080fd5b80633f80fbf7116101175780634f1ef286116100fc5780634f1ef2861461024d57806352d1902d1461026057806362f384ad1461028357600080fd5b80633f80fbf71461020d578063445ac6331461022d57600080fd5b806212851a14610147578062c4e39c146101695780630c340a24146101c057806312811d94146101ed575b600080fd5b34801561015357600080fd5b50610167610162366004611393565b610443565b005b34801561017557600080fd5b506003546101969073ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020015b60405180910390f35b3480156101cc57600080fd5b506000546101969073ffffffffffffffffffffffffffffffffffffffff1681565b3480156101f957600080fd5b50610167610208366004611393565b610458565b34801561021957600080fd5b50610167610228366004611393565b6104ac565b34801561023957600080fd5b50610167610248366004611393565b6104be565b61016761025b3660046113df565b610512565b34801561026c57600080fd5b50610275610531565b6040519081526020016101b7565b34801561028f57600080fd5b5061016761029e366004611393565b610560565b3480156102af57600080fd5b506101676102be366004611393565b610572565b3480156102cf57600080fd5b506101676102de366004611393565b6105b1565b3480156102ef57600080fd5b5061032c6040518060400160405280600581526020017f352e302e3000000000000000000000000000000000000000000000000000000081525081565b6040516101b791906114e5565b34801561034557600080fd5b506004546101969073ffffffffffffffffffffffffffffffffffffffff1681565b34801561037257600080fd5b50610167610381366004611393565b610722565b34801561039257600080fd5b506002546101969073ffffffffffffffffffffffffffffffffffffffff1681565b3480156103bf57600080fd5b506103d36103ce366004611393565b61077c565b60405190151581526020016101b7565b3480156103ef57600080fd5b506101676103fe366004611393565b6107c8565b34801561040f57600080fd5b5061016761041e366004611393565b61081c565b34801561042f57600080fd5b5061016761043e366004611536565b6108c0565b61044c33610572565b61045581610a66565b50565b60005473ffffffffffffffffffffffffffffffffffffffff828116911614610455576040517fee3675d400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6104b533610572565b61045581610b51565b60035473ffffffffffffffffffffffffffffffffffffffff828116911614610455576040517fc01ef51700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61051a610c2f565b61052382610d35565b61052d8282610d3e565b5050565b600061053b610e7c565b507f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc90565b61056933610572565b61045581610eeb565b61057b8161077c565b610455576040517f7746c6d400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60005473ffffffffffffffffffffffffffffffffffffffff163314610602576040517fee3675d400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600180547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff83161790558073ffffffffffffffffffffffffffffffffffffffff1663614619546040518163ffffffff1660e01b8152600401600060405180830381600087803b15801561068a57600080fd5b505af115801561069e573d6000803e3d6000fd5b5050600180547fffffffffffffffffffffffff0000000000000000000000000000000000000000169055506106d09050565b6040805173ffffffffffffffffffffffffffffffffffffffff831681523360208201527f2a8cd1b8f6553d34945708e311b2f74dfcd2b8cc712d12c6fcea24a1ccb4c43991015b60405180910390a150565b60045473ffffffffffffffffffffffffffffffffffffffff163314610773576040517fa417450200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61045581610fc9565b60015460009073ffffffffffffffffffffffffffffffffffffffff838116911614806107c2575060005473ffffffffffffffffffffffffffffffffffffffff8381169116145b92915050565b60025473ffffffffffffffffffffffffffffffffffffffff828116911614610455576040517f2887a65400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60015473ffffffffffffffffffffffffffffffffffffffff828116911614801590610862575060005473ffffffffffffffffffffffffffffffffffffffff828116911614155b8015610889575060045473ffffffffffffffffffffffffffffffffffffffff828116911614155b15610455576040517fe5f11cf600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805468010000000000000000810460ff16159067ffffffffffffffff1660008115801561090b5750825b905060008267ffffffffffffffff1660011480156109285750303b155b905081158015610936575080155b1561096d576040517ff92ee8a900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b84547fffffffffffffffffffffffffffffffffffffffffffffffff000000000000000016600117855583156109ce5784547fffffffffffffffffffffffffffffffffffffffffffffff00ffffffffffffffff16680100000000000000001785555b6109d6611041565b6109df89610eeb565b6109e888610b51565b6109f187610a66565b6109fa86610fc9565b8315610a5b5784547fffffffffffffffffffffffffffffffffffffffffffffff00ffffffffffffffff168555604051600181527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b505050505050505050565b8073ffffffffffffffffffffffffffffffffffffffff8116610ad1576040517f8e4c8aa600000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff821660048201526024015b60405180910390fd5b600380547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff8416908117909155604080519182523360208301527f24d9d91bc040e466fc78b3bb1f93bb81e7410b9bbed45d92b668b52a2ff4c1a991015b60405180910390a15050565b8073ffffffffffffffffffffffffffffffffffffffff8116610bb7576040517f8e4c8aa600000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff82166004820152602401610ac8565b600280547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff8416908117909155604080519182523360208301527fc6681cfb842ccb239555647a438f9ec49bcd12dc4f4d0c5544d3973528b63a459101610b45565b3073ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000161480610cfc57507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16610ce37f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5473ffffffffffffffffffffffffffffffffffffffff1690565b73ffffffffffffffffffffffffffffffffffffffff1614155b15610d33576040517fe07c8dba00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b565b6104553361081c565b8173ffffffffffffffffffffffffffffffffffffffff166352d1902d6040518163ffffffff1660e01b8152600401602060405180830381865afa925050508015610dc3575060408051601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0168201909252610dc091810190611592565b60015b610e11576040517f4c9c8ce300000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff83166004820152602401610ac8565b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc8114610e6d576040517faa1d49a400000000000000000000000000000000000000000000000000000000815260048101829052602401610ac8565b610e778383611049565b505050565b3073ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001614610d33576040517fe07c8dba00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff8116610f51576040517f8e4c8aa600000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff82166004820152602401610ac8565b600080547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff8416908117909155604080519182523360208301527f5af6a85e864342d4f108c43dd574d98480c91f1de0ac2a9f66d826dee49bd9bb9101610b45565b600480547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff8316908117909155604080519182523360208301527f98a54b72a08b0900e0ef7f964fa2f6c3820c0d5dd3e6fb48809acdacd9e5620e9101610717565b610d336110ac565b61105282611113565b60405173ffffffffffffffffffffffffffffffffffffffff8316907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a28051156110a457610e7782826111e2565b61052d611265565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a005468010000000000000000900460ff16610d33576040517fd7e6bcf800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff163b60000361117c576040517f4c9c8ce300000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff82166004820152602401610ac8565b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc80547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff92909216919091179055565b60606000808473ffffffffffffffffffffffffffffffffffffffff168460405161120c91906115ab565b600060405180830381855af49150503d8060008114611247576040519150601f19603f3d011682016040523d82523d6000602084013e61124c565b606091505b509150915061125c85838361129d565b95945050505050565b3415610d33576040517fb398979f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6060826112b2576112ad8261132f565b611328565b81511580156112d6575073ffffffffffffffffffffffffffffffffffffffff84163b155b15611325576040517f9996b31500000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff85166004820152602401610ac8565b50805b9392505050565b80511561133f5780518082602001fd5b6040517f1425ea4200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff8116811461045557600080fd5b6000602082840312156113a557600080fd5b813561132881611371565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080604083850312156113f257600080fd5b82356113fd81611371565b9150602083013567ffffffffffffffff8082111561141a57600080fd5b818501915085601f83011261142e57600080fd5b813581811115611440576114406113b0565b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0908116603f01168101908382118183101715611486576114866113b0565b8160405282815288602084870101111561149f57600080fd5b8260208601602083013760006020848301015280955050505050509250929050565b60005b838110156114dc5781810151838201526020016114c4565b50506000910152565b60208152600082518060208401526115048160408501602087016114c1565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169190910160400192915050565b6000806000806080858703121561154c57600080fd5b843561155781611371565b9350602085013561156781611371565b9250604085013561157781611371565b9150606085013561158781611371565b939692955090935050565b6000602082840312156115a457600080fd5b5051919050565b600082516115bd8184602087016114c1565b919091019291505056fea164736f6c6343000814000a", + "devdoc": { + "version": 1, + "kind": "dev", + "details": "Complete documentation is provided in the IGovernanceManagerRootstockCollective interfaceThis contract is upgradeable via the UUPS proxy pattern.", + "methods": { + "constructor": {}, + "executeChange(address)": { + "details": "reverts if is not called by the Governor", + "params": { + "changeContract_": "Address of the contract that will execute the changes" + } + }, + "initialize(address,address,address,address)": { + "details": "Used instead of a constructor for upgradeable contracts.", + "params": { + "foundationTreasury_": "The initial foundation treasury address.", + "governor_": "The initial governor address.", + "kycApprover_": "account responsible of approving Builder's Know you Costumer policies and Legal requirements", + "upgrader_": "The initial upgrader address." + } + }, + "isAuthorizedChanger(address)": { + "details": "Reverts with `NotAuthorizedChanger` if the account is not the authorized changer.", + "params": { + "account_": "The address to be validated as the changer." + } + }, + "proxiableUUID()": { + "details": "Implementation of the ERC1822 {proxiableUUID} function. This returns the storage slot used by the implementation. It is used to validate the implementation's compatibility when performing an upgrade. IMPORTANT: A proxy pointing at a proxiable contract should not be considered proxiable itself, because this risks bricking a proxy that upgrades to it, by delegating to itself until out of gas. Thus it is critical that this function revert if invoked through a proxy. This is guaranteed by the `notDelegated` modifier." + }, + "updateFoundationTreasury(address)": { + "details": "Reverts if caller is not a valid changer.Reverts if the new address is zero.", + "params": { + "foundationTreasury_": "The new foundation treasury address." + } + }, + "updateGovernor(address)": { + "details": "Reverts if caller is not a valid changer.Reverts if the new address is zero.", + "params": { + "governor_": "The new governor address." + } + }, + "updateKYCApprover(address)": { + "details": "Reverts if caller is not a valid changer.Reverts if the new address is zero.", + "params": { + "kycApprover_": "The new address to be set as the KYC approver." + } + }, + "updateUpgrader(address)": { + "details": "Updates the account authorized to upgrade the contractsReverts if caller is the upgrader.allow update to zero address to disable the upgrader role", + "params": { + "upgrader_": "The new upgrader address." + } + }, + "upgradeToAndCall(address,bytes)": { + "details": "Upgrade the implementation of the proxy to `newImplementation`, and subsequently execute the function call encoded in `data`. Calls {_authorizeUpgrade}. Emits an {Upgraded} event." + }, + "validateAuthorizedChanger(address)": { + "details": "Reverts with `NotAuthorizedChanger` if the account is not the authorized changer.", + "params": { + "account_": "The address to be validated as the changer." + } + }, + "validateAuthorizedUpgrader(address)": { + "details": "Reverts with `NotAuthorizedUpgrader` if the account is not the upgrader.", + "params": { + "account_": "The address to be validated." + } + }, + "validateFoundationTreasury(address)": { + "details": "Reverts with `NotFoundationTreasury` if the caller is not the foundation treasury.", + "params": { + "account_": "The address to be validated as the foundation treasury." + } + }, + "validateGovernor(address)": { + "details": "Reverts with `NotGovernor` if the account is not the governor.", + "params": { + "account_": "The address to be validated as the governor." + } + }, + "validateKycApprover(address)": { + "details": "Reverts with `NotKycApprover` if the account is not the KYC approver.", + "params": { + "account_": "The address to be validated as the KYC approver." + } + } + }, + "events": { + "Initialized(uint64)": { + "details": "Triggered when the contract has been initialized or reinitialized." + }, + "Upgraded(address)": { + "details": "Emitted when the implementation is upgraded." + } + }, + "errors": { + "AddressEmptyCode(address)": [ + { + "details": "There's no code at `target` (it is not a contract)." + } + ], + "ERC1967InvalidImplementation(address)": [ + { + "details": "The `implementation` of the proxy is invalid." + } + ], + "ERC1967NonPayable()": [ + { + "details": "An upgrade function sees `msg.value > 0` that may be lost." + } + ], + "FailedInnerCall()": [ + { + "details": "A call to an address target failed. The target may have reverted." + } + ], + "InvalidAddress(address)": [ + { + "params": { + "account_": "The invalid address provided." + } + } + ], + "InvalidInitialization()": [ + { + "details": "The contract is already initialized." + } + ], + "NotInitializing()": [ + { + "details": "The contract is not initializing." + } + ], + "UUPSUnauthorizedCallContext()": [ + { + "details": "The call is from an unauthorized context." + } + ], + "UUPSUnsupportedProxiableUUID(bytes32)": [ + { + "details": "The storage `slot` is unsupported as a UUID." + } + ] + }, + "title": "GovernanceManagerRootstockCollective" + }, + "metadata": "{\"compiler\":{\"version\":\"0.8.20+commit.a1b79de6\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"target\",\"type\":\"address\"}],\"type\":\"error\",\"name\":\"AddressEmptyCode\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"implementation\",\"type\":\"address\"}],\"type\":\"error\",\"name\":\"ERC1967InvalidImplementation\"},{\"inputs\":[],\"type\":\"error\",\"name\":\"ERC1967NonPayable\"},{\"inputs\":[],\"type\":\"error\",\"name\":\"FailedInnerCall\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account_\",\"type\":\"address\"}],\"type\":\"error\",\"name\":\"InvalidAddress\"},{\"inputs\":[],\"type\":\"error\",\"name\":\"InvalidInitialization\"},{\"inputs\":[],\"type\":\"error\",\"name\":\"NotAuthorizedChanger\"},{\"inputs\":[],\"type\":\"error\",\"name\":\"NotAuthorizedUpgrader\"},{\"inputs\":[],\"type\":\"error\",\"name\":\"NotFoundationTreasury\"},{\"inputs\":[],\"type\":\"error\",\"name\":\"NotGovernor\"},{\"inputs\":[],\"type\":\"error\",\"name\":\"NotInitializing\"},{\"inputs\":[],\"type\":\"error\",\"name\":\"NotKycApprover\"},{\"inputs\":[],\"type\":\"error\",\"name\":\"NotUpgrader\"},{\"inputs\":[],\"type\":\"error\",\"name\":\"UUPSUnauthorizedCallContext\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"slot\",\"type\":\"bytes32\"}],\"type\":\"error\",\"name\":\"UUPSUnsupportedProxiableUUID\"},{\"inputs\":[{\"internalType\":\"contract IChangeContractRootstockCollective\",\"name\":\"changeContract_\",\"type\":\"address\",\"indexed\":false},{\"internalType\":\"address\",\"name\":\"executor_\",\"type\":\"address\",\"indexed\":false}],\"type\":\"event\",\"name\":\"ChangeExecuted\",\"anonymous\":false},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"foundationTreasury_\",\"type\":\"address\",\"indexed\":false},{\"internalType\":\"address\",\"name\":\"updatedBy_\",\"type\":\"address\",\"indexed\":false}],\"type\":\"event\",\"name\":\"FoundationTreasuryUpdated\",\"anonymous\":false},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"governor_\",\"type\":\"address\",\"indexed\":false},{\"internalType\":\"address\",\"name\":\"updatedBy_\",\"type\":\"address\",\"indexed\":false}],\"type\":\"event\",\"name\":\"GovernorUpdated\",\"anonymous\":false},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"version\",\"type\":\"uint64\",\"indexed\":false}],\"type\":\"event\",\"name\":\"Initialized\",\"anonymous\":false},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"kycApprover_\",\"type\":\"address\",\"indexed\":false},{\"internalType\":\"address\",\"name\":\"updatedBy_\",\"type\":\"address\",\"indexed\":false}],\"type\":\"event\",\"name\":\"KycApproverUpdated\",\"anonymous\":false},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"implementation\",\"type\":\"address\",\"indexed\":true}],\"type\":\"event\",\"name\":\"Upgraded\",\"anonymous\":false},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"upgrader_\",\"type\":\"address\",\"indexed\":false},{\"internalType\":\"address\",\"name\":\"updatedBy_\",\"type\":\"address\",\"indexed\":false}],\"type\":\"event\",\"name\":\"UpgraderUpdated\",\"anonymous\":false},{\"inputs\":[],\"stateMutability\":\"view\",\"type\":\"function\",\"name\":\"UPGRADE_INTERFACE_VERSION\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}]},{\"inputs\":[{\"internalType\":\"contract IChangeContractRootstockCollective\",\"name\":\"changeContract_\",\"type\":\"address\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\",\"name\":\"executeChange\"},{\"inputs\":[],\"stateMutability\":\"view\",\"type\":\"function\",\"name\":\"foundationTreasury\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}]},{\"inputs\":[],\"stateMutability\":\"view\",\"type\":\"function\",\"name\":\"governor\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}]},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"governor_\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"foundationTreasury_\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"kycApprover_\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"upgrader_\",\"type\":\"address\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\",\"name\":\"initialize\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account_\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\",\"name\":\"isAuthorizedChanger\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}]},{\"inputs\":[],\"stateMutability\":\"view\",\"type\":\"function\",\"name\":\"kycApprover\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}]},{\"inputs\":[],\"stateMutability\":\"view\",\"type\":\"function\",\"name\":\"proxiableUUID\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}]},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"foundationTreasury_\",\"type\":\"address\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\",\"name\":\"updateFoundationTreasury\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"governor_\",\"type\":\"address\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\",\"name\":\"updateGovernor\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"kycApprover_\",\"type\":\"address\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\",\"name\":\"updateKYCApprover\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"upgrader_\",\"type\":\"address\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\",\"name\":\"updateUpgrader\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newImplementation\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"}],\"stateMutability\":\"payable\",\"type\":\"function\",\"name\":\"upgradeToAndCall\"},{\"inputs\":[],\"stateMutability\":\"view\",\"type\":\"function\",\"name\":\"upgrader\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}]},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account_\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\",\"name\":\"validateAuthorizedChanger\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account_\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\",\"name\":\"validateAuthorizedUpgrader\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account_\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\",\"name\":\"validateFoundationTreasury\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account_\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\",\"name\":\"validateGovernor\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account_\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\",\"name\":\"validateKycApprover\"}],\"devdoc\":{\"kind\":\"dev\",\"methods\":{\"constructor\":{\"custom:oz-upgrades-unsafe-allow\":\"constructor\"},\"executeChange(address)\":{\"details\":\"reverts if is not called by the Governor\",\"params\":{\"changeContract_\":\"Address of the contract that will execute the changes\"}},\"initialize(address,address,address,address)\":{\"details\":\"Used instead of a constructor for upgradeable contracts.\",\"params\":{\"foundationTreasury_\":\"The initial foundation treasury address.\",\"governor_\":\"The initial governor address.\",\"kycApprover_\":\"account responsible of approving Builder's Know you Costumer policies and Legal requirements\",\"upgrader_\":\"The initial upgrader address.\"}},\"isAuthorizedChanger(address)\":{\"details\":\"Reverts with `NotAuthorizedChanger` if the account is not the authorized changer.\",\"params\":{\"account_\":\"The address to be validated as the changer.\"}},\"proxiableUUID()\":{\"details\":\"Implementation of the ERC1822 {proxiableUUID} function. This returns the storage slot used by the implementation. It is used to validate the implementation's compatibility when performing an upgrade. IMPORTANT: A proxy pointing at a proxiable contract should not be considered proxiable itself, because this risks bricking a proxy that upgrades to it, by delegating to itself until out of gas. Thus it is critical that this function revert if invoked through a proxy. This is guaranteed by the `notDelegated` modifier.\"},\"updateFoundationTreasury(address)\":{\"details\":\"Reverts if caller is not a valid changer.Reverts if the new address is zero.\",\"params\":{\"foundationTreasury_\":\"The new foundation treasury address.\"}},\"updateGovernor(address)\":{\"details\":\"Reverts if caller is not a valid changer.Reverts if the new address is zero.\",\"params\":{\"governor_\":\"The new governor address.\"}},\"updateKYCApprover(address)\":{\"details\":\"Reverts if caller is not a valid changer.Reverts if the new address is zero.\",\"params\":{\"kycApprover_\":\"The new address to be set as the KYC approver.\"}},\"updateUpgrader(address)\":{\"details\":\"Updates the account authorized to upgrade the contractsReverts if caller is the upgrader.allow update to zero address to disable the upgrader role\",\"params\":{\"upgrader_\":\"The new upgrader address.\"}},\"upgradeToAndCall(address,bytes)\":{\"custom:oz-upgrades-unsafe-allow-reachable\":\"delegatecall\",\"details\":\"Upgrade the implementation of the proxy to `newImplementation`, and subsequently execute the function call encoded in `data`. Calls {_authorizeUpgrade}. Emits an {Upgraded} event.\"},\"validateAuthorizedChanger(address)\":{\"details\":\"Reverts with `NotAuthorizedChanger` if the account is not the authorized changer.\",\"params\":{\"account_\":\"The address to be validated as the changer.\"}},\"validateAuthorizedUpgrader(address)\":{\"details\":\"Reverts with `NotAuthorizedUpgrader` if the account is not the upgrader.\",\"params\":{\"account_\":\"The address to be validated.\"}},\"validateFoundationTreasury(address)\":{\"details\":\"Reverts with `NotFoundationTreasury` if the caller is not the foundation treasury.\",\"params\":{\"account_\":\"The address to be validated as the foundation treasury.\"}},\"validateGovernor(address)\":{\"details\":\"Reverts with `NotGovernor` if the account is not the governor.\",\"params\":{\"account_\":\"The address to be validated as the governor.\"}},\"validateKycApprover(address)\":{\"details\":\"Reverts with `NotKycApprover` if the account is not the KYC approver.\",\"params\":{\"account_\":\"The address to be validated as the KYC approver.\"}}},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{\"executeChange(address)\":{\"notice\":\"Function to be called to execute the changes in changeContract\"},\"foundationTreasury()\":{\"notice\":\"The address of the foundation treasury.\"},\"governor()\":{\"notice\":\"The address of the governor.\"},\"initialize(address,address,address,address)\":{\"notice\":\"Initializes the contract with the initial governor, foundation treasury, and KYC approver.\"},\"isAuthorizedChanger(address)\":{\"notice\":\"Validates if the given account is authorized as a changer\"},\"kycApprover()\":{\"notice\":\"The address of the KYC approver.\"},\"updateFoundationTreasury(address)\":{\"notice\":\"Updates the foundation treasury address\"},\"updateGovernor(address)\":{\"notice\":\"Updates the governor address\"},\"updateKYCApprover(address)\":{\"notice\":\"Updates the KYC approver address\"},\"upgrader()\":{\"notice\":\"The upgrader address with contract upgradeability permissions\"},\"validateAuthorizedChanger(address)\":{\"notice\":\"Validates if the given account is authorized as a changer\"},\"validateAuthorizedUpgrader(address)\":{\"notice\":\"Validates if the given account is authorized to upgrade the contracts.\"},\"validateFoundationTreasury(address)\":{\"notice\":\"Validates if the given account is the foundation treasury.\"},\"validateGovernor(address)\":{\"notice\":\"Validates if the given account is authorized as the governor.\"},\"validateKycApprover(address)\":{\"notice\":\"Validates if the given account is authorized as the KYC approver.\"}},\"version\":1}},\"settings\":{\"remappings\":[\"@openzeppelin/contracts-upgradeable/=node_modules/@openzeppelin/contracts-upgradeable/\",\"@openzeppelin/contracts/=node_modules/@openzeppelin/contracts/\",\"eth-gas-reporter/=node_modules/eth-gas-reporter/\",\"forge-std/=node_modules/forge-std/\",\"hardhat/=node_modules/hardhat/\"],\"optimizer\":{\"enabled\":true,\"runs\":10000},\"metadata\":{\"bytecodeHash\":\"none\"},\"compilationTarget\":{\"src/governance/GovernanceManagerRootstockCollective.sol\":\"GovernanceManagerRootstockCollective\"},\"evmVersion\":\"london\",\"libraries\":{}},\"sources\":{\"node_modules/@openzeppelin/contracts-upgradeable/proxy/utils/Initializable.sol\":{\"keccak256\":\"0x631188737069917d2f909d29ce62c4d48611d326686ba6683e26b72a23bfac0b\",\"urls\":[\"bzz-raw://7a61054ae84cd6c4d04c0c4450ba1d6de41e27e0a2c4f1bcdf58f796b401c609\",\"dweb:/ipfs/QmUvtdp7X1mRVyC3CsHrtPbgoqWaXHp3S1ZR24tpAQYJWM\"],\"license\":\"MIT\"},\"node_modules/@openzeppelin/contracts-upgradeable/proxy/utils/UUPSUpgradeable.sol\":{\"keccak256\":\"0x3f13b947637c4969c0644cab4ef399cdc4b67f101463b8775c5a43b118558e53\",\"urls\":[\"bzz-raw://c6683e6ade6985d394d32baaef5eea0d8b9ff0b3eca86ae413d6cdde114a9930\",\"dweb:/ipfs/QmdBE8T1BTddZxpdECMsb3KiCFyjNWmxcCddYrWFTXmWPj\"],\"license\":\"MIT\"},\"node_modules/@openzeppelin/contracts/interfaces/draft-IERC1822.sol\":{\"keccak256\":\"0x2a1f9944df2015c081d89cd41ba22ffaf10aa6285969f0dc612b235cc448999c\",\"urls\":[\"bzz-raw://ef381843676aec64421200ee85eaa0b1356a35f28b9fc67e746a6bbb832077d9\",\"dweb:/ipfs/QmY8aorMYA2TeTCnu6ejDjzb4rW4t7TCtW4GZ6LoxTFm7v\"],\"license\":\"MIT\"},\"node_modules/@openzeppelin/contracts/proxy/ERC1967/ERC1967Utils.sol\":{\"keccak256\":\"0x06a78f9b3ee3e6d0eb4e4cd635ba49960bea34cac1db8c0a27c75f2319f1fd65\",\"urls\":[\"bzz-raw://547d21aa17f4f3f1a1a7edf7167beff8dd9496a0348d5588f15cc8a4b29d052a\",\"dweb:/ipfs/QmT16JtRQSWNpLo9W23jr6CzaMuTAcQcjJJcdRd8HLJ6cE\"],\"license\":\"MIT\"},\"node_modules/@openzeppelin/contracts/proxy/beacon/IBeacon.sol\":{\"keccak256\":\"0xc59a78b07b44b2cf2e8ab4175fca91e8eca1eee2df7357b8d2a8833e5ea1f64c\",\"urls\":[\"bzz-raw://5aa4f07e65444784c29cd7bfcc2341b34381e4e5b5da9f0c5bd00d7f430e66fa\",\"dweb:/ipfs/QmWRMh4Q9DpaU9GvsiXmDdoNYMyyece9if7hnfLz7uqzWM\"],\"license\":\"MIT\"},\"node_modules/@openzeppelin/contracts/utils/Address.sol\":{\"keccak256\":\"0xaf28a975a78550e45f65e559a3ad6a5ad43b9b8a37366999abd1b7084eb70721\",\"urls\":[\"bzz-raw://b7bd24e224f67f65bfadf85dc2929fa965456bb2415478bd0125471b5ce35245\",\"dweb:/ipfs/QmRaydGr8BTHs1kvaZfsNU69pKzUAGFrvABn1KiRSbE51y\"],\"license\":\"MIT\"},\"node_modules/@openzeppelin/contracts/utils/StorageSlot.sol\":{\"keccak256\":\"0x32ba59b4b7299237c8ba56319110989d7978a039faf754793064e967e5894418\",\"urls\":[\"bzz-raw://1ae50c8b562427df610cc4540c9bf104acca7ef8e2dcae567ae7e52272281e9c\",\"dweb:/ipfs/QmTHiadFCSJUPpRjNegc5SahmeU8bAoY8i9Aq6tVscbcKR\"],\"license\":\"MIT\"},\"src/governance/GovernanceManagerRootstockCollective.sol\":{\"keccak256\":\"0x3901496b522bdf3a30ab046bbfc6e359d414aec1576500e44703e0769bc25c5c\",\"urls\":[\"bzz-raw://caa207da68cc6a09156a5c9cc7a34743b99dece56deabb1e11e17572b8ca42cc\",\"dweb:/ipfs/QmdCPzHWYu895vrD8azHBncGR8WFrAycqwBHpve9k92EDG\"],\"license\":\"MIT\"},\"src/interfaces/IChangeContractRootstockCollective.sol\":{\"keccak256\":\"0x00fb3eb72286348dd06d581c5044cb045dfd3bd24725d05dd9c4b008567dd496\",\"urls\":[\"bzz-raw://7f4a03e06197ae7d6e478097afbbecf936ce7029ca49909a1fee0b4ba1b5b517\",\"dweb:/ipfs/QmfByMJ1SQAmcYkouS5WM3akMmSKU3MCyACpFmQwuFSYe9\"],\"license\":\"MIT\"},\"src/interfaces/IGovernanceManagerRootstockCollective.sol\":{\"keccak256\":\"0x1416991dd129bb36f43cc0854dfa824b5b85838e5c5018566b6cf78f527747e3\",\"urls\":[\"bzz-raw://8652a18ec39d5527fefb829eca619f4cf4bbec3ee4f6231e8888f1549feedd3d\",\"dweb:/ipfs/Qmczi6GipLy9B9TcDMx5UaZZPFBaMT2k49iYzQuLCFgnfS\"],\"license\":\"MIT\"}},\"version\":1}", + "numDeployments": 1, + "receipt": { + "transactionHash": "0xf0d87502502e97d6acb2f1a7bd1daef29df202f47254828c0b1a0b99eafbd32f", + "transactionIndex": "0x2", + "blockHash": "0x1443c369bea56eb1861cdd046d78c8f783b13e99632004589c8cb625545e16eb", + "blockNumber": "0x6a2e72", + "from": "0xa3eda7A0b22d97DEFb7e223088F4c86a3Ce4B152", + "to": null, + "cumulativeGasUsed": "0x16c87b", + "gasUsed": "0x1375a4", + "contractAddress": "0x5AF268A29f8aB0bA9c34FC2bC4418A10c62010B5", + "logs": [ + { + "address": "0x5AF268A29f8aB0bA9c34FC2bC4418A10c62010B5", + "topics": [ + "0xc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d2" + ], + "data": "0x000000000000000000000000000000000000000000000000ffffffffffffffff", + "blockHash": "0x1443c369bea56eb1861cdd046d78c8f783b13e99632004589c8cb625545e16eb", + "blockNumber": "0x6a2e72", + "transactionHash": "0xf0d87502502e97d6acb2f1a7bd1daef29df202f47254828c0b1a0b99eafbd32f", + "transactionIndex": "0x2", + "logIndex": "0x0" + } + ], + "status": "0x1", + "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000000000000000000800000000000000000000008090000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "type": "0x0" + }, + "solcInputHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "storageLayout": { + "storage": [ + { + "astId": 59864, + "contract": "src/governance/GovernanceManagerRootstockCollective.sol:GovernanceManagerRootstockCollective", + "label": "governor", + "offset": 0, + "slot": "0", + "type": "t_address" + }, + { + "astId": 59867, + "contract": "src/governance/GovernanceManagerRootstockCollective.sol:GovernanceManagerRootstockCollective", + "label": "_authorizedChanger", + "offset": 0, + "slot": "1", + "type": "t_address" + }, + { + "astId": 59870, + "contract": "src/governance/GovernanceManagerRootstockCollective.sol:GovernanceManagerRootstockCollective", + "label": "foundationTreasury", + "offset": 0, + "slot": "2", + "type": "t_address" + }, + { + "astId": 59873, + "contract": "src/governance/GovernanceManagerRootstockCollective.sol:GovernanceManagerRootstockCollective", + "label": "kycApprover", + "offset": 0, + "slot": "3", + "type": "t_address" + }, + { + "astId": 59876, + "contract": "src/governance/GovernanceManagerRootstockCollective.sol:GovernanceManagerRootstockCollective", + "label": "upgrader", + "offset": 0, + "slot": "4", + "type": "t_address" + }, + { + "astId": 60193, + "contract": "src/governance/GovernanceManagerRootstockCollective.sol:GovernanceManagerRootstockCollective", + "label": "__gap", + "offset": 0, + "slot": "5", + "type": "t_array(t_uint256)50_storage" + } + ], + "types": { + "t_address": { + "encoding": "inplace", + "label": "address", + "numberOfBytes": "20" + }, + "t_array(t_uint256)50_storage": { + "encoding": "inplace", + "label": "uint256[50]", + "numberOfBytes": "1600", + "base": "t_uint256" + }, + "t_uint256": { + "encoding": "inplace", + "label": "uint256", + "numberOfBytes": "32" + } + } + }, + "transactionHash": "0xf0d87502502e97d6acb2f1a7bd1daef29df202f47254828c0b1a0b99eafbd32f", + "userdoc": { + "version": 1, + "kind": "user", + "methods": { + "executeChange(address)": { + "notice": "Function to be called to execute the changes in changeContract" + }, + "foundationTreasury()": { + "notice": "The address of the foundation treasury." + }, + "governor()": { + "notice": "The address of the governor." + }, + "initialize(address,address,address,address)": { + "notice": "Initializes the contract with the initial governor, foundation treasury, and KYC approver." + }, + "isAuthorizedChanger(address)": { + "notice": "Validates if the given account is authorized as a changer" + }, + "kycApprover()": { + "notice": "The address of the KYC approver." + }, + "updateFoundationTreasury(address)": { + "notice": "Updates the foundation treasury address" + }, + "updateGovernor(address)": { + "notice": "Updates the governor address" + }, + "updateKYCApprover(address)": { + "notice": "Updates the KYC approver address" + }, + "upgrader()": { + "notice": "The upgrader address with contract upgradeability permissions" + }, + "validateAuthorizedChanger(address)": { + "notice": "Validates if the given account is authorized as a changer" + }, + "validateAuthorizedUpgrader(address)": { + "notice": "Validates if the given account is authorized to upgrade the contracts." + }, + "validateFoundationTreasury(address)": { + "notice": "Validates if the given account is the foundation treasury." + }, + "validateGovernor(address)": { + "notice": "Validates if the given account is authorized as the governor." + }, + "validateKycApprover(address)": { + "notice": "Validates if the given account is authorized as the KYC approver." + } + }, + "errors": { + "InvalidAddress(address)": [ + { + "notice": "Thrown when an invalid address is provided." + } + ], + "NotAuthorizedChanger()": [ + { + "notice": "Thrown when the caller is not authorized as a changer." + } + ], + "NotAuthorizedUpgrader()": [ + { + "notice": "Thrown when the caller is not authorized to upgrade the contracts" + } + ], + "NotFoundationTreasury()": [ + { + "notice": "Thrown when the caller is not the foundation treasury." + } + ], + "NotGovernor()": [ + { + "notice": "Thrown when the caller is not the governor." + } + ], + "NotKycApprover()": [ + { + "notice": "Thrown when the caller is not the KYC approver." + } + ], + "NotUpgrader()": [ + { + "notice": "Thrown when the caller is not the upgrader." + } + ] + }, + "notice": "This contract manages governance addresses.It also allows the governor to execute contracts that implement the IChangeContractRootstockCollective interface." + } +} \ No newline at end of file diff --git a/deployments/mainnet/GovernanceManagerRootstockCollectiveProxy.json b/deployments/mainnet/GovernanceManagerRootstockCollectiveProxy.json new file mode 100644 index 00000000..4bf974be --- /dev/null +++ b/deployments/mainnet/GovernanceManagerRootstockCollectiveProxy.json @@ -0,0 +1,214 @@ +{ + "abi": [ + { + "type": "constructor", + "inputs": [ + { + "name": "implementation", + "type": "address", + "internalType": "address" + }, + { + "name": "_data", + "type": "bytes", + "internalType": "bytes" + } + ], + "stateMutability": "payable" + }, + { + "type": "fallback", + "stateMutability": "payable" + }, + { + "type": "event", + "name": "Upgraded", + "inputs": [ + { + "name": "implementation", + "type": "address", + "indexed": true, + "internalType": "address" + } + ], + "anonymous": false + }, + { + "type": "error", + "name": "AddressEmptyCode", + "inputs": [ + { + "name": "target", + "type": "address", + "internalType": "address" + } + ] + }, + { + "type": "error", + "name": "ERC1967InvalidImplementation", + "inputs": [ + { + "name": "implementation", + "type": "address", + "internalType": "address" + } + ] + }, + { + "type": "error", + "name": "ERC1967NonPayable", + "inputs": [] + }, + { + "type": "error", + "name": "FailedInnerCall", + "inputs": [] + } + ], + "address": "0x7749f092834E4446466C1A14CcC8edD526A5C1fB", + "args": [ + "0x5AF268A29f8aB0bA9c34FC2bC4418A10c62010B5", + "0xf8c8765e00000000000000000000000071ac6ff904a17f50f2c07b693376ccc1c92627f0000000000000000000000000267a6073637408b6a1d34d685ff5720a0cbcbd9d0000000000000000000000004736535f8c9a2571d18410133fc0d3dde3ae44ce0000000000000000000000003e4a679e27c2ff3381d1140d41eefb83c4a9d1db" + ], + "bytecode": "0x60806040526040516103ee3803806103ee83398101604081905261002291610268565b61002c8282610033565b5050610352565b61003c82610092565b6040516001600160a01b038316907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a280511561008657610081828261010e565b505050565b61008e610185565b5050565b806001600160a01b03163b6000036100cd57604051634c9c8ce360e01b81526001600160a01b03821660048201526024015b60405180910390fd5b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc80546001600160a01b0319166001600160a01b0392909216919091179055565b6060600080846001600160a01b03168460405161012b9190610336565b600060405180830381855af49150503d8060008114610166576040519150601f19603f3d011682016040523d82523d6000602084013e61016b565b606091505b50909250905061017c8583836101a6565b95945050505050565b34156101a45760405163b398979f60e01b815260040160405180910390fd5b565b6060826101bb576101b682610205565b6101fe565b81511580156101d257506001600160a01b0384163b155b156101fb57604051639996b31560e01b81526001600160a01b03851660048201526024016100c4565b50805b9392505050565b8051156102155780518082602001fd5b604051630a12f52160e11b815260040160405180910390fd5b634e487b7160e01b600052604160045260246000fd5b60005b8381101561025f578181015183820152602001610247565b50506000910152565b6000806040838503121561027b57600080fd5b82516001600160a01b038116811461029257600080fd5b60208401519092506001600160401b03808211156102af57600080fd5b818501915085601f8301126102c357600080fd5b8151818111156102d5576102d561022e565b604051601f8201601f19908116603f011681019083821181831017156102fd576102fd61022e565b8160405282815288602084870101111561031657600080fd5b610327836020830160208801610244565b80955050505050509250929050565b60008251610348818460208701610244565b9190910192915050565b608e806103606000396000f3fe6080604052600a600c565b005b60186014601a565b605e565b565b600060597f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5473ffffffffffffffffffffffffffffffffffffffff1690565b905090565b3660008037600080366000845af43d6000803e808015607c573d6000f35b3d6000fdfea164736f6c6343000814000a", + "deployedBytecode": "0x6080604052600a600c565b005b60186014601a565b605e565b565b600060597f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5473ffffffffffffffffffffffffffffffffffffffff1690565b905090565b3660008037600080366000845af43d6000803e808015607c573d6000f35b3d6000fdfea164736f6c6343000814000a", + "devdoc": { + "version": 1, + "kind": "dev", + "details": "This contract implements an upgradeable proxy. It is upgradeable because calls are delegated to an implementation address that can be changed. This address is stored in storage in the location specified by https://eips.ethereum.org/EIPS/eip-1967[EIP1967], so that it doesn't conflict with the storage layout of the implementation behind the proxy.", + "methods": { + "constructor": { + "details": "Initializes the upgradeable proxy with an initial implementation specified by `implementation`. If `_data` is nonempty, it's used as data in a delegate call to `implementation`. This will typically be an encoded function call, and allows initializing the storage of the proxy like a Solidity constructor. Requirements: - If `data` is empty, `msg.value` must be zero." + } + }, + "events": { + "Upgraded(address)": { + "details": "Emitted when the implementation is upgraded." + } + }, + "errors": { + "AddressEmptyCode(address)": [ + { + "details": "There's no code at `target` (it is not a contract)." + } + ], + "ERC1967InvalidImplementation(address)": [ + { + "details": "The `implementation` of the proxy is invalid." + } + ], + "ERC1967NonPayable()": [ + { + "details": "An upgrade function sees `msg.value > 0` that may be lost." + } + ], + "FailedInnerCall()": [ + { + "details": "A call to an address target failed. The target may have reverted." + } + ] + } + }, + "metadata": "{\"compiler\":{\"version\":\"0.8.20+commit.a1b79de6\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"address\",\"name\":\"implementation\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"_data\",\"type\":\"bytes\"}],\"stateMutability\":\"payable\",\"type\":\"constructor\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"target\",\"type\":\"address\"}],\"type\":\"error\",\"name\":\"AddressEmptyCode\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"implementation\",\"type\":\"address\"}],\"type\":\"error\",\"name\":\"ERC1967InvalidImplementation\"},{\"inputs\":[],\"type\":\"error\",\"name\":\"ERC1967NonPayable\"},{\"inputs\":[],\"type\":\"error\",\"name\":\"FailedInnerCall\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"implementation\",\"type\":\"address\",\"indexed\":true}],\"type\":\"event\",\"name\":\"Upgraded\",\"anonymous\":false},{\"inputs\":[],\"stateMutability\":\"payable\",\"type\":\"fallback\"}],\"devdoc\":{\"kind\":\"dev\",\"methods\":{\"constructor\":{\"details\":\"Initializes the upgradeable proxy with an initial implementation specified by `implementation`. If `_data` is nonempty, it's used as data in a delegate call to `implementation`. This will typically be an encoded function call, and allows initializing the storage of the proxy like a Solidity constructor. Requirements: - If `data` is empty, `msg.value` must be zero.\"}},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"remappings\":[\"@openzeppelin/contracts-upgradeable/=node_modules/@openzeppelin/contracts-upgradeable/\",\"@openzeppelin/contracts/=node_modules/@openzeppelin/contracts/\",\"eth-gas-reporter/=node_modules/eth-gas-reporter/\",\"forge-std/=node_modules/forge-std/\",\"hardhat/=node_modules/hardhat/\"],\"optimizer\":{\"enabled\":true,\"runs\":10000},\"metadata\":{\"bytecodeHash\":\"none\"},\"compilationTarget\":{\"node_modules/@openzeppelin/contracts/proxy/ERC1967/ERC1967Proxy.sol\":\"ERC1967Proxy\"},\"evmVersion\":\"london\",\"libraries\":{}},\"sources\":{\"node_modules/@openzeppelin/contracts/proxy/ERC1967/ERC1967Proxy.sol\":{\"keccak256\":\"0xbfb6695731de677140fbf76c772ab08c4233a122fb51ac28ac120fc49bbbc4ec\",\"urls\":[\"bzz-raw://68f8fded7cc318efa15874b7c6a983fe17a4a955d72d240353a9a4ca1e1b824c\",\"dweb:/ipfs/QmdcmBL9Qo4Tk3Dby4wFYabGyot9JNeLPxpSXZUgUm92BV\"],\"license\":\"MIT\"},\"node_modules/@openzeppelin/contracts/proxy/ERC1967/ERC1967Utils.sol\":{\"keccak256\":\"0x06a78f9b3ee3e6d0eb4e4cd635ba49960bea34cac1db8c0a27c75f2319f1fd65\",\"urls\":[\"bzz-raw://547d21aa17f4f3f1a1a7edf7167beff8dd9496a0348d5588f15cc8a4b29d052a\",\"dweb:/ipfs/QmT16JtRQSWNpLo9W23jr6CzaMuTAcQcjJJcdRd8HLJ6cE\"],\"license\":\"MIT\"},\"node_modules/@openzeppelin/contracts/proxy/Proxy.sol\":{\"keccak256\":\"0xc3f2ec76a3de8ed7a7007c46166f5550c72c7709e3fc7e8bb3111a7191cdedbd\",\"urls\":[\"bzz-raw://e73efb4c2ca655882dc237c6b4f234a9bd36d97159d8fcaa837eb01171f726ac\",\"dweb:/ipfs/QmTNnnv7Gu5fs5G1ZMh7Fexp8N4XUs3XrNAngjcxgiss3e\"],\"license\":\"MIT\"},\"node_modules/@openzeppelin/contracts/proxy/beacon/IBeacon.sol\":{\"keccak256\":\"0xc59a78b07b44b2cf2e8ab4175fca91e8eca1eee2df7357b8d2a8833e5ea1f64c\",\"urls\":[\"bzz-raw://5aa4f07e65444784c29cd7bfcc2341b34381e4e5b5da9f0c5bd00d7f430e66fa\",\"dweb:/ipfs/QmWRMh4Q9DpaU9GvsiXmDdoNYMyyece9if7hnfLz7uqzWM\"],\"license\":\"MIT\"},\"node_modules/@openzeppelin/contracts/utils/Address.sol\":{\"keccak256\":\"0xaf28a975a78550e45f65e559a3ad6a5ad43b9b8a37366999abd1b7084eb70721\",\"urls\":[\"bzz-raw://b7bd24e224f67f65bfadf85dc2929fa965456bb2415478bd0125471b5ce35245\",\"dweb:/ipfs/QmRaydGr8BTHs1kvaZfsNU69pKzUAGFrvABn1KiRSbE51y\"],\"license\":\"MIT\"},\"node_modules/@openzeppelin/contracts/utils/StorageSlot.sol\":{\"keccak256\":\"0x32ba59b4b7299237c8ba56319110989d7978a039faf754793064e967e5894418\",\"urls\":[\"bzz-raw://1ae50c8b562427df610cc4540c9bf104acca7ef8e2dcae567ae7e52272281e9c\",\"dweb:/ipfs/QmTHiadFCSJUPpRjNegc5SahmeU8bAoY8i9Aq6tVscbcKR\"],\"license\":\"MIT\"}},\"version\":1}", + "numDeployments": 1, + "receipt": { + "transactionHash": "0x1e1d0ff01c83133bd17304463b0a66ec43f6df214528fd1b554cd63e0fe2c4e3", + "transactionIndex": "0x3", + "blockHash": "0x1443c369bea56eb1861cdd046d78c8f783b13e99632004589c8cb625545e16eb", + "blockNumber": "0x6a2e72", + "from": "0xa3eda7A0b22d97DEFb7e223088F4c86a3Ce4B152", + "to": null, + "cumulativeGasUsed": "0x1a82d8", + "gasUsed": "0x3ba5d", + "contractAddress": "0x7749f092834E4446466C1A14CcC8edD526A5C1fB", + "logs": [ + { + "address": "0x7749f092834E4446466C1A14CcC8edD526A5C1fB", + "topics": [ + "0xbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b", + "0x0000000000000000000000005af268a29f8ab0ba9c34fc2bc4418a10c62010b5" + ], + "data": "0x", + "blockHash": "0x1443c369bea56eb1861cdd046d78c8f783b13e99632004589c8cb625545e16eb", + "blockNumber": "0x6a2e72", + "transactionHash": "0x1e1d0ff01c83133bd17304463b0a66ec43f6df214528fd1b554cd63e0fe2c4e3", + "transactionIndex": "0x3", + "logIndex": "0x0" + }, + { + "address": "0x7749f092834E4446466C1A14CcC8edD526A5C1fB", + "topics": [ + "0x5af6a85e864342d4f108c43dd574d98480c91f1de0ac2a9f66d826dee49bd9bb" + ], + "data": "0x00000000000000000000000071ac6ff904a17f50f2c07b693376ccc1c92627f0000000000000000000000000a3eda7a0b22d97defb7e223088f4c86a3ce4b152", + "blockHash": "0x1443c369bea56eb1861cdd046d78c8f783b13e99632004589c8cb625545e16eb", + "blockNumber": "0x6a2e72", + "transactionHash": "0x1e1d0ff01c83133bd17304463b0a66ec43f6df214528fd1b554cd63e0fe2c4e3", + "transactionIndex": "0x3", + "logIndex": "0x1" + }, + { + "address": "0x7749f092834E4446466C1A14CcC8edD526A5C1fB", + "topics": [ + "0xc6681cfb842ccb239555647a438f9ec49bcd12dc4f4d0c5544d3973528b63a45" + ], + "data": "0x000000000000000000000000267a6073637408b6a1d34d685ff5720a0cbcbd9d000000000000000000000000a3eda7a0b22d97defb7e223088f4c86a3ce4b152", + "blockHash": "0x1443c369bea56eb1861cdd046d78c8f783b13e99632004589c8cb625545e16eb", + "blockNumber": "0x6a2e72", + "transactionHash": "0x1e1d0ff01c83133bd17304463b0a66ec43f6df214528fd1b554cd63e0fe2c4e3", + "transactionIndex": "0x3", + "logIndex": "0x2" + }, + { + "address": "0x7749f092834E4446466C1A14CcC8edD526A5C1fB", + "topics": [ + "0x24d9d91bc040e466fc78b3bb1f93bb81e7410b9bbed45d92b668b52a2ff4c1a9" + ], + "data": "0x0000000000000000000000004736535f8c9a2571d18410133fc0d3dde3ae44ce000000000000000000000000a3eda7a0b22d97defb7e223088f4c86a3ce4b152", + "blockHash": "0x1443c369bea56eb1861cdd046d78c8f783b13e99632004589c8cb625545e16eb", + "blockNumber": "0x6a2e72", + "transactionHash": "0x1e1d0ff01c83133bd17304463b0a66ec43f6df214528fd1b554cd63e0fe2c4e3", + "transactionIndex": "0x3", + "logIndex": "0x3" + }, + { + "address": "0x7749f092834E4446466C1A14CcC8edD526A5C1fB", + "topics": [ + "0x98a54b72a08b0900e0ef7f964fa2f6c3820c0d5dd3e6fb48809acdacd9e5620e" + ], + "data": "0x0000000000000000000000003e4a679e27c2ff3381d1140d41eefb83c4a9d1db000000000000000000000000a3eda7a0b22d97defb7e223088f4c86a3ce4b152", + "blockHash": "0x1443c369bea56eb1861cdd046d78c8f783b13e99632004589c8cb625545e16eb", + "blockNumber": "0x6a2e72", + "transactionHash": "0x1e1d0ff01c83133bd17304463b0a66ec43f6df214528fd1b554cd63e0fe2c4e3", + "transactionIndex": "0x3", + "logIndex": "0x4" + }, + { + "address": "0x7749f092834E4446466C1A14CcC8edD526A5C1fB", + "topics": [ + "0xc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d2" + ], + "data": "0x0000000000000000000000000000000000000000000000000000000000000001", + "blockHash": "0x1443c369bea56eb1861cdd046d78c8f783b13e99632004589c8cb625545e16eb", + "blockNumber": "0x6a2e72", + "transactionHash": "0x1e1d0ff01c83133bd17304463b0a66ec43f6df214528fd1b554cd63e0fe2c4e3", + "transactionIndex": "0x3", + "logIndex": "0x5" + } + ], + "status": "0x1", + "logsBloom": "0x08000000000000000008000200080000400000000000000000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800000000000000000000000080000000240000000000000000000000000000000000000000000000000000000800000000000000000000000020800000000000000000000050000000000004000000000001000000000000004000200042000000000000000000000000000000000040000000000100", + "type": "0x0" + }, + "solcInputHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "storageLayout": { + "storage": [], + "types": {} + }, + "transactionHash": "0x1e1d0ff01c83133bd17304463b0a66ec43f6df214528fd1b554cd63e0fe2c4e3", + "userdoc": { + "version": 1, + "kind": "user" + } +} \ No newline at end of file diff --git a/deployments/mainnet/RewardDistributorRootstockCollective.json b/deployments/mainnet/RewardDistributorRootstockCollective.json new file mode 100644 index 00000000..90b9eb5c --- /dev/null +++ b/deployments/mainnet/RewardDistributorRootstockCollective.json @@ -0,0 +1,577 @@ +{ + "abi": [ + { + "type": "constructor", + "inputs": [], + "stateMutability": "nonpayable" + }, + { + "type": "receive", + "stateMutability": "payable" + }, + { + "type": "function", + "name": "UPGRADE_INTERFACE_VERSION", + "inputs": [], + "outputs": [ + { + "name": "", + "type": "string", + "internalType": "string" + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "backersManager", + "inputs": [], + "outputs": [ + { + "name": "", + "type": "address", + "internalType": "contract BackersManagerRootstockCollective" + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "defaultRewardCoinbaseAmount", + "inputs": [], + "outputs": [ + { + "name": "", + "type": "uint256", + "internalType": "uint256" + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "defaultRewardTokenAmount", + "inputs": [], + "outputs": [ + { + "name": "", + "type": "uint256", + "internalType": "uint256" + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "governanceManager", + "inputs": [], + "outputs": [ + { + "name": "", + "type": "address", + "internalType": "contract IGovernanceManagerRootstockCollective" + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "initialize", + "inputs": [ + { + "name": "governanceManager_", + "type": "address", + "internalType": "contract IGovernanceManagerRootstockCollective" + } + ], + "outputs": [], + "stateMutability": "nonpayable" + }, + { + "type": "function", + "name": "initializeCollectiveRewardsAddresses", + "inputs": [ + { + "name": "backersManager_", + "type": "address", + "internalType": "address" + } + ], + "outputs": [], + "stateMutability": "nonpayable" + }, + { + "type": "function", + "name": "proxiableUUID", + "inputs": [], + "outputs": [ + { + "name": "", + "type": "bytes32", + "internalType": "bytes32" + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "rewardToken", + "inputs": [], + "outputs": [ + { + "name": "", + "type": "address", + "internalType": "contract IERC20" + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "sendRewards", + "inputs": [ + { + "name": "amountERC20_", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "amountCoinbase_", + "type": "uint256", + "internalType": "uint256" + } + ], + "outputs": [], + "stateMutability": "payable" + }, + { + "type": "function", + "name": "sendRewardsAndStartDistribution", + "inputs": [ + { + "name": "amountERC20_", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "amountCoinbase_", + "type": "uint256", + "internalType": "uint256" + } + ], + "outputs": [], + "stateMutability": "payable" + }, + { + "type": "function", + "name": "sendRewardsAndStartDistributionWithDefaultAmount", + "inputs": [], + "outputs": [], + "stateMutability": "payable" + }, + { + "type": "function", + "name": "sendRewardsWithDefaultAmount", + "inputs": [], + "outputs": [], + "stateMutability": "payable" + }, + { + "type": "function", + "name": "setDefaultRewardAmount", + "inputs": [ + { + "name": "tokenAmount_", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "coinbaseAmount_", + "type": "uint256", + "internalType": "uint256" + } + ], + "outputs": [], + "stateMutability": "payable" + }, + { + "type": "function", + "name": "upgradeToAndCall", + "inputs": [ + { + "name": "newImplementation", + "type": "address", + "internalType": "address" + }, + { + "name": "data", + "type": "bytes", + "internalType": "bytes" + } + ], + "outputs": [], + "stateMutability": "payable" + }, + { + "type": "event", + "name": "Initialized", + "inputs": [ + { + "name": "version", + "type": "uint64", + "indexed": false, + "internalType": "uint64" + } + ], + "anonymous": false + }, + { + "type": "event", + "name": "Upgraded", + "inputs": [ + { + "name": "implementation", + "type": "address", + "indexed": true, + "internalType": "address" + } + ], + "anonymous": false + }, + { + "type": "error", + "name": "AddressEmptyCode", + "inputs": [ + { + "name": "target", + "type": "address", + "internalType": "address" + } + ] + }, + { + "type": "error", + "name": "CollectiveRewardsAddressesAlreadyInitialized", + "inputs": [] + }, + { + "type": "error", + "name": "ERC1967InvalidImplementation", + "inputs": [ + { + "name": "implementation", + "type": "address", + "internalType": "address" + } + ] + }, + { + "type": "error", + "name": "ERC1967NonPayable", + "inputs": [] + }, + { + "type": "error", + "name": "FailedInnerCall", + "inputs": [] + }, + { + "type": "error", + "name": "InvalidInitialization", + "inputs": [] + }, + { + "type": "error", + "name": "NotFoundationTreasury", + "inputs": [] + }, + { + "type": "error", + "name": "NotInitializing", + "inputs": [] + }, + { + "type": "error", + "name": "UUPSUnauthorizedCallContext", + "inputs": [] + }, + { + "type": "error", + "name": "UUPSUnsupportedProxiableUUID", + "inputs": [ + { + "name": "slot", + "type": "bytes32", + "internalType": "bytes32" + } + ] + } + ], + "address": "0xB9EAe28b7b0B9e8793F4A78Dddd317596E94fc49", + "args": [], + "bytecode": "0x60a06040523060805234801561001457600080fd5b5061001d610022565b6100d4565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805468010000000000000000900460ff16156100725760405163f92ee8a960e01b815260040160405180910390fd5b80546001600160401b03908116146100d15780546001600160401b0319166001600160401b0390811782556040519081527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b50565b60805161144b6100fd60003960008181610b3f01528181610b680152610e05015261144b6000f3fe6080604052600436106100ec5760003560e01c806352d1902d1161008a578063ad3cb1cc11610059578063ad3cb1cc1461021c578063c4d66de814610272578063d2e6d1c314610292578063f7c618c1146102bf57600080fd5b806352d1902d146101e1578063583ee7ec146101f657806379b45cdd1461020c578063a1cd24341461021457600080fd5b806327fb339f116100c657806327fb339f14610140578063432f9ba31461015357806345fbf0601461017c5780634f1ef286146101ce57600080fd5b806305dc2a80146100f857806319958e301461011a5780631eba00d81461012d57600080fd5b366100f357005b600080fd5b34801561010457600080fd5b50610118610113366004611205565b6102ec565b005b610118610128366004611222565b61043f565b61011861013b366004611222565b610562565b61011861014e366004611222565b6105ee565b34801561015f57600080fd5b5061016960365481565b6040519081526020015b60405180910390f35b34801561018857600080fd5b506034546101a99073ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff9091168152602001610173565b6101186101dc366004611273565b61067d565b3480156101ed57600080fd5b50610169610698565b34801561020257600080fd5b5061016960355481565b6101186106c7565b6101186107ec565b34801561022857600080fd5b506102656040518060400160405280600581526020017f352e302e3000000000000000000000000000000000000000000000000000000081525081565b6040516101739190611379565b34801561027e57600080fd5b5061011861028d366004611205565b61087d565b34801561029e57600080fd5b506000546101a99073ffffffffffffffffffffffffffffffffffffffff1681565b3480156102cb57600080fd5b506033546101a99073ffffffffffffffffffffffffffffffffffffffff1681565b60345473ffffffffffffffffffffffffffffffffffffffff161561033c576040517f308c2e5900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b603480547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff8316908117909155604080517ff7c618c1000000000000000000000000000000000000000000000000000000008152905163f7c618c1916004808201926020929091908290030181865afa1580156103d3573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906103f791906113ca565b603380547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff9290921691909117905550565b6000546040517fe053dd6100000000000000000000000000000000000000000000000000000000815233600482015273ffffffffffffffffffffffffffffffffffffffff9091169063e053dd619060240160006040518083038186803b1580156104a857600080fd5b505afa1580156104bc573d6000803e3d6000fd5b505050506104ca82826109fd565b603460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663d83623dd6040518163ffffffff1660e01b81526004016020604051808303816000875af1158015610539573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061055d91906113e7565b505050565b6000546040517fe053dd6100000000000000000000000000000000000000000000000000000000815233600482015273ffffffffffffffffffffffffffffffffffffffff9091169063e053dd619060240160006040518083038186803b1580156105cb57600080fd5b505afa1580156105df573d6000803e3d6000fd5b50505060359290925560365550565b6000546040517fe053dd6100000000000000000000000000000000000000000000000000000000815233600482015273ffffffffffffffffffffffffffffffffffffffff9091169063e053dd619060240160006040518083038186803b15801561065757600080fd5b505afa15801561066b573d6000803e3d6000fd5b5050505061067982826109fd565b5050565b610685610b27565b61068e82610c2b565b6106798282610caf565b60006106a2610ded565b507f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc90565b6000546040517fe053dd6100000000000000000000000000000000000000000000000000000000815233600482015273ffffffffffffffffffffffffffffffffffffffff9091169063e053dd619060240160006040518083038186803b15801561073057600080fd5b505afa158015610744573d6000803e3d6000fd5b505050506107566035546036546109fd565b603460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663d83623dd6040518163ffffffff1660e01b81526004016020604051808303816000875af11580156107c5573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906107e991906113e7565b50565b6000546040517fe053dd6100000000000000000000000000000000000000000000000000000000815233600482015273ffffffffffffffffffffffffffffffffffffffff9091169063e053dd619060240160006040518083038186803b15801561085557600080fd5b505afa158015610869573d6000803e3d6000fd5b5050505061087b6035546036546109fd565b565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805468010000000000000000810460ff16159067ffffffffffffffff166000811580156108c85750825b905060008267ffffffffffffffff1660011480156108e55750303b155b9050811580156108f3575080155b1561092a576040517ff92ee8a900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b84547fffffffffffffffffffffffffffffffffffffffffffffffff0000000000000000166001178555831561098b5784547fffffffffffffffffffffffffffffffffffffffffffffff00ffffffffffffffff16680100000000000000001785555b61099486610e5c565b83156109f55784547fffffffffffffffffffffffffffffffffffffffffffffff00ffffffffffffffff168555604051600181527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b505050505050565b6033546034546040517f095ea7b300000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff91821660048201526024810185905291169063095ea7b3906044016020604051808303816000875af1158015610a78573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a9c91906113e7565b506034546040517f3c6b16ab0000000000000000000000000000000000000000000000000000000081526004810184905273ffffffffffffffffffffffffffffffffffffffff90911690633c6b16ab9083906024016000604051808303818588803b158015610b0a57600080fd5b505af1158015610b1e573d6000803e3d6000fd5b50505050505050565b3073ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000161480610bf457507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16610bdb7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5473ffffffffffffffffffffffffffffffffffffffff1690565b73ffffffffffffffffffffffffffffffffffffffff1614155b1561087b576040517fe07c8dba00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000546040517feb6f7abf00000000000000000000000000000000000000000000000000000000815233600482015273ffffffffffffffffffffffffffffffffffffffff9091169063eb6f7abf9060240160006040518083038186803b158015610c9457600080fd5b505afa158015610ca8573d6000803e3d6000fd5b5050505050565b8173ffffffffffffffffffffffffffffffffffffffff166352d1902d6040518163ffffffff1660e01b8152600401602060405180830381865afa925050508015610d34575060408051601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0168201909252610d3191810190611409565b60015b610d87576040517f4c9c8ce300000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff831660048201526024015b60405180910390fd5b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc8114610de3576040517faa1d49a400000000000000000000000000000000000000000000000000000000815260048101829052602401610d7e565b61055d8383610eb3565b3073ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000161461087b576040517fe07c8dba00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610e64610f16565b610e6c610f7d565b600080547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff92909216919091179055565b610ebc82610f85565b60405173ffffffffffffffffffffffffffffffffffffffff8316907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a2805115610f0e5761055d8282611054565b6106796110d7565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a005468010000000000000000900460ff1661087b576040517fd7e6bcf800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61087b610f16565b8073ffffffffffffffffffffffffffffffffffffffff163b600003610fee576040517f4c9c8ce300000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff82166004820152602401610d7e565b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc80547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff92909216919091179055565b60606000808473ffffffffffffffffffffffffffffffffffffffff168460405161107e9190611422565b600060405180830381855af49150503d80600081146110b9576040519150601f19603f3d011682016040523d82523d6000602084013e6110be565b606091505b50915091506110ce85838361110f565b95945050505050565b341561087b576040517fb398979f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6060826111245761111f826111a1565b61119a565b8151158015611148575073ffffffffffffffffffffffffffffffffffffffff84163b155b15611197576040517f9996b31500000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff85166004820152602401610d7e565b50805b9392505050565b8051156111b15780518082602001fd5b6040517f1425ea4200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff811681146107e957600080fd5b60006020828403121561121757600080fd5b813561119a816111e3565b6000806040838503121561123557600080fd5b50508035926020909101359150565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6000806040838503121561128657600080fd5b8235611291816111e3565b9150602083013567ffffffffffffffff808211156112ae57600080fd5b818501915085601f8301126112c257600080fd5b8135818111156112d4576112d4611244565b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0908116603f0116810190838211818310171561131a5761131a611244565b8160405282815288602084870101111561133357600080fd5b8260208601602083013760006020848301015280955050505050509250929050565b60005b83811015611370578181015183820152602001611358565b50506000910152565b6020815260008251806020840152611398816040850160208701611355565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169190910160400192915050565b6000602082840312156113dc57600080fd5b815161119a816111e3565b6000602082840312156113f957600080fd5b8151801515811461119a57600080fd5b60006020828403121561141b57600080fd5b5051919050565b60008251611434818460208701611355565b919091019291505056fea164736f6c6343000814000a", + "deployedBytecode": "0x6080604052600436106100ec5760003560e01c806352d1902d1161008a578063ad3cb1cc11610059578063ad3cb1cc1461021c578063c4d66de814610272578063d2e6d1c314610292578063f7c618c1146102bf57600080fd5b806352d1902d146101e1578063583ee7ec146101f657806379b45cdd1461020c578063a1cd24341461021457600080fd5b806327fb339f116100c657806327fb339f14610140578063432f9ba31461015357806345fbf0601461017c5780634f1ef286146101ce57600080fd5b806305dc2a80146100f857806319958e301461011a5780631eba00d81461012d57600080fd5b366100f357005b600080fd5b34801561010457600080fd5b50610118610113366004611205565b6102ec565b005b610118610128366004611222565b61043f565b61011861013b366004611222565b610562565b61011861014e366004611222565b6105ee565b34801561015f57600080fd5b5061016960365481565b6040519081526020015b60405180910390f35b34801561018857600080fd5b506034546101a99073ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff9091168152602001610173565b6101186101dc366004611273565b61067d565b3480156101ed57600080fd5b50610169610698565b34801561020257600080fd5b5061016960355481565b6101186106c7565b6101186107ec565b34801561022857600080fd5b506102656040518060400160405280600581526020017f352e302e3000000000000000000000000000000000000000000000000000000081525081565b6040516101739190611379565b34801561027e57600080fd5b5061011861028d366004611205565b61087d565b34801561029e57600080fd5b506000546101a99073ffffffffffffffffffffffffffffffffffffffff1681565b3480156102cb57600080fd5b506033546101a99073ffffffffffffffffffffffffffffffffffffffff1681565b60345473ffffffffffffffffffffffffffffffffffffffff161561033c576040517f308c2e5900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b603480547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff8316908117909155604080517ff7c618c1000000000000000000000000000000000000000000000000000000008152905163f7c618c1916004808201926020929091908290030181865afa1580156103d3573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906103f791906113ca565b603380547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff9290921691909117905550565b6000546040517fe053dd6100000000000000000000000000000000000000000000000000000000815233600482015273ffffffffffffffffffffffffffffffffffffffff9091169063e053dd619060240160006040518083038186803b1580156104a857600080fd5b505afa1580156104bc573d6000803e3d6000fd5b505050506104ca82826109fd565b603460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663d83623dd6040518163ffffffff1660e01b81526004016020604051808303816000875af1158015610539573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061055d91906113e7565b505050565b6000546040517fe053dd6100000000000000000000000000000000000000000000000000000000815233600482015273ffffffffffffffffffffffffffffffffffffffff9091169063e053dd619060240160006040518083038186803b1580156105cb57600080fd5b505afa1580156105df573d6000803e3d6000fd5b50505060359290925560365550565b6000546040517fe053dd6100000000000000000000000000000000000000000000000000000000815233600482015273ffffffffffffffffffffffffffffffffffffffff9091169063e053dd619060240160006040518083038186803b15801561065757600080fd5b505afa15801561066b573d6000803e3d6000fd5b5050505061067982826109fd565b5050565b610685610b27565b61068e82610c2b565b6106798282610caf565b60006106a2610ded565b507f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc90565b6000546040517fe053dd6100000000000000000000000000000000000000000000000000000000815233600482015273ffffffffffffffffffffffffffffffffffffffff9091169063e053dd619060240160006040518083038186803b15801561073057600080fd5b505afa158015610744573d6000803e3d6000fd5b505050506107566035546036546109fd565b603460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663d83623dd6040518163ffffffff1660e01b81526004016020604051808303816000875af11580156107c5573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906107e991906113e7565b50565b6000546040517fe053dd6100000000000000000000000000000000000000000000000000000000815233600482015273ffffffffffffffffffffffffffffffffffffffff9091169063e053dd619060240160006040518083038186803b15801561085557600080fd5b505afa158015610869573d6000803e3d6000fd5b5050505061087b6035546036546109fd565b565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805468010000000000000000810460ff16159067ffffffffffffffff166000811580156108c85750825b905060008267ffffffffffffffff1660011480156108e55750303b155b9050811580156108f3575080155b1561092a576040517ff92ee8a900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b84547fffffffffffffffffffffffffffffffffffffffffffffffff0000000000000000166001178555831561098b5784547fffffffffffffffffffffffffffffffffffffffffffffff00ffffffffffffffff16680100000000000000001785555b61099486610e5c565b83156109f55784547fffffffffffffffffffffffffffffffffffffffffffffff00ffffffffffffffff168555604051600181527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b505050505050565b6033546034546040517f095ea7b300000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff91821660048201526024810185905291169063095ea7b3906044016020604051808303816000875af1158015610a78573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a9c91906113e7565b506034546040517f3c6b16ab0000000000000000000000000000000000000000000000000000000081526004810184905273ffffffffffffffffffffffffffffffffffffffff90911690633c6b16ab9083906024016000604051808303818588803b158015610b0a57600080fd5b505af1158015610b1e573d6000803e3d6000fd5b50505050505050565b3073ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000161480610bf457507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16610bdb7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5473ffffffffffffffffffffffffffffffffffffffff1690565b73ffffffffffffffffffffffffffffffffffffffff1614155b1561087b576040517fe07c8dba00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000546040517feb6f7abf00000000000000000000000000000000000000000000000000000000815233600482015273ffffffffffffffffffffffffffffffffffffffff9091169063eb6f7abf9060240160006040518083038186803b158015610c9457600080fd5b505afa158015610ca8573d6000803e3d6000fd5b5050505050565b8173ffffffffffffffffffffffffffffffffffffffff166352d1902d6040518163ffffffff1660e01b8152600401602060405180830381865afa925050508015610d34575060408051601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0168201909252610d3191810190611409565b60015b610d87576040517f4c9c8ce300000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff831660048201526024015b60405180910390fd5b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc8114610de3576040517faa1d49a400000000000000000000000000000000000000000000000000000000815260048101829052602401610d7e565b61055d8383610eb3565b3073ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000161461087b576040517fe07c8dba00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610e64610f16565b610e6c610f7d565b600080547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff92909216919091179055565b610ebc82610f85565b60405173ffffffffffffffffffffffffffffffffffffffff8316907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a2805115610f0e5761055d8282611054565b6106796110d7565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a005468010000000000000000900460ff1661087b576040517fd7e6bcf800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61087b610f16565b8073ffffffffffffffffffffffffffffffffffffffff163b600003610fee576040517f4c9c8ce300000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff82166004820152602401610d7e565b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc80547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff92909216919091179055565b60606000808473ffffffffffffffffffffffffffffffffffffffff168460405161107e9190611422565b600060405180830381855af49150503d80600081146110b9576040519150601f19603f3d011682016040523d82523d6000602084013e6110be565b606091505b50915091506110ce85838361110f565b95945050505050565b341561087b576040517fb398979f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6060826111245761111f826111a1565b61119a565b8151158015611148575073ffffffffffffffffffffffffffffffffffffffff84163b155b15611197576040517f9996b31500000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff85166004820152602401610d7e565b50805b9392505050565b8051156111b15780518082602001fd5b6040517f1425ea4200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff811681146107e957600080fd5b60006020828403121561121757600080fd5b813561119a816111e3565b6000806040838503121561123557600080fd5b50508035926020909101359150565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6000806040838503121561128657600080fd5b8235611291816111e3565b9150602083013567ffffffffffffffff808211156112ae57600080fd5b818501915085601f8301126112c257600080fd5b8135818111156112d4576112d4611244565b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0908116603f0116810190838211818310171561131a5761131a611244565b8160405282815288602084870101111561133357600080fd5b8260208601602083013760006020848301015280955050505050509250929050565b60005b83811015611370578181015183820152602001611358565b50506000910152565b6020815260008251806020840152611398816040850160208701611355565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169190910160400192915050565b6000602082840312156113dc57600080fd5b815161119a816111e3565b6000602082840312156113f957600080fd5b8151801515811461119a57600080fd5b60006020828403121561141b57600080fd5b5051919050565b60008251611434818460208701611355565b919091019291505056fea164736f6c6343000814000a", + "devdoc": { + "version": 1, + "kind": "dev", + "methods": { + "constructor": {}, + "initialize(address)": { + "details": "initializeCollectiveRewardsAddresses() must be called ASAP after this initialization", + "params": { + "governanceManager_": "contract with permissioned roles" + } + }, + "initializeCollectiveRewardsAddresses(address)": { + "details": "used to solve circular dependency, backersManager is initialized with this contract address it must be called ASAP after the initialize.", + "params": { + "backersManager_": "BackersManagerRootstockCollective contract address" + } + }, + "proxiableUUID()": { + "details": "Implementation of the ERC1822 {proxiableUUID} function. This returns the storage slot used by the implementation. It is used to validate the implementation's compatibility when performing an upgrade. IMPORTANT: A proxy pointing at a proxiable contract should not be considered proxiable itself, because this risks bricking a proxy that upgrades to it, by delegating to itself until out of gas. Thus it is critical that this function revert if invoked through a proxy. This is guaranteed by the `notDelegated` modifier." + }, + "sendRewards(uint256,uint256)": { + "details": "reverts if is not called by foundation treasury address reverts if rewards balance is insufficient", + "params": { + "amountCoinbase_": "amount of Coinbase reward token to send", + "amountERC20_": "amount of ERC20 reward token to send" + } + }, + "sendRewardsAndStartDistribution(uint256,uint256)": { + "details": "reverts if is not called by foundation treasury address reverts if rewards balance is insufficient reverts if is not in the distribution window", + "params": { + "amountCoinbase_": "amount of Coinbase reward token to send", + "amountERC20_": "amount of ERC20 reward token to send" + } + }, + "sendRewardsAndStartDistributionWithDefaultAmount()": { + "details": "reverts if is not called by foundation treasury address" + }, + "sendRewardsWithDefaultAmount()": { + "details": "reverts if is not called by foundation treasury address" + }, + "setDefaultRewardAmount(uint256,uint256)": { + "details": "reverts if is not called by foundation treasury address", + "params": { + "coinbaseAmount_": "default amount of Coinbase reward token to send", + "tokenAmount_": "default amount of ERC20 reward token to send" + } + }, + "upgradeToAndCall(address,bytes)": { + "details": "Upgrade the implementation of the proxy to `newImplementation`, and subsequently execute the function call encoded in `data`. Calls {_authorizeUpgrade}. Emits an {Upgraded} event." + } + }, + "events": { + "Initialized(uint64)": { + "details": "Triggered when the contract has been initialized or reinitialized." + }, + "Upgraded(address)": { + "details": "Emitted when the implementation is upgraded." + } + }, + "errors": { + "AddressEmptyCode(address)": [ + { + "details": "There's no code at `target` (it is not a contract)." + } + ], + "ERC1967InvalidImplementation(address)": [ + { + "details": "The `implementation` of the proxy is invalid." + } + ], + "ERC1967NonPayable()": [ + { + "details": "An upgrade function sees `msg.value > 0` that may be lost." + } + ], + "FailedInnerCall()": [ + { + "details": "A call to an address target failed. The target may have reverted." + } + ], + "InvalidInitialization()": [ + { + "details": "The contract is already initialized." + } + ], + "NotInitializing()": [ + { + "details": "The contract is not initializing." + } + ], + "UUPSUnauthorizedCallContext()": [ + { + "details": "The call is from an unauthorized context." + } + ], + "UUPSUnsupportedProxiableUUID(bytes32)": [ + { + "details": "The storage `slot` is unsupported as a UUID." + } + ] + }, + "title": "RewardDistributorRootstockCollective" + }, + "metadata": "{\"compiler\":{\"version\":\"0.8.20+commit.a1b79de6\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"target\",\"type\":\"address\"}],\"type\":\"error\",\"name\":\"AddressEmptyCode\"},{\"inputs\":[],\"type\":\"error\",\"name\":\"CollectiveRewardsAddressesAlreadyInitialized\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"implementation\",\"type\":\"address\"}],\"type\":\"error\",\"name\":\"ERC1967InvalidImplementation\"},{\"inputs\":[],\"type\":\"error\",\"name\":\"ERC1967NonPayable\"},{\"inputs\":[],\"type\":\"error\",\"name\":\"FailedInnerCall\"},{\"inputs\":[],\"type\":\"error\",\"name\":\"InvalidInitialization\"},{\"inputs\":[],\"type\":\"error\",\"name\":\"NotFoundationTreasury\"},{\"inputs\":[],\"type\":\"error\",\"name\":\"NotInitializing\"},{\"inputs\":[],\"type\":\"error\",\"name\":\"UUPSUnauthorizedCallContext\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"slot\",\"type\":\"bytes32\"}],\"type\":\"error\",\"name\":\"UUPSUnsupportedProxiableUUID\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"version\",\"type\":\"uint64\",\"indexed\":false}],\"type\":\"event\",\"name\":\"Initialized\",\"anonymous\":false},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"implementation\",\"type\":\"address\",\"indexed\":true}],\"type\":\"event\",\"name\":\"Upgraded\",\"anonymous\":false},{\"inputs\":[],\"stateMutability\":\"view\",\"type\":\"function\",\"name\":\"UPGRADE_INTERFACE_VERSION\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}]},{\"inputs\":[],\"stateMutability\":\"view\",\"type\":\"function\",\"name\":\"backersManager\",\"outputs\":[{\"internalType\":\"contract BackersManagerRootstockCollective\",\"name\":\"\",\"type\":\"address\"}]},{\"inputs\":[],\"stateMutability\":\"view\",\"type\":\"function\",\"name\":\"defaultRewardCoinbaseAmount\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}]},{\"inputs\":[],\"stateMutability\":\"view\",\"type\":\"function\",\"name\":\"defaultRewardTokenAmount\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}]},{\"inputs\":[],\"stateMutability\":\"view\",\"type\":\"function\",\"name\":\"governanceManager\",\"outputs\":[{\"internalType\":\"contract IGovernanceManagerRootstockCollective\",\"name\":\"\",\"type\":\"address\"}]},{\"inputs\":[{\"internalType\":\"contract IGovernanceManagerRootstockCollective\",\"name\":\"governanceManager_\",\"type\":\"address\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\",\"name\":\"initialize\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"backersManager_\",\"type\":\"address\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\",\"name\":\"initializeCollectiveRewardsAddresses\"},{\"inputs\":[],\"stateMutability\":\"view\",\"type\":\"function\",\"name\":\"proxiableUUID\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}]},{\"inputs\":[],\"stateMutability\":\"view\",\"type\":\"function\",\"name\":\"rewardToken\",\"outputs\":[{\"internalType\":\"contract IERC20\",\"name\":\"\",\"type\":\"address\"}]},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"amountERC20_\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"amountCoinbase_\",\"type\":\"uint256\"}],\"stateMutability\":\"payable\",\"type\":\"function\",\"name\":\"sendRewards\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"amountERC20_\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"amountCoinbase_\",\"type\":\"uint256\"}],\"stateMutability\":\"payable\",\"type\":\"function\",\"name\":\"sendRewardsAndStartDistribution\"},{\"inputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\",\"name\":\"sendRewardsAndStartDistributionWithDefaultAmount\"},{\"inputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\",\"name\":\"sendRewardsWithDefaultAmount\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"tokenAmount_\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"coinbaseAmount_\",\"type\":\"uint256\"}],\"stateMutability\":\"payable\",\"type\":\"function\",\"name\":\"setDefaultRewardAmount\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newImplementation\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"}],\"stateMutability\":\"payable\",\"type\":\"function\",\"name\":\"upgradeToAndCall\"},{\"inputs\":[],\"stateMutability\":\"payable\",\"type\":\"receive\"}],\"devdoc\":{\"kind\":\"dev\",\"methods\":{\"constructor\":{\"custom:oz-upgrades-unsafe-allow\":\"constructor\"},\"initialize(address)\":{\"details\":\"initializeCollectiveRewardsAddresses() must be called ASAP after this initialization\",\"params\":{\"governanceManager_\":\"contract with permissioned roles\"}},\"initializeCollectiveRewardsAddresses(address)\":{\"details\":\"used to solve circular dependency, backersManager is initialized with this contract address it must be called ASAP after the initialize.\",\"params\":{\"backersManager_\":\"BackersManagerRootstockCollective contract address\"}},\"proxiableUUID()\":{\"details\":\"Implementation of the ERC1822 {proxiableUUID} function. This returns the storage slot used by the implementation. It is used to validate the implementation's compatibility when performing an upgrade. IMPORTANT: A proxy pointing at a proxiable contract should not be considered proxiable itself, because this risks bricking a proxy that upgrades to it, by delegating to itself until out of gas. Thus it is critical that this function revert if invoked through a proxy. This is guaranteed by the `notDelegated` modifier.\"},\"sendRewards(uint256,uint256)\":{\"details\":\"reverts if is not called by foundation treasury address reverts if rewards balance is insufficient\",\"params\":{\"amountCoinbase_\":\"amount of Coinbase reward token to send\",\"amountERC20_\":\"amount of ERC20 reward token to send\"}},\"sendRewardsAndStartDistribution(uint256,uint256)\":{\"details\":\"reverts if is not called by foundation treasury address reverts if rewards balance is insufficient reverts if is not in the distribution window\",\"params\":{\"amountCoinbase_\":\"amount of Coinbase reward token to send\",\"amountERC20_\":\"amount of ERC20 reward token to send\"}},\"sendRewardsAndStartDistributionWithDefaultAmount()\":{\"details\":\"reverts if is not called by foundation treasury address\"},\"sendRewardsWithDefaultAmount()\":{\"details\":\"reverts if is not called by foundation treasury address\"},\"setDefaultRewardAmount(uint256,uint256)\":{\"details\":\"reverts if is not called by foundation treasury address\",\"params\":{\"coinbaseAmount_\":\"default amount of Coinbase reward token to send\",\"tokenAmount_\":\"default amount of ERC20 reward token to send\"}},\"upgradeToAndCall(address,bytes)\":{\"custom:oz-upgrades-unsafe-allow-reachable\":\"delegatecall\",\"details\":\"Upgrade the implementation of the proxy to `newImplementation`, and subsequently execute the function call encoded in `data`. Calls {_authorizeUpgrade}. Emits an {Upgraded} event.\"}},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{\"backersManager()\":{\"notice\":\"BackersManagerRootstockCollective contract address\"},\"defaultRewardCoinbaseAmount()\":{\"notice\":\"default reward coinbase amount\"},\"defaultRewardTokenAmount()\":{\"notice\":\"default reward token amount\"},\"initialize(address)\":{\"notice\":\"contract initializer\"},\"initializeCollectiveRewardsAddresses(address)\":{\"notice\":\"CollectiveRewards addresses initializer\"},\"rewardToken()\":{\"notice\":\"address of the token rewarded to builder and backers\"},\"sendRewards(uint256,uint256)\":{\"notice\":\"sends rewards to backersManager contract to be distributed to the gauges\"},\"sendRewardsAndStartDistribution(uint256,uint256)\":{\"notice\":\"sends rewards to backersManager contract and starts the distribution to the gauges\"},\"sendRewardsAndStartDistributionWithDefaultAmount()\":{\"notice\":\"sends rewards to backersManager contract with default amounts and starts the distribution\"},\"sendRewardsWithDefaultAmount()\":{\"notice\":\"sends rewards to backersManager contract with default amounts\"},\"setDefaultRewardAmount(uint256,uint256)\":{\"notice\":\"sets the default reward amounts\"}},\"version\":1}},\"settings\":{\"remappings\":[\"@openzeppelin/contracts-upgradeable/=node_modules/@openzeppelin/contracts-upgradeable/\",\"@openzeppelin/contracts/=node_modules/@openzeppelin/contracts/\",\"eth-gas-reporter/=node_modules/eth-gas-reporter/\",\"forge-std/=node_modules/forge-std/\",\"hardhat/=node_modules/hardhat/\"],\"optimizer\":{\"enabled\":true,\"runs\":10000},\"metadata\":{\"bytecodeHash\":\"none\"},\"compilationTarget\":{\"src/RewardDistributorRootstockCollective.sol\":\"RewardDistributorRootstockCollective\"},\"evmVersion\":\"london\",\"libraries\":{}},\"sources\":{\"node_modules/@openzeppelin/contracts-upgradeable/proxy/utils/Initializable.sol\":{\"keccak256\":\"0x631188737069917d2f909d29ce62c4d48611d326686ba6683e26b72a23bfac0b\",\"urls\":[\"bzz-raw://7a61054ae84cd6c4d04c0c4450ba1d6de41e27e0a2c4f1bcdf58f796b401c609\",\"dweb:/ipfs/QmUvtdp7X1mRVyC3CsHrtPbgoqWaXHp3S1ZR24tpAQYJWM\"],\"license\":\"MIT\"},\"node_modules/@openzeppelin/contracts-upgradeable/proxy/utils/UUPSUpgradeable.sol\":{\"keccak256\":\"0x3f13b947637c4969c0644cab4ef399cdc4b67f101463b8775c5a43b118558e53\",\"urls\":[\"bzz-raw://c6683e6ade6985d394d32baaef5eea0d8b9ff0b3eca86ae413d6cdde114a9930\",\"dweb:/ipfs/QmdBE8T1BTddZxpdECMsb3KiCFyjNWmxcCddYrWFTXmWPj\"],\"license\":\"MIT\"},\"node_modules/@openzeppelin/contracts-upgradeable/utils/ReentrancyGuardUpgradeable.sol\":{\"keccak256\":\"0xb44e086e941292cdc7f440de51478493894ef0b1aeccb0c4047445919f667f74\",\"urls\":[\"bzz-raw://942dad22fbdc1669f025540ba63aa3ccfad5f8458fc5d4525b31ebf272e7af45\",\"dweb:/ipfs/Qmdo4X2M82aM3AMoW2kf2jhYkSCyC4T1pHNd6obdsDFnAB\"],\"license\":\"MIT\"},\"node_modules/@openzeppelin/contracts-upgradeable/utils/introspection/ERC165Upgradeable.sol\":{\"keccak256\":\"0xdaba3f7c42c55b2896353f32bd27d4d5f8bae741b3b05d4c53f67abc4dc47ce8\",\"urls\":[\"bzz-raw://1fa2e61141c602510bcd2cd936ed9561922ac8772a9b9c9a9db091a74e354a45\",\"dweb:/ipfs/QmcHQDDoEBwJmwUbzoVkytvJsBx3KVHYFFnDkvRGWh9Wmh\"],\"license\":\"MIT\"},\"node_modules/@openzeppelin/contracts/interfaces/draft-IERC1822.sol\":{\"keccak256\":\"0x2a1f9944df2015c081d89cd41ba22ffaf10aa6285969f0dc612b235cc448999c\",\"urls\":[\"bzz-raw://ef381843676aec64421200ee85eaa0b1356a35f28b9fc67e746a6bbb832077d9\",\"dweb:/ipfs/QmY8aorMYA2TeTCnu6ejDjzb4rW4t7TCtW4GZ6LoxTFm7v\"],\"license\":\"MIT\"},\"node_modules/@openzeppelin/contracts/proxy/ERC1967/ERC1967Utils.sol\":{\"keccak256\":\"0x06a78f9b3ee3e6d0eb4e4cd635ba49960bea34cac1db8c0a27c75f2319f1fd65\",\"urls\":[\"bzz-raw://547d21aa17f4f3f1a1a7edf7167beff8dd9496a0348d5588f15cc8a4b29d052a\",\"dweb:/ipfs/QmT16JtRQSWNpLo9W23jr6CzaMuTAcQcjJJcdRd8HLJ6cE\"],\"license\":\"MIT\"},\"node_modules/@openzeppelin/contracts/proxy/Proxy.sol\":{\"keccak256\":\"0xc3f2ec76a3de8ed7a7007c46166f5550c72c7709e3fc7e8bb3111a7191cdedbd\",\"urls\":[\"bzz-raw://e73efb4c2ca655882dc237c6b4f234a9bd36d97159d8fcaa837eb01171f726ac\",\"dweb:/ipfs/QmTNnnv7Gu5fs5G1ZMh7Fexp8N4XUs3XrNAngjcxgiss3e\"],\"license\":\"MIT\"},\"node_modules/@openzeppelin/contracts/proxy/beacon/BeaconProxy.sol\":{\"keccak256\":\"0x387ebdcb365b8e620f26645d2b34a161cd39eedfb0219e8baff55630c5ae113c\",\"urls\":[\"bzz-raw://744ea187c195e31cb9201e63ca291fca9e623747f54f0ba390b366a6213b8964\",\"dweb:/ipfs/Qmc547qfV4sz65DC9B4okx1HvgxwUzJR7zTfKKbTzL3UQT\"],\"license\":\"MIT\"},\"node_modules/@openzeppelin/contracts/proxy/beacon/IBeacon.sol\":{\"keccak256\":\"0xc59a78b07b44b2cf2e8ab4175fca91e8eca1eee2df7357b8d2a8833e5ea1f64c\",\"urls\":[\"bzz-raw://5aa4f07e65444784c29cd7bfcc2341b34381e4e5b5da9f0c5bd00d7f430e66fa\",\"dweb:/ipfs/QmWRMh4Q9DpaU9GvsiXmDdoNYMyyece9if7hnfLz7uqzWM\"],\"license\":\"MIT\"},\"node_modules/@openzeppelin/contracts/token/ERC20/IERC20.sol\":{\"keccak256\":\"0xc6a8ff0ea489379b61faa647490411b80102578440ab9d84e9a957cc12164e70\",\"urls\":[\"bzz-raw://0ea104e577e63faea3b69c415637e99e755dcbf64c5833d7140c35a714d6d90c\",\"dweb:/ipfs/Qmau6x4Ns9XdyynRCNNp3RhLqijJjFm7z5fyZazfYFGYdq\"],\"license\":\"MIT\"},\"node_modules/@openzeppelin/contracts/token/ERC20/extensions/IERC20Permit.sol\":{\"keccak256\":\"0x6008dabfe393240d73d7dd7688033f72740d570aa422254d29a7dce8568f3aff\",\"urls\":[\"bzz-raw://f5196ec75139918c6c7bb4251b36395e668f1fa6d206beba7e7520e74913940d\",\"dweb:/ipfs/QmSyqjksXxmm2mCG6qRd1yuwLykypkSVBbnBnGqJRcuJMi\"],\"license\":\"MIT\"},\"node_modules/@openzeppelin/contracts/token/ERC20/utils/SafeERC20.sol\":{\"keccak256\":\"0x37bb49513c49c87c4642a891b13b63571bc87013dde806617aa1efb54605f386\",\"urls\":[\"bzz-raw://b3036b3a83b7c48f96641f2a9002b9f2dcb6a5958dd670894ada21ae8229b3d0\",\"dweb:/ipfs/QmUNfSBdoVtjhETaUJCYcaC7pTMgbhht926tJ2uXJbiVd3\"],\"license\":\"MIT\"},\"node_modules/@openzeppelin/contracts/utils/Address.sol\":{\"keccak256\":\"0xaf28a975a78550e45f65e559a3ad6a5ad43b9b8a37366999abd1b7084eb70721\",\"urls\":[\"bzz-raw://b7bd24e224f67f65bfadf85dc2929fa965456bb2415478bd0125471b5ce35245\",\"dweb:/ipfs/QmRaydGr8BTHs1kvaZfsNU69pKzUAGFrvABn1KiRSbE51y\"],\"license\":\"MIT\"},\"node_modules/@openzeppelin/contracts/utils/StorageSlot.sol\":{\"keccak256\":\"0x32ba59b4b7299237c8ba56319110989d7978a039faf754793064e967e5894418\",\"urls\":[\"bzz-raw://1ae50c8b562427df610cc4540c9bf104acca7ef8e2dcae567ae7e52272281e9c\",\"dweb:/ipfs/QmTHiadFCSJUPpRjNegc5SahmeU8bAoY8i9Aq6tVscbcKR\"],\"license\":\"MIT\"},\"node_modules/@openzeppelin/contracts/utils/introspection/IERC165.sol\":{\"keccak256\":\"0x4296879f55019b23e135000eb36896057e7101fb7fb859c5ef690cf14643757b\",\"urls\":[\"bzz-raw://87b3541437c8c443ccd36795e56a338ed12855eec17f8da624511b8d1a7e14df\",\"dweb:/ipfs/QmeJQCtZrQjtJLr6u7ZHWeH3pBnjtLWzvRrKViAi7UZqxL\"],\"license\":\"MIT\"},\"node_modules/@openzeppelin/contracts/utils/math/Math.sol\":{\"keccak256\":\"0x005ec64c6313f0555d59e278f9a7a5ab2db5bdc72a027f255a37c327af1ec02d\",\"urls\":[\"bzz-raw://4ece9f0b9c8daca08c76b6b5405a6446b6f73b3a15fab7ff56e296cbd4a2c875\",\"dweb:/ipfs/QmQyRpyPRL5SQuAgj6SHmbir3foX65FJjbVTTQrA2EFg6L\"],\"license\":\"MIT\"},\"node_modules/@openzeppelin/contracts/utils/structs/EnumerableSet.sol\":{\"keccak256\":\"0x86c1470cbfd878491e5de030072b647352d36bd27122cffb928970b1945282aa\",\"urls\":[\"bzz-raw://ad85dd393ee0a1917c57046abc5155f51f77844b2c6a42c05c1b8dd26d6ff3c1\",\"dweb:/ipfs/QmNqYc8To2NdnpP6E1tGz7t6A7beuENde5yovwov5pW1fA\"],\"license\":\"MIT\"},\"src/BackersManagerRootstockCollective.sol\":{\"keccak256\":\"0x4bce92547845ef35a1b71fdfff864309938051142bd13fcc671785aad6dbc36b\",\"urls\":[\"bzz-raw://e21d16501b5cd62d1838223c2dcc2189e372e71096d4fa2977c5f9c62887a57c\",\"dweb:/ipfs/QmZdhG6Be7UTrKmDUXc8UxfCWH5ifXs9czSBPNrdC46ZGZ\"],\"license\":\"MIT\"},\"src/BuilderRegistryRootstockCollective.sol\":{\"keccak256\":\"0x73cac24bc0bc44d662b352480b1bd3c5e0b60a3aa3f01fcbb3b23e1c3e2e4cd2\",\"urls\":[\"bzz-raw://3ecf3584d6e6cb321ef7ebbafc9744d61a63f01866addd656f480968d7dc4be5\",\"dweb:/ipfs/QmPrjNKwfvmvQ8hnopYJEo5sn2z8aXtuuvXc2bhoxu3BVZ\"],\"license\":\"MIT\"},\"src/CycleTimeKeeperRootstockCollective.sol\":{\"keccak256\":\"0x111d42f321259b53ff1b11e65fde44d8b582a5801299a665c7c39a003a9e4bfd\",\"urls\":[\"bzz-raw://40fe5761b6948b9d89fc2977e246738466ca65f2718d3ead305de92fe4ac4e45\",\"dweb:/ipfs/QmNj27MbZSmGN8Wfre4dngJSbNb1ZBUZ3cHoVUMb6B2n9W\"],\"license\":\"MIT\"},\"src/RewardDistributorRootstockCollective.sol\":{\"keccak256\":\"0x6e1d2133177bb79e7a1d1f8271cb467a1920c675cd1fc28519c52436bdcc4ad1\",\"urls\":[\"bzz-raw://c39a3f8af4b3d3ebd2ac122d796408fa879b2ddccbf78fbb8913c9c3c051a754\",\"dweb:/ipfs/QmRmU9vqFAP184E5ZVQv19FuPnULgkMNeqzEKAaNZHUNon\"],\"license\":\"MIT\"},\"src/gauge/GaugeFactoryRootstockCollective.sol\":{\"keccak256\":\"0xbcf8f9f1038468632211aa7b936d63a35caa7e54f03793ba44f701b17e489a0d\",\"urls\":[\"bzz-raw://82beb9f7be678d3edb72cd181e198e00ead8c8383c36414ce0e388094272914b\",\"dweb:/ipfs/QmSmMx3RT4gjYRFggbEWAyDie5X4JLyBW3VgpHdRFcAmii\"],\"license\":\"MIT\"},\"src/gauge/GaugeRootstockCollective.sol\":{\"keccak256\":\"0xc938acb7b0a1fe48d81115d9c78554cf52578cfa079b7e2fa61ad6f7d938cfa5\",\"urls\":[\"bzz-raw://b0705939ef67abd05f05cd9c3f7d2d0f82c42048046c9daefc360d0d3335761d\",\"dweb:/ipfs/QmaPRBk5oeoQajXGLpCCq1B2BNRHbToSrD7a7ZbcqnhwKx\"],\"license\":\"MIT\"},\"src/governance/UpgradeableRootstockCollective.sol\":{\"keccak256\":\"0x22b56cfe51772a18fc6b7f4e64c53a2a9e73654826cfcb8b24e84c25058e2541\",\"urls\":[\"bzz-raw://57900df94f4b5b41038bb78594317680c8ea5ea74b2c5ca00875b3815b5e6dc5\",\"dweb:/ipfs/QmbANYcAgWYQ4Fthch7qeMCSXHQucRGPfVRjCTgUzcWTmL\"],\"license\":\"MIT\"},\"src/interfaces/IBackersManagerRootstockCollective.sol\":{\"keccak256\":\"0x7eacff4e2d906e1f38636bdc81646f213dc3820724b0bb4f61d2e105272f4087\",\"urls\":[\"bzz-raw://00e4ac507e8377040962f89fb774df725422c400114965eee8c45fcc401a7f87\",\"dweb:/ipfs/QmNsqV2naFxx8s6AG8YVDZqhvnUvXmnDZVhWH1WMsFesf6\"],\"license\":\"MIT\"},\"src/interfaces/IChangeContractRootstockCollective.sol\":{\"keccak256\":\"0x00fb3eb72286348dd06d581c5044cb045dfd3bd24725d05dd9c4b008567dd496\",\"urls\":[\"bzz-raw://7f4a03e06197ae7d6e478097afbbecf936ce7029ca49909a1fee0b4ba1b5b517\",\"dweb:/ipfs/QmfByMJ1SQAmcYkouS5WM3akMmSKU3MCyACpFmQwuFSYe9\"],\"license\":\"MIT\"},\"src/interfaces/ICollectiveRewardsCheckRootstockCollective.sol\":{\"keccak256\":\"0x3fa8e50c66e322c8023aed564a442404bdcb942ae1fe95fa60bf9982e8baf7ee\",\"urls\":[\"bzz-raw://df7c927919599e72f70fdcfaf5713d859f447d4258ea7a6ed8f9bcac851d3d72\",\"dweb:/ipfs/Qmb54kMmV1UD45oZntyxB7yWaUfKwMC136ftDHctVmNrge\"],\"license\":\"UNLICENSED\"},\"src/interfaces/IGovernanceManagerRootstockCollective.sol\":{\"keccak256\":\"0x1416991dd129bb36f43cc0854dfa824b5b85838e5c5018566b6cf78f527747e3\",\"urls\":[\"bzz-raw://8652a18ec39d5527fefb829eca619f4cf4bbec3ee4f6231e8888f1549feedd3d\",\"dweb:/ipfs/Qmczi6GipLy9B9TcDMx5UaZZPFBaMT2k49iYzQuLCFgnfS\"],\"license\":\"MIT\"},\"src/libraries/UtilsLib.sol\":{\"keccak256\":\"0x4660e2e62cb370b17052cd21238722bfe3cdaaf3f69cf4c9b2d87236070d12ac\",\"urls\":[\"bzz-raw://e8759237b67bb6e641c7a92eb0d94300770e32c25c2c5bf387bea2ea68513753\",\"dweb:/ipfs/QmbkRDUnzyL9QQbwJcFGd6kiERFFgxZgnxqsu14snpCvhp\"],\"license\":\"MIT\"}},\"version\":1}", + "numDeployments": 1, + "receipt": { + "transactionHash": "0xa43806a723f5b60f15242a9cf443ec79e3c4454e61d213965f4195b016013faa", + "transactionIndex": "0x7", + "blockHash": "0x1443c369bea56eb1861cdd046d78c8f783b13e99632004589c8cb625545e16eb", + "blockNumber": "0x6a2e72", + "from": "0xa3eda7A0b22d97DEFb7e223088F4c86a3Ce4B152", + "to": null, + "cumulativeGasUsed": "0x59f2df", + "gasUsed": "0x122af4", + "contractAddress": "0xB9EAe28b7b0B9e8793F4A78Dddd317596E94fc49", + "logs": [ + { + "address": "0xB9EAe28b7b0B9e8793F4A78Dddd317596E94fc49", + "topics": [ + "0xc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d2" + ], + "data": "0x000000000000000000000000000000000000000000000000ffffffffffffffff", + "blockHash": "0x1443c369bea56eb1861cdd046d78c8f783b13e99632004589c8cb625545e16eb", + "blockNumber": "0x6a2e72", + "transactionHash": "0xa43806a723f5b60f15242a9cf443ec79e3c4454e61d213965f4195b016013faa", + "transactionIndex": "0x7", + "logIndex": "0x0" + } + ], + "status": "0x1", + "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800000000000000000000000080000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000200000000004000000100000000000000000000000000000000000000000000000000000000000000000000000000000", + "type": "0x0" + }, + "solcInputHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "storageLayout": { + "storage": [ + { + "astId": 60228, + "contract": "src/RewardDistributorRootstockCollective.sol:RewardDistributorRootstockCollective", + "label": "governanceManager", + "offset": 0, + "slot": "0", + "type": "t_contract(IGovernanceManagerRootstockCollective)60552" + }, + { + "astId": 60260, + "contract": "src/RewardDistributorRootstockCollective.sol:RewardDistributorRootstockCollective", + "label": "__gap", + "offset": 0, + "slot": "1", + "type": "t_array(t_uint256)50_storage" + }, + { + "astId": 58142, + "contract": "src/RewardDistributorRootstockCollective.sol:RewardDistributorRootstockCollective", + "label": "rewardToken", + "offset": 0, + "slot": "51", + "type": "t_contract(IERC20)2025" + }, + { + "astId": 58146, + "contract": "src/RewardDistributorRootstockCollective.sol:RewardDistributorRootstockCollective", + "label": "backersManager", + "offset": 0, + "slot": "52", + "type": "t_contract(BackersManagerRootstockCollective)56052" + }, + { + "astId": 58149, + "contract": "src/RewardDistributorRootstockCollective.sol:RewardDistributorRootstockCollective", + "label": "defaultRewardTokenAmount", + "offset": 0, + "slot": "53", + "type": "t_uint256" + }, + { + "astId": 58152, + "contract": "src/RewardDistributorRootstockCollective.sol:RewardDistributorRootstockCollective", + "label": "defaultRewardCoinbaseAmount", + "offset": 0, + "slot": "54", + "type": "t_uint256" + }, + { + "astId": 58332, + "contract": "src/RewardDistributorRootstockCollective.sol:RewardDistributorRootstockCollective", + "label": "__gap", + "offset": 0, + "slot": "55", + "type": "t_array(t_uint256)50_storage" + } + ], + "types": { + "t_array(t_uint256)50_storage": { + "encoding": "inplace", + "label": "uint256[50]", + "numberOfBytes": "1600", + "base": "t_uint256" + }, + "t_contract(BackersManagerRootstockCollective)56052": { + "encoding": "inplace", + "label": "contract BackersManagerRootstockCollective", + "numberOfBytes": "20" + }, + "t_contract(IERC20)2025": { + "encoding": "inplace", + "label": "contract IERC20", + "numberOfBytes": "20" + }, + "t_contract(IGovernanceManagerRootstockCollective)60552": { + "encoding": "inplace", + "label": "contract IGovernanceManagerRootstockCollective", + "numberOfBytes": "20" + }, + "t_uint256": { + "encoding": "inplace", + "label": "uint256", + "numberOfBytes": "32" + } + } + }, + "transactionHash": "0xa43806a723f5b60f15242a9cf443ec79e3c4454e61d213965f4195b016013faa", + "userdoc": { + "version": 1, + "kind": "user", + "methods": { + "backersManager()": { + "notice": "BackersManagerRootstockCollective contract address" + }, + "defaultRewardCoinbaseAmount()": { + "notice": "default reward coinbase amount" + }, + "defaultRewardTokenAmount()": { + "notice": "default reward token amount" + }, + "initialize(address)": { + "notice": "contract initializer" + }, + "initializeCollectiveRewardsAddresses(address)": { + "notice": "CollectiveRewards addresses initializer" + }, + "rewardToken()": { + "notice": "address of the token rewarded to builder and backers" + }, + "sendRewards(uint256,uint256)": { + "notice": "sends rewards to backersManager contract to be distributed to the gauges" + }, + "sendRewardsAndStartDistribution(uint256,uint256)": { + "notice": "sends rewards to backersManager contract and starts the distribution to the gauges" + }, + "sendRewardsAndStartDistributionWithDefaultAmount()": { + "notice": "sends rewards to backersManager contract with default amounts and starts the distribution" + }, + "sendRewardsWithDefaultAmount()": { + "notice": "sends rewards to backersManager contract with default amounts" + }, + "setDefaultRewardAmount(uint256,uint256)": { + "notice": "sets the default reward amounts" + } + }, + "notice": "Accumulates all the rewards to be distributed for each cycle" + } +} \ No newline at end of file diff --git a/deployments/mainnet/RewardDistributorRootstockCollectiveProxy.json b/deployments/mainnet/RewardDistributorRootstockCollectiveProxy.json new file mode 100644 index 00000000..e9ce869d --- /dev/null +++ b/deployments/mainnet/RewardDistributorRootstockCollectiveProxy.json @@ -0,0 +1,166 @@ +{ + "abi": [ + { + "type": "constructor", + "inputs": [ + { + "name": "implementation", + "type": "address", + "internalType": "address" + }, + { + "name": "_data", + "type": "bytes", + "internalType": "bytes" + } + ], + "stateMutability": "payable" + }, + { + "type": "fallback", + "stateMutability": "payable" + }, + { + "type": "event", + "name": "Upgraded", + "inputs": [ + { + "name": "implementation", + "type": "address", + "indexed": true, + "internalType": "address" + } + ], + "anonymous": false + }, + { + "type": "error", + "name": "AddressEmptyCode", + "inputs": [ + { + "name": "target", + "type": "address", + "internalType": "address" + } + ] + }, + { + "type": "error", + "name": "ERC1967InvalidImplementation", + "inputs": [ + { + "name": "implementation", + "type": "address", + "internalType": "address" + } + ] + }, + { + "type": "error", + "name": "ERC1967NonPayable", + "inputs": [] + }, + { + "type": "error", + "name": "FailedInnerCall", + "inputs": [] + } + ], + "address": "0x5603Ba40257e317e45BA13C3732819Af5E81a9A1", + "args": [ + "0xB9EAe28b7b0B9e8793F4A78Dddd317596E94fc49", + "0xc4d66de80000000000000000000000007749f092834e4446466c1a14ccc8edd526a5c1fb" + ], + "bytecode": "0x60806040526040516103ee3803806103ee83398101604081905261002291610268565b61002c8282610033565b5050610352565b61003c82610092565b6040516001600160a01b038316907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a280511561008657610081828261010e565b505050565b61008e610185565b5050565b806001600160a01b03163b6000036100cd57604051634c9c8ce360e01b81526001600160a01b03821660048201526024015b60405180910390fd5b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc80546001600160a01b0319166001600160a01b0392909216919091179055565b6060600080846001600160a01b03168460405161012b9190610336565b600060405180830381855af49150503d8060008114610166576040519150601f19603f3d011682016040523d82523d6000602084013e61016b565b606091505b50909250905061017c8583836101a6565b95945050505050565b34156101a45760405163b398979f60e01b815260040160405180910390fd5b565b6060826101bb576101b682610205565b6101fe565b81511580156101d257506001600160a01b0384163b155b156101fb57604051639996b31560e01b81526001600160a01b03851660048201526024016100c4565b50805b9392505050565b8051156102155780518082602001fd5b604051630a12f52160e11b815260040160405180910390fd5b634e487b7160e01b600052604160045260246000fd5b60005b8381101561025f578181015183820152602001610247565b50506000910152565b6000806040838503121561027b57600080fd5b82516001600160a01b038116811461029257600080fd5b60208401519092506001600160401b03808211156102af57600080fd5b818501915085601f8301126102c357600080fd5b8151818111156102d5576102d561022e565b604051601f8201601f19908116603f011681019083821181831017156102fd576102fd61022e565b8160405282815288602084870101111561031657600080fd5b610327836020830160208801610244565b80955050505050509250929050565b60008251610348818460208701610244565b9190910192915050565b608e806103606000396000f3fe6080604052600a600c565b005b60186014601a565b605e565b565b600060597f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5473ffffffffffffffffffffffffffffffffffffffff1690565b905090565b3660008037600080366000845af43d6000803e808015607c573d6000f35b3d6000fdfea164736f6c6343000814000a", + "deployedBytecode": "0x6080604052600a600c565b005b60186014601a565b605e565b565b600060597f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5473ffffffffffffffffffffffffffffffffffffffff1690565b905090565b3660008037600080366000845af43d6000803e808015607c573d6000f35b3d6000fdfea164736f6c6343000814000a", + "devdoc": { + "version": 1, + "kind": "dev", + "details": "This contract implements an upgradeable proxy. It is upgradeable because calls are delegated to an implementation address that can be changed. This address is stored in storage in the location specified by https://eips.ethereum.org/EIPS/eip-1967[EIP1967], so that it doesn't conflict with the storage layout of the implementation behind the proxy.", + "methods": { + "constructor": { + "details": "Initializes the upgradeable proxy with an initial implementation specified by `implementation`. If `_data` is nonempty, it's used as data in a delegate call to `implementation`. This will typically be an encoded function call, and allows initializing the storage of the proxy like a Solidity constructor. Requirements: - If `data` is empty, `msg.value` must be zero." + } + }, + "events": { + "Upgraded(address)": { + "details": "Emitted when the implementation is upgraded." + } + }, + "errors": { + "AddressEmptyCode(address)": [ + { + "details": "There's no code at `target` (it is not a contract)." + } + ], + "ERC1967InvalidImplementation(address)": [ + { + "details": "The `implementation` of the proxy is invalid." + } + ], + "ERC1967NonPayable()": [ + { + "details": "An upgrade function sees `msg.value > 0` that may be lost." + } + ], + "FailedInnerCall()": [ + { + "details": "A call to an address target failed. The target may have reverted." + } + ] + } + }, + "metadata": "{\"compiler\":{\"version\":\"0.8.20+commit.a1b79de6\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"address\",\"name\":\"implementation\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"_data\",\"type\":\"bytes\"}],\"stateMutability\":\"payable\",\"type\":\"constructor\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"target\",\"type\":\"address\"}],\"type\":\"error\",\"name\":\"AddressEmptyCode\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"implementation\",\"type\":\"address\"}],\"type\":\"error\",\"name\":\"ERC1967InvalidImplementation\"},{\"inputs\":[],\"type\":\"error\",\"name\":\"ERC1967NonPayable\"},{\"inputs\":[],\"type\":\"error\",\"name\":\"FailedInnerCall\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"implementation\",\"type\":\"address\",\"indexed\":true}],\"type\":\"event\",\"name\":\"Upgraded\",\"anonymous\":false},{\"inputs\":[],\"stateMutability\":\"payable\",\"type\":\"fallback\"}],\"devdoc\":{\"kind\":\"dev\",\"methods\":{\"constructor\":{\"details\":\"Initializes the upgradeable proxy with an initial implementation specified by `implementation`. If `_data` is nonempty, it's used as data in a delegate call to `implementation`. This will typically be an encoded function call, and allows initializing the storage of the proxy like a Solidity constructor. Requirements: - If `data` is empty, `msg.value` must be zero.\"}},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"remappings\":[\"@openzeppelin/contracts-upgradeable/=node_modules/@openzeppelin/contracts-upgradeable/\",\"@openzeppelin/contracts/=node_modules/@openzeppelin/contracts/\",\"eth-gas-reporter/=node_modules/eth-gas-reporter/\",\"forge-std/=node_modules/forge-std/\",\"hardhat/=node_modules/hardhat/\"],\"optimizer\":{\"enabled\":true,\"runs\":10000},\"metadata\":{\"bytecodeHash\":\"none\"},\"compilationTarget\":{\"node_modules/@openzeppelin/contracts/proxy/ERC1967/ERC1967Proxy.sol\":\"ERC1967Proxy\"},\"evmVersion\":\"london\",\"libraries\":{}},\"sources\":{\"node_modules/@openzeppelin/contracts/proxy/ERC1967/ERC1967Proxy.sol\":{\"keccak256\":\"0xbfb6695731de677140fbf76c772ab08c4233a122fb51ac28ac120fc49bbbc4ec\",\"urls\":[\"bzz-raw://68f8fded7cc318efa15874b7c6a983fe17a4a955d72d240353a9a4ca1e1b824c\",\"dweb:/ipfs/QmdcmBL9Qo4Tk3Dby4wFYabGyot9JNeLPxpSXZUgUm92BV\"],\"license\":\"MIT\"},\"node_modules/@openzeppelin/contracts/proxy/ERC1967/ERC1967Utils.sol\":{\"keccak256\":\"0x06a78f9b3ee3e6d0eb4e4cd635ba49960bea34cac1db8c0a27c75f2319f1fd65\",\"urls\":[\"bzz-raw://547d21aa17f4f3f1a1a7edf7167beff8dd9496a0348d5588f15cc8a4b29d052a\",\"dweb:/ipfs/QmT16JtRQSWNpLo9W23jr6CzaMuTAcQcjJJcdRd8HLJ6cE\"],\"license\":\"MIT\"},\"node_modules/@openzeppelin/contracts/proxy/Proxy.sol\":{\"keccak256\":\"0xc3f2ec76a3de8ed7a7007c46166f5550c72c7709e3fc7e8bb3111a7191cdedbd\",\"urls\":[\"bzz-raw://e73efb4c2ca655882dc237c6b4f234a9bd36d97159d8fcaa837eb01171f726ac\",\"dweb:/ipfs/QmTNnnv7Gu5fs5G1ZMh7Fexp8N4XUs3XrNAngjcxgiss3e\"],\"license\":\"MIT\"},\"node_modules/@openzeppelin/contracts/proxy/beacon/IBeacon.sol\":{\"keccak256\":\"0xc59a78b07b44b2cf2e8ab4175fca91e8eca1eee2df7357b8d2a8833e5ea1f64c\",\"urls\":[\"bzz-raw://5aa4f07e65444784c29cd7bfcc2341b34381e4e5b5da9f0c5bd00d7f430e66fa\",\"dweb:/ipfs/QmWRMh4Q9DpaU9GvsiXmDdoNYMyyece9if7hnfLz7uqzWM\"],\"license\":\"MIT\"},\"node_modules/@openzeppelin/contracts/utils/Address.sol\":{\"keccak256\":\"0xaf28a975a78550e45f65e559a3ad6a5ad43b9b8a37366999abd1b7084eb70721\",\"urls\":[\"bzz-raw://b7bd24e224f67f65bfadf85dc2929fa965456bb2415478bd0125471b5ce35245\",\"dweb:/ipfs/QmRaydGr8BTHs1kvaZfsNU69pKzUAGFrvABn1KiRSbE51y\"],\"license\":\"MIT\"},\"node_modules/@openzeppelin/contracts/utils/StorageSlot.sol\":{\"keccak256\":\"0x32ba59b4b7299237c8ba56319110989d7978a039faf754793064e967e5894418\",\"urls\":[\"bzz-raw://1ae50c8b562427df610cc4540c9bf104acca7ef8e2dcae567ae7e52272281e9c\",\"dweb:/ipfs/QmTHiadFCSJUPpRjNegc5SahmeU8bAoY8i9Aq6tVscbcKR\"],\"license\":\"MIT\"}},\"version\":1}", + "numDeployments": 1, + "receipt": { + "transactionHash": "0x14acbf411b9e4f64112700ccd769b1973bc54deabfa2af832f68979dd762aead", + "transactionIndex": "0x8", + "blockHash": "0x1443c369bea56eb1861cdd046d78c8f783b13e99632004589c8cb625545e16eb", + "blockNumber": "0x6a2e72", + "from": "0xa3eda7A0b22d97DEFb7e223088F4c86a3Ce4B152", + "to": null, + "cumulativeGasUsed": "0x5ca478", + "gasUsed": "0x2b199", + "contractAddress": "0x5603Ba40257e317e45BA13C3732819Af5E81a9A1", + "logs": [ + { + "address": "0x5603Ba40257e317e45BA13C3732819Af5E81a9A1", + "topics": [ + "0xbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b", + "0x000000000000000000000000b9eae28b7b0b9e8793f4a78dddd317596e94fc49" + ], + "data": "0x", + "blockHash": "0x1443c369bea56eb1861cdd046d78c8f783b13e99632004589c8cb625545e16eb", + "blockNumber": "0x6a2e72", + "transactionHash": "0x14acbf411b9e4f64112700ccd769b1973bc54deabfa2af832f68979dd762aead", + "transactionIndex": "0x8", + "logIndex": "0x0" + }, + { + "address": "0x5603Ba40257e317e45BA13C3732819Af5E81a9A1", + "topics": [ + "0xc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d2" + ], + "data": "0x0000000000000000000000000000000000000000000000000000000000000001", + "blockHash": "0x1443c369bea56eb1861cdd046d78c8f783b13e99632004589c8cb625545e16eb", + "blockNumber": "0x6a2e72", + "transactionHash": "0x14acbf411b9e4f64112700ccd769b1973bc54deabfa2af832f68979dd762aead", + "transactionIndex": "0x8", + "logIndex": "0x1" + } + ], + "status": "0x1", + "logsBloom": "0x00000000000000000000000000000000400000000000000000000000000000001000000040000000000000000000000000000000000000000000000000000000000000000000000000000000000002200000000000000000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000410800000000000000000000000080000000000000000000000000000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "type": "0x0" + }, + "solcInputHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "storageLayout": { + "storage": [], + "types": {} + }, + "transactionHash": "0x14acbf411b9e4f64112700ccd769b1973bc54deabfa2af832f68979dd762aead", + "userdoc": { + "version": 1, + "kind": "user" + } +} \ No newline at end of file diff --git a/deployments/mainnet/contract_addresses.json b/deployments/mainnet/contract_addresses.json new file mode 100644 index 00000000..d08d7def --- /dev/null +++ b/deployments/mainnet/contract_addresses.json @@ -0,0 +1,10 @@ +{ + "BackersManagerRootstockCollective": "0x263701442A322418fF5b3D5F5AAb762834bE082B", + "BackersManagerRootstockCollectiveProxy": "0x7995C48D987941291d8008695A4133E557a11530", + "GaugeBeaconRootstockCollective": "0x21Cc53Cc2209E071FAb91F1495051A45b3c7E7d3", + "GaugeFactoryRootstockCollective": "0xe78DaA2B54bBDa0384cD9cF1bDfe605B30023b83", + "GovernanceManagerRootstockCollective": "0x5AF268A29f8aB0bA9c34FC2bC4418A10c62010B5", + "GovernanceManagerRootstockCollectiveProxy": "0x7749f092834E4446466C1A14CcC8edD526A5C1fB", + "RewardDistributorRootstockCollective": "0xB9EAe28b7b0B9e8793F4A78Dddd317596E94fc49", + "RewardDistributorRootstockCollectiveProxy": "0x5603Ba40257e317e45BA13C3732819Af5E81a9A1" +} \ No newline at end of file diff --git a/deployments/testnet_qa/BackersManagerRootstockCollective.json b/deployments/testnet_qa/BackersManagerRootstockCollective.json new file mode 100644 index 00000000..0b9fcbf2 --- /dev/null +++ b/deployments/testnet_qa/BackersManagerRootstockCollective.json @@ -0,0 +1,2898 @@ +{ + "abi": [ + { + "type": "constructor", + "inputs": [], + "stateMutability": "nonpayable" + }, + { + "type": "function", + "name": "UPGRADE_INTERFACE_VERSION", + "inputs": [], + "outputs": [ + { + "name": "", + "type": "string", + "internalType": "string" + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "activateBuilder", + "inputs": [ + { + "name": "builder_", + "type": "address", + "internalType": "address" + }, + { + "name": "rewardReceiver_", + "type": "address", + "internalType": "address" + }, + { + "name": "rewardPercentage_", + "type": "uint64", + "internalType": "uint64" + } + ], + "outputs": [], + "stateMutability": "nonpayable" + }, + { + "type": "function", + "name": "allocate", + "inputs": [ + { + "name": "gauge_", + "type": "address", + "internalType": "contract GaugeRootstockCollective" + }, + { + "name": "allocation_", + "type": "uint256", + "internalType": "uint256" + } + ], + "outputs": [], + "stateMutability": "nonpayable" + }, + { + "type": "function", + "name": "allocateBatch", + "inputs": [ + { + "name": "gauges_", + "type": "address[]", + "internalType": "contract GaugeRootstockCollective[]" + }, + { + "name": "allocations_", + "type": "uint256[]", + "internalType": "uint256[]" + } + ], + "outputs": [], + "stateMutability": "nonpayable" + }, + { + "type": "function", + "name": "approveBuidlerRewardReceiverReplacement", + "inputs": [ + { + "name": "builder_", + "type": "address", + "internalType": "address" + }, + { + "name": "rewardReceiverReplacement_", + "type": "address", + "internalType": "address" + } + ], + "outputs": [], + "stateMutability": "nonpayable" + }, + { + "type": "function", + "name": "approveBuilderKYC", + "inputs": [ + { + "name": "builder_", + "type": "address", + "internalType": "address" + } + ], + "outputs": [], + "stateMutability": "nonpayable" + }, + { + "type": "function", + "name": "backerRewardPercentage", + "inputs": [ + { + "name": "builder", + "type": "address", + "internalType": "address" + } + ], + "outputs": [ + { + "name": "previous", + "type": "uint64", + "internalType": "uint64" + }, + { + "name": "next", + "type": "uint64", + "internalType": "uint64" + }, + { + "name": "cooldownEndTime", + "type": "uint128", + "internalType": "uint128" + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "backerTotalAllocation", + "inputs": [ + { + "name": "backer", + "type": "address", + "internalType": "address" + } + ], + "outputs": [ + { + "name": "allocation", + "type": "uint256", + "internalType": "uint256" + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "builderRewardReceiver", + "inputs": [ + { + "name": "builder", + "type": "address", + "internalType": "address" + } + ], + "outputs": [ + { + "name": "rewardReceiver", + "type": "address", + "internalType": "address" + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "builderRewardReceiverReplacement", + "inputs": [ + { + "name": "builder", + "type": "address", + "internalType": "address" + } + ], + "outputs": [ + { + "name": "rewardReceiverReplacement", + "type": "address", + "internalType": "address" + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "builderState", + "inputs": [ + { + "name": "builder", + "type": "address", + "internalType": "address" + } + ], + "outputs": [ + { + "name": "activated", + "type": "bool", + "internalType": "bool" + }, + { + "name": "kycApproved", + "type": "bool", + "internalType": "bool" + }, + { + "name": "communityApproved", + "type": "bool", + "internalType": "bool" + }, + { + "name": "paused", + "type": "bool", + "internalType": "bool" + }, + { + "name": "revoked", + "type": "bool", + "internalType": "bool" + }, + { + "name": "reserved", + "type": "bytes7", + "internalType": "bytes7" + }, + { + "name": "pausedReason", + "type": "bytes20", + "internalType": "bytes20" + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "builderToGauge", + "inputs": [ + { + "name": "builder", + "type": "address", + "internalType": "address" + } + ], + "outputs": [ + { + "name": "gauge", + "type": "address", + "internalType": "contract GaugeRootstockCollective" + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "canWithdraw", + "inputs": [ + { + "name": "targetAddress_", + "type": "address", + "internalType": "address" + }, + { + "name": "", + "type": "uint256", + "internalType": "uint256" + } + ], + "outputs": [ + { + "name": "", + "type": "bool", + "internalType": "bool" + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "cancelRewardReceiverReplacementRequest", + "inputs": [], + "outputs": [], + "stateMutability": "nonpayable" + }, + { + "type": "function", + "name": "claimBackerRewards", + "inputs": [ + { + "name": "gauges_", + "type": "address[]", + "internalType": "contract GaugeRootstockCollective[]" + } + ], + "outputs": [], + "stateMutability": "nonpayable" + }, + { + "type": "function", + "name": "claimBackerRewards", + "inputs": [ + { + "name": "rewardToken_", + "type": "address", + "internalType": "address" + }, + { + "name": "gauges_", + "type": "address[]", + "internalType": "contract GaugeRootstockCollective[]" + } + ], + "outputs": [], + "stateMutability": "nonpayable" + }, + { + "type": "function", + "name": "communityApproveBuilder", + "inputs": [ + { + "name": "builder_", + "type": "address", + "internalType": "address" + } + ], + "outputs": [ + { + "name": "gauge_", + "type": "address", + "internalType": "contract GaugeRootstockCollective" + } + ], + "stateMutability": "nonpayable" + }, + { + "type": "function", + "name": "cycleData", + "inputs": [], + "outputs": [ + { + "name": "previousDuration", + "type": "uint32", + "internalType": "uint32" + }, + { + "name": "nextDuration", + "type": "uint32", + "internalType": "uint32" + }, + { + "name": "previousStart", + "type": "uint64", + "internalType": "uint64" + }, + { + "name": "nextStart", + "type": "uint64", + "internalType": "uint64" + }, + { + "name": "offset", + "type": "uint24", + "internalType": "uint24" + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "cycleNext", + "inputs": [ + { + "name": "timestamp_", + "type": "uint256", + "internalType": "uint256" + } + ], + "outputs": [ + { + "name": "", + "type": "uint256", + "internalType": "uint256" + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "cycleStart", + "inputs": [ + { + "name": "timestamp_", + "type": "uint256", + "internalType": "uint256" + } + ], + "outputs": [ + { + "name": "", + "type": "uint256", + "internalType": "uint256" + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "dewhitelistBuilder", + "inputs": [ + { + "name": "builder_", + "type": "address", + "internalType": "address" + } + ], + "outputs": [], + "stateMutability": "nonpayable" + }, + { + "type": "function", + "name": "distribute", + "inputs": [], + "outputs": [ + { + "name": "finished_", + "type": "bool", + "internalType": "bool" + } + ], + "stateMutability": "nonpayable" + }, + { + "type": "function", + "name": "distributionDuration", + "inputs": [], + "outputs": [ + { + "name": "", + "type": "uint32", + "internalType": "uint32" + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "endDistributionWindow", + "inputs": [ + { + "name": "timestamp_", + "type": "uint256", + "internalType": "uint256" + } + ], + "outputs": [ + { + "name": "", + "type": "uint256", + "internalType": "uint256" + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "gaugeFactory", + "inputs": [], + "outputs": [ + { + "name": "", + "type": "address", + "internalType": "contract GaugeFactoryRootstockCollective" + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "gaugeToBuilder", + "inputs": [ + { + "name": "gauge", + "type": "address", + "internalType": "contract GaugeRootstockCollective" + } + ], + "outputs": [ + { + "name": "builder", + "type": "address", + "internalType": "address" + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "getCycleStartAndDuration", + "inputs": [], + "outputs": [ + { + "name": "", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "", + "type": "uint256", + "internalType": "uint256" + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "getGaugeAt", + "inputs": [ + { + "name": "index_", + "type": "uint256", + "internalType": "uint256" + } + ], + "outputs": [ + { + "name": "", + "type": "address", + "internalType": "address" + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "getGaugesLength", + "inputs": [], + "outputs": [ + { + "name": "", + "type": "uint256", + "internalType": "uint256" + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "getHaltedGaugeAt", + "inputs": [ + { + "name": "index_", + "type": "uint256", + "internalType": "uint256" + } + ], + "outputs": [ + { + "name": "", + "type": "address", + "internalType": "address" + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "getHaltedGaugesLength", + "inputs": [], + "outputs": [ + { + "name": "", + "type": "uint256", + "internalType": "uint256" + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "getRewardPercentageToApply", + "inputs": [ + { + "name": "builder_", + "type": "address", + "internalType": "address" + } + ], + "outputs": [ + { + "name": "", + "type": "uint64", + "internalType": "uint64" + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "governanceManager", + "inputs": [], + "outputs": [ + { + "name": "", + "type": "address", + "internalType": "contract IGovernanceManagerRootstockCollective" + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "haltedGaugeLastPeriodFinish", + "inputs": [ + { + "name": "gauge", + "type": "address", + "internalType": "contract GaugeRootstockCollective" + } + ], + "outputs": [ + { + "name": "lastPeriodFinish", + "type": "uint256", + "internalType": "uint256" + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "hasBuilderRewardReceiverPendingApproval", + "inputs": [ + { + "name": "builder_", + "type": "address", + "internalType": "address" + } + ], + "outputs": [ + { + "name": "", + "type": "bool", + "internalType": "bool" + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "indexLastGaugeDistributed", + "inputs": [], + "outputs": [ + { + "name": "", + "type": "uint256", + "internalType": "uint256" + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "initialize", + "inputs": [ + { + "name": "governanceManager_", + "type": "address", + "internalType": "contract IGovernanceManagerRootstockCollective" + }, + { + "name": "rewardToken_", + "type": "address", + "internalType": "address" + }, + { + "name": "stakingToken_", + "type": "address", + "internalType": "address" + }, + { + "name": "gaugeFactory_", + "type": "address", + "internalType": "address" + }, + { + "name": "rewardDistributor_", + "type": "address", + "internalType": "address" + }, + { + "name": "cycleDuration_", + "type": "uint32", + "internalType": "uint32" + }, + { + "name": "cycleStartOffset_", + "type": "uint24", + "internalType": "uint24" + }, + { + "name": "distributionDuration_", + "type": "uint32", + "internalType": "uint32" + }, + { + "name": "rewardPercentageCooldown_", + "type": "uint128", + "internalType": "uint128" + } + ], + "outputs": [], + "stateMutability": "nonpayable" + }, + { + "type": "function", + "name": "isBuilderOperational", + "inputs": [ + { + "name": "builder_", + "type": "address", + "internalType": "address" + } + ], + "outputs": [ + { + "name": "", + "type": "bool", + "internalType": "bool" + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "isBuilderPaused", + "inputs": [ + { + "name": "builder_", + "type": "address", + "internalType": "address" + } + ], + "outputs": [ + { + "name": "", + "type": "bool", + "internalType": "bool" + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "isGaugeHalted", + "inputs": [ + { + "name": "gauge_", + "type": "address", + "internalType": "address" + } + ], + "outputs": [ + { + "name": "", + "type": "bool", + "internalType": "bool" + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "isGaugeOperational", + "inputs": [ + { + "name": "gauge_", + "type": "address", + "internalType": "contract GaugeRootstockCollective" + } + ], + "outputs": [ + { + "name": "", + "type": "bool", + "internalType": "bool" + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "isGaugeRewarded", + "inputs": [ + { + "name": "gauge_", + "type": "address", + "internalType": "address" + } + ], + "outputs": [ + { + "name": "", + "type": "bool", + "internalType": "bool" + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "migrateBuilder", + "inputs": [ + { + "name": "builder_", + "type": "address", + "internalType": "address" + }, + { + "name": "rewardAddress_", + "type": "address", + "internalType": "address" + }, + { + "name": "rewardPercentage_", + "type": "uint64", + "internalType": "uint64" + } + ], + "outputs": [], + "stateMutability": "nonpayable" + }, + { + "type": "function", + "name": "notifyRewardAmount", + "inputs": [ + { + "name": "amount_", + "type": "uint256", + "internalType": "uint256" + } + ], + "outputs": [], + "stateMutability": "payable" + }, + { + "type": "function", + "name": "onDistributionPeriod", + "inputs": [], + "outputs": [ + { + "name": "", + "type": "bool", + "internalType": "bool" + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "pauseBuilder", + "inputs": [ + { + "name": "builder_", + "type": "address", + "internalType": "address" + }, + { + "name": "reason_", + "type": "bytes20", + "internalType": "bytes20" + } + ], + "outputs": [], + "stateMutability": "nonpayable" + }, + { + "type": "function", + "name": "periodFinish", + "inputs": [], + "outputs": [ + { + "name": "", + "type": "uint256", + "internalType": "uint256" + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "permitBuilder", + "inputs": [ + { + "name": "rewardPercentage_", + "type": "uint64", + "internalType": "uint64" + } + ], + "outputs": [], + "stateMutability": "nonpayable" + }, + { + "type": "function", + "name": "proxiableUUID", + "inputs": [], + "outputs": [ + { + "name": "", + "type": "bytes32", + "internalType": "bytes32" + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "revokeBuilder", + "inputs": [], + "outputs": [], + "stateMutability": "nonpayable" + }, + { + "type": "function", + "name": "revokeBuilderKYC", + "inputs": [ + { + "name": "builder_", + "type": "address", + "internalType": "address" + } + ], + "outputs": [], + "stateMutability": "nonpayable" + }, + { + "type": "function", + "name": "rewardDistributor", + "inputs": [], + "outputs": [ + { + "name": "", + "type": "address", + "internalType": "address" + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "rewardPercentageCooldown", + "inputs": [], + "outputs": [ + { + "name": "", + "type": "uint128", + "internalType": "uint128" + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "rewardToken", + "inputs": [], + "outputs": [ + { + "name": "", + "type": "address", + "internalType": "address" + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "rewardsCoinbase", + "inputs": [], + "outputs": [ + { + "name": "", + "type": "uint256", + "internalType": "uint256" + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "rewardsERC20", + "inputs": [], + "outputs": [ + { + "name": "", + "type": "uint256", + "internalType": "uint256" + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "setBackerRewardPercentage", + "inputs": [ + { + "name": "rewardPercentage_", + "type": "uint64", + "internalType": "uint64" + } + ], + "outputs": [], + "stateMutability": "nonpayable" + }, + { + "type": "function", + "name": "setCycleDuration", + "inputs": [ + { + "name": "newCycleDuration_", + "type": "uint32", + "internalType": "uint32" + }, + { + "name": "cycleStartOffset_", + "type": "uint24", + "internalType": "uint24" + } + ], + "outputs": [], + "stateMutability": "nonpayable" + }, + { + "type": "function", + "name": "setDistributionDuration", + "inputs": [ + { + "name": "newDistributionDuration_", + "type": "uint32", + "internalType": "uint32" + } + ], + "outputs": [], + "stateMutability": "nonpayable" + }, + { + "type": "function", + "name": "stakingToken", + "inputs": [], + "outputs": [ + { + "name": "", + "type": "address", + "internalType": "contract IERC20" + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "startDistribution", + "inputs": [], + "outputs": [ + { + "name": "finished_", + "type": "bool", + "internalType": "bool" + } + ], + "stateMutability": "nonpayable" + }, + { + "type": "function", + "name": "submitRewardReceiverReplacementRequest", + "inputs": [ + { + "name": "newRewardReceiver_", + "type": "address", + "internalType": "address" + } + ], + "outputs": [], + "stateMutability": "nonpayable" + }, + { + "type": "function", + "name": "supportsInterface", + "inputs": [ + { + "name": "interfaceId_", + "type": "bytes4", + "internalType": "bytes4" + } + ], + "outputs": [ + { + "name": "", + "type": "bool", + "internalType": "bool" + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "tempTotalPotentialReward", + "inputs": [], + "outputs": [ + { + "name": "", + "type": "uint256", + "internalType": "uint256" + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "timeUntilNextCycle", + "inputs": [ + { + "name": "timestamp_", + "type": "uint256", + "internalType": "uint256" + } + ], + "outputs": [ + { + "name": "", + "type": "uint256", + "internalType": "uint256" + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "totalPotentialReward", + "inputs": [], + "outputs": [ + { + "name": "", + "type": "uint256", + "internalType": "uint256" + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "unpauseBuilder", + "inputs": [ + { + "name": "builder_", + "type": "address", + "internalType": "address" + } + ], + "outputs": [], + "stateMutability": "nonpayable" + }, + { + "type": "function", + "name": "upgradeToAndCall", + "inputs": [ + { + "name": "newImplementation", + "type": "address", + "internalType": "address" + }, + { + "name": "data", + "type": "bytes", + "internalType": "bytes" + } + ], + "outputs": [], + "stateMutability": "payable" + }, + { + "type": "event", + "name": "BackerRewardPercentageUpdateScheduled", + "inputs": [ + { + "name": "builder_", + "type": "address", + "indexed": true, + "internalType": "address" + }, + { + "name": "rewardPercentage_", + "type": "uint256", + "indexed": false, + "internalType": "uint256" + }, + { + "name": "cooldown_", + "type": "uint256", + "indexed": false, + "internalType": "uint256" + } + ], + "anonymous": false + }, + { + "type": "event", + "name": "BuilderActivated", + "inputs": [ + { + "name": "builder_", + "type": "address", + "indexed": true, + "internalType": "address" + }, + { + "name": "rewardReceiver_", + "type": "address", + "indexed": false, + "internalType": "address" + }, + { + "name": "rewardPercentage_", + "type": "uint64", + "indexed": false, + "internalType": "uint64" + } + ], + "anonymous": false + }, + { + "type": "event", + "name": "BuilderMigrated", + "inputs": [ + { + "name": "builder_", + "type": "address", + "indexed": true, + "internalType": "address" + }, + { + "name": "migrator_", + "type": "address", + "indexed": true, + "internalType": "address" + } + ], + "anonymous": false + }, + { + "type": "event", + "name": "BuilderRewardReceiverReplacementApproved", + "inputs": [ + { + "name": "builder_", + "type": "address", + "indexed": true, + "internalType": "address" + }, + { + "name": "newRewardReceiver_", + "type": "address", + "indexed": false, + "internalType": "address" + } + ], + "anonymous": false + }, + { + "type": "event", + "name": "BuilderRewardReceiverReplacementCancelled", + "inputs": [ + { + "name": "builder_", + "type": "address", + "indexed": true, + "internalType": "address" + }, + { + "name": "newRewardReceiver_", + "type": "address", + "indexed": false, + "internalType": "address" + } + ], + "anonymous": false + }, + { + "type": "event", + "name": "BuilderRewardReceiverReplacementRequested", + "inputs": [ + { + "name": "builder_", + "type": "address", + "indexed": true, + "internalType": "address" + }, + { + "name": "newRewardReceiver_", + "type": "address", + "indexed": false, + "internalType": "address" + } + ], + "anonymous": false + }, + { + "type": "event", + "name": "CommunityApproved", + "inputs": [ + { + "name": "builder_", + "type": "address", + "indexed": true, + "internalType": "address" + } + ], + "anonymous": false + }, + { + "type": "event", + "name": "Dewhitelisted", + "inputs": [ + { + "name": "builder_", + "type": "address", + "indexed": true, + "internalType": "address" + } + ], + "anonymous": false + }, + { + "type": "event", + "name": "GaugeCreated", + "inputs": [ + { + "name": "builder_", + "type": "address", + "indexed": true, + "internalType": "address" + }, + { + "name": "gauge_", + "type": "address", + "indexed": true, + "internalType": "address" + }, + { + "name": "creator_", + "type": "address", + "indexed": false, + "internalType": "address" + } + ], + "anonymous": false + }, + { + "type": "event", + "name": "Initialized", + "inputs": [ + { + "name": "version", + "type": "uint64", + "indexed": false, + "internalType": "uint64" + } + ], + "anonymous": false + }, + { + "type": "event", + "name": "KYCApproved", + "inputs": [ + { + "name": "builder_", + "type": "address", + "indexed": true, + "internalType": "address" + } + ], + "anonymous": false + }, + { + "type": "event", + "name": "KYCRevoked", + "inputs": [ + { + "name": "builder_", + "type": "address", + "indexed": true, + "internalType": "address" + } + ], + "anonymous": false + }, + { + "type": "event", + "name": "NewAllocation", + "inputs": [ + { + "name": "backer_", + "type": "address", + "indexed": true, + "internalType": "address" + }, + { + "name": "gauge_", + "type": "address", + "indexed": true, + "internalType": "address" + }, + { + "name": "allocation_", + "type": "uint256", + "indexed": false, + "internalType": "uint256" + } + ], + "anonymous": false + }, + { + "type": "event", + "name": "NewCycleDurationScheduled", + "inputs": [ + { + "name": "newCycleDuration_", + "type": "uint256", + "indexed": false, + "internalType": "uint256" + }, + { + "name": "cooldownEndTime_", + "type": "uint256", + "indexed": false, + "internalType": "uint256" + } + ], + "anonymous": false + }, + { + "type": "event", + "name": "NewDistributionDuration", + "inputs": [ + { + "name": "newDistributionDuration_", + "type": "uint256", + "indexed": false, + "internalType": "uint256" + }, + { + "name": "by_", + "type": "address", + "indexed": false, + "internalType": "address" + } + ], + "anonymous": false + }, + { + "type": "event", + "name": "NotifyReward", + "inputs": [ + { + "name": "rewardToken_", + "type": "address", + "indexed": true, + "internalType": "address" + }, + { + "name": "sender_", + "type": "address", + "indexed": true, + "internalType": "address" + }, + { + "name": "amount_", + "type": "uint256", + "indexed": false, + "internalType": "uint256" + } + ], + "anonymous": false + }, + { + "type": "event", + "name": "Paused", + "inputs": [ + { + "name": "builder_", + "type": "address", + "indexed": true, + "internalType": "address" + }, + { + "name": "reason_", + "type": "bytes20", + "indexed": false, + "internalType": "bytes20" + } + ], + "anonymous": false + }, + { + "type": "event", + "name": "Permitted", + "inputs": [ + { + "name": "builder_", + "type": "address", + "indexed": true, + "internalType": "address" + }, + { + "name": "rewardPercentage_", + "type": "uint256", + "indexed": false, + "internalType": "uint256" + }, + { + "name": "cooldown_", + "type": "uint256", + "indexed": false, + "internalType": "uint256" + } + ], + "anonymous": false + }, + { + "type": "event", + "name": "Revoked", + "inputs": [ + { + "name": "builder_", + "type": "address", + "indexed": true, + "internalType": "address" + } + ], + "anonymous": false + }, + { + "type": "event", + "name": "RewardDistributed", + "inputs": [ + { + "name": "sender_", + "type": "address", + "indexed": true, + "internalType": "address" + } + ], + "anonymous": false + }, + { + "type": "event", + "name": "RewardDistributionFinished", + "inputs": [ + { + "name": "sender_", + "type": "address", + "indexed": true, + "internalType": "address" + } + ], + "anonymous": false + }, + { + "type": "event", + "name": "RewardDistributionStarted", + "inputs": [ + { + "name": "sender_", + "type": "address", + "indexed": true, + "internalType": "address" + } + ], + "anonymous": false + }, + { + "type": "event", + "name": "Unpaused", + "inputs": [ + { + "name": "builder_", + "type": "address", + "indexed": true, + "internalType": "address" + } + ], + "anonymous": false + }, + { + "type": "event", + "name": "Upgraded", + "inputs": [ + { + "name": "implementation", + "type": "address", + "indexed": true, + "internalType": "address" + } + ], + "anonymous": false + }, + { + "type": "error", + "name": "AddressEmptyCode", + "inputs": [ + { + "name": "target", + "type": "address", + "internalType": "address" + } + ] + }, + { + "type": "error", + "name": "AddressInsufficientBalance", + "inputs": [ + { + "name": "account", + "type": "address", + "internalType": "address" + } + ] + }, + { + "type": "error", + "name": "AlreadyActivated", + "inputs": [] + }, + { + "type": "error", + "name": "AlreadyCommunityApproved", + "inputs": [] + }, + { + "type": "error", + "name": "AlreadyKYCApproved", + "inputs": [] + }, + { + "type": "error", + "name": "AlreadyRevoked", + "inputs": [] + }, + { + "type": "error", + "name": "BeforeDistribution", + "inputs": [] + }, + { + "type": "error", + "name": "BuilderAlreadyExists", + "inputs": [] + }, + { + "type": "error", + "name": "BuilderDoesNotExist", + "inputs": [] + }, + { + "type": "error", + "name": "CycleDurationTooShort", + "inputs": [] + }, + { + "type": "error", + "name": "DistributionDurationTooLong", + "inputs": [] + }, + { + "type": "error", + "name": "DistributionDurationTooShort", + "inputs": [] + }, + { + "type": "error", + "name": "DistributionModifiedDuringDistributionWindow", + "inputs": [] + }, + { + "type": "error", + "name": "DistributionPeriodDidNotStart", + "inputs": [] + }, + { + "type": "error", + "name": "ERC1967InvalidImplementation", + "inputs": [ + { + "name": "implementation", + "type": "address", + "internalType": "address" + } + ] + }, + { + "type": "error", + "name": "ERC1967NonPayable", + "inputs": [] + }, + { + "type": "error", + "name": "FailedInnerCall", + "inputs": [] + }, + { + "type": "error", + "name": "GaugeDoesNotExist", + "inputs": [] + }, + { + "type": "error", + "name": "InvalidBackerRewardPercentage", + "inputs": [] + }, + { + "type": "error", + "name": "InvalidBuilderRewardReceiver", + "inputs": [] + }, + { + "type": "error", + "name": "InvalidInitialization", + "inputs": [] + }, + { + "type": "error", + "name": "NoGaugesForDistribution", + "inputs": [] + }, + { + "type": "error", + "name": "NotActivated", + "inputs": [] + }, + { + "type": "error", + "name": "NotCommunityApproved", + "inputs": [] + }, + { + "type": "error", + "name": "NotEnoughStaking", + "inputs": [] + }, + { + "type": "error", + "name": "NotInDistributionPeriod", + "inputs": [] + }, + { + "type": "error", + "name": "NotInitializing", + "inputs": [] + }, + { + "type": "error", + "name": "NotKYCApproved", + "inputs": [] + }, + { + "type": "error", + "name": "NotOperational", + "inputs": [] + }, + { + "type": "error", + "name": "NotPaused", + "inputs": [] + }, + { + "type": "error", + "name": "NotRevoked", + "inputs": [] + }, + { + "type": "error", + "name": "NotValidChangerOrFoundation", + "inputs": [] + }, + { + "type": "error", + "name": "OnlyInDistributionWindow", + "inputs": [] + }, + { + "type": "error", + "name": "PositiveAllocationOnHaltedGauge", + "inputs": [] + }, + { + "type": "error", + "name": "SafeERC20FailedOperation", + "inputs": [ + { + "name": "token", + "type": "address", + "internalType": "address" + } + ] + }, + { + "type": "error", + "name": "UUPSUnauthorizedCallContext", + "inputs": [] + }, + { + "type": "error", + "name": "UUPSUnsupportedProxiableUUID", + "inputs": [ + { + "name": "slot", + "type": "bytes32", + "internalType": "bytes32" + } + ] + }, + { + "type": "error", + "name": "UnequalLengths", + "inputs": [] + } + ], + "address": "0xeAdca815D145f3E3a69f9d4B086391ECE2CC6fe6", + "args": [], + "bytecode": "0x60a0604052306080523480156200001557600080fd5b506200002062000030565b6200002a62000030565b620000e4565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805468010000000000000000900460ff1615620000815760405163f92ee8a960e01b815260040160405180910390fd5b80546001600160401b0390811614620000e15780546001600160401b0319166001600160401b0390811782556040519081527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b50565b608051615c396200010e60003960008181613ca601528181613ccf0152613f130152615c396000f3fe60806040526004361061042f5760003560e01c806374c0dff111610228578063c58a1e4d11610128578063e45572ea116100bb578063efbdb5431161008a578063f7c618c11161006f578063f7c618c114610f11578063fafde1ec14610f31578063fd472fde14610f5157600080fd5b8063efbdb54314610e31578063f0527f8f14610ef157600080fd5b8063e45572ea14610d3e578063e4fc6b6d14610de7578063e64638d714610dfc578063ebe2b12b14610e1c57600080fd5b8063d3a954bb116100f7578063d3a954bb14610cc9578063d83623dd14610ce9578063dff6874814610cfe578063e2ab7cf214610d1e57600080fd5b8063c58a1e4d14610c5e578063caa9915e14610c73578063d2d8c93214610c93578063d2e6d1c314610ca957600080fd5b80639f96d06e116101bb578063acc2166a1161018a578063b78b52df1161016f578063b78b52df14610be5578063c042e76e14610c05578063c15382d814610c2557600080fd5b8063acc2166a14610b6f578063ad3cb1cc14610b8f57600080fd5b80639f96d06e14610aef578063a0d961c014610b0f578063a7c0782b14610b2f578063a8a90af714610b4f57600080fd5b80638dcb7ea4116101f75780638dcb7ea414610a645780639626f35814610a9a57806397e57cf914610aba5780639dcde81214610acf57600080fd5b806374c0dff1146109c45780637572392c14610a0e57806377bd9c2d14610a2457806381d8bd2c14610a4457600080fd5b80632ed480f7116103335780634be50762116102c6578063579e8c8e1161029557806371d8a4891161027a57806371d8a4891461094e57806372b874ad1461098457806372f702f3146109a457600080fd5b8063579e8c8e146109235780636912be2d1461093957600080fd5b80634be50762146108c55780634f1ef286146108e5578063517b989c146108f857806352d1902d1461090e57600080fd5b80634356d671116103025780634356d6711461083857806345b5cd311461085857806348d57282146108785780634b1d41fc1461089857600080fd5b80632ed480f7146107c65780633c6b16ab146107e65780633f1c49bf146107f957806341f265801461080e57600080fd5b806312ad2387116103c65780631f56d39c1161039557806323e978c11161037a57806323e978c11461075a578063278fdc691461079057806329ad14d3146107a657600080fd5b80631f56d39c146106fa57806323ae495b1461073a57600080fd5b806312ad238714610587578063187256eb146105a15780631d156dcf146105ce5780631d5cd0e61461060057600080fd5b80630d52333c116104025780630d52333c146104d95780630fa36b8214610511578063119234dd1461053157806311fb601a1461055157600080fd5b806301ffc9a71461043457806303184e311461046957806309022b13146104895780630b739693146104b7575b600080fd5b34801561044057600080fd5b5061045461044f366004615342565b610f71565b60405190151581526020015b60405180910390f35b34801561047557600080fd5b50610454610484366004615399565b61100a565b34801561049557600080fd5b506104a96104a43660046153b6565b611017565b604051908152602001610460565b3480156104c357600080fd5b506104d76104d23660046153e3565b611036565b005b3480156104e557600080fd5b506070546104f9906001600160a01b031681565b6040516001600160a01b039091168152602001610460565b34801561051d57600080fd5b506104d761052c366004615416565b6112f7565b34801561053d57600080fd5b506104d761054c366004615538565b611525565b34801561055d57600080fd5b506104f961056c366004615399565b606a602052600090815260409020546001600160a01b031681565b34801561059357600080fd5b5060af546104549060ff1681565b3480156105ad57600080fd5b506104a96105bc366004615399565b60b06020526000908152604090205481565b3480156105da57600080fd5b506034546105eb9063ffffffff1681565b60405163ffffffff9091168152602001610460565b34801561060c57600080fd5b5061067861061b366004615399565b60686020526000908152604090205460ff808216916101008104821691620100008204811691630100000081048216916401000000008204169065010000000000810460c81b906c01000000000000000000000000900460601b87565b6040805197151588529515156020880152931515948601949094529015156060850152151560808401527fffffffffffffff0000000000000000000000000000000000000000000000000090911660a08301527fffffffffffffffffffffffffffffffffffffffff0000000000000000000000001660c082015260e001610460565b34801561070657600080fd5b50610454610715366004615399565b6001600160a01b03166000908152606860205260409020546301000000900460ff1690565b34801561074657600080fd5b506104d7610755366004615580565b6115fa565b34801561076657600080fd5b506104f9610775366004615399565b6069602052600090815260409020546001600160a01b031681565b34801561079c57600080fd5b506104a960ac5481565b3480156107b257600080fd5b506104d76107c1366004615416565b6119a4565b3480156107d257600080fd5b506104546107e1366004615399565b611cdc565b6104d76107f43660046153b6565b611d32565b34801561080557600080fd5b506104d7611e93565b34801561081a57600080fd5b50610823611ef7565b60408051928352602083019190915201610460565b34801561084457600080fd5b506104d76108533660046155ff565b61205c565b34801561086457600080fd5b506104d761087336600461566b565b612171565b34801561088457600080fd5b506104f96108933660046153b6565b6122ad565b3480156108a457600080fd5b506104a96108b3366004615399565b60736020526000908152604090205481565b3480156108d157600080fd5b506104d76108e03660046156bb565b6122ba565b6104d76108f3366004615786565b6124a2565b34801561090457600080fd5b506104a960a95481565b34801561091a57600080fd5b506104a96124c1565b34801561092f57600080fd5b506104a960ab5481565b34801561094557600080fd5b506104d76124f0565b34801561095a57600080fd5b506104f9610969366004615399565b6071602052600090815260409020546001600160a01b031681565b34801561099057600080fd5b506104a961099f3660046153b6565b612701565b3480156109b057600080fd5b5060a7546104f9906001600160a01b031681565b3480156109d057600080fd5b506074546109ed906fffffffffffffffffffffffffffffffff1681565b6040516fffffffffffffffffffffffffffffffff9091168152602001610460565b348015610a1a57600080fd5b506104a960aa5481565b348015610a3057600080fd5b50610454610a3f366004615399565b612725565b348015610a5057600080fd5b506104d7610a5f36600461584c565b61274b565b348015610a7057600080fd5b506104f9610a7f366004615399565b6072602052600090815260409020546001600160a01b031681565b348015610aa657600080fd5b50610454610ab5366004615399565b6127ca565b348015610ac657600080fd5b506104a96127d7565b348015610adb57600080fd5b506104d7610aea366004615399565b6127e8565b348015610afb57600080fd5b506104d7610b0a366004615399565b612990565b348015610b1b57600080fd5b506104a9610b2a3660046153b6565b6129d4565b348015610b3b57600080fd5b506104a9610b4a3660046153b6565b6129f0565b348015610b5b57600080fd5b506104d7610b6a366004615399565b612a2b565b348015610b7b57600080fd5b506067546104f9906001600160a01b031681565b348015610b9b57600080fd5b50610bd86040518060400160405280600581526020017f352e302e3000000000000000000000000000000000000000000000000000000081525081565b60405161046091906158b7565b348015610bf157600080fd5b506104d7610c00366004615908565b612c1e565b348015610c1157600080fd5b506104d7610c2036600461584c565b612c95565b348015610c3157600080fd5b50610c45610c40366004615399565b612d59565b60405167ffffffffffffffff9091168152602001610460565b348015610c6a57600080fd5b506104a9612de4565b348015610c7f57600080fd5b506104d7610c8e366004615934565b612df0565b348015610c9f57600080fd5b506104a960ad5481565b348015610cb557600080fd5b506000546104f9906001600160a01b031681565b348015610cd557600080fd5b506104f9610ce4366004615399565b612f05565b348015610cf557600080fd5b50610454612f88565b348015610d0a57600080fd5b50610454610d19366004615399565b61306b565b348015610d2a57600080fd5b50610454610d39366004615908565b61316f565b348015610d4a57600080fd5b50610dae610d59366004615399565b606b6020526000908152604090205467ffffffffffffffff808216916801000000000000000081049091169070010000000000000000000000000000000090046fffffffffffffffffffffffffffffffff1683565b6040805167ffffffffffffffff94851681529390921660208401526fffffffffffffffffffffffffffffffff1690820152606001610460565b348015610df357600080fd5b5061045461322a565b348015610e0857600080fd5b506104f9610e173660046153b6565b613275565b348015610e2857600080fd5b506104a9613282565b348015610e3d57600080fd5b50603354610eaf9063ffffffff8082169164010000000081049091169067ffffffffffffffff68010000000000000000820481169170010000000000000000000000000000000081049091169062ffffff78010000000000000000000000000000000000000000000000009091041685565b6040805163ffffffff968716815295909416602086015267ffffffffffffffff9283169385019390935216606083015262ffffff16608082015260a001610460565b348015610efd57600080fd5b506104d7610f0c366004615399565b6132ad565b348015610f1d57600080fd5b5060a8546104f9906001600160a01b031681565b348015610f3d57600080fd5b506104d7610f4c366004615992565b613483565b348015610f5d57600080fd5b506104d7610f6c366004615399565b613604565b60007fffffffff0000000000000000000000000000000000000000000000000000000082167fe2ab7cf200000000000000000000000000000000000000000000000000000000148061100457507f01ffc9a7000000000000000000000000000000000000000000000000000000007fffffffff000000000000000000000000000000000000000000000000000000008316145b92915050565b6000611004606c83613724565b60345460009063ffffffff1661102c836129f0565b61100491906159ef565b6000546040517fe053dd610000000000000000000000000000000000000000000000000000000081523360048201526001600160a01b039091169063e053dd619060240160006040518083038186803b15801561109257600080fd5b505afa1580156110a6573d6000803e3d6000fd5b505050508063ffffffff166000036110ea576040517fe7b421c800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60006110f5426129f0565b9050804211801561112557506034546111189063ffffffff908116908416613746565b61112290826159ef565b42105b1561115c576040517fb2f1777700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040805160a08101825260335463ffffffff80821683526401000000008204166020830181905267ffffffffffffffff6801000000000000000083048116948401949094527001000000000000000000000000000000008204909316606083015262ffffff7801000000000000000000000000000000000000000000000000909104166080820152906111f090849061375c565b611226576040517f84153c9100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b806060015167ffffffffffffffff164210156112805761124a83826000015161375c565b611280576040517f84153c9100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040805163ffffffff851681523360208201527ffc521917f7d89bd122571083737b90fea921fe4dc631865293f5c5c450b74652910160405180910390a15050603480547fffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000001663ffffffff92909216919091179055565b6113003361306b565b611335576040517ead0c9500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b670de0b6b3a76400008167ffffffffffffffff161115611381576040517fcb3f365b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b336000818152606b60209081526040918290208251606081018452905467ffffffffffffffff808216835268010000000000000000820416928201929092527001000000000000000000000000000000009091046fffffffffffffffffffffffffffffffff1691810191909152906113f890612d59565b67ffffffffffffffff90811682528216602082015260745461142c906fffffffffffffffffffffffffffffffff1642615a02565b6fffffffffffffffffffffffffffffffff166040828101829052805167ffffffffffffffff85168152602081019290925233917f029674ff064f2d0d5b88c006bca2b7583291550ccf6462e8ae1a9b03d0479515910160405180910390a2336000908152606b6020908152604091829020835181549285015193909401516fffffffffffffffffffffffffffffffff9081167001000000000000000000000000000000000267ffffffffffffffff94851668010000000000000000027fffffffffffffffffffffffffffffffff000000000000000000000000000000009094169490951693909317919091179190911691909117905550565b805160005b818110156115f55761155483828151811061154757611547615a2b565b6020026020010151613780565b82818151811061156657611566615a2b565b60209081029190910101516040517f4c4d0d730000000000000000000000000000000000000000000000000000000081523360048201526001600160a01b0390911690634c4d0d7390602401600060405180830381600087803b1580156115cc57600080fd5b505af11580156115e0573d6000803e3d6000fd5b505050506115ee8160010190565b905061152a565b505050565b6000546040517fd994d6d50000000000000000000000000000000000000000000000000000000081523360048201526001600160a01b039091169063d994d6d590602401602060405180830381865afa15801561165b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061167f9190615a6a565b158015611712575060008054906101000a90046001600160a01b03166001600160a01b031663ce7ee5ac6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156116d8573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906116fc9190615a85565b6001600160a01b0316336001600160a01b031614155b15611749576040517f39f34f8400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60345461175c9063ffffffff168361375c565b611792576040517f7fc5120500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60008061179d611ef7565b6040805160a08101825260335467ffffffffffffffff700100000000000000000000000000000000820481166060840152780100000000000000000000000000000000000000000000000090910462ffffff16608083015263ffffffff848116808452908a1660208401529085169282018390529395509193509091611824919042613824565b67ffffffffffffffff166060820181905262ffffff851660808301526040805163ffffffff8816815260208101929092527f15c8ad9af95537fe83718dcd140a2b725b6e190fb5e68c4f13ff38232b86b77c910160405180910390a180516033805460208401516040850151606086015160809096015163ffffffff9586167fffffffffffffffffffffffffffffffffffffffffffffffff0000000000000000909416939093176401000000009590921694909402177fffffffffffffffff00000000000000000000000000000000ffffffffffffffff166801000000000000000067ffffffffffffffff948516027fffffffffffffffff0000000000000000ffffffffffffffffffffffffffffffff16177001000000000000000000000000000000009390941692909202929092177fffffffffff000000ffffffffffffffffffffffffffffffffffffffffffffffff16780100000000000000000000000000000000000000000000000062ffffff9092169190910217905550505050565b336000908152607160205260409020546001600160a01b0316806119f4576040517f412a573000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b33600090815260686020526040902054610100900460ff16611a42576040517fdfac5c4a00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b3360009081526068602052604090205462010000900460ff16611a91576040517f2272386e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b33600090815260686020526040902054640100000000900460ff16611ae2576040517f73f7ab1e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b670de0b6b3a76400008267ffffffffffffffff161115611b2e576040517fcb3f365b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b33600081815260686020908152604080832080547fffffffffffffffffffffffffffffffffffffffffffffffffffffff00ffffffff169055606b8252918290208251606081018452905467ffffffffffffffff808216835268010000000000000000820416928201929092527001000000000000000000000000000000009091046fffffffffffffffffffffffffffffffff169181019190915290611bd290612d59565b67ffffffffffffffff90811682528381166020808401918252336000908152606b909152604090819020845181549351928601516fffffffffffffffffffffffffffffffff9081167001000000000000000000000000000000000293861668010000000000000000027fffffffffffffffffffffffffffffffff0000000000000000000000000000000090951691909516179290921792909216919091179055611c7b8261383b565b604080820151815167ffffffffffffffff861681526fffffffffffffffffffffffffffffffff909116602082015233917f7dba82990ac719cd904649f1701fcda6db3c92f2ff9cd31ceed2eb989a441d3191015b60405180910390a2505050565b6001600160a01b038181166000908152606a6020526040812054909116158015906110045750506001600160a01b039081166000908152606a602090815260408083205460699092529091205482169116141590565b60af5460ff1615611d6f576040517fbc1eb20900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b611d77612de4565b600003611db0576040517fb9927e0d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b3415611e19573460ac6000828254611dc891906159ef565b9091555050604051348152339073f7ab6cfaebbadfe8b5494022c4c6db776bd63b6b907ff70d5c697de7ea828df48e5c4573cb2194c659f1901f70110c52b066dcf508269060200160405180910390a35b8015611e90578060ab6000828254611e3191906159ef565b909155505060a85460405182815233916001600160a01b0316907ff70d5c697de7ea828df48e5c4573cb2194c659f1901f70110c52b066dcf508269060200160405180910390a360a854611e90906001600160a01b031633308461386a565b50565b336000908152606960205260409020546001600160a01b0316611eb5816138f2565b6040516001600160a01b038216815233907f4815977db1df3778807ed9d5a0c32398684440c2cd8cfc0a411b47528214df7b906020015b60405180910390a250565b6040805160a08101825260335463ffffffff8082168352640100000000820416602083015268010000000000000000810467ffffffffffffffff90811693830193909352700100000000000000000000000000000000810490921660608201819052780100000000000000000000000000000000000000000000000090920462ffffff166080820152600091829190421061203957806080015162ffffff16816020015163ffffffff168260600151611fb09190615aa2565b611fba9190615aa2565b67ffffffffffffffff1642101561200257806060015167ffffffffffffffff16816080015162ffffff168260200151611ff39190615ac3565b63ffffffff1692509250509091565b806080015162ffffff16816060015161201b9190615aa2565b67ffffffffffffffff16816020015163ffffffff1692509250509091565b806040015167ffffffffffffffff16816000015163ffffffff1692509250509091565b60af5460ff1615612099576040517fbc1eb20900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b828181146120d3576040517fccab218c00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b33600090815260b0602052604081205460a95490916120f142612701565b905060005b8481101561215b5760008061214c8b8b8581811061211657612116615a2b565b905060200201602081019061212b9190615399565b8a8a8681811061213d5761213d615a2b565b90506020020135888888613979565b909650945050506001016120f6565b50612167338484613b0a565b5050505050505050565b805160005b818110156122a75760006001600160a01b03166072600085848151811061219f5761219f615a2b565b6020908102919091018101516001600160a01b039081168352908201929092526040016000205416036121fe576040517f3c91aa3a00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b82818151811061221057612210615a2b565b60209081029190910101516040517ff7b761580000000000000000000000000000000000000000000000000000000081526001600160a01b0386811660048301523360248301529091169063f7b7615890604401600060405180830381600087803b15801561227e57600080fd5b505af1158015612292573d6000803e3d6000fd5b505050506122a08160010190565b9050612176565b50505050565b6000611004606c83613be4565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805468010000000000000000810460ff16159067ffffffffffffffff166000811580156123055750825b905060008267ffffffffffffffff1660011480156123225750303b155b905081158015612330575080155b15612367576040517ff92ee8a900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b84547fffffffffffffffffffffffffffffffffffffffffffffffff000000000000000016600117855583156123c85784547fffffffffffffffffffffffffffffffffffffffffffffff00ffffffffffffffff16680100000000000000001785555b6123d78e8c8c8c8c8c8c613bf0565b8c60a860006101000a8154816001600160a01b0302191690836001600160a01b031602179055508b60a760006101000a8154816001600160a01b0302191690836001600160a01b0316021790555061242e426129d4565b60ae5583156124925784547fffffffffffffffffffffffffffffffffffffffffffffff00ffffffffffffffff168555604051600181527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b5050505050505050505050505050565b6124aa613c9b565b6124b382613d6d565b6124bd8282613de4565b5050565b60006124cb613f08565b507f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc90565b336000908152607160205260409020546001600160a01b031680612540576040517f412a573000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b33600090815260686020526040902054610100900460ff1661258e576040517fdfac5c4a00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b3360009081526068602052604090205462010000900460ff166125dd576040517f2272386e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b33600090815260686020526040902054640100000000900460ff161561262f576040517f905e710700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b33600090815260686020526040902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffff00ffffffff1664010000000017905560745461268a906fffffffffffffffffffffffffffffffff16426159ef565b336000908152606b6020526040902080546fffffffffffffffffffffffffffffffff9283167001000000000000000000000000000000000292169190911790556126d381613f6a565b60405133907fb6fa8b8bd5eab60f292eca876e3ef90722275b785309d84b1de113ce0b8c4e7490600090a250565b600080600061270e611ef7565b9150915061271d828286613f98565b949350505050565b6001600160a01b038082166000908152607260205260408120549091611004911661306b565b6000546040517f445ac6330000000000000000000000000000000000000000000000000000000081523360048201526001600160a01b039091169063445ac6339060240160006040518083038186803b1580156127a757600080fd5b505afa1580156127bb573d6000803e3d6000fd5b505050506115f5838383613fc2565b6000611004606e83613724565b60006127e3606e6141d9565b905090565b6000546040517f7e185f570000000000000000000000000000000000000000000000000000000081523360048201526001600160a01b0390911690637e185f579060240160006040518083038186803b15801561284457600080fd5b505afa158015612858573d6000803e3d6000fd5b505050506001600160a01b0381811660009081526071602052604090205416806128ae576040517f412a573000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001600160a01b03821660009081526068602052604090205462010000900460ff16612906576040517f2272386e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001600160a01b038216600090815260686020526040902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ffff16905561294d81613f6a565b6129588160006141e3565b6040516001600160a01b038316907f78c8e01ebc9b1b82f14af9f3a9b6fa7bdba5e36f9e96d15ca3aebc36cf72ce8590600090a25050565b612999816138f2565b6040516001600160a01b038216815233907ffd86eb6a6fd802b0b2edabf5bc13b0ada6e619b69bb19a08d048e2d2374de2d190602001611eec565b60008060006129e1611ef7565b9150915061271d828286613824565b60008060006129fd611ef7565b90925090506000612a0e8386615ae0565b9050818181612a1f57612a1f615af3565b06909403949350505050565b6000546040517f445ac6330000000000000000000000000000000000000000000000000000000081523360048201526001600160a01b039091169063445ac6339060240160006040518083038186803b158015612a8757600080fd5b505afa158015612a9b573d6000803e3d6000fd5b505050506001600160a01b038181166000908152607160205260409020541680612af1576040517f412a573000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001600160a01b03821660009081526068602052604090205460ff16612b43576040517f037c597f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001600160a01b038216600090815260686020526040902054610100900460ff1615612b9b576040517f0c60c81000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001600160a01b038216600090815260686020526040902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff16610100179055612be68161383b565b6040516001600160a01b038316907f333bb19eeef0621b32888db778cc7a481a89fc1d59adb2cecb59b40ef048941e90600090a25050565b60af5460ff1615612c5b576040517fbc1eb20900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b33600090815260b0602052604081205460a9548291612c869186918691612c8142612701565b613979565b915091506122a7338383613b0a565b6000546040517f445ac6330000000000000000000000000000000000000000000000000000000081523360048201526001600160a01b039091169063445ac6339060240160006040518083038186803b158015612cf157600080fd5b505afa158015612d05573d6000803e3d6000fd5b50505050612d1283614273565b50612d1e838383613fc2565b60405133906001600160a01b038516907f8af41f46390f96b58351b4d4f8afb27eea35637de1fb1b9538308b25497a27dc90600090a3505050565b6001600160a01b0381166000908152606b602090815260408083208151606081018352905467ffffffffffffffff808216835268010000000000000000820416938201939093527001000000000000000000000000000000009092046fffffffffffffffffffffffffffffffff169082018190524210612ddd576020015192915050565b5192915050565b60006127e3606c6141d9565b6000546040517f445ac6330000000000000000000000000000000000000000000000000000000081523360048201526001600160a01b039091169063445ac6339060240160006040518083038186803b158015612e4c57600080fd5b505afa158015612e60573d6000803e3d6000fd5b505050506001600160a01b038216600081815260686020908152604091829020805463010000006bffffffffffffffff00ffffff9091166c01000000000000000000000000606088901c021717905590517fffffffffffffffffffffffffffffffffffffffff000000000000000000000000841681527f6525882b4c209582fe16abd1257106636114aefe60495f27fcf096a21c8a6d34910160405180910390a25050565b600080546040517f7e185f570000000000000000000000000000000000000000000000000000000081523360048201526001600160a01b0390911690637e185f579060240160006040518083038186803b158015612f6257600080fd5b505afa158015612f76573d6000803e3d6000fd5b5050505061100482614273565b919050565b6000612f9342611017565b4210612fcb576040517f137d765400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60af5460ff1615613008576040517fbc1eb20900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60405133907fe64e289f2bf6b4f5ccbc1597d14be6638e1517b1b29e2ec5a05101f57d8d81e890600090a261303b6143cf565b60af80547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00168215179055919050565b6001600160a01b0381166000908152606860209081526040808320815160e081018352905460ff8082161515835261010082048116158015958401869052620100008304821615159484019490945263010000008204811615156060808501919091526401000000008304909116151560808401527fffffffffffffff0000000000000000000000000000000000000000000000000065010000000000830460c81b1660a08401527fffffffffffffffffffffffffffffffffffffffff0000000000000000000000006c01000000000000000000000000909204901b1660c0820152919061315a575080604001515b801561316857508060600151155b9392505050565b6001600160a01b038216600090815260b06020526040812054808203613199576001915050611004565b60a7546040517f70a082310000000000000000000000000000000000000000000000000000000081526001600160a01b038681166004830152839216906370a0823190602401602060405180830381865afa1580156131fc573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906132209190615b22565b1015949350505050565b60af5460009060ff161515810361326d576040517f3d0a971800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61303b6143cf565b6000611004606e83613be4565b600061328d336127ca565b156132a657503360009081526073602052604090205490565b5060ae5490565b6000546040517f445ac6330000000000000000000000000000000000000000000000000000000081523360048201526001600160a01b039091169063445ac6339060240160006040518083038186803b15801561330957600080fd5b505afa15801561331d573d6000803e3d6000fd5b505050506001600160a01b038116600090815260686020526040902054610100900460ff16613378576040517fdfac5c4a00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001600160a01b03808216600090815260686020908152604080832080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff169055607190915290205416801561344b576133d281613f6a565b6067546040517f95f948dc0000000000000000000000000000000000000000000000000000000081526001600160a01b039182166004820152908216906395f948dc90602401600060405180830381600087803b15801561343257600080fd5b505af1158015613446573d6000803e3d6000fd5b505050505b6040516001600160a01b038316907ffb4ca6a2470de95e9f648557fae63380f22c4b760bd27b0571caf5977a30278a90600090a25050565b6000546040517f445ac6330000000000000000000000000000000000000000000000000000000081523360048201526001600160a01b039091169063445ac6339060240160006040518083038186803b1580156134df57600080fd5b505afa1580156134f3573d6000803e3d6000fd5b505050506135008261306b565b613535576040517ead0c9500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001600160a01b038083166000908152606a60205260409020548116908216811461358c576040517f3b7db6df00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001600160a01b0383811660008181526069602090815260409182902080547fffffffffffffffffffffffff0000000000000000000000000000000000000000168686161790559051928516835290917f390b365b1e8016ae28db114a7764f9e95293831d64e8958261d56cf59a2c01739101611ccf565b6000546040517f445ac6330000000000000000000000000000000000000000000000000000000081523360048201526001600160a01b039091169063445ac6339060240160006040518083038186803b15801561366057600080fd5b505afa158015613674573d6000803e3d6000fd5b505050506001600160a01b0381166000908152606860205260409020546301000000900460ff166136d1576040517f6cd6020100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001600160a01b03811660008181526068602052604080822080546bffffffffffffffff00ffffff169055517f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa9190a250565b6001600160a01b03811660009081526001830160205260408120541515613168565b60008183116137555781613168565b5090919050565b6000613769836002615b3b565b63ffffffff168263ffffffff161015905092915050565b6001600160a01b0380821660009081526072602052604090205416806137d2576040517f3c91aa3a00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001600160a01b03811660009081526068602052604090205460ff166124bd576040517f037c597f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000613831848484613f98565b9091019392505050565b6138448161452a565b15611e9057613854606c82614639565b50613860606e8261464e565b50611e9081614663565b604080516001600160a01b0385811660248301528416604482015260648082018490528251808303909101815260849091019091526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f23b872dd000000000000000000000000000000000000000000000000000000001790526122a7908590614870565b336138fc8161306b565b613931576040517ead0c9500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001600160a01b039081166000908152606a602052604090208054919092167fffffffffffffffffffffffff0000000000000000000000000000000000000000909116179055565b60008061398587613780565b6040517fab3f22d50000000000000000000000000000000000000000000000000000000081523360048201526024810187905260448101849052600090819081906001600160a01b038b169063ab3f22d5906064016060604051808303816000875af11580156139f9573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613a1d9190615b63565b925092509250613a2c8a6127ca565b15613a805780613a68576040517f8b6f39e300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b613a728389615ae0565b9450869350613b0092505050565b8015613aa357613a908389615ae0565b9450613a9c8288615ae0565b9350613abc565b613aad83896159ef565b9450613ab982886159ef565b93505b6040518981526001600160a01b038b169033907fed07ca57097393e77ba36105a07f6810afc2180b72a9c02a4b0da4b51a73a6ec9060200160405180910390a35050505b9550959350505050565b6001600160a01b03838116600081815260b060205260409081902085905560a984905560a75490517f70a082310000000000000000000000000000000000000000000000000000000081526004810192909252909116906370a0823190602401602060405180830381865afa158015613b87573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613bab9190615b22565b8211156115f5576040517f2e0aee6200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600061316883836148ec565b613bf8614916565b613c048785858561497d565b613c0c614ae4565b607080547fffffffffffffffffffffffff00000000000000000000000000000000000000009081166001600160a01b03988916179091556067805490911695909616949094179094555050607480547fffffffffffffffffffffffffffffffff00000000000000000000000000000000166fffffffffffffffffffffffffffffffff9092169190911790555050565b306001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000161480613d3457507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316613d287f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc546001600160a01b031690565b6001600160a01b031614155b15613d6b576040517fe07c8dba00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b565b6000546040517feb6f7abf0000000000000000000000000000000000000000000000000000000081523360048201526001600160a01b039091169063eb6f7abf9060240160006040518083038186803b158015613dc957600080fd5b505afa158015613ddd573d6000803e3d6000fd5b5050505050565b816001600160a01b03166352d1902d6040518163ffffffff1660e01b8152600401602060405180830381865afa925050508015613e5c575060408051601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0168201909252613e5991810190615b22565b60015b613ea2576040517f4c9c8ce30000000000000000000000000000000000000000000000000000000081526001600160a01b03831660048201526024015b60405180910390fd5b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc8114613efe576040517faa1d49a400000000000000000000000000000000000000000000000000000000815260048101829052602401613e99565b6115f58383614aec565b306001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614613d6b576040517fe07c8dba00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b613f73816127ca565b611e9057613f82606e82614639565b50613f8e606c8261464e565b50611e9081614b42565b600080613fa58584615ae0565b9050838181613fb657613fb6615af3565b06909303949350505050565b6001600160a01b03831660009081526068602052604090205460ff1615614015576040517fef65161f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001600160a01b03838116600090815260686020908152604080832080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000166101011790556069909152902080547fffffffffffffffffffffffff000000000000000000000000000000000000000016918416919091179055670de0b6b3a764000067ffffffffffffffff821611156140db576040517fcb3f365b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001600160a01b038381166000818152606b602081815260408084208151606081018352815467ffffffffffffffff8a8116808452838701818152426fffffffffffffffffffffffffffffffff9081168689019081529a8c905298885284519051995189167001000000000000000000000000000000000299831668010000000000000000027fffffffffffffffffffffffffffffffff0000000000000000000000000000000090941692169190911791909117909516959095179055805195881686529085019190915290927f7c17fc62e6995162bad4a8b971071389b16be69a2aad3ffec7b89101ccf832f2910160405180910390a250505050565b6000611004825490565b60a8546040517f095ea7b30000000000000000000000000000000000000000000000000000000081526001600160a01b038481166004830152602482018490529091169063095ea7b3906044016020604051808303816000875af115801561424f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906115f59190615a6a565b6001600160a01b03811660009081526068602052604081205462010000900460ff16156142cc576040517f9add58c500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001600160a01b03828116600090815260716020526040902054161561431e576040517f7fe8efbb00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001600160a01b038216600090815260686020526040902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ffff166201000017905561436a82614c16565b9050614396817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6141e3565b6040516001600160a01b038316907f65b21a2a34a615112fde6cfc7e1bfef6dd30a04b0d2003751618b1571cab53d990600090a2919050565b60aa5460ad5460009190826143e2612de4565b905060006143fa826143f56014866159ef565b614d4f565b60ab5460ac5460a95460ae549394509192909190600080614419611ef7565b915091505b868910156144545761443d6144328a6122ad565b878787878787614d5e565b614447908b6159ef565b995060018901985061441e565b60405133907fcc320ee5dbf17441226d664c195a950e95eef67dc4dbebde435456c5389b427e90600090a287870361450f5760405133907f2e0a637781c44a621d21ae02c97a62860799594e47e453e0491eb348ebf83bff90600090a2600060ad81905560ac81905560ab81905560af80547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016905560aa5560a98a90556144fb426129d4565b60ae555060019a9950505050505050505050565b50505060ad9590955550505060aa9290925550600092915050565b6001600160a01b03808216600090815260726020908152604080832054909316825260688152828220835160e081018552905460ff8082161515835261010082048116158015948401859052620100008304821615159684019690965263010000008204811615156060808501919091526401000000008304909116151560808401527fffffffffffffff0000000000000000000000000000000000000000000000000065010000000000830460c81b1660a08401527fffffffffffffffffffffffffffffffffffffffff0000000000000000000000006c01000000000000000000000000909204901b1660c08201529192614627575080604001515b80156131685750608001511592915050565b6000613168836001600160a01b038416614ede565b6000613168836001600160a01b038416614f2d565b60af5460ff16156146a0576040517fbc1eb20900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b4260ae54116146db576040517fd0f0904700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60ae546001600160a01b03821660009081526073602052604090205410156147dd57600080614708611ef7565b6001600160a01b0385166000818152607360205260408082205490517fa505626a0000000000000000000000000000000000000000000000000000000081526004810183905260248101839052604481019190915260648101859052608481018490529395509193509163a505626a919060a40160206040518083038185885af115801561479a573d6000803e3d6000fd5b50505050506040513d601f19601f820116820180604052508101906147bf9190615b22565b60a960008282546147d091906159ef565b9091555061485692505050565b806001600160a01b031663e52595466040518163ffffffff1660e01b8152600401602060405180830381865afa15801561481b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061483f9190615b22565b60a9600082825461485091906159ef565b90915550505b6001600160a01b0316600090815260736020526040812055565b60006148856001600160a01b03841683615027565b905080516000141580156148aa5750808060200190518101906148a89190615a6a565b155b156115f5576040517f5274afe70000000000000000000000000000000000000000000000000000000081526001600160a01b0384166004820152602401613e99565b600082600001828154811061490357614903615a2b565b9060005260206000200154905092915050565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a005468010000000000000000900460ff16613d6b576040517fd7e6bcf800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b614985614916565b61498e84615035565b6040805160a0810182526033805463ffffffff9687168084526020840181905267ffffffffffffffff42169484018590526060840185905262ffffff9690961660809093018390527fffffffffffffffffffffffffffffffffffffffffffffffff0000000000000000168517640100000000909502949094177fffffffffffffffff00000000000000000000000000000000ffffffffffffffff166801000000000000000083027fffffffffffffffff0000000000000000ffffffffffffffffffffffffffffffff1617700100000000000000000000000000000000909202919091177fffffffffff000000ffffffffffffffffffffffffffffffffffffffffffffffff16780100000000000000000000000000000000000000000000000090910217909155603480547fffffffffffffffffffffffffffffffffffffffffffffffffffffffff00000000169190921617905550565b613d6b614916565b614af58261507f565b6040516001600160a01b038316907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a2805115614b3a576115f58282615127565b6124bd61519d565b60af5460ff1615614b7f576040517fbc1eb20900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b806001600160a01b031663e52595466040518163ffffffff1660e01b8152600401602060405180830381865afa158015614bbd573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190614be19190615b22565b60a96000828254614bf29190615ae0565b909155505060ae546001600160a01b03909116600090815260736020526040902055565b607054604080517fdc5a417900000000000000000000000000000000000000000000000000000000815290516000926001600160a01b03169163dc5a4179916004808301926020929190829003018187875af1158015614c7a573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190614c9e9190615a85565b6001600160a01b03808416600081815260716020908152604080832080549587167fffffffffffffffffffffffff0000000000000000000000000000000000000000968716811790915583526072909152902080549092161790559050614d06606c82614639565b506040513381526001600160a01b0380831691908416907f9b8203efe7fe42185a7755b0510f87c8b693971d6a7c22520aaf683e6b1242619060200160405180910390a3919050565b60008183106137555781613168565b600080886001600160a01b031663e52595466040518163ffffffff1660e01b8152600401602060405180830381865afa158015614d9f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190614dc39190615b22565b9050600086614dd28a84615b8f565b614ddc9190615ba6565b9050600087614deb8a85615b8f565b614df59190615ba6565b6001600160a01b03808d1660009081526072602052604081205492935091614e1d9116612d59565b6040517fa505626a0000000000000000000000000000000000000000000000000000000081526004810185905267ffffffffffffffff9190911660248201819052604482018a9052606482018990526084820188905291506001600160a01b038d169063a505626a90849060a40160206040518083038185885af1158015614ea9573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190614ece9190615b22565b9c9b505050505050505050505050565b6000818152600183016020526040812054614f2557508154600181810184556000848152602080822090930184905584548482528286019093526040902091909155611004565b506000611004565b60008181526001830160205260408120548015615016576000614f51600183615ae0565b8554909150600090614f6590600190615ae0565b9050808214614fca576000866000018281548110614f8557614f85615a2b565b9060005260206000200154905080876000018481548110614fa857614fa8615a2b565b6000918252602080832090910192909255918252600188019052604090208390555b8554869080614fdb57614fdb615be1565b600190038181906000526020600020016000905590558560010160008681526020019081526020016000206000905560019350505050611004565b6000915050611004565b5092915050565b6060613168838360006151d5565b61503d614916565b615045614ae4565b600080547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b0392909216919091179055565b806001600160a01b03163b6000036150ce576040517f4c9c8ce30000000000000000000000000000000000000000000000000000000081526001600160a01b0382166004820152602401613e99565b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc80547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b0392909216919091179055565b6060600080846001600160a01b0316846040516151449190615c10565b600060405180830381855af49150503d806000811461517f576040519150601f19603f3d011682016040523d82523d6000602084013e615184565b606091505b509150915061519485838361528b565b95945050505050565b3415613d6b576040517fb398979f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b606081471015615213576040517fcd786059000000000000000000000000000000000000000000000000000000008152306004820152602401613e99565b600080856001600160a01b0316848660405161522f9190615c10565b60006040518083038185875af1925050503d806000811461526c576040519150601f19603f3d011682016040523d82523d6000602084013e615271565b606091505b509150915061528186838361528b565b9695505050505050565b6060826152a05761529b82615300565b613168565b81511580156152b757506001600160a01b0384163b155b156152f9576040517f9996b3150000000000000000000000000000000000000000000000000000000081526001600160a01b0385166004820152602401613e99565b5080613168565b8051156153105780518082602001fd5b6040517f1425ea4200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60006020828403121561535457600080fd5b81357fffffffff000000000000000000000000000000000000000000000000000000008116811461316857600080fd5b6001600160a01b0381168114611e9057600080fd5b6000602082840312156153ab57600080fd5b813561316881615384565b6000602082840312156153c857600080fd5b5035919050565b803563ffffffff81168114612f8357600080fd5b6000602082840312156153f557600080fd5b613168826153cf565b803567ffffffffffffffff81168114612f8357600080fd5b60006020828403121561542857600080fd5b613168826153fe565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016810167ffffffffffffffff811182821017156154a7576154a7615431565b604052919050565b600082601f8301126154c057600080fd5b8135602067ffffffffffffffff8211156154dc576154dc615431565b8160051b6154eb828201615460565b928352848101820192828101908785111561550557600080fd5b83870192505b8483101561552d57823561551e81615384565b8252918301919083019061550b565b979650505050505050565b60006020828403121561554a57600080fd5b813567ffffffffffffffff81111561556157600080fd5b61271d848285016154af565b803562ffffff81168114612f8357600080fd5b6000806040838503121561559357600080fd5b61559c836153cf565b91506155aa6020840161556d565b90509250929050565b60008083601f8401126155c557600080fd5b50813567ffffffffffffffff8111156155dd57600080fd5b6020830191508360208260051b85010111156155f857600080fd5b9250929050565b6000806000806040858703121561561557600080fd5b843567ffffffffffffffff8082111561562d57600080fd5b615639888389016155b3565b9096509450602087013591508082111561565257600080fd5b5061565f878288016155b3565b95989497509550505050565b6000806040838503121561567e57600080fd5b823561568981615384565b9150602083013567ffffffffffffffff8111156156a557600080fd5b6156b1858286016154af565b9150509250929050565b60008060008060008060008060006101208a8c0312156156da57600080fd5b89356156e581615384565b985060208a01356156f581615384565b975060408a013561570581615384565b965060608a013561571581615384565b955060808a013561572581615384565b945061573360a08b016153cf565b935061574160c08b0161556d565b925061574f60e08b016153cf565b91506101008a01356fffffffffffffffffffffffffffffffff8116811461577557600080fd5b809150509295985092959850929598565b6000806040838503121561579957600080fd5b82356157a481615384565b915060208381013567ffffffffffffffff808211156157c257600080fd5b818601915086601f8301126157d657600080fd5b8135818111156157e8576157e8615431565b615818847fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f84011601615460565b9150808252878482850101111561582e57600080fd5b80848401858401376000848284010152508093505050509250929050565b60008060006060848603121561586157600080fd5b833561586c81615384565b9250602084013561587c81615384565b915061588a604085016153fe565b90509250925092565b60005b838110156158ae578181015183820152602001615896565b50506000910152565b60208152600082518060208401526158d6816040850160208701615893565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169190910160400192915050565b6000806040838503121561591b57600080fd5b823561592681615384565b946020939093013593505050565b6000806040838503121561594757600080fd5b823561595281615384565b915060208301357fffffffffffffffffffffffffffffffffffffffff0000000000000000000000008116811461598757600080fd5b809150509250929050565b600080604083850312156159a557600080fd5b82356159b081615384565b9150602083013561598781615384565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b80820180821115611004576110046159c0565b6fffffffffffffffffffffffffffffffff818116838216019080821115615020576150206159c0565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b80518015158114612f8357600080fd5b600060208284031215615a7c57600080fd5b61316882615a5a565b600060208284031215615a9757600080fd5b815161316881615384565b67ffffffffffffffff818116838216019080821115615020576150206159c0565b63ffffffff818116838216019080821115615020576150206159c0565b81810381811115611004576110046159c0565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b600060208284031215615b3457600080fd5b5051919050565b63ffffffff818116838216028082169190828114615b5b57615b5b6159c0565b505092915050565b600080600060608486031215615b7857600080fd5b835192506020840151915061588a60408501615a5a565b8082028115828204841417611004576110046159c0565b600082615bdc577f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b500490565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fd5b60008251615c22818460208701615893565b919091019291505056fea164736f6c6343000814000a", + "deployedBytecode": "0x60806040526004361061042f5760003560e01c806374c0dff111610228578063c58a1e4d11610128578063e45572ea116100bb578063efbdb5431161008a578063f7c618c11161006f578063f7c618c114610f11578063fafde1ec14610f31578063fd472fde14610f5157600080fd5b8063efbdb54314610e31578063f0527f8f14610ef157600080fd5b8063e45572ea14610d3e578063e4fc6b6d14610de7578063e64638d714610dfc578063ebe2b12b14610e1c57600080fd5b8063d3a954bb116100f7578063d3a954bb14610cc9578063d83623dd14610ce9578063dff6874814610cfe578063e2ab7cf214610d1e57600080fd5b8063c58a1e4d14610c5e578063caa9915e14610c73578063d2d8c93214610c93578063d2e6d1c314610ca957600080fd5b80639f96d06e116101bb578063acc2166a1161018a578063b78b52df1161016f578063b78b52df14610be5578063c042e76e14610c05578063c15382d814610c2557600080fd5b8063acc2166a14610b6f578063ad3cb1cc14610b8f57600080fd5b80639f96d06e14610aef578063a0d961c014610b0f578063a7c0782b14610b2f578063a8a90af714610b4f57600080fd5b80638dcb7ea4116101f75780638dcb7ea414610a645780639626f35814610a9a57806397e57cf914610aba5780639dcde81214610acf57600080fd5b806374c0dff1146109c45780637572392c14610a0e57806377bd9c2d14610a2457806381d8bd2c14610a4457600080fd5b80632ed480f7116103335780634be50762116102c6578063579e8c8e1161029557806371d8a4891161027a57806371d8a4891461094e57806372b874ad1461098457806372f702f3146109a457600080fd5b8063579e8c8e146109235780636912be2d1461093957600080fd5b80634be50762146108c55780634f1ef286146108e5578063517b989c146108f857806352d1902d1461090e57600080fd5b80634356d671116103025780634356d6711461083857806345b5cd311461085857806348d57282146108785780634b1d41fc1461089857600080fd5b80632ed480f7146107c65780633c6b16ab146107e65780633f1c49bf146107f957806341f265801461080e57600080fd5b806312ad2387116103c65780631f56d39c1161039557806323e978c11161037a57806323e978c11461075a578063278fdc691461079057806329ad14d3146107a657600080fd5b80631f56d39c146106fa57806323ae495b1461073a57600080fd5b806312ad238714610587578063187256eb146105a15780631d156dcf146105ce5780631d5cd0e61461060057600080fd5b80630d52333c116104025780630d52333c146104d95780630fa36b8214610511578063119234dd1461053157806311fb601a1461055157600080fd5b806301ffc9a71461043457806303184e311461046957806309022b13146104895780630b739693146104b7575b600080fd5b34801561044057600080fd5b5061045461044f366004615342565b610f71565b60405190151581526020015b60405180910390f35b34801561047557600080fd5b50610454610484366004615399565b61100a565b34801561049557600080fd5b506104a96104a43660046153b6565b611017565b604051908152602001610460565b3480156104c357600080fd5b506104d76104d23660046153e3565b611036565b005b3480156104e557600080fd5b506070546104f9906001600160a01b031681565b6040516001600160a01b039091168152602001610460565b34801561051d57600080fd5b506104d761052c366004615416565b6112f7565b34801561053d57600080fd5b506104d761054c366004615538565b611525565b34801561055d57600080fd5b506104f961056c366004615399565b606a602052600090815260409020546001600160a01b031681565b34801561059357600080fd5b5060af546104549060ff1681565b3480156105ad57600080fd5b506104a96105bc366004615399565b60b06020526000908152604090205481565b3480156105da57600080fd5b506034546105eb9063ffffffff1681565b60405163ffffffff9091168152602001610460565b34801561060c57600080fd5b5061067861061b366004615399565b60686020526000908152604090205460ff808216916101008104821691620100008204811691630100000081048216916401000000008204169065010000000000810460c81b906c01000000000000000000000000900460601b87565b6040805197151588529515156020880152931515948601949094529015156060850152151560808401527fffffffffffffff0000000000000000000000000000000000000000000000000090911660a08301527fffffffffffffffffffffffffffffffffffffffff0000000000000000000000001660c082015260e001610460565b34801561070657600080fd5b50610454610715366004615399565b6001600160a01b03166000908152606860205260409020546301000000900460ff1690565b34801561074657600080fd5b506104d7610755366004615580565b6115fa565b34801561076657600080fd5b506104f9610775366004615399565b6069602052600090815260409020546001600160a01b031681565b34801561079c57600080fd5b506104a960ac5481565b3480156107b257600080fd5b506104d76107c1366004615416565b6119a4565b3480156107d257600080fd5b506104546107e1366004615399565b611cdc565b6104d76107f43660046153b6565b611d32565b34801561080557600080fd5b506104d7611e93565b34801561081a57600080fd5b50610823611ef7565b60408051928352602083019190915201610460565b34801561084457600080fd5b506104d76108533660046155ff565b61205c565b34801561086457600080fd5b506104d761087336600461566b565b612171565b34801561088457600080fd5b506104f96108933660046153b6565b6122ad565b3480156108a457600080fd5b506104a96108b3366004615399565b60736020526000908152604090205481565b3480156108d157600080fd5b506104d76108e03660046156bb565b6122ba565b6104d76108f3366004615786565b6124a2565b34801561090457600080fd5b506104a960a95481565b34801561091a57600080fd5b506104a96124c1565b34801561092f57600080fd5b506104a960ab5481565b34801561094557600080fd5b506104d76124f0565b34801561095a57600080fd5b506104f9610969366004615399565b6071602052600090815260409020546001600160a01b031681565b34801561099057600080fd5b506104a961099f3660046153b6565b612701565b3480156109b057600080fd5b5060a7546104f9906001600160a01b031681565b3480156109d057600080fd5b506074546109ed906fffffffffffffffffffffffffffffffff1681565b6040516fffffffffffffffffffffffffffffffff9091168152602001610460565b348015610a1a57600080fd5b506104a960aa5481565b348015610a3057600080fd5b50610454610a3f366004615399565b612725565b348015610a5057600080fd5b506104d7610a5f36600461584c565b61274b565b348015610a7057600080fd5b506104f9610a7f366004615399565b6072602052600090815260409020546001600160a01b031681565b348015610aa657600080fd5b50610454610ab5366004615399565b6127ca565b348015610ac657600080fd5b506104a96127d7565b348015610adb57600080fd5b506104d7610aea366004615399565b6127e8565b348015610afb57600080fd5b506104d7610b0a366004615399565b612990565b348015610b1b57600080fd5b506104a9610b2a3660046153b6565b6129d4565b348015610b3b57600080fd5b506104a9610b4a3660046153b6565b6129f0565b348015610b5b57600080fd5b506104d7610b6a366004615399565b612a2b565b348015610b7b57600080fd5b506067546104f9906001600160a01b031681565b348015610b9b57600080fd5b50610bd86040518060400160405280600581526020017f352e302e3000000000000000000000000000000000000000000000000000000081525081565b60405161046091906158b7565b348015610bf157600080fd5b506104d7610c00366004615908565b612c1e565b348015610c1157600080fd5b506104d7610c2036600461584c565b612c95565b348015610c3157600080fd5b50610c45610c40366004615399565b612d59565b60405167ffffffffffffffff9091168152602001610460565b348015610c6a57600080fd5b506104a9612de4565b348015610c7f57600080fd5b506104d7610c8e366004615934565b612df0565b348015610c9f57600080fd5b506104a960ad5481565b348015610cb557600080fd5b506000546104f9906001600160a01b031681565b348015610cd557600080fd5b506104f9610ce4366004615399565b612f05565b348015610cf557600080fd5b50610454612f88565b348015610d0a57600080fd5b50610454610d19366004615399565b61306b565b348015610d2a57600080fd5b50610454610d39366004615908565b61316f565b348015610d4a57600080fd5b50610dae610d59366004615399565b606b6020526000908152604090205467ffffffffffffffff808216916801000000000000000081049091169070010000000000000000000000000000000090046fffffffffffffffffffffffffffffffff1683565b6040805167ffffffffffffffff94851681529390921660208401526fffffffffffffffffffffffffffffffff1690820152606001610460565b348015610df357600080fd5b5061045461322a565b348015610e0857600080fd5b506104f9610e173660046153b6565b613275565b348015610e2857600080fd5b506104a9613282565b348015610e3d57600080fd5b50603354610eaf9063ffffffff8082169164010000000081049091169067ffffffffffffffff68010000000000000000820481169170010000000000000000000000000000000081049091169062ffffff78010000000000000000000000000000000000000000000000009091041685565b6040805163ffffffff968716815295909416602086015267ffffffffffffffff9283169385019390935216606083015262ffffff16608082015260a001610460565b348015610efd57600080fd5b506104d7610f0c366004615399565b6132ad565b348015610f1d57600080fd5b5060a8546104f9906001600160a01b031681565b348015610f3d57600080fd5b506104d7610f4c366004615992565b613483565b348015610f5d57600080fd5b506104d7610f6c366004615399565b613604565b60007fffffffff0000000000000000000000000000000000000000000000000000000082167fe2ab7cf200000000000000000000000000000000000000000000000000000000148061100457507f01ffc9a7000000000000000000000000000000000000000000000000000000007fffffffff000000000000000000000000000000000000000000000000000000008316145b92915050565b6000611004606c83613724565b60345460009063ffffffff1661102c836129f0565b61100491906159ef565b6000546040517fe053dd610000000000000000000000000000000000000000000000000000000081523360048201526001600160a01b039091169063e053dd619060240160006040518083038186803b15801561109257600080fd5b505afa1580156110a6573d6000803e3d6000fd5b505050508063ffffffff166000036110ea576040517fe7b421c800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60006110f5426129f0565b9050804211801561112557506034546111189063ffffffff908116908416613746565b61112290826159ef565b42105b1561115c576040517fb2f1777700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040805160a08101825260335463ffffffff80821683526401000000008204166020830181905267ffffffffffffffff6801000000000000000083048116948401949094527001000000000000000000000000000000008204909316606083015262ffffff7801000000000000000000000000000000000000000000000000909104166080820152906111f090849061375c565b611226576040517f84153c9100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b806060015167ffffffffffffffff164210156112805761124a83826000015161375c565b611280576040517f84153c9100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040805163ffffffff851681523360208201527ffc521917f7d89bd122571083737b90fea921fe4dc631865293f5c5c450b74652910160405180910390a15050603480547fffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000001663ffffffff92909216919091179055565b6113003361306b565b611335576040517ead0c9500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b670de0b6b3a76400008167ffffffffffffffff161115611381576040517fcb3f365b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b336000818152606b60209081526040918290208251606081018452905467ffffffffffffffff808216835268010000000000000000820416928201929092527001000000000000000000000000000000009091046fffffffffffffffffffffffffffffffff1691810191909152906113f890612d59565b67ffffffffffffffff90811682528216602082015260745461142c906fffffffffffffffffffffffffffffffff1642615a02565b6fffffffffffffffffffffffffffffffff166040828101829052805167ffffffffffffffff85168152602081019290925233917f029674ff064f2d0d5b88c006bca2b7583291550ccf6462e8ae1a9b03d0479515910160405180910390a2336000908152606b6020908152604091829020835181549285015193909401516fffffffffffffffffffffffffffffffff9081167001000000000000000000000000000000000267ffffffffffffffff94851668010000000000000000027fffffffffffffffffffffffffffffffff000000000000000000000000000000009094169490951693909317919091179190911691909117905550565b805160005b818110156115f55761155483828151811061154757611547615a2b565b6020026020010151613780565b82818151811061156657611566615a2b565b60209081029190910101516040517f4c4d0d730000000000000000000000000000000000000000000000000000000081523360048201526001600160a01b0390911690634c4d0d7390602401600060405180830381600087803b1580156115cc57600080fd5b505af11580156115e0573d6000803e3d6000fd5b505050506115ee8160010190565b905061152a565b505050565b6000546040517fd994d6d50000000000000000000000000000000000000000000000000000000081523360048201526001600160a01b039091169063d994d6d590602401602060405180830381865afa15801561165b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061167f9190615a6a565b158015611712575060008054906101000a90046001600160a01b03166001600160a01b031663ce7ee5ac6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156116d8573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906116fc9190615a85565b6001600160a01b0316336001600160a01b031614155b15611749576040517f39f34f8400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60345461175c9063ffffffff168361375c565b611792576040517f7fc5120500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60008061179d611ef7565b6040805160a08101825260335467ffffffffffffffff700100000000000000000000000000000000820481166060840152780100000000000000000000000000000000000000000000000090910462ffffff16608083015263ffffffff848116808452908a1660208401529085169282018390529395509193509091611824919042613824565b67ffffffffffffffff166060820181905262ffffff851660808301526040805163ffffffff8816815260208101929092527f15c8ad9af95537fe83718dcd140a2b725b6e190fb5e68c4f13ff38232b86b77c910160405180910390a180516033805460208401516040850151606086015160809096015163ffffffff9586167fffffffffffffffffffffffffffffffffffffffffffffffff0000000000000000909416939093176401000000009590921694909402177fffffffffffffffff00000000000000000000000000000000ffffffffffffffff166801000000000000000067ffffffffffffffff948516027fffffffffffffffff0000000000000000ffffffffffffffffffffffffffffffff16177001000000000000000000000000000000009390941692909202929092177fffffffffff000000ffffffffffffffffffffffffffffffffffffffffffffffff16780100000000000000000000000000000000000000000000000062ffffff9092169190910217905550505050565b336000908152607160205260409020546001600160a01b0316806119f4576040517f412a573000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b33600090815260686020526040902054610100900460ff16611a42576040517fdfac5c4a00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b3360009081526068602052604090205462010000900460ff16611a91576040517f2272386e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b33600090815260686020526040902054640100000000900460ff16611ae2576040517f73f7ab1e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b670de0b6b3a76400008267ffffffffffffffff161115611b2e576040517fcb3f365b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b33600081815260686020908152604080832080547fffffffffffffffffffffffffffffffffffffffffffffffffffffff00ffffffff169055606b8252918290208251606081018452905467ffffffffffffffff808216835268010000000000000000820416928201929092527001000000000000000000000000000000009091046fffffffffffffffffffffffffffffffff169181019190915290611bd290612d59565b67ffffffffffffffff90811682528381166020808401918252336000908152606b909152604090819020845181549351928601516fffffffffffffffffffffffffffffffff9081167001000000000000000000000000000000000293861668010000000000000000027fffffffffffffffffffffffffffffffff0000000000000000000000000000000090951691909516179290921792909216919091179055611c7b8261383b565b604080820151815167ffffffffffffffff861681526fffffffffffffffffffffffffffffffff909116602082015233917f7dba82990ac719cd904649f1701fcda6db3c92f2ff9cd31ceed2eb989a441d3191015b60405180910390a2505050565b6001600160a01b038181166000908152606a6020526040812054909116158015906110045750506001600160a01b039081166000908152606a602090815260408083205460699092529091205482169116141590565b60af5460ff1615611d6f576040517fbc1eb20900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b611d77612de4565b600003611db0576040517fb9927e0d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b3415611e19573460ac6000828254611dc891906159ef565b9091555050604051348152339073f7ab6cfaebbadfe8b5494022c4c6db776bd63b6b907ff70d5c697de7ea828df48e5c4573cb2194c659f1901f70110c52b066dcf508269060200160405180910390a35b8015611e90578060ab6000828254611e3191906159ef565b909155505060a85460405182815233916001600160a01b0316907ff70d5c697de7ea828df48e5c4573cb2194c659f1901f70110c52b066dcf508269060200160405180910390a360a854611e90906001600160a01b031633308461386a565b50565b336000908152606960205260409020546001600160a01b0316611eb5816138f2565b6040516001600160a01b038216815233907f4815977db1df3778807ed9d5a0c32398684440c2cd8cfc0a411b47528214df7b906020015b60405180910390a250565b6040805160a08101825260335463ffffffff8082168352640100000000820416602083015268010000000000000000810467ffffffffffffffff90811693830193909352700100000000000000000000000000000000810490921660608201819052780100000000000000000000000000000000000000000000000090920462ffffff166080820152600091829190421061203957806080015162ffffff16816020015163ffffffff168260600151611fb09190615aa2565b611fba9190615aa2565b67ffffffffffffffff1642101561200257806060015167ffffffffffffffff16816080015162ffffff168260200151611ff39190615ac3565b63ffffffff1692509250509091565b806080015162ffffff16816060015161201b9190615aa2565b67ffffffffffffffff16816020015163ffffffff1692509250509091565b806040015167ffffffffffffffff16816000015163ffffffff1692509250509091565b60af5460ff1615612099576040517fbc1eb20900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b828181146120d3576040517fccab218c00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b33600090815260b0602052604081205460a95490916120f142612701565b905060005b8481101561215b5760008061214c8b8b8581811061211657612116615a2b565b905060200201602081019061212b9190615399565b8a8a8681811061213d5761213d615a2b565b90506020020135888888613979565b909650945050506001016120f6565b50612167338484613b0a565b5050505050505050565b805160005b818110156122a75760006001600160a01b03166072600085848151811061219f5761219f615a2b565b6020908102919091018101516001600160a01b039081168352908201929092526040016000205416036121fe576040517f3c91aa3a00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b82818151811061221057612210615a2b565b60209081029190910101516040517ff7b761580000000000000000000000000000000000000000000000000000000081526001600160a01b0386811660048301523360248301529091169063f7b7615890604401600060405180830381600087803b15801561227e57600080fd5b505af1158015612292573d6000803e3d6000fd5b505050506122a08160010190565b9050612176565b50505050565b6000611004606c83613be4565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805468010000000000000000810460ff16159067ffffffffffffffff166000811580156123055750825b905060008267ffffffffffffffff1660011480156123225750303b155b905081158015612330575080155b15612367576040517ff92ee8a900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b84547fffffffffffffffffffffffffffffffffffffffffffffffff000000000000000016600117855583156123c85784547fffffffffffffffffffffffffffffffffffffffffffffff00ffffffffffffffff16680100000000000000001785555b6123d78e8c8c8c8c8c8c613bf0565b8c60a860006101000a8154816001600160a01b0302191690836001600160a01b031602179055508b60a760006101000a8154816001600160a01b0302191690836001600160a01b0316021790555061242e426129d4565b60ae5583156124925784547fffffffffffffffffffffffffffffffffffffffffffffff00ffffffffffffffff168555604051600181527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b5050505050505050505050505050565b6124aa613c9b565b6124b382613d6d565b6124bd8282613de4565b5050565b60006124cb613f08565b507f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc90565b336000908152607160205260409020546001600160a01b031680612540576040517f412a573000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b33600090815260686020526040902054610100900460ff1661258e576040517fdfac5c4a00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b3360009081526068602052604090205462010000900460ff166125dd576040517f2272386e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b33600090815260686020526040902054640100000000900460ff161561262f576040517f905e710700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b33600090815260686020526040902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffff00ffffffff1664010000000017905560745461268a906fffffffffffffffffffffffffffffffff16426159ef565b336000908152606b6020526040902080546fffffffffffffffffffffffffffffffff9283167001000000000000000000000000000000000292169190911790556126d381613f6a565b60405133907fb6fa8b8bd5eab60f292eca876e3ef90722275b785309d84b1de113ce0b8c4e7490600090a250565b600080600061270e611ef7565b9150915061271d828286613f98565b949350505050565b6001600160a01b038082166000908152607260205260408120549091611004911661306b565b6000546040517f445ac6330000000000000000000000000000000000000000000000000000000081523360048201526001600160a01b039091169063445ac6339060240160006040518083038186803b1580156127a757600080fd5b505afa1580156127bb573d6000803e3d6000fd5b505050506115f5838383613fc2565b6000611004606e83613724565b60006127e3606e6141d9565b905090565b6000546040517f7e185f570000000000000000000000000000000000000000000000000000000081523360048201526001600160a01b0390911690637e185f579060240160006040518083038186803b15801561284457600080fd5b505afa158015612858573d6000803e3d6000fd5b505050506001600160a01b0381811660009081526071602052604090205416806128ae576040517f412a573000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001600160a01b03821660009081526068602052604090205462010000900460ff16612906576040517f2272386e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001600160a01b038216600090815260686020526040902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ffff16905561294d81613f6a565b6129588160006141e3565b6040516001600160a01b038316907f78c8e01ebc9b1b82f14af9f3a9b6fa7bdba5e36f9e96d15ca3aebc36cf72ce8590600090a25050565b612999816138f2565b6040516001600160a01b038216815233907ffd86eb6a6fd802b0b2edabf5bc13b0ada6e619b69bb19a08d048e2d2374de2d190602001611eec565b60008060006129e1611ef7565b9150915061271d828286613824565b60008060006129fd611ef7565b90925090506000612a0e8386615ae0565b9050818181612a1f57612a1f615af3565b06909403949350505050565b6000546040517f445ac6330000000000000000000000000000000000000000000000000000000081523360048201526001600160a01b039091169063445ac6339060240160006040518083038186803b158015612a8757600080fd5b505afa158015612a9b573d6000803e3d6000fd5b505050506001600160a01b038181166000908152607160205260409020541680612af1576040517f412a573000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001600160a01b03821660009081526068602052604090205460ff16612b43576040517f037c597f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001600160a01b038216600090815260686020526040902054610100900460ff1615612b9b576040517f0c60c81000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001600160a01b038216600090815260686020526040902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff16610100179055612be68161383b565b6040516001600160a01b038316907f333bb19eeef0621b32888db778cc7a481a89fc1d59adb2cecb59b40ef048941e90600090a25050565b60af5460ff1615612c5b576040517fbc1eb20900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b33600090815260b0602052604081205460a9548291612c869186918691612c8142612701565b613979565b915091506122a7338383613b0a565b6000546040517f445ac6330000000000000000000000000000000000000000000000000000000081523360048201526001600160a01b039091169063445ac6339060240160006040518083038186803b158015612cf157600080fd5b505afa158015612d05573d6000803e3d6000fd5b50505050612d1283614273565b50612d1e838383613fc2565b60405133906001600160a01b038516907f8af41f46390f96b58351b4d4f8afb27eea35637de1fb1b9538308b25497a27dc90600090a3505050565b6001600160a01b0381166000908152606b602090815260408083208151606081018352905467ffffffffffffffff808216835268010000000000000000820416938201939093527001000000000000000000000000000000009092046fffffffffffffffffffffffffffffffff169082018190524210612ddd576020015192915050565b5192915050565b60006127e3606c6141d9565b6000546040517f445ac6330000000000000000000000000000000000000000000000000000000081523360048201526001600160a01b039091169063445ac6339060240160006040518083038186803b158015612e4c57600080fd5b505afa158015612e60573d6000803e3d6000fd5b505050506001600160a01b038216600081815260686020908152604091829020805463010000006bffffffffffffffff00ffffff9091166c01000000000000000000000000606088901c021717905590517fffffffffffffffffffffffffffffffffffffffff000000000000000000000000841681527f6525882b4c209582fe16abd1257106636114aefe60495f27fcf096a21c8a6d34910160405180910390a25050565b600080546040517f7e185f570000000000000000000000000000000000000000000000000000000081523360048201526001600160a01b0390911690637e185f579060240160006040518083038186803b158015612f6257600080fd5b505afa158015612f76573d6000803e3d6000fd5b5050505061100482614273565b919050565b6000612f9342611017565b4210612fcb576040517f137d765400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60af5460ff1615613008576040517fbc1eb20900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60405133907fe64e289f2bf6b4f5ccbc1597d14be6638e1517b1b29e2ec5a05101f57d8d81e890600090a261303b6143cf565b60af80547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00168215179055919050565b6001600160a01b0381166000908152606860209081526040808320815160e081018352905460ff8082161515835261010082048116158015958401869052620100008304821615159484019490945263010000008204811615156060808501919091526401000000008304909116151560808401527fffffffffffffff0000000000000000000000000000000000000000000000000065010000000000830460c81b1660a08401527fffffffffffffffffffffffffffffffffffffffff0000000000000000000000006c01000000000000000000000000909204901b1660c0820152919061315a575080604001515b801561316857508060600151155b9392505050565b6001600160a01b038216600090815260b06020526040812054808203613199576001915050611004565b60a7546040517f70a082310000000000000000000000000000000000000000000000000000000081526001600160a01b038681166004830152839216906370a0823190602401602060405180830381865afa1580156131fc573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906132209190615b22565b1015949350505050565b60af5460009060ff161515810361326d576040517f3d0a971800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61303b6143cf565b6000611004606e83613be4565b600061328d336127ca565b156132a657503360009081526073602052604090205490565b5060ae5490565b6000546040517f445ac6330000000000000000000000000000000000000000000000000000000081523360048201526001600160a01b039091169063445ac6339060240160006040518083038186803b15801561330957600080fd5b505afa15801561331d573d6000803e3d6000fd5b505050506001600160a01b038116600090815260686020526040902054610100900460ff16613378576040517fdfac5c4a00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001600160a01b03808216600090815260686020908152604080832080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff169055607190915290205416801561344b576133d281613f6a565b6067546040517f95f948dc0000000000000000000000000000000000000000000000000000000081526001600160a01b039182166004820152908216906395f948dc90602401600060405180830381600087803b15801561343257600080fd5b505af1158015613446573d6000803e3d6000fd5b505050505b6040516001600160a01b038316907ffb4ca6a2470de95e9f648557fae63380f22c4b760bd27b0571caf5977a30278a90600090a25050565b6000546040517f445ac6330000000000000000000000000000000000000000000000000000000081523360048201526001600160a01b039091169063445ac6339060240160006040518083038186803b1580156134df57600080fd5b505afa1580156134f3573d6000803e3d6000fd5b505050506135008261306b565b613535576040517ead0c9500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001600160a01b038083166000908152606a60205260409020548116908216811461358c576040517f3b7db6df00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001600160a01b0383811660008181526069602090815260409182902080547fffffffffffffffffffffffff0000000000000000000000000000000000000000168686161790559051928516835290917f390b365b1e8016ae28db114a7764f9e95293831d64e8958261d56cf59a2c01739101611ccf565b6000546040517f445ac6330000000000000000000000000000000000000000000000000000000081523360048201526001600160a01b039091169063445ac6339060240160006040518083038186803b15801561366057600080fd5b505afa158015613674573d6000803e3d6000fd5b505050506001600160a01b0381166000908152606860205260409020546301000000900460ff166136d1576040517f6cd6020100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001600160a01b03811660008181526068602052604080822080546bffffffffffffffff00ffffff169055517f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa9190a250565b6001600160a01b03811660009081526001830160205260408120541515613168565b60008183116137555781613168565b5090919050565b6000613769836002615b3b565b63ffffffff168263ffffffff161015905092915050565b6001600160a01b0380821660009081526072602052604090205416806137d2576040517f3c91aa3a00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001600160a01b03811660009081526068602052604090205460ff166124bd576040517f037c597f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000613831848484613f98565b9091019392505050565b6138448161452a565b15611e9057613854606c82614639565b50613860606e8261464e565b50611e9081614663565b604080516001600160a01b0385811660248301528416604482015260648082018490528251808303909101815260849091019091526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f23b872dd000000000000000000000000000000000000000000000000000000001790526122a7908590614870565b336138fc8161306b565b613931576040517ead0c9500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001600160a01b039081166000908152606a602052604090208054919092167fffffffffffffffffffffffff0000000000000000000000000000000000000000909116179055565b60008061398587613780565b6040517fab3f22d50000000000000000000000000000000000000000000000000000000081523360048201526024810187905260448101849052600090819081906001600160a01b038b169063ab3f22d5906064016060604051808303816000875af11580156139f9573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613a1d9190615b63565b925092509250613a2c8a6127ca565b15613a805780613a68576040517f8b6f39e300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b613a728389615ae0565b9450869350613b0092505050565b8015613aa357613a908389615ae0565b9450613a9c8288615ae0565b9350613abc565b613aad83896159ef565b9450613ab982886159ef565b93505b6040518981526001600160a01b038b169033907fed07ca57097393e77ba36105a07f6810afc2180b72a9c02a4b0da4b51a73a6ec9060200160405180910390a35050505b9550959350505050565b6001600160a01b03838116600081815260b060205260409081902085905560a984905560a75490517f70a082310000000000000000000000000000000000000000000000000000000081526004810192909252909116906370a0823190602401602060405180830381865afa158015613b87573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613bab9190615b22565b8211156115f5576040517f2e0aee6200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600061316883836148ec565b613bf8614916565b613c048785858561497d565b613c0c614ae4565b607080547fffffffffffffffffffffffff00000000000000000000000000000000000000009081166001600160a01b03988916179091556067805490911695909616949094179094555050607480547fffffffffffffffffffffffffffffffff00000000000000000000000000000000166fffffffffffffffffffffffffffffffff9092169190911790555050565b306001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000161480613d3457507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316613d287f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc546001600160a01b031690565b6001600160a01b031614155b15613d6b576040517fe07c8dba00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b565b6000546040517feb6f7abf0000000000000000000000000000000000000000000000000000000081523360048201526001600160a01b039091169063eb6f7abf9060240160006040518083038186803b158015613dc957600080fd5b505afa158015613ddd573d6000803e3d6000fd5b5050505050565b816001600160a01b03166352d1902d6040518163ffffffff1660e01b8152600401602060405180830381865afa925050508015613e5c575060408051601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0168201909252613e5991810190615b22565b60015b613ea2576040517f4c9c8ce30000000000000000000000000000000000000000000000000000000081526001600160a01b03831660048201526024015b60405180910390fd5b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc8114613efe576040517faa1d49a400000000000000000000000000000000000000000000000000000000815260048101829052602401613e99565b6115f58383614aec565b306001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614613d6b576040517fe07c8dba00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b613f73816127ca565b611e9057613f82606e82614639565b50613f8e606c8261464e565b50611e9081614b42565b600080613fa58584615ae0565b9050838181613fb657613fb6615af3565b06909303949350505050565b6001600160a01b03831660009081526068602052604090205460ff1615614015576040517fef65161f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001600160a01b03838116600090815260686020908152604080832080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000166101011790556069909152902080547fffffffffffffffffffffffff000000000000000000000000000000000000000016918416919091179055670de0b6b3a764000067ffffffffffffffff821611156140db576040517fcb3f365b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001600160a01b038381166000818152606b602081815260408084208151606081018352815467ffffffffffffffff8a8116808452838701818152426fffffffffffffffffffffffffffffffff9081168689019081529a8c905298885284519051995189167001000000000000000000000000000000000299831668010000000000000000027fffffffffffffffffffffffffffffffff0000000000000000000000000000000090941692169190911791909117909516959095179055805195881686529085019190915290927f7c17fc62e6995162bad4a8b971071389b16be69a2aad3ffec7b89101ccf832f2910160405180910390a250505050565b6000611004825490565b60a8546040517f095ea7b30000000000000000000000000000000000000000000000000000000081526001600160a01b038481166004830152602482018490529091169063095ea7b3906044016020604051808303816000875af115801561424f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906115f59190615a6a565b6001600160a01b03811660009081526068602052604081205462010000900460ff16156142cc576040517f9add58c500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001600160a01b03828116600090815260716020526040902054161561431e576040517f7fe8efbb00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001600160a01b038216600090815260686020526040902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ffff166201000017905561436a82614c16565b9050614396817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6141e3565b6040516001600160a01b038316907f65b21a2a34a615112fde6cfc7e1bfef6dd30a04b0d2003751618b1571cab53d990600090a2919050565b60aa5460ad5460009190826143e2612de4565b905060006143fa826143f56014866159ef565b614d4f565b60ab5460ac5460a95460ae549394509192909190600080614419611ef7565b915091505b868910156144545761443d6144328a6122ad565b878787878787614d5e565b614447908b6159ef565b995060018901985061441e565b60405133907fcc320ee5dbf17441226d664c195a950e95eef67dc4dbebde435456c5389b427e90600090a287870361450f5760405133907f2e0a637781c44a621d21ae02c97a62860799594e47e453e0491eb348ebf83bff90600090a2600060ad81905560ac81905560ab81905560af80547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016905560aa5560a98a90556144fb426129d4565b60ae555060019a9950505050505050505050565b50505060ad9590955550505060aa9290925550600092915050565b6001600160a01b03808216600090815260726020908152604080832054909316825260688152828220835160e081018552905460ff8082161515835261010082048116158015948401859052620100008304821615159684019690965263010000008204811615156060808501919091526401000000008304909116151560808401527fffffffffffffff0000000000000000000000000000000000000000000000000065010000000000830460c81b1660a08401527fffffffffffffffffffffffffffffffffffffffff0000000000000000000000006c01000000000000000000000000909204901b1660c08201529192614627575080604001515b80156131685750608001511592915050565b6000613168836001600160a01b038416614ede565b6000613168836001600160a01b038416614f2d565b60af5460ff16156146a0576040517fbc1eb20900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b4260ae54116146db576040517fd0f0904700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60ae546001600160a01b03821660009081526073602052604090205410156147dd57600080614708611ef7565b6001600160a01b0385166000818152607360205260408082205490517fa505626a0000000000000000000000000000000000000000000000000000000081526004810183905260248101839052604481019190915260648101859052608481018490529395509193509163a505626a919060a40160206040518083038185885af115801561479a573d6000803e3d6000fd5b50505050506040513d601f19601f820116820180604052508101906147bf9190615b22565b60a960008282546147d091906159ef565b9091555061485692505050565b806001600160a01b031663e52595466040518163ffffffff1660e01b8152600401602060405180830381865afa15801561481b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061483f9190615b22565b60a9600082825461485091906159ef565b90915550505b6001600160a01b0316600090815260736020526040812055565b60006148856001600160a01b03841683615027565b905080516000141580156148aa5750808060200190518101906148a89190615a6a565b155b156115f5576040517f5274afe70000000000000000000000000000000000000000000000000000000081526001600160a01b0384166004820152602401613e99565b600082600001828154811061490357614903615a2b565b9060005260206000200154905092915050565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a005468010000000000000000900460ff16613d6b576040517fd7e6bcf800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b614985614916565b61498e84615035565b6040805160a0810182526033805463ffffffff9687168084526020840181905267ffffffffffffffff42169484018590526060840185905262ffffff9690961660809093018390527fffffffffffffffffffffffffffffffffffffffffffffffff0000000000000000168517640100000000909502949094177fffffffffffffffff00000000000000000000000000000000ffffffffffffffff166801000000000000000083027fffffffffffffffff0000000000000000ffffffffffffffffffffffffffffffff1617700100000000000000000000000000000000909202919091177fffffffffff000000ffffffffffffffffffffffffffffffffffffffffffffffff16780100000000000000000000000000000000000000000000000090910217909155603480547fffffffffffffffffffffffffffffffffffffffffffffffffffffffff00000000169190921617905550565b613d6b614916565b614af58261507f565b6040516001600160a01b038316907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a2805115614b3a576115f58282615127565b6124bd61519d565b60af5460ff1615614b7f576040517fbc1eb20900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b806001600160a01b031663e52595466040518163ffffffff1660e01b8152600401602060405180830381865afa158015614bbd573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190614be19190615b22565b60a96000828254614bf29190615ae0565b909155505060ae546001600160a01b03909116600090815260736020526040902055565b607054604080517fdc5a417900000000000000000000000000000000000000000000000000000000815290516000926001600160a01b03169163dc5a4179916004808301926020929190829003018187875af1158015614c7a573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190614c9e9190615a85565b6001600160a01b03808416600081815260716020908152604080832080549587167fffffffffffffffffffffffff0000000000000000000000000000000000000000968716811790915583526072909152902080549092161790559050614d06606c82614639565b506040513381526001600160a01b0380831691908416907f9b8203efe7fe42185a7755b0510f87c8b693971d6a7c22520aaf683e6b1242619060200160405180910390a3919050565b60008183106137555781613168565b600080886001600160a01b031663e52595466040518163ffffffff1660e01b8152600401602060405180830381865afa158015614d9f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190614dc39190615b22565b9050600086614dd28a84615b8f565b614ddc9190615ba6565b9050600087614deb8a85615b8f565b614df59190615ba6565b6001600160a01b03808d1660009081526072602052604081205492935091614e1d9116612d59565b6040517fa505626a0000000000000000000000000000000000000000000000000000000081526004810185905267ffffffffffffffff9190911660248201819052604482018a9052606482018990526084820188905291506001600160a01b038d169063a505626a90849060a40160206040518083038185885af1158015614ea9573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190614ece9190615b22565b9c9b505050505050505050505050565b6000818152600183016020526040812054614f2557508154600181810184556000848152602080822090930184905584548482528286019093526040902091909155611004565b506000611004565b60008181526001830160205260408120548015615016576000614f51600183615ae0565b8554909150600090614f6590600190615ae0565b9050808214614fca576000866000018281548110614f8557614f85615a2b565b9060005260206000200154905080876000018481548110614fa857614fa8615a2b565b6000918252602080832090910192909255918252600188019052604090208390555b8554869080614fdb57614fdb615be1565b600190038181906000526020600020016000905590558560010160008681526020019081526020016000206000905560019350505050611004565b6000915050611004565b5092915050565b6060613168838360006151d5565b61503d614916565b615045614ae4565b600080547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b0392909216919091179055565b806001600160a01b03163b6000036150ce576040517f4c9c8ce30000000000000000000000000000000000000000000000000000000081526001600160a01b0382166004820152602401613e99565b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc80547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b0392909216919091179055565b6060600080846001600160a01b0316846040516151449190615c10565b600060405180830381855af49150503d806000811461517f576040519150601f19603f3d011682016040523d82523d6000602084013e615184565b606091505b509150915061519485838361528b565b95945050505050565b3415613d6b576040517fb398979f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b606081471015615213576040517fcd786059000000000000000000000000000000000000000000000000000000008152306004820152602401613e99565b600080856001600160a01b0316848660405161522f9190615c10565b60006040518083038185875af1925050503d806000811461526c576040519150601f19603f3d011682016040523d82523d6000602084013e615271565b606091505b509150915061528186838361528b565b9695505050505050565b6060826152a05761529b82615300565b613168565b81511580156152b757506001600160a01b0384163b155b156152f9576040517f9996b3150000000000000000000000000000000000000000000000000000000081526001600160a01b0385166004820152602401613e99565b5080613168565b8051156153105780518082602001fd5b6040517f1425ea4200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60006020828403121561535457600080fd5b81357fffffffff000000000000000000000000000000000000000000000000000000008116811461316857600080fd5b6001600160a01b0381168114611e9057600080fd5b6000602082840312156153ab57600080fd5b813561316881615384565b6000602082840312156153c857600080fd5b5035919050565b803563ffffffff81168114612f8357600080fd5b6000602082840312156153f557600080fd5b613168826153cf565b803567ffffffffffffffff81168114612f8357600080fd5b60006020828403121561542857600080fd5b613168826153fe565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016810167ffffffffffffffff811182821017156154a7576154a7615431565b604052919050565b600082601f8301126154c057600080fd5b8135602067ffffffffffffffff8211156154dc576154dc615431565b8160051b6154eb828201615460565b928352848101820192828101908785111561550557600080fd5b83870192505b8483101561552d57823561551e81615384565b8252918301919083019061550b565b979650505050505050565b60006020828403121561554a57600080fd5b813567ffffffffffffffff81111561556157600080fd5b61271d848285016154af565b803562ffffff81168114612f8357600080fd5b6000806040838503121561559357600080fd5b61559c836153cf565b91506155aa6020840161556d565b90509250929050565b60008083601f8401126155c557600080fd5b50813567ffffffffffffffff8111156155dd57600080fd5b6020830191508360208260051b85010111156155f857600080fd5b9250929050565b6000806000806040858703121561561557600080fd5b843567ffffffffffffffff8082111561562d57600080fd5b615639888389016155b3565b9096509450602087013591508082111561565257600080fd5b5061565f878288016155b3565b95989497509550505050565b6000806040838503121561567e57600080fd5b823561568981615384565b9150602083013567ffffffffffffffff8111156156a557600080fd5b6156b1858286016154af565b9150509250929050565b60008060008060008060008060006101208a8c0312156156da57600080fd5b89356156e581615384565b985060208a01356156f581615384565b975060408a013561570581615384565b965060608a013561571581615384565b955060808a013561572581615384565b945061573360a08b016153cf565b935061574160c08b0161556d565b925061574f60e08b016153cf565b91506101008a01356fffffffffffffffffffffffffffffffff8116811461577557600080fd5b809150509295985092959850929598565b6000806040838503121561579957600080fd5b82356157a481615384565b915060208381013567ffffffffffffffff808211156157c257600080fd5b818601915086601f8301126157d657600080fd5b8135818111156157e8576157e8615431565b615818847fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f84011601615460565b9150808252878482850101111561582e57600080fd5b80848401858401376000848284010152508093505050509250929050565b60008060006060848603121561586157600080fd5b833561586c81615384565b9250602084013561587c81615384565b915061588a604085016153fe565b90509250925092565b60005b838110156158ae578181015183820152602001615896565b50506000910152565b60208152600082518060208401526158d6816040850160208701615893565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169190910160400192915050565b6000806040838503121561591b57600080fd5b823561592681615384565b946020939093013593505050565b6000806040838503121561594757600080fd5b823561595281615384565b915060208301357fffffffffffffffffffffffffffffffffffffffff0000000000000000000000008116811461598757600080fd5b809150509250929050565b600080604083850312156159a557600080fd5b82356159b081615384565b9150602083013561598781615384565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b80820180821115611004576110046159c0565b6fffffffffffffffffffffffffffffffff818116838216019080821115615020576150206159c0565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b80518015158114612f8357600080fd5b600060208284031215615a7c57600080fd5b61316882615a5a565b600060208284031215615a9757600080fd5b815161316881615384565b67ffffffffffffffff818116838216019080821115615020576150206159c0565b63ffffffff818116838216019080821115615020576150206159c0565b81810381811115611004576110046159c0565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b600060208284031215615b3457600080fd5b5051919050565b63ffffffff818116838216028082169190828114615b5b57615b5b6159c0565b505092915050565b600080600060608486031215615b7857600080fd5b835192506020840151915061588a60408501615a5a565b8082028115828204841417611004576110046159c0565b600082615bdc577f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b500490565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fd5b60008251615c22818460208701615893565b919091019291505056fea164736f6c6343000814000a", + "devdoc": { + "version": 1, + "kind": "dev", + "methods": { + "activateBuilder(address,address,uint64)": { + "details": "reverts if it is not called by the owner address reverts if it is already activated", + "params": { + "builder_": "address of the builder", + "rewardPercentage_": "reward percentage(100% == 1 ether)", + "rewardReceiver_": "address of the builder reward receiver" + } + }, + "allocate(address,uint256)": { + "details": "reverts if it is called during the distribution period reverts if gauge does not have a builder associated", + "params": { + "allocation_": "amount of votes to allocate", + "gauge_": "address of the gauge where the votes will be allocated" + } + }, + "allocateBatch(address[],uint256[])": { + "details": "reverts if it is called during the distribution period reverts if gauge does not have a builder associated", + "params": { + "allocations_": "array of amount of votes to allocate", + "gauges_": "array of gauges where the votes will be allocated" + } + }, + "approveBuidlerRewardReceiverReplacement(address,address)": { + "details": "reverts if provided `rewardReceiverReplacement_` doesn't match Builder's request", + "params": { + "builder_": "address of the builder", + "rewardReceiverReplacement_": "new address the builder is requesting to use" + } + }, + "approveBuilderKYC(address)": { + "details": "reverts if it is not called by the owner address reverts if it is not activated reverts if it is already KYC approved reverts if it does not have a gauge associated", + "params": { + "builder_": "address of the builder" + } + }, + "canWithdraw(address,uint256)": { + "details": "user token balance should already account for the update, meaning the check is applied AFTER the withdraw accounting has become effective.", + "params": { + "targetAddress_": "address who wants to withdraw stakingToken param value_ amount of stakingToken to withdraw, not used on current version" + } + }, + "cancelRewardReceiverReplacementRequest()": { + "details": "reverts if Builder is not Operational" + }, + "claimBackerRewards(address,address[])": { + "params": { + "gauges_": "array of gauges to claim", + "rewardToken_": "address of the token rewarded address(uint160(uint256(keccak256(\"COINBASE_ADDRESS\")))) is used for coinbase address" + } + }, + "claimBackerRewards(address[])": { + "params": { + "gauges_": "array of gauges to claim" + } + }, + "communityApproveBuilder(address)": { + "details": "reverts if it is not called by the governor address or authorized changer reverts if is already community approved reverts if it has a gauge associated", + "params": { + "builder_": "address of the builder" + }, + "returns": { + "gauge_": "gauge contract" + } + }, + "constructor": {}, + "cycleNext(uint256)": { + "params": { + "timestamp_": "timestamp to calculate" + }, + "returns": { + "_0": "cycleNext timestamp when the cycle ends or the next starts" + } + }, + "cycleStart(uint256)": { + "params": { + "timestamp_": "timestamp to calculate" + }, + "returns": { + "_0": "cycleStart timestamp when the cycle starts" + } + }, + "dewhitelistBuilder(address)": { + "details": "reverts if it is not called by the governor address or authorized changer reverts if it does not have a gauge associated reverts if it is not community approved", + "params": { + "builder_": "address of the builder" + } + }, + "distribute()": { + "details": "reverts if distribution period has not yet started This function is paginated and it finishes once all gauges distribution are completed, ending the distribution period and voting restrictions.", + "returns": { + "finished_": "true if distribution has finished" + } + }, + "endDistributionWindow(uint256)": { + "params": { + "timestamp_": "timestamp to calculate" + }, + "returns": { + "_0": "endDistributionWindow timestamp when the cycle distribution ends" + } + }, + "getRewardPercentageToApply(address)": { + "params": { + "builder_": "address of the builder" + } + }, + "hasBuilderRewardReceiverPendingApproval(address)": { + "params": { + "builder_": "address of the builder" + } + }, + "initialize(address,address,address,address,address,uint32,uint24,uint32,uint128)": { + "params": { + "cycleDuration_": "Collective Rewards cycle time duration", + "cycleStartOffset_": "offset to add to the first cycle, used to set an specific day to start the cycles", + "distributionDuration_": "duration of the distribution window", + "gaugeFactory_": "address of the GaugeFactoryRootstockCollective contract", + "governanceManager_": "contract with permissioned roles", + "rewardDistributor_": "address of the rewardDistributor contract", + "rewardPercentageCooldown_": "time that must elapse for a new reward percentage from a builder to be applied", + "rewardToken_": "address of the token rewarded to builder and voters", + "stakingToken_": "address of the staking token for builder and voters" + } + }, + "migrateBuilder(address,address,uint64)": { + "params": { + "builder_": "address of the builder whitelisted on the V1's SimplifiedRewardDistributor contract", + "rewardAddress_": "address of the builder reward receiver whitelisted on the V1's SimplifiedRewardDistributor contract", + "rewardPercentage_": "reward percentage(100% == 1 ether)" + } + }, + "notifyRewardAmount(uint256)": { + "details": "reverts if it is called during the distribution period reverts if there are no gauges available for the distribution" + }, + "pauseBuilder(address,bytes20)": { + "details": "reverts if it is not called by the owner address", + "params": { + "builder_": "address of the builder", + "reason_": "reason for the pause" + } + }, + "permitBuilder(uint64)": { + "details": "reverts if it does not have a gauge associated reverts if it is not KYC approved reverts if it is not community approved reverts if it is not revoked reverts if it is executed in distribution period because changing the totalPotentialReward produce a miscalculation of rewards", + "params": { + "rewardPercentage_": "reward percentage(100% == 1 ether)" + } + }, + "proxiableUUID()": { + "details": "Implementation of the ERC1822 {proxiableUUID} function. This returns the storage slot used by the implementation. It is used to validate the implementation's compatibility when performing an upgrade. IMPORTANT: A proxy pointing at a proxiable contract should not be considered proxiable itself, because this risks bricking a proxy that upgrades to it, by delegating to itself until out of gas. Thus it is critical that this function revert if invoked through a proxy. This is guaranteed by the `notDelegated` modifier." + }, + "revokeBuilder()": { + "details": "reverts if it does not have a gauge associated reverts if it is not KYC approved reverts if it is not community approved reverts if it is already revoked reverts if it is executed in distribution period because changing the totalPotentialReward produce a miscalculation of rewards" + }, + "revokeBuilderKYC(address)": { + "details": "reverts if it is not called by the owner address reverts if it is not KYC approved", + "params": { + "builder_": "address of the builder" + } + }, + "setBackerRewardPercentage(uint64)": { + "details": "reverts if builder is not operational", + "params": { + "rewardPercentage_": "reward percentage(100% == 1 ether)" + } + }, + "setCycleDuration(uint32,uint24)": { + "details": "reverts if is too short. It must be greater than 2 time the distribution windowonly callable by an authorized changer or the foundation", + "params": { + "cycleStartOffset_": "offset to add to the first cycle, used to set an specific day to start the cycles", + "newCycleDuration_": "new cycle duration" + } + }, + "setDistributionDuration(uint32)": { + "details": "reverts if is too short. It must be greater than 0reverts if the new distribution is greater than half of the cycle durationreverts if the distribution window is modified during the distribution windowonly callable by the foundation", + "params": { + "newDistributionDuration_": "new distribution window duration" + } + }, + "startDistribution()": { + "details": "reverts if is called outside the distribution window reverts if it is called during the distribution period", + "returns": { + "finished_": "true if distribution has finished" + } + }, + "submitRewardReceiverReplacementRequest(address)": { + "details": "reverts if Builder is not Operational", + "params": { + "newRewardReceiver_": "new address the builder is requesting to use" + } + }, + "supportsInterface(bytes4)": { + "details": "See {IERC165-supportsInterface}." + }, + "timeUntilNextCycle(uint256)": { + "params": { + "timestamp_": "timestamp to calculate" + }, + "returns": { + "_0": "timeUntilNextCycle amount of time until next cycle" + } + }, + "unpauseBuilder(address)": { + "details": "reverts if it is not called by the owner address reverts if it is not paused", + "params": { + "builder_": "address of the builder" + } + }, + "upgradeToAndCall(address,bytes)": { + "details": "Upgrade the implementation of the proxy to `newImplementation`, and subsequently execute the function call encoded in `data`. Calls {_authorizeUpgrade}. Emits an {Upgraded} event." + } + }, + "events": { + "Initialized(uint64)": { + "details": "Triggered when the contract has been initialized or reinitialized." + }, + "Upgraded(address)": { + "details": "Emitted when the implementation is upgraded." + } + }, + "errors": { + "AddressEmptyCode(address)": [ + { + "details": "There's no code at `target` (it is not a contract)." + } + ], + "AddressInsufficientBalance(address)": [ + { + "details": "The ETH balance of the account is not enough to perform the operation." + } + ], + "ERC1967InvalidImplementation(address)": [ + { + "details": "The `implementation` of the proxy is invalid." + } + ], + "ERC1967NonPayable()": [ + { + "details": "An upgrade function sees `msg.value > 0` that may be lost." + } + ], + "FailedInnerCall()": [ + { + "details": "A call to an address target failed. The target may have reverted." + } + ], + "InvalidInitialization()": [ + { + "details": "The contract is already initialized." + } + ], + "NotInitializing()": [ + { + "details": "The contract is not initializing." + } + ], + "SafeERC20FailedOperation(address)": [ + { + "details": "An operation with an ERC20 token failed." + } + ], + "UUPSUnauthorizedCallContext()": [ + { + "details": "The call is from an unauthorized context." + } + ], + "UUPSUnsupportedProxiableUUID(bytes32)": [ + { + "details": "The storage `slot` is unsupported as a UUID." + } + ] + }, + "title": "BackersManagerRootstockCollective" + }, + "metadata": "{\"compiler\":{\"version\":\"0.8.20+commit.a1b79de6\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"target\",\"type\":\"address\"}],\"type\":\"error\",\"name\":\"AddressEmptyCode\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"type\":\"error\",\"name\":\"AddressInsufficientBalance\"},{\"inputs\":[],\"type\":\"error\",\"name\":\"AlreadyActivated\"},{\"inputs\":[],\"type\":\"error\",\"name\":\"AlreadyCommunityApproved\"},{\"inputs\":[],\"type\":\"error\",\"name\":\"AlreadyKYCApproved\"},{\"inputs\":[],\"type\":\"error\",\"name\":\"AlreadyRevoked\"},{\"inputs\":[],\"type\":\"error\",\"name\":\"BeforeDistribution\"},{\"inputs\":[],\"type\":\"error\",\"name\":\"BuilderAlreadyExists\"},{\"inputs\":[],\"type\":\"error\",\"name\":\"BuilderDoesNotExist\"},{\"inputs\":[],\"type\":\"error\",\"name\":\"CycleDurationTooShort\"},{\"inputs\":[],\"type\":\"error\",\"name\":\"DistributionDurationTooLong\"},{\"inputs\":[],\"type\":\"error\",\"name\":\"DistributionDurationTooShort\"},{\"inputs\":[],\"type\":\"error\",\"name\":\"DistributionModifiedDuringDistributionWindow\"},{\"inputs\":[],\"type\":\"error\",\"name\":\"DistributionPeriodDidNotStart\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"implementation\",\"type\":\"address\"}],\"type\":\"error\",\"name\":\"ERC1967InvalidImplementation\"},{\"inputs\":[],\"type\":\"error\",\"name\":\"ERC1967NonPayable\"},{\"inputs\":[],\"type\":\"error\",\"name\":\"FailedInnerCall\"},{\"inputs\":[],\"type\":\"error\",\"name\":\"GaugeDoesNotExist\"},{\"inputs\":[],\"type\":\"error\",\"name\":\"InvalidBackerRewardPercentage\"},{\"inputs\":[],\"type\":\"error\",\"name\":\"InvalidBuilderRewardReceiver\"},{\"inputs\":[],\"type\":\"error\",\"name\":\"InvalidInitialization\"},{\"inputs\":[],\"type\":\"error\",\"name\":\"NoGaugesForDistribution\"},{\"inputs\":[],\"type\":\"error\",\"name\":\"NotActivated\"},{\"inputs\":[],\"type\":\"error\",\"name\":\"NotCommunityApproved\"},{\"inputs\":[],\"type\":\"error\",\"name\":\"NotEnoughStaking\"},{\"inputs\":[],\"type\":\"error\",\"name\":\"NotInDistributionPeriod\"},{\"inputs\":[],\"type\":\"error\",\"name\":\"NotInitializing\"},{\"inputs\":[],\"type\":\"error\",\"name\":\"NotKYCApproved\"},{\"inputs\":[],\"type\":\"error\",\"name\":\"NotOperational\"},{\"inputs\":[],\"type\":\"error\",\"name\":\"NotPaused\"},{\"inputs\":[],\"type\":\"error\",\"name\":\"NotRevoked\"},{\"inputs\":[],\"type\":\"error\",\"name\":\"NotValidChangerOrFoundation\"},{\"inputs\":[],\"type\":\"error\",\"name\":\"OnlyInDistributionWindow\"},{\"inputs\":[],\"type\":\"error\",\"name\":\"PositiveAllocationOnHaltedGauge\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"}],\"type\":\"error\",\"name\":\"SafeERC20FailedOperation\"},{\"inputs\":[],\"type\":\"error\",\"name\":\"UUPSUnauthorizedCallContext\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"slot\",\"type\":\"bytes32\"}],\"type\":\"error\",\"name\":\"UUPSUnsupportedProxiableUUID\"},{\"inputs\":[],\"type\":\"error\",\"name\":\"UnequalLengths\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"builder_\",\"type\":\"address\",\"indexed\":true},{\"internalType\":\"uint256\",\"name\":\"rewardPercentage_\",\"type\":\"uint256\",\"indexed\":false},{\"internalType\":\"uint256\",\"name\":\"cooldown_\",\"type\":\"uint256\",\"indexed\":false}],\"type\":\"event\",\"name\":\"BackerRewardPercentageUpdateScheduled\",\"anonymous\":false},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"builder_\",\"type\":\"address\",\"indexed\":true},{\"internalType\":\"address\",\"name\":\"rewardReceiver_\",\"type\":\"address\",\"indexed\":false},{\"internalType\":\"uint64\",\"name\":\"rewardPercentage_\",\"type\":\"uint64\",\"indexed\":false}],\"type\":\"event\",\"name\":\"BuilderActivated\",\"anonymous\":false},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"builder_\",\"type\":\"address\",\"indexed\":true},{\"internalType\":\"address\",\"name\":\"migrator_\",\"type\":\"address\",\"indexed\":true}],\"type\":\"event\",\"name\":\"BuilderMigrated\",\"anonymous\":false},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"builder_\",\"type\":\"address\",\"indexed\":true},{\"internalType\":\"address\",\"name\":\"newRewardReceiver_\",\"type\":\"address\",\"indexed\":false}],\"type\":\"event\",\"name\":\"BuilderRewardReceiverReplacementApproved\",\"anonymous\":false},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"builder_\",\"type\":\"address\",\"indexed\":true},{\"internalType\":\"address\",\"name\":\"newRewardReceiver_\",\"type\":\"address\",\"indexed\":false}],\"type\":\"event\",\"name\":\"BuilderRewardReceiverReplacementCancelled\",\"anonymous\":false},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"builder_\",\"type\":\"address\",\"indexed\":true},{\"internalType\":\"address\",\"name\":\"newRewardReceiver_\",\"type\":\"address\",\"indexed\":false}],\"type\":\"event\",\"name\":\"BuilderRewardReceiverReplacementRequested\",\"anonymous\":false},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"builder_\",\"type\":\"address\",\"indexed\":true}],\"type\":\"event\",\"name\":\"CommunityApproved\",\"anonymous\":false},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"builder_\",\"type\":\"address\",\"indexed\":true}],\"type\":\"event\",\"name\":\"Dewhitelisted\",\"anonymous\":false},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"builder_\",\"type\":\"address\",\"indexed\":true},{\"internalType\":\"address\",\"name\":\"gauge_\",\"type\":\"address\",\"indexed\":true},{\"internalType\":\"address\",\"name\":\"creator_\",\"type\":\"address\",\"indexed\":false}],\"type\":\"event\",\"name\":\"GaugeCreated\",\"anonymous\":false},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"version\",\"type\":\"uint64\",\"indexed\":false}],\"type\":\"event\",\"name\":\"Initialized\",\"anonymous\":false},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"builder_\",\"type\":\"address\",\"indexed\":true}],\"type\":\"event\",\"name\":\"KYCApproved\",\"anonymous\":false},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"builder_\",\"type\":\"address\",\"indexed\":true}],\"type\":\"event\",\"name\":\"KYCRevoked\",\"anonymous\":false},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"backer_\",\"type\":\"address\",\"indexed\":true},{\"internalType\":\"address\",\"name\":\"gauge_\",\"type\":\"address\",\"indexed\":true},{\"internalType\":\"uint256\",\"name\":\"allocation_\",\"type\":\"uint256\",\"indexed\":false}],\"type\":\"event\",\"name\":\"NewAllocation\",\"anonymous\":false},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"newCycleDuration_\",\"type\":\"uint256\",\"indexed\":false},{\"internalType\":\"uint256\",\"name\":\"cooldownEndTime_\",\"type\":\"uint256\",\"indexed\":false}],\"type\":\"event\",\"name\":\"NewCycleDurationScheduled\",\"anonymous\":false},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"newDistributionDuration_\",\"type\":\"uint256\",\"indexed\":false},{\"internalType\":\"address\",\"name\":\"by_\",\"type\":\"address\",\"indexed\":false}],\"type\":\"event\",\"name\":\"NewDistributionDuration\",\"anonymous\":false},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"rewardToken_\",\"type\":\"address\",\"indexed\":true},{\"internalType\":\"address\",\"name\":\"sender_\",\"type\":\"address\",\"indexed\":true},{\"internalType\":\"uint256\",\"name\":\"amount_\",\"type\":\"uint256\",\"indexed\":false}],\"type\":\"event\",\"name\":\"NotifyReward\",\"anonymous\":false},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"builder_\",\"type\":\"address\",\"indexed\":true},{\"internalType\":\"bytes20\",\"name\":\"reason_\",\"type\":\"bytes20\",\"indexed\":false}],\"type\":\"event\",\"name\":\"Paused\",\"anonymous\":false},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"builder_\",\"type\":\"address\",\"indexed\":true},{\"internalType\":\"uint256\",\"name\":\"rewardPercentage_\",\"type\":\"uint256\",\"indexed\":false},{\"internalType\":\"uint256\",\"name\":\"cooldown_\",\"type\":\"uint256\",\"indexed\":false}],\"type\":\"event\",\"name\":\"Permitted\",\"anonymous\":false},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"builder_\",\"type\":\"address\",\"indexed\":true}],\"type\":\"event\",\"name\":\"Revoked\",\"anonymous\":false},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"sender_\",\"type\":\"address\",\"indexed\":true}],\"type\":\"event\",\"name\":\"RewardDistributed\",\"anonymous\":false},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"sender_\",\"type\":\"address\",\"indexed\":true}],\"type\":\"event\",\"name\":\"RewardDistributionFinished\",\"anonymous\":false},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"sender_\",\"type\":\"address\",\"indexed\":true}],\"type\":\"event\",\"name\":\"RewardDistributionStarted\",\"anonymous\":false},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"builder_\",\"type\":\"address\",\"indexed\":true}],\"type\":\"event\",\"name\":\"Unpaused\",\"anonymous\":false},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"implementation\",\"type\":\"address\",\"indexed\":true}],\"type\":\"event\",\"name\":\"Upgraded\",\"anonymous\":false},{\"inputs\":[],\"stateMutability\":\"view\",\"type\":\"function\",\"name\":\"UPGRADE_INTERFACE_VERSION\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}]},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"builder_\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"rewardReceiver_\",\"type\":\"address\"},{\"internalType\":\"uint64\",\"name\":\"rewardPercentage_\",\"type\":\"uint64\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\",\"name\":\"activateBuilder\"},{\"inputs\":[{\"internalType\":\"contract GaugeRootstockCollective\",\"name\":\"gauge_\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"allocation_\",\"type\":\"uint256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\",\"name\":\"allocate\"},{\"inputs\":[{\"internalType\":\"contract GaugeRootstockCollective[]\",\"name\":\"gauges_\",\"type\":\"address[]\"},{\"internalType\":\"uint256[]\",\"name\":\"allocations_\",\"type\":\"uint256[]\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\",\"name\":\"allocateBatch\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"builder_\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"rewardReceiverReplacement_\",\"type\":\"address\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\",\"name\":\"approveBuidlerRewardReceiverReplacement\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"builder_\",\"type\":\"address\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\",\"name\":\"approveBuilderKYC\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"builder\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\",\"name\":\"backerRewardPercentage\",\"outputs\":[{\"internalType\":\"uint64\",\"name\":\"previous\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"next\",\"type\":\"uint64\"},{\"internalType\":\"uint128\",\"name\":\"cooldownEndTime\",\"type\":\"uint128\"}]},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"backer\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\",\"name\":\"backerTotalAllocation\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"allocation\",\"type\":\"uint256\"}]},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"builder\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\",\"name\":\"builderRewardReceiver\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"rewardReceiver\",\"type\":\"address\"}]},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"builder\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\",\"name\":\"builderRewardReceiverReplacement\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"rewardReceiverReplacement\",\"type\":\"address\"}]},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"builder\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\",\"name\":\"builderState\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"activated\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"kycApproved\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"communityApproved\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"paused\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"revoked\",\"type\":\"bool\"},{\"internalType\":\"bytes7\",\"name\":\"reserved\",\"type\":\"bytes7\"},{\"internalType\":\"bytes20\",\"name\":\"pausedReason\",\"type\":\"bytes20\"}]},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"builder\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\",\"name\":\"builderToGauge\",\"outputs\":[{\"internalType\":\"contract GaugeRootstockCollective\",\"name\":\"gauge\",\"type\":\"address\"}]},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"targetAddress_\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\",\"name\":\"canWithdraw\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}]},{\"inputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\",\"name\":\"cancelRewardReceiverReplacementRequest\"},{\"inputs\":[{\"internalType\":\"contract GaugeRootstockCollective[]\",\"name\":\"gauges_\",\"type\":\"address[]\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\",\"name\":\"claimBackerRewards\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"rewardToken_\",\"type\":\"address\"},{\"internalType\":\"contract GaugeRootstockCollective[]\",\"name\":\"gauges_\",\"type\":\"address[]\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\",\"name\":\"claimBackerRewards\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"builder_\",\"type\":\"address\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\",\"name\":\"communityApproveBuilder\",\"outputs\":[{\"internalType\":\"contract GaugeRootstockCollective\",\"name\":\"gauge_\",\"type\":\"address\"}]},{\"inputs\":[],\"stateMutability\":\"view\",\"type\":\"function\",\"name\":\"cycleData\",\"outputs\":[{\"internalType\":\"uint32\",\"name\":\"previousDuration\",\"type\":\"uint32\"},{\"internalType\":\"uint32\",\"name\":\"nextDuration\",\"type\":\"uint32\"},{\"internalType\":\"uint64\",\"name\":\"previousStart\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"nextStart\",\"type\":\"uint64\"},{\"internalType\":\"uint24\",\"name\":\"offset\",\"type\":\"uint24\"}]},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"timestamp_\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\",\"name\":\"cycleNext\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}]},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"timestamp_\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\",\"name\":\"cycleStart\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}]},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"builder_\",\"type\":\"address\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\",\"name\":\"dewhitelistBuilder\"},{\"inputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\",\"name\":\"distribute\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"finished_\",\"type\":\"bool\"}]},{\"inputs\":[],\"stateMutability\":\"view\",\"type\":\"function\",\"name\":\"distributionDuration\",\"outputs\":[{\"internalType\":\"uint32\",\"name\":\"\",\"type\":\"uint32\"}]},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"timestamp_\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\",\"name\":\"endDistributionWindow\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}]},{\"inputs\":[],\"stateMutability\":\"view\",\"type\":\"function\",\"name\":\"gaugeFactory\",\"outputs\":[{\"internalType\":\"contract GaugeFactoryRootstockCollective\",\"name\":\"\",\"type\":\"address\"}]},{\"inputs\":[{\"internalType\":\"contract GaugeRootstockCollective\",\"name\":\"gauge\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\",\"name\":\"gaugeToBuilder\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"builder\",\"type\":\"address\"}]},{\"inputs\":[],\"stateMutability\":\"view\",\"type\":\"function\",\"name\":\"getCycleStartAndDuration\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}]},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"index_\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\",\"name\":\"getGaugeAt\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}]},{\"inputs\":[],\"stateMutability\":\"view\",\"type\":\"function\",\"name\":\"getGaugesLength\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}]},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"index_\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\",\"name\":\"getHaltedGaugeAt\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}]},{\"inputs\":[],\"stateMutability\":\"view\",\"type\":\"function\",\"name\":\"getHaltedGaugesLength\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}]},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"builder_\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\",\"name\":\"getRewardPercentageToApply\",\"outputs\":[{\"internalType\":\"uint64\",\"name\":\"\",\"type\":\"uint64\"}]},{\"inputs\":[],\"stateMutability\":\"view\",\"type\":\"function\",\"name\":\"governanceManager\",\"outputs\":[{\"internalType\":\"contract IGovernanceManagerRootstockCollective\",\"name\":\"\",\"type\":\"address\"}]},{\"inputs\":[{\"internalType\":\"contract GaugeRootstockCollective\",\"name\":\"gauge\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\",\"name\":\"haltedGaugeLastPeriodFinish\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"lastPeriodFinish\",\"type\":\"uint256\"}]},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"builder_\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\",\"name\":\"hasBuilderRewardReceiverPendingApproval\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}]},{\"inputs\":[],\"stateMutability\":\"view\",\"type\":\"function\",\"name\":\"indexLastGaugeDistributed\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}]},{\"inputs\":[{\"internalType\":\"contract IGovernanceManagerRootstockCollective\",\"name\":\"governanceManager_\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"rewardToken_\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"stakingToken_\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"gaugeFactory_\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"rewardDistributor_\",\"type\":\"address\"},{\"internalType\":\"uint32\",\"name\":\"cycleDuration_\",\"type\":\"uint32\"},{\"internalType\":\"uint24\",\"name\":\"cycleStartOffset_\",\"type\":\"uint24\"},{\"internalType\":\"uint32\",\"name\":\"distributionDuration_\",\"type\":\"uint32\"},{\"internalType\":\"uint128\",\"name\":\"rewardPercentageCooldown_\",\"type\":\"uint128\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\",\"name\":\"initialize\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"builder_\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\",\"name\":\"isBuilderOperational\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}]},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"builder_\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\",\"name\":\"isBuilderPaused\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}]},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"gauge_\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\",\"name\":\"isGaugeHalted\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}]},{\"inputs\":[{\"internalType\":\"contract GaugeRootstockCollective\",\"name\":\"gauge_\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\",\"name\":\"isGaugeOperational\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}]},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"gauge_\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\",\"name\":\"isGaugeRewarded\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}]},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"builder_\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"rewardAddress_\",\"type\":\"address\"},{\"internalType\":\"uint64\",\"name\":\"rewardPercentage_\",\"type\":\"uint64\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\",\"name\":\"migrateBuilder\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"amount_\",\"type\":\"uint256\"}],\"stateMutability\":\"payable\",\"type\":\"function\",\"name\":\"notifyRewardAmount\"},{\"inputs\":[],\"stateMutability\":\"view\",\"type\":\"function\",\"name\":\"onDistributionPeriod\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}]},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"builder_\",\"type\":\"address\"},{\"internalType\":\"bytes20\",\"name\":\"reason_\",\"type\":\"bytes20\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\",\"name\":\"pauseBuilder\"},{\"inputs\":[],\"stateMutability\":\"view\",\"type\":\"function\",\"name\":\"periodFinish\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}]},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"rewardPercentage_\",\"type\":\"uint64\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\",\"name\":\"permitBuilder\"},{\"inputs\":[],\"stateMutability\":\"view\",\"type\":\"function\",\"name\":\"proxiableUUID\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}]},{\"inputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\",\"name\":\"revokeBuilder\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"builder_\",\"type\":\"address\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\",\"name\":\"revokeBuilderKYC\"},{\"inputs\":[],\"stateMutability\":\"view\",\"type\":\"function\",\"name\":\"rewardDistributor\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}]},{\"inputs\":[],\"stateMutability\":\"view\",\"type\":\"function\",\"name\":\"rewardPercentageCooldown\",\"outputs\":[{\"internalType\":\"uint128\",\"name\":\"\",\"type\":\"uint128\"}]},{\"inputs\":[],\"stateMutability\":\"view\",\"type\":\"function\",\"name\":\"rewardToken\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}]},{\"inputs\":[],\"stateMutability\":\"view\",\"type\":\"function\",\"name\":\"rewardsCoinbase\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}]},{\"inputs\":[],\"stateMutability\":\"view\",\"type\":\"function\",\"name\":\"rewardsERC20\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}]},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"rewardPercentage_\",\"type\":\"uint64\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\",\"name\":\"setBackerRewardPercentage\"},{\"inputs\":[{\"internalType\":\"uint32\",\"name\":\"newCycleDuration_\",\"type\":\"uint32\"},{\"internalType\":\"uint24\",\"name\":\"cycleStartOffset_\",\"type\":\"uint24\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\",\"name\":\"setCycleDuration\"},{\"inputs\":[{\"internalType\":\"uint32\",\"name\":\"newDistributionDuration_\",\"type\":\"uint32\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\",\"name\":\"setDistributionDuration\"},{\"inputs\":[],\"stateMutability\":\"view\",\"type\":\"function\",\"name\":\"stakingToken\",\"outputs\":[{\"internalType\":\"contract IERC20\",\"name\":\"\",\"type\":\"address\"}]},{\"inputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\",\"name\":\"startDistribution\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"finished_\",\"type\":\"bool\"}]},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newRewardReceiver_\",\"type\":\"address\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\",\"name\":\"submitRewardReceiverReplacementRequest\"},{\"inputs\":[{\"internalType\":\"bytes4\",\"name\":\"interfaceId_\",\"type\":\"bytes4\"}],\"stateMutability\":\"view\",\"type\":\"function\",\"name\":\"supportsInterface\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}]},{\"inputs\":[],\"stateMutability\":\"view\",\"type\":\"function\",\"name\":\"tempTotalPotentialReward\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}]},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"timestamp_\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\",\"name\":\"timeUntilNextCycle\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}]},{\"inputs\":[],\"stateMutability\":\"view\",\"type\":\"function\",\"name\":\"totalPotentialReward\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}]},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"builder_\",\"type\":\"address\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\",\"name\":\"unpauseBuilder\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newImplementation\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"}],\"stateMutability\":\"payable\",\"type\":\"function\",\"name\":\"upgradeToAndCall\"}],\"devdoc\":{\"kind\":\"dev\",\"methods\":{\"activateBuilder(address,address,uint64)\":{\"details\":\"reverts if it is not called by the owner address reverts if it is already activated\",\"params\":{\"builder_\":\"address of the builder\",\"rewardPercentage_\":\"reward percentage(100% == 1 ether)\",\"rewardReceiver_\":\"address of the builder reward receiver\"}},\"allocate(address,uint256)\":{\"details\":\"reverts if it is called during the distribution period reverts if gauge does not have a builder associated\",\"params\":{\"allocation_\":\"amount of votes to allocate\",\"gauge_\":\"address of the gauge where the votes will be allocated\"}},\"allocateBatch(address[],uint256[])\":{\"details\":\"reverts if it is called during the distribution period reverts if gauge does not have a builder associated\",\"params\":{\"allocations_\":\"array of amount of votes to allocate\",\"gauges_\":\"array of gauges where the votes will be allocated\"}},\"approveBuidlerRewardReceiverReplacement(address,address)\":{\"details\":\"reverts if provided `rewardReceiverReplacement_` doesn't match Builder's request\",\"params\":{\"builder_\":\"address of the builder\",\"rewardReceiverReplacement_\":\"new address the builder is requesting to use\"}},\"approveBuilderKYC(address)\":{\"details\":\"reverts if it is not called by the owner address reverts if it is not activated reverts if it is already KYC approved reverts if it does not have a gauge associated\",\"params\":{\"builder_\":\"address of the builder\"}},\"canWithdraw(address,uint256)\":{\"details\":\"user token balance should already account for the update, meaning the check is applied AFTER the withdraw accounting has become effective.\",\"params\":{\"targetAddress_\":\"address who wants to withdraw stakingToken param value_ amount of stakingToken to withdraw, not used on current version\"}},\"cancelRewardReceiverReplacementRequest()\":{\"details\":\"reverts if Builder is not Operational\"},\"claimBackerRewards(address,address[])\":{\"params\":{\"gauges_\":\"array of gauges to claim\",\"rewardToken_\":\"address of the token rewarded address(uint160(uint256(keccak256(\\\"COINBASE_ADDRESS\\\")))) is used for coinbase address\"}},\"claimBackerRewards(address[])\":{\"params\":{\"gauges_\":\"array of gauges to claim\"}},\"communityApproveBuilder(address)\":{\"details\":\"reverts if it is not called by the governor address or authorized changer reverts if is already community approved reverts if it has a gauge associated\",\"params\":{\"builder_\":\"address of the builder\"},\"returns\":{\"gauge_\":\"gauge contract\"}},\"constructor\":{\"custom:oz-upgrades-unsafe-allow\":\"constructor\"},\"cycleNext(uint256)\":{\"params\":{\"timestamp_\":\"timestamp to calculate\"},\"returns\":{\"_0\":\"cycleNext timestamp when the cycle ends or the next starts\"}},\"cycleStart(uint256)\":{\"params\":{\"timestamp_\":\"timestamp to calculate\"},\"returns\":{\"_0\":\"cycleStart timestamp when the cycle starts\"}},\"dewhitelistBuilder(address)\":{\"details\":\"reverts if it is not called by the governor address or authorized changer reverts if it does not have a gauge associated reverts if it is not community approved\",\"params\":{\"builder_\":\"address of the builder\"}},\"distribute()\":{\"details\":\"reverts if distribution period has not yet started This function is paginated and it finishes once all gauges distribution are completed, ending the distribution period and voting restrictions.\",\"returns\":{\"finished_\":\"true if distribution has finished\"}},\"endDistributionWindow(uint256)\":{\"params\":{\"timestamp_\":\"timestamp to calculate\"},\"returns\":{\"_0\":\"endDistributionWindow timestamp when the cycle distribution ends\"}},\"getRewardPercentageToApply(address)\":{\"params\":{\"builder_\":\"address of the builder\"}},\"hasBuilderRewardReceiverPendingApproval(address)\":{\"params\":{\"builder_\":\"address of the builder\"}},\"initialize(address,address,address,address,address,uint32,uint24,uint32,uint128)\":{\"params\":{\"cycleDuration_\":\"Collective Rewards cycle time duration\",\"cycleStartOffset_\":\"offset to add to the first cycle, used to set an specific day to start the cycles\",\"distributionDuration_\":\"duration of the distribution window\",\"gaugeFactory_\":\"address of the GaugeFactoryRootstockCollective contract\",\"governanceManager_\":\"contract with permissioned roles\",\"rewardDistributor_\":\"address of the rewardDistributor contract\",\"rewardPercentageCooldown_\":\"time that must elapse for a new reward percentage from a builder to be applied\",\"rewardToken_\":\"address of the token rewarded to builder and voters\",\"stakingToken_\":\"address of the staking token for builder and voters\"}},\"migrateBuilder(address,address,uint64)\":{\"params\":{\"builder_\":\"address of the builder whitelisted on the V1's SimplifiedRewardDistributor contract\",\"rewardAddress_\":\"address of the builder reward receiver whitelisted on the V1's SimplifiedRewardDistributor contract\",\"rewardPercentage_\":\"reward percentage(100% == 1 ether)\"}},\"notifyRewardAmount(uint256)\":{\"details\":\"reverts if it is called during the distribution period reverts if there are no gauges available for the distribution\"},\"pauseBuilder(address,bytes20)\":{\"details\":\"reverts if it is not called by the owner address\",\"params\":{\"builder_\":\"address of the builder\",\"reason_\":\"reason for the pause\"}},\"permitBuilder(uint64)\":{\"details\":\"reverts if it does not have a gauge associated reverts if it is not KYC approved reverts if it is not community approved reverts if it is not revoked reverts if it is executed in distribution period because changing the totalPotentialReward produce a miscalculation of rewards\",\"params\":{\"rewardPercentage_\":\"reward percentage(100% == 1 ether)\"}},\"proxiableUUID()\":{\"details\":\"Implementation of the ERC1822 {proxiableUUID} function. This returns the storage slot used by the implementation. It is used to validate the implementation's compatibility when performing an upgrade. IMPORTANT: A proxy pointing at a proxiable contract should not be considered proxiable itself, because this risks bricking a proxy that upgrades to it, by delegating to itself until out of gas. Thus it is critical that this function revert if invoked through a proxy. This is guaranteed by the `notDelegated` modifier.\"},\"revokeBuilder()\":{\"details\":\"reverts if it does not have a gauge associated reverts if it is not KYC approved reverts if it is not community approved reverts if it is already revoked reverts if it is executed in distribution period because changing the totalPotentialReward produce a miscalculation of rewards\"},\"revokeBuilderKYC(address)\":{\"details\":\"reverts if it is not called by the owner address reverts if it is not KYC approved\",\"params\":{\"builder_\":\"address of the builder\"}},\"setBackerRewardPercentage(uint64)\":{\"details\":\"reverts if builder is not operational\",\"params\":{\"rewardPercentage_\":\"reward percentage(100% == 1 ether)\"}},\"setCycleDuration(uint32,uint24)\":{\"details\":\"reverts if is too short. It must be greater than 2 time the distribution windowonly callable by an authorized changer or the foundation\",\"params\":{\"cycleStartOffset_\":\"offset to add to the first cycle, used to set an specific day to start the cycles\",\"newCycleDuration_\":\"new cycle duration\"}},\"setDistributionDuration(uint32)\":{\"details\":\"reverts if is too short. It must be greater than 0reverts if the new distribution is greater than half of the cycle durationreverts if the distribution window is modified during the distribution windowonly callable by the foundation\",\"params\":{\"newDistributionDuration_\":\"new distribution window duration\"}},\"startDistribution()\":{\"details\":\"reverts if is called outside the distribution window reverts if it is called during the distribution period\",\"returns\":{\"finished_\":\"true if distribution has finished\"}},\"submitRewardReceiverReplacementRequest(address)\":{\"details\":\"reverts if Builder is not Operational\",\"params\":{\"newRewardReceiver_\":\"new address the builder is requesting to use\"}},\"supportsInterface(bytes4)\":{\"details\":\"See {IERC165-supportsInterface}.\"},\"timeUntilNextCycle(uint256)\":{\"params\":{\"timestamp_\":\"timestamp to calculate\"},\"returns\":{\"_0\":\"timeUntilNextCycle amount of time until next cycle\"}},\"unpauseBuilder(address)\":{\"details\":\"reverts if it is not called by the owner address reverts if it is not paused\",\"params\":{\"builder_\":\"address of the builder\"}},\"upgradeToAndCall(address,bytes)\":{\"custom:oz-upgrades-unsafe-allow-reachable\":\"delegatecall\",\"details\":\"Upgrade the implementation of the proxy to `newImplementation`, and subsequently execute the function call encoded in `data`. Calls {_authorizeUpgrade}. Emits an {Upgraded} event.\"}},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{\"activateBuilder(address,address,uint64)\":{\"notice\":\"activates builder for the first time, setting the reward receiver and the reward percentage Sets activate flag to true. It cannot be switched to false anymore\"},\"allocate(address,uint256)\":{\"notice\":\"allocates votes for a gauge\"},\"allocateBatch(address[],uint256[])\":{\"notice\":\"allocates votes for a batch of gauges\"},\"approveBuidlerRewardReceiverReplacement(address,address)\":{\"notice\":\"KYCApprover approves Builder's request to replace his rewardReceiver address\"},\"approveBuilderKYC(address)\":{\"notice\":\"approves builder's KYC after a revocation\"},\"backerRewardPercentage(address)\":{\"notice\":\"map of builder's backers reward percentage data\"},\"backerTotalAllocation(address)\":{\"notice\":\"total amount of stakingToken allocated by a backer\"},\"builderRewardReceiver(address)\":{\"notice\":\"map of builders reward receiver\"},\"builderRewardReceiverReplacement(address)\":{\"notice\":\"map of builders reward receiver replacement, used as a buffer until the new address is accepted\"},\"builderState(address)\":{\"notice\":\"map of builders state\"},\"builderToGauge(address)\":{\"notice\":\"gauge contract for a builder\"},\"canWithdraw(address,uint256)\":{\"notice\":\"returns true if can withdraw, remaining balance should exceed the current allocation\"},\"cancelRewardReceiverReplacementRequest()\":{\"notice\":\"Builder cancels his request to replace his rewardReceiver address\"},\"claimBackerRewards(address,address[])\":{\"notice\":\"claims backer rewards from a batch of gauges\"},\"claimBackerRewards(address[])\":{\"notice\":\"claims backer rewards from a batch of gauges\"},\"communityApproveBuilder(address)\":{\"notice\":\"community approve builder and create its gauge\"},\"cycleData()\":{\"notice\":\"cycle data\"},\"cycleNext(uint256)\":{\"notice\":\"gets when an cycle ends or the next one starts based on given `timestamp_`\"},\"cycleStart(uint256)\":{\"notice\":\"gets when an cycle starts based on given `timestamp_`\"},\"dewhitelistBuilder(address)\":{\"notice\":\"de-whitelist builder\"},\"distribute()\":{\"notice\":\"continues pagination to distribute accumulated reward tokens to the gauges\"},\"endDistributionWindow(uint256)\":{\"notice\":\"gets when an cycle distribution ends based on given `timestamp_`\"},\"gaugeFactory()\":{\"notice\":\"gauge factory contract address\"},\"gaugeToBuilder(address)\":{\"notice\":\"builder address for a gauge contract\"},\"getCycleStartAndDuration()\":{\"notice\":\"returns cycle start and duration If there is a new one and cooldown time has expired, apply that one; otherwise, apply the previous one\"},\"getGaugeAt(uint256)\":{\"notice\":\"get gauge from array at a given index\"},\"getGaugesLength()\":{\"notice\":\"get length of gauges array\"},\"getHaltedGaugeAt(uint256)\":{\"notice\":\"get halted gauge from array at a given index\"},\"getHaltedGaugesLength()\":{\"notice\":\"get length of halted gauges array\"},\"getRewardPercentageToApply(address)\":{\"notice\":\"returns reward percentage to apply. If there is a new one and cooldown time has expired, apply that one; otherwise, apply the previous one\"},\"haltedGaugeLastPeriodFinish(address)\":{\"notice\":\"map of last period finish for halted gauges\"},\"hasBuilderRewardReceiverPendingApproval(address)\":{\"notice\":\"returns true if the builder has an open request to replace his receiver address\"},\"indexLastGaugeDistributed()\":{\"notice\":\"index of tha last gauge distributed during a distribution period\"},\"initialize(address,address,address,address,address,uint32,uint24,uint32,uint128)\":{\"notice\":\"contract initializer\"},\"isBuilderOperational(address)\":{\"notice\":\"return true if builder is operational kycApproved == true && communityApproved == true && paused == false\"},\"isBuilderPaused(address)\":{\"notice\":\"return true if builder is paused\"},\"isGaugeHalted(address)\":{\"notice\":\"return true is gauge is halted\"},\"isGaugeOperational(address)\":{\"notice\":\"return true if gauge is operational kycApproved == true && communityApproved == true && paused == false\"},\"isGaugeRewarded(address)\":{\"notice\":\"return true is gauge is rewarded\"},\"migrateBuilder(address,address,uint64)\":{\"notice\":\"migrate v1 builder to the new builder registry\"},\"notifyRewardAmount(uint256)\":{\"notice\":\"transfers reward tokens from the sender to be distributed to the gauges\"},\"onDistributionPeriod()\":{\"notice\":\"true if distribution period started. Allocations remain blocked until it finishes\"},\"pauseBuilder(address,bytes20)\":{\"notice\":\"pause builder\"},\"periodFinish()\":{\"notice\":\"returns timestamp end of current rewards period If it is called by a halted gauge returns the timestamp of the last period distributed This is important because unclaimed rewards must stop accumulating rewards and halted gauges are not updated on the distribution anymore\"},\"permitBuilder(uint64)\":{\"notice\":\"permit builder\"},\"revokeBuilder()\":{\"notice\":\"revoke builder\"},\"revokeBuilderKYC(address)\":{\"notice\":\"revokes builder's KYC and sent builder unclaimed rewards to rewardDistributor contract\"},\"rewardDistributor()\":{\"notice\":\"reward distributor address. If a builder is KYC revoked their unclaimed rewards will sent back here\"},\"rewardPercentageCooldown()\":{\"notice\":\"time that must elapse for a new reward percentage from a builder to be applied\"},\"rewardToken()\":{\"notice\":\"address of the token rewarded to builder and voters\"},\"rewardsCoinbase()\":{\"notice\":\"Coinbase rewards to distribute [N]\"},\"rewardsERC20()\":{\"notice\":\"ERC20 rewards to distribute [N]\"},\"setBackerRewardPercentage(uint64)\":{\"notice\":\"allows a builder to set his backers reward percentage\"},\"setCycleDuration(uint32,uint24)\":{\"notice\":\"schedule a new cycle duration. It will be applied for the next cycle\"},\"setDistributionDuration(uint32)\":{\"notice\":\"set the duration of the distribution window\"},\"stakingToken()\":{\"notice\":\"address of the token used to stake\"},\"startDistribution()\":{\"notice\":\"starts the distribution period blocking all the allocations until all the gauges were distributed\"},\"submitRewardReceiverReplacementRequest(address)\":{\"notice\":\"Builder submits a request to replace his rewardReceiver address, the request will then need to be appoved by `approveBuidlerRewardReceiverReplacement`\"},\"tempTotalPotentialReward()\":{\"notice\":\"on a paginated distribution we need to temporarily store the totalPotentialReward\"},\"timeUntilNextCycle(uint256)\":{\"notice\":\"gets time left until the next cycle based on given `timestamp_`\"},\"totalPotentialReward()\":{\"notice\":\"total potential reward\"},\"unpauseBuilder(address)\":{\"notice\":\"unpause builder\"}},\"version\":1}},\"settings\":{\"remappings\":[\"@openzeppelin/contracts-upgradeable/=node_modules/@openzeppelin/contracts-upgradeable/\",\"@openzeppelin/contracts/=node_modules/@openzeppelin/contracts/\",\"eth-gas-reporter/=node_modules/eth-gas-reporter/\",\"forge-std/=node_modules/forge-std/\",\"hardhat/=node_modules/hardhat/\"],\"optimizer\":{\"enabled\":true,\"runs\":10000},\"metadata\":{\"bytecodeHash\":\"none\"},\"compilationTarget\":{\"src/BackersManagerRootstockCollective.sol\":\"BackersManagerRootstockCollective\"},\"evmVersion\":\"london\",\"libraries\":{}},\"sources\":{\"node_modules/@openzeppelin/contracts-upgradeable/proxy/utils/Initializable.sol\":{\"keccak256\":\"0x631188737069917d2f909d29ce62c4d48611d326686ba6683e26b72a23bfac0b\",\"urls\":[\"bzz-raw://7a61054ae84cd6c4d04c0c4450ba1d6de41e27e0a2c4f1bcdf58f796b401c609\",\"dweb:/ipfs/QmUvtdp7X1mRVyC3CsHrtPbgoqWaXHp3S1ZR24tpAQYJWM\"],\"license\":\"MIT\"},\"node_modules/@openzeppelin/contracts-upgradeable/proxy/utils/UUPSUpgradeable.sol\":{\"keccak256\":\"0x3f13b947637c4969c0644cab4ef399cdc4b67f101463b8775c5a43b118558e53\",\"urls\":[\"bzz-raw://c6683e6ade6985d394d32baaef5eea0d8b9ff0b3eca86ae413d6cdde114a9930\",\"dweb:/ipfs/QmdBE8T1BTddZxpdECMsb3KiCFyjNWmxcCddYrWFTXmWPj\"],\"license\":\"MIT\"},\"node_modules/@openzeppelin/contracts-upgradeable/utils/ReentrancyGuardUpgradeable.sol\":{\"keccak256\":\"0xb44e086e941292cdc7f440de51478493894ef0b1aeccb0c4047445919f667f74\",\"urls\":[\"bzz-raw://942dad22fbdc1669f025540ba63aa3ccfad5f8458fc5d4525b31ebf272e7af45\",\"dweb:/ipfs/Qmdo4X2M82aM3AMoW2kf2jhYkSCyC4T1pHNd6obdsDFnAB\"],\"license\":\"MIT\"},\"node_modules/@openzeppelin/contracts-upgradeable/utils/introspection/ERC165Upgradeable.sol\":{\"keccak256\":\"0xdaba3f7c42c55b2896353f32bd27d4d5f8bae741b3b05d4c53f67abc4dc47ce8\",\"urls\":[\"bzz-raw://1fa2e61141c602510bcd2cd936ed9561922ac8772a9b9c9a9db091a74e354a45\",\"dweb:/ipfs/QmcHQDDoEBwJmwUbzoVkytvJsBx3KVHYFFnDkvRGWh9Wmh\"],\"license\":\"MIT\"},\"node_modules/@openzeppelin/contracts/interfaces/draft-IERC1822.sol\":{\"keccak256\":\"0x2a1f9944df2015c081d89cd41ba22ffaf10aa6285969f0dc612b235cc448999c\",\"urls\":[\"bzz-raw://ef381843676aec64421200ee85eaa0b1356a35f28b9fc67e746a6bbb832077d9\",\"dweb:/ipfs/QmY8aorMYA2TeTCnu6ejDjzb4rW4t7TCtW4GZ6LoxTFm7v\"],\"license\":\"MIT\"},\"node_modules/@openzeppelin/contracts/proxy/ERC1967/ERC1967Utils.sol\":{\"keccak256\":\"0x06a78f9b3ee3e6d0eb4e4cd635ba49960bea34cac1db8c0a27c75f2319f1fd65\",\"urls\":[\"bzz-raw://547d21aa17f4f3f1a1a7edf7167beff8dd9496a0348d5588f15cc8a4b29d052a\",\"dweb:/ipfs/QmT16JtRQSWNpLo9W23jr6CzaMuTAcQcjJJcdRd8HLJ6cE\"],\"license\":\"MIT\"},\"node_modules/@openzeppelin/contracts/proxy/Proxy.sol\":{\"keccak256\":\"0xc3f2ec76a3de8ed7a7007c46166f5550c72c7709e3fc7e8bb3111a7191cdedbd\",\"urls\":[\"bzz-raw://e73efb4c2ca655882dc237c6b4f234a9bd36d97159d8fcaa837eb01171f726ac\",\"dweb:/ipfs/QmTNnnv7Gu5fs5G1ZMh7Fexp8N4XUs3XrNAngjcxgiss3e\"],\"license\":\"MIT\"},\"node_modules/@openzeppelin/contracts/proxy/beacon/BeaconProxy.sol\":{\"keccak256\":\"0x387ebdcb365b8e620f26645d2b34a161cd39eedfb0219e8baff55630c5ae113c\",\"urls\":[\"bzz-raw://744ea187c195e31cb9201e63ca291fca9e623747f54f0ba390b366a6213b8964\",\"dweb:/ipfs/Qmc547qfV4sz65DC9B4okx1HvgxwUzJR7zTfKKbTzL3UQT\"],\"license\":\"MIT\"},\"node_modules/@openzeppelin/contracts/proxy/beacon/IBeacon.sol\":{\"keccak256\":\"0xc59a78b07b44b2cf2e8ab4175fca91e8eca1eee2df7357b8d2a8833e5ea1f64c\",\"urls\":[\"bzz-raw://5aa4f07e65444784c29cd7bfcc2341b34381e4e5b5da9f0c5bd00d7f430e66fa\",\"dweb:/ipfs/QmWRMh4Q9DpaU9GvsiXmDdoNYMyyece9if7hnfLz7uqzWM\"],\"license\":\"MIT\"},\"node_modules/@openzeppelin/contracts/token/ERC20/IERC20.sol\":{\"keccak256\":\"0xc6a8ff0ea489379b61faa647490411b80102578440ab9d84e9a957cc12164e70\",\"urls\":[\"bzz-raw://0ea104e577e63faea3b69c415637e99e755dcbf64c5833d7140c35a714d6d90c\",\"dweb:/ipfs/Qmau6x4Ns9XdyynRCNNp3RhLqijJjFm7z5fyZazfYFGYdq\"],\"license\":\"MIT\"},\"node_modules/@openzeppelin/contracts/token/ERC20/extensions/IERC20Permit.sol\":{\"keccak256\":\"0x6008dabfe393240d73d7dd7688033f72740d570aa422254d29a7dce8568f3aff\",\"urls\":[\"bzz-raw://f5196ec75139918c6c7bb4251b36395e668f1fa6d206beba7e7520e74913940d\",\"dweb:/ipfs/QmSyqjksXxmm2mCG6qRd1yuwLykypkSVBbnBnGqJRcuJMi\"],\"license\":\"MIT\"},\"node_modules/@openzeppelin/contracts/token/ERC20/utils/SafeERC20.sol\":{\"keccak256\":\"0x37bb49513c49c87c4642a891b13b63571bc87013dde806617aa1efb54605f386\",\"urls\":[\"bzz-raw://b3036b3a83b7c48f96641f2a9002b9f2dcb6a5958dd670894ada21ae8229b3d0\",\"dweb:/ipfs/QmUNfSBdoVtjhETaUJCYcaC7pTMgbhht926tJ2uXJbiVd3\"],\"license\":\"MIT\"},\"node_modules/@openzeppelin/contracts/utils/Address.sol\":{\"keccak256\":\"0xaf28a975a78550e45f65e559a3ad6a5ad43b9b8a37366999abd1b7084eb70721\",\"urls\":[\"bzz-raw://b7bd24e224f67f65bfadf85dc2929fa965456bb2415478bd0125471b5ce35245\",\"dweb:/ipfs/QmRaydGr8BTHs1kvaZfsNU69pKzUAGFrvABn1KiRSbE51y\"],\"license\":\"MIT\"},\"node_modules/@openzeppelin/contracts/utils/StorageSlot.sol\":{\"keccak256\":\"0x32ba59b4b7299237c8ba56319110989d7978a039faf754793064e967e5894418\",\"urls\":[\"bzz-raw://1ae50c8b562427df610cc4540c9bf104acca7ef8e2dcae567ae7e52272281e9c\",\"dweb:/ipfs/QmTHiadFCSJUPpRjNegc5SahmeU8bAoY8i9Aq6tVscbcKR\"],\"license\":\"MIT\"},\"node_modules/@openzeppelin/contracts/utils/introspection/IERC165.sol\":{\"keccak256\":\"0x4296879f55019b23e135000eb36896057e7101fb7fb859c5ef690cf14643757b\",\"urls\":[\"bzz-raw://87b3541437c8c443ccd36795e56a338ed12855eec17f8da624511b8d1a7e14df\",\"dweb:/ipfs/QmeJQCtZrQjtJLr6u7ZHWeH3pBnjtLWzvRrKViAi7UZqxL\"],\"license\":\"MIT\"},\"node_modules/@openzeppelin/contracts/utils/math/Math.sol\":{\"keccak256\":\"0x005ec64c6313f0555d59e278f9a7a5ab2db5bdc72a027f255a37c327af1ec02d\",\"urls\":[\"bzz-raw://4ece9f0b9c8daca08c76b6b5405a6446b6f73b3a15fab7ff56e296cbd4a2c875\",\"dweb:/ipfs/QmQyRpyPRL5SQuAgj6SHmbir3foX65FJjbVTTQrA2EFg6L\"],\"license\":\"MIT\"},\"node_modules/@openzeppelin/contracts/utils/structs/EnumerableSet.sol\":{\"keccak256\":\"0x86c1470cbfd878491e5de030072b647352d36bd27122cffb928970b1945282aa\",\"urls\":[\"bzz-raw://ad85dd393ee0a1917c57046abc5155f51f77844b2c6a42c05c1b8dd26d6ff3c1\",\"dweb:/ipfs/QmNqYc8To2NdnpP6E1tGz7t6A7beuENde5yovwov5pW1fA\"],\"license\":\"MIT\"},\"src/BackersManagerRootstockCollective.sol\":{\"keccak256\":\"0x4bce92547845ef35a1b71fdfff864309938051142bd13fcc671785aad6dbc36b\",\"urls\":[\"bzz-raw://e21d16501b5cd62d1838223c2dcc2189e372e71096d4fa2977c5f9c62887a57c\",\"dweb:/ipfs/QmZdhG6Be7UTrKmDUXc8UxfCWH5ifXs9czSBPNrdC46ZGZ\"],\"license\":\"MIT\"},\"src/BuilderRegistryRootstockCollective.sol\":{\"keccak256\":\"0xc1396c558a12bc95f35bb8161d0410bb2ae400ff4c7ee684cd50b6e7e6326bd7\",\"urls\":[\"bzz-raw://091fdfefa6f079517bc0ebf5275038952167ed05fe80c9fc1ebfd623a4c37d5a\",\"dweb:/ipfs/QmaCk2BmBXEqsnB6tCpDeEuNpotXXuBZm1WyKcY1prHdPh\"],\"license\":\"MIT\"},\"src/CycleTimeKeeperRootstockCollective.sol\":{\"keccak256\":\"0x111d42f321259b53ff1b11e65fde44d8b582a5801299a665c7c39a003a9e4bfd\",\"urls\":[\"bzz-raw://40fe5761b6948b9d89fc2977e246738466ca65f2718d3ead305de92fe4ac4e45\",\"dweb:/ipfs/QmNj27MbZSmGN8Wfre4dngJSbNb1ZBUZ3cHoVUMb6B2n9W\"],\"license\":\"MIT\"},\"src/gauge/GaugeFactoryRootstockCollective.sol\":{\"keccak256\":\"0xbcf8f9f1038468632211aa7b936d63a35caa7e54f03793ba44f701b17e489a0d\",\"urls\":[\"bzz-raw://82beb9f7be678d3edb72cd181e198e00ead8c8383c36414ce0e388094272914b\",\"dweb:/ipfs/QmSmMx3RT4gjYRFggbEWAyDie5X4JLyBW3VgpHdRFcAmii\"],\"license\":\"MIT\"},\"src/gauge/GaugeRootstockCollective.sol\":{\"keccak256\":\"0xc938acb7b0a1fe48d81115d9c78554cf52578cfa079b7e2fa61ad6f7d938cfa5\",\"urls\":[\"bzz-raw://b0705939ef67abd05f05cd9c3f7d2d0f82c42048046c9daefc360d0d3335761d\",\"dweb:/ipfs/QmaPRBk5oeoQajXGLpCCq1B2BNRHbToSrD7a7ZbcqnhwKx\"],\"license\":\"MIT\"},\"src/governance/UpgradeableRootstockCollective.sol\":{\"keccak256\":\"0x22b56cfe51772a18fc6b7f4e64c53a2a9e73654826cfcb8b24e84c25058e2541\",\"urls\":[\"bzz-raw://57900df94f4b5b41038bb78594317680c8ea5ea74b2c5ca00875b3815b5e6dc5\",\"dweb:/ipfs/QmbANYcAgWYQ4Fthch7qeMCSXHQucRGPfVRjCTgUzcWTmL\"],\"license\":\"MIT\"},\"src/interfaces/IBackersManagerRootstockCollective.sol\":{\"keccak256\":\"0x7eacff4e2d906e1f38636bdc81646f213dc3820724b0bb4f61d2e105272f4087\",\"urls\":[\"bzz-raw://00e4ac507e8377040962f89fb774df725422c400114965eee8c45fcc401a7f87\",\"dweb:/ipfs/QmNsqV2naFxx8s6AG8YVDZqhvnUvXmnDZVhWH1WMsFesf6\"],\"license\":\"MIT\"},\"src/interfaces/IChangeContractRootstockCollective.sol\":{\"keccak256\":\"0x00fb3eb72286348dd06d581c5044cb045dfd3bd24725d05dd9c4b008567dd496\",\"urls\":[\"bzz-raw://7f4a03e06197ae7d6e478097afbbecf936ce7029ca49909a1fee0b4ba1b5b517\",\"dweb:/ipfs/QmfByMJ1SQAmcYkouS5WM3akMmSKU3MCyACpFmQwuFSYe9\"],\"license\":\"MIT\"},\"src/interfaces/ICollectiveRewardsCheckRootstockCollective.sol\":{\"keccak256\":\"0x3fa8e50c66e322c8023aed564a442404bdcb942ae1fe95fa60bf9982e8baf7ee\",\"urls\":[\"bzz-raw://df7c927919599e72f70fdcfaf5713d859f447d4258ea7a6ed8f9bcac851d3d72\",\"dweb:/ipfs/Qmb54kMmV1UD45oZntyxB7yWaUfKwMC136ftDHctVmNrge\"],\"license\":\"UNLICENSED\"},\"src/interfaces/IGovernanceManagerRootstockCollective.sol\":{\"keccak256\":\"0x1416991dd129bb36f43cc0854dfa824b5b85838e5c5018566b6cf78f527747e3\",\"urls\":[\"bzz-raw://8652a18ec39d5527fefb829eca619f4cf4bbec3ee4f6231e8888f1549feedd3d\",\"dweb:/ipfs/Qmczi6GipLy9B9TcDMx5UaZZPFBaMT2k49iYzQuLCFgnfS\"],\"license\":\"MIT\"},\"src/libraries/UtilsLib.sol\":{\"keccak256\":\"0x4660e2e62cb370b17052cd21238722bfe3cdaaf3f69cf4c9b2d87236070d12ac\",\"urls\":[\"bzz-raw://e8759237b67bb6e641c7a92eb0d94300770e32c25c2c5bf387bea2ea68513753\",\"dweb:/ipfs/QmbkRDUnzyL9QQbwJcFGd6kiERFFgxZgnxqsu14snpCvhp\"],\"license\":\"MIT\"}},\"version\":1}", + "numDeployments": 3, + "receipt": { + "transactionHash": "0xd568f405473c03d80ae69435c9809587bd1f7253e357e7d236a194be8722307f", + "transactionIndex": "0x0", + "blockHash": "0x9da0e102c4c9ff9530f44176c7ef9f83c01c00901fdf7b3fec21c83b55a69103", + "blockNumber": "0x5845bf", + "from": "0xCB8F8130E289946aec9a17b29819716B1E9e4998", + "to": null, + "cumulativeGasUsed": "0x4e535c", + "gasUsed": "0x4e535c", + "contractAddress": "0xeAdca815D145f3E3a69f9d4B086391ECE2CC6fe6", + "logs": [ + { + "address": "0xeAdca815D145f3E3a69f9d4B086391ECE2CC6fe6", + "topics": [ + "0xc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d2" + ], + "data": "0x000000000000000000000000000000000000000000000000ffffffffffffffff", + "blockHash": "0x9da0e102c4c9ff9530f44176c7ef9f83c01c00901fdf7b3fec21c83b55a69103", + "blockNumber": "0x5845bf", + "transactionHash": "0xd568f405473c03d80ae69435c9809587bd1f7253e357e7d236a194be8722307f", + "transactionIndex": "0x0", + "logIndex": "0x0" + } + ], + "status": "0x1", + "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000000000000000000000000800000000000000000000000080000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000004000000000000000000000000000000000000000000000000000800000000000000000000000000000000", + "type": "0x0", + "effectiveGasPrice": "0x3ef1480" + }, + "solcInputHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "storageLayout": { + "storage": [ + { + "astId": 60223, + "contract": "src/BackersManagerRootstockCollective.sol:BackersManagerRootstockCollective", + "label": "governanceManager", + "offset": 0, + "slot": "0", + "type": "t_contract(IGovernanceManagerRootstockCollective)60547" + }, + { + "astId": 60255, + "contract": "src/BackersManagerRootstockCollective.sol:BackersManagerRootstockCollective", + "label": "__gap", + "offset": 0, + "slot": "1", + "type": "t_array(t_uint256)50_storage" + }, + { + "astId": 57657, + "contract": "src/BackersManagerRootstockCollective.sol:BackersManagerRootstockCollective", + "label": "cycleData", + "offset": 0, + "slot": "51", + "type": "t_struct(CycleData)57653_storage" + }, + { + "astId": 57659, + "contract": "src/BackersManagerRootstockCollective.sol:BackersManagerRootstockCollective", + "label": "distributionDuration", + "offset": 0, + "slot": "52", + "type": "t_uint32" + }, + { + "astId": 58104, + "contract": "src/BackersManagerRootstockCollective.sol:BackersManagerRootstockCollective", + "label": "__gap", + "offset": 0, + "slot": "53", + "type": "t_array(t_uint256)50_storage" + }, + { + "astId": 56228, + "contract": "src/BackersManagerRootstockCollective.sol:BackersManagerRootstockCollective", + "label": "rewardDistributor", + "offset": 0, + "slot": "103", + "type": "t_address" + }, + { + "astId": 56234, + "contract": "src/BackersManagerRootstockCollective.sol:BackersManagerRootstockCollective", + "label": "builderState", + "offset": 0, + "slot": "104", + "type": "t_mapping(t_address,t_struct(BuilderState)56218_storage)" + }, + { + "astId": 56239, + "contract": "src/BackersManagerRootstockCollective.sol:BackersManagerRootstockCollective", + "label": "builderRewardReceiver", + "offset": 0, + "slot": "105", + "type": "t_mapping(t_address,t_address)" + }, + { + "astId": 56244, + "contract": "src/BackersManagerRootstockCollective.sol:BackersManagerRootstockCollective", + "label": "builderRewardReceiverReplacement", + "offset": 0, + "slot": "106", + "type": "t_mapping(t_address,t_address)" + }, + { + "astId": 56250, + "contract": "src/BackersManagerRootstockCollective.sol:BackersManagerRootstockCollective", + "label": "backerRewardPercentage", + "offset": 0, + "slot": "107", + "type": "t_mapping(t_address,t_struct(RewardPercentageData)56225_storage)" + }, + { + "astId": 56254, + "contract": "src/BackersManagerRootstockCollective.sol:BackersManagerRootstockCollective", + "label": "_gauges", + "offset": 0, + "slot": "108", + "type": "t_struct(AddressSet)4717_storage" + }, + { + "astId": 56258, + "contract": "src/BackersManagerRootstockCollective.sol:BackersManagerRootstockCollective", + "label": "_haltedGauges", + "offset": 0, + "slot": "110", + "type": "t_struct(AddressSet)4717_storage" + }, + { + "astId": 56262, + "contract": "src/BackersManagerRootstockCollective.sol:BackersManagerRootstockCollective", + "label": "gaugeFactory", + "offset": 0, + "slot": "112", + "type": "t_contract(GaugeFactoryRootstockCollective)58436" + }, + { + "astId": 56268, + "contract": "src/BackersManagerRootstockCollective.sol:BackersManagerRootstockCollective", + "label": "builderToGauge", + "offset": 0, + "slot": "113", + "type": "t_mapping(t_address,t_contract(GaugeRootstockCollective)59796)" + }, + { + "astId": 56274, + "contract": "src/BackersManagerRootstockCollective.sol:BackersManagerRootstockCollective", + "label": "gaugeToBuilder", + "offset": 0, + "slot": "114", + "type": "t_mapping(t_contract(GaugeRootstockCollective)59796,t_address)" + }, + { + "astId": 56280, + "contract": "src/BackersManagerRootstockCollective.sol:BackersManagerRootstockCollective", + "label": "haltedGaugeLastPeriodFinish", + "offset": 0, + "slot": "115", + "type": "t_mapping(t_contract(GaugeRootstockCollective)59796,t_uint256)" + }, + { + "astId": 56283, + "contract": "src/BackersManagerRootstockCollective.sol:BackersManagerRootstockCollective", + "label": "rewardPercentageCooldown", + "offset": 0, + "slot": "116", + "type": "t_uint128" + }, + { + "astId": 57574, + "contract": "src/BackersManagerRootstockCollective.sol:BackersManagerRootstockCollective", + "label": "__gap", + "offset": 0, + "slot": "117", + "type": "t_array(t_uint256)50_storage" + }, + { + "astId": 55092, + "contract": "src/BackersManagerRootstockCollective.sol:BackersManagerRootstockCollective", + "label": "stakingToken", + "offset": 0, + "slot": "167", + "type": "t_contract(IERC20)2025" + }, + { + "astId": 55095, + "contract": "src/BackersManagerRootstockCollective.sol:BackersManagerRootstockCollective", + "label": "rewardToken", + "offset": 0, + "slot": "168", + "type": "t_address" + }, + { + "astId": 55098, + "contract": "src/BackersManagerRootstockCollective.sol:BackersManagerRootstockCollective", + "label": "totalPotentialReward", + "offset": 0, + "slot": "169", + "type": "t_uint256" + }, + { + "astId": 55101, + "contract": "src/BackersManagerRootstockCollective.sol:BackersManagerRootstockCollective", + "label": "tempTotalPotentialReward", + "offset": 0, + "slot": "170", + "type": "t_uint256" + }, + { + "astId": 55104, + "contract": "src/BackersManagerRootstockCollective.sol:BackersManagerRootstockCollective", + "label": "rewardsERC20", + "offset": 0, + "slot": "171", + "type": "t_uint256" + }, + { + "astId": 55107, + "contract": "src/BackersManagerRootstockCollective.sol:BackersManagerRootstockCollective", + "label": "rewardsCoinbase", + "offset": 0, + "slot": "172", + "type": "t_uint256" + }, + { + "astId": 55110, + "contract": "src/BackersManagerRootstockCollective.sol:BackersManagerRootstockCollective", + "label": "indexLastGaugeDistributed", + "offset": 0, + "slot": "173", + "type": "t_uint256" + }, + { + "astId": 55113, + "contract": "src/BackersManagerRootstockCollective.sol:BackersManagerRootstockCollective", + "label": "_periodFinish", + "offset": 0, + "slot": "174", + "type": "t_uint256" + }, + { + "astId": 55116, + "contract": "src/BackersManagerRootstockCollective.sol:BackersManagerRootstockCollective", + "label": "onDistributionPeriod", + "offset": 0, + "slot": "175", + "type": "t_bool" + }, + { + "astId": 55121, + "contract": "src/BackersManagerRootstockCollective.sol:BackersManagerRootstockCollective", + "label": "backerTotalAllocation", + "offset": 0, + "slot": "176", + "type": "t_mapping(t_address,t_uint256)" + }, + { + "astId": 56046, + "contract": "src/BackersManagerRootstockCollective.sol:BackersManagerRootstockCollective", + "label": "__gap", + "offset": 0, + "slot": "177", + "type": "t_array(t_uint256)50_storage" + } + ], + "types": { + "t_address": { + "encoding": "inplace", + "label": "address", + "numberOfBytes": "20" + }, + "t_array(t_bytes32)dyn_storage": { + "encoding": "dynamic_array", + "label": "bytes32[]", + "numberOfBytes": "32", + "base": "t_bytes32" + }, + "t_array(t_uint256)50_storage": { + "encoding": "inplace", + "label": "uint256[50]", + "numberOfBytes": "1600", + "base": "t_uint256" + }, + "t_bool": { + "encoding": "inplace", + "label": "bool", + "numberOfBytes": "1" + }, + "t_bytes20": { + "encoding": "inplace", + "label": "bytes20", + "numberOfBytes": "20" + }, + "t_bytes32": { + "encoding": "inplace", + "label": "bytes32", + "numberOfBytes": "32" + }, + "t_bytes7": { + "encoding": "inplace", + "label": "bytes7", + "numberOfBytes": "7" + }, + "t_contract(GaugeFactoryRootstockCollective)58436": { + "encoding": "inplace", + "label": "contract GaugeFactoryRootstockCollective", + "numberOfBytes": "20" + }, + "t_contract(GaugeRootstockCollective)59796": { + "encoding": "inplace", + "label": "contract GaugeRootstockCollective", + "numberOfBytes": "20" + }, + "t_contract(IERC20)2025": { + "encoding": "inplace", + "label": "contract IERC20", + "numberOfBytes": "20" + }, + "t_contract(IGovernanceManagerRootstockCollective)60547": { + "encoding": "inplace", + "label": "contract IGovernanceManagerRootstockCollective", + "numberOfBytes": "20" + }, + "t_mapping(t_address,t_address)": { + "encoding": "mapping", + "key": "t_address", + "label": "mapping(address => address)", + "numberOfBytes": "32", + "value": "t_address" + }, + "t_mapping(t_address,t_contract(GaugeRootstockCollective)59796)": { + "encoding": "mapping", + "key": "t_address", + "label": "mapping(address => contract GaugeRootstockCollective)", + "numberOfBytes": "32", + "value": "t_contract(GaugeRootstockCollective)59796" + }, + "t_mapping(t_address,t_struct(BuilderState)56218_storage)": { + "encoding": "mapping", + "key": "t_address", + "label": "mapping(address => struct BuilderRegistryRootstockCollective.BuilderState)", + "numberOfBytes": "32", + "value": "t_struct(BuilderState)56218_storage" + }, + "t_mapping(t_address,t_struct(RewardPercentageData)56225_storage)": { + "encoding": "mapping", + "key": "t_address", + "label": "mapping(address => struct BuilderRegistryRootstockCollective.RewardPercentageData)", + "numberOfBytes": "32", + "value": "t_struct(RewardPercentageData)56225_storage" + }, + "t_mapping(t_address,t_uint256)": { + "encoding": "mapping", + "key": "t_address", + "label": "mapping(address => uint256)", + "numberOfBytes": "32", + "value": "t_uint256" + }, + "t_mapping(t_bytes32,t_uint256)": { + "encoding": "mapping", + "key": "t_bytes32", + "label": "mapping(bytes32 => uint256)", + "numberOfBytes": "32", + "value": "t_uint256" + }, + "t_mapping(t_contract(GaugeRootstockCollective)59796,t_address)": { + "encoding": "mapping", + "key": "t_contract(GaugeRootstockCollective)59796", + "label": "mapping(contract GaugeRootstockCollective => address)", + "numberOfBytes": "32", + "value": "t_address" + }, + "t_mapping(t_contract(GaugeRootstockCollective)59796,t_uint256)": { + "encoding": "mapping", + "key": "t_contract(GaugeRootstockCollective)59796", + "label": "mapping(contract GaugeRootstockCollective => uint256)", + "numberOfBytes": "32", + "value": "t_uint256" + }, + "t_struct(AddressSet)4717_storage": { + "encoding": "inplace", + "label": "struct EnumerableSet.AddressSet", + "numberOfBytes": "64", + "members": [ + { + "astId": 4716, + "contract": "src/BackersManagerRootstockCollective.sol:BackersManagerRootstockCollective", + "label": "_inner", + "offset": 0, + "slot": "0", + "type": "t_struct(Set)4402_storage" + } + ] + }, + "t_struct(BuilderState)56218_storage": { + "encoding": "inplace", + "label": "struct BuilderRegistryRootstockCollective.BuilderState", + "numberOfBytes": "32", + "members": [ + { + "astId": 56205, + "contract": "src/BackersManagerRootstockCollective.sol:BackersManagerRootstockCollective", + "label": "activated", + "offset": 0, + "slot": "0", + "type": "t_bool" + }, + { + "astId": 56207, + "contract": "src/BackersManagerRootstockCollective.sol:BackersManagerRootstockCollective", + "label": "kycApproved", + "offset": 1, + "slot": "0", + "type": "t_bool" + }, + { + "astId": 56209, + "contract": "src/BackersManagerRootstockCollective.sol:BackersManagerRootstockCollective", + "label": "communityApproved", + "offset": 2, + "slot": "0", + "type": "t_bool" + }, + { + "astId": 56211, + "contract": "src/BackersManagerRootstockCollective.sol:BackersManagerRootstockCollective", + "label": "paused", + "offset": 3, + "slot": "0", + "type": "t_bool" + }, + { + "astId": 56213, + "contract": "src/BackersManagerRootstockCollective.sol:BackersManagerRootstockCollective", + "label": "revoked", + "offset": 4, + "slot": "0", + "type": "t_bool" + }, + { + "astId": 56215, + "contract": "src/BackersManagerRootstockCollective.sol:BackersManagerRootstockCollective", + "label": "reserved", + "offset": 5, + "slot": "0", + "type": "t_bytes7" + }, + { + "astId": 56217, + "contract": "src/BackersManagerRootstockCollective.sol:BackersManagerRootstockCollective", + "label": "pausedReason", + "offset": 12, + "slot": "0", + "type": "t_bytes20" + } + ] + }, + "t_struct(CycleData)57653_storage": { + "encoding": "inplace", + "label": "struct CycleTimeKeeperRootstockCollective.CycleData", + "numberOfBytes": "32", + "members": [ + { + "astId": 57644, + "contract": "src/BackersManagerRootstockCollective.sol:BackersManagerRootstockCollective", + "label": "previousDuration", + "offset": 0, + "slot": "0", + "type": "t_uint32" + }, + { + "astId": 57646, + "contract": "src/BackersManagerRootstockCollective.sol:BackersManagerRootstockCollective", + "label": "nextDuration", + "offset": 4, + "slot": "0", + "type": "t_uint32" + }, + { + "astId": 57648, + "contract": "src/BackersManagerRootstockCollective.sol:BackersManagerRootstockCollective", + "label": "previousStart", + "offset": 8, + "slot": "0", + "type": "t_uint64" + }, + { + "astId": 57650, + "contract": "src/BackersManagerRootstockCollective.sol:BackersManagerRootstockCollective", + "label": "nextStart", + "offset": 16, + "slot": "0", + "type": "t_uint64" + }, + { + "astId": 57652, + "contract": "src/BackersManagerRootstockCollective.sol:BackersManagerRootstockCollective", + "label": "offset", + "offset": 24, + "slot": "0", + "type": "t_uint24" + } + ] + }, + "t_struct(RewardPercentageData)56225_storage": { + "encoding": "inplace", + "label": "struct BuilderRegistryRootstockCollective.RewardPercentageData", + "numberOfBytes": "32", + "members": [ + { + "astId": 56220, + "contract": "src/BackersManagerRootstockCollective.sol:BackersManagerRootstockCollective", + "label": "previous", + "offset": 0, + "slot": "0", + "type": "t_uint64" + }, + { + "astId": 56222, + "contract": "src/BackersManagerRootstockCollective.sol:BackersManagerRootstockCollective", + "label": "next", + "offset": 8, + "slot": "0", + "type": "t_uint64" + }, + { + "astId": 56224, + "contract": "src/BackersManagerRootstockCollective.sol:BackersManagerRootstockCollective", + "label": "cooldownEndTime", + "offset": 16, + "slot": "0", + "type": "t_uint128" + } + ] + }, + "t_struct(Set)4402_storage": { + "encoding": "inplace", + "label": "struct EnumerableSet.Set", + "numberOfBytes": "64", + "members": [ + { + "astId": 4397, + "contract": "src/BackersManagerRootstockCollective.sol:BackersManagerRootstockCollective", + "label": "_values", + "offset": 0, + "slot": "0", + "type": "t_array(t_bytes32)dyn_storage" + }, + { + "astId": 4401, + "contract": "src/BackersManagerRootstockCollective.sol:BackersManagerRootstockCollective", + "label": "_positions", + "offset": 0, + "slot": "1", + "type": "t_mapping(t_bytes32,t_uint256)" + } + ] + }, + "t_uint128": { + "encoding": "inplace", + "label": "uint128", + "numberOfBytes": "16" + }, + "t_uint24": { + "encoding": "inplace", + "label": "uint24", + "numberOfBytes": "3" + }, + "t_uint256": { + "encoding": "inplace", + "label": "uint256", + "numberOfBytes": "32" + }, + "t_uint32": { + "encoding": "inplace", + "label": "uint32", + "numberOfBytes": "4" + }, + "t_uint64": { + "encoding": "inplace", + "label": "uint64", + "numberOfBytes": "8" + } + } + }, + "transactionHash": "0xd568f405473c03d80ae69435c9809587bd1f7253e357e7d236a194be8722307f", + "userdoc": { + "version": 1, + "kind": "user", + "methods": { + "activateBuilder(address,address,uint64)": { + "notice": "activates builder for the first time, setting the reward receiver and the reward percentage Sets activate flag to true. It cannot be switched to false anymore" + }, + "allocate(address,uint256)": { + "notice": "allocates votes for a gauge" + }, + "allocateBatch(address[],uint256[])": { + "notice": "allocates votes for a batch of gauges" + }, + "approveBuidlerRewardReceiverReplacement(address,address)": { + "notice": "KYCApprover approves Builder's request to replace his rewardReceiver address" + }, + "approveBuilderKYC(address)": { + "notice": "approves builder's KYC after a revocation" + }, + "backerRewardPercentage(address)": { + "notice": "map of builder's backers reward percentage data" + }, + "backerTotalAllocation(address)": { + "notice": "total amount of stakingToken allocated by a backer" + }, + "builderRewardReceiver(address)": { + "notice": "map of builders reward receiver" + }, + "builderRewardReceiverReplacement(address)": { + "notice": "map of builders reward receiver replacement, used as a buffer until the new address is accepted" + }, + "builderState(address)": { + "notice": "map of builders state" + }, + "builderToGauge(address)": { + "notice": "gauge contract for a builder" + }, + "canWithdraw(address,uint256)": { + "notice": "returns true if can withdraw, remaining balance should exceed the current allocation" + }, + "cancelRewardReceiverReplacementRequest()": { + "notice": "Builder cancels his request to replace his rewardReceiver address" + }, + "claimBackerRewards(address,address[])": { + "notice": "claims backer rewards from a batch of gauges" + }, + "claimBackerRewards(address[])": { + "notice": "claims backer rewards from a batch of gauges" + }, + "communityApproveBuilder(address)": { + "notice": "community approve builder and create its gauge" + }, + "cycleData()": { + "notice": "cycle data" + }, + "cycleNext(uint256)": { + "notice": "gets when an cycle ends or the next one starts based on given `timestamp_`" + }, + "cycleStart(uint256)": { + "notice": "gets when an cycle starts based on given `timestamp_`" + }, + "dewhitelistBuilder(address)": { + "notice": "de-whitelist builder" + }, + "distribute()": { + "notice": "continues pagination to distribute accumulated reward tokens to the gauges" + }, + "endDistributionWindow(uint256)": { + "notice": "gets when an cycle distribution ends based on given `timestamp_`" + }, + "gaugeFactory()": { + "notice": "gauge factory contract address" + }, + "gaugeToBuilder(address)": { + "notice": "builder address for a gauge contract" + }, + "getCycleStartAndDuration()": { + "notice": "returns cycle start and duration If there is a new one and cooldown time has expired, apply that one; otherwise, apply the previous one" + }, + "getGaugeAt(uint256)": { + "notice": "get gauge from array at a given index" + }, + "getGaugesLength()": { + "notice": "get length of gauges array" + }, + "getHaltedGaugeAt(uint256)": { + "notice": "get halted gauge from array at a given index" + }, + "getHaltedGaugesLength()": { + "notice": "get length of halted gauges array" + }, + "getRewardPercentageToApply(address)": { + "notice": "returns reward percentage to apply. If there is a new one and cooldown time has expired, apply that one; otherwise, apply the previous one" + }, + "haltedGaugeLastPeriodFinish(address)": { + "notice": "map of last period finish for halted gauges" + }, + "hasBuilderRewardReceiverPendingApproval(address)": { + "notice": "returns true if the builder has an open request to replace his receiver address" + }, + "indexLastGaugeDistributed()": { + "notice": "index of tha last gauge distributed during a distribution period" + }, + "initialize(address,address,address,address,address,uint32,uint24,uint32,uint128)": { + "notice": "contract initializer" + }, + "isBuilderOperational(address)": { + "notice": "return true if builder is operational kycApproved == true && communityApproved == true && paused == false" + }, + "isBuilderPaused(address)": { + "notice": "return true if builder is paused" + }, + "isGaugeHalted(address)": { + "notice": "return true is gauge is halted" + }, + "isGaugeOperational(address)": { + "notice": "return true if gauge is operational kycApproved == true && communityApproved == true && paused == false" + }, + "isGaugeRewarded(address)": { + "notice": "return true is gauge is rewarded" + }, + "migrateBuilder(address,address,uint64)": { + "notice": "migrate v1 builder to the new builder registry" + }, + "notifyRewardAmount(uint256)": { + "notice": "transfers reward tokens from the sender to be distributed to the gauges" + }, + "onDistributionPeriod()": { + "notice": "true if distribution period started. Allocations remain blocked until it finishes" + }, + "pauseBuilder(address,bytes20)": { + "notice": "pause builder" + }, + "periodFinish()": { + "notice": "returns timestamp end of current rewards period If it is called by a halted gauge returns the timestamp of the last period distributed This is important because unclaimed rewards must stop accumulating rewards and halted gauges are not updated on the distribution anymore" + }, + "permitBuilder(uint64)": { + "notice": "permit builder" + }, + "revokeBuilder()": { + "notice": "revoke builder" + }, + "revokeBuilderKYC(address)": { + "notice": "revokes builder's KYC and sent builder unclaimed rewards to rewardDistributor contract" + }, + "rewardDistributor()": { + "notice": "reward distributor address. If a builder is KYC revoked their unclaimed rewards will sent back here" + }, + "rewardPercentageCooldown()": { + "notice": "time that must elapse for a new reward percentage from a builder to be applied" + }, + "rewardToken()": { + "notice": "address of the token rewarded to builder and voters" + }, + "rewardsCoinbase()": { + "notice": "Coinbase rewards to distribute [N]" + }, + "rewardsERC20()": { + "notice": "ERC20 rewards to distribute [N]" + }, + "setBackerRewardPercentage(uint64)": { + "notice": "allows a builder to set his backers reward percentage" + }, + "setCycleDuration(uint32,uint24)": { + "notice": "schedule a new cycle duration. It will be applied for the next cycle" + }, + "setDistributionDuration(uint32)": { + "notice": "set the duration of the distribution window" + }, + "stakingToken()": { + "notice": "address of the token used to stake" + }, + "startDistribution()": { + "notice": "starts the distribution period blocking all the allocations until all the gauges were distributed" + }, + "submitRewardReceiverReplacementRequest(address)": { + "notice": "Builder submits a request to replace his rewardReceiver address, the request will then need to be appoved by `approveBuidlerRewardReceiverReplacement`" + }, + "tempTotalPotentialReward()": { + "notice": "on a paginated distribution we need to temporarily store the totalPotentialReward" + }, + "timeUntilNextCycle(uint256)": { + "notice": "gets time left until the next cycle based on given `timestamp_`" + }, + "totalPotentialReward()": { + "notice": "total potential reward" + }, + "unpauseBuilder(address)": { + "notice": "unpause builder" + } + }, + "notice": "Creates gauges, manages backers votes and distribute rewards" + } +} \ No newline at end of file diff --git a/deployments/testnet_qa/BackersManagerRootstockCollectiveProxy.json b/deployments/testnet_qa/BackersManagerRootstockCollectiveProxy.json new file mode 100644 index 00000000..8884a656 --- /dev/null +++ b/deployments/testnet_qa/BackersManagerRootstockCollectiveProxy.json @@ -0,0 +1,167 @@ +{ + "abi": [ + { + "type": "constructor", + "inputs": [ + { + "name": "implementation", + "type": "address", + "internalType": "address" + }, + { + "name": "_data", + "type": "bytes", + "internalType": "bytes" + } + ], + "stateMutability": "payable" + }, + { + "type": "fallback", + "stateMutability": "payable" + }, + { + "type": "event", + "name": "Upgraded", + "inputs": [ + { + "name": "implementation", + "type": "address", + "indexed": true, + "internalType": "address" + } + ], + "anonymous": false + }, + { + "type": "error", + "name": "AddressEmptyCode", + "inputs": [ + { + "name": "target", + "type": "address", + "internalType": "address" + } + ] + }, + { + "type": "error", + "name": "ERC1967InvalidImplementation", + "inputs": [ + { + "name": "implementation", + "type": "address", + "internalType": "address" + } + ] + }, + { + "type": "error", + "name": "ERC1967NonPayable", + "inputs": [] + }, + { + "type": "error", + "name": "FailedInnerCall", + "inputs": [] + } + ], + "address": "0x65e313474cC038782fF89581eD60bc2431794A33", + "args": [ + "0xeAdca815D145f3E3a69f9d4B086391ECE2CC6fe6", + "0x4be50762000000000000000000000000a49af345c57a303c75183d219232be7b2d02715700000000000000000000000019f64674d8a5b4e652319f5e239efd3bc969a1fe000000000000000000000000c4b091d97ad25cea5922f09fe80711b7acbbb16f000000000000000000000000a92a5673613361fac3f93bb90b77744038751a5f00000000000000000000000021cf4da4c3059860c9871e31f96adcfbd0704ec000000000000000000000000000000000000000000000000000000000000004ec00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000078000000000000000000000000000000000000000000000000000000000000012c" + ], + "bytecode": "0x60806040526040516103ee3803806103ee83398101604081905261002291610268565b61002c8282610033565b5050610352565b61003c82610092565b6040516001600160a01b038316907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a280511561008657610081828261010e565b505050565b61008e610185565b5050565b806001600160a01b03163b6000036100cd57604051634c9c8ce360e01b81526001600160a01b03821660048201526024015b60405180910390fd5b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc80546001600160a01b0319166001600160a01b0392909216919091179055565b6060600080846001600160a01b03168460405161012b9190610336565b600060405180830381855af49150503d8060008114610166576040519150601f19603f3d011682016040523d82523d6000602084013e61016b565b606091505b50909250905061017c8583836101a6565b95945050505050565b34156101a45760405163b398979f60e01b815260040160405180910390fd5b565b6060826101bb576101b682610205565b6101fe565b81511580156101d257506001600160a01b0384163b155b156101fb57604051639996b31560e01b81526001600160a01b03851660048201526024016100c4565b50805b9392505050565b8051156102155780518082602001fd5b604051630a12f52160e11b815260040160405180910390fd5b634e487b7160e01b600052604160045260246000fd5b60005b8381101561025f578181015183820152602001610247565b50506000910152565b6000806040838503121561027b57600080fd5b82516001600160a01b038116811461029257600080fd5b60208401519092506001600160401b03808211156102af57600080fd5b818501915085601f8301126102c357600080fd5b8151818111156102d5576102d561022e565b604051601f8201601f19908116603f011681019083821181831017156102fd576102fd61022e565b8160405282815288602084870101111561031657600080fd5b610327836020830160208801610244565b80955050505050509250929050565b60008251610348818460208701610244565b9190910192915050565b608e806103606000396000f3fe6080604052600a600c565b005b60186014601a565b605e565b565b600060597f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5473ffffffffffffffffffffffffffffffffffffffff1690565b905090565b3660008037600080366000845af43d6000803e808015607c573d6000f35b3d6000fdfea164736f6c6343000814000a", + "deployedBytecode": "0x6080604052600a600c565b005b60186014601a565b605e565b565b600060597f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5473ffffffffffffffffffffffffffffffffffffffff1690565b905090565b3660008037600080366000845af43d6000803e808015607c573d6000f35b3d6000fdfea164736f6c6343000814000a", + "devdoc": { + "version": 1, + "kind": "dev", + "details": "This contract implements an upgradeable proxy. It is upgradeable because calls are delegated to an implementation address that can be changed. This address is stored in storage in the location specified by https://eips.ethereum.org/EIPS/eip-1967[EIP1967], so that it doesn't conflict with the storage layout of the implementation behind the proxy.", + "methods": { + "constructor": { + "details": "Initializes the upgradeable proxy with an initial implementation specified by `implementation`. If `_data` is nonempty, it's used as data in a delegate call to `implementation`. This will typically be an encoded function call, and allows initializing the storage of the proxy like a Solidity constructor. Requirements: - If `data` is empty, `msg.value` must be zero." + } + }, + "events": { + "Upgraded(address)": { + "details": "Emitted when the implementation is upgraded." + } + }, + "errors": { + "AddressEmptyCode(address)": [ + { + "details": "There's no code at `target` (it is not a contract)." + } + ], + "ERC1967InvalidImplementation(address)": [ + { + "details": "The `implementation` of the proxy is invalid." + } + ], + "ERC1967NonPayable()": [ + { + "details": "An upgrade function sees `msg.value > 0` that may be lost." + } + ], + "FailedInnerCall()": [ + { + "details": "A call to an address target failed. The target may have reverted." + } + ] + } + }, + "metadata": "{\"compiler\":{\"version\":\"0.8.20+commit.a1b79de6\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"address\",\"name\":\"implementation\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"_data\",\"type\":\"bytes\"}],\"stateMutability\":\"payable\",\"type\":\"constructor\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"target\",\"type\":\"address\"}],\"type\":\"error\",\"name\":\"AddressEmptyCode\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"implementation\",\"type\":\"address\"}],\"type\":\"error\",\"name\":\"ERC1967InvalidImplementation\"},{\"inputs\":[],\"type\":\"error\",\"name\":\"ERC1967NonPayable\"},{\"inputs\":[],\"type\":\"error\",\"name\":\"FailedInnerCall\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"implementation\",\"type\":\"address\",\"indexed\":true}],\"type\":\"event\",\"name\":\"Upgraded\",\"anonymous\":false},{\"inputs\":[],\"stateMutability\":\"payable\",\"type\":\"fallback\"}],\"devdoc\":{\"kind\":\"dev\",\"methods\":{\"constructor\":{\"details\":\"Initializes the upgradeable proxy with an initial implementation specified by `implementation`. If `_data` is nonempty, it's used as data in a delegate call to `implementation`. This will typically be an encoded function call, and allows initializing the storage of the proxy like a Solidity constructor. Requirements: - If `data` is empty, `msg.value` must be zero.\"}},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"remappings\":[\"@openzeppelin/contracts-upgradeable/=node_modules/@openzeppelin/contracts-upgradeable/\",\"@openzeppelin/contracts/=node_modules/@openzeppelin/contracts/\",\"eth-gas-reporter/=node_modules/eth-gas-reporter/\",\"forge-std/=node_modules/forge-std/\",\"hardhat/=node_modules/hardhat/\"],\"optimizer\":{\"enabled\":true,\"runs\":10000},\"metadata\":{\"bytecodeHash\":\"none\"},\"compilationTarget\":{\"node_modules/@openzeppelin/contracts/proxy/ERC1967/ERC1967Proxy.sol\":\"ERC1967Proxy\"},\"evmVersion\":\"london\",\"libraries\":{}},\"sources\":{\"node_modules/@openzeppelin/contracts/proxy/ERC1967/ERC1967Proxy.sol\":{\"keccak256\":\"0xbfb6695731de677140fbf76c772ab08c4233a122fb51ac28ac120fc49bbbc4ec\",\"urls\":[\"bzz-raw://68f8fded7cc318efa15874b7c6a983fe17a4a955d72d240353a9a4ca1e1b824c\",\"dweb:/ipfs/QmdcmBL9Qo4Tk3Dby4wFYabGyot9JNeLPxpSXZUgUm92BV\"],\"license\":\"MIT\"},\"node_modules/@openzeppelin/contracts/proxy/ERC1967/ERC1967Utils.sol\":{\"keccak256\":\"0x06a78f9b3ee3e6d0eb4e4cd635ba49960bea34cac1db8c0a27c75f2319f1fd65\",\"urls\":[\"bzz-raw://547d21aa17f4f3f1a1a7edf7167beff8dd9496a0348d5588f15cc8a4b29d052a\",\"dweb:/ipfs/QmT16JtRQSWNpLo9W23jr6CzaMuTAcQcjJJcdRd8HLJ6cE\"],\"license\":\"MIT\"},\"node_modules/@openzeppelin/contracts/proxy/Proxy.sol\":{\"keccak256\":\"0xc3f2ec76a3de8ed7a7007c46166f5550c72c7709e3fc7e8bb3111a7191cdedbd\",\"urls\":[\"bzz-raw://e73efb4c2ca655882dc237c6b4f234a9bd36d97159d8fcaa837eb01171f726ac\",\"dweb:/ipfs/QmTNnnv7Gu5fs5G1ZMh7Fexp8N4XUs3XrNAngjcxgiss3e\"],\"license\":\"MIT\"},\"node_modules/@openzeppelin/contracts/proxy/beacon/IBeacon.sol\":{\"keccak256\":\"0xc59a78b07b44b2cf2e8ab4175fca91e8eca1eee2df7357b8d2a8833e5ea1f64c\",\"urls\":[\"bzz-raw://5aa4f07e65444784c29cd7bfcc2341b34381e4e5b5da9f0c5bd00d7f430e66fa\",\"dweb:/ipfs/QmWRMh4Q9DpaU9GvsiXmDdoNYMyyece9if7hnfLz7uqzWM\"],\"license\":\"MIT\"},\"node_modules/@openzeppelin/contracts/utils/Address.sol\":{\"keccak256\":\"0xaf28a975a78550e45f65e559a3ad6a5ad43b9b8a37366999abd1b7084eb70721\",\"urls\":[\"bzz-raw://b7bd24e224f67f65bfadf85dc2929fa965456bb2415478bd0125471b5ce35245\",\"dweb:/ipfs/QmRaydGr8BTHs1kvaZfsNU69pKzUAGFrvABn1KiRSbE51y\"],\"license\":\"MIT\"},\"node_modules/@openzeppelin/contracts/utils/StorageSlot.sol\":{\"keccak256\":\"0x32ba59b4b7299237c8ba56319110989d7978a039faf754793064e967e5894418\",\"urls\":[\"bzz-raw://1ae50c8b562427df610cc4540c9bf104acca7ef8e2dcae567ae7e52272281e9c\",\"dweb:/ipfs/QmTHiadFCSJUPpRjNegc5SahmeU8bAoY8i9Aq6tVscbcKR\"],\"license\":\"MIT\"}},\"version\":1}", + "numDeployments": 3, + "receipt": { + "transactionHash": "0xa2746e801d051360924303dbd99c4e06fd2a23b2a43125e4c35683005bd5ac59", + "transactionIndex": "0x1", + "blockHash": "0x9da0e102c4c9ff9530f44176c7ef9f83c01c00901fdf7b3fec21c83b55a69103", + "blockNumber": "0x5845bf", + "from": "0xCB8F8130E289946aec9a17b29819716B1E9e4998", + "to": null, + "cumulativeGasUsed": "0x539582", + "gasUsed": "0x54226", + "contractAddress": "0x65e313474cC038782fF89581eD60bc2431794A33", + "logs": [ + { + "address": "0x65e313474cC038782fF89581eD60bc2431794A33", + "topics": [ + "0xbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b", + "0x000000000000000000000000eadca815d145f3e3a69f9d4b086391ece2cc6fe6" + ], + "data": "0x", + "blockHash": "0x9da0e102c4c9ff9530f44176c7ef9f83c01c00901fdf7b3fec21c83b55a69103", + "blockNumber": "0x5845bf", + "transactionHash": "0xa2746e801d051360924303dbd99c4e06fd2a23b2a43125e4c35683005bd5ac59", + "transactionIndex": "0x1", + "logIndex": "0x0" + }, + { + "address": "0x65e313474cC038782fF89581eD60bc2431794A33", + "topics": [ + "0xc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d2" + ], + "data": "0x0000000000000000000000000000000000000000000000000000000000000001", + "blockHash": "0x9da0e102c4c9ff9530f44176c7ef9f83c01c00901fdf7b3fec21c83b55a69103", + "blockNumber": "0x5845bf", + "transactionHash": "0xa2746e801d051360924303dbd99c4e06fd2a23b2a43125e4c35683005bd5ac59", + "transactionIndex": "0x1", + "logIndex": "0x1" + } + ], + "status": "0x1", + "logsBloom": "0x00000000000000000000000000000000400000000000000000000000008000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000800000000000040000000000080000000000000000000000000000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000004000100000000000000000000000000000000010000000000000000000000000000000000000000000000", + "type": "0x0", + "effectiveGasPrice": "0x3ef1480" + }, + "solcInputHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "storageLayout": { + "storage": [], + "types": {} + }, + "transactionHash": "0xa2746e801d051360924303dbd99c4e06fd2a23b2a43125e4c35683005bd5ac59", + "userdoc": { + "version": 1, + "kind": "user" + } +} \ No newline at end of file diff --git a/deployments/testnet_qa/GaugeBeaconRootstockCollective.json b/deployments/testnet_qa/GaugeBeaconRootstockCollective.json new file mode 100644 index 00000000..e6061ed5 --- /dev/null +++ b/deployments/testnet_qa/GaugeBeaconRootstockCollective.json @@ -0,0 +1,310 @@ +{ + "abi": [ + { + "type": "constructor", + "inputs": [ + { + "name": "governanceManager_", + "type": "address", + "internalType": "contract IGovernanceManagerRootstockCollective" + }, + { + "name": "gaugeImplementation_", + "type": "address", + "internalType": "address" + } + ], + "stateMutability": "nonpayable" + }, + { + "type": "function", + "name": "governanceManager", + "inputs": [], + "outputs": [ + { + "name": "", + "type": "address", + "internalType": "contract IGovernanceManagerRootstockCollective" + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "implementation", + "inputs": [], + "outputs": [ + { + "name": "", + "type": "address", + "internalType": "address" + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "owner", + "inputs": [], + "outputs": [ + { + "name": "", + "type": "address", + "internalType": "address" + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "renounceOwnership", + "inputs": [], + "outputs": [], + "stateMutability": "nonpayable" + }, + { + "type": "function", + "name": "transferOwnership", + "inputs": [ + { + "name": "newOwner", + "type": "address", + "internalType": "address" + } + ], + "outputs": [], + "stateMutability": "nonpayable" + }, + { + "type": "function", + "name": "upgradeTo", + "inputs": [ + { + "name": "newImplementation", + "type": "address", + "internalType": "address" + } + ], + "outputs": [], + "stateMutability": "nonpayable" + }, + { + "type": "event", + "name": "OwnershipTransferred", + "inputs": [ + { + "name": "previousOwner", + "type": "address", + "indexed": true, + "internalType": "address" + }, + { + "name": "newOwner", + "type": "address", + "indexed": true, + "internalType": "address" + } + ], + "anonymous": false + }, + { + "type": "event", + "name": "Upgraded", + "inputs": [ + { + "name": "implementation", + "type": "address", + "indexed": true, + "internalType": "address" + } + ], + "anonymous": false + }, + { + "type": "error", + "name": "BeaconInvalidImplementation", + "inputs": [ + { + "name": "implementation", + "type": "address", + "internalType": "address" + } + ] + }, + { + "type": "error", + "name": "OwnableInvalidOwner", + "inputs": [ + { + "name": "owner", + "type": "address", + "internalType": "address" + } + ] + }, + { + "type": "error", + "name": "OwnableUnauthorizedAccount", + "inputs": [ + { + "name": "account", + "type": "address", + "internalType": "address" + } + ] + } + ], + "address": "0xBf45113ac533206ca5bE16f5a500FBf0d9CB95d6", + "args": [ + "0xa49Af345c57A303C75183d219232Be7b2d027157", + "0xEa4fc5496D5dE7518958D675771bff5e69b6bCE3" + ], + "bytecode": "0x608060405234801561001057600080fd5b5060405161062338038061062383398101604081905261002f916101e6565b80826001600160a01b0316630c340a246040518163ffffffff1660e01b8152600401602060405180830381865afa15801561006e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906100929190610220565b806001600160a01b0381166100c257604051631e4fbdf760e01b8152600060048201526024015b60405180910390fd5b6100cb816100fe565b506100d58261014e565b5050600280546001600160a01b0319166001600160a01b03939093169290921790915550610244565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b806001600160a01b03163b6000036101845760405163211eb15960e21b81526001600160a01b03821660048201526024016100b9565b600180546001600160a01b0319166001600160a01b0383169081179091556040517fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a250565b6001600160a01b03811681146101e357600080fd5b50565b600080604083850312156101f957600080fd5b8251610204816101ce565b6020840151909250610215816101ce565b809150509250929050565b60006020828403121561023257600080fd5b815161023d816101ce565b9392505050565b6103d0806102536000396000f3fe608060405234801561001057600080fd5b50600436106100725760003560e01c80638da5cb5b116100505780638da5cb5b146100d7578063d2e6d1c3146100f5578063f2fde38b1461011557600080fd5b80633659cfe6146100775780635c60da1b1461008c578063715018a6146100cf575b600080fd5b61008a610085366004610386565b610128565b005b60015473ffffffffffffffffffffffffffffffffffffffff165b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200160405180910390f35b61008a61013c565b60005473ffffffffffffffffffffffffffffffffffffffff166100a6565b6002546100a69073ffffffffffffffffffffffffffffffffffffffff1681565b61008a610123366004610386565b610150565b6101306101b6565b61013981610239565b50565b6101446101b6565b61014e6000610311565b565b6101586101b6565b73ffffffffffffffffffffffffffffffffffffffff81166101ad576040517f1e4fbdf7000000000000000000000000000000000000000000000000000000008152600060048201526024015b60405180910390fd5b61013981610311565b6002546040517feb6f7abf00000000000000000000000000000000000000000000000000000000815233600482015273ffffffffffffffffffffffffffffffffffffffff9091169063eb6f7abf9060240160006040518083038186803b15801561021f57600080fd5b505afa158015610233573d6000803e3d6000fd5b50505050565b8073ffffffffffffffffffffffffffffffffffffffff163b6000036102a2576040517f847ac56400000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff821660048201526024016101a4565b600180547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff83169081179091556040517fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a250565b6000805473ffffffffffffffffffffffffffffffffffffffff8381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b60006020828403121561039857600080fd5b813573ffffffffffffffffffffffffffffffffffffffff811681146103bc57600080fd5b939250505056fea164736f6c6343000814000a", + "deployedBytecode": "0x608060405234801561001057600080fd5b50600436106100725760003560e01c80638da5cb5b116100505780638da5cb5b146100d7578063d2e6d1c3146100f5578063f2fde38b1461011557600080fd5b80633659cfe6146100775780635c60da1b1461008c578063715018a6146100cf575b600080fd5b61008a610085366004610386565b610128565b005b60015473ffffffffffffffffffffffffffffffffffffffff165b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200160405180910390f35b61008a61013c565b60005473ffffffffffffffffffffffffffffffffffffffff166100a6565b6002546100a69073ffffffffffffffffffffffffffffffffffffffff1681565b61008a610123366004610386565b610150565b6101306101b6565b61013981610239565b50565b6101446101b6565b61014e6000610311565b565b6101586101b6565b73ffffffffffffffffffffffffffffffffffffffff81166101ad576040517f1e4fbdf7000000000000000000000000000000000000000000000000000000008152600060048201526024015b60405180910390fd5b61013981610311565b6002546040517feb6f7abf00000000000000000000000000000000000000000000000000000000815233600482015273ffffffffffffffffffffffffffffffffffffffff9091169063eb6f7abf9060240160006040518083038186803b15801561021f57600080fd5b505afa158015610233573d6000803e3d6000fd5b50505050565b8073ffffffffffffffffffffffffffffffffffffffff163b6000036102a2576040517f847ac56400000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff821660048201526024016101a4565b600180547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff83169081179091556040517fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a250565b6000805473ffffffffffffffffffffffffffffffffffffffff8381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b60006020828403121561039857600080fd5b813573ffffffffffffffffffffffffffffffffffffffff811681146103bc57600080fd5b939250505056fea164736f6c6343000814000a", + "devdoc": { + "version": 1, + "kind": "dev", + "methods": { + "constructor": { + "params": { + "gaugeImplementation_": "address of the Gauge initial implementation", + "governanceManager_": "contract with permissioned roles" + } + }, + "implementation()": { + "details": "Returns the current implementation address." + }, + "owner()": { + "details": "Returns the address of the current owner." + }, + "renounceOwnership()": { + "details": "Leaves the contract without owner. It will not be possible to call `onlyOwner` functions. Can only be called by the current owner. NOTE: Renouncing ownership will leave the contract without an owner, thereby disabling any functionality that is only available to the owner." + }, + "transferOwnership(address)": { + "details": "Transfers ownership of the contract to a new account (`newOwner`). Can only be called by the current owner." + }, + "upgradeTo(address)": { + "details": "Upgrades the beacon to a new implementation. Emits an {Upgraded} event. Requirements: - msg.sender must be the owner of the contract. - `newImplementation` must be a contract." + } + }, + "events": { + "Upgraded(address)": { + "details": "Emitted when the implementation returned by the beacon is changed." + } + }, + "errors": { + "BeaconInvalidImplementation(address)": [ + { + "details": "The `implementation` of the beacon is invalid." + } + ], + "OwnableInvalidOwner(address)": [ + { + "details": "The owner is not a valid owner account. (eg. `address(0)`)" + } + ], + "OwnableUnauthorizedAccount(address)": [ + { + "details": "The caller account is not authorized to perform an operation." + } + ] + } + }, + "metadata": "{\"compiler\":{\"version\":\"0.8.20+commit.a1b79de6\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"contract IGovernanceManagerRootstockCollective\",\"name\":\"governanceManager_\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"gaugeImplementation_\",\"type\":\"address\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"implementation\",\"type\":\"address\"}],\"type\":\"error\",\"name\":\"BeaconInvalidImplementation\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"}],\"type\":\"error\",\"name\":\"OwnableInvalidOwner\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"type\":\"error\",\"name\":\"OwnableUnauthorizedAccount\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"previousOwner\",\"type\":\"address\",\"indexed\":true},{\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\",\"indexed\":true}],\"type\":\"event\",\"name\":\"OwnershipTransferred\",\"anonymous\":false},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"implementation\",\"type\":\"address\",\"indexed\":true}],\"type\":\"event\",\"name\":\"Upgraded\",\"anonymous\":false},{\"inputs\":[],\"stateMutability\":\"view\",\"type\":\"function\",\"name\":\"governanceManager\",\"outputs\":[{\"internalType\":\"contract IGovernanceManagerRootstockCollective\",\"name\":\"\",\"type\":\"address\"}]},{\"inputs\":[],\"stateMutability\":\"view\",\"type\":\"function\",\"name\":\"implementation\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}]},{\"inputs\":[],\"stateMutability\":\"view\",\"type\":\"function\",\"name\":\"owner\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}]},{\"inputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\",\"name\":\"renounceOwnership\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\",\"name\":\"transferOwnership\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newImplementation\",\"type\":\"address\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\",\"name\":\"upgradeTo\"}],\"devdoc\":{\"kind\":\"dev\",\"methods\":{\"constructor\":{\"params\":{\"gaugeImplementation_\":\"address of the Gauge initial implementation\",\"governanceManager_\":\"contract with permissioned roles\"}},\"implementation()\":{\"details\":\"Returns the current implementation address.\"},\"owner()\":{\"details\":\"Returns the address of the current owner.\"},\"renounceOwnership()\":{\"details\":\"Leaves the contract without owner. It will not be possible to call `onlyOwner` functions. Can only be called by the current owner. NOTE: Renouncing ownership will leave the contract without an owner, thereby disabling any functionality that is only available to the owner.\"},\"transferOwnership(address)\":{\"details\":\"Transfers ownership of the contract to a new account (`newOwner`). Can only be called by the current owner.\"},\"upgradeTo(address)\":{\"details\":\"Upgrades the beacon to a new implementation. Emits an {Upgraded} event. Requirements: - msg.sender must be the owner of the contract. - `newImplementation` must be a contract.\"}},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{\"constructor\":{\"notice\":\"constructor\"}},\"version\":1}},\"settings\":{\"remappings\":[\"@openzeppelin/contracts-upgradeable/=node_modules/@openzeppelin/contracts-upgradeable/\",\"@openzeppelin/contracts/=node_modules/@openzeppelin/contracts/\",\"eth-gas-reporter/=node_modules/eth-gas-reporter/\",\"forge-std/=node_modules/forge-std/\",\"hardhat/=node_modules/hardhat/\"],\"optimizer\":{\"enabled\":true,\"runs\":10000},\"metadata\":{\"bytecodeHash\":\"none\"},\"compilationTarget\":{\"src/gauge/GaugeBeaconRootstockCollective.sol\":\"GaugeBeaconRootstockCollective\"},\"evmVersion\":\"london\",\"libraries\":{}},\"sources\":{\"node_modules/@openzeppelin/contracts/access/Ownable.sol\":{\"keccak256\":\"0xff6d0bb2e285473e5311d9d3caacb525ae3538a80758c10649a4d61029b017bb\",\"urls\":[\"bzz-raw://8ed324d3920bb545059d66ab97d43e43ee85fd3bd52e03e401f020afb0b120f6\",\"dweb:/ipfs/QmfEckWLmZkDDcoWrkEvMWhms66xwTLff9DDhegYpvHo1a\"],\"license\":\"MIT\"},\"node_modules/@openzeppelin/contracts/proxy/beacon/IBeacon.sol\":{\"keccak256\":\"0xc59a78b07b44b2cf2e8ab4175fca91e8eca1eee2df7357b8d2a8833e5ea1f64c\",\"urls\":[\"bzz-raw://5aa4f07e65444784c29cd7bfcc2341b34381e4e5b5da9f0c5bd00d7f430e66fa\",\"dweb:/ipfs/QmWRMh4Q9DpaU9GvsiXmDdoNYMyyece9if7hnfLz7uqzWM\"],\"license\":\"MIT\"},\"node_modules/@openzeppelin/contracts/proxy/beacon/UpgradeableBeacon.sol\":{\"keccak256\":\"0x5920bac7215d12961e23b207f6e81a1d64aa4935a4469abe95b64a96a3c3007b\",\"urls\":[\"bzz-raw://b34bb828c45c3a4ebf6c2c585971abf5089e61357a3818a2900c7e85b74a1299\",\"dweb:/ipfs/QmewGAzKsPXYfSjCKxuH1SekKxtdyzhdbdyxjF5gohLigt\"],\"license\":\"MIT\"},\"node_modules/@openzeppelin/contracts/utils/Context.sol\":{\"keccak256\":\"0x493033a8d1b176a037b2cc6a04dad01a5c157722049bbecf632ca876224dd4b2\",\"urls\":[\"bzz-raw://6a708e8a5bdb1011c2c381c9a5cfd8a9a956d7d0a9dc1bd8bcdaf52f76ef2f12\",\"dweb:/ipfs/Qmax9WHBnVsZP46ZxEMNRQpLQnrdE4dK8LehML1Py8FowF\"],\"license\":\"MIT\"},\"src/gauge/GaugeBeaconRootstockCollective.sol\":{\"keccak256\":\"0x983671fcb0f2432c5c7626b0505f12861efdafc60fe760f856fb7b5caae02494\",\"urls\":[\"bzz-raw://516a39edc09befe00ec6faa924fb1c6bfe3208eef12b631075f93f7fb41a53d3\",\"dweb:/ipfs/QmZnXYuTp9EodYyx2Z1MPKfbakyUW8AfdQihHiisEWhDdo\"],\"license\":\"MIT\"},\"src/interfaces/IChangeContractRootstockCollective.sol\":{\"keccak256\":\"0x00fb3eb72286348dd06d581c5044cb045dfd3bd24725d05dd9c4b008567dd496\",\"urls\":[\"bzz-raw://7f4a03e06197ae7d6e478097afbbecf936ce7029ca49909a1fee0b4ba1b5b517\",\"dweb:/ipfs/QmfByMJ1SQAmcYkouS5WM3akMmSKU3MCyACpFmQwuFSYe9\"],\"license\":\"MIT\"},\"src/interfaces/IGovernanceManagerRootstockCollective.sol\":{\"keccak256\":\"0x1416991dd129bb36f43cc0854dfa824b5b85838e5c5018566b6cf78f527747e3\",\"urls\":[\"bzz-raw://8652a18ec39d5527fefb829eca619f4cf4bbec3ee4f6231e8888f1549feedd3d\",\"dweb:/ipfs/Qmczi6GipLy9B9TcDMx5UaZZPFBaMT2k49iYzQuLCFgnfS\"],\"license\":\"MIT\"}},\"version\":1}", + "numDeployments": 3, + "receipt": { + "transactionHash": "0x1a8205f37516bd34f412f18166e155a310d732b45879c3ec0f05031c89a4df59", + "transactionIndex": "0x3", + "blockHash": "0xf18acb9586a151f22eb4a7b664a2358b71d3547d10933e805fd7080d9ac2cfab", + "blockNumber": "0x5845be", + "from": "0xCB8F8130E289946aec9a17b29819716B1E9e4998", + "to": null, + "cumulativeGasUsed": "0x3ca53a", + "gasUsed": "0x52d94", + "contractAddress": "0xBf45113ac533206ca5bE16f5a500FBf0d9CB95d6", + "logs": [ + { + "address": "0xBf45113ac533206ca5bE16f5a500FBf0d9CB95d6", + "topics": [ + "0x8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000005e3ede6781f811cb3fe03f9a687bd7fff8dc19e7" + ], + "data": "0x", + "blockHash": "0xf18acb9586a151f22eb4a7b664a2358b71d3547d10933e805fd7080d9ac2cfab", + "blockNumber": "0x5845be", + "transactionHash": "0x1a8205f37516bd34f412f18166e155a310d732b45879c3ec0f05031c89a4df59", + "transactionIndex": "0x3", + "logIndex": "0x0" + }, + { + "address": "0xBf45113ac533206ca5bE16f5a500FBf0d9CB95d6", + "topics": [ + "0xbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b", + "0x000000000000000000000000ea4fc5496d5de7518958d675771bff5e69b6bce3" + ], + "data": "0x", + "blockHash": "0xf18acb9586a151f22eb4a7b664a2358b71d3547d10933e805fd7080d9ac2cfab", + "blockNumber": "0x5845be", + "transactionHash": "0x1a8205f37516bd34f412f18166e155a310d732b45879c3ec0f05031c89a4df59", + "transactionIndex": "0x3", + "logIndex": "0x1" + } + ], + "status": "0x1", + "logsBloom": "0x00000000000000020000000001000000400000000000000000800800000020000000000000000000000000000000000000800000000000000000000000000000000000000000000000000080000002000001000020000000000000000000000000000000020000000000000000000800000000008000000000000000000000400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000020000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000000000", + "type": "0x0", + "effectiveGasPrice": "0x3ef1480" + }, + "solcInputHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "storageLayout": { + "storage": [ + { + "astId": 613, + "contract": "src/gauge/GaugeBeaconRootstockCollective.sol:GaugeBeaconRootstockCollective", + "label": "_owner", + "offset": 0, + "slot": "0", + "type": "t_address" + }, + { + "astId": 1357, + "contract": "src/gauge/GaugeBeaconRootstockCollective.sol:GaugeBeaconRootstockCollective", + "label": "_implementation", + "offset": 0, + "slot": "1", + "type": "t_address" + }, + { + "astId": 58339, + "contract": "src/gauge/GaugeBeaconRootstockCollective.sol:GaugeBeaconRootstockCollective", + "label": "governanceManager", + "offset": 0, + "slot": "2", + "type": "t_contract(IGovernanceManagerRootstockCollective)60547" + } + ], + "types": { + "t_address": { + "encoding": "inplace", + "label": "address", + "numberOfBytes": "20" + }, + "t_contract(IGovernanceManagerRootstockCollective)60547": { + "encoding": "inplace", + "label": "contract IGovernanceManagerRootstockCollective", + "numberOfBytes": "20" + } + } + }, + "transactionHash": "0x1a8205f37516bd34f412f18166e155a310d732b45879c3ec0f05031c89a4df59", + "userdoc": { + "version": 1, + "kind": "user", + "methods": { + "constructor": { + "notice": "constructor" + } + } + } +} \ No newline at end of file diff --git a/deployments/testnet_qa/GaugeFactoryRootstockCollective.json b/deployments/testnet_qa/GaugeFactoryRootstockCollective.json new file mode 100644 index 00000000..246d1ada --- /dev/null +++ b/deployments/testnet_qa/GaugeFactoryRootstockCollective.json @@ -0,0 +1,117 @@ +{ + "abi": [ + { + "type": "constructor", + "inputs": [ + { + "name": "beacon_", + "type": "address", + "internalType": "address" + }, + { + "name": "rewardToken_", + "type": "address", + "internalType": "address" + } + ], + "stateMutability": "nonpayable" + }, + { + "type": "function", + "name": "beacon", + "inputs": [], + "outputs": [ + { + "name": "", + "type": "address", + "internalType": "address" + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "createGauge", + "inputs": [], + "outputs": [ + { + "name": "gauge_", + "type": "address", + "internalType": "contract GaugeRootstockCollective" + } + ], + "stateMutability": "nonpayable" + }, + { + "type": "function", + "name": "rewardToken", + "inputs": [], + "outputs": [ + { + "name": "", + "type": "address", + "internalType": "address" + } + ], + "stateMutability": "view" + } + ], + "address": "0xa92a5673613361fAc3f93bB90B77744038751a5f", + "args": [ + "0xBf45113ac533206ca5bE16f5a500FBf0d9CB95d6", + "0x19F64674D8A5B4E652319F5e239eFd3bc969A1fE" + ], + "bytecode": "0x60c060405234801561001057600080fd5b5060405161090c38038061090c83398101604081905261002f91610062565b6001600160a01b039182166080521660a052610095565b80516001600160a01b038116811461005d57600080fd5b919050565b6000806040838503121561007557600080fd5b61007e83610046565b915061008c60208401610046565b90509250929050565b60805160a0516108476100c56000396000818160a3015260df015260008181604b015261018e01526108476000f3fe608060405234801561001057600080fd5b50600436106100415760003560e01c806359659e9014610046578063dc5a417914610096578063f7c618c11461009e575b600080fd5b61006d7f000000000000000000000000000000000000000000000000000000000000000081565b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200160405180910390f35b61006d6100c5565b61006d7f000000000000000000000000000000000000000000000000000000000000000081565b60405173ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001660248201523360448201526000908190606401604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f485cc95500000000000000000000000000000000000000000000000000000000179052519091507f00000000000000000000000000000000000000000000000000000000000000009082906101b9906101e7565b6101c49291906101f4565b604051809103906000f0801580156101e0573d6000803e3d6000fd5b5091505090565b6105bc8061027f83390190565b73ffffffffffffffffffffffffffffffffffffffff8316815260006020604081840152835180604085015260005b8181101561023e57858101830151858201606001528201610222565b5060006060828601015260607fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f83011685010192505050939250505056fe60a06040526040516105bc3803806105bc83398101604081905261002291610387565b61002c828261003e565b506001600160a01b031660805261047e565b610047826100fe565b6040516001600160a01b038316907f1cf3b03a6cf19fa2baba4df148e9dcabedea7f8a5c07840e207e5c089be95d3e90600090a28051156100f2576100ed826001600160a01b0316635c60da1b6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156100c3573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906100e79190610447565b82610211565b505050565b6100fa610288565b5050565b806001600160a01b03163b60000361013957604051631933b43b60e21b81526001600160a01b03821660048201526024015b60405180910390fd5b807fa3f0ad74e5423aebfd80d3ef4346578335a9a72aeaee59ff6cb3582b35133d5080546001600160a01b0319166001600160a01b0392831617905560408051635c60da1b60e01b81529051600092841691635c60da1b9160048083019260209291908290030181865afa1580156101b5573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906101d99190610447565b9050806001600160a01b03163b6000036100fa57604051634c9c8ce360e01b81526001600160a01b0382166004820152602401610130565b6060600080846001600160a01b03168460405161022e9190610462565b600060405180830381855af49150503d8060008114610269576040519150601f19603f3d011682016040523d82523d6000602084013e61026e565b606091505b50909250905061027f8583836102a9565b95945050505050565b34156102a75760405163b398979f60e01b815260040160405180910390fd5b565b6060826102be576102b982610308565b610301565b81511580156102d557506001600160a01b0384163b155b156102fe57604051639996b31560e01b81526001600160a01b0385166004820152602401610130565b50805b9392505050565b8051156103185780518082602001fd5b604051630a12f52160e11b815260040160405180910390fd5b80516001600160a01b038116811461034857600080fd5b919050565b634e487b7160e01b600052604160045260246000fd5b60005b8381101561037e578181015183820152602001610366565b50506000910152565b6000806040838503121561039a57600080fd5b6103a383610331565b60208401519092506001600160401b03808211156103c057600080fd5b818501915085601f8301126103d457600080fd5b8151818111156103e6576103e661034d565b604051601f8201601f19908116603f0116810190838211818310171561040e5761040e61034d565b8160405282815288602084870101111561042757600080fd5b610438836020830160208801610363565b80955050505050509250929050565b60006020828403121561045957600080fd5b61030182610331565b60008251610474818460208701610363565b9190910192915050565b6080516101246104986000396000602401526101246000f3fe608060405261000c61000e565b005b61001e610019610020565b6100b6565b565b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16635c60da1b6040518163ffffffff1660e01b8152600401602060405180830381865afa15801561008d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906100b191906100da565b905090565b3660008037600080366000845af43d6000803e8080156100d5573d6000f35b3d6000fd5b6000602082840312156100ec57600080fd5b815173ffffffffffffffffffffffffffffffffffffffff8116811461011057600080fd5b939250505056fea164736f6c6343000814000aa164736f6c6343000814000a", + "deployedBytecode": "0x608060405234801561001057600080fd5b50600436106100415760003560e01c806359659e9014610046578063dc5a417914610096578063f7c618c11461009e575b600080fd5b61006d7f000000000000000000000000000000000000000000000000000000000000000081565b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200160405180910390f35b61006d6100c5565b61006d7f000000000000000000000000000000000000000000000000000000000000000081565b60405173ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001660248201523360448201526000908190606401604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f485cc95500000000000000000000000000000000000000000000000000000000179052519091507f00000000000000000000000000000000000000000000000000000000000000009082906101b9906101e7565b6101c49291906101f4565b604051809103906000f0801580156101e0573d6000803e3d6000fd5b5091505090565b6105bc8061027f83390190565b73ffffffffffffffffffffffffffffffffffffffff8316815260006020604081840152835180604085015260005b8181101561023e57858101830151858201606001528201610222565b5060006060828601015260607fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f83011685010192505050939250505056fe60a06040526040516105bc3803806105bc83398101604081905261002291610387565b61002c828261003e565b506001600160a01b031660805261047e565b610047826100fe565b6040516001600160a01b038316907f1cf3b03a6cf19fa2baba4df148e9dcabedea7f8a5c07840e207e5c089be95d3e90600090a28051156100f2576100ed826001600160a01b0316635c60da1b6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156100c3573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906100e79190610447565b82610211565b505050565b6100fa610288565b5050565b806001600160a01b03163b60000361013957604051631933b43b60e21b81526001600160a01b03821660048201526024015b60405180910390fd5b807fa3f0ad74e5423aebfd80d3ef4346578335a9a72aeaee59ff6cb3582b35133d5080546001600160a01b0319166001600160a01b0392831617905560408051635c60da1b60e01b81529051600092841691635c60da1b9160048083019260209291908290030181865afa1580156101b5573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906101d99190610447565b9050806001600160a01b03163b6000036100fa57604051634c9c8ce360e01b81526001600160a01b0382166004820152602401610130565b6060600080846001600160a01b03168460405161022e9190610462565b600060405180830381855af49150503d8060008114610269576040519150601f19603f3d011682016040523d82523d6000602084013e61026e565b606091505b50909250905061027f8583836102a9565b95945050505050565b34156102a75760405163b398979f60e01b815260040160405180910390fd5b565b6060826102be576102b982610308565b610301565b81511580156102d557506001600160a01b0384163b155b156102fe57604051639996b31560e01b81526001600160a01b0385166004820152602401610130565b50805b9392505050565b8051156103185780518082602001fd5b604051630a12f52160e11b815260040160405180910390fd5b80516001600160a01b038116811461034857600080fd5b919050565b634e487b7160e01b600052604160045260246000fd5b60005b8381101561037e578181015183820152602001610366565b50506000910152565b6000806040838503121561039a57600080fd5b6103a383610331565b60208401519092506001600160401b03808211156103c057600080fd5b818501915085601f8301126103d457600080fd5b8151818111156103e6576103e661034d565b604051601f8201601f19908116603f0116810190838211818310171561040e5761040e61034d565b8160405282815288602084870101111561042757600080fd5b610438836020830160208801610363565b80955050505050509250929050565b60006020828403121561045957600080fd5b61030182610331565b60008251610474818460208701610363565b9190910192915050565b6080516101246104986000396000602401526101246000f3fe608060405261000c61000e565b005b61001e610019610020565b6100b6565b565b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16635c60da1b6040518163ffffffff1660e01b8152600401602060405180830381865afa15801561008d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906100b191906100da565b905090565b3660008037600080366000845af43d6000803e8080156100d5573d6000f35b3d6000fd5b6000602082840312156100ec57600080fd5b815173ffffffffffffffffffffffffffffffffffffffff8116811461011057600080fd5b939250505056fea164736f6c6343000814000aa164736f6c6343000814000a", + "devdoc": { + "version": 1, + "kind": "dev", + "methods": { + "constructor": { + "params": { + "beacon_": "address of the beacon", + "rewardToken_": "address of the token rewarded to builder and voters" + } + } + } + }, + "metadata": "{\"compiler\":{\"version\":\"0.8.20+commit.a1b79de6\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"address\",\"name\":\"beacon_\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"rewardToken_\",\"type\":\"address\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"inputs\":[],\"stateMutability\":\"view\",\"type\":\"function\",\"name\":\"beacon\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}]},{\"inputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\",\"name\":\"createGauge\",\"outputs\":[{\"internalType\":\"contract GaugeRootstockCollective\",\"name\":\"gauge_\",\"type\":\"address\"}]},{\"inputs\":[],\"stateMutability\":\"view\",\"type\":\"function\",\"name\":\"rewardToken\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}]}],\"devdoc\":{\"kind\":\"dev\",\"methods\":{\"constructor\":{\"params\":{\"beacon_\":\"address of the beacon\",\"rewardToken_\":\"address of the token rewarded to builder and voters\"}}},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{\"beacon()\":{\"notice\":\"address of beacon contract who stores gauge implementation address which is where gauge proxies will delegate all function calls\"},\"constructor\":{\"notice\":\"constructor\"},\"rewardToken()\":{\"notice\":\"address of the token rewarded to builder and voters\"}},\"version\":1}},\"settings\":{\"remappings\":[\"@openzeppelin/contracts-upgradeable/=node_modules/@openzeppelin/contracts-upgradeable/\",\"@openzeppelin/contracts/=node_modules/@openzeppelin/contracts/\",\"eth-gas-reporter/=node_modules/eth-gas-reporter/\",\"forge-std/=node_modules/forge-std/\",\"hardhat/=node_modules/hardhat/\"],\"optimizer\":{\"enabled\":true,\"runs\":10000},\"metadata\":{\"bytecodeHash\":\"none\"},\"compilationTarget\":{\"src/gauge/GaugeFactoryRootstockCollective.sol\":\"GaugeFactoryRootstockCollective\"},\"evmVersion\":\"london\",\"libraries\":{}},\"sources\":{\"node_modules/@openzeppelin/contracts-upgradeable/proxy/utils/Initializable.sol\":{\"keccak256\":\"0x631188737069917d2f909d29ce62c4d48611d326686ba6683e26b72a23bfac0b\",\"urls\":[\"bzz-raw://7a61054ae84cd6c4d04c0c4450ba1d6de41e27e0a2c4f1bcdf58f796b401c609\",\"dweb:/ipfs/QmUvtdp7X1mRVyC3CsHrtPbgoqWaXHp3S1ZR24tpAQYJWM\"],\"license\":\"MIT\"},\"node_modules/@openzeppelin/contracts-upgradeable/utils/ReentrancyGuardUpgradeable.sol\":{\"keccak256\":\"0xb44e086e941292cdc7f440de51478493894ef0b1aeccb0c4047445919f667f74\",\"urls\":[\"bzz-raw://942dad22fbdc1669f025540ba63aa3ccfad5f8458fc5d4525b31ebf272e7af45\",\"dweb:/ipfs/Qmdo4X2M82aM3AMoW2kf2jhYkSCyC4T1pHNd6obdsDFnAB\"],\"license\":\"MIT\"},\"node_modules/@openzeppelin/contracts/proxy/ERC1967/ERC1967Utils.sol\":{\"keccak256\":\"0x06a78f9b3ee3e6d0eb4e4cd635ba49960bea34cac1db8c0a27c75f2319f1fd65\",\"urls\":[\"bzz-raw://547d21aa17f4f3f1a1a7edf7167beff8dd9496a0348d5588f15cc8a4b29d052a\",\"dweb:/ipfs/QmT16JtRQSWNpLo9W23jr6CzaMuTAcQcjJJcdRd8HLJ6cE\"],\"license\":\"MIT\"},\"node_modules/@openzeppelin/contracts/proxy/Proxy.sol\":{\"keccak256\":\"0xc3f2ec76a3de8ed7a7007c46166f5550c72c7709e3fc7e8bb3111a7191cdedbd\",\"urls\":[\"bzz-raw://e73efb4c2ca655882dc237c6b4f234a9bd36d97159d8fcaa837eb01171f726ac\",\"dweb:/ipfs/QmTNnnv7Gu5fs5G1ZMh7Fexp8N4XUs3XrNAngjcxgiss3e\"],\"license\":\"MIT\"},\"node_modules/@openzeppelin/contracts/proxy/beacon/BeaconProxy.sol\":{\"keccak256\":\"0x387ebdcb365b8e620f26645d2b34a161cd39eedfb0219e8baff55630c5ae113c\",\"urls\":[\"bzz-raw://744ea187c195e31cb9201e63ca291fca9e623747f54f0ba390b366a6213b8964\",\"dweb:/ipfs/Qmc547qfV4sz65DC9B4okx1HvgxwUzJR7zTfKKbTzL3UQT\"],\"license\":\"MIT\"},\"node_modules/@openzeppelin/contracts/proxy/beacon/IBeacon.sol\":{\"keccak256\":\"0xc59a78b07b44b2cf2e8ab4175fca91e8eca1eee2df7357b8d2a8833e5ea1f64c\",\"urls\":[\"bzz-raw://5aa4f07e65444784c29cd7bfcc2341b34381e4e5b5da9f0c5bd00d7f430e66fa\",\"dweb:/ipfs/QmWRMh4Q9DpaU9GvsiXmDdoNYMyyece9if7hnfLz7uqzWM\"],\"license\":\"MIT\"},\"node_modules/@openzeppelin/contracts/token/ERC20/IERC20.sol\":{\"keccak256\":\"0xc6a8ff0ea489379b61faa647490411b80102578440ab9d84e9a957cc12164e70\",\"urls\":[\"bzz-raw://0ea104e577e63faea3b69c415637e99e755dcbf64c5833d7140c35a714d6d90c\",\"dweb:/ipfs/Qmau6x4Ns9XdyynRCNNp3RhLqijJjFm7z5fyZazfYFGYdq\"],\"license\":\"MIT\"},\"node_modules/@openzeppelin/contracts/token/ERC20/extensions/IERC20Permit.sol\":{\"keccak256\":\"0x6008dabfe393240d73d7dd7688033f72740d570aa422254d29a7dce8568f3aff\",\"urls\":[\"bzz-raw://f5196ec75139918c6c7bb4251b36395e668f1fa6d206beba7e7520e74913940d\",\"dweb:/ipfs/QmSyqjksXxmm2mCG6qRd1yuwLykypkSVBbnBnGqJRcuJMi\"],\"license\":\"MIT\"},\"node_modules/@openzeppelin/contracts/token/ERC20/utils/SafeERC20.sol\":{\"keccak256\":\"0x37bb49513c49c87c4642a891b13b63571bc87013dde806617aa1efb54605f386\",\"urls\":[\"bzz-raw://b3036b3a83b7c48f96641f2a9002b9f2dcb6a5958dd670894ada21ae8229b3d0\",\"dweb:/ipfs/QmUNfSBdoVtjhETaUJCYcaC7pTMgbhht926tJ2uXJbiVd3\"],\"license\":\"MIT\"},\"node_modules/@openzeppelin/contracts/utils/Address.sol\":{\"keccak256\":\"0xaf28a975a78550e45f65e559a3ad6a5ad43b9b8a37366999abd1b7084eb70721\",\"urls\":[\"bzz-raw://b7bd24e224f67f65bfadf85dc2929fa965456bb2415478bd0125471b5ce35245\",\"dweb:/ipfs/QmRaydGr8BTHs1kvaZfsNU69pKzUAGFrvABn1KiRSbE51y\"],\"license\":\"MIT\"},\"node_modules/@openzeppelin/contracts/utils/StorageSlot.sol\":{\"keccak256\":\"0x32ba59b4b7299237c8ba56319110989d7978a039faf754793064e967e5894418\",\"urls\":[\"bzz-raw://1ae50c8b562427df610cc4540c9bf104acca7ef8e2dcae567ae7e52272281e9c\",\"dweb:/ipfs/QmTHiadFCSJUPpRjNegc5SahmeU8bAoY8i9Aq6tVscbcKR\"],\"license\":\"MIT\"},\"node_modules/@openzeppelin/contracts/utils/math/Math.sol\":{\"keccak256\":\"0x005ec64c6313f0555d59e278f9a7a5ab2db5bdc72a027f255a37c327af1ec02d\",\"urls\":[\"bzz-raw://4ece9f0b9c8daca08c76b6b5405a6446b6f73b3a15fab7ff56e296cbd4a2c875\",\"dweb:/ipfs/QmQyRpyPRL5SQuAgj6SHmbir3foX65FJjbVTTQrA2EFg6L\"],\"license\":\"MIT\"},\"src/gauge/GaugeFactoryRootstockCollective.sol\":{\"keccak256\":\"0xbcf8f9f1038468632211aa7b936d63a35caa7e54f03793ba44f701b17e489a0d\",\"urls\":[\"bzz-raw://82beb9f7be678d3edb72cd181e198e00ead8c8383c36414ce0e388094272914b\",\"dweb:/ipfs/QmSmMx3RT4gjYRFggbEWAyDie5X4JLyBW3VgpHdRFcAmii\"],\"license\":\"MIT\"},\"src/gauge/GaugeRootstockCollective.sol\":{\"keccak256\":\"0xc938acb7b0a1fe48d81115d9c78554cf52578cfa079b7e2fa61ad6f7d938cfa5\",\"urls\":[\"bzz-raw://b0705939ef67abd05f05cd9c3f7d2d0f82c42048046c9daefc360d0d3335761d\",\"dweb:/ipfs/QmaPRBk5oeoQajXGLpCCq1B2BNRHbToSrD7a7ZbcqnhwKx\"],\"license\":\"MIT\"},\"src/interfaces/IBackersManagerRootstockCollective.sol\":{\"keccak256\":\"0x7eacff4e2d906e1f38636bdc81646f213dc3820724b0bb4f61d2e105272f4087\",\"urls\":[\"bzz-raw://00e4ac507e8377040962f89fb774df725422c400114965eee8c45fcc401a7f87\",\"dweb:/ipfs/QmNsqV2naFxx8s6AG8YVDZqhvnUvXmnDZVhWH1WMsFesf6\"],\"license\":\"MIT\"},\"src/libraries/UtilsLib.sol\":{\"keccak256\":\"0x4660e2e62cb370b17052cd21238722bfe3cdaaf3f69cf4c9b2d87236070d12ac\",\"urls\":[\"bzz-raw://e8759237b67bb6e641c7a92eb0d94300770e32c25c2c5bf387bea2ea68513753\",\"dweb:/ipfs/QmbkRDUnzyL9QQbwJcFGd6kiERFFgxZgnxqsu14snpCvhp\"],\"license\":\"MIT\"}},\"version\":1}", + "numDeployments": 3, + "receipt": { + "transactionHash": "0x8ee2c6da6acf4d3a1e97e9276aad9dab44b6404231036394aa8fc2cb68a175a5", + "transactionIndex": "0x4", + "blockHash": "0xf18acb9586a151f22eb4a7b664a2358b71d3547d10933e805fd7080d9ac2cfab", + "blockNumber": "0x5845be", + "from": "0xCB8F8130E289946aec9a17b29819716B1E9e4998", + "to": null, + "cumulativeGasUsed": "0x447508", + "gasUsed": "0x7cfce", + "contractAddress": "0xa92a5673613361fAc3f93bB90B77744038751a5f", + "logs": [], + "status": "0x1", + "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "type": "0x0", + "effectiveGasPrice": "0x3ef1480" + }, + "solcInputHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "storageLayout": { + "storage": [], + "types": {} + }, + "transactionHash": "0x8ee2c6da6acf4d3a1e97e9276aad9dab44b6404231036394aa8fc2cb68a175a5", + "userdoc": { + "version": 1, + "kind": "user", + "methods": { + "beacon()": { + "notice": "address of beacon contract who stores gauge implementation address which is where gauge proxies will delegate all function calls" + }, + "constructor": { + "notice": "constructor" + }, + "rewardToken()": { + "notice": "address of the token rewarded to builder and voters" + } + } + } +} \ No newline at end of file diff --git a/deployments/testnet_qa/GovernanceManagerRootstockCollective.json b/deployments/testnet_qa/GovernanceManagerRootstockCollective.json new file mode 100644 index 00000000..3ff14b5d --- /dev/null +++ b/deployments/testnet_qa/GovernanceManagerRootstockCollective.json @@ -0,0 +1,845 @@ +{ + "abi": [ + { + "type": "constructor", + "inputs": [], + "stateMutability": "nonpayable" + }, + { + "type": "function", + "name": "UPGRADE_INTERFACE_VERSION", + "inputs": [], + "outputs": [ + { + "name": "", + "type": "string", + "internalType": "string" + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "executeChange", + "inputs": [ + { + "name": "changeContract_", + "type": "address", + "internalType": "contract IChangeContractRootstockCollective" + } + ], + "outputs": [], + "stateMutability": "nonpayable" + }, + { + "type": "function", + "name": "foundationTreasury", + "inputs": [], + "outputs": [ + { + "name": "", + "type": "address", + "internalType": "address" + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "governor", + "inputs": [], + "outputs": [ + { + "name": "", + "type": "address", + "internalType": "address" + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "initialize", + "inputs": [ + { + "name": "governor_", + "type": "address", + "internalType": "address" + }, + { + "name": "foundationTreasury_", + "type": "address", + "internalType": "address" + }, + { + "name": "kycApprover_", + "type": "address", + "internalType": "address" + }, + { + "name": "upgrader_", + "type": "address", + "internalType": "address" + } + ], + "outputs": [], + "stateMutability": "nonpayable" + }, + { + "type": "function", + "name": "isAuthorizedChanger", + "inputs": [ + { + "name": "account_", + "type": "address", + "internalType": "address" + } + ], + "outputs": [ + { + "name": "", + "type": "bool", + "internalType": "bool" + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "kycApprover", + "inputs": [], + "outputs": [ + { + "name": "", + "type": "address", + "internalType": "address" + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "proxiableUUID", + "inputs": [], + "outputs": [ + { + "name": "", + "type": "bytes32", + "internalType": "bytes32" + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "updateFoundationTreasury", + "inputs": [ + { + "name": "foundationTreasury_", + "type": "address", + "internalType": "address" + } + ], + "outputs": [], + "stateMutability": "nonpayable" + }, + { + "type": "function", + "name": "updateGovernor", + "inputs": [ + { + "name": "governor_", + "type": "address", + "internalType": "address" + } + ], + "outputs": [], + "stateMutability": "nonpayable" + }, + { + "type": "function", + "name": "updateKYCApprover", + "inputs": [ + { + "name": "kycApprover_", + "type": "address", + "internalType": "address" + } + ], + "outputs": [], + "stateMutability": "nonpayable" + }, + { + "type": "function", + "name": "updateUpgrader", + "inputs": [ + { + "name": "upgrader_", + "type": "address", + "internalType": "address" + } + ], + "outputs": [], + "stateMutability": "nonpayable" + }, + { + "type": "function", + "name": "upgradeToAndCall", + "inputs": [ + { + "name": "newImplementation", + "type": "address", + "internalType": "address" + }, + { + "name": "data", + "type": "bytes", + "internalType": "bytes" + } + ], + "outputs": [], + "stateMutability": "payable" + }, + { + "type": "function", + "name": "upgrader", + "inputs": [], + "outputs": [ + { + "name": "", + "type": "address", + "internalType": "address" + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "validateAuthorizedChanger", + "inputs": [ + { + "name": "account_", + "type": "address", + "internalType": "address" + } + ], + "outputs": [], + "stateMutability": "view" + }, + { + "type": "function", + "name": "validateAuthorizedUpgrader", + "inputs": [ + { + "name": "account_", + "type": "address", + "internalType": "address" + } + ], + "outputs": [], + "stateMutability": "view" + }, + { + "type": "function", + "name": "validateFoundationTreasury", + "inputs": [ + { + "name": "account_", + "type": "address", + "internalType": "address" + } + ], + "outputs": [], + "stateMutability": "view" + }, + { + "type": "function", + "name": "validateGovernor", + "inputs": [ + { + "name": "account_", + "type": "address", + "internalType": "address" + } + ], + "outputs": [], + "stateMutability": "view" + }, + { + "type": "function", + "name": "validateKycApprover", + "inputs": [ + { + "name": "account_", + "type": "address", + "internalType": "address" + } + ], + "outputs": [], + "stateMutability": "view" + }, + { + "type": "event", + "name": "ChangeExecuted", + "inputs": [ + { + "name": "changeContract_", + "type": "address", + "indexed": false, + "internalType": "contract IChangeContractRootstockCollective" + }, + { + "name": "executor_", + "type": "address", + "indexed": false, + "internalType": "address" + } + ], + "anonymous": false + }, + { + "type": "event", + "name": "FoundationTreasuryUpdated", + "inputs": [ + { + "name": "foundationTreasury_", + "type": "address", + "indexed": false, + "internalType": "address" + }, + { + "name": "updatedBy_", + "type": "address", + "indexed": false, + "internalType": "address" + } + ], + "anonymous": false + }, + { + "type": "event", + "name": "GovernorUpdated", + "inputs": [ + { + "name": "governor_", + "type": "address", + "indexed": false, + "internalType": "address" + }, + { + "name": "updatedBy_", + "type": "address", + "indexed": false, + "internalType": "address" + } + ], + "anonymous": false + }, + { + "type": "event", + "name": "Initialized", + "inputs": [ + { + "name": "version", + "type": "uint64", + "indexed": false, + "internalType": "uint64" + } + ], + "anonymous": false + }, + { + "type": "event", + "name": "KycApproverUpdated", + "inputs": [ + { + "name": "kycApprover_", + "type": "address", + "indexed": false, + "internalType": "address" + }, + { + "name": "updatedBy_", + "type": "address", + "indexed": false, + "internalType": "address" + } + ], + "anonymous": false + }, + { + "type": "event", + "name": "Upgraded", + "inputs": [ + { + "name": "implementation", + "type": "address", + "indexed": true, + "internalType": "address" + } + ], + "anonymous": false + }, + { + "type": "event", + "name": "UpgraderUpdated", + "inputs": [ + { + "name": "upgrader_", + "type": "address", + "indexed": false, + "internalType": "address" + }, + { + "name": "updatedBy_", + "type": "address", + "indexed": false, + "internalType": "address" + } + ], + "anonymous": false + }, + { + "type": "error", + "name": "AddressEmptyCode", + "inputs": [ + { + "name": "target", + "type": "address", + "internalType": "address" + } + ] + }, + { + "type": "error", + "name": "ERC1967InvalidImplementation", + "inputs": [ + { + "name": "implementation", + "type": "address", + "internalType": "address" + } + ] + }, + { + "type": "error", + "name": "ERC1967NonPayable", + "inputs": [] + }, + { + "type": "error", + "name": "FailedInnerCall", + "inputs": [] + }, + { + "type": "error", + "name": "InvalidAddress", + "inputs": [ + { + "name": "account_", + "type": "address", + "internalType": "address" + } + ] + }, + { + "type": "error", + "name": "InvalidInitialization", + "inputs": [] + }, + { + "type": "error", + "name": "NotAuthorizedChanger", + "inputs": [] + }, + { + "type": "error", + "name": "NotAuthorizedUpgrader", + "inputs": [] + }, + { + "type": "error", + "name": "NotFoundationTreasury", + "inputs": [] + }, + { + "type": "error", + "name": "NotGovernor", + "inputs": [] + }, + { + "type": "error", + "name": "NotInitializing", + "inputs": [] + }, + { + "type": "error", + "name": "NotKycApprover", + "inputs": [] + }, + { + "type": "error", + "name": "NotUpgrader", + "inputs": [] + }, + { + "type": "error", + "name": "UUPSUnauthorizedCallContext", + "inputs": [] + }, + { + "type": "error", + "name": "UUPSUnsupportedProxiableUUID", + "inputs": [ + { + "name": "slot", + "type": "bytes32", + "internalType": "bytes32" + } + ] + } + ], + "address": "0x97d73578C78CdB9aeb82fB658cBdA6c5a28D7939", + "args": [], + "bytecode": "0x60a06040523060805234801561001457600080fd5b5061001d610022565b6100d4565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805468010000000000000000900460ff16156100725760405163f92ee8a960e01b815260040160405180910390fd5b80546001600160401b03908116146100d15780546001600160401b0319166001600160401b0390811782556040519081527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b50565b6080516115d46100fd60003960008181610c4701528181610c700152610e9401526115d46000f3fe6080604052600436106101425760003560e01c80637e185f57116100c0578063ce7ee5ac11610074578063e053dd6111610059578063e053dd61146103e3578063eb6f7abf14610403578063f8c8765e1461042357600080fd5b8063ce7ee5ac14610386578063d994d6d5146103b357600080fd5b8063ad3cb1cc116100a5578063ad3cb1cc146102e3578063af26974514610339578063b887e63e1461036657600080fd5b80637e185f57146102a35780638c777e82146102c357600080fd5b80633f80fbf7116101175780634f1ef286116100fc5780634f1ef2861461024d57806352d1902d1461026057806362f384ad1461028357600080fd5b80633f80fbf71461020d578063445ac6331461022d57600080fd5b806212851a14610147578062c4e39c146101695780630c340a24146101c057806312811d94146101ed575b600080fd5b34801561015357600080fd5b50610167610162366004611393565b610443565b005b34801561017557600080fd5b506003546101969073ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020015b60405180910390f35b3480156101cc57600080fd5b506000546101969073ffffffffffffffffffffffffffffffffffffffff1681565b3480156101f957600080fd5b50610167610208366004611393565b610458565b34801561021957600080fd5b50610167610228366004611393565b6104ac565b34801561023957600080fd5b50610167610248366004611393565b6104be565b61016761025b3660046113df565b610512565b34801561026c57600080fd5b50610275610531565b6040519081526020016101b7565b34801561028f57600080fd5b5061016761029e366004611393565b610560565b3480156102af57600080fd5b506101676102be366004611393565b610572565b3480156102cf57600080fd5b506101676102de366004611393565b6105b1565b3480156102ef57600080fd5b5061032c6040518060400160405280600581526020017f352e302e3000000000000000000000000000000000000000000000000000000081525081565b6040516101b791906114e5565b34801561034557600080fd5b506004546101969073ffffffffffffffffffffffffffffffffffffffff1681565b34801561037257600080fd5b50610167610381366004611393565b610722565b34801561039257600080fd5b506002546101969073ffffffffffffffffffffffffffffffffffffffff1681565b3480156103bf57600080fd5b506103d36103ce366004611393565b61077c565b60405190151581526020016101b7565b3480156103ef57600080fd5b506101676103fe366004611393565b6107c8565b34801561040f57600080fd5b5061016761041e366004611393565b61081c565b34801561042f57600080fd5b5061016761043e366004611536565b6108c0565b61044c33610572565b61045581610a66565b50565b60005473ffffffffffffffffffffffffffffffffffffffff828116911614610455576040517fee3675d400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6104b533610572565b61045581610b51565b60035473ffffffffffffffffffffffffffffffffffffffff828116911614610455576040517fc01ef51700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61051a610c2f565b61052382610d35565b61052d8282610d3e565b5050565b600061053b610e7c565b507f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc90565b61056933610572565b61045581610eeb565b61057b8161077c565b610455576040517f7746c6d400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60005473ffffffffffffffffffffffffffffffffffffffff163314610602576040517fee3675d400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600180547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff83161790558073ffffffffffffffffffffffffffffffffffffffff1663614619546040518163ffffffff1660e01b8152600401600060405180830381600087803b15801561068a57600080fd5b505af115801561069e573d6000803e3d6000fd5b5050600180547fffffffffffffffffffffffff0000000000000000000000000000000000000000169055506106d09050565b6040805173ffffffffffffffffffffffffffffffffffffffff831681523360208201527f2a8cd1b8f6553d34945708e311b2f74dfcd2b8cc712d12c6fcea24a1ccb4c43991015b60405180910390a150565b60045473ffffffffffffffffffffffffffffffffffffffff163314610773576040517fa417450200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61045581610fc9565b60015460009073ffffffffffffffffffffffffffffffffffffffff838116911614806107c2575060005473ffffffffffffffffffffffffffffffffffffffff8381169116145b92915050565b60025473ffffffffffffffffffffffffffffffffffffffff828116911614610455576040517f2887a65400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60015473ffffffffffffffffffffffffffffffffffffffff828116911614801590610862575060005473ffffffffffffffffffffffffffffffffffffffff828116911614155b8015610889575060045473ffffffffffffffffffffffffffffffffffffffff828116911614155b15610455576040517fe5f11cf600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805468010000000000000000810460ff16159067ffffffffffffffff1660008115801561090b5750825b905060008267ffffffffffffffff1660011480156109285750303b155b905081158015610936575080155b1561096d576040517ff92ee8a900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b84547fffffffffffffffffffffffffffffffffffffffffffffffff000000000000000016600117855583156109ce5784547fffffffffffffffffffffffffffffffffffffffffffffff00ffffffffffffffff16680100000000000000001785555b6109d6611041565b6109df89610eeb565b6109e888610b51565b6109f187610a66565b6109fa86610fc9565b8315610a5b5784547fffffffffffffffffffffffffffffffffffffffffffffff00ffffffffffffffff168555604051600181527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b505050505050505050565b8073ffffffffffffffffffffffffffffffffffffffff8116610ad1576040517f8e4c8aa600000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff821660048201526024015b60405180910390fd5b600380547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff8416908117909155604080519182523360208301527f24d9d91bc040e466fc78b3bb1f93bb81e7410b9bbed45d92b668b52a2ff4c1a991015b60405180910390a15050565b8073ffffffffffffffffffffffffffffffffffffffff8116610bb7576040517f8e4c8aa600000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff82166004820152602401610ac8565b600280547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff8416908117909155604080519182523360208301527fc6681cfb842ccb239555647a438f9ec49bcd12dc4f4d0c5544d3973528b63a459101610b45565b3073ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000161480610cfc57507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16610ce37f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5473ffffffffffffffffffffffffffffffffffffffff1690565b73ffffffffffffffffffffffffffffffffffffffff1614155b15610d33576040517fe07c8dba00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b565b6104553361081c565b8173ffffffffffffffffffffffffffffffffffffffff166352d1902d6040518163ffffffff1660e01b8152600401602060405180830381865afa925050508015610dc3575060408051601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0168201909252610dc091810190611592565b60015b610e11576040517f4c9c8ce300000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff83166004820152602401610ac8565b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc8114610e6d576040517faa1d49a400000000000000000000000000000000000000000000000000000000815260048101829052602401610ac8565b610e778383611049565b505050565b3073ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001614610d33576040517fe07c8dba00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff8116610f51576040517f8e4c8aa600000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff82166004820152602401610ac8565b600080547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff8416908117909155604080519182523360208301527f5af6a85e864342d4f108c43dd574d98480c91f1de0ac2a9f66d826dee49bd9bb9101610b45565b600480547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff8316908117909155604080519182523360208301527f98a54b72a08b0900e0ef7f964fa2f6c3820c0d5dd3e6fb48809acdacd9e5620e9101610717565b610d336110ac565b61105282611113565b60405173ffffffffffffffffffffffffffffffffffffffff8316907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a28051156110a457610e7782826111e2565b61052d611265565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a005468010000000000000000900460ff16610d33576040517fd7e6bcf800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff163b60000361117c576040517f4c9c8ce300000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff82166004820152602401610ac8565b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc80547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff92909216919091179055565b60606000808473ffffffffffffffffffffffffffffffffffffffff168460405161120c91906115ab565b600060405180830381855af49150503d8060008114611247576040519150601f19603f3d011682016040523d82523d6000602084013e61124c565b606091505b509150915061125c85838361129d565b95945050505050565b3415610d33576040517fb398979f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6060826112b2576112ad8261132f565b611328565b81511580156112d6575073ffffffffffffffffffffffffffffffffffffffff84163b155b15611325576040517f9996b31500000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff85166004820152602401610ac8565b50805b9392505050565b80511561133f5780518082602001fd5b6040517f1425ea4200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff8116811461045557600080fd5b6000602082840312156113a557600080fd5b813561132881611371565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080604083850312156113f257600080fd5b82356113fd81611371565b9150602083013567ffffffffffffffff8082111561141a57600080fd5b818501915085601f83011261142e57600080fd5b813581811115611440576114406113b0565b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0908116603f01168101908382118183101715611486576114866113b0565b8160405282815288602084870101111561149f57600080fd5b8260208601602083013760006020848301015280955050505050509250929050565b60005b838110156114dc5781810151838201526020016114c4565b50506000910152565b60208152600082518060208401526115048160408501602087016114c1565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169190910160400192915050565b6000806000806080858703121561154c57600080fd5b843561155781611371565b9350602085013561156781611371565b9250604085013561157781611371565b9150606085013561158781611371565b939692955090935050565b6000602082840312156115a457600080fd5b5051919050565b600082516115bd8184602087016114c1565b919091019291505056fea164736f6c6343000814000a", + "deployedBytecode": "0x6080604052600436106101425760003560e01c80637e185f57116100c0578063ce7ee5ac11610074578063e053dd6111610059578063e053dd61146103e3578063eb6f7abf14610403578063f8c8765e1461042357600080fd5b8063ce7ee5ac14610386578063d994d6d5146103b357600080fd5b8063ad3cb1cc116100a5578063ad3cb1cc146102e3578063af26974514610339578063b887e63e1461036657600080fd5b80637e185f57146102a35780638c777e82146102c357600080fd5b80633f80fbf7116101175780634f1ef286116100fc5780634f1ef2861461024d57806352d1902d1461026057806362f384ad1461028357600080fd5b80633f80fbf71461020d578063445ac6331461022d57600080fd5b806212851a14610147578062c4e39c146101695780630c340a24146101c057806312811d94146101ed575b600080fd5b34801561015357600080fd5b50610167610162366004611393565b610443565b005b34801561017557600080fd5b506003546101969073ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020015b60405180910390f35b3480156101cc57600080fd5b506000546101969073ffffffffffffffffffffffffffffffffffffffff1681565b3480156101f957600080fd5b50610167610208366004611393565b610458565b34801561021957600080fd5b50610167610228366004611393565b6104ac565b34801561023957600080fd5b50610167610248366004611393565b6104be565b61016761025b3660046113df565b610512565b34801561026c57600080fd5b50610275610531565b6040519081526020016101b7565b34801561028f57600080fd5b5061016761029e366004611393565b610560565b3480156102af57600080fd5b506101676102be366004611393565b610572565b3480156102cf57600080fd5b506101676102de366004611393565b6105b1565b3480156102ef57600080fd5b5061032c6040518060400160405280600581526020017f352e302e3000000000000000000000000000000000000000000000000000000081525081565b6040516101b791906114e5565b34801561034557600080fd5b506004546101969073ffffffffffffffffffffffffffffffffffffffff1681565b34801561037257600080fd5b50610167610381366004611393565b610722565b34801561039257600080fd5b506002546101969073ffffffffffffffffffffffffffffffffffffffff1681565b3480156103bf57600080fd5b506103d36103ce366004611393565b61077c565b60405190151581526020016101b7565b3480156103ef57600080fd5b506101676103fe366004611393565b6107c8565b34801561040f57600080fd5b5061016761041e366004611393565b61081c565b34801561042f57600080fd5b5061016761043e366004611536565b6108c0565b61044c33610572565b61045581610a66565b50565b60005473ffffffffffffffffffffffffffffffffffffffff828116911614610455576040517fee3675d400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6104b533610572565b61045581610b51565b60035473ffffffffffffffffffffffffffffffffffffffff828116911614610455576040517fc01ef51700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61051a610c2f565b61052382610d35565b61052d8282610d3e565b5050565b600061053b610e7c565b507f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc90565b61056933610572565b61045581610eeb565b61057b8161077c565b610455576040517f7746c6d400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60005473ffffffffffffffffffffffffffffffffffffffff163314610602576040517fee3675d400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600180547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff83161790558073ffffffffffffffffffffffffffffffffffffffff1663614619546040518163ffffffff1660e01b8152600401600060405180830381600087803b15801561068a57600080fd5b505af115801561069e573d6000803e3d6000fd5b5050600180547fffffffffffffffffffffffff0000000000000000000000000000000000000000169055506106d09050565b6040805173ffffffffffffffffffffffffffffffffffffffff831681523360208201527f2a8cd1b8f6553d34945708e311b2f74dfcd2b8cc712d12c6fcea24a1ccb4c43991015b60405180910390a150565b60045473ffffffffffffffffffffffffffffffffffffffff163314610773576040517fa417450200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61045581610fc9565b60015460009073ffffffffffffffffffffffffffffffffffffffff838116911614806107c2575060005473ffffffffffffffffffffffffffffffffffffffff8381169116145b92915050565b60025473ffffffffffffffffffffffffffffffffffffffff828116911614610455576040517f2887a65400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60015473ffffffffffffffffffffffffffffffffffffffff828116911614801590610862575060005473ffffffffffffffffffffffffffffffffffffffff828116911614155b8015610889575060045473ffffffffffffffffffffffffffffffffffffffff828116911614155b15610455576040517fe5f11cf600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805468010000000000000000810460ff16159067ffffffffffffffff1660008115801561090b5750825b905060008267ffffffffffffffff1660011480156109285750303b155b905081158015610936575080155b1561096d576040517ff92ee8a900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b84547fffffffffffffffffffffffffffffffffffffffffffffffff000000000000000016600117855583156109ce5784547fffffffffffffffffffffffffffffffffffffffffffffff00ffffffffffffffff16680100000000000000001785555b6109d6611041565b6109df89610eeb565b6109e888610b51565b6109f187610a66565b6109fa86610fc9565b8315610a5b5784547fffffffffffffffffffffffffffffffffffffffffffffff00ffffffffffffffff168555604051600181527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b505050505050505050565b8073ffffffffffffffffffffffffffffffffffffffff8116610ad1576040517f8e4c8aa600000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff821660048201526024015b60405180910390fd5b600380547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff8416908117909155604080519182523360208301527f24d9d91bc040e466fc78b3bb1f93bb81e7410b9bbed45d92b668b52a2ff4c1a991015b60405180910390a15050565b8073ffffffffffffffffffffffffffffffffffffffff8116610bb7576040517f8e4c8aa600000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff82166004820152602401610ac8565b600280547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff8416908117909155604080519182523360208301527fc6681cfb842ccb239555647a438f9ec49bcd12dc4f4d0c5544d3973528b63a459101610b45565b3073ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000161480610cfc57507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16610ce37f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5473ffffffffffffffffffffffffffffffffffffffff1690565b73ffffffffffffffffffffffffffffffffffffffff1614155b15610d33576040517fe07c8dba00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b565b6104553361081c565b8173ffffffffffffffffffffffffffffffffffffffff166352d1902d6040518163ffffffff1660e01b8152600401602060405180830381865afa925050508015610dc3575060408051601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0168201909252610dc091810190611592565b60015b610e11576040517f4c9c8ce300000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff83166004820152602401610ac8565b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc8114610e6d576040517faa1d49a400000000000000000000000000000000000000000000000000000000815260048101829052602401610ac8565b610e778383611049565b505050565b3073ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001614610d33576040517fe07c8dba00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff8116610f51576040517f8e4c8aa600000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff82166004820152602401610ac8565b600080547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff8416908117909155604080519182523360208301527f5af6a85e864342d4f108c43dd574d98480c91f1de0ac2a9f66d826dee49bd9bb9101610b45565b600480547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff8316908117909155604080519182523360208301527f98a54b72a08b0900e0ef7f964fa2f6c3820c0d5dd3e6fb48809acdacd9e5620e9101610717565b610d336110ac565b61105282611113565b60405173ffffffffffffffffffffffffffffffffffffffff8316907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a28051156110a457610e7782826111e2565b61052d611265565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a005468010000000000000000900460ff16610d33576040517fd7e6bcf800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff163b60000361117c576040517f4c9c8ce300000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff82166004820152602401610ac8565b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc80547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff92909216919091179055565b60606000808473ffffffffffffffffffffffffffffffffffffffff168460405161120c91906115ab565b600060405180830381855af49150503d8060008114611247576040519150601f19603f3d011682016040523d82523d6000602084013e61124c565b606091505b509150915061125c85838361129d565b95945050505050565b3415610d33576040517fb398979f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6060826112b2576112ad8261132f565b611328565b81511580156112d6575073ffffffffffffffffffffffffffffffffffffffff84163b155b15611325576040517f9996b31500000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff85166004820152602401610ac8565b50805b9392505050565b80511561133f5780518082602001fd5b6040517f1425ea4200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff8116811461045557600080fd5b6000602082840312156113a557600080fd5b813561132881611371565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080604083850312156113f257600080fd5b82356113fd81611371565b9150602083013567ffffffffffffffff8082111561141a57600080fd5b818501915085601f83011261142e57600080fd5b813581811115611440576114406113b0565b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0908116603f01168101908382118183101715611486576114866113b0565b8160405282815288602084870101111561149f57600080fd5b8260208601602083013760006020848301015280955050505050509250929050565b60005b838110156114dc5781810151838201526020016114c4565b50506000910152565b60208152600082518060208401526115048160408501602087016114c1565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169190910160400192915050565b6000806000806080858703121561154c57600080fd5b843561155781611371565b9350602085013561156781611371565b9250604085013561157781611371565b9150606085013561158781611371565b939692955090935050565b6000602082840312156115a457600080fd5b5051919050565b600082516115bd8184602087016114c1565b919091019291505056fea164736f6c6343000814000a", + "devdoc": { + "version": 1, + "kind": "dev", + "details": "Complete documentation is provided in the IGovernanceManagerRootstockCollective interfaceThis contract is upgradeable via the UUPS proxy pattern.", + "methods": { + "constructor": {}, + "executeChange(address)": { + "details": "reverts if is not called by the Governor", + "params": { + "changeContract_": "Address of the contract that will execute the changes" + } + }, + "initialize(address,address,address,address)": { + "details": "Used instead of a constructor for upgradeable contracts.", + "params": { + "foundationTreasury_": "The initial foundation treasury address.", + "governor_": "The initial governor address.", + "kycApprover_": "account responsible of approving Builder's Know you Costumer policies and Legal requirements", + "upgrader_": "The initial upgrader address." + } + }, + "isAuthorizedChanger(address)": { + "details": "Reverts with `NotAuthorizedChanger` if the account is not the authorized changer.", + "params": { + "account_": "The address to be validated as the changer." + } + }, + "proxiableUUID()": { + "details": "Implementation of the ERC1822 {proxiableUUID} function. This returns the storage slot used by the implementation. It is used to validate the implementation's compatibility when performing an upgrade. IMPORTANT: A proxy pointing at a proxiable contract should not be considered proxiable itself, because this risks bricking a proxy that upgrades to it, by delegating to itself until out of gas. Thus it is critical that this function revert if invoked through a proxy. This is guaranteed by the `notDelegated` modifier." + }, + "updateFoundationTreasury(address)": { + "details": "Reverts if caller is not a valid changer.Reverts if the new address is zero.", + "params": { + "foundationTreasury_": "The new foundation treasury address." + } + }, + "updateGovernor(address)": { + "details": "Reverts if caller is not a valid changer.Reverts if the new address is zero.", + "params": { + "governor_": "The new governor address." + } + }, + "updateKYCApprover(address)": { + "details": "Reverts if caller is not a valid changer.Reverts if the new address is zero.", + "params": { + "kycApprover_": "The new address to be set as the KYC approver." + } + }, + "updateUpgrader(address)": { + "details": "Updates the account authorized to upgrade the contractsReverts if caller is the upgrader.allow update to zero address to disable the upgrader role", + "params": { + "upgrader_": "The new upgrader address." + } + }, + "upgradeToAndCall(address,bytes)": { + "details": "Upgrade the implementation of the proxy to `newImplementation`, and subsequently execute the function call encoded in `data`. Calls {_authorizeUpgrade}. Emits an {Upgraded} event." + }, + "validateAuthorizedChanger(address)": { + "details": "Reverts with `NotAuthorizedChanger` if the account is not the authorized changer.", + "params": { + "account_": "The address to be validated as the changer." + } + }, + "validateAuthorizedUpgrader(address)": { + "details": "Reverts with `NotAuthorizedUpgrader` if the account is not the upgrader.", + "params": { + "account_": "The address to be validated." + } + }, + "validateFoundationTreasury(address)": { + "details": "Reverts with `NotFoundationTreasury` if the caller is not the foundation treasury.", + "params": { + "account_": "The address to be validated as the foundation treasury." + } + }, + "validateGovernor(address)": { + "details": "Reverts with `NotGovernor` if the account is not the governor.", + "params": { + "account_": "The address to be validated as the governor." + } + }, + "validateKycApprover(address)": { + "details": "Reverts with `NotKycApprover` if the account is not the KYC approver.", + "params": { + "account_": "The address to be validated as the KYC approver." + } + } + }, + "events": { + "Initialized(uint64)": { + "details": "Triggered when the contract has been initialized or reinitialized." + }, + "Upgraded(address)": { + "details": "Emitted when the implementation is upgraded." + } + }, + "errors": { + "AddressEmptyCode(address)": [ + { + "details": "There's no code at `target` (it is not a contract)." + } + ], + "ERC1967InvalidImplementation(address)": [ + { + "details": "The `implementation` of the proxy is invalid." + } + ], + "ERC1967NonPayable()": [ + { + "details": "An upgrade function sees `msg.value > 0` that may be lost." + } + ], + "FailedInnerCall()": [ + { + "details": "A call to an address target failed. The target may have reverted." + } + ], + "InvalidAddress(address)": [ + { + "params": { + "account_": "The invalid address provided." + } + } + ], + "InvalidInitialization()": [ + { + "details": "The contract is already initialized." + } + ], + "NotInitializing()": [ + { + "details": "The contract is not initializing." + } + ], + "UUPSUnauthorizedCallContext()": [ + { + "details": "The call is from an unauthorized context." + } + ], + "UUPSUnsupportedProxiableUUID(bytes32)": [ + { + "details": "The storage `slot` is unsupported as a UUID." + } + ] + }, + "title": "GovernanceManagerRootstockCollective" + }, + "metadata": "{\"compiler\":{\"version\":\"0.8.20+commit.a1b79de6\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"target\",\"type\":\"address\"}],\"type\":\"error\",\"name\":\"AddressEmptyCode\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"implementation\",\"type\":\"address\"}],\"type\":\"error\",\"name\":\"ERC1967InvalidImplementation\"},{\"inputs\":[],\"type\":\"error\",\"name\":\"ERC1967NonPayable\"},{\"inputs\":[],\"type\":\"error\",\"name\":\"FailedInnerCall\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account_\",\"type\":\"address\"}],\"type\":\"error\",\"name\":\"InvalidAddress\"},{\"inputs\":[],\"type\":\"error\",\"name\":\"InvalidInitialization\"},{\"inputs\":[],\"type\":\"error\",\"name\":\"NotAuthorizedChanger\"},{\"inputs\":[],\"type\":\"error\",\"name\":\"NotAuthorizedUpgrader\"},{\"inputs\":[],\"type\":\"error\",\"name\":\"NotFoundationTreasury\"},{\"inputs\":[],\"type\":\"error\",\"name\":\"NotGovernor\"},{\"inputs\":[],\"type\":\"error\",\"name\":\"NotInitializing\"},{\"inputs\":[],\"type\":\"error\",\"name\":\"NotKycApprover\"},{\"inputs\":[],\"type\":\"error\",\"name\":\"NotUpgrader\"},{\"inputs\":[],\"type\":\"error\",\"name\":\"UUPSUnauthorizedCallContext\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"slot\",\"type\":\"bytes32\"}],\"type\":\"error\",\"name\":\"UUPSUnsupportedProxiableUUID\"},{\"inputs\":[{\"internalType\":\"contract IChangeContractRootstockCollective\",\"name\":\"changeContract_\",\"type\":\"address\",\"indexed\":false},{\"internalType\":\"address\",\"name\":\"executor_\",\"type\":\"address\",\"indexed\":false}],\"type\":\"event\",\"name\":\"ChangeExecuted\",\"anonymous\":false},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"foundationTreasury_\",\"type\":\"address\",\"indexed\":false},{\"internalType\":\"address\",\"name\":\"updatedBy_\",\"type\":\"address\",\"indexed\":false}],\"type\":\"event\",\"name\":\"FoundationTreasuryUpdated\",\"anonymous\":false},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"governor_\",\"type\":\"address\",\"indexed\":false},{\"internalType\":\"address\",\"name\":\"updatedBy_\",\"type\":\"address\",\"indexed\":false}],\"type\":\"event\",\"name\":\"GovernorUpdated\",\"anonymous\":false},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"version\",\"type\":\"uint64\",\"indexed\":false}],\"type\":\"event\",\"name\":\"Initialized\",\"anonymous\":false},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"kycApprover_\",\"type\":\"address\",\"indexed\":false},{\"internalType\":\"address\",\"name\":\"updatedBy_\",\"type\":\"address\",\"indexed\":false}],\"type\":\"event\",\"name\":\"KycApproverUpdated\",\"anonymous\":false},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"implementation\",\"type\":\"address\",\"indexed\":true}],\"type\":\"event\",\"name\":\"Upgraded\",\"anonymous\":false},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"upgrader_\",\"type\":\"address\",\"indexed\":false},{\"internalType\":\"address\",\"name\":\"updatedBy_\",\"type\":\"address\",\"indexed\":false}],\"type\":\"event\",\"name\":\"UpgraderUpdated\",\"anonymous\":false},{\"inputs\":[],\"stateMutability\":\"view\",\"type\":\"function\",\"name\":\"UPGRADE_INTERFACE_VERSION\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}]},{\"inputs\":[{\"internalType\":\"contract IChangeContractRootstockCollective\",\"name\":\"changeContract_\",\"type\":\"address\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\",\"name\":\"executeChange\"},{\"inputs\":[],\"stateMutability\":\"view\",\"type\":\"function\",\"name\":\"foundationTreasury\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}]},{\"inputs\":[],\"stateMutability\":\"view\",\"type\":\"function\",\"name\":\"governor\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}]},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"governor_\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"foundationTreasury_\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"kycApprover_\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"upgrader_\",\"type\":\"address\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\",\"name\":\"initialize\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account_\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\",\"name\":\"isAuthorizedChanger\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}]},{\"inputs\":[],\"stateMutability\":\"view\",\"type\":\"function\",\"name\":\"kycApprover\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}]},{\"inputs\":[],\"stateMutability\":\"view\",\"type\":\"function\",\"name\":\"proxiableUUID\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}]},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"foundationTreasury_\",\"type\":\"address\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\",\"name\":\"updateFoundationTreasury\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"governor_\",\"type\":\"address\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\",\"name\":\"updateGovernor\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"kycApprover_\",\"type\":\"address\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\",\"name\":\"updateKYCApprover\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"upgrader_\",\"type\":\"address\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\",\"name\":\"updateUpgrader\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newImplementation\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"}],\"stateMutability\":\"payable\",\"type\":\"function\",\"name\":\"upgradeToAndCall\"},{\"inputs\":[],\"stateMutability\":\"view\",\"type\":\"function\",\"name\":\"upgrader\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}]},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account_\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\",\"name\":\"validateAuthorizedChanger\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account_\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\",\"name\":\"validateAuthorizedUpgrader\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account_\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\",\"name\":\"validateFoundationTreasury\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account_\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\",\"name\":\"validateGovernor\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account_\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\",\"name\":\"validateKycApprover\"}],\"devdoc\":{\"kind\":\"dev\",\"methods\":{\"constructor\":{\"custom:oz-upgrades-unsafe-allow\":\"constructor\"},\"executeChange(address)\":{\"details\":\"reverts if is not called by the Governor\",\"params\":{\"changeContract_\":\"Address of the contract that will execute the changes\"}},\"initialize(address,address,address,address)\":{\"details\":\"Used instead of a constructor for upgradeable contracts.\",\"params\":{\"foundationTreasury_\":\"The initial foundation treasury address.\",\"governor_\":\"The initial governor address.\",\"kycApprover_\":\"account responsible of approving Builder's Know you Costumer policies and Legal requirements\",\"upgrader_\":\"The initial upgrader address.\"}},\"isAuthorizedChanger(address)\":{\"details\":\"Reverts with `NotAuthorizedChanger` if the account is not the authorized changer.\",\"params\":{\"account_\":\"The address to be validated as the changer.\"}},\"proxiableUUID()\":{\"details\":\"Implementation of the ERC1822 {proxiableUUID} function. This returns the storage slot used by the implementation. It is used to validate the implementation's compatibility when performing an upgrade. IMPORTANT: A proxy pointing at a proxiable contract should not be considered proxiable itself, because this risks bricking a proxy that upgrades to it, by delegating to itself until out of gas. Thus it is critical that this function revert if invoked through a proxy. This is guaranteed by the `notDelegated` modifier.\"},\"updateFoundationTreasury(address)\":{\"details\":\"Reverts if caller is not a valid changer.Reverts if the new address is zero.\",\"params\":{\"foundationTreasury_\":\"The new foundation treasury address.\"}},\"updateGovernor(address)\":{\"details\":\"Reverts if caller is not a valid changer.Reverts if the new address is zero.\",\"params\":{\"governor_\":\"The new governor address.\"}},\"updateKYCApprover(address)\":{\"details\":\"Reverts if caller is not a valid changer.Reverts if the new address is zero.\",\"params\":{\"kycApprover_\":\"The new address to be set as the KYC approver.\"}},\"updateUpgrader(address)\":{\"details\":\"Updates the account authorized to upgrade the contractsReverts if caller is the upgrader.allow update to zero address to disable the upgrader role\",\"params\":{\"upgrader_\":\"The new upgrader address.\"}},\"upgradeToAndCall(address,bytes)\":{\"custom:oz-upgrades-unsafe-allow-reachable\":\"delegatecall\",\"details\":\"Upgrade the implementation of the proxy to `newImplementation`, and subsequently execute the function call encoded in `data`. Calls {_authorizeUpgrade}. Emits an {Upgraded} event.\"},\"validateAuthorizedChanger(address)\":{\"details\":\"Reverts with `NotAuthorizedChanger` if the account is not the authorized changer.\",\"params\":{\"account_\":\"The address to be validated as the changer.\"}},\"validateAuthorizedUpgrader(address)\":{\"details\":\"Reverts with `NotAuthorizedUpgrader` if the account is not the upgrader.\",\"params\":{\"account_\":\"The address to be validated.\"}},\"validateFoundationTreasury(address)\":{\"details\":\"Reverts with `NotFoundationTreasury` if the caller is not the foundation treasury.\",\"params\":{\"account_\":\"The address to be validated as the foundation treasury.\"}},\"validateGovernor(address)\":{\"details\":\"Reverts with `NotGovernor` if the account is not the governor.\",\"params\":{\"account_\":\"The address to be validated as the governor.\"}},\"validateKycApprover(address)\":{\"details\":\"Reverts with `NotKycApprover` if the account is not the KYC approver.\",\"params\":{\"account_\":\"The address to be validated as the KYC approver.\"}}},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{\"executeChange(address)\":{\"notice\":\"Function to be called to execute the changes in changeContract\"},\"foundationTreasury()\":{\"notice\":\"The address of the foundation treasury.\"},\"governor()\":{\"notice\":\"The address of the governor.\"},\"initialize(address,address,address,address)\":{\"notice\":\"Initializes the contract with the initial governor, foundation treasury, and KYC approver.\"},\"isAuthorizedChanger(address)\":{\"notice\":\"Validates if the given account is authorized as a changer\"},\"kycApprover()\":{\"notice\":\"The address of the KYC approver.\"},\"updateFoundationTreasury(address)\":{\"notice\":\"Updates the foundation treasury address\"},\"updateGovernor(address)\":{\"notice\":\"Updates the governor address\"},\"updateKYCApprover(address)\":{\"notice\":\"Updates the KYC approver address\"},\"upgrader()\":{\"notice\":\"The upgrader address with contract upgradeability permissions\"},\"validateAuthorizedChanger(address)\":{\"notice\":\"Validates if the given account is authorized as a changer\"},\"validateAuthorizedUpgrader(address)\":{\"notice\":\"Validates if the given account is authorized to upgrade the contracts.\"},\"validateFoundationTreasury(address)\":{\"notice\":\"Validates if the given account is the foundation treasury.\"},\"validateGovernor(address)\":{\"notice\":\"Validates if the given account is authorized as the governor.\"},\"validateKycApprover(address)\":{\"notice\":\"Validates if the given account is authorized as the KYC approver.\"}},\"version\":1}},\"settings\":{\"remappings\":[\"@openzeppelin/contracts-upgradeable/=node_modules/@openzeppelin/contracts-upgradeable/\",\"@openzeppelin/contracts/=node_modules/@openzeppelin/contracts/\",\"eth-gas-reporter/=node_modules/eth-gas-reporter/\",\"forge-std/=node_modules/forge-std/\",\"hardhat/=node_modules/hardhat/\"],\"optimizer\":{\"enabled\":true,\"runs\":10000},\"metadata\":{\"bytecodeHash\":\"none\"},\"compilationTarget\":{\"src/governance/GovernanceManagerRootstockCollective.sol\":\"GovernanceManagerRootstockCollective\"},\"evmVersion\":\"london\",\"libraries\":{}},\"sources\":{\"node_modules/@openzeppelin/contracts-upgradeable/proxy/utils/Initializable.sol\":{\"keccak256\":\"0x631188737069917d2f909d29ce62c4d48611d326686ba6683e26b72a23bfac0b\",\"urls\":[\"bzz-raw://7a61054ae84cd6c4d04c0c4450ba1d6de41e27e0a2c4f1bcdf58f796b401c609\",\"dweb:/ipfs/QmUvtdp7X1mRVyC3CsHrtPbgoqWaXHp3S1ZR24tpAQYJWM\"],\"license\":\"MIT\"},\"node_modules/@openzeppelin/contracts-upgradeable/proxy/utils/UUPSUpgradeable.sol\":{\"keccak256\":\"0x3f13b947637c4969c0644cab4ef399cdc4b67f101463b8775c5a43b118558e53\",\"urls\":[\"bzz-raw://c6683e6ade6985d394d32baaef5eea0d8b9ff0b3eca86ae413d6cdde114a9930\",\"dweb:/ipfs/QmdBE8T1BTddZxpdECMsb3KiCFyjNWmxcCddYrWFTXmWPj\"],\"license\":\"MIT\"},\"node_modules/@openzeppelin/contracts/interfaces/draft-IERC1822.sol\":{\"keccak256\":\"0x2a1f9944df2015c081d89cd41ba22ffaf10aa6285969f0dc612b235cc448999c\",\"urls\":[\"bzz-raw://ef381843676aec64421200ee85eaa0b1356a35f28b9fc67e746a6bbb832077d9\",\"dweb:/ipfs/QmY8aorMYA2TeTCnu6ejDjzb4rW4t7TCtW4GZ6LoxTFm7v\"],\"license\":\"MIT\"},\"node_modules/@openzeppelin/contracts/proxy/ERC1967/ERC1967Utils.sol\":{\"keccak256\":\"0x06a78f9b3ee3e6d0eb4e4cd635ba49960bea34cac1db8c0a27c75f2319f1fd65\",\"urls\":[\"bzz-raw://547d21aa17f4f3f1a1a7edf7167beff8dd9496a0348d5588f15cc8a4b29d052a\",\"dweb:/ipfs/QmT16JtRQSWNpLo9W23jr6CzaMuTAcQcjJJcdRd8HLJ6cE\"],\"license\":\"MIT\"},\"node_modules/@openzeppelin/contracts/proxy/beacon/IBeacon.sol\":{\"keccak256\":\"0xc59a78b07b44b2cf2e8ab4175fca91e8eca1eee2df7357b8d2a8833e5ea1f64c\",\"urls\":[\"bzz-raw://5aa4f07e65444784c29cd7bfcc2341b34381e4e5b5da9f0c5bd00d7f430e66fa\",\"dweb:/ipfs/QmWRMh4Q9DpaU9GvsiXmDdoNYMyyece9if7hnfLz7uqzWM\"],\"license\":\"MIT\"},\"node_modules/@openzeppelin/contracts/utils/Address.sol\":{\"keccak256\":\"0xaf28a975a78550e45f65e559a3ad6a5ad43b9b8a37366999abd1b7084eb70721\",\"urls\":[\"bzz-raw://b7bd24e224f67f65bfadf85dc2929fa965456bb2415478bd0125471b5ce35245\",\"dweb:/ipfs/QmRaydGr8BTHs1kvaZfsNU69pKzUAGFrvABn1KiRSbE51y\"],\"license\":\"MIT\"},\"node_modules/@openzeppelin/contracts/utils/StorageSlot.sol\":{\"keccak256\":\"0x32ba59b4b7299237c8ba56319110989d7978a039faf754793064e967e5894418\",\"urls\":[\"bzz-raw://1ae50c8b562427df610cc4540c9bf104acca7ef8e2dcae567ae7e52272281e9c\",\"dweb:/ipfs/QmTHiadFCSJUPpRjNegc5SahmeU8bAoY8i9Aq6tVscbcKR\"],\"license\":\"MIT\"},\"src/governance/GovernanceManagerRootstockCollective.sol\":{\"keccak256\":\"0x3901496b522bdf3a30ab046bbfc6e359d414aec1576500e44703e0769bc25c5c\",\"urls\":[\"bzz-raw://caa207da68cc6a09156a5c9cc7a34743b99dece56deabb1e11e17572b8ca42cc\",\"dweb:/ipfs/QmdCPzHWYu895vrD8azHBncGR8WFrAycqwBHpve9k92EDG\"],\"license\":\"MIT\"},\"src/interfaces/IChangeContractRootstockCollective.sol\":{\"keccak256\":\"0x00fb3eb72286348dd06d581c5044cb045dfd3bd24725d05dd9c4b008567dd496\",\"urls\":[\"bzz-raw://7f4a03e06197ae7d6e478097afbbecf936ce7029ca49909a1fee0b4ba1b5b517\",\"dweb:/ipfs/QmfByMJ1SQAmcYkouS5WM3akMmSKU3MCyACpFmQwuFSYe9\"],\"license\":\"MIT\"},\"src/interfaces/IGovernanceManagerRootstockCollective.sol\":{\"keccak256\":\"0x1416991dd129bb36f43cc0854dfa824b5b85838e5c5018566b6cf78f527747e3\",\"urls\":[\"bzz-raw://8652a18ec39d5527fefb829eca619f4cf4bbec3ee4f6231e8888f1549feedd3d\",\"dweb:/ipfs/Qmczi6GipLy9B9TcDMx5UaZZPFBaMT2k49iYzQuLCFgnfS\"],\"license\":\"MIT\"}},\"version\":1}", + "numDeployments": 3, + "receipt": { + "transactionHash": "0xc35f4ea5ce2c4c8a7f5b20904d0aec93596a5dbea7d1700661811943867f562d", + "transactionIndex": "0x0", + "blockHash": "0xf18acb9586a151f22eb4a7b664a2358b71d3547d10933e805fd7080d9ac2cfab", + "blockNumber": "0x5845be", + "from": "0xCB8F8130E289946aec9a17b29819716B1E9e4998", + "to": null, + "cumulativeGasUsed": "0x1375a4", + "gasUsed": "0x1375a4", + "contractAddress": "0x97d73578C78CdB9aeb82fB658cBdA6c5a28D7939", + "logs": [ + { + "address": "0x97d73578C78CdB9aeb82fB658cBdA6c5a28D7939", + "topics": [ + "0xc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d2" + ], + "data": "0x000000000000000000000000000000000000000000000000ffffffffffffffff", + "blockHash": "0xf18acb9586a151f22eb4a7b664a2358b71d3547d10933e805fd7080d9ac2cfab", + "blockNumber": "0x5845be", + "transactionHash": "0xc35f4ea5ce2c4c8a7f5b20904d0aec93596a5dbea7d1700661811943867f562d", + "transactionIndex": "0x0", + "logIndex": "0x0" + } + ], + "status": "0x1", + "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000080000000000000000000000000000000000000000000000000000000000800000000000000000000000080000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000400000000000000000000000000000000000000000000000000000", + "type": "0x0", + "effectiveGasPrice": "0x3ef1480" + }, + "solcInputHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "storageLayout": { + "storage": [ + { + "astId": 59859, + "contract": "src/governance/GovernanceManagerRootstockCollective.sol:GovernanceManagerRootstockCollective", + "label": "governor", + "offset": 0, + "slot": "0", + "type": "t_address" + }, + { + "astId": 59862, + "contract": "src/governance/GovernanceManagerRootstockCollective.sol:GovernanceManagerRootstockCollective", + "label": "_authorizedChanger", + "offset": 0, + "slot": "1", + "type": "t_address" + }, + { + "astId": 59865, + "contract": "src/governance/GovernanceManagerRootstockCollective.sol:GovernanceManagerRootstockCollective", + "label": "foundationTreasury", + "offset": 0, + "slot": "2", + "type": "t_address" + }, + { + "astId": 59868, + "contract": "src/governance/GovernanceManagerRootstockCollective.sol:GovernanceManagerRootstockCollective", + "label": "kycApprover", + "offset": 0, + "slot": "3", + "type": "t_address" + }, + { + "astId": 59871, + "contract": "src/governance/GovernanceManagerRootstockCollective.sol:GovernanceManagerRootstockCollective", + "label": "upgrader", + "offset": 0, + "slot": "4", + "type": "t_address" + }, + { + "astId": 60188, + "contract": "src/governance/GovernanceManagerRootstockCollective.sol:GovernanceManagerRootstockCollective", + "label": "__gap", + "offset": 0, + "slot": "5", + "type": "t_array(t_uint256)50_storage" + } + ], + "types": { + "t_address": { + "encoding": "inplace", + "label": "address", + "numberOfBytes": "20" + }, + "t_array(t_uint256)50_storage": { + "encoding": "inplace", + "label": "uint256[50]", + "numberOfBytes": "1600", + "base": "t_uint256" + }, + "t_uint256": { + "encoding": "inplace", + "label": "uint256", + "numberOfBytes": "32" + } + } + }, + "transactionHash": "0xc35f4ea5ce2c4c8a7f5b20904d0aec93596a5dbea7d1700661811943867f562d", + "userdoc": { + "version": 1, + "kind": "user", + "methods": { + "executeChange(address)": { + "notice": "Function to be called to execute the changes in changeContract" + }, + "foundationTreasury()": { + "notice": "The address of the foundation treasury." + }, + "governor()": { + "notice": "The address of the governor." + }, + "initialize(address,address,address,address)": { + "notice": "Initializes the contract with the initial governor, foundation treasury, and KYC approver." + }, + "isAuthorizedChanger(address)": { + "notice": "Validates if the given account is authorized as a changer" + }, + "kycApprover()": { + "notice": "The address of the KYC approver." + }, + "updateFoundationTreasury(address)": { + "notice": "Updates the foundation treasury address" + }, + "updateGovernor(address)": { + "notice": "Updates the governor address" + }, + "updateKYCApprover(address)": { + "notice": "Updates the KYC approver address" + }, + "upgrader()": { + "notice": "The upgrader address with contract upgradeability permissions" + }, + "validateAuthorizedChanger(address)": { + "notice": "Validates if the given account is authorized as a changer" + }, + "validateAuthorizedUpgrader(address)": { + "notice": "Validates if the given account is authorized to upgrade the contracts." + }, + "validateFoundationTreasury(address)": { + "notice": "Validates if the given account is the foundation treasury." + }, + "validateGovernor(address)": { + "notice": "Validates if the given account is authorized as the governor." + }, + "validateKycApprover(address)": { + "notice": "Validates if the given account is authorized as the KYC approver." + } + }, + "errors": { + "InvalidAddress(address)": [ + { + "notice": "Thrown when an invalid address is provided." + } + ], + "NotAuthorizedChanger()": [ + { + "notice": "Thrown when the caller is not authorized as a changer." + } + ], + "NotAuthorizedUpgrader()": [ + { + "notice": "Thrown when the caller is not authorized to upgrade the contracts" + } + ], + "NotFoundationTreasury()": [ + { + "notice": "Thrown when the caller is not the foundation treasury." + } + ], + "NotGovernor()": [ + { + "notice": "Thrown when the caller is not the governor." + } + ], + "NotKycApprover()": [ + { + "notice": "Thrown when the caller is not the KYC approver." + } + ], + "NotUpgrader()": [ + { + "notice": "Thrown when the caller is not the upgrader." + } + ] + }, + "notice": "This contract manages governance addresses.It also allows the governor to execute contracts that implement the IChangeContractRootstockCollective interface." + } +} \ No newline at end of file diff --git a/deployments/testnet_qa/GovernanceManagerRootstockCollectiveProxy.json b/deployments/testnet_qa/GovernanceManagerRootstockCollectiveProxy.json new file mode 100644 index 00000000..a94a3bcf --- /dev/null +++ b/deployments/testnet_qa/GovernanceManagerRootstockCollectiveProxy.json @@ -0,0 +1,215 @@ +{ + "abi": [ + { + "type": "constructor", + "inputs": [ + { + "name": "implementation", + "type": "address", + "internalType": "address" + }, + { + "name": "_data", + "type": "bytes", + "internalType": "bytes" + } + ], + "stateMutability": "payable" + }, + { + "type": "fallback", + "stateMutability": "payable" + }, + { + "type": "event", + "name": "Upgraded", + "inputs": [ + { + "name": "implementation", + "type": "address", + "indexed": true, + "internalType": "address" + } + ], + "anonymous": false + }, + { + "type": "error", + "name": "AddressEmptyCode", + "inputs": [ + { + "name": "target", + "type": "address", + "internalType": "address" + } + ] + }, + { + "type": "error", + "name": "ERC1967InvalidImplementation", + "inputs": [ + { + "name": "implementation", + "type": "address", + "internalType": "address" + } + ] + }, + { + "type": "error", + "name": "ERC1967NonPayable", + "inputs": [] + }, + { + "type": "error", + "name": "FailedInnerCall", + "inputs": [] + } + ], + "address": "0xa49Af345c57A303C75183d219232Be7b2d027157", + "args": [ + "0x97d73578C78CdB9aeb82fB658cBdA6c5a28D7939", + "0xf8c8765e0000000000000000000000005e3ede6781f811cb3fe03f9a687bd7fff8dc19e700000000000000000000000021fd219c937f7501d867ce660c3bf605c7fa629e0000000000000000000000005e3ede6781f811cb3fe03f9a687bd7fff8dc19e70000000000000000000000005e3ede6781f811cb3fe03f9a687bd7fff8dc19e7" + ], + "bytecode": "0x60806040526040516103ee3803806103ee83398101604081905261002291610268565b61002c8282610033565b5050610352565b61003c82610092565b6040516001600160a01b038316907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a280511561008657610081828261010e565b505050565b61008e610185565b5050565b806001600160a01b03163b6000036100cd57604051634c9c8ce360e01b81526001600160a01b03821660048201526024015b60405180910390fd5b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc80546001600160a01b0319166001600160a01b0392909216919091179055565b6060600080846001600160a01b03168460405161012b9190610336565b600060405180830381855af49150503d8060008114610166576040519150601f19603f3d011682016040523d82523d6000602084013e61016b565b606091505b50909250905061017c8583836101a6565b95945050505050565b34156101a45760405163b398979f60e01b815260040160405180910390fd5b565b6060826101bb576101b682610205565b6101fe565b81511580156101d257506001600160a01b0384163b155b156101fb57604051639996b31560e01b81526001600160a01b03851660048201526024016100c4565b50805b9392505050565b8051156102155780518082602001fd5b604051630a12f52160e11b815260040160405180910390fd5b634e487b7160e01b600052604160045260246000fd5b60005b8381101561025f578181015183820152602001610247565b50506000910152565b6000806040838503121561027b57600080fd5b82516001600160a01b038116811461029257600080fd5b60208401519092506001600160401b03808211156102af57600080fd5b818501915085601f8301126102c357600080fd5b8151818111156102d5576102d561022e565b604051601f8201601f19908116603f011681019083821181831017156102fd576102fd61022e565b8160405282815288602084870101111561031657600080fd5b610327836020830160208801610244565b80955050505050509250929050565b60008251610348818460208701610244565b9190910192915050565b608e806103606000396000f3fe6080604052600a600c565b005b60186014601a565b605e565b565b600060597f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5473ffffffffffffffffffffffffffffffffffffffff1690565b905090565b3660008037600080366000845af43d6000803e808015607c573d6000f35b3d6000fdfea164736f6c6343000814000a", + "deployedBytecode": "0x6080604052600a600c565b005b60186014601a565b605e565b565b600060597f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5473ffffffffffffffffffffffffffffffffffffffff1690565b905090565b3660008037600080366000845af43d6000803e808015607c573d6000f35b3d6000fdfea164736f6c6343000814000a", + "devdoc": { + "version": 1, + "kind": "dev", + "details": "This contract implements an upgradeable proxy. It is upgradeable because calls are delegated to an implementation address that can be changed. This address is stored in storage in the location specified by https://eips.ethereum.org/EIPS/eip-1967[EIP1967], so that it doesn't conflict with the storage layout of the implementation behind the proxy.", + "methods": { + "constructor": { + "details": "Initializes the upgradeable proxy with an initial implementation specified by `implementation`. If `_data` is nonempty, it's used as data in a delegate call to `implementation`. This will typically be an encoded function call, and allows initializing the storage of the proxy like a Solidity constructor. Requirements: - If `data` is empty, `msg.value` must be zero." + } + }, + "events": { + "Upgraded(address)": { + "details": "Emitted when the implementation is upgraded." + } + }, + "errors": { + "AddressEmptyCode(address)": [ + { + "details": "There's no code at `target` (it is not a contract)." + } + ], + "ERC1967InvalidImplementation(address)": [ + { + "details": "The `implementation` of the proxy is invalid." + } + ], + "ERC1967NonPayable()": [ + { + "details": "An upgrade function sees `msg.value > 0` that may be lost." + } + ], + "FailedInnerCall()": [ + { + "details": "A call to an address target failed. The target may have reverted." + } + ] + } + }, + "metadata": "{\"compiler\":{\"version\":\"0.8.20+commit.a1b79de6\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"address\",\"name\":\"implementation\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"_data\",\"type\":\"bytes\"}],\"stateMutability\":\"payable\",\"type\":\"constructor\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"target\",\"type\":\"address\"}],\"type\":\"error\",\"name\":\"AddressEmptyCode\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"implementation\",\"type\":\"address\"}],\"type\":\"error\",\"name\":\"ERC1967InvalidImplementation\"},{\"inputs\":[],\"type\":\"error\",\"name\":\"ERC1967NonPayable\"},{\"inputs\":[],\"type\":\"error\",\"name\":\"FailedInnerCall\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"implementation\",\"type\":\"address\",\"indexed\":true}],\"type\":\"event\",\"name\":\"Upgraded\",\"anonymous\":false},{\"inputs\":[],\"stateMutability\":\"payable\",\"type\":\"fallback\"}],\"devdoc\":{\"kind\":\"dev\",\"methods\":{\"constructor\":{\"details\":\"Initializes the upgradeable proxy with an initial implementation specified by `implementation`. If `_data` is nonempty, it's used as data in a delegate call to `implementation`. This will typically be an encoded function call, and allows initializing the storage of the proxy like a Solidity constructor. Requirements: - If `data` is empty, `msg.value` must be zero.\"}},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"remappings\":[\"@openzeppelin/contracts-upgradeable/=node_modules/@openzeppelin/contracts-upgradeable/\",\"@openzeppelin/contracts/=node_modules/@openzeppelin/contracts/\",\"eth-gas-reporter/=node_modules/eth-gas-reporter/\",\"forge-std/=node_modules/forge-std/\",\"hardhat/=node_modules/hardhat/\"],\"optimizer\":{\"enabled\":true,\"runs\":10000},\"metadata\":{\"bytecodeHash\":\"none\"},\"compilationTarget\":{\"node_modules/@openzeppelin/contracts/proxy/ERC1967/ERC1967Proxy.sol\":\"ERC1967Proxy\"},\"evmVersion\":\"london\",\"libraries\":{}},\"sources\":{\"node_modules/@openzeppelin/contracts/proxy/ERC1967/ERC1967Proxy.sol\":{\"keccak256\":\"0xbfb6695731de677140fbf76c772ab08c4233a122fb51ac28ac120fc49bbbc4ec\",\"urls\":[\"bzz-raw://68f8fded7cc318efa15874b7c6a983fe17a4a955d72d240353a9a4ca1e1b824c\",\"dweb:/ipfs/QmdcmBL9Qo4Tk3Dby4wFYabGyot9JNeLPxpSXZUgUm92BV\"],\"license\":\"MIT\"},\"node_modules/@openzeppelin/contracts/proxy/ERC1967/ERC1967Utils.sol\":{\"keccak256\":\"0x06a78f9b3ee3e6d0eb4e4cd635ba49960bea34cac1db8c0a27c75f2319f1fd65\",\"urls\":[\"bzz-raw://547d21aa17f4f3f1a1a7edf7167beff8dd9496a0348d5588f15cc8a4b29d052a\",\"dweb:/ipfs/QmT16JtRQSWNpLo9W23jr6CzaMuTAcQcjJJcdRd8HLJ6cE\"],\"license\":\"MIT\"},\"node_modules/@openzeppelin/contracts/proxy/Proxy.sol\":{\"keccak256\":\"0xc3f2ec76a3de8ed7a7007c46166f5550c72c7709e3fc7e8bb3111a7191cdedbd\",\"urls\":[\"bzz-raw://e73efb4c2ca655882dc237c6b4f234a9bd36d97159d8fcaa837eb01171f726ac\",\"dweb:/ipfs/QmTNnnv7Gu5fs5G1ZMh7Fexp8N4XUs3XrNAngjcxgiss3e\"],\"license\":\"MIT\"},\"node_modules/@openzeppelin/contracts/proxy/beacon/IBeacon.sol\":{\"keccak256\":\"0xc59a78b07b44b2cf2e8ab4175fca91e8eca1eee2df7357b8d2a8833e5ea1f64c\",\"urls\":[\"bzz-raw://5aa4f07e65444784c29cd7bfcc2341b34381e4e5b5da9f0c5bd00d7f430e66fa\",\"dweb:/ipfs/QmWRMh4Q9DpaU9GvsiXmDdoNYMyyece9if7hnfLz7uqzWM\"],\"license\":\"MIT\"},\"node_modules/@openzeppelin/contracts/utils/Address.sol\":{\"keccak256\":\"0xaf28a975a78550e45f65e559a3ad6a5ad43b9b8a37366999abd1b7084eb70721\",\"urls\":[\"bzz-raw://b7bd24e224f67f65bfadf85dc2929fa965456bb2415478bd0125471b5ce35245\",\"dweb:/ipfs/QmRaydGr8BTHs1kvaZfsNU69pKzUAGFrvABn1KiRSbE51y\"],\"license\":\"MIT\"},\"node_modules/@openzeppelin/contracts/utils/StorageSlot.sol\":{\"keccak256\":\"0x32ba59b4b7299237c8ba56319110989d7978a039faf754793064e967e5894418\",\"urls\":[\"bzz-raw://1ae50c8b562427df610cc4540c9bf104acca7ef8e2dcae567ae7e52272281e9c\",\"dweb:/ipfs/QmTHiadFCSJUPpRjNegc5SahmeU8bAoY8i9Aq6tVscbcKR\"],\"license\":\"MIT\"}},\"version\":1}", + "numDeployments": 3, + "receipt": { + "transactionHash": "0xc7508462fff9050c054751635dca2d267ef58e7381f2bef8e39b7c49ea54edfc", + "transactionIndex": "0x1", + "blockHash": "0xf18acb9586a151f22eb4a7b664a2358b71d3547d10933e805fd7080d9ac2cfab", + "blockNumber": "0x5845be", + "from": "0xCB8F8130E289946aec9a17b29819716B1E9e4998", + "to": null, + "cumulativeGasUsed": "0x173001", + "gasUsed": "0x3ba5d", + "contractAddress": "0xa49Af345c57A303C75183d219232Be7b2d027157", + "logs": [ + { + "address": "0xa49Af345c57A303C75183d219232Be7b2d027157", + "topics": [ + "0xbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b", + "0x00000000000000000000000097d73578c78cdb9aeb82fb658cbda6c5a28d7939" + ], + "data": "0x", + "blockHash": "0xf18acb9586a151f22eb4a7b664a2358b71d3547d10933e805fd7080d9ac2cfab", + "blockNumber": "0x5845be", + "transactionHash": "0xc7508462fff9050c054751635dca2d267ef58e7381f2bef8e39b7c49ea54edfc", + "transactionIndex": "0x1", + "logIndex": "0x0" + }, + { + "address": "0xa49Af345c57A303C75183d219232Be7b2d027157", + "topics": [ + "0x5af6a85e864342d4f108c43dd574d98480c91f1de0ac2a9f66d826dee49bd9bb" + ], + "data": "0x0000000000000000000000005e3ede6781f811cb3fe03f9a687bd7fff8dc19e7000000000000000000000000cb8f8130e289946aec9a17b29819716b1e9e4998", + "blockHash": "0xf18acb9586a151f22eb4a7b664a2358b71d3547d10933e805fd7080d9ac2cfab", + "blockNumber": "0x5845be", + "transactionHash": "0xc7508462fff9050c054751635dca2d267ef58e7381f2bef8e39b7c49ea54edfc", + "transactionIndex": "0x1", + "logIndex": "0x1" + }, + { + "address": "0xa49Af345c57A303C75183d219232Be7b2d027157", + "topics": [ + "0xc6681cfb842ccb239555647a438f9ec49bcd12dc4f4d0c5544d3973528b63a45" + ], + "data": "0x00000000000000000000000021fd219c937f7501d867ce660c3bf605c7fa629e000000000000000000000000cb8f8130e289946aec9a17b29819716b1e9e4998", + "blockHash": "0xf18acb9586a151f22eb4a7b664a2358b71d3547d10933e805fd7080d9ac2cfab", + "blockNumber": "0x5845be", + "transactionHash": "0xc7508462fff9050c054751635dca2d267ef58e7381f2bef8e39b7c49ea54edfc", + "transactionIndex": "0x1", + "logIndex": "0x2" + }, + { + "address": "0xa49Af345c57A303C75183d219232Be7b2d027157", + "topics": [ + "0x24d9d91bc040e466fc78b3bb1f93bb81e7410b9bbed45d92b668b52a2ff4c1a9" + ], + "data": "0x0000000000000000000000005e3ede6781f811cb3fe03f9a687bd7fff8dc19e7000000000000000000000000cb8f8130e289946aec9a17b29819716b1e9e4998", + "blockHash": "0xf18acb9586a151f22eb4a7b664a2358b71d3547d10933e805fd7080d9ac2cfab", + "blockNumber": "0x5845be", + "transactionHash": "0xc7508462fff9050c054751635dca2d267ef58e7381f2bef8e39b7c49ea54edfc", + "transactionIndex": "0x1", + "logIndex": "0x3" + }, + { + "address": "0xa49Af345c57A303C75183d219232Be7b2d027157", + "topics": [ + "0x98a54b72a08b0900e0ef7f964fa2f6c3820c0d5dd3e6fb48809acdacd9e5620e" + ], + "data": "0x0000000000000000000000005e3ede6781f811cb3fe03f9a687bd7fff8dc19e7000000000000000000000000cb8f8130e289946aec9a17b29819716b1e9e4998", + "blockHash": "0xf18acb9586a151f22eb4a7b664a2358b71d3547d10933e805fd7080d9ac2cfab", + "blockNumber": "0x5845be", + "transactionHash": "0xc7508462fff9050c054751635dca2d267ef58e7381f2bef8e39b7c49ea54edfc", + "transactionIndex": "0x1", + "logIndex": "0x4" + }, + { + "address": "0xa49Af345c57A303C75183d219232Be7b2d027157", + "topics": [ + "0xc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d2" + ], + "data": "0x0000000000000000000000000000000000000000000000000000000000000001", + "blockHash": "0xf18acb9586a151f22eb4a7b664a2358b71d3547d10933e805fd7080d9ac2cfab", + "blockNumber": "0x5845be", + "transactionHash": "0xc7508462fff9050c054751635dca2d267ef58e7381f2bef8e39b7c49ea54edfc", + "transactionIndex": "0x1", + "logIndex": "0x5" + } + ], + "status": "0x1", + "logsBloom": "0x080000040000000000000002000800004000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000040000000000000000000000000000000020000000000000000000000000002000000000000000000000000000000000000000000000000000000000008000000000000000000000000000008000000000000000000000000800000000c0000000000000000000000000000000000000000000000000000000000000000000000000000000020800000000000000000000050000000000004000000000001000000000000004000000040000000000000000000000000000000000040000000000100", + "type": "0x0", + "effectiveGasPrice": "0x3ef1480" + }, + "solcInputHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "storageLayout": { + "storage": [], + "types": {} + }, + "transactionHash": "0xc7508462fff9050c054751635dca2d267ef58e7381f2bef8e39b7c49ea54edfc", + "userdoc": { + "version": 1, + "kind": "user" + } +} \ No newline at end of file diff --git a/deployments/testnet_qa/RewardDistributorRootstockCollective.json b/deployments/testnet_qa/RewardDistributorRootstockCollective.json new file mode 100644 index 00000000..4f01b274 --- /dev/null +++ b/deployments/testnet_qa/RewardDistributorRootstockCollective.json @@ -0,0 +1,578 @@ +{ + "abi": [ + { + "type": "constructor", + "inputs": [], + "stateMutability": "nonpayable" + }, + { + "type": "receive", + "stateMutability": "payable" + }, + { + "type": "function", + "name": "UPGRADE_INTERFACE_VERSION", + "inputs": [], + "outputs": [ + { + "name": "", + "type": "string", + "internalType": "string" + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "backersManager", + "inputs": [], + "outputs": [ + { + "name": "", + "type": "address", + "internalType": "contract BackersManagerRootstockCollective" + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "defaultRewardCoinbaseAmount", + "inputs": [], + "outputs": [ + { + "name": "", + "type": "uint256", + "internalType": "uint256" + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "defaultRewardTokenAmount", + "inputs": [], + "outputs": [ + { + "name": "", + "type": "uint256", + "internalType": "uint256" + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "governanceManager", + "inputs": [], + "outputs": [ + { + "name": "", + "type": "address", + "internalType": "contract IGovernanceManagerRootstockCollective" + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "initialize", + "inputs": [ + { + "name": "governanceManager_", + "type": "address", + "internalType": "contract IGovernanceManagerRootstockCollective" + } + ], + "outputs": [], + "stateMutability": "nonpayable" + }, + { + "type": "function", + "name": "initializeCollectiveRewardsAddresses", + "inputs": [ + { + "name": "backersManager_", + "type": "address", + "internalType": "address" + } + ], + "outputs": [], + "stateMutability": "nonpayable" + }, + { + "type": "function", + "name": "proxiableUUID", + "inputs": [], + "outputs": [ + { + "name": "", + "type": "bytes32", + "internalType": "bytes32" + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "rewardToken", + "inputs": [], + "outputs": [ + { + "name": "", + "type": "address", + "internalType": "contract IERC20" + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "sendRewards", + "inputs": [ + { + "name": "amountERC20_", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "amountCoinbase_", + "type": "uint256", + "internalType": "uint256" + } + ], + "outputs": [], + "stateMutability": "payable" + }, + { + "type": "function", + "name": "sendRewardsAndStartDistribution", + "inputs": [ + { + "name": "amountERC20_", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "amountCoinbase_", + "type": "uint256", + "internalType": "uint256" + } + ], + "outputs": [], + "stateMutability": "payable" + }, + { + "type": "function", + "name": "sendRewardsAndStartDistributionWithDefaultAmount", + "inputs": [], + "outputs": [], + "stateMutability": "payable" + }, + { + "type": "function", + "name": "sendRewardsWithDefaultAmount", + "inputs": [], + "outputs": [], + "stateMutability": "payable" + }, + { + "type": "function", + "name": "setDefaultRewardAmount", + "inputs": [ + { + "name": "tokenAmount_", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "coinbaseAmount_", + "type": "uint256", + "internalType": "uint256" + } + ], + "outputs": [], + "stateMutability": "payable" + }, + { + "type": "function", + "name": "upgradeToAndCall", + "inputs": [ + { + "name": "newImplementation", + "type": "address", + "internalType": "address" + }, + { + "name": "data", + "type": "bytes", + "internalType": "bytes" + } + ], + "outputs": [], + "stateMutability": "payable" + }, + { + "type": "event", + "name": "Initialized", + "inputs": [ + { + "name": "version", + "type": "uint64", + "indexed": false, + "internalType": "uint64" + } + ], + "anonymous": false + }, + { + "type": "event", + "name": "Upgraded", + "inputs": [ + { + "name": "implementation", + "type": "address", + "indexed": true, + "internalType": "address" + } + ], + "anonymous": false + }, + { + "type": "error", + "name": "AddressEmptyCode", + "inputs": [ + { + "name": "target", + "type": "address", + "internalType": "address" + } + ] + }, + { + "type": "error", + "name": "CollectiveRewardsAddressesAlreadyInitialized", + "inputs": [] + }, + { + "type": "error", + "name": "ERC1967InvalidImplementation", + "inputs": [ + { + "name": "implementation", + "type": "address", + "internalType": "address" + } + ] + }, + { + "type": "error", + "name": "ERC1967NonPayable", + "inputs": [] + }, + { + "type": "error", + "name": "FailedInnerCall", + "inputs": [] + }, + { + "type": "error", + "name": "InvalidInitialization", + "inputs": [] + }, + { + "type": "error", + "name": "NotFoundationTreasury", + "inputs": [] + }, + { + "type": "error", + "name": "NotInitializing", + "inputs": [] + }, + { + "type": "error", + "name": "UUPSUnauthorizedCallContext", + "inputs": [] + }, + { + "type": "error", + "name": "UUPSUnsupportedProxiableUUID", + "inputs": [ + { + "name": "slot", + "type": "bytes32", + "internalType": "bytes32" + } + ] + } + ], + "address": "0x449B90a14D1C1B9409758Ed2a6d5DB30844AEC4F", + "args": [], + "bytecode": "0x60a06040523060805234801561001457600080fd5b5061001d610022565b6100d4565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805468010000000000000000900460ff16156100725760405163f92ee8a960e01b815260040160405180910390fd5b80546001600160401b03908116146100d15780546001600160401b0319166001600160401b0390811782556040519081527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b50565b60805161144b6100fd60003960008181610b3f01528181610b680152610e05015261144b6000f3fe6080604052600436106100ec5760003560e01c806352d1902d1161008a578063ad3cb1cc11610059578063ad3cb1cc1461021c578063c4d66de814610272578063d2e6d1c314610292578063f7c618c1146102bf57600080fd5b806352d1902d146101e1578063583ee7ec146101f657806379b45cdd1461020c578063a1cd24341461021457600080fd5b806327fb339f116100c657806327fb339f14610140578063432f9ba31461015357806345fbf0601461017c5780634f1ef286146101ce57600080fd5b806305dc2a80146100f857806319958e301461011a5780631eba00d81461012d57600080fd5b366100f357005b600080fd5b34801561010457600080fd5b50610118610113366004611205565b6102ec565b005b610118610128366004611222565b61043f565b61011861013b366004611222565b610562565b61011861014e366004611222565b6105ee565b34801561015f57600080fd5b5061016960365481565b6040519081526020015b60405180910390f35b34801561018857600080fd5b506034546101a99073ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff9091168152602001610173565b6101186101dc366004611273565b61067d565b3480156101ed57600080fd5b50610169610698565b34801561020257600080fd5b5061016960355481565b6101186106c7565b6101186107ec565b34801561022857600080fd5b506102656040518060400160405280600581526020017f352e302e3000000000000000000000000000000000000000000000000000000081525081565b6040516101739190611379565b34801561027e57600080fd5b5061011861028d366004611205565b61087d565b34801561029e57600080fd5b506000546101a99073ffffffffffffffffffffffffffffffffffffffff1681565b3480156102cb57600080fd5b506033546101a99073ffffffffffffffffffffffffffffffffffffffff1681565b60345473ffffffffffffffffffffffffffffffffffffffff161561033c576040517f308c2e5900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b603480547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff8316908117909155604080517ff7c618c1000000000000000000000000000000000000000000000000000000008152905163f7c618c1916004808201926020929091908290030181865afa1580156103d3573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906103f791906113ca565b603380547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff9290921691909117905550565b6000546040517fe053dd6100000000000000000000000000000000000000000000000000000000815233600482015273ffffffffffffffffffffffffffffffffffffffff9091169063e053dd619060240160006040518083038186803b1580156104a857600080fd5b505afa1580156104bc573d6000803e3d6000fd5b505050506104ca82826109fd565b603460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663d83623dd6040518163ffffffff1660e01b81526004016020604051808303816000875af1158015610539573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061055d91906113e7565b505050565b6000546040517fe053dd6100000000000000000000000000000000000000000000000000000000815233600482015273ffffffffffffffffffffffffffffffffffffffff9091169063e053dd619060240160006040518083038186803b1580156105cb57600080fd5b505afa1580156105df573d6000803e3d6000fd5b50505060359290925560365550565b6000546040517fe053dd6100000000000000000000000000000000000000000000000000000000815233600482015273ffffffffffffffffffffffffffffffffffffffff9091169063e053dd619060240160006040518083038186803b15801561065757600080fd5b505afa15801561066b573d6000803e3d6000fd5b5050505061067982826109fd565b5050565b610685610b27565b61068e82610c2b565b6106798282610caf565b60006106a2610ded565b507f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc90565b6000546040517fe053dd6100000000000000000000000000000000000000000000000000000000815233600482015273ffffffffffffffffffffffffffffffffffffffff9091169063e053dd619060240160006040518083038186803b15801561073057600080fd5b505afa158015610744573d6000803e3d6000fd5b505050506107566035546036546109fd565b603460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663d83623dd6040518163ffffffff1660e01b81526004016020604051808303816000875af11580156107c5573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906107e991906113e7565b50565b6000546040517fe053dd6100000000000000000000000000000000000000000000000000000000815233600482015273ffffffffffffffffffffffffffffffffffffffff9091169063e053dd619060240160006040518083038186803b15801561085557600080fd5b505afa158015610869573d6000803e3d6000fd5b5050505061087b6035546036546109fd565b565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805468010000000000000000810460ff16159067ffffffffffffffff166000811580156108c85750825b905060008267ffffffffffffffff1660011480156108e55750303b155b9050811580156108f3575080155b1561092a576040517ff92ee8a900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b84547fffffffffffffffffffffffffffffffffffffffffffffffff0000000000000000166001178555831561098b5784547fffffffffffffffffffffffffffffffffffffffffffffff00ffffffffffffffff16680100000000000000001785555b61099486610e5c565b83156109f55784547fffffffffffffffffffffffffffffffffffffffffffffff00ffffffffffffffff168555604051600181527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b505050505050565b6033546034546040517f095ea7b300000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff91821660048201526024810185905291169063095ea7b3906044016020604051808303816000875af1158015610a78573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a9c91906113e7565b506034546040517f3c6b16ab0000000000000000000000000000000000000000000000000000000081526004810184905273ffffffffffffffffffffffffffffffffffffffff90911690633c6b16ab9083906024016000604051808303818588803b158015610b0a57600080fd5b505af1158015610b1e573d6000803e3d6000fd5b50505050505050565b3073ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000161480610bf457507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16610bdb7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5473ffffffffffffffffffffffffffffffffffffffff1690565b73ffffffffffffffffffffffffffffffffffffffff1614155b1561087b576040517fe07c8dba00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000546040517feb6f7abf00000000000000000000000000000000000000000000000000000000815233600482015273ffffffffffffffffffffffffffffffffffffffff9091169063eb6f7abf9060240160006040518083038186803b158015610c9457600080fd5b505afa158015610ca8573d6000803e3d6000fd5b5050505050565b8173ffffffffffffffffffffffffffffffffffffffff166352d1902d6040518163ffffffff1660e01b8152600401602060405180830381865afa925050508015610d34575060408051601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0168201909252610d3191810190611409565b60015b610d87576040517f4c9c8ce300000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff831660048201526024015b60405180910390fd5b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc8114610de3576040517faa1d49a400000000000000000000000000000000000000000000000000000000815260048101829052602401610d7e565b61055d8383610eb3565b3073ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000161461087b576040517fe07c8dba00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610e64610f16565b610e6c610f7d565b600080547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff92909216919091179055565b610ebc82610f85565b60405173ffffffffffffffffffffffffffffffffffffffff8316907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a2805115610f0e5761055d8282611054565b6106796110d7565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a005468010000000000000000900460ff1661087b576040517fd7e6bcf800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61087b610f16565b8073ffffffffffffffffffffffffffffffffffffffff163b600003610fee576040517f4c9c8ce300000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff82166004820152602401610d7e565b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc80547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff92909216919091179055565b60606000808473ffffffffffffffffffffffffffffffffffffffff168460405161107e9190611422565b600060405180830381855af49150503d80600081146110b9576040519150601f19603f3d011682016040523d82523d6000602084013e6110be565b606091505b50915091506110ce85838361110f565b95945050505050565b341561087b576040517fb398979f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6060826111245761111f826111a1565b61119a565b8151158015611148575073ffffffffffffffffffffffffffffffffffffffff84163b155b15611197576040517f9996b31500000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff85166004820152602401610d7e565b50805b9392505050565b8051156111b15780518082602001fd5b6040517f1425ea4200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff811681146107e957600080fd5b60006020828403121561121757600080fd5b813561119a816111e3565b6000806040838503121561123557600080fd5b50508035926020909101359150565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6000806040838503121561128657600080fd5b8235611291816111e3565b9150602083013567ffffffffffffffff808211156112ae57600080fd5b818501915085601f8301126112c257600080fd5b8135818111156112d4576112d4611244565b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0908116603f0116810190838211818310171561131a5761131a611244565b8160405282815288602084870101111561133357600080fd5b8260208601602083013760006020848301015280955050505050509250929050565b60005b83811015611370578181015183820152602001611358565b50506000910152565b6020815260008251806020840152611398816040850160208701611355565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169190910160400192915050565b6000602082840312156113dc57600080fd5b815161119a816111e3565b6000602082840312156113f957600080fd5b8151801515811461119a57600080fd5b60006020828403121561141b57600080fd5b5051919050565b60008251611434818460208701611355565b919091019291505056fea164736f6c6343000814000a", + "deployedBytecode": "0x6080604052600436106100ec5760003560e01c806352d1902d1161008a578063ad3cb1cc11610059578063ad3cb1cc1461021c578063c4d66de814610272578063d2e6d1c314610292578063f7c618c1146102bf57600080fd5b806352d1902d146101e1578063583ee7ec146101f657806379b45cdd1461020c578063a1cd24341461021457600080fd5b806327fb339f116100c657806327fb339f14610140578063432f9ba31461015357806345fbf0601461017c5780634f1ef286146101ce57600080fd5b806305dc2a80146100f857806319958e301461011a5780631eba00d81461012d57600080fd5b366100f357005b600080fd5b34801561010457600080fd5b50610118610113366004611205565b6102ec565b005b610118610128366004611222565b61043f565b61011861013b366004611222565b610562565b61011861014e366004611222565b6105ee565b34801561015f57600080fd5b5061016960365481565b6040519081526020015b60405180910390f35b34801561018857600080fd5b506034546101a99073ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff9091168152602001610173565b6101186101dc366004611273565b61067d565b3480156101ed57600080fd5b50610169610698565b34801561020257600080fd5b5061016960355481565b6101186106c7565b6101186107ec565b34801561022857600080fd5b506102656040518060400160405280600581526020017f352e302e3000000000000000000000000000000000000000000000000000000081525081565b6040516101739190611379565b34801561027e57600080fd5b5061011861028d366004611205565b61087d565b34801561029e57600080fd5b506000546101a99073ffffffffffffffffffffffffffffffffffffffff1681565b3480156102cb57600080fd5b506033546101a99073ffffffffffffffffffffffffffffffffffffffff1681565b60345473ffffffffffffffffffffffffffffffffffffffff161561033c576040517f308c2e5900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b603480547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff8316908117909155604080517ff7c618c1000000000000000000000000000000000000000000000000000000008152905163f7c618c1916004808201926020929091908290030181865afa1580156103d3573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906103f791906113ca565b603380547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff9290921691909117905550565b6000546040517fe053dd6100000000000000000000000000000000000000000000000000000000815233600482015273ffffffffffffffffffffffffffffffffffffffff9091169063e053dd619060240160006040518083038186803b1580156104a857600080fd5b505afa1580156104bc573d6000803e3d6000fd5b505050506104ca82826109fd565b603460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663d83623dd6040518163ffffffff1660e01b81526004016020604051808303816000875af1158015610539573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061055d91906113e7565b505050565b6000546040517fe053dd6100000000000000000000000000000000000000000000000000000000815233600482015273ffffffffffffffffffffffffffffffffffffffff9091169063e053dd619060240160006040518083038186803b1580156105cb57600080fd5b505afa1580156105df573d6000803e3d6000fd5b50505060359290925560365550565b6000546040517fe053dd6100000000000000000000000000000000000000000000000000000000815233600482015273ffffffffffffffffffffffffffffffffffffffff9091169063e053dd619060240160006040518083038186803b15801561065757600080fd5b505afa15801561066b573d6000803e3d6000fd5b5050505061067982826109fd565b5050565b610685610b27565b61068e82610c2b565b6106798282610caf565b60006106a2610ded565b507f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc90565b6000546040517fe053dd6100000000000000000000000000000000000000000000000000000000815233600482015273ffffffffffffffffffffffffffffffffffffffff9091169063e053dd619060240160006040518083038186803b15801561073057600080fd5b505afa158015610744573d6000803e3d6000fd5b505050506107566035546036546109fd565b603460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663d83623dd6040518163ffffffff1660e01b81526004016020604051808303816000875af11580156107c5573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906107e991906113e7565b50565b6000546040517fe053dd6100000000000000000000000000000000000000000000000000000000815233600482015273ffffffffffffffffffffffffffffffffffffffff9091169063e053dd619060240160006040518083038186803b15801561085557600080fd5b505afa158015610869573d6000803e3d6000fd5b5050505061087b6035546036546109fd565b565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805468010000000000000000810460ff16159067ffffffffffffffff166000811580156108c85750825b905060008267ffffffffffffffff1660011480156108e55750303b155b9050811580156108f3575080155b1561092a576040517ff92ee8a900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b84547fffffffffffffffffffffffffffffffffffffffffffffffff0000000000000000166001178555831561098b5784547fffffffffffffffffffffffffffffffffffffffffffffff00ffffffffffffffff16680100000000000000001785555b61099486610e5c565b83156109f55784547fffffffffffffffffffffffffffffffffffffffffffffff00ffffffffffffffff168555604051600181527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b505050505050565b6033546034546040517f095ea7b300000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff91821660048201526024810185905291169063095ea7b3906044016020604051808303816000875af1158015610a78573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a9c91906113e7565b506034546040517f3c6b16ab0000000000000000000000000000000000000000000000000000000081526004810184905273ffffffffffffffffffffffffffffffffffffffff90911690633c6b16ab9083906024016000604051808303818588803b158015610b0a57600080fd5b505af1158015610b1e573d6000803e3d6000fd5b50505050505050565b3073ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000161480610bf457507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16610bdb7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5473ffffffffffffffffffffffffffffffffffffffff1690565b73ffffffffffffffffffffffffffffffffffffffff1614155b1561087b576040517fe07c8dba00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000546040517feb6f7abf00000000000000000000000000000000000000000000000000000000815233600482015273ffffffffffffffffffffffffffffffffffffffff9091169063eb6f7abf9060240160006040518083038186803b158015610c9457600080fd5b505afa158015610ca8573d6000803e3d6000fd5b5050505050565b8173ffffffffffffffffffffffffffffffffffffffff166352d1902d6040518163ffffffff1660e01b8152600401602060405180830381865afa925050508015610d34575060408051601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0168201909252610d3191810190611409565b60015b610d87576040517f4c9c8ce300000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff831660048201526024015b60405180910390fd5b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc8114610de3576040517faa1d49a400000000000000000000000000000000000000000000000000000000815260048101829052602401610d7e565b61055d8383610eb3565b3073ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000161461087b576040517fe07c8dba00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610e64610f16565b610e6c610f7d565b600080547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff92909216919091179055565b610ebc82610f85565b60405173ffffffffffffffffffffffffffffffffffffffff8316907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a2805115610f0e5761055d8282611054565b6106796110d7565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a005468010000000000000000900460ff1661087b576040517fd7e6bcf800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61087b610f16565b8073ffffffffffffffffffffffffffffffffffffffff163b600003610fee576040517f4c9c8ce300000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff82166004820152602401610d7e565b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc80547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff92909216919091179055565b60606000808473ffffffffffffffffffffffffffffffffffffffff168460405161107e9190611422565b600060405180830381855af49150503d80600081146110b9576040519150601f19603f3d011682016040523d82523d6000602084013e6110be565b606091505b50915091506110ce85838361110f565b95945050505050565b341561087b576040517fb398979f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6060826111245761111f826111a1565b61119a565b8151158015611148575073ffffffffffffffffffffffffffffffffffffffff84163b155b15611197576040517f9996b31500000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff85166004820152602401610d7e565b50805b9392505050565b8051156111b15780518082602001fd5b6040517f1425ea4200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff811681146107e957600080fd5b60006020828403121561121757600080fd5b813561119a816111e3565b6000806040838503121561123557600080fd5b50508035926020909101359150565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6000806040838503121561128657600080fd5b8235611291816111e3565b9150602083013567ffffffffffffffff808211156112ae57600080fd5b818501915085601f8301126112c257600080fd5b8135818111156112d4576112d4611244565b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0908116603f0116810190838211818310171561131a5761131a611244565b8160405282815288602084870101111561133357600080fd5b8260208601602083013760006020848301015280955050505050509250929050565b60005b83811015611370578181015183820152602001611358565b50506000910152565b6020815260008251806020840152611398816040850160208701611355565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169190910160400192915050565b6000602082840312156113dc57600080fd5b815161119a816111e3565b6000602082840312156113f957600080fd5b8151801515811461119a57600080fd5b60006020828403121561141b57600080fd5b5051919050565b60008251611434818460208701611355565b919091019291505056fea164736f6c6343000814000a", + "devdoc": { + "version": 1, + "kind": "dev", + "methods": { + "constructor": {}, + "initialize(address)": { + "details": "initializeCollectiveRewardsAddresses() must be called ASAP after this initialization", + "params": { + "governanceManager_": "contract with permissioned roles" + } + }, + "initializeCollectiveRewardsAddresses(address)": { + "details": "used to solve circular dependency, backersManager is initialized with this contract address it must be called ASAP after the initialize.", + "params": { + "backersManager_": "BackersManagerRootstockCollective contract address" + } + }, + "proxiableUUID()": { + "details": "Implementation of the ERC1822 {proxiableUUID} function. This returns the storage slot used by the implementation. It is used to validate the implementation's compatibility when performing an upgrade. IMPORTANT: A proxy pointing at a proxiable contract should not be considered proxiable itself, because this risks bricking a proxy that upgrades to it, by delegating to itself until out of gas. Thus it is critical that this function revert if invoked through a proxy. This is guaranteed by the `notDelegated` modifier." + }, + "sendRewards(uint256,uint256)": { + "details": "reverts if is not called by foundation treasury address reverts if rewards balance is insufficient", + "params": { + "amountCoinbase_": "amount of Coinbase reward token to send", + "amountERC20_": "amount of ERC20 reward token to send" + } + }, + "sendRewardsAndStartDistribution(uint256,uint256)": { + "details": "reverts if is not called by foundation treasury address reverts if rewards balance is insufficient reverts if is not in the distribution window", + "params": { + "amountCoinbase_": "amount of Coinbase reward token to send", + "amountERC20_": "amount of ERC20 reward token to send" + } + }, + "sendRewardsAndStartDistributionWithDefaultAmount()": { + "details": "reverts if is not called by foundation treasury address" + }, + "sendRewardsWithDefaultAmount()": { + "details": "reverts if is not called by foundation treasury address" + }, + "setDefaultRewardAmount(uint256,uint256)": { + "details": "reverts if is not called by foundation treasury address", + "params": { + "coinbaseAmount_": "default amount of Coinbase reward token to send", + "tokenAmount_": "default amount of ERC20 reward token to send" + } + }, + "upgradeToAndCall(address,bytes)": { + "details": "Upgrade the implementation of the proxy to `newImplementation`, and subsequently execute the function call encoded in `data`. Calls {_authorizeUpgrade}. Emits an {Upgraded} event." + } + }, + "events": { + "Initialized(uint64)": { + "details": "Triggered when the contract has been initialized or reinitialized." + }, + "Upgraded(address)": { + "details": "Emitted when the implementation is upgraded." + } + }, + "errors": { + "AddressEmptyCode(address)": [ + { + "details": "There's no code at `target` (it is not a contract)." + } + ], + "ERC1967InvalidImplementation(address)": [ + { + "details": "The `implementation` of the proxy is invalid." + } + ], + "ERC1967NonPayable()": [ + { + "details": "An upgrade function sees `msg.value > 0` that may be lost." + } + ], + "FailedInnerCall()": [ + { + "details": "A call to an address target failed. The target may have reverted." + } + ], + "InvalidInitialization()": [ + { + "details": "The contract is already initialized." + } + ], + "NotInitializing()": [ + { + "details": "The contract is not initializing." + } + ], + "UUPSUnauthorizedCallContext()": [ + { + "details": "The call is from an unauthorized context." + } + ], + "UUPSUnsupportedProxiableUUID(bytes32)": [ + { + "details": "The storage `slot` is unsupported as a UUID." + } + ] + }, + "title": "RewardDistributorRootstockCollective" + }, + "metadata": "{\"compiler\":{\"version\":\"0.8.20+commit.a1b79de6\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"target\",\"type\":\"address\"}],\"type\":\"error\",\"name\":\"AddressEmptyCode\"},{\"inputs\":[],\"type\":\"error\",\"name\":\"CollectiveRewardsAddressesAlreadyInitialized\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"implementation\",\"type\":\"address\"}],\"type\":\"error\",\"name\":\"ERC1967InvalidImplementation\"},{\"inputs\":[],\"type\":\"error\",\"name\":\"ERC1967NonPayable\"},{\"inputs\":[],\"type\":\"error\",\"name\":\"FailedInnerCall\"},{\"inputs\":[],\"type\":\"error\",\"name\":\"InvalidInitialization\"},{\"inputs\":[],\"type\":\"error\",\"name\":\"NotFoundationTreasury\"},{\"inputs\":[],\"type\":\"error\",\"name\":\"NotInitializing\"},{\"inputs\":[],\"type\":\"error\",\"name\":\"UUPSUnauthorizedCallContext\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"slot\",\"type\":\"bytes32\"}],\"type\":\"error\",\"name\":\"UUPSUnsupportedProxiableUUID\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"version\",\"type\":\"uint64\",\"indexed\":false}],\"type\":\"event\",\"name\":\"Initialized\",\"anonymous\":false},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"implementation\",\"type\":\"address\",\"indexed\":true}],\"type\":\"event\",\"name\":\"Upgraded\",\"anonymous\":false},{\"inputs\":[],\"stateMutability\":\"view\",\"type\":\"function\",\"name\":\"UPGRADE_INTERFACE_VERSION\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}]},{\"inputs\":[],\"stateMutability\":\"view\",\"type\":\"function\",\"name\":\"backersManager\",\"outputs\":[{\"internalType\":\"contract BackersManagerRootstockCollective\",\"name\":\"\",\"type\":\"address\"}]},{\"inputs\":[],\"stateMutability\":\"view\",\"type\":\"function\",\"name\":\"defaultRewardCoinbaseAmount\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}]},{\"inputs\":[],\"stateMutability\":\"view\",\"type\":\"function\",\"name\":\"defaultRewardTokenAmount\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}]},{\"inputs\":[],\"stateMutability\":\"view\",\"type\":\"function\",\"name\":\"governanceManager\",\"outputs\":[{\"internalType\":\"contract IGovernanceManagerRootstockCollective\",\"name\":\"\",\"type\":\"address\"}]},{\"inputs\":[{\"internalType\":\"contract IGovernanceManagerRootstockCollective\",\"name\":\"governanceManager_\",\"type\":\"address\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\",\"name\":\"initialize\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"backersManager_\",\"type\":\"address\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\",\"name\":\"initializeCollectiveRewardsAddresses\"},{\"inputs\":[],\"stateMutability\":\"view\",\"type\":\"function\",\"name\":\"proxiableUUID\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}]},{\"inputs\":[],\"stateMutability\":\"view\",\"type\":\"function\",\"name\":\"rewardToken\",\"outputs\":[{\"internalType\":\"contract IERC20\",\"name\":\"\",\"type\":\"address\"}]},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"amountERC20_\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"amountCoinbase_\",\"type\":\"uint256\"}],\"stateMutability\":\"payable\",\"type\":\"function\",\"name\":\"sendRewards\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"amountERC20_\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"amountCoinbase_\",\"type\":\"uint256\"}],\"stateMutability\":\"payable\",\"type\":\"function\",\"name\":\"sendRewardsAndStartDistribution\"},{\"inputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\",\"name\":\"sendRewardsAndStartDistributionWithDefaultAmount\"},{\"inputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\",\"name\":\"sendRewardsWithDefaultAmount\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"tokenAmount_\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"coinbaseAmount_\",\"type\":\"uint256\"}],\"stateMutability\":\"payable\",\"type\":\"function\",\"name\":\"setDefaultRewardAmount\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newImplementation\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"}],\"stateMutability\":\"payable\",\"type\":\"function\",\"name\":\"upgradeToAndCall\"},{\"inputs\":[],\"stateMutability\":\"payable\",\"type\":\"receive\"}],\"devdoc\":{\"kind\":\"dev\",\"methods\":{\"constructor\":{\"custom:oz-upgrades-unsafe-allow\":\"constructor\"},\"initialize(address)\":{\"details\":\"initializeCollectiveRewardsAddresses() must be called ASAP after this initialization\",\"params\":{\"governanceManager_\":\"contract with permissioned roles\"}},\"initializeCollectiveRewardsAddresses(address)\":{\"details\":\"used to solve circular dependency, backersManager is initialized with this contract address it must be called ASAP after the initialize.\",\"params\":{\"backersManager_\":\"BackersManagerRootstockCollective contract address\"}},\"proxiableUUID()\":{\"details\":\"Implementation of the ERC1822 {proxiableUUID} function. This returns the storage slot used by the implementation. It is used to validate the implementation's compatibility when performing an upgrade. IMPORTANT: A proxy pointing at a proxiable contract should not be considered proxiable itself, because this risks bricking a proxy that upgrades to it, by delegating to itself until out of gas. Thus it is critical that this function revert if invoked through a proxy. This is guaranteed by the `notDelegated` modifier.\"},\"sendRewards(uint256,uint256)\":{\"details\":\"reverts if is not called by foundation treasury address reverts if rewards balance is insufficient\",\"params\":{\"amountCoinbase_\":\"amount of Coinbase reward token to send\",\"amountERC20_\":\"amount of ERC20 reward token to send\"}},\"sendRewardsAndStartDistribution(uint256,uint256)\":{\"details\":\"reverts if is not called by foundation treasury address reverts if rewards balance is insufficient reverts if is not in the distribution window\",\"params\":{\"amountCoinbase_\":\"amount of Coinbase reward token to send\",\"amountERC20_\":\"amount of ERC20 reward token to send\"}},\"sendRewardsAndStartDistributionWithDefaultAmount()\":{\"details\":\"reverts if is not called by foundation treasury address\"},\"sendRewardsWithDefaultAmount()\":{\"details\":\"reverts if is not called by foundation treasury address\"},\"setDefaultRewardAmount(uint256,uint256)\":{\"details\":\"reverts if is not called by foundation treasury address\",\"params\":{\"coinbaseAmount_\":\"default amount of Coinbase reward token to send\",\"tokenAmount_\":\"default amount of ERC20 reward token to send\"}},\"upgradeToAndCall(address,bytes)\":{\"custom:oz-upgrades-unsafe-allow-reachable\":\"delegatecall\",\"details\":\"Upgrade the implementation of the proxy to `newImplementation`, and subsequently execute the function call encoded in `data`. Calls {_authorizeUpgrade}. Emits an {Upgraded} event.\"}},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{\"backersManager()\":{\"notice\":\"BackersManagerRootstockCollective contract address\"},\"defaultRewardCoinbaseAmount()\":{\"notice\":\"default reward coinbase amount\"},\"defaultRewardTokenAmount()\":{\"notice\":\"default reward token amount\"},\"initialize(address)\":{\"notice\":\"contract initializer\"},\"initializeCollectiveRewardsAddresses(address)\":{\"notice\":\"CollectiveRewards addresses initializer\"},\"rewardToken()\":{\"notice\":\"address of the token rewarded to builder and backers\"},\"sendRewards(uint256,uint256)\":{\"notice\":\"sends rewards to backersManager contract to be distributed to the gauges\"},\"sendRewardsAndStartDistribution(uint256,uint256)\":{\"notice\":\"sends rewards to backersManager contract and starts the distribution to the gauges\"},\"sendRewardsAndStartDistributionWithDefaultAmount()\":{\"notice\":\"sends rewards to backersManager contract with default amounts and starts the distribution\"},\"sendRewardsWithDefaultAmount()\":{\"notice\":\"sends rewards to backersManager contract with default amounts\"},\"setDefaultRewardAmount(uint256,uint256)\":{\"notice\":\"sets the default reward amounts\"}},\"version\":1}},\"settings\":{\"remappings\":[\"@openzeppelin/contracts-upgradeable/=node_modules/@openzeppelin/contracts-upgradeable/\",\"@openzeppelin/contracts/=node_modules/@openzeppelin/contracts/\",\"eth-gas-reporter/=node_modules/eth-gas-reporter/\",\"forge-std/=node_modules/forge-std/\",\"hardhat/=node_modules/hardhat/\"],\"optimizer\":{\"enabled\":true,\"runs\":10000},\"metadata\":{\"bytecodeHash\":\"none\"},\"compilationTarget\":{\"src/RewardDistributorRootstockCollective.sol\":\"RewardDistributorRootstockCollective\"},\"evmVersion\":\"london\",\"libraries\":{}},\"sources\":{\"node_modules/@openzeppelin/contracts-upgradeable/proxy/utils/Initializable.sol\":{\"keccak256\":\"0x631188737069917d2f909d29ce62c4d48611d326686ba6683e26b72a23bfac0b\",\"urls\":[\"bzz-raw://7a61054ae84cd6c4d04c0c4450ba1d6de41e27e0a2c4f1bcdf58f796b401c609\",\"dweb:/ipfs/QmUvtdp7X1mRVyC3CsHrtPbgoqWaXHp3S1ZR24tpAQYJWM\"],\"license\":\"MIT\"},\"node_modules/@openzeppelin/contracts-upgradeable/proxy/utils/UUPSUpgradeable.sol\":{\"keccak256\":\"0x3f13b947637c4969c0644cab4ef399cdc4b67f101463b8775c5a43b118558e53\",\"urls\":[\"bzz-raw://c6683e6ade6985d394d32baaef5eea0d8b9ff0b3eca86ae413d6cdde114a9930\",\"dweb:/ipfs/QmdBE8T1BTddZxpdECMsb3KiCFyjNWmxcCddYrWFTXmWPj\"],\"license\":\"MIT\"},\"node_modules/@openzeppelin/contracts-upgradeable/utils/ReentrancyGuardUpgradeable.sol\":{\"keccak256\":\"0xb44e086e941292cdc7f440de51478493894ef0b1aeccb0c4047445919f667f74\",\"urls\":[\"bzz-raw://942dad22fbdc1669f025540ba63aa3ccfad5f8458fc5d4525b31ebf272e7af45\",\"dweb:/ipfs/Qmdo4X2M82aM3AMoW2kf2jhYkSCyC4T1pHNd6obdsDFnAB\"],\"license\":\"MIT\"},\"node_modules/@openzeppelin/contracts-upgradeable/utils/introspection/ERC165Upgradeable.sol\":{\"keccak256\":\"0xdaba3f7c42c55b2896353f32bd27d4d5f8bae741b3b05d4c53f67abc4dc47ce8\",\"urls\":[\"bzz-raw://1fa2e61141c602510bcd2cd936ed9561922ac8772a9b9c9a9db091a74e354a45\",\"dweb:/ipfs/QmcHQDDoEBwJmwUbzoVkytvJsBx3KVHYFFnDkvRGWh9Wmh\"],\"license\":\"MIT\"},\"node_modules/@openzeppelin/contracts/interfaces/draft-IERC1822.sol\":{\"keccak256\":\"0x2a1f9944df2015c081d89cd41ba22ffaf10aa6285969f0dc612b235cc448999c\",\"urls\":[\"bzz-raw://ef381843676aec64421200ee85eaa0b1356a35f28b9fc67e746a6bbb832077d9\",\"dweb:/ipfs/QmY8aorMYA2TeTCnu6ejDjzb4rW4t7TCtW4GZ6LoxTFm7v\"],\"license\":\"MIT\"},\"node_modules/@openzeppelin/contracts/proxy/ERC1967/ERC1967Utils.sol\":{\"keccak256\":\"0x06a78f9b3ee3e6d0eb4e4cd635ba49960bea34cac1db8c0a27c75f2319f1fd65\",\"urls\":[\"bzz-raw://547d21aa17f4f3f1a1a7edf7167beff8dd9496a0348d5588f15cc8a4b29d052a\",\"dweb:/ipfs/QmT16JtRQSWNpLo9W23jr6CzaMuTAcQcjJJcdRd8HLJ6cE\"],\"license\":\"MIT\"},\"node_modules/@openzeppelin/contracts/proxy/Proxy.sol\":{\"keccak256\":\"0xc3f2ec76a3de8ed7a7007c46166f5550c72c7709e3fc7e8bb3111a7191cdedbd\",\"urls\":[\"bzz-raw://e73efb4c2ca655882dc237c6b4f234a9bd36d97159d8fcaa837eb01171f726ac\",\"dweb:/ipfs/QmTNnnv7Gu5fs5G1ZMh7Fexp8N4XUs3XrNAngjcxgiss3e\"],\"license\":\"MIT\"},\"node_modules/@openzeppelin/contracts/proxy/beacon/BeaconProxy.sol\":{\"keccak256\":\"0x387ebdcb365b8e620f26645d2b34a161cd39eedfb0219e8baff55630c5ae113c\",\"urls\":[\"bzz-raw://744ea187c195e31cb9201e63ca291fca9e623747f54f0ba390b366a6213b8964\",\"dweb:/ipfs/Qmc547qfV4sz65DC9B4okx1HvgxwUzJR7zTfKKbTzL3UQT\"],\"license\":\"MIT\"},\"node_modules/@openzeppelin/contracts/proxy/beacon/IBeacon.sol\":{\"keccak256\":\"0xc59a78b07b44b2cf2e8ab4175fca91e8eca1eee2df7357b8d2a8833e5ea1f64c\",\"urls\":[\"bzz-raw://5aa4f07e65444784c29cd7bfcc2341b34381e4e5b5da9f0c5bd00d7f430e66fa\",\"dweb:/ipfs/QmWRMh4Q9DpaU9GvsiXmDdoNYMyyece9if7hnfLz7uqzWM\"],\"license\":\"MIT\"},\"node_modules/@openzeppelin/contracts/token/ERC20/IERC20.sol\":{\"keccak256\":\"0xc6a8ff0ea489379b61faa647490411b80102578440ab9d84e9a957cc12164e70\",\"urls\":[\"bzz-raw://0ea104e577e63faea3b69c415637e99e755dcbf64c5833d7140c35a714d6d90c\",\"dweb:/ipfs/Qmau6x4Ns9XdyynRCNNp3RhLqijJjFm7z5fyZazfYFGYdq\"],\"license\":\"MIT\"},\"node_modules/@openzeppelin/contracts/token/ERC20/extensions/IERC20Permit.sol\":{\"keccak256\":\"0x6008dabfe393240d73d7dd7688033f72740d570aa422254d29a7dce8568f3aff\",\"urls\":[\"bzz-raw://f5196ec75139918c6c7bb4251b36395e668f1fa6d206beba7e7520e74913940d\",\"dweb:/ipfs/QmSyqjksXxmm2mCG6qRd1yuwLykypkSVBbnBnGqJRcuJMi\"],\"license\":\"MIT\"},\"node_modules/@openzeppelin/contracts/token/ERC20/utils/SafeERC20.sol\":{\"keccak256\":\"0x37bb49513c49c87c4642a891b13b63571bc87013dde806617aa1efb54605f386\",\"urls\":[\"bzz-raw://b3036b3a83b7c48f96641f2a9002b9f2dcb6a5958dd670894ada21ae8229b3d0\",\"dweb:/ipfs/QmUNfSBdoVtjhETaUJCYcaC7pTMgbhht926tJ2uXJbiVd3\"],\"license\":\"MIT\"},\"node_modules/@openzeppelin/contracts/utils/Address.sol\":{\"keccak256\":\"0xaf28a975a78550e45f65e559a3ad6a5ad43b9b8a37366999abd1b7084eb70721\",\"urls\":[\"bzz-raw://b7bd24e224f67f65bfadf85dc2929fa965456bb2415478bd0125471b5ce35245\",\"dweb:/ipfs/QmRaydGr8BTHs1kvaZfsNU69pKzUAGFrvABn1KiRSbE51y\"],\"license\":\"MIT\"},\"node_modules/@openzeppelin/contracts/utils/StorageSlot.sol\":{\"keccak256\":\"0x32ba59b4b7299237c8ba56319110989d7978a039faf754793064e967e5894418\",\"urls\":[\"bzz-raw://1ae50c8b562427df610cc4540c9bf104acca7ef8e2dcae567ae7e52272281e9c\",\"dweb:/ipfs/QmTHiadFCSJUPpRjNegc5SahmeU8bAoY8i9Aq6tVscbcKR\"],\"license\":\"MIT\"},\"node_modules/@openzeppelin/contracts/utils/introspection/IERC165.sol\":{\"keccak256\":\"0x4296879f55019b23e135000eb36896057e7101fb7fb859c5ef690cf14643757b\",\"urls\":[\"bzz-raw://87b3541437c8c443ccd36795e56a338ed12855eec17f8da624511b8d1a7e14df\",\"dweb:/ipfs/QmeJQCtZrQjtJLr6u7ZHWeH3pBnjtLWzvRrKViAi7UZqxL\"],\"license\":\"MIT\"},\"node_modules/@openzeppelin/contracts/utils/math/Math.sol\":{\"keccak256\":\"0x005ec64c6313f0555d59e278f9a7a5ab2db5bdc72a027f255a37c327af1ec02d\",\"urls\":[\"bzz-raw://4ece9f0b9c8daca08c76b6b5405a6446b6f73b3a15fab7ff56e296cbd4a2c875\",\"dweb:/ipfs/QmQyRpyPRL5SQuAgj6SHmbir3foX65FJjbVTTQrA2EFg6L\"],\"license\":\"MIT\"},\"node_modules/@openzeppelin/contracts/utils/structs/EnumerableSet.sol\":{\"keccak256\":\"0x86c1470cbfd878491e5de030072b647352d36bd27122cffb928970b1945282aa\",\"urls\":[\"bzz-raw://ad85dd393ee0a1917c57046abc5155f51f77844b2c6a42c05c1b8dd26d6ff3c1\",\"dweb:/ipfs/QmNqYc8To2NdnpP6E1tGz7t6A7beuENde5yovwov5pW1fA\"],\"license\":\"MIT\"},\"src/BackersManagerRootstockCollective.sol\":{\"keccak256\":\"0x4bce92547845ef35a1b71fdfff864309938051142bd13fcc671785aad6dbc36b\",\"urls\":[\"bzz-raw://e21d16501b5cd62d1838223c2dcc2189e372e71096d4fa2977c5f9c62887a57c\",\"dweb:/ipfs/QmZdhG6Be7UTrKmDUXc8UxfCWH5ifXs9czSBPNrdC46ZGZ\"],\"license\":\"MIT\"},\"src/BuilderRegistryRootstockCollective.sol\":{\"keccak256\":\"0xc1396c558a12bc95f35bb8161d0410bb2ae400ff4c7ee684cd50b6e7e6326bd7\",\"urls\":[\"bzz-raw://091fdfefa6f079517bc0ebf5275038952167ed05fe80c9fc1ebfd623a4c37d5a\",\"dweb:/ipfs/QmaCk2BmBXEqsnB6tCpDeEuNpotXXuBZm1WyKcY1prHdPh\"],\"license\":\"MIT\"},\"src/CycleTimeKeeperRootstockCollective.sol\":{\"keccak256\":\"0x111d42f321259b53ff1b11e65fde44d8b582a5801299a665c7c39a003a9e4bfd\",\"urls\":[\"bzz-raw://40fe5761b6948b9d89fc2977e246738466ca65f2718d3ead305de92fe4ac4e45\",\"dweb:/ipfs/QmNj27MbZSmGN8Wfre4dngJSbNb1ZBUZ3cHoVUMb6B2n9W\"],\"license\":\"MIT\"},\"src/RewardDistributorRootstockCollective.sol\":{\"keccak256\":\"0x6e1d2133177bb79e7a1d1f8271cb467a1920c675cd1fc28519c52436bdcc4ad1\",\"urls\":[\"bzz-raw://c39a3f8af4b3d3ebd2ac122d796408fa879b2ddccbf78fbb8913c9c3c051a754\",\"dweb:/ipfs/QmRmU9vqFAP184E5ZVQv19FuPnULgkMNeqzEKAaNZHUNon\"],\"license\":\"MIT\"},\"src/gauge/GaugeFactoryRootstockCollective.sol\":{\"keccak256\":\"0xbcf8f9f1038468632211aa7b936d63a35caa7e54f03793ba44f701b17e489a0d\",\"urls\":[\"bzz-raw://82beb9f7be678d3edb72cd181e198e00ead8c8383c36414ce0e388094272914b\",\"dweb:/ipfs/QmSmMx3RT4gjYRFggbEWAyDie5X4JLyBW3VgpHdRFcAmii\"],\"license\":\"MIT\"},\"src/gauge/GaugeRootstockCollective.sol\":{\"keccak256\":\"0xc938acb7b0a1fe48d81115d9c78554cf52578cfa079b7e2fa61ad6f7d938cfa5\",\"urls\":[\"bzz-raw://b0705939ef67abd05f05cd9c3f7d2d0f82c42048046c9daefc360d0d3335761d\",\"dweb:/ipfs/QmaPRBk5oeoQajXGLpCCq1B2BNRHbToSrD7a7ZbcqnhwKx\"],\"license\":\"MIT\"},\"src/governance/UpgradeableRootstockCollective.sol\":{\"keccak256\":\"0x22b56cfe51772a18fc6b7f4e64c53a2a9e73654826cfcb8b24e84c25058e2541\",\"urls\":[\"bzz-raw://57900df94f4b5b41038bb78594317680c8ea5ea74b2c5ca00875b3815b5e6dc5\",\"dweb:/ipfs/QmbANYcAgWYQ4Fthch7qeMCSXHQucRGPfVRjCTgUzcWTmL\"],\"license\":\"MIT\"},\"src/interfaces/IBackersManagerRootstockCollective.sol\":{\"keccak256\":\"0x7eacff4e2d906e1f38636bdc81646f213dc3820724b0bb4f61d2e105272f4087\",\"urls\":[\"bzz-raw://00e4ac507e8377040962f89fb774df725422c400114965eee8c45fcc401a7f87\",\"dweb:/ipfs/QmNsqV2naFxx8s6AG8YVDZqhvnUvXmnDZVhWH1WMsFesf6\"],\"license\":\"MIT\"},\"src/interfaces/IChangeContractRootstockCollective.sol\":{\"keccak256\":\"0x00fb3eb72286348dd06d581c5044cb045dfd3bd24725d05dd9c4b008567dd496\",\"urls\":[\"bzz-raw://7f4a03e06197ae7d6e478097afbbecf936ce7029ca49909a1fee0b4ba1b5b517\",\"dweb:/ipfs/QmfByMJ1SQAmcYkouS5WM3akMmSKU3MCyACpFmQwuFSYe9\"],\"license\":\"MIT\"},\"src/interfaces/ICollectiveRewardsCheckRootstockCollective.sol\":{\"keccak256\":\"0x3fa8e50c66e322c8023aed564a442404bdcb942ae1fe95fa60bf9982e8baf7ee\",\"urls\":[\"bzz-raw://df7c927919599e72f70fdcfaf5713d859f447d4258ea7a6ed8f9bcac851d3d72\",\"dweb:/ipfs/Qmb54kMmV1UD45oZntyxB7yWaUfKwMC136ftDHctVmNrge\"],\"license\":\"UNLICENSED\"},\"src/interfaces/IGovernanceManagerRootstockCollective.sol\":{\"keccak256\":\"0x1416991dd129bb36f43cc0854dfa824b5b85838e5c5018566b6cf78f527747e3\",\"urls\":[\"bzz-raw://8652a18ec39d5527fefb829eca619f4cf4bbec3ee4f6231e8888f1549feedd3d\",\"dweb:/ipfs/Qmczi6GipLy9B9TcDMx5UaZZPFBaMT2k49iYzQuLCFgnfS\"],\"license\":\"MIT\"},\"src/libraries/UtilsLib.sol\":{\"keccak256\":\"0x4660e2e62cb370b17052cd21238722bfe3cdaaf3f69cf4c9b2d87236070d12ac\",\"urls\":[\"bzz-raw://e8759237b67bb6e641c7a92eb0d94300770e32c25c2c5bf387bea2ea68513753\",\"dweb:/ipfs/QmbkRDUnzyL9QQbwJcFGd6kiERFFgxZgnxqsu14snpCvhp\"],\"license\":\"MIT\"}},\"version\":1}", + "numDeployments": 3, + "receipt": { + "transactionHash": "0xc2fa7ccecb0e934b5be2cd457d6d4a93c8cf4faec4e85422dc7a3077787e1638", + "transactionIndex": "0x5", + "blockHash": "0xf18acb9586a151f22eb4a7b664a2358b71d3547d10933e805fd7080d9ac2cfab", + "blockNumber": "0x5845be", + "from": "0xCB8F8130E289946aec9a17b29819716B1E9e4998", + "to": null, + "cumulativeGasUsed": "0x569ffc", + "gasUsed": "0x122af4", + "contractAddress": "0x449B90a14D1C1B9409758Ed2a6d5DB30844AEC4F", + "logs": [ + { + "address": "0x449B90a14D1C1B9409758Ed2a6d5DB30844AEC4F", + "topics": [ + "0xc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d2" + ], + "data": "0x000000000000000000000000000000000000000000000000ffffffffffffffff", + "blockHash": "0xf18acb9586a151f22eb4a7b664a2358b71d3547d10933e805fd7080d9ac2cfab", + "blockNumber": "0x5845be", + "transactionHash": "0xc2fa7ccecb0e934b5be2cd457d6d4a93c8cf4faec4e85422dc7a3077787e1638", + "transactionIndex": "0x5", + "logIndex": "0x0" + } + ], + "status": "0x1", + "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000800000000000000000000000080000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000000000080000000000000000", + "type": "0x0", + "effectiveGasPrice": "0x3ef1480" + }, + "solcInputHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "storageLayout": { + "storage": [ + { + "astId": 60223, + "contract": "src/RewardDistributorRootstockCollective.sol:RewardDistributorRootstockCollective", + "label": "governanceManager", + "offset": 0, + "slot": "0", + "type": "t_contract(IGovernanceManagerRootstockCollective)60547" + }, + { + "astId": 60255, + "contract": "src/RewardDistributorRootstockCollective.sol:RewardDistributorRootstockCollective", + "label": "__gap", + "offset": 0, + "slot": "1", + "type": "t_array(t_uint256)50_storage" + }, + { + "astId": 58137, + "contract": "src/RewardDistributorRootstockCollective.sol:RewardDistributorRootstockCollective", + "label": "rewardToken", + "offset": 0, + "slot": "51", + "type": "t_contract(IERC20)2025" + }, + { + "astId": 58141, + "contract": "src/RewardDistributorRootstockCollective.sol:RewardDistributorRootstockCollective", + "label": "backersManager", + "offset": 0, + "slot": "52", + "type": "t_contract(BackersManagerRootstockCollective)56047" + }, + { + "astId": 58144, + "contract": "src/RewardDistributorRootstockCollective.sol:RewardDistributorRootstockCollective", + "label": "defaultRewardTokenAmount", + "offset": 0, + "slot": "53", + "type": "t_uint256" + }, + { + "astId": 58147, + "contract": "src/RewardDistributorRootstockCollective.sol:RewardDistributorRootstockCollective", + "label": "defaultRewardCoinbaseAmount", + "offset": 0, + "slot": "54", + "type": "t_uint256" + }, + { + "astId": 58327, + "contract": "src/RewardDistributorRootstockCollective.sol:RewardDistributorRootstockCollective", + "label": "__gap", + "offset": 0, + "slot": "55", + "type": "t_array(t_uint256)50_storage" + } + ], + "types": { + "t_array(t_uint256)50_storage": { + "encoding": "inplace", + "label": "uint256[50]", + "numberOfBytes": "1600", + "base": "t_uint256" + }, + "t_contract(BackersManagerRootstockCollective)56047": { + "encoding": "inplace", + "label": "contract BackersManagerRootstockCollective", + "numberOfBytes": "20" + }, + "t_contract(IERC20)2025": { + "encoding": "inplace", + "label": "contract IERC20", + "numberOfBytes": "20" + }, + "t_contract(IGovernanceManagerRootstockCollective)60547": { + "encoding": "inplace", + "label": "contract IGovernanceManagerRootstockCollective", + "numberOfBytes": "20" + }, + "t_uint256": { + "encoding": "inplace", + "label": "uint256", + "numberOfBytes": "32" + } + } + }, + "transactionHash": "0xc2fa7ccecb0e934b5be2cd457d6d4a93c8cf4faec4e85422dc7a3077787e1638", + "userdoc": { + "version": 1, + "kind": "user", + "methods": { + "backersManager()": { + "notice": "BackersManagerRootstockCollective contract address" + }, + "defaultRewardCoinbaseAmount()": { + "notice": "default reward coinbase amount" + }, + "defaultRewardTokenAmount()": { + "notice": "default reward token amount" + }, + "initialize(address)": { + "notice": "contract initializer" + }, + "initializeCollectiveRewardsAddresses(address)": { + "notice": "CollectiveRewards addresses initializer" + }, + "rewardToken()": { + "notice": "address of the token rewarded to builder and backers" + }, + "sendRewards(uint256,uint256)": { + "notice": "sends rewards to backersManager contract to be distributed to the gauges" + }, + "sendRewardsAndStartDistribution(uint256,uint256)": { + "notice": "sends rewards to backersManager contract and starts the distribution to the gauges" + }, + "sendRewardsAndStartDistributionWithDefaultAmount()": { + "notice": "sends rewards to backersManager contract with default amounts and starts the distribution" + }, + "sendRewardsWithDefaultAmount()": { + "notice": "sends rewards to backersManager contract with default amounts" + }, + "setDefaultRewardAmount(uint256,uint256)": { + "notice": "sets the default reward amounts" + } + }, + "notice": "Accumulates all the rewards to be distributed for each cycle" + } +} \ No newline at end of file diff --git a/deployments/testnet_qa/RewardDistributorRootstockCollectiveProxy.json b/deployments/testnet_qa/RewardDistributorRootstockCollectiveProxy.json new file mode 100644 index 00000000..879c535c --- /dev/null +++ b/deployments/testnet_qa/RewardDistributorRootstockCollectiveProxy.json @@ -0,0 +1,167 @@ +{ + "abi": [ + { + "type": "constructor", + "inputs": [ + { + "name": "implementation", + "type": "address", + "internalType": "address" + }, + { + "name": "_data", + "type": "bytes", + "internalType": "bytes" + } + ], + "stateMutability": "payable" + }, + { + "type": "fallback", + "stateMutability": "payable" + }, + { + "type": "event", + "name": "Upgraded", + "inputs": [ + { + "name": "implementation", + "type": "address", + "indexed": true, + "internalType": "address" + } + ], + "anonymous": false + }, + { + "type": "error", + "name": "AddressEmptyCode", + "inputs": [ + { + "name": "target", + "type": "address", + "internalType": "address" + } + ] + }, + { + "type": "error", + "name": "ERC1967InvalidImplementation", + "inputs": [ + { + "name": "implementation", + "type": "address", + "internalType": "address" + } + ] + }, + { + "type": "error", + "name": "ERC1967NonPayable", + "inputs": [] + }, + { + "type": "error", + "name": "FailedInnerCall", + "inputs": [] + } + ], + "address": "0x21CF4dA4C3059860c9871e31f96AdcFbD0704Ec0", + "args": [ + "0x449B90a14D1C1B9409758Ed2a6d5DB30844AEC4F", + "0xc4d66de8000000000000000000000000a49af345c57a303c75183d219232be7b2d027157" + ], + "bytecode": "0x60806040526040516103ee3803806103ee83398101604081905261002291610268565b61002c8282610033565b5050610352565b61003c82610092565b6040516001600160a01b038316907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a280511561008657610081828261010e565b505050565b61008e610185565b5050565b806001600160a01b03163b6000036100cd57604051634c9c8ce360e01b81526001600160a01b03821660048201526024015b60405180910390fd5b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc80546001600160a01b0319166001600160a01b0392909216919091179055565b6060600080846001600160a01b03168460405161012b9190610336565b600060405180830381855af49150503d8060008114610166576040519150601f19603f3d011682016040523d82523d6000602084013e61016b565b606091505b50909250905061017c8583836101a6565b95945050505050565b34156101a45760405163b398979f60e01b815260040160405180910390fd5b565b6060826101bb576101b682610205565b6101fe565b81511580156101d257506001600160a01b0384163b155b156101fb57604051639996b31560e01b81526001600160a01b03851660048201526024016100c4565b50805b9392505050565b8051156102155780518082602001fd5b604051630a12f52160e11b815260040160405180910390fd5b634e487b7160e01b600052604160045260246000fd5b60005b8381101561025f578181015183820152602001610247565b50506000910152565b6000806040838503121561027b57600080fd5b82516001600160a01b038116811461029257600080fd5b60208401519092506001600160401b03808211156102af57600080fd5b818501915085601f8301126102c357600080fd5b8151818111156102d5576102d561022e565b604051601f8201601f19908116603f011681019083821181831017156102fd576102fd61022e565b8160405282815288602084870101111561031657600080fd5b610327836020830160208801610244565b80955050505050509250929050565b60008251610348818460208701610244565b9190910192915050565b608e806103606000396000f3fe6080604052600a600c565b005b60186014601a565b605e565b565b600060597f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5473ffffffffffffffffffffffffffffffffffffffff1690565b905090565b3660008037600080366000845af43d6000803e808015607c573d6000f35b3d6000fdfea164736f6c6343000814000a", + "deployedBytecode": "0x6080604052600a600c565b005b60186014601a565b605e565b565b600060597f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5473ffffffffffffffffffffffffffffffffffffffff1690565b905090565b3660008037600080366000845af43d6000803e808015607c573d6000f35b3d6000fdfea164736f6c6343000814000a", + "devdoc": { + "version": 1, + "kind": "dev", + "details": "This contract implements an upgradeable proxy. It is upgradeable because calls are delegated to an implementation address that can be changed. This address is stored in storage in the location specified by https://eips.ethereum.org/EIPS/eip-1967[EIP1967], so that it doesn't conflict with the storage layout of the implementation behind the proxy.", + "methods": { + "constructor": { + "details": "Initializes the upgradeable proxy with an initial implementation specified by `implementation`. If `_data` is nonempty, it's used as data in a delegate call to `implementation`. This will typically be an encoded function call, and allows initializing the storage of the proxy like a Solidity constructor. Requirements: - If `data` is empty, `msg.value` must be zero." + } + }, + "events": { + "Upgraded(address)": { + "details": "Emitted when the implementation is upgraded." + } + }, + "errors": { + "AddressEmptyCode(address)": [ + { + "details": "There's no code at `target` (it is not a contract)." + } + ], + "ERC1967InvalidImplementation(address)": [ + { + "details": "The `implementation` of the proxy is invalid." + } + ], + "ERC1967NonPayable()": [ + { + "details": "An upgrade function sees `msg.value > 0` that may be lost." + } + ], + "FailedInnerCall()": [ + { + "details": "A call to an address target failed. The target may have reverted." + } + ] + } + }, + "metadata": "{\"compiler\":{\"version\":\"0.8.20+commit.a1b79de6\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"address\",\"name\":\"implementation\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"_data\",\"type\":\"bytes\"}],\"stateMutability\":\"payable\",\"type\":\"constructor\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"target\",\"type\":\"address\"}],\"type\":\"error\",\"name\":\"AddressEmptyCode\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"implementation\",\"type\":\"address\"}],\"type\":\"error\",\"name\":\"ERC1967InvalidImplementation\"},{\"inputs\":[],\"type\":\"error\",\"name\":\"ERC1967NonPayable\"},{\"inputs\":[],\"type\":\"error\",\"name\":\"FailedInnerCall\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"implementation\",\"type\":\"address\",\"indexed\":true}],\"type\":\"event\",\"name\":\"Upgraded\",\"anonymous\":false},{\"inputs\":[],\"stateMutability\":\"payable\",\"type\":\"fallback\"}],\"devdoc\":{\"kind\":\"dev\",\"methods\":{\"constructor\":{\"details\":\"Initializes the upgradeable proxy with an initial implementation specified by `implementation`. If `_data` is nonempty, it's used as data in a delegate call to `implementation`. This will typically be an encoded function call, and allows initializing the storage of the proxy like a Solidity constructor. Requirements: - If `data` is empty, `msg.value` must be zero.\"}},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"remappings\":[\"@openzeppelin/contracts-upgradeable/=node_modules/@openzeppelin/contracts-upgradeable/\",\"@openzeppelin/contracts/=node_modules/@openzeppelin/contracts/\",\"eth-gas-reporter/=node_modules/eth-gas-reporter/\",\"forge-std/=node_modules/forge-std/\",\"hardhat/=node_modules/hardhat/\"],\"optimizer\":{\"enabled\":true,\"runs\":10000},\"metadata\":{\"bytecodeHash\":\"none\"},\"compilationTarget\":{\"node_modules/@openzeppelin/contracts/proxy/ERC1967/ERC1967Proxy.sol\":\"ERC1967Proxy\"},\"evmVersion\":\"london\",\"libraries\":{}},\"sources\":{\"node_modules/@openzeppelin/contracts/proxy/ERC1967/ERC1967Proxy.sol\":{\"keccak256\":\"0xbfb6695731de677140fbf76c772ab08c4233a122fb51ac28ac120fc49bbbc4ec\",\"urls\":[\"bzz-raw://68f8fded7cc318efa15874b7c6a983fe17a4a955d72d240353a9a4ca1e1b824c\",\"dweb:/ipfs/QmdcmBL9Qo4Tk3Dby4wFYabGyot9JNeLPxpSXZUgUm92BV\"],\"license\":\"MIT\"},\"node_modules/@openzeppelin/contracts/proxy/ERC1967/ERC1967Utils.sol\":{\"keccak256\":\"0x06a78f9b3ee3e6d0eb4e4cd635ba49960bea34cac1db8c0a27c75f2319f1fd65\",\"urls\":[\"bzz-raw://547d21aa17f4f3f1a1a7edf7167beff8dd9496a0348d5588f15cc8a4b29d052a\",\"dweb:/ipfs/QmT16JtRQSWNpLo9W23jr6CzaMuTAcQcjJJcdRd8HLJ6cE\"],\"license\":\"MIT\"},\"node_modules/@openzeppelin/contracts/proxy/Proxy.sol\":{\"keccak256\":\"0xc3f2ec76a3de8ed7a7007c46166f5550c72c7709e3fc7e8bb3111a7191cdedbd\",\"urls\":[\"bzz-raw://e73efb4c2ca655882dc237c6b4f234a9bd36d97159d8fcaa837eb01171f726ac\",\"dweb:/ipfs/QmTNnnv7Gu5fs5G1ZMh7Fexp8N4XUs3XrNAngjcxgiss3e\"],\"license\":\"MIT\"},\"node_modules/@openzeppelin/contracts/proxy/beacon/IBeacon.sol\":{\"keccak256\":\"0xc59a78b07b44b2cf2e8ab4175fca91e8eca1eee2df7357b8d2a8833e5ea1f64c\",\"urls\":[\"bzz-raw://5aa4f07e65444784c29cd7bfcc2341b34381e4e5b5da9f0c5bd00d7f430e66fa\",\"dweb:/ipfs/QmWRMh4Q9DpaU9GvsiXmDdoNYMyyece9if7hnfLz7uqzWM\"],\"license\":\"MIT\"},\"node_modules/@openzeppelin/contracts/utils/Address.sol\":{\"keccak256\":\"0xaf28a975a78550e45f65e559a3ad6a5ad43b9b8a37366999abd1b7084eb70721\",\"urls\":[\"bzz-raw://b7bd24e224f67f65bfadf85dc2929fa965456bb2415478bd0125471b5ce35245\",\"dweb:/ipfs/QmRaydGr8BTHs1kvaZfsNU69pKzUAGFrvABn1KiRSbE51y\"],\"license\":\"MIT\"},\"node_modules/@openzeppelin/contracts/utils/StorageSlot.sol\":{\"keccak256\":\"0x32ba59b4b7299237c8ba56319110989d7978a039faf754793064e967e5894418\",\"urls\":[\"bzz-raw://1ae50c8b562427df610cc4540c9bf104acca7ef8e2dcae567ae7e52272281e9c\",\"dweb:/ipfs/QmTHiadFCSJUPpRjNegc5SahmeU8bAoY8i9Aq6tVscbcKR\"],\"license\":\"MIT\"}},\"version\":1}", + "numDeployments": 3, + "receipt": { + "transactionHash": "0xe17bce07f075b2649eb1473da6504cf61b99f7da959467a0808077f9792712eb", + "transactionIndex": "0x6", + "blockHash": "0xf18acb9586a151f22eb4a7b664a2358b71d3547d10933e805fd7080d9ac2cfab", + "blockNumber": "0x5845be", + "from": "0xCB8F8130E289946aec9a17b29819716B1E9e4998", + "to": null, + "cumulativeGasUsed": "0x595195", + "gasUsed": "0x2b199", + "contractAddress": "0x21CF4dA4C3059860c9871e31f96AdcFbD0704Ec0", + "logs": [ + { + "address": "0x21CF4dA4C3059860c9871e31f96AdcFbD0704Ec0", + "topics": [ + "0xbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b", + "0x000000000000000000000000449b90a14d1c1b9409758ed2a6d5db30844aec4f" + ], + "data": "0x", + "blockHash": "0xf18acb9586a151f22eb4a7b664a2358b71d3547d10933e805fd7080d9ac2cfab", + "blockNumber": "0x5845be", + "transactionHash": "0xe17bce07f075b2649eb1473da6504cf61b99f7da959467a0808077f9792712eb", + "transactionIndex": "0x6", + "logIndex": "0x0" + }, + { + "address": "0x21CF4dA4C3059860c9871e31f96AdcFbD0704Ec0", + "topics": [ + "0xc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d2" + ], + "data": "0x0000000000000000000000000000000000000000000000000000000000000001", + "blockHash": "0xf18acb9586a151f22eb4a7b664a2358b71d3547d10933e805fd7080d9ac2cfab", + "blockNumber": "0x5845be", + "transactionHash": "0xe17bce07f075b2649eb1473da6504cf61b99f7da959467a0808077f9792712eb", + "transactionIndex": "0x6", + "logIndex": "0x1" + } + ], + "status": "0x1", + "logsBloom": "0x00000000000000000000000000000000400000000000000000000000000000000000000000000000000000000000000000000000000000000000000400000000000000000000000000000000000002000000100000000000000000040000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800000000000000000000000080000000000000000000000000000000000000000000040000000000000000000000000000000000000000000020000000000000000000000000000000000004000000000000000000000000000000000004000000000000000000000000000800000000000000000000", + "type": "0x0", + "effectiveGasPrice": "0x3ef1480" + }, + "solcInputHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "storageLayout": { + "storage": [], + "types": {} + }, + "transactionHash": "0xe17bce07f075b2649eb1473da6504cf61b99f7da959467a0808077f9792712eb", + "userdoc": { + "version": 1, + "kind": "user" + } +} \ No newline at end of file diff --git a/deployments/testnet_qa/contract_addresses.json b/deployments/testnet_qa/contract_addresses.json new file mode 100644 index 00000000..a85d5bcd --- /dev/null +++ b/deployments/testnet_qa/contract_addresses.json @@ -0,0 +1,10 @@ +{ + "BackersManagerRootstockCollective": "0xeAdca815D145f3E3a69f9d4B086391ECE2CC6fe6", + "BackersManagerRootstockCollectiveProxy": "0x65e313474cC038782fF89581eD60bc2431794A33", + "GaugeBeaconRootstockCollective": "0xBf45113ac533206ca5bE16f5a500FBf0d9CB95d6", + "GaugeFactoryRootstockCollective": "0xa92a5673613361fAc3f93bB90B77744038751a5f", + "GovernanceManagerRootstockCollective": "0x97d73578C78CdB9aeb82fB658cBdA6c5a28D7939", + "GovernanceManagerRootstockCollectiveProxy": "0xa49Af345c57A303C75183d219232Be7b2d027157", + "RewardDistributorRootstockCollective": "0x449B90a14D1C1B9409758Ed2a6d5DB30844AEC4F", + "RewardDistributorRootstockCollectiveProxy": "0x21CF4dA4C3059860c9871e31f96AdcFbD0704Ec0" +} \ No newline at end of file diff --git a/deployments/testnet_qa_dapp/BackersManagerRootstockCollective.json b/deployments/testnet_qa_dapp/BackersManagerRootstockCollective.json new file mode 100644 index 00000000..eee8d23f --- /dev/null +++ b/deployments/testnet_qa_dapp/BackersManagerRootstockCollective.json @@ -0,0 +1,2898 @@ +{ + "abi": [ + { + "type": "constructor", + "inputs": [], + "stateMutability": "nonpayable" + }, + { + "type": "function", + "name": "UPGRADE_INTERFACE_VERSION", + "inputs": [], + "outputs": [ + { + "name": "", + "type": "string", + "internalType": "string" + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "activateBuilder", + "inputs": [ + { + "name": "builder_", + "type": "address", + "internalType": "address" + }, + { + "name": "rewardReceiver_", + "type": "address", + "internalType": "address" + }, + { + "name": "rewardPercentage_", + "type": "uint64", + "internalType": "uint64" + } + ], + "outputs": [], + "stateMutability": "nonpayable" + }, + { + "type": "function", + "name": "allocate", + "inputs": [ + { + "name": "gauge_", + "type": "address", + "internalType": "contract GaugeRootstockCollective" + }, + { + "name": "allocation_", + "type": "uint256", + "internalType": "uint256" + } + ], + "outputs": [], + "stateMutability": "nonpayable" + }, + { + "type": "function", + "name": "allocateBatch", + "inputs": [ + { + "name": "gauges_", + "type": "address[]", + "internalType": "contract GaugeRootstockCollective[]" + }, + { + "name": "allocations_", + "type": "uint256[]", + "internalType": "uint256[]" + } + ], + "outputs": [], + "stateMutability": "nonpayable" + }, + { + "type": "function", + "name": "approveBuidlerRewardReceiverReplacement", + "inputs": [ + { + "name": "builder_", + "type": "address", + "internalType": "address" + }, + { + "name": "rewardReceiverReplacement_", + "type": "address", + "internalType": "address" + } + ], + "outputs": [], + "stateMutability": "nonpayable" + }, + { + "type": "function", + "name": "approveBuilderKYC", + "inputs": [ + { + "name": "builder_", + "type": "address", + "internalType": "address" + } + ], + "outputs": [], + "stateMutability": "nonpayable" + }, + { + "type": "function", + "name": "backerRewardPercentage", + "inputs": [ + { + "name": "builder", + "type": "address", + "internalType": "address" + } + ], + "outputs": [ + { + "name": "previous", + "type": "uint64", + "internalType": "uint64" + }, + { + "name": "next", + "type": "uint64", + "internalType": "uint64" + }, + { + "name": "cooldownEndTime", + "type": "uint128", + "internalType": "uint128" + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "backerTotalAllocation", + "inputs": [ + { + "name": "backer", + "type": "address", + "internalType": "address" + } + ], + "outputs": [ + { + "name": "allocation", + "type": "uint256", + "internalType": "uint256" + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "builderRewardReceiver", + "inputs": [ + { + "name": "builder", + "type": "address", + "internalType": "address" + } + ], + "outputs": [ + { + "name": "rewardReceiver", + "type": "address", + "internalType": "address" + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "builderRewardReceiverReplacement", + "inputs": [ + { + "name": "builder", + "type": "address", + "internalType": "address" + } + ], + "outputs": [ + { + "name": "rewardReceiverReplacement", + "type": "address", + "internalType": "address" + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "builderState", + "inputs": [ + { + "name": "builder", + "type": "address", + "internalType": "address" + } + ], + "outputs": [ + { + "name": "activated", + "type": "bool", + "internalType": "bool" + }, + { + "name": "kycApproved", + "type": "bool", + "internalType": "bool" + }, + { + "name": "communityApproved", + "type": "bool", + "internalType": "bool" + }, + { + "name": "paused", + "type": "bool", + "internalType": "bool" + }, + { + "name": "revoked", + "type": "bool", + "internalType": "bool" + }, + { + "name": "reserved", + "type": "bytes7", + "internalType": "bytes7" + }, + { + "name": "pausedReason", + "type": "bytes20", + "internalType": "bytes20" + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "builderToGauge", + "inputs": [ + { + "name": "builder", + "type": "address", + "internalType": "address" + } + ], + "outputs": [ + { + "name": "gauge", + "type": "address", + "internalType": "contract GaugeRootstockCollective" + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "canWithdraw", + "inputs": [ + { + "name": "targetAddress_", + "type": "address", + "internalType": "address" + }, + { + "name": "", + "type": "uint256", + "internalType": "uint256" + } + ], + "outputs": [ + { + "name": "", + "type": "bool", + "internalType": "bool" + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "cancelRewardReceiverReplacementRequest", + "inputs": [], + "outputs": [], + "stateMutability": "nonpayable" + }, + { + "type": "function", + "name": "claimBackerRewards", + "inputs": [ + { + "name": "gauges_", + "type": "address[]", + "internalType": "contract GaugeRootstockCollective[]" + } + ], + "outputs": [], + "stateMutability": "nonpayable" + }, + { + "type": "function", + "name": "claimBackerRewards", + "inputs": [ + { + "name": "rewardToken_", + "type": "address", + "internalType": "address" + }, + { + "name": "gauges_", + "type": "address[]", + "internalType": "contract GaugeRootstockCollective[]" + } + ], + "outputs": [], + "stateMutability": "nonpayable" + }, + { + "type": "function", + "name": "communityApproveBuilder", + "inputs": [ + { + "name": "builder_", + "type": "address", + "internalType": "address" + } + ], + "outputs": [ + { + "name": "gauge_", + "type": "address", + "internalType": "contract GaugeRootstockCollective" + } + ], + "stateMutability": "nonpayable" + }, + { + "type": "function", + "name": "cycleData", + "inputs": [], + "outputs": [ + { + "name": "previousDuration", + "type": "uint32", + "internalType": "uint32" + }, + { + "name": "nextDuration", + "type": "uint32", + "internalType": "uint32" + }, + { + "name": "previousStart", + "type": "uint64", + "internalType": "uint64" + }, + { + "name": "nextStart", + "type": "uint64", + "internalType": "uint64" + }, + { + "name": "offset", + "type": "uint24", + "internalType": "uint24" + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "cycleNext", + "inputs": [ + { + "name": "timestamp_", + "type": "uint256", + "internalType": "uint256" + } + ], + "outputs": [ + { + "name": "", + "type": "uint256", + "internalType": "uint256" + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "cycleStart", + "inputs": [ + { + "name": "timestamp_", + "type": "uint256", + "internalType": "uint256" + } + ], + "outputs": [ + { + "name": "", + "type": "uint256", + "internalType": "uint256" + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "dewhitelistBuilder", + "inputs": [ + { + "name": "builder_", + "type": "address", + "internalType": "address" + } + ], + "outputs": [], + "stateMutability": "nonpayable" + }, + { + "type": "function", + "name": "distribute", + "inputs": [], + "outputs": [ + { + "name": "finished_", + "type": "bool", + "internalType": "bool" + } + ], + "stateMutability": "nonpayable" + }, + { + "type": "function", + "name": "distributionDuration", + "inputs": [], + "outputs": [ + { + "name": "", + "type": "uint32", + "internalType": "uint32" + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "endDistributionWindow", + "inputs": [ + { + "name": "timestamp_", + "type": "uint256", + "internalType": "uint256" + } + ], + "outputs": [ + { + "name": "", + "type": "uint256", + "internalType": "uint256" + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "gaugeFactory", + "inputs": [], + "outputs": [ + { + "name": "", + "type": "address", + "internalType": "contract GaugeFactoryRootstockCollective" + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "gaugeToBuilder", + "inputs": [ + { + "name": "gauge", + "type": "address", + "internalType": "contract GaugeRootstockCollective" + } + ], + "outputs": [ + { + "name": "builder", + "type": "address", + "internalType": "address" + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "getCycleStartAndDuration", + "inputs": [], + "outputs": [ + { + "name": "", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "", + "type": "uint256", + "internalType": "uint256" + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "getGaugeAt", + "inputs": [ + { + "name": "index_", + "type": "uint256", + "internalType": "uint256" + } + ], + "outputs": [ + { + "name": "", + "type": "address", + "internalType": "address" + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "getGaugesLength", + "inputs": [], + "outputs": [ + { + "name": "", + "type": "uint256", + "internalType": "uint256" + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "getHaltedGaugeAt", + "inputs": [ + { + "name": "index_", + "type": "uint256", + "internalType": "uint256" + } + ], + "outputs": [ + { + "name": "", + "type": "address", + "internalType": "address" + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "getHaltedGaugesLength", + "inputs": [], + "outputs": [ + { + "name": "", + "type": "uint256", + "internalType": "uint256" + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "getRewardPercentageToApply", + "inputs": [ + { + "name": "builder_", + "type": "address", + "internalType": "address" + } + ], + "outputs": [ + { + "name": "", + "type": "uint64", + "internalType": "uint64" + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "governanceManager", + "inputs": [], + "outputs": [ + { + "name": "", + "type": "address", + "internalType": "contract IGovernanceManagerRootstockCollective" + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "haltedGaugeLastPeriodFinish", + "inputs": [ + { + "name": "gauge", + "type": "address", + "internalType": "contract GaugeRootstockCollective" + } + ], + "outputs": [ + { + "name": "lastPeriodFinish", + "type": "uint256", + "internalType": "uint256" + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "hasBuilderRewardReceiverPendingApproval", + "inputs": [ + { + "name": "builder_", + "type": "address", + "internalType": "address" + } + ], + "outputs": [ + { + "name": "", + "type": "bool", + "internalType": "bool" + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "indexLastGaugeDistributed", + "inputs": [], + "outputs": [ + { + "name": "", + "type": "uint256", + "internalType": "uint256" + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "initialize", + "inputs": [ + { + "name": "governanceManager_", + "type": "address", + "internalType": "contract IGovernanceManagerRootstockCollective" + }, + { + "name": "rewardToken_", + "type": "address", + "internalType": "address" + }, + { + "name": "stakingToken_", + "type": "address", + "internalType": "address" + }, + { + "name": "gaugeFactory_", + "type": "address", + "internalType": "address" + }, + { + "name": "rewardDistributor_", + "type": "address", + "internalType": "address" + }, + { + "name": "cycleDuration_", + "type": "uint32", + "internalType": "uint32" + }, + { + "name": "cycleStartOffset_", + "type": "uint24", + "internalType": "uint24" + }, + { + "name": "distributionDuration_", + "type": "uint32", + "internalType": "uint32" + }, + { + "name": "rewardPercentageCooldown_", + "type": "uint128", + "internalType": "uint128" + } + ], + "outputs": [], + "stateMutability": "nonpayable" + }, + { + "type": "function", + "name": "isBuilderOperational", + "inputs": [ + { + "name": "builder_", + "type": "address", + "internalType": "address" + } + ], + "outputs": [ + { + "name": "", + "type": "bool", + "internalType": "bool" + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "isBuilderPaused", + "inputs": [ + { + "name": "builder_", + "type": "address", + "internalType": "address" + } + ], + "outputs": [ + { + "name": "", + "type": "bool", + "internalType": "bool" + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "isGaugeHalted", + "inputs": [ + { + "name": "gauge_", + "type": "address", + "internalType": "address" + } + ], + "outputs": [ + { + "name": "", + "type": "bool", + "internalType": "bool" + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "isGaugeOperational", + "inputs": [ + { + "name": "gauge_", + "type": "address", + "internalType": "contract GaugeRootstockCollective" + } + ], + "outputs": [ + { + "name": "", + "type": "bool", + "internalType": "bool" + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "isGaugeRewarded", + "inputs": [ + { + "name": "gauge_", + "type": "address", + "internalType": "address" + } + ], + "outputs": [ + { + "name": "", + "type": "bool", + "internalType": "bool" + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "migrateBuilder", + "inputs": [ + { + "name": "builder_", + "type": "address", + "internalType": "address" + }, + { + "name": "rewardAddress_", + "type": "address", + "internalType": "address" + }, + { + "name": "rewardPercentage_", + "type": "uint64", + "internalType": "uint64" + } + ], + "outputs": [], + "stateMutability": "nonpayable" + }, + { + "type": "function", + "name": "notifyRewardAmount", + "inputs": [ + { + "name": "amount_", + "type": "uint256", + "internalType": "uint256" + } + ], + "outputs": [], + "stateMutability": "payable" + }, + { + "type": "function", + "name": "onDistributionPeriod", + "inputs": [], + "outputs": [ + { + "name": "", + "type": "bool", + "internalType": "bool" + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "pauseBuilder", + "inputs": [ + { + "name": "builder_", + "type": "address", + "internalType": "address" + }, + { + "name": "reason_", + "type": "bytes20", + "internalType": "bytes20" + } + ], + "outputs": [], + "stateMutability": "nonpayable" + }, + { + "type": "function", + "name": "periodFinish", + "inputs": [], + "outputs": [ + { + "name": "", + "type": "uint256", + "internalType": "uint256" + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "permitBuilder", + "inputs": [ + { + "name": "rewardPercentage_", + "type": "uint64", + "internalType": "uint64" + } + ], + "outputs": [], + "stateMutability": "nonpayable" + }, + { + "type": "function", + "name": "proxiableUUID", + "inputs": [], + "outputs": [ + { + "name": "", + "type": "bytes32", + "internalType": "bytes32" + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "revokeBuilder", + "inputs": [], + "outputs": [], + "stateMutability": "nonpayable" + }, + { + "type": "function", + "name": "revokeBuilderKYC", + "inputs": [ + { + "name": "builder_", + "type": "address", + "internalType": "address" + } + ], + "outputs": [], + "stateMutability": "nonpayable" + }, + { + "type": "function", + "name": "rewardDistributor", + "inputs": [], + "outputs": [ + { + "name": "", + "type": "address", + "internalType": "address" + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "rewardPercentageCooldown", + "inputs": [], + "outputs": [ + { + "name": "", + "type": "uint128", + "internalType": "uint128" + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "rewardToken", + "inputs": [], + "outputs": [ + { + "name": "", + "type": "address", + "internalType": "address" + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "rewardsCoinbase", + "inputs": [], + "outputs": [ + { + "name": "", + "type": "uint256", + "internalType": "uint256" + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "rewardsERC20", + "inputs": [], + "outputs": [ + { + "name": "", + "type": "uint256", + "internalType": "uint256" + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "setBackerRewardPercentage", + "inputs": [ + { + "name": "rewardPercentage_", + "type": "uint64", + "internalType": "uint64" + } + ], + "outputs": [], + "stateMutability": "nonpayable" + }, + { + "type": "function", + "name": "setCycleDuration", + "inputs": [ + { + "name": "newCycleDuration_", + "type": "uint32", + "internalType": "uint32" + }, + { + "name": "cycleStartOffset_", + "type": "uint24", + "internalType": "uint24" + } + ], + "outputs": [], + "stateMutability": "nonpayable" + }, + { + "type": "function", + "name": "setDistributionDuration", + "inputs": [ + { + "name": "newDistributionDuration_", + "type": "uint32", + "internalType": "uint32" + } + ], + "outputs": [], + "stateMutability": "nonpayable" + }, + { + "type": "function", + "name": "stakingToken", + "inputs": [], + "outputs": [ + { + "name": "", + "type": "address", + "internalType": "contract IERC20" + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "startDistribution", + "inputs": [], + "outputs": [ + { + "name": "finished_", + "type": "bool", + "internalType": "bool" + } + ], + "stateMutability": "nonpayable" + }, + { + "type": "function", + "name": "submitRewardReceiverReplacementRequest", + "inputs": [ + { + "name": "newRewardReceiver_", + "type": "address", + "internalType": "address" + } + ], + "outputs": [], + "stateMutability": "nonpayable" + }, + { + "type": "function", + "name": "supportsInterface", + "inputs": [ + { + "name": "interfaceId_", + "type": "bytes4", + "internalType": "bytes4" + } + ], + "outputs": [ + { + "name": "", + "type": "bool", + "internalType": "bool" + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "tempTotalPotentialReward", + "inputs": [], + "outputs": [ + { + "name": "", + "type": "uint256", + "internalType": "uint256" + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "timeUntilNextCycle", + "inputs": [ + { + "name": "timestamp_", + "type": "uint256", + "internalType": "uint256" + } + ], + "outputs": [ + { + "name": "", + "type": "uint256", + "internalType": "uint256" + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "totalPotentialReward", + "inputs": [], + "outputs": [ + { + "name": "", + "type": "uint256", + "internalType": "uint256" + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "unpauseBuilder", + "inputs": [ + { + "name": "builder_", + "type": "address", + "internalType": "address" + } + ], + "outputs": [], + "stateMutability": "nonpayable" + }, + { + "type": "function", + "name": "upgradeToAndCall", + "inputs": [ + { + "name": "newImplementation", + "type": "address", + "internalType": "address" + }, + { + "name": "data", + "type": "bytes", + "internalType": "bytes" + } + ], + "outputs": [], + "stateMutability": "payable" + }, + { + "type": "event", + "name": "BackerRewardPercentageUpdateScheduled", + "inputs": [ + { + "name": "builder_", + "type": "address", + "indexed": true, + "internalType": "address" + }, + { + "name": "rewardPercentage_", + "type": "uint256", + "indexed": false, + "internalType": "uint256" + }, + { + "name": "cooldown_", + "type": "uint256", + "indexed": false, + "internalType": "uint256" + } + ], + "anonymous": false + }, + { + "type": "event", + "name": "BuilderActivated", + "inputs": [ + { + "name": "builder_", + "type": "address", + "indexed": true, + "internalType": "address" + }, + { + "name": "rewardReceiver_", + "type": "address", + "indexed": false, + "internalType": "address" + }, + { + "name": "rewardPercentage_", + "type": "uint64", + "indexed": false, + "internalType": "uint64" + } + ], + "anonymous": false + }, + { + "type": "event", + "name": "BuilderMigrated", + "inputs": [ + { + "name": "builder_", + "type": "address", + "indexed": true, + "internalType": "address" + }, + { + "name": "migrator_", + "type": "address", + "indexed": true, + "internalType": "address" + } + ], + "anonymous": false + }, + { + "type": "event", + "name": "BuilderRewardReceiverReplacementApproved", + "inputs": [ + { + "name": "builder_", + "type": "address", + "indexed": true, + "internalType": "address" + }, + { + "name": "newRewardReceiver_", + "type": "address", + "indexed": false, + "internalType": "address" + } + ], + "anonymous": false + }, + { + "type": "event", + "name": "BuilderRewardReceiverReplacementCancelled", + "inputs": [ + { + "name": "builder_", + "type": "address", + "indexed": true, + "internalType": "address" + }, + { + "name": "newRewardReceiver_", + "type": "address", + "indexed": false, + "internalType": "address" + } + ], + "anonymous": false + }, + { + "type": "event", + "name": "BuilderRewardReceiverReplacementRequested", + "inputs": [ + { + "name": "builder_", + "type": "address", + "indexed": true, + "internalType": "address" + }, + { + "name": "newRewardReceiver_", + "type": "address", + "indexed": false, + "internalType": "address" + } + ], + "anonymous": false + }, + { + "type": "event", + "name": "CommunityApproved", + "inputs": [ + { + "name": "builder_", + "type": "address", + "indexed": true, + "internalType": "address" + } + ], + "anonymous": false + }, + { + "type": "event", + "name": "Dewhitelisted", + "inputs": [ + { + "name": "builder_", + "type": "address", + "indexed": true, + "internalType": "address" + } + ], + "anonymous": false + }, + { + "type": "event", + "name": "GaugeCreated", + "inputs": [ + { + "name": "builder_", + "type": "address", + "indexed": true, + "internalType": "address" + }, + { + "name": "gauge_", + "type": "address", + "indexed": true, + "internalType": "address" + }, + { + "name": "creator_", + "type": "address", + "indexed": false, + "internalType": "address" + } + ], + "anonymous": false + }, + { + "type": "event", + "name": "Initialized", + "inputs": [ + { + "name": "version", + "type": "uint64", + "indexed": false, + "internalType": "uint64" + } + ], + "anonymous": false + }, + { + "type": "event", + "name": "KYCApproved", + "inputs": [ + { + "name": "builder_", + "type": "address", + "indexed": true, + "internalType": "address" + } + ], + "anonymous": false + }, + { + "type": "event", + "name": "KYCRevoked", + "inputs": [ + { + "name": "builder_", + "type": "address", + "indexed": true, + "internalType": "address" + } + ], + "anonymous": false + }, + { + "type": "event", + "name": "NewAllocation", + "inputs": [ + { + "name": "backer_", + "type": "address", + "indexed": true, + "internalType": "address" + }, + { + "name": "gauge_", + "type": "address", + "indexed": true, + "internalType": "address" + }, + { + "name": "allocation_", + "type": "uint256", + "indexed": false, + "internalType": "uint256" + } + ], + "anonymous": false + }, + { + "type": "event", + "name": "NewCycleDurationScheduled", + "inputs": [ + { + "name": "newCycleDuration_", + "type": "uint256", + "indexed": false, + "internalType": "uint256" + }, + { + "name": "cooldownEndTime_", + "type": "uint256", + "indexed": false, + "internalType": "uint256" + } + ], + "anonymous": false + }, + { + "type": "event", + "name": "NewDistributionDuration", + "inputs": [ + { + "name": "newDistributionDuration_", + "type": "uint256", + "indexed": false, + "internalType": "uint256" + }, + { + "name": "by_", + "type": "address", + "indexed": false, + "internalType": "address" + } + ], + "anonymous": false + }, + { + "type": "event", + "name": "NotifyReward", + "inputs": [ + { + "name": "rewardToken_", + "type": "address", + "indexed": true, + "internalType": "address" + }, + { + "name": "sender_", + "type": "address", + "indexed": true, + "internalType": "address" + }, + { + "name": "amount_", + "type": "uint256", + "indexed": false, + "internalType": "uint256" + } + ], + "anonymous": false + }, + { + "type": "event", + "name": "Paused", + "inputs": [ + { + "name": "builder_", + "type": "address", + "indexed": true, + "internalType": "address" + }, + { + "name": "reason_", + "type": "bytes20", + "indexed": false, + "internalType": "bytes20" + } + ], + "anonymous": false + }, + { + "type": "event", + "name": "Permitted", + "inputs": [ + { + "name": "builder_", + "type": "address", + "indexed": true, + "internalType": "address" + }, + { + "name": "rewardPercentage_", + "type": "uint256", + "indexed": false, + "internalType": "uint256" + }, + { + "name": "cooldown_", + "type": "uint256", + "indexed": false, + "internalType": "uint256" + } + ], + "anonymous": false + }, + { + "type": "event", + "name": "Revoked", + "inputs": [ + { + "name": "builder_", + "type": "address", + "indexed": true, + "internalType": "address" + } + ], + "anonymous": false + }, + { + "type": "event", + "name": "RewardDistributed", + "inputs": [ + { + "name": "sender_", + "type": "address", + "indexed": true, + "internalType": "address" + } + ], + "anonymous": false + }, + { + "type": "event", + "name": "RewardDistributionFinished", + "inputs": [ + { + "name": "sender_", + "type": "address", + "indexed": true, + "internalType": "address" + } + ], + "anonymous": false + }, + { + "type": "event", + "name": "RewardDistributionStarted", + "inputs": [ + { + "name": "sender_", + "type": "address", + "indexed": true, + "internalType": "address" + } + ], + "anonymous": false + }, + { + "type": "event", + "name": "Unpaused", + "inputs": [ + { + "name": "builder_", + "type": "address", + "indexed": true, + "internalType": "address" + } + ], + "anonymous": false + }, + { + "type": "event", + "name": "Upgraded", + "inputs": [ + { + "name": "implementation", + "type": "address", + "indexed": true, + "internalType": "address" + } + ], + "anonymous": false + }, + { + "type": "error", + "name": "AddressEmptyCode", + "inputs": [ + { + "name": "target", + "type": "address", + "internalType": "address" + } + ] + }, + { + "type": "error", + "name": "AddressInsufficientBalance", + "inputs": [ + { + "name": "account", + "type": "address", + "internalType": "address" + } + ] + }, + { + "type": "error", + "name": "AlreadyActivated", + "inputs": [] + }, + { + "type": "error", + "name": "AlreadyCommunityApproved", + "inputs": [] + }, + { + "type": "error", + "name": "AlreadyKYCApproved", + "inputs": [] + }, + { + "type": "error", + "name": "AlreadyRevoked", + "inputs": [] + }, + { + "type": "error", + "name": "BeforeDistribution", + "inputs": [] + }, + { + "type": "error", + "name": "BuilderAlreadyExists", + "inputs": [] + }, + { + "type": "error", + "name": "BuilderDoesNotExist", + "inputs": [] + }, + { + "type": "error", + "name": "CycleDurationTooShort", + "inputs": [] + }, + { + "type": "error", + "name": "DistributionDurationTooLong", + "inputs": [] + }, + { + "type": "error", + "name": "DistributionDurationTooShort", + "inputs": [] + }, + { + "type": "error", + "name": "DistributionModifiedDuringDistributionWindow", + "inputs": [] + }, + { + "type": "error", + "name": "DistributionPeriodDidNotStart", + "inputs": [] + }, + { + "type": "error", + "name": "ERC1967InvalidImplementation", + "inputs": [ + { + "name": "implementation", + "type": "address", + "internalType": "address" + } + ] + }, + { + "type": "error", + "name": "ERC1967NonPayable", + "inputs": [] + }, + { + "type": "error", + "name": "FailedInnerCall", + "inputs": [] + }, + { + "type": "error", + "name": "GaugeDoesNotExist", + "inputs": [] + }, + { + "type": "error", + "name": "InvalidBackerRewardPercentage", + "inputs": [] + }, + { + "type": "error", + "name": "InvalidBuilderRewardReceiver", + "inputs": [] + }, + { + "type": "error", + "name": "InvalidInitialization", + "inputs": [] + }, + { + "type": "error", + "name": "NoGaugesForDistribution", + "inputs": [] + }, + { + "type": "error", + "name": "NotActivated", + "inputs": [] + }, + { + "type": "error", + "name": "NotCommunityApproved", + "inputs": [] + }, + { + "type": "error", + "name": "NotEnoughStaking", + "inputs": [] + }, + { + "type": "error", + "name": "NotInDistributionPeriod", + "inputs": [] + }, + { + "type": "error", + "name": "NotInitializing", + "inputs": [] + }, + { + "type": "error", + "name": "NotKYCApproved", + "inputs": [] + }, + { + "type": "error", + "name": "NotOperational", + "inputs": [] + }, + { + "type": "error", + "name": "NotPaused", + "inputs": [] + }, + { + "type": "error", + "name": "NotRevoked", + "inputs": [] + }, + { + "type": "error", + "name": "NotValidChangerOrFoundation", + "inputs": [] + }, + { + "type": "error", + "name": "OnlyInDistributionWindow", + "inputs": [] + }, + { + "type": "error", + "name": "PositiveAllocationOnHaltedGauge", + "inputs": [] + }, + { + "type": "error", + "name": "SafeERC20FailedOperation", + "inputs": [ + { + "name": "token", + "type": "address", + "internalType": "address" + } + ] + }, + { + "type": "error", + "name": "UUPSUnauthorizedCallContext", + "inputs": [] + }, + { + "type": "error", + "name": "UUPSUnsupportedProxiableUUID", + "inputs": [ + { + "name": "slot", + "type": "bytes32", + "internalType": "bytes32" + } + ] + }, + { + "type": "error", + "name": "UnequalLengths", + "inputs": [] + } + ], + "address": "0xBa93A9CF3E8194b7D04bee459c679B2125cD569b", + "args": [], + "bytecode": "0x60a0604052306080523480156200001557600080fd5b506200002062000030565b6200002a62000030565b620000e4565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805468010000000000000000900460ff1615620000815760405163f92ee8a960e01b815260040160405180910390fd5b80546001600160401b0390811614620000e15780546001600160401b0319166001600160401b0390811782556040519081527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b50565b608051615c396200010e60003960008181613ca601528181613ccf0152613f130152615c396000f3fe60806040526004361061042f5760003560e01c806374c0dff111610228578063c58a1e4d11610128578063e45572ea116100bb578063efbdb5431161008a578063f7c618c11161006f578063f7c618c114610f11578063fafde1ec14610f31578063fd472fde14610f5157600080fd5b8063efbdb54314610e31578063f0527f8f14610ef157600080fd5b8063e45572ea14610d3e578063e4fc6b6d14610de7578063e64638d714610dfc578063ebe2b12b14610e1c57600080fd5b8063d3a954bb116100f7578063d3a954bb14610cc9578063d83623dd14610ce9578063dff6874814610cfe578063e2ab7cf214610d1e57600080fd5b8063c58a1e4d14610c5e578063caa9915e14610c73578063d2d8c93214610c93578063d2e6d1c314610ca957600080fd5b80639f96d06e116101bb578063acc2166a1161018a578063b78b52df1161016f578063b78b52df14610be5578063c042e76e14610c05578063c15382d814610c2557600080fd5b8063acc2166a14610b6f578063ad3cb1cc14610b8f57600080fd5b80639f96d06e14610aef578063a0d961c014610b0f578063a7c0782b14610b2f578063a8a90af714610b4f57600080fd5b80638dcb7ea4116101f75780638dcb7ea414610a645780639626f35814610a9a57806397e57cf914610aba5780639dcde81214610acf57600080fd5b806374c0dff1146109c45780637572392c14610a0e57806377bd9c2d14610a2457806381d8bd2c14610a4457600080fd5b80632ed480f7116103335780634be50762116102c6578063579e8c8e1161029557806371d8a4891161027a57806371d8a4891461094e57806372b874ad1461098457806372f702f3146109a457600080fd5b8063579e8c8e146109235780636912be2d1461093957600080fd5b80634be50762146108c55780634f1ef286146108e5578063517b989c146108f857806352d1902d1461090e57600080fd5b80634356d671116103025780634356d6711461083857806345b5cd311461085857806348d57282146108785780634b1d41fc1461089857600080fd5b80632ed480f7146107c65780633c6b16ab146107e65780633f1c49bf146107f957806341f265801461080e57600080fd5b806312ad2387116103c65780631f56d39c1161039557806323e978c11161037a57806323e978c11461075a578063278fdc691461079057806329ad14d3146107a657600080fd5b80631f56d39c146106fa57806323ae495b1461073a57600080fd5b806312ad238714610587578063187256eb146105a15780631d156dcf146105ce5780631d5cd0e61461060057600080fd5b80630d52333c116104025780630d52333c146104d95780630fa36b8214610511578063119234dd1461053157806311fb601a1461055157600080fd5b806301ffc9a71461043457806303184e311461046957806309022b13146104895780630b739693146104b7575b600080fd5b34801561044057600080fd5b5061045461044f366004615342565b610f71565b60405190151581526020015b60405180910390f35b34801561047557600080fd5b50610454610484366004615399565b61100a565b34801561049557600080fd5b506104a96104a43660046153b6565b611017565b604051908152602001610460565b3480156104c357600080fd5b506104d76104d23660046153e3565b611036565b005b3480156104e557600080fd5b506070546104f9906001600160a01b031681565b6040516001600160a01b039091168152602001610460565b34801561051d57600080fd5b506104d761052c366004615416565b6112f7565b34801561053d57600080fd5b506104d761054c366004615538565b611525565b34801561055d57600080fd5b506104f961056c366004615399565b606a602052600090815260409020546001600160a01b031681565b34801561059357600080fd5b5060af546104549060ff1681565b3480156105ad57600080fd5b506104a96105bc366004615399565b60b06020526000908152604090205481565b3480156105da57600080fd5b506034546105eb9063ffffffff1681565b60405163ffffffff9091168152602001610460565b34801561060c57600080fd5b5061067861061b366004615399565b60686020526000908152604090205460ff808216916101008104821691620100008204811691630100000081048216916401000000008204169065010000000000810460c81b906c01000000000000000000000000900460601b87565b6040805197151588529515156020880152931515948601949094529015156060850152151560808401527fffffffffffffff0000000000000000000000000000000000000000000000000090911660a08301527fffffffffffffffffffffffffffffffffffffffff0000000000000000000000001660c082015260e001610460565b34801561070657600080fd5b50610454610715366004615399565b6001600160a01b03166000908152606860205260409020546301000000900460ff1690565b34801561074657600080fd5b506104d7610755366004615580565b6115fa565b34801561076657600080fd5b506104f9610775366004615399565b6069602052600090815260409020546001600160a01b031681565b34801561079c57600080fd5b506104a960ac5481565b3480156107b257600080fd5b506104d76107c1366004615416565b6119a4565b3480156107d257600080fd5b506104546107e1366004615399565b611cdc565b6104d76107f43660046153b6565b611d32565b34801561080557600080fd5b506104d7611e93565b34801561081a57600080fd5b50610823611ef7565b60408051928352602083019190915201610460565b34801561084457600080fd5b506104d76108533660046155ff565b61205c565b34801561086457600080fd5b506104d761087336600461566b565b612171565b34801561088457600080fd5b506104f96108933660046153b6565b6122ad565b3480156108a457600080fd5b506104a96108b3366004615399565b60736020526000908152604090205481565b3480156108d157600080fd5b506104d76108e03660046156bb565b6122ba565b6104d76108f3366004615786565b6124a2565b34801561090457600080fd5b506104a960a95481565b34801561091a57600080fd5b506104a96124c1565b34801561092f57600080fd5b506104a960ab5481565b34801561094557600080fd5b506104d76124f0565b34801561095a57600080fd5b506104f9610969366004615399565b6071602052600090815260409020546001600160a01b031681565b34801561099057600080fd5b506104a961099f3660046153b6565b612701565b3480156109b057600080fd5b5060a7546104f9906001600160a01b031681565b3480156109d057600080fd5b506074546109ed906fffffffffffffffffffffffffffffffff1681565b6040516fffffffffffffffffffffffffffffffff9091168152602001610460565b348015610a1a57600080fd5b506104a960aa5481565b348015610a3057600080fd5b50610454610a3f366004615399565b612725565b348015610a5057600080fd5b506104d7610a5f36600461584c565b61274b565b348015610a7057600080fd5b506104f9610a7f366004615399565b6072602052600090815260409020546001600160a01b031681565b348015610aa657600080fd5b50610454610ab5366004615399565b6127ca565b348015610ac657600080fd5b506104a96127d7565b348015610adb57600080fd5b506104d7610aea366004615399565b6127e8565b348015610afb57600080fd5b506104d7610b0a366004615399565b612990565b348015610b1b57600080fd5b506104a9610b2a3660046153b6565b6129d4565b348015610b3b57600080fd5b506104a9610b4a3660046153b6565b6129f0565b348015610b5b57600080fd5b506104d7610b6a366004615399565b612a2b565b348015610b7b57600080fd5b506067546104f9906001600160a01b031681565b348015610b9b57600080fd5b50610bd86040518060400160405280600581526020017f352e302e3000000000000000000000000000000000000000000000000000000081525081565b60405161046091906158b7565b348015610bf157600080fd5b506104d7610c00366004615908565b612c1e565b348015610c1157600080fd5b506104d7610c2036600461584c565b612c95565b348015610c3157600080fd5b50610c45610c40366004615399565b612d59565b60405167ffffffffffffffff9091168152602001610460565b348015610c6a57600080fd5b506104a9612de4565b348015610c7f57600080fd5b506104d7610c8e366004615934565b612df0565b348015610c9f57600080fd5b506104a960ad5481565b348015610cb557600080fd5b506000546104f9906001600160a01b031681565b348015610cd557600080fd5b506104f9610ce4366004615399565b612f05565b348015610cf557600080fd5b50610454612f88565b348015610d0a57600080fd5b50610454610d19366004615399565b61306b565b348015610d2a57600080fd5b50610454610d39366004615908565b61316f565b348015610d4a57600080fd5b50610dae610d59366004615399565b606b6020526000908152604090205467ffffffffffffffff808216916801000000000000000081049091169070010000000000000000000000000000000090046fffffffffffffffffffffffffffffffff1683565b6040805167ffffffffffffffff94851681529390921660208401526fffffffffffffffffffffffffffffffff1690820152606001610460565b348015610df357600080fd5b5061045461322a565b348015610e0857600080fd5b506104f9610e173660046153b6565b613275565b348015610e2857600080fd5b506104a9613282565b348015610e3d57600080fd5b50603354610eaf9063ffffffff8082169164010000000081049091169067ffffffffffffffff68010000000000000000820481169170010000000000000000000000000000000081049091169062ffffff78010000000000000000000000000000000000000000000000009091041685565b6040805163ffffffff968716815295909416602086015267ffffffffffffffff9283169385019390935216606083015262ffffff16608082015260a001610460565b348015610efd57600080fd5b506104d7610f0c366004615399565b6132ad565b348015610f1d57600080fd5b5060a8546104f9906001600160a01b031681565b348015610f3d57600080fd5b506104d7610f4c366004615992565b613483565b348015610f5d57600080fd5b506104d7610f6c366004615399565b613604565b60007fffffffff0000000000000000000000000000000000000000000000000000000082167fe2ab7cf200000000000000000000000000000000000000000000000000000000148061100457507f01ffc9a7000000000000000000000000000000000000000000000000000000007fffffffff000000000000000000000000000000000000000000000000000000008316145b92915050565b6000611004606c83613724565b60345460009063ffffffff1661102c836129f0565b61100491906159ef565b6000546040517fe053dd610000000000000000000000000000000000000000000000000000000081523360048201526001600160a01b039091169063e053dd619060240160006040518083038186803b15801561109257600080fd5b505afa1580156110a6573d6000803e3d6000fd5b505050508063ffffffff166000036110ea576040517fe7b421c800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60006110f5426129f0565b9050804211801561112557506034546111189063ffffffff908116908416613746565b61112290826159ef565b42105b1561115c576040517fb2f1777700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040805160a08101825260335463ffffffff80821683526401000000008204166020830181905267ffffffffffffffff6801000000000000000083048116948401949094527001000000000000000000000000000000008204909316606083015262ffffff7801000000000000000000000000000000000000000000000000909104166080820152906111f090849061375c565b611226576040517f84153c9100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b806060015167ffffffffffffffff164210156112805761124a83826000015161375c565b611280576040517f84153c9100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040805163ffffffff851681523360208201527ffc521917f7d89bd122571083737b90fea921fe4dc631865293f5c5c450b74652910160405180910390a15050603480547fffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000001663ffffffff92909216919091179055565b6113003361306b565b611335576040517ead0c9500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b670de0b6b3a76400008167ffffffffffffffff161115611381576040517fcb3f365b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b336000818152606b60209081526040918290208251606081018452905467ffffffffffffffff808216835268010000000000000000820416928201929092527001000000000000000000000000000000009091046fffffffffffffffffffffffffffffffff1691810191909152906113f890612d59565b67ffffffffffffffff90811682528216602082015260745461142c906fffffffffffffffffffffffffffffffff1642615a02565b6fffffffffffffffffffffffffffffffff166040828101829052805167ffffffffffffffff85168152602081019290925233917f029674ff064f2d0d5b88c006bca2b7583291550ccf6462e8ae1a9b03d0479515910160405180910390a2336000908152606b6020908152604091829020835181549285015193909401516fffffffffffffffffffffffffffffffff9081167001000000000000000000000000000000000267ffffffffffffffff94851668010000000000000000027fffffffffffffffffffffffffffffffff000000000000000000000000000000009094169490951693909317919091179190911691909117905550565b805160005b818110156115f55761155483828151811061154757611547615a2b565b6020026020010151613780565b82818151811061156657611566615a2b565b60209081029190910101516040517f4c4d0d730000000000000000000000000000000000000000000000000000000081523360048201526001600160a01b0390911690634c4d0d7390602401600060405180830381600087803b1580156115cc57600080fd5b505af11580156115e0573d6000803e3d6000fd5b505050506115ee8160010190565b905061152a565b505050565b6000546040517fd994d6d50000000000000000000000000000000000000000000000000000000081523360048201526001600160a01b039091169063d994d6d590602401602060405180830381865afa15801561165b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061167f9190615a6a565b158015611712575060008054906101000a90046001600160a01b03166001600160a01b031663ce7ee5ac6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156116d8573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906116fc9190615a85565b6001600160a01b0316336001600160a01b031614155b15611749576040517f39f34f8400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60345461175c9063ffffffff168361375c565b611792576040517f7fc5120500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60008061179d611ef7565b6040805160a08101825260335467ffffffffffffffff700100000000000000000000000000000000820481166060840152780100000000000000000000000000000000000000000000000090910462ffffff16608083015263ffffffff848116808452908a1660208401529085169282018390529395509193509091611824919042613824565b67ffffffffffffffff166060820181905262ffffff851660808301526040805163ffffffff8816815260208101929092527f15c8ad9af95537fe83718dcd140a2b725b6e190fb5e68c4f13ff38232b86b77c910160405180910390a180516033805460208401516040850151606086015160809096015163ffffffff9586167fffffffffffffffffffffffffffffffffffffffffffffffff0000000000000000909416939093176401000000009590921694909402177fffffffffffffffff00000000000000000000000000000000ffffffffffffffff166801000000000000000067ffffffffffffffff948516027fffffffffffffffff0000000000000000ffffffffffffffffffffffffffffffff16177001000000000000000000000000000000009390941692909202929092177fffffffffff000000ffffffffffffffffffffffffffffffffffffffffffffffff16780100000000000000000000000000000000000000000000000062ffffff9092169190910217905550505050565b336000908152607160205260409020546001600160a01b0316806119f4576040517f412a573000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b33600090815260686020526040902054610100900460ff16611a42576040517fdfac5c4a00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b3360009081526068602052604090205462010000900460ff16611a91576040517f2272386e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b33600090815260686020526040902054640100000000900460ff16611ae2576040517f73f7ab1e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b670de0b6b3a76400008267ffffffffffffffff161115611b2e576040517fcb3f365b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b33600081815260686020908152604080832080547fffffffffffffffffffffffffffffffffffffffffffffffffffffff00ffffffff169055606b8252918290208251606081018452905467ffffffffffffffff808216835268010000000000000000820416928201929092527001000000000000000000000000000000009091046fffffffffffffffffffffffffffffffff169181019190915290611bd290612d59565b67ffffffffffffffff90811682528381166020808401918252336000908152606b909152604090819020845181549351928601516fffffffffffffffffffffffffffffffff9081167001000000000000000000000000000000000293861668010000000000000000027fffffffffffffffffffffffffffffffff0000000000000000000000000000000090951691909516179290921792909216919091179055611c7b8261383b565b604080820151815167ffffffffffffffff861681526fffffffffffffffffffffffffffffffff909116602082015233917f7dba82990ac719cd904649f1701fcda6db3c92f2ff9cd31ceed2eb989a441d3191015b60405180910390a2505050565b6001600160a01b038181166000908152606a6020526040812054909116158015906110045750506001600160a01b039081166000908152606a602090815260408083205460699092529091205482169116141590565b60af5460ff1615611d6f576040517fbc1eb20900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b611d77612de4565b600003611db0576040517fb9927e0d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b3415611e19573460ac6000828254611dc891906159ef565b9091555050604051348152339073f7ab6cfaebbadfe8b5494022c4c6db776bd63b6b907ff70d5c697de7ea828df48e5c4573cb2194c659f1901f70110c52b066dcf508269060200160405180910390a35b8015611e90578060ab6000828254611e3191906159ef565b909155505060a85460405182815233916001600160a01b0316907ff70d5c697de7ea828df48e5c4573cb2194c659f1901f70110c52b066dcf508269060200160405180910390a360a854611e90906001600160a01b031633308461386a565b50565b336000908152606960205260409020546001600160a01b0316611eb5816138f2565b6040516001600160a01b038216815233907f4815977db1df3778807ed9d5a0c32398684440c2cd8cfc0a411b47528214df7b906020015b60405180910390a250565b6040805160a08101825260335463ffffffff8082168352640100000000820416602083015268010000000000000000810467ffffffffffffffff90811693830193909352700100000000000000000000000000000000810490921660608201819052780100000000000000000000000000000000000000000000000090920462ffffff166080820152600091829190421061203957806080015162ffffff16816020015163ffffffff168260600151611fb09190615aa2565b611fba9190615aa2565b67ffffffffffffffff1642101561200257806060015167ffffffffffffffff16816080015162ffffff168260200151611ff39190615ac3565b63ffffffff1692509250509091565b806080015162ffffff16816060015161201b9190615aa2565b67ffffffffffffffff16816020015163ffffffff1692509250509091565b806040015167ffffffffffffffff16816000015163ffffffff1692509250509091565b60af5460ff1615612099576040517fbc1eb20900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b828181146120d3576040517fccab218c00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b33600090815260b0602052604081205460a95490916120f142612701565b905060005b8481101561215b5760008061214c8b8b8581811061211657612116615a2b565b905060200201602081019061212b9190615399565b8a8a8681811061213d5761213d615a2b565b90506020020135888888613979565b909650945050506001016120f6565b50612167338484613b0a565b5050505050505050565b805160005b818110156122a75760006001600160a01b03166072600085848151811061219f5761219f615a2b565b6020908102919091018101516001600160a01b039081168352908201929092526040016000205416036121fe576040517f3c91aa3a00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b82818151811061221057612210615a2b565b60209081029190910101516040517ff7b761580000000000000000000000000000000000000000000000000000000081526001600160a01b0386811660048301523360248301529091169063f7b7615890604401600060405180830381600087803b15801561227e57600080fd5b505af1158015612292573d6000803e3d6000fd5b505050506122a08160010190565b9050612176565b50505050565b6000611004606c83613be4565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805468010000000000000000810460ff16159067ffffffffffffffff166000811580156123055750825b905060008267ffffffffffffffff1660011480156123225750303b155b905081158015612330575080155b15612367576040517ff92ee8a900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b84547fffffffffffffffffffffffffffffffffffffffffffffffff000000000000000016600117855583156123c85784547fffffffffffffffffffffffffffffffffffffffffffffff00ffffffffffffffff16680100000000000000001785555b6123d78e8c8c8c8c8c8c613bf0565b8c60a860006101000a8154816001600160a01b0302191690836001600160a01b031602179055508b60a760006101000a8154816001600160a01b0302191690836001600160a01b0316021790555061242e426129d4565b60ae5583156124925784547fffffffffffffffffffffffffffffffffffffffffffffff00ffffffffffffffff168555604051600181527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b5050505050505050505050505050565b6124aa613c9b565b6124b382613d6d565b6124bd8282613de4565b5050565b60006124cb613f08565b507f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc90565b336000908152607160205260409020546001600160a01b031680612540576040517f412a573000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b33600090815260686020526040902054610100900460ff1661258e576040517fdfac5c4a00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b3360009081526068602052604090205462010000900460ff166125dd576040517f2272386e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b33600090815260686020526040902054640100000000900460ff161561262f576040517f905e710700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b33600090815260686020526040902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffff00ffffffff1664010000000017905560745461268a906fffffffffffffffffffffffffffffffff16426159ef565b336000908152606b6020526040902080546fffffffffffffffffffffffffffffffff9283167001000000000000000000000000000000000292169190911790556126d381613f6a565b60405133907fb6fa8b8bd5eab60f292eca876e3ef90722275b785309d84b1de113ce0b8c4e7490600090a250565b600080600061270e611ef7565b9150915061271d828286613f98565b949350505050565b6001600160a01b038082166000908152607260205260408120549091611004911661306b565b6000546040517f445ac6330000000000000000000000000000000000000000000000000000000081523360048201526001600160a01b039091169063445ac6339060240160006040518083038186803b1580156127a757600080fd5b505afa1580156127bb573d6000803e3d6000fd5b505050506115f5838383613fc2565b6000611004606e83613724565b60006127e3606e6141d9565b905090565b6000546040517f7e185f570000000000000000000000000000000000000000000000000000000081523360048201526001600160a01b0390911690637e185f579060240160006040518083038186803b15801561284457600080fd5b505afa158015612858573d6000803e3d6000fd5b505050506001600160a01b0381811660009081526071602052604090205416806128ae576040517f412a573000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001600160a01b03821660009081526068602052604090205462010000900460ff16612906576040517f2272386e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001600160a01b038216600090815260686020526040902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ffff16905561294d81613f6a565b6129588160006141e3565b6040516001600160a01b038316907f78c8e01ebc9b1b82f14af9f3a9b6fa7bdba5e36f9e96d15ca3aebc36cf72ce8590600090a25050565b612999816138f2565b6040516001600160a01b038216815233907ffd86eb6a6fd802b0b2edabf5bc13b0ada6e619b69bb19a08d048e2d2374de2d190602001611eec565b60008060006129e1611ef7565b9150915061271d828286613824565b60008060006129fd611ef7565b90925090506000612a0e8386615ae0565b9050818181612a1f57612a1f615af3565b06909403949350505050565b6000546040517f445ac6330000000000000000000000000000000000000000000000000000000081523360048201526001600160a01b039091169063445ac6339060240160006040518083038186803b158015612a8757600080fd5b505afa158015612a9b573d6000803e3d6000fd5b505050506001600160a01b038181166000908152607160205260409020541680612af1576040517f412a573000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001600160a01b03821660009081526068602052604090205460ff16612b43576040517f037c597f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001600160a01b038216600090815260686020526040902054610100900460ff1615612b9b576040517f0c60c81000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001600160a01b038216600090815260686020526040902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff16610100179055612be68161383b565b6040516001600160a01b038316907f333bb19eeef0621b32888db778cc7a481a89fc1d59adb2cecb59b40ef048941e90600090a25050565b60af5460ff1615612c5b576040517fbc1eb20900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b33600090815260b0602052604081205460a9548291612c869186918691612c8142612701565b613979565b915091506122a7338383613b0a565b6000546040517f445ac6330000000000000000000000000000000000000000000000000000000081523360048201526001600160a01b039091169063445ac6339060240160006040518083038186803b158015612cf157600080fd5b505afa158015612d05573d6000803e3d6000fd5b50505050612d1283614273565b50612d1e838383613fc2565b60405133906001600160a01b038516907f8af41f46390f96b58351b4d4f8afb27eea35637de1fb1b9538308b25497a27dc90600090a3505050565b6001600160a01b0381166000908152606b602090815260408083208151606081018352905467ffffffffffffffff808216835268010000000000000000820416938201939093527001000000000000000000000000000000009092046fffffffffffffffffffffffffffffffff169082018190524210612ddd576020015192915050565b5192915050565b60006127e3606c6141d9565b6000546040517f445ac6330000000000000000000000000000000000000000000000000000000081523360048201526001600160a01b039091169063445ac6339060240160006040518083038186803b158015612e4c57600080fd5b505afa158015612e60573d6000803e3d6000fd5b505050506001600160a01b038216600081815260686020908152604091829020805463010000006bffffffffffffffff00ffffff9091166c01000000000000000000000000606088901c021717905590517fffffffffffffffffffffffffffffffffffffffff000000000000000000000000841681527f6525882b4c209582fe16abd1257106636114aefe60495f27fcf096a21c8a6d34910160405180910390a25050565b600080546040517f7e185f570000000000000000000000000000000000000000000000000000000081523360048201526001600160a01b0390911690637e185f579060240160006040518083038186803b158015612f6257600080fd5b505afa158015612f76573d6000803e3d6000fd5b5050505061100482614273565b919050565b6000612f9342611017565b4210612fcb576040517f137d765400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60af5460ff1615613008576040517fbc1eb20900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60405133907fe64e289f2bf6b4f5ccbc1597d14be6638e1517b1b29e2ec5a05101f57d8d81e890600090a261303b6143cf565b60af80547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00168215179055919050565b6001600160a01b0381166000908152606860209081526040808320815160e081018352905460ff8082161515835261010082048116158015958401869052620100008304821615159484019490945263010000008204811615156060808501919091526401000000008304909116151560808401527fffffffffffffff0000000000000000000000000000000000000000000000000065010000000000830460c81b1660a08401527fffffffffffffffffffffffffffffffffffffffff0000000000000000000000006c01000000000000000000000000909204901b1660c0820152919061315a575080604001515b801561316857508060600151155b9392505050565b6001600160a01b038216600090815260b06020526040812054808203613199576001915050611004565b60a7546040517f70a082310000000000000000000000000000000000000000000000000000000081526001600160a01b038681166004830152839216906370a0823190602401602060405180830381865afa1580156131fc573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906132209190615b22565b1015949350505050565b60af5460009060ff161515810361326d576040517f3d0a971800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61303b6143cf565b6000611004606e83613be4565b600061328d336127ca565b156132a657503360009081526073602052604090205490565b5060ae5490565b6000546040517f445ac6330000000000000000000000000000000000000000000000000000000081523360048201526001600160a01b039091169063445ac6339060240160006040518083038186803b15801561330957600080fd5b505afa15801561331d573d6000803e3d6000fd5b505050506001600160a01b038116600090815260686020526040902054610100900460ff16613378576040517fdfac5c4a00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001600160a01b03808216600090815260686020908152604080832080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff169055607190915290205416801561344b576133d281613f6a565b6067546040517f95f948dc0000000000000000000000000000000000000000000000000000000081526001600160a01b039182166004820152908216906395f948dc90602401600060405180830381600087803b15801561343257600080fd5b505af1158015613446573d6000803e3d6000fd5b505050505b6040516001600160a01b038316907ffb4ca6a2470de95e9f648557fae63380f22c4b760bd27b0571caf5977a30278a90600090a25050565b6000546040517f445ac6330000000000000000000000000000000000000000000000000000000081523360048201526001600160a01b039091169063445ac6339060240160006040518083038186803b1580156134df57600080fd5b505afa1580156134f3573d6000803e3d6000fd5b505050506135008261306b565b613535576040517ead0c9500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001600160a01b038083166000908152606a60205260409020548116908216811461358c576040517f3b7db6df00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001600160a01b0383811660008181526069602090815260409182902080547fffffffffffffffffffffffff0000000000000000000000000000000000000000168686161790559051928516835290917f390b365b1e8016ae28db114a7764f9e95293831d64e8958261d56cf59a2c01739101611ccf565b6000546040517f445ac6330000000000000000000000000000000000000000000000000000000081523360048201526001600160a01b039091169063445ac6339060240160006040518083038186803b15801561366057600080fd5b505afa158015613674573d6000803e3d6000fd5b505050506001600160a01b0381166000908152606860205260409020546301000000900460ff166136d1576040517f6cd6020100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001600160a01b03811660008181526068602052604080822080546bffffffffffffffff00ffffff169055517f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa9190a250565b6001600160a01b03811660009081526001830160205260408120541515613168565b60008183116137555781613168565b5090919050565b6000613769836002615b3b565b63ffffffff168263ffffffff161015905092915050565b6001600160a01b0380821660009081526072602052604090205416806137d2576040517f3c91aa3a00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001600160a01b03811660009081526068602052604090205460ff166124bd576040517f037c597f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000613831848484613f98565b9091019392505050565b6138448161452a565b15611e9057613854606c82614639565b50613860606e8261464e565b50611e9081614663565b604080516001600160a01b0385811660248301528416604482015260648082018490528251808303909101815260849091019091526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f23b872dd000000000000000000000000000000000000000000000000000000001790526122a7908590614870565b336138fc8161306b565b613931576040517ead0c9500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001600160a01b039081166000908152606a602052604090208054919092167fffffffffffffffffffffffff0000000000000000000000000000000000000000909116179055565b60008061398587613780565b6040517fab3f22d50000000000000000000000000000000000000000000000000000000081523360048201526024810187905260448101849052600090819081906001600160a01b038b169063ab3f22d5906064016060604051808303816000875af11580156139f9573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613a1d9190615b63565b925092509250613a2c8a6127ca565b15613a805780613a68576040517f8b6f39e300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b613a728389615ae0565b9450869350613b0092505050565b8015613aa357613a908389615ae0565b9450613a9c8288615ae0565b9350613abc565b613aad83896159ef565b9450613ab982886159ef565b93505b6040518981526001600160a01b038b169033907fed07ca57097393e77ba36105a07f6810afc2180b72a9c02a4b0da4b51a73a6ec9060200160405180910390a35050505b9550959350505050565b6001600160a01b03838116600081815260b060205260409081902085905560a984905560a75490517f70a082310000000000000000000000000000000000000000000000000000000081526004810192909252909116906370a0823190602401602060405180830381865afa158015613b87573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613bab9190615b22565b8211156115f5576040517f2e0aee6200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600061316883836148ec565b613bf8614916565b613c048785858561497d565b613c0c614ae4565b607080547fffffffffffffffffffffffff00000000000000000000000000000000000000009081166001600160a01b03988916179091556067805490911695909616949094179094555050607480547fffffffffffffffffffffffffffffffff00000000000000000000000000000000166fffffffffffffffffffffffffffffffff9092169190911790555050565b306001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000161480613d3457507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316613d287f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc546001600160a01b031690565b6001600160a01b031614155b15613d6b576040517fe07c8dba00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b565b6000546040517feb6f7abf0000000000000000000000000000000000000000000000000000000081523360048201526001600160a01b039091169063eb6f7abf9060240160006040518083038186803b158015613dc957600080fd5b505afa158015613ddd573d6000803e3d6000fd5b5050505050565b816001600160a01b03166352d1902d6040518163ffffffff1660e01b8152600401602060405180830381865afa925050508015613e5c575060408051601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0168201909252613e5991810190615b22565b60015b613ea2576040517f4c9c8ce30000000000000000000000000000000000000000000000000000000081526001600160a01b03831660048201526024015b60405180910390fd5b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc8114613efe576040517faa1d49a400000000000000000000000000000000000000000000000000000000815260048101829052602401613e99565b6115f58383614aec565b306001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614613d6b576040517fe07c8dba00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b613f73816127ca565b611e9057613f82606e82614639565b50613f8e606c8261464e565b50611e9081614b42565b600080613fa58584615ae0565b9050838181613fb657613fb6615af3565b06909303949350505050565b6001600160a01b03831660009081526068602052604090205460ff1615614015576040517fef65161f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001600160a01b03838116600090815260686020908152604080832080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000166101011790556069909152902080547fffffffffffffffffffffffff000000000000000000000000000000000000000016918416919091179055670de0b6b3a764000067ffffffffffffffff821611156140db576040517fcb3f365b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001600160a01b038381166000818152606b602081815260408084208151606081018352815467ffffffffffffffff8a8116808452838701818152426fffffffffffffffffffffffffffffffff9081168689019081529a8c905298885284519051995189167001000000000000000000000000000000000299831668010000000000000000027fffffffffffffffffffffffffffffffff0000000000000000000000000000000090941692169190911791909117909516959095179055805195881686529085019190915290927f7c17fc62e6995162bad4a8b971071389b16be69a2aad3ffec7b89101ccf832f2910160405180910390a250505050565b6000611004825490565b60a8546040517f095ea7b30000000000000000000000000000000000000000000000000000000081526001600160a01b038481166004830152602482018490529091169063095ea7b3906044016020604051808303816000875af115801561424f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906115f59190615a6a565b6001600160a01b03811660009081526068602052604081205462010000900460ff16156142cc576040517f9add58c500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001600160a01b03828116600090815260716020526040902054161561431e576040517f7fe8efbb00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001600160a01b038216600090815260686020526040902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ffff166201000017905561436a82614c16565b9050614396817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6141e3565b6040516001600160a01b038316907f65b21a2a34a615112fde6cfc7e1bfef6dd30a04b0d2003751618b1571cab53d990600090a2919050565b60aa5460ad5460009190826143e2612de4565b905060006143fa826143f56014866159ef565b614d4f565b60ab5460ac5460a95460ae549394509192909190600080614419611ef7565b915091505b868910156144545761443d6144328a6122ad565b878787878787614d5e565b614447908b6159ef565b995060018901985061441e565b60405133907fcc320ee5dbf17441226d664c195a950e95eef67dc4dbebde435456c5389b427e90600090a287870361450f5760405133907f2e0a637781c44a621d21ae02c97a62860799594e47e453e0491eb348ebf83bff90600090a2600060ad81905560ac81905560ab81905560af80547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016905560aa5560a98a90556144fb426129d4565b60ae555060019a9950505050505050505050565b50505060ad9590955550505060aa9290925550600092915050565b6001600160a01b03808216600090815260726020908152604080832054909316825260688152828220835160e081018552905460ff8082161515835261010082048116158015948401859052620100008304821615159684019690965263010000008204811615156060808501919091526401000000008304909116151560808401527fffffffffffffff0000000000000000000000000000000000000000000000000065010000000000830460c81b1660a08401527fffffffffffffffffffffffffffffffffffffffff0000000000000000000000006c01000000000000000000000000909204901b1660c08201529192614627575080604001515b80156131685750608001511592915050565b6000613168836001600160a01b038416614ede565b6000613168836001600160a01b038416614f2d565b60af5460ff16156146a0576040517fbc1eb20900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b4260ae54116146db576040517fd0f0904700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60ae546001600160a01b03821660009081526073602052604090205410156147dd57600080614708611ef7565b6001600160a01b0385166000818152607360205260408082205490517fa505626a0000000000000000000000000000000000000000000000000000000081526004810183905260248101839052604481019190915260648101859052608481018490529395509193509163a505626a919060a40160206040518083038185885af115801561479a573d6000803e3d6000fd5b50505050506040513d601f19601f820116820180604052508101906147bf9190615b22565b60a960008282546147d091906159ef565b9091555061485692505050565b806001600160a01b031663e52595466040518163ffffffff1660e01b8152600401602060405180830381865afa15801561481b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061483f9190615b22565b60a9600082825461485091906159ef565b90915550505b6001600160a01b0316600090815260736020526040812055565b60006148856001600160a01b03841683615027565b905080516000141580156148aa5750808060200190518101906148a89190615a6a565b155b156115f5576040517f5274afe70000000000000000000000000000000000000000000000000000000081526001600160a01b0384166004820152602401613e99565b600082600001828154811061490357614903615a2b565b9060005260206000200154905092915050565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a005468010000000000000000900460ff16613d6b576040517fd7e6bcf800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b614985614916565b61498e84615035565b6040805160a0810182526033805463ffffffff9687168084526020840181905267ffffffffffffffff42169484018590526060840185905262ffffff9690961660809093018390527fffffffffffffffffffffffffffffffffffffffffffffffff0000000000000000168517640100000000909502949094177fffffffffffffffff00000000000000000000000000000000ffffffffffffffff166801000000000000000083027fffffffffffffffff0000000000000000ffffffffffffffffffffffffffffffff1617700100000000000000000000000000000000909202919091177fffffffffff000000ffffffffffffffffffffffffffffffffffffffffffffffff16780100000000000000000000000000000000000000000000000090910217909155603480547fffffffffffffffffffffffffffffffffffffffffffffffffffffffff00000000169190921617905550565b613d6b614916565b614af58261507f565b6040516001600160a01b038316907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a2805115614b3a576115f58282615127565b6124bd61519d565b60af5460ff1615614b7f576040517fbc1eb20900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b806001600160a01b031663e52595466040518163ffffffff1660e01b8152600401602060405180830381865afa158015614bbd573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190614be19190615b22565b60a96000828254614bf29190615ae0565b909155505060ae546001600160a01b03909116600090815260736020526040902055565b607054604080517fdc5a417900000000000000000000000000000000000000000000000000000000815290516000926001600160a01b03169163dc5a4179916004808301926020929190829003018187875af1158015614c7a573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190614c9e9190615a85565b6001600160a01b03808416600081815260716020908152604080832080549587167fffffffffffffffffffffffff0000000000000000000000000000000000000000968716811790915583526072909152902080549092161790559050614d06606c82614639565b506040513381526001600160a01b0380831691908416907f9b8203efe7fe42185a7755b0510f87c8b693971d6a7c22520aaf683e6b1242619060200160405180910390a3919050565b60008183106137555781613168565b600080886001600160a01b031663e52595466040518163ffffffff1660e01b8152600401602060405180830381865afa158015614d9f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190614dc39190615b22565b9050600086614dd28a84615b8f565b614ddc9190615ba6565b9050600087614deb8a85615b8f565b614df59190615ba6565b6001600160a01b03808d1660009081526072602052604081205492935091614e1d9116612d59565b6040517fa505626a0000000000000000000000000000000000000000000000000000000081526004810185905267ffffffffffffffff9190911660248201819052604482018a9052606482018990526084820188905291506001600160a01b038d169063a505626a90849060a40160206040518083038185885af1158015614ea9573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190614ece9190615b22565b9c9b505050505050505050505050565b6000818152600183016020526040812054614f2557508154600181810184556000848152602080822090930184905584548482528286019093526040902091909155611004565b506000611004565b60008181526001830160205260408120548015615016576000614f51600183615ae0565b8554909150600090614f6590600190615ae0565b9050808214614fca576000866000018281548110614f8557614f85615a2b565b9060005260206000200154905080876000018481548110614fa857614fa8615a2b565b6000918252602080832090910192909255918252600188019052604090208390555b8554869080614fdb57614fdb615be1565b600190038181906000526020600020016000905590558560010160008681526020019081526020016000206000905560019350505050611004565b6000915050611004565b5092915050565b6060613168838360006151d5565b61503d614916565b615045614ae4565b600080547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b0392909216919091179055565b806001600160a01b03163b6000036150ce576040517f4c9c8ce30000000000000000000000000000000000000000000000000000000081526001600160a01b0382166004820152602401613e99565b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc80547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b0392909216919091179055565b6060600080846001600160a01b0316846040516151449190615c10565b600060405180830381855af49150503d806000811461517f576040519150601f19603f3d011682016040523d82523d6000602084013e615184565b606091505b509150915061519485838361528b565b95945050505050565b3415613d6b576040517fb398979f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b606081471015615213576040517fcd786059000000000000000000000000000000000000000000000000000000008152306004820152602401613e99565b600080856001600160a01b0316848660405161522f9190615c10565b60006040518083038185875af1925050503d806000811461526c576040519150601f19603f3d011682016040523d82523d6000602084013e615271565b606091505b509150915061528186838361528b565b9695505050505050565b6060826152a05761529b82615300565b613168565b81511580156152b757506001600160a01b0384163b155b156152f9576040517f9996b3150000000000000000000000000000000000000000000000000000000081526001600160a01b0385166004820152602401613e99565b5080613168565b8051156153105780518082602001fd5b6040517f1425ea4200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60006020828403121561535457600080fd5b81357fffffffff000000000000000000000000000000000000000000000000000000008116811461316857600080fd5b6001600160a01b0381168114611e9057600080fd5b6000602082840312156153ab57600080fd5b813561316881615384565b6000602082840312156153c857600080fd5b5035919050565b803563ffffffff81168114612f8357600080fd5b6000602082840312156153f557600080fd5b613168826153cf565b803567ffffffffffffffff81168114612f8357600080fd5b60006020828403121561542857600080fd5b613168826153fe565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016810167ffffffffffffffff811182821017156154a7576154a7615431565b604052919050565b600082601f8301126154c057600080fd5b8135602067ffffffffffffffff8211156154dc576154dc615431565b8160051b6154eb828201615460565b928352848101820192828101908785111561550557600080fd5b83870192505b8483101561552d57823561551e81615384565b8252918301919083019061550b565b979650505050505050565b60006020828403121561554a57600080fd5b813567ffffffffffffffff81111561556157600080fd5b61271d848285016154af565b803562ffffff81168114612f8357600080fd5b6000806040838503121561559357600080fd5b61559c836153cf565b91506155aa6020840161556d565b90509250929050565b60008083601f8401126155c557600080fd5b50813567ffffffffffffffff8111156155dd57600080fd5b6020830191508360208260051b85010111156155f857600080fd5b9250929050565b6000806000806040858703121561561557600080fd5b843567ffffffffffffffff8082111561562d57600080fd5b615639888389016155b3565b9096509450602087013591508082111561565257600080fd5b5061565f878288016155b3565b95989497509550505050565b6000806040838503121561567e57600080fd5b823561568981615384565b9150602083013567ffffffffffffffff8111156156a557600080fd5b6156b1858286016154af565b9150509250929050565b60008060008060008060008060006101208a8c0312156156da57600080fd5b89356156e581615384565b985060208a01356156f581615384565b975060408a013561570581615384565b965060608a013561571581615384565b955060808a013561572581615384565b945061573360a08b016153cf565b935061574160c08b0161556d565b925061574f60e08b016153cf565b91506101008a01356fffffffffffffffffffffffffffffffff8116811461577557600080fd5b809150509295985092959850929598565b6000806040838503121561579957600080fd5b82356157a481615384565b915060208381013567ffffffffffffffff808211156157c257600080fd5b818601915086601f8301126157d657600080fd5b8135818111156157e8576157e8615431565b615818847fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f84011601615460565b9150808252878482850101111561582e57600080fd5b80848401858401376000848284010152508093505050509250929050565b60008060006060848603121561586157600080fd5b833561586c81615384565b9250602084013561587c81615384565b915061588a604085016153fe565b90509250925092565b60005b838110156158ae578181015183820152602001615896565b50506000910152565b60208152600082518060208401526158d6816040850160208701615893565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169190910160400192915050565b6000806040838503121561591b57600080fd5b823561592681615384565b946020939093013593505050565b6000806040838503121561594757600080fd5b823561595281615384565b915060208301357fffffffffffffffffffffffffffffffffffffffff0000000000000000000000008116811461598757600080fd5b809150509250929050565b600080604083850312156159a557600080fd5b82356159b081615384565b9150602083013561598781615384565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b80820180821115611004576110046159c0565b6fffffffffffffffffffffffffffffffff818116838216019080821115615020576150206159c0565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b80518015158114612f8357600080fd5b600060208284031215615a7c57600080fd5b61316882615a5a565b600060208284031215615a9757600080fd5b815161316881615384565b67ffffffffffffffff818116838216019080821115615020576150206159c0565b63ffffffff818116838216019080821115615020576150206159c0565b81810381811115611004576110046159c0565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b600060208284031215615b3457600080fd5b5051919050565b63ffffffff818116838216028082169190828114615b5b57615b5b6159c0565b505092915050565b600080600060608486031215615b7857600080fd5b835192506020840151915061588a60408501615a5a565b8082028115828204841417611004576110046159c0565b600082615bdc577f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b500490565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fd5b60008251615c22818460208701615893565b919091019291505056fea164736f6c6343000814000a", + "deployedBytecode": "0x60806040526004361061042f5760003560e01c806374c0dff111610228578063c58a1e4d11610128578063e45572ea116100bb578063efbdb5431161008a578063f7c618c11161006f578063f7c618c114610f11578063fafde1ec14610f31578063fd472fde14610f5157600080fd5b8063efbdb54314610e31578063f0527f8f14610ef157600080fd5b8063e45572ea14610d3e578063e4fc6b6d14610de7578063e64638d714610dfc578063ebe2b12b14610e1c57600080fd5b8063d3a954bb116100f7578063d3a954bb14610cc9578063d83623dd14610ce9578063dff6874814610cfe578063e2ab7cf214610d1e57600080fd5b8063c58a1e4d14610c5e578063caa9915e14610c73578063d2d8c93214610c93578063d2e6d1c314610ca957600080fd5b80639f96d06e116101bb578063acc2166a1161018a578063b78b52df1161016f578063b78b52df14610be5578063c042e76e14610c05578063c15382d814610c2557600080fd5b8063acc2166a14610b6f578063ad3cb1cc14610b8f57600080fd5b80639f96d06e14610aef578063a0d961c014610b0f578063a7c0782b14610b2f578063a8a90af714610b4f57600080fd5b80638dcb7ea4116101f75780638dcb7ea414610a645780639626f35814610a9a57806397e57cf914610aba5780639dcde81214610acf57600080fd5b806374c0dff1146109c45780637572392c14610a0e57806377bd9c2d14610a2457806381d8bd2c14610a4457600080fd5b80632ed480f7116103335780634be50762116102c6578063579e8c8e1161029557806371d8a4891161027a57806371d8a4891461094e57806372b874ad1461098457806372f702f3146109a457600080fd5b8063579e8c8e146109235780636912be2d1461093957600080fd5b80634be50762146108c55780634f1ef286146108e5578063517b989c146108f857806352d1902d1461090e57600080fd5b80634356d671116103025780634356d6711461083857806345b5cd311461085857806348d57282146108785780634b1d41fc1461089857600080fd5b80632ed480f7146107c65780633c6b16ab146107e65780633f1c49bf146107f957806341f265801461080e57600080fd5b806312ad2387116103c65780631f56d39c1161039557806323e978c11161037a57806323e978c11461075a578063278fdc691461079057806329ad14d3146107a657600080fd5b80631f56d39c146106fa57806323ae495b1461073a57600080fd5b806312ad238714610587578063187256eb146105a15780631d156dcf146105ce5780631d5cd0e61461060057600080fd5b80630d52333c116104025780630d52333c146104d95780630fa36b8214610511578063119234dd1461053157806311fb601a1461055157600080fd5b806301ffc9a71461043457806303184e311461046957806309022b13146104895780630b739693146104b7575b600080fd5b34801561044057600080fd5b5061045461044f366004615342565b610f71565b60405190151581526020015b60405180910390f35b34801561047557600080fd5b50610454610484366004615399565b61100a565b34801561049557600080fd5b506104a96104a43660046153b6565b611017565b604051908152602001610460565b3480156104c357600080fd5b506104d76104d23660046153e3565b611036565b005b3480156104e557600080fd5b506070546104f9906001600160a01b031681565b6040516001600160a01b039091168152602001610460565b34801561051d57600080fd5b506104d761052c366004615416565b6112f7565b34801561053d57600080fd5b506104d761054c366004615538565b611525565b34801561055d57600080fd5b506104f961056c366004615399565b606a602052600090815260409020546001600160a01b031681565b34801561059357600080fd5b5060af546104549060ff1681565b3480156105ad57600080fd5b506104a96105bc366004615399565b60b06020526000908152604090205481565b3480156105da57600080fd5b506034546105eb9063ffffffff1681565b60405163ffffffff9091168152602001610460565b34801561060c57600080fd5b5061067861061b366004615399565b60686020526000908152604090205460ff808216916101008104821691620100008204811691630100000081048216916401000000008204169065010000000000810460c81b906c01000000000000000000000000900460601b87565b6040805197151588529515156020880152931515948601949094529015156060850152151560808401527fffffffffffffff0000000000000000000000000000000000000000000000000090911660a08301527fffffffffffffffffffffffffffffffffffffffff0000000000000000000000001660c082015260e001610460565b34801561070657600080fd5b50610454610715366004615399565b6001600160a01b03166000908152606860205260409020546301000000900460ff1690565b34801561074657600080fd5b506104d7610755366004615580565b6115fa565b34801561076657600080fd5b506104f9610775366004615399565b6069602052600090815260409020546001600160a01b031681565b34801561079c57600080fd5b506104a960ac5481565b3480156107b257600080fd5b506104d76107c1366004615416565b6119a4565b3480156107d257600080fd5b506104546107e1366004615399565b611cdc565b6104d76107f43660046153b6565b611d32565b34801561080557600080fd5b506104d7611e93565b34801561081a57600080fd5b50610823611ef7565b60408051928352602083019190915201610460565b34801561084457600080fd5b506104d76108533660046155ff565b61205c565b34801561086457600080fd5b506104d761087336600461566b565b612171565b34801561088457600080fd5b506104f96108933660046153b6565b6122ad565b3480156108a457600080fd5b506104a96108b3366004615399565b60736020526000908152604090205481565b3480156108d157600080fd5b506104d76108e03660046156bb565b6122ba565b6104d76108f3366004615786565b6124a2565b34801561090457600080fd5b506104a960a95481565b34801561091a57600080fd5b506104a96124c1565b34801561092f57600080fd5b506104a960ab5481565b34801561094557600080fd5b506104d76124f0565b34801561095a57600080fd5b506104f9610969366004615399565b6071602052600090815260409020546001600160a01b031681565b34801561099057600080fd5b506104a961099f3660046153b6565b612701565b3480156109b057600080fd5b5060a7546104f9906001600160a01b031681565b3480156109d057600080fd5b506074546109ed906fffffffffffffffffffffffffffffffff1681565b6040516fffffffffffffffffffffffffffffffff9091168152602001610460565b348015610a1a57600080fd5b506104a960aa5481565b348015610a3057600080fd5b50610454610a3f366004615399565b612725565b348015610a5057600080fd5b506104d7610a5f36600461584c565b61274b565b348015610a7057600080fd5b506104f9610a7f366004615399565b6072602052600090815260409020546001600160a01b031681565b348015610aa657600080fd5b50610454610ab5366004615399565b6127ca565b348015610ac657600080fd5b506104a96127d7565b348015610adb57600080fd5b506104d7610aea366004615399565b6127e8565b348015610afb57600080fd5b506104d7610b0a366004615399565b612990565b348015610b1b57600080fd5b506104a9610b2a3660046153b6565b6129d4565b348015610b3b57600080fd5b506104a9610b4a3660046153b6565b6129f0565b348015610b5b57600080fd5b506104d7610b6a366004615399565b612a2b565b348015610b7b57600080fd5b506067546104f9906001600160a01b031681565b348015610b9b57600080fd5b50610bd86040518060400160405280600581526020017f352e302e3000000000000000000000000000000000000000000000000000000081525081565b60405161046091906158b7565b348015610bf157600080fd5b506104d7610c00366004615908565b612c1e565b348015610c1157600080fd5b506104d7610c2036600461584c565b612c95565b348015610c3157600080fd5b50610c45610c40366004615399565b612d59565b60405167ffffffffffffffff9091168152602001610460565b348015610c6a57600080fd5b506104a9612de4565b348015610c7f57600080fd5b506104d7610c8e366004615934565b612df0565b348015610c9f57600080fd5b506104a960ad5481565b348015610cb557600080fd5b506000546104f9906001600160a01b031681565b348015610cd557600080fd5b506104f9610ce4366004615399565b612f05565b348015610cf557600080fd5b50610454612f88565b348015610d0a57600080fd5b50610454610d19366004615399565b61306b565b348015610d2a57600080fd5b50610454610d39366004615908565b61316f565b348015610d4a57600080fd5b50610dae610d59366004615399565b606b6020526000908152604090205467ffffffffffffffff808216916801000000000000000081049091169070010000000000000000000000000000000090046fffffffffffffffffffffffffffffffff1683565b6040805167ffffffffffffffff94851681529390921660208401526fffffffffffffffffffffffffffffffff1690820152606001610460565b348015610df357600080fd5b5061045461322a565b348015610e0857600080fd5b506104f9610e173660046153b6565b613275565b348015610e2857600080fd5b506104a9613282565b348015610e3d57600080fd5b50603354610eaf9063ffffffff8082169164010000000081049091169067ffffffffffffffff68010000000000000000820481169170010000000000000000000000000000000081049091169062ffffff78010000000000000000000000000000000000000000000000009091041685565b6040805163ffffffff968716815295909416602086015267ffffffffffffffff9283169385019390935216606083015262ffffff16608082015260a001610460565b348015610efd57600080fd5b506104d7610f0c366004615399565b6132ad565b348015610f1d57600080fd5b5060a8546104f9906001600160a01b031681565b348015610f3d57600080fd5b506104d7610f4c366004615992565b613483565b348015610f5d57600080fd5b506104d7610f6c366004615399565b613604565b60007fffffffff0000000000000000000000000000000000000000000000000000000082167fe2ab7cf200000000000000000000000000000000000000000000000000000000148061100457507f01ffc9a7000000000000000000000000000000000000000000000000000000007fffffffff000000000000000000000000000000000000000000000000000000008316145b92915050565b6000611004606c83613724565b60345460009063ffffffff1661102c836129f0565b61100491906159ef565b6000546040517fe053dd610000000000000000000000000000000000000000000000000000000081523360048201526001600160a01b039091169063e053dd619060240160006040518083038186803b15801561109257600080fd5b505afa1580156110a6573d6000803e3d6000fd5b505050508063ffffffff166000036110ea576040517fe7b421c800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60006110f5426129f0565b9050804211801561112557506034546111189063ffffffff908116908416613746565b61112290826159ef565b42105b1561115c576040517fb2f1777700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040805160a08101825260335463ffffffff80821683526401000000008204166020830181905267ffffffffffffffff6801000000000000000083048116948401949094527001000000000000000000000000000000008204909316606083015262ffffff7801000000000000000000000000000000000000000000000000909104166080820152906111f090849061375c565b611226576040517f84153c9100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b806060015167ffffffffffffffff164210156112805761124a83826000015161375c565b611280576040517f84153c9100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040805163ffffffff851681523360208201527ffc521917f7d89bd122571083737b90fea921fe4dc631865293f5c5c450b74652910160405180910390a15050603480547fffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000001663ffffffff92909216919091179055565b6113003361306b565b611335576040517ead0c9500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b670de0b6b3a76400008167ffffffffffffffff161115611381576040517fcb3f365b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b336000818152606b60209081526040918290208251606081018452905467ffffffffffffffff808216835268010000000000000000820416928201929092527001000000000000000000000000000000009091046fffffffffffffffffffffffffffffffff1691810191909152906113f890612d59565b67ffffffffffffffff90811682528216602082015260745461142c906fffffffffffffffffffffffffffffffff1642615a02565b6fffffffffffffffffffffffffffffffff166040828101829052805167ffffffffffffffff85168152602081019290925233917f029674ff064f2d0d5b88c006bca2b7583291550ccf6462e8ae1a9b03d0479515910160405180910390a2336000908152606b6020908152604091829020835181549285015193909401516fffffffffffffffffffffffffffffffff9081167001000000000000000000000000000000000267ffffffffffffffff94851668010000000000000000027fffffffffffffffffffffffffffffffff000000000000000000000000000000009094169490951693909317919091179190911691909117905550565b805160005b818110156115f55761155483828151811061154757611547615a2b565b6020026020010151613780565b82818151811061156657611566615a2b565b60209081029190910101516040517f4c4d0d730000000000000000000000000000000000000000000000000000000081523360048201526001600160a01b0390911690634c4d0d7390602401600060405180830381600087803b1580156115cc57600080fd5b505af11580156115e0573d6000803e3d6000fd5b505050506115ee8160010190565b905061152a565b505050565b6000546040517fd994d6d50000000000000000000000000000000000000000000000000000000081523360048201526001600160a01b039091169063d994d6d590602401602060405180830381865afa15801561165b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061167f9190615a6a565b158015611712575060008054906101000a90046001600160a01b03166001600160a01b031663ce7ee5ac6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156116d8573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906116fc9190615a85565b6001600160a01b0316336001600160a01b031614155b15611749576040517f39f34f8400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60345461175c9063ffffffff168361375c565b611792576040517f7fc5120500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60008061179d611ef7565b6040805160a08101825260335467ffffffffffffffff700100000000000000000000000000000000820481166060840152780100000000000000000000000000000000000000000000000090910462ffffff16608083015263ffffffff848116808452908a1660208401529085169282018390529395509193509091611824919042613824565b67ffffffffffffffff166060820181905262ffffff851660808301526040805163ffffffff8816815260208101929092527f15c8ad9af95537fe83718dcd140a2b725b6e190fb5e68c4f13ff38232b86b77c910160405180910390a180516033805460208401516040850151606086015160809096015163ffffffff9586167fffffffffffffffffffffffffffffffffffffffffffffffff0000000000000000909416939093176401000000009590921694909402177fffffffffffffffff00000000000000000000000000000000ffffffffffffffff166801000000000000000067ffffffffffffffff948516027fffffffffffffffff0000000000000000ffffffffffffffffffffffffffffffff16177001000000000000000000000000000000009390941692909202929092177fffffffffff000000ffffffffffffffffffffffffffffffffffffffffffffffff16780100000000000000000000000000000000000000000000000062ffffff9092169190910217905550505050565b336000908152607160205260409020546001600160a01b0316806119f4576040517f412a573000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b33600090815260686020526040902054610100900460ff16611a42576040517fdfac5c4a00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b3360009081526068602052604090205462010000900460ff16611a91576040517f2272386e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b33600090815260686020526040902054640100000000900460ff16611ae2576040517f73f7ab1e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b670de0b6b3a76400008267ffffffffffffffff161115611b2e576040517fcb3f365b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b33600081815260686020908152604080832080547fffffffffffffffffffffffffffffffffffffffffffffffffffffff00ffffffff169055606b8252918290208251606081018452905467ffffffffffffffff808216835268010000000000000000820416928201929092527001000000000000000000000000000000009091046fffffffffffffffffffffffffffffffff169181019190915290611bd290612d59565b67ffffffffffffffff90811682528381166020808401918252336000908152606b909152604090819020845181549351928601516fffffffffffffffffffffffffffffffff9081167001000000000000000000000000000000000293861668010000000000000000027fffffffffffffffffffffffffffffffff0000000000000000000000000000000090951691909516179290921792909216919091179055611c7b8261383b565b604080820151815167ffffffffffffffff861681526fffffffffffffffffffffffffffffffff909116602082015233917f7dba82990ac719cd904649f1701fcda6db3c92f2ff9cd31ceed2eb989a441d3191015b60405180910390a2505050565b6001600160a01b038181166000908152606a6020526040812054909116158015906110045750506001600160a01b039081166000908152606a602090815260408083205460699092529091205482169116141590565b60af5460ff1615611d6f576040517fbc1eb20900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b611d77612de4565b600003611db0576040517fb9927e0d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b3415611e19573460ac6000828254611dc891906159ef565b9091555050604051348152339073f7ab6cfaebbadfe8b5494022c4c6db776bd63b6b907ff70d5c697de7ea828df48e5c4573cb2194c659f1901f70110c52b066dcf508269060200160405180910390a35b8015611e90578060ab6000828254611e3191906159ef565b909155505060a85460405182815233916001600160a01b0316907ff70d5c697de7ea828df48e5c4573cb2194c659f1901f70110c52b066dcf508269060200160405180910390a360a854611e90906001600160a01b031633308461386a565b50565b336000908152606960205260409020546001600160a01b0316611eb5816138f2565b6040516001600160a01b038216815233907f4815977db1df3778807ed9d5a0c32398684440c2cd8cfc0a411b47528214df7b906020015b60405180910390a250565b6040805160a08101825260335463ffffffff8082168352640100000000820416602083015268010000000000000000810467ffffffffffffffff90811693830193909352700100000000000000000000000000000000810490921660608201819052780100000000000000000000000000000000000000000000000090920462ffffff166080820152600091829190421061203957806080015162ffffff16816020015163ffffffff168260600151611fb09190615aa2565b611fba9190615aa2565b67ffffffffffffffff1642101561200257806060015167ffffffffffffffff16816080015162ffffff168260200151611ff39190615ac3565b63ffffffff1692509250509091565b806080015162ffffff16816060015161201b9190615aa2565b67ffffffffffffffff16816020015163ffffffff1692509250509091565b806040015167ffffffffffffffff16816000015163ffffffff1692509250509091565b60af5460ff1615612099576040517fbc1eb20900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b828181146120d3576040517fccab218c00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b33600090815260b0602052604081205460a95490916120f142612701565b905060005b8481101561215b5760008061214c8b8b8581811061211657612116615a2b565b905060200201602081019061212b9190615399565b8a8a8681811061213d5761213d615a2b565b90506020020135888888613979565b909650945050506001016120f6565b50612167338484613b0a565b5050505050505050565b805160005b818110156122a75760006001600160a01b03166072600085848151811061219f5761219f615a2b565b6020908102919091018101516001600160a01b039081168352908201929092526040016000205416036121fe576040517f3c91aa3a00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b82818151811061221057612210615a2b565b60209081029190910101516040517ff7b761580000000000000000000000000000000000000000000000000000000081526001600160a01b0386811660048301523360248301529091169063f7b7615890604401600060405180830381600087803b15801561227e57600080fd5b505af1158015612292573d6000803e3d6000fd5b505050506122a08160010190565b9050612176565b50505050565b6000611004606c83613be4565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805468010000000000000000810460ff16159067ffffffffffffffff166000811580156123055750825b905060008267ffffffffffffffff1660011480156123225750303b155b905081158015612330575080155b15612367576040517ff92ee8a900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b84547fffffffffffffffffffffffffffffffffffffffffffffffff000000000000000016600117855583156123c85784547fffffffffffffffffffffffffffffffffffffffffffffff00ffffffffffffffff16680100000000000000001785555b6123d78e8c8c8c8c8c8c613bf0565b8c60a860006101000a8154816001600160a01b0302191690836001600160a01b031602179055508b60a760006101000a8154816001600160a01b0302191690836001600160a01b0316021790555061242e426129d4565b60ae5583156124925784547fffffffffffffffffffffffffffffffffffffffffffffff00ffffffffffffffff168555604051600181527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b5050505050505050505050505050565b6124aa613c9b565b6124b382613d6d565b6124bd8282613de4565b5050565b60006124cb613f08565b507f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc90565b336000908152607160205260409020546001600160a01b031680612540576040517f412a573000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b33600090815260686020526040902054610100900460ff1661258e576040517fdfac5c4a00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b3360009081526068602052604090205462010000900460ff166125dd576040517f2272386e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b33600090815260686020526040902054640100000000900460ff161561262f576040517f905e710700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b33600090815260686020526040902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffff00ffffffff1664010000000017905560745461268a906fffffffffffffffffffffffffffffffff16426159ef565b336000908152606b6020526040902080546fffffffffffffffffffffffffffffffff9283167001000000000000000000000000000000000292169190911790556126d381613f6a565b60405133907fb6fa8b8bd5eab60f292eca876e3ef90722275b785309d84b1de113ce0b8c4e7490600090a250565b600080600061270e611ef7565b9150915061271d828286613f98565b949350505050565b6001600160a01b038082166000908152607260205260408120549091611004911661306b565b6000546040517f445ac6330000000000000000000000000000000000000000000000000000000081523360048201526001600160a01b039091169063445ac6339060240160006040518083038186803b1580156127a757600080fd5b505afa1580156127bb573d6000803e3d6000fd5b505050506115f5838383613fc2565b6000611004606e83613724565b60006127e3606e6141d9565b905090565b6000546040517f7e185f570000000000000000000000000000000000000000000000000000000081523360048201526001600160a01b0390911690637e185f579060240160006040518083038186803b15801561284457600080fd5b505afa158015612858573d6000803e3d6000fd5b505050506001600160a01b0381811660009081526071602052604090205416806128ae576040517f412a573000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001600160a01b03821660009081526068602052604090205462010000900460ff16612906576040517f2272386e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001600160a01b038216600090815260686020526040902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ffff16905561294d81613f6a565b6129588160006141e3565b6040516001600160a01b038316907f78c8e01ebc9b1b82f14af9f3a9b6fa7bdba5e36f9e96d15ca3aebc36cf72ce8590600090a25050565b612999816138f2565b6040516001600160a01b038216815233907ffd86eb6a6fd802b0b2edabf5bc13b0ada6e619b69bb19a08d048e2d2374de2d190602001611eec565b60008060006129e1611ef7565b9150915061271d828286613824565b60008060006129fd611ef7565b90925090506000612a0e8386615ae0565b9050818181612a1f57612a1f615af3565b06909403949350505050565b6000546040517f445ac6330000000000000000000000000000000000000000000000000000000081523360048201526001600160a01b039091169063445ac6339060240160006040518083038186803b158015612a8757600080fd5b505afa158015612a9b573d6000803e3d6000fd5b505050506001600160a01b038181166000908152607160205260409020541680612af1576040517f412a573000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001600160a01b03821660009081526068602052604090205460ff16612b43576040517f037c597f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001600160a01b038216600090815260686020526040902054610100900460ff1615612b9b576040517f0c60c81000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001600160a01b038216600090815260686020526040902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff16610100179055612be68161383b565b6040516001600160a01b038316907f333bb19eeef0621b32888db778cc7a481a89fc1d59adb2cecb59b40ef048941e90600090a25050565b60af5460ff1615612c5b576040517fbc1eb20900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b33600090815260b0602052604081205460a9548291612c869186918691612c8142612701565b613979565b915091506122a7338383613b0a565b6000546040517f445ac6330000000000000000000000000000000000000000000000000000000081523360048201526001600160a01b039091169063445ac6339060240160006040518083038186803b158015612cf157600080fd5b505afa158015612d05573d6000803e3d6000fd5b50505050612d1283614273565b50612d1e838383613fc2565b60405133906001600160a01b038516907f8af41f46390f96b58351b4d4f8afb27eea35637de1fb1b9538308b25497a27dc90600090a3505050565b6001600160a01b0381166000908152606b602090815260408083208151606081018352905467ffffffffffffffff808216835268010000000000000000820416938201939093527001000000000000000000000000000000009092046fffffffffffffffffffffffffffffffff169082018190524210612ddd576020015192915050565b5192915050565b60006127e3606c6141d9565b6000546040517f445ac6330000000000000000000000000000000000000000000000000000000081523360048201526001600160a01b039091169063445ac6339060240160006040518083038186803b158015612e4c57600080fd5b505afa158015612e60573d6000803e3d6000fd5b505050506001600160a01b038216600081815260686020908152604091829020805463010000006bffffffffffffffff00ffffff9091166c01000000000000000000000000606088901c021717905590517fffffffffffffffffffffffffffffffffffffffff000000000000000000000000841681527f6525882b4c209582fe16abd1257106636114aefe60495f27fcf096a21c8a6d34910160405180910390a25050565b600080546040517f7e185f570000000000000000000000000000000000000000000000000000000081523360048201526001600160a01b0390911690637e185f579060240160006040518083038186803b158015612f6257600080fd5b505afa158015612f76573d6000803e3d6000fd5b5050505061100482614273565b919050565b6000612f9342611017565b4210612fcb576040517f137d765400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60af5460ff1615613008576040517fbc1eb20900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60405133907fe64e289f2bf6b4f5ccbc1597d14be6638e1517b1b29e2ec5a05101f57d8d81e890600090a261303b6143cf565b60af80547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00168215179055919050565b6001600160a01b0381166000908152606860209081526040808320815160e081018352905460ff8082161515835261010082048116158015958401869052620100008304821615159484019490945263010000008204811615156060808501919091526401000000008304909116151560808401527fffffffffffffff0000000000000000000000000000000000000000000000000065010000000000830460c81b1660a08401527fffffffffffffffffffffffffffffffffffffffff0000000000000000000000006c01000000000000000000000000909204901b1660c0820152919061315a575080604001515b801561316857508060600151155b9392505050565b6001600160a01b038216600090815260b06020526040812054808203613199576001915050611004565b60a7546040517f70a082310000000000000000000000000000000000000000000000000000000081526001600160a01b038681166004830152839216906370a0823190602401602060405180830381865afa1580156131fc573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906132209190615b22565b1015949350505050565b60af5460009060ff161515810361326d576040517f3d0a971800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61303b6143cf565b6000611004606e83613be4565b600061328d336127ca565b156132a657503360009081526073602052604090205490565b5060ae5490565b6000546040517f445ac6330000000000000000000000000000000000000000000000000000000081523360048201526001600160a01b039091169063445ac6339060240160006040518083038186803b15801561330957600080fd5b505afa15801561331d573d6000803e3d6000fd5b505050506001600160a01b038116600090815260686020526040902054610100900460ff16613378576040517fdfac5c4a00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001600160a01b03808216600090815260686020908152604080832080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff169055607190915290205416801561344b576133d281613f6a565b6067546040517f95f948dc0000000000000000000000000000000000000000000000000000000081526001600160a01b039182166004820152908216906395f948dc90602401600060405180830381600087803b15801561343257600080fd5b505af1158015613446573d6000803e3d6000fd5b505050505b6040516001600160a01b038316907ffb4ca6a2470de95e9f648557fae63380f22c4b760bd27b0571caf5977a30278a90600090a25050565b6000546040517f445ac6330000000000000000000000000000000000000000000000000000000081523360048201526001600160a01b039091169063445ac6339060240160006040518083038186803b1580156134df57600080fd5b505afa1580156134f3573d6000803e3d6000fd5b505050506135008261306b565b613535576040517ead0c9500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001600160a01b038083166000908152606a60205260409020548116908216811461358c576040517f3b7db6df00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001600160a01b0383811660008181526069602090815260409182902080547fffffffffffffffffffffffff0000000000000000000000000000000000000000168686161790559051928516835290917f390b365b1e8016ae28db114a7764f9e95293831d64e8958261d56cf59a2c01739101611ccf565b6000546040517f445ac6330000000000000000000000000000000000000000000000000000000081523360048201526001600160a01b039091169063445ac6339060240160006040518083038186803b15801561366057600080fd5b505afa158015613674573d6000803e3d6000fd5b505050506001600160a01b0381166000908152606860205260409020546301000000900460ff166136d1576040517f6cd6020100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001600160a01b03811660008181526068602052604080822080546bffffffffffffffff00ffffff169055517f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa9190a250565b6001600160a01b03811660009081526001830160205260408120541515613168565b60008183116137555781613168565b5090919050565b6000613769836002615b3b565b63ffffffff168263ffffffff161015905092915050565b6001600160a01b0380821660009081526072602052604090205416806137d2576040517f3c91aa3a00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001600160a01b03811660009081526068602052604090205460ff166124bd576040517f037c597f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000613831848484613f98565b9091019392505050565b6138448161452a565b15611e9057613854606c82614639565b50613860606e8261464e565b50611e9081614663565b604080516001600160a01b0385811660248301528416604482015260648082018490528251808303909101815260849091019091526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f23b872dd000000000000000000000000000000000000000000000000000000001790526122a7908590614870565b336138fc8161306b565b613931576040517ead0c9500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001600160a01b039081166000908152606a602052604090208054919092167fffffffffffffffffffffffff0000000000000000000000000000000000000000909116179055565b60008061398587613780565b6040517fab3f22d50000000000000000000000000000000000000000000000000000000081523360048201526024810187905260448101849052600090819081906001600160a01b038b169063ab3f22d5906064016060604051808303816000875af11580156139f9573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613a1d9190615b63565b925092509250613a2c8a6127ca565b15613a805780613a68576040517f8b6f39e300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b613a728389615ae0565b9450869350613b0092505050565b8015613aa357613a908389615ae0565b9450613a9c8288615ae0565b9350613abc565b613aad83896159ef565b9450613ab982886159ef565b93505b6040518981526001600160a01b038b169033907fed07ca57097393e77ba36105a07f6810afc2180b72a9c02a4b0da4b51a73a6ec9060200160405180910390a35050505b9550959350505050565b6001600160a01b03838116600081815260b060205260409081902085905560a984905560a75490517f70a082310000000000000000000000000000000000000000000000000000000081526004810192909252909116906370a0823190602401602060405180830381865afa158015613b87573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613bab9190615b22565b8211156115f5576040517f2e0aee6200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600061316883836148ec565b613bf8614916565b613c048785858561497d565b613c0c614ae4565b607080547fffffffffffffffffffffffff00000000000000000000000000000000000000009081166001600160a01b03988916179091556067805490911695909616949094179094555050607480547fffffffffffffffffffffffffffffffff00000000000000000000000000000000166fffffffffffffffffffffffffffffffff9092169190911790555050565b306001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000161480613d3457507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316613d287f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc546001600160a01b031690565b6001600160a01b031614155b15613d6b576040517fe07c8dba00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b565b6000546040517feb6f7abf0000000000000000000000000000000000000000000000000000000081523360048201526001600160a01b039091169063eb6f7abf9060240160006040518083038186803b158015613dc957600080fd5b505afa158015613ddd573d6000803e3d6000fd5b5050505050565b816001600160a01b03166352d1902d6040518163ffffffff1660e01b8152600401602060405180830381865afa925050508015613e5c575060408051601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0168201909252613e5991810190615b22565b60015b613ea2576040517f4c9c8ce30000000000000000000000000000000000000000000000000000000081526001600160a01b03831660048201526024015b60405180910390fd5b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc8114613efe576040517faa1d49a400000000000000000000000000000000000000000000000000000000815260048101829052602401613e99565b6115f58383614aec565b306001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614613d6b576040517fe07c8dba00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b613f73816127ca565b611e9057613f82606e82614639565b50613f8e606c8261464e565b50611e9081614b42565b600080613fa58584615ae0565b9050838181613fb657613fb6615af3565b06909303949350505050565b6001600160a01b03831660009081526068602052604090205460ff1615614015576040517fef65161f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001600160a01b03838116600090815260686020908152604080832080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000166101011790556069909152902080547fffffffffffffffffffffffff000000000000000000000000000000000000000016918416919091179055670de0b6b3a764000067ffffffffffffffff821611156140db576040517fcb3f365b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001600160a01b038381166000818152606b602081815260408084208151606081018352815467ffffffffffffffff8a8116808452838701818152426fffffffffffffffffffffffffffffffff9081168689019081529a8c905298885284519051995189167001000000000000000000000000000000000299831668010000000000000000027fffffffffffffffffffffffffffffffff0000000000000000000000000000000090941692169190911791909117909516959095179055805195881686529085019190915290927f7c17fc62e6995162bad4a8b971071389b16be69a2aad3ffec7b89101ccf832f2910160405180910390a250505050565b6000611004825490565b60a8546040517f095ea7b30000000000000000000000000000000000000000000000000000000081526001600160a01b038481166004830152602482018490529091169063095ea7b3906044016020604051808303816000875af115801561424f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906115f59190615a6a565b6001600160a01b03811660009081526068602052604081205462010000900460ff16156142cc576040517f9add58c500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001600160a01b03828116600090815260716020526040902054161561431e576040517f7fe8efbb00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001600160a01b038216600090815260686020526040902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ffff166201000017905561436a82614c16565b9050614396817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6141e3565b6040516001600160a01b038316907f65b21a2a34a615112fde6cfc7e1bfef6dd30a04b0d2003751618b1571cab53d990600090a2919050565b60aa5460ad5460009190826143e2612de4565b905060006143fa826143f56014866159ef565b614d4f565b60ab5460ac5460a95460ae549394509192909190600080614419611ef7565b915091505b868910156144545761443d6144328a6122ad565b878787878787614d5e565b614447908b6159ef565b995060018901985061441e565b60405133907fcc320ee5dbf17441226d664c195a950e95eef67dc4dbebde435456c5389b427e90600090a287870361450f5760405133907f2e0a637781c44a621d21ae02c97a62860799594e47e453e0491eb348ebf83bff90600090a2600060ad81905560ac81905560ab81905560af80547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016905560aa5560a98a90556144fb426129d4565b60ae555060019a9950505050505050505050565b50505060ad9590955550505060aa9290925550600092915050565b6001600160a01b03808216600090815260726020908152604080832054909316825260688152828220835160e081018552905460ff8082161515835261010082048116158015948401859052620100008304821615159684019690965263010000008204811615156060808501919091526401000000008304909116151560808401527fffffffffffffff0000000000000000000000000000000000000000000000000065010000000000830460c81b1660a08401527fffffffffffffffffffffffffffffffffffffffff0000000000000000000000006c01000000000000000000000000909204901b1660c08201529192614627575080604001515b80156131685750608001511592915050565b6000613168836001600160a01b038416614ede565b6000613168836001600160a01b038416614f2d565b60af5460ff16156146a0576040517fbc1eb20900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b4260ae54116146db576040517fd0f0904700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60ae546001600160a01b03821660009081526073602052604090205410156147dd57600080614708611ef7565b6001600160a01b0385166000818152607360205260408082205490517fa505626a0000000000000000000000000000000000000000000000000000000081526004810183905260248101839052604481019190915260648101859052608481018490529395509193509163a505626a919060a40160206040518083038185885af115801561479a573d6000803e3d6000fd5b50505050506040513d601f19601f820116820180604052508101906147bf9190615b22565b60a960008282546147d091906159ef565b9091555061485692505050565b806001600160a01b031663e52595466040518163ffffffff1660e01b8152600401602060405180830381865afa15801561481b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061483f9190615b22565b60a9600082825461485091906159ef565b90915550505b6001600160a01b0316600090815260736020526040812055565b60006148856001600160a01b03841683615027565b905080516000141580156148aa5750808060200190518101906148a89190615a6a565b155b156115f5576040517f5274afe70000000000000000000000000000000000000000000000000000000081526001600160a01b0384166004820152602401613e99565b600082600001828154811061490357614903615a2b565b9060005260206000200154905092915050565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a005468010000000000000000900460ff16613d6b576040517fd7e6bcf800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b614985614916565b61498e84615035565b6040805160a0810182526033805463ffffffff9687168084526020840181905267ffffffffffffffff42169484018590526060840185905262ffffff9690961660809093018390527fffffffffffffffffffffffffffffffffffffffffffffffff0000000000000000168517640100000000909502949094177fffffffffffffffff00000000000000000000000000000000ffffffffffffffff166801000000000000000083027fffffffffffffffff0000000000000000ffffffffffffffffffffffffffffffff1617700100000000000000000000000000000000909202919091177fffffffffff000000ffffffffffffffffffffffffffffffffffffffffffffffff16780100000000000000000000000000000000000000000000000090910217909155603480547fffffffffffffffffffffffffffffffffffffffffffffffffffffffff00000000169190921617905550565b613d6b614916565b614af58261507f565b6040516001600160a01b038316907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a2805115614b3a576115f58282615127565b6124bd61519d565b60af5460ff1615614b7f576040517fbc1eb20900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b806001600160a01b031663e52595466040518163ffffffff1660e01b8152600401602060405180830381865afa158015614bbd573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190614be19190615b22565b60a96000828254614bf29190615ae0565b909155505060ae546001600160a01b03909116600090815260736020526040902055565b607054604080517fdc5a417900000000000000000000000000000000000000000000000000000000815290516000926001600160a01b03169163dc5a4179916004808301926020929190829003018187875af1158015614c7a573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190614c9e9190615a85565b6001600160a01b03808416600081815260716020908152604080832080549587167fffffffffffffffffffffffff0000000000000000000000000000000000000000968716811790915583526072909152902080549092161790559050614d06606c82614639565b506040513381526001600160a01b0380831691908416907f9b8203efe7fe42185a7755b0510f87c8b693971d6a7c22520aaf683e6b1242619060200160405180910390a3919050565b60008183106137555781613168565b600080886001600160a01b031663e52595466040518163ffffffff1660e01b8152600401602060405180830381865afa158015614d9f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190614dc39190615b22565b9050600086614dd28a84615b8f565b614ddc9190615ba6565b9050600087614deb8a85615b8f565b614df59190615ba6565b6001600160a01b03808d1660009081526072602052604081205492935091614e1d9116612d59565b6040517fa505626a0000000000000000000000000000000000000000000000000000000081526004810185905267ffffffffffffffff9190911660248201819052604482018a9052606482018990526084820188905291506001600160a01b038d169063a505626a90849060a40160206040518083038185885af1158015614ea9573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190614ece9190615b22565b9c9b505050505050505050505050565b6000818152600183016020526040812054614f2557508154600181810184556000848152602080822090930184905584548482528286019093526040902091909155611004565b506000611004565b60008181526001830160205260408120548015615016576000614f51600183615ae0565b8554909150600090614f6590600190615ae0565b9050808214614fca576000866000018281548110614f8557614f85615a2b565b9060005260206000200154905080876000018481548110614fa857614fa8615a2b565b6000918252602080832090910192909255918252600188019052604090208390555b8554869080614fdb57614fdb615be1565b600190038181906000526020600020016000905590558560010160008681526020019081526020016000206000905560019350505050611004565b6000915050611004565b5092915050565b6060613168838360006151d5565b61503d614916565b615045614ae4565b600080547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b0392909216919091179055565b806001600160a01b03163b6000036150ce576040517f4c9c8ce30000000000000000000000000000000000000000000000000000000081526001600160a01b0382166004820152602401613e99565b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc80547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b0392909216919091179055565b6060600080846001600160a01b0316846040516151449190615c10565b600060405180830381855af49150503d806000811461517f576040519150601f19603f3d011682016040523d82523d6000602084013e615184565b606091505b509150915061519485838361528b565b95945050505050565b3415613d6b576040517fb398979f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b606081471015615213576040517fcd786059000000000000000000000000000000000000000000000000000000008152306004820152602401613e99565b600080856001600160a01b0316848660405161522f9190615c10565b60006040518083038185875af1925050503d806000811461526c576040519150601f19603f3d011682016040523d82523d6000602084013e615271565b606091505b509150915061528186838361528b565b9695505050505050565b6060826152a05761529b82615300565b613168565b81511580156152b757506001600160a01b0384163b155b156152f9576040517f9996b3150000000000000000000000000000000000000000000000000000000081526001600160a01b0385166004820152602401613e99565b5080613168565b8051156153105780518082602001fd5b6040517f1425ea4200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60006020828403121561535457600080fd5b81357fffffffff000000000000000000000000000000000000000000000000000000008116811461316857600080fd5b6001600160a01b0381168114611e9057600080fd5b6000602082840312156153ab57600080fd5b813561316881615384565b6000602082840312156153c857600080fd5b5035919050565b803563ffffffff81168114612f8357600080fd5b6000602082840312156153f557600080fd5b613168826153cf565b803567ffffffffffffffff81168114612f8357600080fd5b60006020828403121561542857600080fd5b613168826153fe565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016810167ffffffffffffffff811182821017156154a7576154a7615431565b604052919050565b600082601f8301126154c057600080fd5b8135602067ffffffffffffffff8211156154dc576154dc615431565b8160051b6154eb828201615460565b928352848101820192828101908785111561550557600080fd5b83870192505b8483101561552d57823561551e81615384565b8252918301919083019061550b565b979650505050505050565b60006020828403121561554a57600080fd5b813567ffffffffffffffff81111561556157600080fd5b61271d848285016154af565b803562ffffff81168114612f8357600080fd5b6000806040838503121561559357600080fd5b61559c836153cf565b91506155aa6020840161556d565b90509250929050565b60008083601f8401126155c557600080fd5b50813567ffffffffffffffff8111156155dd57600080fd5b6020830191508360208260051b85010111156155f857600080fd5b9250929050565b6000806000806040858703121561561557600080fd5b843567ffffffffffffffff8082111561562d57600080fd5b615639888389016155b3565b9096509450602087013591508082111561565257600080fd5b5061565f878288016155b3565b95989497509550505050565b6000806040838503121561567e57600080fd5b823561568981615384565b9150602083013567ffffffffffffffff8111156156a557600080fd5b6156b1858286016154af565b9150509250929050565b60008060008060008060008060006101208a8c0312156156da57600080fd5b89356156e581615384565b985060208a01356156f581615384565b975060408a013561570581615384565b965060608a013561571581615384565b955060808a013561572581615384565b945061573360a08b016153cf565b935061574160c08b0161556d565b925061574f60e08b016153cf565b91506101008a01356fffffffffffffffffffffffffffffffff8116811461577557600080fd5b809150509295985092959850929598565b6000806040838503121561579957600080fd5b82356157a481615384565b915060208381013567ffffffffffffffff808211156157c257600080fd5b818601915086601f8301126157d657600080fd5b8135818111156157e8576157e8615431565b615818847fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f84011601615460565b9150808252878482850101111561582e57600080fd5b80848401858401376000848284010152508093505050509250929050565b60008060006060848603121561586157600080fd5b833561586c81615384565b9250602084013561587c81615384565b915061588a604085016153fe565b90509250925092565b60005b838110156158ae578181015183820152602001615896565b50506000910152565b60208152600082518060208401526158d6816040850160208701615893565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169190910160400192915050565b6000806040838503121561591b57600080fd5b823561592681615384565b946020939093013593505050565b6000806040838503121561594757600080fd5b823561595281615384565b915060208301357fffffffffffffffffffffffffffffffffffffffff0000000000000000000000008116811461598757600080fd5b809150509250929050565b600080604083850312156159a557600080fd5b82356159b081615384565b9150602083013561598781615384565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b80820180821115611004576110046159c0565b6fffffffffffffffffffffffffffffffff818116838216019080821115615020576150206159c0565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b80518015158114612f8357600080fd5b600060208284031215615a7c57600080fd5b61316882615a5a565b600060208284031215615a9757600080fd5b815161316881615384565b67ffffffffffffffff818116838216019080821115615020576150206159c0565b63ffffffff818116838216019080821115615020576150206159c0565b81810381811115611004576110046159c0565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b600060208284031215615b3457600080fd5b5051919050565b63ffffffff818116838216028082169190828114615b5b57615b5b6159c0565b505092915050565b600080600060608486031215615b7857600080fd5b835192506020840151915061588a60408501615a5a565b8082028115828204841417611004576110046159c0565b600082615bdc577f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b500490565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fd5b60008251615c22818460208701615893565b919091019291505056fea164736f6c6343000814000a", + "devdoc": { + "version": 1, + "kind": "dev", + "methods": { + "activateBuilder(address,address,uint64)": { + "details": "reverts if it is not called by the owner address reverts if it is already activated", + "params": { + "builder_": "address of the builder", + "rewardPercentage_": "reward percentage(100% == 1 ether)", + "rewardReceiver_": "address of the builder reward receiver" + } + }, + "allocate(address,uint256)": { + "details": "reverts if it is called during the distribution period reverts if gauge does not have a builder associated", + "params": { + "allocation_": "amount of votes to allocate", + "gauge_": "address of the gauge where the votes will be allocated" + } + }, + "allocateBatch(address[],uint256[])": { + "details": "reverts if it is called during the distribution period reverts if gauge does not have a builder associated", + "params": { + "allocations_": "array of amount of votes to allocate", + "gauges_": "array of gauges where the votes will be allocated" + } + }, + "approveBuidlerRewardReceiverReplacement(address,address)": { + "details": "reverts if provided `rewardReceiverReplacement_` doesn't match Builder's request", + "params": { + "builder_": "address of the builder", + "rewardReceiverReplacement_": "new address the builder is requesting to use" + } + }, + "approveBuilderKYC(address)": { + "details": "reverts if it is not called by the owner address reverts if it is not activated reverts if it is already KYC approved reverts if it does not have a gauge associated", + "params": { + "builder_": "address of the builder" + } + }, + "canWithdraw(address,uint256)": { + "details": "user token balance should already account for the update, meaning the check is applied AFTER the withdraw accounting has become effective.", + "params": { + "targetAddress_": "address who wants to withdraw stakingToken param value_ amount of stakingToken to withdraw, not used on current version" + } + }, + "cancelRewardReceiverReplacementRequest()": { + "details": "reverts if Builder is not Operational" + }, + "claimBackerRewards(address,address[])": { + "params": { + "gauges_": "array of gauges to claim", + "rewardToken_": "address of the token rewarded address(uint160(uint256(keccak256(\"COINBASE_ADDRESS\")))) is used for coinbase address" + } + }, + "claimBackerRewards(address[])": { + "params": { + "gauges_": "array of gauges to claim" + } + }, + "communityApproveBuilder(address)": { + "details": "reverts if it is not called by the governor address or authorized changer reverts if is already community approved reverts if it has a gauge associated", + "params": { + "builder_": "address of the builder" + }, + "returns": { + "gauge_": "gauge contract" + } + }, + "constructor": {}, + "cycleNext(uint256)": { + "params": { + "timestamp_": "timestamp to calculate" + }, + "returns": { + "_0": "cycleNext timestamp when the cycle ends or the next starts" + } + }, + "cycleStart(uint256)": { + "params": { + "timestamp_": "timestamp to calculate" + }, + "returns": { + "_0": "cycleStart timestamp when the cycle starts" + } + }, + "dewhitelistBuilder(address)": { + "details": "reverts if it is not called by the governor address or authorized changer reverts if it does not have a gauge associated reverts if it is not community approved", + "params": { + "builder_": "address of the builder" + } + }, + "distribute()": { + "details": "reverts if distribution period has not yet started This function is paginated and it finishes once all gauges distribution are completed, ending the distribution period and voting restrictions.", + "returns": { + "finished_": "true if distribution has finished" + } + }, + "endDistributionWindow(uint256)": { + "params": { + "timestamp_": "timestamp to calculate" + }, + "returns": { + "_0": "endDistributionWindow timestamp when the cycle distribution ends" + } + }, + "getRewardPercentageToApply(address)": { + "params": { + "builder_": "address of the builder" + } + }, + "hasBuilderRewardReceiverPendingApproval(address)": { + "params": { + "builder_": "address of the builder" + } + }, + "initialize(address,address,address,address,address,uint32,uint24,uint32,uint128)": { + "params": { + "cycleDuration_": "Collective Rewards cycle time duration", + "cycleStartOffset_": "offset to add to the first cycle, used to set an specific day to start the cycles", + "distributionDuration_": "duration of the distribution window", + "gaugeFactory_": "address of the GaugeFactoryRootstockCollective contract", + "governanceManager_": "contract with permissioned roles", + "rewardDistributor_": "address of the rewardDistributor contract", + "rewardPercentageCooldown_": "time that must elapse for a new reward percentage from a builder to be applied", + "rewardToken_": "address of the token rewarded to builder and voters", + "stakingToken_": "address of the staking token for builder and voters" + } + }, + "migrateBuilder(address,address,uint64)": { + "params": { + "builder_": "address of the builder whitelisted on the V1's SimplifiedRewardDistributor contract", + "rewardAddress_": "address of the builder reward receiver whitelisted on the V1's SimplifiedRewardDistributor contract", + "rewardPercentage_": "reward percentage(100% == 1 ether)" + } + }, + "notifyRewardAmount(uint256)": { + "details": "reverts if it is called during the distribution period reverts if there are no gauges available for the distribution" + }, + "pauseBuilder(address,bytes20)": { + "details": "reverts if it is not called by the owner address", + "params": { + "builder_": "address of the builder", + "reason_": "reason for the pause" + } + }, + "permitBuilder(uint64)": { + "details": "reverts if it does not have a gauge associated reverts if it is not KYC approved reverts if it is not community approved reverts if it is not revoked reverts if it is executed in distribution period because changing the totalPotentialReward produce a miscalculation of rewards", + "params": { + "rewardPercentage_": "reward percentage(100% == 1 ether)" + } + }, + "proxiableUUID()": { + "details": "Implementation of the ERC1822 {proxiableUUID} function. This returns the storage slot used by the implementation. It is used to validate the implementation's compatibility when performing an upgrade. IMPORTANT: A proxy pointing at a proxiable contract should not be considered proxiable itself, because this risks bricking a proxy that upgrades to it, by delegating to itself until out of gas. Thus it is critical that this function revert if invoked through a proxy. This is guaranteed by the `notDelegated` modifier." + }, + "revokeBuilder()": { + "details": "reverts if it does not have a gauge associated reverts if it is not KYC approved reverts if it is not community approved reverts if it is already revoked reverts if it is executed in distribution period because changing the totalPotentialReward produce a miscalculation of rewards" + }, + "revokeBuilderKYC(address)": { + "details": "reverts if it is not called by the owner address reverts if it is not KYC approved", + "params": { + "builder_": "address of the builder" + } + }, + "setBackerRewardPercentage(uint64)": { + "details": "reverts if builder is not operational", + "params": { + "rewardPercentage_": "reward percentage(100% == 1 ether)" + } + }, + "setCycleDuration(uint32,uint24)": { + "details": "reverts if is too short. It must be greater than 2 time the distribution windowonly callable by an authorized changer or the foundation", + "params": { + "cycleStartOffset_": "offset to add to the first cycle, used to set an specific day to start the cycles", + "newCycleDuration_": "new cycle duration" + } + }, + "setDistributionDuration(uint32)": { + "details": "reverts if is too short. It must be greater than 0reverts if the new distribution is greater than half of the cycle durationreverts if the distribution window is modified during the distribution windowonly callable by the foundation", + "params": { + "newDistributionDuration_": "new distribution window duration" + } + }, + "startDistribution()": { + "details": "reverts if is called outside the distribution window reverts if it is called during the distribution period", + "returns": { + "finished_": "true if distribution has finished" + } + }, + "submitRewardReceiverReplacementRequest(address)": { + "details": "reverts if Builder is not Operational", + "params": { + "newRewardReceiver_": "new address the builder is requesting to use" + } + }, + "supportsInterface(bytes4)": { + "details": "See {IERC165-supportsInterface}." + }, + "timeUntilNextCycle(uint256)": { + "params": { + "timestamp_": "timestamp to calculate" + }, + "returns": { + "_0": "timeUntilNextCycle amount of time until next cycle" + } + }, + "unpauseBuilder(address)": { + "details": "reverts if it is not called by the owner address reverts if it is not paused", + "params": { + "builder_": "address of the builder" + } + }, + "upgradeToAndCall(address,bytes)": { + "details": "Upgrade the implementation of the proxy to `newImplementation`, and subsequently execute the function call encoded in `data`. Calls {_authorizeUpgrade}. Emits an {Upgraded} event." + } + }, + "events": { + "Initialized(uint64)": { + "details": "Triggered when the contract has been initialized or reinitialized." + }, + "Upgraded(address)": { + "details": "Emitted when the implementation is upgraded." + } + }, + "errors": { + "AddressEmptyCode(address)": [ + { + "details": "There's no code at `target` (it is not a contract)." + } + ], + "AddressInsufficientBalance(address)": [ + { + "details": "The ETH balance of the account is not enough to perform the operation." + } + ], + "ERC1967InvalidImplementation(address)": [ + { + "details": "The `implementation` of the proxy is invalid." + } + ], + "ERC1967NonPayable()": [ + { + "details": "An upgrade function sees `msg.value > 0` that may be lost." + } + ], + "FailedInnerCall()": [ + { + "details": "A call to an address target failed. The target may have reverted." + } + ], + "InvalidInitialization()": [ + { + "details": "The contract is already initialized." + } + ], + "NotInitializing()": [ + { + "details": "The contract is not initializing." + } + ], + "SafeERC20FailedOperation(address)": [ + { + "details": "An operation with an ERC20 token failed." + } + ], + "UUPSUnauthorizedCallContext()": [ + { + "details": "The call is from an unauthorized context." + } + ], + "UUPSUnsupportedProxiableUUID(bytes32)": [ + { + "details": "The storage `slot` is unsupported as a UUID." + } + ] + }, + "title": "BackersManagerRootstockCollective" + }, + "metadata": "{\"compiler\":{\"version\":\"0.8.20+commit.a1b79de6\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"target\",\"type\":\"address\"}],\"type\":\"error\",\"name\":\"AddressEmptyCode\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"type\":\"error\",\"name\":\"AddressInsufficientBalance\"},{\"inputs\":[],\"type\":\"error\",\"name\":\"AlreadyActivated\"},{\"inputs\":[],\"type\":\"error\",\"name\":\"AlreadyCommunityApproved\"},{\"inputs\":[],\"type\":\"error\",\"name\":\"AlreadyKYCApproved\"},{\"inputs\":[],\"type\":\"error\",\"name\":\"AlreadyRevoked\"},{\"inputs\":[],\"type\":\"error\",\"name\":\"BeforeDistribution\"},{\"inputs\":[],\"type\":\"error\",\"name\":\"BuilderAlreadyExists\"},{\"inputs\":[],\"type\":\"error\",\"name\":\"BuilderDoesNotExist\"},{\"inputs\":[],\"type\":\"error\",\"name\":\"CycleDurationTooShort\"},{\"inputs\":[],\"type\":\"error\",\"name\":\"DistributionDurationTooLong\"},{\"inputs\":[],\"type\":\"error\",\"name\":\"DistributionDurationTooShort\"},{\"inputs\":[],\"type\":\"error\",\"name\":\"DistributionModifiedDuringDistributionWindow\"},{\"inputs\":[],\"type\":\"error\",\"name\":\"DistributionPeriodDidNotStart\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"implementation\",\"type\":\"address\"}],\"type\":\"error\",\"name\":\"ERC1967InvalidImplementation\"},{\"inputs\":[],\"type\":\"error\",\"name\":\"ERC1967NonPayable\"},{\"inputs\":[],\"type\":\"error\",\"name\":\"FailedInnerCall\"},{\"inputs\":[],\"type\":\"error\",\"name\":\"GaugeDoesNotExist\"},{\"inputs\":[],\"type\":\"error\",\"name\":\"InvalidBackerRewardPercentage\"},{\"inputs\":[],\"type\":\"error\",\"name\":\"InvalidBuilderRewardReceiver\"},{\"inputs\":[],\"type\":\"error\",\"name\":\"InvalidInitialization\"},{\"inputs\":[],\"type\":\"error\",\"name\":\"NoGaugesForDistribution\"},{\"inputs\":[],\"type\":\"error\",\"name\":\"NotActivated\"},{\"inputs\":[],\"type\":\"error\",\"name\":\"NotCommunityApproved\"},{\"inputs\":[],\"type\":\"error\",\"name\":\"NotEnoughStaking\"},{\"inputs\":[],\"type\":\"error\",\"name\":\"NotInDistributionPeriod\"},{\"inputs\":[],\"type\":\"error\",\"name\":\"NotInitializing\"},{\"inputs\":[],\"type\":\"error\",\"name\":\"NotKYCApproved\"},{\"inputs\":[],\"type\":\"error\",\"name\":\"NotOperational\"},{\"inputs\":[],\"type\":\"error\",\"name\":\"NotPaused\"},{\"inputs\":[],\"type\":\"error\",\"name\":\"NotRevoked\"},{\"inputs\":[],\"type\":\"error\",\"name\":\"NotValidChangerOrFoundation\"},{\"inputs\":[],\"type\":\"error\",\"name\":\"OnlyInDistributionWindow\"},{\"inputs\":[],\"type\":\"error\",\"name\":\"PositiveAllocationOnHaltedGauge\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"}],\"type\":\"error\",\"name\":\"SafeERC20FailedOperation\"},{\"inputs\":[],\"type\":\"error\",\"name\":\"UUPSUnauthorizedCallContext\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"slot\",\"type\":\"bytes32\"}],\"type\":\"error\",\"name\":\"UUPSUnsupportedProxiableUUID\"},{\"inputs\":[],\"type\":\"error\",\"name\":\"UnequalLengths\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"builder_\",\"type\":\"address\",\"indexed\":true},{\"internalType\":\"uint256\",\"name\":\"rewardPercentage_\",\"type\":\"uint256\",\"indexed\":false},{\"internalType\":\"uint256\",\"name\":\"cooldown_\",\"type\":\"uint256\",\"indexed\":false}],\"type\":\"event\",\"name\":\"BackerRewardPercentageUpdateScheduled\",\"anonymous\":false},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"builder_\",\"type\":\"address\",\"indexed\":true},{\"internalType\":\"address\",\"name\":\"rewardReceiver_\",\"type\":\"address\",\"indexed\":false},{\"internalType\":\"uint64\",\"name\":\"rewardPercentage_\",\"type\":\"uint64\",\"indexed\":false}],\"type\":\"event\",\"name\":\"BuilderActivated\",\"anonymous\":false},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"builder_\",\"type\":\"address\",\"indexed\":true},{\"internalType\":\"address\",\"name\":\"migrator_\",\"type\":\"address\",\"indexed\":true}],\"type\":\"event\",\"name\":\"BuilderMigrated\",\"anonymous\":false},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"builder_\",\"type\":\"address\",\"indexed\":true},{\"internalType\":\"address\",\"name\":\"newRewardReceiver_\",\"type\":\"address\",\"indexed\":false}],\"type\":\"event\",\"name\":\"BuilderRewardReceiverReplacementApproved\",\"anonymous\":false},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"builder_\",\"type\":\"address\",\"indexed\":true},{\"internalType\":\"address\",\"name\":\"newRewardReceiver_\",\"type\":\"address\",\"indexed\":false}],\"type\":\"event\",\"name\":\"BuilderRewardReceiverReplacementCancelled\",\"anonymous\":false},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"builder_\",\"type\":\"address\",\"indexed\":true},{\"internalType\":\"address\",\"name\":\"newRewardReceiver_\",\"type\":\"address\",\"indexed\":false}],\"type\":\"event\",\"name\":\"BuilderRewardReceiverReplacementRequested\",\"anonymous\":false},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"builder_\",\"type\":\"address\",\"indexed\":true}],\"type\":\"event\",\"name\":\"CommunityApproved\",\"anonymous\":false},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"builder_\",\"type\":\"address\",\"indexed\":true}],\"type\":\"event\",\"name\":\"Dewhitelisted\",\"anonymous\":false},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"builder_\",\"type\":\"address\",\"indexed\":true},{\"internalType\":\"address\",\"name\":\"gauge_\",\"type\":\"address\",\"indexed\":true},{\"internalType\":\"address\",\"name\":\"creator_\",\"type\":\"address\",\"indexed\":false}],\"type\":\"event\",\"name\":\"GaugeCreated\",\"anonymous\":false},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"version\",\"type\":\"uint64\",\"indexed\":false}],\"type\":\"event\",\"name\":\"Initialized\",\"anonymous\":false},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"builder_\",\"type\":\"address\",\"indexed\":true}],\"type\":\"event\",\"name\":\"KYCApproved\",\"anonymous\":false},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"builder_\",\"type\":\"address\",\"indexed\":true}],\"type\":\"event\",\"name\":\"KYCRevoked\",\"anonymous\":false},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"backer_\",\"type\":\"address\",\"indexed\":true},{\"internalType\":\"address\",\"name\":\"gauge_\",\"type\":\"address\",\"indexed\":true},{\"internalType\":\"uint256\",\"name\":\"allocation_\",\"type\":\"uint256\",\"indexed\":false}],\"type\":\"event\",\"name\":\"NewAllocation\",\"anonymous\":false},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"newCycleDuration_\",\"type\":\"uint256\",\"indexed\":false},{\"internalType\":\"uint256\",\"name\":\"cooldownEndTime_\",\"type\":\"uint256\",\"indexed\":false}],\"type\":\"event\",\"name\":\"NewCycleDurationScheduled\",\"anonymous\":false},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"newDistributionDuration_\",\"type\":\"uint256\",\"indexed\":false},{\"internalType\":\"address\",\"name\":\"by_\",\"type\":\"address\",\"indexed\":false}],\"type\":\"event\",\"name\":\"NewDistributionDuration\",\"anonymous\":false},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"rewardToken_\",\"type\":\"address\",\"indexed\":true},{\"internalType\":\"address\",\"name\":\"sender_\",\"type\":\"address\",\"indexed\":true},{\"internalType\":\"uint256\",\"name\":\"amount_\",\"type\":\"uint256\",\"indexed\":false}],\"type\":\"event\",\"name\":\"NotifyReward\",\"anonymous\":false},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"builder_\",\"type\":\"address\",\"indexed\":true},{\"internalType\":\"bytes20\",\"name\":\"reason_\",\"type\":\"bytes20\",\"indexed\":false}],\"type\":\"event\",\"name\":\"Paused\",\"anonymous\":false},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"builder_\",\"type\":\"address\",\"indexed\":true},{\"internalType\":\"uint256\",\"name\":\"rewardPercentage_\",\"type\":\"uint256\",\"indexed\":false},{\"internalType\":\"uint256\",\"name\":\"cooldown_\",\"type\":\"uint256\",\"indexed\":false}],\"type\":\"event\",\"name\":\"Permitted\",\"anonymous\":false},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"builder_\",\"type\":\"address\",\"indexed\":true}],\"type\":\"event\",\"name\":\"Revoked\",\"anonymous\":false},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"sender_\",\"type\":\"address\",\"indexed\":true}],\"type\":\"event\",\"name\":\"RewardDistributed\",\"anonymous\":false},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"sender_\",\"type\":\"address\",\"indexed\":true}],\"type\":\"event\",\"name\":\"RewardDistributionFinished\",\"anonymous\":false},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"sender_\",\"type\":\"address\",\"indexed\":true}],\"type\":\"event\",\"name\":\"RewardDistributionStarted\",\"anonymous\":false},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"builder_\",\"type\":\"address\",\"indexed\":true}],\"type\":\"event\",\"name\":\"Unpaused\",\"anonymous\":false},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"implementation\",\"type\":\"address\",\"indexed\":true}],\"type\":\"event\",\"name\":\"Upgraded\",\"anonymous\":false},{\"inputs\":[],\"stateMutability\":\"view\",\"type\":\"function\",\"name\":\"UPGRADE_INTERFACE_VERSION\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}]},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"builder_\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"rewardReceiver_\",\"type\":\"address\"},{\"internalType\":\"uint64\",\"name\":\"rewardPercentage_\",\"type\":\"uint64\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\",\"name\":\"activateBuilder\"},{\"inputs\":[{\"internalType\":\"contract GaugeRootstockCollective\",\"name\":\"gauge_\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"allocation_\",\"type\":\"uint256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\",\"name\":\"allocate\"},{\"inputs\":[{\"internalType\":\"contract GaugeRootstockCollective[]\",\"name\":\"gauges_\",\"type\":\"address[]\"},{\"internalType\":\"uint256[]\",\"name\":\"allocations_\",\"type\":\"uint256[]\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\",\"name\":\"allocateBatch\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"builder_\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"rewardReceiverReplacement_\",\"type\":\"address\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\",\"name\":\"approveBuidlerRewardReceiverReplacement\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"builder_\",\"type\":\"address\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\",\"name\":\"approveBuilderKYC\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"builder\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\",\"name\":\"backerRewardPercentage\",\"outputs\":[{\"internalType\":\"uint64\",\"name\":\"previous\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"next\",\"type\":\"uint64\"},{\"internalType\":\"uint128\",\"name\":\"cooldownEndTime\",\"type\":\"uint128\"}]},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"backer\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\",\"name\":\"backerTotalAllocation\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"allocation\",\"type\":\"uint256\"}]},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"builder\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\",\"name\":\"builderRewardReceiver\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"rewardReceiver\",\"type\":\"address\"}]},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"builder\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\",\"name\":\"builderRewardReceiverReplacement\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"rewardReceiverReplacement\",\"type\":\"address\"}]},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"builder\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\",\"name\":\"builderState\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"activated\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"kycApproved\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"communityApproved\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"paused\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"revoked\",\"type\":\"bool\"},{\"internalType\":\"bytes7\",\"name\":\"reserved\",\"type\":\"bytes7\"},{\"internalType\":\"bytes20\",\"name\":\"pausedReason\",\"type\":\"bytes20\"}]},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"builder\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\",\"name\":\"builderToGauge\",\"outputs\":[{\"internalType\":\"contract GaugeRootstockCollective\",\"name\":\"gauge\",\"type\":\"address\"}]},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"targetAddress_\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\",\"name\":\"canWithdraw\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}]},{\"inputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\",\"name\":\"cancelRewardReceiverReplacementRequest\"},{\"inputs\":[{\"internalType\":\"contract GaugeRootstockCollective[]\",\"name\":\"gauges_\",\"type\":\"address[]\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\",\"name\":\"claimBackerRewards\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"rewardToken_\",\"type\":\"address\"},{\"internalType\":\"contract GaugeRootstockCollective[]\",\"name\":\"gauges_\",\"type\":\"address[]\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\",\"name\":\"claimBackerRewards\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"builder_\",\"type\":\"address\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\",\"name\":\"communityApproveBuilder\",\"outputs\":[{\"internalType\":\"contract GaugeRootstockCollective\",\"name\":\"gauge_\",\"type\":\"address\"}]},{\"inputs\":[],\"stateMutability\":\"view\",\"type\":\"function\",\"name\":\"cycleData\",\"outputs\":[{\"internalType\":\"uint32\",\"name\":\"previousDuration\",\"type\":\"uint32\"},{\"internalType\":\"uint32\",\"name\":\"nextDuration\",\"type\":\"uint32\"},{\"internalType\":\"uint64\",\"name\":\"previousStart\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"nextStart\",\"type\":\"uint64\"},{\"internalType\":\"uint24\",\"name\":\"offset\",\"type\":\"uint24\"}]},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"timestamp_\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\",\"name\":\"cycleNext\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}]},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"timestamp_\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\",\"name\":\"cycleStart\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}]},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"builder_\",\"type\":\"address\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\",\"name\":\"dewhitelistBuilder\"},{\"inputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\",\"name\":\"distribute\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"finished_\",\"type\":\"bool\"}]},{\"inputs\":[],\"stateMutability\":\"view\",\"type\":\"function\",\"name\":\"distributionDuration\",\"outputs\":[{\"internalType\":\"uint32\",\"name\":\"\",\"type\":\"uint32\"}]},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"timestamp_\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\",\"name\":\"endDistributionWindow\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}]},{\"inputs\":[],\"stateMutability\":\"view\",\"type\":\"function\",\"name\":\"gaugeFactory\",\"outputs\":[{\"internalType\":\"contract GaugeFactoryRootstockCollective\",\"name\":\"\",\"type\":\"address\"}]},{\"inputs\":[{\"internalType\":\"contract GaugeRootstockCollective\",\"name\":\"gauge\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\",\"name\":\"gaugeToBuilder\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"builder\",\"type\":\"address\"}]},{\"inputs\":[],\"stateMutability\":\"view\",\"type\":\"function\",\"name\":\"getCycleStartAndDuration\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}]},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"index_\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\",\"name\":\"getGaugeAt\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}]},{\"inputs\":[],\"stateMutability\":\"view\",\"type\":\"function\",\"name\":\"getGaugesLength\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}]},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"index_\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\",\"name\":\"getHaltedGaugeAt\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}]},{\"inputs\":[],\"stateMutability\":\"view\",\"type\":\"function\",\"name\":\"getHaltedGaugesLength\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}]},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"builder_\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\",\"name\":\"getRewardPercentageToApply\",\"outputs\":[{\"internalType\":\"uint64\",\"name\":\"\",\"type\":\"uint64\"}]},{\"inputs\":[],\"stateMutability\":\"view\",\"type\":\"function\",\"name\":\"governanceManager\",\"outputs\":[{\"internalType\":\"contract IGovernanceManagerRootstockCollective\",\"name\":\"\",\"type\":\"address\"}]},{\"inputs\":[{\"internalType\":\"contract GaugeRootstockCollective\",\"name\":\"gauge\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\",\"name\":\"haltedGaugeLastPeriodFinish\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"lastPeriodFinish\",\"type\":\"uint256\"}]},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"builder_\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\",\"name\":\"hasBuilderRewardReceiverPendingApproval\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}]},{\"inputs\":[],\"stateMutability\":\"view\",\"type\":\"function\",\"name\":\"indexLastGaugeDistributed\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}]},{\"inputs\":[{\"internalType\":\"contract IGovernanceManagerRootstockCollective\",\"name\":\"governanceManager_\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"rewardToken_\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"stakingToken_\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"gaugeFactory_\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"rewardDistributor_\",\"type\":\"address\"},{\"internalType\":\"uint32\",\"name\":\"cycleDuration_\",\"type\":\"uint32\"},{\"internalType\":\"uint24\",\"name\":\"cycleStartOffset_\",\"type\":\"uint24\"},{\"internalType\":\"uint32\",\"name\":\"distributionDuration_\",\"type\":\"uint32\"},{\"internalType\":\"uint128\",\"name\":\"rewardPercentageCooldown_\",\"type\":\"uint128\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\",\"name\":\"initialize\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"builder_\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\",\"name\":\"isBuilderOperational\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}]},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"builder_\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\",\"name\":\"isBuilderPaused\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}]},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"gauge_\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\",\"name\":\"isGaugeHalted\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}]},{\"inputs\":[{\"internalType\":\"contract GaugeRootstockCollective\",\"name\":\"gauge_\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\",\"name\":\"isGaugeOperational\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}]},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"gauge_\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\",\"name\":\"isGaugeRewarded\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}]},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"builder_\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"rewardAddress_\",\"type\":\"address\"},{\"internalType\":\"uint64\",\"name\":\"rewardPercentage_\",\"type\":\"uint64\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\",\"name\":\"migrateBuilder\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"amount_\",\"type\":\"uint256\"}],\"stateMutability\":\"payable\",\"type\":\"function\",\"name\":\"notifyRewardAmount\"},{\"inputs\":[],\"stateMutability\":\"view\",\"type\":\"function\",\"name\":\"onDistributionPeriod\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}]},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"builder_\",\"type\":\"address\"},{\"internalType\":\"bytes20\",\"name\":\"reason_\",\"type\":\"bytes20\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\",\"name\":\"pauseBuilder\"},{\"inputs\":[],\"stateMutability\":\"view\",\"type\":\"function\",\"name\":\"periodFinish\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}]},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"rewardPercentage_\",\"type\":\"uint64\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\",\"name\":\"permitBuilder\"},{\"inputs\":[],\"stateMutability\":\"view\",\"type\":\"function\",\"name\":\"proxiableUUID\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}]},{\"inputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\",\"name\":\"revokeBuilder\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"builder_\",\"type\":\"address\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\",\"name\":\"revokeBuilderKYC\"},{\"inputs\":[],\"stateMutability\":\"view\",\"type\":\"function\",\"name\":\"rewardDistributor\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}]},{\"inputs\":[],\"stateMutability\":\"view\",\"type\":\"function\",\"name\":\"rewardPercentageCooldown\",\"outputs\":[{\"internalType\":\"uint128\",\"name\":\"\",\"type\":\"uint128\"}]},{\"inputs\":[],\"stateMutability\":\"view\",\"type\":\"function\",\"name\":\"rewardToken\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}]},{\"inputs\":[],\"stateMutability\":\"view\",\"type\":\"function\",\"name\":\"rewardsCoinbase\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}]},{\"inputs\":[],\"stateMutability\":\"view\",\"type\":\"function\",\"name\":\"rewardsERC20\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}]},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"rewardPercentage_\",\"type\":\"uint64\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\",\"name\":\"setBackerRewardPercentage\"},{\"inputs\":[{\"internalType\":\"uint32\",\"name\":\"newCycleDuration_\",\"type\":\"uint32\"},{\"internalType\":\"uint24\",\"name\":\"cycleStartOffset_\",\"type\":\"uint24\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\",\"name\":\"setCycleDuration\"},{\"inputs\":[{\"internalType\":\"uint32\",\"name\":\"newDistributionDuration_\",\"type\":\"uint32\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\",\"name\":\"setDistributionDuration\"},{\"inputs\":[],\"stateMutability\":\"view\",\"type\":\"function\",\"name\":\"stakingToken\",\"outputs\":[{\"internalType\":\"contract IERC20\",\"name\":\"\",\"type\":\"address\"}]},{\"inputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\",\"name\":\"startDistribution\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"finished_\",\"type\":\"bool\"}]},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newRewardReceiver_\",\"type\":\"address\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\",\"name\":\"submitRewardReceiverReplacementRequest\"},{\"inputs\":[{\"internalType\":\"bytes4\",\"name\":\"interfaceId_\",\"type\":\"bytes4\"}],\"stateMutability\":\"view\",\"type\":\"function\",\"name\":\"supportsInterface\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}]},{\"inputs\":[],\"stateMutability\":\"view\",\"type\":\"function\",\"name\":\"tempTotalPotentialReward\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}]},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"timestamp_\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\",\"name\":\"timeUntilNextCycle\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}]},{\"inputs\":[],\"stateMutability\":\"view\",\"type\":\"function\",\"name\":\"totalPotentialReward\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}]},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"builder_\",\"type\":\"address\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\",\"name\":\"unpauseBuilder\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newImplementation\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"}],\"stateMutability\":\"payable\",\"type\":\"function\",\"name\":\"upgradeToAndCall\"}],\"devdoc\":{\"kind\":\"dev\",\"methods\":{\"activateBuilder(address,address,uint64)\":{\"details\":\"reverts if it is not called by the owner address reverts if it is already activated\",\"params\":{\"builder_\":\"address of the builder\",\"rewardPercentage_\":\"reward percentage(100% == 1 ether)\",\"rewardReceiver_\":\"address of the builder reward receiver\"}},\"allocate(address,uint256)\":{\"details\":\"reverts if it is called during the distribution period reverts if gauge does not have a builder associated\",\"params\":{\"allocation_\":\"amount of votes to allocate\",\"gauge_\":\"address of the gauge where the votes will be allocated\"}},\"allocateBatch(address[],uint256[])\":{\"details\":\"reverts if it is called during the distribution period reverts if gauge does not have a builder associated\",\"params\":{\"allocations_\":\"array of amount of votes to allocate\",\"gauges_\":\"array of gauges where the votes will be allocated\"}},\"approveBuidlerRewardReceiverReplacement(address,address)\":{\"details\":\"reverts if provided `rewardReceiverReplacement_` doesn't match Builder's request\",\"params\":{\"builder_\":\"address of the builder\",\"rewardReceiverReplacement_\":\"new address the builder is requesting to use\"}},\"approveBuilderKYC(address)\":{\"details\":\"reverts if it is not called by the owner address reverts if it is not activated reverts if it is already KYC approved reverts if it does not have a gauge associated\",\"params\":{\"builder_\":\"address of the builder\"}},\"canWithdraw(address,uint256)\":{\"details\":\"user token balance should already account for the update, meaning the check is applied AFTER the withdraw accounting has become effective.\",\"params\":{\"targetAddress_\":\"address who wants to withdraw stakingToken param value_ amount of stakingToken to withdraw, not used on current version\"}},\"cancelRewardReceiverReplacementRequest()\":{\"details\":\"reverts if Builder is not Operational\"},\"claimBackerRewards(address,address[])\":{\"params\":{\"gauges_\":\"array of gauges to claim\",\"rewardToken_\":\"address of the token rewarded address(uint160(uint256(keccak256(\\\"COINBASE_ADDRESS\\\")))) is used for coinbase address\"}},\"claimBackerRewards(address[])\":{\"params\":{\"gauges_\":\"array of gauges to claim\"}},\"communityApproveBuilder(address)\":{\"details\":\"reverts if it is not called by the governor address or authorized changer reverts if is already community approved reverts if it has a gauge associated\",\"params\":{\"builder_\":\"address of the builder\"},\"returns\":{\"gauge_\":\"gauge contract\"}},\"constructor\":{\"custom:oz-upgrades-unsafe-allow\":\"constructor\"},\"cycleNext(uint256)\":{\"params\":{\"timestamp_\":\"timestamp to calculate\"},\"returns\":{\"_0\":\"cycleNext timestamp when the cycle ends or the next starts\"}},\"cycleStart(uint256)\":{\"params\":{\"timestamp_\":\"timestamp to calculate\"},\"returns\":{\"_0\":\"cycleStart timestamp when the cycle starts\"}},\"dewhitelistBuilder(address)\":{\"details\":\"reverts if it is not called by the governor address or authorized changer reverts if it does not have a gauge associated reverts if it is not community approved\",\"params\":{\"builder_\":\"address of the builder\"}},\"distribute()\":{\"details\":\"reverts if distribution period has not yet started This function is paginated and it finishes once all gauges distribution are completed, ending the distribution period and voting restrictions.\",\"returns\":{\"finished_\":\"true if distribution has finished\"}},\"endDistributionWindow(uint256)\":{\"params\":{\"timestamp_\":\"timestamp to calculate\"},\"returns\":{\"_0\":\"endDistributionWindow timestamp when the cycle distribution ends\"}},\"getRewardPercentageToApply(address)\":{\"params\":{\"builder_\":\"address of the builder\"}},\"hasBuilderRewardReceiverPendingApproval(address)\":{\"params\":{\"builder_\":\"address of the builder\"}},\"initialize(address,address,address,address,address,uint32,uint24,uint32,uint128)\":{\"params\":{\"cycleDuration_\":\"Collective Rewards cycle time duration\",\"cycleStartOffset_\":\"offset to add to the first cycle, used to set an specific day to start the cycles\",\"distributionDuration_\":\"duration of the distribution window\",\"gaugeFactory_\":\"address of the GaugeFactoryRootstockCollective contract\",\"governanceManager_\":\"contract with permissioned roles\",\"rewardDistributor_\":\"address of the rewardDistributor contract\",\"rewardPercentageCooldown_\":\"time that must elapse for a new reward percentage from a builder to be applied\",\"rewardToken_\":\"address of the token rewarded to builder and voters\",\"stakingToken_\":\"address of the staking token for builder and voters\"}},\"migrateBuilder(address,address,uint64)\":{\"params\":{\"builder_\":\"address of the builder whitelisted on the V1's SimplifiedRewardDistributor contract\",\"rewardAddress_\":\"address of the builder reward receiver whitelisted on the V1's SimplifiedRewardDistributor contract\",\"rewardPercentage_\":\"reward percentage(100% == 1 ether)\"}},\"notifyRewardAmount(uint256)\":{\"details\":\"reverts if it is called during the distribution period reverts if there are no gauges available for the distribution\"},\"pauseBuilder(address,bytes20)\":{\"details\":\"reverts if it is not called by the owner address\",\"params\":{\"builder_\":\"address of the builder\",\"reason_\":\"reason for the pause\"}},\"permitBuilder(uint64)\":{\"details\":\"reverts if it does not have a gauge associated reverts if it is not KYC approved reverts if it is not community approved reverts if it is not revoked reverts if it is executed in distribution period because changing the totalPotentialReward produce a miscalculation of rewards\",\"params\":{\"rewardPercentage_\":\"reward percentage(100% == 1 ether)\"}},\"proxiableUUID()\":{\"details\":\"Implementation of the ERC1822 {proxiableUUID} function. This returns the storage slot used by the implementation. It is used to validate the implementation's compatibility when performing an upgrade. IMPORTANT: A proxy pointing at a proxiable contract should not be considered proxiable itself, because this risks bricking a proxy that upgrades to it, by delegating to itself until out of gas. Thus it is critical that this function revert if invoked through a proxy. This is guaranteed by the `notDelegated` modifier.\"},\"revokeBuilder()\":{\"details\":\"reverts if it does not have a gauge associated reverts if it is not KYC approved reverts if it is not community approved reverts if it is already revoked reverts if it is executed in distribution period because changing the totalPotentialReward produce a miscalculation of rewards\"},\"revokeBuilderKYC(address)\":{\"details\":\"reverts if it is not called by the owner address reverts if it is not KYC approved\",\"params\":{\"builder_\":\"address of the builder\"}},\"setBackerRewardPercentage(uint64)\":{\"details\":\"reverts if builder is not operational\",\"params\":{\"rewardPercentage_\":\"reward percentage(100% == 1 ether)\"}},\"setCycleDuration(uint32,uint24)\":{\"details\":\"reverts if is too short. It must be greater than 2 time the distribution windowonly callable by an authorized changer or the foundation\",\"params\":{\"cycleStartOffset_\":\"offset to add to the first cycle, used to set an specific day to start the cycles\",\"newCycleDuration_\":\"new cycle duration\"}},\"setDistributionDuration(uint32)\":{\"details\":\"reverts if is too short. It must be greater than 0reverts if the new distribution is greater than half of the cycle durationreverts if the distribution window is modified during the distribution windowonly callable by the foundation\",\"params\":{\"newDistributionDuration_\":\"new distribution window duration\"}},\"startDistribution()\":{\"details\":\"reverts if is called outside the distribution window reverts if it is called during the distribution period\",\"returns\":{\"finished_\":\"true if distribution has finished\"}},\"submitRewardReceiverReplacementRequest(address)\":{\"details\":\"reverts if Builder is not Operational\",\"params\":{\"newRewardReceiver_\":\"new address the builder is requesting to use\"}},\"supportsInterface(bytes4)\":{\"details\":\"See {IERC165-supportsInterface}.\"},\"timeUntilNextCycle(uint256)\":{\"params\":{\"timestamp_\":\"timestamp to calculate\"},\"returns\":{\"_0\":\"timeUntilNextCycle amount of time until next cycle\"}},\"unpauseBuilder(address)\":{\"details\":\"reverts if it is not called by the owner address reverts if it is not paused\",\"params\":{\"builder_\":\"address of the builder\"}},\"upgradeToAndCall(address,bytes)\":{\"custom:oz-upgrades-unsafe-allow-reachable\":\"delegatecall\",\"details\":\"Upgrade the implementation of the proxy to `newImplementation`, and subsequently execute the function call encoded in `data`. Calls {_authorizeUpgrade}. Emits an {Upgraded} event.\"}},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{\"activateBuilder(address,address,uint64)\":{\"notice\":\"activates builder for the first time, setting the reward receiver and the reward percentage Sets activate flag to true. It cannot be switched to false anymore\"},\"allocate(address,uint256)\":{\"notice\":\"allocates votes for a gauge\"},\"allocateBatch(address[],uint256[])\":{\"notice\":\"allocates votes for a batch of gauges\"},\"approveBuidlerRewardReceiverReplacement(address,address)\":{\"notice\":\"KYCApprover approves Builder's request to replace his rewardReceiver address\"},\"approveBuilderKYC(address)\":{\"notice\":\"approves builder's KYC after a revocation\"},\"backerRewardPercentage(address)\":{\"notice\":\"map of builder's backers reward percentage data\"},\"backerTotalAllocation(address)\":{\"notice\":\"total amount of stakingToken allocated by a backer\"},\"builderRewardReceiver(address)\":{\"notice\":\"map of builders reward receiver\"},\"builderRewardReceiverReplacement(address)\":{\"notice\":\"map of builders reward receiver replacement, used as a buffer until the new address is accepted\"},\"builderState(address)\":{\"notice\":\"map of builders state\"},\"builderToGauge(address)\":{\"notice\":\"gauge contract for a builder\"},\"canWithdraw(address,uint256)\":{\"notice\":\"returns true if can withdraw, remaining balance should exceed the current allocation\"},\"cancelRewardReceiverReplacementRequest()\":{\"notice\":\"Builder cancels his request to replace his rewardReceiver address\"},\"claimBackerRewards(address,address[])\":{\"notice\":\"claims backer rewards from a batch of gauges\"},\"claimBackerRewards(address[])\":{\"notice\":\"claims backer rewards from a batch of gauges\"},\"communityApproveBuilder(address)\":{\"notice\":\"community approve builder and create its gauge\"},\"cycleData()\":{\"notice\":\"cycle data\"},\"cycleNext(uint256)\":{\"notice\":\"gets when an cycle ends or the next one starts based on given `timestamp_`\"},\"cycleStart(uint256)\":{\"notice\":\"gets when an cycle starts based on given `timestamp_`\"},\"dewhitelistBuilder(address)\":{\"notice\":\"de-whitelist builder\"},\"distribute()\":{\"notice\":\"continues pagination to distribute accumulated reward tokens to the gauges\"},\"endDistributionWindow(uint256)\":{\"notice\":\"gets when an cycle distribution ends based on given `timestamp_`\"},\"gaugeFactory()\":{\"notice\":\"gauge factory contract address\"},\"gaugeToBuilder(address)\":{\"notice\":\"builder address for a gauge contract\"},\"getCycleStartAndDuration()\":{\"notice\":\"returns cycle start and duration If there is a new one and cooldown time has expired, apply that one; otherwise, apply the previous one\"},\"getGaugeAt(uint256)\":{\"notice\":\"get gauge from array at a given index\"},\"getGaugesLength()\":{\"notice\":\"get length of gauges array\"},\"getHaltedGaugeAt(uint256)\":{\"notice\":\"get halted gauge from array at a given index\"},\"getHaltedGaugesLength()\":{\"notice\":\"get length of halted gauges array\"},\"getRewardPercentageToApply(address)\":{\"notice\":\"returns reward percentage to apply. If there is a new one and cooldown time has expired, apply that one; otherwise, apply the previous one\"},\"haltedGaugeLastPeriodFinish(address)\":{\"notice\":\"map of last period finish for halted gauges\"},\"hasBuilderRewardReceiverPendingApproval(address)\":{\"notice\":\"returns true if the builder has an open request to replace his receiver address\"},\"indexLastGaugeDistributed()\":{\"notice\":\"index of tha last gauge distributed during a distribution period\"},\"initialize(address,address,address,address,address,uint32,uint24,uint32,uint128)\":{\"notice\":\"contract initializer\"},\"isBuilderOperational(address)\":{\"notice\":\"return true if builder is operational kycApproved == true && communityApproved == true && paused == false\"},\"isBuilderPaused(address)\":{\"notice\":\"return true if builder is paused\"},\"isGaugeHalted(address)\":{\"notice\":\"return true is gauge is halted\"},\"isGaugeOperational(address)\":{\"notice\":\"return true if gauge is operational kycApproved == true && communityApproved == true && paused == false\"},\"isGaugeRewarded(address)\":{\"notice\":\"return true is gauge is rewarded\"},\"migrateBuilder(address,address,uint64)\":{\"notice\":\"migrate v1 builder to the new builder registry\"},\"notifyRewardAmount(uint256)\":{\"notice\":\"transfers reward tokens from the sender to be distributed to the gauges\"},\"onDistributionPeriod()\":{\"notice\":\"true if distribution period started. Allocations remain blocked until it finishes\"},\"pauseBuilder(address,bytes20)\":{\"notice\":\"pause builder\"},\"periodFinish()\":{\"notice\":\"returns timestamp end of current rewards period If it is called by a halted gauge returns the timestamp of the last period distributed This is important because unclaimed rewards must stop accumulating rewards and halted gauges are not updated on the distribution anymore\"},\"permitBuilder(uint64)\":{\"notice\":\"permit builder\"},\"revokeBuilder()\":{\"notice\":\"revoke builder\"},\"revokeBuilderKYC(address)\":{\"notice\":\"revokes builder's KYC and sent builder unclaimed rewards to rewardDistributor contract\"},\"rewardDistributor()\":{\"notice\":\"reward distributor address. If a builder is KYC revoked their unclaimed rewards will sent back here\"},\"rewardPercentageCooldown()\":{\"notice\":\"time that must elapse for a new reward percentage from a builder to be applied\"},\"rewardToken()\":{\"notice\":\"address of the token rewarded to builder and voters\"},\"rewardsCoinbase()\":{\"notice\":\"Coinbase rewards to distribute [N]\"},\"rewardsERC20()\":{\"notice\":\"ERC20 rewards to distribute [N]\"},\"setBackerRewardPercentage(uint64)\":{\"notice\":\"allows a builder to set his backers reward percentage\"},\"setCycleDuration(uint32,uint24)\":{\"notice\":\"schedule a new cycle duration. It will be applied for the next cycle\"},\"setDistributionDuration(uint32)\":{\"notice\":\"set the duration of the distribution window\"},\"stakingToken()\":{\"notice\":\"address of the token used to stake\"},\"startDistribution()\":{\"notice\":\"starts the distribution period blocking all the allocations until all the gauges were distributed\"},\"submitRewardReceiverReplacementRequest(address)\":{\"notice\":\"Builder submits a request to replace his rewardReceiver address, the request will then need to be appoved by `approveBuidlerRewardReceiverReplacement`\"},\"tempTotalPotentialReward()\":{\"notice\":\"on a paginated distribution we need to temporarily store the totalPotentialReward\"},\"timeUntilNextCycle(uint256)\":{\"notice\":\"gets time left until the next cycle based on given `timestamp_`\"},\"totalPotentialReward()\":{\"notice\":\"total potential reward\"},\"unpauseBuilder(address)\":{\"notice\":\"unpause builder\"}},\"version\":1}},\"settings\":{\"remappings\":[\"@openzeppelin/contracts-upgradeable/=node_modules/@openzeppelin/contracts-upgradeable/\",\"@openzeppelin/contracts/=node_modules/@openzeppelin/contracts/\",\"eth-gas-reporter/=node_modules/eth-gas-reporter/\",\"forge-std/=node_modules/forge-std/\",\"hardhat/=node_modules/hardhat/\"],\"optimizer\":{\"enabled\":true,\"runs\":10000},\"metadata\":{\"bytecodeHash\":\"none\"},\"compilationTarget\":{\"src/BackersManagerRootstockCollective.sol\":\"BackersManagerRootstockCollective\"},\"evmVersion\":\"london\",\"libraries\":{}},\"sources\":{\"node_modules/@openzeppelin/contracts-upgradeable/proxy/utils/Initializable.sol\":{\"keccak256\":\"0x631188737069917d2f909d29ce62c4d48611d326686ba6683e26b72a23bfac0b\",\"urls\":[\"bzz-raw://7a61054ae84cd6c4d04c0c4450ba1d6de41e27e0a2c4f1bcdf58f796b401c609\",\"dweb:/ipfs/QmUvtdp7X1mRVyC3CsHrtPbgoqWaXHp3S1ZR24tpAQYJWM\"],\"license\":\"MIT\"},\"node_modules/@openzeppelin/contracts-upgradeable/proxy/utils/UUPSUpgradeable.sol\":{\"keccak256\":\"0x3f13b947637c4969c0644cab4ef399cdc4b67f101463b8775c5a43b118558e53\",\"urls\":[\"bzz-raw://c6683e6ade6985d394d32baaef5eea0d8b9ff0b3eca86ae413d6cdde114a9930\",\"dweb:/ipfs/QmdBE8T1BTddZxpdECMsb3KiCFyjNWmxcCddYrWFTXmWPj\"],\"license\":\"MIT\"},\"node_modules/@openzeppelin/contracts-upgradeable/utils/ReentrancyGuardUpgradeable.sol\":{\"keccak256\":\"0xb44e086e941292cdc7f440de51478493894ef0b1aeccb0c4047445919f667f74\",\"urls\":[\"bzz-raw://942dad22fbdc1669f025540ba63aa3ccfad5f8458fc5d4525b31ebf272e7af45\",\"dweb:/ipfs/Qmdo4X2M82aM3AMoW2kf2jhYkSCyC4T1pHNd6obdsDFnAB\"],\"license\":\"MIT\"},\"node_modules/@openzeppelin/contracts-upgradeable/utils/introspection/ERC165Upgradeable.sol\":{\"keccak256\":\"0xdaba3f7c42c55b2896353f32bd27d4d5f8bae741b3b05d4c53f67abc4dc47ce8\",\"urls\":[\"bzz-raw://1fa2e61141c602510bcd2cd936ed9561922ac8772a9b9c9a9db091a74e354a45\",\"dweb:/ipfs/QmcHQDDoEBwJmwUbzoVkytvJsBx3KVHYFFnDkvRGWh9Wmh\"],\"license\":\"MIT\"},\"node_modules/@openzeppelin/contracts/interfaces/draft-IERC1822.sol\":{\"keccak256\":\"0x2a1f9944df2015c081d89cd41ba22ffaf10aa6285969f0dc612b235cc448999c\",\"urls\":[\"bzz-raw://ef381843676aec64421200ee85eaa0b1356a35f28b9fc67e746a6bbb832077d9\",\"dweb:/ipfs/QmY8aorMYA2TeTCnu6ejDjzb4rW4t7TCtW4GZ6LoxTFm7v\"],\"license\":\"MIT\"},\"node_modules/@openzeppelin/contracts/proxy/ERC1967/ERC1967Utils.sol\":{\"keccak256\":\"0x06a78f9b3ee3e6d0eb4e4cd635ba49960bea34cac1db8c0a27c75f2319f1fd65\",\"urls\":[\"bzz-raw://547d21aa17f4f3f1a1a7edf7167beff8dd9496a0348d5588f15cc8a4b29d052a\",\"dweb:/ipfs/QmT16JtRQSWNpLo9W23jr6CzaMuTAcQcjJJcdRd8HLJ6cE\"],\"license\":\"MIT\"},\"node_modules/@openzeppelin/contracts/proxy/Proxy.sol\":{\"keccak256\":\"0xc3f2ec76a3de8ed7a7007c46166f5550c72c7709e3fc7e8bb3111a7191cdedbd\",\"urls\":[\"bzz-raw://e73efb4c2ca655882dc237c6b4f234a9bd36d97159d8fcaa837eb01171f726ac\",\"dweb:/ipfs/QmTNnnv7Gu5fs5G1ZMh7Fexp8N4XUs3XrNAngjcxgiss3e\"],\"license\":\"MIT\"},\"node_modules/@openzeppelin/contracts/proxy/beacon/BeaconProxy.sol\":{\"keccak256\":\"0x387ebdcb365b8e620f26645d2b34a161cd39eedfb0219e8baff55630c5ae113c\",\"urls\":[\"bzz-raw://744ea187c195e31cb9201e63ca291fca9e623747f54f0ba390b366a6213b8964\",\"dweb:/ipfs/Qmc547qfV4sz65DC9B4okx1HvgxwUzJR7zTfKKbTzL3UQT\"],\"license\":\"MIT\"},\"node_modules/@openzeppelin/contracts/proxy/beacon/IBeacon.sol\":{\"keccak256\":\"0xc59a78b07b44b2cf2e8ab4175fca91e8eca1eee2df7357b8d2a8833e5ea1f64c\",\"urls\":[\"bzz-raw://5aa4f07e65444784c29cd7bfcc2341b34381e4e5b5da9f0c5bd00d7f430e66fa\",\"dweb:/ipfs/QmWRMh4Q9DpaU9GvsiXmDdoNYMyyece9if7hnfLz7uqzWM\"],\"license\":\"MIT\"},\"node_modules/@openzeppelin/contracts/token/ERC20/IERC20.sol\":{\"keccak256\":\"0xc6a8ff0ea489379b61faa647490411b80102578440ab9d84e9a957cc12164e70\",\"urls\":[\"bzz-raw://0ea104e577e63faea3b69c415637e99e755dcbf64c5833d7140c35a714d6d90c\",\"dweb:/ipfs/Qmau6x4Ns9XdyynRCNNp3RhLqijJjFm7z5fyZazfYFGYdq\"],\"license\":\"MIT\"},\"node_modules/@openzeppelin/contracts/token/ERC20/extensions/IERC20Permit.sol\":{\"keccak256\":\"0x6008dabfe393240d73d7dd7688033f72740d570aa422254d29a7dce8568f3aff\",\"urls\":[\"bzz-raw://f5196ec75139918c6c7bb4251b36395e668f1fa6d206beba7e7520e74913940d\",\"dweb:/ipfs/QmSyqjksXxmm2mCG6qRd1yuwLykypkSVBbnBnGqJRcuJMi\"],\"license\":\"MIT\"},\"node_modules/@openzeppelin/contracts/token/ERC20/utils/SafeERC20.sol\":{\"keccak256\":\"0x37bb49513c49c87c4642a891b13b63571bc87013dde806617aa1efb54605f386\",\"urls\":[\"bzz-raw://b3036b3a83b7c48f96641f2a9002b9f2dcb6a5958dd670894ada21ae8229b3d0\",\"dweb:/ipfs/QmUNfSBdoVtjhETaUJCYcaC7pTMgbhht926tJ2uXJbiVd3\"],\"license\":\"MIT\"},\"node_modules/@openzeppelin/contracts/utils/Address.sol\":{\"keccak256\":\"0xaf28a975a78550e45f65e559a3ad6a5ad43b9b8a37366999abd1b7084eb70721\",\"urls\":[\"bzz-raw://b7bd24e224f67f65bfadf85dc2929fa965456bb2415478bd0125471b5ce35245\",\"dweb:/ipfs/QmRaydGr8BTHs1kvaZfsNU69pKzUAGFrvABn1KiRSbE51y\"],\"license\":\"MIT\"},\"node_modules/@openzeppelin/contracts/utils/StorageSlot.sol\":{\"keccak256\":\"0x32ba59b4b7299237c8ba56319110989d7978a039faf754793064e967e5894418\",\"urls\":[\"bzz-raw://1ae50c8b562427df610cc4540c9bf104acca7ef8e2dcae567ae7e52272281e9c\",\"dweb:/ipfs/QmTHiadFCSJUPpRjNegc5SahmeU8bAoY8i9Aq6tVscbcKR\"],\"license\":\"MIT\"},\"node_modules/@openzeppelin/contracts/utils/introspection/IERC165.sol\":{\"keccak256\":\"0x4296879f55019b23e135000eb36896057e7101fb7fb859c5ef690cf14643757b\",\"urls\":[\"bzz-raw://87b3541437c8c443ccd36795e56a338ed12855eec17f8da624511b8d1a7e14df\",\"dweb:/ipfs/QmeJQCtZrQjtJLr6u7ZHWeH3pBnjtLWzvRrKViAi7UZqxL\"],\"license\":\"MIT\"},\"node_modules/@openzeppelin/contracts/utils/math/Math.sol\":{\"keccak256\":\"0x005ec64c6313f0555d59e278f9a7a5ab2db5bdc72a027f255a37c327af1ec02d\",\"urls\":[\"bzz-raw://4ece9f0b9c8daca08c76b6b5405a6446b6f73b3a15fab7ff56e296cbd4a2c875\",\"dweb:/ipfs/QmQyRpyPRL5SQuAgj6SHmbir3foX65FJjbVTTQrA2EFg6L\"],\"license\":\"MIT\"},\"node_modules/@openzeppelin/contracts/utils/structs/EnumerableSet.sol\":{\"keccak256\":\"0x86c1470cbfd878491e5de030072b647352d36bd27122cffb928970b1945282aa\",\"urls\":[\"bzz-raw://ad85dd393ee0a1917c57046abc5155f51f77844b2c6a42c05c1b8dd26d6ff3c1\",\"dweb:/ipfs/QmNqYc8To2NdnpP6E1tGz7t6A7beuENde5yovwov5pW1fA\"],\"license\":\"MIT\"},\"src/BackersManagerRootstockCollective.sol\":{\"keccak256\":\"0x4bce92547845ef35a1b71fdfff864309938051142bd13fcc671785aad6dbc36b\",\"urls\":[\"bzz-raw://e21d16501b5cd62d1838223c2dcc2189e372e71096d4fa2977c5f9c62887a57c\",\"dweb:/ipfs/QmZdhG6Be7UTrKmDUXc8UxfCWH5ifXs9czSBPNrdC46ZGZ\"],\"license\":\"MIT\"},\"src/BuilderRegistryRootstockCollective.sol\":{\"keccak256\":\"0xc1396c558a12bc95f35bb8161d0410bb2ae400ff4c7ee684cd50b6e7e6326bd7\",\"urls\":[\"bzz-raw://091fdfefa6f079517bc0ebf5275038952167ed05fe80c9fc1ebfd623a4c37d5a\",\"dweb:/ipfs/QmaCk2BmBXEqsnB6tCpDeEuNpotXXuBZm1WyKcY1prHdPh\"],\"license\":\"MIT\"},\"src/CycleTimeKeeperRootstockCollective.sol\":{\"keccak256\":\"0x111d42f321259b53ff1b11e65fde44d8b582a5801299a665c7c39a003a9e4bfd\",\"urls\":[\"bzz-raw://40fe5761b6948b9d89fc2977e246738466ca65f2718d3ead305de92fe4ac4e45\",\"dweb:/ipfs/QmNj27MbZSmGN8Wfre4dngJSbNb1ZBUZ3cHoVUMb6B2n9W\"],\"license\":\"MIT\"},\"src/gauge/GaugeFactoryRootstockCollective.sol\":{\"keccak256\":\"0xbcf8f9f1038468632211aa7b936d63a35caa7e54f03793ba44f701b17e489a0d\",\"urls\":[\"bzz-raw://82beb9f7be678d3edb72cd181e198e00ead8c8383c36414ce0e388094272914b\",\"dweb:/ipfs/QmSmMx3RT4gjYRFggbEWAyDie5X4JLyBW3VgpHdRFcAmii\"],\"license\":\"MIT\"},\"src/gauge/GaugeRootstockCollective.sol\":{\"keccak256\":\"0xc938acb7b0a1fe48d81115d9c78554cf52578cfa079b7e2fa61ad6f7d938cfa5\",\"urls\":[\"bzz-raw://b0705939ef67abd05f05cd9c3f7d2d0f82c42048046c9daefc360d0d3335761d\",\"dweb:/ipfs/QmaPRBk5oeoQajXGLpCCq1B2BNRHbToSrD7a7ZbcqnhwKx\"],\"license\":\"MIT\"},\"src/governance/UpgradeableRootstockCollective.sol\":{\"keccak256\":\"0x22b56cfe51772a18fc6b7f4e64c53a2a9e73654826cfcb8b24e84c25058e2541\",\"urls\":[\"bzz-raw://57900df94f4b5b41038bb78594317680c8ea5ea74b2c5ca00875b3815b5e6dc5\",\"dweb:/ipfs/QmbANYcAgWYQ4Fthch7qeMCSXHQucRGPfVRjCTgUzcWTmL\"],\"license\":\"MIT\"},\"src/interfaces/IBackersManagerRootstockCollective.sol\":{\"keccak256\":\"0x7eacff4e2d906e1f38636bdc81646f213dc3820724b0bb4f61d2e105272f4087\",\"urls\":[\"bzz-raw://00e4ac507e8377040962f89fb774df725422c400114965eee8c45fcc401a7f87\",\"dweb:/ipfs/QmNsqV2naFxx8s6AG8YVDZqhvnUvXmnDZVhWH1WMsFesf6\"],\"license\":\"MIT\"},\"src/interfaces/IChangeContractRootstockCollective.sol\":{\"keccak256\":\"0x00fb3eb72286348dd06d581c5044cb045dfd3bd24725d05dd9c4b008567dd496\",\"urls\":[\"bzz-raw://7f4a03e06197ae7d6e478097afbbecf936ce7029ca49909a1fee0b4ba1b5b517\",\"dweb:/ipfs/QmfByMJ1SQAmcYkouS5WM3akMmSKU3MCyACpFmQwuFSYe9\"],\"license\":\"MIT\"},\"src/interfaces/ICollectiveRewardsCheckRootstockCollective.sol\":{\"keccak256\":\"0x3fa8e50c66e322c8023aed564a442404bdcb942ae1fe95fa60bf9982e8baf7ee\",\"urls\":[\"bzz-raw://df7c927919599e72f70fdcfaf5713d859f447d4258ea7a6ed8f9bcac851d3d72\",\"dweb:/ipfs/Qmb54kMmV1UD45oZntyxB7yWaUfKwMC136ftDHctVmNrge\"],\"license\":\"UNLICENSED\"},\"src/interfaces/IGovernanceManagerRootstockCollective.sol\":{\"keccak256\":\"0x1416991dd129bb36f43cc0854dfa824b5b85838e5c5018566b6cf78f527747e3\",\"urls\":[\"bzz-raw://8652a18ec39d5527fefb829eca619f4cf4bbec3ee4f6231e8888f1549feedd3d\",\"dweb:/ipfs/Qmczi6GipLy9B9TcDMx5UaZZPFBaMT2k49iYzQuLCFgnfS\"],\"license\":\"MIT\"},\"src/libraries/UtilsLib.sol\":{\"keccak256\":\"0x4660e2e62cb370b17052cd21238722bfe3cdaaf3f69cf4c9b2d87236070d12ac\",\"urls\":[\"bzz-raw://e8759237b67bb6e641c7a92eb0d94300770e32c25c2c5bf387bea2ea68513753\",\"dweb:/ipfs/QmbkRDUnzyL9QQbwJcFGd6kiERFFgxZgnxqsu14snpCvhp\"],\"license\":\"MIT\"}},\"version\":1}", + "numDeployments": 4, + "receipt": { + "transactionHash": "0x2448b975633216788354e52a511c9f8cfbdc6921c4566569bc27247c9eb68507", + "transactionIndex": "0x0", + "blockHash": "0x0542901d472888b336118b165549763dd239e0d1ff070ff999906a446eea5b30", + "blockNumber": "0x5841dc", + "from": "0xCB8F8130E289946aec9a17b29819716B1E9e4998", + "to": null, + "cumulativeGasUsed": "0x4e535c", + "gasUsed": "0x4e535c", + "contractAddress": "0xBa93A9CF3E8194b7D04bee459c679B2125cD569b", + "logs": [ + { + "address": "0xBa93A9CF3E8194b7D04bee459c679B2125cD569b", + "topics": [ + "0xc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d2" + ], + "data": "0x000000000000000000000000000000000000000000000000ffffffffffffffff", + "blockHash": "0x0542901d472888b336118b165549763dd239e0d1ff070ff999906a446eea5b30", + "blockNumber": "0x5841dc", + "transactionHash": "0x2448b975633216788354e52a511c9f8cfbdc6921c4566569bc27247c9eb68507", + "transactionIndex": "0x0", + "logIndex": "0x0" + } + ], + "status": "0x1", + "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000200000000000000000000800000000000000000000000080000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004000000000000000040000000000000000000000000000000000000000000000000000000000000000000", + "type": "0x0", + "effectiveGasPrice": "0x3ef1480" + }, + "solcInputHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "storageLayout": { + "storage": [ + { + "astId": 60223, + "contract": "src/BackersManagerRootstockCollective.sol:BackersManagerRootstockCollective", + "label": "governanceManager", + "offset": 0, + "slot": "0", + "type": "t_contract(IGovernanceManagerRootstockCollective)60547" + }, + { + "astId": 60255, + "contract": "src/BackersManagerRootstockCollective.sol:BackersManagerRootstockCollective", + "label": "__gap", + "offset": 0, + "slot": "1", + "type": "t_array(t_uint256)50_storage" + }, + { + "astId": 57657, + "contract": "src/BackersManagerRootstockCollective.sol:BackersManagerRootstockCollective", + "label": "cycleData", + "offset": 0, + "slot": "51", + "type": "t_struct(CycleData)57653_storage" + }, + { + "astId": 57659, + "contract": "src/BackersManagerRootstockCollective.sol:BackersManagerRootstockCollective", + "label": "distributionDuration", + "offset": 0, + "slot": "52", + "type": "t_uint32" + }, + { + "astId": 58104, + "contract": "src/BackersManagerRootstockCollective.sol:BackersManagerRootstockCollective", + "label": "__gap", + "offset": 0, + "slot": "53", + "type": "t_array(t_uint256)50_storage" + }, + { + "astId": 56228, + "contract": "src/BackersManagerRootstockCollective.sol:BackersManagerRootstockCollective", + "label": "rewardDistributor", + "offset": 0, + "slot": "103", + "type": "t_address" + }, + { + "astId": 56234, + "contract": "src/BackersManagerRootstockCollective.sol:BackersManagerRootstockCollective", + "label": "builderState", + "offset": 0, + "slot": "104", + "type": "t_mapping(t_address,t_struct(BuilderState)56218_storage)" + }, + { + "astId": 56239, + "contract": "src/BackersManagerRootstockCollective.sol:BackersManagerRootstockCollective", + "label": "builderRewardReceiver", + "offset": 0, + "slot": "105", + "type": "t_mapping(t_address,t_address)" + }, + { + "astId": 56244, + "contract": "src/BackersManagerRootstockCollective.sol:BackersManagerRootstockCollective", + "label": "builderRewardReceiverReplacement", + "offset": 0, + "slot": "106", + "type": "t_mapping(t_address,t_address)" + }, + { + "astId": 56250, + "contract": "src/BackersManagerRootstockCollective.sol:BackersManagerRootstockCollective", + "label": "backerRewardPercentage", + "offset": 0, + "slot": "107", + "type": "t_mapping(t_address,t_struct(RewardPercentageData)56225_storage)" + }, + { + "astId": 56254, + "contract": "src/BackersManagerRootstockCollective.sol:BackersManagerRootstockCollective", + "label": "_gauges", + "offset": 0, + "slot": "108", + "type": "t_struct(AddressSet)4717_storage" + }, + { + "astId": 56258, + "contract": "src/BackersManagerRootstockCollective.sol:BackersManagerRootstockCollective", + "label": "_haltedGauges", + "offset": 0, + "slot": "110", + "type": "t_struct(AddressSet)4717_storage" + }, + { + "astId": 56262, + "contract": "src/BackersManagerRootstockCollective.sol:BackersManagerRootstockCollective", + "label": "gaugeFactory", + "offset": 0, + "slot": "112", + "type": "t_contract(GaugeFactoryRootstockCollective)58436" + }, + { + "astId": 56268, + "contract": "src/BackersManagerRootstockCollective.sol:BackersManagerRootstockCollective", + "label": "builderToGauge", + "offset": 0, + "slot": "113", + "type": "t_mapping(t_address,t_contract(GaugeRootstockCollective)59796)" + }, + { + "astId": 56274, + "contract": "src/BackersManagerRootstockCollective.sol:BackersManagerRootstockCollective", + "label": "gaugeToBuilder", + "offset": 0, + "slot": "114", + "type": "t_mapping(t_contract(GaugeRootstockCollective)59796,t_address)" + }, + { + "astId": 56280, + "contract": "src/BackersManagerRootstockCollective.sol:BackersManagerRootstockCollective", + "label": "haltedGaugeLastPeriodFinish", + "offset": 0, + "slot": "115", + "type": "t_mapping(t_contract(GaugeRootstockCollective)59796,t_uint256)" + }, + { + "astId": 56283, + "contract": "src/BackersManagerRootstockCollective.sol:BackersManagerRootstockCollective", + "label": "rewardPercentageCooldown", + "offset": 0, + "slot": "116", + "type": "t_uint128" + }, + { + "astId": 57574, + "contract": "src/BackersManagerRootstockCollective.sol:BackersManagerRootstockCollective", + "label": "__gap", + "offset": 0, + "slot": "117", + "type": "t_array(t_uint256)50_storage" + }, + { + "astId": 55092, + "contract": "src/BackersManagerRootstockCollective.sol:BackersManagerRootstockCollective", + "label": "stakingToken", + "offset": 0, + "slot": "167", + "type": "t_contract(IERC20)2025" + }, + { + "astId": 55095, + "contract": "src/BackersManagerRootstockCollective.sol:BackersManagerRootstockCollective", + "label": "rewardToken", + "offset": 0, + "slot": "168", + "type": "t_address" + }, + { + "astId": 55098, + "contract": "src/BackersManagerRootstockCollective.sol:BackersManagerRootstockCollective", + "label": "totalPotentialReward", + "offset": 0, + "slot": "169", + "type": "t_uint256" + }, + { + "astId": 55101, + "contract": "src/BackersManagerRootstockCollective.sol:BackersManagerRootstockCollective", + "label": "tempTotalPotentialReward", + "offset": 0, + "slot": "170", + "type": "t_uint256" + }, + { + "astId": 55104, + "contract": "src/BackersManagerRootstockCollective.sol:BackersManagerRootstockCollective", + "label": "rewardsERC20", + "offset": 0, + "slot": "171", + "type": "t_uint256" + }, + { + "astId": 55107, + "contract": "src/BackersManagerRootstockCollective.sol:BackersManagerRootstockCollective", + "label": "rewardsCoinbase", + "offset": 0, + "slot": "172", + "type": "t_uint256" + }, + { + "astId": 55110, + "contract": "src/BackersManagerRootstockCollective.sol:BackersManagerRootstockCollective", + "label": "indexLastGaugeDistributed", + "offset": 0, + "slot": "173", + "type": "t_uint256" + }, + { + "astId": 55113, + "contract": "src/BackersManagerRootstockCollective.sol:BackersManagerRootstockCollective", + "label": "_periodFinish", + "offset": 0, + "slot": "174", + "type": "t_uint256" + }, + { + "astId": 55116, + "contract": "src/BackersManagerRootstockCollective.sol:BackersManagerRootstockCollective", + "label": "onDistributionPeriod", + "offset": 0, + "slot": "175", + "type": "t_bool" + }, + { + "astId": 55121, + "contract": "src/BackersManagerRootstockCollective.sol:BackersManagerRootstockCollective", + "label": "backerTotalAllocation", + "offset": 0, + "slot": "176", + "type": "t_mapping(t_address,t_uint256)" + }, + { + "astId": 56046, + "contract": "src/BackersManagerRootstockCollective.sol:BackersManagerRootstockCollective", + "label": "__gap", + "offset": 0, + "slot": "177", + "type": "t_array(t_uint256)50_storage" + } + ], + "types": { + "t_address": { + "encoding": "inplace", + "label": "address", + "numberOfBytes": "20" + }, + "t_array(t_bytes32)dyn_storage": { + "encoding": "dynamic_array", + "label": "bytes32[]", + "numberOfBytes": "32", + "base": "t_bytes32" + }, + "t_array(t_uint256)50_storage": { + "encoding": "inplace", + "label": "uint256[50]", + "numberOfBytes": "1600", + "base": "t_uint256" + }, + "t_bool": { + "encoding": "inplace", + "label": "bool", + "numberOfBytes": "1" + }, + "t_bytes20": { + "encoding": "inplace", + "label": "bytes20", + "numberOfBytes": "20" + }, + "t_bytes32": { + "encoding": "inplace", + "label": "bytes32", + "numberOfBytes": "32" + }, + "t_bytes7": { + "encoding": "inplace", + "label": "bytes7", + "numberOfBytes": "7" + }, + "t_contract(GaugeFactoryRootstockCollective)58436": { + "encoding": "inplace", + "label": "contract GaugeFactoryRootstockCollective", + "numberOfBytes": "20" + }, + "t_contract(GaugeRootstockCollective)59796": { + "encoding": "inplace", + "label": "contract GaugeRootstockCollective", + "numberOfBytes": "20" + }, + "t_contract(IERC20)2025": { + "encoding": "inplace", + "label": "contract IERC20", + "numberOfBytes": "20" + }, + "t_contract(IGovernanceManagerRootstockCollective)60547": { + "encoding": "inplace", + "label": "contract IGovernanceManagerRootstockCollective", + "numberOfBytes": "20" + }, + "t_mapping(t_address,t_address)": { + "encoding": "mapping", + "key": "t_address", + "label": "mapping(address => address)", + "numberOfBytes": "32", + "value": "t_address" + }, + "t_mapping(t_address,t_contract(GaugeRootstockCollective)59796)": { + "encoding": "mapping", + "key": "t_address", + "label": "mapping(address => contract GaugeRootstockCollective)", + "numberOfBytes": "32", + "value": "t_contract(GaugeRootstockCollective)59796" + }, + "t_mapping(t_address,t_struct(BuilderState)56218_storage)": { + "encoding": "mapping", + "key": "t_address", + "label": "mapping(address => struct BuilderRegistryRootstockCollective.BuilderState)", + "numberOfBytes": "32", + "value": "t_struct(BuilderState)56218_storage" + }, + "t_mapping(t_address,t_struct(RewardPercentageData)56225_storage)": { + "encoding": "mapping", + "key": "t_address", + "label": "mapping(address => struct BuilderRegistryRootstockCollective.RewardPercentageData)", + "numberOfBytes": "32", + "value": "t_struct(RewardPercentageData)56225_storage" + }, + "t_mapping(t_address,t_uint256)": { + "encoding": "mapping", + "key": "t_address", + "label": "mapping(address => uint256)", + "numberOfBytes": "32", + "value": "t_uint256" + }, + "t_mapping(t_bytes32,t_uint256)": { + "encoding": "mapping", + "key": "t_bytes32", + "label": "mapping(bytes32 => uint256)", + "numberOfBytes": "32", + "value": "t_uint256" + }, + "t_mapping(t_contract(GaugeRootstockCollective)59796,t_address)": { + "encoding": "mapping", + "key": "t_contract(GaugeRootstockCollective)59796", + "label": "mapping(contract GaugeRootstockCollective => address)", + "numberOfBytes": "32", + "value": "t_address" + }, + "t_mapping(t_contract(GaugeRootstockCollective)59796,t_uint256)": { + "encoding": "mapping", + "key": "t_contract(GaugeRootstockCollective)59796", + "label": "mapping(contract GaugeRootstockCollective => uint256)", + "numberOfBytes": "32", + "value": "t_uint256" + }, + "t_struct(AddressSet)4717_storage": { + "encoding": "inplace", + "label": "struct EnumerableSet.AddressSet", + "numberOfBytes": "64", + "members": [ + { + "astId": 4716, + "contract": "src/BackersManagerRootstockCollective.sol:BackersManagerRootstockCollective", + "label": "_inner", + "offset": 0, + "slot": "0", + "type": "t_struct(Set)4402_storage" + } + ] + }, + "t_struct(BuilderState)56218_storage": { + "encoding": "inplace", + "label": "struct BuilderRegistryRootstockCollective.BuilderState", + "numberOfBytes": "32", + "members": [ + { + "astId": 56205, + "contract": "src/BackersManagerRootstockCollective.sol:BackersManagerRootstockCollective", + "label": "activated", + "offset": 0, + "slot": "0", + "type": "t_bool" + }, + { + "astId": 56207, + "contract": "src/BackersManagerRootstockCollective.sol:BackersManagerRootstockCollective", + "label": "kycApproved", + "offset": 1, + "slot": "0", + "type": "t_bool" + }, + { + "astId": 56209, + "contract": "src/BackersManagerRootstockCollective.sol:BackersManagerRootstockCollective", + "label": "communityApproved", + "offset": 2, + "slot": "0", + "type": "t_bool" + }, + { + "astId": 56211, + "contract": "src/BackersManagerRootstockCollective.sol:BackersManagerRootstockCollective", + "label": "paused", + "offset": 3, + "slot": "0", + "type": "t_bool" + }, + { + "astId": 56213, + "contract": "src/BackersManagerRootstockCollective.sol:BackersManagerRootstockCollective", + "label": "revoked", + "offset": 4, + "slot": "0", + "type": "t_bool" + }, + { + "astId": 56215, + "contract": "src/BackersManagerRootstockCollective.sol:BackersManagerRootstockCollective", + "label": "reserved", + "offset": 5, + "slot": "0", + "type": "t_bytes7" + }, + { + "astId": 56217, + "contract": "src/BackersManagerRootstockCollective.sol:BackersManagerRootstockCollective", + "label": "pausedReason", + "offset": 12, + "slot": "0", + "type": "t_bytes20" + } + ] + }, + "t_struct(CycleData)57653_storage": { + "encoding": "inplace", + "label": "struct CycleTimeKeeperRootstockCollective.CycleData", + "numberOfBytes": "32", + "members": [ + { + "astId": 57644, + "contract": "src/BackersManagerRootstockCollective.sol:BackersManagerRootstockCollective", + "label": "previousDuration", + "offset": 0, + "slot": "0", + "type": "t_uint32" + }, + { + "astId": 57646, + "contract": "src/BackersManagerRootstockCollective.sol:BackersManagerRootstockCollective", + "label": "nextDuration", + "offset": 4, + "slot": "0", + "type": "t_uint32" + }, + { + "astId": 57648, + "contract": "src/BackersManagerRootstockCollective.sol:BackersManagerRootstockCollective", + "label": "previousStart", + "offset": 8, + "slot": "0", + "type": "t_uint64" + }, + { + "astId": 57650, + "contract": "src/BackersManagerRootstockCollective.sol:BackersManagerRootstockCollective", + "label": "nextStart", + "offset": 16, + "slot": "0", + "type": "t_uint64" + }, + { + "astId": 57652, + "contract": "src/BackersManagerRootstockCollective.sol:BackersManagerRootstockCollective", + "label": "offset", + "offset": 24, + "slot": "0", + "type": "t_uint24" + } + ] + }, + "t_struct(RewardPercentageData)56225_storage": { + "encoding": "inplace", + "label": "struct BuilderRegistryRootstockCollective.RewardPercentageData", + "numberOfBytes": "32", + "members": [ + { + "astId": 56220, + "contract": "src/BackersManagerRootstockCollective.sol:BackersManagerRootstockCollective", + "label": "previous", + "offset": 0, + "slot": "0", + "type": "t_uint64" + }, + { + "astId": 56222, + "contract": "src/BackersManagerRootstockCollective.sol:BackersManagerRootstockCollective", + "label": "next", + "offset": 8, + "slot": "0", + "type": "t_uint64" + }, + { + "astId": 56224, + "contract": "src/BackersManagerRootstockCollective.sol:BackersManagerRootstockCollective", + "label": "cooldownEndTime", + "offset": 16, + "slot": "0", + "type": "t_uint128" + } + ] + }, + "t_struct(Set)4402_storage": { + "encoding": "inplace", + "label": "struct EnumerableSet.Set", + "numberOfBytes": "64", + "members": [ + { + "astId": 4397, + "contract": "src/BackersManagerRootstockCollective.sol:BackersManagerRootstockCollective", + "label": "_values", + "offset": 0, + "slot": "0", + "type": "t_array(t_bytes32)dyn_storage" + }, + { + "astId": 4401, + "contract": "src/BackersManagerRootstockCollective.sol:BackersManagerRootstockCollective", + "label": "_positions", + "offset": 0, + "slot": "1", + "type": "t_mapping(t_bytes32,t_uint256)" + } + ] + }, + "t_uint128": { + "encoding": "inplace", + "label": "uint128", + "numberOfBytes": "16" + }, + "t_uint24": { + "encoding": "inplace", + "label": "uint24", + "numberOfBytes": "3" + }, + "t_uint256": { + "encoding": "inplace", + "label": "uint256", + "numberOfBytes": "32" + }, + "t_uint32": { + "encoding": "inplace", + "label": "uint32", + "numberOfBytes": "4" + }, + "t_uint64": { + "encoding": "inplace", + "label": "uint64", + "numberOfBytes": "8" + } + } + }, + "transactionHash": "0x2448b975633216788354e52a511c9f8cfbdc6921c4566569bc27247c9eb68507", + "userdoc": { + "version": 1, + "kind": "user", + "methods": { + "activateBuilder(address,address,uint64)": { + "notice": "activates builder for the first time, setting the reward receiver and the reward percentage Sets activate flag to true. It cannot be switched to false anymore" + }, + "allocate(address,uint256)": { + "notice": "allocates votes for a gauge" + }, + "allocateBatch(address[],uint256[])": { + "notice": "allocates votes for a batch of gauges" + }, + "approveBuidlerRewardReceiverReplacement(address,address)": { + "notice": "KYCApprover approves Builder's request to replace his rewardReceiver address" + }, + "approveBuilderKYC(address)": { + "notice": "approves builder's KYC after a revocation" + }, + "backerRewardPercentage(address)": { + "notice": "map of builder's backers reward percentage data" + }, + "backerTotalAllocation(address)": { + "notice": "total amount of stakingToken allocated by a backer" + }, + "builderRewardReceiver(address)": { + "notice": "map of builders reward receiver" + }, + "builderRewardReceiverReplacement(address)": { + "notice": "map of builders reward receiver replacement, used as a buffer until the new address is accepted" + }, + "builderState(address)": { + "notice": "map of builders state" + }, + "builderToGauge(address)": { + "notice": "gauge contract for a builder" + }, + "canWithdraw(address,uint256)": { + "notice": "returns true if can withdraw, remaining balance should exceed the current allocation" + }, + "cancelRewardReceiverReplacementRequest()": { + "notice": "Builder cancels his request to replace his rewardReceiver address" + }, + "claimBackerRewards(address,address[])": { + "notice": "claims backer rewards from a batch of gauges" + }, + "claimBackerRewards(address[])": { + "notice": "claims backer rewards from a batch of gauges" + }, + "communityApproveBuilder(address)": { + "notice": "community approve builder and create its gauge" + }, + "cycleData()": { + "notice": "cycle data" + }, + "cycleNext(uint256)": { + "notice": "gets when an cycle ends or the next one starts based on given `timestamp_`" + }, + "cycleStart(uint256)": { + "notice": "gets when an cycle starts based on given `timestamp_`" + }, + "dewhitelistBuilder(address)": { + "notice": "de-whitelist builder" + }, + "distribute()": { + "notice": "continues pagination to distribute accumulated reward tokens to the gauges" + }, + "endDistributionWindow(uint256)": { + "notice": "gets when an cycle distribution ends based on given `timestamp_`" + }, + "gaugeFactory()": { + "notice": "gauge factory contract address" + }, + "gaugeToBuilder(address)": { + "notice": "builder address for a gauge contract" + }, + "getCycleStartAndDuration()": { + "notice": "returns cycle start and duration If there is a new one and cooldown time has expired, apply that one; otherwise, apply the previous one" + }, + "getGaugeAt(uint256)": { + "notice": "get gauge from array at a given index" + }, + "getGaugesLength()": { + "notice": "get length of gauges array" + }, + "getHaltedGaugeAt(uint256)": { + "notice": "get halted gauge from array at a given index" + }, + "getHaltedGaugesLength()": { + "notice": "get length of halted gauges array" + }, + "getRewardPercentageToApply(address)": { + "notice": "returns reward percentage to apply. If there is a new one and cooldown time has expired, apply that one; otherwise, apply the previous one" + }, + "haltedGaugeLastPeriodFinish(address)": { + "notice": "map of last period finish for halted gauges" + }, + "hasBuilderRewardReceiverPendingApproval(address)": { + "notice": "returns true if the builder has an open request to replace his receiver address" + }, + "indexLastGaugeDistributed()": { + "notice": "index of tha last gauge distributed during a distribution period" + }, + "initialize(address,address,address,address,address,uint32,uint24,uint32,uint128)": { + "notice": "contract initializer" + }, + "isBuilderOperational(address)": { + "notice": "return true if builder is operational kycApproved == true && communityApproved == true && paused == false" + }, + "isBuilderPaused(address)": { + "notice": "return true if builder is paused" + }, + "isGaugeHalted(address)": { + "notice": "return true is gauge is halted" + }, + "isGaugeOperational(address)": { + "notice": "return true if gauge is operational kycApproved == true && communityApproved == true && paused == false" + }, + "isGaugeRewarded(address)": { + "notice": "return true is gauge is rewarded" + }, + "migrateBuilder(address,address,uint64)": { + "notice": "migrate v1 builder to the new builder registry" + }, + "notifyRewardAmount(uint256)": { + "notice": "transfers reward tokens from the sender to be distributed to the gauges" + }, + "onDistributionPeriod()": { + "notice": "true if distribution period started. Allocations remain blocked until it finishes" + }, + "pauseBuilder(address,bytes20)": { + "notice": "pause builder" + }, + "periodFinish()": { + "notice": "returns timestamp end of current rewards period If it is called by a halted gauge returns the timestamp of the last period distributed This is important because unclaimed rewards must stop accumulating rewards and halted gauges are not updated on the distribution anymore" + }, + "permitBuilder(uint64)": { + "notice": "permit builder" + }, + "revokeBuilder()": { + "notice": "revoke builder" + }, + "revokeBuilderKYC(address)": { + "notice": "revokes builder's KYC and sent builder unclaimed rewards to rewardDistributor contract" + }, + "rewardDistributor()": { + "notice": "reward distributor address. If a builder is KYC revoked their unclaimed rewards will sent back here" + }, + "rewardPercentageCooldown()": { + "notice": "time that must elapse for a new reward percentage from a builder to be applied" + }, + "rewardToken()": { + "notice": "address of the token rewarded to builder and voters" + }, + "rewardsCoinbase()": { + "notice": "Coinbase rewards to distribute [N]" + }, + "rewardsERC20()": { + "notice": "ERC20 rewards to distribute [N]" + }, + "setBackerRewardPercentage(uint64)": { + "notice": "allows a builder to set his backers reward percentage" + }, + "setCycleDuration(uint32,uint24)": { + "notice": "schedule a new cycle duration. It will be applied for the next cycle" + }, + "setDistributionDuration(uint32)": { + "notice": "set the duration of the distribution window" + }, + "stakingToken()": { + "notice": "address of the token used to stake" + }, + "startDistribution()": { + "notice": "starts the distribution period blocking all the allocations until all the gauges were distributed" + }, + "submitRewardReceiverReplacementRequest(address)": { + "notice": "Builder submits a request to replace his rewardReceiver address, the request will then need to be appoved by `approveBuidlerRewardReceiverReplacement`" + }, + "tempTotalPotentialReward()": { + "notice": "on a paginated distribution we need to temporarily store the totalPotentialReward" + }, + "timeUntilNextCycle(uint256)": { + "notice": "gets time left until the next cycle based on given `timestamp_`" + }, + "totalPotentialReward()": { + "notice": "total potential reward" + }, + "unpauseBuilder(address)": { + "notice": "unpause builder" + } + }, + "notice": "Creates gauges, manages backers votes and distribute rewards" + } +} \ No newline at end of file diff --git a/deployments/testnet_qa_dapp/BackersManagerRootstockCollectiveProxy.json b/deployments/testnet_qa_dapp/BackersManagerRootstockCollectiveProxy.json new file mode 100644 index 00000000..9eb8dd7a --- /dev/null +++ b/deployments/testnet_qa_dapp/BackersManagerRootstockCollectiveProxy.json @@ -0,0 +1,167 @@ +{ + "abi": [ + { + "type": "constructor", + "inputs": [ + { + "name": "implementation", + "type": "address", + "internalType": "address" + }, + { + "name": "_data", + "type": "bytes", + "internalType": "bytes" + } + ], + "stateMutability": "payable" + }, + { + "type": "fallback", + "stateMutability": "payable" + }, + { + "type": "event", + "name": "Upgraded", + "inputs": [ + { + "name": "implementation", + "type": "address", + "indexed": true, + "internalType": "address" + } + ], + "anonymous": false + }, + { + "type": "error", + "name": "AddressEmptyCode", + "inputs": [ + { + "name": "target", + "type": "address", + "internalType": "address" + } + ] + }, + { + "type": "error", + "name": "ERC1967InvalidImplementation", + "inputs": [ + { + "name": "implementation", + "type": "address", + "internalType": "address" + } + ] + }, + { + "type": "error", + "name": "ERC1967NonPayable", + "inputs": [] + }, + { + "type": "error", + "name": "FailedInnerCall", + "inputs": [] + } + ], + "address": "0x41841e316F85933247fC7b51c79B76F22eB239bc", + "args": [ + "0xBa93A9CF3E8194b7D04bee459c679B2125cD569b", + "0x4be50762000000000000000000000000ef891bb2a90339fc8e1e250f54c079a46faabe1b00000000000000000000000019f64674d8a5b4e652319f5e239efd3bc969a1fe000000000000000000000000c4b091d97ad25cea5922f09fe80711b7acbbb16f000000000000000000000000317b70100e091cf00c09240e34a50591f7931ff600000000000000000000000083eac3abe6aaf4a4aae8b067888fad600c4cf6b300000000000000000000000000000000000000000000000000000000000000f0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000780000000000000000000000000000000000000000000000000000000000000078" + ], + "bytecode": "0x60806040526040516103ee3803806103ee83398101604081905261002291610268565b61002c8282610033565b5050610352565b61003c82610092565b6040516001600160a01b038316907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a280511561008657610081828261010e565b505050565b61008e610185565b5050565b806001600160a01b03163b6000036100cd57604051634c9c8ce360e01b81526001600160a01b03821660048201526024015b60405180910390fd5b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc80546001600160a01b0319166001600160a01b0392909216919091179055565b6060600080846001600160a01b03168460405161012b9190610336565b600060405180830381855af49150503d8060008114610166576040519150601f19603f3d011682016040523d82523d6000602084013e61016b565b606091505b50909250905061017c8583836101a6565b95945050505050565b34156101a45760405163b398979f60e01b815260040160405180910390fd5b565b6060826101bb576101b682610205565b6101fe565b81511580156101d257506001600160a01b0384163b155b156101fb57604051639996b31560e01b81526001600160a01b03851660048201526024016100c4565b50805b9392505050565b8051156102155780518082602001fd5b604051630a12f52160e11b815260040160405180910390fd5b634e487b7160e01b600052604160045260246000fd5b60005b8381101561025f578181015183820152602001610247565b50506000910152565b6000806040838503121561027b57600080fd5b82516001600160a01b038116811461029257600080fd5b60208401519092506001600160401b03808211156102af57600080fd5b818501915085601f8301126102c357600080fd5b8151818111156102d5576102d561022e565b604051601f8201601f19908116603f011681019083821181831017156102fd576102fd61022e565b8160405282815288602084870101111561031657600080fd5b610327836020830160208801610244565b80955050505050509250929050565b60008251610348818460208701610244565b9190910192915050565b608e806103606000396000f3fe6080604052600a600c565b005b60186014601a565b605e565b565b600060597f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5473ffffffffffffffffffffffffffffffffffffffff1690565b905090565b3660008037600080366000845af43d6000803e808015607c573d6000f35b3d6000fdfea164736f6c6343000814000a", + "deployedBytecode": "0x6080604052600a600c565b005b60186014601a565b605e565b565b600060597f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5473ffffffffffffffffffffffffffffffffffffffff1690565b905090565b3660008037600080366000845af43d6000803e808015607c573d6000f35b3d6000fdfea164736f6c6343000814000a", + "devdoc": { + "version": 1, + "kind": "dev", + "details": "This contract implements an upgradeable proxy. It is upgradeable because calls are delegated to an implementation address that can be changed. This address is stored in storage in the location specified by https://eips.ethereum.org/EIPS/eip-1967[EIP1967], so that it doesn't conflict with the storage layout of the implementation behind the proxy.", + "methods": { + "constructor": { + "details": "Initializes the upgradeable proxy with an initial implementation specified by `implementation`. If `_data` is nonempty, it's used as data in a delegate call to `implementation`. This will typically be an encoded function call, and allows initializing the storage of the proxy like a Solidity constructor. Requirements: - If `data` is empty, `msg.value` must be zero." + } + }, + "events": { + "Upgraded(address)": { + "details": "Emitted when the implementation is upgraded." + } + }, + "errors": { + "AddressEmptyCode(address)": [ + { + "details": "There's no code at `target` (it is not a contract)." + } + ], + "ERC1967InvalidImplementation(address)": [ + { + "details": "The `implementation` of the proxy is invalid." + } + ], + "ERC1967NonPayable()": [ + { + "details": "An upgrade function sees `msg.value > 0` that may be lost." + } + ], + "FailedInnerCall()": [ + { + "details": "A call to an address target failed. The target may have reverted." + } + ] + } + }, + "metadata": "{\"compiler\":{\"version\":\"0.8.20+commit.a1b79de6\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"address\",\"name\":\"implementation\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"_data\",\"type\":\"bytes\"}],\"stateMutability\":\"payable\",\"type\":\"constructor\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"target\",\"type\":\"address\"}],\"type\":\"error\",\"name\":\"AddressEmptyCode\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"implementation\",\"type\":\"address\"}],\"type\":\"error\",\"name\":\"ERC1967InvalidImplementation\"},{\"inputs\":[],\"type\":\"error\",\"name\":\"ERC1967NonPayable\"},{\"inputs\":[],\"type\":\"error\",\"name\":\"FailedInnerCall\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"implementation\",\"type\":\"address\",\"indexed\":true}],\"type\":\"event\",\"name\":\"Upgraded\",\"anonymous\":false},{\"inputs\":[],\"stateMutability\":\"payable\",\"type\":\"fallback\"}],\"devdoc\":{\"kind\":\"dev\",\"methods\":{\"constructor\":{\"details\":\"Initializes the upgradeable proxy with an initial implementation specified by `implementation`. If `_data` is nonempty, it's used as data in a delegate call to `implementation`. This will typically be an encoded function call, and allows initializing the storage of the proxy like a Solidity constructor. Requirements: - If `data` is empty, `msg.value` must be zero.\"}},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"remappings\":[\"@openzeppelin/contracts-upgradeable/=node_modules/@openzeppelin/contracts-upgradeable/\",\"@openzeppelin/contracts/=node_modules/@openzeppelin/contracts/\",\"eth-gas-reporter/=node_modules/eth-gas-reporter/\",\"forge-std/=node_modules/forge-std/\",\"hardhat/=node_modules/hardhat/\"],\"optimizer\":{\"enabled\":true,\"runs\":10000},\"metadata\":{\"bytecodeHash\":\"none\"},\"compilationTarget\":{\"node_modules/@openzeppelin/contracts/proxy/ERC1967/ERC1967Proxy.sol\":\"ERC1967Proxy\"},\"evmVersion\":\"london\",\"libraries\":{}},\"sources\":{\"node_modules/@openzeppelin/contracts/proxy/ERC1967/ERC1967Proxy.sol\":{\"keccak256\":\"0xbfb6695731de677140fbf76c772ab08c4233a122fb51ac28ac120fc49bbbc4ec\",\"urls\":[\"bzz-raw://68f8fded7cc318efa15874b7c6a983fe17a4a955d72d240353a9a4ca1e1b824c\",\"dweb:/ipfs/QmdcmBL9Qo4Tk3Dby4wFYabGyot9JNeLPxpSXZUgUm92BV\"],\"license\":\"MIT\"},\"node_modules/@openzeppelin/contracts/proxy/ERC1967/ERC1967Utils.sol\":{\"keccak256\":\"0x06a78f9b3ee3e6d0eb4e4cd635ba49960bea34cac1db8c0a27c75f2319f1fd65\",\"urls\":[\"bzz-raw://547d21aa17f4f3f1a1a7edf7167beff8dd9496a0348d5588f15cc8a4b29d052a\",\"dweb:/ipfs/QmT16JtRQSWNpLo9W23jr6CzaMuTAcQcjJJcdRd8HLJ6cE\"],\"license\":\"MIT\"},\"node_modules/@openzeppelin/contracts/proxy/Proxy.sol\":{\"keccak256\":\"0xc3f2ec76a3de8ed7a7007c46166f5550c72c7709e3fc7e8bb3111a7191cdedbd\",\"urls\":[\"bzz-raw://e73efb4c2ca655882dc237c6b4f234a9bd36d97159d8fcaa837eb01171f726ac\",\"dweb:/ipfs/QmTNnnv7Gu5fs5G1ZMh7Fexp8N4XUs3XrNAngjcxgiss3e\"],\"license\":\"MIT\"},\"node_modules/@openzeppelin/contracts/proxy/beacon/IBeacon.sol\":{\"keccak256\":\"0xc59a78b07b44b2cf2e8ab4175fca91e8eca1eee2df7357b8d2a8833e5ea1f64c\",\"urls\":[\"bzz-raw://5aa4f07e65444784c29cd7bfcc2341b34381e4e5b5da9f0c5bd00d7f430e66fa\",\"dweb:/ipfs/QmWRMh4Q9DpaU9GvsiXmDdoNYMyyece9if7hnfLz7uqzWM\"],\"license\":\"MIT\"},\"node_modules/@openzeppelin/contracts/utils/Address.sol\":{\"keccak256\":\"0xaf28a975a78550e45f65e559a3ad6a5ad43b9b8a37366999abd1b7084eb70721\",\"urls\":[\"bzz-raw://b7bd24e224f67f65bfadf85dc2929fa965456bb2415478bd0125471b5ce35245\",\"dweb:/ipfs/QmRaydGr8BTHs1kvaZfsNU69pKzUAGFrvABn1KiRSbE51y\"],\"license\":\"MIT\"},\"node_modules/@openzeppelin/contracts/utils/StorageSlot.sol\":{\"keccak256\":\"0x32ba59b4b7299237c8ba56319110989d7978a039faf754793064e967e5894418\",\"urls\":[\"bzz-raw://1ae50c8b562427df610cc4540c9bf104acca7ef8e2dcae567ae7e52272281e9c\",\"dweb:/ipfs/QmTHiadFCSJUPpRjNegc5SahmeU8bAoY8i9Aq6tVscbcKR\"],\"license\":\"MIT\"}},\"version\":1}", + "numDeployments": 4, + "receipt": { + "transactionHash": "0x548db48b8b281d33a3cb55d04fc561fb6a02dc7d99622ad2e2ea0e0829cb09b3", + "transactionIndex": "0x1", + "blockHash": "0x0542901d472888b336118b165549763dd239e0d1ff070ff999906a446eea5b30", + "blockNumber": "0x5841dc", + "from": "0xCB8F8130E289946aec9a17b29819716B1E9e4998", + "to": null, + "cumulativeGasUsed": "0x53956a", + "gasUsed": "0x5420e", + "contractAddress": "0x41841e316F85933247fC7b51c79B76F22eB239bc", + "logs": [ + { + "address": "0x41841e316F85933247fC7b51c79B76F22eB239bc", + "topics": [ + "0xbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b", + "0x000000000000000000000000ba93a9cf3e8194b7d04bee459c679b2125cd569b" + ], + "data": "0x", + "blockHash": "0x0542901d472888b336118b165549763dd239e0d1ff070ff999906a446eea5b30", + "blockNumber": "0x5841dc", + "transactionHash": "0x548db48b8b281d33a3cb55d04fc561fb6a02dc7d99622ad2e2ea0e0829cb09b3", + "transactionIndex": "0x1", + "logIndex": "0x0" + }, + { + "address": "0x41841e316F85933247fC7b51c79B76F22eB239bc", + "topics": [ + "0xc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d2" + ], + "data": "0x0000000000000000000000000000000000000000000000000000000000000001", + "blockHash": "0x0542901d472888b336118b165549763dd239e0d1ff070ff999906a446eea5b30", + "blockNumber": "0x5841dc", + "transactionHash": "0x548db48b8b281d33a3cb55d04fc561fb6a02dc7d99622ad2e2ea0e0829cb09b3", + "transactionIndex": "0x1", + "logIndex": "0x1" + } + ], + "status": "0x1", + "logsBloom": "0x00000000000000000000000080000000400000000000000010000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000002000000080000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800000000000000000000000080000000000000000000000000000000000000000000000000000000001000000000000000000000000000000020000000000000000000000000000000000004000000000000000000000000000000000010000000000000000000000000000000000000000000000000", + "type": "0x0", + "effectiveGasPrice": "0x3ef1480" + }, + "solcInputHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "storageLayout": { + "storage": [], + "types": {} + }, + "transactionHash": "0x548db48b8b281d33a3cb55d04fc561fb6a02dc7d99622ad2e2ea0e0829cb09b3", + "userdoc": { + "version": 1, + "kind": "user" + } +} \ No newline at end of file diff --git a/deployments/testnet_qa_dapp/GaugeBeaconRootstockCollective.json b/deployments/testnet_qa_dapp/GaugeBeaconRootstockCollective.json new file mode 100644 index 00000000..5523f059 --- /dev/null +++ b/deployments/testnet_qa_dapp/GaugeBeaconRootstockCollective.json @@ -0,0 +1,310 @@ +{ + "abi": [ + { + "type": "constructor", + "inputs": [ + { + "name": "governanceManager_", + "type": "address", + "internalType": "contract IGovernanceManagerRootstockCollective" + }, + { + "name": "gaugeImplementation_", + "type": "address", + "internalType": "address" + } + ], + "stateMutability": "nonpayable" + }, + { + "type": "function", + "name": "governanceManager", + "inputs": [], + "outputs": [ + { + "name": "", + "type": "address", + "internalType": "contract IGovernanceManagerRootstockCollective" + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "implementation", + "inputs": [], + "outputs": [ + { + "name": "", + "type": "address", + "internalType": "address" + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "owner", + "inputs": [], + "outputs": [ + { + "name": "", + "type": "address", + "internalType": "address" + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "renounceOwnership", + "inputs": [], + "outputs": [], + "stateMutability": "nonpayable" + }, + { + "type": "function", + "name": "transferOwnership", + "inputs": [ + { + "name": "newOwner", + "type": "address", + "internalType": "address" + } + ], + "outputs": [], + "stateMutability": "nonpayable" + }, + { + "type": "function", + "name": "upgradeTo", + "inputs": [ + { + "name": "newImplementation", + "type": "address", + "internalType": "address" + } + ], + "outputs": [], + "stateMutability": "nonpayable" + }, + { + "type": "event", + "name": "OwnershipTransferred", + "inputs": [ + { + "name": "previousOwner", + "type": "address", + "indexed": true, + "internalType": "address" + }, + { + "name": "newOwner", + "type": "address", + "indexed": true, + "internalType": "address" + } + ], + "anonymous": false + }, + { + "type": "event", + "name": "Upgraded", + "inputs": [ + { + "name": "implementation", + "type": "address", + "indexed": true, + "internalType": "address" + } + ], + "anonymous": false + }, + { + "type": "error", + "name": "BeaconInvalidImplementation", + "inputs": [ + { + "name": "implementation", + "type": "address", + "internalType": "address" + } + ] + }, + { + "type": "error", + "name": "OwnableInvalidOwner", + "inputs": [ + { + "name": "owner", + "type": "address", + "internalType": "address" + } + ] + }, + { + "type": "error", + "name": "OwnableUnauthorizedAccount", + "inputs": [ + { + "name": "account", + "type": "address", + "internalType": "address" + } + ] + } + ], + "address": "0x6b3EE68B26D7F3D7580517450471216928e3434d", + "args": [ + "0xEf891bB2A90339fC8E1E250f54C079A46fAABE1b", + "0x595ea3A4Ecf7bc4F69424BEa072A1cdaAA6557a7" + ], + "bytecode": "0x608060405234801561001057600080fd5b5060405161062338038061062383398101604081905261002f916101e6565b80826001600160a01b0316630c340a246040518163ffffffff1660e01b8152600401602060405180830381865afa15801561006e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906100929190610220565b806001600160a01b0381166100c257604051631e4fbdf760e01b8152600060048201526024015b60405180910390fd5b6100cb816100fe565b506100d58261014e565b5050600280546001600160a01b0319166001600160a01b03939093169290921790915550610244565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b806001600160a01b03163b6000036101845760405163211eb15960e21b81526001600160a01b03821660048201526024016100b9565b600180546001600160a01b0319166001600160a01b0383169081179091556040517fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a250565b6001600160a01b03811681146101e357600080fd5b50565b600080604083850312156101f957600080fd5b8251610204816101ce565b6020840151909250610215816101ce565b809150509250929050565b60006020828403121561023257600080fd5b815161023d816101ce565b9392505050565b6103d0806102536000396000f3fe608060405234801561001057600080fd5b50600436106100725760003560e01c80638da5cb5b116100505780638da5cb5b146100d7578063d2e6d1c3146100f5578063f2fde38b1461011557600080fd5b80633659cfe6146100775780635c60da1b1461008c578063715018a6146100cf575b600080fd5b61008a610085366004610386565b610128565b005b60015473ffffffffffffffffffffffffffffffffffffffff165b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200160405180910390f35b61008a61013c565b60005473ffffffffffffffffffffffffffffffffffffffff166100a6565b6002546100a69073ffffffffffffffffffffffffffffffffffffffff1681565b61008a610123366004610386565b610150565b6101306101b6565b61013981610239565b50565b6101446101b6565b61014e6000610311565b565b6101586101b6565b73ffffffffffffffffffffffffffffffffffffffff81166101ad576040517f1e4fbdf7000000000000000000000000000000000000000000000000000000008152600060048201526024015b60405180910390fd5b61013981610311565b6002546040517feb6f7abf00000000000000000000000000000000000000000000000000000000815233600482015273ffffffffffffffffffffffffffffffffffffffff9091169063eb6f7abf9060240160006040518083038186803b15801561021f57600080fd5b505afa158015610233573d6000803e3d6000fd5b50505050565b8073ffffffffffffffffffffffffffffffffffffffff163b6000036102a2576040517f847ac56400000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff821660048201526024016101a4565b600180547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff83169081179091556040517fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a250565b6000805473ffffffffffffffffffffffffffffffffffffffff8381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b60006020828403121561039857600080fd5b813573ffffffffffffffffffffffffffffffffffffffff811681146103bc57600080fd5b939250505056fea164736f6c6343000814000a", + "deployedBytecode": "0x608060405234801561001057600080fd5b50600436106100725760003560e01c80638da5cb5b116100505780638da5cb5b146100d7578063d2e6d1c3146100f5578063f2fde38b1461011557600080fd5b80633659cfe6146100775780635c60da1b1461008c578063715018a6146100cf575b600080fd5b61008a610085366004610386565b610128565b005b60015473ffffffffffffffffffffffffffffffffffffffff165b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200160405180910390f35b61008a61013c565b60005473ffffffffffffffffffffffffffffffffffffffff166100a6565b6002546100a69073ffffffffffffffffffffffffffffffffffffffff1681565b61008a610123366004610386565b610150565b6101306101b6565b61013981610239565b50565b6101446101b6565b61014e6000610311565b565b6101586101b6565b73ffffffffffffffffffffffffffffffffffffffff81166101ad576040517f1e4fbdf7000000000000000000000000000000000000000000000000000000008152600060048201526024015b60405180910390fd5b61013981610311565b6002546040517feb6f7abf00000000000000000000000000000000000000000000000000000000815233600482015273ffffffffffffffffffffffffffffffffffffffff9091169063eb6f7abf9060240160006040518083038186803b15801561021f57600080fd5b505afa158015610233573d6000803e3d6000fd5b50505050565b8073ffffffffffffffffffffffffffffffffffffffff163b6000036102a2576040517f847ac56400000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff821660048201526024016101a4565b600180547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff83169081179091556040517fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a250565b6000805473ffffffffffffffffffffffffffffffffffffffff8381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b60006020828403121561039857600080fd5b813573ffffffffffffffffffffffffffffffffffffffff811681146103bc57600080fd5b939250505056fea164736f6c6343000814000a", + "devdoc": { + "version": 1, + "kind": "dev", + "methods": { + "constructor": { + "params": { + "gaugeImplementation_": "address of the Gauge initial implementation", + "governanceManager_": "contract with permissioned roles" + } + }, + "implementation()": { + "details": "Returns the current implementation address." + }, + "owner()": { + "details": "Returns the address of the current owner." + }, + "renounceOwnership()": { + "details": "Leaves the contract without owner. It will not be possible to call `onlyOwner` functions. Can only be called by the current owner. NOTE: Renouncing ownership will leave the contract without an owner, thereby disabling any functionality that is only available to the owner." + }, + "transferOwnership(address)": { + "details": "Transfers ownership of the contract to a new account (`newOwner`). Can only be called by the current owner." + }, + "upgradeTo(address)": { + "details": "Upgrades the beacon to a new implementation. Emits an {Upgraded} event. Requirements: - msg.sender must be the owner of the contract. - `newImplementation` must be a contract." + } + }, + "events": { + "Upgraded(address)": { + "details": "Emitted when the implementation returned by the beacon is changed." + } + }, + "errors": { + "BeaconInvalidImplementation(address)": [ + { + "details": "The `implementation` of the beacon is invalid." + } + ], + "OwnableInvalidOwner(address)": [ + { + "details": "The owner is not a valid owner account. (eg. `address(0)`)" + } + ], + "OwnableUnauthorizedAccount(address)": [ + { + "details": "The caller account is not authorized to perform an operation." + } + ] + } + }, + "metadata": "{\"compiler\":{\"version\":\"0.8.20+commit.a1b79de6\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"contract IGovernanceManagerRootstockCollective\",\"name\":\"governanceManager_\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"gaugeImplementation_\",\"type\":\"address\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"implementation\",\"type\":\"address\"}],\"type\":\"error\",\"name\":\"BeaconInvalidImplementation\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"}],\"type\":\"error\",\"name\":\"OwnableInvalidOwner\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"type\":\"error\",\"name\":\"OwnableUnauthorizedAccount\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"previousOwner\",\"type\":\"address\",\"indexed\":true},{\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\",\"indexed\":true}],\"type\":\"event\",\"name\":\"OwnershipTransferred\",\"anonymous\":false},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"implementation\",\"type\":\"address\",\"indexed\":true}],\"type\":\"event\",\"name\":\"Upgraded\",\"anonymous\":false},{\"inputs\":[],\"stateMutability\":\"view\",\"type\":\"function\",\"name\":\"governanceManager\",\"outputs\":[{\"internalType\":\"contract IGovernanceManagerRootstockCollective\",\"name\":\"\",\"type\":\"address\"}]},{\"inputs\":[],\"stateMutability\":\"view\",\"type\":\"function\",\"name\":\"implementation\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}]},{\"inputs\":[],\"stateMutability\":\"view\",\"type\":\"function\",\"name\":\"owner\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}]},{\"inputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\",\"name\":\"renounceOwnership\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\",\"name\":\"transferOwnership\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newImplementation\",\"type\":\"address\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\",\"name\":\"upgradeTo\"}],\"devdoc\":{\"kind\":\"dev\",\"methods\":{\"constructor\":{\"params\":{\"gaugeImplementation_\":\"address of the Gauge initial implementation\",\"governanceManager_\":\"contract with permissioned roles\"}},\"implementation()\":{\"details\":\"Returns the current implementation address.\"},\"owner()\":{\"details\":\"Returns the address of the current owner.\"},\"renounceOwnership()\":{\"details\":\"Leaves the contract without owner. It will not be possible to call `onlyOwner` functions. Can only be called by the current owner. NOTE: Renouncing ownership will leave the contract without an owner, thereby disabling any functionality that is only available to the owner.\"},\"transferOwnership(address)\":{\"details\":\"Transfers ownership of the contract to a new account (`newOwner`). Can only be called by the current owner.\"},\"upgradeTo(address)\":{\"details\":\"Upgrades the beacon to a new implementation. Emits an {Upgraded} event. Requirements: - msg.sender must be the owner of the contract. - `newImplementation` must be a contract.\"}},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{\"constructor\":{\"notice\":\"constructor\"}},\"version\":1}},\"settings\":{\"remappings\":[\"@openzeppelin/contracts-upgradeable/=node_modules/@openzeppelin/contracts-upgradeable/\",\"@openzeppelin/contracts/=node_modules/@openzeppelin/contracts/\",\"eth-gas-reporter/=node_modules/eth-gas-reporter/\",\"forge-std/=node_modules/forge-std/\",\"hardhat/=node_modules/hardhat/\"],\"optimizer\":{\"enabled\":true,\"runs\":10000},\"metadata\":{\"bytecodeHash\":\"none\"},\"compilationTarget\":{\"src/gauge/GaugeBeaconRootstockCollective.sol\":\"GaugeBeaconRootstockCollective\"},\"evmVersion\":\"london\",\"libraries\":{}},\"sources\":{\"node_modules/@openzeppelin/contracts/access/Ownable.sol\":{\"keccak256\":\"0xff6d0bb2e285473e5311d9d3caacb525ae3538a80758c10649a4d61029b017bb\",\"urls\":[\"bzz-raw://8ed324d3920bb545059d66ab97d43e43ee85fd3bd52e03e401f020afb0b120f6\",\"dweb:/ipfs/QmfEckWLmZkDDcoWrkEvMWhms66xwTLff9DDhegYpvHo1a\"],\"license\":\"MIT\"},\"node_modules/@openzeppelin/contracts/proxy/beacon/IBeacon.sol\":{\"keccak256\":\"0xc59a78b07b44b2cf2e8ab4175fca91e8eca1eee2df7357b8d2a8833e5ea1f64c\",\"urls\":[\"bzz-raw://5aa4f07e65444784c29cd7bfcc2341b34381e4e5b5da9f0c5bd00d7f430e66fa\",\"dweb:/ipfs/QmWRMh4Q9DpaU9GvsiXmDdoNYMyyece9if7hnfLz7uqzWM\"],\"license\":\"MIT\"},\"node_modules/@openzeppelin/contracts/proxy/beacon/UpgradeableBeacon.sol\":{\"keccak256\":\"0x5920bac7215d12961e23b207f6e81a1d64aa4935a4469abe95b64a96a3c3007b\",\"urls\":[\"bzz-raw://b34bb828c45c3a4ebf6c2c585971abf5089e61357a3818a2900c7e85b74a1299\",\"dweb:/ipfs/QmewGAzKsPXYfSjCKxuH1SekKxtdyzhdbdyxjF5gohLigt\"],\"license\":\"MIT\"},\"node_modules/@openzeppelin/contracts/utils/Context.sol\":{\"keccak256\":\"0x493033a8d1b176a037b2cc6a04dad01a5c157722049bbecf632ca876224dd4b2\",\"urls\":[\"bzz-raw://6a708e8a5bdb1011c2c381c9a5cfd8a9a956d7d0a9dc1bd8bcdaf52f76ef2f12\",\"dweb:/ipfs/Qmax9WHBnVsZP46ZxEMNRQpLQnrdE4dK8LehML1Py8FowF\"],\"license\":\"MIT\"},\"src/gauge/GaugeBeaconRootstockCollective.sol\":{\"keccak256\":\"0x983671fcb0f2432c5c7626b0505f12861efdafc60fe760f856fb7b5caae02494\",\"urls\":[\"bzz-raw://516a39edc09befe00ec6faa924fb1c6bfe3208eef12b631075f93f7fb41a53d3\",\"dweb:/ipfs/QmZnXYuTp9EodYyx2Z1MPKfbakyUW8AfdQihHiisEWhDdo\"],\"license\":\"MIT\"},\"src/interfaces/IChangeContractRootstockCollective.sol\":{\"keccak256\":\"0x00fb3eb72286348dd06d581c5044cb045dfd3bd24725d05dd9c4b008567dd496\",\"urls\":[\"bzz-raw://7f4a03e06197ae7d6e478097afbbecf936ce7029ca49909a1fee0b4ba1b5b517\",\"dweb:/ipfs/QmfByMJ1SQAmcYkouS5WM3akMmSKU3MCyACpFmQwuFSYe9\"],\"license\":\"MIT\"},\"src/interfaces/IGovernanceManagerRootstockCollective.sol\":{\"keccak256\":\"0x1416991dd129bb36f43cc0854dfa824b5b85838e5c5018566b6cf78f527747e3\",\"urls\":[\"bzz-raw://8652a18ec39d5527fefb829eca619f4cf4bbec3ee4f6231e8888f1549feedd3d\",\"dweb:/ipfs/Qmczi6GipLy9B9TcDMx5UaZZPFBaMT2k49iYzQuLCFgnfS\"],\"license\":\"MIT\"}},\"version\":1}", + "numDeployments": 4, + "receipt": { + "transactionHash": "0xd42fdc078854a90137789e86e2c71de360183893bbc2b1b47413948e6c8fa5fb", + "transactionIndex": "0x3", + "blockHash": "0xbd66e786c294e2fb1ae755bdf7cea646ca5c645765b620005a25890b5d52a249", + "blockNumber": "0x5841db", + "from": "0xCB8F8130E289946aec9a17b29819716B1E9e4998", + "to": null, + "cumulativeGasUsed": "0x3ca53a", + "gasUsed": "0x52d94", + "contractAddress": "0x6b3EE68B26D7F3D7580517450471216928e3434d", + "logs": [ + { + "address": "0x6b3EE68B26D7F3D7580517450471216928e3434d", + "topics": [ + "0x8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x000000000000000000000000b1a39b8f57a55d1429324eeb1564122806eb297f" + ], + "data": "0x", + "blockHash": "0xbd66e786c294e2fb1ae755bdf7cea646ca5c645765b620005a25890b5d52a249", + "blockNumber": "0x5841db", + "transactionHash": "0xd42fdc078854a90137789e86e2c71de360183893bbc2b1b47413948e6c8fa5fb", + "transactionIndex": "0x3", + "logIndex": "0x0" + }, + { + "address": "0x6b3EE68B26D7F3D7580517450471216928e3434d", + "topics": [ + "0xbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b", + "0x000000000000000000000000595ea3a4ecf7bc4f69424bea072a1cdaaa6557a7" + ], + "data": "0x", + "blockHash": "0xbd66e786c294e2fb1ae755bdf7cea646ca5c645765b620005a25890b5d52a249", + "blockNumber": "0x5841db", + "transactionHash": "0xd42fdc078854a90137789e86e2c71de360183893bbc2b1b47413948e6c8fa5fb", + "transactionIndex": "0x3", + "logIndex": "0x1" + } + ], + "status": "0x1", + "logsBloom": "0x00000000000000000000000000000000400000000000000000800000000000000000000000200000000000000000000080000000000000000000000000000000000000000000000000000000000002000001000000000000001000000000000000000000020000000000000000000840000000000000000000000000000000400000000000000000000000000000000000000000000000000000000000000000000040000100000000000000000000000000000000000000000000000200000000000020000000000000000000000000000000000020000000000000000020000000000200000000000000000000000000000000000000000000000000000000", + "type": "0x0", + "effectiveGasPrice": "0x3ef1480" + }, + "solcInputHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "storageLayout": { + "storage": [ + { + "astId": 613, + "contract": "src/gauge/GaugeBeaconRootstockCollective.sol:GaugeBeaconRootstockCollective", + "label": "_owner", + "offset": 0, + "slot": "0", + "type": "t_address" + }, + { + "astId": 1357, + "contract": "src/gauge/GaugeBeaconRootstockCollective.sol:GaugeBeaconRootstockCollective", + "label": "_implementation", + "offset": 0, + "slot": "1", + "type": "t_address" + }, + { + "astId": 58339, + "contract": "src/gauge/GaugeBeaconRootstockCollective.sol:GaugeBeaconRootstockCollective", + "label": "governanceManager", + "offset": 0, + "slot": "2", + "type": "t_contract(IGovernanceManagerRootstockCollective)60547" + } + ], + "types": { + "t_address": { + "encoding": "inplace", + "label": "address", + "numberOfBytes": "20" + }, + "t_contract(IGovernanceManagerRootstockCollective)60547": { + "encoding": "inplace", + "label": "contract IGovernanceManagerRootstockCollective", + "numberOfBytes": "20" + } + } + }, + "transactionHash": "0xd42fdc078854a90137789e86e2c71de360183893bbc2b1b47413948e6c8fa5fb", + "userdoc": { + "version": 1, + "kind": "user", + "methods": { + "constructor": { + "notice": "constructor" + } + } + } +} \ No newline at end of file diff --git a/deployments/testnet_qa_dapp/GaugeFactoryRootstockCollective.json b/deployments/testnet_qa_dapp/GaugeFactoryRootstockCollective.json new file mode 100644 index 00000000..8cbf0115 --- /dev/null +++ b/deployments/testnet_qa_dapp/GaugeFactoryRootstockCollective.json @@ -0,0 +1,117 @@ +{ + "abi": [ + { + "type": "constructor", + "inputs": [ + { + "name": "beacon_", + "type": "address", + "internalType": "address" + }, + { + "name": "rewardToken_", + "type": "address", + "internalType": "address" + } + ], + "stateMutability": "nonpayable" + }, + { + "type": "function", + "name": "beacon", + "inputs": [], + "outputs": [ + { + "name": "", + "type": "address", + "internalType": "address" + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "createGauge", + "inputs": [], + "outputs": [ + { + "name": "gauge_", + "type": "address", + "internalType": "contract GaugeRootstockCollective" + } + ], + "stateMutability": "nonpayable" + }, + { + "type": "function", + "name": "rewardToken", + "inputs": [], + "outputs": [ + { + "name": "", + "type": "address", + "internalType": "address" + } + ], + "stateMutability": "view" + } + ], + "address": "0x317B70100e091Cf00c09240e34a50591F7931fF6", + "args": [ + "0x6b3EE68B26D7F3D7580517450471216928e3434d", + "0x19F64674D8A5B4E652319F5e239eFd3bc969A1fE" + ], + "bytecode": "0x60c060405234801561001057600080fd5b5060405161090c38038061090c83398101604081905261002f91610062565b6001600160a01b039182166080521660a052610095565b80516001600160a01b038116811461005d57600080fd5b919050565b6000806040838503121561007557600080fd5b61007e83610046565b915061008c60208401610046565b90509250929050565b60805160a0516108476100c56000396000818160a3015260df015260008181604b015261018e01526108476000f3fe608060405234801561001057600080fd5b50600436106100415760003560e01c806359659e9014610046578063dc5a417914610096578063f7c618c11461009e575b600080fd5b61006d7f000000000000000000000000000000000000000000000000000000000000000081565b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200160405180910390f35b61006d6100c5565b61006d7f000000000000000000000000000000000000000000000000000000000000000081565b60405173ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001660248201523360448201526000908190606401604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f485cc95500000000000000000000000000000000000000000000000000000000179052519091507f00000000000000000000000000000000000000000000000000000000000000009082906101b9906101e7565b6101c49291906101f4565b604051809103906000f0801580156101e0573d6000803e3d6000fd5b5091505090565b6105bc8061027f83390190565b73ffffffffffffffffffffffffffffffffffffffff8316815260006020604081840152835180604085015260005b8181101561023e57858101830151858201606001528201610222565b5060006060828601015260607fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f83011685010192505050939250505056fe60a06040526040516105bc3803806105bc83398101604081905261002291610387565b61002c828261003e565b506001600160a01b031660805261047e565b610047826100fe565b6040516001600160a01b038316907f1cf3b03a6cf19fa2baba4df148e9dcabedea7f8a5c07840e207e5c089be95d3e90600090a28051156100f2576100ed826001600160a01b0316635c60da1b6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156100c3573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906100e79190610447565b82610211565b505050565b6100fa610288565b5050565b806001600160a01b03163b60000361013957604051631933b43b60e21b81526001600160a01b03821660048201526024015b60405180910390fd5b807fa3f0ad74e5423aebfd80d3ef4346578335a9a72aeaee59ff6cb3582b35133d5080546001600160a01b0319166001600160a01b0392831617905560408051635c60da1b60e01b81529051600092841691635c60da1b9160048083019260209291908290030181865afa1580156101b5573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906101d99190610447565b9050806001600160a01b03163b6000036100fa57604051634c9c8ce360e01b81526001600160a01b0382166004820152602401610130565b6060600080846001600160a01b03168460405161022e9190610462565b600060405180830381855af49150503d8060008114610269576040519150601f19603f3d011682016040523d82523d6000602084013e61026e565b606091505b50909250905061027f8583836102a9565b95945050505050565b34156102a75760405163b398979f60e01b815260040160405180910390fd5b565b6060826102be576102b982610308565b610301565b81511580156102d557506001600160a01b0384163b155b156102fe57604051639996b31560e01b81526001600160a01b0385166004820152602401610130565b50805b9392505050565b8051156103185780518082602001fd5b604051630a12f52160e11b815260040160405180910390fd5b80516001600160a01b038116811461034857600080fd5b919050565b634e487b7160e01b600052604160045260246000fd5b60005b8381101561037e578181015183820152602001610366565b50506000910152565b6000806040838503121561039a57600080fd5b6103a383610331565b60208401519092506001600160401b03808211156103c057600080fd5b818501915085601f8301126103d457600080fd5b8151818111156103e6576103e661034d565b604051601f8201601f19908116603f0116810190838211818310171561040e5761040e61034d565b8160405282815288602084870101111561042757600080fd5b610438836020830160208801610363565b80955050505050509250929050565b60006020828403121561045957600080fd5b61030182610331565b60008251610474818460208701610363565b9190910192915050565b6080516101246104986000396000602401526101246000f3fe608060405261000c61000e565b005b61001e610019610020565b6100b6565b565b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16635c60da1b6040518163ffffffff1660e01b8152600401602060405180830381865afa15801561008d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906100b191906100da565b905090565b3660008037600080366000845af43d6000803e8080156100d5573d6000f35b3d6000fd5b6000602082840312156100ec57600080fd5b815173ffffffffffffffffffffffffffffffffffffffff8116811461011057600080fd5b939250505056fea164736f6c6343000814000aa164736f6c6343000814000a", + "deployedBytecode": "0x608060405234801561001057600080fd5b50600436106100415760003560e01c806359659e9014610046578063dc5a417914610096578063f7c618c11461009e575b600080fd5b61006d7f000000000000000000000000000000000000000000000000000000000000000081565b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200160405180910390f35b61006d6100c5565b61006d7f000000000000000000000000000000000000000000000000000000000000000081565b60405173ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001660248201523360448201526000908190606401604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f485cc95500000000000000000000000000000000000000000000000000000000179052519091507f00000000000000000000000000000000000000000000000000000000000000009082906101b9906101e7565b6101c49291906101f4565b604051809103906000f0801580156101e0573d6000803e3d6000fd5b5091505090565b6105bc8061027f83390190565b73ffffffffffffffffffffffffffffffffffffffff8316815260006020604081840152835180604085015260005b8181101561023e57858101830151858201606001528201610222565b5060006060828601015260607fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f83011685010192505050939250505056fe60a06040526040516105bc3803806105bc83398101604081905261002291610387565b61002c828261003e565b506001600160a01b031660805261047e565b610047826100fe565b6040516001600160a01b038316907f1cf3b03a6cf19fa2baba4df148e9dcabedea7f8a5c07840e207e5c089be95d3e90600090a28051156100f2576100ed826001600160a01b0316635c60da1b6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156100c3573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906100e79190610447565b82610211565b505050565b6100fa610288565b5050565b806001600160a01b03163b60000361013957604051631933b43b60e21b81526001600160a01b03821660048201526024015b60405180910390fd5b807fa3f0ad74e5423aebfd80d3ef4346578335a9a72aeaee59ff6cb3582b35133d5080546001600160a01b0319166001600160a01b0392831617905560408051635c60da1b60e01b81529051600092841691635c60da1b9160048083019260209291908290030181865afa1580156101b5573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906101d99190610447565b9050806001600160a01b03163b6000036100fa57604051634c9c8ce360e01b81526001600160a01b0382166004820152602401610130565b6060600080846001600160a01b03168460405161022e9190610462565b600060405180830381855af49150503d8060008114610269576040519150601f19603f3d011682016040523d82523d6000602084013e61026e565b606091505b50909250905061027f8583836102a9565b95945050505050565b34156102a75760405163b398979f60e01b815260040160405180910390fd5b565b6060826102be576102b982610308565b610301565b81511580156102d557506001600160a01b0384163b155b156102fe57604051639996b31560e01b81526001600160a01b0385166004820152602401610130565b50805b9392505050565b8051156103185780518082602001fd5b604051630a12f52160e11b815260040160405180910390fd5b80516001600160a01b038116811461034857600080fd5b919050565b634e487b7160e01b600052604160045260246000fd5b60005b8381101561037e578181015183820152602001610366565b50506000910152565b6000806040838503121561039a57600080fd5b6103a383610331565b60208401519092506001600160401b03808211156103c057600080fd5b818501915085601f8301126103d457600080fd5b8151818111156103e6576103e661034d565b604051601f8201601f19908116603f0116810190838211818310171561040e5761040e61034d565b8160405282815288602084870101111561042757600080fd5b610438836020830160208801610363565b80955050505050509250929050565b60006020828403121561045957600080fd5b61030182610331565b60008251610474818460208701610363565b9190910192915050565b6080516101246104986000396000602401526101246000f3fe608060405261000c61000e565b005b61001e610019610020565b6100b6565b565b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16635c60da1b6040518163ffffffff1660e01b8152600401602060405180830381865afa15801561008d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906100b191906100da565b905090565b3660008037600080366000845af43d6000803e8080156100d5573d6000f35b3d6000fd5b6000602082840312156100ec57600080fd5b815173ffffffffffffffffffffffffffffffffffffffff8116811461011057600080fd5b939250505056fea164736f6c6343000814000aa164736f6c6343000814000a", + "devdoc": { + "version": 1, + "kind": "dev", + "methods": { + "constructor": { + "params": { + "beacon_": "address of the beacon", + "rewardToken_": "address of the token rewarded to builder and voters" + } + } + } + }, + "metadata": "{\"compiler\":{\"version\":\"0.8.20+commit.a1b79de6\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"address\",\"name\":\"beacon_\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"rewardToken_\",\"type\":\"address\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"inputs\":[],\"stateMutability\":\"view\",\"type\":\"function\",\"name\":\"beacon\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}]},{\"inputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\",\"name\":\"createGauge\",\"outputs\":[{\"internalType\":\"contract GaugeRootstockCollective\",\"name\":\"gauge_\",\"type\":\"address\"}]},{\"inputs\":[],\"stateMutability\":\"view\",\"type\":\"function\",\"name\":\"rewardToken\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}]}],\"devdoc\":{\"kind\":\"dev\",\"methods\":{\"constructor\":{\"params\":{\"beacon_\":\"address of the beacon\",\"rewardToken_\":\"address of the token rewarded to builder and voters\"}}},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{\"beacon()\":{\"notice\":\"address of beacon contract who stores gauge implementation address which is where gauge proxies will delegate all function calls\"},\"constructor\":{\"notice\":\"constructor\"},\"rewardToken()\":{\"notice\":\"address of the token rewarded to builder and voters\"}},\"version\":1}},\"settings\":{\"remappings\":[\"@openzeppelin/contracts-upgradeable/=node_modules/@openzeppelin/contracts-upgradeable/\",\"@openzeppelin/contracts/=node_modules/@openzeppelin/contracts/\",\"eth-gas-reporter/=node_modules/eth-gas-reporter/\",\"forge-std/=node_modules/forge-std/\",\"hardhat/=node_modules/hardhat/\"],\"optimizer\":{\"enabled\":true,\"runs\":10000},\"metadata\":{\"bytecodeHash\":\"none\"},\"compilationTarget\":{\"src/gauge/GaugeFactoryRootstockCollective.sol\":\"GaugeFactoryRootstockCollective\"},\"evmVersion\":\"london\",\"libraries\":{}},\"sources\":{\"node_modules/@openzeppelin/contracts-upgradeable/proxy/utils/Initializable.sol\":{\"keccak256\":\"0x631188737069917d2f909d29ce62c4d48611d326686ba6683e26b72a23bfac0b\",\"urls\":[\"bzz-raw://7a61054ae84cd6c4d04c0c4450ba1d6de41e27e0a2c4f1bcdf58f796b401c609\",\"dweb:/ipfs/QmUvtdp7X1mRVyC3CsHrtPbgoqWaXHp3S1ZR24tpAQYJWM\"],\"license\":\"MIT\"},\"node_modules/@openzeppelin/contracts-upgradeable/utils/ReentrancyGuardUpgradeable.sol\":{\"keccak256\":\"0xb44e086e941292cdc7f440de51478493894ef0b1aeccb0c4047445919f667f74\",\"urls\":[\"bzz-raw://942dad22fbdc1669f025540ba63aa3ccfad5f8458fc5d4525b31ebf272e7af45\",\"dweb:/ipfs/Qmdo4X2M82aM3AMoW2kf2jhYkSCyC4T1pHNd6obdsDFnAB\"],\"license\":\"MIT\"},\"node_modules/@openzeppelin/contracts/proxy/ERC1967/ERC1967Utils.sol\":{\"keccak256\":\"0x06a78f9b3ee3e6d0eb4e4cd635ba49960bea34cac1db8c0a27c75f2319f1fd65\",\"urls\":[\"bzz-raw://547d21aa17f4f3f1a1a7edf7167beff8dd9496a0348d5588f15cc8a4b29d052a\",\"dweb:/ipfs/QmT16JtRQSWNpLo9W23jr6CzaMuTAcQcjJJcdRd8HLJ6cE\"],\"license\":\"MIT\"},\"node_modules/@openzeppelin/contracts/proxy/Proxy.sol\":{\"keccak256\":\"0xc3f2ec76a3de8ed7a7007c46166f5550c72c7709e3fc7e8bb3111a7191cdedbd\",\"urls\":[\"bzz-raw://e73efb4c2ca655882dc237c6b4f234a9bd36d97159d8fcaa837eb01171f726ac\",\"dweb:/ipfs/QmTNnnv7Gu5fs5G1ZMh7Fexp8N4XUs3XrNAngjcxgiss3e\"],\"license\":\"MIT\"},\"node_modules/@openzeppelin/contracts/proxy/beacon/BeaconProxy.sol\":{\"keccak256\":\"0x387ebdcb365b8e620f26645d2b34a161cd39eedfb0219e8baff55630c5ae113c\",\"urls\":[\"bzz-raw://744ea187c195e31cb9201e63ca291fca9e623747f54f0ba390b366a6213b8964\",\"dweb:/ipfs/Qmc547qfV4sz65DC9B4okx1HvgxwUzJR7zTfKKbTzL3UQT\"],\"license\":\"MIT\"},\"node_modules/@openzeppelin/contracts/proxy/beacon/IBeacon.sol\":{\"keccak256\":\"0xc59a78b07b44b2cf2e8ab4175fca91e8eca1eee2df7357b8d2a8833e5ea1f64c\",\"urls\":[\"bzz-raw://5aa4f07e65444784c29cd7bfcc2341b34381e4e5b5da9f0c5bd00d7f430e66fa\",\"dweb:/ipfs/QmWRMh4Q9DpaU9GvsiXmDdoNYMyyece9if7hnfLz7uqzWM\"],\"license\":\"MIT\"},\"node_modules/@openzeppelin/contracts/token/ERC20/IERC20.sol\":{\"keccak256\":\"0xc6a8ff0ea489379b61faa647490411b80102578440ab9d84e9a957cc12164e70\",\"urls\":[\"bzz-raw://0ea104e577e63faea3b69c415637e99e755dcbf64c5833d7140c35a714d6d90c\",\"dweb:/ipfs/Qmau6x4Ns9XdyynRCNNp3RhLqijJjFm7z5fyZazfYFGYdq\"],\"license\":\"MIT\"},\"node_modules/@openzeppelin/contracts/token/ERC20/extensions/IERC20Permit.sol\":{\"keccak256\":\"0x6008dabfe393240d73d7dd7688033f72740d570aa422254d29a7dce8568f3aff\",\"urls\":[\"bzz-raw://f5196ec75139918c6c7bb4251b36395e668f1fa6d206beba7e7520e74913940d\",\"dweb:/ipfs/QmSyqjksXxmm2mCG6qRd1yuwLykypkSVBbnBnGqJRcuJMi\"],\"license\":\"MIT\"},\"node_modules/@openzeppelin/contracts/token/ERC20/utils/SafeERC20.sol\":{\"keccak256\":\"0x37bb49513c49c87c4642a891b13b63571bc87013dde806617aa1efb54605f386\",\"urls\":[\"bzz-raw://b3036b3a83b7c48f96641f2a9002b9f2dcb6a5958dd670894ada21ae8229b3d0\",\"dweb:/ipfs/QmUNfSBdoVtjhETaUJCYcaC7pTMgbhht926tJ2uXJbiVd3\"],\"license\":\"MIT\"},\"node_modules/@openzeppelin/contracts/utils/Address.sol\":{\"keccak256\":\"0xaf28a975a78550e45f65e559a3ad6a5ad43b9b8a37366999abd1b7084eb70721\",\"urls\":[\"bzz-raw://b7bd24e224f67f65bfadf85dc2929fa965456bb2415478bd0125471b5ce35245\",\"dweb:/ipfs/QmRaydGr8BTHs1kvaZfsNU69pKzUAGFrvABn1KiRSbE51y\"],\"license\":\"MIT\"},\"node_modules/@openzeppelin/contracts/utils/StorageSlot.sol\":{\"keccak256\":\"0x32ba59b4b7299237c8ba56319110989d7978a039faf754793064e967e5894418\",\"urls\":[\"bzz-raw://1ae50c8b562427df610cc4540c9bf104acca7ef8e2dcae567ae7e52272281e9c\",\"dweb:/ipfs/QmTHiadFCSJUPpRjNegc5SahmeU8bAoY8i9Aq6tVscbcKR\"],\"license\":\"MIT\"},\"node_modules/@openzeppelin/contracts/utils/math/Math.sol\":{\"keccak256\":\"0x005ec64c6313f0555d59e278f9a7a5ab2db5bdc72a027f255a37c327af1ec02d\",\"urls\":[\"bzz-raw://4ece9f0b9c8daca08c76b6b5405a6446b6f73b3a15fab7ff56e296cbd4a2c875\",\"dweb:/ipfs/QmQyRpyPRL5SQuAgj6SHmbir3foX65FJjbVTTQrA2EFg6L\"],\"license\":\"MIT\"},\"src/gauge/GaugeFactoryRootstockCollective.sol\":{\"keccak256\":\"0xbcf8f9f1038468632211aa7b936d63a35caa7e54f03793ba44f701b17e489a0d\",\"urls\":[\"bzz-raw://82beb9f7be678d3edb72cd181e198e00ead8c8383c36414ce0e388094272914b\",\"dweb:/ipfs/QmSmMx3RT4gjYRFggbEWAyDie5X4JLyBW3VgpHdRFcAmii\"],\"license\":\"MIT\"},\"src/gauge/GaugeRootstockCollective.sol\":{\"keccak256\":\"0xc938acb7b0a1fe48d81115d9c78554cf52578cfa079b7e2fa61ad6f7d938cfa5\",\"urls\":[\"bzz-raw://b0705939ef67abd05f05cd9c3f7d2d0f82c42048046c9daefc360d0d3335761d\",\"dweb:/ipfs/QmaPRBk5oeoQajXGLpCCq1B2BNRHbToSrD7a7ZbcqnhwKx\"],\"license\":\"MIT\"},\"src/interfaces/IBackersManagerRootstockCollective.sol\":{\"keccak256\":\"0x7eacff4e2d906e1f38636bdc81646f213dc3820724b0bb4f61d2e105272f4087\",\"urls\":[\"bzz-raw://00e4ac507e8377040962f89fb774df725422c400114965eee8c45fcc401a7f87\",\"dweb:/ipfs/QmNsqV2naFxx8s6AG8YVDZqhvnUvXmnDZVhWH1WMsFesf6\"],\"license\":\"MIT\"},\"src/libraries/UtilsLib.sol\":{\"keccak256\":\"0x4660e2e62cb370b17052cd21238722bfe3cdaaf3f69cf4c9b2d87236070d12ac\",\"urls\":[\"bzz-raw://e8759237b67bb6e641c7a92eb0d94300770e32c25c2c5bf387bea2ea68513753\",\"dweb:/ipfs/QmbkRDUnzyL9QQbwJcFGd6kiERFFgxZgnxqsu14snpCvhp\"],\"license\":\"MIT\"}},\"version\":1}", + "numDeployments": 4, + "receipt": { + "transactionHash": "0x6ad9ebee3ae29a6bdc5493d777282dbeda2d5bfa7eb4833e450b8cc798bcb8e4", + "transactionIndex": "0x4", + "blockHash": "0xbd66e786c294e2fb1ae755bdf7cea646ca5c645765b620005a25890b5d52a249", + "blockNumber": "0x5841db", + "from": "0xCB8F8130E289946aec9a17b29819716B1E9e4998", + "to": null, + "cumulativeGasUsed": "0x447514", + "gasUsed": "0x7cfda", + "contractAddress": "0x317B70100e091Cf00c09240e34a50591F7931fF6", + "logs": [], + "status": "0x1", + "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "type": "0x0", + "effectiveGasPrice": "0x3ef1480" + }, + "solcInputHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "storageLayout": { + "storage": [], + "types": {} + }, + "transactionHash": "0x6ad9ebee3ae29a6bdc5493d777282dbeda2d5bfa7eb4833e450b8cc798bcb8e4", + "userdoc": { + "version": 1, + "kind": "user", + "methods": { + "beacon()": { + "notice": "address of beacon contract who stores gauge implementation address which is where gauge proxies will delegate all function calls" + }, + "constructor": { + "notice": "constructor" + }, + "rewardToken()": { + "notice": "address of the token rewarded to builder and voters" + } + } + } +} \ No newline at end of file diff --git a/deployments/testnet_qa_dapp/GovernanceManagerRootstockCollective.json b/deployments/testnet_qa_dapp/GovernanceManagerRootstockCollective.json new file mode 100644 index 00000000..d2c92caa --- /dev/null +++ b/deployments/testnet_qa_dapp/GovernanceManagerRootstockCollective.json @@ -0,0 +1,845 @@ +{ + "abi": [ + { + "type": "constructor", + "inputs": [], + "stateMutability": "nonpayable" + }, + { + "type": "function", + "name": "UPGRADE_INTERFACE_VERSION", + "inputs": [], + "outputs": [ + { + "name": "", + "type": "string", + "internalType": "string" + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "executeChange", + "inputs": [ + { + "name": "changeContract_", + "type": "address", + "internalType": "contract IChangeContractRootstockCollective" + } + ], + "outputs": [], + "stateMutability": "nonpayable" + }, + { + "type": "function", + "name": "foundationTreasury", + "inputs": [], + "outputs": [ + { + "name": "", + "type": "address", + "internalType": "address" + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "governor", + "inputs": [], + "outputs": [ + { + "name": "", + "type": "address", + "internalType": "address" + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "initialize", + "inputs": [ + { + "name": "governor_", + "type": "address", + "internalType": "address" + }, + { + "name": "foundationTreasury_", + "type": "address", + "internalType": "address" + }, + { + "name": "kycApprover_", + "type": "address", + "internalType": "address" + }, + { + "name": "upgrader_", + "type": "address", + "internalType": "address" + } + ], + "outputs": [], + "stateMutability": "nonpayable" + }, + { + "type": "function", + "name": "isAuthorizedChanger", + "inputs": [ + { + "name": "account_", + "type": "address", + "internalType": "address" + } + ], + "outputs": [ + { + "name": "", + "type": "bool", + "internalType": "bool" + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "kycApprover", + "inputs": [], + "outputs": [ + { + "name": "", + "type": "address", + "internalType": "address" + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "proxiableUUID", + "inputs": [], + "outputs": [ + { + "name": "", + "type": "bytes32", + "internalType": "bytes32" + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "updateFoundationTreasury", + "inputs": [ + { + "name": "foundationTreasury_", + "type": "address", + "internalType": "address" + } + ], + "outputs": [], + "stateMutability": "nonpayable" + }, + { + "type": "function", + "name": "updateGovernor", + "inputs": [ + { + "name": "governor_", + "type": "address", + "internalType": "address" + } + ], + "outputs": [], + "stateMutability": "nonpayable" + }, + { + "type": "function", + "name": "updateKYCApprover", + "inputs": [ + { + "name": "kycApprover_", + "type": "address", + "internalType": "address" + } + ], + "outputs": [], + "stateMutability": "nonpayable" + }, + { + "type": "function", + "name": "updateUpgrader", + "inputs": [ + { + "name": "upgrader_", + "type": "address", + "internalType": "address" + } + ], + "outputs": [], + "stateMutability": "nonpayable" + }, + { + "type": "function", + "name": "upgradeToAndCall", + "inputs": [ + { + "name": "newImplementation", + "type": "address", + "internalType": "address" + }, + { + "name": "data", + "type": "bytes", + "internalType": "bytes" + } + ], + "outputs": [], + "stateMutability": "payable" + }, + { + "type": "function", + "name": "upgrader", + "inputs": [], + "outputs": [ + { + "name": "", + "type": "address", + "internalType": "address" + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "validateAuthorizedChanger", + "inputs": [ + { + "name": "account_", + "type": "address", + "internalType": "address" + } + ], + "outputs": [], + "stateMutability": "view" + }, + { + "type": "function", + "name": "validateAuthorizedUpgrader", + "inputs": [ + { + "name": "account_", + "type": "address", + "internalType": "address" + } + ], + "outputs": [], + "stateMutability": "view" + }, + { + "type": "function", + "name": "validateFoundationTreasury", + "inputs": [ + { + "name": "account_", + "type": "address", + "internalType": "address" + } + ], + "outputs": [], + "stateMutability": "view" + }, + { + "type": "function", + "name": "validateGovernor", + "inputs": [ + { + "name": "account_", + "type": "address", + "internalType": "address" + } + ], + "outputs": [], + "stateMutability": "view" + }, + { + "type": "function", + "name": "validateKycApprover", + "inputs": [ + { + "name": "account_", + "type": "address", + "internalType": "address" + } + ], + "outputs": [], + "stateMutability": "view" + }, + { + "type": "event", + "name": "ChangeExecuted", + "inputs": [ + { + "name": "changeContract_", + "type": "address", + "indexed": false, + "internalType": "contract IChangeContractRootstockCollective" + }, + { + "name": "executor_", + "type": "address", + "indexed": false, + "internalType": "address" + } + ], + "anonymous": false + }, + { + "type": "event", + "name": "FoundationTreasuryUpdated", + "inputs": [ + { + "name": "foundationTreasury_", + "type": "address", + "indexed": false, + "internalType": "address" + }, + { + "name": "updatedBy_", + "type": "address", + "indexed": false, + "internalType": "address" + } + ], + "anonymous": false + }, + { + "type": "event", + "name": "GovernorUpdated", + "inputs": [ + { + "name": "governor_", + "type": "address", + "indexed": false, + "internalType": "address" + }, + { + "name": "updatedBy_", + "type": "address", + "indexed": false, + "internalType": "address" + } + ], + "anonymous": false + }, + { + "type": "event", + "name": "Initialized", + "inputs": [ + { + "name": "version", + "type": "uint64", + "indexed": false, + "internalType": "uint64" + } + ], + "anonymous": false + }, + { + "type": "event", + "name": "KycApproverUpdated", + "inputs": [ + { + "name": "kycApprover_", + "type": "address", + "indexed": false, + "internalType": "address" + }, + { + "name": "updatedBy_", + "type": "address", + "indexed": false, + "internalType": "address" + } + ], + "anonymous": false + }, + { + "type": "event", + "name": "Upgraded", + "inputs": [ + { + "name": "implementation", + "type": "address", + "indexed": true, + "internalType": "address" + } + ], + "anonymous": false + }, + { + "type": "event", + "name": "UpgraderUpdated", + "inputs": [ + { + "name": "upgrader_", + "type": "address", + "indexed": false, + "internalType": "address" + }, + { + "name": "updatedBy_", + "type": "address", + "indexed": false, + "internalType": "address" + } + ], + "anonymous": false + }, + { + "type": "error", + "name": "AddressEmptyCode", + "inputs": [ + { + "name": "target", + "type": "address", + "internalType": "address" + } + ] + }, + { + "type": "error", + "name": "ERC1967InvalidImplementation", + "inputs": [ + { + "name": "implementation", + "type": "address", + "internalType": "address" + } + ] + }, + { + "type": "error", + "name": "ERC1967NonPayable", + "inputs": [] + }, + { + "type": "error", + "name": "FailedInnerCall", + "inputs": [] + }, + { + "type": "error", + "name": "InvalidAddress", + "inputs": [ + { + "name": "account_", + "type": "address", + "internalType": "address" + } + ] + }, + { + "type": "error", + "name": "InvalidInitialization", + "inputs": [] + }, + { + "type": "error", + "name": "NotAuthorizedChanger", + "inputs": [] + }, + { + "type": "error", + "name": "NotAuthorizedUpgrader", + "inputs": [] + }, + { + "type": "error", + "name": "NotFoundationTreasury", + "inputs": [] + }, + { + "type": "error", + "name": "NotGovernor", + "inputs": [] + }, + { + "type": "error", + "name": "NotInitializing", + "inputs": [] + }, + { + "type": "error", + "name": "NotKycApprover", + "inputs": [] + }, + { + "type": "error", + "name": "NotUpgrader", + "inputs": [] + }, + { + "type": "error", + "name": "UUPSUnauthorizedCallContext", + "inputs": [] + }, + { + "type": "error", + "name": "UUPSUnsupportedProxiableUUID", + "inputs": [ + { + "name": "slot", + "type": "bytes32", + "internalType": "bytes32" + } + ] + } + ], + "address": "0x89108Eb73C6388627A2156C586b76e56D902fDfb", + "args": [], + "bytecode": "0x60a06040523060805234801561001457600080fd5b5061001d610022565b6100d4565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805468010000000000000000900460ff16156100725760405163f92ee8a960e01b815260040160405180910390fd5b80546001600160401b03908116146100d15780546001600160401b0319166001600160401b0390811782556040519081527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b50565b6080516115d46100fd60003960008181610c4701528181610c700152610e9401526115d46000f3fe6080604052600436106101425760003560e01c80637e185f57116100c0578063ce7ee5ac11610074578063e053dd6111610059578063e053dd61146103e3578063eb6f7abf14610403578063f8c8765e1461042357600080fd5b8063ce7ee5ac14610386578063d994d6d5146103b357600080fd5b8063ad3cb1cc116100a5578063ad3cb1cc146102e3578063af26974514610339578063b887e63e1461036657600080fd5b80637e185f57146102a35780638c777e82146102c357600080fd5b80633f80fbf7116101175780634f1ef286116100fc5780634f1ef2861461024d57806352d1902d1461026057806362f384ad1461028357600080fd5b80633f80fbf71461020d578063445ac6331461022d57600080fd5b806212851a14610147578062c4e39c146101695780630c340a24146101c057806312811d94146101ed575b600080fd5b34801561015357600080fd5b50610167610162366004611393565b610443565b005b34801561017557600080fd5b506003546101969073ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020015b60405180910390f35b3480156101cc57600080fd5b506000546101969073ffffffffffffffffffffffffffffffffffffffff1681565b3480156101f957600080fd5b50610167610208366004611393565b610458565b34801561021957600080fd5b50610167610228366004611393565b6104ac565b34801561023957600080fd5b50610167610248366004611393565b6104be565b61016761025b3660046113df565b610512565b34801561026c57600080fd5b50610275610531565b6040519081526020016101b7565b34801561028f57600080fd5b5061016761029e366004611393565b610560565b3480156102af57600080fd5b506101676102be366004611393565b610572565b3480156102cf57600080fd5b506101676102de366004611393565b6105b1565b3480156102ef57600080fd5b5061032c6040518060400160405280600581526020017f352e302e3000000000000000000000000000000000000000000000000000000081525081565b6040516101b791906114e5565b34801561034557600080fd5b506004546101969073ffffffffffffffffffffffffffffffffffffffff1681565b34801561037257600080fd5b50610167610381366004611393565b610722565b34801561039257600080fd5b506002546101969073ffffffffffffffffffffffffffffffffffffffff1681565b3480156103bf57600080fd5b506103d36103ce366004611393565b61077c565b60405190151581526020016101b7565b3480156103ef57600080fd5b506101676103fe366004611393565b6107c8565b34801561040f57600080fd5b5061016761041e366004611393565b61081c565b34801561042f57600080fd5b5061016761043e366004611536565b6108c0565b61044c33610572565b61045581610a66565b50565b60005473ffffffffffffffffffffffffffffffffffffffff828116911614610455576040517fee3675d400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6104b533610572565b61045581610b51565b60035473ffffffffffffffffffffffffffffffffffffffff828116911614610455576040517fc01ef51700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61051a610c2f565b61052382610d35565b61052d8282610d3e565b5050565b600061053b610e7c565b507f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc90565b61056933610572565b61045581610eeb565b61057b8161077c565b610455576040517f7746c6d400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60005473ffffffffffffffffffffffffffffffffffffffff163314610602576040517fee3675d400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600180547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff83161790558073ffffffffffffffffffffffffffffffffffffffff1663614619546040518163ffffffff1660e01b8152600401600060405180830381600087803b15801561068a57600080fd5b505af115801561069e573d6000803e3d6000fd5b5050600180547fffffffffffffffffffffffff0000000000000000000000000000000000000000169055506106d09050565b6040805173ffffffffffffffffffffffffffffffffffffffff831681523360208201527f2a8cd1b8f6553d34945708e311b2f74dfcd2b8cc712d12c6fcea24a1ccb4c43991015b60405180910390a150565b60045473ffffffffffffffffffffffffffffffffffffffff163314610773576040517fa417450200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61045581610fc9565b60015460009073ffffffffffffffffffffffffffffffffffffffff838116911614806107c2575060005473ffffffffffffffffffffffffffffffffffffffff8381169116145b92915050565b60025473ffffffffffffffffffffffffffffffffffffffff828116911614610455576040517f2887a65400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60015473ffffffffffffffffffffffffffffffffffffffff828116911614801590610862575060005473ffffffffffffffffffffffffffffffffffffffff828116911614155b8015610889575060045473ffffffffffffffffffffffffffffffffffffffff828116911614155b15610455576040517fe5f11cf600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805468010000000000000000810460ff16159067ffffffffffffffff1660008115801561090b5750825b905060008267ffffffffffffffff1660011480156109285750303b155b905081158015610936575080155b1561096d576040517ff92ee8a900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b84547fffffffffffffffffffffffffffffffffffffffffffffffff000000000000000016600117855583156109ce5784547fffffffffffffffffffffffffffffffffffffffffffffff00ffffffffffffffff16680100000000000000001785555b6109d6611041565b6109df89610eeb565b6109e888610b51565b6109f187610a66565b6109fa86610fc9565b8315610a5b5784547fffffffffffffffffffffffffffffffffffffffffffffff00ffffffffffffffff168555604051600181527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b505050505050505050565b8073ffffffffffffffffffffffffffffffffffffffff8116610ad1576040517f8e4c8aa600000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff821660048201526024015b60405180910390fd5b600380547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff8416908117909155604080519182523360208301527f24d9d91bc040e466fc78b3bb1f93bb81e7410b9bbed45d92b668b52a2ff4c1a991015b60405180910390a15050565b8073ffffffffffffffffffffffffffffffffffffffff8116610bb7576040517f8e4c8aa600000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff82166004820152602401610ac8565b600280547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff8416908117909155604080519182523360208301527fc6681cfb842ccb239555647a438f9ec49bcd12dc4f4d0c5544d3973528b63a459101610b45565b3073ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000161480610cfc57507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16610ce37f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5473ffffffffffffffffffffffffffffffffffffffff1690565b73ffffffffffffffffffffffffffffffffffffffff1614155b15610d33576040517fe07c8dba00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b565b6104553361081c565b8173ffffffffffffffffffffffffffffffffffffffff166352d1902d6040518163ffffffff1660e01b8152600401602060405180830381865afa925050508015610dc3575060408051601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0168201909252610dc091810190611592565b60015b610e11576040517f4c9c8ce300000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff83166004820152602401610ac8565b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc8114610e6d576040517faa1d49a400000000000000000000000000000000000000000000000000000000815260048101829052602401610ac8565b610e778383611049565b505050565b3073ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001614610d33576040517fe07c8dba00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff8116610f51576040517f8e4c8aa600000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff82166004820152602401610ac8565b600080547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff8416908117909155604080519182523360208301527f5af6a85e864342d4f108c43dd574d98480c91f1de0ac2a9f66d826dee49bd9bb9101610b45565b600480547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff8316908117909155604080519182523360208301527f98a54b72a08b0900e0ef7f964fa2f6c3820c0d5dd3e6fb48809acdacd9e5620e9101610717565b610d336110ac565b61105282611113565b60405173ffffffffffffffffffffffffffffffffffffffff8316907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a28051156110a457610e7782826111e2565b61052d611265565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a005468010000000000000000900460ff16610d33576040517fd7e6bcf800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff163b60000361117c576040517f4c9c8ce300000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff82166004820152602401610ac8565b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc80547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff92909216919091179055565b60606000808473ffffffffffffffffffffffffffffffffffffffff168460405161120c91906115ab565b600060405180830381855af49150503d8060008114611247576040519150601f19603f3d011682016040523d82523d6000602084013e61124c565b606091505b509150915061125c85838361129d565b95945050505050565b3415610d33576040517fb398979f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6060826112b2576112ad8261132f565b611328565b81511580156112d6575073ffffffffffffffffffffffffffffffffffffffff84163b155b15611325576040517f9996b31500000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff85166004820152602401610ac8565b50805b9392505050565b80511561133f5780518082602001fd5b6040517f1425ea4200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff8116811461045557600080fd5b6000602082840312156113a557600080fd5b813561132881611371565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080604083850312156113f257600080fd5b82356113fd81611371565b9150602083013567ffffffffffffffff8082111561141a57600080fd5b818501915085601f83011261142e57600080fd5b813581811115611440576114406113b0565b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0908116603f01168101908382118183101715611486576114866113b0565b8160405282815288602084870101111561149f57600080fd5b8260208601602083013760006020848301015280955050505050509250929050565b60005b838110156114dc5781810151838201526020016114c4565b50506000910152565b60208152600082518060208401526115048160408501602087016114c1565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169190910160400192915050565b6000806000806080858703121561154c57600080fd5b843561155781611371565b9350602085013561156781611371565b9250604085013561157781611371565b9150606085013561158781611371565b939692955090935050565b6000602082840312156115a457600080fd5b5051919050565b600082516115bd8184602087016114c1565b919091019291505056fea164736f6c6343000814000a", + "deployedBytecode": "0x6080604052600436106101425760003560e01c80637e185f57116100c0578063ce7ee5ac11610074578063e053dd6111610059578063e053dd61146103e3578063eb6f7abf14610403578063f8c8765e1461042357600080fd5b8063ce7ee5ac14610386578063d994d6d5146103b357600080fd5b8063ad3cb1cc116100a5578063ad3cb1cc146102e3578063af26974514610339578063b887e63e1461036657600080fd5b80637e185f57146102a35780638c777e82146102c357600080fd5b80633f80fbf7116101175780634f1ef286116100fc5780634f1ef2861461024d57806352d1902d1461026057806362f384ad1461028357600080fd5b80633f80fbf71461020d578063445ac6331461022d57600080fd5b806212851a14610147578062c4e39c146101695780630c340a24146101c057806312811d94146101ed575b600080fd5b34801561015357600080fd5b50610167610162366004611393565b610443565b005b34801561017557600080fd5b506003546101969073ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020015b60405180910390f35b3480156101cc57600080fd5b506000546101969073ffffffffffffffffffffffffffffffffffffffff1681565b3480156101f957600080fd5b50610167610208366004611393565b610458565b34801561021957600080fd5b50610167610228366004611393565b6104ac565b34801561023957600080fd5b50610167610248366004611393565b6104be565b61016761025b3660046113df565b610512565b34801561026c57600080fd5b50610275610531565b6040519081526020016101b7565b34801561028f57600080fd5b5061016761029e366004611393565b610560565b3480156102af57600080fd5b506101676102be366004611393565b610572565b3480156102cf57600080fd5b506101676102de366004611393565b6105b1565b3480156102ef57600080fd5b5061032c6040518060400160405280600581526020017f352e302e3000000000000000000000000000000000000000000000000000000081525081565b6040516101b791906114e5565b34801561034557600080fd5b506004546101969073ffffffffffffffffffffffffffffffffffffffff1681565b34801561037257600080fd5b50610167610381366004611393565b610722565b34801561039257600080fd5b506002546101969073ffffffffffffffffffffffffffffffffffffffff1681565b3480156103bf57600080fd5b506103d36103ce366004611393565b61077c565b60405190151581526020016101b7565b3480156103ef57600080fd5b506101676103fe366004611393565b6107c8565b34801561040f57600080fd5b5061016761041e366004611393565b61081c565b34801561042f57600080fd5b5061016761043e366004611536565b6108c0565b61044c33610572565b61045581610a66565b50565b60005473ffffffffffffffffffffffffffffffffffffffff828116911614610455576040517fee3675d400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6104b533610572565b61045581610b51565b60035473ffffffffffffffffffffffffffffffffffffffff828116911614610455576040517fc01ef51700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61051a610c2f565b61052382610d35565b61052d8282610d3e565b5050565b600061053b610e7c565b507f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc90565b61056933610572565b61045581610eeb565b61057b8161077c565b610455576040517f7746c6d400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60005473ffffffffffffffffffffffffffffffffffffffff163314610602576040517fee3675d400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600180547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff83161790558073ffffffffffffffffffffffffffffffffffffffff1663614619546040518163ffffffff1660e01b8152600401600060405180830381600087803b15801561068a57600080fd5b505af115801561069e573d6000803e3d6000fd5b5050600180547fffffffffffffffffffffffff0000000000000000000000000000000000000000169055506106d09050565b6040805173ffffffffffffffffffffffffffffffffffffffff831681523360208201527f2a8cd1b8f6553d34945708e311b2f74dfcd2b8cc712d12c6fcea24a1ccb4c43991015b60405180910390a150565b60045473ffffffffffffffffffffffffffffffffffffffff163314610773576040517fa417450200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61045581610fc9565b60015460009073ffffffffffffffffffffffffffffffffffffffff838116911614806107c2575060005473ffffffffffffffffffffffffffffffffffffffff8381169116145b92915050565b60025473ffffffffffffffffffffffffffffffffffffffff828116911614610455576040517f2887a65400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60015473ffffffffffffffffffffffffffffffffffffffff828116911614801590610862575060005473ffffffffffffffffffffffffffffffffffffffff828116911614155b8015610889575060045473ffffffffffffffffffffffffffffffffffffffff828116911614155b15610455576040517fe5f11cf600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805468010000000000000000810460ff16159067ffffffffffffffff1660008115801561090b5750825b905060008267ffffffffffffffff1660011480156109285750303b155b905081158015610936575080155b1561096d576040517ff92ee8a900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b84547fffffffffffffffffffffffffffffffffffffffffffffffff000000000000000016600117855583156109ce5784547fffffffffffffffffffffffffffffffffffffffffffffff00ffffffffffffffff16680100000000000000001785555b6109d6611041565b6109df89610eeb565b6109e888610b51565b6109f187610a66565b6109fa86610fc9565b8315610a5b5784547fffffffffffffffffffffffffffffffffffffffffffffff00ffffffffffffffff168555604051600181527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b505050505050505050565b8073ffffffffffffffffffffffffffffffffffffffff8116610ad1576040517f8e4c8aa600000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff821660048201526024015b60405180910390fd5b600380547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff8416908117909155604080519182523360208301527f24d9d91bc040e466fc78b3bb1f93bb81e7410b9bbed45d92b668b52a2ff4c1a991015b60405180910390a15050565b8073ffffffffffffffffffffffffffffffffffffffff8116610bb7576040517f8e4c8aa600000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff82166004820152602401610ac8565b600280547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff8416908117909155604080519182523360208301527fc6681cfb842ccb239555647a438f9ec49bcd12dc4f4d0c5544d3973528b63a459101610b45565b3073ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000161480610cfc57507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16610ce37f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5473ffffffffffffffffffffffffffffffffffffffff1690565b73ffffffffffffffffffffffffffffffffffffffff1614155b15610d33576040517fe07c8dba00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b565b6104553361081c565b8173ffffffffffffffffffffffffffffffffffffffff166352d1902d6040518163ffffffff1660e01b8152600401602060405180830381865afa925050508015610dc3575060408051601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0168201909252610dc091810190611592565b60015b610e11576040517f4c9c8ce300000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff83166004820152602401610ac8565b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc8114610e6d576040517faa1d49a400000000000000000000000000000000000000000000000000000000815260048101829052602401610ac8565b610e778383611049565b505050565b3073ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001614610d33576040517fe07c8dba00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff8116610f51576040517f8e4c8aa600000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff82166004820152602401610ac8565b600080547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff8416908117909155604080519182523360208301527f5af6a85e864342d4f108c43dd574d98480c91f1de0ac2a9f66d826dee49bd9bb9101610b45565b600480547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff8316908117909155604080519182523360208301527f98a54b72a08b0900e0ef7f964fa2f6c3820c0d5dd3e6fb48809acdacd9e5620e9101610717565b610d336110ac565b61105282611113565b60405173ffffffffffffffffffffffffffffffffffffffff8316907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a28051156110a457610e7782826111e2565b61052d611265565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a005468010000000000000000900460ff16610d33576040517fd7e6bcf800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff163b60000361117c576040517f4c9c8ce300000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff82166004820152602401610ac8565b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc80547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff92909216919091179055565b60606000808473ffffffffffffffffffffffffffffffffffffffff168460405161120c91906115ab565b600060405180830381855af49150503d8060008114611247576040519150601f19603f3d011682016040523d82523d6000602084013e61124c565b606091505b509150915061125c85838361129d565b95945050505050565b3415610d33576040517fb398979f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6060826112b2576112ad8261132f565b611328565b81511580156112d6575073ffffffffffffffffffffffffffffffffffffffff84163b155b15611325576040517f9996b31500000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff85166004820152602401610ac8565b50805b9392505050565b80511561133f5780518082602001fd5b6040517f1425ea4200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff8116811461045557600080fd5b6000602082840312156113a557600080fd5b813561132881611371565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080604083850312156113f257600080fd5b82356113fd81611371565b9150602083013567ffffffffffffffff8082111561141a57600080fd5b818501915085601f83011261142e57600080fd5b813581811115611440576114406113b0565b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0908116603f01168101908382118183101715611486576114866113b0565b8160405282815288602084870101111561149f57600080fd5b8260208601602083013760006020848301015280955050505050509250929050565b60005b838110156114dc5781810151838201526020016114c4565b50506000910152565b60208152600082518060208401526115048160408501602087016114c1565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169190910160400192915050565b6000806000806080858703121561154c57600080fd5b843561155781611371565b9350602085013561156781611371565b9250604085013561157781611371565b9150606085013561158781611371565b939692955090935050565b6000602082840312156115a457600080fd5b5051919050565b600082516115bd8184602087016114c1565b919091019291505056fea164736f6c6343000814000a", + "devdoc": { + "version": 1, + "kind": "dev", + "details": "Complete documentation is provided in the IGovernanceManagerRootstockCollective interfaceThis contract is upgradeable via the UUPS proxy pattern.", + "methods": { + "constructor": {}, + "executeChange(address)": { + "details": "reverts if is not called by the Governor", + "params": { + "changeContract_": "Address of the contract that will execute the changes" + } + }, + "initialize(address,address,address,address)": { + "details": "Used instead of a constructor for upgradeable contracts.", + "params": { + "foundationTreasury_": "The initial foundation treasury address.", + "governor_": "The initial governor address.", + "kycApprover_": "account responsible of approving Builder's Know you Costumer policies and Legal requirements", + "upgrader_": "The initial upgrader address." + } + }, + "isAuthorizedChanger(address)": { + "details": "Reverts with `NotAuthorizedChanger` if the account is not the authorized changer.", + "params": { + "account_": "The address to be validated as the changer." + } + }, + "proxiableUUID()": { + "details": "Implementation of the ERC1822 {proxiableUUID} function. This returns the storage slot used by the implementation. It is used to validate the implementation's compatibility when performing an upgrade. IMPORTANT: A proxy pointing at a proxiable contract should not be considered proxiable itself, because this risks bricking a proxy that upgrades to it, by delegating to itself until out of gas. Thus it is critical that this function revert if invoked through a proxy. This is guaranteed by the `notDelegated` modifier." + }, + "updateFoundationTreasury(address)": { + "details": "Reverts if caller is not a valid changer.Reverts if the new address is zero.", + "params": { + "foundationTreasury_": "The new foundation treasury address." + } + }, + "updateGovernor(address)": { + "details": "Reverts if caller is not a valid changer.Reverts if the new address is zero.", + "params": { + "governor_": "The new governor address." + } + }, + "updateKYCApprover(address)": { + "details": "Reverts if caller is not a valid changer.Reverts if the new address is zero.", + "params": { + "kycApprover_": "The new address to be set as the KYC approver." + } + }, + "updateUpgrader(address)": { + "details": "Updates the account authorized to upgrade the contractsReverts if caller is the upgrader.allow update to zero address to disable the upgrader role", + "params": { + "upgrader_": "The new upgrader address." + } + }, + "upgradeToAndCall(address,bytes)": { + "details": "Upgrade the implementation of the proxy to `newImplementation`, and subsequently execute the function call encoded in `data`. Calls {_authorizeUpgrade}. Emits an {Upgraded} event." + }, + "validateAuthorizedChanger(address)": { + "details": "Reverts with `NotAuthorizedChanger` if the account is not the authorized changer.", + "params": { + "account_": "The address to be validated as the changer." + } + }, + "validateAuthorizedUpgrader(address)": { + "details": "Reverts with `NotAuthorizedUpgrader` if the account is not the upgrader.", + "params": { + "account_": "The address to be validated." + } + }, + "validateFoundationTreasury(address)": { + "details": "Reverts with `NotFoundationTreasury` if the caller is not the foundation treasury.", + "params": { + "account_": "The address to be validated as the foundation treasury." + } + }, + "validateGovernor(address)": { + "details": "Reverts with `NotGovernor` if the account is not the governor.", + "params": { + "account_": "The address to be validated as the governor." + } + }, + "validateKycApprover(address)": { + "details": "Reverts with `NotKycApprover` if the account is not the KYC approver.", + "params": { + "account_": "The address to be validated as the KYC approver." + } + } + }, + "events": { + "Initialized(uint64)": { + "details": "Triggered when the contract has been initialized or reinitialized." + }, + "Upgraded(address)": { + "details": "Emitted when the implementation is upgraded." + } + }, + "errors": { + "AddressEmptyCode(address)": [ + { + "details": "There's no code at `target` (it is not a contract)." + } + ], + "ERC1967InvalidImplementation(address)": [ + { + "details": "The `implementation` of the proxy is invalid." + } + ], + "ERC1967NonPayable()": [ + { + "details": "An upgrade function sees `msg.value > 0` that may be lost." + } + ], + "FailedInnerCall()": [ + { + "details": "A call to an address target failed. The target may have reverted." + } + ], + "InvalidAddress(address)": [ + { + "params": { + "account_": "The invalid address provided." + } + } + ], + "InvalidInitialization()": [ + { + "details": "The contract is already initialized." + } + ], + "NotInitializing()": [ + { + "details": "The contract is not initializing." + } + ], + "UUPSUnauthorizedCallContext()": [ + { + "details": "The call is from an unauthorized context." + } + ], + "UUPSUnsupportedProxiableUUID(bytes32)": [ + { + "details": "The storage `slot` is unsupported as a UUID." + } + ] + }, + "title": "GovernanceManagerRootstockCollective" + }, + "metadata": "{\"compiler\":{\"version\":\"0.8.20+commit.a1b79de6\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"target\",\"type\":\"address\"}],\"type\":\"error\",\"name\":\"AddressEmptyCode\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"implementation\",\"type\":\"address\"}],\"type\":\"error\",\"name\":\"ERC1967InvalidImplementation\"},{\"inputs\":[],\"type\":\"error\",\"name\":\"ERC1967NonPayable\"},{\"inputs\":[],\"type\":\"error\",\"name\":\"FailedInnerCall\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account_\",\"type\":\"address\"}],\"type\":\"error\",\"name\":\"InvalidAddress\"},{\"inputs\":[],\"type\":\"error\",\"name\":\"InvalidInitialization\"},{\"inputs\":[],\"type\":\"error\",\"name\":\"NotAuthorizedChanger\"},{\"inputs\":[],\"type\":\"error\",\"name\":\"NotAuthorizedUpgrader\"},{\"inputs\":[],\"type\":\"error\",\"name\":\"NotFoundationTreasury\"},{\"inputs\":[],\"type\":\"error\",\"name\":\"NotGovernor\"},{\"inputs\":[],\"type\":\"error\",\"name\":\"NotInitializing\"},{\"inputs\":[],\"type\":\"error\",\"name\":\"NotKycApprover\"},{\"inputs\":[],\"type\":\"error\",\"name\":\"NotUpgrader\"},{\"inputs\":[],\"type\":\"error\",\"name\":\"UUPSUnauthorizedCallContext\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"slot\",\"type\":\"bytes32\"}],\"type\":\"error\",\"name\":\"UUPSUnsupportedProxiableUUID\"},{\"inputs\":[{\"internalType\":\"contract IChangeContractRootstockCollective\",\"name\":\"changeContract_\",\"type\":\"address\",\"indexed\":false},{\"internalType\":\"address\",\"name\":\"executor_\",\"type\":\"address\",\"indexed\":false}],\"type\":\"event\",\"name\":\"ChangeExecuted\",\"anonymous\":false},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"foundationTreasury_\",\"type\":\"address\",\"indexed\":false},{\"internalType\":\"address\",\"name\":\"updatedBy_\",\"type\":\"address\",\"indexed\":false}],\"type\":\"event\",\"name\":\"FoundationTreasuryUpdated\",\"anonymous\":false},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"governor_\",\"type\":\"address\",\"indexed\":false},{\"internalType\":\"address\",\"name\":\"updatedBy_\",\"type\":\"address\",\"indexed\":false}],\"type\":\"event\",\"name\":\"GovernorUpdated\",\"anonymous\":false},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"version\",\"type\":\"uint64\",\"indexed\":false}],\"type\":\"event\",\"name\":\"Initialized\",\"anonymous\":false},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"kycApprover_\",\"type\":\"address\",\"indexed\":false},{\"internalType\":\"address\",\"name\":\"updatedBy_\",\"type\":\"address\",\"indexed\":false}],\"type\":\"event\",\"name\":\"KycApproverUpdated\",\"anonymous\":false},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"implementation\",\"type\":\"address\",\"indexed\":true}],\"type\":\"event\",\"name\":\"Upgraded\",\"anonymous\":false},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"upgrader_\",\"type\":\"address\",\"indexed\":false},{\"internalType\":\"address\",\"name\":\"updatedBy_\",\"type\":\"address\",\"indexed\":false}],\"type\":\"event\",\"name\":\"UpgraderUpdated\",\"anonymous\":false},{\"inputs\":[],\"stateMutability\":\"view\",\"type\":\"function\",\"name\":\"UPGRADE_INTERFACE_VERSION\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}]},{\"inputs\":[{\"internalType\":\"contract IChangeContractRootstockCollective\",\"name\":\"changeContract_\",\"type\":\"address\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\",\"name\":\"executeChange\"},{\"inputs\":[],\"stateMutability\":\"view\",\"type\":\"function\",\"name\":\"foundationTreasury\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}]},{\"inputs\":[],\"stateMutability\":\"view\",\"type\":\"function\",\"name\":\"governor\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}]},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"governor_\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"foundationTreasury_\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"kycApprover_\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"upgrader_\",\"type\":\"address\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\",\"name\":\"initialize\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account_\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\",\"name\":\"isAuthorizedChanger\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}]},{\"inputs\":[],\"stateMutability\":\"view\",\"type\":\"function\",\"name\":\"kycApprover\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}]},{\"inputs\":[],\"stateMutability\":\"view\",\"type\":\"function\",\"name\":\"proxiableUUID\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}]},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"foundationTreasury_\",\"type\":\"address\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\",\"name\":\"updateFoundationTreasury\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"governor_\",\"type\":\"address\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\",\"name\":\"updateGovernor\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"kycApprover_\",\"type\":\"address\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\",\"name\":\"updateKYCApprover\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"upgrader_\",\"type\":\"address\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\",\"name\":\"updateUpgrader\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newImplementation\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"}],\"stateMutability\":\"payable\",\"type\":\"function\",\"name\":\"upgradeToAndCall\"},{\"inputs\":[],\"stateMutability\":\"view\",\"type\":\"function\",\"name\":\"upgrader\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}]},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account_\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\",\"name\":\"validateAuthorizedChanger\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account_\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\",\"name\":\"validateAuthorizedUpgrader\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account_\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\",\"name\":\"validateFoundationTreasury\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account_\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\",\"name\":\"validateGovernor\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account_\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\",\"name\":\"validateKycApprover\"}],\"devdoc\":{\"kind\":\"dev\",\"methods\":{\"constructor\":{\"custom:oz-upgrades-unsafe-allow\":\"constructor\"},\"executeChange(address)\":{\"details\":\"reverts if is not called by the Governor\",\"params\":{\"changeContract_\":\"Address of the contract that will execute the changes\"}},\"initialize(address,address,address,address)\":{\"details\":\"Used instead of a constructor for upgradeable contracts.\",\"params\":{\"foundationTreasury_\":\"The initial foundation treasury address.\",\"governor_\":\"The initial governor address.\",\"kycApprover_\":\"account responsible of approving Builder's Know you Costumer policies and Legal requirements\",\"upgrader_\":\"The initial upgrader address.\"}},\"isAuthorizedChanger(address)\":{\"details\":\"Reverts with `NotAuthorizedChanger` if the account is not the authorized changer.\",\"params\":{\"account_\":\"The address to be validated as the changer.\"}},\"proxiableUUID()\":{\"details\":\"Implementation of the ERC1822 {proxiableUUID} function. This returns the storage slot used by the implementation. It is used to validate the implementation's compatibility when performing an upgrade. IMPORTANT: A proxy pointing at a proxiable contract should not be considered proxiable itself, because this risks bricking a proxy that upgrades to it, by delegating to itself until out of gas. Thus it is critical that this function revert if invoked through a proxy. This is guaranteed by the `notDelegated` modifier.\"},\"updateFoundationTreasury(address)\":{\"details\":\"Reverts if caller is not a valid changer.Reverts if the new address is zero.\",\"params\":{\"foundationTreasury_\":\"The new foundation treasury address.\"}},\"updateGovernor(address)\":{\"details\":\"Reverts if caller is not a valid changer.Reverts if the new address is zero.\",\"params\":{\"governor_\":\"The new governor address.\"}},\"updateKYCApprover(address)\":{\"details\":\"Reverts if caller is not a valid changer.Reverts if the new address is zero.\",\"params\":{\"kycApprover_\":\"The new address to be set as the KYC approver.\"}},\"updateUpgrader(address)\":{\"details\":\"Updates the account authorized to upgrade the contractsReverts if caller is the upgrader.allow update to zero address to disable the upgrader role\",\"params\":{\"upgrader_\":\"The new upgrader address.\"}},\"upgradeToAndCall(address,bytes)\":{\"custom:oz-upgrades-unsafe-allow-reachable\":\"delegatecall\",\"details\":\"Upgrade the implementation of the proxy to `newImplementation`, and subsequently execute the function call encoded in `data`. Calls {_authorizeUpgrade}. Emits an {Upgraded} event.\"},\"validateAuthorizedChanger(address)\":{\"details\":\"Reverts with `NotAuthorizedChanger` if the account is not the authorized changer.\",\"params\":{\"account_\":\"The address to be validated as the changer.\"}},\"validateAuthorizedUpgrader(address)\":{\"details\":\"Reverts with `NotAuthorizedUpgrader` if the account is not the upgrader.\",\"params\":{\"account_\":\"The address to be validated.\"}},\"validateFoundationTreasury(address)\":{\"details\":\"Reverts with `NotFoundationTreasury` if the caller is not the foundation treasury.\",\"params\":{\"account_\":\"The address to be validated as the foundation treasury.\"}},\"validateGovernor(address)\":{\"details\":\"Reverts with `NotGovernor` if the account is not the governor.\",\"params\":{\"account_\":\"The address to be validated as the governor.\"}},\"validateKycApprover(address)\":{\"details\":\"Reverts with `NotKycApprover` if the account is not the KYC approver.\",\"params\":{\"account_\":\"The address to be validated as the KYC approver.\"}}},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{\"executeChange(address)\":{\"notice\":\"Function to be called to execute the changes in changeContract\"},\"foundationTreasury()\":{\"notice\":\"The address of the foundation treasury.\"},\"governor()\":{\"notice\":\"The address of the governor.\"},\"initialize(address,address,address,address)\":{\"notice\":\"Initializes the contract with the initial governor, foundation treasury, and KYC approver.\"},\"isAuthorizedChanger(address)\":{\"notice\":\"Validates if the given account is authorized as a changer\"},\"kycApprover()\":{\"notice\":\"The address of the KYC approver.\"},\"updateFoundationTreasury(address)\":{\"notice\":\"Updates the foundation treasury address\"},\"updateGovernor(address)\":{\"notice\":\"Updates the governor address\"},\"updateKYCApprover(address)\":{\"notice\":\"Updates the KYC approver address\"},\"upgrader()\":{\"notice\":\"The upgrader address with contract upgradeability permissions\"},\"validateAuthorizedChanger(address)\":{\"notice\":\"Validates if the given account is authorized as a changer\"},\"validateAuthorizedUpgrader(address)\":{\"notice\":\"Validates if the given account is authorized to upgrade the contracts.\"},\"validateFoundationTreasury(address)\":{\"notice\":\"Validates if the given account is the foundation treasury.\"},\"validateGovernor(address)\":{\"notice\":\"Validates if the given account is authorized as the governor.\"},\"validateKycApprover(address)\":{\"notice\":\"Validates if the given account is authorized as the KYC approver.\"}},\"version\":1}},\"settings\":{\"remappings\":[\"@openzeppelin/contracts-upgradeable/=node_modules/@openzeppelin/contracts-upgradeable/\",\"@openzeppelin/contracts/=node_modules/@openzeppelin/contracts/\",\"eth-gas-reporter/=node_modules/eth-gas-reporter/\",\"forge-std/=node_modules/forge-std/\",\"hardhat/=node_modules/hardhat/\"],\"optimizer\":{\"enabled\":true,\"runs\":10000},\"metadata\":{\"bytecodeHash\":\"none\"},\"compilationTarget\":{\"src/governance/GovernanceManagerRootstockCollective.sol\":\"GovernanceManagerRootstockCollective\"},\"evmVersion\":\"london\",\"libraries\":{}},\"sources\":{\"node_modules/@openzeppelin/contracts-upgradeable/proxy/utils/Initializable.sol\":{\"keccak256\":\"0x631188737069917d2f909d29ce62c4d48611d326686ba6683e26b72a23bfac0b\",\"urls\":[\"bzz-raw://7a61054ae84cd6c4d04c0c4450ba1d6de41e27e0a2c4f1bcdf58f796b401c609\",\"dweb:/ipfs/QmUvtdp7X1mRVyC3CsHrtPbgoqWaXHp3S1ZR24tpAQYJWM\"],\"license\":\"MIT\"},\"node_modules/@openzeppelin/contracts-upgradeable/proxy/utils/UUPSUpgradeable.sol\":{\"keccak256\":\"0x3f13b947637c4969c0644cab4ef399cdc4b67f101463b8775c5a43b118558e53\",\"urls\":[\"bzz-raw://c6683e6ade6985d394d32baaef5eea0d8b9ff0b3eca86ae413d6cdde114a9930\",\"dweb:/ipfs/QmdBE8T1BTddZxpdECMsb3KiCFyjNWmxcCddYrWFTXmWPj\"],\"license\":\"MIT\"},\"node_modules/@openzeppelin/contracts/interfaces/draft-IERC1822.sol\":{\"keccak256\":\"0x2a1f9944df2015c081d89cd41ba22ffaf10aa6285969f0dc612b235cc448999c\",\"urls\":[\"bzz-raw://ef381843676aec64421200ee85eaa0b1356a35f28b9fc67e746a6bbb832077d9\",\"dweb:/ipfs/QmY8aorMYA2TeTCnu6ejDjzb4rW4t7TCtW4GZ6LoxTFm7v\"],\"license\":\"MIT\"},\"node_modules/@openzeppelin/contracts/proxy/ERC1967/ERC1967Utils.sol\":{\"keccak256\":\"0x06a78f9b3ee3e6d0eb4e4cd635ba49960bea34cac1db8c0a27c75f2319f1fd65\",\"urls\":[\"bzz-raw://547d21aa17f4f3f1a1a7edf7167beff8dd9496a0348d5588f15cc8a4b29d052a\",\"dweb:/ipfs/QmT16JtRQSWNpLo9W23jr6CzaMuTAcQcjJJcdRd8HLJ6cE\"],\"license\":\"MIT\"},\"node_modules/@openzeppelin/contracts/proxy/beacon/IBeacon.sol\":{\"keccak256\":\"0xc59a78b07b44b2cf2e8ab4175fca91e8eca1eee2df7357b8d2a8833e5ea1f64c\",\"urls\":[\"bzz-raw://5aa4f07e65444784c29cd7bfcc2341b34381e4e5b5da9f0c5bd00d7f430e66fa\",\"dweb:/ipfs/QmWRMh4Q9DpaU9GvsiXmDdoNYMyyece9if7hnfLz7uqzWM\"],\"license\":\"MIT\"},\"node_modules/@openzeppelin/contracts/utils/Address.sol\":{\"keccak256\":\"0xaf28a975a78550e45f65e559a3ad6a5ad43b9b8a37366999abd1b7084eb70721\",\"urls\":[\"bzz-raw://b7bd24e224f67f65bfadf85dc2929fa965456bb2415478bd0125471b5ce35245\",\"dweb:/ipfs/QmRaydGr8BTHs1kvaZfsNU69pKzUAGFrvABn1KiRSbE51y\"],\"license\":\"MIT\"},\"node_modules/@openzeppelin/contracts/utils/StorageSlot.sol\":{\"keccak256\":\"0x32ba59b4b7299237c8ba56319110989d7978a039faf754793064e967e5894418\",\"urls\":[\"bzz-raw://1ae50c8b562427df610cc4540c9bf104acca7ef8e2dcae567ae7e52272281e9c\",\"dweb:/ipfs/QmTHiadFCSJUPpRjNegc5SahmeU8bAoY8i9Aq6tVscbcKR\"],\"license\":\"MIT\"},\"src/governance/GovernanceManagerRootstockCollective.sol\":{\"keccak256\":\"0x3901496b522bdf3a30ab046bbfc6e359d414aec1576500e44703e0769bc25c5c\",\"urls\":[\"bzz-raw://caa207da68cc6a09156a5c9cc7a34743b99dece56deabb1e11e17572b8ca42cc\",\"dweb:/ipfs/QmdCPzHWYu895vrD8azHBncGR8WFrAycqwBHpve9k92EDG\"],\"license\":\"MIT\"},\"src/interfaces/IChangeContractRootstockCollective.sol\":{\"keccak256\":\"0x00fb3eb72286348dd06d581c5044cb045dfd3bd24725d05dd9c4b008567dd496\",\"urls\":[\"bzz-raw://7f4a03e06197ae7d6e478097afbbecf936ce7029ca49909a1fee0b4ba1b5b517\",\"dweb:/ipfs/QmfByMJ1SQAmcYkouS5WM3akMmSKU3MCyACpFmQwuFSYe9\"],\"license\":\"MIT\"},\"src/interfaces/IGovernanceManagerRootstockCollective.sol\":{\"keccak256\":\"0x1416991dd129bb36f43cc0854dfa824b5b85838e5c5018566b6cf78f527747e3\",\"urls\":[\"bzz-raw://8652a18ec39d5527fefb829eca619f4cf4bbec3ee4f6231e8888f1549feedd3d\",\"dweb:/ipfs/Qmczi6GipLy9B9TcDMx5UaZZPFBaMT2k49iYzQuLCFgnfS\"],\"license\":\"MIT\"}},\"version\":1}", + "numDeployments": 4, + "receipt": { + "transactionHash": "0xe455b0de9967fe055188d77a0247162107ce03af1e6c695da00c20a4d25efcdb", + "transactionIndex": "0x0", + "blockHash": "0xbd66e786c294e2fb1ae755bdf7cea646ca5c645765b620005a25890b5d52a249", + "blockNumber": "0x5841db", + "from": "0xCB8F8130E289946aec9a17b29819716B1E9e4998", + "to": null, + "cumulativeGasUsed": "0x1375a4", + "gasUsed": "0x1375a4", + "contractAddress": "0x89108Eb73C6388627A2156C586b76e56D902fDfb", + "logs": [ + { + "address": "0x89108Eb73C6388627A2156C586b76e56D902fDfb", + "topics": [ + "0xc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d2" + ], + "data": "0x000000000000000000000000000000000000000000000000ffffffffffffffff", + "blockHash": "0xbd66e786c294e2fb1ae755bdf7cea646ca5c645765b620005a25890b5d52a249", + "blockNumber": "0x5841db", + "transactionHash": "0xe455b0de9967fe055188d77a0247162107ce03af1e6c695da00c20a4d25efcdb", + "transactionIndex": "0x0", + "logIndex": "0x0" + } + ], + "status": "0x1", + "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800000000000000000000000080000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "type": "0x0", + "effectiveGasPrice": "0x3ef1480" + }, + "solcInputHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "storageLayout": { + "storage": [ + { + "astId": 59859, + "contract": "src/governance/GovernanceManagerRootstockCollective.sol:GovernanceManagerRootstockCollective", + "label": "governor", + "offset": 0, + "slot": "0", + "type": "t_address" + }, + { + "astId": 59862, + "contract": "src/governance/GovernanceManagerRootstockCollective.sol:GovernanceManagerRootstockCollective", + "label": "_authorizedChanger", + "offset": 0, + "slot": "1", + "type": "t_address" + }, + { + "astId": 59865, + "contract": "src/governance/GovernanceManagerRootstockCollective.sol:GovernanceManagerRootstockCollective", + "label": "foundationTreasury", + "offset": 0, + "slot": "2", + "type": "t_address" + }, + { + "astId": 59868, + "contract": "src/governance/GovernanceManagerRootstockCollective.sol:GovernanceManagerRootstockCollective", + "label": "kycApprover", + "offset": 0, + "slot": "3", + "type": "t_address" + }, + { + "astId": 59871, + "contract": "src/governance/GovernanceManagerRootstockCollective.sol:GovernanceManagerRootstockCollective", + "label": "upgrader", + "offset": 0, + "slot": "4", + "type": "t_address" + }, + { + "astId": 60188, + "contract": "src/governance/GovernanceManagerRootstockCollective.sol:GovernanceManagerRootstockCollective", + "label": "__gap", + "offset": 0, + "slot": "5", + "type": "t_array(t_uint256)50_storage" + } + ], + "types": { + "t_address": { + "encoding": "inplace", + "label": "address", + "numberOfBytes": "20" + }, + "t_array(t_uint256)50_storage": { + "encoding": "inplace", + "label": "uint256[50]", + "numberOfBytes": "1600", + "base": "t_uint256" + }, + "t_uint256": { + "encoding": "inplace", + "label": "uint256", + "numberOfBytes": "32" + } + } + }, + "transactionHash": "0xe455b0de9967fe055188d77a0247162107ce03af1e6c695da00c20a4d25efcdb", + "userdoc": { + "version": 1, + "kind": "user", + "methods": { + "executeChange(address)": { + "notice": "Function to be called to execute the changes in changeContract" + }, + "foundationTreasury()": { + "notice": "The address of the foundation treasury." + }, + "governor()": { + "notice": "The address of the governor." + }, + "initialize(address,address,address,address)": { + "notice": "Initializes the contract with the initial governor, foundation treasury, and KYC approver." + }, + "isAuthorizedChanger(address)": { + "notice": "Validates if the given account is authorized as a changer" + }, + "kycApprover()": { + "notice": "The address of the KYC approver." + }, + "updateFoundationTreasury(address)": { + "notice": "Updates the foundation treasury address" + }, + "updateGovernor(address)": { + "notice": "Updates the governor address" + }, + "updateKYCApprover(address)": { + "notice": "Updates the KYC approver address" + }, + "upgrader()": { + "notice": "The upgrader address with contract upgradeability permissions" + }, + "validateAuthorizedChanger(address)": { + "notice": "Validates if the given account is authorized as a changer" + }, + "validateAuthorizedUpgrader(address)": { + "notice": "Validates if the given account is authorized to upgrade the contracts." + }, + "validateFoundationTreasury(address)": { + "notice": "Validates if the given account is the foundation treasury." + }, + "validateGovernor(address)": { + "notice": "Validates if the given account is authorized as the governor." + }, + "validateKycApprover(address)": { + "notice": "Validates if the given account is authorized as the KYC approver." + } + }, + "errors": { + "InvalidAddress(address)": [ + { + "notice": "Thrown when an invalid address is provided." + } + ], + "NotAuthorizedChanger()": [ + { + "notice": "Thrown when the caller is not authorized as a changer." + } + ], + "NotAuthorizedUpgrader()": [ + { + "notice": "Thrown when the caller is not authorized to upgrade the contracts" + } + ], + "NotFoundationTreasury()": [ + { + "notice": "Thrown when the caller is not the foundation treasury." + } + ], + "NotGovernor()": [ + { + "notice": "Thrown when the caller is not the governor." + } + ], + "NotKycApprover()": [ + { + "notice": "Thrown when the caller is not the KYC approver." + } + ], + "NotUpgrader()": [ + { + "notice": "Thrown when the caller is not the upgrader." + } + ] + }, + "notice": "This contract manages governance addresses.It also allows the governor to execute contracts that implement the IChangeContractRootstockCollective interface." + } +} \ No newline at end of file diff --git a/deployments/testnet_qa_dapp/GovernanceManagerRootstockCollectiveProxy.json b/deployments/testnet_qa_dapp/GovernanceManagerRootstockCollectiveProxy.json new file mode 100644 index 00000000..3cd73c7f --- /dev/null +++ b/deployments/testnet_qa_dapp/GovernanceManagerRootstockCollectiveProxy.json @@ -0,0 +1,215 @@ +{ + "abi": [ + { + "type": "constructor", + "inputs": [ + { + "name": "implementation", + "type": "address", + "internalType": "address" + }, + { + "name": "_data", + "type": "bytes", + "internalType": "bytes" + } + ], + "stateMutability": "payable" + }, + { + "type": "fallback", + "stateMutability": "payable" + }, + { + "type": "event", + "name": "Upgraded", + "inputs": [ + { + "name": "implementation", + "type": "address", + "indexed": true, + "internalType": "address" + } + ], + "anonymous": false + }, + { + "type": "error", + "name": "AddressEmptyCode", + "inputs": [ + { + "name": "target", + "type": "address", + "internalType": "address" + } + ] + }, + { + "type": "error", + "name": "ERC1967InvalidImplementation", + "inputs": [ + { + "name": "implementation", + "type": "address", + "internalType": "address" + } + ] + }, + { + "type": "error", + "name": "ERC1967NonPayable", + "inputs": [] + }, + { + "type": "error", + "name": "FailedInnerCall", + "inputs": [] + } + ], + "address": "0xEf891bB2A90339fC8E1E250f54C079A46fAABE1b", + "args": [ + "0x89108Eb73C6388627A2156C586b76e56D902fDfb", + "0xf8c8765e000000000000000000000000b1a39b8f57a55d1429324eeb1564122806eb297f00000000000000000000000021fd219c937f7501d867ce660c3bf605c7fa629e0000000000000000000000005e3ede6781f811cb3fe03f9a687bd7fff8dc19e70000000000000000000000005e3ede6781f811cb3fe03f9a687bd7fff8dc19e7" + ], + "bytecode": "0x60806040526040516103ee3803806103ee83398101604081905261002291610268565b61002c8282610033565b5050610352565b61003c82610092565b6040516001600160a01b038316907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a280511561008657610081828261010e565b505050565b61008e610185565b5050565b806001600160a01b03163b6000036100cd57604051634c9c8ce360e01b81526001600160a01b03821660048201526024015b60405180910390fd5b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc80546001600160a01b0319166001600160a01b0392909216919091179055565b6060600080846001600160a01b03168460405161012b9190610336565b600060405180830381855af49150503d8060008114610166576040519150601f19603f3d011682016040523d82523d6000602084013e61016b565b606091505b50909250905061017c8583836101a6565b95945050505050565b34156101a45760405163b398979f60e01b815260040160405180910390fd5b565b6060826101bb576101b682610205565b6101fe565b81511580156101d257506001600160a01b0384163b155b156101fb57604051639996b31560e01b81526001600160a01b03851660048201526024016100c4565b50805b9392505050565b8051156102155780518082602001fd5b604051630a12f52160e11b815260040160405180910390fd5b634e487b7160e01b600052604160045260246000fd5b60005b8381101561025f578181015183820152602001610247565b50506000910152565b6000806040838503121561027b57600080fd5b82516001600160a01b038116811461029257600080fd5b60208401519092506001600160401b03808211156102af57600080fd5b818501915085601f8301126102c357600080fd5b8151818111156102d5576102d561022e565b604051601f8201601f19908116603f011681019083821181831017156102fd576102fd61022e565b8160405282815288602084870101111561031657600080fd5b610327836020830160208801610244565b80955050505050509250929050565b60008251610348818460208701610244565b9190910192915050565b608e806103606000396000f3fe6080604052600a600c565b005b60186014601a565b605e565b565b600060597f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5473ffffffffffffffffffffffffffffffffffffffff1690565b905090565b3660008037600080366000845af43d6000803e808015607c573d6000f35b3d6000fdfea164736f6c6343000814000a", + "deployedBytecode": "0x6080604052600a600c565b005b60186014601a565b605e565b565b600060597f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5473ffffffffffffffffffffffffffffffffffffffff1690565b905090565b3660008037600080366000845af43d6000803e808015607c573d6000f35b3d6000fdfea164736f6c6343000814000a", + "devdoc": { + "version": 1, + "kind": "dev", + "details": "This contract implements an upgradeable proxy. It is upgradeable because calls are delegated to an implementation address that can be changed. This address is stored in storage in the location specified by https://eips.ethereum.org/EIPS/eip-1967[EIP1967], so that it doesn't conflict with the storage layout of the implementation behind the proxy.", + "methods": { + "constructor": { + "details": "Initializes the upgradeable proxy with an initial implementation specified by `implementation`. If `_data` is nonempty, it's used as data in a delegate call to `implementation`. This will typically be an encoded function call, and allows initializing the storage of the proxy like a Solidity constructor. Requirements: - If `data` is empty, `msg.value` must be zero." + } + }, + "events": { + "Upgraded(address)": { + "details": "Emitted when the implementation is upgraded." + } + }, + "errors": { + "AddressEmptyCode(address)": [ + { + "details": "There's no code at `target` (it is not a contract)." + } + ], + "ERC1967InvalidImplementation(address)": [ + { + "details": "The `implementation` of the proxy is invalid." + } + ], + "ERC1967NonPayable()": [ + { + "details": "An upgrade function sees `msg.value > 0` that may be lost." + } + ], + "FailedInnerCall()": [ + { + "details": "A call to an address target failed. The target may have reverted." + } + ] + } + }, + "metadata": "{\"compiler\":{\"version\":\"0.8.20+commit.a1b79de6\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"address\",\"name\":\"implementation\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"_data\",\"type\":\"bytes\"}],\"stateMutability\":\"payable\",\"type\":\"constructor\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"target\",\"type\":\"address\"}],\"type\":\"error\",\"name\":\"AddressEmptyCode\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"implementation\",\"type\":\"address\"}],\"type\":\"error\",\"name\":\"ERC1967InvalidImplementation\"},{\"inputs\":[],\"type\":\"error\",\"name\":\"ERC1967NonPayable\"},{\"inputs\":[],\"type\":\"error\",\"name\":\"FailedInnerCall\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"implementation\",\"type\":\"address\",\"indexed\":true}],\"type\":\"event\",\"name\":\"Upgraded\",\"anonymous\":false},{\"inputs\":[],\"stateMutability\":\"payable\",\"type\":\"fallback\"}],\"devdoc\":{\"kind\":\"dev\",\"methods\":{\"constructor\":{\"details\":\"Initializes the upgradeable proxy with an initial implementation specified by `implementation`. If `_data` is nonempty, it's used as data in a delegate call to `implementation`. This will typically be an encoded function call, and allows initializing the storage of the proxy like a Solidity constructor. Requirements: - If `data` is empty, `msg.value` must be zero.\"}},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"remappings\":[\"@openzeppelin/contracts-upgradeable/=node_modules/@openzeppelin/contracts-upgradeable/\",\"@openzeppelin/contracts/=node_modules/@openzeppelin/contracts/\",\"eth-gas-reporter/=node_modules/eth-gas-reporter/\",\"forge-std/=node_modules/forge-std/\",\"hardhat/=node_modules/hardhat/\"],\"optimizer\":{\"enabled\":true,\"runs\":10000},\"metadata\":{\"bytecodeHash\":\"none\"},\"compilationTarget\":{\"node_modules/@openzeppelin/contracts/proxy/ERC1967/ERC1967Proxy.sol\":\"ERC1967Proxy\"},\"evmVersion\":\"london\",\"libraries\":{}},\"sources\":{\"node_modules/@openzeppelin/contracts/proxy/ERC1967/ERC1967Proxy.sol\":{\"keccak256\":\"0xbfb6695731de677140fbf76c772ab08c4233a122fb51ac28ac120fc49bbbc4ec\",\"urls\":[\"bzz-raw://68f8fded7cc318efa15874b7c6a983fe17a4a955d72d240353a9a4ca1e1b824c\",\"dweb:/ipfs/QmdcmBL9Qo4Tk3Dby4wFYabGyot9JNeLPxpSXZUgUm92BV\"],\"license\":\"MIT\"},\"node_modules/@openzeppelin/contracts/proxy/ERC1967/ERC1967Utils.sol\":{\"keccak256\":\"0x06a78f9b3ee3e6d0eb4e4cd635ba49960bea34cac1db8c0a27c75f2319f1fd65\",\"urls\":[\"bzz-raw://547d21aa17f4f3f1a1a7edf7167beff8dd9496a0348d5588f15cc8a4b29d052a\",\"dweb:/ipfs/QmT16JtRQSWNpLo9W23jr6CzaMuTAcQcjJJcdRd8HLJ6cE\"],\"license\":\"MIT\"},\"node_modules/@openzeppelin/contracts/proxy/Proxy.sol\":{\"keccak256\":\"0xc3f2ec76a3de8ed7a7007c46166f5550c72c7709e3fc7e8bb3111a7191cdedbd\",\"urls\":[\"bzz-raw://e73efb4c2ca655882dc237c6b4f234a9bd36d97159d8fcaa837eb01171f726ac\",\"dweb:/ipfs/QmTNnnv7Gu5fs5G1ZMh7Fexp8N4XUs3XrNAngjcxgiss3e\"],\"license\":\"MIT\"},\"node_modules/@openzeppelin/contracts/proxy/beacon/IBeacon.sol\":{\"keccak256\":\"0xc59a78b07b44b2cf2e8ab4175fca91e8eca1eee2df7357b8d2a8833e5ea1f64c\",\"urls\":[\"bzz-raw://5aa4f07e65444784c29cd7bfcc2341b34381e4e5b5da9f0c5bd00d7f430e66fa\",\"dweb:/ipfs/QmWRMh4Q9DpaU9GvsiXmDdoNYMyyece9if7hnfLz7uqzWM\"],\"license\":\"MIT\"},\"node_modules/@openzeppelin/contracts/utils/Address.sol\":{\"keccak256\":\"0xaf28a975a78550e45f65e559a3ad6a5ad43b9b8a37366999abd1b7084eb70721\",\"urls\":[\"bzz-raw://b7bd24e224f67f65bfadf85dc2929fa965456bb2415478bd0125471b5ce35245\",\"dweb:/ipfs/QmRaydGr8BTHs1kvaZfsNU69pKzUAGFrvABn1KiRSbE51y\"],\"license\":\"MIT\"},\"node_modules/@openzeppelin/contracts/utils/StorageSlot.sol\":{\"keccak256\":\"0x32ba59b4b7299237c8ba56319110989d7978a039faf754793064e967e5894418\",\"urls\":[\"bzz-raw://1ae50c8b562427df610cc4540c9bf104acca7ef8e2dcae567ae7e52272281e9c\",\"dweb:/ipfs/QmTHiadFCSJUPpRjNegc5SahmeU8bAoY8i9Aq6tVscbcKR\"],\"license\":\"MIT\"}},\"version\":1}", + "numDeployments": 4, + "receipt": { + "transactionHash": "0x384818477c925799659eaf3ed279e90bd361ceec1c69a7e4ebc05910b59b4929", + "transactionIndex": "0x1", + "blockHash": "0xbd66e786c294e2fb1ae755bdf7cea646ca5c645765b620005a25890b5d52a249", + "blockNumber": "0x5841db", + "from": "0xCB8F8130E289946aec9a17b29819716B1E9e4998", + "to": null, + "cumulativeGasUsed": "0x173001", + "gasUsed": "0x3ba5d", + "contractAddress": "0xEf891bB2A90339fC8E1E250f54C079A46fAABE1b", + "logs": [ + { + "address": "0xEf891bB2A90339fC8E1E250f54C079A46fAABE1b", + "topics": [ + "0xbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b", + "0x00000000000000000000000089108eb73c6388627a2156c586b76e56d902fdfb" + ], + "data": "0x", + "blockHash": "0xbd66e786c294e2fb1ae755bdf7cea646ca5c645765b620005a25890b5d52a249", + "blockNumber": "0x5841db", + "transactionHash": "0x384818477c925799659eaf3ed279e90bd361ceec1c69a7e4ebc05910b59b4929", + "transactionIndex": "0x1", + "logIndex": "0x0" + }, + { + "address": "0xEf891bB2A90339fC8E1E250f54C079A46fAABE1b", + "topics": [ + "0x5af6a85e864342d4f108c43dd574d98480c91f1de0ac2a9f66d826dee49bd9bb" + ], + "data": "0x000000000000000000000000b1a39b8f57a55d1429324eeb1564122806eb297f000000000000000000000000cb8f8130e289946aec9a17b29819716b1e9e4998", + "blockHash": "0xbd66e786c294e2fb1ae755bdf7cea646ca5c645765b620005a25890b5d52a249", + "blockNumber": "0x5841db", + "transactionHash": "0x384818477c925799659eaf3ed279e90bd361ceec1c69a7e4ebc05910b59b4929", + "transactionIndex": "0x1", + "logIndex": "0x1" + }, + { + "address": "0xEf891bB2A90339fC8E1E250f54C079A46fAABE1b", + "topics": [ + "0xc6681cfb842ccb239555647a438f9ec49bcd12dc4f4d0c5544d3973528b63a45" + ], + "data": "0x00000000000000000000000021fd219c937f7501d867ce660c3bf605c7fa629e000000000000000000000000cb8f8130e289946aec9a17b29819716b1e9e4998", + "blockHash": "0xbd66e786c294e2fb1ae755bdf7cea646ca5c645765b620005a25890b5d52a249", + "blockNumber": "0x5841db", + "transactionHash": "0x384818477c925799659eaf3ed279e90bd361ceec1c69a7e4ebc05910b59b4929", + "transactionIndex": "0x1", + "logIndex": "0x2" + }, + { + "address": "0xEf891bB2A90339fC8E1E250f54C079A46fAABE1b", + "topics": [ + "0x24d9d91bc040e466fc78b3bb1f93bb81e7410b9bbed45d92b668b52a2ff4c1a9" + ], + "data": "0x0000000000000000000000005e3ede6781f811cb3fe03f9a687bd7fff8dc19e7000000000000000000000000cb8f8130e289946aec9a17b29819716b1e9e4998", + "blockHash": "0xbd66e786c294e2fb1ae755bdf7cea646ca5c645765b620005a25890b5d52a249", + "blockNumber": "0x5841db", + "transactionHash": "0x384818477c925799659eaf3ed279e90bd361ceec1c69a7e4ebc05910b59b4929", + "transactionIndex": "0x1", + "logIndex": "0x3" + }, + { + "address": "0xEf891bB2A90339fC8E1E250f54C079A46fAABE1b", + "topics": [ + "0x98a54b72a08b0900e0ef7f964fa2f6c3820c0d5dd3e6fb48809acdacd9e5620e" + ], + "data": "0x0000000000000000000000005e3ede6781f811cb3fe03f9a687bd7fff8dc19e7000000000000000000000000cb8f8130e289946aec9a17b29819716b1e9e4998", + "blockHash": "0xbd66e786c294e2fb1ae755bdf7cea646ca5c645765b620005a25890b5d52a249", + "blockNumber": "0x5841db", + "transactionHash": "0x384818477c925799659eaf3ed279e90bd361ceec1c69a7e4ebc05910b59b4929", + "transactionIndex": "0x1", + "logIndex": "0x4" + }, + { + "address": "0xEf891bB2A90339fC8E1E250f54C079A46fAABE1b", + "topics": [ + "0xc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d2" + ], + "data": "0x0000000000000000000000000000000000000000000000000000000000000001", + "blockHash": "0xbd66e786c294e2fb1ae755bdf7cea646ca5c645765b620005a25890b5d52a249", + "blockNumber": "0x5841db", + "transactionHash": "0x384818477c925799659eaf3ed279e90bd361ceec1c69a7e4ebc05910b59b4929", + "transactionIndex": "0x1", + "logIndex": "0x5" + } + ], + "status": "0x1", + "logsBloom": "0x18000000000000000000000200080000400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800000000000000000000000080000000041000000000000000000000000000000000000000000000000000000000000000000000000000000020800000000000000000000050000000000004000000000001000000004000004000000040000000000000000800000000100000000040000100000100", + "type": "0x0", + "effectiveGasPrice": "0x3ef1480" + }, + "solcInputHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "storageLayout": { + "storage": [], + "types": {} + }, + "transactionHash": "0x384818477c925799659eaf3ed279e90bd361ceec1c69a7e4ebc05910b59b4929", + "userdoc": { + "version": 1, + "kind": "user" + } +} \ No newline at end of file diff --git a/deployments/testnet_qa_dapp/RewardDistributorRootstockCollective.json b/deployments/testnet_qa_dapp/RewardDistributorRootstockCollective.json new file mode 100644 index 00000000..003fc1db --- /dev/null +++ b/deployments/testnet_qa_dapp/RewardDistributorRootstockCollective.json @@ -0,0 +1,578 @@ +{ + "abi": [ + { + "type": "constructor", + "inputs": [], + "stateMutability": "nonpayable" + }, + { + "type": "receive", + "stateMutability": "payable" + }, + { + "type": "function", + "name": "UPGRADE_INTERFACE_VERSION", + "inputs": [], + "outputs": [ + { + "name": "", + "type": "string", + "internalType": "string" + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "backersManager", + "inputs": [], + "outputs": [ + { + "name": "", + "type": "address", + "internalType": "contract BackersManagerRootstockCollective" + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "defaultRewardCoinbaseAmount", + "inputs": [], + "outputs": [ + { + "name": "", + "type": "uint256", + "internalType": "uint256" + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "defaultRewardTokenAmount", + "inputs": [], + "outputs": [ + { + "name": "", + "type": "uint256", + "internalType": "uint256" + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "governanceManager", + "inputs": [], + "outputs": [ + { + "name": "", + "type": "address", + "internalType": "contract IGovernanceManagerRootstockCollective" + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "initialize", + "inputs": [ + { + "name": "governanceManager_", + "type": "address", + "internalType": "contract IGovernanceManagerRootstockCollective" + } + ], + "outputs": [], + "stateMutability": "nonpayable" + }, + { + "type": "function", + "name": "initializeCollectiveRewardsAddresses", + "inputs": [ + { + "name": "backersManager_", + "type": "address", + "internalType": "address" + } + ], + "outputs": [], + "stateMutability": "nonpayable" + }, + { + "type": "function", + "name": "proxiableUUID", + "inputs": [], + "outputs": [ + { + "name": "", + "type": "bytes32", + "internalType": "bytes32" + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "rewardToken", + "inputs": [], + "outputs": [ + { + "name": "", + "type": "address", + "internalType": "contract IERC20" + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "sendRewards", + "inputs": [ + { + "name": "amountERC20_", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "amountCoinbase_", + "type": "uint256", + "internalType": "uint256" + } + ], + "outputs": [], + "stateMutability": "payable" + }, + { + "type": "function", + "name": "sendRewardsAndStartDistribution", + "inputs": [ + { + "name": "amountERC20_", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "amountCoinbase_", + "type": "uint256", + "internalType": "uint256" + } + ], + "outputs": [], + "stateMutability": "payable" + }, + { + "type": "function", + "name": "sendRewardsAndStartDistributionWithDefaultAmount", + "inputs": [], + "outputs": [], + "stateMutability": "payable" + }, + { + "type": "function", + "name": "sendRewardsWithDefaultAmount", + "inputs": [], + "outputs": [], + "stateMutability": "payable" + }, + { + "type": "function", + "name": "setDefaultRewardAmount", + "inputs": [ + { + "name": "tokenAmount_", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "coinbaseAmount_", + "type": "uint256", + "internalType": "uint256" + } + ], + "outputs": [], + "stateMutability": "payable" + }, + { + "type": "function", + "name": "upgradeToAndCall", + "inputs": [ + { + "name": "newImplementation", + "type": "address", + "internalType": "address" + }, + { + "name": "data", + "type": "bytes", + "internalType": "bytes" + } + ], + "outputs": [], + "stateMutability": "payable" + }, + { + "type": "event", + "name": "Initialized", + "inputs": [ + { + "name": "version", + "type": "uint64", + "indexed": false, + "internalType": "uint64" + } + ], + "anonymous": false + }, + { + "type": "event", + "name": "Upgraded", + "inputs": [ + { + "name": "implementation", + "type": "address", + "indexed": true, + "internalType": "address" + } + ], + "anonymous": false + }, + { + "type": "error", + "name": "AddressEmptyCode", + "inputs": [ + { + "name": "target", + "type": "address", + "internalType": "address" + } + ] + }, + { + "type": "error", + "name": "CollectiveRewardsAddressesAlreadyInitialized", + "inputs": [] + }, + { + "type": "error", + "name": "ERC1967InvalidImplementation", + "inputs": [ + { + "name": "implementation", + "type": "address", + "internalType": "address" + } + ] + }, + { + "type": "error", + "name": "ERC1967NonPayable", + "inputs": [] + }, + { + "type": "error", + "name": "FailedInnerCall", + "inputs": [] + }, + { + "type": "error", + "name": "InvalidInitialization", + "inputs": [] + }, + { + "type": "error", + "name": "NotFoundationTreasury", + "inputs": [] + }, + { + "type": "error", + "name": "NotInitializing", + "inputs": [] + }, + { + "type": "error", + "name": "UUPSUnauthorizedCallContext", + "inputs": [] + }, + { + "type": "error", + "name": "UUPSUnsupportedProxiableUUID", + "inputs": [ + { + "name": "slot", + "type": "bytes32", + "internalType": "bytes32" + } + ] + } + ], + "address": "0x1b855110022765bc9a7ACa851DfA461dB58d02Bd", + "args": [], + "bytecode": "0x60a06040523060805234801561001457600080fd5b5061001d610022565b6100d4565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805468010000000000000000900460ff16156100725760405163f92ee8a960e01b815260040160405180910390fd5b80546001600160401b03908116146100d15780546001600160401b0319166001600160401b0390811782556040519081527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b50565b60805161144b6100fd60003960008181610b3f01528181610b680152610e05015261144b6000f3fe6080604052600436106100ec5760003560e01c806352d1902d1161008a578063ad3cb1cc11610059578063ad3cb1cc1461021c578063c4d66de814610272578063d2e6d1c314610292578063f7c618c1146102bf57600080fd5b806352d1902d146101e1578063583ee7ec146101f657806379b45cdd1461020c578063a1cd24341461021457600080fd5b806327fb339f116100c657806327fb339f14610140578063432f9ba31461015357806345fbf0601461017c5780634f1ef286146101ce57600080fd5b806305dc2a80146100f857806319958e301461011a5780631eba00d81461012d57600080fd5b366100f357005b600080fd5b34801561010457600080fd5b50610118610113366004611205565b6102ec565b005b610118610128366004611222565b61043f565b61011861013b366004611222565b610562565b61011861014e366004611222565b6105ee565b34801561015f57600080fd5b5061016960365481565b6040519081526020015b60405180910390f35b34801561018857600080fd5b506034546101a99073ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff9091168152602001610173565b6101186101dc366004611273565b61067d565b3480156101ed57600080fd5b50610169610698565b34801561020257600080fd5b5061016960355481565b6101186106c7565b6101186107ec565b34801561022857600080fd5b506102656040518060400160405280600581526020017f352e302e3000000000000000000000000000000000000000000000000000000081525081565b6040516101739190611379565b34801561027e57600080fd5b5061011861028d366004611205565b61087d565b34801561029e57600080fd5b506000546101a99073ffffffffffffffffffffffffffffffffffffffff1681565b3480156102cb57600080fd5b506033546101a99073ffffffffffffffffffffffffffffffffffffffff1681565b60345473ffffffffffffffffffffffffffffffffffffffff161561033c576040517f308c2e5900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b603480547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff8316908117909155604080517ff7c618c1000000000000000000000000000000000000000000000000000000008152905163f7c618c1916004808201926020929091908290030181865afa1580156103d3573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906103f791906113ca565b603380547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff9290921691909117905550565b6000546040517fe053dd6100000000000000000000000000000000000000000000000000000000815233600482015273ffffffffffffffffffffffffffffffffffffffff9091169063e053dd619060240160006040518083038186803b1580156104a857600080fd5b505afa1580156104bc573d6000803e3d6000fd5b505050506104ca82826109fd565b603460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663d83623dd6040518163ffffffff1660e01b81526004016020604051808303816000875af1158015610539573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061055d91906113e7565b505050565b6000546040517fe053dd6100000000000000000000000000000000000000000000000000000000815233600482015273ffffffffffffffffffffffffffffffffffffffff9091169063e053dd619060240160006040518083038186803b1580156105cb57600080fd5b505afa1580156105df573d6000803e3d6000fd5b50505060359290925560365550565b6000546040517fe053dd6100000000000000000000000000000000000000000000000000000000815233600482015273ffffffffffffffffffffffffffffffffffffffff9091169063e053dd619060240160006040518083038186803b15801561065757600080fd5b505afa15801561066b573d6000803e3d6000fd5b5050505061067982826109fd565b5050565b610685610b27565b61068e82610c2b565b6106798282610caf565b60006106a2610ded565b507f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc90565b6000546040517fe053dd6100000000000000000000000000000000000000000000000000000000815233600482015273ffffffffffffffffffffffffffffffffffffffff9091169063e053dd619060240160006040518083038186803b15801561073057600080fd5b505afa158015610744573d6000803e3d6000fd5b505050506107566035546036546109fd565b603460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663d83623dd6040518163ffffffff1660e01b81526004016020604051808303816000875af11580156107c5573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906107e991906113e7565b50565b6000546040517fe053dd6100000000000000000000000000000000000000000000000000000000815233600482015273ffffffffffffffffffffffffffffffffffffffff9091169063e053dd619060240160006040518083038186803b15801561085557600080fd5b505afa158015610869573d6000803e3d6000fd5b5050505061087b6035546036546109fd565b565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805468010000000000000000810460ff16159067ffffffffffffffff166000811580156108c85750825b905060008267ffffffffffffffff1660011480156108e55750303b155b9050811580156108f3575080155b1561092a576040517ff92ee8a900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b84547fffffffffffffffffffffffffffffffffffffffffffffffff0000000000000000166001178555831561098b5784547fffffffffffffffffffffffffffffffffffffffffffffff00ffffffffffffffff16680100000000000000001785555b61099486610e5c565b83156109f55784547fffffffffffffffffffffffffffffffffffffffffffffff00ffffffffffffffff168555604051600181527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b505050505050565b6033546034546040517f095ea7b300000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff91821660048201526024810185905291169063095ea7b3906044016020604051808303816000875af1158015610a78573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a9c91906113e7565b506034546040517f3c6b16ab0000000000000000000000000000000000000000000000000000000081526004810184905273ffffffffffffffffffffffffffffffffffffffff90911690633c6b16ab9083906024016000604051808303818588803b158015610b0a57600080fd5b505af1158015610b1e573d6000803e3d6000fd5b50505050505050565b3073ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000161480610bf457507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16610bdb7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5473ffffffffffffffffffffffffffffffffffffffff1690565b73ffffffffffffffffffffffffffffffffffffffff1614155b1561087b576040517fe07c8dba00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000546040517feb6f7abf00000000000000000000000000000000000000000000000000000000815233600482015273ffffffffffffffffffffffffffffffffffffffff9091169063eb6f7abf9060240160006040518083038186803b158015610c9457600080fd5b505afa158015610ca8573d6000803e3d6000fd5b5050505050565b8173ffffffffffffffffffffffffffffffffffffffff166352d1902d6040518163ffffffff1660e01b8152600401602060405180830381865afa925050508015610d34575060408051601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0168201909252610d3191810190611409565b60015b610d87576040517f4c9c8ce300000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff831660048201526024015b60405180910390fd5b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc8114610de3576040517faa1d49a400000000000000000000000000000000000000000000000000000000815260048101829052602401610d7e565b61055d8383610eb3565b3073ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000161461087b576040517fe07c8dba00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610e64610f16565b610e6c610f7d565b600080547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff92909216919091179055565b610ebc82610f85565b60405173ffffffffffffffffffffffffffffffffffffffff8316907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a2805115610f0e5761055d8282611054565b6106796110d7565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a005468010000000000000000900460ff1661087b576040517fd7e6bcf800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61087b610f16565b8073ffffffffffffffffffffffffffffffffffffffff163b600003610fee576040517f4c9c8ce300000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff82166004820152602401610d7e565b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc80547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff92909216919091179055565b60606000808473ffffffffffffffffffffffffffffffffffffffff168460405161107e9190611422565b600060405180830381855af49150503d80600081146110b9576040519150601f19603f3d011682016040523d82523d6000602084013e6110be565b606091505b50915091506110ce85838361110f565b95945050505050565b341561087b576040517fb398979f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6060826111245761111f826111a1565b61119a565b8151158015611148575073ffffffffffffffffffffffffffffffffffffffff84163b155b15611197576040517f9996b31500000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff85166004820152602401610d7e565b50805b9392505050565b8051156111b15780518082602001fd5b6040517f1425ea4200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff811681146107e957600080fd5b60006020828403121561121757600080fd5b813561119a816111e3565b6000806040838503121561123557600080fd5b50508035926020909101359150565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6000806040838503121561128657600080fd5b8235611291816111e3565b9150602083013567ffffffffffffffff808211156112ae57600080fd5b818501915085601f8301126112c257600080fd5b8135818111156112d4576112d4611244565b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0908116603f0116810190838211818310171561131a5761131a611244565b8160405282815288602084870101111561133357600080fd5b8260208601602083013760006020848301015280955050505050509250929050565b60005b83811015611370578181015183820152602001611358565b50506000910152565b6020815260008251806020840152611398816040850160208701611355565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169190910160400192915050565b6000602082840312156113dc57600080fd5b815161119a816111e3565b6000602082840312156113f957600080fd5b8151801515811461119a57600080fd5b60006020828403121561141b57600080fd5b5051919050565b60008251611434818460208701611355565b919091019291505056fea164736f6c6343000814000a", + "deployedBytecode": "0x6080604052600436106100ec5760003560e01c806352d1902d1161008a578063ad3cb1cc11610059578063ad3cb1cc1461021c578063c4d66de814610272578063d2e6d1c314610292578063f7c618c1146102bf57600080fd5b806352d1902d146101e1578063583ee7ec146101f657806379b45cdd1461020c578063a1cd24341461021457600080fd5b806327fb339f116100c657806327fb339f14610140578063432f9ba31461015357806345fbf0601461017c5780634f1ef286146101ce57600080fd5b806305dc2a80146100f857806319958e301461011a5780631eba00d81461012d57600080fd5b366100f357005b600080fd5b34801561010457600080fd5b50610118610113366004611205565b6102ec565b005b610118610128366004611222565b61043f565b61011861013b366004611222565b610562565b61011861014e366004611222565b6105ee565b34801561015f57600080fd5b5061016960365481565b6040519081526020015b60405180910390f35b34801561018857600080fd5b506034546101a99073ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff9091168152602001610173565b6101186101dc366004611273565b61067d565b3480156101ed57600080fd5b50610169610698565b34801561020257600080fd5b5061016960355481565b6101186106c7565b6101186107ec565b34801561022857600080fd5b506102656040518060400160405280600581526020017f352e302e3000000000000000000000000000000000000000000000000000000081525081565b6040516101739190611379565b34801561027e57600080fd5b5061011861028d366004611205565b61087d565b34801561029e57600080fd5b506000546101a99073ffffffffffffffffffffffffffffffffffffffff1681565b3480156102cb57600080fd5b506033546101a99073ffffffffffffffffffffffffffffffffffffffff1681565b60345473ffffffffffffffffffffffffffffffffffffffff161561033c576040517f308c2e5900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b603480547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff8316908117909155604080517ff7c618c1000000000000000000000000000000000000000000000000000000008152905163f7c618c1916004808201926020929091908290030181865afa1580156103d3573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906103f791906113ca565b603380547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff9290921691909117905550565b6000546040517fe053dd6100000000000000000000000000000000000000000000000000000000815233600482015273ffffffffffffffffffffffffffffffffffffffff9091169063e053dd619060240160006040518083038186803b1580156104a857600080fd5b505afa1580156104bc573d6000803e3d6000fd5b505050506104ca82826109fd565b603460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663d83623dd6040518163ffffffff1660e01b81526004016020604051808303816000875af1158015610539573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061055d91906113e7565b505050565b6000546040517fe053dd6100000000000000000000000000000000000000000000000000000000815233600482015273ffffffffffffffffffffffffffffffffffffffff9091169063e053dd619060240160006040518083038186803b1580156105cb57600080fd5b505afa1580156105df573d6000803e3d6000fd5b50505060359290925560365550565b6000546040517fe053dd6100000000000000000000000000000000000000000000000000000000815233600482015273ffffffffffffffffffffffffffffffffffffffff9091169063e053dd619060240160006040518083038186803b15801561065757600080fd5b505afa15801561066b573d6000803e3d6000fd5b5050505061067982826109fd565b5050565b610685610b27565b61068e82610c2b565b6106798282610caf565b60006106a2610ded565b507f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc90565b6000546040517fe053dd6100000000000000000000000000000000000000000000000000000000815233600482015273ffffffffffffffffffffffffffffffffffffffff9091169063e053dd619060240160006040518083038186803b15801561073057600080fd5b505afa158015610744573d6000803e3d6000fd5b505050506107566035546036546109fd565b603460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663d83623dd6040518163ffffffff1660e01b81526004016020604051808303816000875af11580156107c5573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906107e991906113e7565b50565b6000546040517fe053dd6100000000000000000000000000000000000000000000000000000000815233600482015273ffffffffffffffffffffffffffffffffffffffff9091169063e053dd619060240160006040518083038186803b15801561085557600080fd5b505afa158015610869573d6000803e3d6000fd5b5050505061087b6035546036546109fd565b565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805468010000000000000000810460ff16159067ffffffffffffffff166000811580156108c85750825b905060008267ffffffffffffffff1660011480156108e55750303b155b9050811580156108f3575080155b1561092a576040517ff92ee8a900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b84547fffffffffffffffffffffffffffffffffffffffffffffffff0000000000000000166001178555831561098b5784547fffffffffffffffffffffffffffffffffffffffffffffff00ffffffffffffffff16680100000000000000001785555b61099486610e5c565b83156109f55784547fffffffffffffffffffffffffffffffffffffffffffffff00ffffffffffffffff168555604051600181527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b505050505050565b6033546034546040517f095ea7b300000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff91821660048201526024810185905291169063095ea7b3906044016020604051808303816000875af1158015610a78573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a9c91906113e7565b506034546040517f3c6b16ab0000000000000000000000000000000000000000000000000000000081526004810184905273ffffffffffffffffffffffffffffffffffffffff90911690633c6b16ab9083906024016000604051808303818588803b158015610b0a57600080fd5b505af1158015610b1e573d6000803e3d6000fd5b50505050505050565b3073ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000161480610bf457507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16610bdb7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5473ffffffffffffffffffffffffffffffffffffffff1690565b73ffffffffffffffffffffffffffffffffffffffff1614155b1561087b576040517fe07c8dba00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000546040517feb6f7abf00000000000000000000000000000000000000000000000000000000815233600482015273ffffffffffffffffffffffffffffffffffffffff9091169063eb6f7abf9060240160006040518083038186803b158015610c9457600080fd5b505afa158015610ca8573d6000803e3d6000fd5b5050505050565b8173ffffffffffffffffffffffffffffffffffffffff166352d1902d6040518163ffffffff1660e01b8152600401602060405180830381865afa925050508015610d34575060408051601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0168201909252610d3191810190611409565b60015b610d87576040517f4c9c8ce300000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff831660048201526024015b60405180910390fd5b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc8114610de3576040517faa1d49a400000000000000000000000000000000000000000000000000000000815260048101829052602401610d7e565b61055d8383610eb3565b3073ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000161461087b576040517fe07c8dba00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610e64610f16565b610e6c610f7d565b600080547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff92909216919091179055565b610ebc82610f85565b60405173ffffffffffffffffffffffffffffffffffffffff8316907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a2805115610f0e5761055d8282611054565b6106796110d7565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a005468010000000000000000900460ff1661087b576040517fd7e6bcf800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61087b610f16565b8073ffffffffffffffffffffffffffffffffffffffff163b600003610fee576040517f4c9c8ce300000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff82166004820152602401610d7e565b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc80547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff92909216919091179055565b60606000808473ffffffffffffffffffffffffffffffffffffffff168460405161107e9190611422565b600060405180830381855af49150503d80600081146110b9576040519150601f19603f3d011682016040523d82523d6000602084013e6110be565b606091505b50915091506110ce85838361110f565b95945050505050565b341561087b576040517fb398979f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6060826111245761111f826111a1565b61119a565b8151158015611148575073ffffffffffffffffffffffffffffffffffffffff84163b155b15611197576040517f9996b31500000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff85166004820152602401610d7e565b50805b9392505050565b8051156111b15780518082602001fd5b6040517f1425ea4200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff811681146107e957600080fd5b60006020828403121561121757600080fd5b813561119a816111e3565b6000806040838503121561123557600080fd5b50508035926020909101359150565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6000806040838503121561128657600080fd5b8235611291816111e3565b9150602083013567ffffffffffffffff808211156112ae57600080fd5b818501915085601f8301126112c257600080fd5b8135818111156112d4576112d4611244565b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0908116603f0116810190838211818310171561131a5761131a611244565b8160405282815288602084870101111561133357600080fd5b8260208601602083013760006020848301015280955050505050509250929050565b60005b83811015611370578181015183820152602001611358565b50506000910152565b6020815260008251806020840152611398816040850160208701611355565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169190910160400192915050565b6000602082840312156113dc57600080fd5b815161119a816111e3565b6000602082840312156113f957600080fd5b8151801515811461119a57600080fd5b60006020828403121561141b57600080fd5b5051919050565b60008251611434818460208701611355565b919091019291505056fea164736f6c6343000814000a", + "devdoc": { + "version": 1, + "kind": "dev", + "methods": { + "constructor": {}, + "initialize(address)": { + "details": "initializeCollectiveRewardsAddresses() must be called ASAP after this initialization", + "params": { + "governanceManager_": "contract with permissioned roles" + } + }, + "initializeCollectiveRewardsAddresses(address)": { + "details": "used to solve circular dependency, backersManager is initialized with this contract address it must be called ASAP after the initialize.", + "params": { + "backersManager_": "BackersManagerRootstockCollective contract address" + } + }, + "proxiableUUID()": { + "details": "Implementation of the ERC1822 {proxiableUUID} function. This returns the storage slot used by the implementation. It is used to validate the implementation's compatibility when performing an upgrade. IMPORTANT: A proxy pointing at a proxiable contract should not be considered proxiable itself, because this risks bricking a proxy that upgrades to it, by delegating to itself until out of gas. Thus it is critical that this function revert if invoked through a proxy. This is guaranteed by the `notDelegated` modifier." + }, + "sendRewards(uint256,uint256)": { + "details": "reverts if is not called by foundation treasury address reverts if rewards balance is insufficient", + "params": { + "amountCoinbase_": "amount of Coinbase reward token to send", + "amountERC20_": "amount of ERC20 reward token to send" + } + }, + "sendRewardsAndStartDistribution(uint256,uint256)": { + "details": "reverts if is not called by foundation treasury address reverts if rewards balance is insufficient reverts if is not in the distribution window", + "params": { + "amountCoinbase_": "amount of Coinbase reward token to send", + "amountERC20_": "amount of ERC20 reward token to send" + } + }, + "sendRewardsAndStartDistributionWithDefaultAmount()": { + "details": "reverts if is not called by foundation treasury address" + }, + "sendRewardsWithDefaultAmount()": { + "details": "reverts if is not called by foundation treasury address" + }, + "setDefaultRewardAmount(uint256,uint256)": { + "details": "reverts if is not called by foundation treasury address", + "params": { + "coinbaseAmount_": "default amount of Coinbase reward token to send", + "tokenAmount_": "default amount of ERC20 reward token to send" + } + }, + "upgradeToAndCall(address,bytes)": { + "details": "Upgrade the implementation of the proxy to `newImplementation`, and subsequently execute the function call encoded in `data`. Calls {_authorizeUpgrade}. Emits an {Upgraded} event." + } + }, + "events": { + "Initialized(uint64)": { + "details": "Triggered when the contract has been initialized or reinitialized." + }, + "Upgraded(address)": { + "details": "Emitted when the implementation is upgraded." + } + }, + "errors": { + "AddressEmptyCode(address)": [ + { + "details": "There's no code at `target` (it is not a contract)." + } + ], + "ERC1967InvalidImplementation(address)": [ + { + "details": "The `implementation` of the proxy is invalid." + } + ], + "ERC1967NonPayable()": [ + { + "details": "An upgrade function sees `msg.value > 0` that may be lost." + } + ], + "FailedInnerCall()": [ + { + "details": "A call to an address target failed. The target may have reverted." + } + ], + "InvalidInitialization()": [ + { + "details": "The contract is already initialized." + } + ], + "NotInitializing()": [ + { + "details": "The contract is not initializing." + } + ], + "UUPSUnauthorizedCallContext()": [ + { + "details": "The call is from an unauthorized context." + } + ], + "UUPSUnsupportedProxiableUUID(bytes32)": [ + { + "details": "The storage `slot` is unsupported as a UUID." + } + ] + }, + "title": "RewardDistributorRootstockCollective" + }, + "metadata": "{\"compiler\":{\"version\":\"0.8.20+commit.a1b79de6\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"target\",\"type\":\"address\"}],\"type\":\"error\",\"name\":\"AddressEmptyCode\"},{\"inputs\":[],\"type\":\"error\",\"name\":\"CollectiveRewardsAddressesAlreadyInitialized\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"implementation\",\"type\":\"address\"}],\"type\":\"error\",\"name\":\"ERC1967InvalidImplementation\"},{\"inputs\":[],\"type\":\"error\",\"name\":\"ERC1967NonPayable\"},{\"inputs\":[],\"type\":\"error\",\"name\":\"FailedInnerCall\"},{\"inputs\":[],\"type\":\"error\",\"name\":\"InvalidInitialization\"},{\"inputs\":[],\"type\":\"error\",\"name\":\"NotFoundationTreasury\"},{\"inputs\":[],\"type\":\"error\",\"name\":\"NotInitializing\"},{\"inputs\":[],\"type\":\"error\",\"name\":\"UUPSUnauthorizedCallContext\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"slot\",\"type\":\"bytes32\"}],\"type\":\"error\",\"name\":\"UUPSUnsupportedProxiableUUID\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"version\",\"type\":\"uint64\",\"indexed\":false}],\"type\":\"event\",\"name\":\"Initialized\",\"anonymous\":false},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"implementation\",\"type\":\"address\",\"indexed\":true}],\"type\":\"event\",\"name\":\"Upgraded\",\"anonymous\":false},{\"inputs\":[],\"stateMutability\":\"view\",\"type\":\"function\",\"name\":\"UPGRADE_INTERFACE_VERSION\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}]},{\"inputs\":[],\"stateMutability\":\"view\",\"type\":\"function\",\"name\":\"backersManager\",\"outputs\":[{\"internalType\":\"contract BackersManagerRootstockCollective\",\"name\":\"\",\"type\":\"address\"}]},{\"inputs\":[],\"stateMutability\":\"view\",\"type\":\"function\",\"name\":\"defaultRewardCoinbaseAmount\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}]},{\"inputs\":[],\"stateMutability\":\"view\",\"type\":\"function\",\"name\":\"defaultRewardTokenAmount\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}]},{\"inputs\":[],\"stateMutability\":\"view\",\"type\":\"function\",\"name\":\"governanceManager\",\"outputs\":[{\"internalType\":\"contract IGovernanceManagerRootstockCollective\",\"name\":\"\",\"type\":\"address\"}]},{\"inputs\":[{\"internalType\":\"contract IGovernanceManagerRootstockCollective\",\"name\":\"governanceManager_\",\"type\":\"address\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\",\"name\":\"initialize\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"backersManager_\",\"type\":\"address\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\",\"name\":\"initializeCollectiveRewardsAddresses\"},{\"inputs\":[],\"stateMutability\":\"view\",\"type\":\"function\",\"name\":\"proxiableUUID\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}]},{\"inputs\":[],\"stateMutability\":\"view\",\"type\":\"function\",\"name\":\"rewardToken\",\"outputs\":[{\"internalType\":\"contract IERC20\",\"name\":\"\",\"type\":\"address\"}]},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"amountERC20_\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"amountCoinbase_\",\"type\":\"uint256\"}],\"stateMutability\":\"payable\",\"type\":\"function\",\"name\":\"sendRewards\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"amountERC20_\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"amountCoinbase_\",\"type\":\"uint256\"}],\"stateMutability\":\"payable\",\"type\":\"function\",\"name\":\"sendRewardsAndStartDistribution\"},{\"inputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\",\"name\":\"sendRewardsAndStartDistributionWithDefaultAmount\"},{\"inputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\",\"name\":\"sendRewardsWithDefaultAmount\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"tokenAmount_\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"coinbaseAmount_\",\"type\":\"uint256\"}],\"stateMutability\":\"payable\",\"type\":\"function\",\"name\":\"setDefaultRewardAmount\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newImplementation\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"}],\"stateMutability\":\"payable\",\"type\":\"function\",\"name\":\"upgradeToAndCall\"},{\"inputs\":[],\"stateMutability\":\"payable\",\"type\":\"receive\"}],\"devdoc\":{\"kind\":\"dev\",\"methods\":{\"constructor\":{\"custom:oz-upgrades-unsafe-allow\":\"constructor\"},\"initialize(address)\":{\"details\":\"initializeCollectiveRewardsAddresses() must be called ASAP after this initialization\",\"params\":{\"governanceManager_\":\"contract with permissioned roles\"}},\"initializeCollectiveRewardsAddresses(address)\":{\"details\":\"used to solve circular dependency, backersManager is initialized with this contract address it must be called ASAP after the initialize.\",\"params\":{\"backersManager_\":\"BackersManagerRootstockCollective contract address\"}},\"proxiableUUID()\":{\"details\":\"Implementation of the ERC1822 {proxiableUUID} function. This returns the storage slot used by the implementation. It is used to validate the implementation's compatibility when performing an upgrade. IMPORTANT: A proxy pointing at a proxiable contract should not be considered proxiable itself, because this risks bricking a proxy that upgrades to it, by delegating to itself until out of gas. Thus it is critical that this function revert if invoked through a proxy. This is guaranteed by the `notDelegated` modifier.\"},\"sendRewards(uint256,uint256)\":{\"details\":\"reverts if is not called by foundation treasury address reverts if rewards balance is insufficient\",\"params\":{\"amountCoinbase_\":\"amount of Coinbase reward token to send\",\"amountERC20_\":\"amount of ERC20 reward token to send\"}},\"sendRewardsAndStartDistribution(uint256,uint256)\":{\"details\":\"reverts if is not called by foundation treasury address reverts if rewards balance is insufficient reverts if is not in the distribution window\",\"params\":{\"amountCoinbase_\":\"amount of Coinbase reward token to send\",\"amountERC20_\":\"amount of ERC20 reward token to send\"}},\"sendRewardsAndStartDistributionWithDefaultAmount()\":{\"details\":\"reverts if is not called by foundation treasury address\"},\"sendRewardsWithDefaultAmount()\":{\"details\":\"reverts if is not called by foundation treasury address\"},\"setDefaultRewardAmount(uint256,uint256)\":{\"details\":\"reverts if is not called by foundation treasury address\",\"params\":{\"coinbaseAmount_\":\"default amount of Coinbase reward token to send\",\"tokenAmount_\":\"default amount of ERC20 reward token to send\"}},\"upgradeToAndCall(address,bytes)\":{\"custom:oz-upgrades-unsafe-allow-reachable\":\"delegatecall\",\"details\":\"Upgrade the implementation of the proxy to `newImplementation`, and subsequently execute the function call encoded in `data`. Calls {_authorizeUpgrade}. Emits an {Upgraded} event.\"}},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{\"backersManager()\":{\"notice\":\"BackersManagerRootstockCollective contract address\"},\"defaultRewardCoinbaseAmount()\":{\"notice\":\"default reward coinbase amount\"},\"defaultRewardTokenAmount()\":{\"notice\":\"default reward token amount\"},\"initialize(address)\":{\"notice\":\"contract initializer\"},\"initializeCollectiveRewardsAddresses(address)\":{\"notice\":\"CollectiveRewards addresses initializer\"},\"rewardToken()\":{\"notice\":\"address of the token rewarded to builder and backers\"},\"sendRewards(uint256,uint256)\":{\"notice\":\"sends rewards to backersManager contract to be distributed to the gauges\"},\"sendRewardsAndStartDistribution(uint256,uint256)\":{\"notice\":\"sends rewards to backersManager contract and starts the distribution to the gauges\"},\"sendRewardsAndStartDistributionWithDefaultAmount()\":{\"notice\":\"sends rewards to backersManager contract with default amounts and starts the distribution\"},\"sendRewardsWithDefaultAmount()\":{\"notice\":\"sends rewards to backersManager contract with default amounts\"},\"setDefaultRewardAmount(uint256,uint256)\":{\"notice\":\"sets the default reward amounts\"}},\"version\":1}},\"settings\":{\"remappings\":[\"@openzeppelin/contracts-upgradeable/=node_modules/@openzeppelin/contracts-upgradeable/\",\"@openzeppelin/contracts/=node_modules/@openzeppelin/contracts/\",\"eth-gas-reporter/=node_modules/eth-gas-reporter/\",\"forge-std/=node_modules/forge-std/\",\"hardhat/=node_modules/hardhat/\"],\"optimizer\":{\"enabled\":true,\"runs\":10000},\"metadata\":{\"bytecodeHash\":\"none\"},\"compilationTarget\":{\"src/RewardDistributorRootstockCollective.sol\":\"RewardDistributorRootstockCollective\"},\"evmVersion\":\"london\",\"libraries\":{}},\"sources\":{\"node_modules/@openzeppelin/contracts-upgradeable/proxy/utils/Initializable.sol\":{\"keccak256\":\"0x631188737069917d2f909d29ce62c4d48611d326686ba6683e26b72a23bfac0b\",\"urls\":[\"bzz-raw://7a61054ae84cd6c4d04c0c4450ba1d6de41e27e0a2c4f1bcdf58f796b401c609\",\"dweb:/ipfs/QmUvtdp7X1mRVyC3CsHrtPbgoqWaXHp3S1ZR24tpAQYJWM\"],\"license\":\"MIT\"},\"node_modules/@openzeppelin/contracts-upgradeable/proxy/utils/UUPSUpgradeable.sol\":{\"keccak256\":\"0x3f13b947637c4969c0644cab4ef399cdc4b67f101463b8775c5a43b118558e53\",\"urls\":[\"bzz-raw://c6683e6ade6985d394d32baaef5eea0d8b9ff0b3eca86ae413d6cdde114a9930\",\"dweb:/ipfs/QmdBE8T1BTddZxpdECMsb3KiCFyjNWmxcCddYrWFTXmWPj\"],\"license\":\"MIT\"},\"node_modules/@openzeppelin/contracts-upgradeable/utils/ReentrancyGuardUpgradeable.sol\":{\"keccak256\":\"0xb44e086e941292cdc7f440de51478493894ef0b1aeccb0c4047445919f667f74\",\"urls\":[\"bzz-raw://942dad22fbdc1669f025540ba63aa3ccfad5f8458fc5d4525b31ebf272e7af45\",\"dweb:/ipfs/Qmdo4X2M82aM3AMoW2kf2jhYkSCyC4T1pHNd6obdsDFnAB\"],\"license\":\"MIT\"},\"node_modules/@openzeppelin/contracts-upgradeable/utils/introspection/ERC165Upgradeable.sol\":{\"keccak256\":\"0xdaba3f7c42c55b2896353f32bd27d4d5f8bae741b3b05d4c53f67abc4dc47ce8\",\"urls\":[\"bzz-raw://1fa2e61141c602510bcd2cd936ed9561922ac8772a9b9c9a9db091a74e354a45\",\"dweb:/ipfs/QmcHQDDoEBwJmwUbzoVkytvJsBx3KVHYFFnDkvRGWh9Wmh\"],\"license\":\"MIT\"},\"node_modules/@openzeppelin/contracts/interfaces/draft-IERC1822.sol\":{\"keccak256\":\"0x2a1f9944df2015c081d89cd41ba22ffaf10aa6285969f0dc612b235cc448999c\",\"urls\":[\"bzz-raw://ef381843676aec64421200ee85eaa0b1356a35f28b9fc67e746a6bbb832077d9\",\"dweb:/ipfs/QmY8aorMYA2TeTCnu6ejDjzb4rW4t7TCtW4GZ6LoxTFm7v\"],\"license\":\"MIT\"},\"node_modules/@openzeppelin/contracts/proxy/ERC1967/ERC1967Utils.sol\":{\"keccak256\":\"0x06a78f9b3ee3e6d0eb4e4cd635ba49960bea34cac1db8c0a27c75f2319f1fd65\",\"urls\":[\"bzz-raw://547d21aa17f4f3f1a1a7edf7167beff8dd9496a0348d5588f15cc8a4b29d052a\",\"dweb:/ipfs/QmT16JtRQSWNpLo9W23jr6CzaMuTAcQcjJJcdRd8HLJ6cE\"],\"license\":\"MIT\"},\"node_modules/@openzeppelin/contracts/proxy/Proxy.sol\":{\"keccak256\":\"0xc3f2ec76a3de8ed7a7007c46166f5550c72c7709e3fc7e8bb3111a7191cdedbd\",\"urls\":[\"bzz-raw://e73efb4c2ca655882dc237c6b4f234a9bd36d97159d8fcaa837eb01171f726ac\",\"dweb:/ipfs/QmTNnnv7Gu5fs5G1ZMh7Fexp8N4XUs3XrNAngjcxgiss3e\"],\"license\":\"MIT\"},\"node_modules/@openzeppelin/contracts/proxy/beacon/BeaconProxy.sol\":{\"keccak256\":\"0x387ebdcb365b8e620f26645d2b34a161cd39eedfb0219e8baff55630c5ae113c\",\"urls\":[\"bzz-raw://744ea187c195e31cb9201e63ca291fca9e623747f54f0ba390b366a6213b8964\",\"dweb:/ipfs/Qmc547qfV4sz65DC9B4okx1HvgxwUzJR7zTfKKbTzL3UQT\"],\"license\":\"MIT\"},\"node_modules/@openzeppelin/contracts/proxy/beacon/IBeacon.sol\":{\"keccak256\":\"0xc59a78b07b44b2cf2e8ab4175fca91e8eca1eee2df7357b8d2a8833e5ea1f64c\",\"urls\":[\"bzz-raw://5aa4f07e65444784c29cd7bfcc2341b34381e4e5b5da9f0c5bd00d7f430e66fa\",\"dweb:/ipfs/QmWRMh4Q9DpaU9GvsiXmDdoNYMyyece9if7hnfLz7uqzWM\"],\"license\":\"MIT\"},\"node_modules/@openzeppelin/contracts/token/ERC20/IERC20.sol\":{\"keccak256\":\"0xc6a8ff0ea489379b61faa647490411b80102578440ab9d84e9a957cc12164e70\",\"urls\":[\"bzz-raw://0ea104e577e63faea3b69c415637e99e755dcbf64c5833d7140c35a714d6d90c\",\"dweb:/ipfs/Qmau6x4Ns9XdyynRCNNp3RhLqijJjFm7z5fyZazfYFGYdq\"],\"license\":\"MIT\"},\"node_modules/@openzeppelin/contracts/token/ERC20/extensions/IERC20Permit.sol\":{\"keccak256\":\"0x6008dabfe393240d73d7dd7688033f72740d570aa422254d29a7dce8568f3aff\",\"urls\":[\"bzz-raw://f5196ec75139918c6c7bb4251b36395e668f1fa6d206beba7e7520e74913940d\",\"dweb:/ipfs/QmSyqjksXxmm2mCG6qRd1yuwLykypkSVBbnBnGqJRcuJMi\"],\"license\":\"MIT\"},\"node_modules/@openzeppelin/contracts/token/ERC20/utils/SafeERC20.sol\":{\"keccak256\":\"0x37bb49513c49c87c4642a891b13b63571bc87013dde806617aa1efb54605f386\",\"urls\":[\"bzz-raw://b3036b3a83b7c48f96641f2a9002b9f2dcb6a5958dd670894ada21ae8229b3d0\",\"dweb:/ipfs/QmUNfSBdoVtjhETaUJCYcaC7pTMgbhht926tJ2uXJbiVd3\"],\"license\":\"MIT\"},\"node_modules/@openzeppelin/contracts/utils/Address.sol\":{\"keccak256\":\"0xaf28a975a78550e45f65e559a3ad6a5ad43b9b8a37366999abd1b7084eb70721\",\"urls\":[\"bzz-raw://b7bd24e224f67f65bfadf85dc2929fa965456bb2415478bd0125471b5ce35245\",\"dweb:/ipfs/QmRaydGr8BTHs1kvaZfsNU69pKzUAGFrvABn1KiRSbE51y\"],\"license\":\"MIT\"},\"node_modules/@openzeppelin/contracts/utils/StorageSlot.sol\":{\"keccak256\":\"0x32ba59b4b7299237c8ba56319110989d7978a039faf754793064e967e5894418\",\"urls\":[\"bzz-raw://1ae50c8b562427df610cc4540c9bf104acca7ef8e2dcae567ae7e52272281e9c\",\"dweb:/ipfs/QmTHiadFCSJUPpRjNegc5SahmeU8bAoY8i9Aq6tVscbcKR\"],\"license\":\"MIT\"},\"node_modules/@openzeppelin/contracts/utils/introspection/IERC165.sol\":{\"keccak256\":\"0x4296879f55019b23e135000eb36896057e7101fb7fb859c5ef690cf14643757b\",\"urls\":[\"bzz-raw://87b3541437c8c443ccd36795e56a338ed12855eec17f8da624511b8d1a7e14df\",\"dweb:/ipfs/QmeJQCtZrQjtJLr6u7ZHWeH3pBnjtLWzvRrKViAi7UZqxL\"],\"license\":\"MIT\"},\"node_modules/@openzeppelin/contracts/utils/math/Math.sol\":{\"keccak256\":\"0x005ec64c6313f0555d59e278f9a7a5ab2db5bdc72a027f255a37c327af1ec02d\",\"urls\":[\"bzz-raw://4ece9f0b9c8daca08c76b6b5405a6446b6f73b3a15fab7ff56e296cbd4a2c875\",\"dweb:/ipfs/QmQyRpyPRL5SQuAgj6SHmbir3foX65FJjbVTTQrA2EFg6L\"],\"license\":\"MIT\"},\"node_modules/@openzeppelin/contracts/utils/structs/EnumerableSet.sol\":{\"keccak256\":\"0x86c1470cbfd878491e5de030072b647352d36bd27122cffb928970b1945282aa\",\"urls\":[\"bzz-raw://ad85dd393ee0a1917c57046abc5155f51f77844b2c6a42c05c1b8dd26d6ff3c1\",\"dweb:/ipfs/QmNqYc8To2NdnpP6E1tGz7t6A7beuENde5yovwov5pW1fA\"],\"license\":\"MIT\"},\"src/BackersManagerRootstockCollective.sol\":{\"keccak256\":\"0x4bce92547845ef35a1b71fdfff864309938051142bd13fcc671785aad6dbc36b\",\"urls\":[\"bzz-raw://e21d16501b5cd62d1838223c2dcc2189e372e71096d4fa2977c5f9c62887a57c\",\"dweb:/ipfs/QmZdhG6Be7UTrKmDUXc8UxfCWH5ifXs9czSBPNrdC46ZGZ\"],\"license\":\"MIT\"},\"src/BuilderRegistryRootstockCollective.sol\":{\"keccak256\":\"0xc1396c558a12bc95f35bb8161d0410bb2ae400ff4c7ee684cd50b6e7e6326bd7\",\"urls\":[\"bzz-raw://091fdfefa6f079517bc0ebf5275038952167ed05fe80c9fc1ebfd623a4c37d5a\",\"dweb:/ipfs/QmaCk2BmBXEqsnB6tCpDeEuNpotXXuBZm1WyKcY1prHdPh\"],\"license\":\"MIT\"},\"src/CycleTimeKeeperRootstockCollective.sol\":{\"keccak256\":\"0x111d42f321259b53ff1b11e65fde44d8b582a5801299a665c7c39a003a9e4bfd\",\"urls\":[\"bzz-raw://40fe5761b6948b9d89fc2977e246738466ca65f2718d3ead305de92fe4ac4e45\",\"dweb:/ipfs/QmNj27MbZSmGN8Wfre4dngJSbNb1ZBUZ3cHoVUMb6B2n9W\"],\"license\":\"MIT\"},\"src/RewardDistributorRootstockCollective.sol\":{\"keccak256\":\"0x6e1d2133177bb79e7a1d1f8271cb467a1920c675cd1fc28519c52436bdcc4ad1\",\"urls\":[\"bzz-raw://c39a3f8af4b3d3ebd2ac122d796408fa879b2ddccbf78fbb8913c9c3c051a754\",\"dweb:/ipfs/QmRmU9vqFAP184E5ZVQv19FuPnULgkMNeqzEKAaNZHUNon\"],\"license\":\"MIT\"},\"src/gauge/GaugeFactoryRootstockCollective.sol\":{\"keccak256\":\"0xbcf8f9f1038468632211aa7b936d63a35caa7e54f03793ba44f701b17e489a0d\",\"urls\":[\"bzz-raw://82beb9f7be678d3edb72cd181e198e00ead8c8383c36414ce0e388094272914b\",\"dweb:/ipfs/QmSmMx3RT4gjYRFggbEWAyDie5X4JLyBW3VgpHdRFcAmii\"],\"license\":\"MIT\"},\"src/gauge/GaugeRootstockCollective.sol\":{\"keccak256\":\"0xc938acb7b0a1fe48d81115d9c78554cf52578cfa079b7e2fa61ad6f7d938cfa5\",\"urls\":[\"bzz-raw://b0705939ef67abd05f05cd9c3f7d2d0f82c42048046c9daefc360d0d3335761d\",\"dweb:/ipfs/QmaPRBk5oeoQajXGLpCCq1B2BNRHbToSrD7a7ZbcqnhwKx\"],\"license\":\"MIT\"},\"src/governance/UpgradeableRootstockCollective.sol\":{\"keccak256\":\"0x22b56cfe51772a18fc6b7f4e64c53a2a9e73654826cfcb8b24e84c25058e2541\",\"urls\":[\"bzz-raw://57900df94f4b5b41038bb78594317680c8ea5ea74b2c5ca00875b3815b5e6dc5\",\"dweb:/ipfs/QmbANYcAgWYQ4Fthch7qeMCSXHQucRGPfVRjCTgUzcWTmL\"],\"license\":\"MIT\"},\"src/interfaces/IBackersManagerRootstockCollective.sol\":{\"keccak256\":\"0x7eacff4e2d906e1f38636bdc81646f213dc3820724b0bb4f61d2e105272f4087\",\"urls\":[\"bzz-raw://00e4ac507e8377040962f89fb774df725422c400114965eee8c45fcc401a7f87\",\"dweb:/ipfs/QmNsqV2naFxx8s6AG8YVDZqhvnUvXmnDZVhWH1WMsFesf6\"],\"license\":\"MIT\"},\"src/interfaces/IChangeContractRootstockCollective.sol\":{\"keccak256\":\"0x00fb3eb72286348dd06d581c5044cb045dfd3bd24725d05dd9c4b008567dd496\",\"urls\":[\"bzz-raw://7f4a03e06197ae7d6e478097afbbecf936ce7029ca49909a1fee0b4ba1b5b517\",\"dweb:/ipfs/QmfByMJ1SQAmcYkouS5WM3akMmSKU3MCyACpFmQwuFSYe9\"],\"license\":\"MIT\"},\"src/interfaces/ICollectiveRewardsCheckRootstockCollective.sol\":{\"keccak256\":\"0x3fa8e50c66e322c8023aed564a442404bdcb942ae1fe95fa60bf9982e8baf7ee\",\"urls\":[\"bzz-raw://df7c927919599e72f70fdcfaf5713d859f447d4258ea7a6ed8f9bcac851d3d72\",\"dweb:/ipfs/Qmb54kMmV1UD45oZntyxB7yWaUfKwMC136ftDHctVmNrge\"],\"license\":\"UNLICENSED\"},\"src/interfaces/IGovernanceManagerRootstockCollective.sol\":{\"keccak256\":\"0x1416991dd129bb36f43cc0854dfa824b5b85838e5c5018566b6cf78f527747e3\",\"urls\":[\"bzz-raw://8652a18ec39d5527fefb829eca619f4cf4bbec3ee4f6231e8888f1549feedd3d\",\"dweb:/ipfs/Qmczi6GipLy9B9TcDMx5UaZZPFBaMT2k49iYzQuLCFgnfS\"],\"license\":\"MIT\"},\"src/libraries/UtilsLib.sol\":{\"keccak256\":\"0x4660e2e62cb370b17052cd21238722bfe3cdaaf3f69cf4c9b2d87236070d12ac\",\"urls\":[\"bzz-raw://e8759237b67bb6e641c7a92eb0d94300770e32c25c2c5bf387bea2ea68513753\",\"dweb:/ipfs/QmbkRDUnzyL9QQbwJcFGd6kiERFFgxZgnxqsu14snpCvhp\"],\"license\":\"MIT\"}},\"version\":1}", + "numDeployments": 4, + "receipt": { + "transactionHash": "0xff47ec49e3a6554c63c89f5932c5119f65639f2bcb3e040a53a5360c266f0eef", + "transactionIndex": "0x5", + "blockHash": "0xbd66e786c294e2fb1ae755bdf7cea646ca5c645765b620005a25890b5d52a249", + "blockNumber": "0x5841db", + "from": "0xCB8F8130E289946aec9a17b29819716B1E9e4998", + "to": null, + "cumulativeGasUsed": "0x56a008", + "gasUsed": "0x122af4", + "contractAddress": "0x1b855110022765bc9a7ACa851DfA461dB58d02Bd", + "logs": [ + { + "address": "0x1b855110022765bc9a7ACa851DfA461dB58d02Bd", + "topics": [ + "0xc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d2" + ], + "data": "0x000000000000000000000000000000000000000000000000ffffffffffffffff", + "blockHash": "0xbd66e786c294e2fb1ae755bdf7cea646ca5c645765b620005a25890b5d52a249", + "blockNumber": "0x5841db", + "transactionHash": "0xff47ec49e3a6554c63c89f5932c5119f65639f2bcb3e040a53a5360c266f0eef", + "transactionIndex": "0x5", + "logIndex": "0x0" + } + ], + "status": "0x1", + "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800000000000000000000000080000000000000000000000040000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "type": "0x0", + "effectiveGasPrice": "0x3ef1480" + }, + "solcInputHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "storageLayout": { + "storage": [ + { + "astId": 60223, + "contract": "src/RewardDistributorRootstockCollective.sol:RewardDistributorRootstockCollective", + "label": "governanceManager", + "offset": 0, + "slot": "0", + "type": "t_contract(IGovernanceManagerRootstockCollective)60547" + }, + { + "astId": 60255, + "contract": "src/RewardDistributorRootstockCollective.sol:RewardDistributorRootstockCollective", + "label": "__gap", + "offset": 0, + "slot": "1", + "type": "t_array(t_uint256)50_storage" + }, + { + "astId": 58137, + "contract": "src/RewardDistributorRootstockCollective.sol:RewardDistributorRootstockCollective", + "label": "rewardToken", + "offset": 0, + "slot": "51", + "type": "t_contract(IERC20)2025" + }, + { + "astId": 58141, + "contract": "src/RewardDistributorRootstockCollective.sol:RewardDistributorRootstockCollective", + "label": "backersManager", + "offset": 0, + "slot": "52", + "type": "t_contract(BackersManagerRootstockCollective)56047" + }, + { + "astId": 58144, + "contract": "src/RewardDistributorRootstockCollective.sol:RewardDistributorRootstockCollective", + "label": "defaultRewardTokenAmount", + "offset": 0, + "slot": "53", + "type": "t_uint256" + }, + { + "astId": 58147, + "contract": "src/RewardDistributorRootstockCollective.sol:RewardDistributorRootstockCollective", + "label": "defaultRewardCoinbaseAmount", + "offset": 0, + "slot": "54", + "type": "t_uint256" + }, + { + "astId": 58327, + "contract": "src/RewardDistributorRootstockCollective.sol:RewardDistributorRootstockCollective", + "label": "__gap", + "offset": 0, + "slot": "55", + "type": "t_array(t_uint256)50_storage" + } + ], + "types": { + "t_array(t_uint256)50_storage": { + "encoding": "inplace", + "label": "uint256[50]", + "numberOfBytes": "1600", + "base": "t_uint256" + }, + "t_contract(BackersManagerRootstockCollective)56047": { + "encoding": "inplace", + "label": "contract BackersManagerRootstockCollective", + "numberOfBytes": "20" + }, + "t_contract(IERC20)2025": { + "encoding": "inplace", + "label": "contract IERC20", + "numberOfBytes": "20" + }, + "t_contract(IGovernanceManagerRootstockCollective)60547": { + "encoding": "inplace", + "label": "contract IGovernanceManagerRootstockCollective", + "numberOfBytes": "20" + }, + "t_uint256": { + "encoding": "inplace", + "label": "uint256", + "numberOfBytes": "32" + } + } + }, + "transactionHash": "0xff47ec49e3a6554c63c89f5932c5119f65639f2bcb3e040a53a5360c266f0eef", + "userdoc": { + "version": 1, + "kind": "user", + "methods": { + "backersManager()": { + "notice": "BackersManagerRootstockCollective contract address" + }, + "defaultRewardCoinbaseAmount()": { + "notice": "default reward coinbase amount" + }, + "defaultRewardTokenAmount()": { + "notice": "default reward token amount" + }, + "initialize(address)": { + "notice": "contract initializer" + }, + "initializeCollectiveRewardsAddresses(address)": { + "notice": "CollectiveRewards addresses initializer" + }, + "rewardToken()": { + "notice": "address of the token rewarded to builder and backers" + }, + "sendRewards(uint256,uint256)": { + "notice": "sends rewards to backersManager contract to be distributed to the gauges" + }, + "sendRewardsAndStartDistribution(uint256,uint256)": { + "notice": "sends rewards to backersManager contract and starts the distribution to the gauges" + }, + "sendRewardsAndStartDistributionWithDefaultAmount()": { + "notice": "sends rewards to backersManager contract with default amounts and starts the distribution" + }, + "sendRewardsWithDefaultAmount()": { + "notice": "sends rewards to backersManager contract with default amounts" + }, + "setDefaultRewardAmount(uint256,uint256)": { + "notice": "sets the default reward amounts" + } + }, + "notice": "Accumulates all the rewards to be distributed for each cycle" + } +} \ No newline at end of file diff --git a/deployments/testnet_qa_dapp/RewardDistributorRootstockCollectiveProxy.json b/deployments/testnet_qa_dapp/RewardDistributorRootstockCollectiveProxy.json new file mode 100644 index 00000000..1519578d --- /dev/null +++ b/deployments/testnet_qa_dapp/RewardDistributorRootstockCollectiveProxy.json @@ -0,0 +1,167 @@ +{ + "abi": [ + { + "type": "constructor", + "inputs": [ + { + "name": "implementation", + "type": "address", + "internalType": "address" + }, + { + "name": "_data", + "type": "bytes", + "internalType": "bytes" + } + ], + "stateMutability": "payable" + }, + { + "type": "fallback", + "stateMutability": "payable" + }, + { + "type": "event", + "name": "Upgraded", + "inputs": [ + { + "name": "implementation", + "type": "address", + "indexed": true, + "internalType": "address" + } + ], + "anonymous": false + }, + { + "type": "error", + "name": "AddressEmptyCode", + "inputs": [ + { + "name": "target", + "type": "address", + "internalType": "address" + } + ] + }, + { + "type": "error", + "name": "ERC1967InvalidImplementation", + "inputs": [ + { + "name": "implementation", + "type": "address", + "internalType": "address" + } + ] + }, + { + "type": "error", + "name": "ERC1967NonPayable", + "inputs": [] + }, + { + "type": "error", + "name": "FailedInnerCall", + "inputs": [] + } + ], + "address": "0x83Eac3Abe6AAF4a4AAe8B067888FAD600c4cF6B3", + "args": [ + "0x1b855110022765bc9a7ACa851DfA461dB58d02Bd", + "0xc4d66de8000000000000000000000000ef891bb2a90339fc8e1e250f54c079a46faabe1b" + ], + "bytecode": "0x60806040526040516103ee3803806103ee83398101604081905261002291610268565b61002c8282610033565b5050610352565b61003c82610092565b6040516001600160a01b038316907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a280511561008657610081828261010e565b505050565b61008e610185565b5050565b806001600160a01b03163b6000036100cd57604051634c9c8ce360e01b81526001600160a01b03821660048201526024015b60405180910390fd5b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc80546001600160a01b0319166001600160a01b0392909216919091179055565b6060600080846001600160a01b03168460405161012b9190610336565b600060405180830381855af49150503d8060008114610166576040519150601f19603f3d011682016040523d82523d6000602084013e61016b565b606091505b50909250905061017c8583836101a6565b95945050505050565b34156101a45760405163b398979f60e01b815260040160405180910390fd5b565b6060826101bb576101b682610205565b6101fe565b81511580156101d257506001600160a01b0384163b155b156101fb57604051639996b31560e01b81526001600160a01b03851660048201526024016100c4565b50805b9392505050565b8051156102155780518082602001fd5b604051630a12f52160e11b815260040160405180910390fd5b634e487b7160e01b600052604160045260246000fd5b60005b8381101561025f578181015183820152602001610247565b50506000910152565b6000806040838503121561027b57600080fd5b82516001600160a01b038116811461029257600080fd5b60208401519092506001600160401b03808211156102af57600080fd5b818501915085601f8301126102c357600080fd5b8151818111156102d5576102d561022e565b604051601f8201601f19908116603f011681019083821181831017156102fd576102fd61022e565b8160405282815288602084870101111561031657600080fd5b610327836020830160208801610244565b80955050505050509250929050565b60008251610348818460208701610244565b9190910192915050565b608e806103606000396000f3fe6080604052600a600c565b005b60186014601a565b605e565b565b600060597f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5473ffffffffffffffffffffffffffffffffffffffff1690565b905090565b3660008037600080366000845af43d6000803e808015607c573d6000f35b3d6000fdfea164736f6c6343000814000a", + "deployedBytecode": "0x6080604052600a600c565b005b60186014601a565b605e565b565b600060597f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5473ffffffffffffffffffffffffffffffffffffffff1690565b905090565b3660008037600080366000845af43d6000803e808015607c573d6000f35b3d6000fdfea164736f6c6343000814000a", + "devdoc": { + "version": 1, + "kind": "dev", + "details": "This contract implements an upgradeable proxy. It is upgradeable because calls are delegated to an implementation address that can be changed. This address is stored in storage in the location specified by https://eips.ethereum.org/EIPS/eip-1967[EIP1967], so that it doesn't conflict with the storage layout of the implementation behind the proxy.", + "methods": { + "constructor": { + "details": "Initializes the upgradeable proxy with an initial implementation specified by `implementation`. If `_data` is nonempty, it's used as data in a delegate call to `implementation`. This will typically be an encoded function call, and allows initializing the storage of the proxy like a Solidity constructor. Requirements: - If `data` is empty, `msg.value` must be zero." + } + }, + "events": { + "Upgraded(address)": { + "details": "Emitted when the implementation is upgraded." + } + }, + "errors": { + "AddressEmptyCode(address)": [ + { + "details": "There's no code at `target` (it is not a contract)." + } + ], + "ERC1967InvalidImplementation(address)": [ + { + "details": "The `implementation` of the proxy is invalid." + } + ], + "ERC1967NonPayable()": [ + { + "details": "An upgrade function sees `msg.value > 0` that may be lost." + } + ], + "FailedInnerCall()": [ + { + "details": "A call to an address target failed. The target may have reverted." + } + ] + } + }, + "metadata": "{\"compiler\":{\"version\":\"0.8.20+commit.a1b79de6\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"address\",\"name\":\"implementation\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"_data\",\"type\":\"bytes\"}],\"stateMutability\":\"payable\",\"type\":\"constructor\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"target\",\"type\":\"address\"}],\"type\":\"error\",\"name\":\"AddressEmptyCode\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"implementation\",\"type\":\"address\"}],\"type\":\"error\",\"name\":\"ERC1967InvalidImplementation\"},{\"inputs\":[],\"type\":\"error\",\"name\":\"ERC1967NonPayable\"},{\"inputs\":[],\"type\":\"error\",\"name\":\"FailedInnerCall\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"implementation\",\"type\":\"address\",\"indexed\":true}],\"type\":\"event\",\"name\":\"Upgraded\",\"anonymous\":false},{\"inputs\":[],\"stateMutability\":\"payable\",\"type\":\"fallback\"}],\"devdoc\":{\"kind\":\"dev\",\"methods\":{\"constructor\":{\"details\":\"Initializes the upgradeable proxy with an initial implementation specified by `implementation`. If `_data` is nonempty, it's used as data in a delegate call to `implementation`. This will typically be an encoded function call, and allows initializing the storage of the proxy like a Solidity constructor. Requirements: - If `data` is empty, `msg.value` must be zero.\"}},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"remappings\":[\"@openzeppelin/contracts-upgradeable/=node_modules/@openzeppelin/contracts-upgradeable/\",\"@openzeppelin/contracts/=node_modules/@openzeppelin/contracts/\",\"eth-gas-reporter/=node_modules/eth-gas-reporter/\",\"forge-std/=node_modules/forge-std/\",\"hardhat/=node_modules/hardhat/\"],\"optimizer\":{\"enabled\":true,\"runs\":10000},\"metadata\":{\"bytecodeHash\":\"none\"},\"compilationTarget\":{\"node_modules/@openzeppelin/contracts/proxy/ERC1967/ERC1967Proxy.sol\":\"ERC1967Proxy\"},\"evmVersion\":\"london\",\"libraries\":{}},\"sources\":{\"node_modules/@openzeppelin/contracts/proxy/ERC1967/ERC1967Proxy.sol\":{\"keccak256\":\"0xbfb6695731de677140fbf76c772ab08c4233a122fb51ac28ac120fc49bbbc4ec\",\"urls\":[\"bzz-raw://68f8fded7cc318efa15874b7c6a983fe17a4a955d72d240353a9a4ca1e1b824c\",\"dweb:/ipfs/QmdcmBL9Qo4Tk3Dby4wFYabGyot9JNeLPxpSXZUgUm92BV\"],\"license\":\"MIT\"},\"node_modules/@openzeppelin/contracts/proxy/ERC1967/ERC1967Utils.sol\":{\"keccak256\":\"0x06a78f9b3ee3e6d0eb4e4cd635ba49960bea34cac1db8c0a27c75f2319f1fd65\",\"urls\":[\"bzz-raw://547d21aa17f4f3f1a1a7edf7167beff8dd9496a0348d5588f15cc8a4b29d052a\",\"dweb:/ipfs/QmT16JtRQSWNpLo9W23jr6CzaMuTAcQcjJJcdRd8HLJ6cE\"],\"license\":\"MIT\"},\"node_modules/@openzeppelin/contracts/proxy/Proxy.sol\":{\"keccak256\":\"0xc3f2ec76a3de8ed7a7007c46166f5550c72c7709e3fc7e8bb3111a7191cdedbd\",\"urls\":[\"bzz-raw://e73efb4c2ca655882dc237c6b4f234a9bd36d97159d8fcaa837eb01171f726ac\",\"dweb:/ipfs/QmTNnnv7Gu5fs5G1ZMh7Fexp8N4XUs3XrNAngjcxgiss3e\"],\"license\":\"MIT\"},\"node_modules/@openzeppelin/contracts/proxy/beacon/IBeacon.sol\":{\"keccak256\":\"0xc59a78b07b44b2cf2e8ab4175fca91e8eca1eee2df7357b8d2a8833e5ea1f64c\",\"urls\":[\"bzz-raw://5aa4f07e65444784c29cd7bfcc2341b34381e4e5b5da9f0c5bd00d7f430e66fa\",\"dweb:/ipfs/QmWRMh4Q9DpaU9GvsiXmDdoNYMyyece9if7hnfLz7uqzWM\"],\"license\":\"MIT\"},\"node_modules/@openzeppelin/contracts/utils/Address.sol\":{\"keccak256\":\"0xaf28a975a78550e45f65e559a3ad6a5ad43b9b8a37366999abd1b7084eb70721\",\"urls\":[\"bzz-raw://b7bd24e224f67f65bfadf85dc2929fa965456bb2415478bd0125471b5ce35245\",\"dweb:/ipfs/QmRaydGr8BTHs1kvaZfsNU69pKzUAGFrvABn1KiRSbE51y\"],\"license\":\"MIT\"},\"node_modules/@openzeppelin/contracts/utils/StorageSlot.sol\":{\"keccak256\":\"0x32ba59b4b7299237c8ba56319110989d7978a039faf754793064e967e5894418\",\"urls\":[\"bzz-raw://1ae50c8b562427df610cc4540c9bf104acca7ef8e2dcae567ae7e52272281e9c\",\"dweb:/ipfs/QmTHiadFCSJUPpRjNegc5SahmeU8bAoY8i9Aq6tVscbcKR\"],\"license\":\"MIT\"}},\"version\":1}", + "numDeployments": 4, + "receipt": { + "transactionHash": "0xa84d7872b0e95fa5340775edfc8e47afdee67bd93a9ea9d6df3edf0e4533dd40", + "transactionIndex": "0x6", + "blockHash": "0xbd66e786c294e2fb1ae755bdf7cea646ca5c645765b620005a25890b5d52a249", + "blockNumber": "0x5841db", + "from": "0xCB8F8130E289946aec9a17b29819716B1E9e4998", + "to": null, + "cumulativeGasUsed": "0x5951a1", + "gasUsed": "0x2b199", + "contractAddress": "0x83Eac3Abe6AAF4a4AAe8B067888FAD600c4cF6B3", + "logs": [ + { + "address": "0x83Eac3Abe6AAF4a4AAe8B067888FAD600c4cF6B3", + "topics": [ + "0xbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b", + "0x0000000000000000000000001b855110022765bc9a7aca851dfa461db58d02bd" + ], + "data": "0x", + "blockHash": "0xbd66e786c294e2fb1ae755bdf7cea646ca5c645765b620005a25890b5d52a249", + "blockNumber": "0x5841db", + "transactionHash": "0xa84d7872b0e95fa5340775edfc8e47afdee67bd93a9ea9d6df3edf0e4533dd40", + "transactionIndex": "0x6", + "logIndex": "0x0" + }, + { + "address": "0x83Eac3Abe6AAF4a4AAe8B067888FAD600c4cF6B3", + "topics": [ + "0xc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d2" + ], + "data": "0x0000000000000000000000000000000000000000000000000000000000000001", + "blockHash": "0xbd66e786c294e2fb1ae755bdf7cea646ca5c645765b620005a25890b5d52a249", + "blockNumber": "0x5841db", + "transactionHash": "0xa84d7872b0e95fa5340775edfc8e47afdee67bd93a9ea9d6df3edf0e4533dd40", + "transactionIndex": "0x6", + "logIndex": "0x1" + } + ], + "status": "0x1", + "logsBloom": "0x00000000000000000000000000000000400000000000000000000000000000000000000000000000000000000000008000000000000000000000000800000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800000000000000000000000080000000000000000000000000000800000000000000000000000000000000000000000200000000000000000020000080000000000000000000000000000004002000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "type": "0x0", + "effectiveGasPrice": "0x3ef1480" + }, + "solcInputHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "storageLayout": { + "storage": [], + "types": {} + }, + "transactionHash": "0xa84d7872b0e95fa5340775edfc8e47afdee67bd93a9ea9d6df3edf0e4533dd40", + "userdoc": { + "version": 1, + "kind": "user" + } +} \ No newline at end of file diff --git a/deployments/testnet_qa_dapp/contract_addresses.json b/deployments/testnet_qa_dapp/contract_addresses.json new file mode 100644 index 00000000..3f5cd5e8 --- /dev/null +++ b/deployments/testnet_qa_dapp/contract_addresses.json @@ -0,0 +1,10 @@ +{ + "BackersManagerRootstockCollective": "0xBa93A9CF3E8194b7D04bee459c679B2125cD569b", + "BackersManagerRootstockCollectiveProxy": "0x41841e316F85933247fC7b51c79B76F22eB239bc", + "GaugeBeaconRootstockCollective": "0x6b3EE68B26D7F3D7580517450471216928e3434d", + "GaugeFactoryRootstockCollective": "0x317B70100e091Cf00c09240e34a50591F7931fF6", + "GovernanceManagerRootstockCollective": "0x89108Eb73C6388627A2156C586b76e56D902fDfb", + "GovernanceManagerRootstockCollectiveProxy": "0xEf891bB2A90339fC8E1E250f54C079A46fAABE1b", + "RewardDistributorRootstockCollective": "0x1b855110022765bc9a7ACa851DfA461dB58d02Bd", + "RewardDistributorRootstockCollectiveProxy": "0x83Eac3Abe6AAF4a4AAe8B067888FAD600c4cF6B3" +} \ No newline at end of file diff --git a/docs/RewardsCalculation.md b/docs/RewardsCalculation.md new file mode 100644 index 00000000..17f43808 --- /dev/null +++ b/docs/RewardsCalculation.md @@ -0,0 +1,125 @@ +# Rewards Distribution calculation + +The amount of rewards distributed to builders and backers is based on the support throughout time that a builder gets +from backers. The support during a cycle impacts the rewards they receive at the beginning of the next one. Builders get +their rewards ready to claim immediately after the distribution while backers will receive them based on the amount of +time they support the builder during that cycle. + +To calculate the amount of rewards to distribute to each builder and its backers, each Gauge keeps track of its rewards +shares. They are calculated based on the amount of votes per time left in the cycle that the gauge has + +```text +rewardShares = allocations [wei] * timeUntilNextCycle [seconds] +``` + +Reward shares get updated every time there is a change in allocations (either adding or removing votes) based on the +time left to end the cycle and after a distribution: + +- In case there is an increase in votes, the allocation deviation \* `timeUntilNextCycle` is added to the total rewards + shares +- If votes are removed, then allocation deviation \* `timeUntilNextCycle` is removed from the total reward shares. +- After a distribution, reward shares get reset to the total amount of allocation that the gauge has at the moment + multiplied by the duration of the cycle. + +The `BackersManager` keeps track of the total amount of shares of every `Gauge` combined in `totalPotentialReward`. + +On the other hand, the `BackersManager` also keeps track of the `rewardsERC20` and `rewardsCoinbase`. They get updated +each time the `BackersManager` receives rewards through `notifyRewardAmount` and after each distribution, when they get +reset to 0. + +This way, rewards for each Gauge are calculated based on their `rewardShares` and the `totalPotentialRewards`. + +ERC20 rewards: + +```text +(rewardShares * rewardsERC20) / totalPotentialReward +``` + +Coinbase rewards: + +```text + (rewardShares * rewardsCoinbase) / totalPotentialReward +``` + +The `BackersManager` also keeps track of the `backerRewardPercentage`. This is passed to each gauge alongside the +rewards during the distribution so each gauge can calculate how much goes to the builder and how much to the backers. + +## Builder Rewards + +Their rewards calculation is pretty straightforward: it's based on the `backerRewardPercentage`. For instance, if there +was a distribution to a Gauge of 10 tokens and 10 coinbase with a `backerRewardPercentage` of 40%, the builder would get +6 tokens and 6 coinbase. The rest gets distributed during the cycle among all the backers based on their amount of votes +and time they maintained those votes. + +## Backer Rewards + +Backers can receive rewards through the distribution and through incentives in reward token and coinbase. + +Their rewards are calculated per asset based on a `rewardRate`. What a builder earns in a cycle is in simple terms the +time they have spent supporting the builder multiplied by the reward rate and their allocation rate. + +A simplistic way to calculate the rewards assuming there were no changes in allocation or incentives during the cycle +would be: + +```text +(timeSinceCycleStarted * rewardRate) * (backerAllocation / totalAllocations) +``` + +Where the reward rate would be the amount of rewards to distribute per time left in the cycle + +```text +rewardRate = totalRewards / timeUntilNextCycle +``` + +Going into more detail, there is a need to keep track of different variables since the `rewardRate` changes based on the +amount of rewards to distribute, and what the backers receive depends on how their votes change or not. + +`rewardRate`: it changes every time rewards for backers are added to the Gauge, either by distribution or by incentives. +It is then affected by the total rewards, where + +```text +totalRewards = backersAmount + rewardMissing + leftover +``` + +- `backersAmount`: newly added rewards, either by incentives or distribution +- `rewardMissing`: rewards from previous cycle that didn't get distributed since that cycle ended without votes or from + current cycle if all allocations were removed at some point +- `leftover`: rewards that haven't been distributed yet in current cycle. It's calculated with previous `rewardRate` + (before updating to the new one) and the time left of the current cycle. + +What a backer earns depends directly on the `rewardRate` and the amount of allocations (their own and total +allocations). + +So in order to keep track of what was earned until there were either new incentives or new allocations, we have the +`rewardPerTokenStored`. This is the `rewardPerToken` (reward rate per vote) that was earned up to that point. The time +of this update is also stored to be able to calculate future rewards from this point onwards. + +- When there is an incentive, the following variables get updated: + - The `rewardRate` (it depends directly on the amount of total rewards) + - The `rewardPerTokenStored` (rewardRate per vote before updating to new rewardRate) + - Time of the update (to current time of the incentive) + - The missing rewards if there are no allocations +- In case of allocating, the following variables get updated: + - The `rewardPerTokenStored` (it depends on the amount of votes) + - Time of the update (to current time of the allocation) + - The Backer rewards: rewards earned up to that point get stored here + - The `backerRewardPerTokenPaid`: this is the `rewardPerTokenStored` at the moment of the allocation. Keeping track of + this is necessary to calculate what a backer can claim at any point of the cycle. + +The way we calculate what a backer has earned (and can claim) until the current point in time is the stored rewards + +the rewards since the last update (whether it was an incentives or allocations update). + +As it was mentioned before, the stored rewards of a backer get updated every time there is a change in allocation. + +```text +backer rewards = previous backer rewards + current rewards +``` + +Where current rewards are calculated by current allocations of the backer and `rewardPerToken` + +```text +currentRewards = backerAllocation * (rewardPerToken - backerRewardPerTokenPaid) +``` + +The `backerRewardsPerTokenPaid` is taken away from the `rewardPerToken` since it represents what was already included in +the stored backer rewards, we only want to consider what was earned since the last allocation. diff --git a/docs/src/README.md b/docs/src/README.md index 84ca3ba6..6e480f02 100644 --- a/docs/src/README.md +++ b/docs/src/README.md @@ -359,23 +359,25 @@ Generate coverage report: ### Reward token -TODO: +The reward token for the collective incentives program is `RIF`. ### Staking token -TODO: +The staking token is `stRIF`, where the token balance represents the backing power a backer has to vote for builders. ### Governor -TODO: +The Governor represents the DAO’s governance mechanism and is in charge of the community approval and de-whitelisting of +builders. ### KYC Approver -TODO: +The RoostockCollective Foundation requires builders to got through a KYC process and is in charge of submitting said +approval as well as revoking it if necessary. ### Foundation treasury -TODO: +The RoostockCollective Foundation is in charge of holding and distributing the rewards from the program. ## Acknowledgment diff --git a/docs/src/SUMMARY.md b/docs/src/SUMMARY.md index 1507e8ea..35ecd3d6 100644 --- a/docs/src/SUMMARY.md +++ b/docs/src/SUMMARY.md @@ -10,7 +10,7 @@ - [GaugeRootstockCollective](src/gauge/GaugeRootstockCollective.sol/contract.GaugeRootstockCollective.md) - [❱ governance](src/governance/README.md) - [❱ changerTemplates](src/governance/changerTemplates/README.md) - - [WhitelistBuilderChangerTemplateRootstockCollective](src/governance/changerTemplates/WhitelistBuilderChangerTemplateRootstockCollective.sol/contract.WhitelistBuilderChangerTemplateRootstockCollective.md) + - [CommunityApproveBuilderChangerTemplateRootstockCollective](src/governance/changerTemplates/CommunityApproveBuilderChangerTemplateRootstockCollective.sol/contract.CommunityApproveBuilderChangerTemplateRootstockCollective.md) - [GovernanceManagerRootstockCollective](src/governance/GovernanceManagerRootstockCollective.sol/contract.GovernanceManagerRootstockCollective.md) - [UpgradeableRootstockCollective](src/governance/UpgradeableRootstockCollective.sol/abstract.UpgradeableRootstockCollective.md) - [❱ interfaces](src/interfaces/README.md) @@ -20,12 +20,6 @@ - [IGovernanceManagerRootstockCollective](src/interfaces/IGovernanceManagerRootstockCollective.sol/interface.IGovernanceManagerRootstockCollective.md) - [❱ libraries](src/libraries/README.md) - [UtilsLib](src/libraries/UtilsLib.sol/library.UtilsLib.md) -- [❱ mvp](src/mvp/README.md) - - [ChangeExecutorRootstockCollective](src/mvp/ChangeExecutorRootstockCollective.sol/contract.ChangeExecutorRootstockCollective.md) - - [Governed](src/mvp/Governed.sol/abstract.Governed.md) - - [IChangeExecutorRootstockCollective](src/mvp/IChangeExecutorRootstockCollective.sol/interface.IChangeExecutorRootstockCollective.md) - - [SimplifiedRewardDistributorRootstockCollective](src/mvp/SimplifiedRewardDistributorRootstockCollective.sol/contract.SimplifiedRewardDistributorRootstockCollective.md) - - [Upgradeable](src/mvp/Upgradeable.sol/abstract.Upgradeable.md) - [BackersManagerRootstockCollective](src/BackersManagerRootstockCollective.sol/contract.BackersManagerRootstockCollective.md) - [BuilderRegistryRootstockCollective](src/BuilderRegistryRootstockCollective.sol/abstract.BuilderRegistryRootstockCollective.md) - [CycleTimeKeeperRootstockCollective](src/CycleTimeKeeperRootstockCollective.sol/abstract.CycleTimeKeeperRootstockCollective.md) diff --git a/docs/src/src/BackersManagerRootstockCollective.sol/contract.BackersManagerRootstockCollective.md b/docs/src/src/BackersManagerRootstockCollective.sol/contract.BackersManagerRootstockCollective.md index 2c5c094e..bca4457c 100644 --- a/docs/src/src/BackersManagerRootstockCollective.sol/contract.BackersManagerRootstockCollective.md +++ b/docs/src/src/BackersManagerRootstockCollective.sol/contract.BackersManagerRootstockCollective.md @@ -1,6 +1,6 @@ # BackersManagerRootstockCollective -[Git Source](https://github.com/RootstockCollective/collective-rewards-sc/blob/0c4368dc418c200f21d2a798619d1dd68234c5c1/src/BackersManagerRootstockCollective.sol) +[Git Source](https://github.com/RootstockCollective/collective-rewards-sc/blob/6d0eca4e2c61e833bcb70c54d8668e5644ba180e/src/BackersManagerRootstockCollective.sol) **Inherits:** [ICollectiveRewardsCheckRootstockCollective](/src/interfaces/ICollectiveRewardsCheckRootstockCollective.sol/interface.ICollectiveRewardsCheckRootstockCollective.md), @@ -138,6 +138,7 @@ function initialize( address rewardDistributor_, uint32 cycleDuration_, uint24 cycleStartOffset_, + uint32 distributionDuration_, uint128 rewardPercentageCooldown_ ) external @@ -155,6 +156,7 @@ function initialize( | `rewardDistributor_` | `address` | address of the rewardDistributor contract | | `cycleDuration_` | `uint32` | Collective Rewards cycle time duration | | `cycleStartOffset_` | `uint24` | offset to add to the first cycle, used to set an specific day to start the cycles | +| `distributionDuration_` | `uint32` | duration of the distribution window | | `rewardPercentageCooldown_` | `uint128` | time that must elapse for a new reward percentage from a builder to be applied | ### supportsInterface @@ -170,16 +172,19 @@ function supportsInterface(bytes4 interfaceId_) public view override returns (bo returns true if can withdraw, remaining balance should exceed the current allocation +_user token balance should already account for the update, meaning the check is applied AFTER the withdraw accounting +has become effective._ + ```solidity -function canWithdraw(address targetAddress_, uint256 value_) external view returns (bool); +function canWithdraw(address targetAddress_, uint256) external view returns (bool); ``` **Parameters** -| Name | Type | Description | -| ---------------- | --------- | ------------------------------------------ | -| `targetAddress_` | `address` | address who wants to withdraw stakingToken | -| `value_` | `uint256` | amount of stakingToken to withdraw | +| Name | Type | Description | +| ---------------- | --------- | ------------------------------------------------------------------------------------------------------------------------ | +| `targetAddress_` | `address` | address who wants to withdraw stakingToken param value\_ amount of stakingToken to withdraw, not used on current version | +| `` | `uint256` | | ### allocate @@ -224,7 +229,7 @@ function allocateBatch( transfers reward tokens from the sender to be distributed to the gauges -_reverts if it is called during the distribution period_ +_reverts if it is called during the distribution period reverts if there are no gauges available for the distribution_ ```solidity function notifyRewardAmount(uint256 amount_) external payable notInDistributionPeriod; @@ -415,7 +420,7 @@ function _gaugeDistribute( approves rewardTokens to a given gauge -_give full allowance when it is whitelisted and remove it when it is dewhitelisted_ +_give full allowance when it is community approved and remove it when it is dewhitelisted_ ```solidity function _rewardTokenApprove(address gauge_, uint256 value_) internal override; @@ -537,3 +542,9 @@ error BeforeDistribution(); ```solidity error PositiveAllocationOnHaltedGauge(); ``` + +### NoGaugesForDistribution + +```solidity +error NoGaugesForDistribution(); +``` diff --git a/docs/src/src/BuilderRegistryRootstockCollective.sol/abstract.BuilderRegistryRootstockCollective.md b/docs/src/src/BuilderRegistryRootstockCollective.sol/abstract.BuilderRegistryRootstockCollective.md index 3d398bcf..a052faa6 100644 --- a/docs/src/src/BuilderRegistryRootstockCollective.sol/abstract.BuilderRegistryRootstockCollective.md +++ b/docs/src/src/BuilderRegistryRootstockCollective.sol/abstract.BuilderRegistryRootstockCollective.md @@ -1,6 +1,6 @@ # BuilderRegistryRootstockCollective -[Git Source](https://github.com/RootstockCollective/collective-rewards-sc/blob/0c4368dc418c200f21d2a798619d1dd68234c5c1/src/BuilderRegistryRootstockCollective.sol) +[Git Source](https://github.com/RootstockCollective/collective-rewards-sc/blob/6d0eca4e2c61e833bcb70c54d8668e5644ba180e/src/BuilderRegistryRootstockCollective.sol) **Inherits:** [CycleTimeKeeperRootstockCollective](/src/CycleTimeKeeperRootstockCollective.sol/abstract.CycleTimeKeeperRootstockCollective.md), @@ -40,12 +40,20 @@ map of builders reward receiver mapping(address builder => address rewardReceiver) public builderRewardReceiver; ``` -### builderRewardPercentage +### builderRewardReceiverReplacement -map of builders reward percentage data +map of builders reward receiver replacement, used as a buffer until the new address is accepted ```solidity -mapping(address builder => RewardPercentageData rewardPercentageData) public builderRewardPercentage; +mapping(address builder => address rewardReceiverReplacement) public builderRewardReceiverReplacement; +``` + +### backerRewardPercentage + +map of builder's backers reward percentage data + +```solidity +mapping(address builder => RewardPercentageData rewardPercentageData) public backerRewardPercentage; ``` ### \_gauges @@ -132,6 +140,7 @@ function __BuilderRegistryRootstockCollective_init( address rewardDistributor_, uint32 cycleDuration_, uint24 cycleStartOffset_, + uint32 distributionDuration_, uint128 rewardPercentageCooldown_ ) internal @@ -147,8 +156,72 @@ function __BuilderRegistryRootstockCollective_init( | `rewardDistributor_` | `address` | address of the rewardDistributor contract | | `cycleDuration_` | `uint32` | Collective Rewards cycle time duration | | `cycleStartOffset_` | `uint24` | offset to add to the first cycle, used to set an specific day to start the cycles | +| `distributionDuration_` | `uint32` | duration of the distribution window | | `rewardPercentageCooldown_` | `uint128` | time that must elapse for a new reward percentage from a builder to be applied | +### submitRewardReceiverReplacementRequest + +Builder submits a request to replace his rewardReceiver address, the request will then need to be approved by +`approveBuilderRewardReceiverReplacement` + +_reverts if Builder is not Operational_ + +```solidity +function submitRewardReceiverReplacementRequest(address newRewardReceiver_) external; +``` + +**Parameters** + +| Name | Type | Description | +| -------------------- | --------- | -------------------------------------------- | +| `newRewardReceiver_` | `address` | new address the builder is requesting to use | + +### cancelRewardReceiverReplacementRequest + +Builder cancels his request to replace his rewardReceiver address + +_reverts if Builder is not Operational_ + +```solidity +function cancelRewardReceiverReplacementRequest() external; +``` + +### approveBuilderRewardReceiverReplacement + +KYCApprover approves Builder's request to replace his rewardReceiver address + +_reverts if provided `rewardReceiverReplacement_` doesn't match Builder's request\_ + +```solidity +function approveBuilderRewardReceiverReplacement( + address builder_, + address rewardReceiverReplacement_ +) + external + onlyKycApprover; +``` + +**Parameters** + +| Name | Type | Description | +| ---------------------------- | --------- | -------------------------------------------- | +| `builder_` | `address` | address of the builder | +| `rewardReceiverReplacement_` | `address` | new address the builder is requesting to use | + +### hasBuilderRewardReceiverPendingApproval + +returns true if the builder has an open request to replace his receiver address + +```solidity +function hasBuilderRewardReceiverPendingApproval(address builder_) external view returns (bool); +``` + +**Parameters** + +| Name | Type | Description | +| ---------- | --------- | ---------------------- | +| `builder_` | `address` | address of the builder | + ### activateBuilder activates builder for the first time, setting the reward receiver and the reward percentage Sets activate flag to true. @@ -207,15 +280,18 @@ function revokeBuilderKYC(address builder_) external onlyKycApprover; | ---------- | --------- | ---------------------- | | `builder_` | `address` | address of the builder | -### whitelistBuilder +### communityApproveBuilder -whitelist builder and create its gauge +community approve builder and create its gauge -_reverts if it is not called by the governor address or authorized changer reverts if is already whitelisted reverts if -it has a gauge associated_ +_reverts if it is not called by the governor address or authorized changer reverts if is already community approved +reverts if it has a gauge associated_ ```solidity -function whitelistBuilder(address builder_) external onlyValidChanger returns (GaugeRootstockCollective gauge_); +function communityApproveBuilder(address builder_) + external + onlyValidChanger + returns (GaugeRootstockCollective gauge_); ``` **Parameters** @@ -235,7 +311,7 @@ function whitelistBuilder(address builder_) external onlyValidChanger returns (G de-whitelist builder _reverts if it is not called by the governor address or authorized changer reverts if it does not have a gauge -associated reverts if it is not whitelisted_ +associated reverts if it is not community approved_ ```solidity function dewhitelistBuilder(address builder_) external onlyValidChanger; @@ -284,9 +360,9 @@ function unpauseBuilder(address builder_) external onlyKycApprover; permit builder -_reverts if it does not have a gauge associated reverts if it is not KYC approved reverts if it is not whitelisted -reverts if it is not revoked reverts if it is executed in distribution period because changing the totalPotentialReward -produce a miscalculation of rewards_ +_reverts if it does not have a gauge associated reverts if it is not KYC approved reverts if it is not community +approved reverts if it is not revoked reverts if it is executed in distribution period because changing the +totalPotentialReward produce a miscalculation of rewards_ ```solidity function permitBuilder(uint64 rewardPercentage_) external; @@ -302,22 +378,22 @@ function permitBuilder(uint64 rewardPercentage_) external; revoke builder -_reverts if it does not have a gauge associated reverts if it is not KYC approved reverts if it is not whitelisted -reverts if it is already revoked reverts if it is executed in distribution period because changing the +_reverts if it does not have a gauge associated reverts if it is not KYC approved reverts if it is not community +approved reverts if it is already revoked reverts if it is executed in distribution period because changing the totalPotentialReward produce a miscalculation of rewards_ ```solidity function revokeBuilder() external; ``` -### setBuilderRewardPercentage +### setBackerRewardPercentage -set a builder reward percentage +allows a builder to set his backers reward percentage _reverts if builder is not operational_ ```solidity -function setBuilderRewardPercentage(uint64 rewardPercentage_) external; +function setBackerRewardPercentage(uint64 rewardPercentage_) external; ``` **Parameters** @@ -326,6 +402,22 @@ function setBuilderRewardPercentage(uint64 rewardPercentage_) external; | ------------------- | -------- | ---------------------------------- | | `rewardPercentage_` | `uint64` | reward percentage(100% == 1 ether) | +### migrateBuilder + +migrate v1 builder to the new builder registry + +```solidity +function migrateBuilder(address builder_, address rewardAddress_, uint64 rewardPercentage_) public onlyKycApprover; +``` + +**Parameters** + +| Name | Type | Description | +| ------------------- | --------- | --------------------------------------------------------------------------------------------------- | +| `builder_` | `address` | address of the builder whitelisted on the V1's SimplifiedRewardDistributor contract | +| `rewardAddress_` | `address` | address of the builder reward receiver whitelisted on the V1's SimplifiedRewardDistributor contract | +| `rewardPercentage_` | `uint64` | reward percentage(100% == 1 ether) | + ### getRewardPercentageToApply returns reward percentage to apply. If there is a new one and cooldown time has expired, apply that one; otherwise, @@ -343,7 +435,7 @@ function getRewardPercentageToApply(address builder_) public view returns (uint6 ### isBuilderOperational -return true if builder is operational kycApproved == true && whitelisted == true && paused == false +return true if builder is operational kycApproved == true && communityApproved == true && paused == false ```solidity function isBuilderOperational(address builder_) public view returns (bool); @@ -359,7 +451,7 @@ function isBuilderPaused(address builder_) public view returns (bool); ### isGaugeOperational -return true if gauge is operational kycApproved == true && whitelisted == true && paused == false +return true if gauge is operational kycApproved == true && communityApproved == true && paused == false ```solidity function isGaugeOperational(GaugeRootstockCollective gauge_) public view returns (bool); @@ -433,12 +525,29 @@ function _createGauge(address builder_) internal returns (GaugeRootstockCollecti | -------- | -------------------------- | -------------- | | `gauge_` | `GaugeRootstockCollective` | gauge contract | -### \_validateGauge +### \_submitRewardReceiverReplacementRequest + +Builder submits a request to replace his rewardReceiver address, the request will then need to be approved by +`approveBuilderRewardReceiverReplacement` + +_reverts if Builder is not Operational_ + +```solidity +function _submitRewardReceiverReplacementRequest(address newRewardReceiver_) internal; +``` + +**Parameters** + +| Name | Type | Description | +| -------------------- | --------- | -------------------------------------------- | +| `newRewardReceiver_` | `address` | new address the builder is requesting to use | + +### \_validateWhitelisted reverts if builder was not activated or approved by the community ```solidity -function _validateGauge(GaugeRootstockCollective gauge_) internal view; +function _validateWhitelisted(GaugeRootstockCollective gauge_) internal view; ``` ### \_haltGauge @@ -475,7 +584,7 @@ function _resumeGauge(GaugeRootstockCollective gauge_) internal; returns true if gauge can be resumed -_kycApproved == true && whitelisted == true && revoked == false_ +_kycApproved == true && communityApproved == true && revoked == false_ ```solidity function _canBeResumed(GaugeRootstockCollective gauge_) internal view returns (bool); @@ -487,6 +596,27 @@ function _canBeResumed(GaugeRootstockCollective gauge_) internal view returns (b | -------- | -------------------------- | ---------------------------- | | `gauge_` | `GaugeRootstockCollective` | gauge contract to be resumed | +### \_activateBuilder + +_activates builder for the first time, setting the reward receiver and the reward percentage Sets activate flag to true. +It cannot be switched to false anymore See +[activateBuilder](/src/BuilderRegistryRootstockCollective.sol/abstract.BuilderRegistryRootstockCollective.md#activatebuilder) +for details._ + +```solidity +function _activateBuilder(address builder_, address rewardReceiver_, uint64 rewardPercentage_) private; +``` + +### \_communityApproveBuilder + +_Internal function to community approve and create its gauge See +[communityApproveBuilder](/src/BuilderRegistryRootstockCollective.sol/abstract.BuilderRegistryRootstockCollective.md#communityapprovebuilder) +for details._ + +```solidity +function _communityApproveBuilder(address builder_) private returns (GaugeRootstockCollective gauge_); +``` + ### \_rewardTokenApprove BackersManagerRootstockCollective override this function to modify gauge rewardToken allowance @@ -550,10 +680,10 @@ event KYCApproved(address indexed builder_); event KYCRevoked(address indexed builder_); ``` -### Whitelisted +### CommunityApproved ```solidity -event Whitelisted(address indexed builder_); +event CommunityApproved(address indexed builder_); ``` ### Dewhitelisted @@ -586,10 +716,28 @@ event Revoked(address indexed builder_); event Permitted(address indexed builder_, uint256 rewardPercentage_, uint256 cooldown_); ``` -### BuilderRewardPercentageUpdateScheduled +### BackerRewardPercentageUpdateScheduled ```solidity -event BuilderRewardPercentageUpdateScheduled(address indexed builder_, uint256 rewardPercentage_, uint256 cooldown_); +event BackerRewardPercentageUpdateScheduled(address indexed builder_, uint256 rewardPercentage_, uint256 cooldown_); +``` + +### BuilderRewardReceiverReplacementRequested + +```solidity +event BuilderRewardReceiverReplacementRequested(address indexed builder_, address newRewardReceiver_); +``` + +### BuilderRewardReceiverReplacementCancelled + +```solidity +event BuilderRewardReceiverReplacementCancelled(address indexed builder_, address newRewardReceiver_); +``` + +### BuilderRewardReceiverReplacementApproved + +```solidity +event BuilderRewardReceiverReplacementApproved(address indexed builder_, address newRewardReceiver_); ``` ### GaugeCreated @@ -598,6 +746,12 @@ event BuilderRewardPercentageUpdateScheduled(address indexed builder_, uint256 r event GaugeCreated(address indexed builder_, address indexed gauge_, address creator_); ``` +### BuilderMigrated + +```solidity +event BuilderMigrated(address indexed builder_, address indexed migrator_); +``` + ## Errors ### AlreadyActivated @@ -612,10 +766,10 @@ error AlreadyActivated(); error AlreadyKYCApproved(); ``` -### AlreadyWhitelisted +### AlreadyCommunityApproved ```solidity -error AlreadyWhitelisted(); +error AlreadyCommunityApproved(); ``` ### AlreadyRevoked @@ -636,10 +790,10 @@ error NotActivated(); error NotKYCApproved(); ``` -### NotWhitelisted +### NotCommunityApproved ```solidity -error NotWhitelisted(); +error NotCommunityApproved(); ``` ### NotPaused @@ -654,28 +808,22 @@ error NotPaused(); error NotRevoked(); ``` -### IsRevoked - -```solidity -error IsRevoked(); -``` - -### CannotRevoke +### NotOperational ```solidity -error CannotRevoke(); +error NotOperational(); ``` -### NotOperational +### InvalidBackerRewardPercentage ```solidity -error NotOperational(); +error InvalidBackerRewardPercentage(); ``` -### InvalidBuilderRewardPercentage +### InvalidBuilderRewardReceiver ```solidity -error InvalidBuilderRewardPercentage(); +error InvalidBuilderRewardReceiver(); ``` ### BuilderAlreadyExists @@ -704,7 +852,7 @@ error GaugeDoesNotExist(); struct BuilderState { bool activated; bool kycApproved; - bool whitelisted; + bool communityApproved; bool paused; bool revoked; bytes7 reserved; diff --git a/docs/src/src/CycleTimeKeeperRootstockCollective.sol/abstract.CycleTimeKeeperRootstockCollective.md b/docs/src/src/CycleTimeKeeperRootstockCollective.sol/abstract.CycleTimeKeeperRootstockCollective.md index 3ae38cf3..67214313 100644 --- a/docs/src/src/CycleTimeKeeperRootstockCollective.sol/abstract.CycleTimeKeeperRootstockCollective.md +++ b/docs/src/src/CycleTimeKeeperRootstockCollective.sol/abstract.CycleTimeKeeperRootstockCollective.md @@ -1,18 +1,12 @@ # CycleTimeKeeperRootstockCollective -[Git Source](https://github.com/RootstockCollective/collective-rewards-sc/blob/0c4368dc418c200f21d2a798619d1dd68234c5c1/src/CycleTimeKeeperRootstockCollective.sol) +[Git Source](https://github.com/RootstockCollective/collective-rewards-sc/blob/6d0eca4e2c61e833bcb70c54d8668e5644ba180e/src/CycleTimeKeeperRootstockCollective.sol) **Inherits:** [UpgradeableRootstockCollective](/src/governance/UpgradeableRootstockCollective.sol/abstract.UpgradeableRootstockCollective.md) ## State Variables -### \_DISTRIBUTION_WINDOW - -```solidity -uint256 internal constant _DISTRIBUTION_WINDOW = 1 hours; -``` - ### cycleData cycle data @@ -21,6 +15,12 @@ cycle data CycleData public cycleData; ``` +### distributionDuration + +```solidity +uint32 public distributionDuration; +``` + ### \_\_gap _This empty reserved space is put in place to allow future versions to add new variables without shifting down storage @@ -32,6 +32,18 @@ uint256[50] private __gap; ## Functions +### onlyValidChangerOrFoundation + +```solidity +modifier onlyValidChangerOrFoundation(); +``` + +### onlyFoundation + +```solidity +modifier onlyFoundation(); +``` + ### constructor ```solidity @@ -49,7 +61,8 @@ the desired period_ function __CycleTimeKeeperRootstockCollective_init( IGovernanceManagerRootstockCollective governanceManager_, uint32 cycleDuration_, - uint24 cycleStartOffset_ + uint24 cycleStartOffset_, + uint32 distributionDuration_ ) internal onlyInitializing; @@ -57,11 +70,12 @@ function __CycleTimeKeeperRootstockCollective_init( **Parameters** -| Name | Type | Description | -| -------------------- | --------------------------------------- | --------------------------------------------------------------------------------- | -| `governanceManager_` | `IGovernanceManagerRootstockCollective` | contract with permissioned roles | -| `cycleDuration_` | `uint32` | Collective Rewards cycle time duration | -| `cycleStartOffset_` | `uint24` | offset to add to the first cycle, used to set an specific day to start the cycles | +| Name | Type | Description | +| ----------------------- | --------------------------------------- | --------------------------------------------------------------------------------- | +| `governanceManager_` | `IGovernanceManagerRootstockCollective` | contract with permissioned roles | +| `cycleDuration_` | `uint32` | Collective Rewards cycle time duration | +| `cycleStartOffset_` | `uint24` | offset to add to the first cycle, used to set an specific day to start the cycles | +| `distributionDuration_` | `uint32` | duration of the distribution window | ### setCycleDuration @@ -69,8 +83,10 @@ schedule a new cycle duration. It will be applied for the next cycle _reverts if is too short. It must be greater than 2 time the distribution window_ +_only callable by an authorized changer or the foundation_ + ```solidity -function setCycleDuration(uint32 newCycleDuration_, uint24 cycleStartOffset_) external onlyValidChanger; +function setCycleDuration(uint32 newCycleDuration_, uint24 cycleStartOffset_) external onlyValidChangerOrFoundation; ``` **Parameters** @@ -80,6 +96,28 @@ function setCycleDuration(uint32 newCycleDuration_, uint24 cycleStartOffset_) ex | `newCycleDuration_` | `uint32` | new cycle duration | | `cycleStartOffset_` | `uint24` | offset to add to the first cycle, used to set an specific day to start the cycles | +### setDistributionDuration + +set the duration of the distribution window + +_reverts if is too short. It must be greater than 0_ + +_reverts if the new distribution is greater than half of the cycle duration_ + +_reverts if the distribution window is modified during the distribution window_ + +_only callable by the foundation_ + +```solidity +function setDistributionDuration(uint32 newDistributionDuration_) external onlyFoundation; +``` + +**Parameters** + +| Name | Type | Description | +| -------------------------- | -------- | -------------------------------- | +| `newDistributionDuration_` | `uint32` | new distribution window duration | + ### cycleStart gets when an cycle starts based on given `timestamp_` @@ -169,6 +207,33 @@ the previous one function getCycleStartAndDuration() public view returns (uint256, uint256); ``` +### \_isValidDistributionToCycleRatio + +checks if the distribution and cycle duration are valid + +```solidity +function _isValidDistributionToCycleRatio( + uint32 distributionDuration_, + uint32 cycleDuration_ +) + internal + pure + returns (bool); +``` + +**Parameters** + +| Name | Type | Description | +| ----------------------- | -------- | ----------------------------------- | +| `distributionDuration_` | `uint32` | duration of the distribution window | +| `cycleDuration_` | `uint32` | cycle time duration | + +**Returns** + +| Name | Type | Description | +| -------- | ------ | ------------------------------------------------------------------------- | +| `` | `bool` | true if the distribution duration is less than half of the cycle duration | + ## Events ### NewCycleDurationScheduled @@ -177,24 +242,42 @@ function getCycleStartAndDuration() public view returns (uint256, uint256); event NewCycleDurationScheduled(uint256 newCycleDuration_, uint256 cooldownEndTime_); ``` +### NewDistributionDuration + +```solidity +event NewDistributionDuration(uint256 newDistributionDuration_, address by_); +``` + ## Errors +### NotValidChangerOrFoundation + +```solidity +error NotValidChangerOrFoundation(); +``` + ### CycleDurationTooShort ```solidity error CycleDurationTooShort(); ``` -### CycleDurationsAreNotMultiples +### DistributionDurationTooShort + +```solidity +error DistributionDurationTooShort(); +``` + +### DistributionDurationTooLong ```solidity -error CycleDurationsAreNotMultiples(); +error DistributionDurationTooLong(); ``` -### CycleDurationNotHourBasis +### DistributionModifiedDuringDistributionWindow ```solidity -error CycleDurationNotHourBasis(); +error DistributionModifiedDuringDistributionWindow(); ``` ## Structs diff --git a/docs/src/src/README.md b/docs/src/src/README.md index 29337aac..ba572e0b 100644 --- a/docs/src/src/README.md +++ b/docs/src/src/README.md @@ -4,7 +4,6 @@ - [governance](/src/governance) - [interfaces](/src/interfaces) - [libraries](/src/libraries) -- [mvp](/src/mvp) - [BackersManagerRootstockCollective](BackersManagerRootstockCollective.sol/contract.BackersManagerRootstockCollective.md) - [BuilderRegistryRootstockCollective](BuilderRegistryRootstockCollective.sol/abstract.BuilderRegistryRootstockCollective.md) - [CycleTimeKeeperRootstockCollective](CycleTimeKeeperRootstockCollective.sol/abstract.CycleTimeKeeperRootstockCollective.md) diff --git a/docs/src/src/RewardDistributorRootstockCollective.sol/contract.RewardDistributorRootstockCollective.md b/docs/src/src/RewardDistributorRootstockCollective.sol/contract.RewardDistributorRootstockCollective.md index a150299e..de0f0996 100644 --- a/docs/src/src/RewardDistributorRootstockCollective.sol/contract.RewardDistributorRootstockCollective.md +++ b/docs/src/src/RewardDistributorRootstockCollective.sol/contract.RewardDistributorRootstockCollective.md @@ -1,6 +1,6 @@ # RewardDistributorRootstockCollective -[Git Source](https://github.com/RootstockCollective/collective-rewards-sc/blob/0c4368dc418c200f21d2a798619d1dd68234c5c1/src/RewardDistributorRootstockCollective.sol) +[Git Source](https://github.com/RootstockCollective/collective-rewards-sc/blob/6d0eca4e2c61e833bcb70c54d8668e5644ba180e/src/RewardDistributorRootstockCollective.sol) **Inherits:** [UpgradeableRootstockCollective](/src/governance/UpgradeableRootstockCollective.sol/abstract.UpgradeableRootstockCollective.md) @@ -9,14 +9,6 @@ Accumulates all the rewards to be distributed for each cycle ## State Variables -### foundationTreasury - -foundation treasury address - -```solidity -address public foundationTreasury; -``` - ### rewardToken address of the token rewarded to builder and backers @@ -33,20 +25,20 @@ BackersManagerRootstockCollective contract address BackersManagerRootstockCollective public backersManager; ``` -### rewardTokenAmountPerCycle +### defaultRewardTokenAmount -tracks amount of reward tokens distributed per cycle +default reward token amount ```solidity -mapping(uint256 cycleTimestampStart => uint256 amount) public rewardTokenAmountPerCycle; +uint256 public defaultRewardTokenAmount; ``` -### rewardCoinbaseAmountPerCycle +### defaultRewardCoinbaseAmount -tracks amount of coinbase distributed per cycle +default reward coinbase amount ```solidity -mapping(uint256 cycleTimestampStart => uint256 amount) public rewardCoinbaseAmountPerCycle; +uint256 public defaultRewardCoinbaseAmount; ``` ### \_\_gap @@ -146,6 +138,49 @@ function sendRewardsAndStartDistribution( | `amountERC20_` | `uint256` | amount of ERC20 reward token to send | | `amountCoinbase_` | `uint256` | amount of Coinbase reward token to send | +### setDefaultRewardAmount + +sets the default reward amounts + +_reverts if is not called by foundation treasury address_ + +```solidity +function setDefaultRewardAmount( + uint256 tokenAmount_, + uint256 coinbaseAmount_ +) + external + payable + onlyFoundationTreasury; +``` + +**Parameters** + +| Name | Type | Description | +| ----------------- | --------- | ----------------------------------------------- | +| `tokenAmount_` | `uint256` | default amount of ERC20 reward token to send | +| `coinbaseAmount_` | `uint256` | default amount of Coinbase reward token to send | + +### sendRewardsWithDefaultAmount + +sends rewards to backersManager contract with default amounts + +_reverts if is not called by foundation treasury address_ + +```solidity +function sendRewardsWithDefaultAmount() external payable onlyFoundationTreasury; +``` + +### sendRewardsAndStartDistributionWithDefaultAmount + +sends rewards to backersManager contract with default amounts and starts the distribution + +_reverts if is not called by foundation treasury address_ + +```solidity +function sendRewardsAndStartDistributionWithDefaultAmount() external payable onlyFoundationTreasury; +``` + ### \_sendRewards internal function to send rewards to backersManager contract diff --git a/docs/src/src/gauge/GaugeBeaconRootstockCollective.sol/contract.GaugeBeaconRootstockCollective.md b/docs/src/src/gauge/GaugeBeaconRootstockCollective.sol/contract.GaugeBeaconRootstockCollective.md index cd13befe..fc34cb6a 100644 --- a/docs/src/src/gauge/GaugeBeaconRootstockCollective.sol/contract.GaugeBeaconRootstockCollective.md +++ b/docs/src/src/gauge/GaugeBeaconRootstockCollective.sol/contract.GaugeBeaconRootstockCollective.md @@ -1,6 +1,6 @@ # GaugeBeaconRootstockCollective -[Git Source](https://github.com/RootstockCollective/collective-rewards-sc/blob/0c4368dc418c200f21d2a798619d1dd68234c5c1/src/gauge/GaugeBeaconRootstockCollective.sol) +[Git Source](https://github.com/RootstockCollective/collective-rewards-sc/blob/6d0eca4e2c61e833bcb70c54d8668e5644ba180e/src/gauge/GaugeBeaconRootstockCollective.sol) **Inherits:** UpgradeableBeacon @@ -35,11 +35,9 @@ constructor( ### \_checkOwner -The owner is the governor but we need more flexibility to allow changes. So, ownable protected functions can be executed -also by an authorized changer executed by the governor +The owner is the governor but we need more flexibility to allow changes. -_Due we cannot override UpgradeableBeacon.sol to remove the OnlyOwner modifier on upgradeTo function we need to override -this function to allow upgrade the beacon by a changer_ +_We override \_checkOwner so that OnlyOwner modifier uses governanceManager to authorize the caller_ ```solidity function _checkOwner() internal view override; diff --git a/docs/src/src/gauge/GaugeFactoryRootstockCollective.sol/contract.GaugeFactoryRootstockCollective.md b/docs/src/src/gauge/GaugeFactoryRootstockCollective.sol/contract.GaugeFactoryRootstockCollective.md index dade34ca..21953fd0 100644 --- a/docs/src/src/gauge/GaugeFactoryRootstockCollective.sol/contract.GaugeFactoryRootstockCollective.md +++ b/docs/src/src/gauge/GaugeFactoryRootstockCollective.sol/contract.GaugeFactoryRootstockCollective.md @@ -1,6 +1,6 @@ # GaugeFactoryRootstockCollective -[Git Source](https://github.com/RootstockCollective/collective-rewards-sc/blob/0c4368dc418c200f21d2a798619d1dd68234c5c1/src/gauge/GaugeFactoryRootstockCollective.sol) +[Git Source](https://github.com/RootstockCollective/collective-rewards-sc/blob/6d0eca4e2c61e833bcb70c54d8668e5644ba180e/src/gauge/GaugeFactoryRootstockCollective.sol) ## State Variables diff --git a/docs/src/src/gauge/GaugeRootstockCollective.sol/contract.GaugeRootstockCollective.md b/docs/src/src/gauge/GaugeRootstockCollective.sol/contract.GaugeRootstockCollective.md index 618fe64c..e34dd04c 100644 --- a/docs/src/src/gauge/GaugeRootstockCollective.sol/contract.GaugeRootstockCollective.md +++ b/docs/src/src/gauge/GaugeRootstockCollective.sol/contract.GaugeRootstockCollective.md @@ -1,6 +1,6 @@ # GaugeRootstockCollective -[Git Source](https://github.com/RootstockCollective/collective-rewards-sc/blob/0c4368dc418c200f21d2a798619d1dd68234c5c1/src/gauge/GaugeRootstockCollective.sol) +[Git Source](https://github.com/RootstockCollective/collective-rewards-sc/blob/6d0eca4e2c61e833bcb70c54d8668e5644ba180e/src/gauge/GaugeRootstockCollective.sol) **Inherits:** ReentrancyGuardUpgradeable @@ -76,6 +76,16 @@ uint256[50] private __gap; modifier onlyBackersManager(); ``` +### minIncentiveAmount + +prevents spamming of incentives mechanism with low values to introduce errors + +_100 should cover any potential rounding errors_ + +```solidity +modifier minIncentiveAmount(uint256 amount_); +``` + ### constructor ```solidity @@ -182,6 +192,21 @@ function backerRewardPerTokenPaid(address rewardToken_, address backer_) public | `rewardToken_` | `address` | address of the token rewarded address(uint160(uint256(keccak256("COINBASE_ADDRESS")))) is used for coinbase address | | `backer_` | `address` | | +### estimatedBackerRewards + +gets the estimated amount of rewardToken left to earn for a backer in current cycle + +```solidity +function estimatedBackerRewards(address rewardToken_, address backer_) external view returns (uint256); +``` + +**Parameters** + +| Name | Type | Description | +| -------------- | --------- | ------------------------------------------------------------------------------------------------------------------- | +| `rewardToken_` | `address` | address of the token rewarded address(uint160(uint256(keccak256("COINBASE_ADDRESS")))) is used for coinbase address | +| `backer_` | `address` | address of the backer | + ### rewards gets amount of rewardToken earned for a backer @@ -379,7 +404,7 @@ transfers reward tokens to this contract to incentivize backers _reverts if Gauge is halted reverts if distribution for the cycle has not finished_ ```solidity -function incentivizeWithRewardToken(uint256 amount_) external; +function incentivizeWithRewardToken(uint256 amount_) external minIncentiveAmount(amount_); ``` **Parameters** @@ -395,7 +420,7 @@ transfers coinbase to this contract to incentivize backers _reverts if Gauge is halted reverts if distribution for the cycle has not finished_ ```solidity -function incentivizeWithCoinbase() external payable; +function incentivizeWithCoinbase() external payable minIncentiveAmount(msg.value); ``` ### notifyRewardAmountAndUpdateShares @@ -407,7 +432,7 @@ _reverts if caller is not the backersManager contract_ ```solidity function notifyRewardAmountAndUpdateShares( uint256 amountERC20_, - uint256 builderRewardPercentage_, + uint256 backerRewardPercentage_, uint256 periodFinish_, uint256 cycleStart_, uint256 cycleDuration_ @@ -420,13 +445,13 @@ function notifyRewardAmountAndUpdateShares( **Parameters** -| Name | Type | Description | -| -------------------------- | --------- | ---------------------------------------- | -| `amountERC20_` | `uint256` | amount of ERC20 rewards | -| `builderRewardPercentage_` | `uint256` | builder reward percentage percentage | -| `periodFinish_` | `uint256` | timestamp end of current rewards period | -| `cycleStart_` | `uint256` | Collective Rewards cycle start timestamp | -| `cycleDuration_` | `uint256` | Collective Rewards cycle time duration | +| Name | Type | Description | +| ------------------------- | --------- | ---------------------------------------- | +| `amountERC20_` | `uint256` | amount of ERC20 rewards | +| `backerRewardPercentage_` | `uint256` | backers reward percentage | +| `periodFinish_` | `uint256` | timestamp end of current rewards period | +| `cycleStart_` | `uint256` | Collective Rewards cycle start timestamp | +| `cycleDuration_` | `uint256` | Collective Rewards cycle time duration | **Returns** @@ -491,6 +516,20 @@ function _earned(address rewardToken_, address backer_, uint256 periodFinish_) i | `backer_` | `address` | address who earned the rewards | | `periodFinish_` | `uint256` | timestamp end of current rewards period | +### \_left + +gets total amount of rewards to distribute for the current rewards period + +```solidity +function _left(address rewardToken_) internal view returns (uint256); +``` + +**Parameters** + +| Name | Type | Description | +| -------------- | --------- | ------------------------------------------------------------------------------------------------------------------- | +| `rewardToken_` | `address` | address of the token rewarded address(uint160(uint256(keccak256("COINBASE_ADDRESS")))) is used for coinbase address | + ### \_notifyRewardAmount transfers reward tokens to this contract @@ -636,6 +675,12 @@ error GaugeHalted(); error BeforeDistribution(); ``` +### NotEnoughAmount + +```solidity +error NotEnoughAmount(); +``` + ## Structs ### RewardData diff --git a/docs/src/src/governance/GovernanceManagerRootstockCollective.sol/contract.GovernanceManagerRootstockCollective.md b/docs/src/src/governance/GovernanceManagerRootstockCollective.sol/contract.GovernanceManagerRootstockCollective.md index b4afd6c7..3890a4e5 100644 --- a/docs/src/src/governance/GovernanceManagerRootstockCollective.sol/contract.GovernanceManagerRootstockCollective.md +++ b/docs/src/src/governance/GovernanceManagerRootstockCollective.sol/contract.GovernanceManagerRootstockCollective.md @@ -1,6 +1,6 @@ # GovernanceManagerRootstockCollective -[Git Source](https://github.com/RootstockCollective/collective-rewards-sc/blob/0c4368dc418c200f21d2a798619d1dd68234c5c1/src/governance/GovernanceManagerRootstockCollective.sol) +[Git Source](https://github.com/RootstockCollective/collective-rewards-sc/blob/6d0eca4e2c61e833bcb70c54d8668e5644ba180e/src/governance/GovernanceManagerRootstockCollective.sol) **Inherits:** UUPSUpgradeable, [IGovernanceManagerRootstockCollective](/src/interfaces/IGovernanceManagerRootstockCollective.sol/interface.IGovernanceManagerRootstockCollective.md) @@ -9,6 +9,8 @@ This contract manages governance addresses. It also allows the governor to execute contracts that implement the IChangeContractRootstockCollective interface. +_Complete documentation is provided in the IGovernanceManagerRootstockCollective interface_ + _This contract is upgradeable via the UUPS proxy pattern._ ## State Variables @@ -45,6 +47,14 @@ The address of the KYC approver. address public kycApprover; ``` +### upgrader + +The upgrader address with contract upgradeability permissions + +```solidity +address public upgrader; +``` + ### \_\_gap _This empty reserved space is put in place to allow future versions to add new variables without shifting down storage @@ -68,10 +78,16 @@ modifier onlyValidAddress(address account_); modifier onlyGovernor(); ``` -### onlyValidChanger +### onlyAuthorizedUpgrader ```solidity -modifier onlyValidChanger(); +modifier onlyAuthorizedUpgrader(); +``` + +### onlyAuthorizedChanger + +```solidity +modifier onlyAuthorizedChanger(); ``` ### constructor @@ -84,220 +100,115 @@ constructor(); ### initialize -Initializes the contract with the initial governor, foundation treasury, and KYC approver. - -_Used instead of a constructor for upgradeable contracts._ - ```solidity -function initialize(address governor_, address foundationTreasury_, address kycApprover_) public initializer; +function initialize( + address governor_, + address foundationTreasury_, + address kycApprover_, + address upgrader_ +) + public + initializer; ``` -**Parameters** - -| Name | Type | Description | -| --------------------- | --------- | ---------------------------------------- | -| `governor_` | `address` | The initial governor address. | -| `foundationTreasury_` | `address` | The initial foundation treasury address. | -| `kycApprover_` | `address` | The initial KYC approver address. | - ### executeChange -Function to be called to make the changes in changeContract - -_reverts if is not called by the Governor_ - ```solidity function executeChange(IChangeContractRootstockCollective changeContract_) external onlyGovernor; ``` -**Parameters** - -| Name | Type | Description | -| ----------------- | ------------------------------------ | ----------------------------------------------------- | -| `changeContract_` | `IChangeContractRootstockCollective` | Address of the contract that will execute the changes | - ### updateGovernor -Allows the governor to update its own role to a new address. - -_Reverts if caller is not the current governor._ - ```solidity -function updateGovernor(address governor_) public onlyValidChanger; +function updateGovernor(address governor_) public onlyAuthorizedChanger; ``` -**Parameters** - -| Name | Type | Description | -| ----------- | --------- | ------------------------- | -| `governor_` | `address` | The new governor address. | - ### updateFoundationTreasury -Allows the governor to update the foundation treasury address. - -_Only callable by the governor. Reverts if the new address is invalid._ - ```solidity -function updateFoundationTreasury(address foundationTreasury_) public onlyValidChanger; +function updateFoundationTreasury(address foundationTreasury_) public onlyAuthorizedChanger; ``` -**Parameters** - -| Name | Type | Description | -| --------------------- | --------- | ------------------------------------ | -| `foundationTreasury_` | `address` | The new foundation treasury address. | - ### updateKYCApprover -Allows the governor to update the KYC approver address. - -_Only callable by the governor. Reverts if the new address is invalid._ - ```solidity -function updateKYCApprover(address kycApprover_) public onlyValidChanger; +function updateKYCApprover(address kycApprover_) public onlyAuthorizedChanger; ``` -**Parameters** +### updateUpgrader -| Name | Type | Description | -| -------------- | --------- | ----------------------------- | -| `kycApprover_` | `address` | The new KYC approver address. | +```solidity +function updateUpgrader(address upgrader_) public; +``` ### validateGovernor -Validates if an account is authorized as the governor. - -_Reverts with `NotGovernor` if the account is not the governor._ - ```solidity function validateGovernor(address account_) external view; ``` -**Parameters** - -| Name | Type | Description | -| ---------- | --------- | ---------------------------- | -| `account_` | `address` | The address to be validated. | - -### validateChanger - -Validates if an account is authorized to perform changes. - -_Reverts with `NotAuthorizedChanger` if the account is not the authorized changer or governor._ +### validateAuthorizedChanger ```solidity -function validateChanger(address account_) public view; +function validateAuthorizedChanger(address account_) public view; ``` -**Parameters** +### validateAuthorizedUpgrader -| Name | Type | Description | -| ---------- | --------- | ---------------------------- | -| `account_` | `address` | The address to be validated. | +```solidity +function validateAuthorizedUpgrader(address account_) public view; +``` ### validateKycApprover -Validates if an account is authorized as the KYC approver. - -_Reverts with `NotKycApprover` if the account is not the KYC approver._ - ```solidity function validateKycApprover(address account_) external view; ``` -**Parameters** - -| Name | Type | Description | -| ---------- | --------- | ---------------------------- | -| `account_` | `address` | The address to be validated. | - ### validateFoundationTreasury -Validates if the caller is the foundation treasury. - -_Reverts with `NotFoundationTreasury` if the caller is not the foundation treasury._ - ```solidity function validateFoundationTreasury(address account_) external view; ``` -### \_updateGovernor +### isAuthorizedChanger -_Updates the governor address._ +```solidity +function isAuthorizedChanger(address account_) public view returns (bool); +``` -_Reverts if the new address is invalid (zero address)._ +### \_updateGovernor ```solidity function _updateGovernor(address governor_) private onlyValidAddress(governor_); ``` -**Parameters** - -| Name | Type | Description | -| ----------- | --------- | ------------------------- | -| `governor_` | `address` | The new governor address. | - ### \_updateFoundationTreasury -_Updates the foundation treasury address._ - -_Reverts if the new address is invalid (zero address)._ - ```solidity function _updateFoundationTreasury(address foundationTreasury_) private onlyValidAddress(foundationTreasury_); ``` -**Parameters** - -| Name | Type | Description | -| --------------------- | --------- | ------------------------------------ | -| `foundationTreasury_` | `address` | The new foundation treasury address. | - ### \_updateKYCApprover -_Updates the KYC approver address._ - -_Reverts if the new address is invalid (zero address)._ - ```solidity function _updateKYCApprover(address kycApprover_) private onlyValidAddress(kycApprover_); ``` -**Parameters** +### \_updateUpgrader -| Name | Type | Description | -| -------------- | --------- | ----------------------------- | -| `kycApprover_` | `address` | The new KYC approver address. | +```solidity +function _updateUpgrader(address upgrader_) private; +``` ### \_authorizeChanger -Assigns a new authorized changer. - -_Allows zero address to be set to remove the current authorized changer_ - ```solidity function _authorizeChanger(address authorizedChanger_) internal; ``` -**Parameters** - -| Name | Type | Description | -| -------------------- | --------- | ----------------------------------- | -| `authorizedChanger_` | `address` | The new authorized changer address. | - ### \_authorizeUpgrade -Authorizes an upgrade to a new contract implementation. - -_Only callable by the governor._ - ```solidity -function _authorizeUpgrade(address newImplementation_) internal override onlyValidChanger; +function _authorizeUpgrade(address newImplementation_) internal override onlyAuthorizedUpgrader; ``` - -**Parameters** - -| Name | Type | Description | -| -------------------- | --------- | ----------------------------------------------- | -| `newImplementation_` | `address` | The address of the new implementation contract. | diff --git a/docs/src/src/governance/UpgradeableRootstockCollective.sol/abstract.UpgradeableRootstockCollective.md b/docs/src/src/governance/UpgradeableRootstockCollective.sol/abstract.UpgradeableRootstockCollective.md index e9b79048..eb17e3e7 100644 --- a/docs/src/src/governance/UpgradeableRootstockCollective.sol/abstract.UpgradeableRootstockCollective.md +++ b/docs/src/src/governance/UpgradeableRootstockCollective.sol/abstract.UpgradeableRootstockCollective.md @@ -1,6 +1,6 @@ # UpgradeableRootstockCollective -[Git Source](https://github.com/RootstockCollective/collective-rewards-sc/blob/0c4368dc418c200f21d2a798619d1dd68234c5c1/src/governance/UpgradeableRootstockCollective.sol) +[Git Source](https://github.com/RootstockCollective/collective-rewards-sc/blob/6d0eca4e2c61e833bcb70c54d8668e5644ba180e/src/governance/UpgradeableRootstockCollective.sol) **Inherits:** UUPSUpgradeable @@ -34,6 +34,12 @@ uint256[50] private __gap; modifier onlyValidChanger(); ``` +### onlyAuthorizedUpgrader + +```solidity +modifier onlyAuthorizedUpgrader(); +``` + ### \_\_Upgradeable_init contract initializer @@ -54,5 +60,5 @@ _checks that the changer that will do the upgrade is currently authorized by gov system_ ```solidity -function _authorizeUpgrade(address) internal override onlyValidChanger; +function _authorizeUpgrade(address) internal override onlyAuthorizedUpgrader; ``` diff --git a/docs/src/src/governance/changerTemplates/CommunityApproveBuilderChangerTemplateRootstockCollective.sol/contract.CommunityApproveBuilderChangerTemplateRootstockCollective.md b/docs/src/src/governance/changerTemplates/CommunityApproveBuilderChangerTemplateRootstockCollective.sol/contract.CommunityApproveBuilderChangerTemplateRootstockCollective.md new file mode 100644 index 00000000..ba2fa887 --- /dev/null +++ b/docs/src/src/governance/changerTemplates/CommunityApproveBuilderChangerTemplateRootstockCollective.sol/contract.CommunityApproveBuilderChangerTemplateRootstockCollective.md @@ -0,0 +1,62 @@ +# CommunityApproveBuilderChangerTemplateRootstockCollective + +[Git Source](https://github.com/RootstockCollective/collective-rewards-sc/blob/6d0eca4e2c61e833bcb70c54d8668e5644ba180e/src/governance/changerTemplates/CommunityApproveBuilderChangerTemplateRootstockCollective.sol) + +**Inherits:** +[IChangeContractRootstockCollective](/src/interfaces/IChangeContractRootstockCollective.sol/interface.IChangeContractRootstockCollective.md) + +ChangeContract used to community approve a builder and create its Gauger contract + +## State Variables + +### backersManager + +BackersManagerRootstockCollective contract address + +```solidity +BackersManagerRootstockCollective public immutable backersManager; +``` + +### builder + +builder address to be community approved + +```solidity +address public immutable builder; +``` + +### newGauge + +new Gauge created; + +```solidity +GaugeRootstockCollective public newGauge; +``` + +## Functions + +### constructor + +Constructor + +```solidity +constructor(BackersManagerRootstockCollective backersManager_, address builder_); +``` + +**Parameters** + +| Name | Type | Description | +| ----------------- | ----------------------------------- | ------------------------------------- | +| `backersManager_` | `BackersManagerRootstockCollective` | Address of the BackersManger contract | +| `builder_` | `address` | Address of the builder | + +### execute + +Execute the changes. + +_Should be called by the governor, but this contract does not check that explicitly because it is not its responsibility +in the current architecture_ + +```solidity +function execute() external; +``` diff --git a/docs/src/src/governance/changerTemplates/README.md b/docs/src/src/governance/changerTemplates/README.md index 33bf0711..eacf80e0 100644 --- a/docs/src/src/governance/changerTemplates/README.md +++ b/docs/src/src/governance/changerTemplates/README.md @@ -1,3 +1,3 @@ # Contents -- [WhitelistBuilderChangerTemplateRootstockCollective](WhitelistBuilderChangerTemplateRootstockCollective.sol/contract.WhitelistBuilderChangerTemplateRootstockCollective.md) +- [CommunityApproveBuilderChangerTemplateRootstockCollective](CommunityApproveBuilderChangerTemplateRootstockCollective.sol/contract.CommunityApproveBuilderChangerTemplateRootstockCollective.md) diff --git a/docs/src/src/interfaces/IBackersManagerRootstockCollective.sol/interface.IBackersManagerRootstockCollective.md b/docs/src/src/interfaces/IBackersManagerRootstockCollective.sol/interface.IBackersManagerRootstockCollective.md index 5d819bf4..d7480d22 100644 --- a/docs/src/src/interfaces/IBackersManagerRootstockCollective.sol/interface.IBackersManagerRootstockCollective.md +++ b/docs/src/src/interfaces/IBackersManagerRootstockCollective.sol/interface.IBackersManagerRootstockCollective.md @@ -1,6 +1,6 @@ # IBackersManagerRootstockCollective -[Git Source](https://github.com/RootstockCollective/collective-rewards-sc/blob/0c4368dc418c200f21d2a798619d1dd68234c5c1/src/interfaces/IBackersManagerRootstockCollective.sol) +[Git Source](https://github.com/RootstockCollective/collective-rewards-sc/blob/6d0eca4e2c61e833bcb70c54d8668e5644ba180e/src/interfaces/IBackersManagerRootstockCollective.sol) ## Functions @@ -28,6 +28,14 @@ returns rewards receiver for a given builder function builderRewardReceiver(address builder_) external view returns (address rewardReceiver_); ``` +### hasBuilderRewardReceiverPendingApproval + +returns true if the builder has an open request to replace his receiver address + +```solidity +function hasBuilderRewardReceiverPendingApproval(address builder_) external view returns (bool); +``` + ### isBuilderPaused return true if builder is paused diff --git a/docs/src/src/interfaces/IChangeContractRootstockCollective.sol/interface.IChangeContractRootstockCollective.md b/docs/src/src/interfaces/IChangeContractRootstockCollective.sol/interface.IChangeContractRootstockCollective.md index 177d0908..0f1162f6 100644 --- a/docs/src/src/interfaces/IChangeContractRootstockCollective.sol/interface.IChangeContractRootstockCollective.md +++ b/docs/src/src/interfaces/IChangeContractRootstockCollective.sol/interface.IChangeContractRootstockCollective.md @@ -1,6 +1,6 @@ # IChangeContractRootstockCollective -[Git Source](https://github.com/RootstockCollective/collective-rewards-sc/blob/0c4368dc418c200f21d2a798619d1dd68234c5c1/src/interfaces/IChangeContractRootstockCollective.sol) +[Git Source](https://github.com/RootstockCollective/collective-rewards-sc/blob/6d0eca4e2c61e833bcb70c54d8668e5644ba180e/src/interfaces/IChangeContractRootstockCollective.sol) This interface is the one used by the governance system. diff --git a/docs/src/src/interfaces/ICollectiveRewardsCheckRootstockCollective.sol/interface.ICollectiveRewardsCheckRootstockCollective.md b/docs/src/src/interfaces/ICollectiveRewardsCheckRootstockCollective.sol/interface.ICollectiveRewardsCheckRootstockCollective.md index 2c856b22..a6791711 100644 --- a/docs/src/src/interfaces/ICollectiveRewardsCheckRootstockCollective.sol/interface.ICollectiveRewardsCheckRootstockCollective.md +++ b/docs/src/src/interfaces/ICollectiveRewardsCheckRootstockCollective.sol/interface.ICollectiveRewardsCheckRootstockCollective.md @@ -1,6 +1,6 @@ # ICollectiveRewardsCheckRootstockCollective -[Git Source](https://github.com/RootstockCollective/collective-rewards-sc/blob/0c4368dc418c200f21d2a798619d1dd68234c5c1/src/interfaces/ICollectiveRewardsCheckRootstockCollective.sol) +[Git Source](https://github.com/RootstockCollective/collective-rewards-sc/blob/6d0eca4e2c61e833bcb70c54d8668e5644ba180e/src/interfaces/ICollectiveRewardsCheckRootstockCollective.sol) Used by stakingToken to validate if the staker can transfer its tokens diff --git a/docs/src/src/interfaces/IGovernanceManagerRootstockCollective.sol/interface.IGovernanceManagerRootstockCollective.md b/docs/src/src/interfaces/IGovernanceManagerRootstockCollective.sol/interface.IGovernanceManagerRootstockCollective.md index de471fae..8c1c30a7 100644 --- a/docs/src/src/interfaces/IGovernanceManagerRootstockCollective.sol/interface.IGovernanceManagerRootstockCollective.md +++ b/docs/src/src/interfaces/IGovernanceManagerRootstockCollective.sol/interface.IGovernanceManagerRootstockCollective.md @@ -1,6 +1,6 @@ # IGovernanceManagerRootstockCollective -[Git Source](https://github.com/RootstockCollective/collective-rewards-sc/blob/0c4368dc418c200f21d2a798619d1dd68234c5c1/src/interfaces/IGovernanceManagerRootstockCollective.sol) +[Git Source](https://github.com/RootstockCollective/collective-rewards-sc/blob/6d0eca4e2c61e833bcb70c54d8668e5644ba180e/src/interfaces/IGovernanceManagerRootstockCollective.sol) ## Functions @@ -11,7 +11,7 @@ Initializes the contract with the initial governor, foundation treasury, and KYC _Used instead of a constructor for upgradeable contracts._ ```solidity -function initialize(address governor_, address foundationTreasury_, address kycApprover_) external; +function initialize(address governor_, address foundationTreasury_, address kycApprover_, address upgrader_) external; ``` **Parameters** @@ -21,10 +21,11 @@ function initialize(address governor_, address foundationTreasury_, address kycA | `governor_` | `address` | The initial governor address. | | `foundationTreasury_` | `address` | The initial foundation treasury address. | | `kycApprover_` | `address` | account responsible of approving Builder's Know you Costumer policies and Legal requirements | +| `upgrader_` | `address` | The initial upgrader address. | ### executeChange -Function to be called to make the changes in changeContract +Function to be called to execute the changes in changeContract _reverts if is not called by the Governor_ @@ -80,14 +81,14 @@ function kycApprover() external view returns (address); | -------- | --------- | ------------------------- | | `` | `address` | The KYC approver address. | -### validateChanger +### validateAuthorizedChanger Validates if the given account is authorized as a changer _Reverts with `NotAuthorizedChanger` if the account is not the authorized changer._ ```solidity -function validateChanger(address account_) external view; +function validateAuthorizedChanger(address account_) external view; ``` **Parameters** @@ -132,7 +133,7 @@ function validateKycApprover(address account_) external view; Validates if the given account is the foundation treasury. -_Reverts with `NotFoundationTreasury` if the account is not the foundation treasury._ +_Reverts with `NotFoundationTreasury` if the caller is not the foundation treasury._ ```solidity function validateFoundationTreasury(address account_) external view; @@ -144,27 +145,47 @@ function validateFoundationTreasury(address account_) external view; | ---------- | --------- | ------------------------------------------------------- | | `account_` | `address` | The address to be validated as the foundation treasury. | +### validateAuthorizedUpgrader + +Validates if the given account is authorized to upgrade the contracts. + +_Reverts with `NotAuthorizedUpgrader` if the account is not the upgrader._ + +```solidity +function validateAuthorizedUpgrader(address account_) external view; +``` + +**Parameters** + +| Name | Type | Description | +| ---------- | --------- | ---------------------------- | +| `account_` | `address` | The address to be validated. | + ### updateGovernor -Updates the governor +Updates the governor address -_Only callable by the current governor. Reverts with `NotGovernor` if called by someone else._ +_Reverts if caller is not a valid changer._ + +_Reverts if the new address is zero._ ```solidity -function updateGovernor(address newGovernor_) external; +function updateGovernor(address governor_) external; ``` **Parameters** -| Name | Type | Description | -| -------------- | --------- | ------------------------------------------ | -| `newGovernor_` | `address` | The new address to be set as the governor. | +| Name | Type | Description | +| ----------- | --------- | ------------------------- | +| `governor_` | `address` | The new governor address. | ### updateFoundationTreasury -Updates the foundation treasury +Updates the foundation treasury address + +_Reverts if caller is not a valid changer._ -_Only callable by the governor. Reverts with `NotGovernor` if called by someone else._ +_Reverts if the new address is zero._ ```solidity function updateFoundationTreasury(address foundationTreasury_) external; @@ -172,15 +193,17 @@ function updateFoundationTreasury(address foundationTreasury_) external; **Parameters** -| Name | Type | Description | -| --------------------- | --------- | ----------------------------------------------------- | -| `foundationTreasury_` | `address` | The new address to be set as the foundation treasury. | +| Name | Type | Description | +| --------------------- | --------- | ------------------------------------ | +| `foundationTreasury_` | `address` | The new foundation treasury address. | ### updateKYCApprover -Updates the KYC approver +Updates the KYC approver address -_Only callable by the governor. Reverts with `NotGovernor` if called by someone else._ +_Reverts if caller is not a valid changer._ + +_Reverts if the new address is zero._ ```solidity function updateKYCApprover(address kycApprover_) external; @@ -192,6 +215,72 @@ function updateKYCApprover(address kycApprover_) external; | -------------- | --------- | ---------------------------------------------- | | `kycApprover_` | `address` | The new address to be set as the KYC approver. | +### isAuthorizedChanger + +Validates if the given account is authorized as a changer + +_Reverts with `NotAuthorizedChanger` if the account is not the authorized changer._ + +```solidity +function isAuthorizedChanger(address account_) external view returns (bool); +``` + +**Parameters** + +| Name | Type | Description | +| ---------- | --------- | ------------------------------------------- | +| `account_` | `address` | The address to be validated as the changer. | + +### updateUpgrader + +_Updates the account authorized to upgrade the contracts_ + +_Reverts if caller is the upgrader._ + +_allow update to zero address to disable the upgrader role_ + +```solidity +function updateUpgrader(address upgrader_) external; +``` + +**Parameters** + +| Name | Type | Description | +| ----------- | --------- | ------------------------- | +| `upgrader_` | `address` | The new upgrader address. | + +## Events + +### GovernorUpdated + +```solidity +event GovernorUpdated(address governor_, address updatedBy_); +``` + +### FoundationTreasuryUpdated + +```solidity +event FoundationTreasuryUpdated(address foundationTreasury_, address updatedBy_); +``` + +### KycApproverUpdated + +```solidity +event KycApproverUpdated(address kycApprover_, address updatedBy_); +``` + +### UpgraderUpdated + +```solidity +event UpgraderUpdated(address upgrader_, address updatedBy_); +``` + +### ChangeExecuted + +```solidity +event ChangeExecuted(IChangeContractRootstockCollective changeContract_, address executor_); +``` + ## Errors ### InvalidAddress @@ -239,3 +328,19 @@ Thrown when the caller is not the KYC approver. ```solidity error NotKycApprover(); ``` + +### NotAuthorizedUpgrader + +Thrown when the caller is not authorized to upgrade the contracts + +```solidity +error NotAuthorizedUpgrader(); +``` + +### NotUpgrader + +Thrown when the caller is not the upgrader. + +```solidity +error NotUpgrader(); +``` diff --git a/docs/src/src/libraries/UtilsLib.sol/library.UtilsLib.md b/docs/src/src/libraries/UtilsLib.sol/library.UtilsLib.md index bf888cea..187f451c 100644 --- a/docs/src/src/libraries/UtilsLib.sol/library.UtilsLib.md +++ b/docs/src/src/libraries/UtilsLib.sol/library.UtilsLib.md @@ -1,6 +1,6 @@ # UtilsLib -[Git Source](https://github.com/RootstockCollective/collective-rewards-sc/blob/0c4368dc418c200f21d2a798619d1dd68234c5c1/src/libraries/UtilsLib.sol) +[Git Source](https://github.com/RootstockCollective/collective-rewards-sc/blob/6d0eca4e2c61e833bcb70c54d8668e5644ba180e/src/libraries/UtilsLib.sol) ## State Variables @@ -16,6 +16,12 @@ uint256 internal constant _PRECISION = 10 ** 18; address internal constant _COINBASE_ADDRESS = address(uint160(uint256(keccak256("COINBASE_ADDRESS")))); ``` +### MIN_AMOUNT_INCENTIVES + +```solidity +uint256 public constant MIN_AMOUNT_INCENTIVES = 100; +``` + ## Functions ### \_uncheckedInc diff --git a/package.json b/package.json index e1beb83a..05550867 100644 --- a/package.json +++ b/package.json @@ -58,11 +58,12 @@ "lint:sol:src": "solhint '{src,script,mock}/**/*.sol' test/BaseTest.sol", "lint:sol:test": "solhint --config .solhint.test.json 'test/**/*.t.sol'", "lint:md": "markdownlint-cli2 .", + "lint:md:fix": "markdownlint-cli2 . --fix", "lint:js": "eslint --config utils/solhint-plugin/.eslintrc.js.yml utils/solhint-plugin --ext .js", "lint:ts": "eslint --config .eslintrc.ts.yml . --ext .ts", "lint:ts:fix": "eslint . --ext .ts --fix", - "prettier:check": "prettier --check \"**/*.{json,md,yml,ts}\" --ignore-path \".prettierignore\" && prettier --check \"utils/solhint-plugin/**/*.js\" && forge fmt --check", - "prettier:write": "prettier --write \"**/*.{json,md,yml,ts}\" --ignore-path \".prettierignore\" && prettier --write \"utils/solhint-plugin/**/*.js\" && forge fmt", + "prettier:check": "prettier --check \"**/*.{json,yml,ts}\" --ignore-path \".prettierignore\" && prettier --check \"utils/solhint-plugin/**/*.js\" && forge fmt --check", + "prettier:write": "prettier --write \"**/*.{json,yml,ts}\" --ignore-path \".prettierignore\" && prettier --write \"utils/solhint-plugin/**/*.js\" && forge fmt", "test": "forge test --no-match-test '(testFuzz|invariant)'", "test:fuzz": "forge test --match-test testFuzz", "test:invariant": "forge test --match-test invariant", diff --git a/script/Deploy.s.sol b/script/Deploy.s.sol index 75f45bac..59d940e6 100644 --- a/script/Deploy.s.sol +++ b/script/Deploy.s.sol @@ -84,6 +84,7 @@ contract Deploy is Broadcaster, OutputWriter { ); saveWithProxy("BackersManagerRootstockCollective", address(_backersManagerImpl), address(_backersManagerProxy)); + vm.broadcast(); _rewardDistributorProxy.initializeCollectiveRewardsAddresses(address(_backersManagerProxy)); } } diff --git a/script/RewardDistributorRootstockCollective.s.sol b/script/RewardDistributorRootstockCollective.s.sol index 5bd034a5..b3e432fb 100644 --- a/script/RewardDistributorRootstockCollective.s.sol +++ b/script/RewardDistributorRootstockCollective.s.sol @@ -11,14 +11,14 @@ contract Deploy is Broadcaster { public returns (RewardDistributorRootstockCollective proxy_, RewardDistributorRootstockCollective implementation_) { - address _governanceManager = vm.envOr("GovernanceManagerRootstockCollective", address(0)); + address _governanceManager = vm.envOr("GovernanceManagerRootstockCollectiveProxy", address(0)); if (_governanceManager == address(0)) { _governanceManager = vm.envAddress("GOVERNANCE_MANAGER_ADDRESS"); } (proxy_, implementation_) = run(_governanceManager); - address _backersManagerAddress = vm.envOr("BackersManagerRootstockCollective", address(0)); + address _backersManagerAddress = vm.envOr("BackersManagerRootstockCollectiveProxy", address(0)); if (_backersManagerAddress == address(0)) { _backersManagerAddress = vm.envAddress("BACKERS_MANAGER_ADDRESS"); } diff --git a/src/BackersManagerRootstockCollective.sol b/src/BackersManagerRootstockCollective.sol index 17d05783..36af0403 100644 --- a/src/BackersManagerRootstockCollective.sol +++ b/src/BackersManagerRootstockCollective.sol @@ -93,7 +93,7 @@ contract BackersManagerRootstockCollective is /** * @notice contract initializer * @param governanceManager_ contract with permissioned roles - * @param rewardToken_ address of the token rewarded to builder and voters + * @param rewardToken_ address of the token rewarded to builder and voters, only standard ERC20 MUST be used * @param stakingToken_ address of the staking token for builder and voters * @param gaugeFactory_ address of the GaugeFactoryRootstockCollective contract * @param rewardDistributor_ address of the rewardDistributor contract diff --git a/src/gauge/GaugeRootstockCollective.sol b/src/gauge/GaugeRootstockCollective.sol index 302fda17..4ef35221 100644 --- a/src/gauge/GaugeRootstockCollective.sol +++ b/src/gauge/GaugeRootstockCollective.sol @@ -99,7 +99,7 @@ contract GaugeRootstockCollective is ReentrancyGuardUpgradeable { /** * @notice contract initializer - * @param rewardToken_ address of the token rewarded to builder and voters + * @param rewardToken_ address of the token rewarded to builder and voters, only standard ERC20 MUST be used * @param backersManager_ address of the BackersManagerRootstockCollective contract */ function initialize(address rewardToken_, address backersManager_) external initializer { diff --git a/test/BackersManagerRootstockCollective.t.sol b/test/BackersManagerRootstockCollective.t.sol index 24480854..8bd15ab3 100644 --- a/test/BackersManagerRootstockCollective.t.sol +++ b/test/BackersManagerRootstockCollective.t.sol @@ -387,6 +387,20 @@ contract BackersManagerRootstockCollectiveTest is BaseTest { assertEq(address(backersManager).balance, 0); } + /** + * SCENARIO: notifyRewardAmount is called with zero value - should not revert and rewards don't change + */ + function test_NotifyRewardAmountZeroValue() public { + // GIVEN a BackersManager contract + // WHEN 0 ether in rewardToken and 0 coinbase are added + // THEN it does not revert and rewards don't change + backersManager.notifyRewardAmount(0 ether); + // THEN reward for reward token is 0 ether + assertEq(backersManager.rewardsERC20(), 0 ether); + // THEN Coinbase reward is 0 + assertEq(backersManager.rewardsCoinbase(), 0); + } + /** * SCENARIO: notifyRewardAmount reverts when there are no active gauges */ @@ -516,7 +530,7 @@ contract BackersManagerRootstockCollectiveTest is BaseTest { } /** - * SCENARIO: should revert is distribution window did not start + * SCENARIO: should revert if distribution window did not start */ function test_RevertOnlyInDistributionWindow() public { // GIVEN a BackerManager contract diff --git a/test/BuilderRegistryRootstockCollective.t.sol b/test/BuilderRegistryRootstockCollective.t.sol index 8e2226d5..20332bab 100644 --- a/test/BuilderRegistryRootstockCollective.t.sol +++ b/test/BuilderRegistryRootstockCollective.t.sol @@ -105,20 +105,31 @@ contract BuilderRegistryRootstockCollectiveTest is BaseTest { // GIVEN a new builder address _newBuilder = makeAddr("newBuilder"); address _newRewardReceiver = makeAddr("newRewardReceiver"); + uint64 _backerRewardPercentage = 0.1 ether; // AND a kycApprover vm.prank(kycApprover); // WHEN calls activateBuilder // THEN BuilderActivated event is emitted vm.expectEmit(); - emit BuilderActivated(_newBuilder, _newRewardReceiver, 0.1 ether); - backersManager.activateBuilder(_newBuilder, _newRewardReceiver, 0.1 ether); + emit BuilderActivated(_newBuilder, _newRewardReceiver, _backerRewardPercentage); + backersManager.activateBuilder(_newBuilder, _newRewardReceiver, _backerRewardPercentage); // THEN builder is kycApproved - (, bool _kycApproved,,,,,) = backersManager.builderState(_newBuilder); + (, bool _kycApproved, bool _communityApproved,,,,) = backersManager.builderState(_newBuilder); assertEq(_kycApproved, true); + // THEN builder is not community approved + assertEq(_communityApproved, false); // THEN builder rewards receiver is set assertEq(backersManager.builderRewardReceiver(_newBuilder), _newRewardReceiver); + + (uint64 _previous, uint64 _next, uint128 _cooldownEndTime) = backersManager.backerRewardPercentage(_newBuilder); + // THEN previous backer reward percentage is 10% + assertEq(_previous, _backerRewardPercentage); + // THEN next backer reward percentage is 10% + assertEq(_next, _backerRewardPercentage); + // THEN backer reward percentage cooldown end time is the current block time + assertEq(_cooldownEndTime, block.timestamp); } /** diff --git a/test/GaugeRootstockCollective.t.sol b/test/GaugeRootstockCollective.t.sol index 7f6d125d..37152bb8 100644 --- a/test/GaugeRootstockCollective.t.sol +++ b/test/GaugeRootstockCollective.t.sol @@ -926,6 +926,78 @@ contract GaugeRootstockCollectiveTest is BaseTest { assertEq(builder.balance, 70 ether); } + /** + * SCENARIO: builder claims his rewards at any time during the cycle by asset receiving the total rewards of the + * asset claimed. + */ + function test_ClaimBuilderRewardsRewardToken() public { + // GIVEN a builder with 30% of reward percentage for backers + vm.startPrank(builder); + backersManager.setBackerRewardPercentage(0.3 ether); + skip(rewardPercentageCooldown); + // AND alice allocates to gauge + vm.startPrank(alice); + backersManager.allocate(gauge, 1 ether); + + // AND 100 rewardToken and 100 coinbase are distributed + _distribute(100 ether, 100 ether); + + // THEN builderRewards is 70 ether in rewardToken and 70 ether in coinbase + assertEq(gauge.builderRewards(address(rewardToken)), 70 ether); + assertEq(gauge.builderRewards(UtilsLib._COINBASE_ADDRESS), 70 ether); + + // AND another cycle finishes without a new distribution + _skipAndStartNewCycle(); + + // WHEN builder claims rewards by rewardToken + vm.startPrank(builder); + gauge.claimBuilderReward(address(rewardToken)); + // THEN builder rewardToken balance is 70 ether + assertEq(rewardToken.balanceOf(builder), 70 ether); + // THEN builderRewards in rewardToken is 0 + assertEq(gauge.builderRewards(address(rewardToken)), 0 ether); + // THEN builder coinbase balance is 0 ether + assertEq(builder.balance, 0 ether); + // THEN builderRewards in coinbase is 70 ether + assertEq(gauge.builderRewards(UtilsLib._COINBASE_ADDRESS), 70 ether); + } + + /** + * SCENARIO: builder claims his rewards at any time during the cycle by asset receiving the total rewards of the + * asset claimed. + */ + function test_ClaimBuilderRewardsCoinbase() public { + // GIVEN a builder with 30% of reward percentage for backers + vm.startPrank(builder); + backersManager.setBackerRewardPercentage(0.3 ether); + skip(rewardPercentageCooldown); + // AND alice allocates to gauge + vm.startPrank(alice); + backersManager.allocate(gauge, 1 ether); + + // AND 100 rewardToken and 100 coinbase are distributed + _distribute(100 ether, 100 ether); + + // THEN builderRewards is 70 ether in rewardToken and 70 ether in coinbase + assertEq(gauge.builderRewards(address(rewardToken)), 70 ether); + assertEq(gauge.builderRewards(UtilsLib._COINBASE_ADDRESS), 70 ether); + + // AND another cycle finishes without a new distribution + _skipAndStartNewCycle(); + + // WHEN builder claims rewards by Coinbase + vm.startPrank(builder); + gauge.claimBuilderReward(UtilsLib._COINBASE_ADDRESS); + // THEN builder rewardToken balance is 70 ether + assertEq(rewardToken.balanceOf(builder), 0 ether); + // THEN builderRewards in rewardToken is 70 ether + assertEq(gauge.builderRewards(address(rewardToken)), 70 ether); + // THEN builder coinbase balance is 70 ether + assertEq(builder.balance, 70 ether); + // THEN builderRewards in coinbase is 0 ether + assertEq(gauge.builderRewards(UtilsLib._COINBASE_ADDRESS), 0 ether); + } + /** * SCENARIO: reward receiver claims his rewards at any time during the cycle receiving the total amount of rewards. */ diff --git a/test/HaltedBuilderBehavior.t.sol b/test/HaltedBuilderBehavior.t.sol index 33d5e0d4..5522b24d 100644 --- a/test/HaltedBuilderBehavior.t.sol +++ b/test/HaltedBuilderBehavior.t.sol @@ -204,17 +204,18 @@ abstract contract HaltedBuilderBehavior is BaseTest { // AND half cycle pass _skipRemainingCycleFraction(2); // AND alice removes allocations + vm.prank(alice); backersManager.allocate(gauge, 0 ether); // WHEN builder is halted _haltGauge(); - // // THEN gauge rewardShares is 30240000 ether = 100 * 1/2 WEEK - // assertEq(gauge.rewardShares(), 30_240_000 ether); - // // THEN alice total allocation is 6 - // assertEq(backersManager.backerTotalAllocation(alice), 6 ether); - // // THEN totalPotentialReward is 8467200 ether = 14 * 1 WEEK - // assertEq(backersManager.totalPotentialReward(), 8_467_200 ether); + // THEN gauge rewardShares is 30240000 ether = 100 * 1/2 WEEK + assertEq(gauge.rewardShares(), 30_240_000 ether); + // THEN alice total allocation is 6 + assertEq(backersManager.backerTotalAllocation(alice), 6 ether); + // THEN totalPotentialReward is 8467200 ether = 14 * 1 WEEK + assertEq(backersManager.totalPotentialReward(), 8_467_200 ether); } /** diff --git a/test/SetBackerRewardPercentage.t.sol b/test/SetBackerRewardPercentage.t.sol index 62bf3e59..0b6d82cd 100644 --- a/test/SetBackerRewardPercentage.t.sol +++ b/test/SetBackerRewardPercentage.t.sol @@ -4,7 +4,7 @@ pragma solidity 0.8.20; import { BaseTest } from "./BaseTest.sol"; import { BuilderRegistryRootstockCollective } from "../src/BuilderRegistryRootstockCollective.sol"; -contract setBackerRewardPercentageTest is BaseTest { +contract SetBackerRewardPercentageTest is BaseTest { // ----------------------------- // ----------- Events ---------- // ----------------------------- diff --git a/test/governance/GovernanceManagerRootstockCollective.t.sol b/test/governance/GovernanceManagerRootstockCollective.t.sol index 7d8cb98a..ec118c66 100644 --- a/test/governance/GovernanceManagerRootstockCollective.t.sol +++ b/test/governance/GovernanceManagerRootstockCollective.t.sol @@ -232,6 +232,7 @@ contract GovernanceManagerRootstockCollectiveTest is BaseTest { contract SampleChangeContract is IChangeContractRootstockCollective { bool public executed = false; + // solhint-disable-next-line foundry-test-functions function execute() external { executed = true; } diff --git a/test/integration/DifferentRewardPercentages.t.sol b/test/integration/DifferentRewardPercentages.t.sol new file mode 100644 index 00000000..c2c4c224 --- /dev/null +++ b/test/integration/DifferentRewardPercentages.t.sol @@ -0,0 +1,276 @@ +// SPDX-License-Identifier: UNLICENSED +pragma solidity 0.8.20; + +import { BaseTest } from "../BaseTest.sol"; + +/** + * @title Different Reward Percentages Tests + * @notice This test cases cover realistic scenarios, where there a are a few Builders, with + * different reward distributions percentages and some backers distribute allocations along them + */ +contract DifferentRewardPercentages is BaseTest { + function _setUp() internal override { + // start a new cycle with an empty distribution + vm.prank(alice); + backersManager.allocate(gauge, 1 ether); + _distribute(0, 0); + + // There are 5 builders + // builder - builder2 with 50% backer reward percentage + // builder3 has 30% backer reward percentage + address _builder3 = makeAddr("builder3"); + _whitelistBuilder(_builder3, _builder3, 0.3 ether); + // builder4 has 70% backer reward percentage + address _builder4 = makeAddr("builder4"); + _whitelistBuilder(_builder4, _builder4, 0.7 ether); + // builder5 has 100% backer reward percentage + address _builder5 = makeAddr("builder5"); + _whitelistBuilder(_builder5, _builder5, 1 ether); + } + + /* + * SCENARIO: there are several builders with different backer rewards percentage. They all receive the correct + * amount of rewards + */ + function test_integration_DifferentBackerRewardPercentage() public { + // GIVEN alice gives 1 eth vote to every gauge + allocationsArray = [1 ether, 1 ether, 1 ether, 1 ether, 1 ether]; + vm.prank(alice); + backersManager.allocateBatch(gaugesArray, allocationsArray); + + // AND bob gives 2 eth votes to gauge 1, 3 and 5 each + vm.startPrank(bob); + backersManager.allocate(gauge, 2 ether); + backersManager.allocate(gaugesArray[2], 1 ether); + backersManager.allocate(gaugesArray[4], 2 ether); + vm.stopPrank(); + + // THEN totalPotentialReward is 10 ether (votes) * 604800 (cycle duration) + assertEq(backersManager.totalPotentialReward(), 6_048_000 ether); + // AND gauge and gauge 2 are incetivized with 100 ether in rewardToken and 100 coinbase + _incentivize(gauge, 100 ether, 100 ether); + _incentivize(gauge2, 100 ether, 100 ether); + // AND there is a distribution of 100 rewardToken and 100 coinbase + _distribute(100 ether, 100 ether); + + // Total votes: 10 + // Total rewards from distribution: 100 ether in rewardToken - 100 ether in coinbase + // Rewards: + // gauge1 (3 votes): + // 100/10 * 3 rewardToken = 30 eth + // 100/10 * 3 coinbase = 30 eth + // gauge2 (1 vote): + // 100/10 * 1 rewardToken = 10 eth + // 100/10 * 1 coinbase = 10 eth + // gauge3 (2 votes): + // 100/10 * 2 rewardToken = 20 eth + // 100/10 * 2 coinbase = 20 eth + // gauge4 (1 vote): + // 100/10 * 1 rewardToken = 10 eth + // 100/10 * 1 coinbase = 10 eth + // gauge5 (3 votes): + // 100/10 * 3 rewardToken = 30 eth + // 100/10 * 3 coinbase = 30 eth + + // AND cycle finishes + _skipAndStartNewCycle(); + // AND alice claims rewards + vm.prank(alice); + backersManager.claimBackerRewards(gaugesArray); + // THEN alice receives rewardToken + // gauge 1 (1/3 votes - 50% br%) = 1/3 * (30 eth * 50% + 100 eth) = 38.33 eth + // gauge 2 (1/1 votes - 50% br%) = 1/1 * (10 eth * 50% + 100 eth) = 105 eth + // gauge 3 (1/2 votes - 30% br%) = 1/2 * (20 eth * 30%) = 3 eth + // gauge 4 (1/1 votes - 70% br%) = 1/1 * (10 eth * 70%) = 7 eth + // gauge 5 (1/3 votes - 100% br%) = 1/3 * (30 eth * 100%) = 10 eth + // total = 163.33 + assertEq(_clearERC20Balance(alice), 163_333_333_333_333_333_327); + // THEN alice receives coinbase + // gauge 1 (1/3 votes - 50% br%) = 1/3 * (30 eth * 50% + 100 eth) = 38.33 eth + // gauge 2 (1/1 votes - 50% br%) = 1/1 * (10 eth * 50% + 100 eth) = 105 eth + // gauge 3 (1/2 votes - 30% br%) = 1/2 * (20 eth * 30%) = 3 eth + // gauge 4 (1/1 votes - 70% br%) = 1/1 * (10 eth * 70%) = 7 eth + // gauge 5 (1/3 votes - 100% br%) = 1/3 * (30 eth * 100%) = 10 eth + // total = 163.33 eth + assertEq(_clearCoinbaseBalance(alice), 163_333_333_333_333_333_327); + + // WHEN bob claims the rewards + vm.prank(bob); + backersManager.claimBackerRewards(gaugesArray); + // THEN bob receives rewardToken + // gauge 1 (2/3 votes - 50% br%) = 2/3 * (30 eth * 50% + 100 eth) = 76.66 eth + // gauge 2 (0 votes - 50% br%) = 0 + // gauge 3 (1/2 votes - 30% br%) = 1/2 * (20 eth * 30%) = 3 eth + // gauge 4 (0 votes - 70% br%) = 0 + // gauge 5 (2/3 votes - 100% br%) = 2/3 * (30 eth * 100%) = 20 eth + // total = 96.66 eth + assertEq(_clearERC20Balance(bob), 99_666_666_666_666_666_661); + // THEN bob receives coinbase + // gauge 1 (2/3 votes - 50% br%) = 2/3 * (30 eth * 50% + 100 eth) = 76.66 eth + // gauge 2 (0 votes - 50% br%) = 0 + // gauge 3 (1/2 votes - 30% br%) = 1/2 * (20 eth * 30%) = 3 eth + // gauge 4 (0 votes - 70% br%) = 0 + // gauge 5 (2/3 votes - 100% br%) = 2/3 * (30 eth * 100%) = 20 eth + // total = 96.66 eth + assertEq(_clearCoinbaseBalance(bob), 99_666_666_666_666_666_661); + + // WHEN all the builders claim + _buildersClaim(); + // THEN builder receives rewardToken: 30 eth * 50% = 15 eth + assertEq(_clearERC20Balance(builder), 15 ether); + // THEN builder receives coinbase: 30 eth * 50% = 15 eth + assertEq(_clearCoinbaseBalance(builder), 15 ether); + + // THEN builder2 receives rewardToken: 10 eth * 50% = 5 eth + assertEq(_clearERC20Balance(builder2Receiver), 5 ether); + // THEN builder receives coinbase: 10 eth * 50% = 5 eth + assertEq(_clearCoinbaseBalance(builder2Receiver), 5 ether); + + // THEN builder 3 receives rewardToken: 20 eth * 70% = 14 eth + assertEq(_clearERC20Balance(builders[2]), 14 ether); + // THEN builder 3 receives coinbase: 20 eth * 70% = 14 eth + assertEq(_clearCoinbaseBalance(builders[2]), 14 ether); + + // THEN builder 4 receives rewardToken: 10 eth * 30% = 3 eth + assertEq(_clearERC20Balance(builders[3]), 3 ether); + // THEN builder 4 receives coinbase: 10 eth * 30% = 3 eth + assertEq(_clearCoinbaseBalance(builders[3]), 3 ether); + + // THEN builder 5 receives 0 rewardToken: 30 * 0% + assertEq(_clearERC20Balance(builders[4]), 0 ether); + // THEN builder 5 receives 0 coinbase: 30 * 0% + assertEq(_clearCoinbaseBalance(builders[4]), 0 ether); + } + + /* + * SCENARIO: there are several builders with different backer rewards percentage and voters remove votes during the + * cycle. They all receive the correct amount of rewards + */ + function test_integration_DifferentBackerRewardPercentageAndChangeInAllocations() public { + // GIVEN alice gives 1 eth vote to every gauge + allocationsArray = [1 ether, 1 ether, 1 ether, 1 ether, 1 ether]; + vm.prank(alice); + backersManager.allocateBatch(gaugesArray, allocationsArray); + + // AND bob gives 2 eth votes to gauge 1, 3 and 5 each + vm.startPrank(bob); + backersManager.allocate(gauge, 2 ether); + backersManager.allocate(gaugesArray[2], 1 ether); + backersManager.allocate(gaugesArray[4], 2 ether); + vm.stopPrank(); + + // THEN totalPotentialReward is 10 ether (votes) * 604800 (cycle duration) + assertEq(backersManager.totalPotentialReward(), 6_048_000 ether); + // AND gauge and gauge 2 are incetivized with 100 ether in rewardToken and 100 coinbase + _incentivize(gauge, 100 ether, 100 ether); + _incentivize(gauge2, 100 ether, 100 ether); + + // AND half a cycle pases + _skipRemainingCycleFraction(2); + // AND alice moves 1 vote from gauge2 to gauge 1 and 1 vote from gauge 4 to gauge 5 + vm.startPrank(alice); + backersManager.allocate(gauge2, 0 ether); + backersManager.allocate(gauge, 2 ether); + backersManager.allocate(gaugesArray[3], 0 ether); + backersManager.allocate(gaugesArray[4], 2 ether); + vm.stopPrank(); + + // THEN totalPotentialReward did not change + assertEq(backersManager.totalPotentialReward(), 6_048_000 ether); + + // AND there is a distribution of 100 rewardToken and 100 coinbase + _distribute(100 ether, 100 ether); + + // Total votes: 10 + // Total rewards from distribution: 100 ether in rewardToken - 100 ether in coinbase + // Rewards: + // gauge1 (3 votes 1/2 cycle - 4 votes 1/2 cycle): + // (100/10 * 3 rewardToken * 1/2 cycle) + (100/10 * 4 rewardToken * 1/2 cycle) = 35 eth + // (100/10 * 3 coinbase * 1/2 cycle) + (100/10 * 4 coinbase * 1/2 cycle) = 35 eth + // gauge2 (1 votes 1/2 cycle): + // 100/10 * 1 rewardToken * 1/2 cycle = 5 eth + // 100/10 * 1 coinbase * 1/2 cycle = 5 eth + // gauge3 (2 votes): + // 100/10 * 2 rewardToken = 20 eth + // 100/10 * 2 coinbase = 20 eth + // gauge4 (1 vote 1/2 cycle): + // 100/10 * 1 rewardToken * 1/2 cycle = 5 eth + // 100/10 * 1 coinbase * 1/2 cycle = 5 eth + // gauge5 (3 votes 1/2 cycle - 4 votes 1/2 cycle): + // (100/10 * 3 rewardToken * 1/2 cycle) + (100/10 * 4 rewardToken * 1/2 cycle) = 35 eth + // (100/10 * 3 coinbase * 1/2 cycle) + (100/10 * 4 coinbase * 1/2 cycle) = 35 eth + + // AND cycle finishes + _skipAndStartNewCycle(); + // AND alice claims rewards + vm.prank(alice); + backersManager.claimBackerRewards(gaugesArray); + // THEN alice receives rewardToken + // gauge 1 (2/4 votes - 50% br%) = 1/3 * 50 ether (incentive for half cycle) + 2/4 * (35 eth * 50% + 50 eth) = + // 50.41 eth + // gauge 2 (1 vote 1/2 cycle for incentive) = 100 eth * 1/2 cycle = 50 eth + // gauge 3 (1/2 votes - 30% br%) = 1/2 * (20 eth * 30%) = 3 eth + // gauge 4 (0 votes - 70% br%) = 0 + // gauge 5 (2/4 votes - 100% br%) = 2/4 * (35 eth * 100%) = 17.5 eth + // total = 120.91 eth + assertEq(_clearERC20Balance(alice), 120_916_666_666_666_666_658); + // THEN alice receives coinbase + // gauge 1 (2/4 votes - 50% br%) = 1/3 * 50 ether (incentive for half cycle) + 2/4 * (35 eth * 50% + 50 eth) = + // 50.41 eth + // gauge 2 (1 vote 1/2 cycle for incentive) = 100 eth * 1/2 cycle = 50 eth + // gauge 3 (1/2 votes - 30% br%) = 1/2 * (20 eth * 30%) = 3 eth + // gauge 4 (0 votes - 70% br%) = 0 + // gauge 5 (2/4 votes - 100% br%) = 2/4 * (35 eth * 100%) = 17.5 eth + // total = 120.91 eth + assertEq(_clearCoinbaseBalance(alice), 120_916_666_666_666_666_658); + + // WHEN bob claims the rewards + vm.prank(bob); + backersManager.claimBackerRewards(gaugesArray); + // THEN bob receives rewardToken + // gauge 1 (2/4 votes - 50% br%) = 2/3 * 50 ether (incentive for half cycle) + 2/4 * (35 eth * 50% + 50 eth) = + // 67.08 eth + // gauge 2 (0 votes - 50% br%) = 0 + // gauge 3 (1/2 votes - 30% br%) = 1/2 * (20 eth * 30%) = 3 eth + // gauge 4 (0 votes - 50% br%) = 0 + // gauge 5 (2/4 votes - 100% br%) = 2/4 * (35 eth * 100%) = 17.5 eth + // total = 87.58 eth + assertEq(_clearERC20Balance(bob), 87_583_333_333_333_333_325); + // THEN bob receives coinbase + // gauge 1 (2/4 votes - 50% br%) = 2/3 * 50 ether (incentive for half cycle) + 2/4 * (35 eth * 50% + 50 eth) = + // 67.08 eth + // gauge 2 (0 votes - 50% br%) = 0 + // gauge 3 (1/2 votes - 30% br%) = 1/2 * (20 eth * 30%) = 3 eth + // gauge 4 (0 votes - 50% br%) = 0 + // gauge 5 (2/4 votes - 100% br%) = 2/4 * (35 eth * 100%) = 17.5 eth + // total = 87.58 eth + assertEq(_clearCoinbaseBalance(bob), 87_583_333_333_333_333_325); + + // WHEN all the builders claim + _buildersClaim(); + // THEN builder receives rewardToken: 35 eth * 50% = 17.5 eth + assertEq(_clearERC20Balance(builder), 17.5 ether); + // THEN builder receives coinbase: 35 eth * 50% = 17.5 eth + assertEq(_clearCoinbaseBalance(builder), 17.5 ether); + + // THEN builder2 receives rewardToken: 5 eth * 50% = 2.5 eth + assertEq(_clearERC20Balance(builder2Receiver), 2.5 ether); + // THEN builder receives coinbase: 5 eth * 50% = 2.5 eth + assertEq(_clearCoinbaseBalance(builder2Receiver), 2.5 ether); + + // THEN builder 3 receives rewardToken: 20 eth * 70% = 14 eth + assertEq(_clearERC20Balance(builders[2]), 14 ether); + // THEN builder 3 receives coinbase: 20 eth * 70% = 14 eth + assertEq(_clearCoinbaseBalance(builders[2]), 14 ether); + + // THEN builder 4 receives rewardToken: 5 eth * 30% = 1.5 eth + assertEq(_clearERC20Balance(builders[3]), 1.5 ether); + // THEN builder 4 receives coinbase: 5 eth * 30% = 1.5 eth + assertEq(_clearCoinbaseBalance(builders[3]), 1.5 ether); + + // THEN builder 5 receives 0 rewardToken: 35 * 0% + assertEq(_clearERC20Balance(builders[4]), 0 ether); + // THEN builder 5 receives 0 coinbase: 35 * 0% + assertEq(_clearCoinbaseBalance(builders[4]), 0 ether); + } +} diff --git a/test/invariant/BaseInvariants.sol b/test/invariant/BaseInvariants.sol index 9e48d875..37b2d7ff 100644 --- a/test/invariant/BaseInvariants.sol +++ b/test/invariant/BaseInvariants.sol @@ -19,7 +19,7 @@ contract BaseInvariants is BaseTest { DistributionHandler public distributionHandler; IncentivizeHandler public incentivizeHandler; - function _setUp() internal override { + function _setUp() internal virtual override { // delete all the arrays created on BaseTest setup to start from scratch delete gaugesArray; delete allocationsArray; diff --git a/test/invariant/DistributionDurationInvariants.t.sol b/test/invariant/DistributionDurationInvariants.t.sol new file mode 100644 index 00000000..e6a377d0 --- /dev/null +++ b/test/invariant/DistributionDurationInvariants.t.sol @@ -0,0 +1,29 @@ +// SPDX-License-Identifier: UNLICENSED +pragma solidity 0.8.20; + +import { BaseInvariants, BaseTest } from "./BaseInvariants.sol"; +import { DistributionDurationHandler } from "./handlers/DistributionDurationHandler.sol"; + +contract DistributionDurationInvariants is BaseInvariants { + DistributionDurationHandler public ddHandler; + + function _setUp() internal override { + super._setUp(); + ddHandler = new DistributionDurationHandler(BaseTest(payable(address(this))), timeManager); + targetContract(address(ddHandler)); + } + + /** + * SCENARIO: Cycle Duration should always be at least 2 times distribution duration + * @dev: The test is allowed to revert, as we want setDistributionDuration to be as + * un-restricted as possible + */ + /// forge-config: default.invariant.fail-on-revert = false + /// forge-config: ci.invariant.fail-on-revert = false + /// forge-config: deep.invariant.fail-on-revert = false + function invariant_DistributionDurationRatio() public useTime { + (, uint256 _cycleDuration) = backersManager.getCycleStartAndDuration(); + uint32 _distributionDuration_ = backersManager.distributionDuration(); + assertGe(_cycleDuration, _distributionDuration_ * 2); + } +} diff --git a/test/invariant/handlers/DistributionDurationHandler.sol b/test/invariant/handlers/DistributionDurationHandler.sol new file mode 100644 index 00000000..0491bcf9 --- /dev/null +++ b/test/invariant/handlers/DistributionDurationHandler.sol @@ -0,0 +1,19 @@ +// SPDX-License-Identifier: UNLICENSED +pragma solidity 0.8.20; + +import { BaseHandler, TimeManager } from "./BaseHandler.sol"; +import { BaseTest } from "../../BaseTest.sol"; + +contract DistributionDurationHandler is BaseHandler { + constructor(BaseTest baseTest_, TimeManager timeManager_) BaseHandler(baseTest_, timeManager_) { } + + function increaseTimestamp(uint256 deltaTime_) external { + deltaTime_ = bound(deltaTime_, 0, 1 weeks); + timeManager.increaseTimestamp(deltaTime_); + } + + function setDistributionDuration(uint32 newDuration_) external { + vm.prank(baseTest.governanceManager().governor()); + backersManager.setDistributionDuration(newDuration_); + } +}