-
Notifications
You must be signed in to change notification settings - Fork 12
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
- Loading branch information
Jason Banks
committed
Jan 31, 2019
1 parent
f605d04
commit 9655d4d
Showing
1 changed file
with
192 additions
and
0 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,192 @@ | ||
'use strict'; | ||
|
||
// Load external packages | ||
const chai = require('chai'), | ||
Web3 = require('web3'), | ||
Package = require('../../../index'), | ||
Mosaic = require('@openstfoundation/mosaic-tbd'); | ||
|
||
const Setup = Package.EconomySetup, | ||
OrganizationHelper = Setup.OrganizationHelper, | ||
assert = chai.assert, | ||
config = require('../../utils/configReader'), | ||
StakeHelper = require('../../../lib/helpers/stake/gateway_composer/StakeHelper'), | ||
Staker = require('../../../lib/helpers/stake/gateway_composer/Staker'), | ||
MockContractsDeployer = require('../../utils/MockContractsDeployer'), | ||
abiBinProvider = MockContractsDeployer.abiBinProvider(), | ||
BTHelper = Package.EconomySetup.BrandedTokenHelper, | ||
GatewayComposerHelper = Setup.GatewayComposerHelper, | ||
Contracts = Package.Contracts; | ||
|
||
const { dockerSetup, dockerTeardown } = require('../../utils/docker'); | ||
|
||
let originWeb3, | ||
owner, | ||
worker, | ||
caOrganization, | ||
caMockToken, | ||
stakeRequestHash, | ||
gatewayComposerAddress, | ||
beneficiary, | ||
btStakeStruct, | ||
caGateway, | ||
btAddress, | ||
stakeHelperInstance, | ||
mockTokenAbi, | ||
deployerAddress, | ||
txOptions, | ||
accountsOrigin; | ||
|
||
describe('RejectStakeRequest', async function() { | ||
before(async function() { | ||
// Set up docker geth instance and retrieve RPC endpoint | ||
const { rpcEndpointOrigin } = await dockerSetup(); | ||
originWeb3 = new Web3(rpcEndpointOrigin); | ||
accountsOrigin = await originWeb3.eth.getAccounts(); | ||
deployerAddress = accountsOrigin[0]; | ||
owner = deployerAddress; | ||
beneficiary = accountsOrigin[1]; | ||
}); | ||
|
||
after(() => { | ||
dockerTeardown(); | ||
}); | ||
|
||
it('Deploys Organization contract', async function() { | ||
// Create worker address in wallet in order to sign EIP 712 hash | ||
// and fund in order to execute rejectStakeRequest | ||
await originWeb3.eth.accounts.wallet.create(1); | ||
worker = originWeb3.eth.accounts.wallet[0].address; | ||
await originWeb3.eth.sendTransaction({from: accountsOrigin[2], to: worker, value: originWeb3.utils.toWei('1')}); | ||
|
||
let orgHelper = new OrganizationHelper(originWeb3, caOrganization); | ||
const orgConfig = { | ||
deployer: deployerAddress, | ||
owner: owner, | ||
workers: worker, | ||
workerExpirationHeight: '20000000' | ||
}; | ||
orgHelper.setup(orgConfig).then(function() { | ||
caOrganization = orgHelper.address; | ||
}); | ||
assert.isNotNull(caOrganization, 'Organization contract address should not be null.'); | ||
}); | ||
|
||
it('Deploys EIP20Token contract', async function() { | ||
const deployerInstance = new MockContractsDeployer(deployerAddress, originWeb3); | ||
return deployerInstance.deployMockToken().then(function() { | ||
caMockToken = deployerInstance.addresses.MockToken; | ||
}); | ||
assert.isNotNull(caMockToken, 'EIP20Token contract address should not be null.'); | ||
}); | ||
|
||
it('Deploys BrandedToken contract', async function() { | ||
const btHelperConfig = { | ||
deployer: deployerAddress, | ||
valueToken: caMockToken, | ||
symbol: 'BT', | ||
name: 'MyBrandedToken', | ||
decimals: '18', | ||
conversionRate: '1000', | ||
conversionRateDecimals: 5, | ||
organization: caOrganization | ||
}; | ||
|
||
const btDeployParams = { | ||
from: deployerAddress, | ||
gasPrice: config.gasPrice | ||
}; | ||
|
||
const btHelper = new BTHelper(originWeb3, null); | ||
const brandedTokenInstance = await btHelper.setup(btHelperConfig, btDeployParams); | ||
btAddress = brandedTokenInstance.contractAddress; | ||
assert.isNotNull(btAddress, 'BrandedToken contract address should not be null.'); | ||
}); | ||
|
||
it('Deploys GatewayComposer contract', async function() { | ||
const gcHelperConfig = { | ||
deployer: deployerAddress, | ||
valueToken: caMockToken, | ||
brandedToken: btAddress, | ||
owner: owner | ||
}; | ||
|
||
let gcDeployParams = { | ||
from: deployerAddress, | ||
gasPrice: config.gasPrice | ||
}; | ||
|
||
let gcHelper = new GatewayComposerHelper(originWeb3, null), | ||
gatewayComposerInstance = await gcHelper.setup(gcHelperConfig, gcDeployParams); | ||
|
||
gatewayComposerAddress = gatewayComposerInstance.contractAddress; | ||
assert.isNotNull(gatewayComposerAddress, 'GatewayComposer contract address should not be null.'); | ||
}); | ||
|
||
it('Deploys mock gateway contract', async function() { | ||
const deployerInstance = new MockContractsDeployer(deployerAddress, originWeb3); | ||
await deployerInstance.deployMockGatewayPass(); | ||
caGateway = deployerInstance.addresses.MockGatewayPass; | ||
assert.isNotNull(caGateway, 'Gateway contract address should not be null.'); | ||
}); | ||
|
||
it('Performs staker.requestStake', async function() { | ||
mockTokenAbi = abiBinProvider.getABI('MockToken'); | ||
stakeHelperInstance = new StakeHelper(originWeb3, btAddress, gatewayComposerAddress); | ||
|
||
txOptions = { | ||
from: owner, | ||
gas: '7500000' | ||
}; | ||
const mintBTAmountInWei = await stakeHelperInstance.convertToBTToken( | ||
config.stakeAmountInWei, | ||
btAddress, | ||
originWeb3, | ||
txOptions | ||
), | ||
stakerGatewayNonce = 1; | ||
|
||
const stakerInstance = new Staker(originWeb3, caMockToken, btAddress, gatewayComposerAddress); | ||
await stakerInstance.requestStake( | ||
mockTokenAbi, | ||
owner, | ||
config.stakeAmountInWei, | ||
mintBTAmountInWei, | ||
caGateway, | ||
config.stakeGasPrice, | ||
config.stakeGasLimit, | ||
beneficiary, | ||
stakerGatewayNonce, | ||
txOptions | ||
); | ||
|
||
stakeRequestHash = await stakeHelperInstance._getStakeRequestHashForStakerRawTx( | ||
gatewayComposerAddress, | ||
originWeb3, | ||
txOptions | ||
); | ||
|
||
btStakeStruct = await stakeHelperInstance._getStakeRequestRawTx(stakeRequestHash, originWeb3, txOptions); | ||
assert.strictEqual(gatewayComposerAddress, btStakeStruct.staker, 'Incorrect staker address'); | ||
}); | ||
|
||
it('Performs worker.rejectStakeRequest', async function() { | ||
const brandedToken = Contracts.getBrandedToken(originWeb3, btAddress); | ||
const tx = brandedToken.methods.rejectStakeRequest(stakeRequestHash) | ||
|
||
txOptions = { | ||
from: worker, | ||
gas: '7500000' | ||
}; | ||
|
||
return tx | ||
.send(txOptions) | ||
.on('transactionHash', function(transactionHash) { | ||
console.log('\t - transaction hash of reject stake request:', transactionHash); | ||
}) | ||
.on('error', function(error) { | ||
console.log('\t !! Error for requestStake!!', error, '\n\t !! ERROR !!\n'); | ||
return Promise.reject(error); | ||
}); | ||
}); | ||
}); |