From b300a4ec4da3ec2dd8680d0f60b6d6da74467318 Mon Sep 17 00:00:00 2001 From: Max <82761650+MaxMustermann2@users.noreply.github.com> Date: Wed, 11 Jan 2023 18:35:13 +0000 Subject: [PATCH] chore(build): upgrade golang to 1.19 (#4335) * chore(build): upgrade golang to 1.19 * chore(build): run `go mod tidy` * chore(build): run `goimports -w -e ${file}` * chore(build): revert github ci changes * chore(build): pin golang version to 1.19.5 * chore(build): fix protoc version on gen files --- .travis.yml | 2 +- Dockerfile | 4 +- README.md | 30 +++++----- accounts/abi/abi_test.go | 34 ++++++----- accounts/abi/reflect.go | 22 ++++--- accounts/accounts.go | 6 +- accounts/hd.go | 2 +- accounts/url.go | 7 +-- api/proto/common.go | 2 +- api/proto/message/message.pb.go | 4 +- .../downloader/proto/downloader.pb.go | 2 +- api/service/stagedsync/stage_state.go | 2 +- common/denominations/denominations.go | 2 +- common/math/big.go | 8 +-- core/blockchain_impl.go | 1 + core/headerchain.go | 7 ++- core/state/statedb.go | 4 +- core/types.go | 1 - core/types/block.go | 3 +- core/vm/gas_table.go | 18 +++--- core/vm/instructions.go | 19 +++++-- eth/rpc/doc.go | 57 +++++++++---------- eth/rpc/handler.go | 15 +++-- go.mod | 1 + go.sum | 6 -- hmy/tracers/internal/tracers/assets.go | 12 ++-- internal/blsgen/helper.go | 5 +- internal/blsgen/kms.go | 23 +++++--- internal/blsgen/loader.go | 5 +- internal/blsgen/passphrase.go | 18 +++--- internal/cli/parse.go | 9 +-- internal/tikv/redis_helper/pubsub.go | 2 +- numeric/decimal.go | 13 +++-- p2p/stream/common/ratelimiter/ratelimiter.go | 5 +- p2p/stream/protocols/sync/message/compose.go | 2 +- p2p/stream/protocols/sync/message/msg.pb.go | 5 +- p2p/stream/types/utils.go | 3 +- rosetta/infra/Dockerfile | 2 +- scripts/travis_go_checker.sh | 2 + shard/values.go | 5 +- 40 files changed, 205 insertions(+), 165 deletions(-) diff --git a/.travis.yml b/.travis.yml index 39e564ae0..9d4982491 100644 --- a/.travis.yml +++ b/.travis.yml @@ -2,7 +2,7 @@ os: linux dist: bionic language: go go: - - 1.18 + - 1.19.5 go_import_path: github.com/harmony-one/harmony cache: directories: diff --git a/Dockerfile b/Dockerfile index e25e8d79d..706de4ea1 100644 --- a/Dockerfile +++ b/Dockerfile @@ -1,7 +1,7 @@ FROM ubuntu:18.04 ARG TARGETARCH -ARG GOLANG_VERSION="1.18" +ARG GOLANG_VERSION="1.19" SHELL ["/bin/bash", "-c"] @@ -79,7 +79,7 @@ ARG KS3=f4267bb5a2f0e65b8f5792bb6992597fac2b35ebfac9885ce0f4152c451ca31a RUN hmy keys import-private-key ${KS1} && \ hmy keys import-private-key ${KS2} && \ hmy keys import-private-key ${KS3} && \ - hmy keys generate-bls-key > keys.json + hmy keys generate-bls-key > keys.json RUN jq '.["encrypted-private-key-path"]' -r keys.json > /root/keypath && cp keys.json /root && \ echo "export BLS_KEY_PATH=$(cat /root/keypath)" >> /root/.bashrc && \ diff --git a/README.md b/README.md index 609ffd57f..0f2aa11f9 100644 --- a/README.md +++ b/README.md @@ -16,7 +16,7 @@ http://api.hmny.io/ ## Requirements -### **Go 1.18** +### **Go 1.19** ### **GMP and OpenSSL** On macOS: @@ -35,19 +35,19 @@ sudo yum install glibc-static gmp-devel gmp-static openssl-libs openssl-static g ``` ### **Docker** (for testing) -On macOS: +On macOS: ```bash brew install --cask docker open /Applications/Docker.app ``` On Linux, reference official documentation [here](https://docs.docker.com/engine/install/). -### **Bash 4+** +### **Bash 4+** For macOS, you can reference this [guide](http://tldrdevnotes.com/bash-upgrade-3-4-macos). For Linux, you can reference this [guide](https://fossbytes.com/installing-gnu-bash-4-4-linux-distros/). ## Dev Environment -**Most repos from [harmony-one](https://github.com/harmony-one) assumes the GOPATH convention. More information [here](https://github.com/golang/go/wiki/GOPATH).** +**Most repos from [harmony-one](https://github.com/harmony-one) assumes the GOPATH convention. More information [here](https://github.com/golang/go/wiki/GOPATH).** ### First Install Clone and set up all of the repos with the following set of commands: @@ -57,7 +57,7 @@ Clone and set up all of the repos with the following set of commands: mkdir -p $(go env GOPATH)/src/github.com/harmony-one cd $(go env GOPATH)/src/github.com/harmony-one ``` -> If you get 'unknown command' or something along those lines, make sure to install [golang](https://golang.org/doc/install) first. +> If you get 'unknown command' or something along those lines, make sure to install [golang](https://golang.org/doc/install) first. 2. Clone this repo & dependent repos. ```bash @@ -77,9 +77,9 @@ make ## Dev Docker Image -Included in this repo is a Dockerfile that has a full harmony development environment and -comes with emacs, vim, ag, tig and other creature comforts. Most importantly, it already has the go environment -with our C/C++ based library dependencies (`libbls` and `mcl`) set up correctly for you. +Included in this repo is a Dockerfile that has a full harmony development environment and +comes with emacs, vim, ag, tig and other creature comforts. Most importantly, it already has the go environment +with our C/C++ based library dependencies (`libbls` and `mcl`) set up correctly for you. You can build the docker image for yourself with the following commands: ```bash @@ -110,7 +110,7 @@ Learn more about docker [here](https://docker-curriculum.com/). ## Build -The `make` command should automatically build the Harmony binary & all dependent libs. +The `make` command should automatically build the Harmony binary & all dependent libs. However, if you wish to bypass the Makefile, first export the build flags: ```bash @@ -150,7 +150,7 @@ make debug-kill To keep things consistent, we have a docker image to run all tests. **These are the same tests ran on the pull request checks**. -Note that all testing docker container binds a couple of ports to the host machine for your convince. The ports are: +Note that all testing docker container binds a couple of ports to the host machine for your convince. The ports are: * `9500` - Shard 0 RPC for a validator * `9501` - Shard 1 RPC for a validator * `9599` - Shard 0 RPC for an explorer @@ -159,13 +159,13 @@ Note that all testing docker container binds a couple of ports to the host machi * `9798` - Shard 1 Rosetta (for an explorer) * `9899` - Shard 0 WS for an explorer * `9898` - Shard 1 WS for an explorer -> This allows you to use curl, hmy CLI, postman, rosetta-cli, etc... on your host machine to play with or probe the localnet that was used for the test. +> This allows you to use curl, hmy CLI, postman, rosetta-cli, etc... on your host machine to play with or probe the localnet that was used for the test. ### Go tests To run this test, do: ```bash make test-go -``` +``` This test runs the go tests along with go lint, go fmt, go imports, go mod, and go generate checks. ### RPC tests @@ -174,7 +174,7 @@ To run this test, do: make test-rpc ``` This test starts a localnet (within the Docker container), **ensures it reaches a consensus**, and runs a series of tests to ensure correct RPC behavior. -This test also acts as a preliminary integration test (more through tests are done on the testnets). +This test also acts as a preliminary integration test (more through tests are done on the testnets). > The tests ran by this command can be found [here](https://github.com/harmony-one/harmony-test/tree/master/localnet). If you wish to debug further with the localnet after the tests are done, open a new shell and run: @@ -184,8 +184,8 @@ make test-rpc-attach > This will open a shell in the docker container that is running the Node API tests. > > Note that the docker container has the [Harmony CLI](https://docs.harmony.one/home/wallets/harmony-cli) on path, -> therefore you can use that to debug if needed. For example, one could do `hmy blockchain latest-headers` to check -> the current block height of localnet. Reference the documentation for the CLI [here](https://docs.harmony.one/home/wallets/harmony-cli) +> therefore you can use that to debug if needed. For example, one could do `hmy blockchain latest-headers` to check +> the current block height of localnet. Reference the documentation for the CLI [here](https://docs.harmony.one/home/wallets/harmony-cli) > for more details & commands. ### Rosetta tests diff --git a/accounts/abi/abi_test.go b/accounts/abi/abi_test.go index 53ad95414..3e1db87c2 100644 --- a/accounts/abi/abi_test.go +++ b/accounts/abi/abi_test.go @@ -162,8 +162,9 @@ func TestInvalidABI(t *testing.T) { // TestConstructor tests a constructor function. // The test is based on the following contract: -// contract TestConstructor { -// constructor(uint256 a, uint256 b) public{} +// +// contract TestConstructor { +// constructor(uint256 a, uint256 b) public{} // } func TestConstructor(t *testing.T) { json := `[{ "inputs": [{"internalType": "uint256","name": "a","type": "uint256" },{ "internalType": "uint256","name": "b","type": "uint256"}],"stateMutability": "nonpayable","type": "constructor"}]` @@ -707,16 +708,19 @@ func TestBareEvents(t *testing.T) { } // TestUnpackEvent is based on this contract: -// contract T { -// event received(address sender, uint amount, bytes memo); -// event receivedAddr(address sender); -// function receive(bytes memo) external payable { -// received(msg.sender, msg.value, memo); -// receivedAddr(msg.sender); -// } -// } +// +// contract T { +// event received(address sender, uint amount, bytes memo); +// event receivedAddr(address sender); +// function receive(bytes memo) external payable { +// received(msg.sender, msg.value, memo); +// receivedAddr(msg.sender); +// } +// } +// // When receive("X") is called with sender 0x00... and value 1, it produces this tx receipt: -// receipt{status=1 cgas=23949 bloom=00000000004000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000040200000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000080000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 logs=[log: b6818c8064f645cd82d99b59a1a267d6d61117ef [75fd880d39c1daf53b6547ab6cb59451fc6452d27caa90e5b6649dd8293b9eed] 000000000000000000000000376c47978271565f56deb45495afa69e59c16ab200000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000158 9ae378b6d4409eada347a5dc0c180f186cb62dc68fcc0f043425eb917335aa28 0 95d429d309bb9d753954195fe2d69bd140b4ae731b9b5b605c34323de162cf00 0]} +// +// receipt{status=1 cgas=23949 bloom=00000000004000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000040200000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000080000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 logs=[log: b6818c8064f645cd82d99b59a1a267d6d61117ef [75fd880d39c1daf53b6547ab6cb59451fc6452d27caa90e5b6649dd8293b9eed] 000000000000000000000000376c47978271565f56deb45495afa69e59c16ab200000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000158 9ae378b6d4409eada347a5dc0c180f186cb62dc68fcc0f043425eb917335aa28 0 95d429d309bb9d753954195fe2d69bd140b4ae731b9b5b605c34323de162cf00 0]} func TestUnpackEvent(t *testing.T) { const abiJSON = `[{"constant":false,"inputs":[{"name":"memo","type":"bytes"}],"name":"receive","outputs":[],"payable":true,"stateMutability":"payable","type":"function"},{"anonymous":false,"inputs":[{"indexed":false,"name":"sender","type":"address"},{"indexed":false,"name":"amount","type":"uint256"},{"indexed":false,"name":"memo","type":"bytes"}],"name":"received","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"name":"sender","type":"address"}],"name":"receivedAddr","type":"event"}]` abi, err := JSON(strings.NewReader(abiJSON)) @@ -1063,8 +1067,9 @@ func TestDoubleDuplicateMethodNames(t *testing.T) { // TestDoubleDuplicateEventNames checks that if send0 already exists, there won't be a name // conflict and that the second send event will be renamed send1. // The test runs the abi of the following contract. -// contract DuplicateEvent { -// event send(uint256 a); +// +// contract DuplicateEvent { +// event send(uint256 a); // event send0(); // event send(); // } @@ -1091,7 +1096,8 @@ func TestDoubleDuplicateEventNames(t *testing.T) { // TestUnnamedEventParam checks that an event with unnamed parameters is // correctly handled. // The test runs the abi of the following contract. -// contract TestEvent { +// +// contract TestEvent { // event send(uint256, uint256); // } func TestUnnamedEventParam(t *testing.T) { diff --git a/accounts/abi/reflect.go b/accounts/abi/reflect.go index 11248e073..0f4948ac8 100644 --- a/accounts/abi/reflect.go +++ b/accounts/abi/reflect.go @@ -28,11 +28,13 @@ import ( // given type // e.g. turn // var fields []reflect.StructField -// fields = append(fields, reflect.StructField{ -// Name: "X", -// Type: reflect.TypeOf(new(big.Int)), -// Tag: reflect.StructTag("json:\"" + "x" + "\""), -// } +// +// fields = append(fields, reflect.StructField{ +// Name: "X", +// Type: reflect.TypeOf(new(big.Int)), +// Tag: reflect.StructTag("json:\"" + "x" + "\""), +// } +// // into // type TupleT struct { X *big.Int } func ConvertType(in interface{}, proto interface{}) interface{} { @@ -178,10 +180,14 @@ func setStruct(dst, src reflect.Value) error { // mapArgNamesToStructFields maps a slice of argument names to struct fields. // first round: for each Exportable field that contains a `abi:""` tag -// and this field name exists in the given argument name list, pair them together. +// +// and this field name exists in the given argument name list, pair them together. +// // second round: for each argument name that has not been already linked, -// find what variable is expected to be mapped into, if it exists and has not been -// used, pair them. +// +// find what variable is expected to be mapped into, if it exists and has not been +// used, pair them. +// // Note this function assumes the given value is a struct value. func mapArgNamesToStructFields(argNames []string, value reflect.Value) (map[string]string, error) { typ := value.Type() diff --git a/accounts/accounts.go b/accounts/accounts.go index 28bd58ac2..394ece9e0 100644 --- a/accounts/accounts.go +++ b/accounts/accounts.go @@ -176,7 +176,8 @@ type Backend interface { // safely used to calculate a signature from. // // The hash is calulcated as -// keccak256("\x19Ethereum Signed Message:\n"${message length}${message}). +// +// keccak256("\x19Ethereum Signed Message:\n"${message length}${message}). // // This gives context to the signed message and prevents signing of transactions. func TextHash(data []byte) []byte { @@ -188,7 +189,8 @@ func TextHash(data []byte) []byte { // safely used to calculate a signature from. // // The hash is calulcated as -// keccak256("\x19Ethereum Signed Message:\n"${message length}${message}). +// +// keccak256("\x19Ethereum Signed Message:\n"${message length}${message}). // // This gives context to the signed message and prevents signing of transactions. func TextAndHash(data []byte) ([]byte, string) { diff --git a/accounts/hd.go b/accounts/hd.go index 75c476110..7727d1a85 100644 --- a/accounts/hd.go +++ b/accounts/hd.go @@ -46,7 +46,7 @@ var LegacyLedgerBaseDerivationPath = DerivationPath{0x80000000 + 44, 0x80000000 // The BIP-32 spec https://github.com/bitcoin/bips/blob/master/bip-0032.mediawiki // defines derivation paths to be of the form: // -// m / purpose' / coin_type' / account' / change / address_index +// m / purpose' / coin_type' / account' / change / address_index // // The BIP-44 spec https://github.com/bitcoin/bips/blob/master/bip-0044.mediawiki // defines that the `purpose` be 44' (or 0x8000002C) for crypto currencies, and diff --git a/accounts/url.go b/accounts/url.go index a5add1021..81ab7ba08 100644 --- a/accounts/url.go +++ b/accounts/url.go @@ -92,10 +92,9 @@ func (u *URL) UnmarshalJSON(input []byte) error { // Cmp compares x and y and returns: // -// -1 if x < y -// 0 if x == y -// +1 if x > y -// +// -1 if x < y +// 0 if x == y +// +1 if x > y func (u URL) Cmp(url URL) int { if u.Scheme == url.Scheme { return strings.Compare(u.Path, url.Path) diff --git a/api/proto/common.go b/api/proto/common.go index 6c60466e2..5c5a67a8a 100644 --- a/api/proto/common.go +++ b/api/proto/common.go @@ -25,7 +25,7 @@ n - 2 bytes - actual message payload // MessageCategory defines the message category enum type MessageCategory byte -//Consensus and other message categories +// Consensus and other message categories const ( Consensus MessageCategory = iota Node diff --git a/api/proto/message/message.pb.go b/api/proto/message/message.pb.go index dad905606..ecd569b00 100644 --- a/api/proto/message/message.pb.go +++ b/api/proto/message/message.pb.go @@ -1,6 +1,6 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: -// protoc-gen-go v1.26.0 +// protoc-gen-go v1.28.1 // protoc v3.15.8 // source: message.proto @@ -219,6 +219,7 @@ type Message struct { Type MessageType `protobuf:"varint,2,opt,name=type,proto3,enum=message.MessageType" json:"type,omitempty"` Signature []byte `protobuf:"bytes,3,opt,name=signature,proto3" json:"signature,omitempty"` // Types that are assignable to Request: + // // *Message_Staking // *Message_Consensus // *Message_Drand @@ -372,6 +373,7 @@ type Response struct { ServiceType ServiceType `protobuf:"varint,1,opt,name=service_type,json=serviceType,proto3,enum=message.ServiceType" json:"service_type,omitempty"` Type MessageType `protobuf:"varint,2,opt,name=type,proto3,enum=message.MessageType" json:"type,omitempty"` // Types that are assignable to Response: + // // *Response_LotteryResponse Response isResponse_Response `protobuf_oneof:"response"` } diff --git a/api/service/legacysync/downloader/proto/downloader.pb.go b/api/service/legacysync/downloader/proto/downloader.pb.go index d93550bf0..9f453ee98 100644 --- a/api/service/legacysync/downloader/proto/downloader.pb.go +++ b/api/service/legacysync/downloader/proto/downloader.pb.go @@ -1,6 +1,6 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: -// protoc-gen-go v1.26.0 +// protoc-gen-go v1.28.1 // protoc v3.15.8 // source: downloader.proto diff --git a/api/service/stagedsync/stage_state.go b/api/service/stagedsync/stage_state.go index 70e64516b..7086acec1 100644 --- a/api/service/stagedsync/stage_state.go +++ b/api/service/stagedsync/stage_state.go @@ -241,7 +241,7 @@ func (stg *StageStates) Exec(firstCycle bool, invalidBlockRevert bool, s *StageS return nil } -//verifyBlockSignatures verifies block signatures +// verifyBlockSignatures verifies block signatures func (stg *StageStates) verifyBlockSignatures(bc core.BlockChain, block *types.Block, verifyCurrentSig bool, verifySeal bool, verifyAllSig bool) (err error) { if verifyCurrentSig { sig, bitmap, err := chain.ParseCommitSigAndBitmap(block.GetCurrentCommitSig()) diff --git a/common/denominations/denominations.go b/common/denominations/denominations.go index a1f6696ca..d4ec0bdbb 100644 --- a/common/denominations/denominations.go +++ b/common/denominations/denominations.go @@ -1,6 +1,6 @@ package denominations -//ONE Units +// ONE Units const ( Atto = 1 Nano = 1e9 diff --git a/common/math/big.go b/common/math/big.go index 26f6dab33..d5aad91cc 100644 --- a/common/math/big.go +++ b/common/math/big.go @@ -227,10 +227,10 @@ func U256Bytes(n *big.Int) []byte { // S256 interprets x as a two's complement number. // x must not exceed 256 bits (the result is undefined if it does) and is not modified. // -// S256(0) = 0 -// S256(1) = 1 -// S256(2**255) = -2**255 -// S256(2**256-1) = -1 +// S256(0) = 0 +// S256(1) = 1 +// S256(2**255) = -2**255 +// S256(2**256-1) = -1 func S256(x *big.Int) *big.Int { if x.Cmp(tt255) < 0 { return x diff --git a/core/blockchain_impl.go b/core/blockchain_impl.go index 792e26352..9fa618c44 100644 --- a/core/blockchain_impl.go +++ b/core/blockchain_impl.go @@ -3448,6 +3448,7 @@ var ( // 3. Corrupted db data. (leveldb.errors.ErrCorrupted) // 4. OS error when open file (too many open files, ...) // 5. OS error when write file (read-only, not enough disk space, ...) +// // Among all the above leveldb errors, only `too many open files` error is known to be recoverable, // thus the unrecoverable errors refers to error that is // 1. The error is from the lower storage level (from module leveldb) diff --git a/core/headerchain.go b/core/headerchain.go index 4bde799ca..a902d5a12 100644 --- a/core/headerchain.go +++ b/core/headerchain.go @@ -71,9 +71,10 @@ type HeaderChain struct { } // NewHeaderChain creates a new HeaderChain structure. -// getValidator should return the parent's validator -// procInterrupt points to the parent's interrupt semaphore -// wg points to the parent's shutdown wait group +// +// getValidator should return the parent's validator +// procInterrupt points to the parent's interrupt semaphore +// wg points to the parent's shutdown wait group func NewHeaderChain(chainDb ethdb.Database, config *params.ChainConfig, engine consensus_engine.Engine, procInterrupt func() bool) (*HeaderChain, error) { headerCache, _ := lru.New(headerCacheLimit) tdCache, _ := lru.New(tdCacheLimit) diff --git a/core/state/statedb.go b/core/state/statedb.go index 69d74cf59..d571d3372 100644 --- a/core/state/statedb.go +++ b/core/state/statedb.go @@ -551,8 +551,8 @@ func (db *DB) createObject(addr common.Address) (newobj, prev *Object) { // CreateAccount is called during the EVM CREATE operation. The situation might arise that // a contract does the following: // -// 1. sends funds to sha(account ++ (nonce + 1)) -// 2. tx_create(sha(account ++ nonce)) (note that this gets the address of 1) +// 1. sends funds to sha(account ++ (nonce + 1)) +// 2. tx_create(sha(account ++ nonce)) (note that this gets the address of 1) // // Carrying over the balance ensures that Ether doesn't disappear. func (db *DB) CreateAccount(addr common.Address) { diff --git a/core/types.go b/core/types.go index 799fba725..b613a1f37 100644 --- a/core/types.go +++ b/core/types.go @@ -27,7 +27,6 @@ import ( // Validator is an interface which defines the standard for block validation. It // is only responsible for validating block contents, as the header validation is // done by the specific consensus engines. -// type Validator interface { // ValidateBody validates the given block's content. ValidateBody(block *types.Block) error diff --git a/core/types/block.go b/core/types/block.go index b4debaa72..67ee425cc 100644 --- a/core/types/block.go +++ b/core/types/block.go @@ -139,7 +139,8 @@ type Body struct { // matches the version of the given field. // // TODO ek – this is a stopgap, and works only while there is a N:1 mapping -// between header and body versions. Replace usage with factory. +// +// between header and body versions. Replace usage with factory. func NewBodyForMatchingHeader(h *block.Header) (*Body, error) { var bi BodyInterface switch h.Header.(type) { diff --git a/core/vm/gas_table.go b/core/vm/gas_table.go index c75e064ef..892feaa78 100644 --- a/core/vm/gas_table.go +++ b/core/vm/gas_table.go @@ -162,19 +162,19 @@ func gasSStore(evm *EVM, contract *Contract, stack *Stack, mem *Memory, memorySi return params.NetSstoreDirtyGas, nil } -// 0. If *gasleft* is less than or equal to 2300, fail the current call. -// 1. If current value equals new value (this is a no-op), SSTORE_NOOP_GAS gas is deducted. -// 2. If current value does not equal new value: -// 2.1. If original value equals current value (this storage slot has not been changed by the current execution context): +// 0. If *gasleft* is less than or equal to 2300, fail the current call. +// 1. If current value equals new value (this is a no-op), SSTORE_NOOP_GAS gas is deducted. +// 2. If current value does not equal new value: +// 2.1. If original value equals current value (this storage slot has not been changed by the current execution context): // 2.1.1. If original value is 0, SSTORE_INIT_GAS gas is deducted. // 2.1.2. Otherwise, SSTORE_CLEAN_GAS gas is deducted. If new value is 0, add SSTORE_CLEAR_REFUND to refund counter. -// 2.2. If original value does not equal current value (this storage slot is dirty), SSTORE_DIRTY_GAS gas is deducted. Apply both of the following clauses: +// 2.2. If original value does not equal current value (this storage slot is dirty), SSTORE_DIRTY_GAS gas is deducted. Apply both of the following clauses: // 2.2.1. If original value is not 0: -// 2.2.1.1. If current value is 0 (also means that new value is not 0), subtract SSTORE_CLEAR_REFUND gas from refund counter. We can prove that refund counter will never go below 0. -// 2.2.1.2. If new value is 0 (also means that current value is not 0), add SSTORE_CLEAR_REFUND gas to refund counter. +// 2.2.1.1. If current value is 0 (also means that new value is not 0), subtract SSTORE_CLEAR_REFUND gas from refund counter. We can prove that refund counter will never go below 0. +// 2.2.1.2. If new value is 0 (also means that current value is not 0), add SSTORE_CLEAR_REFUND gas to refund counter. // 2.2.2. If original value equals new value (this storage slot is reset): -// 2.2.2.1. If original value is 0, add SSTORE_INIT_REFUND to refund counter. -// 2.2.2.2. Otherwise, add SSTORE_CLEAN_REFUND gas to refund counter. +// 2.2.2.1. If original value is 0, add SSTORE_INIT_REFUND to refund counter. +// 2.2.2.2. Otherwise, add SSTORE_CLEAN_REFUND gas to refund counter. func gasSStoreEIP2200(evm *EVM, contract *Contract, stack *Stack, mem *Memory, memorySize uint64) (uint64, error) { // If we fail the minimum gas availability invariant, fail (0) if contract.Gas <= params.SstoreSentryGasEIP2200 { diff --git a/core/vm/instructions.go b/core/vm/instructions.go index 44f1c2b7e..2c1c3154a 100644 --- a/core/vm/instructions.go +++ b/core/vm/instructions.go @@ -519,16 +519,21 @@ func opExtCodeCopy(pc *uint64, interpreter *EVMInterpreter, contract *Contract, // opExtCodeHash returns the code hash of a specified account. // There are several cases when the function is called, while we can relay everything // to `state.GetCodeHash` function to ensure the correctness. -// (1) Caller tries to get the code hash of a normal contract account, state +// +// (1) Caller tries to get the code hash of a normal contract account, state +// // should return the relative code hash and set it as the result. // -// (2) Caller tries to get the code hash of a non-existent account, state should +// (2) Caller tries to get the code hash of a non-existent account, state should +// // return common.Hash{} and zero will be set as the result. // -// (3) Caller tries to get the code hash for an account without contract code, +// (3) Caller tries to get the code hash for an account without contract code, +// // state should return emptyCodeHash(0xc5d246...) as the result. // -// (4) Caller tries to get the code hash of a precompiled account, the result +// (4) Caller tries to get the code hash of a precompiled account, the result +// // should be zero or emptyCodeHash. // // It is worth noting that in order to avoid unnecessary create and clean, @@ -537,10 +542,12 @@ func opExtCodeCopy(pc *uint64, interpreter *EVMInterpreter, contract *Contract, // If the precompile account is not transferred any amount on a private or // customized chain, the return value will be zero. // -// (5) Caller tries to get the code hash for an account which is marked as suicided +// (5) Caller tries to get the code hash for an account which is marked as suicided +// // in the current transaction, the code hash of this account should be returned. // -// (6) Caller tries to get the code hash for an account which is marked as deleted, +// (6) Caller tries to get the code hash for an account which is marked as deleted, +// // this account should be regarded as a non-existent account and zero should be returned. func opExtCodeHash(pc *uint64, interpreter *EVMInterpreter, contract *Contract, memory *Memory, stack *Stack) ([]byte, error) { slot := stack.peek() diff --git a/eth/rpc/doc.go b/eth/rpc/doc.go index e0a632467..7c87793dc 100644 --- a/eth/rpc/doc.go +++ b/eth/rpc/doc.go @@ -15,7 +15,6 @@ // along with the go-ethereum library. If not, see . /* - Package rpc implements bi-directional JSON-RPC 2.0 on multiple transports. It provides access to the exported methods of an object across a network or other I/O @@ -23,16 +22,16 @@ connection. After creating a server or client instance, objects can be registere them visible as 'services'. Exported methods that follow specific conventions can be called remotely. It also has support for the publish/subscribe pattern. -RPC Methods +# RPC Methods Methods that satisfy the following criteria are made available for remote access: - - method must be exported - - method returns 0, 1 (response or error) or 2 (response and error) values + - method must be exported + - method returns 0, 1 (response or error) or 2 (response and error) values An example method: - func (s *CalcService) Add(a, b int) (int, error) + func (s *CalcService) Add(a, b int) (int, error) When the returned error isn't nil the returned integer is ignored and the error is sent back to the client. Otherwise the returned integer is sent back to the client. @@ -41,7 +40,7 @@ Optional arguments are supported by accepting pointer values as arguments. E.g. to do the addition in an optional finite field we can accept a mod argument as pointer value. - func (s *CalcService) Add(a, b int, mod *int) (int, error) + func (s *CalcService) Add(a, b int, mod *int) (int, error) This RPC method can be called with 2 integers and a null value as third argument. In that case the mod argument will be nil. Or it can be called with 3 integers, in that case mod @@ -56,40 +55,40 @@ to the client out of order. An example server which uses the JSON codec: - type CalculatorService struct {} + type CalculatorService struct {} - func (s *CalculatorService) Add(a, b int) int { - return a + b - } + func (s *CalculatorService) Add(a, b int) int { + return a + b + } - func (s *CalculatorService) Div(a, b int) (int, error) { - if b == 0 { - return 0, errors.New("divide by zero") - } - return a/b, nil - } + func (s *CalculatorService) Div(a, b int) (int, error) { + if b == 0 { + return 0, errors.New("divide by zero") + } + return a/b, nil + } - calculator := new(CalculatorService) - server := NewServer() - server.RegisterName("calculator", calculator) - l, _ := net.ListenUnix("unix", &net.UnixAddr{Net: "unix", Name: "/tmp/calculator.sock"}) - server.ServeListener(l) + calculator := new(CalculatorService) + server := NewServer() + server.RegisterName("calculator", calculator) + l, _ := net.ListenUnix("unix", &net.UnixAddr{Net: "unix", Name: "/tmp/calculator.sock"}) + server.ServeListener(l) -Subscriptions +# Subscriptions The package also supports the publish subscribe pattern through the use of subscriptions. A method that is considered eligible for notifications must satisfy the following criteria: - - method must be exported - - first method argument type must be context.Context - - method must have return types (rpc.Subscription, error) + - method must be exported + - first method argument type must be context.Context + - method must have return types (rpc.Subscription, error) An example method: - func (s *BlockChainService) NewBlocks(ctx context.Context) (rpc.Subscription, error) { - ... - } + func (s *BlockChainService) NewBlocks(ctx context.Context) (rpc.Subscription, error) { + ... + } When the service containing the subscription method is registered to the server, for example under the "blockchain" namespace, a subscription is created by calling the @@ -101,7 +100,7 @@ the client and server. The server will close the connection for any write error. For more information about subscriptions, see https://github.com/ethereum/go-ethereum/wiki/RPC-PUB-SUB. -Reverse Calls +# Reverse Calls In any method handler, an instance of rpc.Client can be accessed through the ClientFromContext method. Using this client instance, server-to-client method calls can be diff --git a/eth/rpc/handler.go b/eth/rpc/handler.go index a04e56556..1f53d7f7a 100644 --- a/eth/rpc/handler.go +++ b/eth/rpc/handler.go @@ -34,21 +34,20 @@ import ( // // The entry points for incoming messages are: // -// h.handleMsg(message) -// h.handleBatch(message) +// h.handleMsg(message) +// h.handleBatch(message) // // Outgoing calls use the requestOp struct. Register the request before sending it // on the connection: // -// op := &requestOp{ids: ...} -// h.addRequestOp(op) +// op := &requestOp{ids: ...} +// h.addRequestOp(op) // // Now send the request, then wait for the reply to be delivered through handleMsg: // -// if err := op.wait(...); err != nil { -// h.removeRequestOp(op) // timeout, etc. -// } -// +// if err := op.wait(...); err != nil { +// h.removeRequestOp(op) // timeout, etc. +// } type handler struct { reg *serviceRegistry unsubscribeCb *callback diff --git a/go.mod b/go.mod index d8d7aa20a..d45f63e26 100644 --- a/go.mod +++ b/go.mod @@ -83,6 +83,7 @@ require ( github.com/beorn7/perks v1.0.1 // indirect github.com/bits-and-blooms/bitset v1.2.2 // indirect github.com/bombsimon/wsl/v2 v2.0.0 // indirect + github.com/btcsuite/btcd v0.21.0-beta // indirect github.com/cespare/xxhash v1.1.0 // indirect github.com/cespare/xxhash/v2 v2.2.0 // indirect github.com/containerd/cgroups v1.0.4 // indirect diff --git a/go.sum b/go.sum index 5c135cb42..17632fa25 100644 --- a/go.sum +++ b/go.sum @@ -95,14 +95,8 @@ github.com/aristanetworks/goarista v0.0.0-20170210015632-ea17b1a17847/go.mod h1: github.com/aristanetworks/goarista v0.0.0-20190607111240-52c2a7864a08 h1:UxoB3EYChE92EDNqRCS5vuE2ta4L/oKpeFaCK73KGvI= github.com/aristanetworks/goarista v0.0.0-20190607111240-52c2a7864a08/go.mod h1:D/tb0zPVXnP7fmsLZjtdUhSsumbK/ij54UXjjVgMGxQ= github.com/armon/consul-api v0.0.0-20180202201655-eb2c6b5be1b6/go.mod h1:grANhF5doyWs3UAsr3K4I6qtAmlQcZDesFNEHPZAzj8= -github.com/armon/go-metrics v0.0.0-20180917152333-f0300d1749da/go.mod h1:Q73ZrmVTwzkszR9V5SSuryQ31EELlFMUz1kKyl939pY= -github.com/armon/go-radix v0.0.0-20180808171621-7fddfc383310/go.mod h1:ufUuZ+zHj4x4TnLV4JWEpy2hxWSpsRywHrMgIH9cCH8= -github.com/aryann/difflib v0.0.0-20170710044230-e206f873d14a/go.mod h1:DAHtR1m6lCRdSC2Tm3DSWRPvIPr6xNKyeHdqDQSQT+A= -github.com/aws/aws-lambda-go v1.13.3/go.mod h1:4UKl9IzQMoD+QF79YdCuzCwp8VbmG4VAQwij/eHl5CU= -github.com/aws/aws-sdk-go v1.27.0/go.mod h1:KmX6BPdI08NWTb3/sm4ZGu5ShLoqVDhKgpiN924inxo= github.com/aws/aws-sdk-go v1.33.0 h1:Bq5Y6VTLbfnJp1IV8EL/qUU5qO1DYHda/zis/sqevkY= github.com/aws/aws-sdk-go v1.33.0/go.mod h1:5zCpMtNQVjRREroY7sYe8lOMRSxkhG6MZveU8YkpAk0= -github.com/aws/aws-sdk-go-v2 v0.18.0/go.mod h1:JWVYvqSMppoMJC0x5wdwiImzgXTI9FuZwxzkQq9wy+g= github.com/beevik/ntp v0.3.0 h1:xzVrPrE4ziasFXgBVBZJDP0Wg/KpMwk2KHJ4Ba8GrDw= github.com/beevik/ntp v0.3.0/go.mod h1:hIHWr+l3+/clUnF44zdK+CWW7fO8dR5cIylAQ76NRpg= github.com/benbjohnson/clock v1.1.0/go.mod h1:J11/hYXuz8f4ySSvYwY0FKfm+ezbsZBKZxNJlLklBHA= diff --git a/hmy/tracers/internal/tracers/assets.go b/hmy/tracers/internal/tracers/assets.go index 7f219207f..a285c53e3 100644 --- a/hmy/tracers/internal/tracers/assets.go +++ b/hmy/tracers/internal/tracers/assets.go @@ -345,11 +345,13 @@ var _bindata = map[string]func() (*asset, error){ // directory embedded in the file by go-bindata. // For example if you run go-bindata on data/... and data contains the // following hierarchy: -// data/ -// foo.txt -// img/ -// a.png -// b.png +// +// data/ +// foo.txt +// img/ +// a.png +// b.png +// // then AssetDir("data") would return []string{"foo.txt", "img"} // AssetDir("data/img") would return []string{"a.png", "b.png"} // AssetDir("foo.txt") and AssetDir("notexist") would return an error diff --git a/internal/blsgen/helper.go b/internal/blsgen/helper.go index 95ea34289..a1b178a78 100644 --- a/internal/blsgen/helper.go +++ b/internal/blsgen/helper.go @@ -10,8 +10,9 @@ import ( ) // loadHelper defines the helper interface to load bls keys. Implemented by -// multiKeyLoader - load key files with a slice of target key files -// blsDirLoader - load key files from a directory +// +// multiKeyLoader - load key files with a slice of target key files +// blsDirLoader - load key files from a directory type loadHelper interface { loadKeys() (multibls.PrivateKeys, error) } diff --git a/internal/blsgen/kms.go b/internal/blsgen/kms.go index fc339c01b..8318c818b 100644 --- a/internal/blsgen/kms.go +++ b/internal/blsgen/kms.go @@ -16,10 +16,11 @@ import ( ) // AwsCfgSrcType is the type of src to load aws config. Four options available: -// AwsCfgSrcNil - Disable kms decryption -// AwsCfgSrcFile - Provide the aws config through a file (json). -// AwsCfgSrcPrompt - Provide the aws config though prompt. -// AwsCfgSrcShared - Use the shard aws config (env -> default .aws directory) +// +// AwsCfgSrcNil - Disable kms decryption +// AwsCfgSrcFile - Provide the aws config through a file (json). +// AwsCfgSrcPrompt - Provide the aws config though prompt. +// AwsCfgSrcShared - Use the shard aws config (env -> default .aws directory) type AwsCfgSrcType uint8 const ( @@ -144,11 +145,14 @@ func (cfg AwsConfig) toAws() *aws.Config { } // awsConfigProvider provides the aws config. Implemented by -// sharedACProvider - provide the nil to use shared AWS configuration -// fileACProvider - provide the aws config with a json file -// promptACProvider - provide the config field from prompt with time out +// +// sharedACProvider - provide the nil to use shared AWS configuration +// fileACProvider - provide the aws config with a json file +// promptACProvider - provide the config field from prompt with time out +// // TODO: load aws session set up in a more official way. E.g. session.Opt.SharedConfigFiles, -// profile, env, e.t.c. +// +// profile, env, e.t.c. type awsConfigProvider interface { getAwsConfig() (*AwsConfig, error) } @@ -187,7 +191,8 @@ func (provider *fileACProvider) getAwsConfig() (*AwsConfig, error) { // promptACProvider provide a user interactive console for AWS config. // Four fields are asked: -// 1. AccessKey 2. SecretKey 3. Region +// 1. AccessKey 2. SecretKey 3. Region +// // Each field is asked with a timeout mechanism. type promptACProvider struct { timeout time.Duration diff --git a/internal/blsgen/loader.go b/internal/blsgen/loader.go index db13a9bc8..4a3b1dc6a 100644 --- a/internal/blsgen/loader.go +++ b/internal/blsgen/loader.go @@ -78,8 +78,9 @@ func (cfg *Config) getKmsProviderConfig() kmsDecrypterConfig { // keyDecrypter is the interface to decrypt the bls key file. Currently, two // implementations are supported: -// passDecrypter - decrypt with passphrase for file name with extension .key -// kmsDecrypter - decrypt with aws kms service for file name with extension .bls +// +// passDecrypter - decrypt with passphrase for file name with extension .key +// kmsDecrypter - decrypt with aws kms service for file name with extension .bls type keyDecrypter interface { extension() string decryptFile(keyFile string) (*bls_core.SecretKey, error) diff --git a/internal/blsgen/passphrase.go b/internal/blsgen/passphrase.go index 66d2f0a23..e0109fc7d 100644 --- a/internal/blsgen/passphrase.go +++ b/internal/blsgen/passphrase.go @@ -13,10 +13,11 @@ import ( // PassSrcType is the type of passphrase provider source. // Four options available: -// PassSrcNil - Do not use passphrase decryption -// PassSrcFile - Read the passphrase from files -// PassSrcPrompt - Read the passphrase from prompt -// PassSrcAuto - First try to unlock with passphrase from file, then read passphrase from prompt +// +// PassSrcNil - Do not use passphrase decryption +// PassSrcFile - Read the passphrase from files +// PassSrcPrompt - Read the passphrase from prompt +// PassSrcAuto - First try to unlock with passphrase from file, then read passphrase from prompt type PassSrcType uint8 const ( @@ -121,10 +122,11 @@ func (pd *passDecrypter) getFilePassProvider() passProvider { // passProvider is the interface to provide the passphrase of a bls keys. // Implemented by -// promptPassProvider - provide passphrase through user-interactive prompt -// staticPassProvider - provide passphrase from a static .pass file -// dynamicPassProvider - provide the passphrase based on the given key file keyFile -// dirPassProvider - provide passphrase from .pass files in a directory +// +// promptPassProvider - provide passphrase through user-interactive prompt +// staticPassProvider - provide passphrase from a static .pass file +// dynamicPassProvider - provide the passphrase based on the given key file keyFile +// dirPassProvider - provide passphrase from .pass files in a directory type passProvider interface { getPassphrase(keyFile string) (string, error) } diff --git a/internal/cli/parse.go b/internal/cli/parse.go index 2364267a6..bc9565a3e 100644 --- a/internal/cli/parse.go +++ b/internal/cli/parse.go @@ -13,10 +13,11 @@ var ( // SetParseErrorHandle set the error handle function used for cli parsing flags. // An error handle example: -// cli.SetParseErrorHandle(func(err error) { -// fmt.Println(err) -// os.Exit(3) -// }) +// +// cli.SetParseErrorHandle(func(err error) { +// fmt.Println(err) +// os.Exit(3) +// }) func SetParseErrorHandle(f errorHandle) { parseErrorHandleFunc = f } diff --git a/internal/tikv/redis_helper/pubsub.go b/internal/tikv/redis_helper/pubsub.go index f334f8d5b..f1b7f934b 100644 --- a/internal/tikv/redis_helper/pubsub.go +++ b/internal/tikv/redis_helper/pubsub.go @@ -109,7 +109,7 @@ func PublishNewFilterLogEvent(shardID uint32, namespace, id string, crit ethereu Publish(context.Background(), fmt.Sprintf("%s_new_filter_log_%d", namespace, shardID), msg).Err() } -//TxPoolUpdate tx pool update event +// TxPoolUpdate tx pool update event type TxPoolUpdate struct { typ string Local bool diff --git a/numeric/decimal.go b/numeric/decimal.go index 7ffdefa60..e4236daa4 100644 --- a/numeric/decimal.go +++ b/numeric/decimal.go @@ -119,12 +119,15 @@ func NewDecFromIntWithPrec(i *big.Int, prec int64) Dec { // NewDecFromStr creates a decimal from an input decimal string. // valid must come in the form: -// (-) whole integers (.) decimal integers +// +// (-) whole integers (.) decimal integers +// // examples of acceptable input include: -// -123.456 -// 456.7890 -// 345 -// -456789 +// +// -123.456 +// 456.7890 +// 345 +// -456789 // // NOTE - An error will return if more decimal places // are provided in the string than the constant Precision. diff --git a/p2p/stream/common/ratelimiter/ratelimiter.go b/p2p/stream/common/ratelimiter/ratelimiter.go index 4a04f51a4..df5dc4e36 100644 --- a/p2p/stream/common/ratelimiter/ratelimiter.go +++ b/p2p/stream/common/ratelimiter/ratelimiter.go @@ -24,8 +24,9 @@ type RateLimiter interface { // rateLimiter is the implementation of RateLimiter. // The rateLimiter limit request rate: -// 1. For global stream requests -// 2. For requests from a stream +// 1. For global stream requests +// 2. For requests from a stream +// // TODO: make request weighted in rate limiter type rateLimiter struct { globalLimiter ratelimit.Limiter diff --git a/p2p/stream/protocols/sync/message/compose.go b/p2p/stream/protocols/sync/message/compose.go index a73421c12..8a834e4de 100644 --- a/p2p/stream/protocols/sync/message/compose.go +++ b/p2p/stream/protocols/sync/message/compose.go @@ -35,7 +35,7 @@ func MakeGetBlocksByNumRequest(bns []uint64) *Request { } } -//MakeGetBlockByHashesRequest makes the GetBlocksByHashes request +// MakeGetBlockByHashesRequest makes the GetBlocksByHashes request func MakeGetBlocksByHashesRequest(hashes []common.Hash) *Request { return &Request{ Request: &Request_GetBlocksByHashesRequest{ diff --git a/p2p/stream/protocols/sync/message/msg.pb.go b/p2p/stream/protocols/sync/message/msg.pb.go index 1457e02a9..5a68004b3 100644 --- a/p2p/stream/protocols/sync/message/msg.pb.go +++ b/p2p/stream/protocols/sync/message/msg.pb.go @@ -1,6 +1,6 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: -// protoc-gen-go v1.26.0 +// protoc-gen-go v1.28.1 // protoc v3.15.8 // source: msg.proto @@ -26,6 +26,7 @@ type Message struct { unknownFields protoimpl.UnknownFields // Types that are assignable to ReqOrResp: + // // *Message_Req // *Message_Resp ReqOrResp isMessage_ReqOrResp `protobuf_oneof:"req_or_resp"` @@ -107,6 +108,7 @@ type Request struct { ReqId uint64 `protobuf:"varint,1,opt,name=req_id,json=reqId,proto3" json:"req_id,omitempty"` // Types that are assignable to Request: + // // *Request_GetBlockNumberRequest // *Request_GetBlockHashesRequest // *Request_GetBlocksByNumRequest @@ -402,6 +404,7 @@ type Response struct { ReqId uint64 `protobuf:"varint,1,opt,name=req_id,json=reqId,proto3" json:"req_id,omitempty"` // Types that are assignable to Response: + // // *Response_ErrorResponse // *Response_GetBlockNumberResponse // *Response_GetBlockHashesResponse diff --git a/p2p/stream/types/utils.go b/p2p/stream/types/utils.go index 8acc38f40..d096115fb 100644 --- a/p2p/stream/types/utils.go +++ b/p2p/stream/types/utils.go @@ -36,7 +36,8 @@ type ProtoID libp2p_proto.ID // ProtoSpec is the un-serialized stream proto id specification // TODO: move this to service wise module since different protocol might have different -// protoID information +// +// protoID information type ProtoSpec struct { Service string NetworkType nodeconfig.NetworkType diff --git a/rosetta/infra/Dockerfile b/rosetta/infra/Dockerfile index 832f5b224..0b1424b22 100644 --- a/rosetta/infra/Dockerfile +++ b/rosetta/infra/Dockerfile @@ -1,5 +1,5 @@ # Build -FROM golang:1.18 AS build +FROM golang:1.19 AS build RUN apt update -y && \ apt install libgmp-dev libssl-dev git -y && \ diff --git a/scripts/travis_go_checker.sh b/scripts/travis_go_checker.sh index 20da2bccc..70638377a 100755 --- a/scripts/travis_go_checker.sh +++ b/scripts/travis_go_checker.sh @@ -71,6 +71,8 @@ then echo "go generate FAILED!" echo "go generate changed working tree contents!" "${progdir}/print_file.sh" "${gogenerate_status_diff}" "git status diff" + "${progdir}/print_file.sh" "${gogenerate_status_before}" "gogenerate before" + "${progdir}/print_file.sh" "${gogenerate_status_after}" "gogenerate after" ok=false fi else diff --git a/shard/values.go b/shard/values.go index 83b19b443..4e7b06384 100644 --- a/shard/values.go +++ b/shard/values.go @@ -13,8 +13,9 @@ const ( ) // TODO ek – Schedule should really be part of a general-purpose network -// configuration. We are OK for the time being, -// until the day we should let one node process join multiple networks. +// +// configuration. We are OK for the time being, +// until the day we should let one node process join multiple networks. var ( // Schedule is the sharding configuration schedule. // Depends on the type of the network. Defaults to the mainnet schedule.