aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authoraaronbuchwald <aaron.buchwald56@gmail.com>2020-09-15 12:05:01 -0400
committerGitHub <noreply@github.com>2020-09-15 12:05:01 -0400
commit8ea2f6ef629136b746e5fb245f0804422223c976 (patch)
tree8b9c77ddac162591976875e6b299054f7415402f
parent14592f971162fed59a33afd98020599097406cdf (diff)
parent496397e31c5082e20e28a1a2e9c2bbacde5e1deb (diff)
Merge pull request #22 from ava-labs/status-db
Status db
-rw-r--r--go.mod9
-rw-r--r--go.sum13
-rw-r--r--plugin/evm/block.go15
-rw-r--r--plugin/evm/database.go2
-rw-r--r--plugin/evm/export_tx.go16
-rw-r--r--plugin/evm/factory.go2
-rw-r--r--plugin/evm/import_tx.go14
-rw-r--r--plugin/evm/service.go10
-rw-r--r--plugin/evm/static_service.go2
-rw-r--r--plugin/evm/tx.go16
-rw-r--r--plugin/evm/user.go6
-rw-r--r--plugin/evm/vm.go150
-rw-r--r--plugin/main.go2
13 files changed, 156 insertions, 101 deletions
diff --git a/go.mod b/go.mod
index a81ae65..3e1b53f 100644
--- a/go.mod
+++ b/go.mod
@@ -3,15 +3,11 @@ module github.com/ava-labs/coreth
go 1.14
require (
- github.com/allegro/bigcache v1.2.1 // indirect
- github.com/aristanetworks/goarista v0.0.0-20200812190859-4cb0e71f3c0e // indirect
- github.com/ava-labs/gecko v0.6.1-rc.1
+ github.com/ava-labs/avalanche-go v0.8.0-beta
github.com/ava-labs/go-ethereum v1.9.3
- github.com/cespare/cp v1.1.1 // indirect
github.com/davecgh/go-spew v1.1.1
github.com/deckarep/golang-set v1.7.1
github.com/edsrzf/mmap-go v1.0.0
- github.com/elastic/gosigar v0.11.0 // indirect
github.com/fjl/memsize v0.0.0-20190710130421-bcb5799ab5e5
github.com/gballet/go-libpcsclite v0.0.0-20191108122812-4678299bea08
github.com/golang-collections/collections v0.0.0-20130729185459-604e922904d3
@@ -20,7 +16,6 @@ require (
github.com/gorilla/websocket v1.4.2
github.com/hashicorp/go-plugin v1.3.0
github.com/hashicorp/golang-lru v0.5.4
- github.com/karalabe/usb v0.0.0-20191104083709-911d15fe12a9 // indirect
github.com/mattn/go-colorable v0.1.7
github.com/mattn/go-isatty v0.0.12
github.com/olekukonko/tablewriter v0.0.4
@@ -29,8 +24,6 @@ require (
github.com/rjeczalik/notify v0.9.2
github.com/rs/cors v1.7.0
github.com/status-im/keycard-go v0.0.0-20200402102358-957c09536969
- github.com/steakknife/bloomfilter v0.0.0-20180922174646-6819c0d2a570 // indirect
- github.com/steakknife/hamming v0.0.0-20180906055917-c99c65617cd3 // indirect
github.com/tyler-smith/go-bip39 v1.0.2
github.com/wsddn/go-ecdh v0.0.0-20161211032359-48726bab9208
golang.org/x/crypto v0.0.0-20200622213623-75b288015ac9
diff --git a/go.sum b/go.sum
index bcd9d00..46dea35 100644
--- a/go.sum
+++ b/go.sum
@@ -3,6 +3,7 @@ github.com/AppsFlyer/go-sundheit v0.2.0 h1:FArqX+HbqZ6U32RC3giEAWRUpkggqxHj91KIv
github.com/AppsFlyer/go-sundheit v0.2.0/go.mod h1:rCRkVTMQo7/krF7xQ9X0XEF1an68viFR6/Gy02q+4ds=
github.com/BurntSushi/toml v0.3.1/go.mod h1:xHWCNGjB5oqiDr8zfno3MHue2Ht5sIBksp03qcyfWMU=
github.com/Microsoft/go-winio v0.4.11/go.mod h1:VhR8bwka0BXejwEJY73c50VrPtXAaKcyvVC4A4RozmA=
+github.com/Microsoft/go-winio v0.4.14/go.mod h1:qXqCSQ3Xa7+6tgxaGTIe4Kpcdsi+P8jBhyzoq1bpyYA=
github.com/OneOfOne/xxhash v1.2.2/go.mod h1:HSdplMjZKSmBqAxg5vPj2TmRDmfkzw+cTzAElWljhcU=
github.com/Shopify/sarama v1.26.1/go.mod h1:NbSGBSSndYaIhRcBtY9V0U7AyH+x71bG668AuWys/yU=
github.com/Shopify/toxiproxy v2.1.4+incompatible/go.mod h1:OXgGpZ6Cli1/URJOF1DMxUHB2q5Ap20/P/eIdh4G0pI=
@@ -20,10 +21,11 @@ github.com/aristanetworks/goarista v0.0.0-20200520141224-0f14e646773f/go.mod h1:
github.com/aristanetworks/goarista v0.0.0-20200812190859-4cb0e71f3c0e h1:tkEt0le4Lv5+VmcxZPIVSrP8LVPLhndIm/BOP7iPh/w=
github.com/aristanetworks/goarista v0.0.0-20200812190859-4cb0e71f3c0e/go.mod h1:QZe5Yh80Hp1b6JxQdpfSEEe8X7hTyTEZSosSrFf/oJE=
github.com/aristanetworks/splunk-hec-go v0.3.3/go.mod h1:1VHO9r17b0K7WmOlLb9nTk/2YanvOEnLMUgsFrxBROc=
+github.com/ava-labs/avalanche-go v0.8.0-beta h1:VdSvj5DKIdzdmK0tk8l1jQIc1m3N7KRTHXTW+9I1LfI=
+github.com/ava-labs/avalanche-go v0.8.0-beta/go.mod h1:quYojL1hu0ue2glUT1ng28kADs9R94zGdEvfW0/HRg8=
+github.com/ava-labs/avalanche-go v0.8.0 h1:aAt4roNkkaQx8jgQeKDvTGqSJ2h++rilBAK/xo/uYqo=
github.com/ava-labs/coreth v0.2.5/go.mod h1:pGolKipwq5vGIY2IBBcBkMYrqniXMsS5SBn+BBi4+Js=
-github.com/ava-labs/gecko v0.5.7 h1:8jivA5z3LQ92MA2qIBa6izVGtOqJSVH2lCik6S8xnOI=
-github.com/ava-labs/gecko v0.5.7/go.mod h1:EdaEuYNRZ3UB+Efr1Nn+DsM3EzdUtg641ZF6FUBCACs=
-github.com/ava-labs/gecko v0.6.1-rc.1 h1:BhWmoDGA0Obs5ZbEdpNqw/3rx9ZMPmjcZu1oD+yySLY=
+github.com/ava-labs/coreth v0.2.14-rc.1/go.mod h1:Zhb60GFIB7G5AnUCks0Jo4Rezx/EovL8o+z51aBF1A8=
github.com/ava-labs/gecko v0.6.1-rc.1/go.mod h1:TT6uA1BETZpVMR0xiFtE8I5Mv4DULlS+lAL3xuYKnpA=
github.com/ava-labs/go-ethereum v1.9.3 h1:GmnMZ/dlvVAPFmWBzEpRJX49pUAymPfoASLNRJqR0AY=
github.com/ava-labs/go-ethereum v1.9.3/go.mod h1:a+agc6fXfZFsPZCylA3ry4Y8CLCqLKg3Rc23NXZ9aw8=
@@ -65,6 +67,8 @@ github.com/decred/dcrd/dcrec/secp256k1/v3 v3.0.0-20200526030155-0c6c7ca85d3b h1:
github.com/decred/dcrd/dcrec/secp256k1/v3 v3.0.0-20200526030155-0c6c7ca85d3b/go.mod h1:J70FGZSbzsjecRTiTzER+3f1KZLNaXkuv+yeFTKoxM8=
github.com/decred/dcrd/dcrec/secp256k1/v3 v3.0.0-20200627015759-01fd2de07837 h1:g2cyFTu5FKWhCo7L4hVJ797Q506B4EywA7L9I6OebgA=
github.com/decred/dcrd/dcrec/secp256k1/v3 v3.0.0-20200627015759-01fd2de07837/go.mod h1:J70FGZSbzsjecRTiTzER+3f1KZLNaXkuv+yeFTKoxM8=
+github.com/dgrijalva/jwt-go v3.2.0+incompatible h1:7qlOGliEKZXTDg6OTjfoBKDXWrumCAMpl/TFQ4/5kLM=
+github.com/dgrijalva/jwt-go v3.2.0+incompatible/go.mod h1:E3ru+11k8xSBh+hMPgOLZmtrrCbhqsmaPHjLKYnJCaQ=
github.com/dgryski/go-sip13 v0.0.0-20181026042036-e10d5fee7954/go.mod h1:vAd38F8PWV+bWy6jNmig1y/TA+kYO4g3RSRF0IAv0no=
github.com/eapache/go-resiliency v1.2.0/go.mod h1:kFI+JgMyC7bLPUVY133qvEBtVayf5mFgVsvEsIPBvNs=
github.com/eapache/go-xerial-snappy v0.0.0-20180814174437-776d5712da21/go.mod h1:+020luEh2TKB4/GOp8oxxtq0Daoen/Cii55CzbTV6DU=
@@ -263,6 +267,7 @@ github.com/rs/cors v1.7.0/go.mod h1:gFx+x8UowdsKA9AchylcLynDq+nNFfI8FkUZdN/jGCU=
github.com/satori/go.uuid v1.2.0/go.mod h1:dA0hQrYB0VpLJoorglMZABFdXlWrHn1NEOzdhQKdks0=
github.com/securego/gosec v0.0.0-20200401082031-e946c8c39989/go.mod h1:i9l/TNj+yDFh9SZXUTvspXTjbFXgZGP/UvhU1S65A4A=
github.com/sirupsen/logrus v1.2.0/go.mod h1:LxeOpSwHxABJmUn/MG1IvRgCAasNZTLOkJPxbbu5VWo=
+github.com/sirupsen/logrus v1.4.1/go.mod h1:ni0Sbl8bgC9z8RoU9G6nDWqqs/fq4eDPysMBDgk/93Q=
github.com/sirupsen/logrus v1.4.2/go.mod h1:tLMulIdttU9McNUspp0xgXVQah82FyeX6MwdIuYE2rE=
github.com/spaolacci/murmur3 v0.0.0-20180118202830-f09979ecbc72/go.mod h1:JwIasOWyU6f++ZhiEuf87xNszmSA2myDM2Kzu9HwQUA=
github.com/status-im/keycard-go v0.0.0-20200402102358-957c09536969 h1:Oo2KZNP70KE0+IUJSidPj/BFS/RXNHmKIJOdckzml2E=
@@ -347,6 +352,7 @@ golang.org/x/sys v0.0.0-20190222072716-a9d3bda3a223/go.mod h1:STP8DvDyc/dI5b8T5h
golang.org/x/sys v0.0.0-20190412213103-97732733099d/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20190422165155-953cdadca894/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20190502145724-3ef323f4f1fd/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
+golang.org/x/sys v0.0.0-20190507160741-ecd444e8653b/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20191008105621-543471e840be/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20191120155948-bd437916bb0e/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20200106162015-b016eb3dc98e/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
@@ -411,6 +417,7 @@ gopkg.in/jcmturner/dnsutils.v1 v1.0.1/go.mod h1:m3v+5svpVOhtFAP/wSz+yzh4Mc0Fg7eR
gopkg.in/jcmturner/goidentity.v3 v3.0.0/go.mod h1:oG2kH0IvSYNIu80dVAyu/yoefjq1mNfM5bm88whjWx4=
gopkg.in/jcmturner/gokrb5.v7 v7.5.0/go.mod h1:l8VISx+WGYp+Fp7KRbsiUuXTTOnxIc3Tuvyavf11/WM=
gopkg.in/jcmturner/rpc.v1 v1.1.0/go.mod h1:YIdkC4XfD6GXbzje11McwsDuOlZQSb9W4vfLvuNnlv8=
+gopkg.in/natefinch/npipe.v2 v2.0.0-20160621034901-c1b8fa8bdcce/go.mod h1:5AcXVHNjg+BDxry382+8OKon8SEWiKktQR07RKPsv1c=
gopkg.in/olebedev/go-duktape.v3 v3.0.0-20200316214253-d7b0ff38cac9/go.mod h1:uAJfkITjFhyEEuUfm7bsmCZRbW5WRq8s9EY8HZ6hCns=
gopkg.in/olebedev/go-duktape.v3 v3.0.0-20200619000410-60c24ae608a6 h1:a6cXbcDDUkSBlpnkWV1bJ+vv3mOgQEltEJ2rPxroVu0=
gopkg.in/olebedev/go-duktape.v3 v3.0.0-20200619000410-60c24ae608a6/go.mod h1:uAJfkITjFhyEEuUfm7bsmCZRbW5WRq8s9EY8HZ6hCns=
diff --git a/plugin/evm/block.go b/plugin/evm/block.go
index 5c30fe1..97ffc18 100644
--- a/plugin/evm/block.go
+++ b/plugin/evm/block.go
@@ -10,10 +10,10 @@ import (
"github.com/ava-labs/coreth/core/types"
"github.com/ava-labs/go-ethereum/rlp"
- "github.com/ava-labs/gecko/ids"
- "github.com/ava-labs/gecko/snow/choices"
- "github.com/ava-labs/gecko/snow/consensus/snowman"
- "github.com/ava-labs/gecko/vms/components/missing"
+ "github.com/ava-labs/avalanche-go/ids"
+ "github.com/ava-labs/avalanche-go/snow/choices"
+ "github.com/ava-labs/avalanche-go/snow/consensus/snowman"
+ "github.com/ava-labs/avalanche-go/vms/components/missing"
)
// Block implements the snowman.Block interface
@@ -30,8 +30,11 @@ func (b *Block) ID() ids.ID { return b.id }
func (b *Block) Accept() error {
vm := b.vm
- vm.ctx.Log.Verbo("Block %s is accepted", b.ID())
- vm.updateStatus(b.ID(), choices.Accepted)
+ vm.ctx.Log.Verbo("Block %s is accepted", b.id)
+ vm.updateStatus(b.id, choices.Accepted)
+ if err := vm.acceptedDB.Put(b.ethBlock.Number().Bytes(), b.id.Bytes()); err != nil {
+ return err
+ }
tx := vm.getAtomicTx(b.ethBlock)
if tx == nil {
diff --git a/plugin/evm/database.go b/plugin/evm/database.go
index de592e1..1300bbb 100644
--- a/plugin/evm/database.go
+++ b/plugin/evm/database.go
@@ -8,7 +8,7 @@ import (
"github.com/ava-labs/go-ethereum/ethdb"
- "github.com/ava-labs/gecko/database"
+ "github.com/ava-labs/avalanche-go/database"
)
var (
diff --git a/plugin/evm/export_tx.go b/plugin/evm/export_tx.go
index 31b4681..77f4efe 100644
--- a/plugin/evm/export_tx.go
+++ b/plugin/evm/export_tx.go
@@ -10,14 +10,14 @@ import (
"github.com/ava-labs/coreth/core/state"
"github.com/ava-labs/go-ethereum/log"
- "github.com/ava-labs/gecko/chains/atomic"
- "github.com/ava-labs/gecko/database"
- "github.com/ava-labs/gecko/ids"
- "github.com/ava-labs/gecko/snow"
- "github.com/ava-labs/gecko/utils/crypto"
- safemath "github.com/ava-labs/gecko/utils/math"
- "github.com/ava-labs/gecko/vms/components/avax"
- "github.com/ava-labs/gecko/vms/secp256k1fx"
+ "github.com/ava-labs/avalanche-go/chains/atomic"
+ "github.com/ava-labs/avalanche-go/database"
+ "github.com/ava-labs/avalanche-go/ids"
+ "github.com/ava-labs/avalanche-go/snow"
+ "github.com/ava-labs/avalanche-go/utils/crypto"
+ safemath "github.com/ava-labs/avalanche-go/utils/math"
+ "github.com/ava-labs/avalanche-go/vms/components/avax"
+ "github.com/ava-labs/avalanche-go/vms/secp256k1fx"
)
// UnsignedExportTx is an unsigned ExportTx
diff --git a/plugin/evm/factory.go b/plugin/evm/factory.go
index 6ae62ae..4fe6047 100644
--- a/plugin/evm/factory.go
+++ b/plugin/evm/factory.go
@@ -4,7 +4,7 @@
package evm
import (
- "github.com/ava-labs/gecko/ids"
+ "github.com/ava-labs/avalanche-go/ids"
)
// ID this VM should be referenced by
diff --git a/plugin/evm/import_tx.go b/plugin/evm/import_tx.go
index 35ba8cc..e09f145 100644
--- a/plugin/evm/import_tx.go
+++ b/plugin/evm/import_tx.go
@@ -9,13 +9,13 @@ import (
"github.com/ava-labs/coreth/core/state"
- "github.com/ava-labs/gecko/database"
- "github.com/ava-labs/gecko/ids"
- "github.com/ava-labs/gecko/snow"
- "github.com/ava-labs/gecko/utils/crypto"
- "github.com/ava-labs/gecko/utils/math"
- "github.com/ava-labs/gecko/vms/components/avax"
- "github.com/ava-labs/gecko/vms/secp256k1fx"
+ "github.com/ava-labs/avalanche-go/database"
+ "github.com/ava-labs/avalanche-go/ids"
+ "github.com/ava-labs/avalanche-go/snow"
+ "github.com/ava-labs/avalanche-go/utils/crypto"
+ "github.com/ava-labs/avalanche-go/utils/math"
+ "github.com/ava-labs/avalanche-go/vms/components/avax"
+ "github.com/ava-labs/avalanche-go/vms/secp256k1fx"
"github.com/ava-labs/go-ethereum/common"
)
diff --git a/plugin/evm/service.go b/plugin/evm/service.go
index fdbfd91..2979f46 100644
--- a/plugin/evm/service.go
+++ b/plugin/evm/service.go
@@ -15,11 +15,11 @@ import (
"github.com/ava-labs/coreth"
"github.com/ava-labs/coreth/core/types"
- "github.com/ava-labs/gecko/api"
- "github.com/ava-labs/gecko/utils/constants"
- "github.com/ava-labs/gecko/utils/crypto"
- "github.com/ava-labs/gecko/utils/formatting"
- "github.com/ava-labs/gecko/utils/json"
+ "github.com/ava-labs/avalanche-go/api"
+ "github.com/ava-labs/avalanche-go/utils/constants"
+ "github.com/ava-labs/avalanche-go/utils/crypto"
+ "github.com/ava-labs/avalanche-go/utils/formatting"
+ "github.com/ava-labs/avalanche-go/utils/json"
"github.com/ava-labs/go-ethereum/common"
"github.com/ava-labs/go-ethereum/common/hexutil"
ethcrypto "github.com/ava-labs/go-ethereum/crypto"
diff --git a/plugin/evm/static_service.go b/plugin/evm/static_service.go
index d3870ca..a379c44 100644
--- a/plugin/evm/static_service.go
+++ b/plugin/evm/static_service.go
@@ -8,7 +8,7 @@ import (
"encoding/json"
"github.com/ava-labs/coreth/core"
- "github.com/ava-labs/gecko/utils/formatting"
+ "github.com/ava-labs/avalanche-go/utils/formatting"
)
// StaticService defines the static API services exposed by the evm
diff --git a/plugin/evm/tx.go b/plugin/evm/tx.go
index 789ce56..70386dd 100644
--- a/plugin/evm/tx.go
+++ b/plugin/evm/tx.go
@@ -9,14 +9,14 @@ import (
"github.com/ava-labs/coreth/core/state"
- "github.com/ava-labs/gecko/database"
- "github.com/ava-labs/gecko/ids"
- "github.com/ava-labs/gecko/snow"
- "github.com/ava-labs/gecko/utils/codec"
- "github.com/ava-labs/gecko/utils/crypto"
- "github.com/ava-labs/gecko/utils/hashing"
- "github.com/ava-labs/gecko/vms/components/verify"
- "github.com/ava-labs/gecko/vms/secp256k1fx"
+ "github.com/ava-labs/avalanche-go/database"
+ "github.com/ava-labs/avalanche-go/ids"
+ "github.com/ava-labs/avalanche-go/snow"
+ "github.com/ava-labs/avalanche-go/utils/codec"
+ "github.com/ava-labs/avalanche-go/utils/crypto"
+ "github.com/ava-labs/avalanche-go/utils/hashing"
+ "github.com/ava-labs/avalanche-go/vms/components/verify"
+ "github.com/ava-labs/avalanche-go/vms/secp256k1fx"
"github.com/ava-labs/go-ethereum/common"
)
diff --git a/plugin/evm/user.go b/plugin/evm/user.go
index fbf2981..65dbe0c 100644
--- a/plugin/evm/user.go
+++ b/plugin/evm/user.go
@@ -7,9 +7,9 @@ import (
"errors"
"fmt"
- "github.com/ava-labs/gecko/database"
- "github.com/ava-labs/gecko/ids"
- "github.com/ava-labs/gecko/utils/crypto"
+ "github.com/ava-labs/avalanche-go/database"
+ "github.com/ava-labs/avalanche-go/ids"
+ "github.com/ava-labs/avalanche-go/utils/crypto"
"github.com/ava-labs/go-ethereum/common"
)
diff --git a/plugin/evm/vm.go b/plugin/evm/vm.go
index b0073da..a1224d4 100644
--- a/plugin/evm/vm.go
+++ b/plugin/evm/vm.go
@@ -23,31 +23,34 @@ import (
"github.com/ava-labs/coreth/params"
"github.com/ava-labs/go-ethereum/common"
- ethcrypto "github.com/ava-labs/go-ethereum/crypto"
"github.com/ava-labs/go-ethereum/rlp"
"github.com/ava-labs/go-ethereum/rpc"
+
+ ethcrypto "github.com/ava-labs/go-ethereum/crypto"
+
geckorpc "github.com/gorilla/rpc/v2"
- "github.com/ava-labs/gecko/api/admin"
- "github.com/ava-labs/gecko/cache"
- "github.com/ava-labs/gecko/database"
- "github.com/ava-labs/gecko/ids"
- "github.com/ava-labs/gecko/snow"
- "github.com/ava-labs/gecko/snow/choices"
- "github.com/ava-labs/gecko/snow/consensus/snowman"
- "github.com/ava-labs/gecko/utils/codec"
- "github.com/ava-labs/gecko/utils/constants"
- "github.com/ava-labs/gecko/utils/crypto"
- "github.com/ava-labs/gecko/utils/formatting"
- geckojson "github.com/ava-labs/gecko/utils/json"
- "github.com/ava-labs/gecko/utils/logging"
- "github.com/ava-labs/gecko/utils/timer"
- "github.com/ava-labs/gecko/utils/units"
- "github.com/ava-labs/gecko/utils/wrappers"
- "github.com/ava-labs/gecko/vms/components/avax"
- "github.com/ava-labs/gecko/vms/secp256k1fx"
-
- commonEng "github.com/ava-labs/gecko/snow/engine/common"
+ "github.com/ava-labs/avalanche-go/api/admin"
+ "github.com/ava-labs/avalanche-go/cache"
+ "github.com/ava-labs/avalanche-go/database"
+ "github.com/ava-labs/avalanche-go/database/prefixdb"
+ "github.com/ava-labs/avalanche-go/ids"
+ "github.com/ava-labs/avalanche-go/snow"
+ "github.com/ava-labs/avalanche-go/snow/choices"
+ "github.com/ava-labs/avalanche-go/snow/consensus/snowman"
+ "github.com/ava-labs/avalanche-go/utils/codec"
+ "github.com/ava-labs/avalanche-go/utils/constants"
+ "github.com/ava-labs/avalanche-go/utils/crypto"
+ "github.com/ava-labs/avalanche-go/utils/formatting"
+ "github.com/ava-labs/avalanche-go/utils/logging"
+ "github.com/ava-labs/avalanche-go/utils/timer"
+ "github.com/ava-labs/avalanche-go/utils/units"
+ "github.com/ava-labs/avalanche-go/utils/wrappers"
+ "github.com/ava-labs/avalanche-go/vms/components/avax"
+ "github.com/ava-labs/avalanche-go/vms/secp256k1fx"
+
+ commonEng "github.com/ava-labs/avalanche-go/snow/engine/common"
+ geckojson "github.com/ava-labs/avalanche-go/utils/json"
)
var (
@@ -60,6 +63,7 @@ var (
const (
lastAcceptedKey = "snowman_lastAccepted"
+ acceptedPrefix = "snowman_accepted"
)
const (
@@ -67,7 +71,7 @@ const (
maxBlockTime = 1000 * time.Millisecond
batchSize = 250
maxUTXOsToFetch = 1024
- blockCacheSize = 1 << 17 // 131072
+ blockCacheSize = 1 << 10 // 1024
)
const (
@@ -157,6 +161,8 @@ type VM struct {
networkChan chan<- commonEng.Message
newTxPoolHeadChan chan core.NewTxPoolHeadEvent
+ acceptedDB database.Database
+
txPoolStabilizedHead common.Hash
txPoolStabilizedOk chan struct{}
txPoolStabilizedLock sync.Mutex
@@ -229,6 +235,8 @@ func (vm *VM) Initialize(
return err
}
+ vm.acceptedDB = prefixdb.New([]byte(acceptedPrefix), db)
+
vm.chainID = g.Config.ChainID
vm.txFee = txFee
@@ -598,40 +606,56 @@ func (vm *VM) tryBlockGen() error {
func (vm *VM) getCachedStatus(blockID ids.ID) choices.Status {
vm.metalock.Lock()
defer vm.metalock.Unlock()
- status := choices.Processing
if statusIntf, ok := vm.blockStatusCache.Get(blockID); ok {
- status = statusIntf.(choices.Status)
- } else {
- wrappedBlk := vm.getBlock(blockID)
- if wrappedBlk == nil {
- return choices.Unknown
+ return statusIntf.(choices.Status)
+ }
+
+ wrappedBlk := vm.getBlock(blockID)
+ if wrappedBlk == nil {
+ return choices.Unknown
+ }
+ blk := wrappedBlk.ethBlock
+
+ heightKey := blk.Number().Bytes()
+ acceptedIDBytes, err := vm.acceptedDB.Get(heightKey)
+ if err == nil {
+ if acceptedID, err := ids.ToID(acceptedIDBytes); err != nil {
+ vm.ctx.Log.Error("snowman-eth: acceptedID bytes didn't match expected value: %s", err)
+ } else {
+ if acceptedID.Equals(blockID) {
+ vm.blockStatusCache.Put(blockID, choices.Accepted)
+ return choices.Accepted
+ }
+ vm.blockStatusCache.Put(blockID, choices.Rejected)
+ return choices.Rejected
}
- blk := wrappedBlk.ethBlock
- acceptedBlk := vm.lastAccepted.ethBlock
-
- // TODO: There must be a better way of doing this.
- // Traverse up the chain from the lower block until the indices match
- highBlock := blk
- lowBlock := acceptedBlk
- if highBlock.Number().Cmp(lowBlock.Number()) < 0 {
- highBlock, lowBlock = lowBlock, highBlock
+ }
+
+ status := vm.getUncachedStatus(blk)
+ if status == choices.Accepted {
+ err := vm.acceptedDB.Put(heightKey, blockID.Bytes())
+ if err != nil {
+ vm.ctx.Log.Error("snowman-eth: failed to write back acceptedID bytes: %s", err)
}
- for highBlock.Number().Cmp(lowBlock.Number()) > 0 {
- parentBlock := vm.getBlock(ids.NewID(highBlock.ParentHash()))
- if parentBlock == nil {
- vm.blockStatusCache.Put(blockID, choices.Processing)
- return choices.Processing
+
+ tempBlock := wrappedBlk
+ for tempBlock.ethBlock != nil {
+ parentID := ids.NewID(tempBlock.ethBlock.ParentHash())
+ tempBlock = vm.getBlock(parentID)
+ if tempBlock == nil || tempBlock.ethBlock == nil {
+ break
}
- highBlock = parentBlock.ethBlock
- }
- if highBlock.Hash() == lowBlock.Hash() { // on the same branch
- if blk.Number().Cmp(acceptedBlk.Number()) <= 0 {
- status = choices.Accepted
+ heightKey := tempBlock.ethBlock.Number().Bytes()
+ _, err := vm.acceptedDB.Get(heightKey)
+ if err == nil {
+ break
+ }
+
+ if err := vm.acceptedDB.Put(heightKey, parentID.Bytes()); err != nil {
+ vm.ctx.Log.Error("snowman-eth: failed to write back acceptedID bytes: %s", err)
}
- } else { // on different branches
- status = choices.Rejected
}
}
@@ -639,6 +663,34 @@ func (vm *VM) getCachedStatus(blockID ids.ID) choices.Status {
return status
}
+func (vm *VM) getUncachedStatus(blk *types.Block) choices.Status {
+ acceptedBlk := vm.lastAccepted.ethBlock
+
+ // TODO: There must be a better way of doing this.
+ // Traverse up the chain from the lower block until the indices match
+ highBlock := blk
+ lowBlock := acceptedBlk
+ if highBlock.Number().Cmp(lowBlock.Number()) < 0 {
+ highBlock, lowBlock = lowBlock, highBlock
+ }
+ for highBlock.Number().Cmp(lowBlock.Number()) > 0 {
+ parentBlock := vm.getBlock(ids.NewID(highBlock.ParentHash()))
+ if parentBlock == nil {
+ return choices.Processing
+ }
+ highBlock = parentBlock.ethBlock
+ }
+
+ if highBlock.Hash() != lowBlock.Hash() { // on different branches
+ return choices.Rejected
+ }
+ // on the same branch
+ if blk.Number().Cmp(acceptedBlk.Number()) <= 0 {
+ return choices.Accepted
+ }
+ return choices.Processing
+}
+
func (vm *VM) getBlock(id ids.ID) *Block {
if blockIntf, ok := vm.blockCache.Get(id); ok {
return blockIntf.(*Block)
diff --git a/plugin/main.go b/plugin/main.go
index f5c9909..1f2f107 100644
--- a/plugin/main.go
+++ b/plugin/main.go
@@ -3,7 +3,7 @@ package main
import (
"github.com/hashicorp/go-plugin"
- "github.com/ava-labs/gecko/vms/rpcchainvm"
+ "github.com/ava-labs/avalanche-go/vms/rpcchainvm"
"github.com/ava-labs/coreth/plugin/evm"
)