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  });