def deploy_dao_badger_timelock(self):
     deployer = self.deployer
     print(
         self.token,
         self.dao.agent,
         badger_config.globalStartTime,
         badger_config.tokenLockParams.lockDuration,
         (
             badger_config.globalStartTime
             + badger_config.tokenLockParams.lockDuration
         ),
         chain.time(),
     )
     self.daoBadgerTimelock = deploy_proxy(
         "SimpleTimelock",
         SimpleTimelock.abi,
         self.logic.SimpleTimelock.address,
         self.devProxyAdmin.address,
         self.logic.SimpleTimelock.initialize.encode_input(
             self.token,
             self.dao.agent,
             badger_config.globalStartTime
             + badger_config.tokenLockParams.lockDuration,
         ),
         self.deployer,
     )
     self.track_contract_upgradeable("daoBadgerTimelock", self.daoBadgerTimelock)
    def deploy_digg_team_vesting(self):
        deployer = self.deployer

        print(
            self.token,
            self.devMultisig,
            self.dao.agent,
            self.config.startTime,
            self.config.teamVestingParams.cliffDuration,
            self.config.teamVestingParams.totalDuration,
            chain.time(),
        )

        self.diggTeamVesting = deploy_proxy(
            "SmartVesting",
            SmartVesting.abi,
            self.logic.SmartVesting.address,
            self.devProxyAdmin.address,
            self.logic.SmartVesting.initialize.encode_input(
                self.token,
                self.devMultisig,
                self.dao.agent,
                self.config.startTime,
                self.config.teamVestingParams.cliffDuration,
                self.config.teamVestingParams.totalDuration,
            ),
            deployer,
        )
        self.track_contract_upgradeable("teamVesting", self.diggTeamVesting)
def deploy_controller(
    badger,
    deployer,
    governance=None,
    strategist=None,
    keeper=None,
    rewards=None,
    proxyAdmin=None,
):
    # TODO: Change to prod config

    # Set default roles if not specified
    if not governance:
        governance = deployer
    if not strategist:
        strategist = deployer
    if not keeper:
        keeper = badger.keeper
    if not rewards:
        rewards = badger.dao.agent
    if not proxyAdmin:
        proxyAdmin = badger.devProxyAdmin

    return deploy_proxy(
        "Controller",
        Controller.abi,
        badger.logic.Controller.address,
        proxyAdmin.address,
        badger.logic.Controller.initialize.encode_input(
            governance, strategist, keeper, rewards),
        deployer,
    )
Beispiel #4
0
    def deploy_sett(
        self,
        id,
        token,
        controller,
        namePrefixOverride=False,
        namePrefix="",
        symbolPrefix="",
    ):
        deployer = self.deployer
        proxyAdmin = self.devProxyAdmin
        governance = deployer
        keeper = deployer

        sett = deploy_proxy(
            "Sett",
            Sett.abi,
            self.logic.Sett.address,
            proxyAdmin.address,
            self.logic.Sett.initialize.encode_input(
                token,
                controller,
                governance,
                keeper,
                namePrefixOverride,
                namePrefix,
                symbolPrefix,
            ),
            deployer,
        )
        self.sett_system.vaults[id] = sett
        self.track_contract_upgradeable(id + ".sett", sett)
        print("tracked", sett)
        return sett
 def deploy_adapter(self, registry, router, deployer):
     config = self.config
     # deployer = self.deployer
     devProxyAdmin = self.devProxyAdmin
     logic = self.logic
     self.adapter = deploy_proxy(
         "BadgerBridgeAdapter",
         BadgerBridgeAdapter.abi,
         logic.BadgerBridgeAdapter.address,
         web3.toChecksumAddress(devProxyAdmin.address),
         logic.BadgerBridgeAdapter.initialize.encode_input(
             config.governance,
             config.rewards,
             registry,
             router,
             config.wbtc,
             [
                 config.mintFeeBps,
                 config.burnFeeBps,
                 config.percentageFeeRewardsBps,
                 config.percentageFeeGovernanceBps,
             ],
         ),
         deployer,
     )
    def deploy_digg_policy(self):
        deployer = self.deployer
        self.uFragmentsPolicy = deploy_proxy(
            "UFragmentsPolicy",
            UFragmentsPolicy.abi,
            self.logic.UFragmentsPolicy.address,
            self.devProxyAdmin.address,
            self.logic.UFragmentsPolicy.initialize.encode_input(
                self.owner,
                self.uFragments,
                self.config.baseCpi,
            ),
            deployer,
        )
        config = self.config

        # TODO: F/u on why these values are not being set.
        self.uFragmentsPolicy.setDeviationThreshold(config.deviationThreshold,
                                                    {"from": deployer})
        self.uFragmentsPolicy.setRebaseLag(config.rebaseLag,
                                           {"from": deployer})
        self.uFragmentsPolicy.setRebaseTimingParameters(
            config.minRebaseTimeIntervalSec,
            config.rebaseWindowOffsetSec,
            config.rebaseWindowLengthSec,
            {"from": deployer},
        )

        self.track_contract_upgradeable("uFragmentsPolicy",
                                        self.uFragmentsPolicy)
        self.track_contract_ownable(self.uFragmentsPolicy)
Beispiel #7
0
def setup_badger(badger: BadgerSystem, settConfig):
    controller = badger.getController("native")
    console.print(registry.pancake.chefPids.bnbBtcb)
    strategyLogic = StrategyPancakeLpOptimizer.deploy({"from": badger.deployer})

    strategy = deploy_proxy(
        "StrategyPancakeLpOptimizer",
        StrategyPancakeLpOptimizer.abi,
        strategyLogic.address,
        badger.devProxyAdmin.address,
        strategyLogic.initialize.encode_input(
            badger.devMultisig,
            badger.deployer,
            controller,
            badger.keeper,
            badger.guardian,
            [
                registry.pancake.chefPairs.bnbBtcb,
                registry.tokens.btcb,
                registry.tokens.bnb,
            ],
            [100, 100, 50],
            15,
        ),
        badger.deployer,
    )

    token0 = registry.tokens.btcb
    token1 = registry.tokens.bnb
    cake = registry.pancake.cake

    strategy.setTokenSwapPath(cake, token0, [cake, token0], {"from": badger.deployer})
    strategy.setTokenSwapPath(cake, token1, [cake, token1], {"from": badger.deployer})

    # want = interface.IERC20(registry.pancake.chefPairs.bnbBtcb)
    # multi = accounts.at(badger.devMultisig.address, force=True)

    # snap = SnapshotManager(badger, settConfig["id"])

    table = []

    table.append(["want", strategy.want()])
    table.append(["token0", strategy.token0()])
    table.append(["token1", strategy.token1()])
    table.append(["wantPid", strategy.wantPid()])
    table.append(["performanceFeeGovernance", strategy.performanceFeeGovernance()])
    table.append(["performanceFeeStrategist", strategy.performanceFeeStrategist()])
    table.append(["withdrawalFee", strategy.withdrawalFee()])
    table.append(
        ["path0", strategy.getTokenSwapPath(registry.pancake.cake, strategy.token0())]
    )
    table.append(
        ["path1", strategy.getTokenSwapPath(registry.pancake.cake, strategy.token1())]
    )

    print(tabulate(table, headers=["param", "value"]))
 def deploy_rewards_escrow(self):
     deployer = self.deployer
     print("deployer", deployer)
     self.rewardsEscrow = deploy_proxy(
         "RewardsEscrow",
         RewardsEscrow.abi,
         self.logic.RewardsEscrow.address,
         self.devProxyAdmin.address,
         self.logic.RewardsEscrow.initialize.encode_input(),
         deployer,
     )
     self.track_contract_upgradeable("rewardsEscrow", self.rewardsEscrow)
Beispiel #9
0
 def deploy_router(self):
     admin = self.admin
     devProxyAdmin = self.devProxyAdmin
     self.router = deploy_proxy(
         "SwapStrategyRouter",
         SwapStrategyRouter.abi,
         self.logic.SwapStrategyRouter.address,
         web3.toChecksumAddress(devProxyAdmin.address),
         self.logic.SwapStrategyRouter.initialize.encode_input(
             admin.address, ),
         self.deployer,
     )
Beispiel #10
0
def deploy_sett_native_badger(badger, deployer):
    badger.add_controller("native")
    badger.deploy_sett("native")
    sett = DotMap(logic=deploy_sett_common_logic(deployer))
    sett.logic.StrategyBadgerRewards = StrategyBadgerRewards.deploy(
        {"from": deployer})

    sett.controller = deploy_controller(badger, sett, deployer)

    sett.sett = deploy_sett(
        badger,
        sett,
        badger.token,
        sett.controller,
        "Badger Sett badger",
        "bBadger",
        deployer,
    )

    sett.rewards = deploy_proxy(
        "StakingRewards",
        StakingRewards.abi,
        sett.logic.StakingRewards.address,
        badger.devProxyAdmin.address,
        sett.logic.StakingRewards.initialize.encode_input(
            deployer, badger.token, badger.token),
        deployer,
    )

    params = sett_config.native.badger.params
    params.want = badger.token
    params.geyser = sett.rewards

    sett.strategy = deploy_strategy(
        badger,
        sett,
        "StrategyBadgerRewards",
        sett.controller,
        params,
        deployer,
    )

    sett.want = interface.IERC20(sett.strategy.want())

    configure_sett(sett, deployer)

    # Approve Setts on specific
    sett.rewards.grantRole(APPROVED_STAKER_ROLE, sett.strategy,
                           {"from": deployer})

    return sett
Beispiel #11
0
    def deploy_digg_rewards_faucet(self, id, diggToken):
        deployer = self.deployer

        rewards = deploy_proxy(
            "DiggRewardsFaucet",
            DiggRewardsFaucet.abi,
            self.logic.DiggRewardsFaucet.address,
            self.devProxyAdmin.address,
            self.logic.DiggRewardsFaucet.initialize.encode_input(deployer, diggToken),
            deployer,
        )

        self.sett_system.rewards[id] = rewards
        self.track_contract_upgradeable(id + ".rewards", rewards)
        return rewards
Beispiel #12
0
 def deploy_curve_swap_strategy(self):
     config = self.config
     admin = self.admin
     devProxyAdmin = self.devProxyAdmin
     self.strategies.curve = deploy_proxy(
         "CurveSwapStrategy",
         CurveSwapStrategy.abi,
         self.logic.CurveSwapStrategy.address,
         web3.toChecksumAddress(devProxyAdmin.address),
         self.logic.CurveSwapStrategy.initialize.encode_input(
             admin.address,
             config.strategies.curve.registry,
         ),
         self.deployer,
     )
Beispiel #13
0
 def deploy_dao_digg_timelock(self):
     deployer = self.owner
     self.daoDiggTimelock = deploy_proxy(
         "SimpleTimelock",
         SimpleTimelock.abi,
         self.logic.SimpleTimelock.address,
         self.devProxyAdmin.address,
         self.logic.SimpleTimelock.initialize.encode_input(
             self.token,
             self.dao.agent,
             self.config.startTime
             + self.config.tokenLockParams.lockDuration,
         ),
         deployer,
     )
     self.track_contract_upgradeable("daoDiggTimelock", self.daoDiggTimelock)
    def deploy_digg_token(self):
        deployer = self.owner
        self.uFragments = deploy_proxy(
            "UFragments",
            UFragments.abi,
            self.logic.UFragments.address,
            self.devProxyAdmin.address,
            self.logic.UFragments.initialize.encode_input(self.owner, ),
            deployer,
        )
        self.track_contract_upgradeable("uFragments", self.uFragments)
        self.track_contract_ownable(self.uFragments)

        # Set the digg system token after deploying.
        # TODO: Move this to a better place.
        self.token = self.uFragments
    def deploy_airdrop_distributor(self, root, rewardsEscrow,
                                   reclaimAllowedTimestamp):
        deployer = self.deployer

        self.diggDistributor = deploy_proxy(
            "DiggDistributor",
            DiggDistributor.abi,
            self.logic.DiggDistributor.address,
            self.devProxyAdmin.address,
            self.logic.DiggDistributor.initialize.encode_input(
                self.token, root, rewardsEscrow, reclaimAllowedTimestamp),
            deployer,
        )

        self.track_contract_upgradeable("diggDistributor",
                                        self.diggDistributor)
Beispiel #16
0
 def deploy_digg_policy(self):
     deployer = self.owner
     self.uFragmentsPolicy = deploy_proxy(
         "UFragmentsPolicy",
         UFragmentsPolicy.abi,
         self.logic.UFragmentsPolicy.address,
         self.devProxyAdmin.address,
         self.logic.UFragmentsPolicy.initialize.encode_input(
             self.owner,
             self.uFragments,
             self.config.baseCpi,
         ),
         deployer,
     )
     self.track_contract_upgradeable("uFragmentsPolicy", self.uFragmentsPolicy)
     self.track_contract_ownable(self.uFragmentsPolicy)
    def deploy_sett_staking_rewards(self, id, stakingToken, distToken):
        deployer = self.deployer

        rewards = deploy_proxy(
            "StakingRewards",
            StakingRewards.abi,
            self.logic.StakingRewards.address,
            self.devProxyAdmin.address,
            self.logic.StakingRewards.initialize.encode_input(
                deployer, distToken, stakingToken),
            deployer,
        )

        self.sett_system.rewards[id] = rewards
        self.track_contract_upgradeable(id + ".rewards", rewards)
        return rewards
Beispiel #18
0
def deploy_controller(badger, deployer):
    # TODO: Change to prod config
    governance = deployer
    strategist = deployer
    keeper = badger.keeper
    rewards = badger.dao.agent
    proxyAdmin = badger.devProxyAdmin

    return deploy_proxy(
        "Controller",
        Controller.abi,
        badger.logic.Controller.address,
        proxyAdmin.address,
        badger.logic.Controller.initialize.encode_input(
            governance, strategist, keeper, rewards),
        deployer,
    )
Beispiel #19
0
    def deploy_sett(
        self,
        id,
        token,
        controller,
        namePrefixOverride=False,
        namePrefix="",
        symbolPrefix="",
        governance=None,
        strategist=None,
        keeper=None,
        guardian=None,
    ):
        deployer = self.deployer
        proxyAdmin = self.devProxyAdmin

        if not governance:
            governance = deployer
        if not strategist:
            strategist = deployer
        if not keeper:
            keeper = deployer
        if not guardian:
            guardian = deployer

        sett = deploy_proxy(
            "Sett",
            Sett.abi,
            self.logic.Sett.address,
            proxyAdmin.address,
            self.logic.Sett.initialize.encode_input(
                token,
                controller,
                governance,
                keeper,
                guardian,
                namePrefixOverride,
                namePrefix,
                symbolPrefix,
            ),
            deployer,
        )
        self.sett_system.vaults[id] = sett
        self.track_contract_upgradeable(id + ".sett", sett)
        return sett
 def deploy_badger_tree(self):
     deployer = self.deployer
     print(
         self.logic.BadgerTree.address,
         self.devProxyAdmin.address,
         self.keeper,
         self.guardian,
     )
     self.badgerTree = deploy_proxy(
         "BadgerTree",
         BadgerTree.abi,
         self.logic.BadgerTree.address,
         self.devProxyAdmin.address,
         self.logic.BadgerTree.initialize.encode_input(
             self.deployer, self.keeper, self.guardian),
         deployer,
     )
     self.track_contract_upgradeable("badgerTree", self.badgerTree)
Beispiel #21
0
def deploy_sett(badger, token, controller, name, symbol, deployer):
    """
    Deploy Sett Instance
    """
    proxyAdmin = badger.devProxyAdmin
    governance = deployer
    keeper = badger.keeper

    return deploy_proxy(
        "Sett",
        Sett.abi,
        badger.logic.Sett.address,
        proxyAdmin.address,
        badger.logic.Sett.initialize.encode_input(
            token, controller, governance, keeper, name, symbol
        ),
        deployer,
    )
    def deploy_team_vesting(self):
        deployer = self.deployer

        self.teamVesting = deploy_proxy(
            "SmartVesting",
            SmartVesting.abi,
            self.logic.SmartVesting.address,
            self.devProxyAdmin.address,
            self.logic.SmartVesting.initialize.encode_input(
                self.token,
                self.devMultisig,
                self.dao.agent,
                badger_config.globalStartTime,
                badger_config.teamVestingParams.cliffDuration,
                badger_config.teamVestingParams.totalDuration,
            ),
            self.deployer,
        )
        self.track_contract_upgradeable("teamVesting", self.teamVesting)
def deploy_geyser(badger, stakingToken):
    pool_input = DotMap(
        stakingToken=stakingToken.address,
        initialDistributionToken=badger.token.address,
    )

    return deploy_proxy(
        "BadgerGeyser",
        BadgerGeyser.abi,
        badger.logic.BadgerGeyser.address,
        badger.devProxyAdmin.address,
        badger.logic.BadgerGeyser.initialize.encode_input(
            pool_input["stakingToken"],
            pool_input["initialDistributionToken"],
            badger_config.geyserParams.badgerDistributionStart,
            badger.devMultisig.address,
            badger.rewardsEscrow.address,
        ),
        badger.deployer,
    )
 def deploy_badger_hunt(self):
     deployer = self.deployer
     self.badgerHunt = deploy_proxy(
         "BadgerHunt",
         BadgerHunt.abi,
         self.logic.BadgerHunt.address,
         self.devProxyAdmin.address,
         self.logic.BadgerHunt.initialize.encode_input(
             self.token,
             badger_config.huntParams.merkleRoot,
             badger_config.huntParams.epochDuration,
             badger_config.huntParams.claimReductionPerEpoch,
             badger_config.huntParams.startTime,
             badger_config.huntParams.gracePeriod,
             self.rewardsEscrow,
             self.deployer,
         ),
         deployer,
     )
     self.track_contract_upgradeable("badgerHunt", self.badgerHunt)
Beispiel #25
0
def main():
    badger = connect_badger(badger_config.prod_json)
    deployer = badger.deployer
    # distribute_from_whales(deployer)

    # Deploy Honeypot
    artifact = BadgerRewardsManager
    logic = BadgerRewardsManager.at(badger.logic.BadgerRewardsManager)
    console.print("Logic Contract", logic)

    contract = deploy_proxy(
        "BadgerRewardsManager",
        artifact.abi,
        logic.address,
        badger.devProxyAdmin.address,
        logic.initialize.encode_input(
            badger.deployer,
            badger.keeper,
            badger.keeper,
            badger.guardian,
            badger.devMultisig,
        ),
        deployer,
    )

    strat_keys = [
        "native.badger",
        "native.uniBadgerWbtc",
        "native.sushiBadgerWbtc",
        "native.digg",
        "native.uniDiggWbtc",
        "native.sushiDiggWbtc",
    ]

    for key in strat_keys:
        strategy = badger.getStrategy(key)
        print(key, strategy)
        contract.approveStrategy(strategy, {
            "from": badger.deployer,
            "gas_strategy": gas_strategies.fast
        })
def main():
    badger = connect_badger(badger_config.prod_json)
    deployer = badger.deployer
    # distribute_from_whales(badger, deployer)

    # Deploy Honeypot
    honeypotLogic = HoneypotMeme.deploy({"from": deployer})

    honeypot_params = DotMap(
        token=badger.token,
        amount=Wei("2500 ether"),
        nftIndicies=[97, 98, 99, 100, 101, 102],
        meme="0xe4605d46Fd0B3f8329d936a8b258D69276cBa264",
        badgerCollection="0x14dC10FA6E4878280F9CA0D9f32dDAEa8C7d4d45",
    )

    honeypot = deploy_proxy(
        "HoneypotMeme",
        HoneypotMeme.abi,
        honeypotLogic.address,
        badger.devProxyAdmin.address,
        honeypotLogic.initialize.encode_input(
            honeypot_params.token,
            honeypot_params.amount,
            honeypot_params.nftIndicies,
        ),
        deployer,
    )

    assert honeypot.token() == badger.token
    assert honeypot.memeLtd() == honeypot_params.meme
    assert honeypot.honeypot() == honeypot_params.amount
    assert honeypot.nftIndicies(0) == honeypot_params.nftIndicies[0]
    assert honeypot.nftIndicies(1) == honeypot_params.nftIndicies[1]
    assert honeypot.nftIndicies(2) == honeypot_params.nftIndicies[2]
    assert honeypot.nftIndicies(3) == honeypot_params.nftIndicies[3]
    assert honeypot.nftIndicies(4) == honeypot_params.nftIndicies[4]
    assert honeypot.nftIndicies(5) == honeypot_params.nftIndicies[5]
Beispiel #27
0
def setup(StrategyConvexStakingOptimizer, ):
    # Assign accounts
    with open(digg_config.prod_json) as f:
        badger_deploy = json.load(f)
        deployer = accounts.at(badger_deploy["deployer"], force=True)
        guardian = accounts.at(badger_deploy["guardian"], force=True)
        keeper = accounts.at(badger_deploy["keeper"], force=True)
        governance = accounts.at(badger_deploy["timelock"], force=True)

    strategist = accounts[3]
    user1 = accounts[4]
    user2 = accounts[5]
    user3 = accounts[6]

    namedAccounts = {
        "deployer": deployer,
        "guardian": guardian,
        "keeper": keeper,
        "governance": governance,
        "strategist": strategist,
        "user1": user1,
        "user2": user2,
        "user3": user3,
    }

    # Setup Badger system
    badger = connect_badger(badger_config.prod_json)
    distribute_test_ether(deployer, Wei("20 ether"))

    # Key of Sett to migrate (ONLY UNCOMMENT THE ONE TO TEST):

    settKey = "native.renCrv"
    # settKey = "native.sbtcCrv"
    # settKey = "native.tbtcCrv"

    # Connect to prod controller and vault
    vault = badger.sett_system.vaults[settKey]
    print("Vault for " + settKey + " fetched with address " + vault.address)

    controller = interface.IController(vault.controller())
    print("Controller for " + settKey + " fetched with address " +
          controller.address)

    # Deploy and initialize the strategy
    if settKey == "native.renCrv":
        params = sett_config.native.convexRenCrv.params
        want = sett_config.native.convexRenCrv.params.want
        # Transfer assets to users
        distribute_from_whales(user1, 1, "renCrv")
    if settKey == "native.sbtcCrv":
        params = sett_config.native.convexSbtcCrv.params
        want = sett_config.native.convexSbtcCrv.params.want
        # Transfer assets to users
        distribute_from_whales(user1, 1, "sbtcCrv")
    if settKey == "native.tbtcCrv":
        params = sett_config.native.convexTbtcCrv.params
        want = sett_config.native.convexTbtcCrv.params.want
        # Transfer assets to users
        distribute_from_whales(user1, 1, "tbtcCrv")

    contract = StrategyConvexStakingOptimizer.deploy({"from": deployer})
    strategy = deploy_proxy(
        "StrategyConvexStakingOptimizer",
        StrategyConvexStakingOptimizer.abi,
        contract.address,
        web3.toChecksumAddress(badger.devProxyAdmin.address),
        contract.initialize.encode_input(
            governance.address,
            strategist.address,
            controller.address,
            keeper.address,
            guardian.address,
            [
                params.want,
                badger.badgerTree.address,
                params.cvxHelperVault,
                params.cvxCrvHelperVault,
            ],
            params.pid,
            [
                params.performanceFeeGovernance,
                params.performanceFeeStrategist,
                params.withdrawalFee,
            ],
            (
                params.curvePool.swap,
                params.curvePool.wbtcPosition,
                params.curvePool.numElements,
            ),
        ),
        deployer,
    )

    # Finish setup

    yield namedtuple("setup",
                     "badger controller vault strategy namedAccounts")(
                         badger, controller, vault, strategy, namedAccounts)
Beispiel #28
0
def deploy_strategy(
    badger,
    strategyName,
    controller,
    params,
    deployer,
    governance=None,
    strategist=None,
    keeper=None,
    guardian=None,
):
    if not governance:
        governance = deployer

    if not strategist:
        strategist = deployer

    if not keeper:
        keeper = badger.keeper

    if not guardian:
        guardian = badger.guardian

    proxyAdmin = badger.devProxyAdmin

    console.print(
        "Deploy Strategy "+ strategyName, params
    )

    if strategyName == "StrategyCurveGaugeRenBtcCrv":
        return deploy_proxy(
            "StrategyCurveGaugeRenBtcCrv",
            StrategyCurveGaugeRenBtcCrv.abi,
            badger.logic.StrategyCurveGaugeRenBtcCrv.address,
            proxyAdmin.address,
            badger.logic.StrategyCurveGaugeRenBtcCrv.initialize.encode_input(
                governance,
                strategist,
                controller,
                keeper,
                guardian,
                [
                    params.want,
                    params.gauge,
                    params.minter,
                    params.swap,
                    params.lpComponent,
                ],
                [
                    params.performanceFeeGovernance,
                    params.performanceFeeStrategist,
                    params.withdrawalFee,
                    params.keepCRV,
                ],
            ),
            deployer,
        )
    if strategyName == "StrategyCurveGaugeSbtcCrv":
        return deploy_proxy(
            "StrategyCurveGaugeSbtcCrv",
            StrategyCurveGaugeSbtcCrv.abi,
            badger.logic.StrategyCurveGaugeSbtcCrv.address,
            proxyAdmin.address,
            badger.logic.StrategyCurveGaugeSbtcCrv.initialize.encode_input(
                governance,
                strategist,
                controller,
                keeper,
                guardian,
                [
                    params.want,
                    params.gauge,
                    params.minter,
                    params.swap,
                    params.lpComponent,
                ],
                [
                    params.performanceFeeGovernance,
                    params.performanceFeeStrategist,
                    params.withdrawalFee,
                    params.keepCRV,
                ],
            ),
            deployer,
        )
    if strategyName == "StrategyCurveGaugeTbtcCrv":
        return deploy_proxy(
            "StrategyCurveGaugeTbtcCrv",
            StrategyCurveGaugeTbtcCrv.abi,
            badger.logic.StrategyCurveGaugeTbtcCrv.address,
            proxyAdmin.address,
            badger.logic.StrategyCurveGaugeTbtcCrv.initialize.encode_input(
                governance,
                strategist,
                controller,
                keeper,
                guardian,
                [
                    params.want,
                    params.gauge,
                    params.minter,
                    params.swap,
                    params.lpComponent,
                ],
                [
                    params.performanceFeeGovernance,
                    params.performanceFeeStrategist,
                    params.withdrawalFee,
                    params.keepCRV,
                ],
            ),
            deployer,
        )
    if strategyName == "StrategySushiLpOptimizer":
        return deploy_proxy(
            "StrategySushiLpOptimizer",
            StrategySushiLpOptimizer.abi,
            badger.logic.StrategySushiLpOptimizer.address,
            proxyAdmin.address,
            badger.logic.StrategySushiLpOptimizer.initialize.encode_input(
                governance,
                strategist,
                controller,
                keeper,
                guardian,
                [
                    params.want,
                    params.badgerTree,
                ],
                params.pid,
                [
                    params.performanceFeeGovernance,
                    params.performanceFeeStrategist,
                    params.withdrawalFee
                ],
            ),
            deployer,
        )
    if strategyName == "StrategySushiBadgerWbtc":
        return deploy_proxy(
            "StrategySushiBadgerWbtc",
            StrategySushiBadgerWbtc.abi,
            badger.logic.StrategySushiBadgerWbtc.address,
            proxyAdmin.address,
            badger.logic.StrategySushiBadgerWbtc.initialize.encode_input(
                governance,
                strategist,
                controller,
                keeper,
                guardian,
                [
                    params.want,
                    params.geyser,
                    params.badger,
                    params.badgerTree
                ],
                [
                    params.performanceFeeGovernance,
                    params.performanceFeeStrategist,
                    params.withdrawalFee
                ],
            ),
            deployer,
        )
    if strategyName == "StrategyPickleMetaFarm":
        return deploy_proxy(
            "StrategyPickleMetaFarm",
            StrategyPickleMetaFarm.abi,
            badger.logic.StrategyPickleMetaFarm.address,
            proxyAdmin.address,
            badger.logic.StrategyPickleMetaFarm.initialize.encode_input(
                governance,
                strategist,
                controller,
                keeper,
                guardian,
                [params.want, params.pickleJar, curve.pools.renCrv.swap, tokens.wbtc],
                params.pid,
                [
                    params.performanceFeeGovernance,
                    params.performanceFeeStrategist,
                    params.withdrawalFee,
                ],
            ),
            deployer,
        )
    if strategyName == "StrategyHarvestMetaFarm":
        return deploy_proxy(
            "StrategyHarvestMetaFarm",
            StrategyHarvestMetaFarm.abi,
            badger.logic.StrategyHarvestMetaFarm.address,
            proxyAdmin.address,
            badger.logic.StrategyHarvestMetaFarm.initialize.encode_input(
                governance,
                strategist,
                controller,
                keeper,
                guardian,
                [
                    params.want,
                    params.harvestVault,
                    params.vaultFarm,
                    params.metaFarm,
                    params.badgerTree,
                ],
                [
                    params.performanceFeeGovernance,
                    params.performanceFeeStrategist,
                    params.withdrawalFee,
                ],
            ),
            deployer,
        )
    if strategyName == "StrategyBadgerLpMetaFarm":
        return deploy_proxy(
            "StrategyBadgerLpMetaFarm",
            StrategyBadgerLpMetaFarm.abi,
            badger.logic.StrategyBadgerLpMetaFarm.address,
            proxyAdmin.address,
            badger.logic.StrategyBadgerLpMetaFarm.initialize.encode_input(
                governance,
                strategist,
                controller,
                keeper,
                guardian,
                [params.want, params.geyser, badger.token],
                [
                    params.performanceFeeGovernance,
                    params.performanceFeeStrategist,
                    params.withdrawalFee,
                ],
            ),
            deployer,
        )
    if strategyName == "StrategyBadgerRewards":
        return deploy_proxy(
            "StrategyBadgerRewards",
            StrategyBadgerRewards.abi,
            badger.logic.StrategyBadgerRewards.address,
            proxyAdmin.address,
            badger.logic.StrategyBadgerRewards.initialize.encode_input(
                governance,
                strategist,
                controller,
                keeper,
                guardian,
                [badger.token, params.geyser],
                [
                    params.performanceFeeGovernance,
                    params.performanceFeeStrategist,
                    params.withdrawalFee,
                ],
            ),
            deployer,
        )
Beispiel #29
0
def deploy_sett_system(badger, deployer):
    proxyAdmin = badger.proxyAdmin
    deployer = badger.deployer

    # Logic
    sett = DotMap(logic=deploy_sett_logic(deployer))

    # Controllers
    sett.native.controller = deploy_controller(badger, sett, deployer)
    sett.pickle.controller = deploy_controller(badger, sett, deployer)
    sett.harvest.controller = deploy_controller(badger, sett, deployer)

    # Deploy each pair of vault and strategy
    """
    For each group of Setts (native, harvest, pickle) iterate through each vault
    entry and deploy the Sett and starting strategy
    """

    # Deploy Setts
    sett.native.badger = deploy_sett(
        badger,
        sett,
        badger.token,
        sett.native.controller,
        "Badger Sett badger",
        "bBadger",
        deployer,
    )

    sett.native.sbtcCrv = deploy_sett(
        badger,
        sett,
        sett_config.native.sbtcCrv.params.want,
        sett.native.controller,
        "Badger Sett sbtcCrv",
        "bSbtcCrv",
        deployer,
    )

    sett.native.renCrv = deploy_sett(
        badger,
        sett,
        sett_config.native.renCrv.params.want,
        sett.native.controller,
        "Badger Sett renCrv",
        "bRenCrv",
        deployer,
    )

    sett.native.tbtcCrv = deploy_sett(
        badger,
        sett,
        sett_config.native.tbtcCrv.params.want,
        sett.native.controller,
        "Badger Sett tbtcCrv",
        "bTbtcCrv",
        deployer,
    )

    sett.pickle.renCrv = deploy_sett(
        badger,
        sett,
        sett_config.pickle.renCrv.params.want,
        sett.pickle.controller,
        "Badger SuperSett renCrv (Pickle)",
        "bSuperRenCrv (Pickle)",
        deployer,
    )

    sett.harvest.renCrv = deploy_sett(
        badger,
        sett,
        sett_config.harvest.renCrv.params.want,
        sett.harvest.controller,
        "Badger SuperSett renCrv (Harvest)",
        "bSuperRenCrv (Harvest)",
        deployer,
    )

    # Deploy Strategy Staking Rewards
    sett.rewards = DotMap()

    sett.rewards.badger = deploy_proxy(
        "StakingRewards",
        StakingRewards.abi,
        sett.logic.StakingRewards.address,
        badger.devProxyAdmin.address,
        sett.logic.StakingRewards.initialize.encode_input(
            deployer, badger.token, badger.token
        ),
        deployer,
    )

    # Deploy Strategies
    params = sett_config.native.badger.params
    params.want = badger.token
    params.geyser = sett.rewards.badger
    sett.native.strategies.badger = deploy_strategy(
        badger, sett, "StrategyBadgerRewards", sett.native.controller, params, deployer,
    )

    sett.native.strategies.sbtcCrv = deploy_strategy(
        badger,
        sett,
        "StrategyCurveGauge",
        sett.native.controller,
        sett_config.native.sbtcCrv.params,
        deployer,
    )

    sett.native.strategies.renCrv = deploy_strategy(
        badger,
        sett,
        "StrategyCurveGauge",
        sett.native.controller,
        sett_config.native.renCrv.params,
        deployer,
    )

    sett.native.strategies.tbtcCrv = deploy_strategy(
        badger,
        sett,
        "StrategyCurveGauge",
        sett.native.controller,
        sett_config.native.tbtcCrv.params,
        deployer,
    )

    params = sett_config.pickle.renCrv.params
    sett.pickle.strategies.renCrv = deploy_strategy(
        badger,
        sett,
        "StrategyPickleMetaFarm",
        sett.pickle.controller,
        sett_config.pickle.renCrv.params,
        deployer,
    )

    params = sett_config.harvest.renCrv.params
    params.rewardsEscrow = badger.rewardsEscrow
    sett.harvest.strategies.renCrv = deploy_strategy(
        badger,
        sett,
        "StrategyHarvestMetaFarm",
        sett.harvest.controller,
        sett_config.harvest.renCrv.params,
        deployer,
    )

    # Set Vaults on Controller
    sett.native.controller.setVault(
        badger.token, sett.native.badger, {"from": deployer}
    )
    sett.native.controller.setVault(
        sett_config.native.sbtcCrv.params.want, sett.native.sbtcCrv, {"from": deployer}
    )
    sett.native.controller.setVault(
        sett_config.native.renCrv.params.want, sett.native.renCrv, {"from": deployer}
    )
    sett.native.controller.setVault(
        sett_config.native.tbtcCrv.params.want, sett.native.tbtcCrv, {"from": deployer}
    )

    sett.pickle.controller.setVault(
        sett_config.pickle.renCrv.params.want, sett.pickle.renCrv, {"from": deployer}
    )

    sett.harvest.controller.setVault(
        sett_config.harvest.renCrv.params.want, sett.harvest.renCrv, {"from": deployer}
    )

    # Approve Strategies by Controller
    sett.native.controller.approveStrategy(
        badger.token, sett.native.strategies.badger, {"from": deployer}
    )
    sett.native.controller.approveStrategy(
        sett_config.native.sbtcCrv.params.want,
        sett.native.strategies.sbtcCrv,
        {"from": deployer},
    )
    sett.native.controller.approveStrategy(
        sett_config.native.renCrv.params.want,
        sett.native.strategies.renCrv,
        {"from": deployer},
    )
    sett.native.controller.approveStrategy(
        sett_config.native.tbtcCrv.params.want,
        sett.native.strategies.tbtcCrv,
        {"from": deployer},
    )

    sett.pickle.controller.approveStrategy(
        sett_config.pickle.renCrv.params.want,
        sett.pickle.strategies.renCrv,
        {"from": deployer},
    )

    sett.harvest.controller.approveStrategy(
        sett_config.harvest.renCrv.params.want,
        sett.harvest.strategies.renCrv,
        {"from": deployer},
    )

    # Set strategies on Controller
    sett.native.controller.setStrategy(
        badger.token, sett.native.strategies.badger, {"from": deployer}
    )
    sett.native.controller.setStrategy(
        sett_config.native.sbtcCrv.params.want,
        sett.native.strategies.sbtcCrv,
        {"from": deployer},
    )
    sett.native.controller.setStrategy(
        sett_config.native.renCrv.params.want,
        sett.native.strategies.renCrv,
        {"from": deployer},
    )
    sett.native.controller.setStrategy(
        sett_config.native.tbtcCrv.params.want,
        sett.native.strategies.tbtcCrv,
        {"from": deployer},
    )

    sett.pickle.controller.setStrategy(
        sett_config.pickle.renCrv.params.want,
        sett.pickle.strategies.renCrv,
        {"from": deployer},
    )

    sett.harvest.controller.setStrategy(
        sett_config.harvest.renCrv.params.want,
        sett.harvest.strategies.renCrv,
        {"from": deployer},
    )

    # Approve Setts on specific
    sett.rewards.badger.grantRole(
        APPROVED_STAKER_ROLE, sett.native.strategies.badger, {"from": deployer}
    )

    return sett
Beispiel #30
0
def init_prod_digg(badger: BadgerSystem, user):
    deployer = badger.deployer

    digg = badger.digg

    multi = GnosisSafe(badger.devMultisig)

    digg_liquidity_amount = 1000000000
    wbtc_liquidity_amount = 100000000

    print("TOKEN_LOCKER_ROLE", TOKEN_LOCKER_ROLE)
    locker_role = "0x4bf6f2cdcc8ad6c087a7a4fbecf46150b3686b71387234cac2b3e2e6dc70e345"

    # TODO: Have this as proxy in real deploy
    seederLogic = DiggSeeder.deploy({"from": deployer})

    seeder = deploy_proxy(
        "DiggSeeder",
        DiggSeeder.abi,
        seederLogic.address,
        badger.devProxyAdmin.address,
        seederLogic.initialize.encode_input(digg.diggDistributor),
        deployer,
    )

    # # Take initial liquidity from DAO
    # aragon = AragonSystem()
    # voting = aragon.getVotingAt("0xdc344bfb12522bf3fa58ef0d6b9a41256fc79a1b")

    # PROD: Configure DIGG
    digg.uFragmentsPolicy.setCpiOracle(
        digg.cpiMedianOracle,
        {"from": deployer},
    )
    digg.uFragmentsPolicy.setMarketOracle(
        digg.marketMedianOracle,
        {"from": deployer},
    )
    digg.uFragmentsPolicy.setOrchestrator(
        digg.orchestrator,
        {"from": deployer},
    )
    digg.uFragments.setMonetaryPolicy(
        digg.uFragmentsPolicy,
        {"from": deployer},
    )

    # ===== Upgrade DAOTimelock to allow voting =====
    # print(badger.logic.SimpleTimelockWithVoting.address)
    # timelockWithVotingLogic = SimpleTimelockWithVoting.at(badger.logic.SimpleTimelockWithVoting.address)
    # timelock = interface.ISimpleTimelockWithVoting(badger.daoBadgerTimelock.address)

    # multi.execute(
    #     MultisigTxMetadata(description="Upgrade DAO Badger Timelock to Allow voting",),
    #     {
    #         "to": badger.devProxyAdmin.address,
    #         "data": badger.devProxyAdmin.upgrade.encode_input(
    #             badger.daoBadgerTimelock, timelockWithVotingLogic
    #         ),
    #     },
    # )

    # # ===== Vote to move initial liquidity funds to multisig  =====
    # tx = multi.execute(
    #     MultisigTxMetadata(description="Vote on DAO Timelock from multisig",),
    #     {
    #         "to": timelock.address,
    #         "data": timelock.vote.encode_input(0, True, True)
    #     },
    # )

    # # Approve DAO voting as recipient
    # multi.execute(
    #     MultisigTxMetadata(description="Approve DAO voting as recipient",),
    #     {
    #         "to": badger.rewardsEscrow.address,
    #         "data": badger.rewardsEscrow.approveRecipient.encode_input(voting),
    #     },
    # )

    # # Vote on DAO voting as rewardsEscrow

    # before = badger.token.balanceOf(badger.rewardsEscrow)

    # tx = multi.execute(
    #     MultisigTxMetadata(description="Vote on Rewards Escrow from multisig",),
    #     {
    #         "to": badger.rewardsEscrow.address,
    #         "data": badger.rewardsEscrow.call.encode_input(
    #             voting, 0, voting.vote.encode_input(0, True, True)
    #         ),
    #     },
    # )

    # after = badger.token.balanceOf(badger.rewardsEscrow)

    # print(tx.call_trace())

    # assert after == before

    # crvRen = interface.IERC20(registry.curve.pools.renCrv.token)
    wbtc = interface.IERC20(registry.tokens.wbtc)
    # assert crvRen.balanceOf(badger.devMultisig) >= wbtc_liquidity_amount * 10 ** 10 * 2

    # crvPool = interface.ICurveZap(registry.curve.pools.renCrv.swap)

    # # crvPool.Remove_liquidity_one_coin(
    # #     wbtc_liquidity_amount * 10 ** 10, 1, wbtc_liquidity_amount
    # # )

    # # ===== Convert crvRen to wBTC on multisig =====
    # tx = multi.execute(
    #     MultisigTxMetadata(description="Withdraw crvRen for 100% WBTC",),
    #     {
    #         "to": crvPool.address,
    #         "data": crvPool.remove_liquidity_one_coin.encode_input(
    #             wbtc_liquidity_amount * 10 ** 10 * 2, 1, wbtc_liquidity_amount * 2
    #         ),
    #     },
    # )

    # assert wbtc.balanceOf(badger.devMultisig) >= wbtc_liquidity_amount * 2

    # ===== Move initial liquidity funds to Seeder =====
    multi.execute(
        MultisigTxMetadata(
            description="Transfer initial liquidity WBTC to the Seeder", ),
        {
            "to": wbtc.address,
            "data": wbtc.transfer.encode_input(seeder, 200000000),
        },
    )

    # ===== Move DIGG to Seeder =====
    digg.token.transfer(seeder, digg.token.totalSupply(), {"from": deployer})

    # ===== Move Required Badger to Seeder from RewardsEscrow =====
    multi.execute(
        MultisigTxMetadata(
            description="Move Required Badger to Seeder from RewardsEscrow", ),
        {
            "to":
            badger.rewardsEscrow.address,
            "data":
            badger.rewardsEscrow.transfer.encode_input(badger.token, seeder,
                                                       Wei("30000 ether")),
        },
    )

    # ===== Add DIGG token to all geyser distribution lists =====
    # (Also, add Seeder as approved schedule creator)
    geyser_keys = [
        "native.badger",
        "native.renCrv",
        "native.sbtcCrv",
        "native.tbtcCrv",
        "native.uniBadgerWbtc",
        "harvest.renCrv",
        "native.sushiWbtcEth",
        "native.sushiBadgerWbtc",
        "native.uniDiggWbtc",
        "native.sushiDiggWbtc",
    ]

    for key in geyser_keys:
        geyser = badger.getGeyser(key)
        print(key, geyser)
        id = multi.addTx(
            MultisigTxMetadata(
                description="Add DIGG token to distribution tokens on {} geyser"
                .format(key), ),
            {
                "to": geyser.address,
                "data": geyser.addDistributionToken.encode_input(digg.token),
            },
        )

        tx = multi.executeTx(id)

        assert geyser.hasRole(DEFAULT_ADMIN_ROLE, badger.devMultisig)

        multi.execute(
            MultisigTxMetadata(
                description="Allow Seeder to set unlock schedules on {} geyser"
                .format(key), ),
            {
                "to": geyser.address,
                "data": geyser.grantRole.encode_input(locker_role, seeder),
            },
        )

        assert geyser.hasRole(locker_role, seeder)

    # Seeder needs to have admin role to config Faucets. Remove role as part of seed.
    rewards_keys = [
        "native.digg",
        "native.uniDiggWbtc",
        "native.sushiDiggWbtc",
    ]

    for key in rewards_keys:
        rewards = badger.getSettRewards(key)
        rewards.grantRole(DEFAULT_ADMIN_ROLE, seeder, {"from": deployer})
        rewards.grantRole(DEFAULT_ADMIN_ROLE, badger.devMultisig,
                          {"from": deployer})
        rewards.renounceRole(DEFAULT_ADMIN_ROLE, deployer, {"from": deployer})

    # print(digg.token.balanceOf(deployer))
    # assert digg.token.balanceOf(deployer) == digg.token.totalSupply()
    # digg.token.transfer(seeder, digg.token.totalSupply(), {"from": deployer})
    # wbtc = interface.IERC20(token_registry.wbtc)
    # wbtc.transfer(seeder, 200000000, {"from": user})

    # ===== Seed Prep =====

    print("wbtc.balanceOf(seeder)", wbtc.balanceOf(seeder))
    assert digg.token.balanceOf(seeder) >= digg.token.totalSupply()
    assert wbtc.balanceOf(seeder) >= 200000000

    print(digg.diggDistributor.address)
    print("digg.diggDistributor", digg.diggDistributor.isOpen())
    digg.diggDistributor.transferOwnership(seeder, {"from": deployer})

    print("prePreSeed", digg.token.balanceOf(seeder))

    seeder.preSeed({"from": deployer})

    print("postPreSeed", digg.token.balanceOf(seeder))

    seeder.seed({"from": deployer})

    # seeder.transferOwnership(badger.devMultisig, {'from': deployer})

    # tx = multi.execute(
    #     MultisigTxMetadata(description="Withdraw crvRen for 100% WBTC",),
    #     {
    #         "to": seeder.address,
    #         "data": seeder.preSeed.encode_input(),
    #     },
    # )

    # seeder.initialize({"from": deployer})

    # Unpause all Setts
    setts_to_unpause = [
        "native.digg",
        "native.uniDiggWbtc",
        "native.sushiDiggWbtc",
    ]

    for key in setts_to_unpause:
        sett = badger.getSett(key)

        id = multi.addTx(
            MultisigTxMetadata(description="Unpause Sett {}".format(key), ),
            {
                "to": sett.address,
                "data": sett.unpause.encode_input(),
            },
        )

        tx = multi.executeTx(id)
        assert sett.paused() == False