UNPKG

@make-software/ces-js-parser

Version:

Parser for contract-level events encoded with Casper Event Standard (CES)

110 lines (86 loc) 5.7 kB
import * as fs from 'fs'; import * as path from 'path'; import {Conversions, HttpHandler, InfoGetTransactionResult, RpcClient} from 'casper-js-sdk'; import {Parser, parseSchemasFromBytes} from '../src'; describe('Parser', () => { describe('parseExecutionResult', () => { it('should parse events', async () => { const schemaHex = '08000000100000004164646564546f57686974656c6973740100000007000000616464726573730b0e00000042616c6c6f7443616e63656c65640500000005000000766f7465720b09000000766f74696e675f6964040b000000766f74696e675f74797065030600000063686f69636503050000007374616b65080a00000042616c6c6f74436173740500000005000000766f7465720b09000000766f74696e675f6964040b000000766f74696e675f74797065030600000063686f69636503050000007374616b65080c0000004f776e65724368616e67656401000000090000006e65775f6f776e65720b1400000052656d6f76656446726f6d57686974656c6973740100000007000000616464726573730b1300000053696d706c65566f74696e67437265617465640c0000000d000000646f63756d656e745f686173680a0700000063726561746f720b050000007374616b650d0809000000766f74696e675f69640416000000636f6e6669675f696e666f726d616c5f71756f72756d041b000000636f6e6669675f696e666f726d616c5f766f74696e675f74696d650514000000636f6e6669675f666f726d616c5f71756f72756d0419000000636f6e6669675f666f726d616c5f766f74696e675f74696d650516000000636f6e6669675f746f74616c5f6f6e626f61726465640822000000636f6e6669675f646f75626c655f74696d655f6265747765656e5f766f74696e6773001d000000636f6e6669675f766f74696e675f636c6561726e6573735f64656c7461082e000000636f6e6669675f74696d655f6265747765656e5f696e666f726d616c5f616e645f666f726d616c5f766f74696e67050e000000566f74696e6743616e63656c65640300000009000000766f74696e675f6964040b000000766f74696e675f747970650308000000756e7374616b6573110b080b000000566f74696e67456e6465640d00000009000000766f74696e675f6964040b000000766f74696e675f74797065030d000000766f74696e675f726573756c74030e0000007374616b655f696e5f6661766f72080d0000007374616b655f616761696e73740816000000756e626f756e645f7374616b655f696e5f6661766f720815000000756e626f756e645f7374616b655f616761696e7374080e000000766f7465735f696e5f6661766f72040d000000766f7465735f616761696e73740408000000756e7374616b657311130b0408060000007374616b657311130b0408050000006275726e7311130b0408050000006d696e747311130b0408'; const contractHashHex = 'ea0c001d969da098fefec42b141db88c74c5682e49333ded78035540a0b4f0bc'; const contractHash = Conversions.decodeBase16(contractHashHex); const contractPackageHash = Conversions.decodeBase16( '7a5fce1d9ad45c9d71a5e59638602213295a51a6cf92518f8b262cd3e23d6d7e', ); const schemas = parseSchemasFromBytes(Conversions.decodeBase16(schemaHex)); const rpcHandler = new HttpHandler(''); const rpcClient = new RpcClient(rpcHandler); Parser['getContractsMetadata'] = jest.fn(); const eventsUref = 'uref-d2263e86f497f42e405d5d1390aa3c1a8bfc35f3699fdc3be806a5cfe139dac9-007'; const eventsSchemaUref = 'uref-91d95cbeae8ce00c0ca678762cc99aed052adfcb3e279c7440f5241b1bdf27b2-007'; (Parser as any)['getContractsMetadata'].mockResolvedValue({ [eventsUref]: { schemas, contractHash, contractPackageHash, eventsUref, eventsSchemaUref, }, }); const parser = await Parser.create(rpcClient, [contractHashHex]); const rawMintDeploy = fs.readFileSync( path.resolve(__dirname, './fixtures/deploys/voting_created.json'), 'utf-8', ); const transactionResult = InfoGetTransactionResult.fromJSON(rawMintDeploy); const events = parser.parseExecutionResult( transactionResult!.executionInfo!.executionResult, ); expect(events.length).toEqual(2); // BallotCast expect(events[0].event!.name).toEqual('BallotCast'); expect(events[0].event!.contractHash).toEqual(contractHash); expect(events[0].event!.contractPackageHash).toEqual(contractPackageHash); expect(Object.keys(events[0].event!.data!).length).toEqual(5); expect(events[0].event!.data!.voter.key).toBeDefined(); expect(events[0].event!.data!.voting_id.ui32).toBeDefined(); expect(events[0].event!.data!.voting_type.ui8).toBeDefined(); expect(events[0].event!.data!.choice.ui8).toBeDefined(); expect(events[0].event!.data!.stake.ui512).toBeDefined(); // SimpleVotingCreated expect(events[1].event!.name).toEqual('SimpleVotingCreated'); expect(events[1].event!.contractHash).toEqual(contractHash); expect(events[1].event!.contractPackageHash).toEqual(contractPackageHash); expect(Object.keys(events[1].event!.data!).length).toEqual(12); expect(events[1].event!.data!.document_hash).toBeDefined(); expect(events[1].event!.data!.creator).toBeDefined(); expect(events[1].event!.data!.stake).toBeDefined(); expect(events[1].event!.data!.voting_id).toBeDefined(); expect( events[1].event!.data!.config_informal_quorum, ).toBeDefined(); expect( events[1].event!.data!.config_informal_voting_time, ).toBeDefined(); expect(events[1].event!.data!.config_formal_quorum).toBeDefined(); expect( events[1].event!.data!.config_formal_voting_time, ).toBeDefined(); expect( events[1].event!.data!.config_total_onboarded, ).toBeDefined(); expect( events[1].event!.data!.config_double_time_between_votings, ).toBeDefined(); expect( events[1].event!.data!.config_voting_clearness_delta, ).toBeDefined(); expect( events[1].event!.data!.config_time_between_informal_and_formal_voting, ).toBeDefined(); }); }); });