UNPKG

@dydxfoundation/governance

Version:
81 lines (80 loc) 4.69 kB
"use strict"; var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) { var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d; if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc); else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r; return c > 3 && r && Object.defineProperty(target, key, r), r; }; var __importDefault = (this && this.__importDefault) || function (mod) { return (mod && mod.__esModule) ? mod : { "default": mod }; }; Object.defineProperty(exports, "__esModule", { value: true }); const bignumber_js_1 = __importDefault(require("bignumber.js")); const utils_1 = require("ethers/lib/utils"); const types_1 = require("../../../types"); const config_1 = require("../config"); const types_2 = require("../types"); const methodValidators_1 = require("../validators/methodValidators"); const BaseService_1 = __importDefault(require("./BaseService")); class ClaimsProxyService extends BaseService_1.default { constructor(config, safetyModule, liquidityModule, merkleDistributor, hardhatClaimsProxyAddresses, hardhatTokenAddresses, hardhatTreasuryAddresses) { super(config, types_1.ClaimsProxy__factory); this.safetyModule = safetyModule; this.liquidityModule = liquidityModule; this.merkleDistributor = merkleDistributor; // Get the contract address. const { network } = this.config; const isHardhatNetwork = network === types_2.Network.hardhat; if (isHardhatNetwork && (!hardhatClaimsProxyAddresses || !hardhatTokenAddresses || !hardhatTreasuryAddresses)) { throw new Error('Must specify token and treasury addresses when on hardhat network'); } const tokenAddresses = isHardhatNetwork ? hardhatTokenAddresses : config_1.dydxTokenAddresses[network]; this.tokenAddress = tokenAddresses.TOKEN_ADDRESS; this.treasuryAddresses = isHardhatNetwork ? hardhatTreasuryAddresses : config_1.dydxTreasuryAddresses[network]; const addresses = isHardhatNetwork ? hardhatClaimsProxyAddresses : config_1.claimsProxyAddresses[network]; this.claimsProxyAddress = addresses.CLAIMS_PROXY_ADDRESS; } get contract() { return this.getContractInstance(this.claimsProxyAddress); } async claimRewards(user) { const { provider } = this.config; const dydxToken = types_1.DydxToken__factory.connect(this.tokenAddress, provider); const [safetyModuleRewards, liquidityStakingRewards, merkleProof, rewardsTreasuryBalance,] = await Promise.all([ this.safetyModule.getUserUnclaimedRewards(user), this.liquidityModule.getUserUnclaimedRewards(user), this.merkleDistributor.getActiveRootMerkleProof(user), dydxToken.balanceOf(this.treasuryAddresses.REWARDS_TREASURY_ADDRESS), ]); const hasSafetyModuleRewards = !new bignumber_js_1.default(safetyModuleRewards).isZero(); const hasLiquidityStakingRewards = !new bignumber_js_1.default(liquidityStakingRewards).isZero(); const userUnclaimedRewards = await this.contract.callStatic.claimRewards(true, true, merkleProof.cumulativeAmount, merkleProof.merkleProof, true, { from: user }); const vestFromTreasuryVester = rewardsTreasuryBalance.lt(userUnclaimedRewards); const txCallback = this.generateTxCallback({ rawTxMethod: () => this.contract.populateTransaction.claimRewards(hasSafetyModuleRewards, hasLiquidityStakingRewards, merkleProof.cumulativeAmount, merkleProof.merkleProof, vestFromTreasuryVester), from: user, gasLimit: 600000, }); return [ { tx: txCallback, txType: types_2.eEthereumTxType.CLAIMS_PROXY_ACTION, gas: this.generateTxPriceEstimation([], txCallback), }, ]; } async getUserUnclaimedRewards(user) { const merkleProof = await this.merkleDistributor.getActiveRootMerkleProof(user); const userUnclaimedRewards = await this.contract.callStatic.claimRewards(true, true, merkleProof.cumulativeAmount, merkleProof.merkleProof, true, { from: user }); return (0, utils_1.formatEther)(userUnclaimedRewards); } } __decorate([ methodValidators_1.StakingValidator ], ClaimsProxyService.prototype, "claimRewards", null); exports.default = ClaimsProxyService;