import { common , ScriptBuilder , TriggerType , VMState } from '@neo-one/client-common' ; import { StackItem } from '@neo-one/node-core' ; import { BN } from 'bn.js' ; import { ApplicationEngine } from '../ApplicationEngine' ; import { Dispatcher } from '../Dispatcher' ; describe ( 'Dispatcher Tests' , ( ) => { const dispatcher = new Dispatcher ( ) ; beforeEach ( ( ) => { dispatcher . reset ( ) ; } ) ; test ( 'withApplicationEngine -- NOP Script' , ( ) => { const result = dispatcher . withApplicationEngine < { readonly gasconsumed : BN ; readonly state : VMState ; readonly stack : readonly StackItem [ ] ; } > ( { trigger : TriggerType . Application , gas : common . ONE_HUNDRED_FIXED8 , settings : { } } , ( engine ) => { expect ( engine . state ) . toEqual ( VMState . BREAK ) ; const script = new ScriptBuilder ( ) ; script . emitOp ( 'PUSHNULL' ) ; engine . loadScript ( { script : script . build ( ) } ) ; engine . execute ( ) ; return { gasconsumed : engine . gasConsumed , state : engine . state , stack : engine . resultStack } ; } ) ; expect ( result . state ) . toEqual ( VMState . HALT ) ; const postEngine = new ApplicationEngine ( dispatcher ) ; expect ( postEngine . resultStack ) . toEqual ( [ ] ) ; expect ( postEngine . gasConsumed ) . toEqual ( new BN ( 0 ) ) ; expect ( postEngine . state ) . toEqual ( VMState . BREAK ) ; expect ( ( ) => postEngine . execute ( ) ) . toThrow ( ) ; } ) ; test ( 'Dispatcher correctly parses and initializes options' , ( ) => { const standbyValidators = [ '03b209fd4f53a7170ea4444e0cb0a6bb6a53c2bd016926989cf85f9b0fba17a70c' , '02df48f60e8f3e01c48ff40b9b7f1310d7a8b2a193188befe1c2e3df740e895093' , '03b8d9d5771d8f513aa0869b9cc8d50986403b78c6da36890638c3d46a5adce04a' , '02ca0e27697b9c248f6f16e085fd0061e26f44da85b58ee835c110caa5ec3ba554' , '024c7b7fb6c310fccf1ba33b082519d82964ea93868d676662d4a59ad548df0e7d' , '02aaec38470f6aad0042c6e877cfd8087d2676b0f516fddd362801b9bd3936399e' , '02486fd15702c4490a26703112a5cc1d0923fd697a33406bd5a1c00e0013b09a70' , ] ; const standbyMembers = [ '023a36c72844610b4d34d1968662424011bf783ca9d984efa19a20babf5582f3fe' , '03708b860c1de5d87f5b151a12c2a99feebd2e8b315ee8e7cf8aa19692a9e18379' , '03c6aa6e12638b36e88adc1ccdceac4db9929575c3e03576c617c49cce7114a050' , '03204223f8c86b8cd5c89ef12e4f0dbb314172e9241e30c9ef2293790793537cf0' , '02a62c915cf19c7f19a50ec217e79fac2439bbaad658493de0c7d8ffa92ab0aa62' , '03409f31f0d66bdc2f70a9730b66fe186658f84a8018204db01c106edc36553cd0' , '0288342b141c30dc8ffcde0204929bb46aed5756b41ef4a56778d15ada8f0c6654' , '020f2887f41474cfeb11fd262e982051c1541418137c02a0f4961af911045de639' , '0222038884bbd1d8ff109ed3bdef3542e768eef76c1247aea8bc8171f532928c30' , '03d281b42002647f0113f36c7b8efb30db66078dfaaa9ab3ff76d043a98d512fde' , '02504acbc1f4b3bdad1d86d6e1a08603771db135a73e61c9d565ae06a1938cd2ad' , '0226933336f1b75baa42d42b71d9091508b638046d19abd67f4e119bf64a7cfb4d' , '03cdcea66032b82f5c30450e381e5295cae85c5e6943af716cc6b646352a6067dc' , '02cd5a5547119e24feaa7c2a0f37b8c9366216bab7054de0065c9be42084003c8a' , ] ; const standbyCommittee = standbyValidators . concat ( standbyMembers ) ; const input = { network : 5195086 + 1 , addressVersion : 0x35 + 1 , standbyCommittee , committeeMembersCount : standbyCommittee . length , validatorsCount : standbyValidators . length , millisecondsPerBlock : 15000 + 1 , memoryPoolMaxTransactions : 50000 + 1 , maxTraceableBlocks : 1 , initialGasDistribution : new BN ( 10000 ) . toString ( ) , maxTransactionsPerBlock : 10000 , nativeUpdateHistory : { StdLib : [ 1 , 2 , 3 ] , ContractManagement : [ 0 ] } } ; const newDis = new Dispatcher ( { protocolSettings : input } ) ; const result = newDis . getConfig ( ) ; expect ( result . network ) . toEqual ( input . network ) ; expect ( result . addressVersion ) . toEqual ( input . addressVersion ) ; expect ( result . standbyCommittee ) . toEqual ( standbyCommittee ) ; expect ( result . committeeMembersCount ) . toEqual ( input . committeeMembersCount ) ; expect ( result . validatorsCount ) . toEqual ( input . validatorsCount ) ; expect ( result . seedList ) . toEqual ( [ 'seed1.neo.org:10333' , 'seed2.neo.org:10333' , 'seed3.neo.org:10333' , 'seed4.neo.org:10333' , 'seed5.neo.org:10333' , ] ) ; expect ( result . millisecondsPerBlock ) . toEqual ( input . millisecondsPerBlock ) ; expect ( result . memoryPoolMaxTransactions ) . toEqual ( input . memoryPoolMaxTransactions ) ; expect ( result . initialGasDistribution ) . toEqual ( input . initialGasDistribution ) ; } ) ; test ( 'Dispatcher returns config without initializing config' , ( ) => { expect ( dispatcher . getConfig ( ) ) . toBeDefined ( ) ; } ) ; test . skip ( 'test output only' , ( ) => { console . log ( dispatcher . test ( ) ) ; } ) ; } ) ;