@typeberry/lib 0.5.3 → 0.5.4-b101fe6
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/package.json +8 -4
- package/packages/core/hash/hash.d.ts.map +1 -1
- package/packages/core/hash/hash.js +1 -0
- package/packages/core/networking/certificate.d.ts.map +1 -1
- package/packages/core/networking/certificate.js +1 -0
- package/packages/core/networking/package.json +1 -1
- package/packages/core/networking/setup.d.ts.map +1 -1
- package/packages/core/networking/setup.js +16 -12
- package/packages/core/numbers/index.d.ts +4 -0
- package/packages/core/numbers/index.d.ts.map +1 -1
- package/packages/core/numbers/index.js +4 -4
- package/packages/core/pvm-host-calls/host-calls-executor.d.ts +23 -17
- package/packages/core/pvm-host-calls/host-calls-executor.d.ts.map +1 -1
- package/packages/core/pvm-host-calls/host-calls-executor.js +23 -31
- package/packages/core/pvm-interpreter/ops/math-consts.d.ts +2 -3
- package/packages/core/pvm-interpreter/ops/math-consts.d.ts.map +1 -1
- package/packages/core/pvm-interpreter/ops/math-consts.js +2 -3
- package/packages/core/pvm-interpreter/ops/math-ops.js +3 -3
- package/packages/core/pvm-interpreter/ops/math-utils.js +13 -13
- package/packages/core/pvm-interpreter/ops/math-utils.test.js +17 -16
- package/packages/core/telemetry/package.json +1 -1
- package/packages/core/utils/compatibility.d.ts +0 -1
- package/packages/core/utils/compatibility.d.ts.map +1 -1
- package/packages/core/utils/compatibility.js +1 -2
- package/packages/core/utils/compatibility.test.js +6 -10
- package/packages/extensions/ipc/jamnp/handler.d.ts +5 -4
- package/packages/extensions/ipc/jamnp/handler.d.ts.map +1 -1
- package/packages/extensions/ipc/jamnp/handler.js +59 -34
- package/packages/extensions/ipc/jamnp/stream.d.ts +6 -4
- package/packages/extensions/ipc/jamnp/stream.d.ts.map +1 -1
- package/packages/jam/block/work-item.d.ts +13 -4
- package/packages/jam/block/work-item.d.ts.map +1 -1
- package/packages/jam/block/work-package.d.ts +3 -1
- package/packages/jam/block/work-package.d.ts.map +1 -1
- package/packages/jam/block/work-package.js +6 -2
- package/packages/jam/block/work-result.d.ts +3 -5
- package/packages/jam/block/work-result.d.ts.map +1 -1
- package/packages/jam/block/work-result.js +6 -0
- package/packages/jam/block-json/block.d.ts +125 -0
- package/packages/jam/block-json/block.d.ts.map +1 -1
- package/packages/jam/block-json/block.js +9 -2
- package/packages/jam/block-json/work-result.d.ts.map +1 -1
- package/packages/jam/block-json/work-result.js +6 -6
- package/packages/jam/database-lmdb/states.test.js +2 -3
- package/packages/jam/executor/index.d.ts +4 -0
- package/packages/jam/executor/index.d.ts.map +1 -0
- package/packages/jam/executor/index.js +2 -0
- package/packages/jam/{transition/accumulate → executor}/pvm-executor.d.ts +19 -16
- package/packages/jam/executor/pvm-executor.d.ts.map +1 -0
- package/packages/jam/{transition/accumulate → executor}/pvm-executor.js +46 -3
- package/packages/jam/fuzz-proto/v1/handler.d.ts +1 -1
- package/packages/jam/fuzz-proto/v1/handler.d.ts.map +1 -1
- package/packages/jam/fuzz-proto/v1/handler.js +43 -19
- package/packages/jam/in-core/externalities/refine.d.ts +24 -0
- package/packages/jam/in-core/externalities/refine.d.ts.map +1 -0
- package/packages/jam/in-core/externalities/refine.js +36 -0
- package/packages/jam/in-core/in-core.d.ts +60 -0
- package/packages/jam/in-core/in-core.d.ts.map +1 -0
- package/packages/jam/in-core/in-core.js +294 -0
- package/packages/jam/in-core/in-core.test.d.ts +2 -0
- package/packages/jam/in-core/in-core.test.d.ts.map +1 -0
- package/packages/jam/in-core/in-core.test.js +81 -0
- package/packages/jam/in-core/index.d.ts +2 -0
- package/packages/jam/in-core/index.d.ts.map +1 -0
- package/packages/jam/in-core/index.js +1 -0
- package/packages/jam/jam-host-calls/accumulate/bless.d.ts.map +1 -1
- package/packages/jam/jam-host-calls/accumulate/bless.js +6 -10
- package/packages/jam/jam-host-calls/accumulate/bless.test.js +32 -73
- package/packages/jam/jam-host-calls/accumulate/new.d.ts.map +1 -1
- package/packages/jam/jam-host-calls/accumulate/new.js +2 -4
- package/packages/jam/jam-host-calls/accumulate/new.test.js +4 -5
- package/packages/jam/jam-host-calls/general/fetch.d.ts +1 -57
- package/packages/jam/jam-host-calls/general/fetch.d.ts.map +1 -1
- package/packages/jam/jam-host-calls/general/fetch.js +6 -29
- package/packages/jam/jam-host-calls/general/fetch.test.js +2 -58
- package/packages/jam/jamnp-s/peers.d.ts.map +1 -1
- package/packages/jam/jamnp-s/peers.js +10 -0
- package/packages/jam/jamnp-s/protocol/ce-128-block-request.d.ts +1 -1
- 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 +10 -8
- 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 +11 -9
- package/packages/jam/jamnp-s/protocol/ce-131-ce-132-safrole-ticket-distribution.d.ts +3 -3
- 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 +2 -2
- package/packages/jam/jamnp-s/protocol/ce-133-work-package-submission.d.ts +5 -5
- 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 +2 -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 +8 -6
- package/packages/jam/jamnp-s/protocol/ce-135-work-report-distribution.d.ts +3 -3
- 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 +2 -2
- package/packages/jam/jamnp-s/protocol/ce-135-work-report-distribution.test.js +2 -2
- package/packages/jam/jamnp-s/protocol/stream.d.ts +13 -7
- package/packages/jam/jamnp-s/protocol/stream.d.ts.map +1 -1
- package/packages/jam/jamnp-s/protocol/stream.js +5 -4
- package/packages/jam/jamnp-s/protocol/test-utils.d.ts +1 -1
- package/packages/jam/jamnp-s/protocol/test-utils.d.ts.map +1 -1
- package/packages/jam/jamnp-s/protocol/test-utils.js +9 -12
- package/packages/jam/jamnp-s/protocol/up-0-block-announcement.d.ts +1 -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 +1 -1
- package/packages/jam/jamnp-s/stream-manager.d.ts.map +1 -1
- package/packages/jam/jamnp-s/stream-manager.js +7 -5
- package/packages/jam/jamnp-s/stream-manager.test.js +8 -5
- package/packages/jam/jamnp-s/tasks/sync.js +1 -1
- package/packages/jam/node/jam-config.d.ts +4 -1
- package/packages/jam/node/jam-config.d.ts.map +1 -1
- package/packages/jam/node/jam-config.js +6 -2
- package/packages/jam/node/main.d.ts.map +1 -1
- package/packages/jam/node/main.js +5 -4
- package/packages/jam/node/package.json +1 -1
- package/packages/jam/rpc-validation/types.d.ts +7 -3
- package/packages/jam/rpc-validation/types.d.ts.map +1 -1
- package/packages/jam/rpc-validation/validation.d.ts +254 -36
- package/packages/jam/rpc-validation/validation.d.ts.map +1 -1
- package/packages/jam/rpc-validation/validation.js +20 -2
- package/packages/jam/state/in-memory-state.d.ts.map +1 -1
- package/packages/jam/state/in-memory-state.js +2 -3
- package/packages/jam/state/privileged-services.d.ts +1 -1
- package/packages/jam/state/privileged-services.d.ts.map +1 -1
- package/packages/jam/state/privileged-services.js +1 -6
- package/packages/jam/state/service.d.ts +1 -1
- package/packages/jam/state/service.d.ts.map +1 -1
- package/packages/jam/state/statistics.d.ts +0 -8
- package/packages/jam/state/statistics.d.ts.map +1 -1
- package/packages/jam/state/statistics.js +14 -44
- package/packages/jam/state/statistics.test.js +1 -8
- package/packages/jam/state/test.utils.d.ts +1 -1
- package/packages/jam/state/test.utils.d.ts.map +1 -1
- package/packages/jam/state/test.utils.js +6 -25
- package/packages/jam/state-json/accounts.d.ts +10 -0
- package/packages/jam/state-json/accounts.d.ts.map +1 -1
- package/packages/jam/state-json/accounts.js +47 -19
- package/packages/jam/state-json/dump.d.ts.map +1 -1
- package/packages/jam/state-json/dump.js +5 -9
- package/packages/jam/state-json/dump.test.js +2 -10
- package/packages/jam/state-json/statistics.d.ts +1 -1
- package/packages/jam/state-json/statistics.d.ts.map +1 -1
- package/packages/jam/state-json/statistics.js +1 -13
- package/packages/jam/state-merkleization/in-memory-state-codec.d.ts +0 -2
- package/packages/jam/state-merkleization/in-memory-state-codec.d.ts.map +1 -1
- package/packages/jam/state-merkleization/serialize.d.ts +4 -4
- package/packages/jam/state-merkleization/serialize.d.ts.map +1 -1
- package/packages/jam/state-merkleization/serialize.js +5 -8
- package/packages/jam/state-merkleization/serialized-state-view.d.ts.map +1 -1
- package/packages/jam/state-merkleization/state-entries.test.js +1 -7
- package/packages/jam/state-vectors/index.d.ts +377 -5
- package/packages/jam/state-vectors/index.d.ts.map +1 -1
- package/packages/jam/state-vectors/index.js +3 -3
- package/packages/jam/transition/accumulate/accumulate-data.d.ts.map +1 -1
- package/packages/jam/transition/accumulate/accumulate-data.js +1 -2
- package/packages/jam/transition/accumulate/accumulate-queue.test.js +2 -2
- package/packages/jam/transition/accumulate/accumulate-state.d.ts +1 -2
- package/packages/jam/transition/accumulate/accumulate-state.d.ts.map +1 -1
- package/packages/jam/transition/accumulate/accumulate-utils.d.ts.map +1 -1
- package/packages/jam/transition/accumulate/accumulate-utils.js +2 -6
- package/packages/jam/transition/accumulate/accumulate-utils.test.js +4 -6
- package/packages/jam/transition/accumulate/accumulate.d.ts.map +1 -1
- package/packages/jam/transition/accumulate/accumulate.js +19 -33
- package/packages/jam/transition/accumulate/accumulate.test.js +2 -2
- package/packages/jam/transition/accumulate/accumulation-result-merge-utils.d.ts.map +1 -1
- package/packages/jam/transition/accumulate/accumulation-result-merge-utils.js +1 -2
- package/packages/jam/transition/accumulate/accumulation-result-merge-utils.test.js +1 -2
- package/packages/jam/transition/accumulate/index.d.ts +0 -1
- package/packages/jam/transition/accumulate/index.d.ts.map +1 -1
- package/packages/jam/transition/accumulate/index.js +0 -1
- package/packages/jam/transition/chain-stf.d.ts +3 -5
- package/packages/jam/transition/chain-stf.d.ts.map +1 -1
- package/packages/jam/transition/chain-stf.js +5 -29
- package/packages/jam/transition/disputes/disputes.test.data2.js +2 -2
- package/packages/jam/transition/externalities/accumulate-externalities.d.ts.map +1 -1
- package/packages/jam/transition/externalities/accumulate-externalities.js +22 -49
- package/packages/jam/transition/externalities/accumulate-externalities.test.js +8 -72
- package/packages/jam/transition/externalities/fetch-externalities.d.ts +8 -21
- package/packages/jam/transition/externalities/fetch-externalities.d.ts.map +1 -1
- package/packages/jam/transition/externalities/fetch-externalities.js +5 -53
- package/packages/jam/transition/externalities/fetch-externalities.test.js +201 -114
- package/packages/jam/transition/hasher.test.js +2 -2
- package/packages/jam/transition/reports/error.d.ts +3 -1
- package/packages/jam/transition/reports/error.d.ts.map +1 -1
- package/packages/jam/transition/reports/error.js +2 -0
- package/packages/jam/transition/reports/test.utils.d.ts.map +1 -1
- package/packages/jam/transition/reports/test.utils.js +2 -2
- package/packages/jam/transition/reports/verify-basic.d.ts.map +1 -1
- package/packages/jam/transition/reports/verify-basic.js +10 -0
- package/packages/jam/transition/reports/verify-basic.test.js +29 -0
- package/packages/jam/transition/statistics.d.ts +0 -7
- package/packages/jam/transition/statistics.d.ts.map +1 -1
- package/packages/jam/transition/statistics.js +2 -11
- package/packages/jam/transition/statistics.test.js +0 -40
- package/packages/workers/block-authorship/main.d.ts.map +1 -1
- package/packages/workers/block-authorship/main.js +23 -4
- package/packages/workers/block-authorship/package.json +1 -1
- package/packages/workers/block-authorship/protocol.d.ts +3 -1
- package/packages/workers/block-authorship/protocol.d.ts.map +1 -1
- package/packages/workers/block-authorship/protocol.js +6 -3
- package/packages/workers/importer/importer.d.ts.map +1 -1
- package/packages/workers/importer/importer.js +0 -1
- package/packages/workers/importer/package.json +1 -1
- package/packages/jam/transition/accumulate/deferred-transfers.d.ts +0 -36
- package/packages/jam/transition/accumulate/deferred-transfers.d.ts.map +0 -1
- package/packages/jam/transition/accumulate/deferred-transfers.js +0 -95
- package/packages/jam/transition/accumulate/pvm-executor.d.ts.map +0 -1
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@typeberry/lib",
|
|
3
|
-
"version": "0.5.
|
|
3
|
+
"version": "0.5.4-b101fe6",
|
|
4
4
|
"description": "Typeberry Library",
|
|
5
5
|
"main": "./bin/lib/index.js",
|
|
6
6
|
"types": "./bin/lib/index.d.ts",
|
|
@@ -218,8 +218,12 @@
|
|
|
218
218
|
"#@typeberry/database/*": "./packages/jam/database/*",
|
|
219
219
|
"#@typeberry/database-lmdb": "./packages/jam/database-lmdb/index.js",
|
|
220
220
|
"#@typeberry/database-lmdb/*": "./packages/jam/database-lmdb/*",
|
|
221
|
+
"#@typeberry/executor": "./packages/jam/executor/index.js",
|
|
222
|
+
"#@typeberry/executor/*": "./packages/jam/executor/*",
|
|
221
223
|
"#@typeberry/fuzz-proto": "./packages/jam/fuzz-proto/index.js",
|
|
222
224
|
"#@typeberry/fuzz-proto/*": "./packages/jam/fuzz-proto/*",
|
|
225
|
+
"#@typeberry/in-core": "./packages/jam/in-core/index.js",
|
|
226
|
+
"#@typeberry/in-core/*": "./packages/jam/in-core/*",
|
|
223
227
|
"#@typeberry/jam-host-calls": "./packages/jam/jam-host-calls/index.js",
|
|
224
228
|
"#@typeberry/jam-host-calls/*": "./packages/jam/jam-host-calls/*",
|
|
225
229
|
"#@typeberry/jamnp-s": "./packages/jam/jamnp-s/index.js",
|
|
@@ -238,6 +242,8 @@
|
|
|
238
242
|
"#@typeberry/state-json/*": "./packages/jam/state-json/*",
|
|
239
243
|
"#@typeberry/state-merkleization": "./packages/jam/state-merkleization/index.js",
|
|
240
244
|
"#@typeberry/state-merkleization/*": "./packages/jam/state-merkleization/*",
|
|
245
|
+
"#@typeberry/state-vectors": "./packages/jam/state-vectors/index.js",
|
|
246
|
+
"#@typeberry/state-vectors/*": "./packages/jam/state-vectors/*",
|
|
241
247
|
"#@typeberry/transition": "./packages/jam/transition/index.js",
|
|
242
248
|
"#@typeberry/transition/*": "./packages/jam/transition/*",
|
|
243
249
|
"#@typeberry/disputes": "./packages/jam/transition/disputes/index.js",
|
|
@@ -253,9 +259,7 @@
|
|
|
253
259
|
"#@typeberry/importer": "./packages/workers/importer/index.js",
|
|
254
260
|
"#@typeberry/importer/*": "./packages/workers/importer/*",
|
|
255
261
|
"#@typeberry/jam-network": "./packages/workers/jam-network/index.js",
|
|
256
|
-
"#@typeberry/jam-network/*": "./packages/workers/jam-network/*"
|
|
257
|
-
"#@typeberry/state-vectors": "./packages/jam/state-vectors/index.js",
|
|
258
|
-
"#@typeberry/state-vectors/*": "./packages/jam/state-vectors/*"
|
|
262
|
+
"#@typeberry/jam-network/*": "./packages/workers/jam-network/*"
|
|
259
263
|
},
|
|
260
264
|
"dependencies": {
|
|
261
265
|
"@fluffylabs/anan-as": "^1.1.5",
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"hash.d.ts","sourceRoot":"","sources":["../../../../../packages/core/hash/hash.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,KAAK,SAAS,EAAE,MAAM,kBAAkB,CAAC;AACzD,OAAO,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAC;AAE7C;;;;;GAKG;AACH,eAAO,MAAM,SAAS,KAAK,CAAC;AAC5B,MAAM,MAAM,SAAS,GAAG,OAAO,SAAS,CAAC;AAEzC,iEAAiE;AACjE,eAAO,MAAM,mBAAmB,KAAK,CAAC;AACtC,MAAM,MAAM,mBAAmB,GAAG,OAAO,mBAAmB,CAAC;AAE7D,4BAA4B;AAC5B,MAAM,MAAM,UAAU,GAAG,KAAK,CAAC,SAAS,CAAC,CAAC;AAE1C,sBAAsB;AACtB,MAAM,MAAM,WAAW,GAAG,KAAK,CAAC,SAAS,CAAC,CAAC;AAE3C,yBAAyB;AACzB,MAAM,MAAM,UAAU,GAAG,KAAK,CAAC,SAAS,CAAC,CAAC;AAE1C,sBAAsB;AACtB,MAAM,MAAM,aAAa,GAAG,KAAK,CAAC,mBAAmB,CAAC,CAAC;AAEvD,eAAO,MAAM,SAAS,WAAwB,CAAC;AAE/C;;;;;GAKG;AACH,qBAAa,QAAQ,CAAC,KAAK,SAAS,UAAU,EAAE,KAAK,CAAE,SAAQ,SAAS;
|
|
1
|
+
{"version":3,"file":"hash.d.ts","sourceRoot":"","sources":["../../../../../packages/core/hash/hash.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,KAAK,SAAS,EAAE,MAAM,kBAAkB,CAAC;AACzD,OAAO,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAC;AAE7C;;;;;GAKG;AACH,eAAO,MAAM,SAAS,KAAK,CAAC;AAC5B,MAAM,MAAM,SAAS,GAAG,OAAO,SAAS,CAAC;AAEzC,iEAAiE;AACjE,eAAO,MAAM,mBAAmB,KAAK,CAAC;AACtC,MAAM,MAAM,mBAAmB,GAAG,OAAO,mBAAmB,CAAC;AAE7D,4BAA4B;AAC5B,MAAM,MAAM,UAAU,GAAG,KAAK,CAAC,SAAS,CAAC,CAAC;AAE1C,sBAAsB;AACtB,MAAM,MAAM,WAAW,GAAG,KAAK,CAAC,SAAS,CAAC,CAAC;AAE3C,yBAAyB;AACzB,MAAM,MAAM,UAAU,GAAG,KAAK,CAAC,SAAS,CAAC,CAAC;AAE1C,sBAAsB;AACtB,MAAM,MAAM,aAAa,GAAG,KAAK,CAAC,mBAAmB,CAAC,CAAC;AAEvD,eAAO,MAAM,SAAS,WAAwB,CAAC;AAE/C;;;;;GAKG;AACH,qBAAa,QAAQ,CAAC,KAAK,SAAS,UAAU,EAAE,KAAK,CAAE,SAAQ,SAAS;aAGpD,IAAI,EAAE,KAAK;aACX,IAAI,EAAE,KAAK;gBADX,IAAI,EAAE,KAAK,EACX,IAAI,EAAE,KAAK;CAI9B;AAED;;GAEG;AACH,qBAAa,gBAAgB,CAAC,KAAK,SAAS,UAAU,EAAE,KAAK,CAAE,SAAQ,QAAQ,CAAC,KAAK,EAAE,KAAK,CAAC;aAIzE,OAAO,EAAE,SAAS;gBAFlC,IAAI,EAAE,KAAK,EACX,IAAI,EAAE,KAAK,EACK,OAAO,EAAE,SAAS;CAIrC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"certificate.d.ts","sourceRoot":"","sources":["../../../../../packages/core/networking/certificate.ts"],"names":[],"mappings":"AAAA,OAAe,EAAE,KAAK,UAAU,EAAE,MAAM,aAAa,CAAC;AAGtD,OAAO,KAAK,IAAI,MAAM,gBAAgB,CAAC;AACvC,OAAO,EAAS,SAAS,EAAE,MAAM,kBAAkB,CAAC;AACpD,OAAO,EAAqB,KAAK,UAAU,EAAE,KAAK,OAAO,EAAE,MAAM,mBAAmB,CAAC;AAErF,OAAO,EAAgB,MAAM,EAAE,MAAM,kBAAkB,CAAC;AAExD,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,YAAY,CAAC;AAezC,oBAAY,eAAe;IACzB,aAAa,IAAI;IACjB,UAAU,IAAI;IACd,qBAAqB,IAAI;IACzB,eAAe,IAAI;IACnB,kBAAkB,IAAI;CACvB;AAED,MAAM,MAAM,QAAQ,GAAG;IACrB,EAAE,EAAE,MAAM,CAAC;IACX,GAAG,EAAE,UAAU,CAAC;CACjB,CAAC;AAEF,wBAAsB,iBAAiB,CAAC,KAAK,EAAE,UAAU,EAAE,GAAG,OAAO,CAAC,MAAM,CAAC,QAAQ,EAAE,eAAe,CAAC,CAAC,
|
|
1
|
+
{"version":3,"file":"certificate.d.ts","sourceRoot":"","sources":["../../../../../packages/core/networking/certificate.ts"],"names":[],"mappings":"AAAA,OAAe,EAAE,KAAK,UAAU,EAAE,MAAM,aAAa,CAAC;AAGtD,OAAO,KAAK,IAAI,MAAM,gBAAgB,CAAC;AACvC,OAAO,EAAS,SAAS,EAAE,MAAM,kBAAkB,CAAC;AACpD,OAAO,EAAqB,KAAK,UAAU,EAAE,KAAK,OAAO,EAAE,MAAM,mBAAmB,CAAC;AAErF,OAAO,EAAgB,MAAM,EAAE,MAAM,kBAAkB,CAAC;AAExD,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,YAAY,CAAC;AAezC,oBAAY,eAAe;IACzB,aAAa,IAAI;IACjB,UAAU,IAAI;IACd,qBAAqB,IAAI;IACzB,eAAe,IAAI;IACnB,kBAAkB,IAAI;CACvB;AAED,MAAM,MAAM,QAAQ,GAAG;IACrB,EAAE,EAAE,MAAM,CAAC;IACX,GAAG,EAAE,UAAU,CAAC;CACjB,CAAC;AAEF,wBAAsB,iBAAiB,CAAC,KAAK,EAAE,UAAU,EAAE,GAAG,OAAO,CAAC,MAAM,CAAC,QAAQ,EAAE,eAAe,CAAC,CAAC,CAyDvG;AAED,wBAAsB,sBAAsB,IAAI,OAAO,CAAC;IACtD,SAAS,EAAE,UAAU,CAAC;IACtB,UAAU,EAAE,UAAU,CAAC;CACxB,CAAC,CAcD;AAED,wBAAsB,eAAe,CAAC,OAAO,EAAE,cAAc,mBAQ5D;AAED,wFAAwF;AACxF,wBAAsB,mBAAmB,CAAC,EACxC,MAAM,EACN,cAAc,EACd,aAAa,EACb,iBAAsB,EACtB,gBAAqB,EACrB,GAAgB,GACjB,EAAE;IACD,MAAM,EAAE,SAAS,CAAC;IAClB,cAAc,EAAE,cAAc,CAAC;IAC/B,aAAa,EAAE,cAAc,CAAC;IAC9B,iBAAiB,CAAC,EAAE,KAAK,CAAC;QAAE,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,EAAE,CAAA;KAAE,CAAC,CAAC;IACvD,gBAAgB,CAAC,EAAE,KAAK,CAAC;QAAE,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,EAAE,CAAA;KAAE,CAAC,CAAC;IACtD,GAAG,CAAC,EAAE,IAAI,CAAC;CACZ,GAAG,OAAO,CAAC,IAAI,CAAC,eAAe,CAAC,CA6EhC;AAED,wBAAgB,UAAU,CAAC,aAAa,EAAE,SAAS,UAElD;AACD,wBAAgB,UAAU,CAAC,aAAa,EAAE,UAAU,UAGnD;AA4BD,wBAAgB,SAAS,CAAC,IAAI,EAAE,IAAI,CAAC,eAAe,UAEnD;AAED,MAAM,MAAM,cAAc,GAAG;IAC3B,SAAS,EAAE,UAAU,CAAC;IACtB,UAAU,EAAE,UAAU,CAAC;CACxB,CAAC;AAEF,wBAAgB,uBAAuB,CAAC,OAAO,EAAE,OAAO,CAAC,WAAW,GAAG,cAAc,CAkBpF"}
|
|
@@ -54,6 +54,7 @@ export async function verifyCertificate(certs) {
|
|
|
54
54
|
}
|
|
55
55
|
const key = Buffer.from(jwk.x ?? "", "base64url");
|
|
56
56
|
if (!xc.verify(xc.publicKey)) {
|
|
57
|
+
logger.log `Certificate validation failed: incorrect signature`;
|
|
57
58
|
return Result.error(VerifyCertError.IncorrectSignature, () => "Certificate validation failed: incorrect signature");
|
|
58
59
|
}
|
|
59
60
|
const publicKey = Bytes.fromBlob(new Uint8Array(key), ED25519_KEY_BYTES);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"setup.d.ts","sourceRoot":"","sources":["../../../../../packages/core/networking/setup.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,8BAA8B,CAAC;
|
|
1
|
+
{"version":3,"file":"setup.d.ts","sourceRoot":"","sources":["../../../../../packages/core/networking/setup.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,8BAA8B,CAAC;AAiBhE,OAAO,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAMhD,sCAAsC;AACtC,MAAM,MAAM,OAAO,GAAG;IACpB,yBAAyB;IACzB,GAAG,EAAE,WAAW,CAAC;IACjB,kCAAkC;IAClC,IAAI,EAAE,MAAM,CAAC;IACb,6CAA6C;IAC7C,IAAI,EAAE,MAAM,CAAC;IACb,iFAAiF;IACjF,SAAS,EAAE,MAAM,EAAE,CAAC;CACrB,CAAC;AAQF,qBAAa,IAAI;IACf,6DAA6D;WAChD,KAAK,CAAC,EAAE,IAAI,EAAE,IAAI,EAAE,SAAS,EAAE,GAAG,EAAE,EAAE,OAAO,GAAG,OAAO,CAAC,WAAW,CAAC;CAsKlF"}
|
|
@@ -3,7 +3,7 @@ import { events, QUICClient, QUICServer, QUICSocket } from "@matrixai/quic";
|
|
|
3
3
|
import { BytesBlob } from "#@typeberry/bytes";
|
|
4
4
|
import { Level, Logger } from "#@typeberry/logger";
|
|
5
5
|
import { now } from "#@typeberry/utils";
|
|
6
|
-
import { altNameRaw, certToPEM, ed25519AsJsonWebKeyPair, generateCertificate, privateKeyToPEM, } from "./certificate.js";
|
|
6
|
+
import { altNameRaw, certToPEM, ed25519AsJsonWebKeyPair, generateCertificate, privateKeyToPEM, verifyCertificate, } from "./certificate.js";
|
|
7
7
|
import { getQuicClientCrypto, getQuicServerCrypto } from "./crypto.js";
|
|
8
8
|
import * as metrics from "./metrics.js";
|
|
9
9
|
import { peerVerification } from "./peer-verification.js";
|
|
@@ -34,7 +34,6 @@ export class Quic {
|
|
|
34
34
|
subjectKeyPair: keyPair,
|
|
35
35
|
issuerKeyPair: keyPair,
|
|
36
36
|
});
|
|
37
|
-
const lastConnectedPeer = peerVerification();
|
|
38
37
|
// QUICConfig
|
|
39
38
|
const config = {
|
|
40
39
|
keepAliveIntervalTime: 3000,
|
|
@@ -43,7 +42,9 @@ export class Quic {
|
|
|
43
42
|
cert: certToPEM(cert),
|
|
44
43
|
key: privKeyPEM,
|
|
45
44
|
verifyPeer: true,
|
|
46
|
-
|
|
45
|
+
// Server accepts TLS and verifies the certificate in the connection handler
|
|
46
|
+
// (EventQUICServerConnection). Client overrides this with peerVerification() per dial.
|
|
47
|
+
verifyCallback: async () => undefined,
|
|
47
48
|
};
|
|
48
49
|
logger.info `🆔 Peer id: ** ${altNameRaw(key.pubKey)}@${host}:${port} ** (pubkey: ${key.pubKey})`;
|
|
49
50
|
// Shared injected UDP socket
|
|
@@ -67,27 +68,30 @@ export class Quic {
|
|
|
67
68
|
const conn = ev.detail;
|
|
68
69
|
const peerAddress = `${conn.remoteHost}:${conn.remotePort}`;
|
|
69
70
|
networkMetrics.recordConnectingIn(peerAddress);
|
|
70
|
-
|
|
71
|
-
|
|
71
|
+
// Verify the peer's certificate and extract peer info.
|
|
72
|
+
const remoteCerts = conn.getRemoteCertsChain();
|
|
73
|
+
const verification = await verifyCertificate(remoteCerts);
|
|
74
|
+
if (verification.isError) {
|
|
75
|
+
networkMetrics.recordConnectInFailed("cert_verification_failed");
|
|
72
76
|
await conn.stop();
|
|
73
77
|
return;
|
|
74
78
|
}
|
|
75
|
-
|
|
79
|
+
const peerInfo = verification.ok;
|
|
80
|
+
if (peerInfo.key.isEqualTo(key.pubKey)) {
|
|
76
81
|
logger.log `🛜 Rejecting connection from ourself from ${conn.remoteHost}:${conn.remotePort}`;
|
|
77
82
|
networkMetrics.recordConnectionRefused(peerAddress);
|
|
78
83
|
await conn.stop({ isApp: true, errorCode: CloseReason.ConnectionFromOurself });
|
|
79
84
|
return;
|
|
80
85
|
}
|
|
81
|
-
if (peers.isConnected(
|
|
82
|
-
logger.log `🛜 Rejecting duplicate connection with peer ${
|
|
86
|
+
if (peers.isConnected(peerInfo.id)) {
|
|
87
|
+
logger.log `🛜 Rejecting duplicate connection with peer ${peerInfo.id} from ${conn.remoteHost}:${conn.remotePort}`;
|
|
83
88
|
networkMetrics.recordConnectionRefused(peerAddress);
|
|
84
|
-
await conn.stop({ isApp: true, errorCode: CloseReason.DuplicateConnection });
|
|
89
|
+
await conn.stop({ isApp: true, errorCode: CloseReason.DuplicateConnection, force: false });
|
|
85
90
|
return;
|
|
86
91
|
}
|
|
87
92
|
logger.log `🛜 Server handshake with ${conn.remoteHost}:${conn.remotePort}`;
|
|
88
|
-
newPeer(conn,
|
|
89
|
-
networkMetrics.recordConnectedIn(
|
|
90
|
-
lastConnectedPeer.info = null;
|
|
93
|
+
newPeer(conn, peerInfo, "in");
|
|
94
|
+
networkMetrics.recordConnectedIn(peerInfo.id);
|
|
91
95
|
await conn.start();
|
|
92
96
|
});
|
|
93
97
|
// connecting to a peer
|
|
@@ -5,12 +5,16 @@ export type WithBytesRepresentation<Bytes extends number> = {
|
|
|
5
5
|
export type FixedSizeNumber<Bytes extends number> = number & WithBytesRepresentation<Bytes>;
|
|
6
6
|
/** Unsigned integer that can be represented as one byte. */
|
|
7
7
|
export type U8 = FixedSizeNumber<1>;
|
|
8
|
+
export declare const MAX_VALUE_U8 = 255;
|
|
8
9
|
/** Unsigned integer that can be represented as two bytes. */
|
|
9
10
|
export type U16 = FixedSizeNumber<2>;
|
|
11
|
+
export declare const MAX_VALUE_U16 = 65535;
|
|
10
12
|
/** Unsigned integer that can be represented as 4 bytes. */
|
|
11
13
|
export type U32 = FixedSizeNumber<4>;
|
|
14
|
+
export declare const MAX_VALUE_U32 = 4294967295;
|
|
12
15
|
/** Unsigned integer that can be represented as 8 bytes. */
|
|
13
16
|
export type U64 = bigint & WithBytesRepresentation<8>;
|
|
17
|
+
export declare const MAX_VALUE_U64 = 18446744073709551615n;
|
|
14
18
|
/** Attempt to cast an input number into U8. */
|
|
15
19
|
export declare const tryAsU8: (v: number) => U8;
|
|
16
20
|
/** Check if given number is a valid U8 number. */
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../../packages/core/numbers/index.ts"],"names":[],"mappings":"AAEA,MAAM,CAAC,OAAO,CAAC,MAAM,wBAAwB,EAAE,OAAO,MAAM,CAAC;AAE7D,MAAM,MAAM,uBAAuB,CAAC,KAAK,SAAS,MAAM,IAAI;IAC1D,QAAQ,CAAC,CAAC,wBAAwB,CAAC,EAAE,KAAK,CAAC;CAC5C,CAAC;AAKF,MAAM,MAAM,eAAe,CAAC,KAAK,SAAS,MAAM,IAAI,MAAM,GAAG,uBAAuB,CAAC,KAAK,CAAC,CAAC;AAE5F,4DAA4D;AAC5D,MAAM,MAAM,EAAE,GAAG,eAAe,CAAC,CAAC,CAAC,CAAC;
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../../packages/core/numbers/index.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
import { check } from "#@typeberry/utils";
|
|
2
2
|
const asTypedNumber = (v) => v;
|
|
3
|
-
const MAX_VALUE_U8 = 0xff;
|
|
4
|
-
const MAX_VALUE_U16 = 0xffff;
|
|
5
|
-
const MAX_VALUE_U32 = 0xffff_ffff;
|
|
6
|
-
const MAX_VALUE_U64 = 0xffffffffffffffffn;
|
|
3
|
+
export const MAX_VALUE_U8 = 0xff;
|
|
4
|
+
export const MAX_VALUE_U16 = 0xffff;
|
|
5
|
+
export const MAX_VALUE_U32 = 0xffff_ffff;
|
|
6
|
+
export const MAX_VALUE_U64 = 0xffffffffffffffffn;
|
|
7
7
|
/** Attempt to cast an input number into U8. */
|
|
8
8
|
export const tryAsU8 = (v) => {
|
|
9
9
|
check `${isU8(v)} input must have one-byte representation, got ${v}`;
|
|
@@ -1,23 +1,30 @@
|
|
|
1
|
-
import { type Gas
|
|
1
|
+
import { type Gas } from "#@typeberry/pvm-interface";
|
|
2
2
|
import { EcalliTraceLogger } from "./ecalli-trace-logger.js";
|
|
3
3
|
import type { HostCalls } from "./host-calls.js";
|
|
4
4
|
import type { PvmInstanceManager } from "./pvm-instance-manager.js";
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
};
|
|
5
|
+
/**
|
|
6
|
+
* Outer VM return status.
|
|
7
|
+
*
|
|
8
|
+
* This is a limited status returned by outer VM.
|
|
9
|
+
*
|
|
10
|
+
* https://graypaper.fluffylabs.dev/#/ab2cdbd/24a10124a101?v=0.7.2
|
|
11
|
+
*/
|
|
12
|
+
export declare enum ReturnStatus {
|
|
13
|
+
/** Execution succesful. */
|
|
14
|
+
OK = 0,
|
|
15
|
+
/** Execution went out of gas. */
|
|
16
|
+
OOG = 1,
|
|
17
|
+
/** Execution trapped or panicked. */
|
|
18
|
+
PANIC = 2
|
|
20
19
|
}
|
|
20
|
+
export type ReturnValue<TGas = Gas> = {
|
|
21
|
+
consumedGas: TGas;
|
|
22
|
+
} & ({
|
|
23
|
+
status: ReturnStatus.OK;
|
|
24
|
+
memorySlice: Uint8Array;
|
|
25
|
+
} | {
|
|
26
|
+
status: ReturnStatus.OOG | ReturnStatus.PANIC;
|
|
27
|
+
});
|
|
21
28
|
export declare class HostCallsExecutor {
|
|
22
29
|
private pvmInstanceManager;
|
|
23
30
|
private hostCalls;
|
|
@@ -27,5 +34,4 @@ export declare class HostCallsExecutor {
|
|
|
27
34
|
private execute;
|
|
28
35
|
runProgram(program: Uint8Array, args: Uint8Array, initialPc: number, initialGas: Gas): Promise<ReturnValue>;
|
|
29
36
|
}
|
|
30
|
-
export {};
|
|
31
37
|
//# sourceMappingURL=host-calls-executor.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"host-calls-executor.d.ts","sourceRoot":"","sources":["../../../../../packages/core/pvm-host-calls/host-calls-executor.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,GAAG,
|
|
1
|
+
{"version":3,"file":"host-calls-executor.d.ts","sourceRoot":"","sources":["../../../../../packages/core/pvm-host-calls/host-calls-executor.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,GAAG,EAAgC,MAAM,0BAA0B,CAAC;AAElF,OAAO,EAAE,iBAAiB,EAAE,MAAM,0BAA0B,CAAC;AAI7D,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AACjD,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,2BAA2B,CAAC;AAEpE;;;;;;GAMG;AACH,oBAAY,YAAY;IACtB,2BAA2B;IAC3B,EAAE,IAAI;IACN,iCAAiC;IACjC,GAAG,IAAI;IACP,qCAAqC;IACrC,KAAK,IAAI;CACV;AAED,MAAM,MAAM,WAAW,CAAC,IAAI,GAAG,GAAG,IAAI;IACpC,WAAW,EAAE,IAAI,CAAC;CACnB,GAAG,CACA;IACE,MAAM,EAAE,YAAY,CAAC,EAAE,CAAC;IACxB,WAAW,EAAE,UAAU,CAAC;CACzB,GACD;IACE,MAAM,EAAE,YAAY,CAAC,GAAG,GAAG,YAAY,CAAC,KAAK,CAAC;CAC/C,CACJ,CAAC;AAEF,qBAAa,iBAAiB;IAE1B,OAAO,CAAC,kBAAkB;IAC1B,OAAO,CAAC,SAAS;IACjB,OAAO,CAAC,QAAQ;gBAFR,kBAAkB,EAAE,kBAAkB,EACtC,SAAS,EAAE,SAAS,EACpB,QAAQ,GAAE,iBAAiB,GAAG,IAAiC;IAGzE,OAAO,CAAC,cAAc;YAqCR,OAAO;IAkFf,UAAU,CAAC,OAAO,EAAE,UAAU,EAAE,IAAI,EAAE,UAAU,EAAE,SAAS,EAAE,MAAM,EAAE,UAAU,EAAE,GAAG,GAAG,OAAO,CAAC,WAAW,CAAC;CAWlH"}
|
|
@@ -4,32 +4,22 @@ import { EcalliTraceLogger } from "./ecalli-trace-logger.js";
|
|
|
4
4
|
import { PvmExecution, tryAsHostCallIndex } from "./host-call-handler.js";
|
|
5
5
|
import { HostCallMemory } from "./host-call-memory.js";
|
|
6
6
|
import { HostCallRegisters } from "./host-call-registers.js";
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
static fromMemorySlice(consumedGas, memorySlice) {
|
|
24
|
-
return new ReturnValue(consumedGas, null, memorySlice);
|
|
25
|
-
}
|
|
26
|
-
hasMemorySlice() {
|
|
27
|
-
return this.memorySlice instanceof Uint8Array && this.status === null;
|
|
28
|
-
}
|
|
29
|
-
hasStatus() {
|
|
30
|
-
return !this.hasMemorySlice();
|
|
31
|
-
}
|
|
32
|
-
}
|
|
7
|
+
/**
|
|
8
|
+
* Outer VM return status.
|
|
9
|
+
*
|
|
10
|
+
* This is a limited status returned by outer VM.
|
|
11
|
+
*
|
|
12
|
+
* https://graypaper.fluffylabs.dev/#/ab2cdbd/24a10124a101?v=0.7.2
|
|
13
|
+
*/
|
|
14
|
+
export var ReturnStatus;
|
|
15
|
+
(function (ReturnStatus) {
|
|
16
|
+
/** Execution succesful. */
|
|
17
|
+
ReturnStatus[ReturnStatus["OK"] = 0] = "OK";
|
|
18
|
+
/** Execution went out of gas. */
|
|
19
|
+
ReturnStatus[ReturnStatus["OOG"] = 1] = "OOG";
|
|
20
|
+
/** Execution trapped or panicked. */
|
|
21
|
+
ReturnStatus[ReturnStatus["PANIC"] = 2] = "PANIC";
|
|
22
|
+
})(ReturnStatus || (ReturnStatus = {}));
|
|
33
23
|
export class HostCallsExecutor {
|
|
34
24
|
pvmInstanceManager;
|
|
35
25
|
hostCalls;
|
|
@@ -40,26 +30,27 @@ export class HostCallsExecutor {
|
|
|
40
30
|
this.ioTracer = ioTracer;
|
|
41
31
|
}
|
|
42
32
|
getReturnValue(status, pvmInstance, registers, memory) {
|
|
43
|
-
const
|
|
33
|
+
const consumedGas = pvmInstance.gas.used();
|
|
44
34
|
const pc = pvmInstance.getPC();
|
|
45
35
|
const gas = pvmInstance.gas.get();
|
|
46
36
|
if (status === Status.OOG) {
|
|
47
37
|
this.ioTracer?.logOog(pc, gas, registers);
|
|
48
|
-
return
|
|
38
|
+
return { consumedGas, status: ReturnStatus.OOG };
|
|
49
39
|
}
|
|
50
40
|
if (status === Status.HALT) {
|
|
51
41
|
this.ioTracer?.logHalt(pc, gas, registers);
|
|
52
42
|
const address = registers.get(7);
|
|
43
|
+
// NOTE we are taking the the lower U32 part of the register, hence it's safe.
|
|
53
44
|
const length = Number(registers.get(8) & 0xffffffffn);
|
|
54
45
|
const result = safeAllocUint8Array(length);
|
|
55
46
|
const loadResult = memory.loadInto(result, address);
|
|
56
47
|
if (loadResult.isError) {
|
|
57
|
-
return
|
|
48
|
+
return { consumedGas, status: ReturnStatus.OK, memorySlice: new Uint8Array() };
|
|
58
49
|
}
|
|
59
|
-
return
|
|
50
|
+
return { consumedGas, status: ReturnStatus.OK, memorySlice: result };
|
|
60
51
|
}
|
|
61
52
|
this.ioTracer?.logPanic(pvmInstance.getExitParam() ?? 0, pc, gas, registers);
|
|
62
|
-
return
|
|
53
|
+
return { consumedGas, status: ReturnStatus.PANIC };
|
|
63
54
|
}
|
|
64
55
|
async execute(pvmInstance) {
|
|
65
56
|
const ioTracker = this.ioTracer?.tracker() ?? null;
|
|
@@ -89,6 +80,7 @@ export class HostCallsExecutor {
|
|
|
89
80
|
const hostCallIndex = tryAsHostCallIndex(exitParam);
|
|
90
81
|
// retrieve the host call
|
|
91
82
|
const hostCall = this.hostCalls.get(hostCallIndex);
|
|
83
|
+
// NOTE: `basicGasCost(regs)` function is for compatibility reasons: pre GP 0.7.2
|
|
92
84
|
const basicGasCost = typeof hostCall.basicGasCost === "number" ? hostCall.basicGasCost : hostCall.basicGasCost(registers);
|
|
93
85
|
// calculate gas
|
|
94
86
|
const gasBefore = gas.get();
|
|
@@ -1,6 +1,5 @@
|
|
|
1
|
-
export declare const
|
|
2
|
-
export declare const
|
|
3
|
-
export declare const MIN_VALUE: number;
|
|
1
|
+
export declare const MAX_VALUE_I64: bigint;
|
|
2
|
+
export declare const MIN_VALUE_I32: number;
|
|
4
3
|
export declare const MAX_SHIFT_U32 = 32;
|
|
5
4
|
export declare const MAX_SHIFT_U64 = 64n;
|
|
6
5
|
//# sourceMappingURL=math-consts.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"math-consts.d.ts","sourceRoot":"","sources":["../../../../../../packages/core/pvm-interpreter/ops/math-consts.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,
|
|
1
|
+
{"version":3,"file":"math-consts.d.ts","sourceRoot":"","sources":["../../../../../../packages/core/pvm-interpreter/ops/math-consts.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,aAAa,QAAY,CAAC;AACvC,eAAO,MAAM,aAAa,QAAa,CAAC;AACxC,eAAO,MAAM,aAAa,KAAK,CAAC;AAChC,eAAO,MAAM,aAAa,MAAM,CAAC"}
|
|
@@ -1,5 +1,4 @@
|
|
|
1
|
-
export const
|
|
2
|
-
export const
|
|
3
|
-
export const MIN_VALUE = -(2 ** 31);
|
|
1
|
+
export const MAX_VALUE_I64 = 2n ** 63n;
|
|
2
|
+
export const MIN_VALUE_I32 = -(2 ** 31);
|
|
4
3
|
export const MAX_SHIFT_U32 = 32;
|
|
5
4
|
export const MAX_SHIFT_U64 = 64n;
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { signExtend32To64 } from "../registers.js";
|
|
2
|
-
import {
|
|
2
|
+
import { MIN_VALUE_I32 } from "./math-consts.js";
|
|
3
3
|
import { addWithOverflowU32, addWithOverflowU64, maxBigInt, minBigInt, mulLowerUnsignedU32, mulU64, mulUpperSS, mulUpperSU, mulUpperUU, subU32, subU64, } from "./math-utils.js";
|
|
4
4
|
export class MathOps {
|
|
5
5
|
regs;
|
|
@@ -61,7 +61,7 @@ export class MathOps {
|
|
|
61
61
|
if (this.regs.getLowerU32(secondIndex) === 0) {
|
|
62
62
|
this.regs.setU64(resultIndex, 2n ** 64n - 1n);
|
|
63
63
|
}
|
|
64
|
-
else if (this.regs.getLowerI32(secondIndex) === -1 && this.regs.getLowerI32(firstIndex) ===
|
|
64
|
+
else if (this.regs.getLowerI32(secondIndex) === -1 && this.regs.getLowerI32(firstIndex) === MIN_VALUE_I32) {
|
|
65
65
|
this.regs.setU64(resultIndex, signExtend32To64(this.regs.getLowerU32(firstIndex)));
|
|
66
66
|
}
|
|
67
67
|
else {
|
|
@@ -99,7 +99,7 @@ export class MathOps {
|
|
|
99
99
|
if (this.regs.getLowerU32(secondIndex) === 0) {
|
|
100
100
|
this.regs.setU64(resultIndex, BigInt(this.regs.getLowerI32(firstIndex)));
|
|
101
101
|
}
|
|
102
|
-
else if (this.regs.getLowerI32(secondIndex) === -1 && this.regs.getLowerI32(firstIndex) ===
|
|
102
|
+
else if (this.regs.getLowerI32(secondIndex) === -1 && this.regs.getLowerI32(firstIndex) === MIN_VALUE_I32) {
|
|
103
103
|
this.regs.setU64(resultIndex, 0n);
|
|
104
104
|
}
|
|
105
105
|
else {
|
|
@@ -1,25 +1,25 @@
|
|
|
1
|
+
import { MAX_VALUE_U32 } from "#@typeberry/numbers";
|
|
1
2
|
import { check } from "#@typeberry/utils";
|
|
2
|
-
import { MAX_VALUE } from "./math-consts.js";
|
|
3
3
|
/**
|
|
4
4
|
* Overflowing addition for two-complement representation of 32-bit signed numbers.
|
|
5
5
|
*/
|
|
6
6
|
export function addWithOverflowU32(a, b) {
|
|
7
|
-
if (a >
|
|
7
|
+
if (a > MAX_VALUE_U32 - b) {
|
|
8
8
|
/**
|
|
9
|
-
*
|
|
10
|
-
*
|
|
11
|
-
* =
|
|
12
|
-
* =
|
|
13
|
-
* = a + b -
|
|
9
|
+
* MAX_VALUE_U32 is equal to 2 ** 32 - 1
|
|
10
|
+
* MAX_VALUE_U32 - ( (MAX_VALUE_U32 - a) + (MAX_VALUE_U32 - b) ) - 1
|
|
11
|
+
* = MAX_VALUE_U32 - (2MAX_VALUE_U32 - a - b) -1
|
|
12
|
+
* = MAX_VALUE_U32 - 2MAX_VALUE_U32 + a + b - 1
|
|
13
|
+
* = a + b - MAX_VALUE_U32 - 1
|
|
14
14
|
* = a + b - 2 ** 32
|
|
15
|
-
* but we know that
|
|
15
|
+
* but we know that 2MAX_VALUE_U32 > a + b > MAX_VALUE_U32 so in this case:
|
|
16
16
|
* a + b - 2 ** 32 <=> (a + b) % 2 ** 32
|
|
17
|
-
* = (a + b) % (
|
|
17
|
+
* = (a + b) % (MAX_VALUE_U32 + 1)
|
|
18
18
|
*/
|
|
19
|
-
const spaceToMaxA =
|
|
20
|
-
const spaceToMaxB =
|
|
19
|
+
const spaceToMaxA = MAX_VALUE_U32 - a;
|
|
20
|
+
const spaceToMaxB = MAX_VALUE_U32 - b;
|
|
21
21
|
const overflowSum = spaceToMaxA + spaceToMaxB;
|
|
22
|
-
return
|
|
22
|
+
return MAX_VALUE_U32 - overflowSum - 1;
|
|
23
23
|
}
|
|
24
24
|
return a + b;
|
|
25
25
|
}
|
|
@@ -34,7 +34,7 @@ export function addWithOverflowU64(a, b) {
|
|
|
34
34
|
*/
|
|
35
35
|
export function subU32(a, b) {
|
|
36
36
|
if (b > a) {
|
|
37
|
-
return
|
|
37
|
+
return MAX_VALUE_U32 - b + a + 1;
|
|
38
38
|
}
|
|
39
39
|
return a - b;
|
|
40
40
|
}
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import assert from "node:assert";
|
|
2
2
|
import { describe, it } from "node:test";
|
|
3
|
-
import {
|
|
3
|
+
import { MAX_VALUE_U32 } from "#@typeberry/numbers";
|
|
4
|
+
import { MAX_VALUE_I64 } from "./math-consts.js";
|
|
4
5
|
import { addWithOverflowU32, addWithOverflowU64, maxBigInt, minBigInt, mulLowerUnsignedU32, mulU64, mulUpperSS, mulUpperSU, mulUpperUU, subU32, subU64, unsignedRightShiftBigInt, } from "./math-utils.js";
|
|
5
6
|
describe("math-utils", () => {
|
|
6
7
|
describe("addWithOverflow", () => {
|
|
@@ -12,7 +13,7 @@ describe("math-utils", () => {
|
|
|
12
13
|
assert.strictEqual(result, expectedResult);
|
|
13
14
|
});
|
|
14
15
|
it("should add two numbers (big and small) without overflow", () => {
|
|
15
|
-
const a =
|
|
16
|
+
const a = MAX_VALUE_U32;
|
|
16
17
|
const b = 6;
|
|
17
18
|
const expectedResult = 5;
|
|
18
19
|
const result = addWithOverflowU32(a, b);
|
|
@@ -26,9 +27,9 @@ describe("math-utils", () => {
|
|
|
26
27
|
assert.strictEqual(result, expectedResult);
|
|
27
28
|
});
|
|
28
29
|
it("should add max values with overflow", () => {
|
|
29
|
-
const a =
|
|
30
|
-
const b =
|
|
31
|
-
const expectedResult =
|
|
30
|
+
const a = MAX_VALUE_U32;
|
|
31
|
+
const b = MAX_VALUE_U32;
|
|
32
|
+
const expectedResult = MAX_VALUE_U32 - 1;
|
|
32
33
|
const result = addWithOverflowU32(a, b);
|
|
33
34
|
assert.strictEqual(result, expectedResult);
|
|
34
35
|
});
|
|
@@ -44,7 +45,7 @@ describe("math-utils", () => {
|
|
|
44
45
|
it("should subtract two numbers with overflow", () => {
|
|
45
46
|
const a = 5;
|
|
46
47
|
const b = 6;
|
|
47
|
-
const expectedResult =
|
|
48
|
+
const expectedResult = MAX_VALUE_U32;
|
|
48
49
|
const result = subU32(a, b);
|
|
49
50
|
assert.strictEqual(result, expectedResult);
|
|
50
51
|
});
|
|
@@ -95,29 +96,29 @@ describe("math-utils", () => {
|
|
|
95
96
|
assert.strictEqual(result, expectedResult);
|
|
96
97
|
});
|
|
97
98
|
it("should multiply two big positive numbers", () => {
|
|
98
|
-
const a =
|
|
99
|
-
const b =
|
|
99
|
+
const a = MAX_VALUE_I64;
|
|
100
|
+
const b = MAX_VALUE_I64;
|
|
100
101
|
const expectedResult = 0x4000000000000000n;
|
|
101
102
|
const result = mulUpperUU(a, b);
|
|
102
103
|
assert.strictEqual(result, expectedResult);
|
|
103
104
|
});
|
|
104
105
|
it("should multiply two big positive and negative numbers", () => {
|
|
105
|
-
const a =
|
|
106
|
-
const b = -
|
|
106
|
+
const a = MAX_VALUE_I64;
|
|
107
|
+
const b = -MAX_VALUE_I64;
|
|
107
108
|
const expectedResult = 4611686018427387904n;
|
|
108
109
|
const result = mulUpperUU(a, b);
|
|
109
110
|
assert.strictEqual(result, expectedResult);
|
|
110
111
|
});
|
|
111
112
|
it("should multiply two big negative and positive numbers", () => {
|
|
112
|
-
const a = -
|
|
113
|
-
const b =
|
|
113
|
+
const a = -MAX_VALUE_I64;
|
|
114
|
+
const b = MAX_VALUE_I64;
|
|
114
115
|
const expectedResult = 4611686018427387904n;
|
|
115
116
|
const result = mulUpperUU(a, b);
|
|
116
117
|
assert.strictEqual(result, expectedResult);
|
|
117
118
|
});
|
|
118
119
|
it("should multiply two big negative numbers", () => {
|
|
119
|
-
const a = -
|
|
120
|
-
const b = -
|
|
120
|
+
const a = -MAX_VALUE_I64;
|
|
121
|
+
const b = -MAX_VALUE_I64;
|
|
121
122
|
const expectedResult = 0x4000000000000000n;
|
|
122
123
|
const result = mulUpperUU(a, b);
|
|
123
124
|
assert.strictEqual(result, expectedResult);
|
|
@@ -153,8 +154,8 @@ describe("math-utils", () => {
|
|
|
153
154
|
assert.strictEqual(result, expectedResult);
|
|
154
155
|
});
|
|
155
156
|
it("should multiply two big positive numbers", () => {
|
|
156
|
-
const a =
|
|
157
|
-
const b =
|
|
157
|
+
const a = MAX_VALUE_I64;
|
|
158
|
+
const b = MAX_VALUE_I64;
|
|
158
159
|
const expectedResult = 0x4000000000000000n;
|
|
159
160
|
const result = mulUpperSU(a, b);
|
|
160
161
|
assert.strictEqual(result, expectedResult);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"compatibility.d.ts","sourceRoot":"","sources":["../../../../../packages/core/utils/compatibility.ts"],"names":[],"mappings":"AAEA,oBAAY,SAAS;IACnB,MAAM,UAAU;IAChB,MAAM,UAAU;
|
|
1
|
+
{"version":3,"file":"compatibility.d.ts","sourceRoot":"","sources":["../../../../../packages/core/utils/compatibility.ts"],"names":[],"mappings":"AAEA,oBAAY,SAAS;IACnB,MAAM,UAAU;IAChB,MAAM,UAAU;CACjB;AAED,oBAAY,SAAS;IACnB,SAAS,cAAc;CACxB;AAKD,eAAO,MAAM,aAAa,sBAAsB,CAAC;AACjD,eAAO,MAAM,eAAe,mBAAmB,CAAC;AAEhD,eAAO,IAAI,eAAe,WAAyD,CAAC;AACpF,eAAO,IAAI,aAAa,WAAqD,CAAC;AA8B9E,qBAAa,aAAa;IACxB,MAAM,CAAC,QAAQ,CAAC,OAAO,CAAC,EAAE,SAAS;IAInC,MAAM,CAAC,aAAa,CAAC,KAAK,EAAE,SAAS;IAIrC,MAAM,CAAC,EAAE,CAAC,GAAG,OAAO,EAAE,SAAS,EAAE;IAOjC,MAAM,CAAC,OAAO,CAAC,KAAK,EAAE,SAAS,EAAE,OAAO,CAAC,EAAE,SAAS;IASpD,MAAM,CAAC,gBAAgB,CAAC,OAAO,EAAE,SAAS;IAQ1C;;;;;;OAMG;IACH,MAAM,CAAC,sBAAsB,CAAC,CAAC,EAAE,EAC/B,QAAQ,EACR,QAAQ,GACT,EAAE;QACD,QAAQ,EAAE,CAAC,CAAC;QACZ,QAAQ,EAAE,OAAO,CAAC,MAAM,CAAC,SAAS,EAAE,CAAC,CAAC,CAAC,CAAC;KACzC,GAAG,CAAC;CASN"}
|
|
@@ -1,7 +1,6 @@
|
|
|
1
1
|
import { env } from "./env.js";
|
|
2
2
|
export var GpVersion;
|
|
3
3
|
(function (GpVersion) {
|
|
4
|
-
GpVersion["V0_7_0"] = "0.7.0";
|
|
5
4
|
GpVersion["V0_7_1"] = "0.7.1";
|
|
6
5
|
GpVersion["V0_7_2"] = "0.7.2";
|
|
7
6
|
})(GpVersion || (GpVersion = {}));
|
|
@@ -10,7 +9,7 @@ export var TestSuite;
|
|
|
10
9
|
TestSuite["W3F_DAVXY"] = "w3f-davxy";
|
|
11
10
|
})(TestSuite || (TestSuite = {}));
|
|
12
11
|
// NOTE: Also acts as a supported versions
|
|
13
|
-
const ALL_VERSIONS_IN_ORDER = [GpVersion.
|
|
12
|
+
const ALL_VERSIONS_IN_ORDER = [GpVersion.V0_7_1, GpVersion.V0_7_2];
|
|
14
13
|
export const DEFAULT_SUITE = TestSuite.W3F_DAVXY;
|
|
15
14
|
export const DEFAULT_VERSION = GpVersion.V0_7_2;
|
|
16
15
|
export let CURRENT_VERSION = parseCurrentVersion(env.GP_VERSION) ?? DEFAULT_VERSION;
|