Skip to content

Instantly share code, notes, and snippets.

@xseignard
Last active August 13, 2019 12:17
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save xseignard/8855bca94cfc84f61ff065eba148295b to your computer and use it in GitHub Desktop.
Save xseignard/8855bca94cfc84f61ff065eba148295b to your computer and use it in GitHub Desktop.
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