@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
|
@@ -2,6 +2,9 @@ import * as lmdb from "lmdb";
|
|
|
2
2
|
/** A thin abstraction over lmdb database interface. */
|
|
3
3
|
export class LmdbRoot {
|
|
4
4
|
db;
|
|
5
|
+
static new(dbPath, readOnly = false) {
|
|
6
|
+
return new LmdbRoot(dbPath, readOnly);
|
|
7
|
+
}
|
|
5
8
|
constructor(dbPath, readOnly = false) {
|
|
6
9
|
this.db = lmdb.open(dbPath, {
|
|
7
10
|
compression: true,
|
|
@@ -61,7 +61,8 @@ export declare class LmdbStates implements StatesDb<SerializedState<LeafDb>>, In
|
|
|
61
61
|
private readonly root;
|
|
62
62
|
private readonly states;
|
|
63
63
|
private readonly values;
|
|
64
|
-
|
|
64
|
+
static new(spec: ChainSpec, blake2b: Blake2b, root: LmdbRoot): LmdbStates;
|
|
65
|
+
private constructor();
|
|
65
66
|
insertInitialState(headerHash: HeaderHash, serializedState: StateEntries): Promise<Result<OK, StateUpdateError>>;
|
|
66
67
|
private updateAndCommit;
|
|
67
68
|
updateAndSetState(headerHash: HeaderHash, state: SerializedState<LeafDb>, update: Partial<State & ServicesUpdate>): Promise<Result<OK, StateUpdateError>>;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"states.d.ts","sourceRoot":"","sources":["../../../../../packages/jam/database-lmdb/states.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAC;AAGlE,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,mBAAmB,CAAC;AACnD,OAAO,EAAE,KAAK,YAAY,EAAE,MAAM,EAAE,KAAK,QAAQ,EAAE,gBAAgB,EAAe,MAAM,qBAAqB,CAAC;AAC9G,OAAO,KAAK,EAAE,OAAO,EAAiB,MAAM,iBAAiB,CAAC;AAE9D,OAAO,KAAK,EAAE,cAAc,EAAE,KAAK,EAAE,MAAM,kBAAkB,CAAC;AAC9D,OAAO,KAAK,EAAE,YAAY,EAAY,MAAM,gCAAgC,CAAC;AAC7E,OAAO,EAAE,eAAe,EAAgD,MAAM,gCAAgC,CAAC;AAG/G,OAAO,EAAE,EAAE,EAAE,MAAM,EAAkB,MAAM,kBAAkB,CAAC;AAC9D,OAAO,KAAK,EAAE,QAAQ,EAAS,MAAM,WAAW,CAAC;AAGjD;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA+CG;AAEH,qBAAa,UAAW,YAAW,QAAQ,CAAC,eAAe,CAAC,MAAM,CAAC,CAAC,EAAE,YAAY,CAAC,YAAY,CAAC;
|
|
1
|
+
{"version":3,"file":"states.d.ts","sourceRoot":"","sources":["../../../../../packages/jam/database-lmdb/states.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAC;AAGlE,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,mBAAmB,CAAC;AACnD,OAAO,EAAE,KAAK,YAAY,EAAE,MAAM,EAAE,KAAK,QAAQ,EAAE,gBAAgB,EAAe,MAAM,qBAAqB,CAAC;AAC9G,OAAO,KAAK,EAAE,OAAO,EAAiB,MAAM,iBAAiB,CAAC;AAE9D,OAAO,KAAK,EAAE,cAAc,EAAE,KAAK,EAAE,MAAM,kBAAkB,CAAC;AAC9D,OAAO,KAAK,EAAE,YAAY,EAAY,MAAM,gCAAgC,CAAC;AAC7E,OAAO,EAAE,eAAe,EAAgD,MAAM,gCAAgC,CAAC;AAG/G,OAAO,EAAE,EAAE,EAAE,MAAM,EAAkB,MAAM,kBAAkB,CAAC;AAC9D,OAAO,KAAK,EAAE,QAAQ,EAAS,MAAM,WAAW,CAAC;AAGjD;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA+CG;AAEH,qBAAa,UAAW,YAAW,QAAQ,CAAC,eAAe,CAAC,MAAM,CAAC,CAAC,EAAE,YAAY,CAAC,YAAY,CAAC;IAS5F,OAAO,CAAC,QAAQ,CAAC,IAAI;IACrB,OAAO,CAAC,QAAQ,CAAC,OAAO;IACxB,OAAO,CAAC,QAAQ,CAAC,IAAI;IAVvB,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAQ;IAC/B,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAQ;IAE/B,MAAM,CAAC,GAAG,CAAC,IAAI,EAAE,SAAS,EAAE,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,QAAQ;IAI5D,OAAO;IASD,kBAAkB,CACtB,UAAU,EAAE,UAAU,EACtB,eAAe,EAAE,YAAY,GAC5B,OAAO,CAAC,MAAM,CAAC,EAAE,EAAE,gBAAgB,CAAC,CAAC;YAQ1B,eAAe;IA0BvB,iBAAiB,CACrB,UAAU,EAAE,UAAU,EACtB,KAAK,EAAE,eAAe,CAAC,MAAM,CAAC,EAC9B,MAAM,EAAE,OAAO,CAAC,KAAK,GAAG,cAAc,CAAC,GACtC,OAAO,CAAC,MAAM,CAAC,EAAE,EAAE,gBAAgB,CAAC,CAAC;IAWlC,YAAY,CAAC,KAAK,EAAE,eAAe,CAAC,MAAM,CAAC,GAAG,OAAO,CAAC,aAAa,CAAC;IAI1E,QAAQ,CAAC,IAAI,EAAE,UAAU,GAAG,eAAe,CAAC,MAAM,CAAC,GAAG,IAAI;IAsB1D,UAAU,CAAC,MAAM,EAAE,UAAU,GAAG,IAAI;IAI9B,KAAK;CAGZ"}
|
|
@@ -37,8 +37,8 @@ describe("LMDB States database", () => {
|
|
|
37
37
|
const headerHash = Bytes.zero(HASH_SIZE).asOpaque();
|
|
38
38
|
const spec = tinyChainSpec;
|
|
39
39
|
it("should import state and read state", async () => {
|
|
40
|
-
const root = new
|
|
41
|
-
const states = new
|
|
40
|
+
const root = LmdbRoot.new(tmpDir);
|
|
41
|
+
const states = LmdbStates.new(spec, blake2b, root);
|
|
42
42
|
try {
|
|
43
43
|
const emptyState = InMemoryState.empty(spec);
|
|
44
44
|
const serialized = StateEntries.serializeInMemory(spec, blake2b, emptyState);
|
|
@@ -58,15 +58,15 @@ describe("LMDB States database", () => {
|
|
|
58
58
|
}
|
|
59
59
|
});
|
|
60
60
|
it("should update the state", async () => {
|
|
61
|
-
const root = new
|
|
62
|
-
const states = new
|
|
61
|
+
const root = LmdbRoot.new(tmpDir);
|
|
62
|
+
const states = LmdbStates.new(spec, blake2b, root);
|
|
63
63
|
try {
|
|
64
64
|
const state = InMemoryState.empty(spec);
|
|
65
65
|
await states.insertInitialState(headerHash, StateEntries.serializeInMemory(spec, blake2b, state));
|
|
66
66
|
const newState = states.getState(headerHash);
|
|
67
67
|
assert.ok(newState !== null);
|
|
68
68
|
const headerHash2 = Bytes.fill(HASH_SIZE, 2).asOpaque();
|
|
69
|
-
const lookupHistory = new
|
|
69
|
+
const lookupHistory = LookupHistoryItem.new(Bytes.fill(HASH_SIZE, 0xff).asOpaque(), tryAsU32(5), tryAsLookupHistorySlots([]));
|
|
70
70
|
const stateUpdate = {
|
|
71
71
|
timeslot: tryAsTimeSlot(15),
|
|
72
72
|
privilegedServices: PrivilegedServices.create({
|
|
@@ -142,8 +142,8 @@ describe("LMDB States database", () => {
|
|
|
142
142
|
deepEqual(Array.from(set), Array.from(SortedSet.fromArray(leafComparator, Array.from(trie.nodes.leaves()))));
|
|
143
143
|
});
|
|
144
144
|
it("should import more complex state", async () => {
|
|
145
|
-
const root = new
|
|
146
|
-
const states = new
|
|
145
|
+
const root = LmdbRoot.new(tmpDir);
|
|
146
|
+
const states = LmdbStates.new(spec, blake2b, root);
|
|
147
147
|
try {
|
|
148
148
|
const initialState = testState();
|
|
149
149
|
const initialService = initialState.services.get(tryAsServiceId(0));
|
|
@@ -167,8 +167,8 @@ describe("LMDB States database", () => {
|
|
|
167
167
|
}
|
|
168
168
|
});
|
|
169
169
|
it("should update more complex entries", async () => {
|
|
170
|
-
const root = new
|
|
171
|
-
const states = new
|
|
170
|
+
const root = LmdbRoot.new(tmpDir);
|
|
171
|
+
const states = LmdbStates.new(spec, blake2b, root);
|
|
172
172
|
try {
|
|
173
173
|
const state = testState();
|
|
174
174
|
const initialService = state.services.get(tryAsServiceId(0));
|
|
@@ -1,4 +1,4 @@
|
|
|
1
1
|
export type { ReturnValue } from "#@typeberry/pvm-host-calls";
|
|
2
|
-
export { ReturnStatus } from "#@typeberry/pvm-host-calls";
|
|
2
|
+
export { EcalliTraceLogger, ReturnStatus } from "#@typeberry/pvm-host-calls";
|
|
3
3
|
export * from "./pvm-executor.js";
|
|
4
4
|
//# sourceMappingURL=index.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../../packages/jam/executor/index.ts"],"names":[],"mappings":"AAAA,YAAY,EAAE,WAAW,EAAE,MAAM,2BAA2B,CAAC;AAC7D,OAAO,EAAE,YAAY,EAAE,MAAM,2BAA2B,CAAC;
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../../packages/jam/executor/index.ts"],"names":[],"mappings":"AAAA,YAAY,EAAE,WAAW,EAAE,MAAM,2BAA2B,CAAC;AAC7D,OAAO,EAAE,iBAAiB,EAAE,YAAY,EAAE,MAAM,2BAA2B,CAAC;AAC5E,cAAc,mBAAmB,CAAC"}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
export { ReturnStatus } from "#@typeberry/pvm-host-calls";
|
|
1
|
+
export { EcalliTraceLogger, ReturnStatus } from "#@typeberry/pvm-host-calls";
|
|
2
2
|
export * from "./pvm-executor.js";
|
|
@@ -6,13 +6,16 @@ import type { PartialState } from "#@typeberry/jam-host-calls/externalities/part
|
|
|
6
6
|
import { type RefineExternalities } from "#@typeberry/jam-host-calls/externalities/refine-externalities.js";
|
|
7
7
|
export type RefineHostCallExternalities = {
|
|
8
8
|
refine: RefineExternalities;
|
|
9
|
-
fetchExternalities: general.
|
|
9
|
+
fetchExternalities: general.IRefineFetch;
|
|
10
10
|
};
|
|
11
11
|
export type AccumulateHostCallExternalities = {
|
|
12
12
|
partialState: PartialState;
|
|
13
|
-
fetchExternalities: general.
|
|
13
|
+
fetchExternalities: general.IAccumulateFetch;
|
|
14
14
|
serviceExternalities: general.AccountsInfo & general.AccountsLookup & general.AccountsWrite & general.AccountsRead;
|
|
15
15
|
};
|
|
16
|
+
export type IsAuthorizedHostCallExternalities = {
|
|
17
|
+
fetchExternalities: general.IIsAuthorizedFetch;
|
|
18
|
+
};
|
|
16
19
|
type OnTransferHostCallExternalities = {
|
|
17
20
|
partialState: general.AccountsInfo & general.AccountsLookup & general.AccountsWrite & general.AccountsRead;
|
|
18
21
|
fetchExternalities: general.IFetchExternalities;
|
|
@@ -31,6 +34,8 @@ export declare class PvmExecutor {
|
|
|
31
34
|
private static prepareRefineHostCalls;
|
|
32
35
|
/** Prepare accumulation host call handlers */
|
|
33
36
|
private static prepareAccumulateHostCalls;
|
|
37
|
+
/** Prepare is-authorized host call handlers */
|
|
38
|
+
private static prepareIsAuthorizedHostCalls;
|
|
34
39
|
/** Prepare on transfer host call handlers */
|
|
35
40
|
private static prepareOnTransferHostCalls;
|
|
36
41
|
/**
|
|
@@ -50,6 +55,8 @@ export declare class PvmExecutor {
|
|
|
50
55
|
}>;
|
|
51
56
|
/** A utility function that can be used to prepare refine executor */
|
|
52
57
|
static createRefineExecutor(serviceId: ServiceId, serviceCode: BytesBlob, externalities: RefineHostCallExternalities, pvm: PvmBackend): Promise<PvmExecutor>;
|
|
58
|
+
/** A utility function that can be used to prepare is-authorized executor */
|
|
59
|
+
static createIsAuthorizedExecutor(serviceId: ServiceId, serviceCode: BytesBlob, externalities: IsAuthorizedHostCallExternalities, pvm: PvmBackend): Promise<PvmExecutor>;
|
|
53
60
|
/** A utility function that can be used to prepare accumulate executor */
|
|
54
61
|
static createAccumulateExecutor(serviceId: ServiceId, serviceCode: BytesBlob, externalities: AccumulateHostCallExternalities, chainSpec: ChainSpec, pvm: PvmBackend): Promise<PvmExecutor>;
|
|
55
62
|
/** A utility function that can be used to prepare on transfer executor */
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"pvm-executor.d.ts","sourceRoot":"","sources":["../../../../../packages/jam/executor/pvm-executor.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,UAAU,EAAE,KAAK,SAAS,EAAmB,MAAM,kBAAkB,CAAC;AACpF,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAC;AAClD,OAAO,KAAK,EAAE,SAAS,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAC;AAC/D,OAAO,EAAc,OAAO,EAAU,MAAM,2BAA2B,CAAC;AACxE,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,0DAA0D,CAAC;AAC7F,OAAO,EAEL,KAAK,mBAAmB,EAEzB,MAAM,iEAAiE,CAAC;AAuCzE,MAAM,MAAM,2BAA2B,GAAG;IACxC,MAAM,EAAE,mBAAmB,CAAC;IAC5B,kBAAkB,EAAE,OAAO,CAAC,
|
|
1
|
+
{"version":3,"file":"pvm-executor.d.ts","sourceRoot":"","sources":["../../../../../packages/jam/executor/pvm-executor.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,UAAU,EAAE,KAAK,SAAS,EAAmB,MAAM,kBAAkB,CAAC;AACpF,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAC;AAClD,OAAO,KAAK,EAAE,SAAS,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAC;AAC/D,OAAO,EAAc,OAAO,EAAU,MAAM,2BAA2B,CAAC;AACxE,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,0DAA0D,CAAC;AAC7F,OAAO,EAEL,KAAK,mBAAmB,EAEzB,MAAM,iEAAiE,CAAC;AAuCzE,MAAM,MAAM,2BAA2B,GAAG;IACxC,MAAM,EAAE,mBAAmB,CAAC;IAC5B,kBAAkB,EAAE,OAAO,CAAC,YAAY,CAAC;CAC1C,CAAC;AAEF,MAAM,MAAM,+BAA+B,GAAG;IAC5C,YAAY,EAAE,YAAY,CAAC;IAC3B,kBAAkB,EAAE,OAAO,CAAC,gBAAgB,CAAC;IAC7C,oBAAoB,EAAE,OAAO,CAAC,YAAY,GAAG,OAAO,CAAC,cAAc,GAAG,OAAO,CAAC,aAAa,GAAG,OAAO,CAAC,YAAY,CAAC;CACpH,CAAC;AAEF,MAAM,MAAM,iCAAiC,GAAG;IAC9C,kBAAkB,EAAE,OAAO,CAAC,kBAAkB,CAAC;CAChD,CAAC;AAEF,KAAK,+BAA+B,GAAG;IACrC,YAAY,EAAE,OAAO,CAAC,YAAY,GAAG,OAAO,CAAC,cAAc,GAAG,OAAO,CAAC,aAAa,GAAG,OAAO,CAAC,YAAY,CAAC;IAC3G,kBAAkB,EAAE,OAAO,CAAC,mBAAmB,CAAC;CACjD,CAAC;AAUF;;GAEG;AACH,qBAAa,WAAW;IAKpB,OAAO,CAAC,WAAW;IAEnB,OAAO,CAAC,UAAU;IANpB,OAAO,CAAC,QAAQ,CAAC,GAAG,CAAoB;IACxC,OAAO,CAAC,SAAS,CAAY;IAE7B,OAAO;mBAac,cAAc;IAInC,wCAAwC;IACxC,OAAO,CAAC,MAAM,CAAC,sBAAsB;IAerC,8CAA8C;IAC9C,OAAO,CAAC,MAAM,CAAC,0BAA0B;IAuBzC,+CAA+C;IAC/C,OAAO,CAAC,MAAM,CAAC,4BAA4B;IAU3C,6CAA6C;IAC7C,OAAO,CAAC,MAAM,CAAC,0BAA0B;IAazC;;;;;;OAMG;IACG,GAAG,CAAC,IAAI,EAAE,SAAS,EAAE,GAAG,EAAE,UAAU;;;;;;;;IAQ1C,qEAAqE;WACxD,oBAAoB,CAC/B,SAAS,EAAE,SAAS,EACpB,WAAW,EAAE,SAAS,EACtB,aAAa,EAAE,2BAA2B,EAC1C,GAAG,EAAE,UAAU;IAOjB,4EAA4E;WAC/D,0BAA0B,CACrC,SAAS,EAAE,SAAS,EACpB,WAAW,EAAE,SAAS,EACtB,aAAa,EAAE,iCAAiC,EAChD,GAAG,EAAE,UAAU;IAOjB,yEAAyE;WAC5D,wBAAwB,CACnC,SAAS,EAAE,SAAS,EACpB,WAAW,EAAE,SAAS,EACtB,aAAa,EAAE,+BAA+B,EAC9C,SAAS,EAAE,SAAS,EACpB,GAAG,EAAE,UAAU;IAQjB,0EAA0E;WAC7D,wBAAwB,CACnC,SAAS,EAAE,SAAS,EACpB,WAAW,EAAE,SAAS,EACtB,aAAa,EAAE,+BAA+B,EAC9C,GAAG,EAAE,UAAU;CAMlB"}
|
|
@@ -55,51 +55,60 @@ export class PvmExecutor {
|
|
|
55
55
|
constructor(serviceCode, hostCallHandlers, entrypoint, pvmInstanceManager) {
|
|
56
56
|
this.serviceCode = serviceCode;
|
|
57
57
|
this.entrypoint = entrypoint;
|
|
58
|
-
this.hostCalls = new
|
|
58
|
+
this.hostCalls = HostCalls.new({
|
|
59
59
|
missing: new general.Missing(),
|
|
60
60
|
handlers: hostCallHandlers,
|
|
61
61
|
});
|
|
62
|
-
this.pvm = new
|
|
62
|
+
this.pvm = HostCallsExecutor.new(pvmInstanceManager, this.hostCalls);
|
|
63
63
|
}
|
|
64
64
|
static async prepareBackend(pvm) {
|
|
65
65
|
return PvmInstanceManager.new(pvm);
|
|
66
66
|
}
|
|
67
67
|
/** Prepare refine host call handlers */
|
|
68
68
|
static prepareRefineHostCalls(serviceId, externalities) {
|
|
69
|
-
const refineHandlers = REFINE_HOST_CALL_CLASSES.map((HandlerClass) => new
|
|
69
|
+
const refineHandlers = REFINE_HOST_CALL_CLASSES.map((HandlerClass) => HandlerClass.new(externalities.refine));
|
|
70
70
|
/** https://graypaper.fluffylabs.dev/#/ab2cdbd/2fa7022fa702?v=0.7.2 */
|
|
71
71
|
const generalHandlers = [
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
72
|
+
general.LogHostCall.new(serviceId),
|
|
73
|
+
general.GasHostCall.new(serviceId),
|
|
74
|
+
general.Fetch.new(serviceId, externalities.fetchExternalities),
|
|
75
75
|
];
|
|
76
76
|
return refineHandlers.concat(generalHandlers);
|
|
77
77
|
}
|
|
78
78
|
/** Prepare accumulation host call handlers */
|
|
79
79
|
static prepareAccumulateHostCalls(serviceId, externalities, chainSpec) {
|
|
80
|
-
const accumulateHandlers = ACCUMULATE_HOST_CALL_CLASSES.map((HandlerClass) => new
|
|
80
|
+
const accumulateHandlers = ACCUMULATE_HOST_CALL_CLASSES.map((HandlerClass) => HandlerClass.new(serviceId, externalities.partialState, chainSpec));
|
|
81
81
|
/** https://graypaper.fluffylabs.dev/#/ab2cdbd/30d00130d001?v=0.7.2 */
|
|
82
82
|
const generalHandlers = [
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
83
|
+
general.LogHostCall.new(serviceId),
|
|
84
|
+
general.GasHostCall.new(serviceId),
|
|
85
|
+
general.Read.new(serviceId, externalities.serviceExternalities),
|
|
86
|
+
general.Write.new(serviceId, externalities.serviceExternalities),
|
|
87
|
+
general.Fetch.new(serviceId, externalities.fetchExternalities),
|
|
88
|
+
general.Lookup.new(serviceId, externalities.serviceExternalities),
|
|
89
|
+
general.Info.new(serviceId, externalities.serviceExternalities),
|
|
90
90
|
];
|
|
91
91
|
return accumulateHandlers.concat(generalHandlers);
|
|
92
92
|
}
|
|
93
|
+
/** Prepare is-authorized host call handlers */
|
|
94
|
+
static prepareIsAuthorizedHostCalls(serviceId, externalities) {
|
|
95
|
+
const generalHandlers = [
|
|
96
|
+
general.LogHostCall.new(serviceId),
|
|
97
|
+
general.GasHostCall.new(serviceId),
|
|
98
|
+
general.Fetch.new(serviceId, externalities.fetchExternalities),
|
|
99
|
+
];
|
|
100
|
+
return generalHandlers;
|
|
101
|
+
}
|
|
93
102
|
/** Prepare on transfer host call handlers */
|
|
94
103
|
static prepareOnTransferHostCalls(serviceId, externalities) {
|
|
95
104
|
const generalHandlers = [
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
105
|
+
general.LogHostCall.new(serviceId),
|
|
106
|
+
general.GasHostCall.new(serviceId),
|
|
107
|
+
general.Fetch.new(serviceId, externalities.fetchExternalities),
|
|
108
|
+
general.Read.new(serviceId, externalities.partialState),
|
|
109
|
+
general.Write.new(serviceId, externalities.partialState),
|
|
110
|
+
general.Lookup.new(serviceId, externalities.partialState),
|
|
111
|
+
general.Info.new(serviceId, externalities.partialState),
|
|
103
112
|
];
|
|
104
113
|
return generalHandlers;
|
|
105
114
|
}
|
|
@@ -123,6 +132,12 @@ export class PvmExecutor {
|
|
|
123
132
|
const instances = await PvmExecutor.prepareBackend(pvm);
|
|
124
133
|
return new PvmExecutor(serviceCode, hostCallHandlers, entrypoint.REFINE, instances);
|
|
125
134
|
}
|
|
135
|
+
/** A utility function that can be used to prepare is-authorized executor */
|
|
136
|
+
static async createIsAuthorizedExecutor(serviceId, serviceCode, externalities, pvm) {
|
|
137
|
+
const hostCallHandlers = PvmExecutor.prepareIsAuthorizedHostCalls(serviceId, externalities);
|
|
138
|
+
const instances = await PvmExecutor.prepareBackend(pvm);
|
|
139
|
+
return new PvmExecutor(serviceCode, hostCallHandlers, entrypoint.IS_AUTHORIZED, instances);
|
|
140
|
+
}
|
|
126
141
|
/** A utility function that can be used to prepare accumulate executor */
|
|
127
142
|
static async createAccumulateExecutor(serviceId, serviceCode, externalities, chainSpec, pvm) {
|
|
128
143
|
const hostCallHandlers = PvmExecutor.prepareAccumulateHostCalls(serviceId, externalities, chainSpec);
|
|
@@ -31,7 +31,8 @@ export declare class FuzzTarget implements IpcHandler {
|
|
|
31
31
|
readonly sender: IpcSender;
|
|
32
32
|
readonly spec: ChainSpec;
|
|
33
33
|
private sessionFeatures;
|
|
34
|
-
|
|
34
|
+
static new(msgHandler: FuzzMessageHandler, sender: IpcSender, spec: ChainSpec): FuzzTarget;
|
|
35
|
+
private constructor();
|
|
35
36
|
onSocketMessage(msg: Uint8Array): Promise<void>;
|
|
36
37
|
private processAndRespond;
|
|
37
38
|
onClose({ error }: {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"handler.d.ts","sourceRoot":"","sources":["../../../../../../packages/jam/fuzz-proto/v1/handler.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,UAAU,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAC;AAE7E,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,mBAAmB,CAAC;AAEnD,OAAO,EAAe,KAAK,MAAM,EAAE,MAAM,kBAAkB,CAAC;AAC5D,OAAO,KAAK,EAAE,UAAU,EAAE,SAAS,EAAE,MAAM,cAAc,CAAC;AAC1D,OAAO,EACL,YAAY,EAEZ,KAAK,UAAU,EACf,KAAK,QAAQ,EAKb,KAAK,QAAQ,EACd,MAAM,YAAY,CAAC;AAIpB;;;GAGG;AACH,MAAM,WAAW,kBAAkB;IACjC;;;OAGG;IACH,WAAW,CAAC,KAAK,EAAE,QAAQ,GAAG,OAAO,CAAC,QAAQ,CAAC,CAAC;IAEhD;;;OAGG;IACH,UAAU,CAAC,MAAM,EAAE,UAAU,GAAG,OAAO,CAAC,aAAa,CAAC,CAAC;IAEvD;;;OAGG;IACH,WAAW,CAAC,KAAK,EAAE,SAAS,GAAG,OAAO,CAAC,MAAM,CAAC,aAAa,EAAE,YAAY,CAAC,CAAC,CAAC;IAE5E,gEAAgE;IAChE,kBAAkB,CAAC,KAAK,EAAE,UAAU,GAAG,OAAO,CAAC,QAAQ,EAAE,CAAC,CAAC;CAC5D;AAED,qBAAa,UAAW,YAAW,UAAU;
|
|
1
|
+
{"version":3,"file":"handler.d.ts","sourceRoot":"","sources":["../../../../../../packages/jam/fuzz-proto/v1/handler.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,UAAU,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAC;AAE7E,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,mBAAmB,CAAC;AAEnD,OAAO,EAAe,KAAK,MAAM,EAAE,MAAM,kBAAkB,CAAC;AAC5D,OAAO,KAAK,EAAE,UAAU,EAAE,SAAS,EAAE,MAAM,cAAc,CAAC;AAC1D,OAAO,EACL,YAAY,EAEZ,KAAK,UAAU,EACf,KAAK,QAAQ,EAKb,KAAK,QAAQ,EACd,MAAM,YAAY,CAAC;AAIpB;;;GAGG;AACH,MAAM,WAAW,kBAAkB;IACjC;;;OAGG;IACH,WAAW,CAAC,KAAK,EAAE,QAAQ,GAAG,OAAO,CAAC,QAAQ,CAAC,CAAC;IAEhD;;;OAGG;IACH,UAAU,CAAC,MAAM,EAAE,UAAU,GAAG,OAAO,CAAC,aAAa,CAAC,CAAC;IAEvD;;;OAGG;IACH,WAAW,CAAC,KAAK,EAAE,SAAS,GAAG,OAAO,CAAC,MAAM,CAAC,aAAa,EAAE,YAAY,CAAC,CAAC,CAAC;IAE5E,gEAAgE;IAChE,kBAAkB,CAAC,KAAK,EAAE,UAAU,GAAG,OAAO,CAAC,QAAQ,EAAE,CAAC,CAAC;CAC5D;AAED,qBAAa,UAAW,YAAW,UAAU;aAQzB,UAAU,EAAE,kBAAkB;aAC9B,MAAM,EAAE,SAAS;aACjB,IAAI,EAAE,SAAS;IATjC,OAAO,CAAC,eAAe,CAAK;IAE5B,MAAM,CAAC,GAAG,CAAC,UAAU,EAAE,kBAAkB,EAAE,MAAM,EAAE,SAAS,EAAE,IAAI,EAAE,SAAS;IAI7E,OAAO;IAMD,eAAe,CAAC,GAAG,EAAE,UAAU,GAAG,OAAO,CAAC,IAAI,CAAC;YAiBvC,iBAAiB;IA2H/B,OAAO,CAAC,EAAE,KAAK,EAAE,EAAE;QAAE,KAAK,CAAC,EAAE,KAAK,CAAA;KAAE,GAAG,IAAI;IAI3C,4DAA4D;IAC5D,UAAU,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO;CAGrC"}
|
|
@@ -8,6 +8,9 @@ export class FuzzTarget {
|
|
|
8
8
|
sender;
|
|
9
9
|
spec;
|
|
10
10
|
sessionFeatures = 0;
|
|
11
|
+
static new(msgHandler, sender, spec) {
|
|
12
|
+
return new FuzzTarget(msgHandler, sender, spec);
|
|
13
|
+
}
|
|
11
14
|
constructor(msgHandler, sender, spec) {
|
|
12
15
|
this.msgHandler = msgHandler;
|
|
13
16
|
this.sender = sender;
|
|
@@ -70,7 +70,7 @@ describe("FuzzV1Target Handler", () => {
|
|
|
70
70
|
value: responsePeerInfo,
|
|
71
71
|
};
|
|
72
72
|
mockMessageHandler.getPeerInfo.mock.mockImplementation(async () => responsePeerInfo);
|
|
73
|
-
const fuzzTarget = new
|
|
73
|
+
const fuzzTarget = FuzzTarget.new(mockMessageHandler, mockSender, spec);
|
|
74
74
|
const testMessage = encode(incomingMessage);
|
|
75
75
|
await fuzzTarget.onSocketMessage(testMessage);
|
|
76
76
|
// Verify handshake completion and feature negotiation
|
|
@@ -116,7 +116,7 @@ describe("FuzzV1Target Handler", () => {
|
|
|
116
116
|
value: expectedStateRoot,
|
|
117
117
|
};
|
|
118
118
|
mockMessageHandler.initialize.mock.mockImplementation(async () => expectedStateRoot);
|
|
119
|
-
const fuzzTarget = new
|
|
119
|
+
const fuzzTarget = FuzzTarget.new(mockMessageHandler, mockSender, spec);
|
|
120
120
|
await completeHandshake(mockMessageHandler, mockSender, fuzzTarget);
|
|
121
121
|
mockSender._sentData = []; // Clear handshake response
|
|
122
122
|
const testMessage = encode(incomingMessage);
|
|
@@ -144,7 +144,7 @@ describe("FuzzV1Target Handler", () => {
|
|
|
144
144
|
value: expectedStateRoot,
|
|
145
145
|
};
|
|
146
146
|
mockMessageHandler.importBlock.mock.mockImplementation(async () => Result.ok(expectedStateRoot));
|
|
147
|
-
const fuzzTarget = new
|
|
147
|
+
const fuzzTarget = FuzzTarget.new(mockMessageHandler, mockSender, spec);
|
|
148
148
|
await completeHandshake(mockMessageHandler, mockSender, fuzzTarget);
|
|
149
149
|
mockSender._sentData = []; // Clear handshake response
|
|
150
150
|
const testMessage = encode(incomingMessage);
|
|
@@ -169,7 +169,7 @@ describe("FuzzV1Target Handler", () => {
|
|
|
169
169
|
value: expectedError,
|
|
170
170
|
};
|
|
171
171
|
mockMessageHandler.importBlock.mock.mockImplementation(async () => Result.error(expectedError, () => "Test: ImportBlock error"));
|
|
172
|
-
const fuzzTarget = new
|
|
172
|
+
const fuzzTarget = FuzzTarget.new(mockMessageHandler, mockSender, spec);
|
|
173
173
|
await completeHandshake(mockMessageHandler, mockSender, fuzzTarget);
|
|
174
174
|
mockSender._sentData = []; // Clear handshake response
|
|
175
175
|
const testMessage = encode(incomingMessage);
|
|
@@ -205,7 +205,7 @@ describe("FuzzV1Target Handler", () => {
|
|
|
205
205
|
value: keyValues,
|
|
206
206
|
};
|
|
207
207
|
mockMessageHandler.getSerializedState.mock.mockImplementation(async () => keyValues);
|
|
208
|
-
const fuzzTarget = new
|
|
208
|
+
const fuzzTarget = FuzzTarget.new(mockMessageHandler, mockSender, spec);
|
|
209
209
|
await completeHandshake(mockMessageHandler, mockSender, fuzzTarget);
|
|
210
210
|
mockSender._sentData = []; // Clear handshake response
|
|
211
211
|
const testMessage = encode(incomingMessage);
|
|
@@ -227,7 +227,7 @@ describe("FuzzV1Target Handler", () => {
|
|
|
227
227
|
type: MessageType.StateRoot,
|
|
228
228
|
value: stateRoot,
|
|
229
229
|
};
|
|
230
|
-
const fuzzTarget = new
|
|
230
|
+
const fuzzTarget = FuzzTarget.new(mockMessageHandler, mockSender, spec);
|
|
231
231
|
await completeHandshake(mockMessageHandler, mockSender, fuzzTarget);
|
|
232
232
|
mockSender._sentData = []; // Clear handshake response
|
|
233
233
|
const testMessage = encode(incomingMessage);
|
|
@@ -248,7 +248,7 @@ describe("FuzzV1Target Handler", () => {
|
|
|
248
248
|
type: MessageType.State,
|
|
249
249
|
value: keyValues,
|
|
250
250
|
};
|
|
251
|
-
const fuzzTarget = new
|
|
251
|
+
const fuzzTarget = FuzzTarget.new(mockMessageHandler, mockSender, spec);
|
|
252
252
|
await completeHandshake(mockMessageHandler, mockSender, fuzzTarget);
|
|
253
253
|
mockSender._sentData = []; // Clear handshake response
|
|
254
254
|
const testMessage = encode(incomingMessage);
|
|
@@ -264,7 +264,7 @@ describe("FuzzV1Target Handler", () => {
|
|
|
264
264
|
type: MessageType.Error,
|
|
265
265
|
value: error,
|
|
266
266
|
};
|
|
267
|
-
const fuzzTarget = new
|
|
267
|
+
const fuzzTarget = FuzzTarget.new(mockMessageHandler, mockSender, spec);
|
|
268
268
|
await completeHandshake(mockMessageHandler, mockSender, fuzzTarget);
|
|
269
269
|
mockSender._sentData = []; // Clear handshake response
|
|
270
270
|
const testMessage = encode(incomingMessage);
|
|
@@ -277,7 +277,7 @@ describe("FuzzV1Target Handler", () => {
|
|
|
277
277
|
it("should handle decoding error gracefully", async () => {
|
|
278
278
|
const mockMessageHandler = new MockV1MessageHandler();
|
|
279
279
|
const mockSender = new MockSender();
|
|
280
|
-
const fuzzTarget = new
|
|
280
|
+
const fuzzTarget = FuzzTarget.new(mockMessageHandler, mockSender, spec);
|
|
281
281
|
// Create malformed message with valid length prefix but invalid data
|
|
282
282
|
const malformedMessage = new Uint8Array(8);
|
|
283
283
|
const dataView = new DataView(malformedMessage.buffer);
|
|
@@ -300,7 +300,7 @@ describe("FuzzV1Target Handler", () => {
|
|
|
300
300
|
return Decoder.decodeObject(messageCodec, data, spec);
|
|
301
301
|
}
|
|
302
302
|
async function completeHandshake(mockMessageHandler, mockSender, fuzzTarget) {
|
|
303
|
-
const target = fuzzTarget ?? new
|
|
303
|
+
const target = fuzzTarget ?? FuzzTarget.new(mockMessageHandler, mockSender, spec);
|
|
304
304
|
const inputPeerInfo = PeerInfo.create({
|
|
305
305
|
fuzzVersion: tryAsU8(1),
|
|
306
306
|
features: tryAsU32(Features.Ancestry),
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../../../packages/jam/in-core/externalities/index.ts"],"names":[],"mappings":"AAAA,cAAc,0BAA0B,CAAC;AACzC,cAAc,aAAa,CAAC;AAC5B,cAAc,mBAAmB,CAAC"}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
import type { BytesBlob } from "#@typeberry/bytes";
|
|
2
|
+
import type { ChainSpec } from "#@typeberry/config";
|
|
3
|
+
import { general } from "#@typeberry/jam-host-calls";
|
|
4
|
+
import type { U64 } from "#@typeberry/numbers";
|
|
5
|
+
import { type WorkPackageFetchData } from "#@typeberry/transition/externalities/fetch-externalities.js";
|
|
6
|
+
export declare class IsAuthorizedFetchExternalities implements general.IIsAuthorizedFetch {
|
|
7
|
+
private readonly chainSpec;
|
|
8
|
+
private readonly pkg;
|
|
9
|
+
readonly context = general.FetchContext.IsAuthorized;
|
|
10
|
+
constructor(chainSpec: ChainSpec, pkg: WorkPackageFetchData);
|
|
11
|
+
constants(): BytesBlob;
|
|
12
|
+
workPackage(): BytesBlob;
|
|
13
|
+
authConfiguration(): BytesBlob;
|
|
14
|
+
authToken(): BytesBlob;
|
|
15
|
+
refineContext(): BytesBlob;
|
|
16
|
+
allWorkItems(): BytesBlob;
|
|
17
|
+
oneWorkItem(workItem: U64): BytesBlob | null;
|
|
18
|
+
workItemPayload(workItem: U64): BytesBlob | null;
|
|
19
|
+
}
|
|
20
|
+
//# sourceMappingURL=is-authorized-fetch.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"is-authorized-fetch.d.ts","sourceRoot":"","sources":["../../../../../../packages/jam/in-core/externalities/is-authorized-fetch.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAC;AAClD,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,mBAAmB,CAAC;AACnD,OAAO,EAAE,OAAO,EAAE,MAAM,2BAA2B,CAAC;AACpD,OAAO,KAAK,EAAE,GAAG,EAAE,MAAM,oBAAoB,CAAC;AAC9C,OAAO,EAGL,KAAK,oBAAoB,EAC1B,MAAM,4DAA4D,CAAC;AAEpE,qBAAa,8BAA+B,YAAW,OAAO,CAAC,kBAAkB;IAI7E,OAAO,CAAC,QAAQ,CAAC,SAAS;IAC1B,OAAO,CAAC,QAAQ,CAAC,GAAG;IAJtB,QAAQ,CAAC,OAAO,qCAAqC;gBAGlC,SAAS,EAAE,SAAS,EACpB,GAAG,EAAE,oBAAoB;IAG5C,SAAS,IAAI,SAAS;IAItB,WAAW,IAAI,SAAS;IAIxB,iBAAiB,IAAI,SAAS;IAI9B,SAAS,IAAI,SAAS;IAItB,aAAa,IAAI,SAAS;IAI1B,YAAY,IAAI,SAAS;IAIzB,WAAW,CAAC,QAAQ,EAAE,GAAG,GAAG,SAAS,GAAG,IAAI;IAK5C,eAAe,CAAC,QAAQ,EAAE,GAAG,GAAG,SAAS,GAAG,IAAI;CAQjD"}
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
import { general } from "#@typeberry/jam-host-calls";
|
|
2
|
+
import { getEncodedConstants, u64ToArrayIndex, } from "#@typeberry/transition/externalities/fetch-externalities.js";
|
|
3
|
+
export class IsAuthorizedFetchExternalities {
|
|
4
|
+
chainSpec;
|
|
5
|
+
pkg;
|
|
6
|
+
context = general.FetchContext.IsAuthorized;
|
|
7
|
+
constructor(chainSpec, pkg) {
|
|
8
|
+
this.chainSpec = chainSpec;
|
|
9
|
+
this.pkg = pkg;
|
|
10
|
+
}
|
|
11
|
+
constants() {
|
|
12
|
+
return getEncodedConstants(this.chainSpec);
|
|
13
|
+
}
|
|
14
|
+
workPackage() {
|
|
15
|
+
return this.pkg.packageView.encoded();
|
|
16
|
+
}
|
|
17
|
+
authConfiguration() {
|
|
18
|
+
return this.pkg.packageView.authConfiguration.view();
|
|
19
|
+
}
|
|
20
|
+
authToken() {
|
|
21
|
+
return this.pkg.packageView.authToken.view();
|
|
22
|
+
}
|
|
23
|
+
refineContext() {
|
|
24
|
+
return this.pkg.packageView.context.encoded();
|
|
25
|
+
}
|
|
26
|
+
allWorkItems() {
|
|
27
|
+
return this.pkg.workItemSummaries.encoded();
|
|
28
|
+
}
|
|
29
|
+
oneWorkItem(workItem) {
|
|
30
|
+
const idx = u64ToArrayIndex(workItem, this.pkg.workItemSummaries.length);
|
|
31
|
+
return idx === null ? null : (this.pkg.workItemSummaries.get(idx)?.encoded() ?? null);
|
|
32
|
+
}
|
|
33
|
+
workItemPayload(workItem) {
|
|
34
|
+
const items = this.pkg.packageView.items.view();
|
|
35
|
+
const idx = u64ToArrayIndex(workItem, items.length);
|
|
36
|
+
if (idx === null) {
|
|
37
|
+
return null;
|
|
38
|
+
}
|
|
39
|
+
return items.get(idx)?.view().payload.view() ?? null;
|
|
40
|
+
}
|
|
41
|
+
}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"is-authorized-fetch.test.d.ts","sourceRoot":"","sources":["../../../../../../packages/jam/in-core/externalities/is-authorized-fetch.test.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,101 @@
|
|
|
1
|
+
import assert from "node:assert";
|
|
2
|
+
import { describe, it } from "node:test";
|
|
3
|
+
import { tryAsServiceGas, tryAsServiceId, tryAsTimeSlot } from "#@typeberry/block";
|
|
4
|
+
import { RefineContext } from "#@typeberry/block/refine-context.js";
|
|
5
|
+
import { WorkItem } from "#@typeberry/block/work-item.js";
|
|
6
|
+
import { tryAsWorkItemsCount, WorkPackage } from "#@typeberry/block/work-package.js";
|
|
7
|
+
import { Bytes, BytesBlob } from "#@typeberry/bytes";
|
|
8
|
+
import { Encoder } from "#@typeberry/codec";
|
|
9
|
+
import { asKnownSize, FixedSizeArray } from "#@typeberry/collections";
|
|
10
|
+
import { fullChainSpec, tinyChainSpec } from "#@typeberry/config";
|
|
11
|
+
import { HASH_SIZE } from "#@typeberry/hash";
|
|
12
|
+
import { tryAsU16, tryAsU64 } from "#@typeberry/numbers";
|
|
13
|
+
import { buildWorkPackageFetchData } from "#@typeberry/transition/externalities/fetch-externalities.js";
|
|
14
|
+
import { IsAuthorizedFetchExternalities } from "./is-authorized-fetch.js";
|
|
15
|
+
function fetchDataFor(pkg, chainSpec = tinyChainSpec) {
|
|
16
|
+
return buildWorkPackageFetchData(chainSpec, pkg);
|
|
17
|
+
}
|
|
18
|
+
function buildWorkItem(overrides = {}) {
|
|
19
|
+
return WorkItem.create({
|
|
20
|
+
service: tryAsServiceId(overrides.service ?? 1),
|
|
21
|
+
codeHash: Bytes.fill(HASH_SIZE, 7).asOpaque(),
|
|
22
|
+
payload: BytesBlob.blobFrom(new Uint8Array(overrides.payloadLen ?? 3).fill(0xab)),
|
|
23
|
+
refineGasLimit: tryAsServiceGas(1_000_000),
|
|
24
|
+
accumulateGasLimit: tryAsServiceGas(2_000_000),
|
|
25
|
+
importSegments: asKnownSize([]),
|
|
26
|
+
extrinsic: [],
|
|
27
|
+
exportCount: tryAsU16(0),
|
|
28
|
+
});
|
|
29
|
+
}
|
|
30
|
+
function buildPackage(items = [buildWorkItem({})]) {
|
|
31
|
+
return WorkPackage.create({
|
|
32
|
+
authToken: BytesBlob.blobFrom(new Uint8Array([1, 2, 3])),
|
|
33
|
+
authCodeHost: tryAsServiceId(42),
|
|
34
|
+
authCodeHash: Bytes.fill(HASH_SIZE, 9).asOpaque(),
|
|
35
|
+
authConfiguration: BytesBlob.blobFrom(new Uint8Array([4, 5, 6, 7])),
|
|
36
|
+
context: RefineContext.create({
|
|
37
|
+
anchor: Bytes.fill(HASH_SIZE, 1).asOpaque(),
|
|
38
|
+
stateRoot: Bytes.fill(HASH_SIZE, 2).asOpaque(),
|
|
39
|
+
beefyRoot: Bytes.fill(HASH_SIZE, 3).asOpaque(),
|
|
40
|
+
lookupAnchor: Bytes.fill(HASH_SIZE, 4).asOpaque(),
|
|
41
|
+
lookupAnchorSlot: tryAsTimeSlot(16),
|
|
42
|
+
prerequisites: [],
|
|
43
|
+
}),
|
|
44
|
+
items: FixedSizeArray.new(items, tryAsWorkItemsCount(items.length)),
|
|
45
|
+
});
|
|
46
|
+
}
|
|
47
|
+
describe("IsAuthorizedFetchExternalities", () => {
|
|
48
|
+
it("returns different constants for different chain specs", () => {
|
|
49
|
+
const tinyExt = new IsAuthorizedFetchExternalities(tinyChainSpec, fetchDataFor(buildPackage(), tinyChainSpec));
|
|
50
|
+
const fullExt = new IsAuthorizedFetchExternalities(fullChainSpec, fetchDataFor(buildPackage(), fullChainSpec));
|
|
51
|
+
assert.notStrictEqual(tinyExt.constants().length, 0);
|
|
52
|
+
assert.notDeepStrictEqual(tinyExt.constants(), fullExt.constants());
|
|
53
|
+
});
|
|
54
|
+
it("returns encoded work package", () => {
|
|
55
|
+
const pkg = buildPackage();
|
|
56
|
+
const ext = new IsAuthorizedFetchExternalities(tinyChainSpec, fetchDataFor(pkg));
|
|
57
|
+
const expected = Encoder.encodeObject(WorkPackage.Codec, pkg, tinyChainSpec);
|
|
58
|
+
assert.deepStrictEqual(ext.workPackage().raw, expected.raw);
|
|
59
|
+
});
|
|
60
|
+
it("returns auth configuration and auth token from the package", () => {
|
|
61
|
+
const ext = new IsAuthorizedFetchExternalities(tinyChainSpec, fetchDataFor(buildPackage()));
|
|
62
|
+
assert.deepStrictEqual(ext.authConfiguration().raw, new Uint8Array([4, 5, 6, 7]));
|
|
63
|
+
assert.deepStrictEqual(ext.authToken().raw, new Uint8Array([1, 2, 3]));
|
|
64
|
+
});
|
|
65
|
+
it("returns encoded refine context", () => {
|
|
66
|
+
const pkg = buildPackage();
|
|
67
|
+
const ext = new IsAuthorizedFetchExternalities(tinyChainSpec, fetchDataFor(pkg));
|
|
68
|
+
const expected = Encoder.encodeObject(RefineContext.Codec, pkg.context);
|
|
69
|
+
assert.deepStrictEqual(ext.refineContext().raw, expected.raw);
|
|
70
|
+
});
|
|
71
|
+
it("returns concatenated work item summaries with 62 bytes per item", () => {
|
|
72
|
+
const items = [buildWorkItem({ service: 1 }), buildWorkItem({ service: 2, payloadLen: 5 })];
|
|
73
|
+
const ext = new IsAuthorizedFetchExternalities(tinyChainSpec, fetchDataFor(buildPackage(items)));
|
|
74
|
+
assert.strictEqual(ext.allWorkItems().length, 62 * items.length);
|
|
75
|
+
});
|
|
76
|
+
it("returns a single work item summary (kind 12)", () => {
|
|
77
|
+
const items = [buildWorkItem({ service: 1 }), buildWorkItem({ service: 2, payloadLen: 10 })];
|
|
78
|
+
const ext = new IsAuthorizedFetchExternalities(tinyChainSpec, fetchDataFor(buildPackage(items)));
|
|
79
|
+
const one = ext.oneWorkItem(tryAsU64(1));
|
|
80
|
+
assert.ok(one !== null);
|
|
81
|
+
assert.strictEqual(one.length, 62);
|
|
82
|
+
const serviceId = new DataView(one.raw.buffer, one.raw.byteOffset, 4).getUint32(0, true);
|
|
83
|
+
assert.strictEqual(serviceId, 2);
|
|
84
|
+
});
|
|
85
|
+
it("returns null for one work item when index is out of range", () => {
|
|
86
|
+
const ext = new IsAuthorizedFetchExternalities(tinyChainSpec, fetchDataFor(buildPackage()));
|
|
87
|
+
assert.strictEqual(ext.oneWorkItem(tryAsU64(99)), null);
|
|
88
|
+
});
|
|
89
|
+
it("returns the raw payload of a work item (kind 13)", () => {
|
|
90
|
+
const items = [buildWorkItem({ service: 1, payloadLen: 2 }), buildWorkItem({ service: 2, payloadLen: 5 })];
|
|
91
|
+
const ext = new IsAuthorizedFetchExternalities(tinyChainSpec, fetchDataFor(buildPackage(items)));
|
|
92
|
+
const payload = ext.workItemPayload(tryAsU64(1));
|
|
93
|
+
assert.ok(payload !== null);
|
|
94
|
+
assert.strictEqual(payload.length, 5);
|
|
95
|
+
assert.ok(payload.raw.every((x) => x === 0xab));
|
|
96
|
+
});
|
|
97
|
+
it("returns null for payload when index is out of range", () => {
|
|
98
|
+
const ext = new IsAuthorizedFetchExternalities(tinyChainSpec, fetchDataFor(buildPackage()));
|
|
99
|
+
assert.strictEqual(ext.workItemPayload(tryAsU64(99)), null);
|
|
100
|
+
});
|
|
101
|
+
});
|
|
@@ -0,0 +1,51 @@
|
|
|
1
|
+
import type { EntropyHash, Segment, SegmentIndex } from "#@typeberry/block";
|
|
2
|
+
import type { WorkItemExtrinsic } from "#@typeberry/block/work-item.js";
|
|
3
|
+
import { type BytesBlob } from "#@typeberry/bytes";
|
|
4
|
+
import type { KnownSizeArray } from "#@typeberry/collections";
|
|
5
|
+
import type { ChainSpec } from "#@typeberry/config";
|
|
6
|
+
import { general } from "#@typeberry/jam-host-calls";
|
|
7
|
+
import type { U64 } from "#@typeberry/numbers";
|
|
8
|
+
import { type WorkPackageFetchData } from "#@typeberry/transition/externalities/fetch-externalities.js";
|
|
9
|
+
/** A single decoded import segment passed into refine. */
|
|
10
|
+
export type ImportedSegment = {
|
|
11
|
+
index: SegmentIndex;
|
|
12
|
+
data: Segment;
|
|
13
|
+
};
|
|
14
|
+
/** An array whose length matches the work-package's work-item count. */
|
|
15
|
+
export type PerWorkItem<T> = KnownSizeArray<T, "for each work item">;
|
|
16
|
+
export type RefineFetchData = {
|
|
17
|
+
/** Pre-computed per-work-package encodings. */
|
|
18
|
+
packageData: WorkPackageFetchData;
|
|
19
|
+
/** Index of the work item currently being refined (`i` in GP). */
|
|
20
|
+
currentWorkItemIndex: number;
|
|
21
|
+
/** Imports per work item (`ī`). */
|
|
22
|
+
imports: PerWorkItem<ImportedSegment[]>;
|
|
23
|
+
/** Extrinsics per work item (`x̄`). */
|
|
24
|
+
extrinsics: PerWorkItem<WorkItemExtrinsic[]>;
|
|
25
|
+
/** Authorizer trace produced by Is-Authorized (`r`). */
|
|
26
|
+
authorizerTrace: BytesBlob;
|
|
27
|
+
};
|
|
28
|
+
export declare class RefineFetchExternalities implements general.IRefineFetch {
|
|
29
|
+
private readonly chainSpec;
|
|
30
|
+
private readonly data;
|
|
31
|
+
readonly context = general.FetchContext.Refine;
|
|
32
|
+
constructor(chainSpec: ChainSpec, data: RefineFetchData);
|
|
33
|
+
constants(): BytesBlob;
|
|
34
|
+
/**
|
|
35
|
+
* Refine entropy is `H₀` (zero hash) per GP §B.3.
|
|
36
|
+
*
|
|
37
|
+
* https://graypaper.fluffylabs.dev/#/ab2cdbd/2fe0012fe201?v=0.7.2
|
|
38
|
+
*/
|
|
39
|
+
entropy(): EntropyHash;
|
|
40
|
+
authorizerTrace(): BytesBlob;
|
|
41
|
+
workItemExtrinsic(workItem: U64 | null, index: U64): BytesBlob | null;
|
|
42
|
+
workItemImport(workItem: U64 | null, index: U64): BytesBlob | null;
|
|
43
|
+
workPackage(): BytesBlob;
|
|
44
|
+
authConfiguration(): BytesBlob;
|
|
45
|
+
authToken(): BytesBlob;
|
|
46
|
+
refineContext(): BytesBlob;
|
|
47
|
+
allWorkItems(): BytesBlob;
|
|
48
|
+
oneWorkItem(workItem: U64): BytesBlob | null;
|
|
49
|
+
workItemPayload(workItem: U64): BytesBlob | null;
|
|
50
|
+
}
|
|
51
|
+
//# sourceMappingURL=refine-fetch.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"refine-fetch.d.ts","sourceRoot":"","sources":["../../../../../../packages/jam/in-core/externalities/refine-fetch.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,OAAO,EAAE,YAAY,EAAE,MAAM,kBAAkB,CAAC;AAC3E,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,+BAA+B,CAAC;AACvE,OAAO,EAAS,KAAK,SAAS,EAAE,MAAM,kBAAkB,CAAC;AACzD,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,wBAAwB,CAAC;AAC7D,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,mBAAmB,CAAC;AAEnD,OAAO,EAAE,OAAO,EAAE,MAAM,2BAA2B,CAAC;AACpD,OAAO,KAAK,EAAE,GAAG,EAAE,MAAM,oBAAoB,CAAC;AAC9C,OAAO,EAGL,KAAK,oBAAoB,EAC1B,MAAM,4DAA4D,CAAC;AAEpE,0DAA0D;AAC1D,MAAM,MAAM,eAAe,GAAG;IAC5B,KAAK,EAAE,YAAY,CAAC;IACpB,IAAI,EAAE,OAAO,CAAC;CACf,CAAC;AAEF,wEAAwE;AACxE,MAAM,MAAM,WAAW,CAAC,CAAC,IAAI,cAAc,CAAC,CAAC,EAAE,oBAAoB,CAAC,CAAC;AAErE,MAAM,MAAM,eAAe,GAAG;IAC5B,+CAA+C;IAC/C,WAAW,EAAE,oBAAoB,CAAC;IAClC,kEAAkE;IAClE,oBAAoB,EAAE,MAAM,CAAC;IAC7B,mCAAmC;IACnC,OAAO,EAAE,WAAW,CAAC,eAAe,EAAE,CAAC,CAAC;IACxC,uCAAuC;IACvC,UAAU,EAAE,WAAW,CAAC,iBAAiB,EAAE,CAAC,CAAC;IAC7C,wDAAwD;IACxD,eAAe,EAAE,SAAS,CAAC;CAC5B,CAAC;AAEF,qBAAa,wBAAyB,YAAW,OAAO,CAAC,YAAY;IAIjE,OAAO,CAAC,QAAQ,CAAC,SAAS;IAC1B,OAAO,CAAC,QAAQ,CAAC,IAAI;IAJvB,QAAQ,CAAC,OAAO,+BAA+B;gBAG5B,SAAS,EAAE,SAAS,EACpB,IAAI,EAAE,eAAe;IAGxC,SAAS,IAAI,SAAS;IAItB;;;;OAIG;IACH,OAAO,IAAI,WAAW;IAItB,eAAe,IAAI,SAAS;IAI5B,iBAAiB,CAAC,QAAQ,EAAE,GAAG,GAAG,IAAI,EAAE,KAAK,EAAE,GAAG,GAAG,SAAS,GAAG,IAAI;IAcrE,cAAc,CAAC,QAAQ,EAAE,GAAG,GAAG,IAAI,EAAE,KAAK,EAAE,GAAG,GAAG,SAAS,GAAG,IAAI;IAelE,WAAW,IAAI,SAAS;IAIxB,iBAAiB,IAAI,SAAS;IAI9B,SAAS,IAAI,SAAS;IAItB,aAAa,IAAI,SAAS;IAI1B,YAAY,IAAI,SAAS;IAIzB,WAAW,CAAC,QAAQ,EAAE,GAAG,GAAG,SAAS,GAAG,IAAI;IAM5C,eAAe,CAAC,QAAQ,EAAE,GAAG,GAAG,SAAS,GAAG,IAAI;CAQjD"}
|