laconicd/tests-solidity/suites/staking/test/gas.js
Brett Sun c9639c3860
tests: add solidity test suites (#487)
* tests: add solidity test suite

* tests: remove require strings

* Update tests-solidity/init-test-node.sh

* Update tests-solidity/init-test-node.sh

Co-authored-by: Federico Kunze <31522760+fedekunze@users.noreply.github.com>
2020-09-01 17:16:28 -04:00

84 lines
2.6 KiB
JavaScript

const { MAX_UINT64 } = require('@aragon/contract-helpers-test/numbers')
const getEvent = (receipt, event, arg) => { return receipt.logs.filter(l => l.event == event)[0].args[arg] }
const { deploy } = require('./helpers/deploy')(artifacts)
const { DEFAULT_STAKE_AMOUNT, DEFAULT_LOCK_AMOUNT, EMPTY_DATA, ZERO_ADDRESS, ACTIVATED_LOCK } = require('./helpers/constants')
contract.skip('Staking app, gas measures', accounts => {
let staking, token, lockManager, stakingAddress, tokenAddress, lockManagerAddress
let owner, user1, user2
const approveAndStake = async (amount = DEFAULT_STAKE_AMOUNT, from = owner) => {
await token.approve(stakingAddress, amount, { from })
await staking.stake(amount, EMPTY_DATA, { from })
}
const approveStakeAndLock = async (
manager,
lockAmount = DEFAULT_LOCK_AMOUNT,
stakeAmount = DEFAULT_STAKE_AMOUNT,
from = owner
) => {
await approveAndStake(stakeAmount, from)
await staking.allowManagerAndLock(lockAmount, manager, lockAmount, ACTIVATED_LOCK, { from })
}
before(async () => {
owner = accounts[0]
user1 = accounts[1]
user2 = accounts[2]
})
beforeEach(async () => {
const deployment = await deploy(owner)
token = deployment.token
staking = deployment.staking
lockManager = deployment.lockManager
stakingAddress = staking.address
tokenAddress = token.address
lockManagerAddress = lockManager.address
})
// increases 1185 gas for each lock
it('measures unlockedBalanceOf gas', async () => {
await approveStakeAndLock(lockManagerAddress)
const r = await staking.unlockedBalanceOfGas()
const gas = getEvent(r, 'LogGas', 'gas')
console.log(`unlockedBalanceOf gas: ${gas.toNumber()}`)
})
// 110973 gas
/*
it('measures lock gas', async () => {
await approveAndStake()
const r = await staking.lockGas(DEFAULT_LOCK_AMOUNT, lockManagerAddress, ACTIVATED_LOCK, { from: owner })
const gas = getEvent(r, 'LogGas', 'gas')
console.log('lock gas:', gas.toNumber())
})
*/
// 27601 gas
it('measures transfer gas', async () => {
await approveStakeAndLock(lockManagerAddress)
const r = await staking.transferGas(owner, lockManagerAddress, DEFAULT_LOCK_AMOUNT)
const gas = getEvent(r, 'LogGas', 'gas')
console.log('transfer gas:', gas.toNumber())
})
/*
it('measures unlock gas', async () => {
await approveStakeAndLock(user1)
const r = await staking.unlockGas(owner, user1, { from: user1 })
const gas = getEvent(r, 'LogGas', 'gas')
console.log(`unlock gas: ${gas.toNumber()}`)
await approveStakeAndLock(lockManagerAddress)
})
*/
})