Giter VIP home page Giter VIP logo

avalanchego's Introduction


Node implementation for the Avalanche network - a blockchains platform with high throughput, and blazing fast transactions.

Installation

Avalanche is an incredibly lightweight protocol, so the minimum computer requirements are quite modest. Note that as network usage increases, hardware requirements may change.

The minimum recommended hardware specification for nodes connected to Mainnet is:

  • CPU: Equivalent of 8 AWS vCPU
  • RAM: 16 GiB
  • Storage: 1 TiB
    • Nodes running for very long periods of time or nodes with custom configurations may observe higher storage requirements.
  • OS: Ubuntu 20.04/22.04 or macOS >= 12
  • Network: Reliable IPv4 or IPv6 network connection, with an open public port.

If you plan to build AvalancheGo from source, you will also need the following software:

  • Go version >= 1.21.10
  • gcc
  • g++

Building From Source

Clone The Repository

Clone the AvalancheGo repository:

git clone [email protected]:ava-labs/avalanchego.git
cd avalanchego

This will clone and checkout the master branch.

Building AvalancheGo

Build AvalancheGo by running the build script:

./scripts/build.sh

The avalanchego binary is now in the build directory. To run:

./build/avalanchego

Binary Repository

Install AvalancheGo using an apt repository.

Adding the APT Repository

If you already have the APT repository added, you do not need to add it again.

To add the repository on Ubuntu, run:

sudo su -
wget -qO - https://downloads.avax.network/avalanchego.gpg.key | tee /etc/apt/trusted.gpg.d/avalanchego.asc
source /etc/os-release && echo "deb https://downloads.avax.network/apt $UBUNTU_CODENAME main" > /etc/apt/sources.list.d/avalanche.list
exit

Installing the Latest Version

After adding the APT repository, install avalanchego by running:

sudo apt update
sudo apt install avalanchego

Binary Install

Download the latest build for your operating system and architecture.

The Avalanche binary to be executed is named avalanchego.

Docker Install

Make sure Docker is installed on the machine - so commands like docker run etc. are available.

Building the Docker image of latest avalanchego branch can be done by running:

./scripts/build_image.sh

To check the built image, run:

docker image ls

The image should be tagged as avaplatform/avalanchego:xxxxxxxx, where xxxxxxxx is the shortened commit of the Avalanche source it was built from. To run the Avalanche node, run:

docker run -ti -p 9650:9650 -p 9651:9651 avaplatform/avalanchego:xxxxxxxx /avalanchego/build/avalanchego

Running Avalanche

Connecting to Mainnet

To connect to the Avalanche Mainnet, run:

./build/avalanchego

You should see some pretty ASCII art and log messages.

You can use Ctrl+C to kill the node.

Connecting to Fuji

To connect to the Fuji Testnet, run:

./build/avalanchego --network-id=fuji

Creating a Local Testnet

The avalanche-cli is the easiest way to start a local network.

avalanche network start
avalanche network status

Bootstrapping

A node needs to catch up to the latest network state before it can participate in consensus and serve API calls. This process (called bootstrapping) currently takes several days for a new node connected to Mainnet.

A node will not report healthy until it is done bootstrapping.

Improvements that reduce the amount of time it takes to bootstrap are under development.

The bottleneck during bootstrapping is typically database IO. Using a more powerful CPU or increasing the database IOPS on the computer running a node will decrease the amount of time bootstrapping takes.

Generating Code

AvalancheGo uses multiple tools to generate efficient and boilerplate code.

Running protobuf codegen

To regenerate the protobuf go code, run scripts/protobuf_codegen.sh from the root of the repo.

This should only be necessary when upgrading protobuf versions or modifying .proto definition files.

To use this script, you must have buf (v1.31.0), protoc-gen-go (v1.33.0) and protoc-gen-go-grpc (v1.3.0) installed.

To install the buf dependencies:

go install google.golang.org/protobuf/cmd/[email protected]
go install google.golang.org/grpc/cmd/[email protected]

If you have not already, you may need to add $GOPATH/bin to your $PATH:

export PATH="$PATH:$(go env GOPATH)/bin"

If you extract buf to ~/software/buf/bin, the following should work:

export PATH=$PATH:~/software/buf/bin/:~/go/bin
go get google.golang.org/protobuf/cmd/protoc-gen-go
go get google.golang.org/protobuf/cmd/protoc-gen-go-grpc
scripts/protobuf_codegen.sh

For more information, refer to the GRPC Golang Quick Start Guide.

Running mock codegen

To regenerate the gomock code, run scripts/mock.gen.sh from the root of the repo.

This should only be necessary when modifying exported interfaces or after modifying scripts/mock.mockgen.txt.

Versioning

Version Semantics

AvalancheGo is first and foremost a client for the Avalanche network. The versioning of AvalancheGo follows that of the Avalanche network.

  • v0.x.x indicates a development network version.
  • v1.x.x indicates a production network version.
  • vx.[Upgrade].x indicates the number of network upgrades that have occurred.
  • vx.x.[Patch] indicates the number of client upgrades that have occurred since the last network upgrade.

Library Compatibility Guarantees

Because AvalancheGo's version denotes the network version, it is expected that interfaces exported by AvalancheGo's packages may change in Patch version updates.

API Compatibility Guarantees

APIs exposed when running AvalancheGo will maintain backwards compatibility, unless the functionality is explicitly deprecated and announced when removed.

Supported Platforms

AvalancheGo can run on different platforms, with different support tiers:

  • Tier 1: Fully supported by the maintainers, guaranteed to pass all tests including e2e and stress tests.
  • Tier 2: Passes all unit and integration tests but not necessarily e2e tests.
  • Tier 3: Builds but lightly tested (or not), considered experimental.
  • Not supported: May not build and not tested, considered unsafe. To be supported in the future.

The following table lists currently supported platforms and their corresponding AvalancheGo support tiers:

Architecture Operating system Support tier
amd64 Linux 1
arm64 Linux 2
amd64 Darwin 2
amd64 Windows 3
arm Linux Not supported
i386 Linux Not supported
arm64 Darwin Not supported

To officially support a new platform, one must satisfy the following requirements:

AvalancheGo continuous integration Tier 1 Tier 2 Tier 3
Build passes
Unit and integration tests pass
End-to-end and stress tests pass

Security Bugs

We and our community welcome responsible disclosures.

Please refer to our Security Policy and Security Advisories.

avalanchego's People

Contributors

0x486f626f avatar 0xk4d1r avatar aaronbuchwald avatar abi87 avatar adasari avatar ceyonur avatar charlie-ava avatar cinterloper avatar danlaine avatar darioush avatar dboehm-avalabs avatar determinant avatar dhrubabasu avatar felipemadero avatar galenmarchetti avatar gyuho avatar hexfusion avatar holisticode avatar joshua-kim avatar manthanhd avatar marun avatar moreati avatar obbap1 avatar otherview avatar patrick-ogrady avatar pubwyse avatar stephenbuttolph avatar tasinco avatar tyler-smith avatar yulin-dong avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

avalanchego's Issues

Improve the build system.

The Gecko project uses libraries written in other languages (crypto and network part in C/C++, for example). Thus it is non-trivial work to have a streamlined build experience as there is no official, feature-rich build system provided by golang. There are, however, some utilities (e.g. gotools) that could be utilized to help put together a customized build logic.

This post serves as an initial overview of dependencies and how packages are currently (as of Apr 30, 2020) organized in Gecko. It will subject to update in the future and the containing discussion thread will continue serving as the summary for all changes planned to the build system.

Important Dependencies

In addition to the go packages imported by Gecko's go code and resolved automatically by gotools, gecko also depends on several Go wrappers for its main functionality.

  • salticidae-go -- a Go wrapper for the salticidae library that implements the low-level p2p network messaging (in C++).
  • coreth -- a wrapper over a stock version of go-ethereum (geth) to extract the non-consensus functionalities from geth so as to support Ethereum format blocks and EVM state machine in Ava's C-chain and Athereum

Current Build Logic

We currently use a basic build script under scripts/build.sh, which:

  • first sources scripts/env.sh script to initialize some environment variables for the build:

    • GOPATH: the root prefix of all packages, including Gecko itself
    • SALTICIDAE_GO_HOME: the root directory of salticidae-go package
      The env script also checks the target system and see if the salticidae-go directory already exists (more specifically, to check if libsalticidae.a exists):
      • If it exists then just skips the process for building salticidae-go completely (this is convenient for dev, but now needs to be improved to support incremental updates for the users)
      • If not, it delegates the build of salticidae-go completely to the one-line setup script
        • Please refer to the scripts in salticidae-go for the details.
        • NOTE: for OS X, it will not build the binaries directly under the folder of salticidae-go/salticidae, but delegates this to homebrew in order to configure the cmake build environment for libsalticidae.a correctly.
  • now we assume salticidae-go is completely ready.

  • checks out the specific version of coreth

  • checks out the specific version of Gecko

  • finally build the binaries for Gecko

Principles

While the build system subjects to changes in the future, as the creator, I would humbly suggest we follow the following guidelines or at least keep them in our mind when making changes:

  • Always prioritize the experience for a novice user who may not be interested in changing the code all. This means if I'm not a programmer and just would like to try out the latest Gecko, a single command should be able to automate the whole process with defaults. Even better, there should be something like a one-liner "curl" command available for Gecko (just like the one for homebrew and rustup) that bootstraps everything from scratch ("geckoup"?).

  • The historical builds shouldn't fail: this means the build script should exactly pull the correct versions of dependencies so that in the future, even if Gecko evolves, devs are still able to successfully and easily build and reproduce older verions of it.

    • To do so, one suggestion is to keep tags for all internal dependencies (like salticidae-go and coreth) and use git tags in the build system.
  • The build system may allow upgrades. This means unless there is major change, one should easily upgrade its current Gecko clone to a specified (later) version by something like an upgrade.sh. This is very helpful for such an open-source project that gets continuously improved and so people would like to actively try out some experimental versions.

  • The behavior of build system should be documented. While this discussion thread serves as a good start, it should be somehow recorded along side the scripts.

Insufficient funds returned by call to `exportAVA`

Describe the bug
User gets insufficient funds error message when calling avm.exportAVA even though their user controls an account with sufficient balance.

To Reproduce
User does:

curl -X POST --data '{ "jsonrpc":"2.0", "id" :1, "method" :"avm.exportAVA", "params" :{ "to":"Nsscj17QRsQJjppjnGZ9BF5qbMNiGKeTN", "amount": 10000, "username":"xx", "password":"xxx" } }' -H 'content-type:application/json;' 127.0.0.1:9650/ext/bc/X

and gets:

{"jsonrpc":"2.0","error":{"code":-32000,"message":"insufficient funds","data":null},"id":1}

A call to getBalance confirms their balance is 40,000 (ie >10,000)

Expected behavior
API call succeeds

Operating System
Unknown

Additional context
Thanks to Discord user Okesip for reporting

By submitting this issue I agree to the Terms and Conditions of the Developer Accelerator Program.

Empty Vertex Issuance

Describe the bug
Validators can infinitely add empty vertices that may cause the node to eventually run out of memory, or have a large overhead during re-syncing with the network.

To Reproduce
Run a staking network. Start a validator that is partitioned from the network. Issue a transaction to that validator.

Expected behavior
Rather than issuing an empty vertex, we should just create a poll over a frontier on the current DAG.

Operating System
This is universally applicable.

EVM plugin keeps running after node crashes

Describe the bug
EVM plugin keeps running after node crashes. See screenshot.

To Reproduce
Run a node that crashes. In this case, crashes with segfault.

Expected behavior
EVM plugin process ends when the node process ends.

Screenshots
image

image

Operating System
Ubuntu 18.04

Additional context
Thanks to Discord user Danil Ushakov for finding

By submitting this issue I agree to the Terms and Conditions of the Developer Accelerator Program.

lgtm.com warning: err returned by service.vm.getChains() ignored

Describe the bug
In platformvm.Service.chainExists() the err return value of service.vm.getChains() is not checked or propagated. This may indicate unintentional masking of an error. The line in question is

https://github.com/ava-labs/gecko/blob/eacdf54efc2b9bdf8f12bb33d668d0108e8e1651/vms/platformvm/service.go#L1229

This was identified by a static analysis on https://lgtm.com

To Reproduce
The complete analysis is viewable at https://lgtm.com/projects/g/ava-labs/gecko/alerts/?mode=list

Expected behavior
This return value might be ignored intentional, if so it should be assigned to _ instead.

Operating System
N/A

Additional context
lgtm.com is a hosted service that performed static analysis of a code base, looking for common problems. Like any static analysis it can produce false positives. Two further warnings were raised in spdagvm.Tx.verifyFunds(), but they look to me like code that could be simplified, rather than bugs. The lines are

https://github.com/ava-labs/gecko/blob/eacdf54efc2b9bdf8f12bb33d668d0108e8e1651/vms/spdagvm/tx.go#L162

https://github.com/ava-labs/gecko/blob/eacdf54efc2b9bdf8f12bb33d668d0108e8e1651/vms/spdagvm/tx.go#L177

I think the functions could be simplifed, to eliminate the warning.

I'd be happy to provide a pull request for all three.

By submitting this issue I agree to the Terms and Conditions of the Developer Accelerator Program.

Redundant unaryNode.RecordPoll call

Describe the bug
From @StephenButtolph's comment in the Discord channel,

In unaryNode we are guaranteed that u.commonPrefix will equal u.child.DecidedPrefix(). 
Otherwise, there must have been a decision under the node, which isn't possible because beta1 
<= beta2. That means that filtering the votes between u.commonPrefix and 
u.child.DecidedPrefix() would always result in the same set being returned.

Expected behavior
Remove extra call to RecordPoll in,
https://github.com/ava-labs/gecko/blob/master/snow/consensus/snowball/tree.go#L413

Operating System
Universally Applicable

Publish ava and evm binaries into repo

Suggestion: Publish the ava and evm binaries in the repo to use

Explanation:

The current gecko repo is not using go modules. go get always pull the latest version of dependencies and which possibly can break the code compilation.
and possibly cause different ava binaries (on uses machine) behavely due to version changes work in differently, may not be due to bug in the actual code base.

The current binary generations are not hermetic.

Account balance overflow in spdagvm

Describe the bug
In spdagvm vm.go, an account balance will overflow if greater than math.MaxUint64 is sent to an account.

To Reproduce
Modify the vm to initialize with a TxFee
vm.Initialize(ctx, vmDB, genesisTx.Bytes(), msgChan, nil, txFeeTest)

The transactions in TestTxOutputOverflow in vm_test.go , along with accepting the pending transaction, can then be used to produce the overflow.

Expected behavior
Something like the snippet below should be used downstream of the vm's Send function

        finalBalance, err := math.Add64(accountBalance, amount)
	if err != nil {
                return errOutputOverflow
	}

The last check in the test should also be modified to handle the err message,

Operating System
Universally applicable

Snowman bootstrapping can be blocked with empty ids

Describe the bug
Same as #94 but different application.
With Snowman, a validator can cause bootstrapping to hang in another node by responding to a Get request with the requested blkID and modified bytes that point to an empty parent. The bootstrapping node will be blocked as it searches for the nonexistent id,
/snow/networking/sender/sender.go#87: Sending Get to validator NwEmCRVweJs9vTin7LpnweWSKVP4AB9Qi. RequestID: 10. ContainerID: 11111111111111111111111111111111LpoYY

To Reproduce
Bootstrap a node and sendRequest for an unkown block to a validator running,

func (t *Transitive) Get(vdr ids.ShortID, requestID uint32, blkID ids.ID) {
    if blk, err := t.Config.VM.ModifiedGetBlock(blkID); err == nil {
	t.Config.Sender.Put(vdr, requestID, blkID, blk.Bytes())
    }
}
func (vm *VM) ModifiedGetBlock(id ids.ID) (snowman.Block, error) {
    blk, err := vm.state.Block(vm.baseDB, id)
    blk.parentID = ids.Empty
    blk.UpdateBytes()
    return &LiveBlock{ vm: vm, block: blk, }
}
func (b *Block) UpdateBytes() {
    codec := Codec{}
    bytes, _ := codec.MarshalBlock(b)
    b.bytes = bytes
}

Expected behavior
Derive the block id from the block bytes before working with the payload data

By submitting this issue I agree to the Terms and Conditions of the Developer Accelerator Program.

Feature request : homedomain Parameter

Hi Guys

I have been testing AVA for quite a bit now and would like to suggest a homedomain parameter in the creation of Assets.
An HomeDomain will help verify the issuer of an asset in an explorer and also protect against counterfeit copy of asset.

curl -X POST --data '{
    "jsonrpc":"2.0",
    "id"     : 1,
    "method" :"avm.createFixedCapAsset",
    "params" :{
        "name": "ISA Shares",
        "homedomain": "website.com",
        "symbol":"ISAS",
        "initialHolders": [
            {
                "address": "X-Dxs8JWAzDZX1VXcLZT5GZR7TyfX8h9ic9",
                "amount": 10000000
            }
        ],
        "username":"yourUsername",
        "password":"yourPassword"
    }
}' -H 'content-type:application/json;' 127.0.0.1:9650/ext/bc/X


The homedomain tag can be verified by using the toml : https://website.com/.well-known/ava.toml

For the TOML file :


[[CURRENCIES]]
symbol = "ISAS"
desc = "Investors of ISA are issued ISAS and can be used on our website "
image = "https://website.com/tokenpix.png"
initialHolders = "X-Dxs8JWAzDZX1VXcLZT5GZR7TyfX8h9ic9"
name = "ISAS"
status = "live"

desc: details about the asset can be added here
image : the logo of the token
initialHolders : the issuer address , this can help Explorer list organizations and help users know an authentic asset
name: name of the ASSET
status : live or testing , depending on what stage of development the org is at .

Panicing due to: runtime error: invalid memory address or nil pointer dereference (createAvalancheChain)

Gecko node crashed with log below:
OS: Ubuntu 18.04

FATAL[04-24|11:21:02] <chain 4ktRjsAKxgMr2aEzv9SWmrU7Xk5FniHUrVCX4P1TZSfTLZWFM> /utils/logging/log.go#247: Panicing due to:
runtime error: invalid memory address or nil pointer dereference
From:                                                                                                                                                     [32/99657]
goroutine 105 [running]:
github.com/ava-labs/gecko/utils/logging.Stacktrace.String(0x450a00, 0xc000a8b301, 0x7f9aa3890b88)
        /home/us/gopath/src/github.com/ava-labs/gecko/utils/logging/stack.go:20 +0x71
fmt.(*pp).handleMethods(0xc00678c820, 0x73, 0x6400000001)
        /usr/local/go/src/fmt/print.go:630 +0x302
fmt.(*pp).printArg(0xc00678c820, 0xddb5a0, 0xc005e8b140, 0x73)
        /usr/local/go/src/fmt/print.go:713 +0x206
fmt.(*pp).doPrintf(0xc00678c820, 0xef7362, 0x1c, 0xc000a8b8c0, 0x2, 0x2)
        /usr/local/go/src/fmt/print.go:1030 +0x15b
fmt.Sprintf(0xef7362, 0x1c, 0xc000a8b8c0, 0x2, 0x2, 0xc006064d20, 0x46)
        /usr/local/go/src/fmt/print.go:219 +0x66
github.com/ava-labs/gecko/utils/logging.(*Log).format(0xc0007fc840, 0x1, 0xef7362, 0x1c, 0xc000a8b8c0, 0x2, 0x2, 0x1, 0xc005e8b140)
        /home/us/gopath/src/github.com/ava-labs/gecko/utils/logging/log.go:165 +0x11a
github.com/ava-labs/gecko/utils/logging.(*Log).log(0xc0007fc840, 0x1, 0xef7362, 0x1c, 0xc000a8b8c0, 0x2, 0x2)
        /home/us/gopath/src/github.com/ava-labs/gecko/utils/logging/log.go:138 +0x11f
github.com/ava-labs/gecko/utils/logging.(*Log).Fatal(...)
        /home/us/gopath/src/github.com/ava-labs/gecko/utils/logging/log.go:180
github.com/ava-labs/gecko/utils/logging.(*Log).StopOnPanic(0xc0007fc840)
        /home/us/gopath/src/github.com/ava-labs/gecko/utils/logging/log.go:247 +0xf4
panic(0xd9a520, 0x19a3b20)
        /usr/local/go/src/runtime/panic.go:679 +0x1b2
github.com/ava-labs/gecko/snow/engine/avalanche/state.(*uniqueVertex).Parents(0xc0060514a0, 0x30, 0x30, 0xc00606e9c0)
        /home/us/gopath/src/github.com/ava-labs/gecko/snow/engine/avalanche/state/unique_vertex.go:111 +0x3c
github.com/ava-labs/gecko/snow/engine/avalanche.(*vertexJob).MissingDependencies(0xc00606e9c0, 0x42f258)
        /home/us/gopath/src/github.com/ava-labs/gecko/snow/engine/avalanche/vertex_job.go:40 +0x46
github.com/ava-labs/gecko/snow/engine/common/queue.(*Jobs).Push(0xc0008630e0, 0x1160180, 0xc00606e9c0, 0x1, 0x0)
        /home/us/gopath/src/github.com/ava-labs/gecko/snow/engine/common/queue/jobs.go:49 +0x35
github.com/ava-labs/gecko/snow/engine/avalanche.(*bootstrapper).storeVertex(0xc0000352e8, 0x1169c60, 0xc0023c2b00)
        /home/us/gopath/src/github.com/ava-labs/gecko/snow/engine/avalanche/bootstrapper.go:163 +0x39f
github.com/ava-labs/gecko/snow/engine/avalanche.(*bootstrapper).addVertex(0xc0000352e8, 0x1169c60, 0xc0023c2b00)
        /home/us/gopath/src/github.com/ava-labs/gecko/snow/engine/avalanche/bootstrapper.go:141 +0x3f
github.com/ava-labs/gecko/snow/engine/avalanche.(*bootstrapper).Put(0xc0000352e8, 0xc00084e320, 0xc276, 0xc002fd04a0, 0xc00185ea48, 0x54, 0x54)
        /home/us/gopath/src/github.com/ava-labs/gecko/snow/engine/avalanche/bootstrapper.go:106 +0x2a4
github.com/ava-labs/gecko/snow/engine/avalanche.(*Transitive).Put(0xc000035200, 0xc00084e320, 0xc276, 0xc002fd04a0, 0xc00185ea48, 0x54, 0x54)
        /home/us/gopath/src/github.com/ava-labs/gecko/snow/engine/avalanche/transitive.go:87 +0x2e2
github.com/ava-labs/gecko/snow/networking/handler.(*Handler).dispatchMsg(0xc000863fb0, 0x8, 0xc00084e320, 0xc276, 0xc002fd04a0, 0xc00185ea48, 0x54, 0x54, 0x0, 0x0, 
...)
        /home/us/gopath/src/github.com/ava-labs/gecko/snow/networking/handler/handler.go:83 +0x434
github.com/ava-labs/gecko/snow/networking/handler.(*Handler).Dispatch(0xc000863fb0)
        /home/us/gopath/src/github.com/ava-labs/gecko/snow/networking/handler/handler.go:43 +0x2b3
github.com/ava-labs/gecko/utils/logging.(*Log).RecoverAndPanic(0xc0007fc840, 0xc0008556b0)
        /home/us/gopath/src/github.com/ava-labs/gecko/utils/logging/log.go:254 +0x57
created by github.com/ava-labs/gecko/chains.(*manager).createAvalancheChain
        /home/us/gopath/src/github.com/ava-labs/gecko/chains/manager.go:438 +0x8a2

panic: runtime error: invalid memory address or nil pointer dereference [recovered]
        panic: runtime error: invalid memory address or nil pointer dereference
[signal SIGSEGV: segmentation violation code=0x1 addr=0x20 pc=0x9b16ac]

goroutine 105 [running]:
github.com/ava-labs/gecko/utils/logging.(*Log).StopOnPanic(0xc0007fc840)
        /home/us/gopath/src/github.com/ava-labs/gecko/utils/logging/log.go:249 +0x11d
panic(0xd9a520, 0x19a3b20)
        /usr/local/go/src/runtime/panic.go:679 +0x1b2
github.com/ava-labs/gecko/snow/engine/avalanche/state.(*uniqueVertex).Parents(0xc0060514a0, 0x30, 0x30, 0xc00606e9c0)
        /home/us/gopath/src/github.com/ava-labs/gecko/snow/engine/avalanche/state/unique_vertex.go:111 +0x3c
github.com/ava-labs/gecko/snow/engine/avalanche.(*vertexJob).MissingDependencies(0xc00606e9c0, 0x42f258)
        /home/us/gopath/src/github.com/ava-labs/gecko/snow/engine/avalanche/vertex_job.go:40 +0x46
github.com/ava-labs/gecko/snow/engine/common/queue.(*Jobs).Push(0xc0008630e0, 0x1160180, 0xc00606e9c0, 0x1, 0x0)
        /home/us/gopath/src/github.com/ava-labs/gecko/snow/engine/common/queue/jobs.go:49 +0x35
github.com/ava-labs/gecko/snow/engine/avalanche.(*bootstrapper).storeVertex(0xc0000352e8, 0x1169c60, 0xc0023c2b00)
        /home/us/gopath/src/github.com/ava-labs/gecko/snow/engine/avalanche/bootstrapper.go:163 +0x39f
github.com/ava-labs/gecko/snow/engine/avalanche.(*bootstrapper).addVertex(0xc0000352e8, 0x1169c60, 0xc0023c2b00)
        /home/us/gopath/src/github.com/ava-labs/gecko/snow/engine/avalanche/bootstrapper.go:141 +0x3f
github.com/ava-labs/gecko/snow/engine/avalanche.(*bootstrapper).Put(0xc0000352e8, 0xc00084e320, 0xc276, 0xc002fd04a0, 0xc00185ea48, 0x54, 0x54)
        /home/us/gopath/src/github.com/ava-labs/gecko/snow/engine/avalanche/bootstrapper.go:106 +0x2a4
github.com/ava-labs/gecko/snow/engine/avalanche.(*Transitive).Put(0xc000035200, 0xc00084e320, 0xc276, 0xc002fd04a0, 0xc00185ea48, 0x54, 0x54)
        /home/us/gopath/src/github.com/ava-labs/gecko/snow/engine/avalanche/transitive.go:87 +0x2e2
github.com/ava-labs/gecko/snow/networking/handler.(*Handler).dispatchMsg(0xc000863fb0, 0x8, 0xc00084e320, 0xc276, 0xc002fd04a0, 0xc00185ea48, 0x54, 0x54, 0x0, 0x0,
...)
        /home/us/gopath/src/github.com/ava-labs/gecko/snow/networking/handler/handler.go:83 +0x434
github.com/ava-labs/gecko/snow/networking/handler.(*Handler).Dispatch(0xc000863fb0)
        /home/us/gopath/src/github.com/ava-labs/gecko/snow/networking/handler/handler.go:43 +0x2b3
github.com/ava-labs/gecko/utils/logging.(*Log).RecoverAndPanic(0xc0007fc840, 0xc0008556b0)
        /home/us/gopath/src/github.com/ava-labs/gecko/utils/logging/log.go:254 +0x57
created by github.com/ava-labs/gecko/chains.(*manager).createAvalancheChain
        /home/us/gopath/src/github.com/ava-labs/gecko/chains/manager.go:438 +0x8a2

Potential deadlock in VM shutdown

Describe the bug
Many of the current VM implementations have a potential deadlock during the vm.Shutdown() call. Specifically:

ctx.Lock is held while calling timer.Stop(). However, the function the timer is executing attempts to grab ctx.Lock. timer.Stop() is designed to ensure that the function will not be called after returning, this is a potential deadlock.

Expected behavior
Calling Shutdown on a VM should return timely.

Fix
The linked lines of code should be replaced with:

// There is a potential deadlock if the timer is about to execute a timeout.
// So, the lock must be released before stopping the timer.
vm.ctx.Lock.Unlock()
vm.timer.Stop()
vm.ctx.Lock.Lock()

Feature: Add a way for clients to check that their node state is synchronized

Right now there's no way for a client to know whether bootstrapping succeeded.

We should add an API call that allows a client to get the block height (or similar) of the latest block on a given chain, so that they can compare to external sources in order to verify that their node is synced with the network.

Engine Put function optimization

Describe the bug
On failure of parsing a vertex inside the avalanche Put function, the vtxID will be passed to GetFailed which clears blockers and abandons that vtxID.

To Reproduce
Run a local network and partition off rogue nodes that run a PushQuery function like,

func (t *Transitive) PushQuery(vdr ids.ShortID, requestID uint32, vtxID ids.ID, vtx []byte) {
        errorVtx := []byte("PARSE ERROR")
        for _, vd := range t.Config.Validators.List() {
        	t.Config.Sender.Put(vd.ID(), t.RequestID, vtxID, errorVtx)
	}
}

Expected behavior
A mechanism to track expected Put requests or reloading the vertex from state could be an optimization here

Operating System
Universally applicable

Additional context
Lag will depend on network and consensus parameters

By submitting this issue I agree to the Terms and Conditions of the Developer Accelerator Program.

Feature : Readable wallet address

Hi Guys.
For this feature to work : the homedomain Parameter needs to be implemented .

AVA generates addresses such as : X-Dxs8JWAzDZX1VXcLZT5GZR7TyfX8h9ic9 , 8cH1q7AvHmZyoD1CjBeyQiAP8SVRxTNVV but like everyone i would have to copy and paste it to receive payment. And if it's a lot of value i probably would do a test payment first.

The Ethereum ecosystem uses https://ens.domains/ which makes wallets address as easy as 'aardvark.eth' instead of '0x4cbe58c50480...' , It would be expensive and likely around $200,000 in fee to ICANN.

The cheaper way is to utilize the homedomain parameter which would points to a domain name eg website.com
the owner of website.com would then need to point whoever is resolving via the toml file to a database

For example : https://website.com/.well-known/ava.toml

Readable_wallet="https://website.com/ID/"

Other details that can be added in the toml can be found in the homedomain Parameter

The Readable_wallet tag direct the asking service to where to resolve which is https://website.com/ID/
The index file of the ID folder receives the request , lets say i have X-Dxs8JWAzDZX1VXcLZT5GZR7TyfX8h9ic9 stored in my database as flarcos.website.com or flarcos*website.com depending on the standard AVA wants to follow.

If i am using a wallet, an explorer or other services . once i enter flarcos.website.com or flarcos*website.com the service should resolve the domain name : website.com to the toml file then to the ID folder which index file does the query and resolving.

Advantage of this :

  • Readable wallet address
  • Can be easily integrated into services
  • Services offering Readable wallet address as feature

Disadvantage

  • Server downtime means wallet address can not be resolve.
    -it uses a centralized database and it can be manipulated if not properly protected.

A blockchain that uses this type of feature is Stellar . A service that provide the feature on stellar is : https://stellarid.io/ , a sample script : php federation .

Logging folder not documented

Describe the bug
I cannot find a logging folder anywhere since the versioned database folder was created. I asked internally and it's at ~/.gecko/logs which isn't documented that I can see. Also if that is the default logs directory, we should be careful that it's not too specific to unix-based OSes.

Expected behavior
People can find their log directory without much effort.

Operating System
Ubuntu 18.04

Codec deserialize into an invalid struct

Describe the bug
If the codec attempts to unmarshal a struct into an interface field that the struct does not implement, the codec will panic rather than returning an error.

To Reproduce
This test case, when placed in the Codec folder, will fail.

type outerInterface interface {
	ToInt() int
}

type outer struct {
	Interface outerInterface `serialize:"true"`
}

type innerInterface struct{}

func (it *innerInterface) ToInt() int {
	return 0
}

type innerNoInterface struct{}

// Ensure deserializing structs into the wrong interface errors gracefully
func TestUnmarshalInvalidInterface(t *testing.T) {
	codec := NewDefault()

	codec.RegisterType(&innerInterface{})
	codec.RegisterType(&innerNoInterface{})

	{
		bytes := []byte{0, 0, 0, 0}
		s := outer{}
		if err := codec.Unmarshal(bytes, &s); err != nil {
			t.Fatal(err)
		}
	}
	{
		bytes := []byte{0, 0, 0, 1}
		s := outer{}
		if err := codec.Unmarshal(bytes, &s); err == nil {
			t.Fatalf("should have errored")
		}
	}
}

Expected behavior
The above test should pass.

Operating System
Universally applicable

Panicing due to: runtime error: invalid memory address or nil pointer dereference

Gecko node crashed with log below:

OS: Ubuntu 18.04
VPS: CPU 4 core, 8 Gb RAM, 200 Gb SSD

2020-04-22 15:55:04.865039 [net info] <Conn fd=68 addr=<NetAddr 95.179.163.191:9801> mode=active> connect timeout
2020-04-22 15:55:04.865192 [net info] <Conn fd=71 addr=<NetAddr 78.168.90.52:9651> mode=active> connect timeout
2020-04-22 15:55:04.865259 [net info] 08403cbfd4: lost connection <Conn fd=68 addr=<NetAddr 95.179.163.191:9801> mode=active>
ERROR[04-22|15:55:04] /node/node.go#140: Error during async call: unable to connect
2020-04-22 15:55:04.865325 [net info] 08403cbfd4: lost connection <Conn fd=71 addr=<NetAddr 78.168.90.52:9651> mode=active>
ERROR[04-22|15:55:04] /node/node.go#140: Error during async call: unable to connect
INFO [04-22|15:55:07] <chain 11111111111111111111111111111111LpoYY> /vms/platformvm/vm.go#670: next scheduled event is at 2020-04-24 21:45:43 +0200 CEST (53h50m35.636941235s in the future)
INFO [04-22|15:55:07] <chain 11111111111111111111111111111111LpoYY> /vms/platformvm/vm.go#670: next scheduled event is at 2020-04-24 21:45:43 +0200 CEST (53h50m35.629528344s in the future)
FATAL[04-22|15:55:07] <chain 11111111111111111111111111111111LpoYY> /utils/logging/log.go#247: Panicing due to:
runtime error: invalid memory address or nil pointer dereference
From:
goroutine 131 [running]:
github.com/ava-labs/gecko/utils/logging.Stacktrace.String(0x450a00, 0xc001128b01, 0x7fb7c439c738)
        /home/ava/go/src/github.com/ava-labs/gecko/utils/logging/stack.go:20 +0x71
fmt.(*pp).handleMethods(0xc0031b7040, 0x73, 0x6400000001)
        /usr/local/go/src/fmt/print.go:630 +0x302
fmt.(*pp).printArg(0xc0031b7040, 0xdd9be0, 0xc0056501c8, 0x73)
        /usr/local/go/src/fmt/print.go:713 +0x206
fmt.(*pp).doPrintf(0xc0031b7040, 0xef57db, 0x1c, 0xc001129080, 0x2, 0x2)
        /usr/local/go/src/fmt/print.go:1030 +0x15b
fmt.Sprintf(0xef57db, 0x1c, 0xc001129080, 0x2, 0x2, 0xc000a45f40, 0x43)
        /usr/local/go/src/fmt/print.go:219 +0x66
github.com/ava-labs/gecko/utils/logging.(*Log).format(0xc00082cf00, 0x1, 0xef57db, 0x1c, 0xc001129080, 0x2, 0x2, 0x1, 0x5)
        /home/ava/go/src/github.com/ava-labs/gecko/utils/logging/log.go:165 +0x11a
github.com/ava-labs/gecko/utils/logging.(*Log).log(0xc00082cf00, 0x1, 0xef57db, 0x1c, 0xc001129080, 0x2, 0x2)
        /home/ava/go/src/github.com/ava-labs/gecko/utils/logging/log.go:138 +0x11f
github.com/ava-labs/gecko/utils/logging.(*Log).Fatal(...)
        /home/ava/go/src/github.com/ava-labs/gecko/utils/logging/log.go:180
github.com/ava-labs/gecko/utils/logging.(*Log).StopOnPanic(0xc00082cf00)
        /home/ava/go/src/github.com/ava-labs/gecko/utils/logging/log.go:247 +0xf4
panic(0xd98bc0, 0x19a0b20)
        /usr/local/go/src/runtime/panic.go:679 +0x1b2
sync.(*RWMutex).RLock(...)
        /usr/local/go/src/sync/rwmutex.go:48
github.com/ava-labs/gecko/database/versiondb.(*Database).Has(0x0, 0xc000aae120, 0x20, 0x20, 0x0, 0x0, 0x0)
        /home/ava/go/src/github.com/ava-labs/gecko/database/versiondb/db.go:40 +0x42
github.com/ava-labs/gecko/vms/components/state.(*state).Get(0xc0006bbc80, 0x116da80, 0x0, 0xfffffffffffffffd, 0xc0001ca380, 0xc0011292f8, 0x45a1dc, 0xc0007fe300, 0x300000002)
        /home/ava/go/src/github.com/ava-labs/gecko/vms/components/state/state.go:132 +0xc8
github.com/ava-labs/gecko/vms/components/state.(*state).GetTime(0xc0006bbc80, 0x116da80, 0x0, 0xc0001ca380, 0x1617ba110004cf00, 0x5ea04cbb, 0xc001129348, 0x4df5d6, 0x4decdd)
        /home/ava/go/src/github.com/ava-labs/gecko/vms/components/state/state.go:197 +0x56
github.com/ava-labs/gecko/vms/platformvm.(*VM).getTimestamp(0xc000688fc0, 0x116da80, 0x0, 0x0, 0x0, 0xd0, 0x0, 0x8)
        /home/ava/go/src/github.com/ava-labs/gecko/vms/platformvm/state.go:188 +0x5c
github.com/ava-labs/gecko/vms/platformvm.(*advanceTimeTx).SemanticVerify(0xc00261a420, 0x116da80, 0x0, 0x7fb7d13dd700, 0xc00120b6d0, 0x1, 0xd73d60, 0xc0007ea1b0, 0xc003e005e8)
        /home/ava/go/src/github.com/ava-labs/gecko/vms/platformvm/advance_time_tx.go:55 +0x9c
github.com/ava-labs/gecko/vms/platformvm.(*ProposalBlock).Verify(0xc00636f960, 0xc001129628, 0x1)
        /home/ava/go/src/github.com/ava-labs/gecko/vms/platformvm/proposal_block.go:99 +0xa2
github.com/ava-labs/gecko/snow/engine/snowman.(*Transitive).deliver(0xc0006cf340, 0x1167f80, 0xc00636f960)
        /home/ava/go/src/github.com/ava-labs/gecko/snow/engine/snowman/transitive.go:336 +0x10b
github.com/ava-labs/gecko/snow/engine/snowman.(*issuer).Update(...)
        /home/ava/go/src/github.com/ava-labs/gecko/snow/engine/snowman/issuer.go:43
github.com/ava-labs/gecko/snow/engine/snowman.(*issuer).Fulfill(0xc0031ae900, 0xc006130a20)
        /home/ava/go/src/github.com/ava-labs/gecko/snow/engine/snowman/issuer.go:22 +0xa8
github.com/ava-labs/gecko/snow/events.(*Blocker).Fulfill(0xc0006cf5b8, 0xc006130a20)
        /home/ava/go/src/github.com/ava-labs/gecko/snow/events/blocker.go:32 +0x161
github.com/ava-labs/gecko/snow/engine/snowman.(*Transitive).deliver(0xc0006cf340, 0x1167f80, 0xc00636fc70)
        /home/ava/go/src/github.com/ava-labs/gecko/snow/engine/snowman/transitive.go:370 +0x36b
github.com/ava-labs/gecko/snow/engine/snowman.(*issuer).Update(...)
        /home/ava/go/src/github.com/ava-labs/gecko/snow/engine/snowman/issuer.go:43
github.com/ava-labs/gecko/snow/engine/snowman.(*issuer).Fulfill(0xc0031aec00, 0xc005dff980)
        /home/ava/go/src/github.com/ava-labs/gecko/snow/engine/snowman/issuer.go:22 +0xa8
github.com/ava-labs/gecko/snow/events.(*Blocker).Fulfill(0xc0006cf5b8, 0xc005dff980)
        /home/ava/go/src/github.com/ava-labs/gecko/snow/events/blocker.go:32 +0x161
github.com/ava-labs/gecko/snow/engine/snowman.(*Transitive).deliver(0xc0006cf340, 0x1167ec0, 0xc0002fb680)
        /home/ava/go/src/github.com/ava-labs/gecko/snow/engine/snowman/transitive.go:365 +0x2b2
github.com/ava-labs/gecko/snow/engine/snowman.(*issuer).Update(0xc0031aeed0)
        /home/ava/go/src/github.com/ava-labs/gecko/snow/engine/snowman/issuer.go:43 +0x61
github.com/ava-labs/gecko/snow/events.(*Blocker).Register(0xc0006cf5b8, 0x115e440, 0xc0031aeed0)
        /home/ava/go/src/github.com/ava-labs/gecko/snow/events/blocker.go:59 +0x289
github.com/ava-labs/gecko/snow/engine/snowman.(*Transitive).insert(0xc0006cf340, 0x1167ec0, 0xc0002fb680)
        /home/ava/go/src/github.com/ava-labs/gecko/snow/engine/snowman/transitive.go:272 +0x183
github.com/ava-labs/gecko/snow/engine/snowman.(*Transitive).insertFrom(0xc0006cf340, 0xc00340a7e0, 0x1167ec0, 0xc0002fb680, 0x1167ec0)
        /home/ava/go/src/github.com/ava-labs/gecko/snow/engine/snowman/transitive.go:231 +0xc2
github.com/ava-labs/gecko/snow/engine/snowman.(*Transitive).Put(0xc0006cf340, 0xc00340a7e0, 0x0, 0xc005f1fd40, 0xc0003b9548, 0x132, 0x132)
        /home/ava/go/src/github.com/ava-labs/gecko/snow/engine/snowman/transitive.go:88 +0x283
github.com/ava-labs/gecko/snow/networking/handler.(*Handler).dispatchMsg(0xc00079fd70, 0x8, 0xc00340a7e0, 0x0, 0xc005f1fd40, 0xc0003b9548, 0x132, 0x132, 0x0, 0x0, ...)
        /home/ava/go/src/github.com/ava-labs/gecko/snow/networking/handler/handler.go:83 +0x434
github.com/ava-labs/gecko/snow/networking/handler.(*Handler).Dispatch(0xc00079fd70)
        /home/ava/go/src/github.com/ava-labs/gecko/snow/networking/handler/handler.go:43 +0x2b3
github.com/ava-labs/gecko/utils/logging.(*Log).RecoverAndPanic(0xc00082cf00, 0xc000af41e0)
        /home/ava/go/src/github.com/ava-labs/gecko/utils/logging/log.go:254 +0x57
created by github.com/ava-labs/gecko/chains.(*manager).createSnowmanChain
        /home/ava/go/src/github.com/ava-labs/gecko/chains/manager.go:524 +0x740

panic: runtime error: invalid memory address or nil pointer dereference [recovered]
        panic: runtime error: invalid memory address or nil pointer dereference
[signal SIGSEGV: segmentation violation code=0x1 addr=0x10 pc=0x99c8f2]

goroutine 131 [running]:
github.com/ava-labs/gecko/utils/logging.(*Log).StopOnPanic(0xc00082cf00)
        /home/ava/go/src/github.com/ava-labs/gecko/utils/logging/log.go:249 +0x11d
panic(0xd98bc0, 0x19a0b20)
        /usr/local/go/src/runtime/panic.go:679 +0x1b2
sync.(*RWMutex).RLock(...)
        /usr/local/go/src/sync/rwmutex.go:48
github.com/ava-labs/gecko/database/versiondb.(*Database).Has(0x0, 0xc000aae120, 0x20, 0x20, 0x0, 0x0, 0x0)
        /home/ava/go/src/github.com/ava-labs/gecko/database/versiondb/db.go:40 +0x42
github.com/ava-labs/gecko/vms/components/state.(*state).Get(0xc0006bbc80, 0x116da80, 0x0, 0xfffffffffffffffd, 0xc0001ca380, 0xc0011292f8, 0x45a1dc, 0xc0007fe300, 0x300000002)
        /home/ava/go/src/github.com/ava-labs/gecko/vms/components/state/state.go:132 +0xc8
github.com/ava-labs/gecko/vms/components/state.(*state).GetTime(0xc0006bbc80, 0x116da80, 0x0, 0xc0001ca380, 0x1617ba110004cf00, 0x5ea04cbb, 0xc001129348, 0x4df5d6, 0x4decdd)
        /home/ava/go/src/github.com/ava-labs/gecko/vms/components/state/state.go:197 +0x56
github.com/ava-labs/gecko/vms/platformvm.(*VM).getTimestamp(0xc000688fc0, 0x116da80, 0x0, 0x0, 0x0, 0xd0, 0x0, 0x8)
        /home/ava/go/src/github.com/ava-labs/gecko/vms/platformvm/state.go:188 +0x5c
github.com/ava-labs/gecko/vms/platformvm.(*advanceTimeTx).SemanticVerify(0xc00261a420, 0x116da80, 0x0, 0x7fb7d13dd700, 0xc00120b6d0, 0x1, 0xd73d60, 0xc0007ea1b0, 0xc003e005e8)
        /home/ava/go/src/github.com/ava-labs/gecko/vms/platformvm/advance_time_tx.go:55 +0x9c
github.com/ava-labs/gecko/vms/platformvm.(*ProposalBlock).Verify(0xc00636f960, 0xc001129628, 0x1)
        /home/ava/go/src/github.com/ava-labs/gecko/vms/platformvm/proposal_block.go:99 +0xa2
github.com/ava-labs/gecko/snow/engine/snowman.(*Transitive).deliver(0xc0006cf340, 0x1167f80, 0xc00636f960)
        /home/ava/go/src/github.com/ava-labs/gecko/snow/engine/snowman/transitive.go:336 +0x10b
github.com/ava-labs/gecko/snow/engine/snowman.(*issuer).Update(...)
        /home/ava/go/src/github.com/ava-labs/gecko/snow/engine/snowman/issuer.go:43
github.com/ava-labs/gecko/snow/engine/snowman.(*issuer).Fulfill(0xc0031ae900, 0xc006130a20)
        /home/ava/go/src/github.com/ava-labs/gecko/snow/engine/snowman/issuer.go:22 +0xa8
github.com/ava-labs/gecko/snow/events.(*Blocker).Fulfill(0xc0006cf5b8, 0xc006130a20)
        /home/ava/go/src/github.com/ava-labs/gecko/snow/events/blocker.go:32 +0x161
github.com/ava-labs/gecko/snow/engine/snowman.(*Transitive).deliver(0xc0006cf340, 0x1167f80, 0xc00636fc70)
        /home/ava/go/src/github.com/ava-labs/gecko/snow/engine/snowman/transitive.go:370 +0x36b
github.com/ava-labs/gecko/snow/engine/snowman.(*issuer).Update(...)
        /home/ava/go/src/github.com/ava-labs/gecko/snow/engine/snowman/issuer.go:43
github.com/ava-labs/gecko/snow/engine/snowman.(*issuer).Fulfill(0xc0031aec00, 0xc005dff980)
        /home/ava/go/src/github.com/ava-labs/gecko/snow/engine/snowman/issuer.go:22 +0xa8
github.com/ava-labs/gecko/snow/events.(*Blocker).Fulfill(0xc0006cf5b8, 0xc005dff980)
        /home/ava/go/src/github.com/ava-labs/gecko/snow/events/blocker.go:32 +0x161
github.com/ava-labs/gecko/snow/engine/snowman.(*Transitive).deliver(0xc0006cf340, 0x1167ec0, 0xc0002fb680)
        /home/ava/go/src/github.com/ava-labs/gecko/snow/engine/snowman/transitive.go:365 +0x2b2
github.com/ava-labs/gecko/snow/engine/snowman.(*issuer).Update(0xc0031aeed0)
        /home/ava/go/src/github.com/ava-labs/gecko/snow/engine/snowman/issuer.go:43 +0x61
github.com/ava-labs/gecko/snow/events.(*Blocker).Register(0xc0006cf5b8, 0x115e440, 0xc0031aeed0)
        /home/ava/go/src/github.com/ava-labs/gecko/snow/events/blocker.go:59 +0x289
github.com/ava-labs/gecko/snow/engine/snowman.(*Transitive).insert(0xc0006cf340, 0x1167ec0, 0xc0002fb680)
        /home/ava/go/src/github.com/ava-labs/gecko/snow/engine/snowman/transitive.go:272 +0x183
github.com/ava-labs/gecko/snow/engine/snowman.(*Transitive).insertFrom(0xc0006cf340, 0xc00340a7e0, 0x1167ec0, 0xc0002fb680, 0x1167ec0)
        /home/ava/go/src/github.com/ava-labs/gecko/snow/engine/snowman/transitive.go:231 +0xc2
github.com/ava-labs/gecko/snow/engine/snowman.(*Transitive).Put(0xc0006cf340, 0xc00340a7e0, 0x0, 0xc005f1fd40, 0xc0003b9548, 0x132, 0x132)
        /home/ava/go/src/github.com/ava-labs/gecko/snow/engine/snowman/transitive.go:88 +0x283
github.com/ava-labs/gecko/snow/networking/handler.(*Handler).dispatchMsg(0xc00079fd70, 0x8, 0xc00340a7e0, 0x0, 0xc005f1fd40, 0xc0003b9548, 0x132, 0x132, 0x0, 0x0, ...)
        /home/ava/go/src/github.com/ava-labs/gecko/snow/networking/handler/handler.go:83 +0x434
github.com/ava-labs/gecko/snow/networking/handler.(*Handler).Dispatch(0xc00079fd70)
        /home/ava/go/src/github.com/ava-labs/gecko/snow/networking/handler/handler.go:43 +0x2b3
github.com/ava-labs/gecko/utils/logging.(*Log).RecoverAndPanic(0xc00082cf00, 0xc000af41e0)
        /home/ava/go/src/github.com/ava-labs/gecko/utils/logging/log.go:254 +0x57
created by github.com/ava-labs/gecko/chains.(*manager).createSnowmanChain
        /home/ava/go/src/github.com/ava-labs/gecko/chains/manager.go:524 +0x740

Panic on verifying platform advanceTimeTx

Describe the bug
Node crashes with:


panic: runtime error: invalid memory address or nil pointer dereference [recovered]
        panic: runtime error: invalid memory address or nil pointer dereference
[signal SIGSEGV: segmentation violation code=0x1 addr=0x0 pc=0x962d36]

goroutine 134 [running]:
github.com/ava-labs/gecko/utils/logging.(*Log).StopOnPanic(0xc0007f1440)
        /home/adasri/go-workspace/src/github.com/ava-labs/gecko/utils/logging/log.go:249 +0x11d
panic(0xd3a7c0, 0x1914b50)
        /usr/local/go/src/runtime/panic.go:967 +0x166
github.com/ava-labs/gecko/database/versiondb.(*Database).Has(0x0, 0xc000370f20, 0x20, 0x20, 0xc0000ffe00, 0x0, 0x0)
        /home/adasri/go-workspace/src/github.com/ava-labs/gecko/database/versiondb/db.go:40 +0x46
github.com/ava-labs/gecko/vms/components/state.(*state).Get(0xc000033c30, 0x10f71e0, 0x0, 0xfffffffffffffffd, 0xc0000386a0, 0x10000000106e12c, 0xc0000f5418, 0x504612, 0xc0004f83b8)
        /home/adasri/go-workspace/src/github.com/ava-labs/gecko/vms/components/state/state.go:132 +0xc8
github.com/ava-labs/gecko/vms/components/state.(*state).GetTime(0xc000033c30, 0x10f71e0, 0x0, 0xc0000386a0, 0x14c5b85400e23200, 0x5ea90daa, 0xc0000f53b0, 0x4e3436, 0x4e2b60)
        /home/adasri/go-workspace/src/github.com/ava-labs/gecko/vms/components/state/state.go:197 +0x56
github.com/ava-labs/gecko/vms/platformvm.(*VM).getTimestamp(0xc000135200, 0x10f71e0, 0x0, 0xc0000f54a0, 0x4ed5a5, 0xc000140060, 0xc0004f8300, 0xc6)
        /home/adasri/go-workspace/src/github.com/ava-labs/gecko/vms/platformvm/state.go:188 +0x5c
github.com/ava-labs/gecko/vms/platformvm.(*advanceTimeTx).SemanticVerify(0xc001b82190, 0x10f71e0, 0x0, 0x7f7c600d27d0, 0xc000e1e690, 0x180000000097dd01, 0x4, 0xc0008ed3b0, 0xc0000f55a0)
        /home/adasri/go-workspace/src/github.com/ava-labs/gecko/vms/platformvm/advance_time_tx.go:55 +0x9c
github.com/ava-labs/gecko/vms/platformvm.(*ProposalBlock).Verify(0xc000f1c230, 0xc0000f5690, 0x1)
        /home/adasri/go-workspace/src/github.com/ava-labs/gecko/vms/platformvm/proposal_block.go:106 +0xa2
github.com/ava-labs/gecko/snow/engine/snowman.(*Transitive).deliver(0xc000270000, 0x10f1ec0, 0xc000f1c230)
        /home/adasri/go-workspace/src/github.com/ava-labs/gecko/snow/engine/snowman/transitive.go:350 +0x10b
github.com/ava-labs/gecko/snow/engine/snowman.(*issuer).Update(...)
        /home/adasri/go-workspace/src/github.com/ava-labs/gecko/snow/engine/snowman/issuer.go:43
github.com/ava-labs/gecko/snow/engine/snowman.(*issuer).Fulfill(0xc0004e8630, 0xc00051cc80)
        /home/adasri/go-workspace/src/github.com/ava-labs/gecko/snow/engine/snowman/issuer.go:22 +0xa8
github.com/ava-labs/gecko/snow/events.(*Blocker).Fulfill(0xc000270278, 0xc00051cc80)
        /home/adasri/go-workspace/src/github.com/ava-labs/gecko/snow/events/blocker.go:32 +0x161
github.com/ava-labs/gecko/snow/engine/snowman.(*Transitive).deliver(0xc000270000, 0x10f1ec0, 0xc000f1c310)
        /home/adasri/go-workspace/src/github.com/ava-labs/gecko/snow/engine/snowman/transitive.go:384 +0x36b
github.com/ava-labs/gecko/snow/engine/snowman.(*issuer).Update(...)
        /home/adasri/go-workspace/src/github.com/ava-labs/gecko/snow/engine/snowman/issuer.go:43
github.com/ava-labs/gecko/snow/engine/snowman.(*issuer).Fulfill(0xc0004e8810, 0xc000932780)
        /home/adasri/go-workspace/src/github.com/ava-labs/gecko/snow/engine/snowman/issuer.go:22 +0xa8
github.com/ava-labs/gecko/snow/events.(*Blocker).Fulfill(0xc000270278, 0xc000932780)
        /home/adasri/go-workspace/src/github.com/ava-labs/gecko/snow/events/blocker.go:32 +0x161
github.com/ava-labs/gecko/snow/engine/snowman.(*Transitive).deliver(0xc000270000, 0x10f1e00, 0xc000c00900)
        /home/adasri/go-workspace/src/github.com/ava-labs/gecko/snow/engine/snowman/transitive.go:379 +0x2b2
github.com/ava-labs/gecko/snow/engine/snowman.(*issuer).Update(0xc0004e8990)
        /home/adasri/go-workspace/src/github.com/ava-labs/gecko/snow/engine/snowman/issuer.go:43 +0x61
github.com/ava-labs/gecko/snow/events.(*Blocker).Register(0xc000270278, 0x10e8720, 0xc0004e8990)
        /home/adasri/go-workspace/src/github.com/ava-labs/gecko/snow/events/blocker.go:59 +0x286
github.com/ava-labs/gecko/snow/engine/snowman.(*Transitive).insert(0xc000270000, 0x10f1e00, 0xc000c00900)
        /home/adasri/go-workspace/src/github.com/ava-labs/gecko/snow/engine/snowman/transitive.go:286 +0x183
github.com/ava-labs/gecko/snow/engine/snowman.(*Transitive).insertFrom(0xc000270000, 0xc000498600, 0x10f1e00, 0xc000c00900, 0x10f1e00)
        /home/adasri/go-workspace/src/github.com/ava-labs/gecko/snow/engine/snowman/transitive.go:245 +0xc2
github.com/ava-labs/gecko/snow/engine/snowman.(*Transitive).Put(0xc000270000, 0xc000498600, 0x0, 0xc00062a180, 0xc0000301c8, 0x132, 0x132)
        /home/adasri/go-workspace/src/github.com/ava-labs/gecko/snow/engine/snowman/transitive.go:102 +0x277
github.com/ava-labs/gecko/snow/networking/handler.(*Handler).dispatchMsg(0xc000b897a0, 0x8, 0xc000498600, 0x0, 0xc00062a180, 0xc0000301c8, 0x132, 0x132, 0x0, 0x0, ...)
        /home/adasri/go-workspace/src/github.com/ava-labs/gecko/snow/networking/handler/handler.go:83 +0x42f
github.com/ava-labs/gecko/snow/networking/handler.(*Handler).Dispatch(0xc000b897a0)
        /home/adasri/go-workspace/src/github.com/ava-labs/gecko/snow/networking/handler/handler.go:43 +0x2b0

To Reproduce
Unknown. User says i left the node for some time (for tx to complete) and hit the api. then panic'ed.

Expected behavior
Node doesn't crash ;)

Screenshots
See log above

Operating System
Ubuntu 18.04

Additional context
Thanks @adasari for reporting this bug

By submitting this issue I agree to the Terms and Conditions of the Developer Accelerator Program.

Information Disclosure in ansible.cfg

Describe the bug
Looks like y'all have some IPs in the config file that are seemingly internal in scripts/ansible/ansible.cfg

Lines 4, 46, 50, 54, 58, and 78.

Suggestion: Build successful message while using scripts.sh

Suggestion: Build successful message while using scripts.sh

OS: Ubuntu 18.04

Explanation
Successful completion of the command ./scripts/build.sh, should generate a build successful message.
I checked the build folder and ava build is successful but with the warning, it gives a false build failure indication.

Currently it generates a warning related to a define _duk_debugger_attach

# github.com/ava-labs/go-ethereum/vendor/gopkg.in/olebedev/go-duktape.v3
In file included from _cgo_export.c:4:0:
debugger.go:22:13: warning: ‘_duk_debugger_attach’ defined but not used [-Wunused-function]

Comments in #14 also mentions the duktape warning and it is the last message in the build process which is a bit ambiguous. Hence their should be a build successful message if the ava binary is created.

Need error message for platform.importAVA when payerNonce missing or zero

Describe the bug
It is currently possible to use the "platform.importAVA" method without specifying the payerNonce parameter. This results in payerNonce set equal to zero by default, which the system will not allow, however a tx string is still passed back to the user which will not work with a subsequent "platform.issueTx" command.

To Reproduce (assuming fresh keystore)
curl -X POST --data '{ "jsonrpc": "2.0", "method": "platform.importAVA", "params": { "username": "XXX", "password": "YYY", "to":"P_ADDRESS" }, "id": 1 }' -H 'content-type:application/json;' 127.0.0.1:9650/ext/bc/P

Correct would have been:
curl -X POST --data '{ "jsonrpc": "2.0", "method": "platform.importAVA", "params": { "username": "XXX", "password": "YYY", "to":"P_ADDRESS", "payerNonce":1 }, "id": 1 }' -H 'content-type:application/json;' 127.0.0.1:9650/ext/bc/P

Expected behavior
The "platform.importAVA" method should have an error check and resulting error message to let the user know payerNonce has been forgotten or set to zero.

Operating System
Ubuntu 18.04.

Additional context
Issue was previously discussed with @StephenButtolph .

By submitting this issue I agree to the Terms and Conditions of the Developer Accelerator Program.

Crash on Exit

Describe the bug
Sometimes when gecko is exited, the node will crash due to an "unexpected return pc" I believe this is a bug with how we are using defer statements along with our use of cgo.

To Reproduce
Start a node and then Ctrl + C it after some time. Repeat until the node crashes.

Expected behavior
Ctrl + C should always gracefully exit.

Screenshots
Here is an example stacktrace.

unexpected fault address 0xbfe1062ad1
fatal error: fault
[signal SIGSEGV: segmentation violation code=0x1 addr=0xbfe1062ad1 pc=0x495fe5]

goroutine 167 [running]:
runtime.throw(0x11aa99d, 0x5)
        /home/stephen/.gvm/gos/go1.13/src/runtime/panic.go:774 +0x72 fp=0xc0004f5700 sp=0xc0004f56d0 pc=0x465142
runtime.sigpanic()
        /home/stephen/.gvm/gos/go1.13/src/runtime/signal_unix.go:401 +0x3de fp=0xc0004f5730 sp=0xc0004f5700 pc=0x47a95e
runtime.memmove(0xc0004f5780, 0xc0004f57b8, 0xffffffffe0b6d399)
        /home/stephen/.gvm/gos/go1.13/src/runtime/memmove_amd64.s:390 +0x485 fp=0xc0004f5738 sp=0xc0004f5730 pc=0x495fe5
runtime.deferreturn(0xc0004f5788)
        /home/stephen/.gvm/gos/go1.13/src/runtime/panic.go:525 +0xf7 fp=0xc0004f5780 sp=0xc0004f5738 pc=0x4647a7
runtime: unexpected return pc for github.com/ava-labs/gecko/utils/logging.(*Log).RecoverAndPanic called from 0x7fbde186fc65
stack: frame={sp:0xc0004f5780, fp:0xc0004f57d0} stack=[0xc0004f5000,0xc0004f5800)
000000c0004f5680:  000000c0004f56d0  00000000004664d8 <runtime.printstring+120>
000000c0004f5690:  0000000000465317 <runtime.fatalthrow+87>  000000c0004f56a0
000000c0004f56a0:  0000000000491530 <runtime.fatalthrow.func1+0>  000000c0000a0c00
000000c0004f56b0:  0000000000465142 <runtime.throw+114>  000000c0004f56d0
000000c0004f56c0:  000000c0004f56f0  0000000000465142 <runtime.throw+114>
000000c0004f56d0:  000000c0004f56d8  00000000004914b0 <runtime.throw.func1+0>
000000c0004f56e0:  00000000011aa99d  0000000000000005
000000c0004f56f0:  000000c0004f5720  000000000047a95e <runtime.sigpanic+990>
000000c0004f5700:  00000000011aa99d  0000000000000005
000000c0004f5710:  000000c0002982e8  000000bfe1062ad1
000000c0004f5720:  000000c0004f5770  0000000000495fe5 <runtime.memmove+1157>
000000c0004f5730:  00000000004647a7 <runtime.deferreturn+247>  000000c0004f5780
000000c0004f5740:  000000c0004f57b8  ffffffffe0b6d399
000000c0004f5750:  000000c0000a0c00  000000c0004f5770
000000c0004f5760:  000000c0004f5788  000000c000298240
000000c0004f5770:  000000c0004f57c0  0000000000800f8d <github.com/ava-labs/gecko/utils/logging.(*Log).RecoverAndPanic+93>
000000c0004f5780: <000000c0004f5788  00007fbde0b6d399
000000c0004f5790:  000000c0004f5780  00007fbde0b6d2cc
000000c0004f57a0:  00007fbde1a81b60  0000000000000001
000000c0004f57b0:  000000c0004f57d7  00007fbde1c836a0
000000c0004f57c0:  000000c0004f57f0 !00007fbde186fc65
000000c0004f57d0: >2a00000002a41c90  2f3ad2ca4a668400
000000c0004f57e0:  0000000002a41d70  00007fbde18700ed
000000c0004f57f0:  0000000002a41c90  0000000000000002
github.com/ava-labs/gecko/utils/logging.(*Log).RecoverAndPanic(0x2a00000002a41c90, 0x2f3ad2ca4a668400)
        /home/stephen/go/src/github.com/ava-labs/gecko/utils/logging/log.go:254 +0x5d fp=0xc0004f57d0 sp=0xc0004f5780 pc=0x800f8d
created by github.com/ava-labs/gecko/utils/logging.New
        /home/stephen/go/src/github.com/ava-labs/gecko/utils/logging/log.go:42 +0x14e

goroutine 1 [semacquire]:
sync.runtime_Semacquire(0xc000032500)
        /home/stephen/.gvm/gos/go1.13/src/runtime/sema.go:56 +0x42
sync.(*WaitGroup).Wait(0xc0000324f8)
        /home/stephen/.gvm/gos/go1.13/src/sync/waitgroup.go:130 +0x64
github.com/ava-labs/gecko/utils/logging.(*Log).Stop(0xc000032480)
        /home/stephen/go/src/github.com/ava-labs/gecko/utils/logging/log.go:119 +0x85
github.com/ava-labs/gecko/utils/logging.(*factory).Close(0xc00022f490)
        /home/stephen/go/src/github.com/ava-labs/gecko/utils/logging/factory.go:71 +0x63
main.main()
        /home/stephen/go/src/github.com/ava-labs/gecko/main/main.go:102 +0xa08

goroutine 8 [chan receive, 33 minutes]:
github.com/ava-labs/go-ethereum/core.(*txSenderCacher).cache(0xc000195510)
        /home/stephen/go/src/github.com/ava-labs/go-ethereum/core/tx_cacher.go:63 +0x97
created by github.com/ava-labs/go-ethereum/core.newTxSenderCacher
        /home/stephen/go/src/github.com/ava-labs/go-ethereum/core/tx_cacher.go:55 +0x9f

goroutine 9 [chan receive, 33 minutes]:
github.com/ava-labs/go-ethereum/core.(*txSenderCacher).cache(0xc000195510)
        /home/stephen/go/src/github.com/ava-labs/go-ethereum/core/tx_cacher.go:63 +0x97
created by github.com/ava-labs/go-ethereum/core.newTxSenderCacher
        /home/stephen/go/src/github.com/ava-labs/go-ethereum/core/tx_cacher.go:55 +0x9f

goroutine 10 [chan receive, 33 minutes]:
github.com/ava-labs/go-ethereum/core.(*txSenderCacher).cache(0xc000195510)
        /home/stephen/go/src/github.com/ava-labs/go-ethereum/core/tx_cacher.go:63 +0x97
created by github.com/ava-labs/go-ethereum/core.newTxSenderCacher
        /home/stephen/go/src/github.com/ava-labs/go-ethereum/core/tx_cacher.go:55 +0x9f

goroutine 11 [chan receive, 33 minutes]:
github.com/ava-labs/go-ethereum/core.(*txSenderCacher).cache(0xc000195510)
        /home/stephen/go/src/github.com/ava-labs/go-ethereum/core/tx_cacher.go:63 +0x97
created by github.com/ava-labs/go-ethereum/core.newTxSenderCacher
        /home/stephen/go/src/github.com/ava-labs/go-ethereum/core/tx_cacher.go:55 +0x9f

goroutine 12 [chan receive, 33 minutes]:
github.com/ava-labs/go-ethereum/core.(*txSenderCacher).cache(0xc000195510)
        /home/stephen/go/src/github.com/ava-labs/go-ethereum/core/tx_cacher.go:63 +0x97
created by github.com/ava-labs/go-ethereum/core.newTxSenderCacher
        /home/stephen/go/src/github.com/ava-labs/go-ethereum/core/tx_cacher.go:55 +0x9f

goroutine 13 [chan receive, 33 minutes]:
github.com/ava-labs/go-ethereum/core.(*txSenderCacher).cache(0xc000195510)
        /home/stephen/go/src/github.com/ava-labs/go-ethereum/core/tx_cacher.go:63 +0x97
created by github.com/ava-labs/go-ethereum/core.newTxSenderCacher
        /home/stephen/go/src/github.com/ava-labs/go-ethereum/core/tx_cacher.go:55 +0x9f

goroutine 14 [chan receive, 33 minutes]:
github.com/ava-labs/go-ethereum/core.(*txSenderCacher).cache(0xc000195510)
        /home/stephen/go/src/github.com/ava-labs/go-ethereum/core/tx_cacher.go:63 +0x97
created by github.com/ava-labs/go-ethereum/core.newTxSenderCacher
        /home/stephen/go/src/github.com/ava-labs/go-ethereum/core/tx_cacher.go:55 +0x9f

goroutine 15 [chan receive, 33 minutes]:
github.com/ava-labs/go-ethereum/core.(*txSenderCacher).cache(0xc000195510)
        /home/stephen/go/src/github.com/ava-labs/go-ethereum/core/tx_cacher.go:63 +0x97
created by github.com/ava-labs/go-ethereum/core.newTxSenderCacher
        /home/stephen/go/src/github.com/ava-labs/go-ethereum/core/tx_cacher.go:55 +0x9f

goroutine 16 [chan receive, 33 minutes]:
github.com/ava-labs/coreth/core.(*txSenderCacher).cache(0xc000195770)
        /home/stephen/go/src/github.com/ava-labs/coreth/core/tx_cacher.go:63 +0x97
created by github.com/ava-labs/coreth/core.newTxSenderCacher
        /home/stephen/go/src/github.com/ava-labs/coreth/core/tx_cacher.go:55 +0x9f

goroutine 34 [chan receive, 33 minutes]:
github.com/ava-labs/coreth/core.(*txSenderCacher).cache(0xc000195770)
        /home/stephen/go/src/github.com/ava-labs/coreth/core/tx_cacher.go:63 +0x97
created by github.com/ava-labs/coreth/core.newTxSenderCacher
        /home/stephen/go/src/github.com/ava-labs/coreth/core/tx_cacher.go:55 +0x9f

goroutine 35 [chan receive, 33 minutes]:
github.com/ava-labs/coreth/core.(*txSenderCacher).cache(0xc000195770)
        /home/stephen/go/src/github.com/ava-labs/coreth/core/tx_cacher.go:63 +0x97
created by github.com/ava-labs/coreth/core.newTxSenderCacher
        /home/stephen/go/src/github.com/ava-labs/coreth/core/tx_cacher.go:55 +0x9f

goroutine 36 [chan receive, 33 minutes]:
github.com/ava-labs/coreth/core.(*txSenderCacher).cache(0xc000195770)
        /home/stephen/go/src/github.com/ava-labs/coreth/core/tx_cacher.go:63 +0x97
created by github.com/ava-labs/coreth/core.newTxSenderCacher
        /home/stephen/go/src/github.com/ava-labs/coreth/core/tx_cacher.go:55 +0x9f

goroutine 37 [chan receive, 33 minutes]:
github.com/ava-labs/coreth/core.(*txSenderCacher).cache(0xc000195770)
        /home/stephen/go/src/github.com/ava-labs/coreth/core/tx_cacher.go:63 +0x97
created by github.com/ava-labs/coreth/core.newTxSenderCacher
        /home/stephen/go/src/github.com/ava-labs/coreth/core/tx_cacher.go:55 +0x9f

goroutine 38 [chan receive, 33 minutes]:
github.com/ava-labs/coreth/core.(*txSenderCacher).cache(0xc000195770)
        /home/stephen/go/src/github.com/ava-labs/coreth/core/tx_cacher.go:63 +0x97
created by github.com/ava-labs/coreth/core.newTxSenderCacher
        /home/stephen/go/src/github.com/ava-labs/coreth/core/tx_cacher.go:55 +0x9f

goroutine 39 [chan receive, 33 minutes]:
github.com/ava-labs/coreth/core.(*txSenderCacher).cache(0xc000195770)
        /home/stephen/go/src/github.com/ava-labs/coreth/core/tx_cacher.go:63 +0x97
created by github.com/ava-labs/coreth/core.newTxSenderCacher
        /home/stephen/go/src/github.com/ava-labs/coreth/core/tx_cacher.go:55 +0x9f

goroutine 40 [chan receive, 33 minutes]:
github.com/ava-labs/coreth/core.(*txSenderCacher).cache(0xc000195770)
        /home/stephen/go/src/github.com/ava-labs/coreth/core/tx_cacher.go:63 +0x97
created by github.com/ava-labs/coreth/core.newTxSenderCacher
        /home/stephen/go/src/github.com/ava-labs/coreth/core/tx_cacher.go:55 +0x9f

goroutine 41 [chan receive, 33 minutes]:
github.com/ava-labs/go-ethereum/vendor/github.com/rjeczalik/notify.(*nonrecursiveTree).dispatch(0xc000095440, 0xc000095380)
        /home/stephen/go/src/github.com/ava-labs/go-ethereum/vendor/github.com/rjeczalik/notify/tree_nonrecursive.go:36 +0xb6
created by github.com/ava-labs/go-ethereum/vendor/github.com/rjeczalik/notify.newNonrecursiveTree
        /home/stephen/go/src/github.com/ava-labs/go-ethereum/vendor/github.com/rjeczalik/notify/tree_nonrecursive.go:29 +0xdc

goroutine 42 [chan receive, 33 minutes]:
github.com/ava-labs/go-ethereum/vendor/github.com/rjeczalik/notify.(*nonrecursiveTree).internal(0xc000095440, 0xc0000953e0)
        /home/stephen/go/src/github.com/ava-labs/go-ethereum/vendor/github.com/rjeczalik/notify/tree_nonrecursive.go:81 +0x58
created by github.com/ava-labs/go-ethereum/vendor/github.com/rjeczalik/notify.newNonrecursiveTree
        /home/stephen/go/src/github.com/ava-labs/go-ethereum/vendor/github.com/rjeczalik/notify/tree_nonrecursive.go:30 +0x108

goroutine 43 [chan receive]:
github.com/ava-labs/go-ethereum/metrics.(*meterArbiter).tick(0x1eb4420)
        /home/stephen/go/src/github.com/ava-labs/go-ethereum/metrics/meter.go:289 +0x78
created by github.com/ava-labs/go-ethereum/metrics.NewMeterForced
        /home/stephen/go/src/github.com/ava-labs/go-ethereum/metrics/meter.go:70 +0x104

goroutine 44 [select]:
github.com/ava-labs/go-ethereum/consensus/ethash.(*Ethash).remote(0xc00019e1c0, 0x0, 0x0, 0x0, 0x0)
        /home/stephen/go/src/github.com/ava-labs/go-ethereum/consensus/ethash/sealer.go:307 +0x532
created by github.com/ava-labs/go-ethereum/consensus/ethash.New
        /home/stephen/go/src/github.com/ava-labs/go-ethereum/consensus/ethash/ethash.go:496 +0x35c

goroutine 103 [IO wait, 29 minutes]:
internal/poll.runtime_pollWait(0x7fbde1bf7c98, 0x72, 0x0)
        /home/stephen/.gvm/gos/go1.13/src/runtime/netpoll.go:184 +0x55
internal/poll.(*pollDesc).wait(0xc000294098, 0x72, 0x0, 0x0, 0x11acca9)
        /home/stephen/.gvm/gos/go1.13/src/internal/poll/fd_poll_runtime.go:87 +0x45
internal/poll.(*pollDesc).waitRead(...)
        /home/stephen/.gvm/gos/go1.13/src/internal/poll/fd_poll_runtime.go:92
internal/poll.(*FD).Accept(0xc000294080, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0)
        /home/stephen/.gvm/gos/go1.13/src/internal/poll/fd_unix.go:384 +0x1f8
net.(*netFD).accept(0xc000294080, 0xc00028dc60, 0x778604, 0xc000292180)
        /home/stephen/.gvm/gos/go1.13/src/net/fd_unix.go:238 +0x42
net.(*TCPListener).accept(0xc0004cc0a0, 0x5e628260, 0xc00028dc60, 0x4f5ce6)
        /home/stephen/.gvm/gos/go1.13/src/net/tcpsock_posix.go:139 +0x32
net.(*TCPListener).Accept(0xc0004cc0a0, 0xc00028dcb0, 0x18, 0xc0002ca000, 0x777b1e)
        /home/stephen/.gvm/gos/go1.13/src/net/tcpsock.go:261 +0x47
net/http.(*Server).Serve(0xc0002920e0, 0x13f6360, 0xc0004cc0a0, 0x0, 0x0)
        /home/stephen/.gvm/gos/go1.13/src/net/http/server.go:2896 +0x286
net/http.(*Server).ListenAndServe(0xc0002920e0, 0xc0002920e0, 0xc0004dab80)
        /home/stephen/.gvm/gos/go1.13/src/net/http/server.go:2825 +0xb7
net/http.ListenAndServe(...)
        /home/stephen/.gvm/gos/go1.13/src/net/http/server.go:3080
github.com/ava-labs/gecko/api.(*Server).Dispatch(0x1eb50e8, 0x11e806b, 0x52)
        /home/stephen/go/src/github.com/ava-labs/gecko/api/server.go:48 +0x118
github.com/ava-labs/gecko/node.(*Node).initAPIServer.func1()
        /home/stephen/go/src/github.com/ava-labs/gecko/node/node.go:380 +0x11b
github.com/ava-labs/gecko/utils/logging.(*Log).RecoverAndPanic(0xc000032240, 0xc00056d7a0)
        /home/stephen/go/src/github.com/ava-labs/gecko/utils/logging/log.go:254 +0x57
created by github.com/ava-labs/gecko/node.(*Node).initAPIServer
        /home/stephen/go/src/github.com/ava-labs/gecko/node/node.go:377 +0x151

goroutine 133 [select]:
github.com/ava-labs/gecko/utils/timer.(*Timer).Dispatch(0xc0005a6540)
        /home/stephen/go/src/github.com/ava-labs/gecko/utils/timer/timer.go:90 +0x1e1
github.com/ava-labs/gecko/utils/timer.(*TimeoutManager).Dispatch(...)
        /home/stephen/go/src/github.com/ava-labs/gecko/utils/timer/timeout_manager.go:40
github.com/ava-labs/gecko/snow/networking/timeout.(*Manager).Dispatch(...)
        /home/stephen/go/src/github.com/ava-labs/gecko/snow/networking/timeout/manager.go:28
github.com/ava-labs/gecko/utils/logging.(*Log).RecoverAndPanic(0xc000032240, 0xc0005a8b10)
        /home/stephen/go/src/github.com/ava-labs/gecko/utils/logging/log.go:254 +0x57
created by github.com/ava-labs/gecko/chains.New
        /home/stephen/go/src/github.com/ava-labs/gecko/chains/manager.go:138 +0xae

goroutine 168 [select, 33 minutes]:
github.com/ava-labs/go-ethereum/accounts/keystore.(*watcher).loop(0xc0002bc200)
        /home/stephen/go/src/github.com/ava-labs/go-ethereum/accounts/keystore/watch.go:94 +0x50d
created by github.com/ava-labs/go-ethereum/accounts/keystore.(*watcher).start
        /home/stephen/go/src/github.com/ava-labs/go-ethereum/accounts/keystore/watch.go:52 +0x59

goroutine 86 [syscall]:
syscall.Syscall6(0xe8, 0x1f, 0xc0004f5f9c, 0x1, 0xffffffffffffffff, 0x0, 0x0, 0xffffffffffffffff, 0x0, 0x4)
        /home/stephen/.gvm/gos/go1.13/src/syscall/asm_linux_amd64.s:44 +0x5
github.com/ava-labs/go-ethereum/vendor/golang.org/x/sys/unix.EpollWait(0x1f, 0xc0004f5f9c, 0x1, 0x1, 0xffffffffffffffff, 0xffffffffffffffff, 0x13dc9c0, 0xc01d312000)
        /home/stephen/go/src/github.com/ava-labs/go-ethereum/vendor/golang.org/x/sys/unix/zsyscall_linux_amd64.go:1689 +0x72
github.com/ava-labs/go-ethereum/vendor/github.com/rjeczalik/notify.(*inotify).loop(0xc0001e4000, 0xc00026e180)
        /home/stephen/go/src/github.com/ava-labs/go-ethereum/vendor/github.com/rjeczalik/notify/watcher_inotify.go:194 +0x77
created by github.com/ava-labs/go-ethereum/vendor/github.com/rjeczalik/notify.(*inotify).lazyinit
        /home/stephen/go/src/github.com/ava-labs/go-ethereum/vendor/github.com/rjeczalik/notify/watcher_inotify.go:134 +0x15b

goroutine 87 [chan receive, 33 minutes]:
github.com/ava-labs/go-ethereum/vendor/github.com/rjeczalik/notify.(*inotify).send(0xc0001e4000, 0xc00026e180)
        /home/stephen/go/src/github.com/ava-labs/go-ethereum/vendor/github.com/rjeczalik/notify/watcher_inotify.go:254 +0xab
created by github.com/ava-labs/go-ethereum/vendor/github.com/rjeczalik/notify.(*inotify).lazyinit
        /home/stephen/go/src/github.com/ava-labs/go-ethereum/vendor/github.com/rjeczalik/notify/watcher_inotify.go:137 +0x1b4

goroutine 88 [chan receive, 33 minutes]:
github.com/ava-labs/go-ethereum/vendor/github.com/rjeczalik/notify.(*inotify).send(0xc0001e4000, 0xc00026e180)
        /home/stephen/go/src/github.com/ava-labs/go-ethereum/vendor/github.com/rjeczalik/notify/watcher_inotify.go:254 +0xab
created by github.com/ava-labs/go-ethereum/vendor/github.com/rjeczalik/notify.(*inotify).lazyinit
        /home/stephen/go/src/github.com/ava-labs/go-ethereum/vendor/github.com/rjeczalik/notify/watcher_inotify.go:137 +0x1b4

goroutine 169 [select]:
github.com/ava-labs/go-ethereum/accounts/keystore.(*KeyStore).updater(0xc0002b60f0)
        /home/stephen/go/src/github.com/ava-labs/go-ethereum/accounts/keystore/keystore.go:205 +0xcc
created by github.com/ava-labs/go-ethereum/accounts/keystore.(*KeyStore).Subscribe
        /home/stephen/go/src/github.com/ava-labs/go-ethereum/accounts/keystore/keystore.go:192 +0x142

goroutine 170 [select, 33 minutes]:
github.com/ava-labs/go-ethereum/accounts.(*Manager).update(0xc00019e2a0)
        /home/stephen/go/src/github.com/ava-labs/go-ethereum/accounts/manager.go:111 +0x1b8
created by github.com/ava-labs/go-ethereum/accounts.NewManager
        /home/stephen/go/src/github.com/ava-labs/go-ethereum/accounts/manager.go:79 +0x4be

goroutine 182 [select, 33 minutes]:
github.com/ava-labs/coreth/miner.(*worker).newWorkLoop(0xc00011dc00, 0xb2d05e00)
        /home/stephen/go/src/github.com/ava-labs/coreth/miner/worker.go:371 +0x283
created by github.com/ava-labs/coreth/miner.newWorker
        /home/stephen/go/src/github.com/ava-labs/coreth/miner/worker.go:237 +0x579

goroutine 183 [select, 33 minutes]:
github.com/ava-labs/coreth/miner.(*worker).resultLoop(0xc00011dc00)
        /home/stephen/go/src/github.com/ava-labs/coreth/miner/worker.go:596 +0xdd
created by github.com/ava-labs/coreth/miner.newWorker
        /home/stephen/go/src/github.com/ava-labs/coreth/miner/worker.go:238 +0x59b

goroutine 184 [select, 33 minutes]:
github.com/ava-labs/coreth/miner.(*worker).taskLoop(0xc00011dc00)
        /home/stephen/go/src/github.com/ava-labs/coreth/miner/worker.go:554 +0xf2
created by github.com/ava-labs/coreth/miner.newWorker
        /home/stephen/go/src/github.com/ava-labs/coreth/miner/worker.go:239 +0x5bd

goroutine 185 [select, 33 minutes]:
github.com/ava-labs/gecko/utils/timer.(*Timer).Dispatch(0xc01065b380)
        /home/stephen/go/src/github.com/ava-labs/gecko/utils/timer/timer.go:90 +0x1e1
github.com/ava-labs/gecko/utils/logging.(*Log).RecoverAndPanic(0xc000298240, 0xc00056c4b0)
        /home/stephen/go/src/github.com/ava-labs/gecko/utils/logging/log.go:254 +0x57
created by github.com/ava-labs/gecko/vms/evm.(*VM).Initialize
        /home/stephen/go/src/github.com/ava-labs/gecko/vms/evm/vm.go:192 +0x5c8

goroutine 186 [chan receive, 33 minutes]:
github.com/ava-labs/gecko/vms/evm.(*VM).Initialize.func6()
        /home/stephen/go/src/github.com/ava-labs/gecko/vms/evm/vm.go:203 +0x58
github.com/ava-labs/gecko/utils/logging.(*Log).RecoverAndPanic(0xc000298240, 0xc00056c4d0)
        /home/stephen/go/src/github.com/ava-labs/gecko/utils/logging/log.go:254 +0x57
created by github.com/ava-labs/gecko/vms/evm.(*VM).Initialize
        /home/stephen/go/src/github.com/ava-labs/gecko/vms/evm/vm.go:200 +0x6d1

goroutine 187 [select]:
github.com/ava-labs/gecko/vms/evm.(*VM).Initialize.func7()
        /home/stephen/go/src/github.com/ava-labs/gecko/vms/evm/vm.go:241 +0xf1
github.com/ava-labs/gecko/utils/logging.(*Log).RecoverAndPanic(0xc000298240, 0xc00056d190)
        /home/stephen/go/src/github.com/ava-labs/gecko/utils/logging/log.go:254 +0x57
created by github.com/ava-labs/gecko/vms/evm.(*VM).Initialize
        /home/stephen/go/src/github.com/ava-labs/gecko/vms/evm/vm.go:238 +0x9a0

goroutine 196 [runnable]:
runtime.goparkunlock(...)
        /home/stephen/.gvm/gos/go1.13/src/runtime/proc.go:310
sync.runtime_notifyListWait(0xc0005aa3d0, 0x0)
        /home/stephen/.gvm/gos/go1.13/src/runtime/sema.go:510 +0xf8
sync.(*Cond).Wait(0xc0005aa3c0)
        /home/stephen/.gvm/gos/go1.13/src/sync/cond.go:56 +0x9d
github.com/ava-labs/gecko/utils/logging.(*Log).run(0xc000032480)
        /home/stephen/go/src/github.com/ava-labs/gecko/utils/logging/log.go:68 +0x313
github.com/ava-labs/gecko/utils/logging.(*Log).RecoverAndPanic(0xc000032480, 0xc00056d300)
        /home/stephen/go/src/github.com/ava-labs/gecko/utils/logging/log.go:254 +0x57
created by github.com/ava-labs/gecko/utils/logging.New
        /home/stephen/go/src/github.com/ava-labs/gecko/utils/logging/log.go:42 +0x14e

goroutine 198 [chan receive, 3 minutes]:
github.com/ava-labs/coreth/eth/filters.(*PublicFilterAPI).timeoutLoop(0xc0106575e0)
        /home/stephen/go/src/github.com/ava-labs/coreth/eth/filters/api.go:83 +0x131
created by github.com/ava-labs/coreth/eth/filters.NewPublicFilterAPI
        /home/stephen/go/src/github.com/ava-labs/coreth/eth/filters/api.go:73 +0x149

goroutine 199 [sync.Cond.Wait]:
runtime.goparkunlock(...)
        /home/stephen/.gvm/gos/go1.13/src/runtime/proc.go:310
sync.runtime_notifyListWait(0xc0005aaad0, 0x14)
        /home/stephen/.gvm/gos/go1.13/src/runtime/sema.go:510 +0xf8
sync.(*Cond).Wait(0xc0005aaac0)
        /home/stephen/.gvm/gos/go1.13/src/sync/cond.go:56 +0x9d
github.com/ava-labs/gecko/utils/logging.(*Log).run(0xc000032540)
        /home/stephen/go/src/github.com/ava-labs/gecko/utils/logging/log.go:68 +0x313
github.com/ava-labs/gecko/utils/logging.(*Log).RecoverAndPanic(0xc000032540, 0xc0005a94a0)
        /home/stephen/go/src/github.com/ava-labs/gecko/utils/logging/log.go:254 +0x57
created by github.com/ava-labs/gecko/utils/logging.New
        /home/stephen/go/src/github.com/ava-labs/gecko/utils/logging/log.go:42 +0x14e

goroutine 213 [sync.Cond.Wait, 33 minutes]:
runtime.goparkunlock(...)
        /home/stephen/.gvm/gos/go1.13/src/runtime/proc.go:310
sync.runtime_notifyListWait(0xc0005ab6d0, 0x0)
        /home/stephen/.gvm/gos/go1.13/src/runtime/sema.go:510 +0xf8
sync.(*Cond).Wait(0xc0005ab6c0)
        /home/stephen/.gvm/gos/go1.13/src/sync/cond.go:56 +0x9d
github.com/ava-labs/gecko/utils/logging.(*Log).run(0xc000032600)
        /home/stephen/go/src/github.com/ava-labs/gecko/utils/logging/log.go:68 +0x313
github.com/ava-labs/gecko/utils/logging.(*Log).RecoverAndPanic(0xc000032600, 0xc0005a97b0)
        /home/stephen/go/src/github.com/ava-labs/gecko/utils/logging/log.go:254 +0x57
created by github.com/ava-labs/gecko/utils/logging.New
        /home/stephen/go/src/github.com/ava-labs/gecko/utils/logging/log.go:42 +0x14e

goroutine 214 [sync.Cond.Wait]:
runtime.goparkunlock(...)
        /home/stephen/.gvm/gos/go1.13/src/runtime/proc.go:310
sync.runtime_notifyListWait(0xc0005ab890, 0x16)
        /home/stephen/.gvm/gos/go1.13/src/runtime/sema.go:510 +0xf8
sync.(*Cond).Wait(0xc0005ab880)
        /home/stephen/.gvm/gos/go1.13/src/sync/cond.go:56 +0x9d
github.com/ava-labs/gecko/utils/logging.(*Log).run(0xc000032780)
        /home/stephen/go/src/github.com/ava-labs/gecko/utils/logging/log.go:68 +0x313
github.com/ava-labs/gecko/utils/logging.(*Log).RecoverAndPanic(0xc000032780, 0xc0005a9c50)
        /home/stephen/go/src/github.com/ava-labs/gecko/utils/logging/log.go:254 +0x57
created by github.com/ava-labs/gecko/utils/logging.New
        /home/stephen/go/src/github.com/ava-labs/gecko/utils/logging/log.go:42 +0x14e

goroutine 224 [sync.Cond.Wait, 33 minutes]:
runtime.goparkunlock(...)
        /home/stephen/.gvm/gos/go1.13/src/runtime/proc.go:310
sync.runtime_notifyListWait(0xc0005abc50, 0x0)
        /home/stephen/.gvm/gos/go1.13/src/runtime/sema.go:510 +0xf8
sync.(*Cond).Wait(0xc0005abc40)
        /home/stephen/.gvm/gos/go1.13/src/sync/cond.go:56 +0x9d
github.com/ava-labs/gecko/utils/logging.(*Log).run(0xc000032a80)
        /home/stephen/go/src/github.com/ava-labs/gecko/utils/logging/log.go:68 +0x313
github.com/ava-labs/gecko/utils/logging.(*Log).RecoverAndPanic(0xc000032a80, 0xc0005a9df0)
        /home/stephen/go/src/github.com/ava-labs/gecko/utils/logging/log.go:254 +0x57
created by github.com/ava-labs/gecko/utils/logging.New
        /home/stephen/go/src/github.com/ava-labs/gecko/utils/logging/log.go:42 +0x14e

goroutine 225 [sync.Cond.Wait]:
runtime.goparkunlock(...)
        /home/stephen/.gvm/gos/go1.13/src/runtime/proc.go:310
sync.runtime_notifyListWait(0xc0005abdd0, 0x19)
        /home/stephen/.gvm/gos/go1.13/src/runtime/sema.go:510 +0xf8
sync.(*Cond).Wait(0xc0005abdc0)
        /home/stephen/.gvm/gos/go1.13/src/sync/cond.go:56 +0x9d
github.com/ava-labs/gecko/utils/logging.(*Log).run(0xc000032b40)
        /home/stephen/go/src/github.com/ava-labs/gecko/utils/logging/log.go:68 +0x313
github.com/ava-labs/gecko/utils/logging.(*Log).RecoverAndPanic(0xc000032b40, 0xc0002286d0)
        /home/stephen/go/src/github.com/ava-labs/gecko/utils/logging/log.go:254 +0x57
created by github.com/ava-labs/gecko/utils/logging.New
        /home/stephen/go/src/github.com/ava-labs/gecko/utils/logging/log.go:42 +0x14e

goroutine 234 [sync.Cond.Wait, 33 minutes]:
runtime.goparkunlock(...)
        /home/stephen/.gvm/gos/go1.13/src/runtime/proc.go:310
sync.runtime_notifyListWait(0xc000576310, 0x0)
        /home/stephen/.gvm/gos/go1.13/src/runtime/sema.go:510 +0xf8
sync.(*Cond).Wait(0xc000576300)
        /home/stephen/.gvm/gos/go1.13/src/sync/cond.go:56 +0x9d
github.com/ava-labs/gecko/utils/logging.(*Log).run(0xc000032c00)
        /home/stephen/go/src/github.com/ava-labs/gecko/utils/logging/log.go:68 +0x313
github.com/ava-labs/gecko/utils/logging.(*Log).RecoverAndPanic(0xc000032c00, 0xc0002288f0)
        /home/stephen/go/src/github.com/ava-labs/gecko/utils/logging/log.go:254 +0x57
created by github.com/ava-labs/gecko/utils/logging.New
        /home/stephen/go/src/github.com/ava-labs/gecko/utils/logging/log.go:42 +0x14e

goroutine 78 [IO wait, 6 minutes]:
internal/poll.runtime_pollWait(0x7fbde1bf7f08, 0x72, 0xffffffffffffffff)
        /home/stephen/.gvm/gos/go1.13/src/runtime/netpoll.go:184 +0x55
internal/poll.(*pollDesc).wait(0xc0005c0398, 0x72, 0x1000, 0x1000, 0xffffffffffffffff)
        /home/stephen/.gvm/gos/go1.13/src/internal/poll/fd_poll_runtime.go:87 +0x45
internal/poll.(*pollDesc).waitRead(...)
        /home/stephen/.gvm/gos/go1.13/src/internal/poll/fd_poll_runtime.go:92
internal/poll.(*FD).Read(0xc0005c0380, 0xc0117c1000, 0x1000, 0x1000, 0x0, 0x0, 0x0)
        /home/stephen/.gvm/gos/go1.13/src/internal/poll/fd_unix.go:169 +0x1cf
net.(*netFD).Read(0xc0005c0380, 0xc0117c1000, 0x1000, 0x1000, 0xc01739d9e8, 0x4fe16d, 0xc0005c0380)
        /home/stephen/.gvm/gos/go1.13/src/net/fd_unix.go:202 +0x4f
net.(*conn).Read(0xc0004d0090, 0xc0117c1000, 0x1000, 0x1000, 0x0, 0x0, 0x0)
        /home/stephen/.gvm/gos/go1.13/src/net/net.go:184 +0x68
net/http.(*connReader).Read(0xc0118baf90, 0xc0117c1000, 0x1000, 0x1000, 0x0, 0x0, 0x0)
        /home/stephen/.gvm/gos/go1.13/src/net/http/server.go:785 +0xf4
bufio.(*Reader).fill(0xc0005a48a0)
        /home/stephen/.gvm/gos/go1.13/src/bufio/bufio.go:100 +0x103
bufio.(*Reader).Peek(0xc0005a48a0, 0x4, 0x0, 0x0, 0x0, 0x0, 0xc01739dad0)
        /home/stephen/.gvm/gos/go1.13/src/bufio/bufio.go:138 +0x4f
net/http.(*conn).readRequest(0xc01198e000, 0x13fbbe0, 0xc000324c40, 0x0, 0x0, 0x0)
        /home/stephen/.gvm/gos/go1.13/src/net/http/server.go:962 +0xb3b
net/http.(*conn).serve(0xc01198e000, 0x13fbbe0, 0xc000324c40)
        /home/stephen/.gvm/gos/go1.13/src/net/http/server.go:1817 +0x6d4
created by net/http.(*Server).Serve
        /home/stephen/.gvm/gos/go1.13/src/net/http/server.go:2927 +0x38e

Operating System
This has only been replicated on Ubuntu 18.04.

Configurable Throughput vs Latency Tradeoff

In both Snowman and Avalanche, the usage of pipelining consensus means there must be a repolling mechanism to flush pending operations during low network usage. Ideally, this mechanism should not impact throughput during times of high network utilization, while maintaining low latencies with low network usage.

In Snowman repolling should be done until there are no undecided blocks. In Avalanche repolling should be done until there are no undecided virtuous transactions. Virtuous means there are no known conflicting transactions.

Snowman does not utilize no-op blocks. However, Avalanche currently uses no-op vertices, see #7.

The current repolling mechanism, in Snowman and Avalanche, issues a repoll for pending operations if there are no pending polls. This ensures that there is at least 1 poll making progress toward finalizing pending operations. This should be made configurable so that there are at least concurrentRepolls polls making progress toward finalizing pending operations. This should probably get placed into the Snowball Parameters with the validity condition being 0 < concurrentRepolls <= BetaRogue. This change would also need to add a new argument to gecko --snow-concurrent-repolls. To replicate the current state of gecko, the value of this parameter could be set to 1.

macOS build issue `vms/rpcchainvm/ghttp/ghttpproto/ghttp.pb.go:706:7: undefined: grpc.ClientConnInterface`

$ ./scripts/build.sh 
Updating Homebrew...
==> Auto-updated Homebrew!
Updated 1 tap (homebrew/core).
==> Updated Formulae
aws-cdk         cypher-shell    davmail         jetty-runner    plantuml

Warning: determinant/salticidae/salticidae 0.1.1 is already installed and up-to-date
To reinstall 0.1.1, run `brew reinstall salticidae`
/Users/gubatron/go/src/github.com/ava-labs/gecko
/Users/gubatron/go/src/github.com/ava-labs/gecko
/Users/gubatron/go/src/github.com/ava-labs/gecko
# github.com/ava-labs/gecko/vms/rpcchainvm/ghttp/ghttpproto
vms/rpcchainvm/ghttp/ghttpproto/ghttp.pb.go:706:7: undefined: grpc.ClientConnInterface
vms/rpcchainvm/ghttp/ghttpproto/ghttp.pb.go:710:11: undefined: grpc.SupportPackageIsVersion6
vms/rpcchainvm/ghttp/ghttpproto/ghttp.pb.go:720:5: undefined: grpc.ClientConnInterface
vms/rpcchainvm/ghttp/ghttpproto/ghttp.pb.go:723:23: undefined: grpc.ClientConnInterface
# github.com/ava-labs/gecko/vms/rpcchainvm/ghttp/gresponsewriter/gresponsewriterproto
vms/rpcchainvm/ghttp/gresponsewriter/gresponsewriterproto/gresponsewriter.pb.go:465:7: undefined: grpc.ClientConnInterface
vms/rpcchainvm/ghttp/gresponsewriter/gresponsewriterproto/gresponsewriter.pb.go:469:11: undefined: grpc.SupportPackageIsVersion6
vms/rpcchainvm/ghttp/gresponsewriter/gresponsewriterproto/gresponsewriter.pb.go:482:5: undefined: grpc.ClientConnInterface
vms/rpcchainvm/ghttp/gresponsewriter/gresponsewriterproto/gresponsewriter.pb.go:485:25: undefined: grpc.ClientConnInterface
# github.com/ava-labs/gecko/vms/rpcchainvm/ghttp/gwriter/gwriterproto
vms/rpcchainvm/ghttp/gwriter/gwriterproto/gwriter.pb.go:145:7: undefined: grpc.ClientConnInterface
vms/rpcchainvm/ghttp/gwriter/gwriterproto/gwriter.pb.go:149:11: undefined: grpc.SupportPackageIsVersion6
vms/rpcchainvm/ghttp/gwriter/gwriterproto/gwriter.pb.go:159:5: undefined: grpc.ClientConnInterface
vms/rpcchainvm/ghttp/gwriter/gwriterproto/gwriter.pb.go:162:25: undefined: grpc.ClientConnInterface
# github.com/ava-labs/gecko/vms/rpcchainvm/vmproto
vms/rpcchainvm/vmproto/vm.pb.go:997:7: undefined: grpc.ClientConnInterface
vms/rpcchainvm/vmproto/vm.pb.go:1001:11: undefined: grpc.SupportPackageIsVersion6
vms/rpcchainvm/vmproto/vm.pb.go:1021:5: undefined: grpc.ClientConnInterface
vms/rpcchainvm/vmproto/vm.pb.go:1024:21: undefined: grpc.ClientConnInterface
# github.com/ava-labs/gecko/vms/rpcchainvm/ghttp/greader/greaderproto
vms/rpcchainvm/ghttp/greader/greaderproto/greader.pb.go:145:7: undefined: grpc.ClientConnInterface
vms/rpcchainvm/ghttp/greader/greaderproto/greader.pb.go:149:11: undefined: grpc.SupportPackageIsVersion6
vms/rpcchainvm/ghttp/greader/greaderproto/greader.pb.go:159:5: undefined: grpc.ClientConnInterface
vms/rpcchainvm/ghttp/greader/greaderproto/greader.pb.go:162:25: undefined: grpc.ClientConnInterface
# github.com/ava-labs/gecko/vms/rpcchainvm/messenger/messengerproto
vms/rpcchainvm/messenger/messengerproto/messenger.pb.go:118:7: undefined: grpc.ClientConnInterface
vms/rpcchainvm/messenger/messengerproto/messenger.pb.go:122:11: undefined: grpc.SupportPackageIsVersion6
vms/rpcchainvm/messenger/messengerproto/messenger.pb.go:132:5: undefined: grpc.ClientConnInterface
vms/rpcchainvm/messenger/messengerproto/messenger.pb.go:135:28: undefined: grpc.ClientConnInterface
# github.com/ava-labs/gecko/database/rpcdb/rpcdbproto
database/rpcdb/rpcdbproto/rpcdb.pb.go:1055:7: undefined: grpc.ClientConnInterface
database/rpcdb/rpcdbproto/rpcdb.pb.go:1059:11: undefined: grpc.SupportPackageIsVersion6
database/rpcdb/rpcdbproto/rpcdb.pb.go:1080:5: undefined: grpc.ClientConnInterface
database/rpcdb/rpcdbproto/rpcdb.pb.go:1083:27: undefined: grpc.ClientConnInterface
# github.com/ava-labs/gecko/vms/rpcchainvm/ghttp/gconn/gconnproto
vms/rpcchainvm/ghttp/gconn/gconnproto/gconn.pb.go:533:7: undefined: grpc.ClientConnInterface
vms/rpcchainvm/ghttp/gconn/gconnproto/gconn.pb.go:537:11: undefined: grpc.SupportPackageIsVersion6
vms/rpcchainvm/ghttp/gconn/gconnproto/gconn.pb.go:552:5: undefined: grpc.ClientConnInterface
vms/rpcchainvm/ghttp/gconn/gconnproto/gconn.pb.go:555:23: undefined: grpc.ClientConnInterface
# github.com/ava-labs/gecko/vms/rpcchainvm/ghttp/greadcloser/greadcloserproto
vms/rpcchainvm/ghttp/greadcloser/greadcloserproto/greadcloser.pb.go:211:7: undefined: grpc.ClientConnInterface
vms/rpcchainvm/ghttp/greadcloser/greadcloserproto/greadcloser.pb.go:215:11: undefined: grpc.SupportPackageIsVersion6
vms/rpcchainvm/ghttp/greadcloser/greadcloserproto/greadcloser.pb.go:226:5: undefined: grpc.ClientConnInterface
vms/rpcchainvm/ghttp/greadcloser/greadcloserproto/greadcloser.pb.go:229:25: undefined: grpc.ClientConnInterface

Enhancement: Decouple binary generation

Suggestion: ava and evm binary generation must be separated from gecko/scripts/build.sh

Explanation:
Current gecko/scripts/build.sh is generating ava, evm and xputtest binaries. ava binary is generated from gecko repo and evm binary generated from coreth repo.
So gecko/scripts/build.sh should not pull coreth repo and generate image of coreth as part of gecko build script.

What is the impact of current scripts:

  1. Can coreth and gecko use different go versions and release independently ? No. it is much way complicated.
  2. Can move to go modules ? No. gecko mod file doesn't care about dependencies of other repo.

Possible options to look at

  1. create build script in coreth repo which generate evm binary and create separate script which invokes all dependent repos to generate binaries and pre or post processes. so that all binaries are available.
  2. Move it to monorepo with bazel as build system which simplifies repo management and binary generation based in OS.

Thoughts ?

warning: ‘Z’ directive writing 1 byte into a region of size between 0 and 9 [-Wformat-overflow=

Describe the bug
github.com/ava-labs/go-ethereum/accounts/usbwallet/trezor
github.com/ava-labs/go-ethereum/p2p

github.com/ava-labs/go-ethereum/vendor/gopkg.in/olebedev/go-duktape.v3

duk_logging.c: In function ‘duk__logger_prototype_log_shared’:
duk_logging.c:184:64: warning: ‘Z’ directive writing 1 byte into a region of size between 0 and 9 [-Wformat-overflow=]
sprintf((char *) date_buf, "%04d-%02d-%02dT%02d:%02d:%02d.%03dZ",
^
In file included from /usr/include/stdio.h:862,
from duk_logging.c:5:
/usr/include/x86_64-linux-gnu/bits/stdio2.h:33:10: note: ‘__builtin___sprintf_chk’ output between 25 and 85 bytes into a destination of size 32
return __builtin___sprintf_chk (__s, __USE_FORTIFY_LEVEL - 1,
^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
__bos (__s), __fmt, __va_arg_pack ());
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
To Reproduce
Steps to reproduce the behavior.

Expected behavior
no error

Operating System
WSL - Ubuntu 18.04

By submitting this issue I agree to the Terms and Conditions of the Developer Accelerator Program.

Livelock on Gecko's Consensus Dispatch Thread.

Describe the bug
The node can become unresponsive to consensus messages due to the dispatch thread hanging and maxing out a CPU core. This error seems to be caused by either: an error in Gecko uses Salticidae, how Gecko calls Salticidae through cgo, or an error in Salticidae.

To Reproduce
We currently don't know of a way to systematically reproduce this error. However, it seems to be occurring on the live testnet.

Expected behavior
The dispatch thread should never block unless it is awaiting a new event.

Stacktrace
Attached is the full stack trace of a node that had been unresponsive for ~3 hours.

goroutine 377 [running]:
github.com/ava-labs/gecko/utils/logging.Stacktrace.String(0xc00027c001, 0xde8657, 0x18)
        /home/ubuntu/go/src/github.com/ava-labs/gecko/utils/logging/stack.go:20 +0x71
github.com/ava-labs/gecko/api/admin.(*Admin).Stacktrace(0xc00007b040, 0xc0003ae100, 0x19801c8, 0xc000d340e0, 0x0, 0x0)
        /home/ubuntu/go/src/github.com/ava-labs/gecko/api/admin/service.go:187 +0x67
reflect.Value.call(0xc00015cb80, 0xc000010828, 0x13, 0xdd6e22, 0x4, 0xc000a83578, 0x4, 0x4, 0xc000a833e8, 0x4bc04d, ...)
        /snap/go/5646/src/reflect/value.go:460 +0x8ab
reflect.Value.Call(0xc00015cb80, 0xc000010828, 0x13, 0xc000a83578, 0x4, 0x4, 0x0, 0xa, 0x30302b2036330000)
        /snap/go/5646/src/reflect/value.go:321 +0xb4
github.com/gorilla/rpc/v2.(*Server).ServeHTTP(0xc0003a2380, 0x7f6e6a8d01b0, 0xc002300ba0, 0xc0003ae100)
        /home/ubuntu/go/src/github.com/gorilla/rpc/v2/server.go:220 +0xa3a
github.com/gorilla/handlers.loggingHandler.ServeHTTP(0x7f6e95953708, 0xc00027c9c0, 0x1027ae0, 0xc0003a2380, 0xf3b338, 0x103bbc0, 0xc0002822a0, 0xc0003ae100)
        /home/ubuntu/go/src/github.com/gorilla/handlers/logging.go:45 +0x243
github.com/ava-labs/gecko/api.middlewareHandler.ServeHTTP(0xc0004a3560, 0xc0004a3570, 0x10294a0, 0xc000554db0, 0x103bbc0, 0xc0002822a0, 0xc0003ae100)
        /home/ubuntu/go/src/github.com/ava-labs/gecko/api/middleware_handler.go:22 +0x82
github.com/gorilla/mux.(*Router).ServeHTTP(0xc00027d080, 0x103bbc0, 0xc0002822a0, 0xc000281e00)
        /home/ubuntu/go/src/github.com/gorilla/mux/mux.go:210 +0xe2
github.com/ava-labs/gecko/api.(*router).ServeHTTP(0xc00020eb00, 0x103bbc0, 0xc0002822a0, 0xc000281e00)
        /home/ubuntu/go/src/github.com/ava-labs/gecko/api/router.go:43 +0x86
github.com/rs/cors.(*Cors).Handler.func1(0x103bbc0, 0xc0002822a0, 0xc000281e00)
        /home/ubuntu/go/src/github.com/rs/cors/cors.go:219 +0x1b8
net/http.HandlerFunc.ServeHTTP(0xc00000e320, 0x103bbc0, 0xc0002822a0, 0xc000281e00)
        /snap/go/5646/src/net/http/server.go:2012 +0x44
net/http.serverHandler.ServeHTTP(0xc000282000, 0x103bbc0, 0xc0002822a0, 0xc000281e00)
        /snap/go/5646/src/net/http/server.go:2807 +0xa3
net/http.(*conn).serve(0xc00011c280, 0x103ea00, 0xc001916580)
        /snap/go/5646/src/net/http/server.go:1895 +0x86c
created by net/http.(*Server).Serve
        /snap/go/5646/src/net/http/server.go:2933 +0x35c

goroutine 1 [syscall, 175 minutes, locked to thread]:
github.com/ava-labs/salticidae-go._Cfunc_peernetwork_conn_get_peer_id(0x7f6e6c0fcb40, 0x0)
        _cgo_gotypes.go:2161 +0x4a
github.com/ava-labs/salticidae-go.(*peerNetworkConn).GetPeerID.func1(0xc0002d9810, 0xc265e6f6bf669289)
        /home/ubuntu/go/src/github.com/ava-labs/salticidae-go/network.go:582 +0x55
github.com/ava-labs/salticidae-go.(*peerNetworkConn).GetPeerID(0xc0002d9810, 0xc200000000000000, 0x867897)
        /home/ubuntu/go/src/github.com/ava-labs/salticidae-go/network.go:582 +0x2f
github.com/ava-labs/gecko/networking.(*Voting).sanitize(0x1955660, 0x7f6e6c0fcb10, 0x7f6e6c0fcb40, 0xc006f35a0b, 0x0, 0x0, 0xc48e494b00000000, 0x0, 0x0, 0x0, ...)
        /home/ubuntu/go/src/github.com/ava-labs/gecko/networking/voting_handlers.go:613 +0xbb
github.com/ava-labs/gecko/networking.pullQuery(0x7f6e6c0fcb10, 0x7f6e6c0fcb40, 0x0)
        /home/ubuntu/go/src/github.com/ava-labs/gecko/networking/voting_handlers.go:576 +0x76
github.com/ava-labs/gecko/networking._cgoexpwrap_45040d5f0502_pullQuery(0x7f6e6c0fcb10, 0x7f6e6c0fcb40, 0x0)
        _cgo_gotypes.go:351 +0x3f
github.com/ava-labs/salticidae-go._Cfunc_eventcontext_dispatch(0x1b06590)
        _cgo_gotypes.go:987 +0x41
github.com/ava-labs/salticidae-go.(*eventContext).Dispatch.func1(0xc0000a7310)
        /home/ubuntu/go/src/github.com/ava-labs/salticidae-go/event.go:34 +0x55
github.com/ava-labs/salticidae-go.(*eventContext).Dispatch(0xc0000a7310)
        /home/ubuntu/go/src/github.com/ava-labs/salticidae-go/event.go:34 +0x2b
github.com/ava-labs/gecko/node.(*Node).Dispatch(...)
        /home/ubuntu/go/src/github.com/ava-labs/gecko/node/node.go:296
main.main()
        /home/ubuntu/go/src/github.com/ava-labs/gecko/main/main.go:90 +0xa8b

goroutine 19 [select]:
github.com/syndtr/goleveldb/leveldb/util.(*BufferPool).drain(0xc00046a000)
        /home/ubuntu/go/src/github.com/syndtr/goleveldb/leveldb/util/buffer_pool.go:206 +0x128
created by github.com/syndtr/goleveldb/leveldb/util.NewBufferPool
        /home/ubuntu/go/src/github.com/syndtr/goleveldb/leveldb/util/buffer_pool.go:237 +0x19a

goroutine 20 [select, 2 minutes]:
github.com/syndtr/goleveldb/leveldb.(*session).refLoop(0xc000466000)
        /home/ubuntu/go/src/github.com/syndtr/goleveldb/leveldb/session_util.go:189 +0x5e5
created by github.com/syndtr/goleveldb/leveldb.newSession
        /home/ubuntu/go/src/github.com/syndtr/goleveldb/leveldb/session.go:93 +0x2b4

goroutine 10 [select, 210 minutes]:
github.com/syndtr/goleveldb/leveldb.(*DB).compactionError(0xc00016ca80)
        /home/ubuntu/go/src/github.com/syndtr/goleveldb/leveldb/db_compaction.go:91 +0xcd
created by github.com/syndtr/goleveldb/leveldb.openDB
        /home/ubuntu/go/src/github.com/syndtr/goleveldb/leveldb/db.go:148 +0x419

goroutine 11 [select, 2 minutes]:
github.com/syndtr/goleveldb/leveldb.(*DB).mpoolDrain(0xc00016ca80)
        /home/ubuntu/go/src/github.com/syndtr/goleveldb/leveldb/db_state.go:101 +0xf6
created by github.com/syndtr/goleveldb/leveldb.openDB
        /home/ubuntu/go/src/github.com/syndtr/goleveldb/leveldb/db.go:149 +0x43b

goroutine 12 [select, 210 minutes]:
github.com/syndtr/goleveldb/leveldb.(*DB).tCompaction(0xc00016ca80)
        /home/ubuntu/go/src/github.com/syndtr/goleveldb/leveldb/db_compaction.go:836 +0x259
created by github.com/syndtr/goleveldb/leveldb.openDB
        /home/ubuntu/go/src/github.com/syndtr/goleveldb/leveldb/db.go:155 +0x58f

goroutine 13 [select, 213 minutes]:
github.com/syndtr/goleveldb/leveldb.(*DB).mCompaction(0xc00016ca80)
        /home/ubuntu/go/src/github.com/syndtr/goleveldb/leveldb/db_compaction.go:773 +0x140
created by github.com/syndtr/goleveldb/leveldb.openDB
        /home/ubuntu/go/src/github.com/syndtr/goleveldb/leveldb/db.go:156 +0x5b1

goroutine 23 [runnable]:
runtime.goparkunlock(...)
        /snap/go/5646/src/runtime/proc.go:310
sync.runtime_notifyListWait(0xc00020e110, 0xcd8d)
        /snap/go/5646/src/runtime/sema.go:513 +0xf8
sync.(*Cond).Wait(0xc00020e100)
        /snap/go/5646/src/sync/cond.go:56 +0x9d
github.com/ava-labs/gecko/utils/logging.(*Log).run(0xc00027c0c0)
        /home/ubuntu/go/src/github.com/ava-labs/gecko/utils/logging/log.go:68 +0x2e5
github.com/ava-labs/gecko/utils/logging.(*Log).RecoverAndPanic(0xc00027c0c0, 0xc0001dee30)
        /home/ubuntu/go/src/github.com/ava-labs/gecko/utils/logging/log.go:254 +0x4f
created by github.com/ava-labs/gecko/utils/logging.New
        /home/ubuntu/go/src/github.com/ava-labs/gecko/utils/logging/log.go:42 +0x14e

goroutine 25 [select, 12 minutes]:
github.com/ava-labs/gecko/nat.(*mapper).mapPort(0xc0003b0500, 0xc052085208)
        /home/ubuntu/go/src/github.com/ava-labs/gecko/nat/mapper.go:107 +0x14f
created by github.com/ava-labs/gecko/nat.(*mapper).MapPort
        /home/ubuntu/go/src/github.com/ava-labs/gecko/nat/mapper.go:81 +0x70

goroutine 24 [select, 12 minutes]:
github.com/ava-labs/gecko/nat.(*mapper).mapPort(0xc0003b0500, 0xc052095209)
        /home/ubuntu/go/src/github.com/ava-labs/gecko/nat/mapper.go:107 +0x14f
created by github.com/ava-labs/gecko/nat.(*mapper).MapPort
        /home/ubuntu/go/src/github.com/ava-labs/gecko/nat/mapper.go:81 +0x70

goroutine 90 [sync.Cond.Wait, 135 minutes]:
runtime.goparkunlock(...)
        /snap/go/5646/src/runtime/proc.go:310
sync.runtime_notifyListWait(0xc0003a3ad0, 0x31245)
        /snap/go/5646/src/runtime/sema.go:513 +0xf8
sync.(*Cond).Wait(0xc0003a3ac0)
        /snap/go/5646/src/sync/cond.go:56 +0x9d
github.com/ava-labs/gecko/utils/logging.(*Log).run(0xc0006e6f00)
        /home/ubuntu/go/src/github.com/ava-labs/gecko/utils/logging/log.go:68 +0x2e5
github.com/ava-labs/gecko/utils/logging.(*Log).RecoverAndPanic(0xc0006e6f00, 0xc0005a5640)
        /home/ubuntu/go/src/github.com/ava-labs/gecko/utils/logging/log.go:254 +0x4f
created by github.com/ava-labs/gecko/utils/logging.New
        /home/ubuntu/go/src/github.com/ava-labs/gecko/utils/logging/log.go:42 +0x14e

goroutine 26 [sync.Cond.Wait, 213 minutes]:
runtime.goparkunlock(...)
        /snap/go/5646/src/runtime/proc.go:310
sync.runtime_notifyListWait(0xc00020e210, 0x4)
        /snap/go/5646/src/runtime/sema.go:513 +0xf8
sync.(*Cond).Wait(0xc00020e200)
        /snap/go/5646/src/sync/cond.go:56 +0x9d
github.com/ava-labs/gecko/utils/logging.(*Log).run(0xc00027c9c0)
        /home/ubuntu/go/src/github.com/ava-labs/gecko/utils/logging/log.go:68 +0x2e5
github.com/ava-labs/gecko/utils/logging.(*Log).RecoverAndPanic(0xc00027c9c0, 0xc0001df030)
        /home/ubuntu/go/src/github.com/ava-labs/gecko/utils/logging/log.go:254 +0x4f
created by github.com/ava-labs/gecko/utils/logging.New
        /home/ubuntu/go/src/github.com/ava-labs/gecko/utils/logging/log.go:42 +0x14e

goroutine 27 [IO wait, 86 minutes]:
internal/poll.runtime_pollWait(0x7f6e9594f018, 0x72, 0x0)
        /snap/go/5646/src/runtime/netpoll.go:203 +0x55
internal/poll.(*pollDesc).wait(0xc00015c098, 0x72, 0x0, 0x0, 0xdd9c64)
        /snap/go/5646/src/internal/poll/fd_poll_runtime.go:87 +0x45
internal/poll.(*pollDesc).waitRead(...)
        /snap/go/5646/src/internal/poll/fd_poll_runtime.go:92
internal/poll.(*FD).Accept(0xc00015c080, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0)
        /snap/go/5646/src/internal/poll/fd_unix.go:384 +0x1d4
net.(*netFD).accept(0xc00015c080, 0xb5ff3bf334dad50f, 0x1000000000000, 0xb5ff3bf334dad50f)
        /snap/go/5646/src/net/fd_unix.go:238 +0x42
net.(*TCPListener).accept(0xc00000e360, 0x5eae58ee, 0xc0004c2d20, 0x4e2ff6)
        /snap/go/5646/src/net/tcpsock_posix.go:139 +0x32
net.(*TCPListener).Accept(0xc00000e360, 0xc0004c2d70, 0x18, 0xc0004be780, 0x7371dc)
        /snap/go/5646/src/net/tcpsock.go:261 +0x64
net/http.(*Server).Serve(0xc000282000, 0x103b900, 0xc00000e360, 0x0, 0x0)
        /snap/go/5646/src/net/http/server.go:2901 +0x25d
net/http.(*Server).ListenAndServe(0xc000282000, 0xc000282000, 0xc00020eb00)
        /snap/go/5646/src/net/http/server.go:2830 +0xb7
net/http.ListenAndServe(...)
        /snap/go/5646/src/net/http/server.go:3086
github.com/ava-labs/gecko/api.(*Server).Dispatch(0x1955470, 0x0, 0x0)
        /home/ubuntu/go/src/github.com/ava-labs/gecko/api/server.go:48 +0x118
github.com/ava-labs/gecko/node.(*Node).initAPIServer.func2()
        /home/ubuntu/go/src/github.com/ava-labs/gecko/node/node.go:484 +0x32
github.com/ava-labs/gecko/utils/logging.(*Log).RecoverAndPanic(0xc00027c0c0, 0xc0000a6d00)
        /home/ubuntu/go/src/github.com/ava-labs/gecko/utils/logging/log.go:254 +0x4f
created by github.com/ava-labs/gecko/node.(*Node).initAPIServer
        /home/ubuntu/go/src/github.com/ava-labs/gecko/node/node.go:484 +0x207

goroutine 39 [select, 212 minutes]:
github.com/ava-labs/gecko/utils/timer.(*Timer).Dispatch(0xc000098fc0)
        /home/ubuntu/go/src/github.com/ava-labs/gecko/utils/timer/timer.go:90 +0x1a2
github.com/ava-labs/gecko/utils/timer.(*TimeoutManager).Dispatch(...)
        /home/ubuntu/go/src/github.com/ava-labs/gecko/utils/timer/timeout_manager.go:40
github.com/ava-labs/gecko/utils/logging.(*Log).RecoverAndPanic(0xc00027c0c0, 0xc0000a7400)
        /home/ubuntu/go/src/github.com/ava-labs/gecko/utils/logging/log.go:254 +0x4f
created by github.com/ava-labs/gecko/networking.(*Handshake).Initialize
        /home/ubuntu/go/src/github.com/ava-labs/gecko/networking/handshake_handlers.go:179 +0x216

goroutine 40 [select, 175 minutes]:
github.com/ava-labs/gecko/utils/timer.(*Timer).Dispatch(0xc0000990e0)
        /home/ubuntu/go/src/github.com/ava-labs/gecko/utils/timer/timer.go:90 +0x1a2
github.com/ava-labs/gecko/utils/timer.(*TimeoutManager).Dispatch(...)
        /home/ubuntu/go/src/github.com/ava-labs/gecko/utils/timer/timeout_manager.go:40
github.com/ava-labs/gecko/utils/logging.(*Log).RecoverAndPanic(0xc00027c0c0, 0xc0000a7420)
        /home/ubuntu/go/src/github.com/ava-labs/gecko/utils/logging/log.go:254 +0x4f
created by github.com/ava-labs/gecko/networking.(*Handshake).Initialize
        /home/ubuntu/go/src/github.com/ava-labs/gecko/networking/handshake_handlers.go:183 +0x331

goroutine 41 [select, 167 minutes]:
github.com/ava-labs/gecko/utils/timer.(*Timer).Dispatch(0xc000099200)
        /home/ubuntu/go/src/github.com/ava-labs/gecko/utils/timer/timer.go:90 +0x1a2
github.com/ava-labs/gecko/utils/timer.(*TimeoutManager).Dispatch(...)
        /home/ubuntu/go/src/github.com/ava-labs/gecko/utils/timer/timeout_manager.go:40
github.com/ava-labs/gecko/utils/logging.(*Log).RecoverAndPanic(0xc00027c0c0, 0xc0000a7440)
        /home/ubuntu/go/src/github.com/ava-labs/gecko/utils/logging/log.go:254 +0x4f
created by github.com/ava-labs/gecko/networking.(*Handshake).Initialize
        /home/ubuntu/go/src/github.com/ava-labs/gecko/networking/handshake_handlers.go:187 +0x452

goroutine 42 [select, 2 minutes]:
github.com/ava-labs/gecko/utils/timer.(*Repeater).Dispatch(0xc000099230)
        /home/ubuntu/go/src/github.com/ava-labs/gecko/utils/timer/repeater.go:58 +0x156
github.com/ava-labs/gecko/utils/logging.(*Log).RecoverAndPanic(0xc00027c0c0, 0xc0000a7460)
        /home/ubuntu/go/src/github.com/ava-labs/gecko/utils/logging/log.go:254 +0x4f
created by github.com/ava-labs/gecko/networking.(*Handshake).Initialize
        /home/ubuntu/go/src/github.com/ava-labs/gecko/networking/handshake_handlers.go:190 +0x59d

goroutine 89 [sync.Cond.Wait, 212 minutes]:
runtime.goparkunlock(...)
        /snap/go/5646/src/runtime/proc.go:310
sync.runtime_notifyListWait(0xc0003a2310, 0xc00000000d)
        /snap/go/5646/src/runtime/sema.go:513 +0xf8
sync.(*Cond).Wait(0xc0003a2300)
        /snap/go/5646/src/sync/cond.go:56 +0x9d
github.com/ava-labs/gecko/utils/timer.(*Executor).Dispatch(0x19557c8)
        /home/ubuntu/go/src/github.com/ava-labs/gecko/utils/timer/executor.go:54 +0x13c
github.com/ava-labs/gecko/utils/logging.(*Log).RecoverAndPanic(0xc00027c0c0, 0xc0004a31e0)
        /home/ubuntu/go/src/github.com/ava-labs/gecko/utils/logging/log.go:254 +0x4f
created by github.com/ava-labs/gecko/networking.(*Voting).Initialize
        /home/ubuntu/go/src/github.com/ava-labs/gecko/networking/voting_handlers.go:84 +0x41b

goroutine 54 [select]:
github.com/ava-labs/gecko/utils/timer.(*Timer).Dispatch(0xc000554c00)
        /home/ubuntu/go/src/github.com/ava-labs/gecko/utils/timer/timer.go:90 +0x1a2
github.com/ava-labs/gecko/utils/timer.(*TimeoutManager).Dispatch(...)
        /home/ubuntu/go/src/github.com/ava-labs/gecko/utils/timer/timeout_manager.go:40
github.com/ava-labs/gecko/snow/networking/timeout.(*Manager).Dispatch(...)
        /home/ubuntu/go/src/github.com/ava-labs/gecko/snow/networking/timeout/manager.go:28
github.com/ava-labs/gecko/utils/logging.(*Log).RecoverAndPanic(0xc00027c0c0, 0xc0004a30a0)
        /home/ubuntu/go/src/github.com/ava-labs/gecko/utils/logging/log.go:254 +0x4f
created by github.com/ava-labs/gecko/chains.New
        /home/ubuntu/go/src/github.com/ava-labs/gecko/chains/manager.go:147 +0xae

goroutine 91 [select, 135 minutes]:
github.com/ava-labs/gecko/utils/timer.(*Timer).Dispatch(0xc0006c9650)
        /home/ubuntu/go/src/github.com/ava-labs/gecko/utils/timer/timer.go:90 +0x1a2
github.com/ava-labs/gecko/utils/logging.(*Log).RecoverAndPanic(0xc0006e6f00, 0xc0005a5800)
        /home/ubuntu/go/src/github.com/ava-labs/gecko/utils/logging/log.go:254 +0x4f
created by github.com/ava-labs/gecko/vms/platformvm.(*VM).Initialize
        /home/ubuntu/go/src/github.com/ava-labs/gecko/vms/platformvm/vm.go:308 +0x43a

goroutine 69 [IO wait]:
internal/poll.runtime_pollWait(0x7f6e9594ee58, 0x72, 0xffffffffffffffff)
        /snap/go/5646/src/runtime/netpoll.go:203 +0x55
internal/poll.(*pollDesc).wait(0xc0003b1b18, 0x72, 0x1000, 0x1000, 0xffffffffffffffff)
        /snap/go/5646/src/internal/poll/fd_poll_runtime.go:87 +0x45
internal/poll.(*pollDesc).waitRead(...)
        /snap/go/5646/src/internal/poll/fd_poll_runtime.go:92
internal/poll.(*FD).Read(0xc0003b1b00, 0xc0007f9000, 0x1000, 0x1000, 0x0, 0x0, 0x0)
        /snap/go/5646/src/internal/poll/fd_unix.go:169 +0x19b
net.(*netFD).Read(0xc0003b1b00, 0xc0007f9000, 0x1000, 0x1000, 0xbfa3b92b5b3ed497, 0xc0021065a0, 0xc000852270)
        /snap/go/5646/src/net/fd_unix.go:202 +0x4f
net.(*conn).Read(0xc0000aa7d0, 0xc0007f9000, 0x1000, 0x1000, 0x0, 0x0, 0x0)
        /snap/go/5646/src/net/net.go:184 +0x8e
net/http.(*connReader).Read(0xc000a60f90, 0xc0007f9000, 0x1000, 0x1000, 0x4fa1c4, 0xc0004d4380, 0xc0004d43e9)
        /snap/go/5646/src/net/http/server.go:786 +0xf4
bufio.(*Reader).fill(0xc0006e0ea0)
        /snap/go/5646/src/bufio/bufio.go:100 +0x103
bufio.(*Reader).ReadSlice(0xc0006e0ea0, 0xc0002d790a, 0x46114f, 0xc0002d79c0, 0x42ef06, 0xc001768800, 0x100)
        /snap/go/5646/src/bufio/bufio.go:359 +0x3d
bufio.(*Reader).ReadLine(0xc0006e0ea0, 0xc0002d79c8, 0xc000088000, 0x7f6e95ac47d0, 0x0, 0x1, 0xc000a78000)
        /snap/go/5646/src/bufio/bufio.go:388 +0x34
net/textproto.(*Reader).readLineSlice(0xc00049f920, 0xc001768800, 0x0, 0x459d1c, 0xc0002d7a28, 0x0)
        /snap/go/5646/src/net/textproto/reader.go:58 +0x6c
net/textproto.(*Reader).ReadLine(...)
        /snap/go/5646/src/net/textproto/reader.go:39
net/http.readRequest(0xc0006e0ea0, 0x0, 0xc001768800, 0x0, 0x0)
        /snap/go/5646/src/net/http/request.go:1015 +0xa4
net/http.(*conn).readRequest(0xc0001ab860, 0x103ea00, 0xc000843440, 0x0, 0x0, 0x0)
        /snap/go/5646/src/net/http/server.go:966 +0x191
net/http.(*conn).serve(0xc0001ab860, 0x103ea00, 0xc000843440)
        /snap/go/5646/src/net/http/server.go:1822 +0x6d4
created by net/http.(*Server).Serve
        /snap/go/5646/src/net/http/server.go:2933 +0x35c

goroutine 153 [chan receive, 212 minutes]:
google.golang.org/grpc.(*addrConn).resetTransport(0xc000145340)
        /home/ubuntu/go/src/google.golang.org/grpc/clientconn.go:1166 +0x6ea
created by google.golang.org/grpc.(*addrConn).connect
        /home/ubuntu/go/src/google.golang.org/grpc/clientconn.go:809 +0x128

goroutine 99 [select]:
github.com/ava-labs/gecko/snow/networking/handler.(*Handler).Dispatch(0xc0006c9dd0)
        /home/ubuntu/go/src/github.com/ava-labs/gecko/snow/networking/handler/handler.go:41 +0x139
github.com/ava-labs/gecko/utils/logging.(*Log).RecoverAndPanic(0xc0006e6f00, 0xc000a4a2d0)
        /home/ubuntu/go/src/github.com/ava-labs/gecko/utils/logging/log.go:254 +0x4f
created by github.com/ava-labs/gecko/chains.(*manager).createSnowmanChain
        /home/ubuntu/go/src/github.com/ava-labs/gecko/chains/manager.go:524 +0x737

goroutine 158 [sync.Cond.Wait, 212 minutes]:
runtime.goparkunlock(...)
        /snap/go/5646/src/runtime/proc.go:310
sync.runtime_notifyListWait(0xc000f352d0, 0x2)
        /snap/go/5646/src/runtime/sema.go:513 +0xf8
sync.(*Cond).Wait(0xc000f352c0)
        /snap/go/5646/src/sync/cond.go:56 +0x9d
github.com/ava-labs/gecko/utils/logging.(*Log).run(0xc000848180)
        /home/ubuntu/go/src/github.com/ava-labs/gecko/utils/logging/log.go:68 +0x2e5
github.com/ava-labs/gecko/utils/logging.(*Log).RecoverAndPanic(0xc000848180, 0xc001705b30)
        /home/ubuntu/go/src/github.com/ava-labs/gecko/utils/logging/log.go:254 +0x4f
created by github.com/ava-labs/gecko/utils/logging.New
        /home/ubuntu/go/src/github.com/ava-labs/gecko/utils/logging/log.go:42 +0x14e

goroutine 159 [chan receive, 212 minutes]:
github.com/oklog/run.(*Group).Run(0xc0017e9f90, 0xc001705d40, 0x1)
        /home/ubuntu/go/src/github.com/oklog/run/group.go:43 +0xed
github.com/hashicorp/go-plugin.(*GRPCBroker).AcceptAndServe(0xc001742a00, 0x1, 0xc001705b80)
        /home/ubuntu/go/src/github.com/hashicorp/go-plugin/grpc_broker.go:354 +0x354
created by github.com/ava-labs/gecko/vms/rpcchainvm.(*VMClient).Initialize
        /home/ubuntu/go/src/github.com/ava-labs/gecko/vms/rpcchainvm/vm_client.go:86 +0x1c2

goroutine 155 [select, 212 minutes]:
google.golang.org/grpc/internal/transport.(*recvBufferReader).readClient(0xc001742e10, 0xc00043b050, 0x5, 0x5, 0x4690bc, 0x3, 0x1)
        /home/ubuntu/go/src/google.golang.org/grpc/internal/transport/transport.go:187 +0xd3
google.golang.org/grpc/internal/transport.(*recvBufferReader).Read(0xc001742e10, 0xc00043b050, 0x5, 0x5, 0xc001723960, 0xf3c8a0, 0xc0002db978)
        /home/ubuntu/go/src/google.golang.org/grpc/internal/transport/transport.go:167 +0x18a
google.golang.org/grpc/internal/transport.(*transportReader).Read(0xc001640a20, 0xc00043b050, 0x5, 0x5, 0xc0002dba34, 0xc0002db9a0, 0xa32efc)
        /home/ubuntu/go/src/google.golang.org/grpc/internal/transport/transport.go:480 +0x55
io.ReadAtLeast(0x1028620, 0xc001640a20, 0xc00043b050, 0x5, 0x5, 0x5, 0xcc7960, 0xd784a0, 0x7f6e69ace4a8)
        /snap/go/5646/src/io/io.go:310 +0x87
io.ReadFull(...)
        /snap/go/5646/src/io/io.go:329
google.golang.org/grpc/internal/transport.(*Stream).Read(0xc001a79e00, 0xc00043b050, 0x5, 0x5, 0x1e, 0x1e, 0x0)
        /home/ubuntu/go/src/google.golang.org/grpc/internal/transport/transport.go:464 +0xcd
google.golang.org/grpc.(*parser).recvMsg(0xc00043b040, 0x7fffffff, 0x17ff700, 0xdba480, 0xc0016405a0, 0x0, 0x0, 0x0)
        /home/ubuntu/go/src/google.golang.org/grpc/rpc_util.go:510 +0x63
google.golang.org/grpc.recvAndDecompress(0xc00043b040, 0xc001a79e00, 0x0, 0x0, 0x7fffffff, 0x0, 0x0, 0x0, 0xc001804360, 0x1e, ...)
        /home/ubuntu/go/src/google.golang.org/grpc/rpc_util.go:641 +0x4d
google.golang.org/grpc.recv(0xc00043b040, 0x7f6e6a8c6978, 0x19801c8, 0xc001a79e00, 0x0, 0x0, 0xd784a0, 0xc0018145f0, 0x7fffffff, 0x0, ...)
        /home/ubuntu/go/src/google.golang.org/grpc/rpc_util.go:709 +0x9b
google.golang.org/grpc.(*csAttempt).recvMsg(0xc0003b1b80, 0xd784a0, 0xc0018145f0, 0x0, 0x0, 0x0)
        /home/ubuntu/go/src/google.golang.org/grpc/stream.go:884 +0xed
google.golang.org/grpc.(*clientStream).RecvMsg.func1(0xc0003b1b80, 0x203000, 0x203000)
        /home/ubuntu/go/src/google.golang.org/grpc/stream.go:735 +0x46
google.golang.org/grpc.(*clientStream).withRetry(0xc0000a2a20, 0xc0002dbe30, 0xc0002dbe00, 0x2, 0x30)
        /home/ubuntu/go/src/google.golang.org/grpc/stream.go:589 +0x360
google.golang.org/grpc.(*clientStream).RecvMsg(0xc0000a2a20, 0xd784a0, 0xc0018145f0, 0x0, 0x0)
        /home/ubuntu/go/src/google.golang.org/grpc/stream.go:734 +0x103
github.com/hashicorp/go-plugin/internal/plugin.(*gRPCBrokerStartStreamClient).Recv(0xc001705c60, 0xc0002dbf04, 0x3, 0x2)
        /home/ubuntu/go/src/github.com/hashicorp/go-plugin/internal/plugin/grpc_broker.pb.go:132 +0x62
github.com/hashicorp/go-plugin.(*gRPCBrokerClientImpl).StartStream(0xc000f350c0, 0x0, 0x0)
        /home/ubuntu/go/src/github.com/hashicorp/go-plugin/grpc_broker.go:194 +0x187
created by github.com/hashicorp/go-plugin.newGRPCClient
        /home/ubuntu/go/src/github.com/hashicorp/go-plugin/grpc_client.go:62 +0x273

goroutine 151 [chan receive, 212 minutes]:
github.com/hashicorp/go-plugin.(*Client).Start.func4.1(0xc000ae99a0, 0xc000dd5f20)
        /home/ubuntu/go/src/github.com/hashicorp/go-plugin/client.go:660 +0x79
created by github.com/hashicorp/go-plugin.(*Client).Start.func4
        /home/ubuntu/go/src/github.com/hashicorp/go-plugin/client.go:658 +0x49

goroutine 156 [select, 212 minutes]:
google.golang.org/grpc.newClientStream.func5(0xc00014a000, 0xc0000a2900, 0x103eac0, 0xc0016402a0)
        /home/ubuntu/go/src/google.golang.org/grpc/stream.go:318 +0xd7
created by google.golang.org/grpc.newClientStream
        /home/ubuntu/go/src/google.golang.org/grpc/stream.go:317 +0xbbf

goroutine 157 [select, 212 minutes]:
google.golang.org/grpc/internal/transport.(*Stream).waitOnHeader(0xc001a79b00)
        /home/ubuntu/go/src/google.golang.org/grpc/internal/transport/transport.go:319 +0xcc
google.golang.org/grpc/internal/transport.(*Stream).RecvCompress(...)
        /home/ubuntu/go/src/google.golang.org/grpc/internal/transport/transport.go:334
google.golang.org/grpc.(*csAttempt).recvMsg(0xc0003b1a80, 0xd733a0, 0xc000f35540, 0x0, 0x9e75ff, 0xc000010020)
        /home/ubuntu/go/src/google.golang.org/grpc/stream.go:870 +0x721
google.golang.org/grpc.(*clientStream).RecvMsg.func1(0xc0003b1a80, 0x203000, 0x203000)
        /home/ubuntu/go/src/google.golang.org/grpc/stream.go:735 +0x46
google.golang.org/grpc.(*clientStream).withRetry(0xc0000a2900, 0xc0017e8e80, 0xc0017e8e50, 0x0, 0x28)
        /home/ubuntu/go/src/google.golang.org/grpc/stream.go:593 +0x9c
google.golang.org/grpc.(*clientStream).RecvMsg(0xc0000a2900, 0xd733a0, 0xc000f35540, 0x0, 0x0)
        /home/ubuntu/go/src/google.golang.org/grpc/stream.go:734 +0x103
github.com/hashicorp/go-plugin/internal/plugin.(*gRPCStdioStreamStdioClient).Recv(0xc001705af0, 0xde738a, 0x16, 0x0)
        /home/ubuntu/go/src/github.com/hashicorp/go-plugin/internal/plugin/grpc_stdio.pb.go:160 +0x62
github.com/hashicorp/go-plugin.(*grpcStdioClient).Run(0xc00043abe0, 0x10299a0, 0x1980088, 0x10299a0, 0x1980088)
        /home/ubuntu/go/src/github.com/hashicorp/go-plugin/grpc_stdio.go:132 +0x9f
created by github.com/hashicorp/go-plugin.newGRPCClient
        /home/ubuntu/go/src/github.com/hashicorp/go-plugin/grpc_client.go:69 +0x34e

goroutine 100 [sync.Cond.Wait, 213 minutes]:
runtime.goparkunlock(...)
        /snap/go/5646/src/runtime/proc.go:310
sync.runtime_notifyListWait(0xc000842e10, 0x0)
        /snap/go/5646/src/runtime/sema.go:513 +0xf8
sync.(*Cond).Wait(0xc000842e00)
        /snap/go/5646/src/sync/cond.go:56 +0x9d
github.com/ava-labs/gecko/utils/logging.(*Log).run(0xc000849bc0)
        /home/ubuntu/go/src/github.com/ava-labs/gecko/utils/logging/log.go:68 +0x2e5
github.com/ava-labs/gecko/utils/logging.(*Log).RecoverAndPanic(0xc000849bc0, 0xc000a4a2e0)
        /home/ubuntu/go/src/github.com/ava-labs/gecko/utils/logging/log.go:254 +0x4f
created by github.com/ava-labs/gecko/utils/logging.New
        /home/ubuntu/go/src/github.com/ava-labs/gecko/utils/logging/log.go:42 +0x14e

goroutine 164 [sync.Cond.Wait, 179 minutes]:
runtime.goparkunlock(...)
        /snap/go/5646/src/runtime/proc.go:310
sync.runtime_notifyListWait(0xc0016b8490, 0x11c)
        /snap/go/5646/src/runtime/sema.go:513 +0xf8
sync.(*Cond).Wait(0xc0016b8480)
        /snap/go/5646/src/sync/cond.go:56 +0x9d
github.com/ava-labs/gecko/utils/logging.(*Log).run(0xc0006e6240)
        /home/ubuntu/go/src/github.com/ava-labs/gecko/utils/logging/log.go:68 +0x2e5
github.com/ava-labs/gecko/utils/logging.(*Log).RecoverAndPanic(0xc0006e6240, 0xc0016ace90)
        /home/ubuntu/go/src/github.com/ava-labs/gecko/utils/logging/log.go:254 +0x4f
created by github.com/ava-labs/gecko/utils/logging.New
        /home/ubuntu/go/src/github.com/ava-labs/gecko/utils/logging/log.go:42 +0x14e

goroutine 154 [select, 212 minutes]:
github.com/hashicorp/go-plugin.(*gRPCBrokerClientImpl).Recv(0xc000f350c0, 0xf3b3e0, 0xc001742a00, 0x1)
        /home/ubuntu/go/src/github.com/hashicorp/go-plugin/grpc_broker.go:231 +0xb3
github.com/hashicorp/go-plugin.(*GRPCBroker).Run(0xc001742a00)
        /home/ubuntu/go/src/github.com/hashicorp/go-plugin/grpc_broker.go:411 +0x7a
created by github.com/hashicorp/go-plugin.newGRPCClient
        /home/ubuntu/go/src/github.com/hashicorp/go-plugin/grpc_client.go:61 +0x251

goroutine 177 [select, 176 minutes]:
github.com/ava-labs/gecko/snow/networking/handler.(*Handler).Dispatch(0xc0015acde0)
        /home/ubuntu/go/src/github.com/ava-labs/gecko/snow/networking/handler/handler.go:41 +0x139
github.com/ava-labs/gecko/utils/logging.(*Log).RecoverAndPanic(0xc0006e6240, 0xc0016ad270)
        /home/ubuntu/go/src/github.com/ava-labs/gecko/utils/logging/log.go:254 +0x4f
created by github.com/ava-labs/gecko/chains.(*manager).createAvalancheChain
        /home/ubuntu/go/src/github.com/ava-labs/gecko/chains/manager.go:438 +0x899

goroutine 165 [select, 179 minutes]:
github.com/ava-labs/gecko/utils/timer.(*Timer).Dispatch(0xc0015ac8d0)
        /home/ubuntu/go/src/github.com/ava-labs/gecko/utils/timer/timer.go:90 +0x1a2
github.com/ava-labs/gecko/utils/logging.(*Log).RecoverAndPanic(0xc0006e6240, 0xc0016ad090)
        /home/ubuntu/go/src/github.com/ava-labs/gecko/utils/logging/log.go:254 +0x4f
created by github.com/ava-labs/gecko/vms/avm.(*VM).Initialize
        /home/ubuntu/go/src/github.com/ava-labs/gecko/vms/avm/vm.go:195 +0xdb7

goroutine 152 [select, 212 minutes]:
google.golang.org/grpc.(*ccBalancerWrapper).watcher(0xc000f35040)
        /home/ubuntu/go/src/google.golang.org/grpc/balancer_conn_wrappers.go:69 +0xc2
created by google.golang.org/grpc.newCCBalancerWrapper
        /home/ubuntu/go/src/google.golang.org/grpc/balancer_conn_wrappers.go:60 +0x16d

goroutine 179 [sync.Cond.Wait, 212 minutes]:
runtime.goparkunlock(...)
        /snap/go/5646/src/runtime/proc.go:310
sync.runtime_notifyListWait(0xc0016b8950, 0x0)
        /snap/go/5646/src/runtime/sema.go:513 +0xf8
sync.(*Cond).Wait(0xc0016b8940)
        /snap/go/5646/src/sync/cond.go:56 +0x9d
github.com/ava-labs/gecko/utils/logging.(*Log).run(0xc0006e6300)
        /home/ubuntu/go/src/github.com/ava-labs/gecko/utils/logging/log.go:68 +0x2e5
github.com/ava-labs/gecko/utils/logging.(*Log).RecoverAndPanic(0xc0006e6300, 0xc0016ad280)
        /home/ubuntu/go/src/github.com/ava-labs/gecko/utils/logging/log.go:254 +0x4f
created by github.com/ava-labs/gecko/utils/logging.New
        /home/ubuntu/go/src/github.com/ava-labs/gecko/utils/logging/log.go:42 +0x14e

goroutine 180 [IO wait, 212 minutes]:
internal/poll.runtime_pollWait(0x7f6e9594ef38, 0x72, 0xffffffffffffffff)
        /snap/go/5646/src/runtime/netpoll.go:203 +0x55
internal/poll.(*pollDesc).wait(0xc0002d5158, 0x72, 0x10001, 0x10000, 0xffffffffffffffff)
        /snap/go/5646/src/internal/poll/fd_poll_runtime.go:87 +0x45
internal/poll.(*pollDesc).waitRead(...)
        /snap/go/5646/src/internal/poll/fd_poll_runtime.go:92
internal/poll.(*FD).Read(0xc0002d5140, 0xc00191c000, 0x10000, 0x10000, 0x0, 0x0, 0x0)
        /snap/go/5646/src/internal/poll/fd_unix.go:169 +0x19b
os.(*File).read(...)
        /snap/go/5646/src/os/file_unix.go:263
os.(*File).Read(0xc0000ab688, 0xc00191c000, 0x10000, 0x10000, 0x0, 0x0, 0xc000f6efc4)
        /snap/go/5646/src/os/file.go:116 +0x71
bufio.(*Reader).fill(0xc0017eaf40)
        /snap/go/5646/src/bufio/bufio.go:100 +0x103
bufio.(*Reader).ReadSlice(0xc0017eaf40, 0xc0017eae0a, 0x9e53fa, 0xc000553bc0, 0xc000f6efc4, 0x9, 0xc000000002)
        /snap/go/5646/src/bufio/bufio.go:359 +0x3d
bufio.(*Reader).ReadLine(0xc0017eaf40, 0xc001802230, 0x45, 0x0, 0x0, 0x0, 0x0)
        /snap/go/5646/src/bufio/bufio.go:388 +0x34
github.com/hashicorp/go-plugin.(*Client).logStderr(0xc000ae99a0, 0x1028ce0, 0xc0000ab688)
        /home/ubuntu/go/src/github.com/hashicorp/go-plugin/client.go:956 +0x14e
created by github.com/hashicorp/go-plugin.(*Client).Start
        /home/ubuntu/go/src/github.com/hashicorp/go-plugin/client.go:598 +0xccc

goroutine 181 [semacquire, 212 minutes]:
sync.runtime_Semacquire(0xc000ae9a2c)
        /snap/go/5646/src/runtime/sema.go:56 +0x42
sync.(*WaitGroup).Wait(0xc000ae9a2c)
        /snap/go/5646/src/sync/waitgroup.go:130 +0x64
github.com/hashicorp/go-plugin.(*Client).Start.func2(0xc000ae99a0, 0xc0007faf20)
        /home/ubuntu/go/src/github.com/hashicorp/go-plugin/client.go:614 +0xc0
created by github.com/hashicorp/go-plugin.(*Client).Start
        /home/ubuntu/go/src/github.com/hashicorp/go-plugin/client.go:601 +0xd18

goroutine 182 [IO wait, 212 minutes]:
internal/poll.runtime_pollWait(0x7f6e9594f0f8, 0x72, 0xffffffffffffffff)
        /snap/go/5646/src/runtime/netpoll.go:203 +0x55
internal/poll.(*pollDesc).wait(0xc0002d5098, 0x72, 0xf01, 0xfdc, 0xffffffffffffffff)
        /snap/go/5646/src/internal/poll/fd_poll_runtime.go:87 +0x45
internal/poll.(*pollDesc).waitRead(...)
        /snap/go/5646/src/internal/poll/fd_poll_runtime.go:92
internal/poll.(*FD).Read(0xc0002d5080, 0xc0016e0024, 0xfdc, 0xfdc, 0x0, 0x0, 0x0)
        /snap/go/5646/src/internal/poll/fd_unix.go:169 +0x19b
os.(*File).read(...)
        /snap/go/5646/src/os/file_unix.go:263
os.(*File).Read(0xc0000ab678, 0xc0016e0024, 0xfdc, 0xfdc, 0xc000cc5700, 0xc00008b380, 0xc000cc5680)
        /snap/go/5646/src/os/file.go:116 +0x71
bufio.(*Scanner).Scan(0xc000cc5710, 0xc000cc5700)
        /snap/go/5646/src/bufio/scan.go:213 +0xa4
github.com/hashicorp/go-plugin.(*Client).Start.func3(0xc000ae99a0, 0xc000dd5f20, 0x1033b80, 0xc0000ab678)
        /home/ubuntu/go/src/github.com/hashicorp/go-plugin/client.go:647 +0x185
created by github.com/hashicorp/go-plugin.(*Client).Start
        /home/ubuntu/go/src/github.com/hashicorp/go-plugin/client.go:642 +0xda4

goroutine 183 [IO wait, 58 minutes]:
internal/poll.runtime_pollWait(0x7f6e9594ec98, 0x72, 0xffffffffffffffff)
        /snap/go/5646/src/runtime/netpoll.go:203 +0x55
internal/poll.(*pollDesc).wait(0xc0007cd598, 0x72, 0x8000, 0x8000, 0xffffffffffffffff)
        /snap/go/5646/src/internal/poll/fd_poll_runtime.go:87 +0x45
internal/poll.(*pollDesc).waitRead(...)
        /snap/go/5646/src/internal/poll/fd_poll_runtime.go:92
internal/poll.(*FD).Read(0xc0007cd580, 0xc0017f2000, 0x8000, 0x8000, 0x0, 0x0, 0x0)
        /snap/go/5646/src/internal/poll/fd_unix.go:169 +0x19b
net.(*netFD).Read(0xc0007cd580, 0xc0017f2000, 0x8000, 0x8000, 0x800000601, 0x0, 0x60100000000)
        /snap/go/5646/src/net/fd_unix.go:202 +0x4f
net.(*conn).Read(0xc0000ab6b0, 0xc0017f2000, 0x8000, 0x8000, 0x0, 0x0, 0x0)
        /snap/go/5646/src/net/net.go:184 +0x8e
bufio.(*Reader).Read(0xc0002d5380, 0xc000282658, 0x9, 0x9, 0xc0017e6e00, 0x427ec3, 0xc0016e2420)
        /snap/go/5646/src/bufio/bufio.go:226 +0x24f
io.ReadAtLeast(0x1026f80, 0xc0002d5380, 0xc000282658, 0x9, 0x9, 0x9, 0x4820c0, 0xc0016e2420, 0xc0017e6e38)
        /snap/go/5646/src/io/io.go:310 +0x87
io.ReadFull(...)
        /snap/go/5646/src/io/io.go:329
golang.org/x/net/http2.readFrameHeader(0xc000282658, 0x9, 0x9, 0x1026f80, 0xc0002d5380, 0x0, 0xc000000000, 0x10000000042f778, 0xc000dbf3c0)
        /home/ubuntu/go/src/golang.org/x/net/http2/frame.go:237 +0x87
golang.org/x/net/http2.(*Framer).ReadFrame(0xc000282620, 0xc002627f60, 0xc002627f60, 0x0, 0x0)
        /home/ubuntu/go/src/golang.org/x/net/http2/frame.go:492 +0xa1
google.golang.org/grpc/internal/transport.(*http2Client).reader(0xc00016c1c0)
        /home/ubuntu/go/src/google.golang.org/grpc/internal/transport/http2_client.go:1274 +0x16f
created by google.golang.org/grpc/internal/transport.newHTTP2Client
        /home/ubuntu/go/src/google.golang.org/grpc/internal/transport/http2_client.go:301 +0xd23

goroutine 184 [select, 58 minutes]:
google.golang.org/grpc/internal/transport.(*controlBuffer).get(0xc000dbf3b0, 0x1, 0x0, 0x0, 0x0, 0x0)
        /home/ubuntu/go/src/google.golang.org/grpc/internal/transport/controlbuf.go:395 +0x122
google.golang.org/grpc/internal/transport.(*loopyWriter).run(0xc0002d5440, 0x0, 0x0)
        /home/ubuntu/go/src/google.golang.org/grpc/internal/transport/controlbuf.go:513 +0x1cd
google.golang.org/grpc/internal/transport.newHTTP2Client.func3(0xc00016c1c0)
        /home/ubuntu/go/src/google.golang.org/grpc/internal/transport/http2_client.go:347 +0x7b
created by google.golang.org/grpc/internal/transport.newHTTP2Client
        /home/ubuntu/go/src/google.golang.org/grpc/internal/transport/http2_client.go:345 +0xedb

goroutine 160 [chan receive, 212 minutes]:
github.com/oklog/run.(*Group).Run(0xc0017e7f90, 0xc001705cb0, 0x1)
        /home/ubuntu/go/src/github.com/oklog/run/group.go:43 +0xed
github.com/hashicorp/go-plugin.(*GRPCBroker).AcceptAndServe(0xc001742a00, 0x2, 0xc001705b90)
        /home/ubuntu/go/src/github.com/hashicorp/go-plugin/grpc_broker.go:354 +0x354
created by github.com/ava-labs/gecko/vms/rpcchainvm.(*VMClient).Initialize
        /home/ubuntu/go/src/github.com/ava-labs/gecko/vms/rpcchainvm/vm_client.go:90 +0x247

goroutine 161 [select, 212 minutes]:
google.golang.org/grpc.newClientStream.func5(0xc00014a000, 0xc0000a2a20, 0x103eac0, 0xc001640390)
        /home/ubuntu/go/src/google.golang.org/grpc/stream.go:318 +0xd7
created by google.golang.org/grpc.newClientStream
        /home/ubuntu/go/src/google.golang.org/grpc/stream.go:317 +0xbbf

goroutine 194 [select, 212 minutes]:
github.com/hashicorp/go-plugin.(*gRPCBrokerClientImpl).StartStream.func1(0xc000f6b440, 0xc000f350c0, 0x1048940, 0xc001705c60)
        /home/ubuntu/go/src/github.com/hashicorp/go-plugin/grpc_broker.go:181 +0x146
created by github.com/hashicorp/go-plugin.(*gRPCBrokerClientImpl).StartStream
        /home/ubuntu/go/src/github.com/hashicorp/go-plugin/grpc_broker.go:179 +0x165

goroutine 195 [IO wait, 212 minutes]:
internal/poll.runtime_pollWait(0x7f6e9594ed78, 0x72, 0x0)
        /snap/go/5646/src/runtime/netpoll.go:203 +0x55
internal/poll.(*pollDesc).wait(0xc0003b1d98, 0x72, 0x0, 0x0, 0xdd9c64)
        /snap/go/5646/src/internal/poll/fd_poll_runtime.go:87 +0x45
internal/poll.(*pollDesc).waitRead(...)
        /snap/go/5646/src/internal/poll/fd_poll_runtime.go:92
internal/poll.(*FD).Accept(0xc0003b1d80, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0)
        /snap/go/5646/src/internal/poll/fd_unix.go:384 +0x1d4
net.(*netFD).accept(0xc0003b1d80, 0xc000011cd8, 0x0, 0x0)
        /snap/go/5646/src/net/fd_unix.go:238 +0x42
net.(*UnixListener).accept(0xc001640960, 0xc000011cd8, 0x0, 0x0)
        /snap/go/5646/src/net/unixsock_posix.go:162 +0x32
net.(*UnixListener).Accept(0xc001640960, 0xc001756e40, 0x18, 0xc0005fe000, 0xaa3a1a)
        /snap/go/5646/src/net/unixsock.go:260 +0x64
google.golang.org/grpc.(*Server).Serve(0xc00048c000, 0x103ac40, 0xc00043aec0, 0x0, 0x0)
        /home/ubuntu/go/src/google.golang.org/grpc/server.go:621 +0x210
github.com/hashicorp/go-plugin.(*GRPCBroker).AcceptAndServe.func1(0x1, 0x0)
        /home/ubuntu/go/src/github.com/hashicorp/go-plugin/grpc_broker.go:333 +0x3c
github.com/oklog/run.(*Group).Run.func1(0xc0006e0360, 0xc00043b140, 0xc001705ca0)
        /home/ubuntu/go/src/github.com/oklog/run/group.go:38 +0x27
created by github.com/oklog/run.(*Group).Run
        /home/ubuntu/go/src/github.com/oklog/run/group.go:37 +0xbb

goroutine 196 [select, 212 minutes]:
github.com/hashicorp/go-plugin.(*GRPCBroker).AcceptAndServe.func3(0x656e69676e652f77, 0x6e616d776f6e732f)
        /home/ubuntu/go/src/github.com/hashicorp/go-plugin/grpc_broker.go:343 +0x9c
github.com/oklog/run.(*Group).Run.func1(0xc0006e0360, 0xc00043b160, 0xc001705cc0)
        /home/ubuntu/go/src/github.com/oklog/run/group.go:38 +0x27
created by github.com/oklog/run.(*Group).Run
        /home/ubuntu/go/src/github.com/oklog/run/group.go:37 +0xbb

goroutine 197 [IO wait, 212 minutes]:
internal/poll.runtime_pollWait(0x7f6e9594ebb8, 0x72, 0x0)
        /snap/go/5646/src/runtime/netpoll.go:203 +0x55
internal/poll.(*pollDesc).wait(0xc0003b1f18, 0x72, 0x0, 0x0, 0xdd9c64)
        /snap/go/5646/src/internal/poll/fd_poll_runtime.go:87 +0x45
internal/poll.(*pollDesc).waitRead(...)
        /snap/go/5646/src/internal/poll/fd_poll_runtime.go:92
internal/poll.(*FD).Accept(0xc0003b1f00, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0)
        /snap/go/5646/src/internal/poll/fd_unix.go:384 +0x1d4
net.(*netFD).accept(0xc0003b1f00, 0xc000011ce0, 0x0, 0x0)
        /snap/go/5646/src/net/fd_unix.go:238 +0x42
net.(*UnixListener).accept(0xc001640bd0, 0xc000011ce0, 0x0, 0x0)
        /snap/go/5646/src/net/unixsock_posix.go:162 +0x32
net.(*UnixListener).Accept(0xc001640bd0, 0xc001757e40, 0x18, 0xc0005fe300, 0xaa3a1a)
        /snap/go/5646/src/net/unixsock.go:260 +0x64
google.golang.org/grpc.(*Server).Serve(0xc00048c4e0, 0x103ac40, 0xc00043b220, 0x0, 0x0)
        /home/ubuntu/go/src/google.golang.org/grpc/server.go:621 +0x210
github.com/hashicorp/go-plugin.(*GRPCBroker).AcceptAndServe.func1(0x0, 0xc000f350c0)
        /home/ubuntu/go/src/github.com/hashicorp/go-plugin/grpc_broker.go:333 +0x3c
github.com/oklog/run.(*Group).Run.func1(0xc0006e07e0, 0xc00043b2c0, 0xc001705d30)
        /home/ubuntu/go/src/github.com/oklog/run/group.go:38 +0x27
created by github.com/oklog/run.(*Group).Run
        /home/ubuntu/go/src/github.com/oklog/run/group.go:37 +0xbb

goroutine 198 [select, 212 minutes]:
github.com/hashicorp/go-plugin.(*GRPCBroker).AcceptAndServe.func3(0xc000553858, 0xc000cc5fb8)
        /home/ubuntu/go/src/github.com/hashicorp/go-plugin/grpc_broker.go:343 +0x9c
github.com/oklog/run.(*Group).Run.func1(0xc0006e07e0, 0xc00043b2e0, 0xc001705d50)
        /home/ubuntu/go/src/github.com/oklog/run/group.go:38 +0x27
created by github.com/oklog/run.(*Group).Run
        /home/ubuntu/go/src/github.com/oklog/run/group.go:37 +0xbb

goroutine 245 [select, 92 minutes]:
google.golang.org/grpc/internal/transport.(*controlBuffer).get(0xc001882d20, 0x1, 0x0, 0x0, 0x0, 0x0)
        /home/ubuntu/go/src/google.golang.org/grpc/internal/transport/controlbuf.go:395 +0x122
google.golang.org/grpc/internal/transport.(*loopyWriter).run(0xc0017ae720, 0x0, 0x0)
        /home/ubuntu/go/src/google.golang.org/grpc/internal/transport/controlbuf.go:513 +0x1cd
google.golang.org/grpc/internal/transport.newHTTP2Client.func3(0xc00016c8c0)
        /home/ubuntu/go/src/google.golang.org/grpc/internal/transport/http2_client.go:347 +0x7b
created by google.golang.org/grpc/internal/transport.newHTTP2Client
        /home/ubuntu/go/src/google.golang.org/grpc/internal/transport/http2_client.go:345 +0xedb

goroutine 200 [select, 92 minutes]:
google.golang.org/grpc/internal/transport.(*controlBuffer).get(0xc001743220, 0x1, 0x0, 0x0, 0x0, 0x0)
        /home/ubuntu/go/src/google.golang.org/grpc/internal/transport/controlbuf.go:395 +0x122
google.golang.org/grpc/internal/transport.(*loopyWriter).run(0xc0006e0ba0, 0x0, 0x0)
        /home/ubuntu/go/src/google.golang.org/grpc/internal/transport/controlbuf.go:513 +0x1cd
google.golang.org/grpc/internal/transport.newHTTP2Server.func2(0xc0005fe780)
        /home/ubuntu/go/src/google.golang.org/grpc/internal/transport/http2_server.go:291 +0xcb
created by google.golang.org/grpc/internal/transport.newHTTP2Server
        /home/ubuntu/go/src/google.golang.org/grpc/internal/transport/http2_server.go:288 +0x10c1

goroutine 201 [select, 92 minutes]:
google.golang.org/grpc/internal/transport.(*http2Server).keepalive(0xc0005fe780)
        /home/ubuntu/go/src/google.golang.org/grpc/internal/transport/http2_server.go:966 +0x285
created by google.golang.org/grpc/internal/transport.newHTTP2Server
        /home/ubuntu/go/src/google.golang.org/grpc/internal/transport/http2_server.go:297 +0x10e6

goroutine 202 [IO wait, 92 minutes]:
internal/poll.runtime_pollWait(0x7f6e9594ead8, 0x72, 0xffffffffffffffff)
        /snap/go/5646/src/runtime/netpoll.go:203 +0x55
internal/poll.(*pollDesc).wait(0xc00174a118, 0x72, 0x8000, 0x8000, 0xffffffffffffffff)
        /snap/go/5646/src/internal/poll/fd_poll_runtime.go:87 +0x45
internal/poll.(*pollDesc).waitRead(...)
        /snap/go/5646/src/internal/poll/fd_poll_runtime.go:92
internal/poll.(*FD).Read(0xc00174a100, 0xc00175c000, 0x8000, 0x8000, 0x0, 0x0, 0x0)
        /snap/go/5646/src/internal/poll/fd_unix.go:169 +0x19b
net.(*netFD).Read(0xc00174a100, 0xc00175c000, 0x8000, 0x8000, 0x800010601, 0x0, 0x1060100000000)
        /snap/go/5646/src/net/fd_unix.go:202 +0x4f
net.(*conn).Read(0xc000011cd8, 0xc00175c000, 0x8000, 0x8000, 0x0, 0x0, 0x0)
        /snap/go/5646/src/net/net.go:184 +0x8e
bufio.(*Reader).Read(0xc0006e0ae0, 0xc00046ab98, 0x9, 0x9, 0xc000088000, 0x7f6e95ac4108, 0x0)
        /snap/go/5646/src/bufio/bufio.go:226 +0x24f
io.ReadAtLeast(0x1026f80, 0xc0006e0ae0, 0xc00046ab98, 0x9, 0x9, 0x9, 0xa06245, 0xc00277b40c, 0xc0028c64e8)
        /snap/go/5646/src/io/io.go:310 +0x87
io.ReadFull(...)
        /snap/go/5646/src/io/io.go:329
golang.org/x/net/http2.readFrameHeader(0xc00046ab98, 0x9, 0x9, 0x1026f80, 0xc0006e0ae0, 0x0, 0x0, 0xc00277b400, 0x0)
        /home/ubuntu/go/src/golang.org/x/net/http2/frame.go:237 +0x87
golang.org/x/net/http2.(*Framer).ReadFrame(0xc00046ab60, 0xc00277b400, 0x1954980, 0x0, 0x0)
        /home/ubuntu/go/src/golang.org/x/net/http2/frame.go:492 +0xa1
google.golang.org/grpc/internal/transport.(*http2Server).HandleStreams(0xc0005fe780, 0xc001640f90, 0xf3ba58)
        /home/ubuntu/go/src/google.golang.org/grpc/internal/transport/http2_server.go:453 +0x98
google.golang.org/grpc.(*Server).serveStreams(0xc00048c000, 0x10494e0, 0xc0005fe780)
        /home/ubuntu/go/src/google.golang.org/grpc/server.go:742 +0xdb
google.golang.org/grpc.(*Server).handleRawConn.func1(0xc00048c000, 0x10494e0, 0xc0005fe780)
        /home/ubuntu/go/src/google.golang.org/grpc/server.go:703 +0x3f
created by google.golang.org/grpc.(*Server).handleRawConn
        /home/ubuntu/go/src/google.golang.org/grpc/server.go:702 +0x4fd

goroutine 204 [select, 92 minutes]:
google.golang.org/grpc/internal/transport.(*controlBuffer).get(0xc001743310, 0x1, 0x0, 0x0, 0x0, 0x0)
        /home/ubuntu/go/src/google.golang.org/grpc/internal/transport/controlbuf.go:395 +0x122
google.golang.org/grpc/internal/transport.(*loopyWriter).run(0xc0006e0f60, 0x0, 0x0)
        /home/ubuntu/go/src/google.golang.org/grpc/internal/transport/controlbuf.go:513 +0x1cd
google.golang.org/grpc/internal/transport.newHTTP2Server.func2(0xc0005ff380)
        /home/ubuntu/go/src/google.golang.org/grpc/internal/transport/http2_server.go:291 +0xcb
created by google.golang.org/grpc/internal/transport.newHTTP2Server
        /home/ubuntu/go/src/google.golang.org/grpc/internal/transport/http2_server.go:288 +0x10c1

goroutine 205 [select, 92 minutes]:
google.golang.org/grpc/internal/transport.(*http2Server).keepalive(0xc0005ff380)
        /home/ubuntu/go/src/google.golang.org/grpc/internal/transport/http2_server.go:966 +0x285
created by google.golang.org/grpc/internal/transport.newHTTP2Server
        /home/ubuntu/go/src/google.golang.org/grpc/internal/transport/http2_server.go:297 +0x10e6

goroutine 206 [IO wait, 92 minutes]:
internal/poll.runtime_pollWait(0x7f6e9594e9f8, 0x72, 0xffffffffffffffff)
        /snap/go/5646/src/runtime/netpoll.go:203 +0x55
internal/poll.(*pollDesc).wait(0xc00174a298, 0x72, 0x8000, 0x8000, 0xffffffffffffffff)
        /snap/go/5646/src/internal/poll/fd_poll_runtime.go:87 +0x45
internal/poll.(*pollDesc).waitRead(...)
        /snap/go/5646/src/internal/poll/fd_poll_runtime.go:92
internal/poll.(*FD).Read(0xc00174a280, 0xc00180c000, 0x8000, 0x8000, 0x0, 0x0, 0x0)
        /snap/go/5646/src/internal/poll/fd_unix.go:169 +0x19b
net.(*netFD).Read(0xc00174a280, 0xc00180c000, 0x8000, 0x8000, 0x800010601, 0x0, 0x1060100000000)
        /snap/go/5646/src/net/fd_unix.go:202 +0x4f
net.(*conn).Read(0xc000011ce0, 0xc00180c000, 0x8000, 0x8000, 0x0, 0x0, 0x0)
        /snap/go/5646/src/net/net.go:184 +0x8e
bufio.(*Reader).Read(0xc0006e0b40, 0xc00046ac78, 0x9, 0x9, 0xc000088000, 0x7f6e95ac4108, 0x0)
        /snap/go/5646/src/bufio/bufio.go:226 +0x24f
io.ReadAtLeast(0x1026f80, 0xc0006e0b40, 0xc00046ac78, 0x9, 0x9, 0x9, 0xa06245, 0xc00277bb6c, 0xc00176e000)
        /snap/go/5646/src/io/io.go:310 +0x87
io.ReadFull(...)
        /snap/go/5646/src/io/io.go:329
golang.org/x/net/http2.readFrameHeader(0xc00046ac78, 0x9, 0x9, 0x1026f80, 0xc0006e0b40, 0x0, 0x0, 0xc00277bb60, 0x0)
        /home/ubuntu/go/src/golang.org/x/net/http2/frame.go:237 +0x87
golang.org/x/net/http2.(*Framer).ReadFrame(0xc00046ac40, 0xc00277bb60, 0x1954980, 0x0, 0x0)
        /home/ubuntu/go/src/golang.org/x/net/http2/frame.go:492 +0xa1
google.golang.org/grpc/internal/transport.(*http2Server).HandleStreams(0xc0005ff380, 0xc001641170, 0xf3ba58)
        /home/ubuntu/go/src/google.golang.org/grpc/internal/transport/http2_server.go:453 +0x98
google.golang.org/grpc.(*Server).serveStreams(0xc00048c4e0, 0x10494e0, 0xc0005ff380)
        /home/ubuntu/go/src/google.golang.org/grpc/server.go:742 +0xdb
google.golang.org/grpc.(*Server).handleRawConn.func1(0xc00048c4e0, 0x10494e0, 0xc0005ff380)
        /home/ubuntu/go/src/google.golang.org/grpc/server.go:703 +0x3f
created by google.golang.org/grpc.(*Server).handleRawConn
        /home/ubuntu/go/src/google.golang.org/grpc/server.go:702 +0x4fd

goroutine 244 [IO wait, 92 minutes]:
internal/poll.runtime_pollWait(0x7f6e9594e918, 0x72, 0xffffffffffffffff)
        /snap/go/5646/src/runtime/netpoll.go:203 +0x55
internal/poll.(*pollDesc).wait(0xc0007cdb18, 0x72, 0x8000, 0x8000, 0xffffffffffffffff)
        /snap/go/5646/src/internal/poll/fd_poll_runtime.go:87 +0x45
internal/poll.(*pollDesc).waitRead(...)
        /snap/go/5646/src/internal/poll/fd_poll_runtime.go:92
internal/poll.(*FD).Read(0xc0007cdb00, 0xc001904000, 0x8000, 0x8000, 0x0, 0x0, 0x0)
        /snap/go/5646/src/internal/poll/fd_unix.go:169 +0x19b
net.(*netFD).Read(0xc0007cdb00, 0xc001904000, 0x8000, 0x8000, 0x800000601, 0x0, 0x60100000000)
        /snap/go/5646/src/net/fd_unix.go:202 +0x4f
net.(*conn).Read(0xc0000aba40, 0xc001904000, 0x8000, 0x8000, 0x0, 0x0, 0x0)
        /snap/go/5646/src/net/net.go:184 +0x8e
bufio.(*Reader).Read(0xc0017ae660, 0xc000282738, 0x9, 0x9, 0xc0018fee00, 0x427ec3, 0xc0016e3c20)
        /snap/go/5646/src/bufio/bufio.go:226 +0x24f
io.ReadAtLeast(0x1026f80, 0xc0017ae660, 0xc000282738, 0x9, 0x9, 0x9, 0x4820c0, 0xc0016e3c20, 0xc0018fee38)
        /snap/go/5646/src/io/io.go:310 +0x87
io.ReadFull(...)
        /snap/go/5646/src/io/io.go:329
golang.org/x/net/http2.readFrameHeader(0xc000282738, 0x9, 0x9, 0x1026f80, 0xc0017ae660, 0x0, 0xc000000000, 0x10000000042f778, 0xc001882d30)
        /home/ubuntu/go/src/golang.org/x/net/http2/frame.go:237 +0x87
golang.org/x/net/http2.(*Framer).ReadFrame(0xc000282700, 0xc00277b420, 0xc00277b420, 0x0, 0x0)
        /home/ubuntu/go/src/golang.org/x/net/http2/frame.go:492 +0xa1
google.golang.org/grpc/internal/transport.(*http2Client).reader(0xc00016c8c0)
        /home/ubuntu/go/src/google.golang.org/grpc/internal/transport/http2_client.go:1274 +0x16f
created by google.golang.org/grpc/internal/transport.newHTTP2Client
        /home/ubuntu/go/src/google.golang.org/grpc/internal/transport/http2_client.go:301 +0xd23

goroutine 240 [select, 176 minutes]:
github.com/ava-labs/gecko/snow/networking/handler.(*Handler).Dispatch(0xc0016a9590)
        /home/ubuntu/go/src/github.com/ava-labs/gecko/snow/networking/handler/handler.go:41 +0x139
github.com/ava-labs/gecko/utils/logging.(*Log).RecoverAndPanic(0xc000848180, 0xc0016e8c90)
        /home/ubuntu/go/src/github.com/ava-labs/gecko/utils/logging/log.go:254 +0x4f
created by github.com/ava-labs/gecko/chains.(*manager).createSnowmanChain
        /home/ubuntu/go/src/github.com/ava-labs/gecko/chains/manager.go:524 +0x737

goroutine 247 [select, 92 minutes]:
google.golang.org/grpc/internal/transport.(*controlBuffer).get(0xc001882eb0, 0x1, 0x0, 0x0, 0x0, 0x0)
        /home/ubuntu/go/src/google.golang.org/grpc/internal/transport/controlbuf.go:395 +0x122
google.golang.org/grpc/internal/transport.(*loopyWriter).run(0xc0017aeb40, 0x0, 0x0)
        /home/ubuntu/go/src/google.golang.org/grpc/internal/transport/controlbuf.go:513 +0x1cd
google.golang.org/grpc/internal/transport.newHTTP2Client.func3(0xc00016cc40)
        /home/ubuntu/go/src/google.golang.org/grpc/internal/transport/http2_client.go:347 +0x7b
created by google.golang.org/grpc/internal/transport.newHTTP2Client
        /home/ubuntu/go/src/google.golang.org/grpc/internal/transport/http2_client.go:345 +0xedb

goroutine 242 [sync.Cond.Wait, 212 minutes]:
runtime.goparkunlock(...)
        /snap/go/5646/src/runtime/proc.go:310
sync.runtime_notifyListWait(0xc001780ed0, 0x0)
        /snap/go/5646/src/runtime/sema.go:513 +0xf8
sync.(*Cond).Wait(0xc001780ec0)
        /snap/go/5646/src/sync/cond.go:56 +0x9d
github.com/ava-labs/gecko/utils/logging.(*Log).run(0xc0006e6480)
        /home/ubuntu/go/src/github.com/ava-labs/gecko/utils/logging/log.go:68 +0x2e5
github.com/ava-labs/gecko/utils/logging.(*Log).RecoverAndPanic(0xc0006e6480, 0xc0016e8ca0)
        /home/ubuntu/go/src/github.com/ava-labs/gecko/utils/logging/log.go:254 +0x4f
created by github.com/ava-labs/gecko/utils/logging.New
        /home/ubuntu/go/src/github.com/ava-labs/gecko/utils/logging/log.go:42 +0x14e

goroutine 246 [IO wait, 92 minutes]:
internal/poll.runtime_pollWait(0x7f6e9594e838, 0x72, 0xffffffffffffffff)
        /snap/go/5646/src/runtime/netpoll.go:203 +0x55
internal/poll.(*pollDesc).wait(0xc0007cde18, 0x72, 0x8000, 0x8000, 0xffffffffffffffff)
        /snap/go/5646/src/internal/poll/fd_poll_runtime.go:87 +0x45
internal/poll.(*pollDesc).waitRead(...)
        /snap/go/5646/src/internal/poll/fd_poll_runtime.go:92
internal/poll.(*FD).Read(0xc0007cde00, 0xc001994000, 0x8000, 0x8000, 0x0, 0x0, 0x0)
        /snap/go/5646/src/internal/poll/fd_unix.go:169 +0x19b
net.(*netFD).Read(0xc0007cde00, 0xc001994000, 0x8000, 0x8000, 0x800000601, 0x0, 0x60100000000)
        /snap/go/5646/src/net/fd_unix.go:202 +0x4f
net.(*conn).Read(0xc0000aba48, 0xc001994000, 0x8000, 0x8000, 0x0, 0x0, 0x0)
        /snap/go/5646/src/net/net.go:184 +0x8e
bufio.(*Reader).Read(0xc0017ae960, 0xc000282818, 0x9, 0x9, 0xc001750e00, 0x427ec3, 0xc001888060)
        /snap/go/5646/src/bufio/bufio.go:226 +0x24f
io.ReadAtLeast(0x1026f80, 0xc0017ae960, 0xc000282818, 0x9, 0x9, 0x9, 0x4820c0, 0xc001888060, 0xc001750e38)
        /snap/go/5646/src/io/io.go:310 +0x87
io.ReadFull(...)
        /snap/go/5646/src/io/io.go:329
golang.org/x/net/http2.readFrameHeader(0xc000282818, 0x9, 0x9, 0x1026f80, 0xc0017ae960, 0x0, 0xc000000000, 0x10000000042f778, 0xc001882ec0)
        /home/ubuntu/go/src/golang.org/x/net/http2/frame.go:237 +0x87
golang.org/x/net/http2.(*Framer).ReadFrame(0xc0002827e0, 0xc000503820, 0xc000503820, 0x0, 0x0)
        /home/ubuntu/go/src/golang.org/x/net/http2/frame.go:492 +0xa1
google.golang.org/grpc/internal/transport.(*http2Client).reader(0xc00016cc40)
        /home/ubuntu/go/src/google.golang.org/grpc/internal/transport/http2_client.go:1274 +0x16f
created by google.golang.org/grpc/internal/transport.newHTTP2Client
        /home/ubuntu/go/src/google.golang.org/grpc/internal/transport/http2_client.go:301 +0xd23

goroutine 225 [select, 212 minutes]:
google.golang.org/grpc.(*ccBalancerWrapper).watcher(0xc00177b480)
        /home/ubuntu/go/src/google.golang.org/grpc/balancer_conn_wrappers.go:69 +0xc2
created by google.golang.org/grpc.newCCBalancerWrapper
        /home/ubuntu/go/src/google.golang.org/grpc/balancer_conn_wrappers.go:60 +0x16d

goroutine 258 [chan receive, 212 minutes]:
google.golang.org/grpc.(*addrConn).resetTransport(0xc001822000)
        /home/ubuntu/go/src/google.golang.org/grpc/clientconn.go:1166 +0x6ea
created by google.golang.org/grpc.(*addrConn).connect
        /home/ubuntu/go/src/google.golang.org/grpc/clientconn.go:809 +0x128

goroutine 259 [select, 212 minutes]:
google.golang.org/grpc.(*ccBalancerWrapper).watcher(0xc00177b600)
        /home/ubuntu/go/src/google.golang.org/grpc/balancer_conn_wrappers.go:69 +0xc2
created by google.golang.org/grpc.newCCBalancerWrapper
        /home/ubuntu/go/src/google.golang.org/grpc/balancer_conn_wrappers.go:60 +0x16d

goroutine 260 [chan receive, 212 minutes]:
google.golang.org/grpc.(*addrConn).resetTransport(0xc0018222c0)
        /home/ubuntu/go/src/google.golang.org/grpc/clientconn.go:1166 +0x6ea
created by google.golang.org/grpc.(*addrConn).connect
        /home/ubuntu/go/src/google.golang.org/grpc/clientconn.go:809 +0x128

goroutine 261 [sync.Cond.Wait, 212 minutes]:
runtime.goparkunlock(...)
        /snap/go/5646/src/runtime/proc.go:310
sync.runtime_notifyListWait(0xc00177b6d0, 0x3)
        /snap/go/5646/src/runtime/sema.go:513 +0xf8
sync.(*Cond).Wait(0xc00177b6c0)
        /snap/go/5646/src/sync/cond.go:56 +0x9d
github.com/ava-labs/gecko/utils/logging.(*Log).run(0xc000848240)
        /home/ubuntu/go/src/github.com/ava-labs/gecko/utils/logging/log.go:68 +0x2e5
github.com/ava-labs/gecko/utils/logging.(*Log).RecoverAndPanic(0xc000848240, 0xc00176d360)
        /home/ubuntu/go/src/github.com/ava-labs/gecko/utils/logging/log.go:254 +0x4f
created by github.com/ava-labs/gecko/utils/logging.New
        /home/ubuntu/go/src/github.com/ava-labs/gecko/utils/logging/log.go:42 +0x14e

goroutine 262 [select, 212 minutes]:
github.com/ava-labs/gecko/utils/timer.(*Timer).Dispatch(0xc001bc9590)
        /home/ubuntu/go/src/github.com/ava-labs/gecko/utils/timer/timer.go:90 +0x1a2
github.com/ava-labs/gecko/utils/logging.(*Log).RecoverAndPanic(0xc000848240, 0xc00176d3c0)
        /home/ubuntu/go/src/github.com/ava-labs/gecko/utils/logging/log.go:254 +0x4f
created by github.com/ava-labs/gecko/vms/spdagvm.(*VM).Initialize
        /home/ubuntu/go/src/github.com/ava-labs/gecko/vms/spdagvm/vm.go:124 +0x487

goroutine 274 [select, 176 minutes]:
github.com/ava-labs/gecko/snow/networking/handler.(*Handler).Dispatch(0xc001bc9a10)
        /home/ubuntu/go/src/github.com/ava-labs/gecko/snow/networking/handler/handler.go:41 +0x139
github.com/ava-labs/gecko/utils/logging.(*Log).RecoverAndPanic(0xc000848240, 0xc00176d5c0)
        /home/ubuntu/go/src/github.com/ava-labs/gecko/utils/logging/log.go:254 +0x4f
created by github.com/ava-labs/gecko/chains.(*manager).createAvalancheChain
        /home/ubuntu/go/src/github.com/ava-labs/gecko/chains/manager.go:438 +0x899

goroutine 276 [sync.Cond.Wait, 212 minutes]:
runtime.goparkunlock(...)
        /snap/go/5646/src/runtime/proc.go:310
sync.runtime_notifyListWait(0xc00177ba50, 0x0)
        /snap/go/5646/src/runtime/sema.go:513 +0xf8
sync.(*Cond).Wait(0xc00177ba40)
        /snap/go/5646/src/sync/cond.go:56 +0x9d
github.com/ava-labs/gecko/utils/logging.(*Log).run(0xc000848300)
        /home/ubuntu/go/src/github.com/ava-labs/gecko/utils/logging/log.go:68 +0x2e5
github.com/ava-labs/gecko/utils/logging.(*Log).RecoverAndPanic(0xc000848300, 0xc00176d5d0)
        /home/ubuntu/go/src/github.com/ava-labs/gecko/utils/logging/log.go:254 +0x4f
created by github.com/ava-labs/gecko/utils/logging.New
        /home/ubuntu/go/src/github.com/ava-labs/gecko/utils/logging/log.go:42 +0x14e

goroutine 277 [sync.Cond.Wait, 212 minutes]:
runtime.goparkunlock(...)
        /snap/go/5646/src/runtime/proc.go:310
sync.runtime_notifyListWait(0xc00177bbd0, 0x2)
        /snap/go/5646/src/runtime/sema.go:513 +0xf8
sync.(*Cond).Wait(0xc00177bbc0)
        /snap/go/5646/src/sync/cond.go:56 +0x9d
github.com/ava-labs/gecko/utils/logging.(*Log).run(0xc0008483c0)
        /home/ubuntu/go/src/github.com/ava-labs/gecko/utils/logging/log.go:68 +0x2e5
github.com/ava-labs/gecko/utils/logging.(*Log).RecoverAndPanic(0xc0008483c0, 0xc00176d880)
        /home/ubuntu/go/src/github.com/ava-labs/gecko/utils/logging/log.go:254 +0x4f
created by github.com/ava-labs/gecko/utils/logging.New
        /home/ubuntu/go/src/github.com/ava-labs/gecko/utils/logging/log.go:42 +0x14e

goroutine 278 [select, 212 minutes]:
github.com/ava-labs/gecko/utils/timer.(*Timer).Dispatch(0xc001bda180)
        /home/ubuntu/go/src/github.com/ava-labs/gecko/utils/timer/timer.go:90 +0x1a2
github.com/ava-labs/gecko/utils/logging.(*Log).RecoverAndPanic(0xc0008483c0, 0xc00176d8e0)
        /home/ubuntu/go/src/github.com/ava-labs/gecko/utils/logging/log.go:254 +0x4f
created by github.com/ava-labs/gecko/vms/spchainvm.(*VM).Initialize
        /home/ubuntu/go/src/github.com/ava-labs/gecko/vms/spchainvm/vm.go:106 +0x30c

goroutine 286 [select, 176 minutes]:
github.com/ava-labs/gecko/snow/networking/handler.(*Handler).Dispatch(0xc001bda420)
        /home/ubuntu/go/src/github.com/ava-labs/gecko/snow/networking/handler/handler.go:41 +0x139
github.com/ava-labs/gecko/utils/logging.(*Log).RecoverAndPanic(0xc0008483c0, 0xc00176dab0)
        /home/ubuntu/go/src/github.com/ava-labs/gecko/utils/logging/log.go:254 +0x4f
created by github.com/ava-labs/gecko/chains.(*manager).createSnowmanChain
        /home/ubuntu/go/src/github.com/ava-labs/gecko/chains/manager.go:524 +0x737

goroutine 288 [sync.Cond.Wait, 212 minutes]:
runtime.goparkunlock(...)
        /snap/go/5646/src/runtime/proc.go:310
sync.runtime_notifyListWait(0xc00177be90, 0x0)
        /snap/go/5646/src/runtime/sema.go:513 +0xf8
sync.(*Cond).Wait(0xc00177be80)
        /snap/go/5646/src/sync/cond.go:56 +0x9d
github.com/ava-labs/gecko/utils/logging.(*Log).run(0xc000848540)
        /home/ubuntu/go/src/github.com/ava-labs/gecko/utils/logging/log.go:68 +0x2e5
github.com/ava-labs/gecko/utils/logging.(*Log).RecoverAndPanic(0xc000848540, 0xc00176dac0)
        /home/ubuntu/go/src/github.com/ava-labs/gecko/utils/logging/log.go:254 +0x4f
created by github.com/ava-labs/gecko/utils/logging.New
        /home/ubuntu/go/src/github.com/ava-labs/gecko/utils/logging/log.go:42 +0x14e

goroutine 289 [sync.Cond.Wait, 212 minutes]:
runtime.goparkunlock(...)
        /snap/go/5646/src/runtime/proc.go:310
sync.runtime_notifyListWait(0xc00177bfd0, 0x2)
        /snap/go/5646/src/runtime/sema.go:513 +0xf8
sync.(*Cond).Wait(0xc00177bfc0)
        /snap/go/5646/src/sync/cond.go:56 +0x9d
github.com/ava-labs/gecko/utils/logging.(*Log).run(0xc000848600)
        /home/ubuntu/go/src/github.com/ava-labs/gecko/utils/logging/log.go:68 +0x2e5
github.com/ava-labs/gecko/utils/logging.(*Log).RecoverAndPanic(0xc000848600, 0xc00176dd50)
        /home/ubuntu/go/src/github.com/ava-labs/gecko/utils/logging/log.go:254 +0x4f
created by github.com/ava-labs/gecko/utils/logging.New
        /home/ubuntu/go/src/github.com/ava-labs/gecko/utils/logging/log.go:42 +0x14e

goroutine 297 [select, 176 minutes]:
github.com/ava-labs/gecko/snow/networking/handler.(*Handler).Dispatch(0xc001bdb170)
        /home/ubuntu/go/src/github.com/ava-labs/gecko/snow/networking/handler/handler.go:41 +0x139
github.com/ava-labs/gecko/utils/logging.(*Log).RecoverAndPanic(0xc000848600, 0xc00176dff0)
        /home/ubuntu/go/src/github.com/ava-labs/gecko/utils/logging/log.go:254 +0x4f
created by github.com/ava-labs/gecko/chains.(*manager).createSnowmanChain
        /home/ubuntu/go/src/github.com/ava-labs/gecko/chains/manager.go:524 +0x737

goroutine 299 [sync.Cond.Wait, 212 minutes]:
runtime.goparkunlock(...)
        /snap/go/5646/src/runtime/proc.go:310
sync.runtime_notifyListWait(0xc001916210, 0x0)
        /snap/go/5646/src/runtime/sema.go:513 +0xf8
sync.(*Cond).Wait(0xc001916200)
        /snap/go/5646/src/sync/cond.go:56 +0x9d
github.com/ava-labs/gecko/utils/logging.(*Log).run(0xc000848780)
        /home/ubuntu/go/src/github.com/ava-labs/gecko/utils/logging/log.go:68 +0x2e5
github.com/ava-labs/gecko/utils/logging.(*Log).RecoverAndPanic(0xc000848780, 0xc001932000)
        /home/ubuntu/go/src/github.com/ava-labs/gecko/utils/logging/log.go:254 +0x4f
created by github.com/ava-labs/gecko/utils/logging.New
        /home/ubuntu/go/src/github.com/ava-labs/gecko/utils/logging/log.go:42 +0x14e

goroutine 17139 [runnable]:
net/http.(*connReader).backgroundRead(0xc001be6930)
        /snap/go/5646/src/net/http/server.go:677
created by net/http.(*connReader).startBackgroundRead
        /snap/go/5646/src/net/http/server.go:674 +0xd0

I think the most interesting trace to look at is the dispatch thread's stacktrace:

goroutine 1 [syscall, 175 minutes, locked to thread]:
github.com/ava-labs/salticidae-go._Cfunc_peernetwork_conn_get_peer_id(0x7f6e6c0fcb40, 0x0)
        _cgo_gotypes.go:2161 +0x4a
github.com/ava-labs/salticidae-go.(*peerNetworkConn).GetPeerID.func1(0xc0002d9810, 0xc265e6f6bf669289)
        /home/ubuntu/go/src/github.com/ava-labs/salticidae-go/network.go:582 +0x55
github.com/ava-labs/salticidae-go.(*peerNetworkConn).GetPeerID(0xc0002d9810, 0xc200000000000000, 0x867897)
        /home/ubuntu/go/src/github.com/ava-labs/salticidae-go/network.go:582 +0x2f
github.com/ava-labs/gecko/networking.(*Voting).sanitize(0x1955660, 0x7f6e6c0fcb10, 0x7f6e6c0fcb40, 0xc006f35a0b, 0x0, 0x0, 0xc48e494b00000000, 0x0, 0x0, 0x0, ...)
        /home/ubuntu/go/src/github.com/ava-labs/gecko/networking/voting_handlers.go:613 +0xbb
github.com/ava-labs/gecko/networking.pullQuery(0x7f6e6c0fcb10, 0x7f6e6c0fcb40, 0x0)
        /home/ubuntu/go/src/github.com/ava-labs/gecko/networking/voting_handlers.go:576 +0x76
github.com/ava-labs/gecko/networking._cgoexpwrap_45040d5f0502_pullQuery(0x7f6e6c0fcb10, 0x7f6e6c0fcb40, 0x0)
        _cgo_gotypes.go:351 +0x3f
github.com/ava-labs/salticidae-go._Cfunc_eventcontext_dispatch(0x1b06590)
        _cgo_gotypes.go:987 +0x41
github.com/ava-labs/salticidae-go.(*eventContext).Dispatch.func1(0xc0000a7310)
        /home/ubuntu/go/src/github.com/ava-labs/salticidae-go/event.go:34 +0x55
github.com/ava-labs/salticidae-go.(*eventContext).Dispatch(0xc0000a7310)
        /home/ubuntu/go/src/github.com/ava-labs/salticidae-go/event.go:34 +0x2b
github.com/ava-labs/gecko/node.(*Node).Dispatch(...)
        /home/ubuntu/go/src/github.com/ava-labs/gecko/node/node.go:296
main.main()
        /home/ubuntu/go/src/github.com/ava-labs/gecko/main/main.go:90 +0xa8b

We can see that this thread has been locked in a cgo external call for ~3 hours. Which matches how long the node had been unresponsive for.

Operating System
This bug was found on Ubuntu 18.04.

AVM API - avm.listAssets method not found

Describe the bug
I'm implementing some examples using slopes, and to query all the assets and their balance for a wallet, I called the method avm.listAssets to query all the assets for the address, but it didn't work.
I refer to this method: https://docs.ava.network/v1.0/en/tools/slopes/api/classes/_apis_avm_api_.avmapi/#listassets
Following the stacktrace of the error, I checked also the file api.ts, and the listAssets method is defined there (row 411).

To Reproduce
Just calling the method, below my code:
let assets = await avm.listAssets("X-M2rjv2xrpKShRbNA8nXnHi7qgFgZiTCyN")

Expected behavior
I expected to get as result the list of Assets (with a positive balance) for the address passed as parameter in the function

Screenshots

bug-scr1

bug-scr2

api ts

Operating System
OSX 10.13.6

Additional context
Talked about this bug on Discord today, @collincusce got it.

By submitting this issue I agree to the Terms and Conditions of the Developer Accelerator Program.

MacOS install ava-lab

Describe the bug
Can you please write a document about how Mac users should install ava-lab? I'm trying to follow the steps here https://docs.ava.network/v1.0/en/quickstart/ava-getting-started/ and these are my issues:

  1. Package "github.com/decred/dcrd/dcrec/secp256k1" has been updated to "github.com/decred/dcrd/dcrec/secp256k1/v3", and some of your codes in "gecko/utils/crypto/secp256k1" need to be updated as well.
  2. After manually fixed point #1, I try to run "./scripts/build.sh", but got error "../../../../pkg/mod/github.com/ava-labs/[email protected]/crypto.go:4:11: fatal error: 'salticidae/crypto.h' file not found". I've installed "openssl" but I'm not sure if it contains "libssl-dev" and "libuv1-dev"

To Reproduce
Install ava-labs on MacOS.

platform.getAccount - json: cannot unmarshal object into Go value of type [1]interface

Describe the bug
I was testing the platform.getAccount and while trying to check corner cases, I found if a user used X-Chain address in place for the P-Chain address(which is quite possible for new user), the response message is generic golang marshal error.
A better solution would be to provide a user friendly message such as Use a valid P-Chain address.

{"jsonrpc":"2.0","error":{"code":-32600,"message":"json: cannot unmarshal object into Go value of type [1]interface {
}","data":{"address":"X-HaxnKcAWD4Nxo3qXWCr5pXhDoRNjf2utx"}},"id":1}

To Reproduce
Use any X-Chain address with platform.getAccount method. Example command -

curl -X POST --data '{
    "jsonrpc": "2.0",
    "method": "platform.getAccount",
    "params":{
        "address":"X-5TQr5hSAZ8ZKuSaYLg5sr4VwvcvwKZ1Mg"
    },
    "id": 1
}' -H 'content-type:application/json;' 127.0.0.1:9650/ext/bc/P

Expected behavior
A better user-friendly response would be to provide a user-friendly error message such as Use a valid P-Chain address.

Screenshots
If applicable, add screenshots to help explain your problem.

Operating System
Ubuntu 18.04

Additional context
A new user/developer may not be able to understand about eXchanging-Chain and Platform-Chain

By submitting this issue I agree to the Terms and Conditions of the Developer Accelerator Program.

node isn't stopped when port is busy

when default api server port is busy, node is still running and not gracefully reporting error and stopping the node to start as rest apis wont respond.

Steps to reproduce

  1. run a process on default port (9650)
  2. run ava node (./build/ava)

Expected behavior:
should report an error and stop the node.

Feature: Reduce frequency of disconnected validator messages on-screen

Especially when the network goes down, the on-screen messages show sub-one second repeated messages about disconnected validators which is a fire hose of info. Note the first and last lines are the same info character for character.

`WARN [04-27|16:57:57] /networking/voting_handlers.go#363: Attempted to send a PullQuery message to a disconnected validator: EkKeGSLUbHrrtuayBtbwgWDRUiAziC3ao

WARN [04-27|16:57:57] /networking/voting_handlers.go#363: Attempted to send a PullQuery message to a disconnected validator: NX4zVkuiRJZYe6Nzzav7GXN3TakUet3Co

WARN [04-27|16:57:57] /networking/voting_handlers.go#363: Attempted to send a PullQuery message to a disconnected validator: N86eodVZja3GEyZJTo3DFUPGpxEEvjGHs

WARN [04-27|16:57:57] /networking/voting_handlers.go#363: Attempted to send a PullQuery message to a disconnected validator: DsMP6jLhi1MkDVc3qx9xx9AAZWx8e87Jd

WARN [04-27|16:57:57] /networking/voting_handlers.go#363: Attempted to send a PullQuery message to a disconnected validator: CMsa8cMw4eib1Hb8GG4xiUKAq5eE1BwUX

WARN [04-27|16:57:57] /networking/voting_handlers.go#363: Attempted to send a PullQuery message to a disconnected validator: N86eodVZja3GEyZJTo3DFUPGpxEEvjGHs

WARN [04-27|16:57:57] /networking/voting_handlers.go#363: Attempted to send a PullQuery message to a disconnected validator: EkKeGSLUbHrrtuayBtbwgWDRUiAziC3ao
`

It also overwhelms the log files removing any useful info. I would suggest either reducing the frequency of such messages to once a minute, and potentially give some useful stat like "disconnected validator last seen: X minutes, Y seconds ago".

Testing nit: tree_test.go#L259 should be Blue

Describe the bug

        if pref := tree.Preference(); !Blue.Equals(pref) {
                t.Fatalf("Wrong preference. Expected %s got %s", Green, pref)
        if pref := tree.Preference(); !Blue.Equals(pref) {
                t.Fatalf("Wrong preference. Expected %s got %s", Blue, pref)

Screenshots
from tree_test.go#L259
Screen Shot 2020-03-15 at 8 37 38 PM

Operating System
Universally Applicable

Gecko does not respond to the standard SIGTERM signal (kill 15 or CTRL+C)

Describe the bug
The ava node process does not respond to the SIGTERM signal, and the process can only be stopped with a SIGKILL signal (kill 9)

Operating System
UBUNTU 18.04

Reproduce

screen
./ava
try to interrupt: press ctrl+c

Result (piece of the output log)

2020-04-21 12:12:31.773010 [net info] <Conn fd=76 addr=<NetAddr 95.179.163.191:9801> mode=active> connect timeout
2020-04-21 12:12:31.773060 [net info] 04ea443790: lost connection <Conn fd=66 addr=<NetAddr 78.168.90.52:9651> mode=active>
2020-04-21 12:12:31.773112 [net info] 04ea443790: lost connection <Conn fd=76 addr=<NetAddr 95.179.163.191:9801> mode=active>
ERROR[04-21|12:12:31] /node/node.go#140: Error during async call: unable to connect
ERROR[04-21|12:12:31] /node/node.go#140: Error during async call: unable to connect
^CINFO [04-21|12:12:33] /node/node.go#652: shutting down the node
INFO [04-21|12:12:33] <chain 11111111111111111111111111111111LpoYY> /snow/engine/snowman/transitive.go#56: Shutting down Snowman consensus
^C^C^C^C^C^C^C^C^C2020-04-21 12:15:26.462926 [net info] 04ea443790: peer ping-pong timeout
2020-04-21 12:15:26.463102 [net info] 04ea443790: peer ping-pong timeout
2020-04-21 12:15:26.463442 [net info] 04ea443790: lost connection <Conn fd=31 addr=<NetAddr 18.234.153.22:21001> mode=active>
2020-04-21 12:15:26.463514 [net info] 04ea443790: lost connection <Conn fd=37 addr=<NetAddr 34.207.133.167:21001> mode=active>
2020-04-21 12:15:26.509655 [net info] 04ea443790: peer ping-pong timeout
2020-04-21 12:15:26.509730 [net info] 04ea443790: peer ping-pong timeout
2020-04-21 12:15:26.509758 [net info] 04ea443790: peer ping-pong timeout
2020-04-21 12:15:26.509772 [net info] 04ea443790: peer ping-pong timeout

image

User can't spend X-Chain funds after ExportUser/ImportUser

Describe the bug
If you do keystore.exportUser and then keystore.importUser, the user doesn't have their X-Chain funds/UTXOs.

To Reproduce

  • Create a keystore user
  • Create an X-chain address
  • Send funds to X-Chain address using faucet
  • Use keystore.exportUser to export the user
  • Stop the node. Start again with a different (new) database.
  • Use keystore.importUser to import the user (output of keystore.exportUser)
  • Try to send funds from the X-Chain address. Will get "insufficient funds" error.

Expected behavior
A keystore user that is exported then imported has all the same keys, etc. after it is exported/imported as before

Operating System
Ubuntu 18.04

Additional context
Thanks to @michaelbnewman for finding this bug

By submitting this issue I agree to the Terms and Conditions of the Developer Accelerator Program.

UTXO DoS Vulnerability

Describe the bug
Inside our UTXO based VMs, we map addresses to UTXOs that reference the address. However, these UTXOs are stored in a single list for each account. Someone can DoS us by sending many UTXOs to the same address, performing an O(total number of UTXOs attached to address) operation per commit of every tx.

To Reproduce
Run a throughput test issuing transactions to only one address.

Expected behavior
The time to execute a transaction should be O(number of objects in the transactions).

Operating System
Universally applicable.

"terminate called after throwing an instance of 'std::ios_base::failure[abi:cxx11]'" exception

Describe the bug
Stopping after few seconds of activity

To Reproduce

  1. Run ava --public-ip=MY_PUBLIC_IP
  2. View exception

Expected behavior
Well, I was hoping it would start and work

Operating System
Ubuntu 18.04 LTS in CLI Mode

Additional context

terminate called after throwing an instance of 'std::ios_base::failure[abi:cxx11]'
  what():  insufficient buffer: iostream error
SIGABRT: abort
PC=0x7fae7fb9b7bb m=4 sigcode=18446744073709551610

goroutine 0 [idle]:
runtime: unknown pc 0x7fae7fb9b7bb
stack: frame={sp:0x7fae7cf3d6b0, fp:0x0} stack=[0x7fae7c7411e8,0x7fae7cf40de8)
00007fae7cf3d5b0:  0000000000000000  0000000000000000
00007fae7cf3d5c0:  0000000000000000  0000000000000000
00007fae7cf3d5d0:  0000000000000000  0000000000000000
00007fae7cf3d5e0:  fffffffffffffff8  0000000000000001
00007fae7cf3d5f0:  0000000000000000  0000000000000000
00007fae7cf3d600:  0000000000000000  0000000000000030
00007fae7cf3d610:  0000000000000007  0000000000000000
00007fae7cf3d620:  0000000000000000  0000000000000000
00007fae7cf3d630:  0000000000000000  ffffffffff000000
00007fae7cf3d640:  0000000000000000  0000000000000000
00007fae7cf3d650:  0000000000000000  00007fae7fdf4b40
00007fae7cf3d660:  4000000000000000  0000000000000000
00007fae7cf3d670:  0000000000000000  0000000000000000
00007fae7cf3d680:  0000000000000000  0000000000000000
00007fae7cf3d690:  00007fae7cf3d8d0  00007fae7cf3d8d8
00007fae7cf3d6a0:  676e697472617473  726874206c6c6120
00007fae7cf3d6b0: <0000000000000000  0000000000000000
00007fae7cf3d6c0:  0000000000000004  0000000000000008
00007fae7cf3d6d0:  0000000000000000  000000c000c29274
00007fae7cf3d6e0:  0000000000000001  0000000000000003
00007fae7cf3d6f0:  0000000000000010  0000000000000008
00007fae7cf3d700:  0000000000000000  000000c000c29244
00007fae7cf3d710:  0000000000000001  000000000000000f
00007fae7cf3d720:  0000000000000001  0000000000000003
00007fae7cf3d730:  fffffffe7fffffff  ffffffffffffffff
00007fae7cf3d740:  ffffffffffffffff  ffffffffffffffff
00007fae7cf3d750:  ffffffffffffffff  ffffffffffffffff
00007fae7cf3d760:  ffffffffffffffff  ffffffffffffffff
00007fae7cf3d770:  ffffffffffffffff  ffffffffffffffff
00007fae7cf3d780:  ffffffffffffffff  ffffffffffffffff
00007fae7cf3d790:  ffffffffffffffff  ffffffffffffffff
00007fae7cf3d7a0:  ffffffffffffffff  ffffffffffffffff
runtime: unknown pc 0x7fae7fb9b7bb
stack: frame={sp:0x7fae7cf3d6b0, fp:0x0} stack=[0x7fae7c7411e8,0x7fae7cf40de8)
00007fae7cf3d5b0:  0000000000000000  0000000000000000
00007fae7cf3d5c0:  0000000000000000  0000000000000000
00007fae7cf3d5d0:  0000000000000000  0000000000000000
00007fae7cf3d5e0:  fffffffffffffff8  0000000000000001
00007fae7cf3d5f0:  0000000000000000  0000000000000000
00007fae7cf3d600:  0000000000000000  0000000000000030
00007fae7cf3d610:  0000000000000007  0000000000000000
00007fae7cf3d620:  0000000000000000  0000000000000000
00007fae7cf3d630:  0000000000000000  ffffffffff000000
00007fae7cf3d640:  0000000000000000  0000000000000000
00007fae7cf3d650:  0000000000000000  00007fae7fdf4b40
00007fae7cf3d660:  4000000000000000  0000000000000000
00007fae7cf3d670:  0000000000000000  0000000000000000
00007fae7cf3d680:  0000000000000000  0000000000000000
00007fae7cf3d690:  00007fae7cf3d8d0  00007fae7cf3d8d8
00007fae7cf3d6a0:  676e697472617473  726874206c6c6120
00007fae7cf3d6b0: <0000000000000000  0000000000000000
00007fae7cf3d6c0:  0000000000000004  0000000000000008
00007fae7cf3d6d0:  0000000000000000  000000c000c29274
00007fae7cf3d6e0:  0000000000000001  0000000000000003
00007fae7cf3d6f0:  0000000000000010  0000000000000008
00007fae7cf3d700:  0000000000000000  000000c000c29244
00007fae7cf3d710:  0000000000000001  000000000000000f
00007fae7cf3d720:  0000000000000001  0000000000000003
00007fae7cf3d730:  fffffffe7fffffff  ffffffffffffffff
00007fae7cf3d740:  ffffffffffffffff  ffffffffffffffff
00007fae7cf3d750:  ffffffffffffffff  ffffffffffffffff
00007fae7cf3d760:  ffffffffffffffff  ffffffffffffffff
00007fae7cf3d770:  ffffffffffffffff  ffffffffffffffff
00007fae7cf3d780:  ffffffffffffffff  ffffffffffffffff
00007fae7cf3d790:  ffffffffffffffff  ffffffffffffffff
00007fae7cf3d7a0:  ffffffffffffffff  ffffffffffffffff

goroutine 1 [syscall]:
runtime.cgocall(0xc628ae, 0xc001885b90, 0xc0017eda50)
        /usr/local/go/src/runtime/cgocall.go:128 +0x5b fp=0xc001885b60 sp=0xc001885b28 pc=0x42810b
github.com/ava-labs/salticidae-go._Cfunc_eventcontext_dispatch(0x216e6f0)
        _cgo_gotypes.go:979 +0x41 fp=0xc001885b90 sp=0xc001885b60 pc=0x91f0b1
github.com/ava-labs/salticidae-go.(*eventContext).Dispatch.func1(0xc0004c1060)
        /go/src/github.com/ava-labs/salticidae-go/event.go:34 +0x5e fp=0xc001885bd0 sp=0xc001885b90 pc=0x926fee
github.com/ava-labs/salticidae-go.(*eventContext).Dispatch(0xc0004c1060)
        /go/src/github.com/ava-labs/salticidae-go/event.go:34 +0x2b fp=0xc001885be8 sp=0xc001885bd0 pc=0x922eab
github.com/ava-labs/gecko/node.(*Node).Dispatch(...)
        /go/src/github.com/ava-labs/gecko/node/node.go:293
main.main()
        /go/src/github.com/ava-labs/gecko/main/main.go:86 +0xa56 fp=0xc001885f60 sp=0xc001885be8 pc=0xc5f126
runtime.main()
        /usr/local/go/src/runtime/proc.go:203 +0x21e fp=0xc001885fe0 sp=0xc001885f60 pc=0x45612e
runtime.goexit()
        /usr/local/go/src/runtime/asm_amd64.s:1357 +0x1 fp=0xc001885fe8 sp=0xc001885fe0 pc=0x4827c1

goroutine 3 [syscall]:
os/signal.signal_recv(0x0)
        /usr/local/go/src/runtime/sigqueue.go:147 +0x9c
os/signal.loop()
        /usr/local/go/src/os/signal/signal_unix.go:23 +0x22
created by os/signal.init.0
        /usr/local/go/src/os/signal/signal_unix.go:29 +0x41

goroutine 5 [select]:
github.com/syndtr/goleveldb/leveldb/util.(*BufferPool).drain(0xc00012a2a0)
        /go/src/github.com/syndtr/goleveldb/leveldb/util/buffer_pool.go:206 +0x134
created by github.com/syndtr/goleveldb/leveldb/util.NewBufferPool
        /go/src/github.com/syndtr/goleveldb/leveldb/util/buffer_pool.go:237 +0x176

goroutine 6 [select]:
github.com/syndtr/goleveldb/leveldb.(*session).refLoop(0xc0001241e0)
        /go/src/github.com/syndtr/goleveldb/leveldb/session_util.go:189 +0x5f9
created by github.com/syndtr/goleveldb/leveldb.newSession
        /go/src/github.com/syndtr/goleveldb/leveldb/session.go:93 +0x2b4

goroutine 51 [select]:
github.com/syndtr/goleveldb/leveldb.(*DB).compactionError(0xc0006a8000)
        /go/src/github.com/syndtr/goleveldb/leveldb/db_compaction.go:91 +0xcd
created by github.com/syndtr/goleveldb/leveldb.openDB
        /go/src/github.com/syndtr/goleveldb/leveldb/db.go:148 +0x40c

goroutine 52 [select]:
github.com/syndtr/goleveldb/leveldb.(*DB).mpoolDrain(0xc0006a8000)
        /go/src/github.com/syndtr/goleveldb/leveldb/db_state.go:101 +0xf6
created by github.com/syndtr/goleveldb/leveldb.openDB
        /go/src/github.com/syndtr/goleveldb/leveldb/db.go:149 +0x42e

goroutine 53 [select]:
github.com/syndtr/goleveldb/leveldb.(*DB).tCompaction(0xc0006a8000)
        /go/src/github.com/syndtr/goleveldb/leveldb/db_compaction.go:836 +0x25d
created by github.com/syndtr/goleveldb/leveldb.openDB
        /go/src/github.com/syndtr/goleveldb/leveldb/db.go:155 +0x582

goroutine 54 [select]:
github.com/syndtr/goleveldb/leveldb.(*DB).mCompaction(0xc0006a8000)
        /go/src/github.com/syndtr/goleveldb/leveldb/db_compaction.go:773 +0x150
created by github.com/syndtr/goleveldb/leveldb.openDB
        /go/src/github.com/syndtr/goleveldb/leveldb/db.go:156 +0x5a4

goroutine 57 [sync.Cond.Wait]:
runtime.goparkunlock(...)
        /usr/local/go/src/runtime/proc.go:310
sync.runtime_notifyListWait(0xc00055e3d0, 0x8)
        /usr/local/go/src/runtime/sema.go:510 +0xf8
sync.(*Cond).Wait(0xc00055e3c0)
        /usr/local/go/src/sync/cond.go:56 +0x9d
github.com/ava-labs/gecko/utils/logging.(*Log).run(0xc00001e0c0)
        /go/src/github.com/ava-labs/gecko/utils/logging/log.go:68 +0x313
github.com/ava-labs/gecko/utils/logging.(*Log).RecoverAndPanic(0xc00001e0c0, 0xc0004a53d0)
        /go/src/github.com/ava-labs/gecko/utils/logging/log.go:254 +0x57
created by github.com/ava-labs/gecko/utils/logging.New
        /go/src/github.com/ava-labs/gecko/utils/logging/log.go:42 +0x14e

goroutine 58 [select]:
github.com/ava-labs/gecko/nat.(*mapper).mapPort(0xc000690080, 0xc025b325b3)
        /go/src/github.com/ava-labs/gecko/nat/mapper.go:107 +0x15c
created by github.com/ava-labs/gecko/nat.(*mapper).MapPort
        /go/src/github.com/ava-labs/gecko/nat/mapper.go:81 +0x70

goroutine 115 [sync.Cond.Wait]:
runtime.goparkunlock(...)
        /usr/local/go/src/runtime/proc.go:310
sync.runtime_notifyListWait(0xc0017eb610, 0x0)
        /usr/local/go/src/runtime/sema.go:510 +0xf8
sync.(*Cond).Wait(0xc0017eb600)
        /usr/local/go/src/sync/cond.go:56 +0x9d
github.com/ava-labs/gecko/utils/logging.(*Log).run(0xc001830c00)
        /go/src/github.com/ava-labs/gecko/utils/logging/log.go:68 +0x313
github.com/ava-labs/gecko/utils/logging.(*Log).RecoverAndPanic(0xc001830c00, 0xc0017ed3b0)
        /go/src/github.com/ava-labs/gecko/utils/logging/log.go:254 +0x57
created by github.com/ava-labs/gecko/utils/logging.New
        /go/src/github.com/ava-labs/gecko/utils/logging/log.go:42 +0x14e

goroutine 59 [select]:
github.com/ava-labs/gecko/nat.(*mapper).mapPort(0xc000690080, 0xc025b225b2)
        /go/src/github.com/ava-labs/gecko/nat/mapper.go:107 +0x15c
created by github.com/ava-labs/gecko/nat.(*mapper).MapPort
        /go/src/github.com/ava-labs/gecko/nat/mapper.go:81 +0x70

goroutine 60 [sync.Cond.Wait]:
runtime.goparkunlock(...)
        /usr/local/go/src/runtime/proc.go:310
sync.runtime_notifyListWait(0xc00055e410, 0x0)
        /usr/local/go/src/runtime/sema.go:510 +0xf8
sync.(*Cond).Wait(0xc00055e400)
        /usr/local/go/src/sync/cond.go:56 +0x9d
github.com/ava-labs/gecko/utils/logging.(*Log).run(0xc00001e3c0)
        /go/src/github.com/ava-labs/gecko/utils/logging/log.go:68 +0x313
github.com/ava-labs/gecko/utils/logging.(*Log).RecoverAndPanic(0xc00001e3c0, 0xc0004a5660)
        /go/src/github.com/ava-labs/gecko/utils/logging/log.go:254 +0x57
created by github.com/ava-labs/gecko/utils/logging.New
        /go/src/github.com/ava-labs/gecko/utils/logging/log.go:42 +0x14e

goroutine 61 [IO wait]:
internal/poll.runtime_pollWait(0x7fae7c705d68, 0x72, 0x0)
        /usr/local/go/src/runtime/netpoll.go:184 +0x55
internal/poll.(*pollDesc).wait(0xc000c16018, 0x72, 0x0, 0x0, 0xede0ae)
        /usr/local/go/src/internal/poll/fd_poll_runtime.go:87 +0x45
internal/poll.(*pollDesc).waitRead(...)
        /usr/local/go/src/internal/poll/fd_poll_runtime.go:92
internal/poll.(*FD).Accept(0xc000c16000, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0)
        /usr/local/go/src/internal/poll/fd_unix.go:384 +0x1f8
net.(*netFD).accept(0xc000c16000, 0xc0006b7c70, 0xc00009a380, 0x7fae7f974d98)
        /usr/local/go/src/net/fd_unix.go:238 +0x42
net.(*TCPListener).accept(0xc000c12020, 0xc0006b7ca0, 0x431cb8, 0x30)
        /usr/local/go/src/net/tcpsock_posix.go:139 +0x32
net.(*TCPListener).Accept(0xc000c12020, 0xe437e0, 0xc000c10180, 0xd81400, 0x179ba10)
        /usr/local/go/src/net/tcpsock.go:261 +0x47
net/http.(*Server).Serve(0xc000c14000, 0x1156280, 0xc000c12020, 0x0, 0x0)
        /usr/local/go/src/net/http/server.go:2896 +0x286
net/http.(*Server).ListenAndServe(0xc000c14000, 0xc000c14000, 0xc00055ee00)
        /usr/local/go/src/net/http/server.go:2825 +0xb7
net/http.ListenAndServe(...)
        /usr/local/go/src/net/http/server.go:3080
github.com/ava-labs/gecko/api.(*Server).Dispatch(0x18f79d0, 0x0, 0x0)
        /go/src/github.com/ava-labs/gecko/api/server.go:48 +0x118
github.com/ava-labs/gecko/node.(*Node).initAPIServer.func2()
        /go/src/github.com/ava-labs/gecko/node/node.go:481 +0x32
github.com/ava-labs/gecko/utils/logging.(*Log).RecoverAndPanic(0xc00001e0c0, 0xc0004c0a50)
        /go/src/github.com/ava-labs/gecko/utils/logging/log.go:254 +0x57
created by github.com/ava-labs/gecko/node.(*Node).initAPIServer
        /go/src/github.com/ava-labs/gecko/node/node.go:481 +0x207

goroutine 73 [select]:
github.com/ava-labs/gecko/utils/timer.(*Timer).Dispatch(0xc0004bb560)
        /go/src/github.com/ava-labs/gecko/utils/timer/timer.go:90 +0x1e1
github.com/ava-labs/gecko/utils/timer.(*TimeoutManager).Dispatch(...)
        /go/src/github.com/ava-labs/gecko/utils/timer/timeout_manager.go:40
github.com/ava-labs/gecko/utils/logging.(*Log).RecoverAndPanic(0xc00001e0c0, 0xc0004c1150)
        /go/src/github.com/ava-labs/gecko/utils/logging/log.go:254 +0x57
created by github.com/ava-labs/gecko/networking.(*Handshake).Initialize
        /go/src/github.com/ava-labs/gecko/networking/handshake_handlers.go:156 +0x349

goroutine 74 [select]:
github.com/ava-labs/gecko/utils/timer.(*Timer).Dispatch(0xc0004bb5f0)
        /go/src/github.com/ava-labs/gecko/utils/timer/timer.go:90 +0x1e1
github.com/ava-labs/gecko/utils/timer.(*TimeoutManager).Dispatch(...)
        /go/src/github.com/ava-labs/gecko/utils/timer/timeout_manager.go:40
github.com/ava-labs/gecko/utils/logging.(*Log).RecoverAndPanic(0xc00001e0c0, 0xc0004c1170)
        /go/src/github.com/ava-labs/gecko/utils/logging/log.go:254 +0x57
created by github.com/ava-labs/gecko/networking.(*Handshake).Initialize
        /go/src/github.com/ava-labs/gecko/networking/handshake_handlers.go:159 +0x3db

goroutine 75 [select]:
github.com/ava-labs/gecko/utils/timer.(*Repeater).Dispatch(0xc0004bb620)
        /go/src/github.com/ava-labs/gecko/utils/timer/repeater.go:58 +0x19a
github.com/ava-labs/gecko/utils/logging.(*Log).RecoverAndPanic(0xc00001e0c0, 0xc0004c1190)
        /go/src/github.com/ava-labs/gecko/utils/logging/log.go:254 +0x57
created by github.com/ava-labs/gecko/networking.(*Handshake).Initialize
        /go/src/github.com/ava-labs/gecko/networking/handshake_handlers.go:162 +0x519

goroutine 106 [sync.Cond.Wait]:
runtime.goparkunlock(...)
        /usr/local/go/src/runtime/proc.go:310
sync.runtime_notifyListWait(0xc0002403d0, 0x0)
        /usr/local/go/src/runtime/sema.go:510 +0xf8
sync.(*Cond).Wait(0xc0002403c0)
        /usr/local/go/src/sync/cond.go:56 +0x9d
github.com/ava-labs/gecko/utils/timer.(*Executor).Dispatch(0x18f7ec8)
        /go/src/github.com/ava-labs/gecko/utils/timer/executor.go:54 +0x190
github.com/ava-labs/gecko/utils/logging.(*Log).RecoverAndPanic(0xc00001e0c0, 0xc0017e5520)
        /go/src/github.com/ava-labs/gecko/utils/logging/log.go:254 +0x57
created by github.com/ava-labs/gecko/networking.(*Voting).Initialize
        /go/src/github.com/ava-labs/gecko/networking/voting_handlers.go:84 +0x41b

goroutine 39 [select]:
github.com/ava-labs/gecko/utils/timer.(*Timer).Dispatch(0xc000c10a20)
        /go/src/github.com/ava-labs/gecko/utils/timer/timer.go:90 +0x1e1
github.com/ava-labs/gecko/utils/timer.(*TimeoutManager).Dispatch(...)
        /go/src/github.com/ava-labs/gecko/utils/timer/timeout_manager.go:40
github.com/ava-labs/gecko/snow/networking/timeout.(*Manager).Dispatch(...)
        /go/src/github.com/ava-labs/gecko/snow/networking/timeout/manager.go:28
github.com/ava-labs/gecko/utils/logging.(*Log).RecoverAndPanic(0xc00001e0c0, 0xc0017e53e0)
        /go/src/github.com/ava-labs/gecko/utils/logging/log.go:254 +0x57
created by github.com/ava-labs/gecko/chains.New
        /go/src/github.com/ava-labs/gecko/chains/manager.go:147 +0xae

goroutine 25 [sync.Cond.Wait]:
runtime.goparkunlock(...)
        /usr/local/go/src/runtime/proc.go:310
sync.runtime_notifyListWait(0xc0017eae90, 0x3)
        /usr/local/go/src/runtime/sema.go:510 +0xf8
sync.(*Cond).Wait(0xc0017eae80)
        /usr/local/go/src/sync/cond.go:56 +0x9d
github.com/ava-labs/gecko/utils/logging.(*Log).run(0xc00001f8c0)
        /go/src/github.com/ava-labs/gecko/utils/logging/log.go:68 +0x313
github.com/ava-labs/gecko/utils/logging.(*Log).RecoverAndPanic(0xc00001f8c0, 0xc0017ece20)
        /go/src/github.com/ava-labs/gecko/utils/logging/log.go:254 +0x57
created by github.com/ava-labs/gecko/utils/logging.New
        /go/src/github.com/ava-labs/gecko/utils/logging/log.go:42 +0x14e

goroutine 26 [select]:
github.com/ava-labs/gecko/utils/timer.(*Timer).Dispatch(0xc001777bf0)
        /go/src/github.com/ava-labs/gecko/utils/timer/timer.go:90 +0x1e1
github.com/ava-labs/gecko/utils/logging.(*Log).RecoverAndPanic(0xc00001f8c0, 0xc0017ecf50)
        /go/src/github.com/ava-labs/gecko/utils/logging/log.go:254 +0x57
created by github.com/ava-labs/gecko/vms/platformvm.(*VM).Initialize
        /go/src/github.com/ava-labs/gecko/vms/platformvm/vm.go:303 +0x434

goroutine 114 [select]:
github.com/ava-labs/gecko/snow/networking/handler.(*Handler).Dispatch(0xc0004ba300)
        /go/src/github.com/ava-labs/gecko/snow/networking/handler/handler.go:41 +0x140
github.com/ava-labs/gecko/utils/logging.(*Log).RecoverAndPanic(0xc00001f8c0, 0xc0017ed3a0)
        /go/src/github.com/ava-labs/gecko/utils/logging/log.go:254 +0x57
created by github.com/ava-labs/gecko/chains.(*manager).createSnowmanChain
        /go/src/github.com/ava-labs/gecko/chains/manager.go:524 +0x740

rax    0x0
rbx    0x6
rcx    0x7fae7fb9b7bb
rdx    0x0
rdi    0x2
rsi    0x7fae7cf3d6b0
rbp    0x7fae7fd20840
rsp    0x7fae7cf3d6b0
r8     0x0
r9     0x7fae7cf3d6b0
r10    0x8
r11    0x246
r12    0x7fae640017c0
r13    0x7fae7cf3db20
r14    0x216f060
r15    0x7fae7c47f010
rip    0x7fae7fb9b7bb
rflags 0x246
cs     0x33
fs     0x0
gs     0x0

By submitting this issue I agree to the Terms and Conditions of the Developer Accelerator Program.

RPC Memory Vulnerability

Describe the bug
Creating a new user with an extremely long username can cause the node to quickly run out of storage space. Need to implement sanity check on size of username and password.

To Reproduce
Issue create account requests with names millions of characters long.

Expected behavior
RPCs should limit request sizes to a reasonable size and error gracefully.

Operating System
This is universally applicable.

Node crashes with out of memory

Reporting on behalf of Discord user Yaginuma.

Describe the bug
Node crashes after being up for ~12 hours.
Crashes with:

fatal error: runtime: out of memory

runtime stack:
runtime.throw(0xef3859, 0x16)
    /root/ava/go/src/runtime/panic.go:774 +0x72
runtime.sysMap(0xc264000000, 0x5c000000, 0x1b21838)
    /root/ava/go/src/runtime/mem_linux.go:169 +0xc5
runtime.(*mheap).sysAlloc(0x1b08da0, 0x59400000, 0x7fc59a259740, 0x90)
    /root/ava/go/src/runtime/malloc.go:701 +0x1cd
runtime.(*mheap).grow(0x1b08da0, 0x2ca00, 0xffffffff)
    /root/ava/go/src/runtime/mheap.go:1255 +0xa3
runtime.(*mheap).allocSpanLocked(0x1b08da0, 0x2ca00, 0x1b21848, 0xa7377b0b00000000)
    /root/ava/go/src/runtime/mheap.go:1170 +0x266
runtime.(*mheap).alloc_m(0x1b08da0, 0x2ca00, 0x7fc500000100, 0xc2173be760)
    /root/ava/go/src/runtime/mheap.go:1022 +0xc2
runtime.(*mheap).alloc.func1()
    /root/ava/go/src/runtime/mheap.go:1093 +0x4c
runtime.(*mheap).alloc(0x1b08da0, 0x2ca00, 0x19f010100, 0xc00118e300)
    /root/ava/go/src/runtime/mheap.go:1092 +0x8a
runtime.largeAlloc(0x59400000, 0xc000870001, 0x481986)
    /root/ava/go/src/runtime/malloc.go:1138 +0x97
runtime.mallocgc.func1()
    /root/ava/go/src/runtime/malloc.go:1033 +0x46
runtime.systemstack(0x0)
    /root/ava/go/src/runtime/asm_amd64.s:370 +0x66
runtime.mstart()
    /root/ava/go/src/runtime/proc.go:1146

To Reproduce
Unknown. Run a node for 12 hours?

Expected behavior
The node doesn't crash

Operating System
Ubuntu 18.04 running in a Docker instance.
Host machine is also Ubuntu 18.04

Additional context
Log files are the following, over and over, filling ~50 MB:

WARN [04-24|15:26:23] /networking/voting_handlers.go#363: Attempted to send a PullQuery message to a disconnected validator: NX4zVkuiRJZYe6Nzzav7GXN3TakUet3Co
WARN [04-24|15:26:23] /networking/voting_handlers.go#363: Attempted to send a PullQuery message to a disconnected validator: CMsa8cMw4eib1Hb8GG4xiUKAq5eE1BwUX

By submitting this issue I agree to the Terms and Conditions of the Developer Accelerator Program.

[Crash] terminate called after throwing an instance of 'std::ios_base::failure[abi:cxx11]'

Description
Crash after 3 hours, running (IP is hidden):

$AVALABS/gecko/build/ava \
--public-ip=12.34.56.789 \
--xput-server-port=9255 \
--api-ipcs-enabled=true \
--http-port=9650 \
--http-tls-enabled=false \
--db-enabled=true \
--db-dir=$AVALABS/avash/stash/dragonstake/db1 \
--log-level=info \
--log-dir=$AVALABS/avash/stash/dragonstake/logs \
--staking-tls-key-file=$AVALABS/gecko/keys/staker.key \
--staking-tls-cert-file=$AVALABS/gecko/keys/staker.crt \
--staking-port=9158

Interesting (to me) excerpts from the output - ava.log.gz - captured using ... &> ava.log &:

(...)
terminate called after throwing an instance of 'std::ios_base::failure[abi:cxx11]'
  what():  insufficient buffer: iostream error
SIGABRT: abort
PC=0x7fa133a13e97 m=5 sigcode=18446744073709551610

goroutine 0 [idle]:
runtime: unknown pc 0x7fa133a13e97
stack: frame={sp:0x7fa12b7fa680, fp:0x0} stack=[0x7fa12affe1e8,0x7fa12b7fdde8)
00007fa12b7fa580:  00007fa12b7fa5b0  00007fa12b7fa5c0 
(...)
goroutine 1 [syscall]:
runtime.cgocall(0xbe9499, 0xc0006a9b90, 0xc0007798a0)
        /home/ava/.gvm/gos/go1.13.8/src/runtime/cgocall.go:128 +0x5b fp=0xc0006a9b60 sp=0xc0006a9b28 pc=0x42563b
github.com/ava-labs/salticidae-go._Cfunc_eventcontext_dispatch(0x33e09b0)
        _cgo_gotypes.go:979 +0x41 fp=0xc0006a9b90 sp=0xc0006a9b60 pc=0x89e151
(...)
goroutine 23 [select, 2 minutes]:
github.com/syndtr/goleveldb/leveldb.(*session).refLoop(0xc0002f8000)
        /home/ava/.gvm/pkgsets/go1.13.8/global/src/github.com/syndtr/goleveldb/leveldb/session_util.go:189 +0x5f9
created by github.com/syndtr/goleveldb/leveldb.newSession
        /home/ava/.gvm/pkgsets/go1.13.8/global/src/github.com/syndtr/goleveldb/leveldb/session.go:93 +0x2b4
(...)

Operating System
Ubuntu 18.04
4 * Intel(R) Atom(TM) CPU N2800 @ 1.86GHz
4 GB RAM

By submitting this issue I agree to the Terms and Conditions of the Developer Accelerator Program.

Can't install node on ubuntu

My VPS:

DISTRIB_ID=Ubuntu
DISTRIB_RELEASE=18.04
DISTRIB_CODENAME=bionic
DISTRIB_DESCRIPTION="Ubuntu 18.04.4 LTS"

GO:

echo $GOPATH
/home/novy/go

Following this guide: https://medium.com/avalabs/install-and-run-the-ava-cascade-testnet-3e72957fea2e or GitHub README: https://github.com/ava-labs/gecko I have to compile source code by:
Clone the Gecko repository:

go get -v -d github.com/ava-labs/gecko/...
cd $GOPATH/src/github.com/ava-labs/gecko

LOG:

novy@novy:~$ go get -d -v github.com/ava-labs/gecko/...
go: finding github.com/ava-labs/gecko latest
go: downloading github.com/ava-labs/gecko v0.0.0-20200419170843-117b1b91cc82
go: extracting github.com/ava-labs/gecko v0.0.0-20200419170843-117b1b91cc82
go: finding nanomsg.org/go/mangos v2.0.0+incompatible
go: finding nanomsg.org/go/mangos/v2 v2.0.8
go: finding github.com/gorilla/rpc v1.2.0
go: finding github.com/decred/dcrd/dcrec/secp256k1 v1.0.3
go: finding github.com/hashicorp/go-plugin v1.2.2
go: finding google.golang.org/grpc v1.28.1
go: finding github.com/decred/dcrd/dcrec v1.0.0
go: finding github.com/decred/dcrd v1.3.0
go: finding github.com/mr-tron/base58 v1.1.3
go: finding github.com/nbutton23/zxcvbn-go latest
go: downloading github.com/gorilla/rpc v1.2.0
go: downloading google.golang.org/grpc v1.28.1
go: downloading github.com/decred/dcrd/dcrec v1.0.0
go: downloading nanomsg.org/go/mangos v2.0.0+incompatible
go: downloading nanomsg.org/go/mangos/v2 v2.0.8
go: downloading github.com/decred/dcrd v1.3.0
go: downloading github.com/decred/dcrd/dcrec/secp256k1 v1.0.3
go: downloading github.com/nbutton23/zxcvbn-go v0.0.0-20180912185939-ae427f1e4c1d
go: downloading github.com/hashicorp/go-plugin v1.2.2
go: downloading github.com/mr-tron/base58 v1.1.3
go: extracting github.com/decred/dcrd/dcrec v1.0.0
go: extracting github.com/gorilla/rpc v1.2.0
go: extracting github.com/nbutton23/zxcvbn-go v0.0.0-20180912185939-ae427f1e4c1d
go: extracting github.com/mr-tron/base58 v1.1.3
go: extracting github.com/decred/dcrd v1.3.0
go: extracting github.com/decred/dcrd/dcrec/secp256k1 v1.0.3
go: extracting github.com/hashicorp/go-plugin v1.2.2
go: extracting nanomsg.org/go/mangos/v2 v2.0.8
go: finding golang.org/x/crypto latest
go: downloading golang.org/x/crypto v0.0.0-20200414173820-0848c9571904
go: extracting nanomsg.org/go/mangos v2.0.0+incompatible
go: finding github.com/syndtr/goleveldb v1.0.0
go: extracting google.golang.org/grpc v1.28.1
go: downloading github.com/syndtr/goleveldb v1.0.0
go: finding github.com/gorilla/websocket v1.4.2
go: downloading github.com/gorilla/websocket v1.4.2
go: extracting github.com/syndtr/goleveldb v1.0.0
go: extracting golang.org/x/crypto v0.0.0-20200414173820-0848c9571904
go: finding github.com/prometheus/client_golang v1.5.1
go: downloading github.com/prometheus/client_golang v1.5.1
go: extracting github.com/gorilla/websocket v1.4.2
go: extracting github.com/prometheus/client_golang v1.5.1
go: finding golang.org/x/net latest
go: downloading golang.org/x/net v0.0.0-20200324143707-d3edc9973b7e
go: finding github.com/gorilla/handlers v1.4.2
go: downloading github.com/gorilla/handlers v1.4.2
go: extracting github.com/gorilla/handlers v1.4.2
go: finding github.com/ava-labs/salticidae-go latest
go: extracting golang.org/x/net v0.0.0-20200324143707-d3edc9973b7e
go: finding github.com/jackpal/go-nat-pmp v1.0.2
go: downloading github.com/ava-labs/salticidae-go v0.0.0-20200415175213-e40318dca728
go: downloading github.com/jackpal/go-nat-pmp v1.0.2
go: finding github.com/jackpal/gateway v1.0.6
go: downloading github.com/jackpal/gateway v1.0.6
go: extracting github.com/ava-labs/salticidae-go v0.0.0-20200415175213-e40318dca728
go: extracting github.com/jackpal/go-nat-pmp v1.0.2
go: extracting github.com/jackpal/gateway v1.0.6
go: finding github.com/golang/protobuf v1.4.0
go: downloading github.com/golang/protobuf v1.4.0
go: extracting github.com/golang/protobuf v1.4.0
go: downloading github.com/oklog/run v1.0.0
go: downloading golang.org/x/sys v0.0.0-20200323222414-85ca7c5b95cd
go: downloading github.com/Microsoft/go-winio v0.4.11
go: downloading github.com/mitchellh/go-testing-interface v0.0.0-20171004221916-a61a99592b77
go: extracting github.com/oklog/run v1.0.0
go: downloading google.golang.org/protobuf v1.21.0
go: extracting github.com/mitchellh/go-testing-interface v0.0.0-20171004221916-a61a99592b77
go: extracting github.com/Microsoft/go-winio v0.4.11
go: downloading github.com/hashicorp/go-hclog v0.0.0-20180709165350-ff2cf002a8dd
go: downloading github.com/golang/snappy v0.0.0-20180518054509-2e65f85255db
go: downloading github.com/decred/dcrd/dcrec/secp256k1/v2 v2.0.0
go: extracting github.com/hashicorp/go-hclog v0.0.0-20180709165350-ff2cf002a8dd
go: downloading github.com/hashicorp/yamux v0.0.0-20180604194846-3520598351bb
go: extracting github.com/hashicorp/yamux v0.0.0-20180604194846-3520598351bb
go: extracting github.com/golang/snappy v0.0.0-20180518054509-2e65f85255db
go: extracting golang.org/x/sys v0.0.0-20200323222414-85ca7c5b95cd
go: extracting github.com/decred/dcrd/dcrec/secp256k1/v2 v2.0.0
go: extracting google.golang.org/protobuf v1.21.0
novy@novy:~$ cd $GOPATH/src/github.com/ava-labs/gecko
-bash: cd: /home/novy/go/src/github.com/ava-labs/gecko: **No such file or directory**
  1. I manually created directory $GOPATH/src/github.com/ava-labs
  2. cd $GOPATH/src/github.com/ava-labs && git clone https://github.com/ava-labs/gecko.git
  3. novy@novy:~/go/src/github.com/gecko$ ./scripts/build.sh
go: finding github.com/ava-labs/salticidae-go latest
./build.sh: line 10: cd: /home/novy/go/src/github.com/ava-labs/salticidae-go: No such file or directory

novy@novy:~/go/src/github.com/ava-labs$ git clone https://github.com/ava-labs/salticidae-go.git

go: finding github.com/ava-labs/salticidae-go latest
Branch 'max-msg-size-limit' set up to track remote branch 'max-msg-size-limit' from 'origin'.
Switched to a new branch 'max-msg-size-limit'
Submodule 'salticidae' (https://github.com/Determinant/salticidae.git) registered for path 'salticidae'
Cloning into '/home/novy/go/src/github.com/ava-labs/salticidae-go/salticidae'...
Submodule path 'salticidae': checked out '4fed5578db7714d8317d1bfe9262143d25034d00'
-- The C compiler identification is GNU 7.5.0
-- The CXX compiler identification is GNU 7.5.0
-- Check for working C compiler: /usr/bin/cc
-- Check for working C compiler: /usr/bin/cc -- works
-- Detecting C compiler ABI info
-- Detecting C compiler ABI info - done
-- Detecting C compile features
-- Detecting C compile features - done
-- Check for working CXX compiler: /usr/bin/c++
-- Check for working CXX compiler: /usr/bin/c++ -- works
-- Detecting CXX compiler ABI info
-- Detecting CXX compiler ABI info - done
-- Detecting CXX compile features
-- Detecting CXX compile features - done
-- Could NOT find PkgConfig (missing: PKG_CONFIG_EXECUTABLE)
-- Looking for dlopen in dl
-- Looking for dlopen in dl - found
-- Looking for kstat_lookup in kstat
-- Looking for kstat_lookup in kstat - not found
-- Looking for kvm_open in kvm
-- Looking for kvm_open in kvm - not found
-- Looking for gethostbyname in nsl
-- Looking for gethostbyname in nsl - found
-- Looking for perfstat_cpu in perfstat
-- Looking for perfstat_cpu in perfstat - not found
-- Looking for clock_gettime in rt
-- Looking for clock_gettime in rt - found
-- Looking for sendfile in sendfile
-- Looking for sendfile in sendfile - not found
-- Found LibUV: /usr/lib/x86_64-linux-gnu/libuv.so
-- Found OpenSSL: /usr/lib/x86_64-linux-gnu/libcrypto.so (found suitable version "1.1.1", minimum required is "1.1.0")
-- Configuring done
-- Generating done
-- Build files have been written to: /home/novy/go/src/github.com/ava-labs/salticidae-go/salticidae
Scanning dependencies of target salticidae
[ 10%] Building CXX object CMakeFiles/salticidae.dir/src/type.cpp.o
[ 20%] Building CXX object CMakeFiles/salticidae.dir/src/util.cpp.o
[ 30%] Building CXX object CMakeFiles/salticidae.dir/src/event.cpp.o
[ 40%] Building CXX object CMakeFiles/salticidae.dir/src/crypto.cpp.o
/home/novy/go/src/github.com/ava-labs/salticidae-go/salticidae/src/util.cpp: In member function ‘void salticidae::Logger::write(const char*, const char*, const char*, __va_list_tag*)’:
/home/novy/go/src/github.com/ava-labs/salticidae-go/salticidae/src/util.cpp:173:12: warning: ignoring return value of ‘ssize_t write(int, const void*, size_t)’, declared with attribute warn_unused_result [-Wunused-result]
     ::write(output, &buff[0], buff.length());
     ~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
[ 50%] Building CXX object CMakeFiles/salticidae.dir/src/stream.cpp.o
In file included from /home/novy/go/src/github.com/ava-labs/salticidae-go/salticidae/src/event.cpp:3:0:
/home/novy/go/src/github.com/ava-labs/salticidae-go/salticidae/include/salticidae/event.h: In member function ‘void salticidae::NotifyFd::notify()’:
/home/novy/go/src/github.com/ava-labs/salticidae-go/salticidae/include/salticidae/event.h:560:26: warning: ignoring return value of ‘ssize_t write(int, const void*, size_t)’, declared with attribute warn_unused_result [-Wunused-result]
     void notify() { write(fd, &dummy, 8); }
                     ~~~~~^~~~~~~~~~~~~~~
[ 60%] Building CXX object CMakeFiles/salticidae.dir/src/msg.cpp.o
[ 70%] Building CXX object CMakeFiles/salticidae.dir/src/netaddr.cpp.o
[ 80%] Building CXX object CMakeFiles/salticidae.dir/src/conn.cpp.o
[ 90%] Building CXX object CMakeFiles/salticidae.dir/src/network.cpp.o
In file included from /home/novy/go/src/github.com/ava-labs/salticidae-go/salticidae/include/salticidae/conn.h:45:0,
                 from /home/novy/go/src/github.com/ava-labs/salticidae-go/salticidae/src/conn.cpp:34:
/home/novy/go/src/github.com/ava-labs/salticidae-go/salticidae/include/salticidae/event.h: In member function ‘void salticidae::NotifyFd::notify()’:
/home/novy/go/src/github.com/ava-labs/salticidae-go/salticidae/include/salticidae/event.h:560:26: warning: ignoring return value of ‘ssize_t write(int, const void*, size_t)’, declared with attribute warn_unused_result [-Wunused-result]
     void notify() { write(fd, &dummy, 8); }
                     ~~~~~^~~~~~~~~~~~~~~
In file included from /home/novy/go/src/github.com/ava-labs/salticidae-go/salticidae/include/salticidae/network.h:28:0,
                 from /home/novy/go/src/github.com/ava-labs/salticidae-go/salticidae/src/network.cpp:3:
/home/novy/go/src/github.com/ava-labs/salticidae-go/salticidae/include/salticidae/event.h: In member function ‘void salticidae::NotifyFd::notify()’:
/home/novy/go/src/github.com/ava-labs/salticidae-go/salticidae/include/salticidae/event.h:560:26: warning: ignoring return value of ‘ssize_t write(int, const void*, size_t)’, declared with attribute warn_unused_result [-Wunused-result]
     void notify() { write(fd, &dummy, 8); }
                     ~~~~~^~~~~~~~~~~~~~~
[ 90%] Built target salticidae
Scanning dependencies of target salticidae_static
[100%] Linking CXX static library libsalticidae.a
[100%] Built target salticidae_static
[ 90%] Built target salticidae
[100%] Built target salticidae_static
Install the project...
-- Install configuration: "Release"
-- Installing: /home/novy/go/src/github.com/ava-labs/salticidae-go/salticidae/build/lib/libsalticidae.a
-- Installing: /home/novy/go/src/github.com/ava-labs/salticidae-go/salticidae/build/include
-- Installing: /home/novy/go/src/github.com/ava-labs/salticidae-go/salticidae/build/include/salticidae
-- Installing: /home/novy/go/src/github.com/ava-labs/salticidae-go/salticidae/build/include/salticidae/stream.h
-- Installing: /home/novy/go/src/github.com/ava-labs/salticidae-go/salticidae/build/include/salticidae/crypto.h
-- Installing: /home/novy/go/src/github.com/ava-labs/salticidae-go/salticidae/build/include/salticidae/netaddr.h
-- Installing: /home/novy/go/src/github.com/ava-labs/salticidae-go/salticidae/build/include/salticidae/util.h
-- Installing: /home/novy/go/src/github.com/ava-labs/salticidae-go/salticidae/build/include/salticidae/config.h
-- Installing: /home/novy/go/src/github.com/ava-labs/salticidae-go/salticidae/build/include/salticidae/type.h
-- Installing: /home/novy/go/src/github.com/ava-labs/salticidae-go/salticidae/build/include/salticidae/buffer.h
-- Installing: /home/novy/go/src/github.com/ava-labs/salticidae-go/salticidae/build/include/salticidae/endian.h
-- Installing: /home/novy/go/src/github.com/ava-labs/salticidae-go/salticidae/build/include/salticidae/conn.h
-- Installing: /home/novy/go/src/github.com/ava-labs/salticidae-go/salticidae/build/include/salticidae/network.h
-- Installing: /home/novy/go/src/github.com/ava-labs/salticidae-go/salticidae/build/include/salticidae/ref.h
-- Installing: /home/novy/go/src/github.com/ava-labs/salticidae-go/salticidae/build/include/salticidae/queue.h
-- Installing: /home/novy/go/src/github.com/ava-labs/salticidae-go/salticidae/build/include/salticidae/msg.h
-- Installing: /home/novy/go/src/github.com/ava-labs/salticidae-go/salticidae/build/include/salticidae/event.h
/home/novy/go/src/github.com/ava-labs/salticidae-go
'/tmp/salticidae-go-ZsaIXfjg/build/libsalticidae.a' -> '/home/novy/go/src/github.com/ava-labs/salticidae-go/salticidae/build/lib/libsalticidae.a'
/home/novy/go/src/github.com/ava-labs/gecko
go: finding github.com/ava-labs/coreth latest
go: downloading github.com/ava-labs/coreth v0.0.0-20200416155355-addb553425e6
go: extracting github.com/ava-labs/coreth v0.0.0-20200416155355-addb553425e6
go: finding github.com/ava-labs/go-ethereum v1.9.3
go: downloading github.com/ava-labs/go-ethereum v1.9.3
go: extracting github.com/ava-labs/go-ethereum v1.9.3
go: finding github.com/ava-labs/gecko latest
go: finding gopkg.in/urfave/cli.v1 v1.20.0
go: downloading gopkg.in/urfave/cli.v1 v1.20.0
go: extracting gopkg.in/urfave/cli.v1 v1.20.0
go: finding github.com/mattn/go-colorable v0.1.6
go: downloading github.com/mattn/go-colorable v0.1.6
go: extracting github.com/mattn/go-colorable v0.1.6
go: finding golang.org/x/crypto latest
go: finding github.com/naoina/toml v0.1.1
go: downloading github.com/naoina/toml v0.1.1
go: finding github.com/tyler-smith/go-bip39 v1.0.2
go: extracting github.com/naoina/toml v0.1.1
go: downloading github.com/tyler-smith/go-bip39 v1.0.2
go: finding github.com/gballet/go-libpcsclite latest
go: downloading github.com/gballet/go-libpcsclite v0.0.0-20191108122812-4678299bea08
go: extracting github.com/tyler-smith/go-bip39 v1.0.2
go: extracting github.com/gballet/go-libpcsclite v0.0.0-20191108122812-4678299bea08
go: finding github.com/prometheus/tsdb v0.10.0
go: downloading github.com/prometheus/tsdb v0.10.0
go: extracting github.com/prometheus/tsdb v0.10.0
go: finding github.com/elastic/gosigar v0.10.5
go: downloading github.com/elastic/gosigar v0.10.5
go: extracting github.com/elastic/gosigar v0.10.5
go: finding github.com/fjl/memsize latest
go: downloading github.com/fjl/memsize v0.0.0-20190710130421-bcb5799ab5e5
go: extracting github.com/fjl/memsize v0.0.0-20190710130421-bcb5799ab5e5
go: finding github.com/mohae/deepcopy latest
go: finding github.com/apilayer/freegeoip v3.5.0+incompatible
go: finding github.com/olekukonko/tablewriter v0.0.4
go: finding github.com/rjeczalik/notify v0.9.2
go: downloading golang.org/x/sync v0.0.0-20190423024810-112230192c58
go: downloading github.com/mohae/deepcopy v0.0.0-20170929034955-c48cc78d4826
go: downloading github.com/apilayer/freegeoip v3.5.0+incompatible
go: downloading github.com/olekukonko/tablewriter v0.0.4
go: downloading github.com/rjeczalik/notify v0.9.2
go: extracting golang.org/x/sync v0.0.0-20190423024810-112230192c58
go: downloading google.golang.org/grpc v1.27.1
go: finding github.com/karalabe/usb latest
go: downloading github.com/karalabe/usb v0.0.0-20191104083709-911d15fe12a9
go: extracting github.com/apilayer/freegeoip v3.5.0+incompatible
go: extracting github.com/mohae/deepcopy v0.0.0-20170929034955-c48cc78d4826
go: extracting github.com/rjeczalik/notify v0.9.2
go: extracting github.com/olekukonko/tablewriter v0.0.4
go: finding github.com/graph-gophers/graphql-go latest
go: finding github.com/aristanetworks/goarista latest
go: downloading github.com/graph-gophers/graphql-go v0.0.0-20200309224638-dae41bde9ef9
go: extracting google.golang.org/grpc v1.27.1
go: downloading github.com/aristanetworks/goarista v0.0.0-20200410125653-0a3087568c00
go: extracting github.com/karalabe/usb v0.0.0-20191104083709-911d15fe12a9
go: extracting github.com/graph-gophers/graphql-go v0.0.0-20200309224638-dae41bde9ef9
go: finding github.com/allegro/bigcache v1.2.1
go: finding github.com/influxdata/influxdb v1.8.0
go: downloading github.com/allegro/bigcache v1.2.1
go: finding github.com/peterh/liner v1.2.0
go: downloading github.com/influxdata/influxdb v1.8.0
go: downloading github.com/peterh/liner v1.2.0
go: downloading github.com/pkg/errors v0.8.0
go: extracting github.com/aristanetworks/goarista v0.0.0-20200410125653-0a3087568c00
go: extracting github.com/allegro/bigcache v1.2.1
go: extracting github.com/pkg/errors v0.8.0
go: finding github.com/steakknife/bloomfilter latest
go: extracting github.com/peterh/liner v1.2.0
go: downloading golang.org/x/net v0.0.0-20190404232315-eb5bcb51f2a3
go: downloading github.com/steakknife/bloomfilter v0.0.0-20180922174646-6819c0d2a570
go: finding github.com/robertkrimen/otto latest
go: downloading github.com/prometheus/procfs v0.0.2
go: finding github.com/naoina/go-stringutil v0.1.0
go: downloading github.com/robertkrimen/otto v0.0.0-20191219234010-c382bd3c16ff
go: extracting github.com/prometheus/procfs v0.0.2
go: downloading github.com/prometheus/common v0.4.1
go: downloading github.com/naoina/go-stringutil v0.1.0
go: extracting github.com/steakknife/bloomfilter v0.0.0-20180922174646-6819c0d2a570
go: extracting golang.org/x/net v0.0.0-20190404232315-eb5bcb51f2a3
go: finding github.com/fatih/color v1.9.0
go: finding github.com/status-im/keycard-go latest
go: extracting github.com/prometheus/common v0.4.1
go: downloading github.com/fatih/color v1.9.0
go: finding gopkg.in/olebedev/go-duktape.v3 latest
go: extracting github.com/robertkrimen/otto v0.0.0-20191219234010-c382bd3c16ff
go: downloading github.com/status-im/keycard-go v0.0.0-20200402102358-957c09536969
go: extracting github.com/naoina/go-stringutil v0.1.0
go: downloading gopkg.in/olebedev/go-duktape.v3 v3.0.0-20200316214253-d7b0ff38cac9
go: finding github.com/edsrzf/mmap-go v1.0.0
go: downloading github.com/go-stack/stack v1.8.0
go: extracting github.com/fatih/color v1.9.0
go: finding github.com/pborman/uuid v1.2.0
go: downloading github.com/edsrzf/mmap-go v1.0.0
go: extracting github.com/go-stack/stack v1.8.0
go: extracting github.com/status-im/keycard-go v0.0.0-20200402102358-957c09536969
go: finding gopkg.in/natefinch/npipe.v2 latest
go: finding github.com/wsddn/go-ecdh latest
go: downloading github.com/pborman/uuid v1.2.0
go: downloading github.com/wsddn/go-ecdh v0.0.0-20161211032359-48726bab9208
go: extracting github.com/edsrzf/mmap-go v1.0.0
go: downloading gopkg.in/natefinch/npipe.v2 v2.0.0-20160621034901-c1b8fa8bdcce
go: extracting github.com/pborman/uuid v1.2.0
go: extracting github.com/wsddn/go-ecdh v0.0.0-20161211032359-48726bab9208
go: extracting gopkg.in/olebedev/go-duktape.v3 v3.0.0-20200316214253-d7b0ff38cac9
go: extracting gopkg.in/natefinch/npipe.v2 v2.0.0-20160621034901-c1b8fa8bdcce
go: extracting github.com/influxdata/influxdb v1.8.0
go: downloading github.com/prometheus/client_golang v1.4.1
go: downloading golang.org/x/net v0.0.0-20200222125558-5a598a2470a0
go: downloading golang.org/x/sync v0.0.0-20190911185100-cd5d95a43a6e
go: downloading github.com/mattn/go-runewidth v0.0.7
go: finding github.com/steakknife/hamming latest
go: extracting golang.org/x/sync v0.0.0-20190911185100-cd5d95a43a6e
go: extracting github.com/prometheus/client_golang v1.4.1
go: extracting github.com/mattn/go-runewidth v0.0.7
go: downloading github.com/google/uuid v1.0.0
go: downloading github.com/steakknife/hamming v0.0.0-20180906055917-c99c65617cd3
go: extracting github.com/google/uuid v1.0.0
go: downloading github.com/prometheus/procfs v0.0.10
go: finding gopkg.in/sourcemap.v1 v1.0.5
go: extracting github.com/steakknife/hamming v0.0.0-20180906055917-c99c65617cd3
go: finding github.com/howeyc/fsnotify v0.9.0
go: finding github.com/oschwald/maxminddb-golang v1.6.0
go: downloading gopkg.in/sourcemap.v1 v1.0.5
go: extracting github.com/prometheus/procfs v0.0.10
go: downloading github.com/howeyc/fsnotify v0.9.0
go: downloading github.com/oschwald/maxminddb-golang v1.6.0
go: downloading google.golang.org/genproto v0.0.0-20200218151345-dad8c97a84f5
go: extracting gopkg.in/sourcemap.v1 v1.0.5
go: extracting golang.org/x/net v0.0.0-20200222125558-5a598a2470a0
go: extracting github.com/howeyc/fsnotify v0.9.0
go: extracting github.com/oschwald/maxminddb-golang v1.6.0
go: extracting google.golang.org/genproto v0.0.0-20200218151345-dad8c97a84f5
go: cannot find main module, but found .git/config in /home/novy/go/src/github.com/ava-labs/gecko
	to create a module there, run:
	go mod init

I can't finish the installation on my linux machine

Feature: Progressive chainID addressing

Suggestion per Gun:

Current addressing is <chainID>-<address> . This isn't great because chainIDs are 32 byte w/4 byte checksum postfixed and then base 58 encoded. Very long. Very cumbersome. Gun had the idea of doing progressive chainIDs. The first time a chain with the chainID beginning with 7 is registered on the P-chain, from then on it can be referenced as 7-<address>. The next time something begins with a 7 you take its second character. So say the next 7's second character is n, then you can be 7n-<address> from then on and the system will know what you mean. The next time a 7n comes up, say the third letter is g, then you can go 7ng-<address> and that's your short-hand for your full chainID.

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.