github.com/hyperledger/burrow@v0.34.5-0.20220512172541-77f09336001d/js/src/test/event-listen.test.ts (about) 1 import { LogDescription } from '@ethersproject/abi'; 2 import * as assert from 'assert'; 3 import { compile } from '../contracts/compile'; 4 import { ContractEvent } from '../contracts/contract'; 5 import { client } from './test'; 6 7 describe('Event listening', function () { 8 it('listens to an event from a contract', async () => { 9 const source = ` 10 pragma solidity >=0.0.0; 11 contract Contract { 12 event Pay( 13 address originator, 14 address beneficiary, 15 int amount, 16 string servicename, 17 string nickname, 18 string providername, 19 bytes32 randomBytes 20 ); 21 22 function announce() public { 23 emit Pay( 24 0x88977a37D05a4FE86d09E88c88a49C2fCF7d6d8F, 25 0x721584fa4f1B9f51950018073A8E5ECF47f2d3b8, 26 1, 27 "Energy", 28 "wasmachine", 29 "Eneco", 30 bytes32(uint256(0xDEADFEEDBEEFFACE)) 31 ); 32 } 33 } 34 `; 35 36 const contract = compile(source, 'Contract'); 37 const instance = await contract.deploy(client); 38 const promise = new Promise<LogDescription>((resolve, reject) => { 39 const pay = instance.Pay as ContractEvent; 40 const stream = pay((error, result) => { 41 if (error || !result) { 42 reject(error); 43 } else { 44 resolve(result); 45 stream.cancel(); 46 } 47 }); 48 }); 49 await instance.announce(); 50 51 const result = await promise; 52 53 assert.strictEqual(result.args.originator, '88977A37D05A4FE86D09E88C88A49C2FCF7D6D8F'); 54 assert.strictEqual(result.args.beneficiary, '721584FA4F1B9F51950018073A8E5ECF47F2D3B8'); 55 assert.strictEqual(Number(result.args.amount), 1); 56 assert.strictEqual(result.args.servicename, 'Energy'); 57 assert.strictEqual(result.args.nickname, 'wasmachine'); 58 assert.strictEqual(result.args.providername, 'Eneco'); 59 const randomBytes = result.args.randomBytes as Buffer; 60 assert.strictEqual( 61 randomBytes.toString('hex').toUpperCase(), 62 '000000000000000000000000000000000000000000000000DEADFEEDBEEFFACE', 63 ); 64 }); 65 });