diff --git a/contracts/staking/test/core_test.ts b/contracts/staking/test/core_test.ts index 6934b75b79..022a88f8aa 100644 --- a/contracts/staking/test/core_test.ts +++ b/contracts/staking/test/core_test.ts @@ -61,7 +61,7 @@ describe('Staking Core', () => { [zrxTokenContract] = await erc20Wrapper.deployDummyTokensAsync(1, ZRX_TOKEN_DECIMALS); await erc20Wrapper.setBalancesAndAllowancesAsync(); // deploy staking contracts - stakingWrapper = new StakingWrapper(provider, owner, erc20ProxyContract, zrxTokenContract); + stakingWrapper = new StakingWrapper(provider, owner, erc20ProxyContract, zrxTokenContract, accounts); await stakingWrapper.deployAndConfigureContracts(); }); beforeEach(async () => { @@ -608,16 +608,27 @@ describe('Staking Core', () => { stakingWrapper.toBaseUnitAmount(4.54522236), stakingWrapper.toBaseUnitAmount(0) ]; + const makerSignatures = [ + // pool 0 + stakingWrapper.signApprovalForStakingPool(poolIds[0], makersByPoolId[0][0]).signature, + // pool 1 + stakingWrapper.signApprovalForStakingPool(poolIds[1], makersByPoolId[1][0]).signature, + stakingWrapper.signApprovalForStakingPool(poolIds[1], makersByPoolId[1][1]).signature, + // pool 2 + stakingWrapper.signApprovalForStakingPool(poolIds[2], makersByPoolId[2][0]).signature, + stakingWrapper.signApprovalForStakingPool(poolIds[2], makersByPoolId[2][1]).signature, + stakingWrapper.signApprovalForStakingPool(poolIds[2], makersByPoolId[2][2]).signature, + ] await Promise.all([ // pool 0 - stakingWrapper.addMakerToPoolAsync(poolIds[0], makersByPoolId[0][0], "0x00", poolOperators[0]), + stakingWrapper.addMakerToPoolAsync(poolIds[0], makersByPoolId[0][0], makerSignatures[0], poolOperators[0]), // pool 1 - stakingWrapper.addMakerToPoolAsync(poolIds[1], makersByPoolId[1][0], "0x00", poolOperators[1]), - stakingWrapper.addMakerToPoolAsync(poolIds[1], makersByPoolId[1][1], "0x00", poolOperators[1]), + stakingWrapper.addMakerToPoolAsync(poolIds[1], makersByPoolId[1][0], makerSignatures[1], poolOperators[1]), + stakingWrapper.addMakerToPoolAsync(poolIds[1], makersByPoolId[1][1], makerSignatures[2], poolOperators[1]), // pool 2 - stakingWrapper.addMakerToPoolAsync(poolIds[2], makersByPoolId[2][0], "0x00", poolOperators[2]), - stakingWrapper.addMakerToPoolAsync(poolIds[2], makersByPoolId[2][1], "0x00", poolOperators[2]), - stakingWrapper.addMakerToPoolAsync(poolIds[2], makersByPoolId[2][2], "0x00", poolOperators[2]), + stakingWrapper.addMakerToPoolAsync(poolIds[2], makersByPoolId[2][0], makerSignatures[3], poolOperators[2]), + stakingWrapper.addMakerToPoolAsync(poolIds[2], makersByPoolId[2][1], makerSignatures[4], poolOperators[2]), + stakingWrapper.addMakerToPoolAsync(poolIds[2], makersByPoolId[2][2], makerSignatures[5], poolOperators[2]), ]); ///// 2 PAY FEES ///// await Promise.all([ @@ -775,7 +786,7 @@ describe('Staking Core', () => { expect(ownerRewardFloatingPoint).to.be.bignumber.equal(expectedOwnerReward); }); - it.only('pool management', async() => { + it('pool management', async() => { // create first pool const operatorAddress = stakers[0]; const operatorShare = 39; @@ -787,8 +798,7 @@ describe('Staking Core', () => { expect(nextPoolId).to.be.equal(expectedNextPoolId); // add maker to pool const makerAddress = makers[0]; - const makerPrivateKey = constants.TESTRPC_PRIVATE_KEYS[accounts.indexOf(makerAddress)]; - const makerApproval = stakingWrapper.getSignedApprovalForStakingPool(poolId, makerAddress, makerPrivateKey); + const makerApproval = stakingWrapper.signApprovalForStakingPool(poolId, makerAddress); await stakingWrapper.addMakerToPoolAsync(poolId, makerAddress, makerApproval.signature, operatorAddress); // check the pool id of the maker const poolIdOfMaker = await stakingWrapper.getMakerPoolId(makerAddress); @@ -804,8 +814,7 @@ describe('Staking Core', () => { // try to add a new maker address from an address other than the pool operator const notOperatorAddress = owner; const anotherMakerAddress = makers[1]; - const anotherMakerPrivateKey = constants.TESTRPC_PRIVATE_KEYS[accounts.indexOf(anotherMakerAddress)]; - const anotherMakerApproval = stakingWrapper.getSignedApprovalForStakingPool(poolId, anotherMakerAddress, anotherMakerPrivateKey); + const anotherMakerApproval = stakingWrapper.signApprovalForStakingPool(poolId, anotherMakerAddress); await expectTransactionFailedAsync( stakingWrapper.addMakerToPoolAsync(poolId, anotherMakerAddress, anotherMakerApproval.signature, notOperatorAddress), RevertReason.OnlyCallableByPoolOperator @@ -861,16 +870,27 @@ describe('Staking Core', () => { stakingWrapper.toBaseUnitAmount(4.54522236), stakingWrapper.toBaseUnitAmount(0) ]; + const makerSignatures = [ + // pool 0 + stakingWrapper.signApprovalForStakingPool(poolIds[0], makersByPoolId[0][0]).signature, + // pool 1 + stakingWrapper.signApprovalForStakingPool(poolIds[1], makersByPoolId[1][0]).signature, + stakingWrapper.signApprovalForStakingPool(poolIds[1], makersByPoolId[1][1]).signature, + // pool 2 + stakingWrapper.signApprovalForStakingPool(poolIds[2], makersByPoolId[2][0]).signature, + stakingWrapper.signApprovalForStakingPool(poolIds[2], makersByPoolId[2][1]).signature, + stakingWrapper.signApprovalForStakingPool(poolIds[2], makersByPoolId[2][2]).signature, + ] await Promise.all([ // pool 0 - stakingWrapper.addMakerToPoolAsync(poolIds[0], makersByPoolId[0][0], "0x00", poolOperators[0]), + stakingWrapper.addMakerToPoolAsync(poolIds[0], makersByPoolId[0][0], makerSignatures[0], poolOperators[0]), // pool 1 - stakingWrapper.addMakerToPoolAsync(poolIds[1], makersByPoolId[1][0], "0x00", poolOperators[1]), - stakingWrapper.addMakerToPoolAsync(poolIds[1], makersByPoolId[1][1], "0x00", poolOperators[1]), + stakingWrapper.addMakerToPoolAsync(poolIds[1], makersByPoolId[1][0], makerSignatures[1], poolOperators[1]), + stakingWrapper.addMakerToPoolAsync(poolIds[1], makersByPoolId[1][1], makerSignatures[2], poolOperators[1]), // pool 2 - stakingWrapper.addMakerToPoolAsync(poolIds[2], makersByPoolId[2][0], "0x00", poolOperators[2]), - stakingWrapper.addMakerToPoolAsync(poolIds[2], makersByPoolId[2][1], "0x00", poolOperators[2]), - stakingWrapper.addMakerToPoolAsync(poolIds[2], makersByPoolId[2][2], "0x00", poolOperators[2]), + stakingWrapper.addMakerToPoolAsync(poolIds[2], makersByPoolId[2][0], makerSignatures[3], poolOperators[2]), + stakingWrapper.addMakerToPoolAsync(poolIds[2], makersByPoolId[2][1], makerSignatures[4], poolOperators[2]), + stakingWrapper.addMakerToPoolAsync(poolIds[2], makersByPoolId[2][2], makerSignatures[5], poolOperators[2]), ]); ///// 2 PAY FEES ///// await Promise.all([ @@ -1009,16 +1029,27 @@ describe('Staking Core', () => { stakingWrapper.toBaseUnitAmount(4.54522236), stakingWrapper.toBaseUnitAmount(0) ]; + const makerSignatures = [ + // pool 0 + stakingWrapper.signApprovalForStakingPool(poolIds[0], makersByPoolId[0][0]).signature, + // pool 1 + stakingWrapper.signApprovalForStakingPool(poolIds[1], makersByPoolId[1][0]).signature, + stakingWrapper.signApprovalForStakingPool(poolIds[1], makersByPoolId[1][1]).signature, + // pool 2 + stakingWrapper.signApprovalForStakingPool(poolIds[2], makersByPoolId[2][0]).signature, + stakingWrapper.signApprovalForStakingPool(poolIds[2], makersByPoolId[2][1]).signature, + stakingWrapper.signApprovalForStakingPool(poolIds[2], makersByPoolId[2][2]).signature, + ] await Promise.all([ // pool 0 - stakingWrapper.addMakerToPoolAsync(poolIds[0], makersByPoolId[0][0], "0x00", poolOperators[0]), + stakingWrapper.addMakerToPoolAsync(poolIds[0], makersByPoolId[0][0], makerSignatures[0], poolOperators[0]), // pool 1 - stakingWrapper.addMakerToPoolAsync(poolIds[1], makersByPoolId[1][0], "0x00", poolOperators[1]), - stakingWrapper.addMakerToPoolAsync(poolIds[1], makersByPoolId[1][1], "0x00", poolOperators[1]), + stakingWrapper.addMakerToPoolAsync(poolIds[1], makersByPoolId[1][0], makerSignatures[1], poolOperators[1]), + stakingWrapper.addMakerToPoolAsync(poolIds[1], makersByPoolId[1][1], makerSignatures[2], poolOperators[1]), // pool 2 - stakingWrapper.addMakerToPoolAsync(poolIds[2], makersByPoolId[2][0], "0x00", poolOperators[2]), - stakingWrapper.addMakerToPoolAsync(poolIds[2], makersByPoolId[2][1], "0x00", poolOperators[2]), - stakingWrapper.addMakerToPoolAsync(poolIds[2], makersByPoolId[2][2], "0x00", poolOperators[2]), + stakingWrapper.addMakerToPoolAsync(poolIds[2], makersByPoolId[2][0], makerSignatures[3], poolOperators[2]), + stakingWrapper.addMakerToPoolAsync(poolIds[2], makersByPoolId[2][1], makerSignatures[4], poolOperators[2]), + stakingWrapper.addMakerToPoolAsync(poolIds[2], makersByPoolId[2][2], makerSignatures[5], poolOperators[2]), ]); ///// 2 PAY FEES ///// await Promise.all([ @@ -1253,16 +1284,27 @@ describe('Staking Core', () => { stakingWrapper.toBaseUnitAmount(4.54522236), stakingWrapper.toBaseUnitAmount(0) ]; + const makerSignatures = [ + // pool 0 + stakingWrapper.signApprovalForStakingPool(poolIds[0], makersByPoolId[0][0]).signature, + // pool 1 + stakingWrapper.signApprovalForStakingPool(poolIds[1], makersByPoolId[1][0]).signature, + stakingWrapper.signApprovalForStakingPool(poolIds[1], makersByPoolId[1][1]).signature, + // pool 2 + stakingWrapper.signApprovalForStakingPool(poolIds[2], makersByPoolId[2][0]).signature, + stakingWrapper.signApprovalForStakingPool(poolIds[2], makersByPoolId[2][1]).signature, + stakingWrapper.signApprovalForStakingPool(poolIds[2], makersByPoolId[2][2]).signature, + ] await Promise.all([ // pool 0 - stakingWrapper.addMakerToPoolAsync(poolIds[0], makersByPoolId[0][0], "0x00", poolOperators[0]), + stakingWrapper.addMakerToPoolAsync(poolIds[0], makersByPoolId[0][0], makerSignatures[0], poolOperators[0]), // pool 1 - stakingWrapper.addMakerToPoolAsync(poolIds[1], makersByPoolId[1][0], "0x00", poolOperators[1]), - stakingWrapper.addMakerToPoolAsync(poolIds[1], makersByPoolId[1][1], "0x00", poolOperators[1]), + stakingWrapper.addMakerToPoolAsync(poolIds[1], makersByPoolId[1][0], makerSignatures[1], poolOperators[1]), + stakingWrapper.addMakerToPoolAsync(poolIds[1], makersByPoolId[1][1], makerSignatures[2], poolOperators[1]), // pool 2 - stakingWrapper.addMakerToPoolAsync(poolIds[2], makersByPoolId[2][0], "0x00", poolOperators[2]), - stakingWrapper.addMakerToPoolAsync(poolIds[2], makersByPoolId[2][1], "0x00", poolOperators[2]), - stakingWrapper.addMakerToPoolAsync(poolIds[2], makersByPoolId[2][2], "0x00", poolOperators[2]), + stakingWrapper.addMakerToPoolAsync(poolIds[2], makersByPoolId[2][0], makerSignatures[3], poolOperators[2]), + stakingWrapper.addMakerToPoolAsync(poolIds[2], makersByPoolId[2][1], makerSignatures[4], poolOperators[2]), + stakingWrapper.addMakerToPoolAsync(poolIds[2], makersByPoolId[2][2], makerSignatures[5], poolOperators[2]), ]); ///// 2 PAY FEES ///// await Promise.all([ @@ -1439,16 +1481,27 @@ describe('Staking Core', () => { stakingWrapper.toBaseUnitAmount(4.54522236), stakingWrapper.toBaseUnitAmount(0) ]; + const makerSignatures = [ + // pool 0 + stakingWrapper.signApprovalForStakingPool(poolIds[0], makersByPoolId[0][0]).signature, + // pool 1 + stakingWrapper.signApprovalForStakingPool(poolIds[1], makersByPoolId[1][0]).signature, + stakingWrapper.signApprovalForStakingPool(poolIds[1], makersByPoolId[1][1]).signature, + // pool 2 + stakingWrapper.signApprovalForStakingPool(poolIds[2], makersByPoolId[2][0]).signature, + stakingWrapper.signApprovalForStakingPool(poolIds[2], makersByPoolId[2][1]).signature, + stakingWrapper.signApprovalForStakingPool(poolIds[2], makersByPoolId[2][2]).signature, + ] await Promise.all([ // pool 0 - stakingWrapper.addMakerToPoolAsync(poolIds[0], makersByPoolId[0][0], "0x00", poolOperators[0]), + stakingWrapper.addMakerToPoolAsync(poolIds[0], makersByPoolId[0][0], makerSignatures[0], poolOperators[0]), // pool 1 - stakingWrapper.addMakerToPoolAsync(poolIds[1], makersByPoolId[1][0], "0x00", poolOperators[1]), - stakingWrapper.addMakerToPoolAsync(poolIds[1], makersByPoolId[1][1], "0x00", poolOperators[1]), + stakingWrapper.addMakerToPoolAsync(poolIds[1], makersByPoolId[1][0], makerSignatures[1], poolOperators[1]), + stakingWrapper.addMakerToPoolAsync(poolIds[1], makersByPoolId[1][1], makerSignatures[2], poolOperators[1]), // pool 2 - stakingWrapper.addMakerToPoolAsync(poolIds[2], makersByPoolId[2][0], "0x00", poolOperators[2]), - stakingWrapper.addMakerToPoolAsync(poolIds[2], makersByPoolId[2][1], "0x00", poolOperators[2]), - stakingWrapper.addMakerToPoolAsync(poolIds[2], makersByPoolId[2][2], "0x00", poolOperators[2]), + stakingWrapper.addMakerToPoolAsync(poolIds[2], makersByPoolId[2][0], makerSignatures[3], poolOperators[2]), + stakingWrapper.addMakerToPoolAsync(poolIds[2], makersByPoolId[2][1], makerSignatures[4], poolOperators[2]), + stakingWrapper.addMakerToPoolAsync(poolIds[2], makersByPoolId[2][2], makerSignatures[5], poolOperators[2]), ]); ///// 2 PAY FEES ///// await Promise.all([ diff --git a/contracts/staking/test/utils/staking_wrapper.ts b/contracts/staking/test/utils/staking_wrapper.ts index 3513758b5d..19a0125916 100644 --- a/contracts/staking/test/utils/staking_wrapper.ts +++ b/contracts/staking/test/utils/staking_wrapper.ts @@ -1,4 +1,4 @@ -import { LogDecoder, txDefaults } from '@0x/contracts-test-utils'; +import { constants as testUtilsConstants, LogDecoder, txDefaults } from '@0x/contracts-test-utils'; import { BigNumber } from '@0x/utils'; import { Web3Wrapper } from '@0x/web3-wrapper'; import * as chai from 'chai'; @@ -23,13 +23,14 @@ export class StakingWrapper { private readonly _ownerAddres: string; private readonly _erc20ProxyContract: ERC20ProxyContract; private readonly _zrxTokenContract: DummyERC20TokenContract; + private readonly _accounts: string[]; private _stakingContractIfExists?: StakingContract; private _stakingProxyContractIfExists?: StakingProxyContract; private _zrxVaultContractIfExists?: ZrxVaultContract; private _rewardVaultContractIfExists?: RewardVaultContract; private _libMathTestContractIfExists?: LibMathTestContract; - constructor(provider: Provider, ownerAddres: string, erc20ProxyContract: ERC20ProxyContract, zrxTokenContract: DummyERC20TokenContract) { + constructor(provider: Provider, ownerAddres: string, erc20ProxyContract: ERC20ProxyContract, zrxTokenContract: DummyERC20TokenContract, accounts: string[]) { this._web3Wrapper = new Web3Wrapper(provider); this._provider = provider; const decoderArtifacts = _.merge(artifacts, erc20Artifacts); @@ -37,6 +38,7 @@ export class StakingWrapper { this._ownerAddres= ownerAddres; this._erc20ProxyContract = erc20ProxyContract; this._zrxTokenContract = zrxTokenContract; + this._accounts = accounts; } public getStakingContract(): StakingContract { this._validateDeployedOrThrow(); @@ -288,8 +290,9 @@ export class StakingWrapper { const messageHash = this.getStakingContract().getStakingPoolApprovalMessageHash.getABIDecodedReturnData(returndata); return messageHash; } - public getSignedApprovalForStakingPool(poolId: string, makerAddress: string, makerPrivateKey: Buffer, signatureType: SignatureType = SignatureType.EthSign): SignedStakingPoolApproval { - const signedStakingPoolApproval = this.getSignedApprovalForStakingPoolFlexible( + public signApprovalForStakingPool(poolId: string, makerAddress: string, signatureType: SignatureType = SignatureType.EthSign): SignedStakingPoolApproval { + const makerPrivateKey = testUtilsConstants.TESTRPC_PRIVATE_KEYS[this._accounts.indexOf(makerAddress)]; + const signedStakingPoolApproval = this.signApprovalForStakingPoolFlexible( poolId, makerAddress, makerPrivateKey, @@ -299,7 +302,7 @@ export class StakingWrapper { ); return signedStakingPoolApproval; } - public getSignedApprovalForStakingPoolFlexible( + public signApprovalForStakingPoolFlexible( poolId: string, makerAddress: string, makerPrivateKey: Buffer,