Last active
August 13, 2019 12:17
-
-
Save xseignard/8855bca94cfc84f61ff065eba148295b to your computer and use it in GitHub Desktop.
This file contains hidden or 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
const sha3 = require('js-sha3').keccak_256 | |
const coder = require('web3/lib/solidity/coder.js') | |
const blockNumber = require('@aragon/test-helpers/blockNumber')(web3) | |
const FundraisingKit = artifacts.require('FundraisingKit') | |
const TokenMock = artifacts.require('TokenMock') | |
const Controller = artifacts.require('AragonFundraisingController') | |
const MarketMaker = artifacts.require('BatchedBancorMarketMaker') | |
const getBuyOrderBatchId = tx => { | |
const events = tx.receipt.logs.filter(l => { | |
return l.topics[0] === '0x' + sha3('NewBuyOrder(address,uint256,address,uint256,uint256)') | |
}) | |
const data = coder.decodeParams(['address', 'uint256'], events[0].data.replace('0x', '')) | |
return data[1] | |
} | |
const getSellOrderBatchId = tx => { | |
const events = tx.receipt.logs.filter(l => { | |
return l.topics[0] === '0x' + sha3('NewSellOrder(address,uint256,address,uint256)') | |
}) | |
const data = coder.decodeParams(['address', 'uint256'], events[0].data.replace('0x', '')) | |
return data[1] | |
} | |
const createOrder = async (controller, marketMaker, collateral, amount, isBuy, isClaimed) => { | |
const receipt = isBuy ? await controller.openBuyOrder(collateral.address, amount) : await controller.openSellOrder(collateral.address, amount) | |
if (isClaimed) { | |
const batchId = isBuy ? getBuyOrderBatchId(receipt) : getSellOrderBatchId(receipt) | |
await increaseBlock() | |
if (isBuy) await controller.claimBuyOrder(batchId, collateral.address) | |
else await controller.claimSellOrder(batchId, collateral.address) | |
} | |
} | |
const increaseBlock = () => { | |
return new Promise((resolve, reject) => { | |
web3.currentProvider.sendAsync( | |
{ | |
jsonrpc: '2.0', | |
method: 'evm_mine', | |
id: 12345, | |
}, | |
(err, result) => { | |
if (err) reject(err) | |
resolve(result) | |
} | |
) | |
}) | |
} | |
module.exports = async callback => { | |
try { | |
const collateral1 = await TokenMock.new('0xb4124cEB3451635DAcedd11767f004d8a28c6eE7', 1000000000000000000, 'Dai', 'DAI') | |
const collateral2 = await TokenMock.new('0xb4124cEB3451635DAcedd11767f004d8a28c6eE7', 1000000000000000000, 'Aragon', 'ANT') | |
const kit = await FundraisingKit.at(process.argv[6]) | |
const receipt1 = await kit.newTokens('PRO', 'PROJECT') | |
const receipt2 = await kit.newMultisigInstance( | |
'fundraising' + Math.random(), | |
['0xb4124cEB3451635DAcedd11767f004d8a28c6eE7', '0x8401Eb5ff34cc943f096A32EF3d5113FEbE8D4Eb '], | |
2 | |
) | |
const receipt3 = await kit.newFundraisingInstance(collateral1.address, collateral2.address) | |
const dao = receipt2.logs.filter(l => l.event == 'DeployMultisigInstance')[0].args.dao | |
const controllerAddress = receipt3.logs.filter( | |
l => l.event === 'InstalledApp' && l.args.appId === '0x668ac370eed7e5861234d1c0a1e512686f53594fcb887e5bcecc35675a4becac' | |
)[0].args.appProxy | |
const marketMakerAddress = receipt3.logs.filter( | |
l => l.event === 'InstalledApp' && l.args.appId === '0xc2bb88ab974c474221f15f691ed9da38be2f5d37364180cec05403c656981bf0' | |
)[0].args.appProxy | |
console.log(controllerAddress) | |
console.log(marketMakerAddress) | |
const controller = await Controller.at(controllerAddress) | |
const marketMaker = await MarketMaker.at(marketMakerAddress) | |
await collateral1.approve(marketMakerAddress, 1000000000000000000) | |
await collateral2.approve(marketMakerAddress, 1000000000000000000) | |
console.log('OK') | |
// BATCH 1: one buy, claimed | |
await createOrder(controller, marketMaker, collateral1, 1000, true, true) | |
// BATCH 2: one sell, claimed | |
await createOrder(controller, marketMaker, collateral1, 1, false, true) | |
// BATCH 3: one buy, claimed (collateral2) | |
await createOrder(controller, marketMaker, collateral2, 1000, true, true) | |
// BATCH 4: one buy, cleared and NOT claimed | |
await createOrder(controller, marketMaker, collateral1, 1000, true, false) | |
console.log('DAO deployed at ' + dao) | |
callback() | |
} catch (err) { | |
console.log(err) | |
callback(undefined, err) | |
} | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment