@typeberry/lib 0.5.10-9567cee → 0.5.10-9ffd7ac
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +2 -2
- package/bin/lib/examples/pvm-usage.test.js +2 -2
- package/package.json +1 -1
- package/packages/core/codec/descriptor.js +1 -1
- package/packages/core/codec/descriptors.js +7 -4
- package/packages/core/codec/index.test.js +1 -1
- package/packages/core/codec/skip.d.ts +2 -1
- package/packages/core/codec/skip.d.ts.map +1 -1
- package/packages/core/codec/skip.js +3 -0
- package/packages/core/codec/view.js +2 -2
- package/packages/core/collections/multi-map.d.ts +2 -1
- package/packages/core/collections/multi-map.d.ts.map +1 -1
- package/packages/core/collections/multi-map.js +3 -0
- package/packages/core/collections/multi-map.test.js +2 -2
- package/packages/core/concurrent/parent.js +4 -1
- package/packages/core/crypto/ed25519.d.ts +2 -5
- package/packages/core/crypto/ed25519.d.ts.map +1 -1
- package/packages/core/crypto/ed25519.js +4 -1
- package/packages/core/hash/hash.d.ts +4 -2
- package/packages/core/hash/hash.d.ts.map +1 -1
- package/packages/core/hash/hash.js +6 -1
- package/packages/core/networking/quic-network.d.ts +3 -2
- package/packages/core/networking/quic-network.d.ts.map +1 -1
- package/packages/core/networking/quic-network.js +3 -0
- package/packages/core/networking/quic-peer.d.ts +2 -1
- package/packages/core/networking/quic-peer.d.ts.map +1 -1
- package/packages/core/networking/quic-peer.js +5 -2
- package/packages/core/networking/quic-stream.d.ts +2 -1
- package/packages/core/networking/quic-stream.d.ts.map +1 -1
- package/packages/core/networking/quic-stream.js +3 -0
- package/packages/core/networking/setup.js +2 -2
- package/packages/core/pvm-host-calls/bin.js +2 -2
- package/packages/core/pvm-host-calls/ecalli-trace-logger.test.js +1 -1
- package/packages/core/pvm-host-calls/host-call-memory.d.ts +2 -1
- package/packages/core/pvm-host-calls/host-call-memory.d.ts.map +1 -1
- package/packages/core/pvm-host-calls/host-call-memory.js +3 -0
- package/packages/core/pvm-host-calls/host-call-memory.test.js +1 -1
- package/packages/core/pvm-host-calls/host-call-registers.d.ts +5 -1
- package/packages/core/pvm-host-calls/host-call-registers.d.ts.map +1 -1
- package/packages/core/pvm-host-calls/host-call-registers.js +11 -1
- package/packages/core/pvm-host-calls/host-call-registers.test.js +2 -2
- package/packages/core/pvm-host-calls/host-calls-executor.d.ts +2 -1
- package/packages/core/pvm-host-calls/host-calls-executor.d.ts.map +1 -1
- package/packages/core/pvm-host-calls/host-calls-executor.js +5 -2
- package/packages/core/pvm-host-calls/host-calls.d.ts +4 -2
- package/packages/core/pvm-host-calls/host-calls.d.ts.map +1 -1
- package/packages/core/pvm-host-calls/host-calls.js +9 -4
- package/packages/core/pvm-host-calls/pvm-instance-manager.js +1 -1
- package/packages/core/pvm-interpreter/args-decoder/args-decoder.js +1 -1
- package/packages/core/pvm-interpreter/args-decoder/args-decoder.test.js +3 -3
- package/packages/core/pvm-interpreter/args-decoder/args-decoding-results.js +11 -11
- package/packages/core/pvm-interpreter/args-decoder/decoders/extended-with-immediate-decoder.d.ts +2 -1
- package/packages/core/pvm-interpreter/args-decoder/decoders/extended-with-immediate-decoder.d.ts.map +1 -1
- package/packages/core/pvm-interpreter/args-decoder/decoders/extended-with-immediate-decoder.js +3 -0
- package/packages/core/pvm-interpreter/args-decoder/decoders/extended-with-immediate-decoder.test.js +2 -2
- package/packages/core/pvm-interpreter/args-decoder/decoders/immediate-decoder.d.ts +2 -1
- package/packages/core/pvm-interpreter/args-decoder/decoders/immediate-decoder.d.ts.map +1 -1
- package/packages/core/pvm-interpreter/args-decoder/decoders/immediate-decoder.js +3 -0
- package/packages/core/pvm-interpreter/args-decoder/decoders/immediate-decoder.test.js +26 -26
- package/packages/core/pvm-interpreter/basic-blocks/basic-blocks.test.js +8 -8
- package/packages/core/pvm-interpreter/bin.js +1 -1
- package/packages/core/pvm-interpreter/debugger-adapter.d.ts +2 -1
- package/packages/core/pvm-interpreter/debugger-adapter.d.ts.map +1 -1
- package/packages/core/pvm-interpreter/debugger-adapter.js +6 -3
- package/packages/core/pvm-interpreter/gas.js +4 -1
- package/packages/core/pvm-interpreter/interpreter.d.ts +2 -1
- package/packages/core/pvm-interpreter/interpreter.d.ts.map +1 -1
- package/packages/core/pvm-interpreter/interpreter.js +19 -16
- package/packages/core/pvm-interpreter/memory/memory-builder.js +2 -2
- package/packages/core/pvm-interpreter/memory/memory-builder.test.js +7 -7
- package/packages/core/pvm-interpreter/memory/memory.d.ts +2 -1
- package/packages/core/pvm-interpreter/memory/memory.d.ts.map +1 -1
- package/packages/core/pvm-interpreter/memory/memory.js +4 -1
- package/packages/core/pvm-interpreter/memory/memory.test.js +31 -31
- package/packages/core/pvm-interpreter/memory/pages/readable-page.d.ts +2 -1
- package/packages/core/pvm-interpreter/memory/pages/readable-page.d.ts.map +1 -1
- package/packages/core/pvm-interpreter/memory/pages/readable-page.js +3 -0
- package/packages/core/pvm-interpreter/memory/pages/readable-page.test.js +3 -3
- package/packages/core/pvm-interpreter/memory/pages/writeable-page.d.ts +2 -1
- package/packages/core/pvm-interpreter/memory/pages/writeable-page.d.ts.map +1 -1
- package/packages/core/pvm-interpreter/memory/pages/writeable-page.js +3 -0
- package/packages/core/pvm-interpreter/memory/pages/writeable-page.test.js +4 -4
- package/packages/core/pvm-interpreter/ops/bit-ops.d.ts +2 -1
- package/packages/core/pvm-interpreter/ops/bit-ops.d.ts.map +1 -1
- package/packages/core/pvm-interpreter/ops/bit-ops.js +3 -0
- package/packages/core/pvm-interpreter/ops/bit-ops.test.js +3 -3
- package/packages/core/pvm-interpreter/ops/bit-rotation-ops.d.ts +2 -1
- package/packages/core/pvm-interpreter/ops/bit-rotation-ops.d.ts.map +1 -1
- package/packages/core/pvm-interpreter/ops/bit-rotation-ops.js +3 -0
- package/packages/core/pvm-interpreter/ops/bit-rotation-ops.test.js +5 -5
- package/packages/core/pvm-interpreter/ops/boolean-ops.d.ts +2 -1
- package/packages/core/pvm-interpreter/ops/boolean-ops.d.ts.map +1 -1
- package/packages/core/pvm-interpreter/ops/boolean-ops.js +3 -0
- package/packages/core/pvm-interpreter/ops/boolean-ops.test.js +3 -3
- package/packages/core/pvm-interpreter/ops/branch-ops.d.ts +2 -1
- package/packages/core/pvm-interpreter/ops/branch-ops.d.ts.map +1 -1
- package/packages/core/pvm-interpreter/ops/branch-ops.js +3 -0
- package/packages/core/pvm-interpreter/ops/branch-ops.test.js +4 -4
- package/packages/core/pvm-interpreter/ops/dynamic-jump-ops.d.ts +2 -1
- package/packages/core/pvm-interpreter/ops/dynamic-jump-ops.d.ts.map +1 -1
- package/packages/core/pvm-interpreter/ops/dynamic-jump-ops.js +3 -0
- package/packages/core/pvm-interpreter/ops/dynamic-jump-ops.test.js +5 -5
- package/packages/core/pvm-interpreter/ops/host-call-ops.d.ts +2 -1
- package/packages/core/pvm-interpreter/ops/host-call-ops.d.ts.map +1 -1
- package/packages/core/pvm-interpreter/ops/host-call-ops.js +3 -0
- package/packages/core/pvm-interpreter/ops/host-call-ops.test.js +2 -2
- package/packages/core/pvm-interpreter/ops/load-ops.d.ts +2 -1
- package/packages/core/pvm-interpreter/ops/load-ops.d.ts.map +1 -1
- package/packages/core/pvm-interpreter/ops/load-ops.js +3 -0
- package/packages/core/pvm-interpreter/ops/load-ops.test.js +10 -10
- package/packages/core/pvm-interpreter/ops/math-ops.d.ts +2 -1
- package/packages/core/pvm-interpreter/ops/math-ops.d.ts.map +1 -1
- package/packages/core/pvm-interpreter/ops/math-ops.js +3 -0
- package/packages/core/pvm-interpreter/ops/math-ops.test.js +3 -3
- package/packages/core/pvm-interpreter/ops/memory-ops.d.ts +2 -1
- package/packages/core/pvm-interpreter/ops/memory-ops.d.ts.map +1 -1
- package/packages/core/pvm-interpreter/ops/memory-ops.js +3 -0
- package/packages/core/pvm-interpreter/ops/memory-ops.test.js +3 -3
- package/packages/core/pvm-interpreter/ops/move-ops.d.ts +2 -1
- package/packages/core/pvm-interpreter/ops/move-ops.d.ts.map +1 -1
- package/packages/core/pvm-interpreter/ops/move-ops.js +3 -0
- package/packages/core/pvm-interpreter/ops/move-ops.test.js +3 -3
- package/packages/core/pvm-interpreter/ops/no-args-ops.d.ts +2 -1
- package/packages/core/pvm-interpreter/ops/no-args-ops.d.ts.map +1 -1
- package/packages/core/pvm-interpreter/ops/no-args-ops.js +3 -0
- package/packages/core/pvm-interpreter/ops/no-args-ops.test.js +2 -2
- package/packages/core/pvm-interpreter/ops/shift-ops.d.ts +2 -1
- package/packages/core/pvm-interpreter/ops/shift-ops.d.ts.map +1 -1
- package/packages/core/pvm-interpreter/ops/shift-ops.js +3 -0
- package/packages/core/pvm-interpreter/ops/shift-ops.test.js +3 -3
- package/packages/core/pvm-interpreter/ops/store-ops.d.ts +2 -1
- package/packages/core/pvm-interpreter/ops/store-ops.d.ts.map +1 -1
- package/packages/core/pvm-interpreter/ops/store-ops.js +3 -0
- package/packages/core/pvm-interpreter/ops/store-ops.test.js +7 -7
- package/packages/core/pvm-interpreter/ops-dispatchers/no-args-dispatcher.test.js +1 -1
- package/packages/core/pvm-interpreter/ops-dispatchers/one-imm-dispatcher.test.js +4 -4
- package/packages/core/pvm-interpreter/ops-dispatchers/one-offset-dispatcher.test.js +2 -2
- package/packages/core/pvm-interpreter/ops-dispatchers/one-reg-one-ext-imm-dispatcher.test.js +4 -4
- package/packages/core/pvm-interpreter/ops-dispatchers/one-reg-one-imm-dispatcher.test.js +7 -7
- package/packages/core/pvm-interpreter/ops-dispatchers/one-reg-one-imm-one-offset-dispatcher.test.js +10 -10
- package/packages/core/pvm-interpreter/ops-dispatchers/one-reg-two-imms-dispatcher.test.js +5 -5
- package/packages/core/pvm-interpreter/ops-dispatchers/three-regs-dispatcher.test.js +7 -7
- package/packages/core/pvm-interpreter/ops-dispatchers/two-imms-dispatcher.test.js +5 -5
- package/packages/core/pvm-interpreter/ops-dispatchers/two-regs-dispatcher.test.js +6 -6
- package/packages/core/pvm-interpreter/ops-dispatchers/two-regs-one-imm-dispatcher.test.js +11 -11
- package/packages/core/pvm-interpreter/ops-dispatchers/two-regs-one-offset-dispatcher.test.js +2 -2
- package/packages/core/pvm-interpreter/ops-dispatchers/two-regs-two-imms-dispatcher.test.js +14 -14
- package/packages/core/pvm-interpreter/program-decoder/jump-table.d.ts +5 -2
- package/packages/core/pvm-interpreter/program-decoder/jump-table.d.ts.map +1 -1
- package/packages/core/pvm-interpreter/program-decoder/jump-table.js +9 -4
- package/packages/core/pvm-interpreter/program-decoder/jump-table.test.js +6 -6
- package/packages/core/pvm-interpreter/program-decoder/mask.d.ts +2 -1
- package/packages/core/pvm-interpreter/program-decoder/mask.d.ts.map +1 -1
- package/packages/core/pvm-interpreter/program-decoder/mask.js +3 -0
- package/packages/core/pvm-interpreter/program-decoder/mask.test.js +10 -10
- package/packages/core/pvm-interpreter/program-decoder/program-decoder.d.ts +2 -1
- package/packages/core/pvm-interpreter/program-decoder/program-decoder.d.ts.map +1 -1
- package/packages/core/pvm-interpreter/program-decoder/program-decoder.js +6 -3
- package/packages/core/pvm-interpreter/program-decoder/program-decoder.test.js +5 -5
- package/packages/core/pvm-interpreter/program.js +3 -3
- package/packages/core/pvm-interpreter/registers.d.ts +5 -2
- package/packages/core/pvm-interpreter/registers.d.ts.map +1 -1
- package/packages/core/pvm-interpreter/registers.js +10 -6
- package/packages/core/pvm-interpreter/registers.test.js +10 -10
- package/packages/core/pvm-interpreter/spi-decoder/decode-standard-program.d.ts +6 -3
- package/packages/core/pvm-interpreter/spi-decoder/decode-standard-program.d.ts.map +1 -1
- package/packages/core/pvm-interpreter/spi-decoder/decode-standard-program.js +11 -2
- package/packages/core/pvm-interpreter-ananas/index.d.ts +6 -3
- package/packages/core/pvm-interpreter-ananas/index.d.ts.map +1 -1
- package/packages/core/pvm-interpreter-ananas/index.js +12 -3
- package/packages/core/trie/nodes.d.ts +7 -2
- package/packages/core/trie/nodes.d.ts.map +1 -1
- package/packages/core/trie/nodes.js +20 -11
- package/packages/core/trie/nodesDb.d.ts +3 -1
- package/packages/core/trie/nodesDb.d.ts.map +1 -1
- package/packages/core/trie/nodesDb.js +6 -0
- package/packages/core/trie/trie.js +2 -2
- package/packages/extensions/ipc/index.js +5 -2
- package/packages/extensions/ipc/jamnp/handler.d.ts +4 -2
- package/packages/extensions/ipc/jamnp/handler.d.ts.map +1 -1
- package/packages/extensions/ipc/jamnp/handler.js +9 -3
- package/packages/extensions/ipc/jamnp/server.js +3 -3
- package/packages/extensions/ipc/server.d.ts +2 -1
- package/packages/extensions/ipc/server.d.ts.map +1 -1
- package/packages/extensions/ipc/server.js +4 -1
- package/packages/jam/block/header.js +1 -1
- package/packages/jam/block/work-package.d.ts +7 -7
- package/packages/jam/block/work-package.d.ts.map +1 -1
- package/packages/jam/block/work-package.js +12 -12
- package/packages/jam/config/chain-spec.d.ts +2 -1
- package/packages/jam/config/chain-spec.d.ts.map +1 -1
- package/packages/jam/config/chain-spec.js +5 -2
- package/packages/jam/config/network.d.ts +2 -7
- package/packages/jam/config/network.d.ts.map +1 -1
- package/packages/jam/config/network.js +3 -0
- package/packages/jam/config-node/jip-chain-spec.js +1 -1
- package/packages/jam/database/blocks.test.js +1 -1
- package/packages/jam/database/states.d.ts +2 -1
- package/packages/jam/database/states.d.ts.map +1 -1
- package/packages/jam/database/states.js +3 -0
- package/packages/jam/database/states.test.js +1 -1
- package/packages/jam/database-lmdb/blocks.d.ts +2 -1
- package/packages/jam/database-lmdb/blocks.d.ts.map +1 -1
- package/packages/jam/database-lmdb/blocks.js +3 -0
- package/packages/jam/database-lmdb/root.d.ts +2 -1
- package/packages/jam/database-lmdb/root.d.ts.map +1 -1
- package/packages/jam/database-lmdb/root.js +3 -0
- package/packages/jam/database-lmdb/states.d.ts +2 -1
- package/packages/jam/database-lmdb/states.d.ts.map +1 -1
- package/packages/jam/database-lmdb/states.js +3 -0
- package/packages/jam/database-lmdb/states.test.js +9 -9
- package/packages/jam/executor/pvm-executor.d.ts +7 -0
- package/packages/jam/executor/pvm-executor.d.ts.map +1 -1
- package/packages/jam/executor/pvm-executor.js +36 -21
- package/packages/jam/fuzz-proto/v1/handler.d.ts +2 -1
- package/packages/jam/fuzz-proto/v1/handler.d.ts.map +1 -1
- package/packages/jam/fuzz-proto/v1/handler.js +3 -0
- package/packages/jam/fuzz-proto/v1/handler.test.js +10 -10
- package/packages/jam/in-core/externalities/refine.d.ts +5 -5
- package/packages/jam/in-core/externalities/refine.d.ts.map +1 -1
- package/packages/jam/in-core/externalities/refine.js +42 -7
- package/packages/jam/in-core/externalities/refine.test.js +119 -1
- package/packages/jam/in-core/in-core.d.ts +9 -23
- package/packages/jam/in-core/in-core.d.ts.map +1 -1
- package/packages/jam/in-core/in-core.js +19 -184
- package/packages/jam/in-core/in-core.test.js +52 -20
- package/packages/jam/in-core/is-authorized.d.ts +33 -0
- package/packages/jam/in-core/is-authorized.d.ts.map +1 -0
- package/packages/jam/in-core/is-authorized.js +72 -0
- package/packages/jam/in-core/is-authorized.test.d.ts +2 -0
- package/packages/jam/in-core/is-authorized.test.d.ts.map +1 -0
- package/packages/jam/in-core/is-authorized.test.js +125 -0
- package/packages/jam/in-core/refine.d.ts +34 -0
- package/packages/jam/in-core/refine.d.ts.map +1 -0
- package/packages/jam/in-core/refine.js +176 -0
- package/packages/jam/in-core/refine.test.d.ts +2 -0
- package/packages/jam/in-core/refine.test.d.ts.map +1 -0
- package/packages/jam/in-core/refine.test.js +6 -0
- package/packages/jam/jam-host-calls/accumulate/assign.d.ts +2 -1
- package/packages/jam/jam-host-calls/accumulate/assign.d.ts.map +1 -1
- package/packages/jam/jam-host-calls/accumulate/assign.js +3 -0
- package/packages/jam/jam-host-calls/accumulate/assign.test.js +8 -9
- package/packages/jam/jam-host-calls/accumulate/bless.d.ts +2 -1
- package/packages/jam/jam-host-calls/accumulate/bless.d.ts.map +1 -1
- package/packages/jam/jam-host-calls/accumulate/bless.js +12 -9
- package/packages/jam/jam-host-calls/accumulate/bless.test.js +11 -12
- package/packages/jam/jam-host-calls/accumulate/checkpoint.d.ts +2 -1
- package/packages/jam/jam-host-calls/accumulate/checkpoint.d.ts.map +1 -1
- package/packages/jam/jam-host-calls/accumulate/checkpoint.js +4 -1
- package/packages/jam/jam-host-calls/accumulate/checkpoint.test.js +2 -3
- package/packages/jam/jam-host-calls/accumulate/designate.d.ts +2 -1
- package/packages/jam/jam-host-calls/accumulate/designate.d.ts.map +1 -1
- package/packages/jam/jam-host-calls/accumulate/designate.js +3 -0
- package/packages/jam/jam-host-calls/accumulate/designate.test.js +5 -6
- package/packages/jam/jam-host-calls/accumulate/eject.d.ts +2 -1
- package/packages/jam/jam-host-calls/accumulate/eject.d.ts.map +1 -1
- package/packages/jam/jam-host-calls/accumulate/eject.js +3 -0
- package/packages/jam/jam-host-calls/accumulate/eject.test.js +8 -9
- package/packages/jam/jam-host-calls/accumulate/forget.d.ts +2 -1
- package/packages/jam/jam-host-calls/accumulate/forget.d.ts.map +1 -1
- package/packages/jam/jam-host-calls/accumulate/forget.js +3 -0
- package/packages/jam/jam-host-calls/accumulate/forget.test.js +5 -6
- package/packages/jam/jam-host-calls/accumulate/new.d.ts +2 -1
- package/packages/jam/jam-host-calls/accumulate/new.d.ts.map +1 -1
- package/packages/jam/jam-host-calls/accumulate/new.js +3 -0
- package/packages/jam/jam-host-calls/accumulate/new.test.js +9 -10
- package/packages/jam/jam-host-calls/accumulate/provide.d.ts +2 -1
- package/packages/jam/jam-host-calls/accumulate/provide.d.ts.map +1 -1
- package/packages/jam/jam-host-calls/accumulate/provide.js +3 -0
- package/packages/jam/jam-host-calls/accumulate/provide.test.js +8 -9
- package/packages/jam/jam-host-calls/accumulate/query.d.ts +2 -1
- package/packages/jam/jam-host-calls/accumulate/query.d.ts.map +1 -1
- package/packages/jam/jam-host-calls/accumulate/query.js +3 -0
- package/packages/jam/jam-host-calls/accumulate/query.test.js +8 -9
- package/packages/jam/jam-host-calls/accumulate/solicit.d.ts +2 -1
- package/packages/jam/jam-host-calls/accumulate/solicit.d.ts.map +1 -1
- package/packages/jam/jam-host-calls/accumulate/solicit.js +3 -0
- package/packages/jam/jam-host-calls/accumulate/solicit.test.js +7 -8
- package/packages/jam/jam-host-calls/accumulate/transfer.d.ts +2 -1
- package/packages/jam/jam-host-calls/accumulate/transfer.d.ts.map +1 -1
- package/packages/jam/jam-host-calls/accumulate/transfer.js +3 -0
- package/packages/jam/jam-host-calls/accumulate/transfer.test.js +9 -10
- package/packages/jam/jam-host-calls/accumulate/upgrade.d.ts +2 -1
- package/packages/jam/jam-host-calls/accumulate/upgrade.d.ts.map +1 -1
- package/packages/jam/jam-host-calls/accumulate/upgrade.js +3 -0
- package/packages/jam/jam-host-calls/accumulate/upgrade.test.js +4 -5
- package/packages/jam/jam-host-calls/accumulate/yield.d.ts +2 -1
- package/packages/jam/jam-host-calls/accumulate/yield.d.ts.map +1 -1
- package/packages/jam/jam-host-calls/accumulate/yield.js +3 -0
- package/packages/jam/jam-host-calls/accumulate/yield.test.js +4 -5
- package/packages/jam/jam-host-calls/externalities/partial-state.d.ts +1 -1
- package/packages/jam/jam-host-calls/externalities/refine-externalities.d.ts +1 -1
- package/packages/jam/jam-host-calls/externalities/refine-externalities.d.ts.map +1 -1
- package/packages/jam/jam-host-calls/externalities/refine-externalities.test.js +9 -9
- package/packages/jam/jam-host-calls/externalities/state-update.d.ts +2 -3
- package/packages/jam/jam-host-calls/externalities/state-update.d.ts.map +1 -1
- package/packages/jam/jam-host-calls/externalities/state-update.js +5 -2
- package/packages/jam/jam-host-calls/externalities/test-accounts.js +2 -2
- package/packages/jam/jam-host-calls/general/fetch.d.ts +42 -41
- package/packages/jam/jam-host-calls/general/fetch.d.ts.map +1 -1
- package/packages/jam/jam-host-calls/general/fetch.js +33 -30
- package/packages/jam/jam-host-calls/general/fetch.test.js +44 -42
- package/packages/jam/jam-host-calls/general/gas.d.ts +2 -1
- package/packages/jam/jam-host-calls/general/gas.d.ts.map +1 -1
- package/packages/jam/jam-host-calls/general/gas.js +3 -0
- package/packages/jam/jam-host-calls/general/gas.test.js +4 -5
- package/packages/jam/jam-host-calls/general/info.d.ts +2 -1
- package/packages/jam/jam-host-calls/general/info.d.ts.map +1 -1
- package/packages/jam/jam-host-calls/general/info.js +3 -0
- package/packages/jam/jam-host-calls/general/info.test.js +6 -7
- package/packages/jam/jam-host-calls/general/log.d.ts +2 -1
- package/packages/jam/jam-host-calls/general/log.d.ts.map +1 -1
- package/packages/jam/jam-host-calls/general/log.js +3 -0
- package/packages/jam/jam-host-calls/general/lookup.d.ts +2 -1
- package/packages/jam/jam-host-calls/general/lookup.d.ts.map +1 -1
- package/packages/jam/jam-host-calls/general/lookup.js +3 -0
- package/packages/jam/jam-host-calls/general/lookup.test.js +8 -9
- package/packages/jam/jam-host-calls/general/read.d.ts +2 -1
- package/packages/jam/jam-host-calls/general/read.d.ts.map +1 -1
- package/packages/jam/jam-host-calls/general/read.js +3 -0
- package/packages/jam/jam-host-calls/general/read.test.js +11 -12
- package/packages/jam/jam-host-calls/general/write.d.ts +2 -1
- package/packages/jam/jam-host-calls/general/write.d.ts.map +1 -1
- package/packages/jam/jam-host-calls/general/write.js +3 -0
- package/packages/jam/jam-host-calls/general/write.test.js +10 -11
- package/packages/jam/jam-host-calls/refine/export.d.ts +2 -1
- package/packages/jam/jam-host-calls/refine/export.d.ts.map +1 -1
- package/packages/jam/jam-host-calls/refine/export.js +3 -0
- package/packages/jam/jam-host-calls/refine/export.test.js +6 -7
- package/packages/jam/jam-host-calls/refine/expunge.d.ts +2 -1
- package/packages/jam/jam-host-calls/refine/expunge.d.ts.map +1 -1
- package/packages/jam/jam-host-calls/refine/expunge.js +3 -0
- package/packages/jam/jam-host-calls/refine/expunge.test.js +3 -4
- package/packages/jam/jam-host-calls/refine/historical-lookup.d.ts +2 -1
- package/packages/jam/jam-host-calls/refine/historical-lookup.d.ts.map +1 -1
- package/packages/jam/jam-host-calls/refine/historical-lookup.js +3 -0
- package/packages/jam/jam-host-calls/refine/historical-lookup.test.js +11 -12
- package/packages/jam/jam-host-calls/refine/invoke.d.ts +2 -1
- package/packages/jam/jam-host-calls/refine/invoke.d.ts.map +1 -1
- package/packages/jam/jam-host-calls/refine/invoke.js +4 -1
- package/packages/jam/jam-host-calls/refine/invoke.test.js +10 -11
- package/packages/jam/jam-host-calls/refine/machine.d.ts +2 -1
- package/packages/jam/jam-host-calls/refine/machine.d.ts.map +1 -1
- package/packages/jam/jam-host-calls/refine/machine.js +3 -0
- package/packages/jam/jam-host-calls/refine/machine.test.js +6 -7
- package/packages/jam/jam-host-calls/refine/pages.d.ts +2 -1
- package/packages/jam/jam-host-calls/refine/pages.d.ts.map +1 -1
- package/packages/jam/jam-host-calls/refine/pages.js +3 -0
- package/packages/jam/jam-host-calls/refine/pages.test.js +3 -4
- package/packages/jam/jam-host-calls/refine/peek.d.ts +2 -1
- package/packages/jam/jam-host-calls/refine/peek.d.ts.map +1 -1
- package/packages/jam/jam-host-calls/refine/peek.js +3 -0
- package/packages/jam/jam-host-calls/refine/peek.test.js +3 -4
- package/packages/jam/jam-host-calls/refine/poke.d.ts +2 -1
- package/packages/jam/jam-host-calls/refine/poke.d.ts.map +1 -1
- package/packages/jam/jam-host-calls/refine/poke.js +3 -0
- package/packages/jam/jam-host-calls/refine/poke.test.js +3 -4
- package/packages/jam/jamnp-s/network.js +1 -1
- package/packages/jam/jamnp-s/peers.d.ts +2 -1
- package/packages/jam/jamnp-s/peers.d.ts.map +1 -1
- package/packages/jam/jamnp-s/peers.js +3 -0
- package/packages/jam/jamnp-s/protocol/ce-128-block-request.d.ts +4 -2
- package/packages/jam/jamnp-s/protocol/ce-128-block-request.d.ts.map +1 -1
- package/packages/jam/jamnp-s/protocol/ce-128-block-request.js +6 -0
- package/packages/jam/jamnp-s/protocol/ce-128-block-request.test.js +2 -2
- package/packages/jam/jamnp-s/protocol/ce-129-state-request.d.ts +4 -2
- package/packages/jam/jamnp-s/protocol/ce-129-state-request.d.ts.map +1 -1
- package/packages/jam/jamnp-s/protocol/ce-129-state-request.js +6 -0
- package/packages/jam/jamnp-s/protocol/ce-129-state-request.test.js +4 -4
- package/packages/jam/jamnp-s/protocol/ce-131-ce-132-safrole-ticket-distribution.d.ts +4 -2
- package/packages/jam/jamnp-s/protocol/ce-131-ce-132-safrole-ticket-distribution.d.ts.map +1 -1
- package/packages/jam/jamnp-s/protocol/ce-131-ce-132-safrole-ticket-distribution.js +6 -0
- package/packages/jam/jamnp-s/protocol/ce-131-ce-132-safrole-ticket-distribution.test.js +2 -2
- package/packages/jam/jamnp-s/protocol/ce-133-work-package-submission.d.ts +6 -3
- package/packages/jam/jamnp-s/protocol/ce-133-work-package-submission.d.ts.map +1 -1
- package/packages/jam/jamnp-s/protocol/ce-133-work-package-submission.js +7 -0
- package/packages/jam/jamnp-s/protocol/ce-133-work-package-submission.test.js +2 -2
- package/packages/jam/jamnp-s/protocol/ce-134-work-package-sharing.d.ts +5 -2
- package/packages/jam/jamnp-s/protocol/ce-134-work-package-sharing.d.ts.map +1 -1
- package/packages/jam/jamnp-s/protocol/ce-134-work-package-sharing.js +7 -0
- package/packages/jam/jamnp-s/protocol/ce-134-work-package-sharing.test.js +2 -2
- package/packages/jam/jamnp-s/protocol/ce-135-work-report-distribution.d.ts +4 -2
- package/packages/jam/jamnp-s/protocol/ce-135-work-report-distribution.d.ts.map +1 -1
- package/packages/jam/jamnp-s/protocol/ce-135-work-report-distribution.js +6 -0
- package/packages/jam/jamnp-s/protocol/ce-135-work-report-distribution.test.js +2 -2
- package/packages/jam/jamnp-s/protocol/up-0-block-announcement.d.ts +2 -1
- package/packages/jam/jamnp-s/protocol/up-0-block-announcement.d.ts.map +1 -1
- package/packages/jam/jamnp-s/protocol/up-0-block-announcement.js +3 -0
- package/packages/jam/jamnp-s/stream-manager.d.ts +2 -1
- package/packages/jam/jamnp-s/stream-manager.d.ts.map +1 -1
- package/packages/jam/jamnp-s/stream-manager.js +4 -1
- package/packages/jam/jamnp-s/tasks/sync.js +4 -4
- package/packages/jam/jamnp-s/tasks/sync.test.js +4 -4
- package/packages/jam/jamnp-s/tasks/ticket-distribution.js +2 -2
- package/packages/jam/jamnp-s/tasks/ticket-distribution.test.js +1 -1
- package/packages/jam/node/common.d.ts.map +1 -1
- package/packages/jam/node/common.js +3 -3
- package/packages/jam/rpc-client/index.d.ts +4 -2
- package/packages/jam/rpc-client/index.d.ts.map +1 -1
- package/packages/jam/rpc-client/index.js +7 -1
- package/packages/jam/state/in-memory-state-view.d.ts +2 -1
- package/packages/jam/state/in-memory-state-view.d.ts.map +1 -1
- package/packages/jam/state/in-memory-state-view.js +3 -0
- package/packages/jam/state/in-memory-state.d.ts +16 -21
- package/packages/jam/state/in-memory-state.d.ts.map +1 -1
- package/packages/jam/state/in-memory-state.js +10 -6
- package/packages/jam/state/in-memory-state.test.js +2 -2
- package/packages/jam/state/service.d.ts +2 -6
- package/packages/jam/state/service.d.ts.map +1 -1
- package/packages/jam/state/service.js +3 -0
- package/packages/jam/state/test.utils.js +3 -3
- package/packages/jam/state-json/accounts.js +5 -5
- package/packages/jam/state-merkleization/in-memory-state-codec.d.ts +3 -34
- package/packages/jam/state-merkleization/in-memory-state-codec.d.ts.map +1 -1
- package/packages/jam/state-merkleization/in-memory-state-codec.js +1 -1
- package/packages/jam/state-merkleization/serialized-state-view.d.ts +8 -3
- package/packages/jam/state-merkleization/serialized-state-view.d.ts.map +1 -1
- package/packages/jam/state-merkleization/serialized-state-view.js +6 -3
- package/packages/jam/state-merkleization/serialized-state.d.ts +2 -3
- package/packages/jam/state-merkleization/serialized-state.d.ts.map +1 -1
- package/packages/jam/state-merkleization/serialized-state.js +10 -2
- package/packages/jam/state-merkleization/serialized-state.test.js +1 -1
- package/packages/jam/transition/accumulate/accumulate.js +10 -3
- package/packages/jam/transition/accumulate/accumulate.test.js +1 -1
- package/packages/jam/transition/accumulate/accumulation-result-merge-utils.js +48 -39
- package/packages/jam/transition/block-verifier.d.ts +2 -1
- package/packages/jam/transition/block-verifier.d.ts.map +1 -1
- package/packages/jam/transition/block-verifier.js +3 -0
- package/packages/jam/transition/block-verifier.test.js +8 -8
- package/packages/jam/transition/chain-stf.d.ts +12 -4
- package/packages/jam/transition/chain-stf.d.ts.map +1 -1
- package/packages/jam/transition/chain-stf.js +7 -3
- package/packages/jam/transition/externalities/accumulate-externalities.d.ts +22 -8
- package/packages/jam/transition/externalities/accumulate-externalities.d.ts.map +1 -1
- package/packages/jam/transition/externalities/accumulate-externalities.js +49 -29
- package/packages/jam/transition/externalities/accumulate-externalities.test.js +661 -101
- package/packages/jam/transition/externalities/index.d.ts +1 -0
- package/packages/jam/transition/externalities/index.d.ts.map +1 -1
- package/packages/jam/transition/externalities/index.js +1 -0
- package/packages/jam/transition/externalities/is-authorized-fetch-externalities.d.ts +22 -0
- package/packages/jam/transition/externalities/is-authorized-fetch-externalities.d.ts.map +1 -0
- package/packages/jam/transition/externalities/is-authorized-fetch-externalities.js +41 -0
- package/packages/jam/transition/externalities/refine-fetch-externalities.d.ts +9 -8
- package/packages/jam/transition/externalities/refine-fetch-externalities.d.ts.map +1 -1
- package/packages/jam/transition/externalities/refine-fetch-externalities.js +20 -9
- package/packages/jam/transition/externalities/refine-fetch-externalities.test.js +1 -1
- package/packages/jam/transition/hasher.d.ts +2 -1
- package/packages/jam/transition/hasher.d.ts.map +1 -1
- package/packages/jam/transition/hasher.js +5 -2
- package/packages/jam/transition/hasher.test.js +1 -1
- package/packages/jam/transition/preimages.test.js +4 -4
- package/packages/jam/transition/reports/test.utils.js +1 -1
- package/packages/workers/api-node/config.js +4 -4
- package/packages/workers/api-node/port.d.ts +2 -1
- package/packages/workers/api-node/port.d.ts.map +1 -1
- package/packages/workers/api-node/port.js +4 -1
- package/packages/workers/api-node/port.test.js +2 -2
- package/packages/workers/api-node/protocol.js +2 -2
- package/packages/workers/block-authorship/generator.d.ts +13 -2
- package/packages/workers/block-authorship/generator.d.ts.map +1 -1
- package/packages/workers/block-authorship/generator.js +13 -9
- package/packages/workers/block-authorship/generator.test.js +16 -2
- package/packages/workers/block-authorship/main.d.ts.map +1 -1
- package/packages/workers/block-authorship/main.js +8 -1
- package/packages/workers/importer/finality.test.js +1 -1
- package/packages/workers/importer/importer.d.ts +23 -6
- package/packages/workers/importer/importer.d.ts.map +1 -1
- package/packages/workers/importer/importer.js +34 -19
- package/packages/workers/importer/main.d.ts.map +1 -1
- package/packages/workers/importer/main.js +13 -5
|
@@ -55,51 +55,60 @@ export class PvmExecutor {
|
|
|
55
55
|
constructor(serviceCode, hostCallHandlers, entrypoint, pvmInstanceManager) {
|
|
56
56
|
this.serviceCode = serviceCode;
|
|
57
57
|
this.entrypoint = entrypoint;
|
|
58
|
-
this.hostCalls = new
|
|
58
|
+
this.hostCalls = HostCalls.new({
|
|
59
59
|
missing: new general.Missing(),
|
|
60
60
|
handlers: hostCallHandlers,
|
|
61
61
|
});
|
|
62
|
-
this.pvm = new
|
|
62
|
+
this.pvm = HostCallsExecutor.new(pvmInstanceManager, this.hostCalls);
|
|
63
63
|
}
|
|
64
64
|
static async prepareBackend(pvm) {
|
|
65
65
|
return PvmInstanceManager.new(pvm);
|
|
66
66
|
}
|
|
67
67
|
/** Prepare refine host call handlers */
|
|
68
68
|
static prepareRefineHostCalls(serviceId, externalities) {
|
|
69
|
-
const refineHandlers = REFINE_HOST_CALL_CLASSES.map((HandlerClass) => new
|
|
69
|
+
const refineHandlers = REFINE_HOST_CALL_CLASSES.map((HandlerClass) => HandlerClass.new(externalities.refine));
|
|
70
70
|
/** https://graypaper.fluffylabs.dev/#/ab2cdbd/2fa7022fa702?v=0.7.2 */
|
|
71
71
|
const generalHandlers = [
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
72
|
+
general.LogHostCall.new(serviceId),
|
|
73
|
+
general.GasHostCall.new(serviceId),
|
|
74
|
+
general.Fetch.new(serviceId, externalities.fetchExternalities),
|
|
75
75
|
];
|
|
76
76
|
return refineHandlers.concat(generalHandlers);
|
|
77
77
|
}
|
|
78
78
|
/** Prepare accumulation host call handlers */
|
|
79
79
|
static prepareAccumulateHostCalls(serviceId, externalities, chainSpec) {
|
|
80
|
-
const accumulateHandlers = ACCUMULATE_HOST_CALL_CLASSES.map((HandlerClass) => new
|
|
80
|
+
const accumulateHandlers = ACCUMULATE_HOST_CALL_CLASSES.map((HandlerClass) => HandlerClass.new(serviceId, externalities.partialState, chainSpec));
|
|
81
81
|
/** https://graypaper.fluffylabs.dev/#/ab2cdbd/30d00130d001?v=0.7.2 */
|
|
82
82
|
const generalHandlers = [
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
83
|
+
general.LogHostCall.new(serviceId),
|
|
84
|
+
general.GasHostCall.new(serviceId),
|
|
85
|
+
general.Read.new(serviceId, externalities.serviceExternalities),
|
|
86
|
+
general.Write.new(serviceId, externalities.serviceExternalities),
|
|
87
|
+
general.Fetch.new(serviceId, externalities.fetchExternalities),
|
|
88
|
+
general.Lookup.new(serviceId, externalities.serviceExternalities),
|
|
89
|
+
general.Info.new(serviceId, externalities.serviceExternalities),
|
|
90
90
|
];
|
|
91
91
|
return accumulateHandlers.concat(generalHandlers);
|
|
92
92
|
}
|
|
93
|
+
/** Prepare is-authorized host call handlers */
|
|
94
|
+
static prepareIsAuthorizedHostCalls(serviceId, externalities) {
|
|
95
|
+
const generalHandlers = [
|
|
96
|
+
general.LogHostCall.new(serviceId),
|
|
97
|
+
general.GasHostCall.new(serviceId),
|
|
98
|
+
general.Fetch.new(serviceId, externalities.fetchExternalities),
|
|
99
|
+
];
|
|
100
|
+
return generalHandlers;
|
|
101
|
+
}
|
|
93
102
|
/** Prepare on transfer host call handlers */
|
|
94
103
|
static prepareOnTransferHostCalls(serviceId, externalities) {
|
|
95
104
|
const generalHandlers = [
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
105
|
+
general.LogHostCall.new(serviceId),
|
|
106
|
+
general.GasHostCall.new(serviceId),
|
|
107
|
+
general.Fetch.new(serviceId, externalities.fetchExternalities),
|
|
108
|
+
general.Read.new(serviceId, externalities.partialState),
|
|
109
|
+
general.Write.new(serviceId, externalities.partialState),
|
|
110
|
+
general.Lookup.new(serviceId, externalities.partialState),
|
|
111
|
+
general.Info.new(serviceId, externalities.partialState),
|
|
103
112
|
];
|
|
104
113
|
return generalHandlers;
|
|
105
114
|
}
|
|
@@ -123,6 +132,12 @@ export class PvmExecutor {
|
|
|
123
132
|
const instances = await PvmExecutor.prepareBackend(pvm);
|
|
124
133
|
return new PvmExecutor(serviceCode, hostCallHandlers, entrypoint.REFINE, instances);
|
|
125
134
|
}
|
|
135
|
+
/** A utility function that can be used to prepare is-authorized executor */
|
|
136
|
+
static async createIsAuthorizedExecutor(serviceId, serviceCode, externalities, pvm) {
|
|
137
|
+
const hostCallHandlers = PvmExecutor.prepareIsAuthorizedHostCalls(serviceId, externalities);
|
|
138
|
+
const instances = await PvmExecutor.prepareBackend(pvm);
|
|
139
|
+
return new PvmExecutor(serviceCode, hostCallHandlers, entrypoint.IS_AUTHORIZED, instances);
|
|
140
|
+
}
|
|
126
141
|
/** A utility function that can be used to prepare accumulate executor */
|
|
127
142
|
static async createAccumulateExecutor(serviceId, serviceCode, externalities, chainSpec, pvm) {
|
|
128
143
|
const hostCallHandlers = PvmExecutor.prepareAccumulateHostCalls(serviceId, externalities, chainSpec);
|
|
@@ -31,7 +31,8 @@ export declare class FuzzTarget implements IpcHandler {
|
|
|
31
31
|
readonly sender: IpcSender;
|
|
32
32
|
readonly spec: ChainSpec;
|
|
33
33
|
private sessionFeatures;
|
|
34
|
-
|
|
34
|
+
static new(msgHandler: FuzzMessageHandler, sender: IpcSender, spec: ChainSpec): FuzzTarget;
|
|
35
|
+
private constructor();
|
|
35
36
|
onSocketMessage(msg: Uint8Array): Promise<void>;
|
|
36
37
|
private processAndRespond;
|
|
37
38
|
onClose({ error }: {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"handler.d.ts","sourceRoot":"","sources":["../../../../../../packages/jam/fuzz-proto/v1/handler.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,UAAU,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAC;AAE7E,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,mBAAmB,CAAC;AAEnD,OAAO,EAAe,KAAK,MAAM,EAAE,MAAM,kBAAkB,CAAC;AAC5D,OAAO,KAAK,EAAE,UAAU,EAAE,SAAS,EAAE,MAAM,cAAc,CAAC;AAC1D,OAAO,EACL,YAAY,EAEZ,KAAK,UAAU,EACf,KAAK,QAAQ,EAKb,KAAK,QAAQ,EACd,MAAM,YAAY,CAAC;AAIpB;;;GAGG;AACH,MAAM,WAAW,kBAAkB;IACjC;;;OAGG;IACH,WAAW,CAAC,KAAK,EAAE,QAAQ,GAAG,OAAO,CAAC,QAAQ,CAAC,CAAC;IAEhD;;;OAGG;IACH,UAAU,CAAC,MAAM,EAAE,UAAU,GAAG,OAAO,CAAC,aAAa,CAAC,CAAC;IAEvD;;;OAGG;IACH,WAAW,CAAC,KAAK,EAAE,SAAS,GAAG,OAAO,CAAC,MAAM,CAAC,aAAa,EAAE,YAAY,CAAC,CAAC,CAAC;IAE5E,gEAAgE;IAChE,kBAAkB,CAAC,KAAK,EAAE,UAAU,GAAG,OAAO,CAAC,QAAQ,EAAE,CAAC,CAAC;CAC5D;AAED,qBAAa,UAAW,YAAW,UAAU;
|
|
1
|
+
{"version":3,"file":"handler.d.ts","sourceRoot":"","sources":["../../../../../../packages/jam/fuzz-proto/v1/handler.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,UAAU,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAC;AAE7E,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,mBAAmB,CAAC;AAEnD,OAAO,EAAe,KAAK,MAAM,EAAE,MAAM,kBAAkB,CAAC;AAC5D,OAAO,KAAK,EAAE,UAAU,EAAE,SAAS,EAAE,MAAM,cAAc,CAAC;AAC1D,OAAO,EACL,YAAY,EAEZ,KAAK,UAAU,EACf,KAAK,QAAQ,EAKb,KAAK,QAAQ,EACd,MAAM,YAAY,CAAC;AAIpB;;;GAGG;AACH,MAAM,WAAW,kBAAkB;IACjC;;;OAGG;IACH,WAAW,CAAC,KAAK,EAAE,QAAQ,GAAG,OAAO,CAAC,QAAQ,CAAC,CAAC;IAEhD;;;OAGG;IACH,UAAU,CAAC,MAAM,EAAE,UAAU,GAAG,OAAO,CAAC,aAAa,CAAC,CAAC;IAEvD;;;OAGG;IACH,WAAW,CAAC,KAAK,EAAE,SAAS,GAAG,OAAO,CAAC,MAAM,CAAC,aAAa,EAAE,YAAY,CAAC,CAAC,CAAC;IAE5E,gEAAgE;IAChE,kBAAkB,CAAC,KAAK,EAAE,UAAU,GAAG,OAAO,CAAC,QAAQ,EAAE,CAAC,CAAC;CAC5D;AAED,qBAAa,UAAW,YAAW,UAAU;aAQzB,UAAU,EAAE,kBAAkB;aAC9B,MAAM,EAAE,SAAS;aACjB,IAAI,EAAE,SAAS;IATjC,OAAO,CAAC,eAAe,CAAK;IAE5B,MAAM,CAAC,GAAG,CAAC,UAAU,EAAE,kBAAkB,EAAE,MAAM,EAAE,SAAS,EAAE,IAAI,EAAE,SAAS;IAI7E,OAAO;IAMD,eAAe,CAAC,GAAG,EAAE,UAAU,GAAG,OAAO,CAAC,IAAI,CAAC;YAiBvC,iBAAiB;IA2H/B,OAAO,CAAC,EAAE,KAAK,EAAE,EAAE;QAAE,KAAK,CAAC,EAAE,KAAK,CAAA;KAAE,GAAG,IAAI;IAI3C,4DAA4D;IAC5D,UAAU,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO;CAGrC"}
|
|
@@ -8,6 +8,9 @@ export class FuzzTarget {
|
|
|
8
8
|
sender;
|
|
9
9
|
spec;
|
|
10
10
|
sessionFeatures = 0;
|
|
11
|
+
static new(msgHandler, sender, spec) {
|
|
12
|
+
return new FuzzTarget(msgHandler, sender, spec);
|
|
13
|
+
}
|
|
11
14
|
constructor(msgHandler, sender, spec) {
|
|
12
15
|
this.msgHandler = msgHandler;
|
|
13
16
|
this.sender = sender;
|
|
@@ -70,7 +70,7 @@ describe("FuzzV1Target Handler", () => {
|
|
|
70
70
|
value: responsePeerInfo,
|
|
71
71
|
};
|
|
72
72
|
mockMessageHandler.getPeerInfo.mock.mockImplementation(async () => responsePeerInfo);
|
|
73
|
-
const fuzzTarget = new
|
|
73
|
+
const fuzzTarget = FuzzTarget.new(mockMessageHandler, mockSender, spec);
|
|
74
74
|
const testMessage = encode(incomingMessage);
|
|
75
75
|
await fuzzTarget.onSocketMessage(testMessage);
|
|
76
76
|
// Verify handshake completion and feature negotiation
|
|
@@ -116,7 +116,7 @@ describe("FuzzV1Target Handler", () => {
|
|
|
116
116
|
value: expectedStateRoot,
|
|
117
117
|
};
|
|
118
118
|
mockMessageHandler.initialize.mock.mockImplementation(async () => expectedStateRoot);
|
|
119
|
-
const fuzzTarget = new
|
|
119
|
+
const fuzzTarget = FuzzTarget.new(mockMessageHandler, mockSender, spec);
|
|
120
120
|
await completeHandshake(mockMessageHandler, mockSender, fuzzTarget);
|
|
121
121
|
mockSender._sentData = []; // Clear handshake response
|
|
122
122
|
const testMessage = encode(incomingMessage);
|
|
@@ -144,7 +144,7 @@ describe("FuzzV1Target Handler", () => {
|
|
|
144
144
|
value: expectedStateRoot,
|
|
145
145
|
};
|
|
146
146
|
mockMessageHandler.importBlock.mock.mockImplementation(async () => Result.ok(expectedStateRoot));
|
|
147
|
-
const fuzzTarget = new
|
|
147
|
+
const fuzzTarget = FuzzTarget.new(mockMessageHandler, mockSender, spec);
|
|
148
148
|
await completeHandshake(mockMessageHandler, mockSender, fuzzTarget);
|
|
149
149
|
mockSender._sentData = []; // Clear handshake response
|
|
150
150
|
const testMessage = encode(incomingMessage);
|
|
@@ -169,7 +169,7 @@ describe("FuzzV1Target Handler", () => {
|
|
|
169
169
|
value: expectedError,
|
|
170
170
|
};
|
|
171
171
|
mockMessageHandler.importBlock.mock.mockImplementation(async () => Result.error(expectedError, () => "Test: ImportBlock error"));
|
|
172
|
-
const fuzzTarget = new
|
|
172
|
+
const fuzzTarget = FuzzTarget.new(mockMessageHandler, mockSender, spec);
|
|
173
173
|
await completeHandshake(mockMessageHandler, mockSender, fuzzTarget);
|
|
174
174
|
mockSender._sentData = []; // Clear handshake response
|
|
175
175
|
const testMessage = encode(incomingMessage);
|
|
@@ -205,7 +205,7 @@ describe("FuzzV1Target Handler", () => {
|
|
|
205
205
|
value: keyValues,
|
|
206
206
|
};
|
|
207
207
|
mockMessageHandler.getSerializedState.mock.mockImplementation(async () => keyValues);
|
|
208
|
-
const fuzzTarget = new
|
|
208
|
+
const fuzzTarget = FuzzTarget.new(mockMessageHandler, mockSender, spec);
|
|
209
209
|
await completeHandshake(mockMessageHandler, mockSender, fuzzTarget);
|
|
210
210
|
mockSender._sentData = []; // Clear handshake response
|
|
211
211
|
const testMessage = encode(incomingMessage);
|
|
@@ -227,7 +227,7 @@ describe("FuzzV1Target Handler", () => {
|
|
|
227
227
|
type: MessageType.StateRoot,
|
|
228
228
|
value: stateRoot,
|
|
229
229
|
};
|
|
230
|
-
const fuzzTarget = new
|
|
230
|
+
const fuzzTarget = FuzzTarget.new(mockMessageHandler, mockSender, spec);
|
|
231
231
|
await completeHandshake(mockMessageHandler, mockSender, fuzzTarget);
|
|
232
232
|
mockSender._sentData = []; // Clear handshake response
|
|
233
233
|
const testMessage = encode(incomingMessage);
|
|
@@ -248,7 +248,7 @@ describe("FuzzV1Target Handler", () => {
|
|
|
248
248
|
type: MessageType.State,
|
|
249
249
|
value: keyValues,
|
|
250
250
|
};
|
|
251
|
-
const fuzzTarget = new
|
|
251
|
+
const fuzzTarget = FuzzTarget.new(mockMessageHandler, mockSender, spec);
|
|
252
252
|
await completeHandshake(mockMessageHandler, mockSender, fuzzTarget);
|
|
253
253
|
mockSender._sentData = []; // Clear handshake response
|
|
254
254
|
const testMessage = encode(incomingMessage);
|
|
@@ -264,7 +264,7 @@ describe("FuzzV1Target Handler", () => {
|
|
|
264
264
|
type: MessageType.Error,
|
|
265
265
|
value: error,
|
|
266
266
|
};
|
|
267
|
-
const fuzzTarget = new
|
|
267
|
+
const fuzzTarget = FuzzTarget.new(mockMessageHandler, mockSender, spec);
|
|
268
268
|
await completeHandshake(mockMessageHandler, mockSender, fuzzTarget);
|
|
269
269
|
mockSender._sentData = []; // Clear handshake response
|
|
270
270
|
const testMessage = encode(incomingMessage);
|
|
@@ -277,7 +277,7 @@ describe("FuzzV1Target Handler", () => {
|
|
|
277
277
|
it("should handle decoding error gracefully", async () => {
|
|
278
278
|
const mockMessageHandler = new MockV1MessageHandler();
|
|
279
279
|
const mockSender = new MockSender();
|
|
280
|
-
const fuzzTarget = new
|
|
280
|
+
const fuzzTarget = FuzzTarget.new(mockMessageHandler, mockSender, spec);
|
|
281
281
|
// Create malformed message with valid length prefix but invalid data
|
|
282
282
|
const malformedMessage = new Uint8Array(8);
|
|
283
283
|
const dataView = new DataView(malformedMessage.buffer);
|
|
@@ -300,7 +300,7 @@ describe("FuzzV1Target Handler", () => {
|
|
|
300
300
|
return Decoder.decodeObject(messageCodec, data, spec);
|
|
301
301
|
}
|
|
302
302
|
async function completeHandshake(mockMessageHandler, mockSender, fuzzTarget) {
|
|
303
|
-
const target = fuzzTarget ?? new
|
|
303
|
+
const target = fuzzTarget ?? FuzzTarget.new(mockMessageHandler, mockSender, spec);
|
|
304
304
|
const inputPeerInfo = PeerInfo.create({
|
|
305
305
|
fuzzVersion: tryAsU8(1),
|
|
306
306
|
features: tryAsU32(Features.Ancestry),
|
|
@@ -2,9 +2,9 @@ import { type Segment, type SegmentIndex, type ServiceId } from "#@typeberry/blo
|
|
|
2
2
|
import type { BytesBlob } from "#@typeberry/bytes";
|
|
3
3
|
import type { PvmBackend } from "#@typeberry/config";
|
|
4
4
|
import type { Blake2bHash } from "#@typeberry/hash";
|
|
5
|
-
import { type MachineId, type MachineResult, type MemoryOperation,
|
|
6
|
-
import type
|
|
7
|
-
import { type HostCallMemory,
|
|
5
|
+
import { type MachineId, type MachineResult, type MemoryOperation, NoMachineError, type PagesError, type PeekPokeError, type ProgramCounter, type RefineExternalities, SegmentExportError, type ZeroVoidError } from "#@typeberry/jam-host-calls";
|
|
6
|
+
import { type U64 } from "#@typeberry/numbers";
|
|
7
|
+
import { type HostCallMemory, HostCallRegisters } from "#@typeberry/pvm-host-calls";
|
|
8
8
|
import { type BigGas } from "#@typeberry/pvm-interface";
|
|
9
9
|
import { type ProgramDecoderError } from "#@typeberry/pvm-interpreter";
|
|
10
10
|
import type { State } from "#@typeberry/state";
|
|
@@ -41,14 +41,14 @@ export declare class RefineExternalitiesImpl implements RefineExternalities {
|
|
|
41
41
|
static create(params: RefineExternalitiesParams): RefineExternalitiesImpl;
|
|
42
42
|
private constructor();
|
|
43
43
|
getExportedSegments(): readonly Segment[];
|
|
44
|
-
machineExpunge(
|
|
44
|
+
machineExpunge(machineIndex: MachineId): Promise<Result<ProgramCounter, NoMachineError>>;
|
|
45
45
|
machinePages(_machineIndex: MachineId, _pageStart: U64, _pageCount: U64, _requestType: MemoryOperation | null): Promise<Result<OK, PagesError>>;
|
|
46
46
|
machineVoidPages(_machineIndex: MachineId, _pageStart: U64, _pageCount: U64): Promise<Result<OK, ZeroVoidError>>;
|
|
47
47
|
machineZeroPages(_machineIndex: MachineId, _pageStart: U64, _pageCount: U64): Promise<Result<OK, ZeroVoidError>>;
|
|
48
48
|
machinePeekFrom(_machineIndex: MachineId, _destinationStart: U64, _sourceStart: U64, _length: U64, _destination: HostCallMemory): Promise<Result<OK, PeekPokeError>>;
|
|
49
49
|
machinePokeInto(_machineIndex: MachineId, _sourceStart: U64, _destinationStart: U64, _length: U64, _source: HostCallMemory): Promise<Result<OK, PeekPokeError>>;
|
|
50
50
|
machineInit(code: BytesBlob, programCounter: ProgramCounter): Promise<Result<MachineId, ProgramDecoderError>>;
|
|
51
|
-
machineInvoke(
|
|
51
|
+
machineInvoke(machineIndex: MachineId, gas: BigGas, registers: HostCallRegisters): Promise<Result<MachineResult, NoMachineError>>;
|
|
52
52
|
exportSegment(segment: Segment): Result<SegmentIndex, SegmentExportError>;
|
|
53
53
|
historicalLookup(serviceId: ServiceId | null, hash: Blake2bHash): Promise<BytesBlob | null>;
|
|
54
54
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"refine.d.ts","sourceRoot":"","sources":["../../../../../../packages/jam/in-core/externalities/refine.ts"],"names":[],"mappings":"AAAA,OAAO,EAEL,KAAK,OAAO,EACZ,KAAK,YAAY,EACjB,KAAK,SAAS,EAEf,MAAM,kBAAkB,CAAC;AAC1B,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAC;AAElD,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAC;AACpD,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,iBAAiB,CAAC;AACnD,OAAO,EACL,KAAK,SAAS,EACd,KAAK,aAAa,
|
|
1
|
+
{"version":3,"file":"refine.d.ts","sourceRoot":"","sources":["../../../../../../packages/jam/in-core/externalities/refine.ts"],"names":[],"mappings":"AAAA,OAAO,EAEL,KAAK,OAAO,EACZ,KAAK,YAAY,EACjB,KAAK,SAAS,EAEf,MAAM,kBAAkB,CAAC;AAC1B,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAC;AAElD,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAC;AACpD,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,iBAAiB,CAAC;AACnD,OAAO,EACL,KAAK,SAAS,EACd,KAAK,aAAa,EAElB,KAAK,eAAe,EACpB,cAAc,EACd,KAAK,UAAU,EACf,KAAK,aAAa,EAClB,KAAK,cAAc,EACnB,KAAK,mBAAmB,EACxB,kBAAkB,EAGlB,KAAK,aAAa,EACnB,MAAM,2BAA2B,CAAC;AACnC,OAAO,EAAY,KAAK,GAAG,EAAE,MAAM,oBAAoB,CAAC;AAExD,OAAO,EAAE,KAAK,cAAc,EAAE,iBAAiB,EAAsB,MAAM,2BAA2B,CAAC;AACvG,OAAO,EAAE,KAAK,MAAM,EAAuD,MAAM,0BAA0B,CAAC;AAC5G,OAAO,EAAkB,KAAK,mBAAmB,EAAE,MAAM,4BAA4B,CAAC;AACtF,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,kBAAkB,CAAC;AAC9C,OAAO,EAAE,KAAK,EAAE,EAAE,MAAM,EAAE,MAAM,kBAAkB,CAAC;AAiBnD;;GAEG;AACH,MAAM,MAAM,yBAAyB,GAAG;IACtC,2CAA2C;IAC3C,gBAAgB,EAAE,SAAS,CAAC;IAC5B,8EAA8E;IAC9E,WAAW,EAAE,KAAK,CAAC;IACnB,6EAA6E;IAC7E,YAAY,EAAE,MAAM,CAAC;IACrB;;;OAGG;IACH,UAAU,EAAE,UAAU,CAAC;CACxB,CAAC;AAEF,qBAAa,uBAAwB,YAAW,mBAAmB;IACjE,+CAA+C;IAC/C,OAAO,CAAC,QAAQ,CAA6E;IAC7F,oEAAoE;IACpE,OAAO,CAAC,QAAQ,CAAC,gBAAgB,CAAY;IAC7C,uDAAuD;IACvD,OAAO,CAAC,QAAQ,CAAC,WAAW,CAAQ;IACpC,6DAA6D;IAC7D,OAAO,CAAC,QAAQ,CAAC,gBAAgB,CAAiB;IAClD,qEAAqE;IACrE,OAAO,CAAC,QAAQ,CAAC,YAAY,CAAS;IACtC,+CAA+C;IAC/C,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAa;IAExC,MAAM,CAAC,MAAM,CAAC,MAAM,EAAE,yBAAyB;IAI/C,OAAO;IAOP,mBAAmB,IAAI,SAAS,OAAO,EAAE;IAIzC,cAAc,CAAC,YAAY,EAAE,SAAS,GAAG,OAAO,CAAC,MAAM,CAAC,cAAc,EAAE,cAAc,CAAC,CAAC;IAWxF,YAAY,CACV,aAAa,EAAE,SAAS,EACxB,UAAU,EAAE,GAAG,EACf,UAAU,EAAE,GAAG,EACf,YAAY,EAAE,eAAe,GAAG,IAAI,GACnC,OAAO,CAAC,MAAM,CAAC,EAAE,EAAE,UAAU,CAAC,CAAC;IAIlC,gBAAgB,CAAC,aAAa,EAAE,SAAS,EAAE,UAAU,EAAE,GAAG,EAAE,UAAU,EAAE,GAAG,GAAG,OAAO,CAAC,MAAM,CAAC,EAAE,EAAE,aAAa,CAAC,CAAC;IAIhH,gBAAgB,CAAC,aAAa,EAAE,SAAS,EAAE,UAAU,EAAE,GAAG,EAAE,UAAU,EAAE,GAAG,GAAG,OAAO,CAAC,MAAM,CAAC,EAAE,EAAE,aAAa,CAAC,CAAC;IAIhH,eAAe,CACb,aAAa,EAAE,SAAS,EACxB,iBAAiB,EAAE,GAAG,EACtB,YAAY,EAAE,GAAG,EACjB,OAAO,EAAE,GAAG,EACZ,YAAY,EAAE,cAAc,GAC3B,OAAO,CAAC,MAAM,CAAC,EAAE,EAAE,aAAa,CAAC,CAAC;IAIrC,eAAe,CACb,aAAa,EAAE,SAAS,EACxB,YAAY,EAAE,GAAG,EACjB,iBAAiB,EAAE,GAAG,EACtB,OAAO,EAAE,GAAG,EACZ,OAAO,EAAE,cAAc,GACtB,OAAO,CAAC,MAAM,CAAC,EAAE,EAAE,aAAa,CAAC,CAAC;IAI/B,WAAW,CAAC,IAAI,EAAE,SAAS,EAAE,cAAc,EAAE,cAAc,GAAG,OAAO,CAAC,MAAM,CAAC,SAAS,EAAE,mBAAmB,CAAC,CAAC;IAgCnH,aAAa,CACX,YAAY,EAAE,SAAS,EACvB,GAAG,EAAE,MAAM,EACX,SAAS,EAAE,iBAAiB,GAC3B,OAAO,CAAC,MAAM,CAAC,aAAa,EAAE,cAAc,CAAC,CAAC;IAiCjD,aAAa,CAAC,OAAO,EAAE,OAAO,GAAG,MAAM,CAAC,YAAY,EAAE,kBAAkB,CAAC;IAezE,gBAAgB,CAAC,SAAS,EAAE,SAAS,GAAG,IAAI,EAAE,IAAI,EAAE,WAAW,GAAG,OAAO,CAAC,SAAS,GAAG,IAAI,CAAC;CAW5F"}
|
|
@@ -1,11 +1,14 @@
|
|
|
1
1
|
import { MAX_NUMBER_OF_EXPORTS_WP, tryAsSegmentIndex, } from "#@typeberry/block";
|
|
2
2
|
import { SortedArray } from "#@typeberry/collections";
|
|
3
|
-
import { SegmentExportError, tryAsMachineId, } from "#@typeberry/jam-host-calls";
|
|
3
|
+
import { NoMachineError, SegmentExportError, tryAsMachineId, tryAsProgramCounter, } from "#@typeberry/jam-host-calls";
|
|
4
|
+
import { tryAsU64 } from "#@typeberry/numbers";
|
|
4
5
|
import { Ordering } from "#@typeberry/ordering";
|
|
5
|
-
import { PvmInstanceManager } from "#@typeberry/pvm-host-calls";
|
|
6
|
-
import { tryAsGas } from "#@typeberry/pvm-interface";
|
|
6
|
+
import { HostCallRegisters, PvmInstanceManager } from "#@typeberry/pvm-host-calls";
|
|
7
|
+
import { Status, tryAsBigGas, tryAsGas } from "#@typeberry/pvm-interface";
|
|
7
8
|
import { ProgramDecoder } from "#@typeberry/pvm-interpreter";
|
|
8
9
|
import { Result } from "#@typeberry/utils";
|
|
10
|
+
/** Used when searching by MachineId only — the comparator ignores this field. */
|
|
11
|
+
const NULL_INTERPRETER = undefined;
|
|
9
12
|
const machineComparator = (a, b) => {
|
|
10
13
|
if (a[0] < b[0]) {
|
|
11
14
|
return Ordering.Less;
|
|
@@ -40,8 +43,15 @@ export class RefineExternalitiesImpl {
|
|
|
40
43
|
getExportedSegments() {
|
|
41
44
|
return this.exportedSegments;
|
|
42
45
|
}
|
|
43
|
-
machineExpunge(
|
|
44
|
-
|
|
46
|
+
machineExpunge(machineIndex) {
|
|
47
|
+
// We just care about machineIndex
|
|
48
|
+
const entry = this.machines.findExact([machineIndex, NULL_INTERPRETER]);
|
|
49
|
+
if (entry === undefined) {
|
|
50
|
+
return Promise.resolve(Result.error(NoMachineError, () => `Machine not found (id: ${machineIndex})`));
|
|
51
|
+
}
|
|
52
|
+
const pc = tryAsProgramCounter(entry[1].getPC());
|
|
53
|
+
this.machines.removeOne(entry);
|
|
54
|
+
return Promise.resolve(Result.ok(pc));
|
|
45
55
|
}
|
|
46
56
|
machinePages(_machineIndex, _pageStart, _pageCount, _requestType) {
|
|
47
57
|
throw new Error("Method not implemented.");
|
|
@@ -86,8 +96,33 @@ export class RefineExternalitiesImpl {
|
|
|
86
96
|
this.machines.insert([machineId, innerPvm]);
|
|
87
97
|
return Result.ok(machineId);
|
|
88
98
|
}
|
|
89
|
-
machineInvoke(
|
|
90
|
-
|
|
99
|
+
machineInvoke(machineIndex, gas, registers) {
|
|
100
|
+
const entry = this.machines.findExact([machineIndex, NULL_INTERPRETER]);
|
|
101
|
+
if (entry === undefined) {
|
|
102
|
+
return Promise.resolve(Result.error(NoMachineError, () => `Machine not found (id: ${machineIndex})`));
|
|
103
|
+
}
|
|
104
|
+
const innerPvm = entry[1];
|
|
105
|
+
// Prepare inner PVM
|
|
106
|
+
innerPvm.registers.setAllEncoded(registers.getEncoded());
|
|
107
|
+
innerPvm.gas.set(gas);
|
|
108
|
+
// Execute program
|
|
109
|
+
innerPvm.runProgram();
|
|
110
|
+
// Status
|
|
111
|
+
const status = innerPvm.getStatus();
|
|
112
|
+
const exitParam = innerPvm.getExitParam() ?? 0;
|
|
113
|
+
const remainingGas = tryAsBigGas(innerPvm.gas.get());
|
|
114
|
+
const outRegisters = HostCallRegisters.fromRaw(new Uint8Array(innerPvm.registers.getAllEncoded()));
|
|
115
|
+
let machineStatus;
|
|
116
|
+
if (status === Status.HOST) {
|
|
117
|
+
machineStatus = { status, hostCallIndex: tryAsU64(exitParam) };
|
|
118
|
+
}
|
|
119
|
+
else if (status === Status.FAULT) {
|
|
120
|
+
machineStatus = { status, address: tryAsU64(exitParam) };
|
|
121
|
+
}
|
|
122
|
+
else {
|
|
123
|
+
machineStatus = { status };
|
|
124
|
+
}
|
|
125
|
+
return Promise.resolve(Result.ok({ result: machineStatus, gas: remainingGas, registers: outRegisters }));
|
|
91
126
|
}
|
|
92
127
|
exportSegment(segment) {
|
|
93
128
|
// https://graypaper.fluffylabs.dev/#/ab2cdbd/335d03335d03?v=0.7.2
|
|
@@ -7,6 +7,8 @@ import { PvmBackend, tinyChainSpec } from "#@typeberry/config";
|
|
|
7
7
|
import { HASH_SIZE } from "#@typeberry/hash";
|
|
8
8
|
import { SegmentExportError, tryAsMachineId, tryAsProgramCounter } from "#@typeberry/jam-host-calls";
|
|
9
9
|
import { tryAsU32, tryAsU64 } from "#@typeberry/numbers";
|
|
10
|
+
import { HostCallRegisters } from "#@typeberry/pvm-host-calls";
|
|
11
|
+
import { Status, tryAsBigGas } from "#@typeberry/pvm-interface";
|
|
10
12
|
import { InMemoryService, InMemoryState, PreimageItem, ServiceAccountInfo } from "#@typeberry/state";
|
|
11
13
|
import { RefineExternalitiesImpl } from "./refine.js";
|
|
12
14
|
const MINIMAL_PROGRAM = new Uint8Array([0, 1, 1, 0, 0x00]);
|
|
@@ -34,7 +36,7 @@ function createMockState(services) {
|
|
|
34
36
|
preimages.set(hash, item);
|
|
35
37
|
}
|
|
36
38
|
const serviceId = tryAsServiceId(svc.id);
|
|
37
|
-
serviceMap.set(serviceId, new
|
|
39
|
+
serviceMap.set(serviceId, InMemoryService.new(serviceId, {
|
|
38
40
|
info: ServiceAccountInfo.create({
|
|
39
41
|
codeHash: Bytes.zero(HASH_SIZE).asOpaque(),
|
|
40
42
|
balance: tryAsU64(1000000000n),
|
|
@@ -64,6 +66,9 @@ function createExt(overrides = {}) {
|
|
|
64
66
|
...overrides,
|
|
65
67
|
});
|
|
66
68
|
}
|
|
69
|
+
function emptyRegisters() {
|
|
70
|
+
return HostCallRegisters.empty();
|
|
71
|
+
}
|
|
67
72
|
describe("RefineExternalitiesImpl", () => {
|
|
68
73
|
describe("historicalLookup", () => {
|
|
69
74
|
const PREIMAGE_HASH = "0xaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa";
|
|
@@ -207,4 +212,117 @@ describe("RefineExternalitiesImpl", () => {
|
|
|
207
212
|
assert.strictEqual(result.isOk, true);
|
|
208
213
|
});
|
|
209
214
|
});
|
|
215
|
+
describe("machineExpunge", () => {
|
|
216
|
+
it("should remove machine and return its program counter (0)", async () => {
|
|
217
|
+
const ext = createExt();
|
|
218
|
+
const code = BytesBlob.blobFrom(MINIMAL_PROGRAM);
|
|
219
|
+
const initResult = await ext.machineInit(code, tryAsProgramCounter(0));
|
|
220
|
+
assert.strictEqual(initResult.isOk, true);
|
|
221
|
+
const machineId = initResult.ok;
|
|
222
|
+
const result = await ext.machineExpunge(machineId);
|
|
223
|
+
assert.strictEqual(result.isOk, true);
|
|
224
|
+
// PC should be 0 since we initialized with PC=0
|
|
225
|
+
assert.strictEqual(result.ok, tryAsProgramCounter(0));
|
|
226
|
+
});
|
|
227
|
+
it("should remove machine and return its program counter (10)", async () => {
|
|
228
|
+
const ext = createExt();
|
|
229
|
+
const code = BytesBlob.blobFrom(MINIMAL_PROGRAM);
|
|
230
|
+
const initResult = await ext.machineInit(code, tryAsProgramCounter(10));
|
|
231
|
+
assert.strictEqual(initResult.isOk, true);
|
|
232
|
+
const machineId = initResult.ok;
|
|
233
|
+
const result = await ext.machineExpunge(machineId);
|
|
234
|
+
assert.strictEqual(result.isOk, true);
|
|
235
|
+
// PC should be 10 since we initialized with PC=10
|
|
236
|
+
assert.strictEqual(result.ok, tryAsProgramCounter(10));
|
|
237
|
+
});
|
|
238
|
+
it("should return NoMachineError for non-existent machine", async () => {
|
|
239
|
+
const ext = createExt();
|
|
240
|
+
const result = await ext.machineExpunge(tryAsMachineId(999));
|
|
241
|
+
assert.strictEqual(result.isError, true);
|
|
242
|
+
});
|
|
243
|
+
it("should not allow double expunge", async () => {
|
|
244
|
+
const ext = createExt();
|
|
245
|
+
const code = BytesBlob.blobFrom(MINIMAL_PROGRAM);
|
|
246
|
+
const initResult = await ext.machineInit(code, tryAsProgramCounter(0));
|
|
247
|
+
assert.strictEqual(initResult.isOk, true);
|
|
248
|
+
const machineId = initResult.ok;
|
|
249
|
+
const r1 = await ext.machineExpunge(machineId);
|
|
250
|
+
assert.strictEqual(r1.isOk, true);
|
|
251
|
+
const r2 = await ext.machineExpunge(machineId);
|
|
252
|
+
assert.strictEqual(r2.isError, true);
|
|
253
|
+
});
|
|
254
|
+
it("should remove exact machine from multiple and return its program counter (10)", async () => {
|
|
255
|
+
const ext = createExt();
|
|
256
|
+
const code = BytesBlob.blobFrom(MINIMAL_PROGRAM);
|
|
257
|
+
await ext.machineInit(code, tryAsProgramCounter(0));
|
|
258
|
+
const initResult = await ext.machineInit(code, tryAsProgramCounter(10));
|
|
259
|
+
await ext.machineInit(code, tryAsProgramCounter(20));
|
|
260
|
+
assert.strictEqual(initResult.isOk, true);
|
|
261
|
+
const machineId = initResult.ok;
|
|
262
|
+
const result = await ext.machineExpunge(machineId);
|
|
263
|
+
assert.strictEqual(result.isOk, true);
|
|
264
|
+
// PC should be 10 since we initialized with PC=10
|
|
265
|
+
assert.strictEqual(result.ok, tryAsProgramCounter(10));
|
|
266
|
+
});
|
|
267
|
+
});
|
|
268
|
+
describe("machineInvoke", () => {
|
|
269
|
+
it("should return NoMachineError for non-existent machine", async () => {
|
|
270
|
+
const ext = createExt();
|
|
271
|
+
const regs = emptyRegisters();
|
|
272
|
+
const result = await ext.machineInvoke(tryAsMachineId(999), tryAsBigGas(1000n), regs);
|
|
273
|
+
assert.strictEqual(result.isError, true);
|
|
274
|
+
});
|
|
275
|
+
it("should execute inner PVM and return PANIC for TRAP instruction", async () => {
|
|
276
|
+
const ext = createExt();
|
|
277
|
+
const code = BytesBlob.blobFrom(MINIMAL_PROGRAM);
|
|
278
|
+
const initResult = await ext.machineInit(code, tryAsProgramCounter(0));
|
|
279
|
+
assert.strictEqual(initResult.isOk, true);
|
|
280
|
+
const machineId = initResult.ok;
|
|
281
|
+
const regs = emptyRegisters();
|
|
282
|
+
const result = await ext.machineInvoke(machineId, tryAsBigGas(1000n), regs);
|
|
283
|
+
assert.strictEqual(result.isOk, true);
|
|
284
|
+
assert.strictEqual(result.ok.result.status, Status.PANIC);
|
|
285
|
+
});
|
|
286
|
+
it("should return OOG when gas is exhausted", async () => {
|
|
287
|
+
const ext = createExt();
|
|
288
|
+
const code = BytesBlob.blobFrom(MINIMAL_PROGRAM);
|
|
289
|
+
const initResult = await ext.machineInit(code, tryAsProgramCounter(0));
|
|
290
|
+
assert.strictEqual(initResult.isOk, true);
|
|
291
|
+
const machineId = initResult.ok;
|
|
292
|
+
const regs = emptyRegisters();
|
|
293
|
+
// With 0 gas, should immediately OOG
|
|
294
|
+
const result = await ext.machineInvoke(machineId, tryAsBigGas(0n), regs);
|
|
295
|
+
assert.strictEqual(result.isOk, true);
|
|
296
|
+
assert.strictEqual(result.ok.result.status, Status.OOG);
|
|
297
|
+
});
|
|
298
|
+
it("should pass registers to inner PVM and return them back", async () => {
|
|
299
|
+
const ext = createExt();
|
|
300
|
+
const code = BytesBlob.blobFrom(MINIMAL_PROGRAM);
|
|
301
|
+
const initResult = await ext.machineInit(code, tryAsProgramCounter(0));
|
|
302
|
+
assert.strictEqual(initResult.isOk, true);
|
|
303
|
+
const machineId = initResult.ok;
|
|
304
|
+
const regs = emptyRegisters();
|
|
305
|
+
regs.set(0, tryAsU64(0xdeadbeefn));
|
|
306
|
+
regs.set(5, tryAsU64(0xcafebaben));
|
|
307
|
+
const result = await ext.machineInvoke(machineId, tryAsBigGas(1000n), regs);
|
|
308
|
+
assert.strictEqual(result.isOk, true);
|
|
309
|
+
// Registers should be returned (TRAP doesn't modify registers)
|
|
310
|
+
assert.strictEqual(result.ok.registers.get(0), tryAsU64(0xdeadbeefn));
|
|
311
|
+
assert.strictEqual(result.ok.registers.get(5), tryAsU64(0xcafebaben));
|
|
312
|
+
});
|
|
313
|
+
it("should return remaining gas after execution", async () => {
|
|
314
|
+
const ext = createExt();
|
|
315
|
+
const code = BytesBlob.blobFrom(MINIMAL_PROGRAM);
|
|
316
|
+
const initResult = await ext.machineInit(code, tryAsProgramCounter(0));
|
|
317
|
+
assert.strictEqual(initResult.isOk, true);
|
|
318
|
+
const machineId = initResult.ok;
|
|
319
|
+
const regs = emptyRegisters();
|
|
320
|
+
const result = await ext.machineInvoke(machineId, tryAsBigGas(1000n), regs);
|
|
321
|
+
assert.strictEqual(result.isOk, true);
|
|
322
|
+
// TRAP costs 1 gas, so remaining should be 999
|
|
323
|
+
const remaining = Number(result.ok.gas);
|
|
324
|
+
assert.ok(remaining < 1000);
|
|
325
|
+
assert.ok(remaining >= 0);
|
|
326
|
+
});
|
|
327
|
+
});
|
|
210
328
|
});
|
|
@@ -1,23 +1,18 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import type { CoreIndex, Segment } from "#@typeberry/block";
|
|
2
2
|
import { type WorkPackageHash } from "#@typeberry/block/refine-context.js";
|
|
3
3
|
import type { WorkItemExtrinsic } from "#@typeberry/block/work-item.js";
|
|
4
4
|
import type { WorkPackage } from "#@typeberry/block/work-package.js";
|
|
5
5
|
import { WorkReport } from "#@typeberry/block/work-report.js";
|
|
6
|
-
import { WorkExecResult, WorkResult } from "#@typeberry/block/work-result.js";
|
|
7
|
-
import { type KnownSizeArray } from "#@typeberry/collections";
|
|
8
6
|
import type { ChainSpec, PvmBackend } from "#@typeberry/config";
|
|
9
7
|
import type { StatesDb } from "#@typeberry/database";
|
|
10
|
-
import {
|
|
11
|
-
import { type Blake2b, type WithHash } from "#@typeberry/hash";
|
|
8
|
+
import type { Blake2b, WithHash } from "#@typeberry/hash";
|
|
12
9
|
import { Result } from "#@typeberry/utils";
|
|
10
|
+
import { type ImportedSegment, type PerWorkItem } from "./refine.js";
|
|
11
|
+
export type { ImportedSegment, PerWorkItem, RefineItemResult } from "./refine.js";
|
|
13
12
|
export type RefineResult = {
|
|
14
13
|
report: WorkReport;
|
|
15
14
|
exports: PerWorkItem<Segment[]>;
|
|
16
15
|
};
|
|
17
|
-
export type RefineItemResult = {
|
|
18
|
-
result: WorkResult;
|
|
19
|
-
exports: readonly Segment[];
|
|
20
|
-
};
|
|
21
16
|
export declare enum RefineError {
|
|
22
17
|
/** State for context anchor block or lookup anchor is not found in the DB. */
|
|
23
18
|
StateMissing = 0,
|
|
@@ -28,17 +23,13 @@ export declare enum RefineError {
|
|
|
28
23
|
/** Authorization error. */
|
|
29
24
|
AuthorizationError = 3
|
|
30
25
|
}
|
|
31
|
-
export type PerWorkItem<T> = KnownSizeArray<T, "for each work item">;
|
|
32
|
-
export type ImportedSegment = {
|
|
33
|
-
index: SegmentIndex;
|
|
34
|
-
data: Segment;
|
|
35
|
-
};
|
|
36
26
|
export declare class InCore {
|
|
37
27
|
readonly chainSpec: ChainSpec;
|
|
38
28
|
private readonly states;
|
|
39
|
-
private readonly
|
|
40
|
-
private readonly
|
|
41
|
-
|
|
29
|
+
private readonly isAuthorized;
|
|
30
|
+
private readonly refineItem;
|
|
31
|
+
static new(chainSpec: ChainSpec, states: StatesDb, pvmBackend: PvmBackend, blake2b: Blake2b): InCore;
|
|
32
|
+
private constructor();
|
|
42
33
|
/**
|
|
43
34
|
* Work-report computation function.
|
|
44
35
|
*
|
|
@@ -50,11 +41,6 @@ export declare class InCore {
|
|
|
50
41
|
* https://graypaper.fluffylabs.dev/#/ab2cdbd/1b7f021b7f02?v=0.7.2
|
|
51
42
|
*/
|
|
52
43
|
refine(workPackageAndHash: WithHash<WorkPackageHash, WorkPackage>, core: CoreIndex, imports: PerWorkItem<ImportedSegment[]>, extrinsics: PerWorkItem<WorkItemExtrinsic[]>): Promise<Result<RefineResult, RefineError>>;
|
|
53
|
-
private amalgamateWorkReport;
|
|
54
|
-
private authorizePackage;
|
|
55
|
-
private refineItem;
|
|
56
|
-
extractWorkResult(execResult: ReturnValue<ServiceGas>): WorkExecResult;
|
|
57
|
-
private getServiceCode;
|
|
58
|
-
private createRefineExternalities;
|
|
44
|
+
private static amalgamateWorkReport;
|
|
59
45
|
}
|
|
60
46
|
//# sourceMappingURL=in-core.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"in-core.d.ts","sourceRoot":"","sources":["../../../../../packages/jam/in-core/in-core.ts"],"names":[],"mappings":"AAAA,OAAO,
|
|
1
|
+
{"version":3,"file":"in-core.d.ts","sourceRoot":"","sources":["../../../../../packages/jam/in-core/in-core.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,OAAO,EAAE,MAAM,kBAAkB,CAAC;AAC3D,OAAO,EAAsB,KAAK,eAAe,EAAmB,MAAM,oCAAoC,CAAC;AAC/G,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,+BAA+B,CAAC;AACvE,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,kCAAkC,CAAC;AACpE,OAAO,EAAmB,UAAU,EAAE,MAAM,iCAAiC,CAAC;AAG9E,OAAO,KAAK,EAAE,SAAS,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAC;AAC/D,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,qBAAqB,CAAC;AACpD,OAAO,KAAK,EAAE,OAAO,EAAE,QAAQ,EAAE,MAAM,iBAAiB,CAAC;AAIzD,OAAO,EAAe,MAAM,EAAE,MAAM,kBAAkB,CAAC;AAEvD,OAAO,EAAE,KAAK,eAAe,EAAE,KAAK,WAAW,EAAiC,MAAM,aAAa,CAAC;AAEpG,YAAY,EAAE,eAAe,EAAE,WAAW,EAAE,gBAAgB,EAAE,MAAM,aAAa,CAAC;AAElF,MAAM,MAAM,YAAY,GAAG;IACzB,MAAM,EAAE,UAAU,CAAC;IACnB,OAAO,EAAE,WAAW,CAAC,OAAO,EAAE,CAAC,CAAC;CACjC,CAAC;AAEF,oBAAY,WAAW;IACrB,8EAA8E;IAC9E,YAAY,IAAI;IAChB,qFAAqF;IACrF,iBAAiB,IAAI;IACrB,wEAAwE;IACxE,uBAAuB,IAAI;IAC3B,2BAA2B;IAC3B,kBAAkB,IAAI;CACvB;AAID,qBAAa,MAAM;aASC,SAAS,EAAE,SAAS;IACpC,OAAO,CAAC,QAAQ,CAAC,MAAM;IATzB,OAAO,CAAC,QAAQ,CAAC,YAAY,CAAe;IAC5C,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAS;IAEpC,MAAM,CAAC,GAAG,CAAC,SAAS,EAAE,SAAS,EAAE,MAAM,EAAE,QAAQ,EAAE,UAAU,EAAE,UAAU,EAAE,OAAO,EAAE,OAAO;IAI3F,OAAO;IAUP;;;;;;;;;OASG;IACG,MAAM,CACV,kBAAkB,EAAE,QAAQ,CAAC,eAAe,EAAE,WAAW,CAAC,EAC1D,IAAI,EAAE,SAAS,EACf,OAAO,EAAE,WAAW,CAAC,eAAe,EAAE,CAAC,EACvC,UAAU,EAAE,WAAW,CAAC,iBAAiB,EAAE,CAAC,GAC3C,OAAO,CAAC,MAAM,CAAC,YAAY,EAAE,WAAW,CAAC,CAAC;IAwF7C,OAAO,CAAC,MAAM,CAAC,oBAAoB;CAsDpC"}
|