Skip to content
This repository has been archived by the owner on Jan 18, 2023. It is now read-only.

Commit

Permalink
Small refactor of constants and helpers. Added deploy and tests for b…
Browse files Browse the repository at this point in the history
…tcdai_btd. (#418)
  • Loading branch information
bweick committed Mar 7, 2019
1 parent f901fb7 commit 0063f5e
Show file tree
Hide file tree
Showing 7 changed files with 488 additions and 43 deletions.
3 changes: 0 additions & 3 deletions contracts/core/tokens/RebalancingSetToken.sol
Original file line number Diff line number Diff line change
Expand Up @@ -66,9 +66,6 @@ contract RebalancingSetToken is
IVault private vaultInstance;
IWhiteList private componentWhiteListInstance;

// All rebalancingSetTokens have same natural unit, still allows for
// small amounts to be issued and attempts to reduce slippage as much
// as possible.
uint256 public naturalUnit;
address public manager;
RebalancingHelperLibrary.State public rebalanceState;
Expand Down
27 changes: 21 additions & 6 deletions deployments/constants.ts
Original file line number Diff line number Diff line change
Expand Up @@ -9,25 +9,40 @@ export default {
WBTC: {
PRICE: new BigNumber(3711),
FULL_TOKEN_UNITS: new BigNumber(10 ** 8),
MULTIPLIER: new BigNumber(1),
},
DEFAULT_WBTC_UNIT: new BigNumber(1),

WETH: {
FULL_TOKEN_UNITS: new BigNumber(10 ** 18),
PRICE: new BigNumber(128),
MULTIPLIER: new BigNumber(1),
},
WETH_DOMINANT_REBALANCING_NATURAL_UNIT: new BigNumber(10 ** 12),
DEFAULT_COLLATERAL_NATURAL_UNIT: new BigNumber(10 ** 12),
WETH_DOMINANT_COLLATERAL_NATURAL_UNIT: new BigNumber(10 ** 12),

DAI: {
FULL_TOKEN_UNITS: new BigNumber(10 ** 18),
PRICE: new BigNumber(1),
MULTIPLIER: new BigNumber(1),
},

PRICE_PRECISION: new BigNumber(100),
DEFAULT_REBALANCING_NATURAL_UNIT: new BigNumber(10 ** 10),
BTCDAI_BTD: {
PRICE_PRECISION: new BigNumber(100),
DAI_MULTIPLIER: new BigNumber(1),
WBTC_MULTIPLIER: new BigNumber(1),
},

ETHDAI_BTD: {
PRICE_PRECISION: new BigNumber(100),
DAI_MULTIPLIER: new BigNumber(1),
WETH_MULTIPLIER: new BigNumber(1),
},

BITETH: {
PRICE_PRECISION: new BigNumber(100),
WBTC_MULTIPLIER: new BigNumber(1),
WETH_MULTIPLIER: new BigNumber(1),
},

DEFAULT_REBALANCING_NATURAL_UNIT: new BigNumber(10 ** 6),
REBALANCING_SET_USD_PRICE: new BigNumber(100),
DEFAULT_AUCTION_PRICE_NUMERATOR: 1374,
DEFAULT_AUCTION_PRICE_DENOMINATOR: 1000,
Expand Down
2 changes: 2 additions & 0 deletions deployments/contractNames.ts
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,8 @@ export const DEPLOYED_TOKEN = {
BitEthRebalancingSetToken: 'BitEthRebalancingSetToken',
ETHDaiInitialCollateralSet: 'ETHDaiInitialCollateralSet',
ETHDaiRebalancingSetToken: 'ETHDaiRebalancingSetToken',
BTCDaiInitialCollateralSet: 'BTCDaiInitialCollateralSet',
BTCDaiRebalancingSetToken: 'BTCDaiRebalancingSetToken',
};

export const DEPENDENCY = {
Expand Down
25 changes: 25 additions & 0 deletions deployments/network-constants.ts
Original file line number Diff line number Diff line change
Expand Up @@ -71,6 +71,31 @@ export default {
staging: 50,
development: 50,
},
btcDaiProposalPeriod: {
production: constants.ONE_DAY_IN_SECONDS,
staging: constants.THIRTY_MINUTES_IN_SECONDS,
development: constants.ONE_DAY_IN_SECONDS,
},
btcDaiRebalanceInterval: {
production: constants.THIRTY_DAYS_IN_SECONDS,
staging: constants.THIRTY_MINUTES_IN_SECONDS,
development: constants.ONE_DAY_IN_SECONDS,
},
btcDaiRebalanceManagerAuctionTimeToPivot: {
production: constants.ONE_DAY_IN_SECONDS,
staging: constants.ONE_HOUR_IN_SECONDS,
development: constants.ONE_DAY_IN_SECONDS,
},
btcDaiRebalanceManagerAllocationUpperBound: {
production: 60,
staging: 50,
development: 50,
},
btcDaiRebalanceManagerAllocationLowerBound: {
production: 40,
staging: 50,
development: 50,
},
timeLockPeriod: {
production: 0,
staging: 0,
Expand Down
176 changes: 169 additions & 7 deletions deployments/stages/5_rebalancing.ts
Original file line number Diff line number Diff line change
Expand Up @@ -14,13 +14,15 @@ import {
import { deployContract, TX_DEFAULTS, executeTransaction } from '../utils/blockchain';

import {
BTCDaiRebalancingManagerContract,
BTCETHRebalancingManagerContract,
ETHDaiRebalancingManagerContract,
SetTokenContract,
CoreContract,
RebalancingSetTokenContract
} from '../../utils/contracts';

import { BTCDaiRebalancingManager } from '../../artifacts/ts/BTCDaiRebalancingManager';
import { BTCETHRebalancingManager } from '../../artifacts/ts/BTCETHRebalancingManager';
import { Core } from '../../artifacts/ts/Core';
import { ETHDaiRebalancingManager } from '../../artifacts/ts/ETHDaiRebalancingManager';
Expand All @@ -35,7 +37,7 @@ import constants from '../constants';
import {
calculateInitialSetUnits,
calculateRebalancingSetUnitShares,
calculateETHDaiInitialSetUnits,
calculateGeneralInitialSetUnits,
} from '../utils/rebalancing';

export class RebalancingStage implements DeploymentStageInterface {
Expand Down Expand Up @@ -71,6 +73,10 @@ export class RebalancingStage implements DeploymentStageInterface {
await this.deployETHDaiRebalancingManager();
await this.deployETHDaiInitialCollateralizedSet();
await this.deployETHDaiRebalancingSetToken();

await this.deployBTCDaiRebalancingManager();
await this.deployBTCDaiInitialCollateralizedSet();
await this.deployBTCDaiRebalancingSetToken();
}

async deployBitEthRebalancingManager(): Promise<BTCETHRebalancingManagerContract> {
Expand Down Expand Up @@ -101,8 +107,8 @@ export class RebalancingStage implements DeploymentStageInterface {
linearAuctionCurveAddress,
networkConstants.bitEthRebalanceManagerAuctionTimeToPivot[this._networkConstant],
[
constants.WBTC.MULTIPLIER.toString(),
constants.WETH.MULTIPLIER.toString()],
constants.BITETH.WBTC_MULTIPLIER.toString(),
constants.BITETH.WETH_MULTIPLIER.toString()],
[
networkConstants.bitEthRebalanceManagerAllocationLowerBound[this._networkConstant],
networkConstants.bitEthRebalanceManagerAllocationUpperBound[this._networkConstant],
Expand Down Expand Up @@ -224,8 +230,8 @@ export class RebalancingStage implements DeploymentStageInterface {
linearAuctionCurveAddress,
networkConstants.ethDaiRebalanceManagerAuctionTimeToPivot[this._networkConstant],
[
constants.DAI.MULTIPLIER.toString(),
constants.WETH.MULTIPLIER.toString()],
constants.ETHDAI_BTD.DAI_MULTIPLIER.toString(),
constants.ETHDAI_BTD.WETH_MULTIPLIER.toString()],
[
networkConstants.ethDaiRebalanceManagerAllocationLowerBound[this._networkConstant],
networkConstants.ethDaiRebalanceManagerAllocationUpperBound[this._networkConstant],
Expand All @@ -249,7 +255,15 @@ export class RebalancingStage implements DeploymentStageInterface {
const daiAddress = await findDependency(DEPENDENCY.DAI);
const wethAddress = await findDependency(DEPENDENCY.WETH);

const initialSetParams = calculateETHDaiInitialSetUnits();
const initialSetParams = calculateGeneralInitialSetUnits(
constants.DAI.PRICE,
constants.WETH.PRICE,
constants.ETHDAI_BTD.DAI_MULTIPLIER,
constants.ETHDAI_BTD.WETH_MULTIPLIER,
constants.DAI.FULL_TOKEN_UNITS,
constants.WETH.FULL_TOKEN_UNITS,
constants.ETHDAI_BTD.PRICE_PRECISION,
);
const initialSetName = SetProtocolUtils.stringToBytes('ETHDAI');
const initialSymbol = SetProtocolUtils.stringToBytes('ETHDAI');

Expand Down Expand Up @@ -284,7 +298,15 @@ export class RebalancingStage implements DeploymentStageInterface {
const rebalancingSetFactoryAddress = await getContractAddress(RebalancingSetTokenFactory.contractName);
const rebalancingManagerAddress = await getContractAddress(ETHDaiRebalancingManager.contractName);

const initialSetParams = calculateETHDaiInitialSetUnits();
const initialSetParams = calculateGeneralInitialSetUnits(
constants.DAI.PRICE,
constants.WETH.PRICE,
constants.ETHDAI_BTD.DAI_MULTIPLIER,
constants.ETHDAI_BTD.WETH_MULTIPLIER,
constants.DAI.FULL_TOKEN_UNITS,
constants.WETH.FULL_TOKEN_UNITS,
constants.ETHDAI_BTD.PRICE_PRECISION,
);
const rebalancingSetUnitShares = calculateRebalancingSetUnitShares(
initialSetParams['units'],
initialSetParams['naturalUnit'],
Expand Down Expand Up @@ -321,4 +343,144 @@ export class RebalancingStage implements DeploymentStageInterface {

return await RebalancingSetTokenContract.at(address, this._web3, TX_DEFAULTS);
}

async deployBTCDaiRebalancingManager(): Promise<BTCDaiRebalancingManagerContract> {
const name = BTCDaiRebalancingManager.contractName;
let address = await getContractAddress(name);

if (address) {
return await BTCDaiRebalancingManagerContract.at(address, this._web3, TX_DEFAULTS);
}

const coreAddress = await getContractAddress(Core.contractName);
const setTokenFactoryAddress = await getContractAddress(SetTokenFactory.contractName);
const linearAuctionCurveAddress = await getContractAddress(LinearAuctionPriceCurve.contractName);
const wbtcMedianizerAddress = await findDependency(DEPENDENCY.WBTC_MEDIANIZER);
const daiAddress = await findDependency(DEPENDENCY.DAI);
const wbtcAddress = await findDependency(DEPENDENCY.WBTC);

const data = new this._web3.eth.Contract(BTCDaiRebalancingManager.abi).deploy({
data: BTCDaiRebalancingManager.bytecode,
arguments: [
coreAddress,
wbtcMedianizerAddress,
daiAddress,
wbtcAddress,
setTokenFactoryAddress,
linearAuctionCurveAddress,
networkConstants.btcDaiRebalanceManagerAuctionTimeToPivot[this._networkConstant],
[
constants.BTCDAI_BTD.DAI_MULTIPLIER.toString(),
constants.BTCDAI_BTD.WBTC_MULTIPLIER.toString()],
[
networkConstants.btcDaiRebalanceManagerAllocationLowerBound[this._networkConstant],
networkConstants.btcDaiRebalanceManagerAllocationUpperBound[this._networkConstant],
],
],
}).encodeABI();

address = await deployContract(data, this._web3, name);
return await BTCDaiRebalancingManagerContract.at(address, this._web3, TX_DEFAULTS);
}

async deployBTCDaiInitialCollateralizedSet(): Promise<SetTokenContract> {
const name = DEPLOYED_TOKEN.BTCDaiInitialCollateralSet;
let address = await getContractAddress(name);

if (address) {
return await SetTokenContract.at(address, this._web3, TX_DEFAULTS);
}

const setTokenFactoryAddress = await getContractAddress(SetTokenFactory.contractName);
const daiAddress = await findDependency(DEPENDENCY.DAI);
const wbtcAddress = await findDependency(DEPENDENCY.WBTC);

const initialSetParams = calculateGeneralInitialSetUnits(
constants.DAI.PRICE,
constants.WBTC.PRICE,
constants.BTCDAI_BTD.DAI_MULTIPLIER,
constants.BTCDAI_BTD.WBTC_MULTIPLIER,
constants.DAI.FULL_TOKEN_UNITS,
constants.WBTC.FULL_TOKEN_UNITS,
constants.BTCDAI_BTD.PRICE_PRECISION,
);
const initialSetName = SetProtocolUtils.stringToBytes('BTCDAI');
const initialSymbol = SetProtocolUtils.stringToBytes('BTCDAI');

const data = await this._coreContract.createSet.getABIEncodedTransactionData(
setTokenFactoryAddress,
[daiAddress, wbtcAddress],
initialSetParams['units'],
initialSetParams['naturalUnit'],
initialSetName,
initialSymbol,
SetProtocolUtils.stringToBytes(''),
TX_DEFAULTS
);

const receipt = await executeTransaction(data, this._coreContract.address, this._web3);
const logs = await this._setTestUtils.getLogsFromTxHash(receipt.transactionHash);
address = logs[0].args._setTokenAddress;

await writeContractToOutputs(name, address);
return await SetTokenContract.at(address, this._web3, TX_DEFAULTS);
}

async deployBTCDaiRebalancingSetToken(): Promise<RebalancingSetTokenContract> {
const name = DEPLOYED_TOKEN.BTCDaiRebalancingSetToken;
let address = await getContractAddress(name);

if (address) {
return await RebalancingSetTokenContract.at(address, this._web3, TX_DEFAULTS);
}

const initialSetToken = await getContractAddress(DEPLOYED_TOKEN.BTCDaiInitialCollateralSet);
const rebalancingSetFactoryAddress = await getContractAddress(RebalancingSetTokenFactory.contractName);
const rebalancingManagerAddress = await getContractAddress(BTCDaiRebalancingManager.contractName);

const initialSetParams = calculateGeneralInitialSetUnits(
constants.DAI.PRICE,
constants.WBTC.PRICE,
constants.BTCDAI_BTD.DAI_MULTIPLIER,
constants.BTCDAI_BTD.WBTC_MULTIPLIER,
constants.DAI.FULL_TOKEN_UNITS,
constants.WBTC.FULL_TOKEN_UNITS,
constants.BTCDAI_BTD.PRICE_PRECISION,
);
const rebalancingSetUnitShares = calculateRebalancingSetUnitShares(
initialSetParams['units'],
initialSetParams['naturalUnit'],
'DAI',
'WBTC'
);

const rebalancingSetNaturalUnit = constants.DEFAULT_REBALANCING_NATURAL_UNIT;
const rebalancingSetName = SetProtocolUtils.stringToBytes('BTD BTCDai Set');
const rebalancingSetSymbol = SetProtocolUtils.stringToBytes('BTCDai');
const rebalancingSetCallData = SetProtocolUtils.generateRebalancingSetTokenCallData(
rebalancingManagerAddress,
networkConstants.btcDaiProposalPeriod[this._networkConstant],
networkConstants.btcDaiRebalanceInterval[this._networkConstant]
);

const data = await this._coreContract.createSet.getABIEncodedTransactionData(
rebalancingSetFactoryAddress,
[initialSetToken],
rebalancingSetUnitShares,
rebalancingSetNaturalUnit,
rebalancingSetName,
rebalancingSetSymbol,
rebalancingSetCallData,
TX_DEFAULTS
);

const receipt = await executeTransaction(data, this._coreContract.address, this._web3);

const logs = await this._setTestUtils.getLogsFromTxHash(receipt.transactionHash);
address = logs[0].args._setTokenAddress;

await writeContractToOutputs(name, address);

return await RebalancingSetTokenContract.at(address, this._web3, TX_DEFAULTS);
}
}

0 comments on commit 0063f5e

Please sign in to comment.