@typeberry/lib 0.5.10-ec38e0b → 0.5.11-10b197e
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.d.ts +5 -0
- package/packages/core/pvm-host-calls/ecalli-trace-logger.d.ts.map +1 -1
- package/packages/core/pvm-host-calls/ecalli-trace-logger.js +8 -1
- 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/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/index.d.ts +1 -1
- package/packages/jam/executor/index.d.ts.map +1 -1
- package/packages/jam/executor/index.js +1 -1
- package/packages/jam/executor/pvm-executor.js +24 -24
- 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 +3 -3
- package/packages/jam/in-core/externalities/refine.d.ts.map +1 -1
- package/packages/jam/in-core/externalities/refine.js +33 -5
- package/packages/jam/in-core/externalities/refine.test.js +66 -1
- package/packages/jam/in-core/in-core.d.ts +2 -1
- package/packages/jam/in-core/in-core.d.ts.map +1 -1
- package/packages/jam/in-core/in-core.js +3 -0
- package/packages/jam/in-core/in-core.test.js +6 -6
- package/packages/jam/in-core/is-authorized.test.js +2 -2
- package/packages/jam/in-core/refine.js +1 -1
- 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 +3 -0
- 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/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 +2 -1
- package/packages/jam/jam-host-calls/general/fetch.d.ts.map +1 -1
- package/packages/jam/jam-host-calls/general/fetch.js +3 -0
- package/packages/jam/jam-host-calls/general/fetch.test.js +27 -28
- 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 +4 -1
- 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.d.ts.map +1 -1
- package/packages/jam/transition/accumulate/accumulate.js +18 -6
- package/packages/jam/transition/accumulate/accumulate.test.js +1 -1
- 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 +20 -6
- package/packages/jam/transition/externalities/accumulate-externalities.d.ts.map +1 -1
- package/packages/jam/transition/externalities/accumulate-externalities.js +29 -22
- package/packages/jam/transition/externalities/accumulate-externalities.test.js +590 -100
- package/packages/jam/transition/externalities/refine-fetch-externalities.d.ts +2 -1
- package/packages/jam/transition/externalities/refine-fetch-externalities.d.ts.map +1 -1
- package/packages/jam/transition/externalities/refine-fetch-externalities.js +3 -0
- 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
|
@@ -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),
|
|
@@ -3,8 +3,8 @@ import type { BytesBlob } from "#@typeberry/bytes";
|
|
|
3
3
|
import type { PvmBackend } from "#@typeberry/config";
|
|
4
4
|
import type { Blake2bHash } from "#@typeberry/hash";
|
|
5
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
|
|
7
|
-
import { type HostCallMemory,
|
|
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";
|
|
@@ -48,7 +48,7 @@ export declare class RefineExternalitiesImpl implements RefineExternalities {
|
|
|
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
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;
|
|
@@ -42,7 +45,7 @@ export class RefineExternalitiesImpl {
|
|
|
42
45
|
}
|
|
43
46
|
machineExpunge(machineIndex) {
|
|
44
47
|
// We just care about machineIndex
|
|
45
|
-
const entry = this.machines.findExact([machineIndex,
|
|
48
|
+
const entry = this.machines.findExact([machineIndex, NULL_INTERPRETER]);
|
|
46
49
|
if (entry === undefined) {
|
|
47
50
|
return Promise.resolve(Result.error(NoMachineError, () => `Machine not found (id: ${machineIndex})`));
|
|
48
51
|
}
|
|
@@ -93,8 +96,33 @@ export class RefineExternalitiesImpl {
|
|
|
93
96
|
this.machines.insert([machineId, innerPvm]);
|
|
94
97
|
return Result.ok(machineId);
|
|
95
98
|
}
|
|
96
|
-
machineInvoke(
|
|
97
|
-
|
|
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 }));
|
|
98
126
|
}
|
|
99
127
|
exportSegment(segment) {
|
|
100
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";
|
|
@@ -260,4 +265,64 @@ describe("RefineExternalitiesImpl", () => {
|
|
|
260
265
|
assert.strictEqual(result.ok, tryAsProgramCounter(10));
|
|
261
266
|
});
|
|
262
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
|
+
});
|
|
263
328
|
});
|
|
@@ -28,7 +28,8 @@ export declare class InCore {
|
|
|
28
28
|
private readonly states;
|
|
29
29
|
private readonly isAuthorized;
|
|
30
30
|
private readonly refineItem;
|
|
31
|
-
|
|
31
|
+
static new(chainSpec: ChainSpec, states: StatesDb, pvmBackend: PvmBackend, blake2b: Blake2b): InCore;
|
|
32
|
+
private constructor();
|
|
32
33
|
/**
|
|
33
34
|
* Work-report computation function.
|
|
34
35
|
*
|
|
@@ -1 +1 @@
|
|
|
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;
|
|
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"}
|
|
@@ -25,6 +25,9 @@ export class InCore {
|
|
|
25
25
|
states;
|
|
26
26
|
isAuthorized;
|
|
27
27
|
refineItem;
|
|
28
|
+
static new(chainSpec, states, pvmBackend, blake2b) {
|
|
29
|
+
return new InCore(chainSpec, states, pvmBackend, blake2b);
|
|
30
|
+
}
|
|
28
31
|
constructor(chainSpec, states, pvmBackend, blake2b) {
|
|
29
32
|
this.chainSpec = chainSpec;
|
|
30
33
|
this.states = states;
|
|
@@ -26,7 +26,7 @@ function getAuthCodeHash() {
|
|
|
26
26
|
return blake2b.hashBytes(AUTHORIZER_PVM).asOpaque();
|
|
27
27
|
}
|
|
28
28
|
function createService(serviceId, codeHash, code) {
|
|
29
|
-
return new
|
|
29
|
+
return InMemoryService.new(serviceId, {
|
|
30
30
|
info: ServiceAccountInfo.create({
|
|
31
31
|
codeHash: codeHash.asOpaque(),
|
|
32
32
|
balance: tryAsU64(10_000_000_000),
|
|
@@ -77,13 +77,13 @@ function hashWorkPackage(spec, workPackage) {
|
|
|
77
77
|
const workPackageHash = blake2b
|
|
78
78
|
.hashBytes(Encoder.encodeObject(WorkPackage.Codec, workPackage, spec))
|
|
79
79
|
.asOpaque();
|
|
80
|
-
return new
|
|
80
|
+
return WithHash.new(workPackageHash, workPackage);
|
|
81
81
|
}
|
|
82
82
|
describe("InCore", () => {
|
|
83
83
|
it("should return StateMissing error when anchor block state is not in DB", async () => {
|
|
84
84
|
const spec = tinyChainSpec;
|
|
85
|
-
const states = new
|
|
86
|
-
const inCore = new
|
|
85
|
+
const states = InMemoryStates.new(spec);
|
|
86
|
+
const inCore = InCore.new(spec, states, PvmBackend.BuiltIn, blake2b);
|
|
87
87
|
const anchorHash = Bytes.fill(HASH_SIZE, 1).asOpaque();
|
|
88
88
|
const stateRoot = Bytes.zero(HASH_SIZE).asOpaque();
|
|
89
89
|
const authCodeHash = getAuthCodeHash();
|
|
@@ -94,8 +94,8 @@ describe("InCore", () => {
|
|
|
94
94
|
});
|
|
95
95
|
it("should refine work package and produce a report when state is set up", async () => {
|
|
96
96
|
const spec = tinyChainSpec;
|
|
97
|
-
const states = new
|
|
98
|
-
const inCore = new
|
|
97
|
+
const states = InMemoryStates.new(spec);
|
|
98
|
+
const inCore = InCore.new(spec, states, PvmBackend.BuiltIn, blake2b);
|
|
99
99
|
const authCodeHash = getAuthCodeHash();
|
|
100
100
|
const anchorHash = Bytes.fill(HASH_SIZE, 1).asOpaque();
|
|
101
101
|
const state = InMemoryState.partial(spec, {
|
|
@@ -20,7 +20,7 @@ before(async () => {
|
|
|
20
20
|
const AUTHORIZER_PVM = BytesBlob.blobFrom(readFileSync(resolve(import.meta.dirname, "fixtures/authorizer.pvm")));
|
|
21
21
|
const AUTH_SERVICE_ID = tryAsServiceId(42);
|
|
22
22
|
function createService(serviceId, codeHash, code) {
|
|
23
|
-
return new
|
|
23
|
+
return InMemoryService.new(serviceId, {
|
|
24
24
|
info: ServiceAccountInfo.create({
|
|
25
25
|
codeHash: codeHash.asOpaque(),
|
|
26
26
|
balance: tryAsU64(10_000_000_000),
|
|
@@ -96,7 +96,7 @@ describe("IsAuthorized", () => {
|
|
|
96
96
|
it("should fail when auth code preimage is missing", async () => {
|
|
97
97
|
const authCodeHash = getAuthCodeHash();
|
|
98
98
|
// Service exists but with no preimages
|
|
99
|
-
const emptyService = new
|
|
99
|
+
const emptyService = InMemoryService.new(AUTH_SERVICE_ID, {
|
|
100
100
|
info: ServiceAccountInfo.create({
|
|
101
101
|
codeHash: Bytes.zero(HASH_SIZE).asOpaque(),
|
|
102
102
|
balance: tryAsU64(0),
|
|
@@ -161,7 +161,7 @@ export class Refine {
|
|
|
161
161
|
}
|
|
162
162
|
createRefineExternalities(args) {
|
|
163
163
|
// TODO [ToDr] Pass all required fetch data
|
|
164
|
-
const fetchExternalities = new
|
|
164
|
+
const fetchExternalities = RefineFetchExternalities.new(this.chainSpec);
|
|
165
165
|
const refine = RefineExternalitiesImpl.create({
|
|
166
166
|
currentServiceId: args.currentServiceId,
|
|
167
167
|
lookupState: args.lookupState,
|
|
@@ -16,7 +16,8 @@ export declare class Assign implements HostCallHandler {
|
|
|
16
16
|
index: number & import("@typeberry/numbers").WithBytesRepresentation<4> & import("@typeberry/utils").WithOpaque<"HostCallIndex[U32]">;
|
|
17
17
|
basicGasCost: number & import("@typeberry/numbers").WithBytesRepresentation<4> & import("@typeberry/utils").WithOpaque<"SmallGas[U32]">;
|
|
18
18
|
tracedRegisters: (number & import("@typeberry/utils").WithOpaque<"register index">)[];
|
|
19
|
-
|
|
19
|
+
static new(currentServiceId: ServiceId, partialState: PartialState, chainSpec: ChainSpec): Assign;
|
|
20
|
+
private constructor();
|
|
20
21
|
execute(_gas: IGasCounter, regs: HostCallRegisters, memory: HostCallMemory): Promise<undefined | PvmExecution>;
|
|
21
22
|
}
|
|
22
23
|
//# sourceMappingURL=assign.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"assign.d.ts","sourceRoot":"","sources":["../../../../../../packages/jam/jam-host-calls/accumulate/assign.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,SAAS,EAAkB,MAAM,kBAAkB,CAAC;AAGlE,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,mBAAmB,CAAC;AAEnD,OAAO,KAAK,EAAE,eAAe,EAAE,cAAc,EAAE,iBAAiB,EAAE,MAAM,2BAA2B,CAAC;AACpG,OAAO,EAAE,YAAY,EAAsC,MAAM,2BAA2B,CAAC;AAC7F,OAAO,EAAE,KAAK,WAAW,EAAiB,MAAM,0BAA0B,CAAC;AAG3E,OAAO,EAAE,KAAK,YAAY,EAAyB,MAAM,mCAAmC,CAAC;AAO7F;;;;GAIG;AACH,qBAAa,MAAO,YAAW,eAAe;
|
|
1
|
+
{"version":3,"file":"assign.d.ts","sourceRoot":"","sources":["../../../../../../packages/jam/jam-host-calls/accumulate/assign.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,SAAS,EAAkB,MAAM,kBAAkB,CAAC;AAGlE,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,mBAAmB,CAAC;AAEnD,OAAO,KAAK,EAAE,eAAe,EAAE,cAAc,EAAE,iBAAiB,EAAE,MAAM,2BAA2B,CAAC;AACpG,OAAO,EAAE,YAAY,EAAsC,MAAM,2BAA2B,CAAC;AAC7F,OAAO,EAAE,KAAK,WAAW,EAAiB,MAAM,0BAA0B,CAAC;AAG3E,OAAO,EAAE,KAAK,YAAY,EAAyB,MAAM,mCAAmC,CAAC;AAO7F;;;;GAIG;AACH,qBAAa,MAAO,YAAW,eAAe;aAU1B,gBAAgB,EAAE,SAAS;IAC3C,OAAO,CAAC,QAAQ,CAAC,YAAY;IAC7B,OAAO,CAAC,QAAQ,CAAC,SAAS;IAX5B,KAAK,iIAA0B;IAC/B,YAAY,4HAAqB;IACjC,eAAe,uEAAiC;IAEhD,MAAM,CAAC,GAAG,CAAC,gBAAgB,EAAE,SAAS,EAAE,YAAY,EAAE,YAAY,EAAE,SAAS,EAAE,SAAS;IAIxF,OAAO;IAMD,OAAO,CAAC,IAAI,EAAE,WAAW,EAAE,IAAI,EAAE,iBAAiB,EAAE,MAAM,EAAE,cAAc,GAAG,OAAO,CAAC,SAAS,GAAG,YAAY,CAAC;CAkDrH"}
|
|
@@ -23,6 +23,9 @@ export class Assign {
|
|
|
23
23
|
index = tryAsHostCallIndex(15);
|
|
24
24
|
basicGasCost = tryAsSmallGas(10);
|
|
25
25
|
tracedRegisters = traceRegisters(IN_OUT_REG, 8);
|
|
26
|
+
static new(currentServiceId, partialState, chainSpec) {
|
|
27
|
+
return new Assign(currentServiceId, partialState, chainSpec);
|
|
28
|
+
}
|
|
26
29
|
constructor(currentServiceId, partialState, chainSpec) {
|
|
27
30
|
this.currentServiceId = currentServiceId;
|
|
28
31
|
this.partialState = partialState;
|
|
@@ -18,7 +18,6 @@ import { Result } from "#@typeberry/utils";
|
|
|
18
18
|
import { UpdatePrivilegesError } from "../externalities/partial-state.js";
|
|
19
19
|
import { PartialStateMock } from "../externalities/partial-state-mock.js";
|
|
20
20
|
import { HostCallResult } from "../general/results.js";
|
|
21
|
-
import { emptyRegistersBuffer } from "../utils.js";
|
|
22
21
|
import { Assign } from "./assign.js";
|
|
23
22
|
const gas = gasCounter(tryAsGas(0));
|
|
24
23
|
const RESULT_REG = 7;
|
|
@@ -27,7 +26,7 @@ const AUTH_QUEUE_START_REG = 8;
|
|
|
27
26
|
const AUTH_MANAGER_REG = 9;
|
|
28
27
|
function prepareRegsAndMemory(coreIndex, authQueue, { skipAuthQueue = false, assigners = null } = {}) {
|
|
29
28
|
const memStart = 2 ** 16;
|
|
30
|
-
const registers =
|
|
29
|
+
const registers = HostCallRegisters.empty();
|
|
31
30
|
registers.set(CORE_INDEX_REG, tryAsU64(coreIndex));
|
|
32
31
|
registers.set(AUTH_QUEUE_START_REG, tryAsU64(memStart));
|
|
33
32
|
if (assigners !== null) {
|
|
@@ -43,7 +42,7 @@ function prepareRegsAndMemory(coreIndex, authQueue, { skipAuthQueue = false, ass
|
|
|
43
42
|
if (!skipAuthQueue) {
|
|
44
43
|
builder.setReadablePages(tryAsMemoryIndex(memStart), tryAsMemoryIndex(memStart + PAGE_SIZE), data.raw);
|
|
45
44
|
}
|
|
46
|
-
const memory = new
|
|
45
|
+
const memory = HostCallMemory.new(builder.finalize(tryAsMemoryIndex(0), tryAsSbrkIndex(0)));
|
|
47
46
|
return {
|
|
48
47
|
registers,
|
|
49
48
|
memory,
|
|
@@ -53,7 +52,7 @@ describe("HostCalls: Assign", () => {
|
|
|
53
52
|
it("should assign authorization queue to a core", async () => {
|
|
54
53
|
const accumulate = new PartialStateMock();
|
|
55
54
|
const serviceId = tryAsServiceId(10_000);
|
|
56
|
-
const assign = new
|
|
55
|
+
const assign = Assign.new(serviceId, accumulate, tinyChainSpec);
|
|
57
56
|
const { registers, memory } = prepareRegsAndMemory(tryAsCoreIndex(0), [
|
|
58
57
|
Bytes.fill(HASH_SIZE, 1),
|
|
59
58
|
Bytes.fill(HASH_SIZE, 2),
|
|
@@ -79,7 +78,7 @@ describe("HostCalls: Assign", () => {
|
|
|
79
78
|
it("should return an error if core index is too large", async () => {
|
|
80
79
|
const accumulate = new PartialStateMock();
|
|
81
80
|
const serviceId = tryAsServiceId(10_000);
|
|
82
|
-
const assign = new
|
|
81
|
+
const assign = Assign.new(serviceId, accumulate, tinyChainSpec);
|
|
83
82
|
const { registers, memory } = prepareRegsAndMemory(tryAsCoreIndex(3), []);
|
|
84
83
|
// when
|
|
85
84
|
const result = await assign.execute(gas, registers, memory);
|
|
@@ -91,7 +90,7 @@ describe("HostCalls: Assign", () => {
|
|
|
91
90
|
it("should return an error if core index is waay too large", async () => {
|
|
92
91
|
const accumulate = new PartialStateMock();
|
|
93
92
|
const serviceId = tryAsServiceId(10_000);
|
|
94
|
-
const assign = new
|
|
93
|
+
const assign = Assign.new(serviceId, accumulate, tinyChainSpec);
|
|
95
94
|
const { registers, memory } = prepareRegsAndMemory(tryAsCoreIndex(3), []);
|
|
96
95
|
registers.set(CORE_INDEX_REG, tryAsU64(2 ** 16 + 3));
|
|
97
96
|
// when
|
|
@@ -104,7 +103,7 @@ describe("HostCalls: Assign", () => {
|
|
|
104
103
|
it("should return panic if data not readable", async () => {
|
|
105
104
|
const accumulate = new PartialStateMock();
|
|
106
105
|
const serviceId = tryAsServiceId(10_000);
|
|
107
|
-
const assign = new
|
|
106
|
+
const assign = Assign.new(serviceId, accumulate, tinyChainSpec);
|
|
108
107
|
const { registers, memory } = prepareRegsAndMemory(tryAsCoreIndex(3), [], { skipAuthQueue: true });
|
|
109
108
|
// when
|
|
110
109
|
const result = await assign.execute(gas, registers, memory);
|
|
@@ -116,7 +115,7 @@ describe("HostCalls: Assign", () => {
|
|
|
116
115
|
const accumulate = new PartialStateMock();
|
|
117
116
|
accumulate.authQueueResponse = Result.error(UpdatePrivilegesError.UnprivilegedService, () => "Test: unprivileged service attempting assign");
|
|
118
117
|
const serviceId = tryAsServiceId(10_000);
|
|
119
|
-
const assign = new
|
|
118
|
+
const assign = Assign.new(serviceId, accumulate, tinyChainSpec);
|
|
120
119
|
const { registers, memory } = prepareRegsAndMemory(tryAsCoreIndex(0), [], { assigners: 0 });
|
|
121
120
|
// when
|
|
122
121
|
const result = await assign.execute(gas, registers, memory);
|
|
@@ -129,7 +128,7 @@ describe("HostCalls: Assign", () => {
|
|
|
129
128
|
const accumulate = new PartialStateMock();
|
|
130
129
|
accumulate.authQueueResponse = Result.error(UpdatePrivilegesError.InvalidServiceId, () => "Test: invalid service ID for assign");
|
|
131
130
|
const serviceId = tryAsServiceId(10_000);
|
|
132
|
-
const assign = new
|
|
131
|
+
const assign = Assign.new(serviceId, accumulate, tinyChainSpec);
|
|
133
132
|
const { registers, memory } = prepareRegsAndMemory(tryAsCoreIndex(0), [], { assigners: null });
|
|
134
133
|
// when
|
|
135
134
|
const result = await assign.execute(gas, registers, memory);
|
|
@@ -16,7 +16,8 @@ export declare class Bless implements HostCallHandler {
|
|
|
16
16
|
index: number & import("@typeberry/numbers").WithBytesRepresentation<4> & import("@typeberry/utils").WithOpaque<"HostCallIndex[U32]">;
|
|
17
17
|
basicGasCost: number & import("@typeberry/numbers").WithBytesRepresentation<4> & import("@typeberry/utils").WithOpaque<"SmallGas[U32]">;
|
|
18
18
|
tracedRegisters: (number & import("@typeberry/utils").WithOpaque<"register index">)[];
|
|
19
|
-
|
|
19
|
+
static new(currentServiceId: ServiceId, partialState: PartialState, chainSpec: ChainSpec): Bless;
|
|
20
|
+
private constructor();
|
|
20
21
|
execute(_gas: IGasCounter, regs: HostCallRegisters, memory: HostCallMemory): Promise<undefined | PvmExecution>;
|
|
21
22
|
}
|
|
22
23
|
//# sourceMappingURL=bless.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"bless.d.ts","sourceRoot":"","sources":["../../../../../../packages/jam/jam-host-calls/accumulate/bless.ts"],"names":[],"mappings":"AAAA,OAAO,EAAmB,KAAK,SAAS,EAAmB,MAAM,kBAAkB,CAAC;AAEpF,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,mBAAmB,CAAC;AAEnD,OAAO,KAAK,EAAE,eAAe,EAAE,cAAc,EAAE,iBAAiB,EAAE,MAAM,2BAA2B,CAAC;AACpG,OAAO,EAAE,YAAY,EAAsC,MAAM,2BAA2B,CAAC;AAC7F,OAAO,EAAE,KAAK,WAAW,EAAiB,MAAM,0BAA0B,CAAC;AAG3E,OAAO,EAAE,KAAK,YAAY,EAAyB,MAAM,mCAAmC,CAAC;AAkB7F;;;;GAIG;AACH,qBAAa,KAAM,YAAW,eAAe;
|
|
1
|
+
{"version":3,"file":"bless.d.ts","sourceRoot":"","sources":["../../../../../../packages/jam/jam-host-calls/accumulate/bless.ts"],"names":[],"mappings":"AAAA,OAAO,EAAmB,KAAK,SAAS,EAAmB,MAAM,kBAAkB,CAAC;AAEpF,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,mBAAmB,CAAC;AAEnD,OAAO,KAAK,EAAE,eAAe,EAAE,cAAc,EAAE,iBAAiB,EAAE,MAAM,2BAA2B,CAAC;AACpG,OAAO,EAAE,YAAY,EAAsC,MAAM,2BAA2B,CAAC;AAC7F,OAAO,EAAE,KAAK,WAAW,EAAiB,MAAM,0BAA0B,CAAC;AAG3E,OAAO,EAAE,KAAK,YAAY,EAAyB,MAAM,mCAAmC,CAAC;AAkB7F;;;;GAIG;AACH,qBAAa,KAAM,YAAW,eAAe;aAUzB,gBAAgB,EAAE,SAAS;IAC3C,OAAO,CAAC,QAAQ,CAAC,YAAY;IAC7B,OAAO,CAAC,QAAQ,CAAC,SAAS;IAX5B,KAAK,iIAA0B;IAC/B,YAAY,4HAAqB;IACjC,eAAe,uEAAgD;IAE/D,MAAM,CAAC,GAAG,CAAC,gBAAgB,EAAE,SAAS,EAAE,YAAY,EAAE,YAAY,EAAE,SAAS,EAAE,SAAS;IAIxF,OAAO;IAMD,OAAO,CAAC,IAAI,EAAE,WAAW,EAAE,IAAI,EAAE,iBAAiB,EAAE,MAAM,EAAE,cAAc,GAAG,OAAO,CAAC,SAAS,GAAG,YAAY,CAAC;CAkFrH"}
|
|
@@ -26,6 +26,9 @@ export class Bless {
|
|
|
26
26
|
index = tryAsHostCallIndex(14);
|
|
27
27
|
basicGasCost = tryAsSmallGas(10);
|
|
28
28
|
tracedRegisters = traceRegisters(IN_OUT_REG, 8, 9, 10, 11, 12);
|
|
29
|
+
static new(currentServiceId, partialState, chainSpec) {
|
|
30
|
+
return new Bless(currentServiceId, partialState, chainSpec);
|
|
31
|
+
}
|
|
29
32
|
constructor(currentServiceId, partialState, chainSpec) {
|
|
30
33
|
this.currentServiceId = currentServiceId;
|
|
31
34
|
this.partialState = partialState;
|
|
@@ -15,7 +15,6 @@ import { deepEqual, Result } from "#@typeberry/utils";
|
|
|
15
15
|
import { UpdatePrivilegesError } from "../externalities/partial-state.js";
|
|
16
16
|
import { PartialStateMock } from "../externalities/partial-state-mock.js";
|
|
17
17
|
import { HostCallResult } from "../general/results.js";
|
|
18
|
-
import { emptyRegistersBuffer } from "../utils.js";
|
|
19
18
|
import { Bless } from "./bless.js";
|
|
20
19
|
const gas = gasCounter(tryAsGas(0));
|
|
21
20
|
const RESULT_REG = 7;
|
|
@@ -40,7 +39,7 @@ function prepareAuthorizers() {
|
|
|
40
39
|
function prepareRegsAndMemory(entries, authorizerData, { skipDictionary = false, skipAuth = false, manager, validator, registrar, } = {}) {
|
|
41
40
|
const memAuthStart = 2 ** 24;
|
|
42
41
|
const memStart = 2 ** 16;
|
|
43
|
-
const registers =
|
|
42
|
+
const registers = HostCallRegisters.empty();
|
|
44
43
|
registers.set(MANAGER_REG, manager ?? tryAsU64(5));
|
|
45
44
|
registers.set(AUTHORIZATION_REG, tryAsU64(memAuthStart));
|
|
46
45
|
registers.set(VALIDATOR_REG, validator ?? tryAsU64(20));
|
|
@@ -61,7 +60,7 @@ function prepareRegsAndMemory(entries, authorizerData, { skipDictionary = false,
|
|
|
61
60
|
if (!skipAuth) {
|
|
62
61
|
builder.setReadablePages(tryAsMemoryIndex(memAuthStart), tryAsMemoryIndex(memAuthStart + PAGE_SIZE), dataAuth.raw);
|
|
63
62
|
}
|
|
64
|
-
const memory = new
|
|
63
|
+
const memory = HostCallMemory.new(builder.finalize(tryAsMemoryIndex(0), tryAsSbrkIndex(0)));
|
|
65
64
|
return {
|
|
66
65
|
registers,
|
|
67
66
|
memory,
|
|
@@ -71,7 +70,7 @@ describe("HostCalls: Bless", () => {
|
|
|
71
70
|
it("should set new privileged services and auto-accumulate services", async () => {
|
|
72
71
|
const accumulate = new PartialStateMock();
|
|
73
72
|
const serviceId = tryAsServiceId(10_000);
|
|
74
|
-
const bless = new
|
|
73
|
+
const bless = Bless.new(serviceId, accumulate, tinyChainSpec);
|
|
75
74
|
const entries = prepareServiceGasMap();
|
|
76
75
|
const authorizers = prepareAuthorizers();
|
|
77
76
|
const { registers, memory } = prepareRegsAndMemory(entries, authorizers);
|
|
@@ -93,7 +92,7 @@ describe("HostCalls: Bless", () => {
|
|
|
93
92
|
it("should return panic when dictionary is not readable", async () => {
|
|
94
93
|
const accumulate = new PartialStateMock();
|
|
95
94
|
const serviceId = tryAsServiceId(10_000);
|
|
96
|
-
const bless = new
|
|
95
|
+
const bless = Bless.new(serviceId, accumulate, tinyChainSpec);
|
|
97
96
|
const entries = prepareServiceGasMap();
|
|
98
97
|
const authorizers = prepareAuthorizers();
|
|
99
98
|
const { registers, memory } = prepareRegsAndMemory(entries, authorizers, { skipDictionary: true });
|
|
@@ -106,7 +105,7 @@ describe("HostCalls: Bless", () => {
|
|
|
106
105
|
it("should return panic when authorizers are not readable", async () => {
|
|
107
106
|
const accumulate = new PartialStateMock();
|
|
108
107
|
const serviceId = tryAsServiceId(10_000);
|
|
109
|
-
const bless = new
|
|
108
|
+
const bless = Bless.new(serviceId, accumulate, tinyChainSpec);
|
|
110
109
|
const entries = prepareServiceGasMap();
|
|
111
110
|
const authorizers = prepareAuthorizers();
|
|
112
111
|
const { registers, memory } = prepareRegsAndMemory(entries, authorizers, { skipAuth: true });
|
|
@@ -119,7 +118,7 @@ describe("HostCalls: Bless", () => {
|
|
|
119
118
|
it("should auto-accumulate services when dictionary is out of order", async () => {
|
|
120
119
|
const accumulate = new PartialStateMock();
|
|
121
120
|
const serviceId = tryAsServiceId(10_000);
|
|
122
|
-
const bless = new
|
|
121
|
+
const bless = Bless.new(serviceId, accumulate, tinyChainSpec);
|
|
123
122
|
const entries = prepareServiceGasMap();
|
|
124
123
|
entries.push([tryAsServiceId(5), tryAsServiceGas(10_000)]);
|
|
125
124
|
const authorizers = prepareAuthorizers();
|
|
@@ -142,7 +141,7 @@ describe("HostCalls: Bless", () => {
|
|
|
142
141
|
it("should auto-accumulate services when dictionary contains duplicates", async () => {
|
|
143
142
|
const accumulate = new PartialStateMock();
|
|
144
143
|
const serviceId = tryAsServiceId(10_000);
|
|
145
|
-
const bless = new
|
|
144
|
+
const bless = Bless.new(serviceId, accumulate, tinyChainSpec);
|
|
146
145
|
const entries = prepareServiceGasMap();
|
|
147
146
|
entries.push(entries[entries.length - 1]);
|
|
148
147
|
const authorizers = prepareAuthorizers();
|
|
@@ -166,7 +165,7 @@ describe("HostCalls: Bless", () => {
|
|
|
166
165
|
const accumulate = new PartialStateMock();
|
|
167
166
|
accumulate.privilegedServicesResponse = Result.error(UpdatePrivilegesError.UnprivilegedService, () => "Test: unprivileged service attempting bless");
|
|
168
167
|
const serviceId = tryAsServiceId(11_000);
|
|
169
|
-
const bless = new
|
|
168
|
+
const bless = Bless.new(serviceId, accumulate, tinyChainSpec);
|
|
170
169
|
const entries = prepareServiceGasMap();
|
|
171
170
|
const authorizers = prepareAuthorizers();
|
|
172
171
|
const { registers, memory } = prepareRegsAndMemory(entries, authorizers);
|
|
@@ -181,7 +180,7 @@ describe("HostCalls: Bless", () => {
|
|
|
181
180
|
const accumulate = new PartialStateMock();
|
|
182
181
|
accumulate.privilegedServicesResponse = Result.error(UpdatePrivilegesError.InvalidServiceId, () => "Test: invalid manager service ID for bless");
|
|
183
182
|
const serviceId = tryAsServiceId(11_000);
|
|
184
|
-
const bless = new
|
|
183
|
+
const bless = Bless.new(serviceId, accumulate, tinyChainSpec);
|
|
185
184
|
const entries = prepareServiceGasMap();
|
|
186
185
|
const authorizers = prepareAuthorizers();
|
|
187
186
|
const { registers, memory } = prepareRegsAndMemory(entries, authorizers, { manager: tryAsU64(MAX_VALUE_U64) });
|
|
@@ -196,7 +195,7 @@ describe("HostCalls: Bless", () => {
|
|
|
196
195
|
const accumulate = new PartialStateMock();
|
|
197
196
|
accumulate.privilegedServicesResponse = Result.error(UpdatePrivilegesError.InvalidServiceId, () => "Test: invalid validator service ID for bless");
|
|
198
197
|
const serviceId = tryAsServiceId(11_000);
|
|
199
|
-
const bless = new
|
|
198
|
+
const bless = Bless.new(serviceId, accumulate, tinyChainSpec);
|
|
200
199
|
const entries = prepareServiceGasMap();
|
|
201
200
|
const authorizers = prepareAuthorizers();
|
|
202
201
|
const { registers, memory } = prepareRegsAndMemory(entries, authorizers, { validator: tryAsU64(MAX_VALUE_U64) });
|
|
@@ -211,7 +210,7 @@ describe("HostCalls: Bless", () => {
|
|
|
211
210
|
const accumulate = new PartialStateMock();
|
|
212
211
|
accumulate.privilegedServicesResponse = Result.error(UpdatePrivilegesError.InvalidServiceId, () => "Test: invalid registrar service ID for bless");
|
|
213
212
|
const serviceId = tryAsServiceId(11_000);
|
|
214
|
-
const bless = new
|
|
213
|
+
const bless = Bless.new(serviceId, accumulate, tinyChainSpec);
|
|
215
214
|
const entries = prepareServiceGasMap();
|
|
216
215
|
const authorizers = prepareAuthorizers();
|
|
217
216
|
const { registers, memory } = prepareRegsAndMemory(entries, authorizers, { registrar: tryAsU64(MAX_VALUE_U64) });
|