@make-software/ces-js-parser
Version:
Parser for contract-level events encoded with Casper Event Standard (CES)
39 lines (27 loc) • 3.53 kB
text/typescript
import {Conversions} from 'casper-js-sdk';
import {parseEventNameAndData} from '../src/event';
import {parseSchemasFromBytes} from '../src/schema';
describe('Event', () => {
const schemaHex =
'08000000100000004164646564546f57686974656c6973740100000007000000616464726573730b0e00000042616c6c6f7443616e63656c65640500000005000000766f7465720b09000000766f74696e675f6964040b000000766f74696e675f74797065030600000063686f69636503050000007374616b65080a00000042616c6c6f74436173740500000005000000766f7465720b09000000766f74696e675f6964040b000000766f74696e675f74797065030600000063686f69636503050000007374616b65080c0000004f776e65724368616e67656401000000090000006e65775f6f776e65720b1400000052656d6f76656446726f6d57686974656c6973740100000007000000616464726573730b1300000053696d706c65566f74696e67437265617465640c0000000d000000646f63756d656e745f686173680a0700000063726561746f720b050000007374616b650d0809000000766f74696e675f69640416000000636f6e6669675f696e666f726d616c5f71756f72756d041b000000636f6e6669675f696e666f726d616c5f766f74696e675f74696d650514000000636f6e6669675f666f726d616c5f71756f72756d0419000000636f6e6669675f666f726d616c5f766f74696e675f74696d650516000000636f6e6669675f746f74616c5f6f6e626f61726465640822000000636f6e6669675f646f75626c655f74696d655f6265747765656e5f766f74696e6773001d000000636f6e6669675f766f74696e675f636c6561726e6573735f64656c7461082e000000636f6e6669675f74696d655f6265747765656e5f696e666f726d616c5f616e645f666f726d616c5f766f74696e67050e000000566f74696e6743616e63656c65640300000009000000766f74696e675f6964040b000000766f74696e675f747970650308000000756e7374616b6573110b080b000000566f74696e67456e6465640d00000009000000766f74696e675f6964040b000000766f74696e675f74797065030d000000766f74696e675f726573756c74030e0000007374616b655f696e5f6661766f72080d0000007374616b655f616761696e73740816000000756e626f756e645f7374616b655f696e5f6661766f720815000000756e626f756e645f7374616b655f616761696e7374080e000000766f7465735f696e5f6661766f72040d000000766f7465735f616761696e73740408000000756e7374616b657311130b0408060000007374616b657311130b0408050000006275726e7311130b0408050000006d696e747311130b0408';
const transformBytes =
'420000003e000000100000006576656e745f42616c6c6f74436173740056befc13a6fd62e18f361700a5e08f966901c34df8041b36ec97d54d605c23de00000000000102e8030e0320000000d2263e86f497f42e405d5d1390aa3c1a8bfc35f3699fdc3be806a5cfe139dac90100000032';
describe('parseEventNameAndData', () => {
it('should parse event via given schema', () => {
const schemas = parseSchemasFromBytes(Conversions.decodeBase16(schemaHex));
const eventNameAndData = parseEventNameAndData(transformBytes, schemas);
expect(eventNameAndData.name).toEqual('BallotCast');
expect(Object.keys(eventNameAndData.data).length).toEqual(5);
expect(eventNameAndData.data.voter.key).toBeDefined();
expect(eventNameAndData.data.voter.key!.toString()).toEqual("account-hash-56befc13a6fd62e18f361700a5e08f966901c34df8041b36ec97d54d605c23de");
expect(eventNameAndData.data.voting_id.ui32).toBeDefined();
expect(eventNameAndData.data.voting_id.ui32!.toNumber()).toEqual(0);
expect(eventNameAndData.data.voting_type.ui8).toBeDefined();
expect(eventNameAndData.data.voting_type.ui8!.toNumber()).toEqual(0);
expect(eventNameAndData.data.choice.ui8).toBeDefined();
expect(eventNameAndData.data.choice.ui8!.toNumber()).toEqual(1);
expect(eventNameAndData.data.stake.ui512).toBeDefined();
expect(eventNameAndData.data.stake.ui512!.toNumber()).toEqual(1000);
});
});
});