1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889 |
- /* global artifacts, web3, contract */
- require('chai').use(require('bn-chai')(web3.utils.BN)).use(require('chai-as-promised')).should()
- const { takeSnapshot, revertSnapshot } = require('../scripts/ganacheHelper')
- const Airdrop = artifacts.require('./AirdropMock.sol')
- const Torn = artifacts.require('./TORNMock.sol')
- const { cap } = require('../config').torn
- const { toBN, toWei } = require('web3-utils')
- const RLP = require('rlp')
- async function getNextAddr(sender, offset = 0) {
- const nonce = await web3.eth.getTransactionCount(sender)
- return (
- '0x' +
- web3.utils
- .sha3(RLP.encode([sender, Number(nonce) + Number(offset)]))
- .slice(12)
- .substring(14)
- )
- }
- async function deploySefldestruct(contract, args, deployerPK) {
- const c = new web3.eth.Contract(contract.abi)
- const data = c
- .deploy({
- data: contract.bytecode,
- arguments: args,
- })
- .encodeABI()
- const signed = await web3.eth.accounts.signTransaction(
- {
- gas: 5e6,
- gasPrice: toWei('1', 'gwei'),
- data,
- },
- deployerPK,
- )
- await web3.eth.sendSignedTransaction(signed.rawTransaction)
- }
- contract('Airdrop', (accounts) => {
- let torn
- let snapshotId
- const airdropDeployer = accounts[8]
- const deployerPK = '0x0f62d96d6675f32685bbdb8ac13cda7c23436f63efbb9d07700d8669ff12b7c4'
- const recipient1 = accounts[2]
- const recipient2 = accounts[3]
- let half = toBN(cap).div(toBN(2)).toString()
- before(async () => {
- const newAddr = await getNextAddr(airdropDeployer)
- torn = await Torn.new(accounts[0], 0, [{ to: newAddr, amount: cap }])
- snapshotId = await takeSnapshot()
- })
- describe('#airdrop', () => {
- it('should work', async () => {
- // web3 throws when it tried to deploy a contract with selfdestruct() in constructor
- await deploySefldestruct(
- Airdrop,
- [
- torn.address,
- [
- { to: recipient1, amount: half },
- { to: recipient2, amount: half },
- ],
- ],
- deployerPK,
- )
- const bal1 = await torn.balanceOf(recipient1)
- const bal2 = await torn.balanceOf(recipient2)
- bal1.should.eq.BN(toBN(half))
- bal2.should.eq.BN(toBN(half))
- })
- // todo: how do we get the same deployed address without create2?
- // it('should throw on second attempt', async () => {
- // await Airdrop.new(torn.address, [accounts[1], accounts[2]], [half, half], { from: airdropDeployer })
- // })
- })
- afterEach(async () => {
- await revertSnapshot(snapshotId.result)
- // eslint-disable-next-line require-atomic-updates
- snapshotId = await takeSnapshot()
- })
- })
|