UNPKG

@0xcert/ethereum-value-ledger

Version:

Value ledger module for currency management on the Ethereum blockchain.

75 lines (68 loc) 2.2 kB
import { GenericProvider } from '@0xcert/ethereum-generic-provider'; import { Protocol } from '@0xcert/ethereum-sandbox'; import { Spec } from '@specron/spec'; import { ValueLedger } from '../../../core/ledger'; const spec = new Spec<{ protocol: Protocol; coinbase: string; bob: string; sara: string; }>(); spec.before(async (stage) => { const protocol = new Protocol(stage.web3); stage.set('protocol', await protocol.deploy()); }); spec.before(async (stage) => { const accounts = await stage.web3.eth.getAccounts(); stage.set('coinbase', accounts[0]); stage.set('bob', accounts[1]); stage.set('sara', accounts[2]); }); spec.test('transfers value to another account', async (ctx) => { const coinbase = ctx.get('coinbase'); const bob = ctx.get('bob'); const token = ctx.get('protocol').erc20; const amount = '5000000'; const provider = new GenericProvider({ client: ctx.web3, accountId: coinbase, requiredConfirmations: 0, }); const ledger = new ValueLedger( provider, ctx.get('protocol').erc20.instance.options.address, ); const mutation = await ledger.transferValue({ receiverId: bob, value: amount, }); await mutation.complete(); ctx.is(mutation.logs[0].event, 'Transfer'); ctx.is(await token.instance.methods.balanceOf(bob).call(), amount); }); spec.test('transfers approved amount to another account', async (ctx) => { const coinbase = ctx.get('coinbase'); const bob = ctx.get('bob'); const sara = ctx.get('sara'); const token = ctx.get('protocol').erc20; const approveAmount = '5000000'; const provider = new GenericProvider({ client: ctx.web3, accountId: bob, requiredConfirmations: 0, }); const ledger = new ValueLedger( provider, ctx.get('protocol').erc20.instance.options.address, ); await token.instance.methods.approve(bob, approveAmount).send({from: coinbase}); const mutation = await ledger.transferValue({ senderId: coinbase, receiverId: sara, value: approveAmount, }); await mutation.complete(); ctx.is(mutation.logs[0].event, 'Transfer'); ctx.is(await token.instance.methods.balanceOf(sara).call(), approveAmount); }); export default spec;