@typeberry/lib 0.5.10 → 0.5.11-1fbacf3
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/encoder.d.ts +1 -1
- package/packages/core/codec/encoder.d.ts.map +1 -1
- package/packages/core/codec/encoder.js +3 -2
- 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-interface/pvm.d.ts +2 -0
- package/packages/core/pvm-interface/pvm.d.ts.map +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/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.d.ts +9 -2
- 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/index.d.ts +4 -0
- package/packages/jam/in-core/externalities/index.d.ts.map +1 -0
- package/packages/jam/in-core/externalities/index.js +3 -0
- package/packages/jam/in-core/externalities/is-authorized-fetch.d.ts +20 -0
- package/packages/jam/in-core/externalities/is-authorized-fetch.d.ts.map +1 -0
- package/packages/jam/in-core/externalities/is-authorized-fetch.js +41 -0
- package/packages/jam/in-core/externalities/is-authorized-fetch.test.d.ts +2 -0
- package/packages/jam/in-core/externalities/is-authorized-fetch.test.d.ts.map +1 -0
- package/packages/jam/in-core/externalities/is-authorized-fetch.test.js +101 -0
- package/packages/jam/in-core/externalities/refine-fetch.d.ts +51 -0
- package/packages/jam/in-core/externalities/refine-fetch.d.ts.map +1 -0
- package/packages/jam/in-core/externalities/refine-fetch.js +80 -0
- package/packages/jam/in-core/externalities/refine-fetch.test.d.ts +2 -0
- package/packages/jam/in-core/externalities/refine-fetch.test.d.ts.map +1 -0
- package/packages/jam/in-core/externalities/refine-fetch.test.js +219 -0
- package/packages/jam/in-core/externalities/refine.d.ts +18 -8
- package/packages/jam/in-core/externalities/refine.d.ts.map +1 -1
- package/packages/jam/in-core/externalities/refine.js +86 -7
- package/packages/jam/in-core/externalities/refine.test.js +168 -3
- 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 +22 -187
- package/packages/jam/in-core/in-core.test.js +52 -20
- package/packages/jam/in-core/is-authorized.d.ts +34 -0
- package/packages/jam/in-core/is-authorized.d.ts.map +1 -0
- package/packages/jam/in-core/is-authorized.js +73 -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 +167 -0
- package/packages/jam/in-core/refine.d.ts +31 -0
- package/packages/jam/in-core/refine.d.ts.map +1 -0
- package/packages/jam/in-core/refine.js +182 -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 +166 -104
- package/packages/jam/jam-host-calls/general/fetch.d.ts.map +1 -1
- package/packages/jam/jam-host-calls/general/fetch.js +120 -23
- package/packages/jam/jam-host-calls/general/fetch.test.js +125 -92
- 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.d.ts.map +1 -1
- package/packages/jam/transition/accumulate/accumulate.js +20 -8
- 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/accumulate-fetch-externalities.d.ts +19 -0
- package/packages/jam/transition/externalities/accumulate-fetch-externalities.d.ts.map +1 -0
- package/packages/jam/transition/externalities/accumulate-fetch-externalities.js +45 -0
- package/packages/jam/transition/externalities/accumulate-fetch-externalities.test.d.ts +2 -0
- package/packages/jam/transition/externalities/accumulate-fetch-externalities.test.d.ts.map +1 -0
- package/packages/jam/transition/externalities/accumulate-fetch-externalities.test.js +192 -0
- package/packages/jam/transition/externalities/fetch-externalities.d.ts +54 -37
- package/packages/jam/transition/externalities/fetch-externalities.d.ts.map +1 -1
- package/packages/jam/transition/externalities/fetch-externalities.js +45 -89
- 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/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
- package/packages/jam/transition/externalities/fetch-externalities.test.d.ts +0 -2
- package/packages/jam/transition/externalities/fetch-externalities.test.d.ts.map +0 -1
- package/packages/jam/transition/externalities/fetch-externalities.test.js +0 -254
|
@@ -1,14 +1,14 @@
|
|
|
1
1
|
import assert from "node:assert";
|
|
2
2
|
import { describe, it } from "node:test";
|
|
3
3
|
import { tryAsServiceId } from "#@typeberry/block";
|
|
4
|
-
import { BytesBlob } from "#@typeberry/bytes";
|
|
4
|
+
import { Bytes, BytesBlob } from "#@typeberry/bytes";
|
|
5
|
+
import { HASH_SIZE } from "#@typeberry/hash";
|
|
5
6
|
import { tryAsU64 } from "#@typeberry/numbers";
|
|
6
7
|
import { HostCallMemory, HostCallRegisters, PvmExecution } from "#@typeberry/pvm-host-calls";
|
|
7
8
|
import { tryAsGas } from "#@typeberry/pvm-interface";
|
|
8
9
|
import { gasCounter, MemoryBuilder, tryAsMemoryIndex, tryAsSbrkIndex } from "#@typeberry/pvm-interpreter";
|
|
9
10
|
import { PAGE_SIZE } from "#@typeberry/pvm-interpreter/memory/memory-consts.js";
|
|
10
|
-
import {
|
|
11
|
-
import { Fetch, FetchKind } from "./fetch.js";
|
|
11
|
+
import { Fetch, FetchContext, FetchKind } from "./fetch.js";
|
|
12
12
|
import { HostCallResult } from "./results.js";
|
|
13
13
|
describe("Fetch", () => {
|
|
14
14
|
const IN_OUT_REG = 7;
|
|
@@ -16,28 +16,31 @@ describe("Fetch", () => {
|
|
|
16
16
|
it("should return PvmExecution.Panic if memory write fails", async () => {
|
|
17
17
|
const currentServiceId = tryAsServiceId(10_000);
|
|
18
18
|
const blob = BytesBlob.blobFromNumbers([1, 2, 3]);
|
|
19
|
-
const fetchMock = new
|
|
19
|
+
const fetchMock = new RefineFetchMock();
|
|
20
20
|
fetchMock.constantsResponse = blob;
|
|
21
21
|
const badOffset = tryAsU64(0xfffff);
|
|
22
|
-
const registers =
|
|
22
|
+
const registers = HostCallRegisters.empty();
|
|
23
23
|
registers.set(IN_OUT_REG, badOffset);
|
|
24
24
|
registers.set(8, tryAsU64(0));
|
|
25
25
|
registers.set(9, tryAsU64(blob.length));
|
|
26
26
|
registers.set(10, tryAsU64(FetchKind.Constants));
|
|
27
27
|
const builder = new MemoryBuilder();
|
|
28
28
|
// do not define any writable memory!
|
|
29
|
-
const memory = new
|
|
30
|
-
const fetch = new
|
|
29
|
+
const memory = HostCallMemory.new(builder.finalize(tryAsMemoryIndex(0), tryAsSbrkIndex(0)));
|
|
30
|
+
const fetch = Fetch.new(currentServiceId, fetchMock);
|
|
31
31
|
const result = await fetch.execute(gas, registers, memory);
|
|
32
32
|
assert.strictEqual(result, PvmExecution.Panic);
|
|
33
33
|
});
|
|
34
34
|
it("should write empty result and set IN_OUT_REG to NONE if fetch returns null", async () => {
|
|
35
35
|
const currentServiceId = tryAsServiceId(10_000);
|
|
36
|
-
const fetchMock = new
|
|
37
|
-
|
|
36
|
+
const fetchMock = new RefineFetchMock();
|
|
37
|
+
// oneWorkItem returns null when the work item index has no mock response registered
|
|
38
38
|
const blob = BytesBlob.blobFromNumbers([]);
|
|
39
|
-
const { registers, memory, readBack } = prepareRegsAndMemory(blob, FetchKind.
|
|
40
|
-
|
|
39
|
+
const { registers, memory, readBack } = prepareRegsAndMemory(blob, FetchKind.OneWorkItem);
|
|
40
|
+
// set work item index to one that has no response → oneWorkItem returns null
|
|
41
|
+
registers.set(11, tryAsU64(999));
|
|
42
|
+
fetchMock.oneWorkItemResponses.set("999", null);
|
|
43
|
+
const fetch = Fetch.new(currentServiceId, fetchMock);
|
|
41
44
|
const result = await fetch.execute(gas, registers, memory);
|
|
42
45
|
assert.strictEqual(result, undefined);
|
|
43
46
|
assert.strictEqual(registers.get(IN_OUT_REG), HostCallResult.NONE);
|
|
@@ -47,10 +50,10 @@ describe("Fetch", () => {
|
|
|
47
50
|
it("should write nothing if offset >= blob length", async () => {
|
|
48
51
|
const currentServiceId = tryAsServiceId(10_000);
|
|
49
52
|
const blob = BytesBlob.blobFromNumbers([1, 2, 3]);
|
|
50
|
-
const fetchMock = new
|
|
53
|
+
const fetchMock = new RefineFetchMock();
|
|
51
54
|
fetchMock.constantsResponse = blob;
|
|
52
55
|
const { registers, memory, readBack } = prepareRegsAndMemory(blob, FetchKind.Constants, 5, 2);
|
|
53
|
-
const fetch = new
|
|
56
|
+
const fetch = Fetch.new(currentServiceId, fetchMock);
|
|
54
57
|
const result = await fetch.execute(gas, registers, memory);
|
|
55
58
|
assert.strictEqual(result, undefined);
|
|
56
59
|
assert.deepStrictEqual(registers.get(IN_OUT_REG), tryAsU64(blob.length));
|
|
@@ -59,10 +62,10 @@ describe("Fetch", () => {
|
|
|
59
62
|
it("should clamp offset + length to blob end", async () => {
|
|
60
63
|
const currentServiceId = tryAsServiceId(10_000);
|
|
61
64
|
const blob = BytesBlob.blobFromNumbers([9, 8, 7, 6, 5]);
|
|
62
|
-
const fetchMock = new
|
|
65
|
+
const fetchMock = new RefineFetchMock();
|
|
63
66
|
fetchMock.constantsResponse = blob;
|
|
64
67
|
const { registers, memory, readBack } = prepareRegsAndMemory(blob, FetchKind.Constants, 3, 10);
|
|
65
|
-
const fetch = new
|
|
68
|
+
const fetch = Fetch.new(currentServiceId, fetchMock);
|
|
66
69
|
const result = await fetch.execute(gas, registers, memory);
|
|
67
70
|
assert.strictEqual(result, undefined);
|
|
68
71
|
assert.deepStrictEqual(registers.get(IN_OUT_REG), tryAsU64(blob.length));
|
|
@@ -71,11 +74,11 @@ describe("Fetch", () => {
|
|
|
71
74
|
it("should return NONE and write nothing if fetch kind is unknown", async () => {
|
|
72
75
|
const currentServiceId = tryAsServiceId(10_000);
|
|
73
76
|
const blob = BytesBlob.empty();
|
|
74
|
-
const fetchMock = new
|
|
77
|
+
const fetchMock = new RefineFetchMock();
|
|
75
78
|
fetchMock.constantsResponse = blob;
|
|
76
79
|
const { registers, memory, readBack } = prepareRegsAndMemory(blob, FetchKind.Constants);
|
|
77
80
|
registers.set(10, tryAsU64(999));
|
|
78
|
-
const fetch = new
|
|
81
|
+
const fetch = Fetch.new(currentServiceId, fetchMock);
|
|
79
82
|
const result = await fetch.execute(gas, registers, memory);
|
|
80
83
|
assert.strictEqual(result, undefined);
|
|
81
84
|
assert.strictEqual(registers.get(IN_OUT_REG), HostCallResult.NONE);
|
|
@@ -84,10 +87,10 @@ describe("Fetch", () => {
|
|
|
84
87
|
it("should fetch constants and write result to memory", async () => {
|
|
85
88
|
const currentServiceId = tryAsServiceId(10_000);
|
|
86
89
|
const blob = BytesBlob.blobFromNumbers([1, 2, 3, 4, 5]);
|
|
87
|
-
const fetchMock = new
|
|
90
|
+
const fetchMock = new RefineFetchMock();
|
|
88
91
|
fetchMock.constantsResponse = blob;
|
|
89
92
|
const { registers, memory, readBack, expectedLength } = prepareRegsAndMemory(blob, FetchKind.Constants);
|
|
90
|
-
const fetch = new
|
|
93
|
+
const fetch = Fetch.new(currentServiceId, fetchMock);
|
|
91
94
|
const result = await fetch.execute(gas, registers, memory);
|
|
92
95
|
assert.strictEqual(result, undefined);
|
|
93
96
|
assert.deepStrictEqual(registers.get(IN_OUT_REG), expectedLength);
|
|
@@ -95,11 +98,11 @@ describe("Fetch", () => {
|
|
|
95
98
|
});
|
|
96
99
|
it("should fetch entropy and write result to memory", async () => {
|
|
97
100
|
const currentServiceId = tryAsServiceId(10_000);
|
|
98
|
-
const blob =
|
|
99
|
-
const fetchMock = new
|
|
101
|
+
const blob = Bytes.fill(HASH_SIZE, 10).asOpaque();
|
|
102
|
+
const fetchMock = new RefineFetchMock();
|
|
100
103
|
fetchMock.entropyResponse = blob;
|
|
101
104
|
const { registers, memory, readBack, expectedLength } = prepareRegsAndMemory(blob, FetchKind.Entropy);
|
|
102
|
-
const fetch = new
|
|
105
|
+
const fetch = Fetch.new(currentServiceId, fetchMock);
|
|
103
106
|
const result = await fetch.execute(gas, registers, memory);
|
|
104
107
|
assert.strictEqual(result, undefined);
|
|
105
108
|
assert.deepStrictEqual(registers.get(IN_OUT_REG), expectedLength);
|
|
@@ -108,10 +111,10 @@ describe("Fetch", () => {
|
|
|
108
111
|
it("should fetch authorizer trace and write result to memory", async () => {
|
|
109
112
|
const currentServiceId = tryAsServiceId(10_000);
|
|
110
113
|
const blob = BytesBlob.blobFromNumbers([9, 9, 9]);
|
|
111
|
-
const fetchMock = new
|
|
114
|
+
const fetchMock = new RefineFetchMock();
|
|
112
115
|
fetchMock.authorizerTraceResponse = blob;
|
|
113
116
|
const { registers, memory, readBack, expectedLength } = prepareRegsAndMemory(blob, FetchKind.AuthorizerTrace);
|
|
114
|
-
const fetch = new
|
|
117
|
+
const fetch = Fetch.new(currentServiceId, fetchMock);
|
|
115
118
|
const result = await fetch.execute(gas, registers, memory);
|
|
116
119
|
assert.strictEqual(result, undefined);
|
|
117
120
|
assert.deepStrictEqual(registers.get(IN_OUT_REG), expectedLength);
|
|
@@ -120,7 +123,7 @@ describe("Fetch", () => {
|
|
|
120
123
|
it("should fetch other work item extrinsics and write result to memory", async () => {
|
|
121
124
|
const currentServiceId = tryAsServiceId(10_000);
|
|
122
125
|
const blob = BytesBlob.blobFromNumbers([42, 43, 44]);
|
|
123
|
-
const fetchMock = new
|
|
126
|
+
const fetchMock = new RefineFetchMock();
|
|
124
127
|
const workItem = tryAsU64(123);
|
|
125
128
|
const index = tryAsU64(7);
|
|
126
129
|
const key = `${workItem}:${index}`;
|
|
@@ -128,7 +131,7 @@ describe("Fetch", () => {
|
|
|
128
131
|
const { registers, memory, readBack, expectedLength } = prepareRegsAndMemory(blob, FetchKind.OtherWorkItemExtrinsics);
|
|
129
132
|
registers.set(11, workItem);
|
|
130
133
|
registers.set(12, index);
|
|
131
|
-
const fetch = new
|
|
134
|
+
const fetch = Fetch.new(currentServiceId, fetchMock);
|
|
132
135
|
const result = await fetch.execute(gas, registers, memory);
|
|
133
136
|
assert.strictEqual(result, undefined);
|
|
134
137
|
assert.deepStrictEqual(registers.get(IN_OUT_REG), expectedLength);
|
|
@@ -138,13 +141,13 @@ describe("Fetch", () => {
|
|
|
138
141
|
it("should fetch my extrinsics and write result to memory", async () => {
|
|
139
142
|
const currentServiceId = tryAsServiceId(10_000);
|
|
140
143
|
const blob = BytesBlob.blobFromNumbers([11, 12, 13]);
|
|
141
|
-
const fetchMock = new
|
|
144
|
+
const fetchMock = new RefineFetchMock();
|
|
142
145
|
const index = tryAsU64(5);
|
|
143
146
|
const key = `null:${index}`;
|
|
144
147
|
fetchMock.workItemExtrinsicResponses.set(key, blob);
|
|
145
148
|
const { registers, memory, readBack, expectedLength } = prepareRegsAndMemory(blob, FetchKind.MyExtrinsics);
|
|
146
149
|
registers.set(11, index); // only index; workItem is null
|
|
147
|
-
const fetch = new
|
|
150
|
+
const fetch = Fetch.new(currentServiceId, fetchMock);
|
|
148
151
|
const result = await fetch.execute(gas, registers, memory);
|
|
149
152
|
assert.strictEqual(result, undefined);
|
|
150
153
|
assert.deepStrictEqual(registers.get(IN_OUT_REG), expectedLength);
|
|
@@ -154,7 +157,7 @@ describe("Fetch", () => {
|
|
|
154
157
|
it("should fetch other work item imports and write result to memory", async () => {
|
|
155
158
|
const currentServiceId = tryAsServiceId(10_000);
|
|
156
159
|
const blob = BytesBlob.blobFromNumbers([21, 22, 23]);
|
|
157
|
-
const fetchMock = new
|
|
160
|
+
const fetchMock = new RefineFetchMock();
|
|
158
161
|
const workItem = tryAsU64(42);
|
|
159
162
|
const index = tryAsU64(3);
|
|
160
163
|
const key = `${workItem}:${index}`;
|
|
@@ -162,7 +165,7 @@ describe("Fetch", () => {
|
|
|
162
165
|
const { registers, memory, readBack, expectedLength } = prepareRegsAndMemory(blob, FetchKind.OtherWorkItemImports);
|
|
163
166
|
registers.set(11, workItem);
|
|
164
167
|
registers.set(12, index);
|
|
165
|
-
const fetch = new
|
|
168
|
+
const fetch = Fetch.new(currentServiceId, fetchMock);
|
|
166
169
|
const result = await fetch.execute(gas, registers, memory);
|
|
167
170
|
assert.strictEqual(result, undefined);
|
|
168
171
|
assert.deepStrictEqual(registers.get(IN_OUT_REG), expectedLength);
|
|
@@ -172,13 +175,13 @@ describe("Fetch", () => {
|
|
|
172
175
|
it("should fetch my imports and write result to memory", async () => {
|
|
173
176
|
const currentServiceId = tryAsServiceId(10_000);
|
|
174
177
|
const blob = BytesBlob.blobFromNumbers([31, 32, 33]);
|
|
175
|
-
const fetchMock = new
|
|
178
|
+
const fetchMock = new RefineFetchMock();
|
|
176
179
|
const index = tryAsU64(8);
|
|
177
180
|
const key = `null:${index}`;
|
|
178
181
|
fetchMock.workItemImportResponses.set(key, blob);
|
|
179
182
|
const { registers, memory, readBack, expectedLength } = prepareRegsAndMemory(blob, FetchKind.MyImports);
|
|
180
183
|
registers.set(11, index); // workItem is implicitly null
|
|
181
|
-
const fetch = new
|
|
184
|
+
const fetch = Fetch.new(currentServiceId, fetchMock);
|
|
182
185
|
const result = await fetch.execute(gas, registers, memory);
|
|
183
186
|
assert.strictEqual(result, undefined);
|
|
184
187
|
assert.deepStrictEqual(registers.get(IN_OUT_REG), expectedLength);
|
|
@@ -188,10 +191,10 @@ describe("Fetch", () => {
|
|
|
188
191
|
it("should fetch work package and write result to memory", async () => {
|
|
189
192
|
const currentServiceId = tryAsServiceId(10_000);
|
|
190
193
|
const blob = BytesBlob.blobFromNumbers([100, 101, 102]);
|
|
191
|
-
const fetchMock = new
|
|
194
|
+
const fetchMock = new RefineFetchMock();
|
|
192
195
|
fetchMock.workPackageResponse = blob;
|
|
193
196
|
const { registers, memory, readBack, expectedLength } = prepareRegsAndMemory(blob, FetchKind.WorkPackage);
|
|
194
|
-
const fetch = new
|
|
197
|
+
const fetch = Fetch.new(currentServiceId, fetchMock);
|
|
195
198
|
const result = await fetch.execute(gas, registers, memory);
|
|
196
199
|
assert.strictEqual(result, undefined);
|
|
197
200
|
assert.deepStrictEqual(registers.get(IN_OUT_REG), expectedLength);
|
|
@@ -200,10 +203,10 @@ describe("Fetch", () => {
|
|
|
200
203
|
it("should fetch authorizer and write result to memory", async () => {
|
|
201
204
|
const currentServiceId = tryAsServiceId(10_000);
|
|
202
205
|
const blob = BytesBlob.blobFromNumbers([201, 202, 203]);
|
|
203
|
-
const fetchMock = new
|
|
206
|
+
const fetchMock = new RefineFetchMock();
|
|
204
207
|
fetchMock.authorizerResponse = blob;
|
|
205
|
-
const { registers, memory, readBack, expectedLength } = prepareRegsAndMemory(blob, FetchKind.
|
|
206
|
-
const fetch = new
|
|
208
|
+
const { registers, memory, readBack, expectedLength } = prepareRegsAndMemory(blob, FetchKind.AuthConfiguration);
|
|
209
|
+
const fetch = Fetch.new(currentServiceId, fetchMock);
|
|
207
210
|
const result = await fetch.execute(gas, registers, memory);
|
|
208
211
|
assert.strictEqual(result, undefined);
|
|
209
212
|
assert.deepStrictEqual(registers.get(IN_OUT_REG), expectedLength);
|
|
@@ -212,10 +215,10 @@ describe("Fetch", () => {
|
|
|
212
215
|
it("should fetch authorization token and write result to memory", async () => {
|
|
213
216
|
const currentServiceId = tryAsServiceId(10_000);
|
|
214
217
|
const blob = BytesBlob.blobFromNumbers([210, 211, 212]);
|
|
215
|
-
const fetchMock = new
|
|
218
|
+
const fetchMock = new RefineFetchMock();
|
|
216
219
|
fetchMock.authorizationTokenResponse = blob;
|
|
217
|
-
const { registers, memory, readBack, expectedLength } = prepareRegsAndMemory(blob, FetchKind.
|
|
218
|
-
const fetch = new
|
|
220
|
+
const { registers, memory, readBack, expectedLength } = prepareRegsAndMemory(blob, FetchKind.AuthToken);
|
|
221
|
+
const fetch = Fetch.new(currentServiceId, fetchMock);
|
|
219
222
|
const result = await fetch.execute(gas, registers, memory);
|
|
220
223
|
assert.strictEqual(result, undefined);
|
|
221
224
|
assert.deepStrictEqual(registers.get(IN_OUT_REG), expectedLength);
|
|
@@ -224,10 +227,10 @@ describe("Fetch", () => {
|
|
|
224
227
|
it("should fetch refine context and write result to memory", async () => {
|
|
225
228
|
const currentServiceId = tryAsServiceId(10_000);
|
|
226
229
|
const blob = BytesBlob.blobFromNumbers([88, 89, 90]);
|
|
227
|
-
const fetchMock = new
|
|
230
|
+
const fetchMock = new RefineFetchMock();
|
|
228
231
|
fetchMock.refineContextResponse = blob;
|
|
229
232
|
const { registers, memory, readBack, expectedLength } = prepareRegsAndMemory(blob, FetchKind.RefineContext);
|
|
230
|
-
const fetch = new
|
|
233
|
+
const fetch = Fetch.new(currentServiceId, fetchMock);
|
|
231
234
|
const result = await fetch.execute(gas, registers, memory);
|
|
232
235
|
assert.strictEqual(result, undefined);
|
|
233
236
|
assert.deepStrictEqual(registers.get(IN_OUT_REG), expectedLength);
|
|
@@ -236,10 +239,10 @@ describe("Fetch", () => {
|
|
|
236
239
|
it("should fetch all work items and write result to memory", async () => {
|
|
237
240
|
const currentServiceId = tryAsServiceId(10_000);
|
|
238
241
|
const blob = BytesBlob.blobFromNumbers([70, 71, 72]);
|
|
239
|
-
const fetchMock = new
|
|
242
|
+
const fetchMock = new RefineFetchMock();
|
|
240
243
|
fetchMock.allWorkItemsResponse = blob;
|
|
241
244
|
const { registers, memory, readBack, expectedLength } = prepareRegsAndMemory(blob, FetchKind.AllWorkItems);
|
|
242
|
-
const fetch = new
|
|
245
|
+
const fetch = Fetch.new(currentServiceId, fetchMock);
|
|
243
246
|
const result = await fetch.execute(gas, registers, memory);
|
|
244
247
|
assert.strictEqual(result, undefined);
|
|
245
248
|
assert.deepStrictEqual(registers.get(IN_OUT_REG), expectedLength);
|
|
@@ -248,12 +251,12 @@ describe("Fetch", () => {
|
|
|
248
251
|
it("should fetch one work item and write result to memory", async () => {
|
|
249
252
|
const currentServiceId = tryAsServiceId(10_000);
|
|
250
253
|
const blob = BytesBlob.blobFromNumbers([33, 34, 35]);
|
|
251
|
-
const fetchMock = new
|
|
254
|
+
const fetchMock = new RefineFetchMock();
|
|
252
255
|
const workItem = tryAsU64(55);
|
|
253
256
|
fetchMock.oneWorkItemResponses.set(workItem.toString(), blob);
|
|
254
257
|
const { registers, memory, readBack, expectedLength } = prepareRegsAndMemory(blob, FetchKind.OneWorkItem);
|
|
255
258
|
registers.set(11, workItem);
|
|
256
|
-
const fetch = new
|
|
259
|
+
const fetch = Fetch.new(currentServiceId, fetchMock);
|
|
257
260
|
const result = await fetch.execute(gas, registers, memory);
|
|
258
261
|
assert.strictEqual(result, undefined);
|
|
259
262
|
assert.deepStrictEqual(registers.get(IN_OUT_REG), expectedLength);
|
|
@@ -263,12 +266,12 @@ describe("Fetch", () => {
|
|
|
263
266
|
it("should fetch work item payload and write result to memory", async () => {
|
|
264
267
|
const currentServiceId = tryAsServiceId(10_000);
|
|
265
268
|
const blob = BytesBlob.blobFromNumbers([60, 61, 62]);
|
|
266
|
-
const fetchMock = new
|
|
269
|
+
const fetchMock = new RefineFetchMock();
|
|
267
270
|
const workItem = tryAsU64(77);
|
|
268
271
|
fetchMock.workItemPayloadResponses.set(workItem.toString(), blob);
|
|
269
272
|
const { registers, memory, readBack, expectedLength } = prepareRegsAndMemory(blob, FetchKind.WorkItemPayload);
|
|
270
273
|
registers.set(11, workItem);
|
|
271
|
-
const fetch = new
|
|
274
|
+
const fetch = Fetch.new(currentServiceId, fetchMock);
|
|
272
275
|
const result = await fetch.execute(gas, registers, memory);
|
|
273
276
|
assert.strictEqual(result, undefined);
|
|
274
277
|
assert.deepStrictEqual(registers.get(IN_OUT_REG), expectedLength);
|
|
@@ -278,10 +281,10 @@ describe("Fetch", () => {
|
|
|
278
281
|
it("should fetch all transfers and operands and write result to memory", async () => {
|
|
279
282
|
const currentServiceId = tryAsServiceId(10_000);
|
|
280
283
|
const blob = BytesBlob.blobFromNumbers([101, 102, 103]);
|
|
281
|
-
const fetchMock = new
|
|
282
|
-
fetchMock.
|
|
284
|
+
const fetchMock = new AccumulateFetchMock();
|
|
285
|
+
fetchMock.allTransfersAndOperandsResponse = blob;
|
|
283
286
|
const { registers, memory, readBack, expectedLength } = prepareRegsAndMemory(blob, FetchKind.AllTransfersAndOperands);
|
|
284
|
-
const fetch = new
|
|
287
|
+
const fetch = Fetch.new(currentServiceId, fetchMock);
|
|
285
288
|
const result = await fetch.execute(gas, registers, memory);
|
|
286
289
|
assert.strictEqual(result, undefined);
|
|
287
290
|
assert.deepStrictEqual(registers.get(IN_OUT_REG), expectedLength);
|
|
@@ -290,30 +293,67 @@ describe("Fetch", () => {
|
|
|
290
293
|
it("should fetch one operand or transfer and write result to memory", async () => {
|
|
291
294
|
const currentServiceId = tryAsServiceId(10_000);
|
|
292
295
|
const blob = BytesBlob.blobFromNumbers([115, 116, 117]);
|
|
293
|
-
const fetchMock = new
|
|
296
|
+
const fetchMock = new AccumulateFetchMock();
|
|
294
297
|
const index = tryAsU64(9);
|
|
295
298
|
fetchMock.oneTransferOrOperandResponses.set(index.toString(), blob);
|
|
296
299
|
const { registers, memory, readBack, expectedLength } = prepareRegsAndMemory(blob, FetchKind.OneTransferOrOperand);
|
|
297
300
|
registers.set(11, index);
|
|
298
|
-
const fetch = new
|
|
301
|
+
const fetch = Fetch.new(currentServiceId, fetchMock);
|
|
299
302
|
const result = await fetch.execute(gas, registers, memory);
|
|
300
303
|
assert.strictEqual(result, undefined);
|
|
301
304
|
assert.deepStrictEqual(registers.get(IN_OUT_REG), expectedLength);
|
|
302
305
|
assert.deepStrictEqual(readBack(), blob.raw);
|
|
303
306
|
assert.deepStrictEqual(fetchMock.oneTransferOrOperandData, [[index]]);
|
|
304
307
|
});
|
|
308
|
+
it("should return NONE for refine-only kinds in accumulate context", async () => {
|
|
309
|
+
const currentServiceId = tryAsServiceId(10_000);
|
|
310
|
+
const fetchMock = new AccumulateFetchMock();
|
|
311
|
+
const blob = BytesBlob.empty();
|
|
312
|
+
for (const kind of [
|
|
313
|
+
FetchKind.AuthorizerTrace,
|
|
314
|
+
FetchKind.OtherWorkItemExtrinsics,
|
|
315
|
+
FetchKind.MyExtrinsics,
|
|
316
|
+
FetchKind.OtherWorkItemImports,
|
|
317
|
+
FetchKind.MyImports,
|
|
318
|
+
FetchKind.WorkPackage,
|
|
319
|
+
FetchKind.AuthConfiguration,
|
|
320
|
+
FetchKind.AuthToken,
|
|
321
|
+
FetchKind.RefineContext,
|
|
322
|
+
FetchKind.AllWorkItems,
|
|
323
|
+
FetchKind.OneWorkItem,
|
|
324
|
+
FetchKind.WorkItemPayload,
|
|
325
|
+
]) {
|
|
326
|
+
const { registers, memory } = prepareRegsAndMemory(blob, kind);
|
|
327
|
+
const fetch = Fetch.new(currentServiceId, fetchMock);
|
|
328
|
+
const result = await fetch.execute(gas, registers, memory);
|
|
329
|
+
assert.strictEqual(result, undefined, `Expected undefined for kind ${kind}`);
|
|
330
|
+
assert.strictEqual(registers.get(IN_OUT_REG), HostCallResult.NONE, `Expected NONE for kind ${kind}`);
|
|
331
|
+
}
|
|
332
|
+
});
|
|
333
|
+
it("should return NONE for accumulate-only kinds in refine context", async () => {
|
|
334
|
+
const currentServiceId = tryAsServiceId(10_000);
|
|
335
|
+
const fetchMock = new RefineFetchMock();
|
|
336
|
+
const blob = BytesBlob.empty();
|
|
337
|
+
for (const kind of [FetchKind.AllTransfersAndOperands, FetchKind.OneTransferOrOperand]) {
|
|
338
|
+
const { registers, memory } = prepareRegsAndMemory(blob, kind);
|
|
339
|
+
const fetch = Fetch.new(currentServiceId, fetchMock);
|
|
340
|
+
const result = await fetch.execute(gas, registers, memory);
|
|
341
|
+
assert.strictEqual(result, undefined, `Expected undefined for kind ${kind}`);
|
|
342
|
+
assert.strictEqual(registers.get(IN_OUT_REG), HostCallResult.NONE, `Expected NONE for kind ${kind}`);
|
|
343
|
+
}
|
|
344
|
+
});
|
|
305
345
|
function prepareRegsAndMemory(blob, fetchKind, offset = 0, length = blob.length) {
|
|
306
346
|
const pageStart = 2 ** 16;
|
|
307
347
|
const memOffset = tryAsU64(pageStart + 1234);
|
|
308
348
|
const blobLength = tryAsU64(blob.length);
|
|
309
|
-
const registers =
|
|
349
|
+
const registers = HostCallRegisters.empty();
|
|
310
350
|
registers.set(IN_OUT_REG, memOffset);
|
|
311
351
|
registers.set(8, tryAsU64(offset));
|
|
312
352
|
registers.set(9, tryAsU64(length));
|
|
313
353
|
registers.set(10, tryAsU64(fetchKind));
|
|
314
354
|
const builder = new MemoryBuilder();
|
|
315
355
|
builder.setWriteablePages(tryAsMemoryIndex(pageStart), tryAsMemoryIndex(pageStart + PAGE_SIZE));
|
|
316
|
-
const memory = new
|
|
356
|
+
const memory = HostCallMemory.new(builder.finalize(tryAsMemoryIndex(0), tryAsSbrkIndex(0)));
|
|
317
357
|
const readBack = () => {
|
|
318
358
|
const result = new Uint8Array(blob.length);
|
|
319
359
|
assert.strictEqual(memory.loadInto(result, memOffset).isOk, true);
|
|
@@ -327,32 +367,24 @@ describe("Fetch", () => {
|
|
|
327
367
|
};
|
|
328
368
|
}
|
|
329
369
|
});
|
|
330
|
-
class
|
|
370
|
+
class RefineFetchMock {
|
|
371
|
+
context = FetchContext.Refine;
|
|
331
372
|
workItemExtrinsicData = [];
|
|
332
373
|
workItemImportData = [];
|
|
333
374
|
oneWorkItemData = [];
|
|
334
375
|
workItemPayloadData = [];
|
|
335
|
-
oneOperandData = [];
|
|
336
|
-
oneTransferData = [];
|
|
337
|
-
oneTransferOrOperandData = [];
|
|
338
376
|
constantsResponse = null;
|
|
339
377
|
entropyResponse = null;
|
|
340
|
-
authorizerTraceResponse =
|
|
378
|
+
authorizerTraceResponse = BytesBlob.empty();
|
|
341
379
|
workItemExtrinsicResponses = new Map();
|
|
342
380
|
workItemImportResponses = new Map();
|
|
343
|
-
workPackageResponse =
|
|
344
|
-
authorizerResponse =
|
|
345
|
-
authorizationTokenResponse =
|
|
346
|
-
refineContextResponse =
|
|
347
|
-
allWorkItemsResponse =
|
|
381
|
+
workPackageResponse = BytesBlob.empty();
|
|
382
|
+
authorizerResponse = BytesBlob.empty();
|
|
383
|
+
authorizationTokenResponse = BytesBlob.empty();
|
|
384
|
+
refineContextResponse = BytesBlob.empty();
|
|
385
|
+
allWorkItemsResponse = BytesBlob.empty();
|
|
348
386
|
oneWorkItemResponses = new Map();
|
|
349
387
|
workItemPayloadResponses = new Map();
|
|
350
|
-
allOperandsResponse = null;
|
|
351
|
-
oneOperandResponses = new Map();
|
|
352
|
-
allTransfersResponse = null;
|
|
353
|
-
oneTransferResponses = new Map();
|
|
354
|
-
allTransfersAndOperandsResponses = null;
|
|
355
|
-
oneTransferOrOperandResponses = new Map();
|
|
356
388
|
constants() {
|
|
357
389
|
if (this.constantsResponse === null) {
|
|
358
390
|
throw new Error("Unexpected call to constants.");
|
|
@@ -360,6 +392,9 @@ class FetchMock {
|
|
|
360
392
|
return this.constantsResponse;
|
|
361
393
|
}
|
|
362
394
|
entropy() {
|
|
395
|
+
if (this.entropyResponse === null) {
|
|
396
|
+
throw new Error("Unexpected call to entropy.");
|
|
397
|
+
}
|
|
363
398
|
return this.entropyResponse;
|
|
364
399
|
}
|
|
365
400
|
authorizerTrace() {
|
|
@@ -384,10 +419,10 @@ class FetchMock {
|
|
|
384
419
|
workPackage() {
|
|
385
420
|
return this.workPackageResponse;
|
|
386
421
|
}
|
|
387
|
-
|
|
422
|
+
authConfiguration() {
|
|
388
423
|
return this.authorizerResponse;
|
|
389
424
|
}
|
|
390
|
-
|
|
425
|
+
authToken() {
|
|
391
426
|
return this.authorizationTokenResponse;
|
|
392
427
|
}
|
|
393
428
|
refineContext() {
|
|
@@ -412,30 +447,28 @@ class FetchMock {
|
|
|
412
447
|
}
|
|
413
448
|
return this.workItemPayloadResponses.get(key) ?? null;
|
|
414
449
|
}
|
|
415
|
-
|
|
416
|
-
|
|
417
|
-
|
|
418
|
-
|
|
419
|
-
|
|
420
|
-
|
|
421
|
-
|
|
422
|
-
|
|
450
|
+
}
|
|
451
|
+
class AccumulateFetchMock {
|
|
452
|
+
context = FetchContext.Accumulate;
|
|
453
|
+
oneTransferOrOperandData = [];
|
|
454
|
+
constantsResponse = null;
|
|
455
|
+
entropyResponse = null;
|
|
456
|
+
allTransfersAndOperandsResponse = null;
|
|
457
|
+
oneTransferOrOperandResponses = new Map();
|
|
458
|
+
constants() {
|
|
459
|
+
if (this.constantsResponse === null) {
|
|
460
|
+
throw new Error("Unexpected call to constants.");
|
|
423
461
|
}
|
|
424
|
-
return this.
|
|
425
|
-
}
|
|
426
|
-
allTransfers() {
|
|
427
|
-
return this.allTransfersResponse;
|
|
462
|
+
return this.constantsResponse;
|
|
428
463
|
}
|
|
429
|
-
|
|
430
|
-
this.
|
|
431
|
-
|
|
432
|
-
if (!this.oneTransferResponses.has(key)) {
|
|
433
|
-
throw new Error(`Missing mock response for oneTransfer(${key})`);
|
|
464
|
+
entropy() {
|
|
465
|
+
if (this.entropyResponse === null) {
|
|
466
|
+
throw new Error("Unexpected call to entropy.");
|
|
434
467
|
}
|
|
435
|
-
return this.
|
|
468
|
+
return this.entropyResponse;
|
|
436
469
|
}
|
|
437
470
|
allTransfersAndOperands() {
|
|
438
|
-
return this.
|
|
471
|
+
return this.allTransfersAndOperandsResponse;
|
|
439
472
|
}
|
|
440
473
|
oneTransferOrOperand(index) {
|
|
441
474
|
this.oneTransferOrOperandData.push([index]);
|
|
@@ -14,7 +14,8 @@ export declare class GasHostCall implements HostCallHandler {
|
|
|
14
14
|
index: number & import("@typeberry/numbers").WithBytesRepresentation<4> & import("@typeberry/utils").WithOpaque<"HostCallIndex[U32]">;
|
|
15
15
|
basicGasCost: number & import("@typeberry/numbers").WithBytesRepresentation<4> & import("@typeberry/utils").WithOpaque<"SmallGas[U32]">;
|
|
16
16
|
tracedRegisters: (number & import("@typeberry/utils").WithOpaque<"register index">)[];
|
|
17
|
-
|
|
17
|
+
static new(currentServiceId: ServiceId): GasHostCall;
|
|
18
|
+
private constructor();
|
|
18
19
|
execute(gas: IGasCounter, regs: HostCallRegisters): Promise<undefined | PvmExecution>;
|
|
19
20
|
}
|
|
20
21
|
//# sourceMappingURL=gas.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"gas.d.ts","sourceRoot":"","sources":["../../../../../../packages/jam/jam-host-calls/general/gas.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAC;AAElD,OAAO,KAAK,EAAE,eAAe,EAAE,iBAAiB,EAAE,MAAM,2BAA2B,CAAC;AACpF,OAAO,EAAE,KAAK,YAAY,EAAsC,MAAM,2BAA2B,CAAC;AAClG,OAAO,EAAE,KAAK,WAAW,EAAiB,MAAM,0BAA0B,CAAC;AAG3E;;;;;;GAMG;AACH,qBAAa,WAAY,YAAW,eAAe;
|
|
1
|
+
{"version":3,"file":"gas.d.ts","sourceRoot":"","sources":["../../../../../../packages/jam/jam-host-calls/general/gas.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAC;AAElD,OAAO,KAAK,EAAE,eAAe,EAAE,iBAAiB,EAAE,MAAM,2BAA2B,CAAC;AACpF,OAAO,EAAE,KAAK,YAAY,EAAsC,MAAM,2BAA2B,CAAC;AAClG,OAAO,EAAE,KAAK,WAAW,EAAiB,MAAM,0BAA0B,CAAC;AAG3E;;;;;;GAMG;AACH,qBAAa,WAAY,YAAW,eAAe;aASb,gBAAgB,EAAE,SAAS;IAR/D,KAAK,iIAAyB;IAC9B,YAAY,4HAAqB;IACjC,eAAe,uEAAqB;IAEpC,MAAM,CAAC,GAAG,CAAC,gBAAgB,EAAE,SAAS;IAItC,OAAO;IAEP,OAAO,CAAC,GAAG,EAAE,WAAW,EAAE,IAAI,EAAE,iBAAiB,GAAG,OAAO,CAAC,SAAS,GAAG,YAAY,CAAC;CAMtF"}
|
|
@@ -14,6 +14,9 @@ export class GasHostCall {
|
|
|
14
14
|
index = tryAsHostCallIndex(0);
|
|
15
15
|
basicGasCost = tryAsSmallGas(10);
|
|
16
16
|
tracedRegisters = traceRegisters(7);
|
|
17
|
+
static new(currentServiceId) {
|
|
18
|
+
return new GasHostCall(currentServiceId);
|
|
19
|
+
}
|
|
17
20
|
constructor(currentServiceId) {
|
|
18
21
|
this.currentServiceId = currentServiceId;
|
|
19
22
|
}
|
|
@@ -4,15 +4,14 @@ import { tryAsServiceId } from "#@typeberry/block";
|
|
|
4
4
|
import { HostCallRegisters } from "#@typeberry/pvm-host-calls";
|
|
5
5
|
import { tryAsGas } from "#@typeberry/pvm-interface";
|
|
6
6
|
import { gasCounter } from "#@typeberry/pvm-interpreter";
|
|
7
|
-
import { emptyRegistersBuffer } from "../utils.js";
|
|
8
7
|
import { GasHostCall } from "./gas.js";
|
|
9
8
|
const REGISTER = 7;
|
|
10
9
|
describe("HostCalls: Gas", () => {
|
|
11
10
|
it("should write U32 gas to register", () => {
|
|
12
11
|
const currentServiceId = tryAsServiceId(10_000);
|
|
13
|
-
const gas = new
|
|
12
|
+
const gas = GasHostCall.new(currentServiceId);
|
|
14
13
|
const counter = gasCounter(tryAsGas(10_000));
|
|
15
|
-
const regs =
|
|
14
|
+
const regs = HostCallRegisters.empty();
|
|
16
15
|
assert.deepStrictEqual(regs.get(REGISTER), 0n);
|
|
17
16
|
// when
|
|
18
17
|
gas.execute(counter, regs);
|
|
@@ -21,9 +20,9 @@ describe("HostCalls: Gas", () => {
|
|
|
21
20
|
});
|
|
22
21
|
it("should write U64 gas to register", () => {
|
|
23
22
|
const currentServiceId = tryAsServiceId(10_000);
|
|
24
|
-
const gas = new
|
|
23
|
+
const gas = GasHostCall.new(currentServiceId);
|
|
25
24
|
const counter = gasCounter(tryAsGas(2n ** 64n - 1n));
|
|
26
|
-
const regs =
|
|
25
|
+
const regs = HostCallRegisters.empty();
|
|
27
26
|
assert.deepStrictEqual(regs.get(REGISTER), 0n);
|
|
28
27
|
// when
|
|
29
28
|
gas.execute(counter, regs);
|
|
@@ -33,7 +33,8 @@ export declare class Info implements HostCallHandler {
|
|
|
33
33
|
index: number & import("@typeberry/numbers").WithBytesRepresentation<4> & import("@typeberry/utils").WithOpaque<"HostCallIndex[U32]">;
|
|
34
34
|
basicGasCost: number & import("@typeberry/numbers").WithBytesRepresentation<4> & import("@typeberry/utils").WithOpaque<"SmallGas[U32]">;
|
|
35
35
|
tracedRegisters: (number & import("@typeberry/utils").WithOpaque<"register index">)[];
|
|
36
|
-
|
|
36
|
+
static new(currentServiceId: ServiceId, account: AccountsInfo): Info;
|
|
37
|
+
private constructor();
|
|
37
38
|
execute(_gas: IGasCounter, regs: HostCallRegisters, memory: HostCallMemory): Promise<undefined | PvmExecution>;
|
|
38
39
|
}
|
|
39
40
|
/**
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"info.d.ts","sourceRoot":"","sources":["../../../../../../packages/jam/jam-host-calls/general/info.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,SAAS,EAAkD,MAAM,kBAAkB,CAAC;AAKlG,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;AAC3E,OAAO,EAAE,kBAAkB,EAAE,MAAM,kBAAkB,CAAC;AAMtD,kDAAkD;AAClD,MAAM,WAAW,YAAY;IAC3B,wBAAwB;IACxB,cAAc,CAAC,SAAS,EAAE,SAAS,GAAG,IAAI,GAAG,kBAAkB,GAAG,IAAI,CAAC;CACxE;AAMD,eAAO,MAAM,OAAO,QACsF,CAAC;AAE3G;;;;;;;;;;;;;;;;;GAiBG;AACH,qBAAa,IAAK,YAAW,eAAe;
|
|
1
|
+
{"version":3,"file":"info.d.ts","sourceRoot":"","sources":["../../../../../../packages/jam/jam-host-calls/general/info.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,SAAS,EAAkD,MAAM,kBAAkB,CAAC;AAKlG,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;AAC3E,OAAO,EAAE,kBAAkB,EAAE,MAAM,kBAAkB,CAAC;AAMtD,kDAAkD;AAClD,MAAM,WAAW,YAAY;IAC3B,wBAAwB;IACxB,cAAc,CAAC,SAAS,EAAE,SAAS,GAAG,IAAI,GAAG,kBAAkB,GAAG,IAAI,CAAC;CACxE;AAMD,eAAO,MAAM,OAAO,QACsF,CAAC;AAE3G;;;;;;;;;;;;;;;;;GAiBG;AACH,qBAAa,IAAK,YAAW,eAAe;aAUxB,gBAAgB,EAAE,SAAS;IAC3C,OAAO,CAAC,QAAQ,CAAC,OAAO;IAV1B,KAAK,iIAAyB;IAC9B,YAAY,4HAAqB;IACjC,eAAe,uEAAsD;IAErE,MAAM,CAAC,GAAG,CAAC,gBAAgB,EAAE,SAAS,EAAE,OAAO,EAAE,YAAY;IAI7D,OAAO;IAKD,OAAO,CAAC,IAAI,EAAE,WAAW,EAAE,IAAI,EAAE,iBAAiB,EAAE,MAAM,EAAE,cAAc,GAAG,OAAO,CAAC,SAAS,GAAG,YAAY,CAAC;CA8CrH;AAED;;;;;;GAMG;AACH,eAAO,MAAM,2CAA2C;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;IAevD,CAAC"}
|
|
@@ -37,6 +37,9 @@ export class Info {
|
|
|
37
37
|
index = tryAsHostCallIndex(5);
|
|
38
38
|
basicGasCost = tryAsSmallGas(10);
|
|
39
39
|
tracedRegisters = traceRegisters(IN_OUT_REG, 8, OFFSET_REG, LEN_REG);
|
|
40
|
+
static new(currentServiceId, account) {
|
|
41
|
+
return new Info(currentServiceId, account);
|
|
42
|
+
}
|
|
40
43
|
constructor(currentServiceId, account) {
|
|
41
44
|
this.currentServiceId = currentServiceId;
|
|
42
45
|
this.account = account;
|
|
@@ -12,7 +12,6 @@ import { tryAsSbrkIndex } from "#@typeberry/pvm-interpreter/memory/memory-index.
|
|
|
12
12
|
import { PAGE_SIZE } from "#@typeberry/pvm-interpreter/spi-decoder/memory-conts.js";
|
|
13
13
|
import { ServiceAccountInfo } from "#@typeberry/state";
|
|
14
14
|
import { TestAccounts } from "../externalities/test-accounts.js";
|
|
15
|
-
import { emptyRegistersBuffer } from "../utils.js";
|
|
16
15
|
import { codecServiceAccountInfoWithThresholdBalance, Info, LEN_REG } from "./info.js";
|
|
17
16
|
import { HostCallResult } from "./results.js";
|
|
18
17
|
const SERVICE_ID_REG = 7;
|
|
@@ -23,13 +22,13 @@ const serviceAccountInfoSize = tryAsExactBytes(codecServiceAccountInfoWithThresh
|
|
|
23
22
|
function prepareRegsAndMemory(serviceId, accountInfoLength = serviceAccountInfoSize) {
|
|
24
23
|
const pageStart = 2 ** 16;
|
|
25
24
|
const memStart = pageStart + PAGE_SIZE - accountInfoLength - 1;
|
|
26
|
-
const registers =
|
|
25
|
+
const registers = HostCallRegisters.empty();
|
|
27
26
|
registers.set(SERVICE_ID_REG, tryAsU64(serviceId));
|
|
28
27
|
registers.set(DEST_START_REG, tryAsU64(memStart));
|
|
29
28
|
registers.set(LEN_REG, tryAsU64(serviceAccountInfoSize));
|
|
30
29
|
const builder = new MemoryBuilder();
|
|
31
30
|
builder.setWriteablePages(tryAsMemoryIndex(pageStart), tryAsMemoryIndex(pageStart + PAGE_SIZE));
|
|
32
|
-
const memory = new
|
|
31
|
+
const memory = HostCallMemory.new(builder.finalize(tryAsMemoryIndex(0), tryAsSbrkIndex(0)));
|
|
33
32
|
const readRaw = () => {
|
|
34
33
|
const result = new Uint8Array(Number(registers.get(LEN_REG)));
|
|
35
34
|
assert.strictEqual(memory.loadInto(result, tryAsU64(memStart)).isOk, true);
|
|
@@ -56,7 +55,7 @@ describe("HostCalls: Info", () => {
|
|
|
56
55
|
const serviceId = tryAsServiceId(10_000);
|
|
57
56
|
const currentServiceId = serviceId;
|
|
58
57
|
const accounts = new TestAccounts(currentServiceId);
|
|
59
|
-
const info = new
|
|
58
|
+
const info = Info.new(currentServiceId, accounts);
|
|
60
59
|
const { registers, memory, readInfo } = prepareRegsAndMemory(serviceId);
|
|
61
60
|
const storageUtilisationBytes = tryAsU64(10_000);
|
|
62
61
|
const storageUtilisationCount = tryAsU32(1_000);
|
|
@@ -84,7 +83,7 @@ describe("HostCalls: Info", () => {
|
|
|
84
83
|
const serviceId = tryAsServiceId(10_000);
|
|
85
84
|
const currentServiceId = serviceId;
|
|
86
85
|
const accounts = new TestAccounts(currentServiceId);
|
|
87
|
-
const info = new
|
|
86
|
+
const info = Info.new(currentServiceId, accounts);
|
|
88
87
|
const { registers, memory, readRaw } = prepareRegsAndMemory(serviceId);
|
|
89
88
|
registers.set(LEN_REG, tryAsU64(10));
|
|
90
89
|
const storageUtilisationBytes = tryAsU64(10_000);
|
|
@@ -108,7 +107,7 @@ describe("HostCalls: Info", () => {
|
|
|
108
107
|
it("should write none if account info is missing", async () => {
|
|
109
108
|
const currentServiceId = tryAsServiceId(15_000);
|
|
110
109
|
const accounts = new TestAccounts(currentServiceId);
|
|
111
|
-
const info = new
|
|
110
|
+
const info = Info.new(currentServiceId, accounts);
|
|
112
111
|
const serviceId = tryAsServiceId(10_000);
|
|
113
112
|
const { registers, memory } = prepareRegsAndMemory(serviceId);
|
|
114
113
|
// when
|
|
@@ -121,7 +120,7 @@ describe("HostCalls: Info", () => {
|
|
|
121
120
|
const serviceId = tryAsServiceId(10_000);
|
|
122
121
|
const currentServiceId = serviceId;
|
|
123
122
|
const accounts = new TestAccounts(currentServiceId);
|
|
124
|
-
const info = new
|
|
123
|
+
const info = Info.new(serviceId, accounts);
|
|
125
124
|
const { registers, memory } = prepareRegsAndMemory(serviceId, 10);
|
|
126
125
|
const storageUtilisationBytes = tryAsU64(10_000);
|
|
127
126
|
const storageUtilisationCount = tryAsU32(1_000);
|