From d8cf424e0a716306111128f0ffdd9cabc6482901 Mon Sep 17 00:00:00 2001 From: Roman Khimov Date: Fri, 26 Jul 2024 16:02:41 +0300 Subject: [PATCH 1/2] docs: add more on compiler limitations, fix #3023 Signed-off-by: Roman Khimov --- docs/compiler.md | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/docs/compiler.md b/docs/compiler.md index 18660e703..6b36eeaef 100644 --- a/docs/compiler.md +++ b/docs/compiler.md @@ -33,6 +33,13 @@ a dialect of Go rather than a complete port of the language: it's up to the programmer whether assert can be performed successfully. * type aliases including the built-in `any` alias are supported. * generics are not supported, but eventually will be (at least, partially), ref. https://github.com/nspcc-dev/neo-go/issues/2376. + * `~` token is not supported + * `comparable` is not supported + * arrays (`[4]byte`) are not supported (https://github.com/nspcc-dev/neo-go/issues/3524) + * `min()` and `max()` are not supported (https://github.com/nspcc-dev/neo-go/issues/3090) + * `clear()` is not supported (https://github.com/nspcc-dev/neo-go/issues/3091) + * ranging over integers in `for` is not supported (https://github.com/nspcc-dev/neo-go/issues/3525) + * `for` loop variables are treated in pre-Go 1.22 way: a single instance is created for the whole loop ## VM API (interop layer) Compiler translates interop function calls into Neo VM syscalls or (for custom From 5d29a3fdabb5f643b843e874fd8ffd8872ad01aa Mon Sep 17 00:00:00 2001 From: Roman Khimov Date: Fri, 26 Jul 2024 16:42:24 +0300 Subject: [PATCH 2/2] docs: document DB incompatibilities, fix #3456 Signed-off-by: Roman Khimov --- docs/node-configuration.md | 22 ++++++++++++++++++++++ 1 file changed, 22 insertions(+) diff --git a/docs/node-configuration.md b/docs/node-configuration.md index 2e635ecef..7ef4466d7 100644 --- a/docs/node-configuration.md +++ b/docs/node-configuration.md @@ -403,3 +403,25 @@ where: Note that `Transaction` is a NeoGo extension that isn't supported by the NeoC# node and must be disabled on the public Neo N3 networks. + +## DB compatibility + +Real networks with large number of blocks require a substantial amount of time +to synchronize. When operating a number of node instances with similar +configurations you may want to save some resources by performing synchronization +on one node and then copying the DB over to other instances. In general, this +can be done and this is supported, but NeoGo has a lot of options that may +affect this: +- any differences in `ProtocolConfiguration` section make databases + incompatible, except for `Max*` settings, `MemPoolSize`, + `P2PNotaryRequestPayloadPoolSize`, `SeedList`, `TimePerBlock`. + Protocol configuration is expected to be the same on all nodes of the same + network, so don't touch it unless you know what you're doing. +- DB types (Level/Bolt) must be the same +- `GarbageCollectionPeriod` must be the same +- `KeepOnlyLatestState` must be the same +- `RemoveUntraceableBlocks` must be the same + +BotlDB is also known to be incompatible between machines with different +endianness. Nothing is known for LevelDB wrt this, so it's not recommended +to copy it this way too.