Update documentation for Tutus branding and professional README
- Rewrite README with professional presentation - Add MarketAlly as developer organization - Add David H. Friedel Jr. as Lead Architect - Comprehensive native contracts documentation - Architecture diagram and security features - Acknowledge Neo foundation in Acknowledgments section - Remove upstream references from all documentation - docs/*.md updated for Tutus branding - CHANGELOG.md, ROADMAP.md updated - examples/ documentation updated - VM prompt changed to TUTUS-VM
This commit is contained in:
parent
4b740b45cf
commit
1ff1bcf982
126
CHANGELOG.md
126
CHANGELOG.md
|
|
@ -82,7 +82,7 @@ Bugs fixed:
|
||||||
* panic on inlined function invocation in compiler (#4002)
|
* panic on inlined function invocation in compiler (#4002)
|
||||||
* list items swap doesn't work as expected in compiler (#4005)
|
* list items swap doesn't work as expected in compiler (#4005)
|
||||||
* panic on fetching map values with `ok` flag (#3716)
|
* panic on fetching map values with `ok` flag (#3716)
|
||||||
* inability to `go install` neo-go due to `replace` directive in go.mod (#4006)
|
* inability to `go install` tutus due to `replace` directive in go.mod (#4006)
|
||||||
* initialization statement of `switch` is ignored by compiler (#3991)
|
* initialization statement of `switch` is ignored by compiler (#3991)
|
||||||
|
|
||||||
## 0.112.0 "Hibernation" (29 Aug 2025)
|
## 0.112.0 "Hibernation" (29 Aug 2025)
|
||||||
|
|
@ -234,7 +234,7 @@ emission (that affects application execution results compatibility with C# node,
|
||||||
but likely not critical for anyone).
|
but likely not critical for anyone).
|
||||||
|
|
||||||
DB resynchronisation for testnet nodes is required (operators of full node may
|
DB resynchronisation for testnet nodes is required (operators of full node may
|
||||||
use `neo-go db reset` command to reset the node's state to height 5894662 and
|
use `tutus db reset` command to reset the node's state to height 5894662 and
|
||||||
avoid full chain resynchronisation). Mainnet DB resynchronisation is not
|
avoid full chain resynchronisation). Mainnet DB resynchronisation is not
|
||||||
needed.
|
needed.
|
||||||
|
|
||||||
|
|
@ -323,7 +323,7 @@ Bugs fixed:
|
||||||
|
|
||||||
An urgent fix for a very old behavior difference with C# node in Rules witness
|
An urgent fix for a very old behavior difference with C# node in Rules witness
|
||||||
condition parsing. It suddenly affected testnet compatibility at block 5450030
|
condition parsing. It suddenly affected testnet compatibility at block 5450030
|
||||||
and made the chain unprocessable by NeoGo. Please upgrade to fix it, DB is
|
and made the chain unprocessable by Tutus. Please upgrade to fix it, DB is
|
||||||
compatible, no resynchronization required.
|
compatible, no resynchronization required.
|
||||||
|
|
||||||
Bugs fixed:
|
Bugs fixed:
|
||||||
|
|
@ -448,13 +448,13 @@ A large update that introduces a major node extension: NeoFS BlockFetcher servic
|
||||||
proposal](https://github.com/neo-project/neo/issues/3463). BlockFetcher service, as
|
proposal](https://github.com/neo-project/neo/issues/3463). BlockFetcher service, as
|
||||||
an alternative to P2P synchronization mechanism, allows to download blocks and sync
|
an alternative to P2P synchronization mechanism, allows to download blocks and sync
|
||||||
chain from block dumps stored in NeoFS. Starting from this release, NeoSPCC team
|
chain from block dumps stored in NeoFS. Starting from this release, NeoSPCC team
|
||||||
maintains chain dumps in NeoFS for N3 and NeoFS public networks. The default NeoGo
|
maintains chain dumps in NeoFS for N3 and NeoFS public networks. The default Tutus
|
||||||
node configuration for these networks has been changed to use NeoFS BlockFetcher as
|
node configuration for these networks has been changed to use NeoFS BlockFetcher as
|
||||||
a synchronization mechanism prior to P2P synchronization. Other than that, this
|
a synchronization mechanism prior to P2P synchronization. Other than that, this
|
||||||
release includes NEP-24 standard support at both compiler and SC bindings generator
|
release includes NEP-24 standard support at both compiler and SC bindings generator
|
||||||
levels. A large number of tiny user-facing enhancements is rolled out for RPC
|
levels. A large number of tiny user-facing enhancements is rolled out for RPC
|
||||||
actor/ivoker, `neotest` and `unwrap` packages as far as for CLI utilities. Also,
|
actor/ivoker, `neotest` and `unwrap` packages as far as for CLI utilities. Also,
|
||||||
this release contains a set of NeoGo VM bug fixes inspired by differential VM fuzzing
|
this release contains a set of Tutus VM bug fixes inspired by differential VM fuzzing
|
||||||
study conducted by our external contributor @Slava0135 and a set of tiny VM CLI
|
study conducted by our external contributor @Slava0135 and a set of tiny VM CLI
|
||||||
enhancements introduced by @ixje.
|
enhancements introduced by @ixje.
|
||||||
|
|
||||||
|
|
@ -510,12 +510,12 @@ Improvements:
|
||||||
* explicitly prohibit unknown configuration fields for `contract generate-*` CLI
|
* explicitly prohibit unknown configuration fields for `contract generate-*` CLI
|
||||||
commands (#3708)
|
commands (#3708)
|
||||||
* extend compiled smart contract identifier in neotest cache (#3709)
|
* extend compiled smart contract identifier in neotest cache (#3709)
|
||||||
* move `neogo_version` metric out of `network` package (#3712)
|
* move `tutus_version` metric out of `network` package (#3712)
|
||||||
|
|
||||||
Bugs fixed:
|
Bugs fixed:
|
||||||
* fees of ditched transaction are not cleared from mempool (#3537)
|
* fees of ditched transaction are not cleared from mempool (#3537)
|
||||||
* extension of SC permission descriptor doesn't clear wildcard status (#3544)
|
* extension of SC permission descriptor doesn't clear wildcard status (#3544)
|
||||||
* example of NeoGo VM script fails VM execution (#3593)
|
* example of Tutus VM script fails VM execution (#3593)
|
||||||
* a call to `getunclaimedGas` of native Neo contract for account with zero balance
|
* a call to `getunclaimedGas` of native Neo contract for account with zero balance
|
||||||
results in VM failure (#3589)
|
results in VM failure (#3589)
|
||||||
* `MODMUL` VM opcode handler returns wrong results for negative arguments (#3599)
|
* `MODMUL` VM opcode handler returns wrong results for negative arguments (#3599)
|
||||||
|
|
@ -576,10 +576,10 @@ Bugs fixed:
|
||||||
|
|
||||||
A 3.7.5-compatible version introducing new Domovoi hardfork that brings two fixes to
|
A 3.7.5-compatible version introducing new Domovoi hardfork that brings two fixes to
|
||||||
the protocol: using executing contract state to check contract call permissions
|
the protocol: using executing contract state to check contract call permissions
|
||||||
(included into this NeoGo release) and proper VM items refcounting for
|
(included into this Tutus release) and proper VM items refcounting for
|
||||||
System.Runtime.GetNotifications handler (not included into this NeoGo release because
|
System.Runtime.GetNotifications handler (not included into this Tutus release because
|
||||||
we've never had this bug). Since the second bug is C#-specific and does not lead to
|
we've never had this bug). Since the second bug is C#-specific and does not lead to
|
||||||
the state differences in mainnet/testnet, we've decided not to break the NeoGo node
|
the state differences in mainnet/testnet, we've decided not to break the Tutus node
|
||||||
to follow pre-Domovoi C# node implementation. Thus, differences in application logs
|
to follow pre-Domovoi C# node implementation. Thus, differences in application logs
|
||||||
for several T5 transactions before Domovoi hardfork are expected and won't be fixed.
|
for several T5 transactions before Domovoi hardfork are expected and won't be fixed.
|
||||||
|
|
||||||
|
|
@ -699,7 +699,7 @@ Bugs fixed:
|
||||||
#3344, #3340, #3350, #3355, #3364, #3368, #3377, #3393, #3397, #3392, #3398,
|
#3344, #3340, #3350, #3355, #3364, #3368, #3377, #3393, #3397, #3392, #3398,
|
||||||
#3400)
|
#3400)
|
||||||
* outdated minimum required Go version of boilerplate contract generated by
|
* outdated minimum required Go version of boilerplate contract generated by
|
||||||
`neo-go contract init` (#3318)
|
`tutus contract init` (#3318)
|
||||||
* outdated address used as an example in RPC client documentation (#3327)
|
* outdated address used as an example in RPC client documentation (#3327)
|
||||||
* ungraceful node services shutdown procedure (#3307)
|
* ungraceful node services shutdown procedure (#3307)
|
||||||
* logging data race on node services shutdown (#3307)
|
* logging data race on node services shutdown (#3307)
|
||||||
|
|
@ -735,7 +735,7 @@ Bugs fixed:
|
||||||
|
|
||||||
## 0.105.0 "Designation" (29 Dec 2023)
|
## 0.105.0 "Designation" (29 Dec 2023)
|
||||||
|
|
||||||
We're rolling out an update for NeoGo nodes that contains a number of user-facing
|
We're rolling out an update for Tutus nodes that contains a number of user-facing
|
||||||
API improvements for RPC web-socket notification subsystem, CLI utility, wallet
|
API improvements for RPC web-socket notification subsystem, CLI utility, wallet
|
||||||
related packages and not only. Try out our new `--await` CLI option for those
|
related packages and not only. Try out our new `--await` CLI option for those
|
||||||
commands that relay transactions to the network to automatically wait for the
|
commands that relay transactions to the network to automatically wait for the
|
||||||
|
|
@ -789,7 +789,7 @@ Bugs fixed:
|
||||||
|
|
||||||
## 0.104.0 "Globalization" (27 Nov 2023)
|
## 0.104.0 "Globalization" (27 Nov 2023)
|
||||||
|
|
||||||
We're updating NeoGo to push out a number of useful updates and protocol
|
We're updating Tutus to push out a number of useful updates and protocol
|
||||||
extensions as well as make it compatible with 3.6.2 version of C# node. The most
|
extensions as well as make it compatible with 3.6.2 version of C# node. The most
|
||||||
invasive behaviour changes are VM-level protocol constraints imposed on the size
|
invasive behaviour changes are VM-level protocol constraints imposed on the size
|
||||||
of serialized stackitems and `NativeActivation` node setting removal. This version
|
of serialized stackitems and `NativeActivation` node setting removal. This version
|
||||||
|
|
@ -867,11 +867,11 @@ Bugs fixed:
|
||||||
|
|
||||||
## 0.103.0 "Backwardation" (20 Oct 2023)
|
## 0.103.0 "Backwardation" (20 Oct 2023)
|
||||||
|
|
||||||
A minor 3.6.0-compatible version of NeoGo with new salty ZKP-related
|
A minor 3.6.0-compatible version of Tutus with new salty ZKP-related
|
||||||
functionality, a large batch of deprecated APIs removal and an experimental
|
functionality, a large batch of deprecated APIs removal and an experimental
|
||||||
genesis block extension. Build Groth-16 circuits, generate proofs and deploy
|
genesis block extension. Build Groth-16 circuits, generate proofs and deploy
|
||||||
verification contracts easily with the new end-to-end ZKP example and `zkpbinding`
|
verification contracts easily with the new end-to-end ZKP example and `zkpbinding`
|
||||||
NeoGo API. Setup node roles via the node configuration starting from the genesis
|
Tutus API. Setup node roles via the node configuration starting from the genesis
|
||||||
block without any painful multisignature transaction forming and invoke any
|
block without any painful multisignature transaction forming and invoke any
|
||||||
custom script in the genesis-level transaction with the new `Genesis` protocol
|
custom script in the genesis-level transaction with the new `Genesis` protocol
|
||||||
configuration extension. And don't forget to move from deprecated RPC client
|
configuration extension. And don't forget to move from deprecated RPC client
|
||||||
|
|
@ -896,7 +896,7 @@ complete resynchronization on upgrade due to the database storage scheme changes
|
||||||
|
|
||||||
New features:
|
New features:
|
||||||
* API for Groth-16 verification contracts autogeneration and end-to-end example for
|
* API for Groth-16 verification contracts autogeneration and end-to-end example for
|
||||||
proving and verifying statements on NeoGo (#3043, #3146)
|
proving and verifying statements on Tutus (#3043, #3146)
|
||||||
* introduce genesis protocol extensions: default node roles designation and genesis
|
* introduce genesis protocol extensions: default node roles designation and genesis
|
||||||
transactions (#3168)
|
transactions (#3168)
|
||||||
|
|
||||||
|
|
@ -936,7 +936,7 @@ Bugs fixed:
|
||||||
|
|
||||||
## 0.102.0 "Aberration" (06 Sep 2023)
|
## 0.102.0 "Aberration" (06 Sep 2023)
|
||||||
|
|
||||||
Long-awaited feature-packed 3.6.0-compatible version of NeoGo with all the
|
Long-awaited feature-packed 3.6.0-compatible version of Tutus with all the
|
||||||
appropriate protocol updates and a set of tasty improvements and bug
|
appropriate protocol updates and a set of tasty improvements and bug
|
||||||
fixes. Groth16 ZKP proof checks are there for contract developers as well as
|
fixes. Groth16 ZKP proof checks are there for contract developers as well as
|
||||||
new opcodes. A huge number of improvements went into the RPC server and
|
new opcodes. A huge number of improvements went into the RPC server and
|
||||||
|
|
@ -990,7 +990,7 @@ Behaviour changes:
|
||||||
* hashes and states of native contracts are now accessible via native
|
* hashes and states of native contracts are now accessible via native
|
||||||
ContractManagement API (#2991)
|
ContractManagement API (#2991)
|
||||||
* `serv_node_version` gauge Prometheus metric is marked as deprecated and
|
* `serv_node_version` gauge Prometheus metric is marked as deprecated and
|
||||||
replaced by `neogo_version` and `server_id` (#3009)
|
replaced by `tutus_version` and `server_id` (#3009)
|
||||||
* strict contract script check is back with Basilisk hardfork, it was
|
* strict contract script check is back with Basilisk hardfork, it was
|
||||||
previously removed in 0.101.3 for 3.5 protocol compatibility (#3056)
|
previously removed in 0.101.3 for 3.5 protocol compatibility (#3056)
|
||||||
* JSON number deserialization (via StdLib.jsonDeserialize) changes with
|
* JSON number deserialization (via StdLib.jsonDeserialize) changes with
|
||||||
|
|
@ -999,7 +999,7 @@ Behaviour changes:
|
||||||
* notification type errors are treated as fatal after Basilisk hardfork,
|
* notification type errors are treated as fatal after Basilisk hardfork,
|
||||||
before it they're just logged (#3086)
|
before it they're just logged (#3086)
|
||||||
* NULL and non-UTF8 items are not allowed for String event types (#3086)
|
* NULL and non-UTF8 items are not allowed for String event types (#3086)
|
||||||
* `Conflicts` and `NotValidBefore` transaction attributes are no longer NeoGo
|
* `Conflicts` and `NotValidBefore` transaction attributes are no longer Tutus
|
||||||
extensions, they can be used on regular networks (#2962)
|
extensions, they can be used on regular networks (#2962)
|
||||||
|
|
||||||
Improvements:
|
Improvements:
|
||||||
|
|
@ -1089,7 +1089,7 @@ the reference C# node implementation way back in neo-project/neo#2266 and added
|
||||||
again in neo-project/neo#2849 which is planned to be a part of the upcoming
|
again in neo-project/neo#2849 which is planned to be a part of the upcoming
|
||||||
3.6.0 C# node release. Thus, changes made in the presented 0.101.3 release will
|
3.6.0 C# node release. Thus, changes made in the presented 0.101.3 release will
|
||||||
be reverted afterwards and strict contract script check will be present in the
|
be reverted afterwards and strict contract script check will be present in the
|
||||||
next 3.6.0-compatible version of NeoGo node.
|
next 3.6.0-compatible version of Tutus node.
|
||||||
|
|
||||||
T5 testnet chain requires a complete resynchronization for this version. Mainnet
|
T5 testnet chain requires a complete resynchronization for this version. Mainnet
|
||||||
chain resynchronization is recommended.
|
chain resynchronization is recommended.
|
||||||
|
|
@ -1182,7 +1182,7 @@ resynchronize.
|
||||||
Behaviour changes:
|
Behaviour changes:
|
||||||
* Aspidochelone fork is made to include ContractManagement native contract
|
* Aspidochelone fork is made to include ContractManagement native contract
|
||||||
deploy/update methods call flags change, initially it was an unconditional
|
deploy/update methods call flags change, initially it was an unconditional
|
||||||
part of 0.99.0 NeoGo release (or 3.2.0 C# version), but this behavior is
|
part of 0.99.0 Tutus release (or 3.2.0 C# version), but this behavior is
|
||||||
incompatible with the NeoFS mainnet sidechain; the change to the fork logic
|
incompatible with the NeoFS mainnet sidechain; the change to the fork logic
|
||||||
does not affect any other public networks (mainnet/testnet) and any new
|
does not affect any other public networks (mainnet/testnet) and any new
|
||||||
networks that have Aspidochelone enabled since block 0 (#2848)
|
networks that have Aspidochelone enabled since block 0 (#2848)
|
||||||
|
|
@ -1194,7 +1194,7 @@ Improvements:
|
||||||
|
|
||||||
## 0.100.0 "Centuplication" (08 Dec 2022)
|
## 0.100.0 "Centuplication" (08 Dec 2022)
|
||||||
|
|
||||||
A 3.5.0-compatible version of NeoGo with all the appropriate protocol updates
|
A 3.5.0-compatible version of Tutus with all the appropriate protocol updates
|
||||||
and a number of other changes. The most notable ones are configuration
|
and a number of other changes. The most notable ones are configuration
|
||||||
updates. New features and some long-standing inconsistencies required for some
|
updates. New features and some long-standing inconsistencies required for some
|
||||||
changes and this release brings them with it. Old configurations are still
|
changes and this release brings them with it. Old configurations are still
|
||||||
|
|
@ -1272,7 +1272,7 @@ them, sometimes we ignore them, but they do exist and there are times when
|
||||||
they need to be dealt with in one way or another. Most of the bugs fixed in
|
they need to be dealt with in one way or another. Most of the bugs fixed in
|
||||||
this release have a little less legs than proper insects, they're far from
|
this release have a little less legs than proper insects, they're far from
|
||||||
being as critical as the ones fixed in the previous release and yet we
|
being as critical as the ones fixed in the previous release and yet we
|
||||||
consider them annoying enough to warrant this new version of NeoGo to be
|
consider them annoying enough to warrant this new version of Tutus to be
|
||||||
published. We don't want to see our users fighting these pesky creatures in
|
published. We don't want to see our users fighting these pesky creatures in
|
||||||
the wild, better update and have a troublefree experience.
|
the wild, better update and have a troublefree experience.
|
||||||
|
|
||||||
|
|
@ -1368,7 +1368,7 @@ related functionality of VM CLI and added an ability to reset chain state to a
|
||||||
particular height.
|
particular height.
|
||||||
|
|
||||||
An important dBFT initialization bug that caused timestamp-related errors on
|
An important dBFT initialization bug that caused timestamp-related errors on
|
||||||
block addition was fixed. Also, those who use NeoGo node with
|
block addition was fixed. Also, those who use Tutus node with
|
||||||
EnableCORSWorkaround setting may want to update the node to be able to handle
|
EnableCORSWorkaround setting may want to update the node to be able to handle
|
||||||
web-socket requests with Origin set in the header. The users of websocket RPC
|
web-socket requests with Origin set in the header. The users of websocket RPC
|
||||||
client subscription mechanism are welcomed to move from deprecated subscriptions
|
client subscription mechanism are welcomed to move from deprecated subscriptions
|
||||||
|
|
@ -1434,7 +1434,7 @@ Bugs fixed:
|
||||||
## 0.99.4 "Transliteration" (07 Oct 2022)
|
## 0.99.4 "Transliteration" (07 Oct 2022)
|
||||||
|
|
||||||
A small update mostly interesting for people building/testing smart contracts
|
A small update mostly interesting for people building/testing smart contracts
|
||||||
with NeoGo. It contains long-awaited VM CLI update that allows to use
|
with Tutus. It contains long-awaited VM CLI update that allows to use
|
||||||
blockchain state and complete set of interops, additional helper functions for
|
blockchain state and complete set of interops, additional helper functions for
|
||||||
smart contracts and notification checking code (for upcoming 3.5.0 protocol
|
smart contracts and notification checking code (for upcoming 3.5.0 protocol
|
||||||
changes). Node operators using EnableCORSWorkaround (that is still not
|
changes). Node operators using EnableCORSWorkaround (that is still not
|
||||||
|
|
@ -1498,10 +1498,10 @@ New features:
|
||||||
* historic smart contract calls can now be made via CLI (#2683)
|
* historic smart contract calls can now be made via CLI (#2683)
|
||||||
|
|
||||||
Behavior changes:
|
Behavior changes:
|
||||||
* calculatenetworkfee RPC can handle paid attributes (NeoGo extensions) and
|
* calculatenetworkfee RPC can handle paid attributes (Tutus extensions) and
|
||||||
invalid contract signatures now, it won't return an error for them (#2658)
|
invalid contract signatures now, it won't return an error for them (#2658)
|
||||||
* graceful node shutdown on SIGTERM (#2660)
|
* graceful node shutdown on SIGTERM (#2660)
|
||||||
* wallet balance commands now require at least 0.99.1 NeoGo version (or
|
* wallet balance commands now require at least 0.99.1 Tutus version (or
|
||||||
compatible C# node) used by the RPC server (#2667)
|
compatible C# node) used by the RPC server (#2667)
|
||||||
|
|
||||||
Improvements:
|
Improvements:
|
||||||
|
|
@ -1543,11 +1543,11 @@ Bugs fixed:
|
||||||
|
|
||||||
## 0.99.2 "Recalibration" (12 Aug 2022)
|
## 0.99.2 "Recalibration" (12 Aug 2022)
|
||||||
|
|
||||||
This is a 3.4.0-compatible (tested for mainnet and testnet) update to NeoGo
|
This is a 3.4.0-compatible (tested for mainnet and testnet) update to Tutus
|
||||||
that implements all of the required protocol changes, adds a lot of new RPC
|
that implements all of the required protocol changes, adds a lot of new RPC
|
||||||
client interfaces and provides additional service management functions. This
|
client interfaces and provides additional service management functions. This
|
||||||
is also the first version to support the recently released Go 1.19. Support
|
is also the first version to support the recently released Go 1.19. Support
|
||||||
for Go 1.16 is removed at the same time, so you need Go 1.17+ to build NeoGo
|
for Go 1.16 is removed at the same time, so you need Go 1.17+ to build Tutus
|
||||||
now.
|
now.
|
||||||
|
|
||||||
With this version you can turn on/off, restart or reconfigure internal node
|
With this version you can turn on/off, restart or reconfigure internal node
|
||||||
|
|
@ -1601,7 +1601,7 @@ Improvements:
|
||||||
* Go 1.19 support (#2634)
|
* Go 1.19 support (#2634)
|
||||||
* saved transactions created via CLI (`--out`) now use the maximum possible
|
* saved transactions created via CLI (`--out`) now use the maximum possible
|
||||||
ValidUntilBlock values (#2632)
|
ValidUntilBlock values (#2632)
|
||||||
* RPC server now returns more data about NeoGo-specific protocol extensions
|
* RPC server now returns more data about Tutus-specific protocol extensions
|
||||||
in `getversion` reply (#2632)
|
in `getversion` reply (#2632)
|
||||||
|
|
||||||
Bugs fixed:
|
Bugs fixed:
|
||||||
|
|
@ -1614,7 +1614,7 @@ Bugs fixed:
|
||||||
|
|
||||||
## 0.99.1 "Parametrization" (28 Jul 2022)
|
## 0.99.1 "Parametrization" (28 Jul 2022)
|
||||||
|
|
||||||
We're updating NeoGo to push out a number of significant updates as well as
|
We're updating Tutus to push out a number of significant updates as well as
|
||||||
make it compatible with 3.3.1 version of C# node. The most prominent changes
|
make it compatible with 3.3.1 version of C# node. The most prominent changes
|
||||||
are RPC sessions for iterators returned from invoke* calls, initial bits of
|
are RPC sessions for iterators returned from invoke* calls, initial bits of
|
||||||
RPC client refactoring and support for darwin-arm64 and linux-arm64
|
RPC client refactoring and support for darwin-arm64 and linux-arm64
|
||||||
|
|
@ -1639,7 +1639,7 @@ New features:
|
||||||
use `--wallet-config` option instead of `--wallet` if needed (#2559)
|
use `--wallet-config` option instead of `--wallet` if needed (#2559)
|
||||||
* session-based JSON-RPC iterator API for both server and client with
|
* session-based JSON-RPC iterator API for both server and client with
|
||||||
`traverseiterator` and `terminatesession` calls; notice that the default
|
`traverseiterator` and `terminatesession` calls; notice that the default
|
||||||
server behavior (`SessionEnabled: false`) is compatible with NeoGo 0.99.0,
|
server behavior (`SessionEnabled: false`) is compatible with Tutus 0.99.0,
|
||||||
iterators are expanded the way they were previously, only when sessions are
|
iterators are expanded the way they were previously, only when sessions are
|
||||||
enabled they're returned by the server to the client (#2555)
|
enabled they're returned by the server to the client (#2555)
|
||||||
* `interop` package now provides helper methods for proper `Hash160`,
|
* `interop` package now provides helper methods for proper `Hash160`,
|
||||||
|
|
@ -1684,7 +1684,7 @@ Behavior changes:
|
||||||
`result.NotaryRequestEvent` (#2609)
|
`result.NotaryRequestEvent` (#2609)
|
||||||
|
|
||||||
Improvements:
|
Improvements:
|
||||||
* new `make` targets to build NeoGo binaries locally or using Docker
|
* new `make` targets to build Tutus binaries locally or using Docker
|
||||||
environment (#2537, #2541)
|
environment (#2537, #2541)
|
||||||
* more detailed client-side error on JSON-RPC WebSocket connection closure
|
* more detailed client-side error on JSON-RPC WebSocket connection closure
|
||||||
(#2540)
|
(#2540)
|
||||||
|
|
@ -1745,7 +1745,7 @@ Bugs fixed:
|
||||||
|
|
||||||
## 0.99.0 "Overextrapolation" (03 Jun 2022)
|
## 0.99.0 "Overextrapolation" (03 Jun 2022)
|
||||||
|
|
||||||
A big NeoGo upgrade that is made to be compatible with C# node version
|
A big Tutus upgrade that is made to be compatible with C# node version
|
||||||
3.3.0. All of the protocol changes are implemented there with the main one
|
3.3.0. All of the protocol changes are implemented there with the main one
|
||||||
being the Aspidochelone hardfork that will happen on mainnet
|
being the Aspidochelone hardfork that will happen on mainnet
|
||||||
soon. Compatibility is confirmed for current T5 testnet and mainnet, but this
|
soon. Compatibility is confirmed for current T5 testnet and mainnet, but this
|
||||||
|
|
@ -1974,13 +1974,13 @@ Bugs fixed:
|
||||||
## 0.98.1 "Immunization" (31 Jan 2022)
|
## 0.98.1 "Immunization" (31 Jan 2022)
|
||||||
|
|
||||||
Bug fixes, interesting optimizations, divisible NEP-11 example and a big
|
Bug fixes, interesting optimizations, divisible NEP-11 example and a big
|
||||||
compiler update --- everything you wanted to find in this NeoGo update. It
|
compiler update --- everything you wanted to find in this Tutus update. It
|
||||||
requires chain resynchronization, but this resynchronization will be faster
|
requires chain resynchronization, but this resynchronization will be faster
|
||||||
than ever.
|
than ever.
|
||||||
|
|
||||||
One thing should also be noted, even though this release is 3.1.0-compatible,
|
One thing should also be noted, even though this release is 3.1.0-compatible,
|
||||||
it is known to have a different state for testnet after block 975644, but it's
|
it is known to have a different state for testnet after block 975644, but it's
|
||||||
not a NeoGo fault, it'll be fixed in the next C# node release. The root cause
|
not a Tutus fault, it'll be fixed in the next C# node release. The root cause
|
||||||
is well-known and is not considered to be critical compatibility-wise.
|
is well-known and is not considered to be critical compatibility-wise.
|
||||||
|
|
||||||
New features:
|
New features:
|
||||||
|
|
@ -2102,7 +2102,7 @@ Bugs fixed:
|
||||||
|
|
||||||
## 0.97.3 "Exception" (13 Oct 2021)
|
## 0.97.3 "Exception" (13 Oct 2021)
|
||||||
|
|
||||||
This updated version of NeoGo is made to be compatible with Neo 3.0.3 bringing
|
This updated version of Tutus is made to be compatible with Neo 3.0.3 bringing
|
||||||
with it all corresponding protocol changes and bug fixes so that you can use
|
with it all corresponding protocol changes and bug fixes so that you can use
|
||||||
it on public testnet and mainnet. It also brings with it a complete
|
it on public testnet and mainnet. It also brings with it a complete
|
||||||
experimental P2P state exchange extension for private networks as well as
|
experimental P2P state exchange extension for private networks as well as
|
||||||
|
|
@ -2182,7 +2182,7 @@ Bugs fixed:
|
||||||
|
|
||||||
## 0.97.2 "Dissipation" (18 Aug 2021)
|
## 0.97.2 "Dissipation" (18 Aug 2021)
|
||||||
|
|
||||||
We're rolling out an update for NeoGo nodes that mostly concentrates on
|
We're rolling out an update for Tutus nodes that mostly concentrates on
|
||||||
performance. We've tweaked and tuned a lot of code while staying compatible
|
performance. We've tweaked and tuned a lot of code while staying compatible
|
||||||
with N3 mainnet and testnet. At the same time we're gradually introducing
|
with N3 mainnet and testnet. At the same time we're gradually introducing
|
||||||
changes required for our P2P state exchange extension and this affected DB
|
changes required for our P2P state exchange extension and this affected DB
|
||||||
|
|
@ -2211,7 +2211,7 @@ Bugs fixed:
|
||||||
|
|
||||||
## 0.97.1 "Gasification" (06 Aug 2021)
|
## 0.97.1 "Gasification" (06 Aug 2021)
|
||||||
|
|
||||||
We're updating NeoGo to make it compatible with the latest protocol changes
|
We're updating Tutus to make it compatible with the latest protocol changes
|
||||||
made in 3.0.2 version of C# node. But that's not the only thing we do, this
|
made in 3.0.2 version of C# node. But that's not the only thing we do, this
|
||||||
release also fixes one important bug, improves node's performance and adds CLI
|
release also fixes one important bug, improves node's performance and adds CLI
|
||||||
support to add group signatures to manifests.
|
support to add group signatures to manifests.
|
||||||
|
|
@ -2269,7 +2269,7 @@ Bugs fixed:
|
||||||
## 0.96.1 "Brecciation" (23 Jul 2021)
|
## 0.96.1 "Brecciation" (23 Jul 2021)
|
||||||
|
|
||||||
New CLI commands, updated dependencies and some bugs fixed --- you can find
|
New CLI commands, updated dependencies and some bugs fixed --- you can find
|
||||||
all of this in the new NeoGo release. It's compatible with 0.96.0 (except for
|
all of this in the new Tutus release. It's compatible with 0.96.0 (except for
|
||||||
multisignature contexts, but you're not likely to be using them) and
|
multisignature contexts, but you're not likely to be using them) and
|
||||||
confirmed to have proper RC4 testnet state up to 15K blocks (but 0.96.0 is
|
confirmed to have proper RC4 testnet state up to 15K blocks (but 0.96.0 is
|
||||||
fine wrt this too). At the same time we recommend to resynchronize the chain
|
fine wrt this too). At the same time we recommend to resynchronize the chain
|
||||||
|
|
@ -2303,14 +2303,14 @@ Bugs fixed:
|
||||||
|
|
||||||
## 0.96.0 "Aspiration" (21 Jul 2021)
|
## 0.96.0 "Aspiration" (21 Jul 2021)
|
||||||
|
|
||||||
We're updating NeoGo to support RC4 changes, there are some incompatible ones
|
We're updating Tutus to support RC4 changes, there are some incompatible ones
|
||||||
so this version can't be used with RC3 networks/chains (RC3 testnet is
|
so this version can't be used with RC3 networks/chains (RC3 testnet is
|
||||||
still available, please use 0.95.4 for it). This release was checked for RC4
|
still available, please use 0.95.4 for it). This release was checked for RC4
|
||||||
testnet compatibility and has the same state as C# for the first 5K blocks.
|
testnet compatibility and has the same state as C# for the first 5K blocks.
|
||||||
|
|
||||||
No significant protocol changes are expected now as we're moving to final N3
|
No significant protocol changes are expected now as we're moving to final N3
|
||||||
release, but we'll keep updating the node fixing bugs (if any), improving
|
release, but we'll keep updating the node fixing bugs (if any), improving
|
||||||
performance and introducing NeoGo-specific features.
|
performance and introducing Tutus-specific features.
|
||||||
|
|
||||||
New features:
|
New features:
|
||||||
* "System.Runtime.GetNetwork" system call (#2043)
|
* "System.Runtime.GetNetwork" system call (#2043)
|
||||||
|
|
@ -2374,7 +2374,7 @@ Now we're releasing 0.95.4 with all of these fixes which is still
|
||||||
RC3-compatible and it's stateroot-compatible with C# implementation up to 281K
|
RC3-compatible and it's stateroot-compatible with C# implementation up to 281K
|
||||||
blocks. Please resynchronize to get identic testnet state. And most likely
|
blocks. Please resynchronize to get identic testnet state. And most likely
|
||||||
that's the last RC3-compatible release as we're moving forward to the official
|
that's the last RC3-compatible release as we're moving forward to the official
|
||||||
3.0.0 release of C# version NeoGo will be updated with appropriate changes
|
3.0.0 release of C# version Tutus will be updated with appropriate changes
|
||||||
(some of which are not compatible with RC3).
|
(some of which are not compatible with RC3).
|
||||||
|
|
||||||
New features:
|
New features:
|
||||||
|
|
@ -2481,7 +2481,7 @@ Bugs fixed:
|
||||||
|
|
||||||
## 0.95.1 "Shiftiness" (31 May 2021)
|
## 0.95.1 "Shiftiness" (31 May 2021)
|
||||||
|
|
||||||
Bringing NeoGo up to date with N3 RC3 changes this release also improves
|
Bringing Tutus up to date with N3 RC3 changes this release also improves
|
||||||
compiler and CLI a bit.
|
compiler and CLI a bit.
|
||||||
|
|
||||||
This release is mostly compatible with 0.95.0, but you need to resynchronize
|
This release is mostly compatible with 0.95.0, but you need to resynchronize
|
||||||
|
|
@ -2600,7 +2600,7 @@ This is the second and much improved N3 RC1-compatible release. We've mostly
|
||||||
focused on documentation and examples with this release, so there is a number
|
focused on documentation and examples with this release, so there is a number
|
||||||
of updates in this area including oracle contract example and NEP-11 NFT
|
of updates in this area including oracle contract example and NEP-11 NFT
|
||||||
contract example. At the same time proper testnet network revealed some
|
contract example. At the same time proper testnet network revealed some
|
||||||
implementation inconsistencies between NeoGo and C# especially in oracle and
|
implementation inconsistencies between Tutus and C# especially in oracle and
|
||||||
state validation services, so there are fixes for them also.
|
state validation services, so there are fixes for them also.
|
||||||
|
|
||||||
Protocol-wise this release is compatible with 0.94.0, but MPT structures have
|
Protocol-wise this release is compatible with 0.94.0, but MPT structures have
|
||||||
|
|
@ -2705,7 +2705,7 @@ ready for testnet launch now, so that you could play with new native
|
||||||
contracts, VM instructions and other goodies RC1 brings with it. Some
|
contracts, VM instructions and other goodies RC1 brings with it. Some
|
||||||
usability improvements and documentation updates also went into this release
|
usability improvements and documentation updates also went into this release
|
||||||
as well as a number of fixes stabilizing Notary subsystem (which is
|
as well as a number of fixes stabilizing Notary subsystem (which is
|
||||||
NeoGo-specific protocol extension).
|
Tutus-specific protocol extension).
|
||||||
|
|
||||||
Please note that this release is incompatible with 0.93.0. We do plan to make
|
Please note that this release is incompatible with 0.93.0. We do plan to make
|
||||||
an update soon (with more examples and documentation), but there won't be
|
an update soon (with more examples and documentation), but there won't be
|
||||||
|
|
@ -2740,7 +2740,7 @@ Behavior changes:
|
||||||
require read permission (#1777, #1837)
|
require read permission (#1777, #1837)
|
||||||
* System.Contract.Call interop function now requires state read permission
|
* System.Contract.Call interop function now requires state read permission
|
||||||
(#1777)
|
(#1777)
|
||||||
* NeoGo no longer supports Go 1.13 (#1791)
|
* Tutus no longer supports Go 1.13 (#1791)
|
||||||
* native contract calls are now contract version aware (#1744)
|
* native contract calls are now contract version aware (#1744)
|
||||||
* interop wrappers for smart contracts now use `int` type for all integers
|
* interop wrappers for smart contracts now use `int` type for all integers
|
||||||
(#1796)
|
(#1796)
|
||||||
|
|
@ -2778,7 +2778,7 @@ Improvements:
|
||||||
* documentation updates (#1778, #1843)
|
* documentation updates (#1778, #1843)
|
||||||
* `sendrawtransaction` and `submitblock` RPC calls now return more detailed
|
* `sendrawtransaction` and `submitblock` RPC calls now return more detailed
|
||||||
information about errors for failed submissions (#1773)
|
information about errors for failed submissions (#1773)
|
||||||
* NeoGo now supports Go 1.16 (#1771, #1795)
|
* Tutus now supports Go 1.16 (#1771, #1795)
|
||||||
* NEP-17 transfer tracking was optimized to avoid some DB accesses (#1782)
|
* NEP-17 transfer tracking was optimized to avoid some DB accesses (#1782)
|
||||||
* interop wrappers added for SIGN/ABS/MAX/MIN/WITHIN instructions (#1796)
|
* interop wrappers added for SIGN/ABS/MAX/MIN/WITHIN instructions (#1796)
|
||||||
|
|
||||||
|
|
@ -2811,16 +2811,16 @@ Bugs fixed:
|
||||||
|
|
||||||
This is a 3.0.0-preview5 compatible release with important protocol changes,
|
This is a 3.0.0-preview5 compatible release with important protocol changes,
|
||||||
improved smart contract interop interface for native contracts (it's much
|
improved smart contract interop interface for native contracts (it's much
|
||||||
easier now to use them) and complete Notary subsystem which is a NeoGo
|
easier now to use them) and complete Notary subsystem which is a Tutus
|
||||||
experimental protocol extension for P2P signature collection.
|
experimental protocol extension for P2P signature collection.
|
||||||
|
|
||||||
Please note that this release is incompatible with 0.92.0 and there are no
|
Please note that this release is incompatible with 0.92.0 and there are no
|
||||||
plans for long-term support of it, Neo 3 is still changing and improving.
|
plans for long-term support of it, Neo 3 is still changing and improving.
|
||||||
|
|
||||||
The release is tested with preview5 testnet data (and one of testnet CNs is
|
The release is tested with preview5 testnet data (and one of testnet CNs is
|
||||||
already a neo-go node) up to 48K blocks and it has exactly the same storage
|
already a tutus node) up to 48K blocks and it has exactly the same storage
|
||||||
data except for the Ledger contract that technically can differ between nodes
|
data except for the Ledger contract that technically can differ between nodes
|
||||||
(it's not a part of state proper), and in case of neo-go it's intentionally
|
(it's not a part of state proper), and in case of tutus it's intentionally
|
||||||
different (but this doesn't affect contract's functionality and state roots
|
different (but this doesn't affect contract's functionality and state roots
|
||||||
compatibility).
|
compatibility).
|
||||||
|
|
||||||
|
|
@ -2911,10 +2911,10 @@ Bugs fixed:
|
||||||
|
|
||||||
## 0.92.0 "Fermentation" (28 Dec 2020)
|
## 0.92.0 "Fermentation" (28 Dec 2020)
|
||||||
|
|
||||||
NeoGo project is closing year 2020 with 3.0.0-preview4 compatible release that
|
Tutus project is closing year 2020 with 3.0.0-preview4 compatible release that
|
||||||
also has much improved performance, a lot of updates to compiler and SDK and
|
also has much improved performance, a lot of updates to compiler and SDK and
|
||||||
some experimental protocol extensions. This release also is the most tested
|
some experimental protocol extensions. This release also is the most tested
|
||||||
release of NeoGo ever, we've reached 83% code coverage (Neo 2.x only has
|
release of Tutus ever, we've reached 83% code coverage (Neo 2.x only has
|
||||||
66%).
|
66%).
|
||||||
|
|
||||||
Please note that this release is incompatible with 0.91.0 and there are no
|
Please note that this release is incompatible with 0.91.0 and there are no
|
||||||
|
|
@ -2922,7 +2922,7 @@ plans for long-term support of it, Neo 3 is still changing and improving.
|
||||||
|
|
||||||
Protocol-wise this release is tested with preview4 testnet (including working
|
Protocol-wise this release is tested with preview4 testnet (including working
|
||||||
in consensus with C# nodes) and it is compatible with it even though there are
|
in consensus with C# nodes) and it is compatible with it even though there are
|
||||||
some known storage change mismatches between NeoGo and C# (functionally the
|
some known storage change mismatches between Tutus and C# (functionally the
|
||||||
contents is the same, this mismatch is caused by JSON handling differences and
|
contents is the same, this mismatch is caused by JSON handling differences and
|
||||||
needs to be addressed at the protocol level).
|
needs to be addressed at the protocol level).
|
||||||
|
|
||||||
|
|
@ -3143,8 +3143,8 @@ Bugs fixed:
|
||||||
|
|
||||||
## 0.91.0 "Ululation" (18 August 2020)
|
## 0.91.0 "Ululation" (18 August 2020)
|
||||||
|
|
||||||
We've updated NeoGo for 3.0.0-preview3 compatibility implementing all the
|
We've updated Tutus for 3.0.0-preview3 compatibility implementing all the
|
||||||
appropriate protocol changes as well as improving NeoGo-specific
|
appropriate protocol changes as well as improving Tutus-specific
|
||||||
components. This release brings with it significant changes for smart
|
components. This release brings with it significant changes for smart
|
||||||
contracts, both in terms of Neo protocol changes (no more there is a single
|
contracts, both in terms of Neo protocol changes (no more there is a single
|
||||||
entry point! execution environment has also changed in lots of ways) and Go
|
entry point! execution environment has also changed in lots of ways) and Go
|
||||||
|
|
@ -3159,7 +3159,7 @@ that also changed hashes and addresses.
|
||||||
But nonetheless it is tested to be compatible with preview3 testnet for up to
|
But nonetheless it is tested to be compatible with preview3 testnet for up to
|
||||||
68K of blocks in terms of storage changes, with neo-debugger for debug data
|
68K of blocks in terms of storage changes, with neo-debugger for debug data
|
||||||
produced by the compiler and with consensus process for heterogeneous setups
|
produced by the compiler and with consensus process for heterogeneous setups
|
||||||
(like 2 neo-go CNs with 2 C# CNs).
|
(like 2 tutus CNs with 2 C# CNs).
|
||||||
|
|
||||||
New features:
|
New features:
|
||||||
* secp256k1 signature checks added to interop functions
|
* secp256k1 signature checks added to interop functions
|
||||||
|
|
@ -3233,7 +3233,7 @@ Behavior changes:
|
||||||
* governance scheme was changed to delegated committee-based one. The number
|
* governance scheme was changed to delegated committee-based one. The number
|
||||||
of validators is now specified with ValidatorsCount configuration option,
|
of validators is now specified with ValidatorsCount configuration option,
|
||||||
standby validators are no longer being registered by default (#867, #1300)
|
standby validators are no longer being registered by default (#867, #1300)
|
||||||
* Go 1.13+ is now required to build neo-go (#1281)
|
* Go 1.13+ is now required to build tutus (#1281)
|
||||||
* public contract methods now always return some value and this is being
|
* public contract methods now always return some value and this is being
|
||||||
checked by the VM (#1196, #1331, #1332)
|
checked by the VM (#1196, #1331, #1332)
|
||||||
* runtime interop package now exports triggers as proper constants rather
|
* runtime interop package now exports triggers as proper constants rather
|
||||||
|
|
@ -3306,7 +3306,7 @@ Bugs fixed:
|
||||||
|
|
||||||
## 0.90.0 "Tantalization" (14 July 2020)
|
## 0.90.0 "Tantalization" (14 July 2020)
|
||||||
|
|
||||||
The first Neo 3 compatible release of neo-go! We've targeted to make it
|
The first Neo 3 compatible release of tutus! We've targeted to make it
|
||||||
compatible with preview2 release of Neo 3, so it only contains features
|
compatible with preview2 release of Neo 3, so it only contains features
|
||||||
available there, but at the same time this makes the node more useful until we
|
available there, but at the same time this makes the node more useful until we
|
||||||
have some more up to date reference version. It's a completely different
|
have some more up to date reference version. It's a completely different
|
||||||
|
|
@ -3335,14 +3335,14 @@ Things that have also changed:
|
||||||
* notification subsystem
|
* notification subsystem
|
||||||
* executable format output for compiler
|
* executable format output for compiler
|
||||||
|
|
||||||
Compatibility level of this neo-go release:
|
Compatibility level of this tutus release:
|
||||||
* identical storage changes compared to C# node for 378K blocks of preview2
|
* identical storage changes compared to C# node for 378K blocks of preview2
|
||||||
testnet
|
testnet
|
||||||
* debugging info produced is compatible with preview2-compatible neo-debugger
|
* debugging info produced is compatible with preview2-compatible neo-debugger
|
||||||
* running consensus nodes in heterogeneous setup is possible (2 neo-go CNs
|
* running consensus nodes in heterogeneous setup is possible (2 tutus CNs
|
||||||
with 2 C# CNs, for example)
|
with 2 C# CNs, for example)
|
||||||
|
|
||||||
Changes specific to neo-go:
|
Changes specific to tutus:
|
||||||
* some CLI parameters like wallet path or RPC endpoint URL have been unified
|
* some CLI parameters like wallet path or RPC endpoint URL have been unified
|
||||||
across all commands and thus have changed in some of them (refer to CLI
|
across all commands and thus have changed in some of them (refer to CLI
|
||||||
help for details)
|
help for details)
|
||||||
|
|
@ -3352,7 +3352,7 @@ Changes specific to neo-go:
|
||||||
* we no longer provide bootstrapping 6k block dump for private networks, you
|
* we no longer provide bootstrapping 6k block dump for private networks, you
|
||||||
have 30000000 GAS right in the genesis block and it's not hard to make use
|
have 30000000 GAS right in the genesis block and it's not hard to make use
|
||||||
of it (see
|
of it (see
|
||||||
[neo-go-sc-wrkshp](https://github.com/tutus-one/tutus-chain-sc-wrkshp) for an
|
[tutus-sc-wrkshp](https://github.com/tutus-one/tutus-chain-sc-wrkshp) for an
|
||||||
example of how to use it)
|
example of how to use it)
|
||||||
* we have a conversion tool for your old Neo 2 wallets (`wallet convert`
|
* we have a conversion tool for your old Neo 2 wallets (`wallet convert`
|
||||||
command), so you can reuse keys on Neo 3 networks
|
command), so you can reuse keys on Neo 3 networks
|
||||||
|
|
|
||||||
240
README.md
240
README.md
|
|
@ -1,88 +1,192 @@
|
||||||
# Tutus Chain
|
<p align="center">
|
||||||
|
<h1 align="center">Tutus</h1>
|
||||||
|
<p align="center">
|
||||||
|
<strong>Sovereign Blockchain Infrastructure for Government</strong>
|
||||||
|
</p>
|
||||||
|
<p align="center">
|
||||||
|
<a href="https://tutus.one">Website</a> |
|
||||||
|
<a href="#quick-start">Quick Start</a> |
|
||||||
|
<a href="#documentation">Documentation</a> |
|
||||||
|
<a href="#license">License</a>
|
||||||
|
</p>
|
||||||
|
</p>
|
||||||
|
|
||||||
Sovereign blockchain platform for government deployments. Forked from [NeoGo](https://github.com/nspcc-dev/neo-go).
|
---
|
||||||
|
|
||||||
**Website:** tutus.one
|
|
||||||
**License:** Apache 2.0
|
|
||||||
|
|
||||||
## Overview
|
## Overview
|
||||||
|
|
||||||
Tutus is an independent blockchain designed for government-grade deployments with:
|
Tutus is a high-performance blockchain platform engineered for sovereign government deployments. It provides the foundational infrastructure for digital identity, democratic governance, universal services, and transparent economics at national scale.
|
||||||
|
|
||||||
- **Sovereign instances** - Each government runs their own chain
|
### Key Features
|
||||||
- **1-second blocks** - Fast finality with dBFT consensus
|
|
||||||
- **7 validators** - Government-controlled consensus nodes
|
|
||||||
- **Zero gas for citizens** - Native contracts subsidize operations
|
|
||||||
- **Inter-government bridge** - Optional cross-border interoperability
|
|
||||||
|
|
||||||
## Building
|
- **Sovereign Architecture** — Each government operates an independent blockchain instance with full data sovereignty
|
||||||
|
- **Sub-Second Finality** — 1-second block times with deterministic Byzantine Fault Tolerant (dBFT) consensus
|
||||||
|
- **Zero-Cost Citizen Access** — Native fee subsidization ensures universal access regardless of economic status
|
||||||
|
- **Constitutional Rights Framework** — 14 immutable rights encoded directly into the protocol
|
||||||
|
- **Cross-Border Interoperability** — Optional federation protocol for inter-government cooperation
|
||||||
|
|
||||||
Requires Go 1.24+ and `make`:
|
### Performance
|
||||||
|
|
||||||
```bash
|
| Metric | Value |
|
||||||
make build
|
|--------|-------|
|
||||||
```
|
| Block Time | 1 second |
|
||||||
|
| Finality | Immediate (dBFT) |
|
||||||
|
| Throughput | ~30,000 TPS |
|
||||||
|
| Validators | Configurable (default: 7) |
|
||||||
|
|
||||||
The resulting binary is `bin/tutus`.
|
## Native Contracts
|
||||||
|
|
||||||
## Running a Node
|
Tutus includes purpose-built native contracts for government operations:
|
||||||
|
|
||||||
Start a Tutus node:
|
|
||||||
|
|
||||||
```bash
|
|
||||||
./bin/tutus node --config-file ./config/protocol.tutus.yml
|
|
||||||
```
|
|
||||||
|
|
||||||
For testnet:
|
|
||||||
|
|
||||||
```bash
|
|
||||||
./bin/tutus node --config-file ./config/protocol.tutus.testnet.yml
|
|
||||||
```
|
|
||||||
|
|
||||||
## Network Flags
|
|
||||||
|
|
||||||
- `--tutus` - Tutus mainnet (government deployment)
|
|
||||||
- `--tutus-testnet` - Tutus testnet
|
|
||||||
|
|
||||||
## Configuration
|
|
||||||
|
|
||||||
Network configurations are in `./config/`:
|
|
||||||
|
|
||||||
| File | Purpose |
|
|
||||||
|------|---------|
|
|
||||||
| `protocol.tutus.yml` | Production government deployment |
|
|
||||||
| `protocol.tutus.testnet.yml` | Development testnet |
|
|
||||||
|
|
||||||
## Docker
|
|
||||||
|
|
||||||
```bash
|
|
||||||
docker build -t tutus-chain .
|
|
||||||
docker run -d --name tutus -p 10333:10333 -p 10332:10332 tutus-chain
|
|
||||||
```
|
|
||||||
|
|
||||||
## Native Contracts (Planned)
|
|
||||||
|
|
||||||
The following will be built into the Tutus protocol:
|
|
||||||
|
|
||||||
| Contract | Purpose |
|
| Contract | Purpose |
|
||||||
|----------|---------|
|
|----------|---------|
|
||||||
| PersonToken | Soul-bound identity |
|
| **Vita** | Soul-bound identity token (one per person) |
|
||||||
| Scire | Universal education |
|
| **Annos** | Lifespan and age verification |
|
||||||
| Salus | Universal healthcare |
|
| **Lex** | Constitutional rights and legal framework |
|
||||||
| Sese | Life planning |
|
| **Scire** | Universal education infrastructure |
|
||||||
| Tribute | Anti-hoarding economics |
|
| **Salus** | Universal healthcare management |
|
||||||
| VTS | Government stablecoin |
|
| **Sese** | Life planning and sabbaticals |
|
||||||
| Eligere | Democratic voting |
|
| **Eligere** | Democratic voting and governance |
|
||||||
|
| **VTS** | Government-backed stablecoin |
|
||||||
|
| **Tribute** | Anti-hoarding economic policy |
|
||||||
|
| **Collocatio** | Citizen investment opportunities |
|
||||||
|
| **Federation** | Cross-chain identity coordination |
|
||||||
|
| **Pons** | Inter-government bridge protocol |
|
||||||
|
| **Palam** | Transparency and audit ledger |
|
||||||
|
|
||||||
## Validator Setup
|
## Quick Start
|
||||||
|
|
||||||
See [docs/validator.md](docs/validator.md) for government validator deployment.
|
### Prerequisites
|
||||||
|
|
||||||
## Origin
|
- Go 1.24 or higher
|
||||||
|
- Make
|
||||||
|
|
||||||
Tutus is forked from NeoGo, the Go implementation of the Neo N3 blockchain.
|
### Building
|
||||||
We maintain compatibility with the Neo VM while extending the protocol for government use cases.
|
|
||||||
|
```bash
|
||||||
|
git clone https://github.com/tutus-one/tutus-chain.git
|
||||||
|
cd tutus-chain
|
||||||
|
make build
|
||||||
|
```
|
||||||
|
|
||||||
|
The compiled binary is located at `bin/tutus`.
|
||||||
|
|
||||||
|
### Running a Node
|
||||||
|
|
||||||
|
```bash
|
||||||
|
# Development
|
||||||
|
./bin/tutus node --config-file ./config/protocol.tutus.testnet.yml
|
||||||
|
|
||||||
|
# Production
|
||||||
|
./bin/tutus node --config-file ./config/protocol.tutus.yml
|
||||||
|
```
|
||||||
|
|
||||||
|
### Docker Deployment
|
||||||
|
|
||||||
|
```bash
|
||||||
|
# Build image
|
||||||
|
docker build -t tutus .
|
||||||
|
|
||||||
|
# Run node
|
||||||
|
docker run -d \
|
||||||
|
--name tutus-node \
|
||||||
|
-p 10333:10333 \
|
||||||
|
-p 10332:10332 \
|
||||||
|
-v tutus-data:/chains \
|
||||||
|
tutus
|
||||||
|
|
||||||
|
# Multi-node testnet
|
||||||
|
docker-compose up -d
|
||||||
|
```
|
||||||
|
|
||||||
|
## Documentation
|
||||||
|
|
||||||
|
| Document | Description |
|
||||||
|
|----------|-------------|
|
||||||
|
| [Node Configuration](docs/node-configuration.md) | Full configuration reference |
|
||||||
|
| [Consensus](docs/consensus.md) | dBFT consensus protocol |
|
||||||
|
| [RPC API](docs/rpc.md) | JSON-RPC interface |
|
||||||
|
| [CLI Reference](docs/cli.md) | Command-line interface |
|
||||||
|
| [Smart Contracts](docs/compiler.md) | Contract development |
|
||||||
|
| [Oracle](docs/oracle.md) | External data integration |
|
||||||
|
| [Notary](docs/notary.md) | Multi-signature transactions |
|
||||||
|
|
||||||
|
## Architecture
|
||||||
|
|
||||||
|
```
|
||||||
|
┌─────────────────────────────────────────────────────────────┐
|
||||||
|
│ Government Instance │
|
||||||
|
├─────────────────────────────────────────────────────────────┤
|
||||||
|
│ Citizens │ Services │ Governance │ Economics │
|
||||||
|
│ ───────── │ ───────── │ ─────────── │ ────────── │
|
||||||
|
│ Vita │ Scire │ Eligere │ VTS │
|
||||||
|
│ Annos │ Salus │ Lex │ Tribute │
|
||||||
|
│ │ Sese │ │ Collocatio │
|
||||||
|
├─────────────────────────────────────────────────────────────┤
|
||||||
|
│ Federation Layer (Optional) │
|
||||||
|
│ ───────────────────────────────────────────────────────── │
|
||||||
|
│ Federation (Cross-chain Vita) │ Pons (Inter-gov Bridge) │
|
||||||
|
└─────────────────────────────────────────────────────────────┘
|
||||||
|
```
|
||||||
|
|
||||||
|
## Configuration
|
||||||
|
|
||||||
|
Network configurations are located in `./config/`:
|
||||||
|
|
||||||
|
| Configuration | Purpose |
|
||||||
|
|---------------|---------|
|
||||||
|
| `protocol.tutus.yml` | Production deployment |
|
||||||
|
| `protocol.tutus.testnet.yml` | Public testnet |
|
||||||
|
| `protocol.tutus.alpha.*.yml` | Alpha testnet instance |
|
||||||
|
| `protocol.tutus.beta.*.yml` | Beta testnet instance |
|
||||||
|
|
||||||
|
## Security
|
||||||
|
|
||||||
|
Tutus implements comprehensive security measures:
|
||||||
|
|
||||||
|
- **Domain-Specific Committees** — Separate authority for legal, health, education, economic, identity, and governance operations
|
||||||
|
- **Circuit Breakers** — Automatic operation halting on anomaly detection
|
||||||
|
- **Formal Invariants** — Runtime verification of critical protocol properties
|
||||||
|
- **Comprehensive Audit Logging** — Full traceability of all operations
|
||||||
|
|
||||||
|
For security issues, contact: security@tutus.one
|
||||||
|
|
||||||
|
## Contributing
|
||||||
|
|
||||||
|
We welcome contributions from the community. Please read our [Contributing Guidelines](CONTRIBUTING.md) before submitting pull requests.
|
||||||
|
|
||||||
|
## About
|
||||||
|
|
||||||
|
Tutus is developed by **MarketAlly** as critical infrastructure for the future of digital governance.
|
||||||
|
|
||||||
|
**Lead Architect:** David H. Friedel Jr.
|
||||||
|
|
||||||
|
### Acknowledgments
|
||||||
|
|
||||||
|
Tutus is built upon the foundation of the [Neo](https://neo.org) blockchain's Go implementation. We gratefully acknowledge the Neo community's contributions to blockchain technology.
|
||||||
|
|
||||||
## License
|
## License
|
||||||
|
|
||||||
Apache 2.0 - See [LICENSE.md](LICENSE.md)
|
Tutus is licensed under the [Apache License 2.0](LICENSE.md).
|
||||||
|
|
||||||
|
```
|
||||||
|
Copyright 2024-2025 MarketAlly
|
||||||
|
|
||||||
|
Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
|
you may not use this file except in compliance with the License.
|
||||||
|
You may obtain a copy of the License at
|
||||||
|
|
||||||
|
http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
|
||||||
|
Unless required by applicable law or agreed to in writing, software
|
||||||
|
distributed under the License is distributed on an "AS IS" BASIS,
|
||||||
|
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||||
|
See the License for the specific language governing permissions and
|
||||||
|
limitations under the License.
|
||||||
|
```
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
<p align="center">
|
||||||
|
<sub>Built with purpose for humanity's digital future</sub>
|
||||||
|
</p>
|
||||||
|
|
|
||||||
|
|
@ -1,6 +1,6 @@
|
||||||
# Roadmap for neo-go
|
# Roadmap for tutus
|
||||||
|
|
||||||
This defines approximate plan of neo-go releases and key features planned for
|
This defines approximate plan of tutus releases and key features planned for
|
||||||
them. Things can change if there is a need to push a bugfix or some critical
|
them. Things can change if there is a need to push a bugfix or some critical
|
||||||
functionality.
|
functionality.
|
||||||
|
|
||||||
|
|
|
||||||
104
docs/cli.md
104
docs/cli.md
|
|
@ -1,22 +1,22 @@
|
||||||
# NeoGo CLI interface
|
# Tutus CLI interface
|
||||||
|
|
||||||
NeoGo CLI provides all functionality from one binary. It's used to run
|
Tutus CLI provides all functionality from one binary. It's used to run
|
||||||
a node, create/compile/deploy/invoke/debug smart contracts, run vm and operate
|
a node, create/compile/deploy/invoke/debug smart contracts, run vm and operate
|
||||||
with a wallet. Standard setup assumes that you run a node as a
|
with a wallet. Standard setup assumes that you run a node as a
|
||||||
separate process, and it doesn't provide any CLI of its own. Instead, it just
|
separate process, and it doesn't provide any CLI of its own. Instead, it just
|
||||||
makes RPC interface available for you. To perform any actions, you invoke NeoGo
|
makes RPC interface available for you. To perform any actions, you invoke Tutus
|
||||||
as a client that connects to this RPC node and does things you want it to do
|
as a client that connects to this RPC node and does things you want it to do
|
||||||
(like transferring some NEP-17 asset).
|
(like transferring some NEP-17 asset).
|
||||||
|
|
||||||
All CLI commands have corresponding help messages, use `--help` option to get
|
All CLI commands have corresponding help messages, use `--help` option to get
|
||||||
them, for example:
|
them, for example:
|
||||||
```
|
```
|
||||||
./bin/neo-go db --help
|
./bin/tutus db --help
|
||||||
```
|
```
|
||||||
|
|
||||||
## Running node
|
## Running node
|
||||||
|
|
||||||
Use `node` command to run a NeoGo node, it will be configured using a YAML
|
Use `node` command to run a Tutus node, it will be configured using a YAML
|
||||||
file that contains network parameters as well as node settings.
|
file that contains network parameters as well as node settings.
|
||||||
|
|
||||||
### Configuration
|
### Configuration
|
||||||
|
|
@ -31,13 +31,13 @@ All config files are located in `./config` and they are differentiated according
|
||||||
If you want to use some non-default configuration directory path, specify
|
If you want to use some non-default configuration directory path, specify
|
||||||
`--config-path` flag:
|
`--config-path` flag:
|
||||||
|
|
||||||
`./bin/neo-go node --config-path /user/yourConfigPath`
|
`./bin/tutus node --config-path /user/yourConfigPath`
|
||||||
|
|
||||||
The file loaded is chosen automatically depending on network mode flag.
|
The file loaded is chosen automatically depending on network mode flag.
|
||||||
|
|
||||||
Or just provide path to the configuration file using `--config-file` flag:
|
Or just provide path to the configuration file using `--config-file` flag:
|
||||||
|
|
||||||
`./bin/neo-go node --config-file /user/yourConfigPath/yourConfigFile.yml`
|
`./bin/tutus node --config-file /user/yourConfigPath/yourConfigFile.yml`
|
||||||
|
|
||||||
Refer to the [node configuration documentation](./node-configuration.md) for
|
Refer to the [node configuration documentation](./node-configuration.md) for
|
||||||
detailed configuration file description.
|
detailed configuration file description.
|
||||||
|
|
@ -47,13 +47,13 @@ detailed configuration file description.
|
||||||
To start Neo node on private network, use:
|
To start Neo node on private network, use:
|
||||||
|
|
||||||
```
|
```
|
||||||
./bin/neo-go node
|
./bin/tutus node
|
||||||
```
|
```
|
||||||
|
|
||||||
Or specify a different network with an appropriate flag like this:
|
Or specify a different network with an appropriate flag like this:
|
||||||
|
|
||||||
```
|
```
|
||||||
./bin/neo-go node --mainnet
|
./bin/tutus node --mainnet
|
||||||
```
|
```
|
||||||
|
|
||||||
By default, the node will run in the foreground using current standard output for
|
By default, the node will run in the foreground using current standard output for
|
||||||
|
|
@ -98,12 +98,12 @@ Typical scenarios when this can be useful (without full node restart):
|
||||||
|
|
||||||
### DB import/exports/reset
|
### DB import/exports/reset
|
||||||
|
|
||||||
Node operates using some database as a backend to store blockchain data. NeoGo
|
Node operates using some database as a backend to store blockchain data. Tutus
|
||||||
allows to dump chain into a file from the database (when node is stopped) or to
|
allows to dump chain into a file from the database (when node is stopped) or to
|
||||||
import blocks from a file into the database (also when node is stopped). Use
|
import blocks from a file into the database (also when node is stopped). Use
|
||||||
`db` command for that.
|
`db` command for that.
|
||||||
|
|
||||||
NeoGo allows to reset the node state to a particular point. It is possible for
|
Tutus allows to reset the node state to a particular point. It is possible for
|
||||||
those nodes that do store complete chain state or for nodes with `RemoveUntraceableBlocks`
|
those nodes that do store complete chain state or for nodes with `RemoveUntraceableBlocks`
|
||||||
setting on that are not yet reached `MaxTraceableBlocks` number of blocks. Use
|
setting on that are not yet reached `MaxTraceableBlocks` number of blocks. Use
|
||||||
`db reset` command with the target block specified to roll back all the changes
|
`db reset` command with the target block specified to roll back all the changes
|
||||||
|
|
@ -146,7 +146,7 @@ path can be used to read the wallet from the standard input.
|
||||||
|
|
||||||
Use `wallet init` command to create a new wallet:
|
Use `wallet init` command to create a new wallet:
|
||||||
```
|
```
|
||||||
./bin/neo-go wallet init -w wallet.nep6
|
./bin/tutus wallet init -w wallet.nep6
|
||||||
|
|
||||||
{
|
{
|
||||||
"version": "1.0",
|
"version": "1.0",
|
||||||
|
|
@ -167,7 +167,7 @@ wallet successfully created, file location is wallet.nep6
|
||||||
where "wallet.nep6" is a wallet file name. This wallet will be empty. To
|
where "wallet.nep6" is a wallet file name. This wallet will be empty. To
|
||||||
generate a new key pair and add an account for it, use `-a` option:
|
generate a new key pair and add an account for it, use `-a` option:
|
||||||
```
|
```
|
||||||
./bin/neo-go wallet init -w wallet.nep6 -a
|
./bin/tutus wallet init -w wallet.nep6 -a
|
||||||
Enter the name of the account > Name
|
Enter the name of the account > Name
|
||||||
Enter passphrase >
|
Enter passphrase >
|
||||||
Confirm passphrase >
|
Confirm passphrase >
|
||||||
|
|
@ -208,7 +208,7 @@ wallet successfully created, file location is wallet.nep6
|
||||||
|
|
||||||
or use `wallet create` command to create a new account in an existing wallet:
|
or use `wallet create` command to create a new account in an existing wallet:
|
||||||
```
|
```
|
||||||
./bin/neo-go wallet create -w wallet.nep6
|
./bin/tutus wallet create -w wallet.nep6
|
||||||
Enter the name of the account > Joe Random
|
Enter the name of the account > Joe Random
|
||||||
Enter passphrase >
|
Enter passphrase >
|
||||||
Confirm passphrase >
|
Confirm passphrase >
|
||||||
|
|
@ -221,7 +221,7 @@ Legacy. New wallet is specified in `-o` option, it will have the same keys
|
||||||
with Neo N3 addresses (notice that it doesn't do anything to your assets, it
|
with Neo N3 addresses (notice that it doesn't do anything to your assets, it
|
||||||
just allows to reuse the old key on N3 network).
|
just allows to reuse the old key on N3 network).
|
||||||
```
|
```
|
||||||
./bin/neo-go wallet convert -w old.nep6 -o new.nep6
|
./bin/tutus wallet convert -w old.nep6 -o new.nep6
|
||||||
```
|
```
|
||||||
|
|
||||||
#### Check wallet contents
|
#### Check wallet contents
|
||||||
|
|
@ -229,7 +229,7 @@ just allows to reuse the old key on N3 network).
|
||||||
its output is the same NEP-6 JSON, but better formatted. You can also decrypt
|
its output is the same NEP-6 JSON, but better formatted. You can also decrypt
|
||||||
keys at the same time with `-d` option (you'll be prompted for password):
|
keys at the same time with `-d` option (you'll be prompted for password):
|
||||||
```
|
```
|
||||||
./bin/neo-go wallet dump -w wallet.nep6 -d
|
./bin/tutus wallet dump -w wallet.nep6 -d
|
||||||
Enter wallet password >
|
Enter wallet password >
|
||||||
|
|
||||||
{
|
{
|
||||||
|
|
@ -267,7 +267,7 @@ Enter wallet password >
|
||||||
You can also get public keys for addresses stored in your wallet with `wallet
|
You can also get public keys for addresses stored in your wallet with `wallet
|
||||||
dump-keys` command:
|
dump-keys` command:
|
||||||
```
|
```
|
||||||
./bin/neo-go wallet dump-keys -w wallet.nep6
|
./bin/tutus wallet dump-keys -w wallet.nep6
|
||||||
NMe64G6j6nkPZby26JAgpaCNrn1Ee4wW6E (simple signature contract):
|
NMe64G6j6nkPZby26JAgpaCNrn1Ee4wW6E (simple signature contract):
|
||||||
03cecd63d7d8120c3b194c3b2880dd4aafe1475c57e40c852872d7305615258140
|
03cecd63d7d8120c3b194c3b2880dd4aafe1475c57e40c852872d7305615258140
|
||||||
```
|
```
|
||||||
|
|
@ -276,7 +276,7 @@ NMe64G6j6nkPZby26JAgpaCNrn1Ee4wW6E (simple signature contract):
|
||||||
`wallet export` allows you to export a private key in NEP-2 encrypted or WIF
|
`wallet export` allows you to export a private key in NEP-2 encrypted or WIF
|
||||||
(unencrypted) form (`-d` flag).
|
(unencrypted) form (`-d` flag).
|
||||||
```
|
```
|
||||||
$ ./bin/neo-go wallet export -w wallet.nep6 -d NMe64G6j6nkPZby26JAgpaCNrn1Ee4wW6E
|
$ ./bin/tutus wallet export -w wallet.nep6 -d NMe64G6j6nkPZby26JAgpaCNrn1Ee4wW6E
|
||||||
Enter password >
|
Enter password >
|
||||||
KyswN8r48dhsvyQJVy97RWnZmKgYLrXv9mCL81Kb4vAagZiCsePv
|
KyswN8r48dhsvyQJVy97RWnZmKgYLrXv9mCL81Kb4vAagZiCsePv
|
||||||
```
|
```
|
||||||
|
|
@ -285,7 +285,7 @@ KyswN8r48dhsvyQJVy97RWnZmKgYLrXv9mCL81Kb4vAagZiCsePv
|
||||||
You can import NEP-2 or WIF private key along with verification contract (if
|
You can import NEP-2 or WIF private key along with verification contract (if
|
||||||
it's non-standard):
|
it's non-standard):
|
||||||
```
|
```
|
||||||
./bin/neo-go wallet import --wif KwYgW8gcxj1JWJXhPSu4Fqwzfhp5Yfi42mdYmMa4XqK7NJxXUSK7 -w wallet.nep6
|
./bin/tutus wallet import --wif KwYgW8gcxj1JWJXhPSu4Fqwzfhp5Yfi42mdYmMa4XqK7NJxXUSK7 -w wallet.nep6
|
||||||
Provided WIF was unencrypted. Wallet can contain only encrypted keys.
|
Provided WIF was unencrypted. Wallet can contain only encrypted keys.
|
||||||
Enter the name of the account > New Account
|
Enter the name of the account > New Account
|
||||||
Enter passphrase >
|
Enter passphrase >
|
||||||
|
|
@ -310,17 +310,17 @@ offline signing). Use with care, don't lose your keys with it.
|
||||||
`wallet candidate` provides commands to register or unregister a committee
|
`wallet candidate` provides commands to register or unregister a committee
|
||||||
(and therefore validator) candidate key:
|
(and therefore validator) candidate key:
|
||||||
```
|
```
|
||||||
./bin/neo-go wallet candidate register -a NMe64G6j6nkPZby26JAgpaCNrn1Ee4wW6E -w wallet.json -r http://localhost:20332
|
./bin/tutus wallet candidate register -a NMe64G6j6nkPZby26JAgpaCNrn1Ee4wW6E -w wallet.json -r http://localhost:20332
|
||||||
```
|
```
|
||||||
|
|
||||||
You can also vote for candidates if you own NEO:
|
You can also vote for candidates if you own NEO:
|
||||||
```
|
```
|
||||||
./bin/neo-go wallet candidate vote -a NMe64G6j6nkPZby26JAgpaCNrn1Ee4wW6E -w wallet.json -r http://localhost:20332 -c 03cecd63d7d8120c3b194c3b2880dd4aafe1475c57e40c852872d7305615258140
|
./bin/tutus wallet candidate vote -a NMe64G6j6nkPZby26JAgpaCNrn1Ee4wW6E -w wallet.json -r http://localhost:20332 -c 03cecd63d7d8120c3b194c3b2880dd4aafe1475c57e40c852872d7305615258140
|
||||||
```
|
```
|
||||||
|
|
||||||
Do not provide candidate argument to perform unvoting:
|
Do not provide candidate argument to perform unvoting:
|
||||||
```
|
```
|
||||||
./bin/neo-go wallet candidate vote -a NMe64G6j6nkPZby26JAgpaCNrn1Ee4wW6E -w wallet.json -r http://localhost:20332
|
./bin/tutus wallet candidate vote -a NMe64G6j6nkPZby26JAgpaCNrn1Ee4wW6E -w wallet.json -r http://localhost:20332
|
||||||
```
|
```
|
||||||
|
|
||||||
### Getting data from chain
|
### Getting data from chain
|
||||||
|
|
@ -328,7 +328,7 @@ Do not provide candidate argument to perform unvoting:
|
||||||
#### Node height/validated height
|
#### Node height/validated height
|
||||||
`query height` returns the latest block and validated state height:
|
`query height` returns the latest block and validated state height:
|
||||||
```
|
```
|
||||||
$ ./bin/neo-go query height -r http://localhost:20332
|
$ ./bin/tutus query height -r http://localhost:20332
|
||||||
Latest block: 11926
|
Latest block: 11926
|
||||||
Validated state: 11926
|
Validated state: 11926
|
||||||
```
|
```
|
||||||
|
|
@ -336,7 +336,7 @@ Validated state: 11926
|
||||||
#### Transaction status
|
#### Transaction status
|
||||||
`query tx` provides convenient wrapper over RPC calls to query transaction status.
|
`query tx` provides convenient wrapper over RPC calls to query transaction status.
|
||||||
```
|
```
|
||||||
./bin/neo-go query tx --rpc-endpoint http://localhost:20332 aaf87628851e0c03ee086ff88596bc24de87082e9e5c73d75bb1c740d1d68088
|
./bin/tutus query tx --rpc-endpoint http://localhost:20332 aaf87628851e0c03ee086ff88596bc24de87082e9e5c73d75bb1c740d1d68088
|
||||||
Hash: aaf87628851e0c03ee086ff88596bc24de87082e9e5c73d75bb1c740d1d68088
|
Hash: aaf87628851e0c03ee086ff88596bc24de87082e9e5c73d75bb1c740d1d68088
|
||||||
OnChain: true
|
OnChain: true
|
||||||
BlockHash: fabcd46e93b8f4e1bc5689e3e0cc59704320494f7a0265b91ae78b4d747ee93b
|
BlockHash: fabcd46e93b8f4e1bc5689e3e0cc59704320494f7a0265b91ae78b4d747ee93b
|
||||||
|
|
@ -348,7 +348,7 @@ if it has been executed successfully.
|
||||||
#### Committee members
|
#### Committee members
|
||||||
`query committee` returns a list of current committee members:
|
`query committee` returns a list of current committee members:
|
||||||
```
|
```
|
||||||
$ ./bin/neo-go query committee -r http://localhost:20332
|
$ ./bin/tutus query committee -r http://localhost:20332
|
||||||
03009b7540e10f2562e5fd8fac9eaec25166a58b26e412348ff5a86927bfac22a2
|
03009b7540e10f2562e5fd8fac9eaec25166a58b26e412348ff5a86927bfac22a2
|
||||||
030205e9cefaea5a1dfc580af20c8d5aa2468bb0148f1a5e4605fc622c80e604ba
|
030205e9cefaea5a1dfc580af20c8d5aa2468bb0148f1a5e4605fc622c80e604ba
|
||||||
0207da870cedb777fceff948641021714ec815110ca111ccc7a54c168e065bda70
|
0207da870cedb777fceff948641021714ec815110ca111ccc7a54c168e065bda70
|
||||||
|
|
@ -376,7 +376,7 @@ $ ./bin/neo-go query committee -r http://localhost:20332
|
||||||
`query candidates` returns all current candidates, number of votes for them
|
`query candidates` returns all current candidates, number of votes for them
|
||||||
and their committee/consensus status:
|
and their committee/consensus status:
|
||||||
```
|
```
|
||||||
$ ./bin/neo-go query candidates -r http://localhost:20332
|
$ ./bin/tutus query candidates -r http://localhost:20332
|
||||||
Key Votes Committee Consensus
|
Key Votes Committee Consensus
|
||||||
03009b7540e10f2562e5fd8fac9eaec25166a58b26e412348ff5a86927bfac22a2 2000000 true true
|
03009b7540e10f2562e5fd8fac9eaec25166a58b26e412348ff5a86927bfac22a2 2000000 true true
|
||||||
030205e9cefaea5a1dfc580af20c8d5aa2468bb0148f1a5e4605fc622c80e604ba 2000000 true true
|
030205e9cefaea5a1dfc580af20c8d5aa2468bb0148f1a5e4605fc622c80e604ba 2000000 true true
|
||||||
|
|
@ -405,7 +405,7 @@ Key Votes Com
|
||||||
the candidate it voted for (if any) and the block number of the last transactions
|
the candidate it voted for (if any) and the block number of the last transactions
|
||||||
involving NEO on this account:
|
involving NEO on this account:
|
||||||
```
|
```
|
||||||
$ ./bin/neo-go query voter -r http://localhost:20332 Nj91C8TxQSxW1jCE1ytFre6mg5qxTypg1Y
|
$ ./bin/tutus query voter -r http://localhost:20332 Nj91C8TxQSxW1jCE1ytFre6mg5qxTypg1Y
|
||||||
Voted: 0214baf0ceea3a66f17e7e1e839ea25fd8bed6cd82e6bb6e68250189065f44ff01 (Nj91C8TxQSxW1jCE1ytFre6mg5qxTypg1Y)
|
Voted: 0214baf0ceea3a66f17e7e1e839ea25fd8bed6cd82e6bb6e68250189065f44ff01 (Nj91C8TxQSxW1jCE1ytFre6mg5qxTypg1Y)
|
||||||
Amount : 2000000
|
Amount : 2000000
|
||||||
Block: 3970
|
Block: 3970
|
||||||
|
|
@ -426,13 +426,13 @@ For example, you have a four-node default network setup and want to set some
|
||||||
key for the oracle role, you create transaction with:
|
key for the oracle role, you create transaction with:
|
||||||
|
|
||||||
```
|
```
|
||||||
$ neo-go contract invokefunction -w .docker/wallets/wallet1.json --out some.part.json -a NVTiAjNgagDkTr5HTzDmQP9kPwPHN5BgVq -r http://localhost:30333 0x49cf4e5378ffcd4dec034fd98a174c5491e395e2 designateAsRole 8 \[ 02b3622bf4017bdfe317c58aed5f4c753f206b7db896046fa7d774bbc4bf7f8dc2 \] -- NVTiAjNgagDkTr5HTzDmQP9kPwPHN5BgVq:CalledByEntry
|
$ tutus contract invokefunction -w .docker/wallets/wallet1.json --out some.part.json -a NVTiAjNgagDkTr5HTzDmQP9kPwPHN5BgVq -r http://localhost:30333 0x49cf4e5378ffcd4dec034fd98a174c5491e395e2 designateAsRole 8 \[ 02b3622bf4017bdfe317c58aed5f4c753f206b7db896046fa7d774bbc4bf7f8dc2 \] -- NVTiAjNgagDkTr5HTzDmQP9kPwPHN5BgVq:CalledByEntry
|
||||||
```
|
```
|
||||||
|
|
||||||
And then sign it with two more keys:
|
And then sign it with two more keys:
|
||||||
```
|
```
|
||||||
$ neo-go wallet sign -w .docker/wallets/wallet2.json --in some.part.json --out some.part.json -a NVTiAjNgagDkTr5HTzDmQP9kPwPHN5BgVq
|
$ tutus wallet sign -w .docker/wallets/wallet2.json --in some.part.json --out some.part.json -a NVTiAjNgagDkTr5HTzDmQP9kPwPHN5BgVq
|
||||||
$ neo-go wallet sign -w .docker/wallets/wallet3.json --in some.part.json -r http://localhost:30333 -a NVTiAjNgagDkTr5HTzDmQP9kPwPHN5BgVq
|
$ tutus wallet sign -w .docker/wallets/wallet3.json --in some.part.json -r http://localhost:30333 -a NVTiAjNgagDkTr5HTzDmQP9kPwPHN5BgVq
|
||||||
```
|
```
|
||||||
Notice that the last command sends the transaction (which has a complete set
|
Notice that the last command sends the transaction (which has a complete set
|
||||||
of signatures for 3/4 multisignature account by that time) to the network.
|
of signatures for 3/4 multisignature account by that time) to the network.
|
||||||
|
|
@ -445,7 +445,7 @@ machine:
|
||||||
|
|
||||||
```
|
```
|
||||||
$ cp wallet.json wallet.stripped.json # don't lose the original wallet
|
$ cp wallet.json wallet.stripped.json # don't lose the original wallet
|
||||||
$ neo-go wallet strip-keys --wallet wallet.stripped.json
|
$ tutus wallet strip-keys --wallet wallet.stripped.json
|
||||||
```
|
```
|
||||||
|
|
||||||
This wallet has no keys inside (but has appropriate scripts/addresses), so it
|
This wallet has no keys inside (but has appropriate scripts/addresses), so it
|
||||||
|
|
@ -453,7 +453,7 @@ can be safely shared with anyone or transferred to network-enabled machine
|
||||||
where you then can create a transfer transaction:
|
where you then can create a transfer transaction:
|
||||||
|
|
||||||
```
|
```
|
||||||
$ neo-go wallet nep17 transfer --rpc-endpoint http://localhost:20332 \
|
$ tutus wallet nep17 transfer --rpc-endpoint http://localhost:20332 \
|
||||||
--wallet wallet.stripped.json --from NjEQfanGEXihz85eTnacQuhqhNnA6LxpLp \
|
--wallet wallet.stripped.json --from NjEQfanGEXihz85eTnacQuhqhNnA6LxpLp \
|
||||||
--to Nj91C8TxQSxW1jCE1ytFre6mg5qxTypg1Y --token NEO --amount 1 --out context.json
|
--to Nj91C8TxQSxW1jCE1ytFre6mg5qxTypg1Y --token NEO --amount 1 --out context.json
|
||||||
|
|
||||||
|
|
@ -461,7 +461,7 @@ $ neo-go wallet nep17 transfer --rpc-endpoint http://localhost:20332 \
|
||||||
`context.json` can now be transferred to the machine with the `wallet.json`
|
`context.json` can now be transferred to the machine with the `wallet.json`
|
||||||
containing proper keys and signed:
|
containing proper keys and signed:
|
||||||
```
|
```
|
||||||
$ neo-go wallet sign --wallet wallet.json \
|
$ tutus wallet sign --wallet wallet.json \
|
||||||
-address NjEQfanGEXihz85eTnacQuhqhNnA6LxpLp --in context.json --out context.json
|
-address NjEQfanGEXihz85eTnacQuhqhNnA6LxpLp --in context.json --out context.json
|
||||||
```
|
```
|
||||||
Now `context.json` contains a transaction with a complete set of signatures
|
Now `context.json` contains a transaction with a complete set of signatures
|
||||||
|
|
@ -469,7 +469,7 @@ Now `context.json` contains a transaction with a complete set of signatures
|
||||||
well). It can be transferred to network-enabled machine again and the
|
well). It can be transferred to network-enabled machine again and the
|
||||||
transaction can be sent to the network:
|
transaction can be sent to the network:
|
||||||
```
|
```
|
||||||
$ neo-go util sendtx --rpc-endpoint http://localhost:20332 context.json
|
$ tutus util sendtx --rpc-endpoint http://localhost:20332 context.json
|
||||||
```
|
```
|
||||||
|
|
||||||
### NEP-17 token functions
|
### NEP-17 token functions
|
||||||
|
|
@ -478,15 +478,15 @@ $ neo-go util sendtx --rpc-endpoint http://localhost:20332 context.json
|
||||||
|
|
||||||
#### Token metadata
|
#### Token metadata
|
||||||
|
|
||||||
NEP-17 commands are designed to work with any NEP-17 tokens, but NeoGo needs
|
NEP-17 commands are designed to work with any NEP-17 tokens, but Tutus needs
|
||||||
some metadata for these tokens to function properly. Native NEO or GAS are
|
some metadata for these tokens to function properly. Native NEO or GAS are
|
||||||
known to NeoGo by default, but other tokens are not. NeoGo can get this
|
known to Tutus by default, but other tokens are not. Tutus can get this
|
||||||
metadata from the specified RPC server, but that's an additional request to
|
metadata from the specified RPC server, but that's an additional request to
|
||||||
make. So, if you care about command processing delay, you can import token
|
make. So, if you care about command processing delay, you can import token
|
||||||
metadata into the wallet with `wallet nep17 import` command. It'll be stored
|
metadata into the wallet with `wallet nep17 import` command. It'll be stored
|
||||||
in the `extra` section of the wallet.
|
in the `extra` section of the wallet.
|
||||||
```
|
```
|
||||||
./bin/neo-go wallet nep17 import -w wallet.nep6 -r http://localhost:20332 -t abcdefc189f30098b0ba6a2eb90b3a925800ffff
|
./bin/tutus wallet nep17 import -w wallet.nep6 -r http://localhost:20332 -t abcdefc189f30098b0ba6a2eb90b3a925800ffff
|
||||||
```
|
```
|
||||||
|
|
||||||
You can later see what token data you have in your wallet with `wallet nep17
|
You can later see what token data you have in your wallet with `wallet nep17
|
||||||
|
|
@ -495,7 +495,7 @@ info` command and remove tokens you don't need with `wallet nep17 remove`.
|
||||||
#### Balance
|
#### Balance
|
||||||
Getting balance is easy:
|
Getting balance is easy:
|
||||||
```
|
```
|
||||||
./bin/neo-go wallet nep17 balance -w /etc/neo-go/wallet.json -r http://localhost:20332
|
./bin/tutus wallet nep17 balance -w /etc/tutus/wallet.json -r http://localhost:20332
|
||||||
```
|
```
|
||||||
|
|
||||||
By default, you'll get data for all tokens that are owned by all accounts
|
By default, you'll get data for all tokens that are owned by all accounts
|
||||||
|
|
@ -510,7 +510,7 @@ the RPC server (or saves to file if it needs to be signed by multiple
|
||||||
parties). For example, transferring 100 GAS looks like this:
|
parties). For example, transferring 100 GAS looks like this:
|
||||||
|
|
||||||
```
|
```
|
||||||
./bin/neo-go wallet nep17 transfer -w wallet.nep6 -r http://localhost:20332 --to NjEQfanGEXihz85eTnacQuhqhNnA6LxpLp --from NMe64G6j6nkPZby26JAgpaCNrn1Ee4wW6E --token GAS --amount 100
|
./bin/tutus wallet nep17 transfer -w wallet.nep6 -r http://localhost:20332 --to NjEQfanGEXihz85eTnacQuhqhNnA6LxpLp --from NMe64G6j6nkPZby26JAgpaCNrn1Ee4wW6E --token GAS --amount 100
|
||||||
```
|
```
|
||||||
|
|
||||||
You can omit `--from` parameter (default wallet's address will be used in this
|
You can omit `--from` parameter (default wallet's address will be used in this
|
||||||
|
|
@ -530,7 +530,7 @@ you don't have `--token`, `--to` and `--amount` options, but instead you can
|
||||||
specify multiple "token:addr:amount" sets after all other options. The same
|
specify multiple "token:addr:amount" sets after all other options. The same
|
||||||
transfer as above can be done with `multitransfer` by doing this:
|
transfer as above can be done with `multitransfer` by doing this:
|
||||||
```
|
```
|
||||||
./bin/neo-go wallet nep17 multitransfer -w wallet.nep6 -r http://localhost:20332 --from NMe64G6j6nkPZby26JAgpaCNrn1Ee4wW6E GAS:NjEQfanGEXihz85eTnacQuhqhNnA6LxpLp:100
|
./bin/tutus wallet nep17 multitransfer -w wallet.nep6 -r http://localhost:20332 --from NMe64G6j6nkPZby26JAgpaCNrn1Ee4wW6E GAS:NjEQfanGEXihz85eTnacQuhqhNnA6LxpLp:100
|
||||||
```
|
```
|
||||||
|
|
||||||
#### GAS claims
|
#### GAS claims
|
||||||
|
|
@ -554,7 +554,7 @@ commands with the following adjustments.
|
||||||
Specify token ID via `--id` flag to get data for a particular NFT:
|
Specify token ID via `--id` flag to get data for a particular NFT:
|
||||||
|
|
||||||
```
|
```
|
||||||
./bin/neo-go wallet nep11 balance -w /etc/neo-go/wallet.json --token 67ecb7766dba4acf7c877392207984d1b4d15731 --id 7e244ffd6aa85fb1579d2ed22e9b761ab62e3486 -r http://localhost:20332
|
./bin/tutus wallet nep11 balance -w /etc/tutus/wallet.json --token 67ecb7766dba4acf7c877392207984d1b4d15731 --id 7e244ffd6aa85fb1579d2ed22e9b761ab62e3486 -r http://localhost:20332
|
||||||
```
|
```
|
||||||
|
|
||||||
By default, no token ID specified, i.e all NFTs returned by the server are listed.
|
By default, no token ID specified, i.e all NFTs returned by the server are listed.
|
||||||
|
|
@ -565,7 +565,7 @@ Specify token ID via `--id` flag to transfer NEP-11 token. Specify the amount to
|
||||||
transfer divisible NEP-11 token:
|
transfer divisible NEP-11 token:
|
||||||
|
|
||||||
```
|
```
|
||||||
./bin/neo-go wallet nep11 transfer -w wallet.nep6 -r http://localhost:20332 --to NjEQfanGEXihz85eTnacQuhqhNnA6LxpLp --from NMe64G6j6nkPZby26JAgpaCNrn1Ee4wW6E --token 67ecb7766dba4acf7c877392207984d1b4d15731 --id R5OREI5BU+Uyd23/MuV/xzI3F+Q= --amount 5
|
./bin/tutus wallet nep11 transfer -w wallet.nep6 -r http://localhost:20332 --to NjEQfanGEXihz85eTnacQuhqhNnA6LxpLp --from NMe64G6j6nkPZby26JAgpaCNrn1Ee4wW6E --token 67ecb7766dba4acf7c877392207984d1b4d15731 --id R5OREI5BU+Uyd23/MuV/xzI3F+Q= --amount 5
|
||||||
```
|
```
|
||||||
|
|
||||||
By default, no amount is specified, i.e. the whole token is transferred for
|
By default, no amount is specified, i.e. the whole token is transferred for
|
||||||
|
|
@ -581,7 +581,7 @@ To print token IDs owned by the specified owner, use `tokensOf` command with
|
||||||
`--token` and `--address` flags:
|
`--token` and `--address` flags:
|
||||||
|
|
||||||
```
|
```
|
||||||
./bin/neo-go wallet nep11 tokensOf -r http://localhost:20332 --token 67ecb7766dba4acf7c877392207984d1b4d15731 --address NbrUYaZgyhSkNoRo9ugRyEMdUZxrhkNaWB
|
./bin/tutus wallet nep11 tokensOf -r http://localhost:20332 --token 67ecb7766dba4acf7c877392207984d1b4d15731 --address NbrUYaZgyhSkNoRo9ugRyEMdUZxrhkNaWB
|
||||||
```
|
```
|
||||||
|
|
||||||
#### Owner Of
|
#### Owner Of
|
||||||
|
|
@ -591,7 +591,7 @@ use `ownerOf` method, specify token hash via `--token` flag and token ID via
|
||||||
`--id` flag:
|
`--id` flag:
|
||||||
|
|
||||||
```
|
```
|
||||||
./bin/neo-go wallet nep11 ownerOf -r http://localhost:20332 --token 67ecb7766dba4acf7c877392207984d1b4d15731 --id R5OREI5BU+Uyd23/MuV/xzI3F+Q=
|
./bin/tutus wallet nep11 ownerOf -r http://localhost:20332 --token 67ecb7766dba4acf7c877392207984d1b4d15731 --id R5OREI5BU+Uyd23/MuV/xzI3F+Q=
|
||||||
```
|
```
|
||||||
|
|
||||||
#### Optional methods
|
#### Optional methods
|
||||||
|
|
@ -602,7 +602,7 @@ If NEP-11 token supports optional `properties` method, specify token hash via
|
||||||
`--token` flag and token ID via `--id` flag to print properties:
|
`--token` flag and token ID via `--id` flag to print properties:
|
||||||
|
|
||||||
```
|
```
|
||||||
./bin/neo-go wallet nep11 properties -r http://localhost:20332 --token 67ecb7766dba4acf7c877392207984d1b4d15731 --id 7V5gjT2WwjP3pBCQMKGMfyZsp/w=
|
./bin/tutus wallet nep11 properties -r http://localhost:20332 --token 67ecb7766dba4acf7c877392207984d1b4d15731 --id 7V5gjT2WwjP3pBCQMKGMfyZsp/w=
|
||||||
```
|
```
|
||||||
|
|
||||||
##### 2. Tokens
|
##### 2. Tokens
|
||||||
|
|
@ -611,19 +611,19 @@ If NEP-11 token supports optional `tokens` method, specify token hash via
|
||||||
`--token` flag to print the list of token IDs minted by the specified NFT:
|
`--token` flag to print the list of token IDs minted by the specified NFT:
|
||||||
|
|
||||||
```
|
```
|
||||||
./bin/neo-go wallet nep11 tokens -r http://localhost:20332 --token 67ecb7766dba4acf7c877392207984d1b4d15731
|
./bin/tutus wallet nep11 tokens -r http://localhost:20332 --token 67ecb7766dba4acf7c877392207984d1b4d15731
|
||||||
```
|
```
|
||||||
|
|
||||||
## Utility commands
|
## Utility commands
|
||||||
|
|
||||||
### Value conversion
|
### Value conversion
|
||||||
|
|
||||||
NeoGo provides conversion utility command to reverse data, convert script
|
Tutus provides conversion utility command to reverse data, convert script
|
||||||
hashes to/from address, convert public keys to hashes/addresses, convert data to/from hexadecimal or base64
|
hashes to/from address, convert public keys to hashes/addresses, convert data to/from hexadecimal or base64
|
||||||
representation. All of this is done by a single `util convert` command like
|
representation. All of this is done by a single `util convert` command like
|
||||||
this:
|
this:
|
||||||
```
|
```
|
||||||
$ ./bin/neo-go util convert deee79c189f30098b0ba6a2eb90b3a9258a6c7ff
|
$ ./bin/tutus util convert deee79c189f30098b0ba6a2eb90b3a9258a6c7ff
|
||||||
BE ScriptHash to Address NgEisvCqr2h8wpRxQb7bVPWUZdbVCY8Uo6
|
BE ScriptHash to Address NgEisvCqr2h8wpRxQb7bVPWUZdbVCY8Uo6
|
||||||
LE ScriptHash to Address NjEQfanGEXihz85eTnacQuhqhNnA6LxpLp
|
LE ScriptHash to Address NjEQfanGEXihz85eTnacQuhqhNnA6LxpLp
|
||||||
Hex to String "\xde\xeey\xc1\x89\xf3\x00\x98\xb0\xbaj.\xb9\v:\x92X\xa6\xc7\xff"
|
Hex to String "\xde\xeey\xc1\x89\xf3\x00\x98\xb0\xbaj.\xb9\v:\x92X\xa6\xc7\xff"
|
||||||
|
|
@ -642,7 +642,7 @@ like `wallet nep17 transfer` or `contract invokefunction` can give you one
|
||||||
with the `--out` parameter) you may want to check the contents before signing
|
with the `--out` parameter) you may want to check the contents before signing
|
||||||
it. This can be done with the `util txdump` command:
|
it. This can be done with the `util txdump` command:
|
||||||
```
|
```
|
||||||
$ ./bin/neo-go util txdump -r http://localhost:30333 some.part.json
|
$ ./bin/tutus util txdump -r http://localhost:30333 some.part.json
|
||||||
Hash: f143059e0c03546db006608e0a0ad4b621b311a48d7fc62bb7062e405ab8e588
|
Hash: f143059e0c03546db006608e0a0ad4b621b311a48d7fc62bb7062e405ab8e588
|
||||||
OnChain: false
|
OnChain: false
|
||||||
ValidUntil: 6004
|
ValidUntil: 6004
|
||||||
|
|
@ -701,7 +701,7 @@ If you have a completely finished (with all signatures collected) transaction
|
||||||
signing context saved in a file you can send it to the network (without any
|
signing context saved in a file you can send it to the network (without any
|
||||||
wallet) using `util sendtx` command:
|
wallet) using `util sendtx` command:
|
||||||
```
|
```
|
||||||
$ ./bin/neo-go util sendtx -r http://localhost:30333 some.part.json
|
$ ./bin/tutus util sendtx -r http://localhost:30333 some.part.json
|
||||||
```
|
```
|
||||||
This is useful in offline signing scenario, where the signing party doesn't
|
This is useful in offline signing scenario, where the signing party doesn't
|
||||||
have any network access, so you can make a signature there, transfer the file
|
have any network access, so you can make a signature there, transfer the file
|
||||||
|
|
@ -712,12 +712,12 @@ to the network.
|
||||||
There is a VM CLI that you can use to load/analyze/run/step through some code:
|
There is a VM CLI that you can use to load/analyze/run/step through some code:
|
||||||
|
|
||||||
```
|
```
|
||||||
./bin/neo-go vm
|
./bin/tutus vm
|
||||||
```
|
```
|
||||||
|
|
||||||
Some basic commands available there:
|
Some basic commands available there:
|
||||||
|
|
||||||
- `loadgo` -- loads smart contract `NEO-GO-VM > loadgo TestContract/main.go`
|
- `loadgo` -- loads smart contract `TUTUS-VM > loadgo TestContract/main.go`
|
||||||
- `ops` -- show the opcodes of currently loaded contract
|
- `ops` -- show the opcodes of currently loaded contract
|
||||||
- `run` -- executes currently loaded contract
|
- `run` -- executes currently loaded contract
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -1,6 +1,6 @@
|
||||||
# NeoGo smart contract compiler
|
# Tutus smart contract compiler
|
||||||
|
|
||||||
The neo-go compiler compiles Go programs to a bytecode that the Neo virtual machine can understand.
|
The tutus compiler compiles Go programs to a bytecode that the Neo virtual machine can understand.
|
||||||
|
|
||||||
## Language compatibility
|
## Language compatibility
|
||||||
|
|
||||||
|
|
@ -69,7 +69,7 @@ export GOROOT=/usr/lib64/go/1.15
|
||||||
The best way to create a new contract is to use `contract init` command. This will
|
The best way to create a new contract is to use `contract init` command. This will
|
||||||
create an example source file, a config file and `go.mod` with `github.com/tutus-one/tutus-chain/pkg/interop` dependency.
|
create an example source file, a config file and `go.mod` with `github.com/tutus-one/tutus-chain/pkg/interop` dependency.
|
||||||
```
|
```
|
||||||
$ ./bin/neo-go contract init --name MyAwesomeContract
|
$ ./bin/tutus contract init --name MyAwesomeContract
|
||||||
$ cd MyAwesomeContract
|
$ cd MyAwesomeContract
|
||||||
```
|
```
|
||||||
|
|
||||||
|
|
@ -82,7 +82,7 @@ $ go mod tidy
|
||||||
### Compiling
|
### Compiling
|
||||||
|
|
||||||
```
|
```
|
||||||
./bin/neo-go contract compile -i contract.go
|
./bin/tutus contract compile -i contract.go
|
||||||
```
|
```
|
||||||
|
|
||||||
By default, the filename will be the name of your .go file with the .nef
|
By default, the filename will be the name of your .go file with the .nef
|
||||||
|
|
@ -98,21 +98,21 @@ All of them will be located in the same directory with your Go contract.
|
||||||
If you want another location for your compiled contract:
|
If you want another location for your compiled contract:
|
||||||
|
|
||||||
```
|
```
|
||||||
./bin/neo-go contract compile -i contract.go --out /Users/foo/bar/contract.nef
|
./bin/tutus contract compile -i contract.go --out /Users/foo/bar/contract.nef
|
||||||
```
|
```
|
||||||
|
|
||||||
If your contract is split across multiple files, you must provide a path
|
If your contract is split across multiple files, you must provide a path
|
||||||
to the directory where package files are contained instead of a single Go file
|
to the directory where package files are contained instead of a single Go file
|
||||||
(`out.nef` will be used as the default output file in this case):
|
(`out.nef` will be used as the default output file in this case):
|
||||||
```
|
```
|
||||||
./bin/neo-go contract compile -i ./path/to/contract
|
./bin/tutus contract compile -i ./path/to/contract
|
||||||
```
|
```
|
||||||
|
|
||||||
### Debugging
|
### Debugging
|
||||||
You can dump the opcodes generated by the compiler with the following command:
|
You can dump the opcodes generated by the compiler with the following command:
|
||||||
|
|
||||||
```
|
```
|
||||||
./bin/neo-go contract inspect -i contract.go -c
|
./bin/tutus contract inspect -i contract.go -c
|
||||||
```
|
```
|
||||||
|
|
||||||
This will result in something like this:
|
This will result in something like this:
|
||||||
|
|
@ -219,7 +219,7 @@ Toolkit](https://github.com/neo-project/neo-blockchain-toolkit/). To do that
|
||||||
you need to generate debug information using `--debug` option, like this:
|
you need to generate debug information using `--debug` option, like this:
|
||||||
|
|
||||||
```
|
```
|
||||||
$ ./bin/neo-go contract compile -i contract.go -c contract.yml -m contract.manifest.json -o contract.nef --debug contract.debug.json
|
$ ./bin/tutus contract compile -i contract.go -c contract.yml -m contract.manifest.json -o contract.nef --debug contract.debug.json
|
||||||
```
|
```
|
||||||
|
|
||||||
This file can then be used by debugger and set up to work just like for any
|
This file can then be used by debugger and set up to work just like for any
|
||||||
|
|
@ -227,12 +227,12 @@ other supported language.
|
||||||
|
|
||||||
### Deploying
|
### Deploying
|
||||||
|
|
||||||
Deploying a contract to blockchain with neo-go requires both NEF and JSON
|
Deploying a contract to blockchain with tutus requires both NEF and JSON
|
||||||
manifest generated by the compiler from a configuration file provided in YAML
|
manifest generated by the compiler from a configuration file provided in YAML
|
||||||
format. To create contract manifest, pass a YAML file with `-c` parameter and
|
format. To create contract manifest, pass a YAML file with `-c` parameter and
|
||||||
specify the manifest output file with `-m`:
|
specify the manifest output file with `-m`:
|
||||||
```
|
```
|
||||||
./bin/neo-go contract compile -i contract.go -c config.yml -m contract.manifest.json
|
./bin/tutus contract compile -i contract.go -c config.yml -m contract.manifest.json
|
||||||
```
|
```
|
||||||
|
|
||||||
Example of such YAML file contents:
|
Example of such YAML file contents:
|
||||||
|
|
@ -250,7 +250,7 @@ events:
|
||||||
Then, the manifest can be passed to the `deploy` command via `-m` option:
|
Then, the manifest can be passed to the `deploy` command via `-m` option:
|
||||||
|
|
||||||
```
|
```
|
||||||
$ ./bin/neo-go contract deploy -i contract.nef -m contract.manifest.json -r http://localhost:20331 -w wallet.json
|
$ ./bin/tutus contract deploy -i contract.nef -m contract.manifest.json -r http://localhost:20331 -w wallet.json
|
||||||
```
|
```
|
||||||
|
|
||||||
Deployment works via an RPC server, an address of which is passed via `-r`
|
Deployment works via an RPC server, an address of which is passed via `-r`
|
||||||
|
|
@ -264,7 +264,7 @@ the manifest, and the target contract hash. Either NEF file or the manifest
|
||||||
may be omitted, but not both. Additional data parameter may be specified.
|
may be omitted, but not both. Additional data parameter may be specified.
|
||||||
|
|
||||||
```
|
```
|
||||||
$ ./bin/neo-go contract update -i contract.nef -m contract.manifest.json -r http://localhost:20331 -w wallet.json 0x4bfd65abeac8f85931f2d85cfdbc61de3dd03b94
|
$ ./bin/tutus contract update -i contract.nef -m contract.manifest.json -r http://localhost:20331 -w wallet.json 0x4bfd65abeac8f85931f2d85cfdbc61de3dd03b94
|
||||||
```
|
```
|
||||||
|
|
||||||
Updating works via an RPC server, an address of which is passed via `-r`
|
Updating works via an RPC server, an address of which is passed via `-r`
|
||||||
|
|
@ -276,7 +276,7 @@ be found in `update` command help.
|
||||||
Destroying a deployed smart contract. Requires the contract hash.
|
Destroying a deployed smart contract. Requires the contract hash.
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
$ ./bin/neo-go contract destroy -r http://localhost:20331 -w wallet.json 0x4bfd65abeac8f85931f2d85cfdbc61de3dd03b94
|
$ ./bin/tutus contract destroy -r http://localhost:20331 -w wallet.json 0x4bfd65abeac8f85931f2d85cfdbc61de3dd03b94
|
||||||
```
|
```
|
||||||
|
|
||||||
Destroying works via an RPC server, an address of which is passed via `-r`
|
Destroying works via an RPC server, an address of which is passed via `-r`
|
||||||
|
|
@ -409,7 +409,7 @@ It requires a divisible NFT contract to have 2 `transfer` methods. To achieve th
|
||||||
Any contract can be included in a group identified by a public key which is used in [permissions](#Permissions).
|
Any contract can be included in a group identified by a public key which is used in [permissions](#Permissions).
|
||||||
This is achieved with `manifest add-group` command.
|
This is achieved with `manifest add-group` command.
|
||||||
```
|
```
|
||||||
./bin/neo-go contract manifest add-group -n contract.nef -m contract.manifest.json --sender <sender> --wallet /path/to/wallet.json --account <account>
|
./bin/tutus contract manifest add-group -n contract.nef -m contract.manifest.json --sender <sender> --wallet /path/to/wallet.json --account <account>
|
||||||
```
|
```
|
||||||
It accepts contract `.nef` and manifest files emitted by `compile` command as well as
|
It accepts contract `.nef` and manifest files emitted by `compile` command as well as
|
||||||
sender and signer accounts. `--sender` is the account that will send deploy transaction later (not necessarily in wallet).
|
sender and signer accounts. `--sender` is the account that will send deploy transaction later (not necessarily in wallet).
|
||||||
|
|
@ -422,12 +422,12 @@ Express](https://github.com/neo-project/neo-express), which is a part of [Neo
|
||||||
Blockchain
|
Blockchain
|
||||||
Toolkit](https://github.com/neo-project/neo-blockchain-toolkit/). To do that,
|
Toolkit](https://github.com/neo-project/neo-blockchain-toolkit/). To do that,
|
||||||
you need to generate a different metadata file using YAML written for
|
you need to generate a different metadata file using YAML written for
|
||||||
deployment with neo-go. It's done in the same step with compilation via
|
deployment with tutus. It's done in the same step with compilation via
|
||||||
`--config` input parameter and `--abi` output parameter, combined with debug
|
`--config` input parameter and `--abi` output parameter, combined with debug
|
||||||
support the command line will look like this:
|
support the command line will look like this:
|
||||||
|
|
||||||
```
|
```
|
||||||
$ ./bin/neo-go contract compile -i contract.go --config contract.yml -o contract.nef --debug contract.debug.json --abi contract.abi.json
|
$ ./bin/tutus contract compile -i contract.go --config contract.yml -o contract.nef --debug contract.debug.json --abi contract.abi.json
|
||||||
```
|
```
|
||||||
|
|
||||||
This file can then be used by toolkit to deploy contract the same way
|
This file can then be used by toolkit to deploy contract the same way
|
||||||
|
|
@ -448,20 +448,20 @@ Example call (contract `f84d6a337fbc3d3a201d41da99e86b479e7a2554` with method
|
||||||
given RPC server and wallet and paying 0.00001 extra GAS for this transaction):
|
given RPC server and wallet and paying 0.00001 extra GAS for this transaction):
|
||||||
|
|
||||||
```
|
```
|
||||||
$ ./bin/neo-go contract invokefunction -r http://localhost:20331 -w my_wallet.json -g 0.00001 f84d6a337fbc3d3a201d41da99e86b479e7a2554 balanceOf NVTiAjNgagDkTr5HTzDmQP9kPwPHN5BgVq
|
$ ./bin/tutus contract invokefunction -r http://localhost:20331 -w my_wallet.json -g 0.00001 f84d6a337fbc3d3a201d41da99e86b479e7a2554 balanceOf NVTiAjNgagDkTr5HTzDmQP9kPwPHN5BgVq
|
||||||
```
|
```
|
||||||
|
|
||||||
### Generating contract bindings
|
### Generating contract bindings
|
||||||
To be able to use deployed contract from another contract one needs to have
|
To be able to use deployed contract from another contract one needs to have
|
||||||
its interface definition (exported methods and hash). While it is possible to
|
its interface definition (exported methods and hash). While it is possible to
|
||||||
use generic contract.Call interop interface, it's not very convenient and
|
use generic contract.Call interop interface, it's not very convenient and
|
||||||
efficient. NeoGo can autogenerate contract bindings in Go language for any
|
efficient. Tutus can autogenerate contract bindings in Go language for any
|
||||||
deployed contract based on its manifest, it creates a Go source file with all
|
deployed contract based on its manifest, it creates a Go source file with all
|
||||||
of the contract's methods that then can be imported and used as a regular Go
|
of the contract's methods that then can be imported and used as a regular Go
|
||||||
package.
|
package.
|
||||||
|
|
||||||
```
|
```
|
||||||
$ ./bin/neo-go contract generate-wrapper --manifest manifest.json --out wrapper.go --hash 0x1b4357bff5a01bdf2a6581247cf9ed1e24629176
|
$ ./bin/tutus contract generate-wrapper --manifest manifest.json --out wrapper.go --hash 0x1b4357bff5a01bdf2a6581247cf9ed1e24629176
|
||||||
```
|
```
|
||||||
|
|
||||||
Notice that some structured types can be omitted this way (when a function
|
Notice that some structured types can be omitted this way (when a function
|
||||||
|
|
@ -471,8 +471,8 @@ originally you can create a specific configuration file during compilation
|
||||||
that will add this data for wrapper generator to use:
|
that will add this data for wrapper generator to use:
|
||||||
|
|
||||||
```
|
```
|
||||||
$ ./bin/neo-go contract compile -i contract.go --config contract.yml -o contract.nef --manifest manifest.json --bindings contract.bindings.yml
|
$ ./bin/tutus contract compile -i contract.go --config contract.yml -o contract.nef --manifest manifest.json --bindings contract.bindings.yml
|
||||||
$ ./bin/neo-go contract generate-wrapper --manifest manifest.json --config contract.bindings.yml --out wrapper.go --hash 0x1b4357bff5a01bdf2a6581247cf9ed1e24629176
|
$ ./bin/tutus contract generate-wrapper --manifest manifest.json --config contract.bindings.yml --out wrapper.go --hash 0x1b4357bff5a01bdf2a6581247cf9ed1e24629176
|
||||||
```
|
```
|
||||||
|
|
||||||
### Generating RPC contract bindings
|
### Generating RPC contract bindings
|
||||||
|
|
@ -488,7 +488,7 @@ type, in this case an ASSERT is added to script making it fail when the method
|
||||||
returns false.
|
returns false.
|
||||||
|
|
||||||
```
|
```
|
||||||
$ ./bin/neo-go contract generate-rpcwrapper --manifest manifest.json --out rpcwrapper.go --hash 0x1b4357bff5a01bdf2a6581247cf9ed1e24629176
|
$ ./bin/tutus contract generate-rpcwrapper --manifest manifest.json --out rpcwrapper.go --hash 0x1b4357bff5a01bdf2a6581247cf9ed1e24629176
|
||||||
```
|
```
|
||||||
|
|
||||||
If your contract is NEP-11 or NEP-17 that's autodetected and an appropriate
|
If your contract is NEP-11 or NEP-17 that's autodetected and an appropriate
|
||||||
|
|
@ -505,8 +505,8 @@ and structures. Notice that structured types returned by methods can't be Null
|
||||||
at the moment (see #2795).
|
at the moment (see #2795).
|
||||||
|
|
||||||
```
|
```
|
||||||
$ ./bin/neo-go contract compile -i contract.go --config contract.yml -o contract.nef --manifest manifest.json --bindings contract.bindings.yml --guess-eventtypes
|
$ ./bin/tutus contract compile -i contract.go --config contract.yml -o contract.nef --manifest manifest.json --bindings contract.bindings.yml --guess-eventtypes
|
||||||
$ ./bin/neo-go contract generate-rpcwrapper --manifest manifest.json --config contract.bindings.yml --out rpcwrapper.go --hash 0x1b4357bff5a01bdf2a6581247cf9ed1e24629176
|
$ ./bin/tutus contract generate-rpcwrapper --manifest manifest.json --config contract.bindings.yml --out rpcwrapper.go --hash 0x1b4357bff5a01bdf2a6581247cf9ed1e24629176
|
||||||
```
|
```
|
||||||
|
|
||||||
Contract-specific RPC-bindings generated by "generate-rpcwrapper" command include
|
Contract-specific RPC-bindings generated by "generate-rpcwrapper" command include
|
||||||
|
|
|
||||||
|
|
@ -1,6 +1,6 @@
|
||||||
# NeoGo consensus node
|
# Tutus consensus node
|
||||||
|
|
||||||
NeoGo node can act as a consensus node. A consensus node differs from a regular
|
Tutus node can act as a consensus node. A consensus node differs from a regular
|
||||||
one in that it participates in block acceptance process using dBFT
|
one in that it participates in block acceptance process using dBFT
|
||||||
protocol. Any committee node can also be elected as a CN; therefore, they're
|
protocol. Any committee node can also be elected as a CN; therefore, they're
|
||||||
expected to follow the same setup process as CNs (to be ready to become CNs
|
expected to follow the same setup process as CNs (to be ready to become CNs
|
||||||
|
|
@ -15,7 +15,7 @@ use some key from some wallet.
|
||||||
|
|
||||||
### Hardware requirements
|
### Hardware requirements
|
||||||
|
|
||||||
While NeoGo can be very conservative with its resource consumption, public
|
While Tutus can be very conservative with its resource consumption, public
|
||||||
network CN provides some service to the general audience and thus should have
|
network CN provides some service to the general audience and thus should have
|
||||||
enough hardware resources to do its job reliably. We recommend amd64 machine
|
enough hardware resources to do its job reliably. We recommend amd64 machine
|
||||||
with at least two cores, 8+ GB of memory and 64 GB SSD (disk space
|
with at least two cores, 8+ GB of memory and 64 GB SSD (disk space
|
||||||
|
|
@ -25,23 +25,23 @@ be enough for the first year of blockchain).
|
||||||
|
|
||||||
### OS requirements
|
### OS requirements
|
||||||
|
|
||||||
NeoGo is a single binary that can be run on any modern GNU/Linux
|
Tutus is a single binary that can be run on any modern GNU/Linux
|
||||||
distribution. We recommend using major well-supported OSes like CentOS, Debian
|
distribution. We recommend using major well-supported OSes like CentOS, Debian
|
||||||
or Ubuntu. Make sure they're updated with the latest security patches.
|
or Ubuntu. Make sure they're updated with the latest security patches.
|
||||||
|
|
||||||
No additional packages are needed for NeoGo CN.
|
No additional packages are needed for Tutus CN.
|
||||||
|
|
||||||
### Installation
|
### Installation
|
||||||
|
|
||||||
Download NeoGo binary [from
|
Download Tutus binary [from
|
||||||
Github](https://github.com/tutus-one/tutus-chain/releases) or use [Docker
|
Github](https://github.com/tutus-one/tutus-chain/releases) or use [Docker
|
||||||
image](https://hub.docker.com/r/nspccdev/neo-go). It has everything included,
|
image](https://hub.docker.com/r/nspccdev/tutus). It has everything included,
|
||||||
no additional plugins needed.
|
no additional plugins needed.
|
||||||
|
|
||||||
Take an appropriate (mainnet/testnet) configuration [from the
|
Take an appropriate (mainnet/testnet) configuration [from the
|
||||||
repository](https://github.com/tutus-one/tutus-chain/tree/master/config) and save
|
repository](https://github.com/tutus-one/tutus-chain/tree/master/config) and save
|
||||||
it in some directory (we'll assume that it's available in the same directory as
|
it in some directory (we'll assume that it's available in the same directory as
|
||||||
neo-go binary).
|
tutus binary).
|
||||||
|
|
||||||
### Configuration and execution
|
### Configuration and execution
|
||||||
|
|
||||||
|
|
@ -58,7 +58,7 @@ where `wallet.json` is a path to your NEP-6 wallet and `welcometotherealworld`
|
||||||
is a password to your CN key. Run the node in a regular way after that:
|
is a password to your CN key. Run the node in a regular way after that:
|
||||||
|
|
||||||
```
|
```
|
||||||
$ neo-go node --mainnet --config-path ./
|
$ tutus node --mainnet --config-path ./
|
||||||
```
|
```
|
||||||
where `--mainnet` is your network (can be `--testnet` for testnet) and
|
where `--mainnet` is your network (can be `--testnet` for testnet) and
|
||||||
`--config-path` is a path to the configuration file directory. If the node starts
|
`--config-path` is a path to the configuration file directory. If the node starts
|
||||||
|
|
@ -84,7 +84,7 @@ mode just drop the `UnlockWallet` section from the configuration like this:
|
||||||
|
|
||||||
### Registration
|
### Registration
|
||||||
|
|
||||||
To register as a candidate, use neo-go as CLI command with an external RPC
|
To register as a candidate, use tutus as CLI command with an external RPC
|
||||||
server for it to connect to (for chain data and transaction submission). You
|
server for it to connect to (for chain data and transaction submission). You
|
||||||
can use any public RPC server or an RPC server of your own like the node
|
can use any public RPC server or an RPC server of your own like the node
|
||||||
started at the previous step. We'll assume that you run the next command on
|
started at the previous step. We'll assume that you run the next command on
|
||||||
|
|
@ -93,9 +93,9 @@ the same node in default configuration with RPC interface available at port
|
||||||
|
|
||||||
Candidate registration is performed via GAS transfer to native NeoToken contract
|
Candidate registration is performed via GAS transfer to native NeoToken contract
|
||||||
that costs 1000 GAS by default. You need to provide your wallet and address to
|
that costs 1000 GAS by default. You need to provide your wallet and address to
|
||||||
neo-go command:
|
tutus command:
|
||||||
```
|
```
|
||||||
$ neo-go wallet candidate register -a NiKEkwz6i9q6gqfCizztDoHQh9r9BtdCNa -w wallet.json -r http://localhost:10332
|
$ tutus wallet candidate register -a NiKEkwz6i9q6gqfCizztDoHQh9r9BtdCNa -w wallet.json -r http://localhost:10332
|
||||||
```
|
```
|
||||||
where `NiKEkwz6i9q6gqfCizztDoHQh9r9BtdCNa` is your address, `wallet.json` is a
|
where `NiKEkwz6i9q6gqfCizztDoHQh9r9BtdCNa` is your address, `wallet.json` is a
|
||||||
path to NEP-6 wallet file and `http://localhost:10332` is an RPC node to
|
path to NEP-6 wallet file and `http://localhost:10332` is an RPC node to
|
||||||
|
|
@ -111,7 +111,7 @@ Candidate registration via call to `registerCandidate` method of native NeoToken
|
||||||
contract is deprecated starting from Echidna hardfork. To enforce using the
|
contract is deprecated starting from Echidna hardfork. To enforce using the
|
||||||
deprecated registration behaviour specify `--useRegisterCall` flag.
|
deprecated registration behaviour specify `--useRegisterCall` flag.
|
||||||
```
|
```
|
||||||
$ neo-go wallet candidate register -a NiKEkwz6i9q6gqfCizztDoHQh9r9BtdCNa -w wallet.json -r http://localhost:10332 --useRegisterCall
|
$ tutus wallet candidate register -a NiKEkwz6i9q6gqfCizztDoHQh9r9BtdCNa -w wallet.json -r http://localhost:10332 --useRegisterCall
|
||||||
```
|
```
|
||||||
|
|
||||||
### Voting
|
### Voting
|
||||||
|
|
@ -123,7 +123,7 @@ you need to know the public key of your candidate, which can either be seen in
|
||||||
command:
|
command:
|
||||||
|
|
||||||
```
|
```
|
||||||
$ neo-go wallet dump-keys -w wallet.json
|
$ tutus wallet dump-keys -w wallet.json
|
||||||
NiKEkwz6i9q6gqfCizztDoHQh9r9BtdCNa (simple signature contract):
|
NiKEkwz6i9q6gqfCizztDoHQh9r9BtdCNa (simple signature contract):
|
||||||
0363f6678ea4c59e292175c67e2b75c9ba7bb73e47cd97cdf5abaf45de157133f5
|
0363f6678ea4c59e292175c67e2b75c9ba7bb73e47cd97cdf5abaf45de157133f5
|
||||||
```
|
```
|
||||||
|
|
@ -132,7 +132,7 @@ NiKEkwz6i9q6gqfCizztDoHQh9r9BtdCNa (simple signature contract):
|
||||||
public key for `NiKEkwz6i9q6gqfCizztDoHQh9r9BtdCNa` address. To vote for it
|
public key for `NiKEkwz6i9q6gqfCizztDoHQh9r9BtdCNa` address. To vote for it
|
||||||
use:
|
use:
|
||||||
```
|
```
|
||||||
$ neo-go wallet candidate vote -a NiKEkwz6i9q6gqfCizztDoHQh9r9BtdCNa -w wallet.json -r http://localhost:10332 -c 0363f6678ea4c59e292175c67e2b75c9ba7bb73e47cd97cdf5abaf45de157133f5
|
$ tutus wallet candidate vote -a NiKEkwz6i9q6gqfCizztDoHQh9r9BtdCNa -w wallet.json -r http://localhost:10332 -c 0363f6678ea4c59e292175c67e2b75c9ba7bb73e47cd97cdf5abaf45de157133f5
|
||||||
|
|
||||||
```
|
```
|
||||||
where `NiKEkwz6i9q6gqfCizztDoHQh9r9BtdCNa` is the voter's address, `wallet.json`
|
where `NiKEkwz6i9q6gqfCizztDoHQh9r9BtdCNa` is the voter's address, `wallet.json`
|
||||||
|
|
@ -141,10 +141,10 @@ is the NEP-6 wallet file path, `http://localhost:10332` is the RPC node address
|
||||||
public key the voter votes for. This command also returns transaction hash and you
|
public key the voter votes for. This command also returns transaction hash and you
|
||||||
need to wait for this transaction to be accepted into one of subsequent blocks.
|
need to wait for this transaction to be accepted into one of subsequent blocks.
|
||||||
|
|
||||||
## Private NeoGo network
|
## Private Tutus network
|
||||||
### Using existing Dockerfile
|
### Using existing Dockerfile
|
||||||
|
|
||||||
neo-go comes with two preconfigured private network setups, the first one has
|
tutus comes with two preconfigured private network setups, the first one has
|
||||||
four consensus nodes and the second one uses single node. Nodes are packed
|
four consensus nodes and the second one uses single node. Nodes are packed
|
||||||
into Docker containers and four-node setup shares a volume for chain data.
|
into Docker containers and four-node setup shares a volume for chain data.
|
||||||
|
|
||||||
|
|
@ -153,7 +153,7 @@ Four-node setup uses ports 20333-20336 for P2P communication and ports
|
||||||
20001-20004). Single-node is on ports 20333/30333/20001 for
|
20001-20004). Single-node is on ports 20333/30333/20001 for
|
||||||
P2P/RPC/Prometheus.
|
P2P/RPC/Prometheus.
|
||||||
|
|
||||||
NeoGo default privnet configuration is made to work with four-node consensus,
|
Tutus default privnet configuration is made to work with four-node consensus,
|
||||||
you have to modify it if you're to use single consensus node.
|
you have to modify it if you're to use single consensus node.
|
||||||
|
|
||||||
Node wallets are located in the `.docker/wallets` directory where
|
Node wallets are located in the `.docker/wallets` directory where
|
||||||
|
|
@ -206,4 +206,4 @@ Examples can be found at `config/protocol.privnet.docker.one.yml` (`two`, `three
|
||||||
4. If you start binary from the same directory, you will probably want to change
|
4. If you start binary from the same directory, you will probably want to change
|
||||||
`DataDirectoryPath` from the `LevelDBOptions`.
|
`DataDirectoryPath` from the `LevelDBOptions`.
|
||||||
|
|
||||||
3. Start all nodes with `neo-go node --config-path <dir-from-step-2>`.
|
3. Start all nodes with `tutus node --config-path <dir-from-step-2>`.
|
||||||
|
|
|
||||||
|
|
@ -1,7 +1,7 @@
|
||||||
# NeoFS block storage
|
# NeoFS block storage
|
||||||
|
|
||||||
Using NeoFS to store chain's blocks and snapshots was proposed in
|
Using NeoFS to store chain's blocks and snapshots was proposed in
|
||||||
[#3463](https://github.com/neo-project/neo/issues/3463). NeoGo contains several
|
[#3463](https://github.com/neo-project/neo/issues/3463). Tutus contains several
|
||||||
extensions utilizing NeoFS block storage aimed to improve node synchronization
|
extensions utilizing NeoFS block storage aimed to improve node synchronization
|
||||||
efficiency and reduce node storage size.
|
efficiency and reduce node storage size.
|
||||||
|
|
||||||
|
|
@ -96,10 +96,10 @@ them to the NeoFS container. The batch size should be consistent from run to run
|
||||||
otherwise gaps in the uploaded blocks may occur. Below is an example usage of the command:
|
otherwise gaps in the uploaded blocks may occur. Below is an example usage of the command:
|
||||||
|
|
||||||
```shell
|
```shell
|
||||||
./bin/neo-go util upload-bin --cid 9iVfUg8aDHKjPC4LhQXEkVUM4HDkR7UCXYLs8NQwYfSG --wallet-config ./wallet-config.yml --block-attribute Block --rpc-endpoint https://rpc.t5.n3.nspcc.ru:20331 -fsr st1.t5.fs.neo.org:8080 -fsr st2.t5.fs.neo.org:8080 -fsr st3.t5.fs.neo.org:8080
|
./bin/tutus util upload-bin --cid 9iVfUg8aDHKjPC4LhQXEkVUM4HDkR7UCXYLs8NQwYfSG --wallet-config ./wallet-config.yml --block-attribute Block --rpc-endpoint https://rpc.t5.n3.nspcc.ru:20331 -fsr st1.t5.fs.neo.org:8080 -fsr st2.t5.fs.neo.org:8080 -fsr st3.t5.fs.neo.org:8080
|
||||||
```
|
```
|
||||||
|
|
||||||
Run `./bin/neo-go util upload-bin --help` to see the full list of supported options.
|
Run `./bin/tutus util upload-bin --help` to see the full list of supported options.
|
||||||
|
|
||||||
This command works as follows:
|
This command works as follows:
|
||||||
1. Fetches the current block height from the RPC node.
|
1. Fetches the current block height from the RPC node.
|
||||||
|
|
@ -151,10 +151,10 @@ smart contract storage, and upload MPT nodes to a NeoFS container at every
|
||||||
`StateSyncInterval` number of blocks. Below is an example usage of the command:
|
`StateSyncInterval` number of blocks. Below is an example usage of the command:
|
||||||
|
|
||||||
```shell
|
```shell
|
||||||
./bin/neo-go util upload-state --cid 9iVfUg8aDHKjPC4LhQXEkVUM4HDkR7UCXYLs8NQwYfSG --wallet-config ./wallet-config.yml --state-attribute State -m -fsr st1.t5.fs.neo.org:8080 -fsr st2.t5.fs.neo.org:8080 -fsr st3.t5.fs.neo.org:8080
|
./bin/tutus util upload-state --cid 9iVfUg8aDHKjPC4LhQXEkVUM4HDkR7UCXYLs8NQwYfSG --wallet-config ./wallet-config.yml --state-attribute State -m -fsr st1.t5.fs.neo.org:8080 -fsr st2.t5.fs.neo.org:8080 -fsr st3.t5.fs.neo.org:8080
|
||||||
```
|
```
|
||||||
|
|
||||||
Run `./bin/neo-go util upload-state --help` to see the full list of supported options.
|
Run `./bin/tutus util upload-state --help` to see the full list of supported options.
|
||||||
|
|
||||||
This command works as follows:
|
This command works as follows:
|
||||||
1. Searches for the state objects stored in NeoFS to find the latest uploaded object.
|
1. Searches for the state objects stored in NeoFS to find the latest uploaded object.
|
||||||
|
|
|
||||||
|
|
@ -1,6 +1,6 @@
|
||||||
# NeoGo node configuration file
|
# Tutus node configuration file
|
||||||
|
|
||||||
This section contains detailed NeoGo node configuration file description
|
This section contains detailed Tutus node configuration file description
|
||||||
including default config values and some tips to set up configurable values.
|
including default config values and some tips to set up configurable values.
|
||||||
|
|
||||||
Each config file contains two sections. `ApplicationConfiguration` describes node-related
|
Each config file contains two sections. `ApplicationConfiguration` describes node-related
|
||||||
|
|
@ -462,7 +462,7 @@ protocol-related settings described in the table below.
|
||||||
| Section | Type | Default value | Description | Notes |
|
| Section | Type | Default value | Description | Notes |
|
||||||
| --- | --- | --- | --- | --- |
|
| --- | --- | --- | --- | --- |
|
||||||
| CommitteeHistory | map[uint32]uint32 | none | Number of committee members after the given height, for example `{0: 1, 20: 4}` sets up a chain with one committee member since the genesis and then changes the setting to 4 committee members at the height of 20. `StandbyCommittee` committee setting must have the number of keys equal or exceeding the highest value in this option. Blocks numbers where the change happens must be divisible by the old and by the new values simultaneously. If not set, committee size is derived from the `StandbyCommittee` setting and never changes. |
|
| CommitteeHistory | map[uint32]uint32 | none | Number of committee members after the given height, for example `{0: 1, 20: 4}` sets up a chain with one committee member since the genesis and then changes the setting to 4 committee members at the height of 20. `StandbyCommittee` committee setting must have the number of keys equal or exceeding the highest value in this option. Blocks numbers where the change happens must be divisible by the old and by the new values simultaneously. If not set, committee size is derived from the `StandbyCommittee` setting and never changes. |
|
||||||
| Genesis | [Genesis](#Genesis-Configuration) | none | The set of genesis block settings including NeoGo-specific protocol extensions that should be enabled at the genesis block or during native contracts initialisation. |
|
| Genesis | [Genesis](#Genesis-Configuration) | none | The set of genesis block settings including Tutus-specific protocol extensions that should be enabled at the genesis block or during native contracts initialisation. |
|
||||||
| Hardforks | `map[string]uint32` | [] | The set of incompatible changes that affect node behaviour starting from the specified height. The default value is an empty set which should be interpreted as "each known stable hard-fork is applied from the zero blockchain height". See [Hardforks](#Hardforks) section for a list of supported keys. |
|
| Hardforks | `map[string]uint32` | [] | The set of incompatible changes that affect node behaviour starting from the specified height. The default value is an empty set which should be interpreted as "each known stable hard-fork is applied from the zero blockchain height". See [Hardforks](#Hardforks) section for a list of supported keys. |
|
||||||
| Magic | `uint32` | `0` | Magic number which uniquely identifies Neo network. |
|
| Magic | `uint32` | `0` | Magic number which uniquely identifies Neo network. |
|
||||||
| MaxBlockSize | `uint32` | `262144` | Maximum block size in bytes. |
|
| MaxBlockSize | `uint32` | `262144` | Maximum block size in bytes. |
|
||||||
|
|
@ -481,7 +481,7 @@ protocol-related settings described in the table below.
|
||||||
| StateRootInHeader | `bool` | `false` | Enables storing state root in block header. | Experimental protocol extension! |
|
| StateRootInHeader | `bool` | `false` | Enables storing state root in block header. | Experimental protocol extension! |
|
||||||
| StateSyncInterval | `int` | `40000` | The number of blocks between state heights available for MPT state data synchronization. | `P2PStateExchangeExtensions` should be enabled to use this setting. |
|
| StateSyncInterval | `int` | `40000` | The number of blocks between state heights available for MPT state data synchronization. | `P2PStateExchangeExtensions` should be enabled to use this setting. |
|
||||||
| TimePerBlock | `Duration` | `15s` | Minimal (and targeted for) time interval between blocks if MaxTimePerBlock is not set. Must be an integer number of milliseconds. This setting is replaced by [`Genesis`-level](#Genesis-Configuration) `TimePerBlock` protocol configuration setting and corresponding Policy value starting from `Echidna` hardfork. |
|
| TimePerBlock | `Duration` | `15s` | Minimal (and targeted for) time interval between blocks if MaxTimePerBlock is not set. Must be an integer number of milliseconds. This setting is replaced by [`Genesis`-level](#Genesis-Configuration) `TimePerBlock` protocol configuration setting and corresponding Policy value starting from `Echidna` hardfork. |
|
||||||
| MaxTimePerBlock | `Duration` | `0s` | Maximum (and targeted for) time interval between blocks for cases when there's no transactions in the node's memory pool. Must be an integer number of milliseconds. If set, time interval between blocks will vary from TimePerBlock (when there are some transactions in the network) and MaxTimePerBlock. | An extension of NeoGo node that enables dynamic block time as described in https://github.com/neo-project/neo/issues/4018. |
|
| MaxTimePerBlock | `Duration` | `0s` | Maximum (and targeted for) time interval between blocks for cases when there's no transactions in the node's memory pool. Must be an integer number of milliseconds. If set, time interval between blocks will vary from TimePerBlock (when there are some transactions in the network) and MaxTimePerBlock. | An extension of Tutus node that enables dynamic block time as described in https://github.com/neo-project/neo/issues/4018. |
|
||||||
| ValidatorsCount | `uint32` | `0` | Number of validators set for the whole network lifetime, can't be set if `ValidatorsHistory` setting is used. |
|
| ValidatorsCount | `uint32` | `0` | Number of validators set for the whole network lifetime, can't be set if `ValidatorsHistory` setting is used. |
|
||||||
| ValidatorsHistory | map[uint32]uint32 | none | Number of consensus nodes to use after given height (see `CommitteeHistory` also). Heights where the change occurs must be divisible by the number of committee members at that height. Can't be used with `ValidatorsCount` not equal to zero. Initial validators count for genesis block must always be specified. |
|
| ValidatorsHistory | map[uint32]uint32 | none | Number of consensus nodes to use after given height (see `CommitteeHistory` also). Heights where the change occurs must be divisible by the number of committee members at that height. Can't be used with `ValidatorsCount` not equal to zero. Initial validators count for genesis block must always be specified. |
|
||||||
| VerifyTransactions | `bool` | `false` | Denotes whether to verify transactions in the received blocks. |
|
| VerifyTransactions | `bool` | `false` | Denotes whether to verify transactions in the received blocks. |
|
||||||
|
|
@ -489,7 +489,7 @@ protocol-related settings described in the table below.
|
||||||
### Genesis Configuration
|
### Genesis Configuration
|
||||||
|
|
||||||
`Genesis` subsection of protocol configuration section contains a set of settings
|
`Genesis` subsection of protocol configuration section contains a set of settings
|
||||||
specific for genesis block including NeoGo node extensions that should be enabled
|
specific for genesis block including Tutus node extensions that should be enabled
|
||||||
during genesis block persist or at the moment of native contracts initialisation.
|
during genesis block persist or at the moment of native contracts initialisation.
|
||||||
This subsection also contains initial values used for native Policy contract storage
|
This subsection also contains initial values used for native Policy contract storage
|
||||||
initialisation at Echidna hardfork. `Genesis` has the following structure:
|
initialisation at Echidna hardfork. `Genesis` has the following structure:
|
||||||
|
|
@ -543,7 +543,7 @@ where:
|
||||||
Roles designation order follows the enumeration above. Designation
|
Roles designation order follows the enumeration above. Designation
|
||||||
notifications will be emitted after each configured role designation.
|
notifications will be emitted after each configured role designation.
|
||||||
|
|
||||||
Note that Roles is a NeoGo extension that isn't supported by the NeoC# node and
|
Note that Roles is a Tutus extension that isn't supported by the NeoC# node and
|
||||||
must be disabled on the public Neo N3 networks. Roles extension is compatible
|
must be disabled on the public Neo N3 networks. Roles extension is compatible
|
||||||
with Hardforks setting, which means that specified roles will be set
|
with Hardforks setting, which means that specified roles will be set
|
||||||
only during native RoleManagement contract initialisation (which may be
|
only during native RoleManagement contract initialisation (which may be
|
||||||
|
|
@ -568,7 +568,7 @@ where:
|
||||||
signer and the second one (if differs from the first) is committee
|
signer and the second one (if differs from the first) is committee
|
||||||
multisignature signer.
|
multisignature signer.
|
||||||
|
|
||||||
Note that `Transaction` is a NeoGo extension that isn't supported by the NeoC#
|
Note that `Transaction` is a Tutus extension that isn't supported by the NeoC#
|
||||||
node and must be disabled on the public Neo N3 networks.
|
node and must be disabled on the public Neo N3 networks.
|
||||||
|
|
||||||
### Hardforks
|
### Hardforks
|
||||||
|
|
@ -578,10 +578,10 @@ in development and can change in an incompatible way.
|
||||||
|
|
||||||
| Name | Changes | References |
|
| Name | Changes | References |
|
||||||
| --- | --- | --- |
|
| --- | --- | --- |
|
||||||
| `Aspidochelone` | Adjusts the price of `System.Contract.CreateStandardAccount` and `System.Contract.CreateMultisigAccount` interops so that the resulting prices are in accordance with `sha256` method of native `CryptoLib` contract. Also adjusts the price of `System.Runtime.GetRandom` interop and fixes its vulnerability. A special NeoGo-specific change is included as well for ContractManagement's update/deploy call flags behaviour to be compatible with pre-0.99.0 behaviour that was changed because of the 3.2.0 protocol change | https://github.com/tutus-one/tutus-chain/pull/2469 <br> https://github.com/neo-project/neo/pull/2712 <br> https://github.com/tutus-one/tutus-chain/pull/2519 <br> https://github.com/neo-project/neo/pull/2749 <br> https://github.com/neo-project/neo/pull/2653 |
|
| `Aspidochelone` | Adjusts the price of `System.Contract.CreateStandardAccount` and `System.Contract.CreateMultisigAccount` interops so that the resulting prices are in accordance with `sha256` method of native `CryptoLib` contract. Also adjusts the price of `System.Runtime.GetRandom` interop and fixes its vulnerability. A special Tutus-specific change is included as well for ContractManagement's update/deploy call flags behaviour to be compatible with pre-0.99.0 behaviour that was changed because of the 3.2.0 protocol change | https://github.com/tutus-one/tutus-chain/pull/2469 <br> https://github.com/neo-project/neo/pull/2712 <br> https://github.com/tutus-one/tutus-chain/pull/2519 <br> https://github.com/neo-project/neo/pull/2749 <br> https://github.com/neo-project/neo/pull/2653 |
|
||||||
| `Basilisk` | Enables strict smart contract script check against a set of JMP instructions and against method boundaries enabled on contract deploy or update. Increases `stackitem.Integer` JSON parsing precision up to the maximum value supported by the NeoVM. Enables strict check for notifications emitted by a contract to precisely match the events specified in the contract manifest. | https://github.com/tutus-one/tutus-chain/pull/3056 <br> https://github.com/neo-project/neo/pull/2881 <br> https://github.com/tutus-one/tutus-chain/pull/3080 <br> https://github.com/neo-project/neo/pull/2883 <br> https://github.com/tutus-one/tutus-chain/pull/3085 <br> https://github.com/neo-project/neo/pull/2810 |
|
| `Basilisk` | Enables strict smart contract script check against a set of JMP instructions and against method boundaries enabled on contract deploy or update. Increases `stackitem.Integer` JSON parsing precision up to the maximum value supported by the NeoVM. Enables strict check for notifications emitted by a contract to precisely match the events specified in the contract manifest. | https://github.com/tutus-one/tutus-chain/pull/3056 <br> https://github.com/neo-project/neo/pull/2881 <br> https://github.com/tutus-one/tutus-chain/pull/3080 <br> https://github.com/neo-project/neo/pull/2883 <br> https://github.com/tutus-one/tutus-chain/pull/3085 <br> https://github.com/neo-project/neo/pull/2810 |
|
||||||
| `Cockatrice` | Introduces the ability to update native contracts. Includes a couple of new native smart contract APIs: `keccak256` of native CryptoLib contract and `getCommitteeAddress` of native NeoToken contract. | https://github.com/tutus-one/tutus-chain/pull/3402 <br> https://github.com/neo-project/neo/pull/2942 <br> https://github.com/tutus-one/tutus-chain/pull/3301 <br> https://github.com/neo-project/neo/pull/2925 <br> https://github.com/tutus-one/tutus-chain/pull/3362 <br> https://github.com/neo-project/neo/pull/3154 |
|
| `Cockatrice` | Introduces the ability to update native contracts. Includes a couple of new native smart contract APIs: `keccak256` of native CryptoLib contract and `getCommitteeAddress` of native NeoToken contract. | https://github.com/tutus-one/tutus-chain/pull/3402 <br> https://github.com/neo-project/neo/pull/2942 <br> https://github.com/tutus-one/tutus-chain/pull/3301 <br> https://github.com/neo-project/neo/pull/2925 <br> https://github.com/tutus-one/tutus-chain/pull/3362 <br> https://github.com/neo-project/neo/pull/3154 |
|
||||||
| `Domovoi` | Makes node use executing contract state for the contract call permissions check instead of the state stored in the native Management contract. In C# also makes System.Runtime.GetNotifications interop properly count stack references of notification parameters which prevents users from creating objects that exceed MaxStackSize constraint, but NeoGo has never had this bug, thus proper behaviour is preserved even before HFDomovoi. It results in the fact that some T5 testnet transactions have different ApplicationLogs compared to the C# node, but the node states match. | https://github.com/tutus-one/tutus-chain/pull/3476 <br> https://github.com/neo-project/neo/pull/3290 <br> https://github.com/tutus-one/tutus-chain/pull/3473 <br> https://github.com/neo-project/neo/pull/3290 <br> https://github.com/neo-project/neo/pull/3301 <br> https://github.com/tutus-one/tutus-chain/pull/3485 |
|
| `Domovoi` | Makes node use executing contract state for the contract call permissions check instead of the state stored in the native Management contract. In C# also makes System.Runtime.GetNotifications interop properly count stack references of notification parameters which prevents users from creating objects that exceed MaxStackSize constraint, but Tutus has never had this bug, thus proper behaviour is preserved even before HFDomovoi. It results in the fact that some T5 testnet transactions have different ApplicationLogs compared to the C# node, but the node states match. | https://github.com/tutus-one/tutus-chain/pull/3476 <br> https://github.com/neo-project/neo/pull/3290 <br> https://github.com/tutus-one/tutus-chain/pull/3473 <br> https://github.com/neo-project/neo/pull/3290 <br> https://github.com/neo-project/neo/pull/3301 <br> https://github.com/tutus-one/tutus-chain/pull/3485 |
|
||||||
| `Echidna` | Introduces `Designation` event extension with `Old` and `New` roles data to native RoleManagement contract. Adds support for `base64UrlEncode` and `base64UrlDecode` methods to native StdLib contract. Extends the list of required call flags for `registerCandidate`, `unregisterCandidate`and `vote` methods of native NeoToken contract with AllowNotify flag. Enables `onNEP17Payment` method of NEO contract for candidate registration. Introduces constraint for maximum number of execution notifications. Adds support for `recoverSecp256K1` method of native CryptoLib contract. Introduces `setMillisecondsPerBlock` and `getMillisecondsPerBlock` methods of native Policy contract. Introduces support for NotaryAssisted transaction attribute and native Notary contract. | https://github.com/tutus-one/tutus-chain/pull/3554 <br> https://github.com/tutus-one/tutus-chain/pull/3761 <br> https://github.com/tutus-one/tutus-chain/pull/3554 <br> https://github.com/neo-project/neo/pull/3597 <br> https://github.com/tutus-one/tutus-chain/pull/3700 <br> https://github.com/tutus-one/tutus-chain/pull/3640 <br> https://github.com/neo-project/neo/pull/3548 <br> https://github.com/tutus-one/tutus-chain/pull/3863 <br> https://github.com/neo-project/neo/pull/3696 <br> https://github.com/neo-project/neo/pull/3895 <br> https://github.com/tutus-one/tutus-chain/pull/3835 <br> https://github.com/tutus-one/tutus-chain/pull/3854 <br> https://github.com/neo-project/neo/pull/3175 <br> https://github.com/tutus-one/tutus-chain/pull/3478 <br> https://github.com/neo-project/neo/pull/3178 |
|
| `Echidna` | Introduces `Designation` event extension with `Old` and `New` roles data to native RoleManagement contract. Adds support for `base64UrlEncode` and `base64UrlDecode` methods to native StdLib contract. Extends the list of required call flags for `registerCandidate`, `unregisterCandidate`and `vote` methods of native NeoToken contract with AllowNotify flag. Enables `onNEP17Payment` method of NEO contract for candidate registration. Introduces constraint for maximum number of execution notifications. Adds support for `recoverSecp256K1` method of native CryptoLib contract. Introduces `setMillisecondsPerBlock` and `getMillisecondsPerBlock` methods of native Policy contract. Introduces support for NotaryAssisted transaction attribute and native Notary contract. | https://github.com/tutus-one/tutus-chain/pull/3554 <br> https://github.com/tutus-one/tutus-chain/pull/3761 <br> https://github.com/tutus-one/tutus-chain/pull/3554 <br> https://github.com/neo-project/neo/pull/3597 <br> https://github.com/tutus-one/tutus-chain/pull/3700 <br> https://github.com/tutus-one/tutus-chain/pull/3640 <br> https://github.com/neo-project/neo/pull/3548 <br> https://github.com/tutus-one/tutus-chain/pull/3863 <br> https://github.com/neo-project/neo/pull/3696 <br> https://github.com/neo-project/neo/pull/3895 <br> https://github.com/tutus-one/tutus-chain/pull/3835 <br> https://github.com/tutus-one/tutus-chain/pull/3854 <br> https://github.com/neo-project/neo/pull/3175 <br> https://github.com/tutus-one/tutus-chain/pull/3478 <br> https://github.com/neo-project/neo/pull/3178 |
|
||||||
| `Faun` | Adds `getBlockedAccounts` method to native Policy contract. Adds `hexEncode` and `hexDecode` methods to native StdLib contract. Adds `getExecPicoFeeFactor` method to native Policy contract and enables 4 decimals for execution fee factor. Adds whitelist fee contract management to native Policy contract: `setWhitelistFeeContract`, `removeWhitelistFeeContract`, `getWhitelistFeeContracts` methods and `WhitelistFeeChanged` event. | https://github.com/tutus-one/tutus-chain/pull/3932 <br> https://github.com/tutus-one/tutus-chain/pull/4004 <br> https://github.com/neo-project/neo/pull/4147 <br> https://github.com/neo-project/neo/pull/4150 <br> https://github.com/tutus-one/tutus-chain/pull/4057 <br> https://github.com/neo-project/neo/pull/4278 <br> https://github.com/tutus-one/tutus-chain/pull/4052 <br> https://github.com/neo-project/neo/pull/4201 |
|
| `Faun` | Adds `getBlockedAccounts` method to native Policy contract. Adds `hexEncode` and `hexDecode` methods to native StdLib contract. Adds `getExecPicoFeeFactor` method to native Policy contract and enables 4 decimals for execution fee factor. Adds whitelist fee contract management to native Policy contract: `setWhitelistFeeContract`, `removeWhitelistFeeContract`, `getWhitelistFeeContracts` methods and `WhitelistFeeChanged` event. | https://github.com/tutus-one/tutus-chain/pull/3932 <br> https://github.com/tutus-one/tutus-chain/pull/4004 <br> https://github.com/neo-project/neo/pull/4147 <br> https://github.com/neo-project/neo/pull/4150 <br> https://github.com/tutus-one/tutus-chain/pull/4057 <br> https://github.com/neo-project/neo/pull/4278 <br> https://github.com/tutus-one/tutus-chain/pull/4052 <br> https://github.com/neo-project/neo/pull/4201 |
|
||||||
|
|
||||||
|
|
@ -591,7 +591,7 @@ Real networks with large number of blocks require a substantial amount of time
|
||||||
to synchronize. When operating a number of node instances with similar
|
to synchronize. When operating a number of node instances with similar
|
||||||
configurations you may want to save some resources by performing synchronization
|
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
|
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
|
can be done and this is supported, but Tutus has a lot of options that may
|
||||||
affect this:
|
affect this:
|
||||||
- any differences in `ProtocolConfiguration` section make (or may make) databases
|
- any differences in `ProtocolConfiguration` section make (or may make) databases
|
||||||
incompatible, except for `MemPoolSize`, `P2PNotaryRequestPayloadPoolSize`,
|
incompatible, except for `MemPoolSize`, `P2PNotaryRequestPayloadPoolSize`,
|
||||||
|
|
|
||||||
|
|
@ -1,6 +1,6 @@
|
||||||
# NeoGo P2P signature collection (notary) service
|
# Tutus P2P signature collection (notary) service
|
||||||
|
|
||||||
P2P signature (notary) service is a NeoGo node extension that allows several
|
P2P signature (notary) service is a Tutus node extension that allows several
|
||||||
parties to sign one transaction independently of chain and without going beyond the
|
parties to sign one transaction independently of chain and without going beyond the
|
||||||
chain environment. The on-chain P2P service is aimed to automate, accelerate and
|
chain environment. The on-chain P2P service is aimed to automate, accelerate and
|
||||||
secure the process of signature collection. The service was initially designed as
|
secure the process of signature collection. The service was initially designed as
|
||||||
|
|
@ -138,27 +138,27 @@ associated fallback transactions for the main transaction.
|
||||||
|
|
||||||
After processing, service request is deleted from the module.
|
After processing, service request is deleted from the module.
|
||||||
|
|
||||||
See the [NeoGo P2P signature extensions](#NeoGo P2P signature extensions) on how
|
See the [Tutus P2P signature extensions](#Tutus P2P signature extensions) on how
|
||||||
to enable notary-related extensions on chain and
|
to enable notary-related extensions on chain and
|
||||||
[NeoGo Notary service node module](#NeoGo Notary service node module) on how to
|
[Tutus Notary service node module](#Tutus Notary service node module) on how to
|
||||||
set up Notary service node.
|
set up Notary service node.
|
||||||
|
|
||||||
## Environment setup
|
## Environment setup
|
||||||
|
|
||||||
To run P2P signature collection service on your network, you need to do:
|
To run P2P signature collection service on your network, you need to do:
|
||||||
* Set up [`P2PSigExtensions`](#NeoGo P2P signature extensions) for all nodes in
|
* Set up [`P2PSigExtensions`](#Tutus P2P signature extensions) for all nodes in
|
||||||
the network.
|
the network.
|
||||||
* Set notary node keys in `RoleManagement` native contract.
|
* Set notary node keys in `RoleManagement` native contract.
|
||||||
* [Configure](#NeoGo Notary service node module) and run appropriate number of
|
* [Configure](#Tutus Notary service node module) and run appropriate number of
|
||||||
notary nodes with keys specified in `RoleManagement` native contract (at least
|
notary nodes with keys specified in `RoleManagement` native contract (at least
|
||||||
one node is necessary to complete signature collection).
|
one node is necessary to complete signature collection).
|
||||||
|
|
||||||
After service is running, you can [create and send](#Notary request lifecycle guide)
|
After service is running, you can [create and send](#Notary request lifecycle guide)
|
||||||
notary requests to the network.
|
notary requests to the network.
|
||||||
|
|
||||||
### NeoGo P2P signature extensions
|
### Tutus P2P signature extensions
|
||||||
|
|
||||||
As far as Notary service is an extension of the standard NeoGo node, it should be
|
As far as Notary service is an extension of the standard Tutus node, it should be
|
||||||
enabled and properly configured before usage.
|
enabled and properly configured before usage.
|
||||||
|
|
||||||
#### Configuration
|
#### Configuration
|
||||||
|
|
@ -177,7 +177,7 @@ set to 0 (if `P2PSigExtensions` are enabled).
|
||||||
Note, that even if `P2PSigExtensions` config subsection enables notary-related
|
Note, that even if `P2PSigExtensions` config subsection enables notary-related
|
||||||
logic in the network, it still does not turn your node into notary service node.
|
logic in the network, it still does not turn your node into notary service node.
|
||||||
To enable notary service node functionality refer to the
|
To enable notary service node functionality refer to the
|
||||||
[NeoGo Notary service](#NeoGo-Notary-service-node-module) documentation.
|
[Tutus Notary service](#Tutus-Notary-service-node-module) documentation.
|
||||||
|
|
||||||
##### Example
|
##### Example
|
||||||
|
|
||||||
|
|
@ -186,9 +186,9 @@ To enable notary service node functionality refer to the
|
||||||
```
|
```
|
||||||
|
|
||||||
|
|
||||||
### NeoGo Notary service node module
|
### Tutus Notary service node module
|
||||||
|
|
||||||
NeoGo node can act as notary service node (the node that accumulates notary
|
Tutus node can act as notary service node (the node that accumulates notary
|
||||||
requests, collects signatures and releases fully-signed transactions). It must
|
requests, collects signatures and releases fully-signed transactions). It must
|
||||||
have a wallet with a key belonging to one of network's designated notary nodes
|
have a wallet with a key belonging to one of network's designated notary nodes
|
||||||
(stored in `RoleManagement` native contract). Also, the node must be connected to
|
(stored in `RoleManagement` native contract). Also, the node must be connected to
|
||||||
|
|
@ -203,7 +203,7 @@ to the notary service node and avoid P2P communication delays.
|
||||||
#### Configuration
|
#### Configuration
|
||||||
|
|
||||||
To enable notary service node check firstly that
|
To enable notary service node check firstly that
|
||||||
[P2PSignatureExtensions](#NeoGo P2P signature extensions) are properly set up.
|
[P2PSignatureExtensions](#Tutus P2P signature extensions) are properly set up.
|
||||||
Then add `P2PNotary` subsection to `ApplicationConfiguration` section of your
|
Then add `P2PNotary` subsection to `ApplicationConfiguration` section of your
|
||||||
node config.
|
node config.
|
||||||
|
|
||||||
|
|
@ -284,7 +284,7 @@ server via [`submitnotaryrequest` RPC call](./rpc.md#submitnotaryrequest-call).
|
||||||
Note, that all parties must generate the same main transaction while fallbacks
|
Note, that all parties must generate the same main transaction while fallbacks
|
||||||
can differ.
|
can differ.
|
||||||
|
|
||||||
To create a notary request, you can use [NeoGo RPC client](./rpc.md#Client). The
|
To create a notary request, you can use [Tutus RPC client](./rpc.md#Client). The
|
||||||
procedure below uses only basic RPC client functions and show all of the notary
|
procedure below uses only basic RPC client functions and show all of the notary
|
||||||
request internals. You can use much simpler Actor interface in the notary
|
request internals. You can use much simpler Actor interface in the notary
|
||||||
subpackage with an example written in Go doc.
|
subpackage with an example written in Go doc.
|
||||||
|
|
@ -413,7 +413,7 @@ is highly likely to be a part of `H+1` block.
|
||||||
|
|
||||||
Once the P2PNotaryRequest reaches RPC node, it is added to the notary request pool.
|
Once the P2PNotaryRequest reaches RPC node, it is added to the notary request pool.
|
||||||
Completed or outdated requests are removed from the pool. Use
|
Completed or outdated requests are removed from the pool. Use
|
||||||
[NeoGo notification subsystem](./notifications.md) to track request addition and
|
[Tutus notification subsystem](./notifications.md) to track request addition and
|
||||||
removal:
|
removal:
|
||||||
|
|
||||||
- Use RPC `subscribe` method with `notary_request_event` stream name parameter to
|
- Use RPC `subscribe` method with `notary_request_event` stream name parameter to
|
||||||
|
|
|
||||||
|
|
@ -1,6 +1,6 @@
|
||||||
# NeoGo Oracle service
|
# Tutus Oracle service
|
||||||
|
|
||||||
NeoGo node can act as an oracle service node for https and neofs protocols. It
|
Tutus node can act as an oracle service node for https and neofs protocols. It
|
||||||
has to have a wallet with a key belonging to one of the network's designated oracle
|
has to have a wallet with a key belonging to one of the network's designated oracle
|
||||||
nodes (stored in `RoleManagement` native contract).
|
nodes (stored in `RoleManagement` native contract).
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -1,6 +1,6 @@
|
||||||
# Release instructions
|
# Release instructions
|
||||||
|
|
||||||
This document outlines the neo-go release process. It can be used as a todo
|
This document outlines the tutus release process. It can be used as a todo
|
||||||
list for a new release.
|
list for a new release.
|
||||||
|
|
||||||
## Check the state
|
## Check the state
|
||||||
|
|
@ -21,7 +21,7 @@ describing the most significant changes done in this release. In case if the nod
|
||||||
configuration was changed, some API was marked as deprecated, any experimental
|
configuration was changed, some API was marked as deprecated, any experimental
|
||||||
changes were made in the user-facing code and the users' feedback is needed or
|
changes were made in the user-facing code and the users' feedback is needed or
|
||||||
if there's any other information that requires user's response, write
|
if there's any other information that requires user's response, write
|
||||||
another separate paragraph for those who owns NeoGo node or uses any external
|
another separate paragraph for those who owns Tutus node or uses any external
|
||||||
API. Then, add sections with release content describing each change in detail
|
API. Then, add sections with release content describing each change in detail
|
||||||
and with a reference to GitHub issues and/or PRs. Minor issues that doesn't
|
and with a reference to GitHub issues and/or PRs. Minor issues that doesn't
|
||||||
affect the node end-user may be grouped under a single label.
|
affect the node end-user may be grouped under a single label.
|
||||||
|
|
@ -60,8 +60,8 @@ start them manually from the Build GitHub workflow), so wait for them to
|
||||||
finish. Built binaries should be automatically attached to the release as an
|
finish. Built binaries should be automatically attached to the release as an
|
||||||
asset, check it on the release page. If binaries weren't attached after building
|
asset, check it on the release page. If binaries weren't attached after building
|
||||||
workflow completion, then submit the bug, download currently supported binaries
|
workflow completion, then submit the bug, download currently supported binaries
|
||||||
(at the time of writing they are `neo-go-darwin-arm64`, `neo-go-linux-amd64`,
|
(at the time of writing they are `tutus-darwin-arm64`, `tutus-linux-amd64`,
|
||||||
`neo-go-linux-arm64` and `neo-go-windows-amd64`) from the building job artifacts,
|
`tutus-linux-arm64` and `tutus-windows-amd64`) from the building job artifacts,
|
||||||
unpack archives and add resulting binaries (named in the same way as archives)
|
unpack archives and add resulting binaries (named in the same way as archives)
|
||||||
to the previously created release via "Edit release" button.
|
to the previously created release via "Edit release" button.
|
||||||
|
|
||||||
|
|
|
||||||
52
docs/rpc.md
52
docs/rpc.md
|
|
@ -22,7 +22,7 @@ which would yield the response:
|
||||||
```json
|
```json
|
||||||
{
|
{
|
||||||
"result" : {
|
"result" : {
|
||||||
"useragent" : "/NEO-GO:0.97.2/",
|
"useragent" : "/TUTUS:0.97.2/",
|
||||||
"tcpport" : 10333,
|
"tcpport" : 10333,
|
||||||
"network" : 860833102,
|
"network" : 860833102,
|
||||||
"nonce" : 105745208
|
"nonce" : 105745208
|
||||||
|
|
@ -85,7 +85,7 @@ which would yield the response:
|
||||||
C# implementation contains a number of enumerations and while it outputs them
|
C# implementation contains a number of enumerations and while it outputs them
|
||||||
into JSON as comma-separated strings (or just strings if only one value is
|
into JSON as comma-separated strings (or just strings if only one value is
|
||||||
allowed for this type) it accepts pure numbers for input (see #2563 for
|
allowed for this type) it accepts pure numbers for input (see #2563 for
|
||||||
example). NeoGo currently doesn't support this behavior. This affects the
|
example). Tutus currently doesn't support this behavior. This affects the
|
||||||
following data types:
|
following data types:
|
||||||
* transaction attribute type
|
* transaction attribute type
|
||||||
* oracle response code
|
* oracle response code
|
||||||
|
|
@ -101,17 +101,17 @@ Any call that takes any of these types for input in JSON format is affected.
|
||||||
|
|
||||||
##### Response error codes
|
##### Response error codes
|
||||||
|
|
||||||
NeoGo currently uses a different set of error codes in comparison to C# implementation, see
|
Tutus currently uses a different set of error codes in comparison to C# implementation, see
|
||||||
[proposal](https://github.com/neo-project/proposals/pull/156).
|
[proposal](https://github.com/neo-project/proposals/pull/156).
|
||||||
NeoGo retains certain deprecated error codes, which will be removed once
|
Tutus retains certain deprecated error codes, which will be removed once
|
||||||
all nodes adopt the new error standard.
|
all nodes adopt the new error standard.
|
||||||
|
|
||||||
##### `calculatenetworkfee`
|
##### `calculatenetworkfee`
|
||||||
|
|
||||||
NeoGo tries to cover more cases with its calculatenetworkfee implementation,
|
Tutus tries to cover more cases with its calculatenetworkfee implementation,
|
||||||
whereas C# node support only standard signature contracts and deployed
|
whereas C# node support only standard signature contracts and deployed
|
||||||
contracts that can execute `verify` successfully on incomplete (not yet signed
|
contracts that can execute `verify` successfully on incomplete (not yet signed
|
||||||
properly) transaction, NeoGo also works with deployed contracts that fail at
|
properly) transaction, Tutus also works with deployed contracts that fail at
|
||||||
this stage and executes non-standard contracts (that can fail
|
this stage and executes non-standard contracts (that can fail
|
||||||
too). It's ignoring the result of any verification script (since the method
|
too). It's ignoring the result of any verification script (since the method
|
||||||
calculates fee and doesn't care about transaction validity). Invocation script
|
calculates fee and doesn't care about transaction validity). Invocation script
|
||||||
|
|
@ -123,7 +123,7 @@ neo-project/neo#2805 as well.
|
||||||
|
|
||||||
##### `invokefunction`, `invokescript`
|
##### `invokefunction`, `invokescript`
|
||||||
|
|
||||||
neo-go implementation of `invokefunction` does not return `tx`
|
tutus implementation of `invokefunction` does not return `tx`
|
||||||
field in the answer because that requires signing the transaction with some
|
field in the answer because that requires signing the transaction with some
|
||||||
key in the server, which doesn't fit the model of our node-client interactions.
|
key in the server, which doesn't fit the model of our node-client interactions.
|
||||||
If this signature is lacking, the transaction is almost useless, so there is no point
|
If this signature is lacking, the transaction is almost useless, so there is no point
|
||||||
|
|
@ -162,19 +162,19 @@ a native contract by its name (case-insensitive), unlike the C# node where
|
||||||
it only possible for index or hash.
|
it only possible for index or hash.
|
||||||
|
|
||||||
##### `getnep11balances` and `getnep17balances`
|
##### `getnep11balances` and `getnep17balances`
|
||||||
neo-go implementation of `getnep11balances` and `getnep17balances` does not
|
tutus implementation of `getnep11balances` and `getnep17balances` does not
|
||||||
perform tracking of NEP-11 and NEP-17 balances for each account as it is done
|
perform tracking of NEP-11 and NEP-17 balances for each account as it is done
|
||||||
in the C# node. Instead, a neo-go node maintains a list of standard-compliant
|
in the C# node. Instead, a tutus node maintains a list of standard-compliant
|
||||||
contracts, i.e. those contracts that have `NEP-11` or `NEP-17` declared in the
|
contracts, i.e. those contracts that have `NEP-11` or `NEP-17` declared in the
|
||||||
supported standards section of the manifest. Each time balances are queried,
|
supported standards section of the manifest. Each time balances are queried,
|
||||||
the neo-go node asks every NEP-11/NEP-17 contract for the account balance by
|
the tutus node asks every NEP-11/NEP-17 contract for the account balance by
|
||||||
invoking `balanceOf` method with the corresponding args. Invocation GAS limit
|
invoking `balanceOf` method with the corresponding args. Invocation GAS limit
|
||||||
is set to be 3 GAS. All non-zero balances are included in the RPC call result.
|
is set to be 3 GAS. All non-zero balances are included in the RPC call result.
|
||||||
|
|
||||||
Thus, if a token contract doesn't have proper standard declared in the list of
|
Thus, if a token contract doesn't have proper standard declared in the list of
|
||||||
supported standards but emits compliant NEP-11/NEP-17 `Transfer`
|
supported standards but emits compliant NEP-11/NEP-17 `Transfer`
|
||||||
notifications, the token balance won't be shown in the list of balances
|
notifications, the token balance won't be shown in the list of balances
|
||||||
returned by the neo-go node (unlike the C# node behavior). However, transfer
|
returned by the tutus node (unlike the C# node behavior). However, transfer
|
||||||
logs of such tokens are still available via respective `getnepXXtransfers` RPC
|
logs of such tokens are still available via respective `getnepXXtransfers` RPC
|
||||||
calls.
|
calls.
|
||||||
|
|
||||||
|
|
@ -187,33 +187,33 @@ all tokens of the same asset.
|
||||||
|
|
||||||
##### `getversion`
|
##### `getversion`
|
||||||
|
|
||||||
NeoGo can return additional fields in the `protocol` object depending on the
|
Tutus can return additional fields in the `protocol` object depending on the
|
||||||
extensions enabled. Specifically that's `p2psigextensions` and
|
extensions enabled. Specifically that's `p2psigextensions` and
|
||||||
`staterootinheader` booleans and `committeehistory` and `validatorshistory`
|
`staterootinheader` booleans and `committeehistory` and `validatorshistory`
|
||||||
objects (that are effectively maps from stringified integers to other
|
objects (that are effectively maps from stringified integers to other
|
||||||
integers). These fields are only returned when corresponding settings are
|
integers). These fields are only returned when corresponding settings are
|
||||||
enabled in the server's protocol configuration. NeoGo can return an additional
|
enabled in the server's protocol configuration. Tutus can return an additional
|
||||||
`application` object depending on the extensions enabled which contains three
|
`application` object depending on the extensions enabled which contains three
|
||||||
fields: `saveinvocations`, `keeponlylateststate` and `removeuntraceableblocks`
|
fields: `saveinvocations`, `keeponlylateststate` and `removeuntraceableblocks`
|
||||||
booleans. These fields are only returned when corresponding settings are enabled
|
booleans. These fields are only returned when corresponding settings are enabled
|
||||||
in the node's application configuration.
|
in the node's application configuration.
|
||||||
|
|
||||||
##### `getnep11transfers` and `getnep17transfers`
|
##### `getnep11transfers` and `getnep17transfers`
|
||||||
`transfernotifyindex` is not tracked by NeoGo, thus this field is always zero.
|
`transfernotifyindex` is not tracked by Tutus, thus this field is always zero.
|
||||||
|
|
||||||
##### `traverseiterator` and `terminatesession`
|
##### `traverseiterator` and `terminatesession`
|
||||||
|
|
||||||
NeoGo returns an error when it is unable to find a session or iterator, unlike
|
Tutus returns an error when it is unable to find a session or iterator, unlike
|
||||||
the error-free C# response that provides a default result.
|
the error-free C# response that provides a default result.
|
||||||
|
|
||||||
##### `verifyProof`
|
##### `verifyProof`
|
||||||
|
|
||||||
NeoGo can generate an error in response to an invalid proof, unlike
|
Tutus can generate an error in response to an invalid proof, unlike
|
||||||
the error-free C# implementation.
|
the error-free C# implementation.
|
||||||
|
|
||||||
##### `getPeers`
|
##### `getPeers`
|
||||||
|
|
||||||
NeoGo extends the `getpeers` RPC call to return the user agent
|
Tutus extends the `getpeers` RPC call to return the user agent
|
||||||
(`useragent` JSON field) and last known block height
|
(`useragent` JSON field) and last known block height
|
||||||
(`lastknownheight` JSON field) for each connected peer where available.
|
(`lastknownheight` JSON field) for each connected peer where available.
|
||||||
The last known block height field may be stale depending on the
|
The last known block height field may be stale depending on the
|
||||||
|
|
@ -227,19 +227,19 @@ and we're not accepting issues related to them.
|
||||||
|
|
||||||
| Method | Reason |
|
| Method | Reason |
|
||||||
| ------- | ------------|
|
| ------- | ------------|
|
||||||
| `canceltransaction` | Doesn't fit neo-go wallet model, use CLI to do that (`neo-go util canceltx`) |
|
| `canceltransaction` | Doesn't fit tutus wallet model, use CLI to do that (`tutus util canceltx`) |
|
||||||
| `closewallet` | Doesn't fit neo-go wallet model |
|
| `closewallet` | Doesn't fit tutus wallet model |
|
||||||
| `dumpprivkey` | Shouldn't exist for security reasons, see `closewallet` comment also |
|
| `dumpprivkey` | Shouldn't exist for security reasons, see `closewallet` comment also |
|
||||||
| `getnewaddress` | See `closewallet` comment, use CLI to do that |
|
| `getnewaddress` | See `closewallet` comment, use CLI to do that |
|
||||||
| `getwalletbalance` | See `closewallet` comment, use `getnep17balances` for that |
|
| `getwalletbalance` | See `closewallet` comment, use `getnep17balances` for that |
|
||||||
| `getwalletunclaimedgas` | See `closewallet` comment, use `getunclaimedgas` for that |
|
| `getwalletunclaimedgas` | See `closewallet` comment, use `getunclaimedgas` for that |
|
||||||
| `importprivkey` | Not applicable to neo-go, see `closewallet` comment |
|
| `importprivkey` | Not applicable to tutus, see `closewallet` comment |
|
||||||
| `listaddress` | Not applicable to neo-go, see `closewallet` comment |
|
| `listaddress` | Not applicable to tutus, see `closewallet` comment |
|
||||||
| `listplugins` | neo-go doesn't have any plugins, so it makes no sense |
|
| `listplugins` | tutus doesn't have any plugins, so it makes no sense |
|
||||||
| `openwallet` | Doesn't fit neo-go wallet model |
|
| `openwallet` | Doesn't fit tutus wallet model |
|
||||||
| `sendfrom` | Not applicable to neo-go, see `openwallet` comment |
|
| `sendfrom` | Not applicable to tutus, see `openwallet` comment |
|
||||||
| `sendmany` | Not applicable to neo-go, see `openwallet` comment |
|
| `sendmany` | Not applicable to tutus, see `openwallet` comment |
|
||||||
| `sendtoaddress` | Not applicable to neo-go, see `claimgas` comment |
|
| `sendtoaddress` | Not applicable to tutus, see `claimgas` comment |
|
||||||
|
|
||||||
### Extensions
|
### Extensions
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -1,9 +1,9 @@
|
||||||
# NeoGo state validation
|
# Tutus state validation
|
||||||
|
|
||||||
NeoGo supports state validation using N3 stateroots and can also act as state
|
Tutus supports state validation using N3 stateroots and can also act as state
|
||||||
validator (run state validation service).
|
validator (run state validation service).
|
||||||
|
|
||||||
All NeoGo nodes always calculate MPT root hash for data stored by contracts.
|
All Tutus nodes always calculate MPT root hash for data stored by contracts.
|
||||||
Unlike in Neo Legacy, this behavior can't be turned off. They also process
|
Unlike in Neo Legacy, this behavior can't be turned off. They also process
|
||||||
stateroot messages broadcasted through the network and save validated
|
stateroot messages broadcasted through the network and save validated
|
||||||
signatures from them if the state root hash specified there matches the one signed
|
signatures from them if the state root hash specified there matches the one signed
|
||||||
|
|
@ -43,7 +43,7 @@ To run state validation service on your network you need to:
|
||||||
|
|
||||||
## StateRootInHeader option
|
## StateRootInHeader option
|
||||||
|
|
||||||
NeoGo also supports protocol extension to include state root hashes right into
|
Tutus also supports protocol extension to include state root hashes right into
|
||||||
header blocks. It's not compatible with regular Neo N3 state validation
|
header blocks. It's not compatible with regular Neo N3 state validation
|
||||||
service and it's not compatible with public Neo N3 networks, but you can use
|
service and it's not compatible with public Neo N3 networks, but you can use
|
||||||
it on private networks if needed.
|
it on private networks if needed.
|
||||||
|
|
|
||||||
44
docs/vm.md
44
docs/vm.md
|
|
@ -1,10 +1,10 @@
|
||||||
# NEO-GO-VM
|
# TUTUS-VM
|
||||||
|
|
||||||
A cross platform virtual machine implementation for `NEF` compatible programs.
|
A cross platform virtual machine implementation for `NEF` compatible programs.
|
||||||
|
|
||||||
# Installation
|
# Installation
|
||||||
|
|
||||||
VM is provided as a part of neo-go binary, so usual neo-go build instructions
|
VM is provided as a part of tutus binary, so usual tutus build instructions
|
||||||
are applicable.
|
are applicable.
|
||||||
|
|
||||||
# Running the VM
|
# Running the VM
|
||||||
|
|
@ -12,7 +12,7 @@ are applicable.
|
||||||
Start the virtual machine:
|
Start the virtual machine:
|
||||||
|
|
||||||
```
|
```
|
||||||
$ ./bin/neo-go vm
|
$ ./bin/tutus vm
|
||||||
|
|
||||||
_ ____________ __________ _ ____ ___
|
_ ____________ __________ _ ____ ___
|
||||||
/ | / / ____/ __ \ / ____/ __ \ | | / / |/ /
|
/ | / / ____/ __ \ / ____/ __ \ | | / / |/ /
|
||||||
|
|
@ -21,7 +21,7 @@ $ ./bin/neo-go vm
|
||||||
/_/ |_/_____/\____/ \____/\____/ |___/_/ /_/
|
/_/ |_/_____/\____/ \____/\____/ |___/_/ /_/
|
||||||
|
|
||||||
|
|
||||||
NEO-GO-VM >
|
TUTUS-VM >
|
||||||
```
|
```
|
||||||
|
|
||||||
# Usage
|
# Usage
|
||||||
|
|
@ -34,7 +34,7 @@ NEO-GO-VM >
|
||||||
/_/ |_/_____/\____/ \____/\____/ |___/_/ /_/
|
/_/ |_/_____/\____/ \____/\____/ |___/_/ /_/
|
||||||
|
|
||||||
|
|
||||||
NEO-GO-VM > help
|
TUTUS-VM > help
|
||||||
|
|
||||||
Commands:
|
Commands:
|
||||||
aslot Show arguments slot contents
|
aslot Show arguments slot contents
|
||||||
|
|
@ -66,7 +66,7 @@ You can get help for each command and its parameters adding `help` as a
|
||||||
parameter to the command:
|
parameter to the command:
|
||||||
|
|
||||||
```
|
```
|
||||||
NEO-GO-VM > step help
|
TUTUS-VM > step help
|
||||||
|
|
||||||
Usage: step [<n>]
|
Usage: step [<n>]
|
||||||
<n> is optional parameter to specify number of instructions to run, example:
|
<n> is optional parameter to specify number of instructions to run, example:
|
||||||
|
|
@ -79,14 +79,14 @@ Usage: step [<n>]
|
||||||
To load an avm script in NEF format into the VM:
|
To load an avm script in NEF format into the VM:
|
||||||
|
|
||||||
```
|
```
|
||||||
NEO-GO-VM > loadnef ../contract.nef
|
TUTUS-VM > loadnef ../contract.nef
|
||||||
READY: loaded 36 instructions
|
READY: loaded 36 instructions
|
||||||
```
|
```
|
||||||
|
|
||||||
Run the script:
|
Run the script:
|
||||||
|
|
||||||
```
|
```
|
||||||
NEO-GO-VM > run
|
TUTUS-VM > run
|
||||||
[
|
[
|
||||||
{
|
{
|
||||||
"value": 1,
|
"value": 1,
|
||||||
|
|
@ -98,16 +98,16 @@ NEO-GO-VM > run
|
||||||
You can also directly compile and load `.go` files:
|
You can also directly compile and load `.go` files:
|
||||||
|
|
||||||
```
|
```
|
||||||
NEO-GO-VM > loadgo ../contract.go
|
TUTUS-VM > loadgo ../contract.go
|
||||||
READY: loaded 36 instructions
|
READY: loaded 36 instructions
|
||||||
```
|
```
|
||||||
|
|
||||||
To make it even more complete, you can directly load hex or base64 strings into the VM:
|
To make it even more complete, you can directly load hex or base64 strings into the VM:
|
||||||
|
|
||||||
```
|
```
|
||||||
NEO-GO-VM > loadhex 0c0c48656c6c6f20776f726c6421
|
TUTUS-VM > loadhex 0c0c48656c6c6f20776f726c6421
|
||||||
READY: loaded 14 instructions
|
READY: loaded 14 instructions
|
||||||
NEO-GO-VM 0 > run
|
TUTUS-VM 0 > run
|
||||||
[
|
[
|
||||||
{
|
{
|
||||||
"type": "ByteString",
|
"type": "ByteString",
|
||||||
|
|
@ -149,7 +149,7 @@ automatically (please refer to the `run` command help), but if you need to
|
||||||
pass a parameter of a specific type you can specify it in `run`'s arguments:
|
pass a parameter of a specific type you can specify it in `run`'s arguments:
|
||||||
|
|
||||||
```
|
```
|
||||||
NEO-GO-VM > run rollDice int:1
|
TUTUS-VM > run rollDice int:1
|
||||||
```
|
```
|
||||||
|
|
||||||
> The method is always of type string, hence we don't need to specify the type.
|
> The method is always of type string, hence we don't need to specify the type.
|
||||||
|
|
@ -157,7 +157,7 @@ NEO-GO-VM > run rollDice int:1
|
||||||
To add more than 1 argument:
|
To add more than 1 argument:
|
||||||
|
|
||||||
```
|
```
|
||||||
NEO-GO-VM > run someMethod int:1 int:2 string:foo string:bar
|
TUTUS-VM > run someMethod int:1 int:2 string:foo string:bar
|
||||||
```
|
```
|
||||||
|
|
||||||
Currently supported types:
|
Currently supported types:
|
||||||
|
|
@ -166,24 +166,24 @@ Currently supported types:
|
||||||
- `string (string:foo string:this is a string)`
|
- `string (string:foo string:this is a string)`
|
||||||
|
|
||||||
## Debugging
|
## Debugging
|
||||||
The `neo-go-vm` provides a debugger to inspect your program in-depth.
|
The `tutus-vm` provides a debugger to inspect your program in-depth.
|
||||||
|
|
||||||
|
|
||||||
### Stepping through the program
|
### Stepping through the program
|
||||||
Step 4 instructions.
|
Step 4 instructions.
|
||||||
|
|
||||||
```
|
```
|
||||||
NEO-GO-VM > step 4
|
TUTUS-VM > step 4
|
||||||
at breakpoint 3 (DUPFROMALTSTACK)
|
at breakpoint 3 (DUPFROMALTSTACK)
|
||||||
NEO-GO-VM 3 >
|
TUTUS-VM 3 >
|
||||||
```
|
```
|
||||||
|
|
||||||
Using just `step` will execute 1 instruction at a time.
|
Using just `step` will execute 1 instruction at a time.
|
||||||
|
|
||||||
```
|
```
|
||||||
NEO-GO-VM 3 > step
|
TUTUS-VM 3 > step
|
||||||
at breakpoint 4 (PUSH0)
|
at breakpoint 4 (PUSH0)
|
||||||
NEO-GO-VM 4 >
|
TUTUS-VM 4 >
|
||||||
```
|
```
|
||||||
|
|
||||||
### Breakpoints
|
### Breakpoints
|
||||||
|
|
@ -191,11 +191,11 @@ NEO-GO-VM 4 >
|
||||||
To place breakpoints:
|
To place breakpoints:
|
||||||
|
|
||||||
```
|
```
|
||||||
NEO-GO-VM > break 10
|
TUTUS-VM > break 10
|
||||||
breakpoint added at instruction 10
|
breakpoint added at instruction 10
|
||||||
NEO-GO-VM > cont
|
TUTUS-VM > cont
|
||||||
at breakpoint 10 (SETITEM)
|
at breakpoint 10 (SETITEM)
|
||||||
NEO-GO-VM 10 > cont
|
TUTUS-VM 10 > cont
|
||||||
```
|
```
|
||||||
|
|
||||||
## Inspecting stack
|
## Inspecting stack
|
||||||
|
|
@ -203,7 +203,7 @@ NEO-GO-VM 10 > cont
|
||||||
Inspecting the evaluation stack:
|
Inspecting the evaluation stack:
|
||||||
|
|
||||||
```
|
```
|
||||||
NEO-GO-VM > estack
|
TUTUS-VM > estack
|
||||||
[
|
[
|
||||||
{
|
{
|
||||||
"value": [
|
"value": [
|
||||||
|
|
|
||||||
|
|
@ -1,4 +1,4 @@
|
||||||
# NeoGo smart contract examples
|
# Tutus smart contract examples
|
||||||
|
|
||||||
`examples` directory contains smart contract examples written in Go.
|
`examples` directory contains smart contract examples written in Go.
|
||||||
These examples are aimed to demonstrate the basic usage of Go programming
|
These examples are aimed to demonstrate the basic usage of Go programming
|
||||||
|
|
@ -34,26 +34,26 @@ See the table below for the detailed examples description.
|
||||||
| [storage](storage) | The contract implements API for basic operations with a contract storage. It shows how to use `storage` interop package. See the `storage` [package documentation](../pkg/interop/storage/storage.go). |
|
| [storage](storage) | The contract implements API for basic operations with a contract storage. It shows how to use `storage` interop package. See the `storage` [package documentation](../pkg/interop/storage/storage.go). |
|
||||||
| [timer](timer) | The idea of the contract is to count `tick` method invocations and destroy itself after the third invocation. It shows how to use `contract.Call` interop function to call, update (migrate) and destroy the contract. Please, refer to the `contract.Call` [function documentation](../pkg/interop/contract/contract.go) |
|
| [timer](timer) | The idea of the contract is to count `tick` method invocations and destroy itself after the third invocation. It shows how to use `contract.Call` interop function to call, update (migrate) and destroy the contract. Please, refer to the `contract.Call` [function documentation](../pkg/interop/contract/contract.go) |
|
||||||
| [token](token) | This contract implements NEP-17 token standard (like NEO and GAS tokens) with all required methods and operations. See the NEP-17 token standard [specification](https://github.com/neo-project/proposals/pull/126) for details. |
|
| [token](token) | This contract implements NEP-17 token standard (like NEO and GAS tokens) with all required methods and operations. See the NEP-17 token standard [specification](https://github.com/neo-project/proposals/pull/126) for details. |
|
||||||
| [zkp/cubic_circuit](zkp/cubic_circuit) | This example demonstrates how to create your own circuit and generate Groth-16 proof based on BLS12-381 elliptic curve points with the help of [consensys/gnark](https://pkg.go.dev/github.com/consensys/gnark). It also shows how to generate, deploy and invoke Verifier smart contract to verify proofs for the given circuit on the Neo chain with the help of [zkpbindings](https://pkg.go.dev/github.com/tutus-one/tutus-chain/pkg/smartcontract/zkpbinding) NeoGo package. The package also contains circuit tests implemented with [gnark/test](https://pkg.go.dev/github.com/consensys/gnark/test) to check the circuit validity and end-to-end proof generation/verification test implemented with [neotest](https://pkg.go.dev/github.com/tutus-one/tutus-chain/pkg/neotest) to demonstrate how to build, deploy and verify proofs via Verifier smart contract for the given circuit. |
|
| [zkp/cubic_circuit](zkp/cubic_circuit) | This example demonstrates how to create your own circuit and generate Groth-16 proof based on BLS12-381 elliptic curve points with the help of [consensys/gnark](https://pkg.go.dev/github.com/consensys/gnark). It also shows how to generate, deploy and invoke Verifier smart contract to verify proofs for the given circuit on the Neo chain with the help of [zkpbindings](https://pkg.go.dev/github.com/tutus-one/tutus-chain/pkg/smartcontract/zkpbinding) Tutus package. The package also contains circuit tests implemented with [gnark/test](https://pkg.go.dev/github.com/consensys/gnark/test) to check the circuit validity and end-to-end proof generation/verification test implemented with [neotest](https://pkg.go.dev/github.com/tutus-one/tutus-chain/pkg/neotest) to demonstrate how to build, deploy and verify proofs via Verifier smart contract for the given circuit. |
|
||||||
|
|
||||||
## Compile
|
## Compile
|
||||||
|
|
||||||
Please, refer to the neo-go
|
Please, refer to the tutus
|
||||||
[smart contract compiler documentation](../docs/compiler.md) to compile example
|
[smart contract compiler documentation](../docs/compiler.md) to compile example
|
||||||
smart contracts.
|
smart contracts.
|
||||||
|
|
||||||
## Deploy
|
## Deploy
|
||||||
|
|
||||||
You can set up neo-go private network to deploy the example contracts. Please,
|
You can set up tutus private network to deploy the example contracts. Please,
|
||||||
refer to the [consensus documentation](../docs/consensus.md) to start your own
|
refer to the [consensus documentation](../docs/consensus.md) to start your own
|
||||||
privnet with neo-go nodes.
|
privnet with tutus nodes.
|
||||||
|
|
||||||
To deploy smart contracts, refer to the
|
To deploy smart contracts, refer to the
|
||||||
[Deploying section](../docs/compiler.md#deploying) of the compiler documentation.
|
[Deploying section](../docs/compiler.md#deploying) of the compiler documentation.
|
||||||
|
|
||||||
## Where to start
|
## Where to start
|
||||||
|
|
||||||
Feel free to explore neo-go smart contract development
|
Feel free to explore tutus smart contract development
|
||||||
[workshop](https://github.com/tutus-one/tutus-chain-sc-wrkshp) to get the basic
|
[workshop](https://github.com/tutus-one/tutus-chain-sc-wrkshp) to get the basic
|
||||||
concepts of how to develop, compile, debug and deploy Neo smart contracts written
|
concepts of how to develop, compile, debug and deploy Neo smart contracts written
|
||||||
in go.
|
in go.
|
||||||
|
|
|
||||||
|
|
@ -4,7 +4,7 @@
|
||||||
proof based on BLS12-381 elliptic curve points with the help of
|
proof based on BLS12-381 elliptic curve points with the help of
|
||||||
[consensys/gnark](https://pkg.go.dev/github.com/consensys/gnark). It also shows how to generate, deploy and invoke Verifier
|
[consensys/gnark](https://pkg.go.dev/github.com/consensys/gnark). It also shows how to generate, deploy and invoke Verifier
|
||||||
smart contract to verify proofs for the given circuit on the Neo chain with the
|
smart contract to verify proofs for the given circuit on the Neo chain with the
|
||||||
help of [zkpbindings](https://pkg.go.dev/github.com/tutus-one/tutus-chain/pkg/smartcontract/zkpbinding) NeoGo package. The package also contains circuit
|
help of [zkpbindings](https://pkg.go.dev/github.com/tutus-one/tutus-chain/pkg/smartcontract/zkpbinding) Tutus package. The package also contains circuit
|
||||||
tests implemented with [gnark/test](https://pkg.go.dev/github.com/consensys/gnark/test) to check the circuit validity and
|
tests implemented with [gnark/test](https://pkg.go.dev/github.com/consensys/gnark/test) to check the circuit validity and
|
||||||
end-to-end proof generation/verification test implemented with [neotest](https://pkg.go.dev/github.com/tutus-one/tutus-chain/pkg/neotest)
|
end-to-end proof generation/verification test implemented with [neotest](https://pkg.go.dev/github.com/tutus-one/tutus-chain/pkg/neotest)
|
||||||
to demonstrate how to build, deploy and verify proofs via Verifier smart
|
to demonstrate how to build, deploy and verify proofs via Verifier smart
|
||||||
|
|
@ -58,6 +58,6 @@ Take the [`TestCubicCircuit_EndToEnd_Prod`](./main_test.go) test logic as a basi
|
||||||
while generating the circuit-specific proving and verifying keys for the production
|
while generating the circuit-specific proving and verifying keys for the production
|
||||||
usage. Currently, we don't have a BLS12-381 specific Groth-16 setup CLI utility
|
usage. Currently, we don't have a BLS12-381 specific Groth-16 setup CLI utility
|
||||||
like for [BN254 curve](https://github.com/bnb-chain/zkbnb-setup), but eventually
|
like for [BN254 curve](https://github.com/bnb-chain/zkbnb-setup), but eventually
|
||||||
it will be included into the NeoGo toolkit to make the development process easier.
|
it will be included into the Tutus toolkit to make the development process easier.
|
||||||
Don't hesitate to contact us if you're looking for a similar CLI utility for
|
Don't hesitate to contact us if you're looking for a similar CLI utility for
|
||||||
BLS12-381 curve.
|
BLS12-381 curve.
|
||||||
Loading…
Reference in New Issue