diff --git a/go.mod b/go.mod index c2d1b398c47..e6732d1f750 100644 --- a/go.mod +++ b/go.mod @@ -5,7 +5,7 @@ go 1.19 require ( github.com/cyberhorsey/errors v0.0.0-20220929234051-087d6d8bb841 github.com/cyberhorsey/webutils v0.0.0-20230314183728-56890c6ddbe7 - github.com/ethereum/go-ethereum v1.10.26 + github.com/ethereum/go-ethereum v1.11.4 github.com/joho/godotenv v1.4.0 github.com/labstack/echo-contrib v0.13.0 github.com/labstack/echo/v4 v4.9.1 @@ -35,22 +35,23 @@ require ( github.com/beorn7/perks v1.0.1 // indirect github.com/btcsuite/btcd/btcec/v2 v2.3.2 // indirect github.com/cenkalti/backoff/v4 v4.1.3 // indirect - github.com/cespare/xxhash/v2 v2.1.2 // indirect + github.com/cespare/xxhash/v2 v2.2.0 // indirect github.com/containerd/cgroups v1.0.4 // indirect github.com/containerd/containerd v1.6.12 // indirect github.com/davecgh/go-spew v1.1.1 // indirect - github.com/deckarep/golang-set v1.8.0 // indirect + github.com/deckarep/golang-set/v2 v2.1.0 // indirect github.com/decred/dcrd/dcrec/secp256k1/v4 v4.1.0 // indirect github.com/docker/distribution v2.8.1+incompatible // indirect github.com/docker/docker v20.10.17+incompatible // indirect github.com/docker/go-connections v0.4.0 // indirect github.com/docker/go-units v0.5.0 // indirect + github.com/fsnotify/fsnotify v1.6.0 // indirect github.com/go-ole/go-ole v1.2.1 // indirect github.com/go-playground/locales v0.13.0 // indirect github.com/go-playground/universal-translator v0.17.0 // indirect github.com/go-playground/validator/v10 v10.4.0 // indirect github.com/go-sql-driver/mysql v1.6.0 // indirect - github.com/go-stack/stack v1.8.0 // indirect + github.com/go-stack/stack v1.8.1 // indirect github.com/gogo/protobuf v1.3.2 // indirect github.com/golang-jwt/jwt v3.2.2+incompatible // indirect github.com/golang-jwt/jwt/v4 v4.4.3 // indirect @@ -65,8 +66,8 @@ require ( github.com/klauspost/compress v1.16.3 // indirect github.com/leodido/go-urn v1.2.0 // indirect github.com/magiconair/properties v1.8.6 // indirect - github.com/mattn/go-colorable v0.1.12 // indirect - github.com/mattn/go-isatty v0.0.14 // indirect + github.com/mattn/go-colorable v0.1.13 // indirect + github.com/mattn/go-isatty v0.0.16 // indirect github.com/matttproud/golang_protobuf_extensions v1.0.4 // indirect github.com/microcosm-cc/bluemonday v1.0.20 // indirect github.com/moby/sys/mount v0.3.3 // indirect @@ -80,13 +81,11 @@ require ( github.com/opencontainers/runc v1.1.3 // indirect github.com/pmezard/go-difflib v1.0.0 // indirect github.com/prometheus/client_model v0.3.0 // indirect - github.com/prometheus/common v0.37.0 // indirect - github.com/prometheus/procfs v0.8.0 // indirect - github.com/rjeczalik/notify v0.9.1 // indirect + github.com/prometheus/common v0.39.0 // indirect + github.com/prometheus/procfs v0.9.0 // indirect github.com/shirou/gopsutil v3.21.4-0.20210419000835-c7a38de76ee5+incompatible // indirect github.com/tklauser/go-sysconf v0.3.5 // indirect github.com/tklauser/numcpus v0.2.2 // indirect - github.com/tyler-smith/go-bip39 v1.1.0 // indirect github.com/valyala/bytebufferpool v1.0.0 // indirect github.com/valyala/fasthttp v1.44.0 // indirect github.com/valyala/fasttemplate v1.2.1 // indirect @@ -94,8 +93,8 @@ require ( golang.org/x/crypto v0.5.0 // indirect golang.org/x/net v0.5.0 // indirect golang.org/x/sys v0.5.0 // indirect - golang.org/x/text v0.6.0 // indirect - golang.org/x/time v0.0.0-20220722155302-e5dcc9cfc0b9 // indirect + golang.org/x/text v0.7.0 // indirect + golang.org/x/time v0.0.0-20220922220347-f3bd1da661af // indirect google.golang.org/genproto v0.0.0-20220617124728-180714bec0ad // indirect google.golang.org/grpc v1.48.0 // indirect google.golang.org/protobuf v1.28.1 // indirect diff --git a/go.sum b/go.sum index 442300e4849..6ef1ada0a36 100644 --- a/go.sum +++ b/go.sum @@ -10,27 +10,18 @@ cloud.google.com/go v0.50.0/go.mod h1:r9sluTvynVuxRIOHXQEHMFffphuXHOMZMycpNR5e6T cloud.google.com/go v0.52.0/go.mod h1:pXajvRH/6o3+F9jDHZWQ5PbGhn+o8w9qiu/CffaVdO4= cloud.google.com/go v0.53.0/go.mod h1:fp/UouUEsRkN6ryDKNW/Upv/JBKnv6WDthjR6+vze6M= cloud.google.com/go v0.54.0/go.mod h1:1rq2OEkV3YMf6n/9ZvGWI3GWw0VoqH/1x2nd8Is/bPc= -cloud.google.com/go v0.56.0/go.mod h1:jr7tqZxxKOVYizybht9+26Z/gUq7tiRzu+ACVAMbKVk= cloud.google.com/go v0.57.0/go.mod h1:oXiQ6Rzq3RAkkY7N6t3TcE6jE+CIBBbA36lwQ1JyzZs= -cloud.google.com/go v0.62.0/go.mod h1:jmCYTdRCQuc1PHIIJ/maLInMho30T/Y0M4hTdTShOYc= -cloud.google.com/go v0.65.0/go.mod h1:O5N8zS7uWy9vkA9vayVHs65eM1ubvY4h553ofrNHObY= cloud.google.com/go/bigquery v1.0.1/go.mod h1:i/xbL2UlR5RvWAURpBYZTtm/cXjCha9lbfbpx4poX+o= cloud.google.com/go/bigquery v1.3.0/go.mod h1:PjpwJnslEMmckchkHFfq+HTD2DmtT67aNFKH1/VBDHE= cloud.google.com/go/bigquery v1.4.0/go.mod h1:S8dzgnTigyfTmLBfrtrhyYhwRxG72rYxvftPBK2Dvzc= -cloud.google.com/go/bigquery v1.5.0/go.mod h1:snEHRnqQbz117VIFhE8bmtwIDY80NLUZUMb4Nv6dBIg= -cloud.google.com/go/bigquery v1.7.0/go.mod h1://okPTzCYNXSlb24MZs83e2Do+h+VXtc4gLoIoXIAPc= -cloud.google.com/go/bigquery v1.8.0/go.mod h1:J5hqkt3O0uAFnINi6JXValWIb1v0goeZM77hZzJN/fQ= cloud.google.com/go/datastore v1.0.0/go.mod h1:LXYbyblFSglQ5pkeyhO+Qmw7ukd3C+pD7TKLgZqpHYE= cloud.google.com/go/datastore v1.1.0/go.mod h1:umbIZjpQpHh4hmRpGhH4tLFup+FVzqBi1b3c64qFpCk= cloud.google.com/go/pubsub v1.0.1/go.mod h1:R0Gpsv3s54REJCy4fxDixWD93lHJMoZTyQ2kNxGRt3I= cloud.google.com/go/pubsub v1.1.0/go.mod h1:EwwdRX2sKPjnvnqCa270oGRyludottCI76h+R3AArQw= cloud.google.com/go/pubsub v1.2.0/go.mod h1:jhfEVHT8odbXTkndysNHCcx0awwzvfOlguIAii9o8iA= -cloud.google.com/go/pubsub v1.3.1/go.mod h1:i+ucay31+CNRpDW4Lu78I4xXG+O1r/MAHgjpRVR+TSU= cloud.google.com/go/storage v1.0.0/go.mod h1:IhtSnM/ZTZV8YYJWCY8RULGVqBDmpoyjwiyrjsg+URw= cloud.google.com/go/storage v1.5.0/go.mod h1:tpKbwo567HUNpVclU5sGELwQWBDZ8gh0ZeosJ0Rtdos= cloud.google.com/go/storage v1.6.0/go.mod h1:N7U0C8pVQ/+NIKOBQyamJIeKQKkZ+mxpohlUTyfDhBk= -cloud.google.com/go/storage v1.8.0/go.mod h1:Wv1Oy7z6Yz3DshWRJFhqM/UCfaWIRTdp0RXyy7KQOVs= -cloud.google.com/go/storage v1.10.0/go.mod h1:FLPqc6j+Ki4BU591ie1oL6qBQGu2Bl/tZ9ullr3+Kg0= dmitri.shuralyov.com/gpu/mtl v0.0.0-20190408044501-666a987793e9/go.mod h1:H6x//7gZCb22OMCxBHrMx7a5I7Hp++hsVxbQ4BYO7hU= github.com/Azure/azure-sdk-for-go v16.2.1+incompatible/go.mod h1:9XXNKU+eRnpl9moKnB4QOLf1HestfXbmab5FXxiDBjc= github.com/Azure/azure-sdk-for-go/sdk/azcore v0.19.0/go.mod h1:h6H6c8enJmmocHUbLiiGY6sx7f9i+X3m1CHdd5c6Rdw= @@ -51,6 +42,7 @@ github.com/Azure/go-autorest/logger v0.2.0/go.mod h1:T9E3cAhj2VqvPOtCYAvby9aBXkZ github.com/Azure/go-autorest/tracing v0.6.0/go.mod h1:+vhtPC754Xsa23ID7GlGsrdKBpUA79WCAKPPZVC2DeU= github.com/BurntSushi/toml v0.3.1/go.mod h1:xHWCNGjB5oqiDr8zfno3MHue2Ht5sIBksp03qcyfWMU= github.com/BurntSushi/xgb v0.0.0-20160522181843-27f122750802/go.mod h1:IVnqGOEym/WlBOVXweHU+Q+/VP0lqqI8lqeDx9IjBqo= +github.com/DataDog/zstd v1.5.2 h1:vUG4lAyuPCXO0TLbXvPv7EB7cNK1QV/luu55UHLrrn8= github.com/Masterminds/semver/v3 v3.1.1/go.mod h1:VPu/7SZ7ePZ3QOrcuXROw5FAcLl4a0cBrbBpGY/8hQs= 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= @@ -88,7 +80,6 @@ github.com/alecthomas/template v0.0.0-20160405071501-a0175ee3bccc/go.mod h1:LOuy github.com/alecthomas/template v0.0.0-20190718012654-fb15b899a751/go.mod h1:LOuyumcjzFXgccqObfd/Ljyb9UuFJ6TxHnclSeseNhc= github.com/alecthomas/units v0.0.0-20151022065526-2efee857e7cf/go.mod h1:ybxpYRFXyAe+OPACYpWeL0wqObRcbAqCMya13uyzqw0= github.com/alecthomas/units v0.0.0-20190717042225-c3de453c63f4/go.mod h1:ybxpYRFXyAe+OPACYpWeL0wqObRcbAqCMya13uyzqw0= -github.com/alecthomas/units v0.0.0-20190924025748-f65c72e2690d/go.mod h1:rBZYJk541a8SKzHPHnH3zbiI+7dagKZ0cgpgrD7Fyho= github.com/alexflint/go-filemutex v0.0.0-20171022225611-72bdc8eae2ae/go.mod h1:CgnQgUtFrFz9mxFNtED3jI5tLDjKlOM+oUF/sTk6ps0= github.com/andybalholm/brotli v1.0.1/go.mod h1:loMXtMfwqflxFJPmdbJO0a3KNoPuLBgiu3qAvBg8x/Y= github.com/andybalholm/brotli v1.0.4/go.mod h1:fO7iG3H7G2nSZ7m0zPUDn85XEX2GTukHGRSepvi9Eig= @@ -127,8 +118,8 @@ github.com/census-instrumentation/opencensus-proto v0.2.1/go.mod h1:f6KPmirojxKA github.com/cespare/cp v0.1.0 h1:SE+dxFebS7Iik5LK0tsi1k9ZCxEaFX4AjQmoyA+1dJk= github.com/cespare/xxhash v1.1.0/go.mod h1:XrSqR1VqqWfGrhpAt58auRo0WTKS1nRRg3ghfAqPWnc= github.com/cespare/xxhash/v2 v2.1.1/go.mod h1:VGX0DQ3Q6kWi7AoAeZDth3/j3BFtOZR5XLFGgcrjCOs= -github.com/cespare/xxhash/v2 v2.1.2 h1:YRXhKfTDauu4ajMg1TPgFO5jnlC2HCbmLXMcTG5cbYE= -github.com/cespare/xxhash/v2 v2.1.2/go.mod h1:VGX0DQ3Q6kWi7AoAeZDth3/j3BFtOZR5XLFGgcrjCOs= +github.com/cespare/xxhash/v2 v2.2.0 h1:DC2CZ1Ep5Y4k3ZQ899DldepgrayRUGE6BBZ/cd9Cj44= +github.com/cespare/xxhash/v2 v2.2.0/go.mod h1:VGX0DQ3Q6kWi7AoAeZDth3/j3BFtOZR5XLFGgcrjCOs= github.com/checkpoint-restore/go-criu/v4 v4.1.0/go.mod h1:xUQBLp4RLc5zJtWY++yjOoMoB5lihDt7fai+75m+rGw= github.com/checkpoint-restore/go-criu/v5 v5.0.0/go.mod h1:cfwC0EG7HMUenopBsUf9d89JlCLQIfgVcNsNN0t6T2M= github.com/checkpoint-restore/go-criu/v5 v5.3.0/go.mod h1:E/eQpaFtUKGOOSEBZgmKAcn+zUUwWxqcaKZlF54wK8E= @@ -152,6 +143,10 @@ github.com/cncf/xds/go v0.0.0-20211001041855-01bcc9b48dfe/go.mod h1:eXthEFrGJvWH github.com/cncf/xds/go v0.0.0-20211011173535-cb28da3451f1/go.mod h1:eXthEFrGJvWHgFFCl3hGmgk+/aYT6PnTQLykKQRLhEs= github.com/cockroachdb/apd v1.1.0/go.mod h1:8Sl8LxpKi29FqWXR16WEFZRNSz3SoPzUzeMeY4+DwBQ= github.com/cockroachdb/datadriven v0.0.0-20190809214429-80d97fb3cbaa/go.mod h1:zn76sxSg3SzpJ0PPJaLDCu+Bu0Lg3sKTORVIj19EIF8= +github.com/cockroachdb/errors v1.9.1 h1:yFVvsI0VxmRShfawbt/laCIDy/mtTqqnvoNgiy5bEV8= +github.com/cockroachdb/logtags v0.0.0-20230118201751-21c54148d20b h1:r6VH0faHjZeQy818SGhaone5OnYfxFR/+AzdY3sf5aE= +github.com/cockroachdb/pebble v0.0.0-20230209160836-829675f94811 h1:ytcWPaNPhNoGMWEhDvS3zToKcDpRsLuRolQJBVGdozk= +github.com/cockroachdb/redact v1.1.3 h1:AKZds10rFSIj7qADf0g46UixK8NNLwWTNdCIGS5wfSQ= github.com/containerd/aufs v0.0.0-20200908144142-dab0cbea06f4/go.mod h1:nukgQABAEopAHvB6j7cnP5zJ+/3aVcE7hCYqvIwAHyE= github.com/containerd/aufs v0.0.0-20201003224125-76a6863f2989/go.mod h1:AkGGQs9NM2vtYHaUen+NljV0/baGCAPELGm2q9ZXpWU= github.com/containerd/aufs v0.0.0-20210316121734-20793ff83c97/go.mod h1:kL5kd6KM5TzQjR79jljyi4olc1Vrx6XBlcyj3gNv2PU= @@ -278,8 +273,8 @@ github.com/d2g/hardwareaddr v0.0.0-20190221164911-e7d9fbe030e4/go.mod h1:bMl4RjI github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c= github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= -github.com/deckarep/golang-set v1.8.0 h1:sk9/l/KqpunDwP7pSjUg0keiOOLEnOBHzykLrsPppp4= -github.com/deckarep/golang-set v1.8.0/go.mod h1:5nI87KwE7wgsBU1F4GKAw2Qod7p5kyS383rP6+o6qqo= +github.com/deckarep/golang-set/v2 v2.1.0 h1:g47V4Or+DUdzbs8FxCCmgb6VYd+ptPAngjM6dtGktsI= +github.com/deckarep/golang-set/v2 v2.1.0/go.mod h1:VAky9rY/yGXJOLEDv3OMci+7wtDpOF4IN+y82NBOac4= github.com/decred/dcrd/crypto/blake256 v1.0.0 h1:/8DMNYp9SGi5f0w7uCm6d6M4OU2rGFK09Y2A4Xv7EE0= github.com/decred/dcrd/dcrec/secp256k1/v4 v4.1.0 h1:HbphB4TFFXpv7MNrT52FGrrgVXF1owhMVTHFZIlnvd4= github.com/decred/dcrd/dcrec/secp256k1/v4 v4.1.0/go.mod h1:DZGJHZMqrU4JJqFAWUS2UO1+lbSKsdiOoYi9Zzey7Fc= @@ -327,8 +322,8 @@ github.com/envoyproxy/go-control-plane v0.9.9-0.20201210154907-fd9021fe5dad/go.m github.com/envoyproxy/go-control-plane v0.9.9-0.20210512163311-63b5d3c536b0/go.mod h1:hliV/p42l8fGbc6Y9bQ70uLwIvmJyVE5k4iMKlh8wCQ= github.com/envoyproxy/go-control-plane v0.10.2-0.20220325020618-49ff273808a1/go.mod h1:KJwIaB5Mv44NWtYuAOFCVOjcI94vtpEz2JU/D2v6IjE= github.com/envoyproxy/protoc-gen-validate v0.1.0/go.mod h1:iSmxcyjqTsJpI2R4NaDN7+kN2VEUnK/pcBlmesArF7c= -github.com/ethereum/go-ethereum v1.10.26 h1:i/7d9RBBwiXCEuyduBQzJw/mKmnvzsN14jqBmytw72s= -github.com/ethereum/go-ethereum v1.10.26/go.mod h1:EYFyF19u3ezGLD4RqOkLq+ZCXzYbLoNDdZlMt7kyKFg= +github.com/ethereum/go-ethereum v1.11.4 h1:KG81SnUHXWk8LJB3mBcHg/E2yLvXoiPmRMCIRxgx3cE= +github.com/ethereum/go-ethereum v1.11.4/go.mod h1:it7x0DWnTDMfVFdXcU6Ti4KEFQynLHVRarcSlPr0HBo= github.com/evanphx/json-patch v4.9.0+incompatible/go.mod h1:50XU6AFN0ol/bzJsmQLiYLvXMP4fmwYFNcr97nuDLSk= github.com/fatih/color v1.7.0/go.mod h1:Zm6kSWBoL9eyXnKyktHP6abPY2pDugNf5KwzbycvMj4= github.com/fjl/memsize v0.0.0-20190710130421-bcb5799ab5e5 h1:FtmdgXiUlNeRsoNMFlKLDt+S+6hbjVMEW6RGQ7aUf7c= @@ -336,9 +331,12 @@ github.com/form3tech-oss/jwt-go v3.2.2+incompatible/go.mod h1:pbq4aXjuKjdthFRnoD github.com/frankban/quicktest v1.11.3/go.mod h1:wRf/ReqHper53s+kmmSZizM8NamnL3IM0I9ntUbOk+k= github.com/fsnotify/fsnotify v1.4.7/go.mod h1:jwhsz4b93w/PPRr/qN1Yymfu8t87LnFCMoQvtojpjFo= github.com/fsnotify/fsnotify v1.4.9/go.mod h1:znqG4EE+3YCdAaPaxE2ZRY/06pZUdp0tY4IgpuI1SZQ= +github.com/fsnotify/fsnotify v1.6.0 h1:n+5WquG0fcWoWp6xPWfHdbskMCQaFnG6PfBrh1Ky4HY= +github.com/fsnotify/fsnotify v1.6.0/go.mod h1:sl3t1tCWJFWoRz9R8WJCbQihKKwmorjAbSClcnxKAGw= github.com/fullsailor/pkcs7 v0.0.0-20190404230743-d7302db945fa/go.mod h1:KnogPXtdwXqoenmZCw6S+25EAm2MkxbG0deNDu4cbSA= github.com/garyburd/redigo v0.0.0-20150301180006-535138d7bcd7/go.mod h1:NR3MbYisc3/PwhQ00EMzDiPmrwpPxAn5GI05/YaO1SY= github.com/gballet/go-libpcsclite v0.0.0-20190607065134-2772fd86a8ff h1:tY80oXqGNY4FhTFhk+o9oFHGINQ/+vhlm8HFzi6znCI= +github.com/getsentry/sentry-go v0.18.0 h1:MtBW5H9QgdcJabtZcuJG80BMOwaBpkRDZkxRkNC1sN0= github.com/ghodss/yaml v0.0.0-20150909031657-73d445a93680/go.mod h1:4dBDuWmgqj2HViK6kFavaiC9ZROes6MMH2rRYeMEF04= github.com/ghodss/yaml v1.0.0/go.mod h1:4dBDuWmgqj2HViK6kFavaiC9ZROes6MMH2rRYeMEF04= github.com/go-gl/glfw v0.0.0-20190409004039-e6da0acd62b1/go.mod h1:vR7hzQXu2zJy9AVAgeJqvqgH9Q5CA+iKCZ2gyEVpxRU= @@ -348,11 +346,9 @@ github.com/go-ini/ini v1.25.4/go.mod h1:ByCAeIL28uOIIG0E3PJtZPDL8WnHpFKFOtgjp+3I github.com/go-kit/kit v0.8.0/go.mod h1:xBxKIO96dXMWWy0MnWVtmwkA9/13aqxPnvrjFYMA2as= github.com/go-kit/kit v0.9.0/go.mod h1:xBxKIO96dXMWWy0MnWVtmwkA9/13aqxPnvrjFYMA2as= github.com/go-kit/log v0.1.0/go.mod h1:zbhenjAZHb184qTLMA9ZjW7ThYL0H2mk7Q6pNt4vbaY= -github.com/go-kit/log v0.2.0/go.mod h1:NwTd00d/i8cPZ3xOwwiv2PO5MOcx78fFErGNcVmBjv0= github.com/go-logfmt/logfmt v0.3.0/go.mod h1:Qt1PoO58o5twSAckw1HlFXLmHsOX5/0LbT9GBnD5lWE= github.com/go-logfmt/logfmt v0.4.0/go.mod h1:3RMwSq7FuexP4Kalkev3ejPJsZTpXXBr9+V4qmtdjCk= github.com/go-logfmt/logfmt v0.5.0/go.mod h1:wCYkCAKZfumFQihp8CzCvQ3paCTfi41vtzG1KdI/P7A= -github.com/go-logfmt/logfmt v0.5.1/go.mod h1:WYhtIu8zTZfxdn5+rREduYbwxfcBr/Vr6KEVveWlfTs= github.com/go-logr/logr v0.1.0/go.mod h1:ixOQHD9gLJUVQQ2ZOR7zLEifBX6tGkNJF4QyIY7sIas= github.com/go-logr/logr v0.2.0/go.mod h1:z6/tIYblkpsD+a4lm/fGIIU9mZ+XfAiaFtq7xTgseGU= github.com/go-ole/go-ole v1.2.1 h1:2lOsA72HgjxAuMlKpFiCbHTvu44PIVkZ5hqm3RSdI/E= @@ -379,14 +375,16 @@ github.com/go-playground/validator/v10 v10.4.0/go.mod h1:nlOn6nFhuKACm19sB/8EGNn github.com/go-redis/redis/v8 v8.11.5 h1:AcZZR7igkdvfVmQTPnu9WE37LRrO/YrBH5zWyjDC0oI= github.com/go-sql-driver/mysql v1.6.0 h1:BCTh4TKNUYmOmMUcQ3IipzF5prigylS7XXjEkfCHuOE= github.com/go-sql-driver/mysql v1.6.0/go.mod h1:DCzpHaOWr8IXmIStZouvnhqoel9Qv2LBy8hT2VhHyBg= -github.com/go-stack/stack v1.8.0 h1:5SgMzNM5HxrEjV0ww2lTmX6E2Izsfxas4+YHWRs3Lsk= github.com/go-stack/stack v1.8.0/go.mod h1:v0f6uXyyMGvRgIKkXu+yp6POWl0qKG85gN/melR3HDY= +github.com/go-stack/stack v1.8.1 h1:ntEHSVwIt7PNXNpgPmVfMrNhLtgjlmnZha2kOpuRiDw= +github.com/go-stack/stack v1.8.1/go.mod h1:dcoOX6HbPZSZptuspn9bctJ+N/CnF5gGygcUP3XYfe4= github.com/godbus/dbus v0.0.0-20151105175453-c7fdd8b5cd55/go.mod h1:/YcGZj5zSblfDWMMoOzV4fas9FZnQYTkDnsGvmh2Grw= github.com/godbus/dbus v0.0.0-20180201030542-885f9cc04c9c/go.mod h1:/YcGZj5zSblfDWMMoOzV4fas9FZnQYTkDnsGvmh2Grw= github.com/godbus/dbus v0.0.0-20190422162347-ade71ed3457e/go.mod h1:bBOAhwG1umN6/6ZUMtDFBMQR8jRg9O75tm9K00oMsK4= github.com/godbus/dbus/v5 v5.0.3/go.mod h1:xhWf0FNVPg57R7Z0UbKHbJfkEywrmjJnf7w5xrFpKfA= github.com/godbus/dbus/v5 v5.0.4/go.mod h1:xhWf0FNVPg57R7Z0UbKHbJfkEywrmjJnf7w5xrFpKfA= github.com/godbus/dbus/v5 v5.0.6/go.mod h1:xhWf0FNVPg57R7Z0UbKHbJfkEywrmjJnf7w5xrFpKfA= +github.com/gofrs/flock v0.8.1 h1:+gYjHKf32LDeiEEFhQaotPbLuUXjY5ZqxKgXy7n59aw= github.com/gofrs/uuid v4.0.0+incompatible/go.mod h1:b2aQJv3Z4Fp6yNu3cdSllBxTCLRxnplIgP/c0N/04lM= github.com/gogo/googleapis v1.2.0/go.mod h1:Njal3psf3qN6dwBtQfUmBZh2ybovJ0tlu3o/AC7HYjU= github.com/gogo/googleapis v1.4.0/go.mod h1:5YRNX2z1oM5gXdAkurHa942MDgEJyk02w4OecKY87+c= @@ -420,7 +418,6 @@ github.com/golang/mock v1.3.1/go.mod h1:sBzyDLLjw3U8JLTeZvSv8jJB+tU5PVekmnlKIyFU github.com/golang/mock v1.4.0/go.mod h1:UOMv5ysSaYNkG+OFQykRIcU/QvvxJf3p21QfJ2Bt3cw= github.com/golang/mock v1.4.1/go.mod h1:UOMv5ysSaYNkG+OFQykRIcU/QvvxJf3p21QfJ2Bt3cw= github.com/golang/mock v1.4.3/go.mod h1:UOMv5ysSaYNkG+OFQykRIcU/QvvxJf3p21QfJ2Bt3cw= -github.com/golang/mock v1.4.4/go.mod h1:l3mdAwkq5BuhzHwde/uurv3sEJeZMXNpwsxVWU71h+4= github.com/golang/mock v1.6.0/go.mod h1:p6yTPP+5HYm5mzsMV8JkE6ZKdX+/wYM6Hr+LicevLPs= github.com/golang/protobuf v1.2.0/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U= github.com/golang/protobuf v1.3.1/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U= @@ -446,7 +443,6 @@ github.com/google/go-cmp v0.2.0/go.mod h1:oXzfMopK8JAjlY9xF4vHSVASa0yLyX7SntLO5a github.com/google/go-cmp v0.3.0/go.mod h1:8QqcDgzrUqlUb/G2PQTWiueGozuR1884gddMywk6iLU= github.com/google/go-cmp v0.3.1/go.mod h1:8QqcDgzrUqlUb/G2PQTWiueGozuR1884gddMywk6iLU= github.com/google/go-cmp v0.4.0/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= -github.com/google/go-cmp v0.4.1/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= github.com/google/go-cmp v0.5.0/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= github.com/google/go-cmp v0.5.1/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= github.com/google/go-cmp v0.5.2/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= @@ -459,14 +455,12 @@ github.com/google/go-containerregistry v0.5.1/go.mod h1:Ct15B4yir3PLOP5jsy0GNeYV github.com/google/gofuzz v1.0.0/go.mod h1:dBl0BpW6vV/+mYPU4Po3pmUjxk6FQPldtuIdl/M65Eg= github.com/google/gofuzz v1.1.0/go.mod h1:dBl0BpW6vV/+mYPU4Po3pmUjxk6FQPldtuIdl/M65Eg= github.com/google/martian v2.1.0+incompatible/go.mod h1:9I4somxYTbIHy5NJKHRl3wXiIaQGbYVAs8BPL6v8lEs= -github.com/google/martian/v3 v3.0.0/go.mod h1:y5Zk1BBys9G+gd6Jrk0W3cC1+ELVxBWuIGO+w/tUAp0= github.com/google/pprof v0.0.0-20181206194817-3ea8567a2e57/go.mod h1:zfwlbNMJ+OItoe0UupaVj+oy1omPYYDuagoSzA8v9mc= github.com/google/pprof v0.0.0-20190515194954-54271f7e092f/go.mod h1:zfwlbNMJ+OItoe0UupaVj+oy1omPYYDuagoSzA8v9mc= github.com/google/pprof v0.0.0-20191218002539-d4f498aebedc/go.mod h1:ZgVRPoUq/hfqzAqh7sHMqb3I9Rq5C59dIz2SbBwJ4eM= github.com/google/pprof v0.0.0-20200212024743-f11f1df84d12/go.mod h1:ZgVRPoUq/hfqzAqh7sHMqb3I9Rq5C59dIz2SbBwJ4eM= github.com/google/pprof v0.0.0-20200229191704-1ebb73c60ed3/go.mod h1:ZgVRPoUq/hfqzAqh7sHMqb3I9Rq5C59dIz2SbBwJ4eM= github.com/google/pprof v0.0.0-20200430221834-fc25d7d30c6d/go.mod h1:ZgVRPoUq/hfqzAqh7sHMqb3I9Rq5C59dIz2SbBwJ4eM= -github.com/google/pprof v0.0.0-20200708004538-1a94d8640e99/go.mod h1:ZgVRPoUq/hfqzAqh7sHMqb3I9Rq5C59dIz2SbBwJ4eM= github.com/google/renameio v0.1.0/go.mod h1:KWCgfxg9yswjAJkECMjeO8J8rahYeXnNhOm40UhjYkI= github.com/google/uuid v1.0.0/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= github.com/google/uuid v1.1.1/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= @@ -501,7 +495,6 @@ github.com/hashicorp/go-multierror v0.0.0-20161216184304-ed905158d874/go.mod h1: github.com/hashicorp/go-multierror v1.0.0/go.mod h1:dHtQlpGsu+cZNNAkkCN/P3hoUDHhCYQXV3UM06sGGrk= github.com/hashicorp/golang-lru v0.5.0/go.mod h1:/m3WP610KZHVQ1SGc6re/UDhFvYD7pJ4Ao+sR/qLZy8= github.com/hashicorp/golang-lru v0.5.1/go.mod h1:/m3WP610KZHVQ1SGc6re/UDhFvYD7pJ4Ao+sR/qLZy8= -github.com/hashicorp/golang-lru v0.5.5-0.20210104140557-80c98217689d h1:dg1dEPuWpEqDnvIw251EVy4zlP8gWbsGj4BsUKCRpYs= github.com/hashicorp/hcl v1.0.0/go.mod h1:E5yfLk+7swimpb2L/Alb/PJmXilQ/rhwaUYs4T20WEQ= github.com/holiman/bloomfilter/v2 v2.0.3 h1:73e0e/V0tCydx14a0SCYS/EWCxgwLZ18CZcZKVu0fao= github.com/holiman/uint256 v1.2.0 h1:gpSYcPLWGv4sG43I2mVLiDZCNDh/EpGjSk8tmtxitHM= @@ -579,17 +572,13 @@ github.com/joefitzgerald/rainbow-reporter v0.1.0/go.mod h1:481CNgqmVHQZzdIbN52Cu github.com/joho/godotenv v1.4.0 h1:3l4+N6zfMWnkbPEXKng2o2/MR5mSwTrBih4ZEkkz1lg= github.com/joho/godotenv v1.4.0/go.mod h1:f4LDr5Voq0i2e/R5DDNOoa2zzDfwtkZa6DnEwAbqwq4= github.com/jonboulle/clockwork v0.1.0/go.mod h1:Ii8DK3G1RaLaWxj9trq07+26W01tbo22gdxWY5EU2bo= -github.com/jpillora/backoff v1.0.0/go.mod h1:J/6gKK9jxlEcS3zixgDgUAsiuZ7yrSoa/FX5e0EB2j4= github.com/json-iterator/go v1.1.6/go.mod h1:+SdeFBvtyEkXs7REEP0seUULqWtbJapLOCVDaaPEHmU= github.com/json-iterator/go v1.1.7/go.mod h1:KdQUCv79m/52Kvf8AW2vK1V8akMuk1QjK/uOdHXbAo4= github.com/json-iterator/go v1.1.10/go.mod h1:KdQUCv79m/52Kvf8AW2vK1V8akMuk1QjK/uOdHXbAo4= -github.com/json-iterator/go v1.1.11/go.mod h1:KdQUCv79m/52Kvf8AW2vK1V8akMuk1QjK/uOdHXbAo4= -github.com/json-iterator/go v1.1.12/go.mod h1:e30LSqwooZae/UwlEbR2852Gd8hjQvJoHmT4TnhNGBo= github.com/jstemmer/go-junit-report v0.0.0-20190106144839-af01ea7f8024/go.mod h1:6v2b51hI/fHJwM22ozAgKL4VKDeJcHhJFhtBdhmNjmU= github.com/jstemmer/go-junit-report v0.9.1/go.mod h1:Brl9GWCQeLvo8nXZwPNNblvFj/XSXhF0NWZEnDohbsk= github.com/jtolds/gls v4.20.0+incompatible/go.mod h1:QJZ7F/aHp+rZTRtaJ1ow/lLfFfVYBRgL+9YlvaHOwJU= github.com/julienschmidt/httprouter v1.2.0/go.mod h1:SYymIcj16QtmaHHD7aYtjjsJG7VTCxuUUipMqKk8s4w= -github.com/julienschmidt/httprouter v1.3.0/go.mod h1:JR6WtHb+2LUe8TCKY3cZOxFyyO8IZAc4RVcycCCAKdM= github.com/kballard/go-shellquote v0.0.0-20180428030007-95032a82bc51 h1:Z9n2FFNUXsshfwJMBgNA0RU6/i7WVaAegv3PtuIHPMs= github.com/kisielk/errcheck v1.1.0/go.mod h1:EZBBE59ingxPouuu3KfxchcWSUPOHkagtvWXihfKN4Q= github.com/kisielk/errcheck v1.2.0/go.mod h1:/BMXB+zMLi60iA8Vv6Ksmxu/1UDYcXs4uQLJ+jE2L00= @@ -609,12 +598,14 @@ github.com/kr/logfmt v0.0.0-20140226030751-b84e30acd515/go.mod h1:+0opPa2QZZtGFB github.com/kr/pretty v0.1.0/go.mod h1:dAy3ld7l9f0ibDNOQOHHMYYIIbhfbHSm3C4ZsoJORNo= github.com/kr/pretty v0.2.0/go.mod h1:ipq/a2n7PKx3OHsz4KJII5eveXtPO4qwEXGdVfWzfnI= github.com/kr/pretty v0.2.1/go.mod h1:ipq/a2n7PKx3OHsz4KJII5eveXtPO4qwEXGdVfWzfnI= +github.com/kr/pretty v0.3.1 h1:flRD4NNwYAUpkphVc1HcthR4KEIFJ65n8Mw5qdRn3LE= github.com/kr/pty v1.1.1/go.mod h1:pFQYn66WHrOpPYNljwOMqo10TkYh1fy3cYio2l3bCsQ= github.com/kr/pty v1.1.5/go.mod h1:9r2w37qlBe7rQ6e1fg1S/9xpWHSnaqNdHD3WcMdbPDA= github.com/kr/pty v1.1.8/go.mod h1:O1sed60cT9XZ5uDucP5qwvh+TE3NnUj51EiZO/lmSfw= github.com/kr/text v0.1.0/go.mod h1:4Jbv+DJW3UT/LiOwJeYQe1efqtUx/iVham/4vfdArNI= github.com/kr/text v0.2.0 h1:5Nx0Ya0ZqY2ygV366QzturHI13Jq95ApcVaJBhpS+AY= github.com/kr/text v0.2.0/go.mod h1:eLer722TekiGuMkidMxC/pM04lWEeraHUUmBw8l2grE= +github.com/kylelemons/godebug v1.1.0 h1:RPNrshWIDI6G2gRW9EHilWtl7Z6Sb1BR0xunSBf0SNc= github.com/labstack/echo-contrib v0.13.0 h1:bzSG0SpuZZd7BmJLvsWtPfU23W0Enh3K0tok3aENVKA= github.com/labstack/echo-contrib v0.13.0/go.mod h1:IF9+MJu22ADOZEHD+bAV67XMIO3vNXUy7Naz/ABPHEs= github.com/labstack/echo/v4 v4.0.0/go.mod h1:tZv7nai5buKSg5h/8E6zz4LsD/Dqh9/91Mvs7Z5Zyno= @@ -645,16 +636,17 @@ github.com/mattn/go-colorable v0.1.1/go.mod h1:FuOcm+DKB9mbwrcAfNl7/TZVBZ6rcncea github.com/mattn/go-colorable v0.1.2/go.mod h1:U0ppj6V5qS13XJ6of8GYAs25YV2eR4EVcfRqFIhoBtE= github.com/mattn/go-colorable v0.1.6/go.mod h1:u6P/XSegPjTcexA+o6vUJrdnUu04hMope9wVRipJSqc= github.com/mattn/go-colorable v0.1.11/go.mod h1:u5H1YNBxpqRaxsYJYSkiCWKzEfiAb1Gb520KVy5xxl4= -github.com/mattn/go-colorable v0.1.12 h1:jF+Du6AlPIjs2BiUiQlKOX0rt3SujHxPnksPKZbaA40= -github.com/mattn/go-colorable v0.1.12/go.mod h1:u5H1YNBxpqRaxsYJYSkiCWKzEfiAb1Gb520KVy5xxl4= +github.com/mattn/go-colorable v0.1.13 h1:fFA4WZxdEF4tXPZVKMLwD8oUnCTTo08duU7wxecdEvA= +github.com/mattn/go-colorable v0.1.13/go.mod h1:7S9/ev0klgBDR4GtXTXX8a3vIGJpMovkB8vQcUbaXHg= github.com/mattn/go-isatty v0.0.4/go.mod h1:M+lRXTBqGeGNdLjl/ufCoiOlB5xdOkqRJdNxMWT7Zi4= github.com/mattn/go-isatty v0.0.5/go.mod h1:Iq45c/XA43vh69/j3iqttzPXn0bhXyGjM0Hdxcsrc5s= github.com/mattn/go-isatty v0.0.7/go.mod h1:Iq45c/XA43vh69/j3iqttzPXn0bhXyGjM0Hdxcsrc5s= github.com/mattn/go-isatty v0.0.8/go.mod h1:Iq45c/XA43vh69/j3iqttzPXn0bhXyGjM0Hdxcsrc5s= github.com/mattn/go-isatty v0.0.9/go.mod h1:YNRxwqDuOph6SZLI9vUUz6OYw3QyUt7WiY2yME+cCiQ= github.com/mattn/go-isatty v0.0.12/go.mod h1:cbi8OIDigv2wuxKPP5vlRcQ1OAZbq2CE4Kysco4FUpU= -github.com/mattn/go-isatty v0.0.14 h1:yVuAays6BHfxijgZPzw+3Zlu5yQgKGP2/hcQbHb7S9Y= github.com/mattn/go-isatty v0.0.14/go.mod h1:7GGIvUiUoEMVVmxf/4nioHXj79iQHKdU27kJ6hsGG94= +github.com/mattn/go-isatty v0.0.16 h1:bq3VjFmv/sOjHtdEhmkEV4x1AJtvUvOJ2PFAZ5+peKQ= +github.com/mattn/go-isatty v0.0.16/go.mod h1:kYGgaQfpe5nmfYZH+SKPsOc2e4SrIfOl2e/yFXSvRLM= github.com/mattn/go-runewidth v0.0.2/go.mod h1:LwmH8dsx7+W8Uxz3IHJYH5QSwggIsqBzpuz5H//U1FU= github.com/mattn/go-runewidth v0.0.9 h1:Lm995f3rfxdpd6TSmuVCHVb/QhupuXlYr8sCI/QdE+0= github.com/mattn/go-shellwords v1.0.3/go.mod h1:3xCvwCdWdlDJUrvuMn7Wuy9eWs4pE8vqg+NOMyg4B2o= @@ -694,7 +686,6 @@ github.com/modern-go/concurrent v0.0.0-20180228061459-e0a39a4cb421/go.mod h1:6dJ github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd/go.mod h1:6dJC0mAP4ikYIbvyc7fijjWJddQyLn8Ig3JB5CqoB9Q= github.com/modern-go/reflect2 v0.0.0-20180701023420-4b7aa43c6742/go.mod h1:bx2lNnkwVCuqBIxFjflWJWanXIb3RllmbCylyMrvgv0= github.com/modern-go/reflect2 v1.0.1/go.mod h1:bx2lNnkwVCuqBIxFjflWJWanXIb3RllmbCylyMrvgv0= -github.com/modern-go/reflect2 v1.0.2/go.mod h1:yWuevngMOJpCy52FWWMvUC8ws7m/LJsjYzDa0/r8luk= github.com/modocache/gover v0.0.0-20171022184752-b58185e213c5/go.mod h1:caMODM3PzxT8aQXRPkAt8xlV/e7d7w8GM5g0fa5F0D8= github.com/morikuni/aec v1.0.0 h1:nP9CBfwrvYnBRgY6qfDQkygYDmYwOilePFkwzv4dU8A= github.com/morikuni/aec v1.0.0/go.mod h1:BbKIizmSmc5MMPqRYbxO4ZU0S0+P200+tUnFx7PXmsc= @@ -706,12 +697,10 @@ github.com/mrunalp/fileutils v0.5.0/go.mod h1:M1WthSahJixYnrXQl/DFQuteStB1weuxD2 github.com/munnerz/goautoneg v0.0.0-20120707110453-a547fc61f48d/go.mod h1:+n7T8mK8HuQTcFwEeznm/DIxMOiR9yIdICNftLE1DvQ= github.com/munnerz/goautoneg v0.0.0-20191010083416-a7dc8b61c822/go.mod h1:+n7T8mK8HuQTcFwEeznm/DIxMOiR9yIdICNftLE1DvQ= github.com/mwitkow/go-conntrack v0.0.0-20161129095857-cc309e4a2223/go.mod h1:qRWi+5nqEBWmkhHvq77mSJWrCKwh8bxhgT7d/eI7P4U= -github.com/mwitkow/go-conntrack v0.0.0-20190716064945-2f068394615f/go.mod h1:qRWi+5nqEBWmkhHvq77mSJWrCKwh8bxhgT7d/eI7P4U= github.com/mxk/go-flowrate v0.0.0-20140419014527-cca7078d478f/go.mod h1:ZdcZmHo+o7JKHSa8/e818NopupXU1YMK5fe1lsApnBw= github.com/ncw/swift v1.0.47/go.mod h1:23YIA4yWVnGwv2dQlN4bB7egfYX6YLn0Yo/S6zZO/ZM= github.com/neko-neko/echo-logrus/v2 v2.0.1 h1:BX2U6uv2N3UiUY75y+SntQak5S1AJIel9j+5Y6h4Nb4= github.com/neko-neko/echo-logrus/v2 v2.0.1/go.mod h1:GDYWo9CY4VXk/vn5ac5reoutYEkZEexlFI01MzHXVG0= -github.com/niemeyer/pretty v0.0.0-20200227124842-a10e7caefd8e h1:fD57ERR4JtEqsWbfPhv4DMiApHyliiK5xCTNVSPiaAs= github.com/niemeyer/pretty v0.0.0-20200227124842-a10e7caefd8e/go.mod h1:zD1mROLANZcx1PVRCS0qkT7pwLkGfwJo4zjcN/Tysno= github.com/nxadm/tail v1.4.4/go.mod h1:kenIhsEOeOJmVchQTgglprH7qJGnHDVpk1VPCcaMI8A= github.com/oklog/ulid v1.3.1/go.mod h1:CirwcVhetQ6Lv90oh/F+FBtV6XMibvdAFo93nm5qn4U= @@ -784,8 +773,6 @@ github.com/prometheus/client_golang v0.9.3/go.mod h1:/TN21ttK/J9q6uSwhBd54HahCDf github.com/prometheus/client_golang v1.0.0/go.mod h1:db9x61etRT2tGnBNRi70OPL5FsnadC4Ky3P0J6CfImo= github.com/prometheus/client_golang v1.1.0/go.mod h1:I1FGZT9+L76gKKOs5djB6ezCbFQP1xR9D75/vuwEF3g= github.com/prometheus/client_golang v1.7.1/go.mod h1:PY5Wy2awLA44sXw4AOSfFBetzPP4j5+D6mVACh+pe2M= -github.com/prometheus/client_golang v1.11.0/go.mod h1:Z6t4BnS23TR94PD6BsDNk8yVqroYurpAkEiz0P2BEV0= -github.com/prometheus/client_golang v1.12.1/go.mod h1:3Z9XVyYiZYEO+YQWt3RD2R3jrbd179Rt297l4aS6nDY= github.com/prometheus/client_golang v1.14.0 h1:nJdhIvne2eSX/XRAFV9PcvFFRbrjbcTUj0VP62TMhnw= github.com/prometheus/client_golang v1.14.0/go.mod h1:8vpkKitgIVNcqrRBWh1C4TIUQgYNtG/XQE4E/Zae36Y= github.com/prometheus/client_model v0.0.0-20171117100541-99fa1f4be8e5/go.mod h1:MbSGuTsp3dbXC40dX6PRTWyKYBIrTGTE9sqQNg2J8bo= @@ -801,10 +788,8 @@ github.com/prometheus/common v0.4.0/go.mod h1:TNfzLD0ON7rHzMJeJkieUDPYmFC7Snx/y8 github.com/prometheus/common v0.4.1/go.mod h1:TNfzLD0ON7rHzMJeJkieUDPYmFC7Snx/y86RQel1bk4= github.com/prometheus/common v0.6.0/go.mod h1:eBmuwkDJBwy6iBfxCBob6t6dR6ENT/y+J+Zk0j9GMYc= github.com/prometheus/common v0.10.0/go.mod h1:Tlit/dnDKsSWFlCLTWaA1cyBgKHSMdTB80sz/V91rCo= -github.com/prometheus/common v0.26.0/go.mod h1:M7rCNAaPfAosfx8veZJCuw84e35h3Cfd9VFqTh1DIvc= -github.com/prometheus/common v0.32.1/go.mod h1:vu+V0TpY+O6vW9J44gczi3Ap/oXXR10b+M/gUGO4Hls= -github.com/prometheus/common v0.37.0 h1:ccBbHCgIiT9uSoFY0vX8H3zsNR5eLt17/RQLUvn8pXE= -github.com/prometheus/common v0.37.0/go.mod h1:phzohg0JFMnBEFGxTDbfu3QyL5GI8gTQJFhYO5B3mfA= +github.com/prometheus/common v0.39.0 h1:oOyhkDq05hPZKItWVBkJ6g6AtGxi+fy7F4JvUV8uhsI= +github.com/prometheus/common v0.39.0/go.mod h1:6XBZ7lYdLCbkAVhwRsWTZn+IN5AB9F/NXd5w0BbEX0Y= github.com/prometheus/procfs v0.0.0-20180125133057-cb4147076ac7/go.mod h1:c3At6R/oaqEKCNdg8wHV1ftS6bRYblBhIjjI8uT2IGk= github.com/prometheus/procfs v0.0.0-20181005140218-185b4288413d/go.mod h1:c3At6R/oaqEKCNdg8wHV1ftS6bRYblBhIjjI8uT2IGk= github.com/prometheus/procfs v0.0.0-20190507164030-5867b95ac084/go.mod h1:TjEm7ze935MbeOT/UhFTIMYKhuLP4wbCsTZCD3I8kEA= @@ -816,17 +801,14 @@ github.com/prometheus/procfs v0.0.8/go.mod h1:7Qr8sr6344vo1JqZ6HhLceV9o3AJ1Ff+Gx github.com/prometheus/procfs v0.1.3/go.mod h1:lV6e/gmhEcM9IjHGsFOCxxuZ+z1YqCvr4OA4YeYWdaU= github.com/prometheus/procfs v0.2.0/go.mod h1:lV6e/gmhEcM9IjHGsFOCxxuZ+z1YqCvr4OA4YeYWdaU= github.com/prometheus/procfs v0.6.0/go.mod h1:cz+aTbrPOrUb4q7XlbU9ygM+/jj0fzG6c1xBZuNvfVA= -github.com/prometheus/procfs v0.7.3/go.mod h1:cz+aTbrPOrUb4q7XlbU9ygM+/jj0fzG6c1xBZuNvfVA= -github.com/prometheus/procfs v0.8.0 h1:ODq8ZFEaYeCaZOJlZZdJA2AbQR98dSHSM1KW/You5mo= -github.com/prometheus/procfs v0.8.0/go.mod h1:z7EfXMXOkbkqb9IINtpCn86r/to3BnA0uaxHdg830/4= -github.com/prometheus/tsdb v0.7.1 h1:YZcsG11NqnK4czYLrWd9mpEuAJIHVQLwdrleYfszMAA= +github.com/prometheus/procfs v0.9.0 h1:wzCHvIvM5SxWqYvwgVL7yJY8Lz3PKn49KQtpgMYJfhI= +github.com/prometheus/procfs v0.9.0/go.mod h1:+pB4zwohETzFnmlpe6yd2lSc+0/46IYZRB/chUwxUZY= github.com/prometheus/tsdb v0.7.1/go.mod h1:qhTCs0VvXwvX/y3TZrWD7rabWM+ijKTux40TwIPHuXU= github.com/remyoudompheng/bigfft v0.0.0-20200410134404-eec4a21b6bb0 h1:OdAsTTz6OkFY5QxjkYwrChwuRruF69c169dPK26NUlk= -github.com/rjeczalik/notify v0.9.1 h1:CLCKso/QK1snAlnhNR/CNvNiFU2saUtjV0bx3EwNeCE= -github.com/rjeczalik/notify v0.9.1/go.mod h1:rKwnCoCGeuQnwBtTSPL9Dad03Vh2n40ePRrjvIXnJho= github.com/rogpeppe/fastuuid v0.0.0-20150106093220-6724a57986af/go.mod h1:XWv6SoW27p1b0cqNHllgS5HIMJraePCO15w5zCzIWYg= github.com/rogpeppe/fastuuid v1.2.0/go.mod h1:jVj6XXZzXRy/MSR5jhDC/2q6DgLz+nrA6LYCDYWNEvQ= github.com/rogpeppe/go-internal v1.3.0/go.mod h1:M8bDsm7K2OlrFYOpmOWEs/qY81heoFRclV5y23lUDJ4= +github.com/rogpeppe/go-internal v1.9.0 h1:73kH8U+JUqXU8lRuOHeVHaa/SZPifC7BkcraZVejAe8= github.com/rs/cors v1.7.0 h1:+88SsELBHx5r+hZ8TCkggzSstaWNbDvThkVK8H6f9ik= github.com/rs/xid v1.2.1/go.mod h1:+uKXf+4Djp6Md1KODXJxgGQPKngRmWyn10oCKFzNHOQ= github.com/rs/zerolog v1.13.0/go.mod h1:YbFCdg8HfsridGWAh22vktObvhZbQsZXe4/zB0OKkWU= @@ -871,7 +853,7 @@ github.com/spf13/pflag v1.0.1/go.mod h1:DYY7MBk1bdzusC3SYhjObp+wFpr4gzcvqqNjLnIn github.com/spf13/pflag v1.0.3/go.mod h1:DYY7MBk1bdzusC3SYhjObp+wFpr4gzcvqqNjLnInEg4= github.com/spf13/pflag v1.0.5/go.mod h1:McXfInJRrz4CZXVZOBLb0bTZqETkiAhM9Iw0y3An2Bg= github.com/spf13/viper v1.4.0/go.mod h1:PTJ7Z/lr49W6bUbkmS1V3by4uWynFiR9p7+dSq/yZzE= -github.com/status-im/keycard-go v0.0.0-20190316090335-8537d3370df4 h1:Gb2Tyox57NRNuZ2d3rmvB3pcmbu7O1RS3m8WRx7ilrg= +github.com/status-im/keycard-go v0.2.0 h1:QDLFswOQu1r5jsycloeQh3bVU8n/NatHHaZobtDnDzA= github.com/stefanberger/go-pkcs11uri v0.0.0-20201008174630-78d3cae3a980/go.mod h1:AO3tvPzVZ/ayst6UlUKUv6rcPQInYe3IknH3jYhAKu8= github.com/stretchr/objx v0.0.0-20180129172003-8a3f7159479f/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME= github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME= @@ -902,14 +884,13 @@ github.com/tklauser/numcpus v0.2.2/go.mod h1:x3qojaO3uyYt0i56EW/VUYs7uBvdl2fkfZF github.com/tmc/grpc-websocket-proxy v0.0.0-20170815181823-89b8d40f7ca8/go.mod h1:ncp9v5uamzpCO7NfCPTXjqaC+bZgJeR0sMTm6dMHP7U= github.com/tmc/grpc-websocket-proxy v0.0.0-20190109142713-0ad062ec5ee5/go.mod h1:ncp9v5uamzpCO7NfCPTXjqaC+bZgJeR0sMTm6dMHP7U= github.com/tyler-smith/go-bip39 v1.1.0 h1:5eUemwrMargf3BSLRRCalXT93Ns6pQJIjYQN2nyfOP8= -github.com/tyler-smith/go-bip39 v1.1.0/go.mod h1:gUYDtqQw1JS3ZJ8UWVcGTGqqr6YIN3CWg+kkNaLt55U= github.com/ugorji/go v1.1.4/go.mod h1:uQMGLiO92mf5W77hV/PUCpI3pbzQx3CRekS0kk+RGrc= github.com/urfave/cli v0.0.0-20171014202726-7bc6a0acffa5/go.mod h1:70zkFmudgCuE/ngEzBv17Jvp/497gISqfk5gWijbERA= github.com/urfave/cli v1.20.0/go.mod h1:70zkFmudgCuE/ngEzBv17Jvp/497gISqfk5gWijbERA= github.com/urfave/cli v1.22.1/go.mod h1:Gos4lmkARVdJ6EkW0WaNv/tZAAMe9V7XWyB60NtXRu0= github.com/urfave/cli v1.22.2 h1:gsqYFH8bb9ekPA12kRo0hfjngWQjkJPlN9R0N78BoUo= github.com/urfave/cli v1.22.2/go.mod h1:Gos4lmkARVdJ6EkW0WaNv/tZAAMe9V7XWyB60NtXRu0= -github.com/urfave/cli/v2 v2.10.2 h1:x3p8awjp/2arX+Nl/G2040AZpOCHS/eMJJ1/a+mye4Y= +github.com/urfave/cli/v2 v2.17.2-0.20221006022127-8f469abc00aa h1:5SqCsI/2Qya2bCzK15ozrqo2sZxkh0FHynJZOTVoV6Q= github.com/valyala/bytebufferpool v1.0.0 h1:GqA5TC/0021Y/b9FG4Oi9Mr3q7XYx6KllzawFIhcdPw= github.com/valyala/bytebufferpool v1.0.0/go.mod h1:6bBcMArwyJ5K/AmCkWv1jt77kVWyCJ6HpOuEn7z0Csc= github.com/valyala/fasthttp v1.22.0/go.mod h1:0mw2RjXGOzxf4NL2jni3gUQ7LfjjUSiG5sskOUUSEpU= @@ -936,9 +917,7 @@ github.com/xeipuuv/gojsonschema v0.0.0-20180618132009-1d523034197f/go.mod h1:5yf github.com/xiang90/probing v0.0.0-20190116061207-43a291ad63a2/go.mod h1:UETIi67q53MR2AWcXfiuqkDkRtnGDLqkBTpCHuJHxtU= github.com/xordataexchange/crypt v0.0.3-0.20170626215501-b2862e3d0a77/go.mod h1:aYKd//L2LvnjZzWKhF00oedf4jCCReLcmhLdhm1A27Q= github.com/xrash/smetrics v0.0.0-20201216005158-039620a65673 h1:bAn7/zixMGCfxrRTfdpNzjtPYqr8smhKouy9mxVdGPU= -github.com/yuin/goldmark v1.1.25/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74= github.com/yuin/goldmark v1.1.27/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74= -github.com/yuin/goldmark v1.1.32/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74= github.com/yuin/goldmark v1.2.1/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74= github.com/yuin/goldmark v1.3.5/go.mod h1:mwnBkeHKe2W/ZEtQ+71ViKU8L12m81fl3OWwC1Zlc8k= github.com/yvasiyarov/go-metrics v0.0.0-20140926110328-57bccd1ccd43/go.mod h1:aX5oPXxHm3bOH+xeAttToC8pqch2ScQN/JoXYupl6xs= @@ -955,7 +934,6 @@ go.opencensus.io v0.21.0/go.mod h1:mSImk1erAIZhrmZN+AvHh14ztQfjbGwt4TtuofqLduU= go.opencensus.io v0.22.0/go.mod h1:+kGneAE2xo2IficOXnaByMWTGM9T73dGwxeWcUqIpI8= go.opencensus.io v0.22.2/go.mod h1:yxeiOL68Rb0Xd1ddK5vPZ/oVn4vY4Ynel7k9FzqtOIw= go.opencensus.io v0.22.3/go.mod h1:yxeiOL68Rb0Xd1ddK5vPZ/oVn4vY4Ynel7k9FzqtOIw= -go.opencensus.io v0.22.4/go.mod h1:yxeiOL68Rb0Xd1ddK5vPZ/oVn4vY4Ynel7k9FzqtOIw= go.opencensus.io v0.23.0 h1:gqCw0LfLxScz8irSi8exQc7fyQ0fKQU/qnC/X8+V/1M= go.opencensus.io v0.23.0/go.mod h1:XItmlyltB5F7CS4xOC1DcqMoFqwtC6OG2xF7mCv7P7E= go.opentelemetry.io/proto/otlp v0.7.0/go.mod h1:PqfVotwruBrMGOCsRd/89rSnXhoiJIqeYNgFYFoEGnI= @@ -1006,6 +984,7 @@ golang.org/x/exp v0.0.0-20191227195350-da58074b4299/go.mod h1:2RIsYlXP63K8oxa1u0 golang.org/x/exp v0.0.0-20200119233911-0405dc783f0a/go.mod h1:2RIsYlXP63K8oxa1u096TMicItID8zy7Y6sNkU49FU4= golang.org/x/exp v0.0.0-20200207192155-f17229e696bd/go.mod h1:J/WKrq2StrnmMY6+EHIKF9dgMWnmCNThgcyBT1FY9mM= golang.org/x/exp v0.0.0-20200224162631-6cc2880d07d6/go.mod h1:3jZMyOhIsHpP37uCMkUooju7aAi5cS1Q23tOzKc+0MU= +golang.org/x/exp v0.0.0-20230206171751-46f607a40771 h1:xP7rWLUr1e1n2xkK5YB4LI0hPEy3LJC6Wk+D4pGlOJg= golang.org/x/image v0.0.0-20190227222117-0694c2d4d067/go.mod h1:kZ7UVZpmo3dzQBMxlp+ypCbDeSB+sBbTgSJuh5dn5js= golang.org/x/image v0.0.0-20190802002840-cff245a6509b/go.mod h1:FeLwcggjj3mMvU+oOTbSwawSJRM1uh48EjtB4UJZlP0= golang.org/x/lint v0.0.0-20181026193005-c67002cb31c3/go.mod h1:UVdnD1Gm6xHRNCYTkRU2/jEulfH38KcIWyp/GAMgvoE= @@ -1027,7 +1006,7 @@ golang.org/x/mod v0.1.1-0.20191107180719-034126e5016b/go.mod h1:QqPTAvyqsEbceGzB golang.org/x/mod v0.2.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= golang.org/x/mod v0.3.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= golang.org/x/mod v0.4.2/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= -golang.org/x/mod v0.6.0-dev.0.20220419223038-86c51ed26bb4 h1:6zppjxzCulZykYSLyVDYbneBfbaBIQPYMevg0bEwv2s= +golang.org/x/mod v0.6.0 h1:b9gGHsz9/HhJ3HF5DHQytPpuwocVTChQJK3AvoLRD5I= golang.org/x/net v0.0.0-20180724234803-3673e40ba225/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= golang.org/x/net v0.0.0-20180826012351-8a410e7b638d/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= golang.org/x/net v0.0.0-20180906233101-161cd47e91fd/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= @@ -1058,10 +1037,6 @@ golang.org/x/net v0.0.0-20200226121028-0de0cce0169b/go.mod h1:z5CRVTTTmAJ677TzLL golang.org/x/net v0.0.0-20200301022130-244492dfa37a/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= golang.org/x/net v0.0.0-20200324143707-d3edc9973b7e/go.mod h1:qpuaurCH72eLCgpAm/N6yyVIVM9cpaDIP3A8BGJEC5A= golang.org/x/net v0.0.0-20200501053045-e0ff5e5a1de5/go.mod h1:qpuaurCH72eLCgpAm/N6yyVIVM9cpaDIP3A8BGJEC5A= -golang.org/x/net v0.0.0-20200506145744-7e3656a0809f/go.mod h1:qpuaurCH72eLCgpAm/N6yyVIVM9cpaDIP3A8BGJEC5A= -golang.org/x/net v0.0.0-20200513185701-a91f0712d120/go.mod h1:qpuaurCH72eLCgpAm/N6yyVIVM9cpaDIP3A8BGJEC5A= -golang.org/x/net v0.0.0-20200520182314-0ba52f642ac2/go.mod h1:qpuaurCH72eLCgpAm/N6yyVIVM9cpaDIP3A8BGJEC5A= -golang.org/x/net v0.0.0-20200625001655-4c5254603344/go.mod h1:/O7V0waA8r7cgGh81Ro3o1hOxt32SMVPicZroKQ2sZA= golang.org/x/net v0.0.0-20200707034311-ab3426394381/go.mod h1:/O7V0waA8r7cgGh81Ro3o1hOxt32SMVPicZroKQ2sZA= golang.org/x/net v0.0.0-20200822124328-c89045814202/go.mod h1:/O7V0waA8r7cgGh81Ro3o1hOxt32SMVPicZroKQ2sZA= golang.org/x/net v0.0.0-20201006153459-a7d1128ccaa0/go.mod h1:sp8m0HH+o8qH0wwXwYZr8TS3Oi6o0r6Gce1SSxlDquU= @@ -1071,12 +1046,9 @@ golang.org/x/net v0.0.0-20201224014010-6772e930b67b/go.mod h1:m0MpNAwzfU5UDzcl9v golang.org/x/net v0.0.0-20210226101413-39120d07d75e/go.mod h1:m0MpNAwzfU5UDzcl9v0D8zg8gWTRqZa9RBIspLL5mdg= golang.org/x/net v0.0.0-20210226172049-e18ecbb05110/go.mod h1:m0MpNAwzfU5UDzcl9v0D8zg8gWTRqZa9RBIspLL5mdg= golang.org/x/net v0.0.0-20210405180319-a5a99cb37ef4/go.mod h1:p54w0d4576C0XHj96bSt6lcn1PtDYWL6XObtHCRCNQM= -golang.org/x/net v0.0.0-20210525063256-abc453219eb5/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y= golang.org/x/net v0.0.0-20210610132358-84b48f89b13b/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y= golang.org/x/net v0.0.0-20210825183410-e898025ed96a/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y= golang.org/x/net v0.0.0-20211112202133-69e39bad7dc2/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y= -golang.org/x/net v0.0.0-20220127200216-cd36cc0744dd/go.mod h1:CfG3xpIq0wQ8r1q4Su4UZFWDARRcnwPjda9FqA0JpMk= -golang.org/x/net v0.0.0-20220225172249-27dd8689420f/go.mod h1:CfG3xpIq0wQ8r1q4Su4UZFWDARRcnwPjda9FqA0JpMk= golang.org/x/net v0.0.0-20220906165146-f3363e06e74c/go.mod h1:YDH+HFinaLZZlnHAfSS6ZXJJ9M9t4Dl22yv3iI2vPwk= golang.org/x/net v0.5.0 h1:GyT4nK/YDHSqa1c4753ouYCDajOYKTja9Xb/OHtgvSw= golang.org/x/net v0.5.0/go.mod h1:DivGGAXEgPSlEBzxGzZI+ZLohi+xUj054jfeKui00ws= @@ -1085,8 +1057,6 @@ golang.org/x/oauth2 v0.0.0-20190226205417-e64efc72b421/go.mod h1:gOpvHmFTYa4Iltr golang.org/x/oauth2 v0.0.0-20190604053449-0f29369cfe45/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw= golang.org/x/oauth2 v0.0.0-20191202225959-858c2ad4c8b6/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw= golang.org/x/oauth2 v0.0.0-20200107190931-bf48bf16ab8d/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw= -golang.org/x/oauth2 v0.0.0-20210514164344-f6687ab2804c/go.mod h1:KelEdhl1UZF7XfJ4dDtk6s++YSgaE7mD/BuKKDLBl4A= -golang.org/x/oauth2 v0.0.0-20220223155221-ee480838109b/go.mod h1:DAh4E804XQdzx2j+YRIaUnCqCV2RuMz24cGBJ5QYIrc= golang.org/x/sync v0.0.0-20180314180146-1d60e4601c6f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20181108010431-42b317875d0f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20181221193216-37e7f081c4d4/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= @@ -1150,16 +1120,10 @@ golang.org/x/sys v0.0.0-20200217220822-9197077df867/go.mod h1:h1NjWce9XRLGQEsW7w golang.org/x/sys v0.0.0-20200223170610-d5e6a3e2c0ae/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20200302150141-5c8b2ff67527/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20200323222414-85ca7c5b95cd/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20200331124033-c3d80250170d/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20200501052902-10377860bb8e/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20200511232937-7e40ca221e25/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20200515095857-1151b9dac4a9/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20200523222454-059865788121/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20200615200032-f1bc736245b1/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20200622214017-ed371f2e16b4/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20200625212154-ddb9806d33ae/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20200728102440-3e129f6d46b1/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20200803210538-64077c9b5642/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20200817155316-9781c653f443/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20200909081042-eff7692f9009/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20200916030750-2334cc1a136f/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= @@ -1180,7 +1144,6 @@ golang.org/x/sys v0.0.0-20210330210617-4fbd30eecc44/go.mod h1:h1NjWce9XRLGQEsW7w golang.org/x/sys v0.0.0-20210423082822-04245dca01da/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20210426230700-d19ff857e887/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20210510120138-977fb7262007/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.0.0-20210603081109-ebe580a85c40/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20210615035016-665e8c7367d1/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20210616094352-59db8d763f22/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20210630005230-0f9fa26af87c/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= @@ -1190,10 +1153,11 @@ golang.org/x/sys v0.0.0-20211025201205-69cdffdb9359/go.mod h1:oPkhp1MJrh7nUepCBc golang.org/x/sys v0.0.0-20211103235746-7861aae1554b/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20211116061358-0a5406a5449c/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20211216021012-1d35b9e2eb4e/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.0.0-20220114195835-da31bd327af9/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20220520151302-bc2c85ada10a/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20220715151400-c0bba94af5f8/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20220728004956-3c1f35247d10/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20220811171246-fbc7d0a398ab/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20220908164124-27713097b956/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.5.0 h1:MUK/U/4lj1t1oPg0HfuXDN/Z1wv31ZJ/YcPiGccS4DU= golang.org/x/sys v0.5.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/term v0.0.0-20201117132131-f5c789dd3221/go.mod h1:Nr5EML6q2oocZ2LXRh80K7BxOlk5/8JxuGnuhpl+muw= @@ -1208,16 +1172,16 @@ golang.org/x/text v0.3.4/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= golang.org/x/text v0.3.5/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= golang.org/x/text v0.3.6/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= golang.org/x/text v0.3.7/go.mod h1:u+2+/6zg+i71rQMx5EYifcz6MCKuco9NR6JIITiCfzQ= -golang.org/x/text v0.6.0 h1:3XmdazWV+ubf7QgHSTWeykHOci5oeekaGJBLkrkaw4k= -golang.org/x/text v0.6.0/go.mod h1:mrYo+phRRbMaCq/xk9113O4dZlRixOauAjOtrjsXDZ8= +golang.org/x/text v0.7.0 h1:4BRB4x83lYWy72KwLD/qYDuTu7q9PjSagHvijDw7cLo= +golang.org/x/text v0.7.0/go.mod h1:mrYo+phRRbMaCq/xk9113O4dZlRixOauAjOtrjsXDZ8= golang.org/x/time v0.0.0-20180412165947-fbb02b2291d2/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= golang.org/x/time v0.0.0-20181108054448-85acf8d2951c/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= golang.org/x/time v0.0.0-20190308202827-9d24e82272b4/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= golang.org/x/time v0.0.0-20191024005414-555d28b269f0/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= golang.org/x/time v0.0.0-20200416051211-89c76fbcd5d1/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= golang.org/x/time v0.0.0-20200630173020-3af7569d3a1e/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= -golang.org/x/time v0.0.0-20220722155302-e5dcc9cfc0b9 h1:ftMN5LMiBFjbzleLqtoBZk7KdJwhuybIU+FckUHgoyQ= -golang.org/x/time v0.0.0-20220722155302-e5dcc9cfc0b9/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= +golang.org/x/time v0.0.0-20220922220347-f3bd1da661af h1:Yx9k8YCG3dvF87UAn2tu2HQLf2dt/eR1bXxpLMWeH+Y= +golang.org/x/time v0.0.0-20220922220347-f3bd1da661af/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= golang.org/x/tools v0.0.0-20180221164845-07fd8470d635/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= golang.org/x/tools v0.0.0-20181011042414-1f849cf54d09/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= @@ -1259,24 +1223,15 @@ golang.org/x/tools v0.0.0-20200204074204-1cc6d1ef6c74/go.mod h1:TB2adYChydJhpapK golang.org/x/tools v0.0.0-20200207183749-b753a1ba74fa/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= golang.org/x/tools v0.0.0-20200212150539-ea181f53ac56/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= golang.org/x/tools v0.0.0-20200224181240-023911ca70b2/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= -golang.org/x/tools v0.0.0-20200227222343-706bc42d1f0d/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= golang.org/x/tools v0.0.0-20200304193943-95d2e580d8eb/go.mod h1:o4KQGtdN14AW+yjsvvwRTJJuXz8XRtIHtEnmAXLyFUw= -golang.org/x/tools v0.0.0-20200312045724-11d5b4c81c7d/go.mod h1:o4KQGtdN14AW+yjsvvwRTJJuXz8XRtIHtEnmAXLyFUw= -golang.org/x/tools v0.0.0-20200331025713-a30bf2db82d4/go.mod h1:Sl4aGygMT6LrqrWclx+PTx3U+LnKx/seiNR+3G19Ar8= golang.org/x/tools v0.0.0-20200501065659-ab2804fb9c9d/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE= golang.org/x/tools v0.0.0-20200505023115-26f46d2f7ef8/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE= -golang.org/x/tools v0.0.0-20200512131952-2bc93b1c0c88/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE= -golang.org/x/tools v0.0.0-20200515010526-7d3b6ebf133d/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE= golang.org/x/tools v0.0.0-20200616133436-c1934b75d054/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE= -golang.org/x/tools v0.0.0-20200618134242-20370b0cb4b2/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE= golang.org/x/tools v0.0.0-20200619180055-7c47624df98f/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE= -golang.org/x/tools v0.0.0-20200729194436-6467de6f59a7/go.mod h1:njjCfa9FT2d7l9Bc6FUM5FLjQPp3cFF28FI3qnDFljA= -golang.org/x/tools v0.0.0-20200804011535-6c149bb5ef0d/go.mod h1:njjCfa9FT2d7l9Bc6FUM5FLjQPp3cFF28FI3qnDFljA= -golang.org/x/tools v0.0.0-20200825202427-b303f430e36d/go.mod h1:njjCfa9FT2d7l9Bc6FUM5FLjQPp3cFF28FI3qnDFljA= golang.org/x/tools v0.0.0-20200916195026-c9a70fc28ce3/go.mod h1:z6u4i615ZeAfBE4XtMziQW1fSVJXACjjbWkB/mvPzlU= golang.org/x/tools v0.0.0-20210106214847-113979e3529a/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA= golang.org/x/tools v0.1.1/go.mod h1:o0xws9oXOQQZyjljx8fwUC0k7L1pTE6eaCbjGeHmOkk= -golang.org/x/tools v0.1.12 h1:VveCTK38A2rkS8ZqFY25HIDFscX5X9OoEhJd3quQmXU= +golang.org/x/tools v0.2.0 h1:G6AHpWxTMGY1KyEYoAQ5WTtIekUUvDNjan3ugu60JvE= golang.org/x/xerrors v0.0.0-20190410155217-1f06c39b4373/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= golang.org/x/xerrors v0.0.0-20190513163551-3ee3066db522/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= golang.org/x/xerrors v0.0.0-20190717185122-a985d3407aa7/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= @@ -1293,13 +1248,8 @@ google.golang.org/api v0.14.0/go.mod h1:iLdEw5Ide6rF15KTC1Kkl0iskquN2gFfn9o9XIsb google.golang.org/api v0.15.0/go.mod h1:iLdEw5Ide6rF15KTC1Kkl0iskquN2gFfn9o9XIsbkAI= google.golang.org/api v0.17.0/go.mod h1:BwFmGc8tA3vsd7r/7kR8DY7iEEGSU04BFxCo5jP/sfE= google.golang.org/api v0.18.0/go.mod h1:BwFmGc8tA3vsd7r/7kR8DY7iEEGSU04BFxCo5jP/sfE= -google.golang.org/api v0.19.0/go.mod h1:BwFmGc8tA3vsd7r/7kR8DY7iEEGSU04BFxCo5jP/sfE= google.golang.org/api v0.20.0/go.mod h1:BwFmGc8tA3vsd7r/7kR8DY7iEEGSU04BFxCo5jP/sfE= google.golang.org/api v0.22.0/go.mod h1:BwFmGc8tA3vsd7r/7kR8DY7iEEGSU04BFxCo5jP/sfE= -google.golang.org/api v0.24.0/go.mod h1:lIXQywCXRcnZPGlsd8NbLnOjtAoL6em04bJ9+z0MncE= -google.golang.org/api v0.28.0/go.mod h1:lIXQywCXRcnZPGlsd8NbLnOjtAoL6em04bJ9+z0MncE= -google.golang.org/api v0.29.0/go.mod h1:Lcubydp8VUV7KeIHD9z2Bys/sm/vGKnG1UHuDBSrHWM= -google.golang.org/api v0.30.0/go.mod h1:QGmEvQ87FHZNiUVJkT14jQNYJ4ZJjdRF23ZXz5138Fc= google.golang.org/appengine v1.1.0/go.mod h1:EbEs0AVv82hx2wNQdGPgUI5lhzA/G0D9YwlJXL52JkM= google.golang.org/appengine v1.4.0/go.mod h1:xpcJRLb0r/rnEns0DIKYYv+WjYCduHsrkT7/EB5XEv4= google.golang.org/appengine v1.5.0/go.mod h1:xpcJRLb0r/rnEns0DIKYYv+WjYCduHsrkT7/EB5XEv4= @@ -1326,20 +1276,11 @@ google.golang.org/genproto v0.0.0-20200122232147-0452cf42e150/go.mod h1:n3cpQtvx google.golang.org/genproto v0.0.0-20200204135345-fa8e72b47b90/go.mod h1:GmwEX6Z4W5gMy59cAlVYjN9JhxgbQH6Gn+gFDQe2lzA= google.golang.org/genproto v0.0.0-20200212174721-66ed5ce911ce/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c= google.golang.org/genproto v0.0.0-20200224152610-e50cd9704f63/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c= -google.golang.org/genproto v0.0.0-20200228133532-8c2c7df3a383/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c= google.golang.org/genproto v0.0.0-20200305110556-506484158171/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c= -google.golang.org/genproto v0.0.0-20200312145019-da6875a35672/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c= -google.golang.org/genproto v0.0.0-20200331122359-1ee6d9798940/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c= google.golang.org/genproto v0.0.0-20200430143042-b979b6f78d84/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c= -google.golang.org/genproto v0.0.0-20200511104702-f5ebc3bea380/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c= google.golang.org/genproto v0.0.0-20200513103714-09dca8ec2884/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c= -google.golang.org/genproto v0.0.0-20200515170657-fc4c6c6a6587/go.mod h1:YsZOwe1myG/8QRHRsmBRE1LrgQY60beZKjly0O1fX9U= google.golang.org/genproto v0.0.0-20200526211855-cb27e3aa2013/go.mod h1:NbSheEEYHJ7i3ixzK3sjbqSGDJWnxyFXZblF3eUsNvo= google.golang.org/genproto v0.0.0-20200527145253-8367513e4ece/go.mod h1:jDfRM7FcilCzHH/e9qn6dsT145K34l5v+OpcnNgKAAA= -google.golang.org/genproto v0.0.0-20200618031413-b414f8b61790/go.mod h1:jDfRM7FcilCzHH/e9qn6dsT145K34l5v+OpcnNgKAAA= -google.golang.org/genproto v0.0.0-20200729003335-053ba62fc06f/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= -google.golang.org/genproto v0.0.0-20200804131852-c06518451d9c/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= -google.golang.org/genproto v0.0.0-20200825200019-8632dd797987/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= google.golang.org/genproto v0.0.0-20201110150050-8816d57aaa9a/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= google.golang.org/genproto v0.0.0-20220617124728-180714bec0ad h1:kqrS+lhvaMHCxul6sKQvKJ8nAAhlVItmZV822hYFH/U= google.golang.org/genproto v0.0.0-20220617124728-180714bec0ad/go.mod h1:KEWEmljWE5zPzLBa/oHl6DaEt9LmfH6WtH1OHIvleBA= @@ -1355,10 +1296,8 @@ google.golang.org/grpc v1.25.1/go.mod h1:c3i+UQWmh7LiEpx4sFZnkU36qjEYZ0imhYfXVyQ google.golang.org/grpc v1.26.0/go.mod h1:qbnxyOmOxrQa7FizSgH+ReBfzJrCY1pSN7KXBS8abTk= google.golang.org/grpc v1.27.0/go.mod h1:qbnxyOmOxrQa7FizSgH+ReBfzJrCY1pSN7KXBS8abTk= google.golang.org/grpc v1.27.1/go.mod h1:qbnxyOmOxrQa7FizSgH+ReBfzJrCY1pSN7KXBS8abTk= -google.golang.org/grpc v1.28.0/go.mod h1:rpkK4SK4GF4Ach/+MFLZUBavHOvF2JJB5uozKKal+60= google.golang.org/grpc v1.29.1/go.mod h1:itym6AZVZYACWQqET3MqgPpjcuV5QH3BxFS3IjizoKk= google.golang.org/grpc v1.30.0/go.mod h1:N36X2cJ7JwdamYAgDz+s+rVMFjt3numwzf/HckM8pak= -google.golang.org/grpc v1.31.0/go.mod h1:N36X2cJ7JwdamYAgDz+s+rVMFjt3numwzf/HckM8pak= google.golang.org/grpc v1.33.1/go.mod h1:fr5YgcSWrqhRRxogOsw7RzIpsmvOZ6IcH4kBYTpR3n0= google.golang.org/grpc v1.33.2/go.mod h1:JMHMWHQWaTccqQQlmk3MJZS+GWXOdAesneDmEnv2fbc= google.golang.org/grpc v1.36.0/go.mod h1:qjiiYl8FncCW8feJPdyg3v6XW24KsRHe+dy9BAGRRjU= @@ -1388,8 +1327,8 @@ gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8 gopkg.in/check.v1 v1.0.0-20141024133853-64131543e789/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= gopkg.in/check.v1 v1.0.0-20180628173108-788fd7840127/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= gopkg.in/check.v1 v1.0.0-20190902080502-41f04d3bba15/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= -gopkg.in/check.v1 v1.0.0-20200227125254-8fa46927fb4f h1:BLraFXnmrev5lT+xlilqcH8XK9/i0At2xKjWk4p6zsU= gopkg.in/check.v1 v1.0.0-20200227125254-8fa46927fb4f/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= +gopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c h1:Hei/4ADfdWqJk1ZMxUNpqntNwaWcugrBjAiHlqqRiVk= gopkg.in/cheggaaa/pb.v1 v1.0.25/go.mod h1:V/YB90LKu/1FcN3WVnfiiE5oMCibMjukxqG/qStrOgw= gopkg.in/errgo.v2 v2.1.0/go.mod h1:hNsd1EY+bozCKY1Ytp96fpM3vjJbqLJn88ws8XvfDNI= gopkg.in/fsnotify.v1 v1.4.7/go.mod h1:Tz8NjZHkW78fSQdbUxIjBTcgA1z1m8ZHf0WmKUhAMys= @@ -1449,7 +1388,6 @@ honnef.co/go/tools v0.0.0-20190418001031-e561f6794a2a/go.mod h1:rf3lG4BRIbNafJWh honnef.co/go/tools v0.0.0-20190523083050-ea95bdfd59fc/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4= honnef.co/go/tools v0.0.1-2019.2.3/go.mod h1:a3bituU0lyd329TUQxRnasdCoJDkEUEAqEt0JzvZhAg= honnef.co/go/tools v0.0.1-2020.1.3/go.mod h1:X/FiERA/W4tHapMX5mGpAtMSVEeEUOyHaw9vFzvIQ3k= -honnef.co/go/tools v0.0.1-2020.1.4/go.mod h1:X/FiERA/W4tHapMX5mGpAtMSVEeEUOyHaw9vFzvIQ3k= k8s.io/api v0.20.1/go.mod h1:KqwcCVogGxQY3nBlRpwt+wpAMF/KjaCc7RpywacvqUo= k8s.io/api v0.20.4/go.mod h1:++lNL1AJMkDymriNniQsWRkMDzRaX2Y/POTUi8yvqYQ= k8s.io/api v0.20.6/go.mod h1:X9e8Qag6JV/bL5G6bU8sdVRltWKmdHsFUGS3eVndqE8= diff --git a/packages/bridge-ui/.eslintignore b/packages/bridge-ui/.eslintignore deleted file mode 100644 index 767d5d26898..00000000000 --- a/packages/bridge-ui/.eslintignore +++ /dev/null @@ -1,7 +0,0 @@ -dist -build -coverage -node_modules -example -LICENSES -public diff --git a/packages/bridge-ui/.eslintrc.cjs b/packages/bridge-ui/.eslintrc.cjs deleted file mode 100644 index c42e6aee65c..00000000000 --- a/packages/bridge-ui/.eslintrc.cjs +++ /dev/null @@ -1,80 +0,0 @@ -module.exports = { - env: { - node: true, - browser: true, - es2021: true, - webextensions: true, - }, - extends: ['eslint:recommended'], - parser: '@typescript-eslint/parser', - parserOptions: { - ecmaVersion: 'latest', - sourceType: 'module', - extraFileExtensions: ['.svelte'], - }, - plugins: ['svelte3', '@typescript-eslint'], - rules: { - 'linebreak-style': ['error', 'unix'], - semi: ['error', 'always'], - }, - ignorePatterns: ['node_modules'], // todo: lets lint that separately, or move it to its own package - settings: { - 'svelte3/typescript': require('typescript'), - }, - overrides: [ - { - files: ['*.ts', '*.svelte'], - extends: [ - 'plugin:@typescript-eslint/recommended', - 'plugin:@typescript-eslint/recommended-requiring-type-checking', - ], - parserOptions: { - project: ['./tsconfig.json'], - tsconfigRootDir: __dirname, - }, - rules: { - '@typescript-eslint/no-inferrable-types': 0, - '@typescript-eslint/unbound-method': 'off', - '@typescript-eslint/no-empty-interface': 'off', - }, - }, - { - files: ['*.svelte'], - processor: 'svelte3/svelte3', - // typescript and svelte dont work with template handlers yet. - // https://stackoverflow.com/questions/63337868/svelte-typescript-unexpected-tokensvelteparse-error-when-adding-type-to-an-ev - // we need these 3 rules to be able to do: - // on:change=(e) => anyFunctionHere(). - // when svelte is updated, we can remove these 5 rules for svelte files. - rules: { - '@typescript-eslint/no-explicit-any': 'off', - '@typescript-eslint/no-implicit-any': 'off', - '@typescript-eslint/no-unsafe-assignment': 'off', - '@typescript-eslint/no-unsafe-member-access': 'off', - '@typescript-eslint/no-unsafe-argument': 'off', - '@typescript-eslint/no-unsafe-call': 'off', - '@typescript-eslint/restrict-template-expressions': [ - 'warn', - { - allowNumber: true, - allowBoolean: true, - allowNullish: true, - allowAny: true, - }, - ], - }, - }, - { - files: ['*.spec.ts'], - plugins: ['jest'], - rules: { - '@typescript-eslint/no-explicit-any': 'off', - '@typescript-eslint/no-empty-function': 'off', - '@typescript-eslint/no-unused-vars': 'off', - '@typescript-eslint/no-unsafe-assignment': 'off', - '@typescript-eslint/unbound-method': 'off', - 'jest/unbound-method': 'error', - }, - }, - ], -}; diff --git a/packages/bridge-ui/README.md b/packages/bridge-ui/README.md index 85a807693ca..19ba451c55d 100644 --- a/packages/bridge-ui/README.md +++ b/packages/bridge-ui/README.md @@ -14,32 +14,31 @@ You can use the following values in the `.env` file to spin up the Bridge UI loc ``` VITE_NODE_ENV=dev +VITE_L1_RPC_URL= +VITE_L2_RPC_URL="https://rpc.a2.taiko.xyz/" -VITE_L1_RPC_URL="https://l1rpc.internal.taiko.xyz/" -VITE_L2_RPC_URL="https://l2rpc.internal.taiko.xyz/" +VITE_L1_EXPLORER_URL="https://sepolia.etherscan.io/" +VITE_L2_EXPLORER_URL="https://explorer.a2.taiko.xyz/" -VITE_L1_EXPLORER_URL="https://l1explorer.internal.taiko.xyz/" -VITE_L2_EXPLORER_URL="https://l2explorer.internal.taiko.xyz/" +VITE_RELAYER_URL="https://relayer.a2.taiko.xyz/" -VITE_RELAYER_URL="https://relayer.internal.taiko.xyz/" +VITE_MAINNET_CHAIN_ID=11155111 +VITE_TAIKO_CHAIN_ID=167004 -VITE_TEST_ERC20=[{"address": "0x3435A6180fBB1BAEc87bDC49915282BfBC328C70", "symbol": "BLL", "name": "Bull Token"}, {"address": "0xAED64948E0d09f4eb07d8B76A65Cd3d517c6Fb15", "symbol": "HORSE", "name": "Horse Token"}] - -VITE_MAINNET_CHAIN_ID=31336 -VITE_TAIKO_CHAIN_ID=167001 - -VITE_MAINNET_CHAIN_NAME="Ethereum A2" +VITE_MAINNET_CHAIN_NAME="Sepolia" VITE_TAIKO_CHAIN_NAME="Taiko A2" -VITE_MAINNET_TOKEN_VAULT_ADDRESS="0x5E506e2E0EaD3Ff9d93859A5879cAA02582f77c3" +VITE_MAINNET_TOKEN_VAULT_ADDRESS="0x4284890d4AcD0bcb017eCE481B96fD4Cb457CAc8" VITE_TAIKO_TOKEN_VAULT_ADDRESS="0x0000777700000000000000000000000000000002" -VITE_MAINNET_HEADER_SYNC_ADDRESS="0x9b557777Be33A8A2fE6aF93E017A0d139B439E5D" +VITE_MAINNET_HEADER_SYNC_ADDRESS="0xAC9251ee97Ed8beF31706354310C6b020C35d87b" VITE_TAIKO_HEADER_SYNC_ADDRESS="0x0000777700000000000000000000000000000001" -VITE_MAINNET_BRIDGE_ADDRESS="0xAE4C9bD0f7AE5398Df05043079596E2BF0079CE9" +VITE_MAINNET_BRIDGE_ADDRESS="0x2aB7C0ab9AB47fcF370d13058BfEE28f2Ec0940c" VITE_TAIKO_BRIDGE_ADDRESS="0x0000777700000000000000000000000000000004" -VITE_MAINNET_SIGNAL_SERVICE_ADDRESS="0x162A36c9821eadeCFF9669A3940b7f72d055Cd1c" -VITE_TAIKO_SIGNAL_SERVICE_ADDRESS="0x0000777700000000000000000000000000000007" +VITE_MAINNET_SIGNAL_SERVICE_ADDRESS="0x07130410064Ab5C32486CC36904fb219ae97156F" +VITE_TAIKO_SIGNAL_SERVICE_ADDRESS="0xbB203a6f73F805E44E97dcC0c894eFe0fAf72498" + +VITE_TEST_ERC20=[{"address": "0x5B9fEDd37f0B92E7E282B19cEbCF06F57B77C604", "symbol": "BLL", "name": "Bull Token"}, {"address": "0x1E8C104D068F22D351859cdBfE41A697A98E6EA2", "symbol": "HORSE", "name": "Horse Token"}] ``` diff --git a/packages/bridge-ui/jest.config.js b/packages/bridge-ui/jest.config.js index 0a0bb21bf44..1098da6875c 100644 --- a/packages/bridge-ui/jest.config.js +++ b/packages/bridge-ui/jest.config.js @@ -39,10 +39,10 @@ export default { ], coverageThreshold: { global: { - statements: 94, + statements: 92, branches: 72, functions: 88, - lines: 95, + lines: 92, }, }, modulePathIgnorePatterns: ['/public/build/'], diff --git a/packages/bridge-ui/src/App.svelte b/packages/bridge-ui/src/App.svelte index 6d0e3ef7da5..efcacff5f57 100644 --- a/packages/bridge-ui/src/App.svelte +++ b/packages/bridge-ui/src/App.svelte @@ -37,7 +37,6 @@ import { MessageStatus } from './domain/message'; import BridgeABI from './constants/abi/Bridge'; import { providers } from './store/providers'; - import HeaderAnnouncement from './components/HeaderAnnouncement.svelte'; import type { TokenService } from './domain/token'; import { CustomTokenService } from './storage/CustomTokenService'; import { userTokens, tokenService } from './store/userToken'; @@ -140,13 +139,13 @@ if (store) { const userAddress = await store.getAddress(); - const apiTxs = await $relayerApi.GetAllByAddress(userAddress); - + const apiTxs = await $relayerApi.GetAllBridgeTransactionByAddress( + userAddress, + ); const blockInfoMap = await $relayerApi.GetBlockInfo(); relayerBlockInfoMap.set(blockInfoMap); const txs = await $transactioner.GetAllByAddress(userAddress); - // const hashToApiTxsMap = new Map(apiTxs.map((tx) => { // return [tx.hash, tx]; // })) @@ -160,7 +159,7 @@ const updatedStorageTxs: BridgeTransaction[] = txs.filter((tx) => { const blockInfo = blockInfoMap.get(tx.fromChainId); - if (blockInfo?.latestProcessedBlock >= tx.receipt.blockNumber) { + if (blockInfo?.latestProcessedBlock >= tx.receipt?.blockNumber) { return false; } return true; @@ -254,7 +253,6 @@
-
diff --git a/packages/bridge-ui/src/bridge/ERC20Bridge.spec.ts b/packages/bridge-ui/src/bridge/ERC20Bridge.spec.ts index aa4b356aee3..c77f125fdd2 100644 --- a/packages/bridge-ui/src/bridge/ERC20Bridge.spec.ts +++ b/packages/bridge-ui/src/bridge/ERC20Bridge.spec.ts @@ -197,7 +197,7 @@ describe('bridge tests', () => { '0x', opts.tokenAddress, opts.amountInWei, - BigNumber.from(2640000), + BigNumber.from(3140000), opts.processingFeeInWei, '0xfake', opts.memo, @@ -234,7 +234,7 @@ describe('bridge tests', () => { '0xfake', opts.tokenAddress, opts.amountInWei, - BigNumber.from(2500000), + BigNumber.from(3000000), BigNumber.from(0), '0xfake', '', diff --git a/packages/bridge-ui/src/bridge/ERC20Bridge.ts b/packages/bridge-ui/src/bridge/ERC20Bridge.ts index b2c701f1a54..309e8a541df 100644 --- a/packages/bridge-ui/src/bridge/ERC20Bridge.ts +++ b/packages/bridge-ui/src/bridge/ERC20Bridge.ts @@ -1,4 +1,4 @@ -import { BigNumber, Contract, Signer } from 'ethers'; +import { BigNumber, Contract, ethers, Signer } from 'ethers'; import type { Transaction } from 'ethers'; import type { ApproveOpts, @@ -46,7 +46,7 @@ export class ERC20Bridge implements Bridge { }; if (!opts.isBridgedTokenAlreadyDeployed) { - message.gasLimit = message.gasLimit.add(BigNumber.from(2500000)); + message.gasLimit = message.gasLimit.add(BigNumber.from(3000000)); } return { contract, owner, message }; @@ -190,7 +190,23 @@ export class ERC20Bridge implements Bridge { }); } - return await contract.processMessage(opts.message, proof); + let processMessageTx; + try { + processMessageTx = await contract.processMessage(opts.message, proof); + } catch (error) { + if (error.code === ethers.errors.UNPREDICTABLE_GAS_LIMIT) { + processMessageTx = await contract.processMessage( + opts.message, + proof, + { + gasLimit: 1e6, + }, + ); + } else { + throw new Error(error); + } + } + return processMessageTx; } else { return await contract.retryMessage(opts.message, false); } diff --git a/packages/bridge-ui/src/bridge/ETHBridge.ts b/packages/bridge-ui/src/bridge/ETHBridge.ts index 6c590584aab..74d4610ab62 100644 --- a/packages/bridge-ui/src/bridge/ETHBridge.ts +++ b/packages/bridge-ui/src/bridge/ETHBridge.ts @@ -1,4 +1,4 @@ -import { BigNumber, Contract } from 'ethers'; +import { BigNumber, Contract, ethers } from 'ethers'; import type { Transaction } from 'ethers'; import type { ApproveOpts, @@ -133,8 +133,23 @@ export class ETHBridge implements Bridge { }; const proof = await this.prover.GenerateProof(proofOpts); - - return await contract.processMessage(opts.message, proof); + let processMessageTx; + try { + processMessageTx = await contract.processMessage(opts.message, proof); + } catch (error) { + if (error.code === ethers.errors.UNPREDICTABLE_GAS_LIMIT) { + processMessageTx = await contract.processMessage( + opts.message, + proof, + { + gasLimit: 1e6, + }, + ); + } else { + throw new Error(error); + } + } + return processMessageTx; } else { return await contract.retryMessage(opts.message, true); } diff --git a/packages/bridge-ui/src/components/InsufficientBalanceTooltip.svelte b/packages/bridge-ui/src/components/InsufficientBalanceTooltip.svelte new file mode 100644 index 00000000000..1f1bc82d949 --- /dev/null +++ b/packages/bridge-ui/src/components/InsufficientBalanceTooltip.svelte @@ -0,0 +1,14 @@ + + + + +
+ You have insufficient balance to claim this transaction. Please wait for + the relayer to claim the transaction for you. +
+
+
diff --git a/packages/bridge-ui/src/components/MessageStatusTooltip.svelte b/packages/bridge-ui/src/components/MessageStatusTooltip.svelte index c3eec594d34..ef000ea0a73 100644 --- a/packages/bridge-ui/src/components/MessageStatusTooltip.svelte +++ b/packages/bridge-ui/src/components/MessageStatusTooltip.svelte @@ -12,7 +12,7 @@
  • Pending: Your asset is not ready to be bridged. Taiko - A1 => {import.meta.env + A2 => {import.meta.env ? import.meta.env.VITE_MAINNET_CHAIN_NAME : 'Ethereum A2'} bridging can take several hours before being ready. {import.meta.env diff --git a/packages/bridge-ui/src/components/Transaction.svelte b/packages/bridge-ui/src/components/Transaction.svelte index aa2df2c1055..a718bea7066 100644 --- a/packages/bridge-ui/src/components/Transaction.svelte +++ b/packages/bridge-ui/src/components/Transaction.svelte @@ -4,7 +4,11 @@ import { ArrowTopRightOnSquare } from 'svelte-heros-v2'; import { MessageStatus } from '../domain/message'; import { Contract, ethers } from 'ethers'; - import { bridges, chainIdToTokenVaultAddress } from '../store/bridge'; + import { + activeBridge, + bridges, + chainIdToTokenVaultAddress, + } from '../store/bridge'; import { signer } from '../store/signer'; import { pendingTransactions } from '../store/transactions'; import { errorToast, successToast } from '../utils/toast'; @@ -14,12 +18,12 @@ toChain as toChainStore, } from '../store/chain'; import { BridgeType } from '../domain/bridge'; - import { onMount } from 'svelte'; + import { onDestroy, onMount } from 'svelte'; import { LottiePlayer } from '@lottiefiles/svelte-lottie-player'; import HeaderSync from '../constants/abi/HeaderSync'; import { providers } from '../store/providers'; - import { fetchSigner, switchNetwork } from '@wagmi/core'; + import { fetchFeeData, fetchSigner, switchNetwork } from '@wagmi/core'; import Bridge from '../constants/abi/Bridge'; import ButtonWithTooltip from './ButtonWithTooltip.svelte'; import TokenVault from '../constants/abi/TokenVault'; @@ -29,14 +33,23 @@ export let fromChain: Chain; export let toChain: Chain; - export let onTooltipClick: () => void; + export let onTooltipClick: (showInsufficientBalanceMessage: boolean) => void; export let onShowTransactionDetailsClick: () => void; let loading: boolean; let processable: boolean = false; + let interval; + onMount(async () => { processable = await isProcessable(); + interval = startInterval(); + }); + + onDestroy(() => { + if (interval) { + clearInterval(interval); + } }); async function switchChainAndSetSigner(chain: Chain) { @@ -59,20 +72,34 @@ async function claim(bridgeTx: BridgeTransaction) { try { loading = true; - if (fromChain.id !== bridgeTx.message.destChainId.toNumber()) { - const chain = chainsRecord[bridgeTx.message.destChainId.toNumber()]; + // if the current "from chain", ie, the chain youre connected to, is not the destination + // of the bridge transaction, we need to change chains so your wallet is pointed + // to the right network. + if ($fromChainStore.id !== bridgeTx.toChainId) { + const chain = chainsRecord[bridgeTx.toChainId]; await switchChainAndSetSigner(chain); } + + // For now just handling this case for when the user has near 0 balance during their first bridge transaction to L2 + // TODO: estimate Claim transaction + const userBalance = await $signer.getBalance('latest'); + if (!userBalance.gt(ethers.utils.parseEther('0.0001'))) { + onTooltipClick(true); + return; + } + const tx = await $bridges - .get(bridgeTx.message.data === '0x' ? BridgeType.ETH : BridgeType.ERC20) + .get( + bridgeTx.message?.data === '0x' || !bridgeTx.message?.data + ? BridgeType.ETH + : BridgeType.ERC20, + ) .Claim({ signer: $signer, message: bridgeTx.message, msgHash: bridgeTx.msgHash, - destBridgeAddress: - chainsRecord[bridgeTx.message.destChainId.toNumber()].bridgeAddress, - srcBridgeAddress: - chainsRecord[bridgeTx.message.srcChainId.toNumber()].bridgeAddress, + destBridgeAddress: chainsRecord[bridgeTx.toChainId].bridgeAddress, + srcBridgeAddress: chainsRecord[bridgeTx.fromChainId].bridgeAddress, }); pendingTransactions.update((store) => { @@ -81,8 +108,9 @@ }); successToast($_('toast.transactionSent')); + transaction.status = MessageStatus.ClaimInProgress; } catch (e) { - console.log(e); + console.error(e); errorToast($_('toast.errorSendingTransaction')); } finally { loading = false; @@ -92,23 +120,25 @@ async function releaseTokens(bridgeTx: BridgeTransaction) { try { loading = true; - if (fromChain.id !== bridgeTx.message.srcChainId.toNumber()) { - const chain = chainsRecord[bridgeTx.message.srcChainId.toNumber()]; + if (fromChain.id !== bridgeTx.fromChainId) { + const chain = chainsRecord[bridgeTx.fromChainId]; await switchChainAndSetSigner(chain); } const tx = await $bridges - .get(bridgeTx.message.data === '0x' ? BridgeType.ETH : BridgeType.ERC20) + .get( + bridgeTx.message?.data === '0x' || !bridgeTx.message?.data + ? BridgeType.ETH + : BridgeType.ERC20, + ) .ReleaseTokens({ signer: $signer, message: bridgeTx.message, msgHash: bridgeTx.msgHash, - destBridgeAddress: - chainsRecord[bridgeTx.message.destChainId.toNumber()].bridgeAddress, - srcBridgeAddress: - chainsRecord[bridgeTx.message.srcChainId.toNumber()].bridgeAddress, - destProvider: $providers.get(bridgeTx.message.destChainId.toNumber()), + destBridgeAddress: chainsRecord[bridgeTx.toChainId].bridgeAddress, + srcBridgeAddress: chainsRecord[bridgeTx.fromChainId].bridgeAddress, + destProvider: $providers.get(bridgeTx.toChainId), srcTokenVaultAddress: $chainIdToTokenVaultAddress.get( - bridgeTx.message.srcChainId.toNumber(), + bridgeTx.fromChainId, ), }); @@ -132,67 +162,63 @@ if (transaction.status !== MessageStatus.New) return true; const contract = new Contract( - chainsRecord[ - transaction.message.destChainId.toNumber() - ].headerSyncAddress, + chainsRecord[transaction.toChainId].headerSyncAddress, HeaderSync, - $providers.get( - chainsRecord[transaction.message.destChainId.toNumber()].id, - ), + $providers.get(chainsRecord[transaction.toChainId].id), ); const latestSyncedHeader = await contract.getLatestSyncedHeader(); const srcBlock = await $providers - .get(chainsRecord[transaction.message.srcChainId.toNumber()].id) + .get(chainsRecord[transaction.fromChainId].id) .getBlock(latestSyncedHeader); return transaction.receipt.blockNumber <= srcBlock.number; } - const interval = setInterval(async () => { - processable = await isProcessable(); - const contract = new ethers.Contract( - chainsRecord[transaction.toChainId].bridgeAddress, - Bridge, - $providers.get( - chainsRecord[transaction.message.destChainId.toNumber()].id, - ), - ); + function startInterval() { + return setInterval(async () => { + processable = await isProcessable(); + const contract = new ethers.Contract( + chainsRecord[transaction.toChainId].bridgeAddress, + Bridge, + $providers.get(chainsRecord[transaction.toChainId].id), + ); - transaction.status = await contract.getMessageStatus(transaction.msgHash); - if (transaction.status === MessageStatus.Failed) { - if (transaction.message.data !== '0x') { - const srcTokenVaultContract = new ethers.Contract( - $chainIdToTokenVaultAddress.get(transaction.fromChainId), - TokenVault, - $providers.get( - chainsRecord[transaction.message.srcChainId.toNumber()].id, - ), - ); - const { token, amount } = await srcTokenVaultContract.messageDeposits( - transaction.msgHash, - ); - if (token === ethers.constants.AddressZero && amount.eq(0)) { - transaction.status = MessageStatus.FailedReleased; - } - } else { - const srcBridgeContract = new ethers.Contract( - chainsRecord[transaction.fromChainId].bridgeAddress, - Bridge, - $providers.get( - chainsRecord[transaction.message.srcChainId.toNumber()].id, - ), - ); - const isFailedMessageResolved = await srcBridgeContract.isEtherReleased( - transaction.msgHash, - ); - if (isFailedMessageResolved) { - transaction.status = MessageStatus.FailedReleased; + transaction.status = await contract.getMessageStatus(transaction.msgHash); + + if (transaction.status === MessageStatus.Failed) { + if (transaction.message?.data !== '0x') { + const srcTokenVaultContract = new ethers.Contract( + $chainIdToTokenVaultAddress.get(transaction.fromChainId), + TokenVault, + $providers.get(chainsRecord[transaction.fromChainId].id), + ); + const { token, amount } = await srcTokenVaultContract.messageDeposits( + transaction.msgHash, + ); + if (token === ethers.constants.AddressZero && amount.eq(0)) { + transaction.status = MessageStatus.FailedReleased; + } + } else { + const srcBridgeContract = new ethers.Contract( + chainsRecord[transaction.fromChainId].bridgeAddress, + Bridge, + $providers.get(chainsRecord[transaction.fromChainId].id), + ); + const isFailedMessageResolved = + await srcBridgeContract.isEtherReleased(transaction.msgHash); + if (isFailedMessageResolved) { + transaction.status = MessageStatus.FailedReleased; + } } } - } - transaction = transaction; - if (transaction.status === MessageStatus.Done) clearInterval(interval); - }, 20 * 1000); + if ( + [MessageStatus.Done, MessageStatus.FailedReleased].includes( + transaction.status, + ) + ) + clearInterval(interval); + }, 20 * 1000); + } @@ -205,14 +231,15 @@ - {transaction.message?.data === '0x' - ? ethers.utils.formatEther(transaction.message.depositValue) + {transaction.message && + (transaction.message?.data === '0x' || !transaction.message?.data) + ? ethers.utils.formatEther(transaction.message?.depositValue) : ethers.utils.formatUnits(transaction.amountInWei)} - {transaction.message?.data !== '0x' ? transaction.symbol : 'ETH'} + {transaction.symbol ?? 'ETH'} - + onTooltipClick(false)}> {#if !processable} Pending @@ -229,10 +256,11 @@ width={26} controlsLayout={[]} /> - {:else if transaction.receipt && transaction.status === MessageStatus.New} + {:else if transaction.receipt && [MessageStatus.New, MessageStatus.ClaimInProgress].includes(transaction.status)} {:else if transaction.status === MessageStatus.Retriable} diff --git a/packages/bridge-ui/src/components/Transactions.svelte b/packages/bridge-ui/src/components/Transactions.svelte index 2bc5b882c08..80f33a74735 100644 --- a/packages/bridge-ui/src/components/Transactions.svelte +++ b/packages/bridge-ui/src/components/Transactions.svelte @@ -3,11 +3,13 @@ import Transaction from './Transaction.svelte'; import TransactionDetail from './TransactionDetail.svelte'; import MessageStatusTooltip from './MessageStatusTooltip.svelte'; + import InsufficientBalanceTooltip from './InsufficientBalanceTooltip.svelte'; import type { BridgeTransaction } from '../domain/transactions'; import { chainsRecord } from '../chain/chains'; let selectedTransaction: BridgeTransaction; let showMessageStatusTooltip: boolean; + let showInsufficientBalance: boolean;
    @@ -25,8 +27,12 @@ {#each $transactions as transaction} { - showMessageStatusTooltip = true; + onTooltipClick={(showInsufficientBalanceMessage = false) => { + if (showInsufficientBalanceMessage) { + showInsufficientBalance = true; + } else { + showMessageStatusTooltip = true; + } }} onShowTransactionDetailsClick={() => { selectedTransaction = transaction; @@ -47,5 +53,6 @@ onClose={() => (selectedTransaction = null)} /> {/if} - + +
    diff --git a/packages/bridge-ui/src/components/form/BridgeForm.svelte b/packages/bridge-ui/src/components/form/BridgeForm.svelte index 6b11922d906..2b53deb32d1 100644 --- a/packages/bridge-ui/src/components/form/BridgeForm.svelte +++ b/packages/bridge-ui/src/components/form/BridgeForm.svelte @@ -22,6 +22,7 @@ import { truncateString } from '../../utils/truncateString'; import { pendingTransactions, + transactioner, transactions as transactionsStore, } from '../../store/transactions'; import { ProcessingFeeMethod } from '../../domain/fee'; @@ -270,14 +271,11 @@ // tx.chainId is not set immediately but we need it later. set it // manually. tx.chainId = $fromChain.id; - const storageKey = `transactions-${await ( - await $signer.getAddress() - ).toLowerCase()}`; - let transactions: BridgeTransaction[] = JSON.parse( - await window.localStorage.getItem(storageKey), - ); + const userAddress = await $signer.getAddress(); + let transactions: BridgeTransaction[] = + await $transactioner.GetAllByAddress(userAddress); - const bridgeTransaction: BridgeTransaction = { + let bridgeTransaction: BridgeTransaction = { fromChainId: $fromChain.id, toChainId: $toChain.id, symbol: $token.symbol, @@ -292,10 +290,7 @@ transactions.push(bridgeTransaction); } - await window.localStorage.setItem( - storageKey, - JSON.stringify(transactions), - ); + $transactioner.UpdateStorageByAddress(userAddress, transactions); pendingTransactions.update((store) => { store.push(tx); @@ -304,6 +299,12 @@ const allTransactions = $transactionsStore; + // get full BridgeTransaction object + bridgeTransaction = await $transactioner.GetTransactionByHash( + userAddress, + tx.hash, + ); + transactionsStore.set([bridgeTransaction, ...allTransactions]); successToast($_('toast.transactionSent')); @@ -412,7 +413,7 @@ -{#if $signer && tokenBalance && ethers.utils +{#if $token.symbol !== ETHToken.symbol && $signer && tokenBalance && ethers.utils .parseUnits(tokenBalance, $token.decimals) .eq(BigNumber.from(0))}
    diff --git a/packages/bridge-ui/src/constants/abi/Bridge.ts b/packages/bridge-ui/src/constants/abi/Bridge.ts index 841e3245422..0a053764b24 100644 --- a/packages/bridge-ui/src/constants/abi/Bridge.ts +++ b/packages/bridge-ui/src/constants/abi/Bridge.ts @@ -1,4 +1,114 @@ export default [ + { + inputs: [], + name: 'B_CANNOT_RECEIVE', + type: 'error', + }, + { + inputs: [], + name: 'B_DENIED', + type: 'error', + }, + { + inputs: [], + name: 'B_ERC20_CANNOT_RECEIVE', + type: 'error', + }, + { + inputs: [], + name: 'B_ETHER_RELEASED_ALREADY', + type: 'error', + }, + { + inputs: [], + name: 'B_EV_DO_NOT_BURN', + type: 'error', + }, + { + inputs: [], + name: 'B_EV_NOT_AUTHORIZED', + type: 'error', + }, + { + inputs: [], + name: 'B_EV_PARAM', + type: 'error', + }, + { + inputs: [], + name: 'B_FAILED_TRANSFER', + type: 'error', + }, + { + inputs: [], + name: 'B_FORBIDDEN', + type: 'error', + }, + { + inputs: [], + name: 'B_GAS_LIMIT', + type: 'error', + }, + { + inputs: [], + name: 'B_INCORRECT_VALUE', + type: 'error', + }, + { + inputs: [], + name: 'B_INIT_PARAM_ERROR', + type: 'error', + }, + { + inputs: [], + name: 'B_MSG_HASH_NULL', + type: 'error', + }, + { + inputs: [], + name: 'B_MSG_NON_RETRIABLE', + type: 'error', + }, + { + inputs: [], + name: 'B_MSG_NOT_FAILED', + type: 'error', + }, + { + inputs: [], + name: 'B_NULL_APP_ADDR', + type: 'error', + }, + { + inputs: [], + name: 'B_OWNER_IS_NULL', + type: 'error', + }, + { + inputs: [], + name: 'B_SIGNAL_NOT_RECEIVED', + type: 'error', + }, + { + inputs: [], + name: 'B_STATUS_MISMTACH', + type: 'error', + }, + { + inputs: [], + name: 'B_WRONG_CHAIN_ID', + type: 'error', + }, + { + inputs: [], + name: 'B_WRONG_TO_ADDRESS', + type: 'error', + }, + { + inputs: [], + name: 'B_ZERO_SIGNAL', + type: 'error', + }, { inputs: [], name: 'RESOLVER_DENIED', diff --git a/packages/bridge-ui/src/domain/block.ts b/packages/bridge-ui/src/domain/block.ts index 684581e5bcb..b0e737c9eb5 100644 --- a/packages/bridge-ui/src/domain/block.ts +++ b/packages/bridge-ui/src/domain/block.ts @@ -20,6 +20,7 @@ export type Block = { uncles: string[]; baseFeePerGas?: string; mixHash: string; + withdrawalsRoot?: string; }; export type BlockHeader = { @@ -39,4 +40,5 @@ export type BlockHeader = { mixHash: string; nonce: number; baseFeePerGas: number; + withdrawalsRoot: string; }; diff --git a/packages/bridge-ui/src/domain/message.ts b/packages/bridge-ui/src/domain/message.ts index 0b7c1350d1a..2d01befb0c4 100644 --- a/packages/bridge-ui/src/domain/message.ts +++ b/packages/bridge-ui/src/domain/message.ts @@ -6,6 +6,7 @@ export enum MessageStatus { Done, Failed, FailedReleased, + ClaimInProgress, } export type Message = { diff --git a/packages/bridge-ui/src/domain/relayerApi.ts b/packages/bridge-ui/src/domain/relayerApi.ts index ae8b7da7292..7e8dfc635a5 100644 --- a/packages/bridge-ui/src/domain/relayerApi.ts +++ b/packages/bridge-ui/src/domain/relayerApi.ts @@ -1,7 +1,7 @@ import type { BridgeTransaction } from './transactions'; export interface RelayerAPI { - GetAllByAddress( + GetAllBridgeTransactionByAddress( address: string, chainID?: number, ): Promise; @@ -9,8 +9,45 @@ export interface RelayerAPI { GetBlockInfo(): Promise>; } +export type APIResponseTransaction = { + id: number; + name: string; + data: { + [key: string]: any; + }; + status: number; + eventType: number; + chainID: number; + canonicalTokenAddress: string; + canonicalTokenSymbol: string; + canonicalTokenName: string; + canonicalTokenDecimals: number; + amount: string; + msgHash: string; + messageOwner: string; + event: string; +}; + export type RelayerBlockInfo = { chainId: number; latestProcessedBlock: number; latestBlock: number; }; + +export type APIRequestParams = { + address: string; + chainID?: number; + event?: string; +}; + +export type APIResponse = { + items: APIResponseTransaction[]; + page: number; + size: number; + max_page: number; + total_pages: number; + total: number; + last: boolean; + first: boolean; + visible: number; +}; diff --git a/packages/bridge-ui/src/domain/transactions.ts b/packages/bridge-ui/src/domain/transactions.ts index f5f69d38abf..46e40da8ad1 100644 --- a/packages/bridge-ui/src/domain/transactions.ts +++ b/packages/bridge-ui/src/domain/transactions.ts @@ -20,5 +20,10 @@ export interface Transactioner { chainID?: number, ): Promise; + GetTransactionByHash( + address: string, + hash: string, + ): Promise; + UpdateStorageByAddress(address: string, txs: BridgeTransaction[]): void; } diff --git a/packages/bridge-ui/src/proof/ProofService.spec.ts b/packages/bridge-ui/src/proof/ProofService.spec.ts index e6fafb9641a..8ba5fc8d02f 100644 --- a/packages/bridge-ui/src/proof/ProofService.spec.ts +++ b/packages/bridge-ui/src/proof/ProofService.spec.ts @@ -41,6 +41,7 @@ const block = { mixHash: '0xf5ba25df1e92e89a09e0b32063b81795f631100801158f5fa733f2ba26843bd0', nonce: 123, baseFeePerGas: '0', + withdrawalsRoot: ethers.constants.HashZero, }; const storageProof: EthGetProofResponse = { @@ -104,10 +105,10 @@ const invalidStorageProof2: EthGetProofResponse = { }; const expectedProof = - '0x000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000400000000000000000000000000000000000000000000000000000000000000360a7881266ca0a344c43cb24175d9dbd243b58d45d6ae6ad71310a273a3d1d3afb1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347000000000000000000000000ea674fdde714fd979de3edf0f56aa9716b898ec8c0dcf937b3f6136dd70a1ad11cc57b040fd410f3c49a5146f20c732895a3cc217273ade6b6ed865a9975ac281da23b90b141a8b607d874d2cd95e65e81336f8e74bb61e381e9238a08b169580f3cbf9b8b79d7d5ee708d3e286103eb291dfd0800000000000400000000000000000000000000400000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004000000000000000000000000020000000000000000000000000000000000000000000000000100000000008000000000000000000000000000000000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000000000007b00000000000000000000000000000000000000000000000000000000000002e0f5ba25df1e92e89a09e0b32063b81795f631100801158f5fa733f2ba26843bd0000000000000000000000000000000000000000000000000000000000000007b0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001265746865726d696e652d75732d7765737431000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e0000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000001c0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000022e1a00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000'; + '0x000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000400000000000000000000000000000000000000000000000000000000000000380a7881266ca0a344c43cb24175d9dbd243b58d45d6ae6ad71310a273a3d1d3afb1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347000000000000000000000000ea674fdde714fd979de3edf0f56aa9716b898ec8c0dcf937b3f6136dd70a1ad11cc57b040fd410f3c49a5146f20c732895a3cc217273ade6b6ed865a9975ac281da23b90b141a8b607d874d2cd95e65e81336f8e74bb61e381e9238a08b169580f3cbf9b8b79d7d5ee708d3e286103eb291dfd0800000000000400000000000000000000000000400000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004000000000000000000000000020000000000000000000000000000000000000000000000000100000000008000000000000000000000000000000000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000000000007b0000000000000000000000000000000000000000000000000000000000000300f5ba25df1e92e89a09e0b32063b81795f631100801158f5fa733f2ba26843bd0000000000000000000000000000000000000000000000000000000000000007b00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001265746865726d696e652d75732d7765737431000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e0000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000001c0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000022e1a00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000'; const expectedProofWithBaseFee = - '0x000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000400000000000000000000000000000000000000000000000000000000000000360a7881266ca0a344c43cb24175d9dbd243b58d45d6ae6ad71310a273a3d1d3afb1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347000000000000000000000000ea674fdde714fd979de3edf0f56aa9716b898ec8c0dcf937b3f6136dd70a1ad11cc57b040fd410f3c49a5146f20c732895a3cc217273ade6b6ed865a9975ac281da23b90b141a8b607d874d2cd95e65e81336f8e74bb61e381e9238a08b169580f3cbf9b8b79d7d5ee708d3e286103eb291dfd0800000000000400000000000000000000000000400000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004000000000000000000000000020000000000000000000000000000000000000000000000000100000000008000000000000000000000000000000000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000000000007b00000000000000000000000000000000000000000000000000000000000002e0f5ba25df1e92e89a09e0b32063b81795f631100801158f5fa733f2ba26843bd0000000000000000000000000000000000000000000000000000000000000007b0000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000001265746865726d696e652d75732d7765737431000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e0000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000001c0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000022e1a00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000'; + '0x000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000400000000000000000000000000000000000000000000000000000000000000380a7881266ca0a344c43cb24175d9dbd243b58d45d6ae6ad71310a273a3d1d3afb1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347000000000000000000000000ea674fdde714fd979de3edf0f56aa9716b898ec8c0dcf937b3f6136dd70a1ad11cc57b040fd410f3c49a5146f20c732895a3cc217273ade6b6ed865a9975ac281da23b90b141a8b607d874d2cd95e65e81336f8e74bb61e381e9238a08b169580f3cbf9b8b79d7d5ee708d3e286103eb291dfd0800000000000400000000000000000000000000400000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004000000000000000000000000020000000000000000000000000000000000000000000000000100000000008000000000000000000000000000000000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000000000007b0000000000000000000000000000000000000000000000000000000000000300f5ba25df1e92e89a09e0b32063b81795f631100801158f5fa733f2ba26843bd0000000000000000000000000000000000000000000000000000000000000007b00000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001265746865726d696e652d75732d7765737431000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e0000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000001c0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000022e1a00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000'; const srcChain = 167001; const destChain = 31336; diff --git a/packages/bridge-ui/src/proof/ProofService.ts b/packages/bridge-ui/src/proof/ProofService.ts index 4f232451f97..878a09b6693 100644 --- a/packages/bridge-ui/src/proof/ProofService.ts +++ b/packages/bridge-ui/src/proof/ProofService.ts @@ -57,6 +57,7 @@ export class ProofService implements Prover { mixHash: block.mixHash, nonce: block.nonce, baseFeePerGas: block.baseFeePerGas ? parseInt(block.baseFeePerGas) : 0, + withdrawalsRoot: block.withdrawalsRoot ?? ethers.constants.HashZero, }; return { block, blockHeader }; @@ -75,7 +76,7 @@ export class ProofService implements Prover { // encode the SignalProof struct from LibBridgeSignal const signalProof = ethers.utils.defaultAbiCoder.encode( [ - 'tuple(tuple(bytes32 parentHash, bytes32 ommersHash, address beneficiary, bytes32 stateRoot, bytes32 transactionsRoot, bytes32 receiptsRoot, bytes32[8] logsBloom, uint256 difficulty, uint128 height, uint64 gasLimit, uint64 gasUsed, uint64 timestamp, bytes extraData, bytes32 mixHash, uint64 nonce, uint256 baseFeePerGas) header, bytes proof)', + 'tuple(tuple(bytes32 parentHash, bytes32 ommersHash, address beneficiary, bytes32 stateRoot, bytes32 transactionsRoot, bytes32 receiptsRoot, bytes32[8] logsBloom, uint256 difficulty, uint128 height, uint64 gasLimit, uint64 gasUsed, uint64 timestamp, bytes extraData, bytes32 mixHash, uint64 nonce, uint256 baseFeePerGas, bytes32 withdrawalsRoot) header, bytes proof)', ], [{ header: blockHeader, proof: encodedProof }], ); @@ -110,7 +111,8 @@ export class ProofService implements Prover { throw Error('invalid proof'); } - return ProofService.getSignalProof(proof, blockHeader); + const p = ProofService.getSignalProof(proof, blockHeader); + return p; } async GenerateReleaseProof(opts: GenerateReleaseProofOpts): Promise { @@ -140,6 +142,7 @@ export class ProofService implements Prover { throw Error('invalid proof'); } - return ProofService.getSignalProof(proof, blockHeader); + const p = ProofService.getSignalProof(proof, blockHeader); + return p; } } diff --git a/packages/bridge-ui/src/relayer-api/RelayerAPIService.ts b/packages/bridge-ui/src/relayer-api/RelayerAPIService.ts index 3797e5e592e..960a4467ab8 100644 --- a/packages/bridge-ui/src/relayer-api/RelayerAPIService.ts +++ b/packages/bridge-ui/src/relayer-api/RelayerAPIService.ts @@ -8,7 +8,13 @@ import { MessageStatus } from '../domain/message'; import type { BridgeTransaction } from '../domain/transactions'; import { chainIdToTokenVaultAddress } from '../store/bridge'; import { get } from 'svelte/store'; -import type { RelayerAPI, RelayerBlockInfo } from '../domain/relayerApi'; +import type { + APIRequestParams, + APIResponse, + APIResponseTransaction, + RelayerAPI, + RelayerBlockInfo, +} from '../domain/relayerApi'; import { chainsRecord } from '../chain/chains'; export class RelayerAPIService implements RelayerAPI { @@ -23,33 +29,60 @@ export class RelayerAPIService implements RelayerAPI { this.baseUrl = baseUrl; } - async GetAllByAddress( + async getTransactionsFromAPI(params: APIRequestParams): Promise { + const requestURL = `${this.baseUrl}events`; + + const response = await axios.get(requestURL, { params }); + + return response.data; + } + + async GetAllBridgeTransactionByAddress( address: string, chainID?: number, ): Promise { if (!address) { throw new Error('Address need to passed to fetch transactions'); } + const params = { address, chainID, + event: 'MessageSent', }; - const requestURL = `${this.baseUrl}events`; - - const { data } = await axios.get(requestURL, { params }); + const apiTxs: APIResponse = await this.getTransactionsFromAPI(params); - if (data?.items?.length === 0) { + if (apiTxs?.items?.length === 0) { return []; } - const txs: BridgeTransaction[] = data.items.map((tx) => { + const txs = apiTxs.items.map((tx: APIResponseTransaction) => { + let data = tx.data.Message.Data; + if (data === '') { + data = '0x'; // ethers does not allow "" for empty bytes value + } else if (data !== '0x') { + const buffer = Buffer.from(data, 'base64'); + data = `0x${buffer.toString('hex')}`; + } + return { status: tx.status, + amountInWei: BigNumber.from(tx.amount), + symbol: tx.canonicalTokenSymbol, + hash: tx.data.Raw.transactionHash, + from: tx.messageOwner, + fromChainId: tx.data.Message.SrcChainId, + toChainId: tx.data.Message.DestChainId, + msgHash: tx.msgHash, + canonicalTokenAddress: tx.canonicalTokenAddress, + canonicalTokenSymbol: tx.canonicalTokenSymbol, + canonicalTokenName: tx.canonicalTokenName, + canonicalTokenDecimals: tx.canonicalTokenDecimals, message: { id: tx.data.Message.Id, to: tx.data.Message.To, - data: tx.data.Message.Data, + data, memo: tx.data.Message.Memo, owner: tx.data.Message.Owner, sender: tx.data.Message.Sender, @@ -61,19 +94,12 @@ export class RelayerAPIService implements RelayerAPI { processingFee: BigNumber.from(`${tx.data.Message.ProcessingFee}`), refundAddress: tx.data.Message.RefundAddress, }, - amountInWei: tx.amount, - symbol: tx.canonicalTokenSymbol, - fromChainId: tx.data.Message.SrcChainId, - toChainId: tx.data.Message.DestChainId, - hash: tx.data.Raw.transactionHash, - from: tx.data.Message.Owner, }; }); const bridgeTxs: BridgeTransaction[] = await Promise.all( (txs || []).map(async (tx) => { - if (tx.message.owner.toLowerCase() !== address.toLowerCase()) return; - + if (tx.from.toLowerCase() !== address.toLowerCase()) return; const destChainId = tx.toChainId; const destProvider = this.providerMap.get(destChainId); @@ -85,51 +111,23 @@ export class RelayerAPIService implements RelayerAPI { return tx; } - tx.receipt = receipt; - const destBridgeAddress = chainsRecord[destChainId].bridgeAddress; - const srcBridgeAddress = chainsRecord[tx.fromChainId].bridgeAddress; - const destContract: Contract = new Contract( destBridgeAddress, Bridge, destProvider, ); - const srcContract: Contract = new Contract( - srcBridgeAddress, - Bridge, - srcProvider, - ); - - const events = await srcContract.queryFilter( - 'MessageSent', - receipt.blockNumber, - receipt.blockNumber, - ); - - // A block could have multiple events being triggered so we need to find this particular tx - const event = events.find( - (e) => - e.args.message.owner.toLowerCase() === address.toLowerCase() && - e.args.message.depositValue.eq(tx.message.depositValue) && - e.args.msgHash === tx.msgHash, - ); - - if (!event) { - return tx; - } - - const msgHash = event.args.msgHash; + const msgHash = tx.msgHash; const messageStatus: number = await destContract.getMessageStatus( msgHash, ); - let amountInWei: BigNumber; + let amountInWei: BigNumber = tx.amountInWei; let symbol: string; - if (event.args.message.data !== '0x') { + if (tx.canonicalTokenAddress !== ethers.constants.AddressZero) { const tokenVaultContract = new Contract( get(chainIdToTokenVaultAddress).get(tx.fromChainId), TokenVault, @@ -157,9 +155,9 @@ export class RelayerAPIService implements RelayerAPI { } const bridgeTx: BridgeTransaction = { - message: event.args.message, + message: tx.message, receipt: receipt, - msgHash: event.args.msgHash, + msgHash: tx.msgHash, status: messageStatus, amountInWei: amountInWei, symbol: symbol, @@ -168,7 +166,6 @@ export class RelayerAPIService implements RelayerAPI { hash: tx.hash, from: tx.from, }; - return bridgeTx; }), ); diff --git a/packages/bridge-ui/src/storage/StorageService.spec.ts b/packages/bridge-ui/src/storage/StorageService.spec.ts index 62bd45bc210..aee707adf9a 100644 --- a/packages/bridge-ui/src/storage/StorageService.spec.ts +++ b/packages/bridge-ui/src/storage/StorageService.spec.ts @@ -11,6 +11,7 @@ const mockStorage = { const mockProvider = { getTransactionReceipt: jest.fn(), + waitForTransaction: jest.fn(), }; const mockContract = { @@ -285,4 +286,57 @@ describe('storage tests', () => { }, ]); }); + + it('get transaction by hash', async () => { + mockStorage.getItem.mockImplementation(() => { + return JSON.stringify(mockTxs); + }); + + mockProvider.getTransactionReceipt.mockImplementation(() => { + return mockTxReceipt; + }); + + mockProvider.waitForTransaction.mockImplementation(() => { + return; + }); + + mockContract.getMessageStatus.mockImplementation(() => { + return MessageStatus.New; + }); + + mockContract.queryFilter.mockImplementation( + (name: string, from: BigNumberish, to: BigNumberish) => { + if (name === 'ERC20Sent') { + return mockErc20Query; + } + + return mockQuery; + }, + ); + + mockContract.symbol.mockImplementation(() => { + return TKOToken.symbol; + }); + + const svc = new StorageService(mockStorage as any, providerMap); + + const addresses = await svc.GetTransactionByHash('0x123', mockTx.hash); + + expect(addresses).toEqual({ + amountInWei: BigNumber.from(0x64), + hash: '0x123', + from: '0x123', + message: { + owner: '0x123', + }, + receipt: { + blockNumber: 1, + }, + msgHash: '0x456', + status: 0, + fromChainId: L1_CHAIN_ID, + toChainId: L2_CHAIN_ID, + symbol: 'TKO', + }); + }); }); diff --git a/packages/bridge-ui/src/storage/StorageService.ts b/packages/bridge-ui/src/storage/StorageService.ts index 56922edb9e7..5d935a0d5d2 100644 --- a/packages/bridge-ui/src/storage/StorageService.ts +++ b/packages/bridge-ui/src/storage/StorageService.ts @@ -142,6 +142,114 @@ export class StorageService implements Transactioner { return bridgeTxs; } + async GetTransactionByHash( + address: string, + hash: string, + ): Promise { + const txs: BridgeTransaction[] = JSON.parse( + this.storage.getItem(`transactions-${address.toLowerCase()}`), + ); + + const tx: BridgeTransaction = txs.find((tx) => tx.hash === hash); + + if (tx.from.toLowerCase() !== address.toLowerCase()) return; + const destChainId = tx.toChainId; + const destProvider = this.providerMap.get(destChainId); + + const srcProvider = this.providerMap.get(tx.fromChainId); + + // Ignore transactions from chains not supported by the bridge + if (!srcProvider) { + return null; + } + await srcProvider.waitForTransaction(tx.hash); + const receipt = await srcProvider.getTransactionReceipt(tx.hash); + + if (!receipt) { + return; + } + + tx.receipt = receipt; + + const destBridgeAddress = chainsRecord[destChainId].bridgeAddress; + + const srcBridgeAddress = chainsRecord[tx.fromChainId].bridgeAddress; + + const destContract: Contract = new Contract( + destBridgeAddress, + Bridge, + destProvider, + ); + + const srcContract: Contract = new Contract( + srcBridgeAddress, + Bridge, + srcProvider, + ); + + const events = await srcContract.queryFilter( + 'MessageSent', + receipt.blockNumber, + receipt.blockNumber, + ); + + const event = events.find( + (e) => e.args.message.owner.toLowerCase() === address.toLowerCase(), + ); + + if (!event) { + return; + } + + const msgHash = event.args.msgHash; + + const messageStatus: number = await destContract.getMessageStatus(msgHash); + + let amountInWei: BigNumber; + let symbol: string; + if (event.args.message.data !== '0x') { + const tokenVaultContract = new Contract( + get(chainIdToTokenVaultAddress).get(tx.fromChainId), + TokenVault, + srcProvider, + ); + const filter = tokenVaultContract.filters.ERC20Sent(msgHash); + const erc20Events = await tokenVaultContract.queryFilter( + filter, + receipt.blockNumber, + receipt.blockNumber, + ); + + const erc20Event = erc20Events.find( + (e) => e.args.msgHash.toLowerCase() === msgHash.toLowerCase(), + ); + if (!erc20Event) return; + + const erc20Contract = new Contract( + erc20Event.args.token, + ERC20, + srcProvider, + ); + symbol = await erc20Contract.symbol(); + amountInWei = BigNumber.from(erc20Event.args.amount); + } + + const bridgeTx: BridgeTransaction = { + hash: tx.hash, + from: tx.from, + message: event.args.message, + receipt: receipt, + msgHash: event.args.msgHash, + status: messageStatus, + amountInWei: amountInWei, + symbol: symbol, + fromChainId: tx.fromChainId, + toChainId: tx.toChainId, + }; + + return bridgeTx; + } + UpdateStorageByAddress(address: string, txs: BridgeTransaction[]) { this.storage.setItem( `transactions-${address.toLowerCase()}`, diff --git a/packages/protocol/contracts/signal/SignalService.sol b/packages/protocol/contracts/signal/SignalService.sol index 952249d7a0a..d5b62b9581b 100644 --- a/packages/protocol/contracts/signal/SignalService.sol +++ b/packages/protocol/contracts/signal/SignalService.sol @@ -104,19 +104,6 @@ contract SignalService is ISignalService, EssentialContract { address app, bytes32 signal ) public pure returns (bytes32 signalSlot) { - assembly { - // Load the free memory pointer and allocate memory for the concatenated arguments - let input := mload(0x40) - - // Store the app address and signal bytes32 value in the allocated memory - mstore(input, app) - mstore(add(input, 0x20), signal) - - // Calculate the hash of the concatenated arguments using keccak256 - signalSlot := keccak256(input, 0x40) - - // Free the memory allocated for the input - mstore(0x40, add(input, 0x60)) - } + signalSlot = keccak256(abi.encodePacked(app, signal)); } } diff --git a/packages/protocol/test/signal/SignalService.integration.test.ts b/packages/protocol/test/signal/SignalService.integration.test.ts index 56c8b289a16..0d527a020b2 100644 --- a/packages/protocol/test/signal/SignalService.integration.test.ts +++ b/packages/protocol/test/signal/SignalService.integration.test.ts @@ -193,7 +193,7 @@ describe("integration:SignalService", function () { ).to.be.revertedWith("B_ZERO_SIGNAL()"); }); - it("should pass and return true", async function () { + it.only("should pass and return true", async function () { const { l1Provider, owner, diff --git a/packages/protocol/test/signal/SignalService.test.ts b/packages/protocol/test/signal/SignalService.test.ts index 41bf8c8a68b..2c26fad6fb5 100644 --- a/packages/protocol/test/signal/SignalService.test.ts +++ b/packages/protocol/test/signal/SignalService.test.ts @@ -40,6 +40,17 @@ describe("SignalService", function () { await expect(slot1).to.be.not.equal(slot2); }); + it("should return expected slot", async () => { + const want = + "0x9b11525774df15071344c44c56f02418dd56a9050effcc5de3912e88ccf1b95d"; + + const slot = await signalService.getSignalSlot( + "0x2aB7C0ab9AB47fcF370d13058BfEE28f2Ec0940c", + "0xf697cc0b80c778b40a4e863d2d2a723cc707bcdf2ba463bb1cd28aa2c888b229" + ); + + await expect(slot).to.be.equal(want); + }); }); describe("isSignalSent()", function () { diff --git a/packages/relayer/encoding/block_header.go b/packages/relayer/encoding/block_header.go index 806c6dfee7a..001336640d9 100644 --- a/packages/relayer/encoding/block_header.go +++ b/packages/relayer/encoding/block_header.go @@ -3,6 +3,7 @@ package encoding import ( "github.com/ethereum/go-ethereum/common" "github.com/ethereum/go-ethereum/core/types" + "github.com/taikoxyz/taiko-mono/packages/relayer" ) func BlockToBlockHeader(block *types.Block) BlockHeader { @@ -11,6 +12,12 @@ func BlockToBlockHeader(block *types.Block) BlockHeader { baseFee = common.Big0 } + withdrawalsRoot := relayer.ZeroHash + + if block.Header().WithdrawalsHash != nil { + withdrawalsRoot = *block.Header().WithdrawalsHash + } + return BlockHeader{ ParentHash: block.ParentHash(), OmmersHash: block.UncleHash(), @@ -28,5 +35,6 @@ func BlockToBlockHeader(block *types.Block) BlockHeader { StateRoot: block.Root(), LogsBloom: logsBloomToBytes(block.Bloom()), BaseFeePerGas: baseFee, + WithdrawalsRoot: withdrawalsRoot, } } diff --git a/packages/relayer/encoding/block_header_test.go b/packages/relayer/encoding/block_header_test.go index 4580f42cc37..d486258f83f 100644 --- a/packages/relayer/encoding/block_header_test.go +++ b/packages/relayer/encoding/block_header_test.go @@ -97,3 +97,52 @@ func Test_BlockToBlockHeader_EIP1159(t *testing.T) { assert.Equal(t, e, h) } + +func Test_BlockToBlockHeader_Shanghai(t *testing.T) { + wRoot := common.HexToHash("0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347") + + header := &types.Header{ + ParentHash: common.HexToHash("0x3a537c89809712367218bb171b3b1c46aa95df3dee7200ae9dc78f4052024068"), + UncleHash: common.HexToHash("0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347"), + Coinbase: common.HexToAddress("0x0000000000000000000000000000000000000000"), + Root: common.HexToHash("0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347"), + TxHash: common.HexToHash("0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347"), + ReceiptHash: common.HexToHash("0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347"), + Bloom: types.Bloom{}, + Difficulty: new(big.Int).SetInt64(2), + Number: new(big.Int).SetInt64(1), + GasLimit: 100000, + GasUsed: 2000, + Time: 1234, + Extra: []byte{0x7f}, + MixDigest: common.HexToHash("0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347"), + Nonce: types.BlockNonce{0x13}, + BaseFee: big.NewInt(10), + WithdrawalsHash: &wRoot, + } + b := types.NewBlockWithHeader(header) + + h := BlockToBlockHeader(b) + + e := BlockHeader{ + ParentHash: common.HexToHash("0x3a537c89809712367218bb171b3b1c46aa95df3dee7200ae9dc78f4052024068"), + OmmersHash: common.HexToHash("0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347"), + Beneficiary: common.HexToAddress("0x0000000000000000000000000000000000000000"), + StateRoot: common.HexToHash("0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347"), + TransactionsRoot: common.HexToHash("0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347"), + ReceiptsRoot: common.HexToHash("0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347"), + LogsBloom: [8][32]byte{}, + Difficulty: new(big.Int).SetInt64(2), + Height: new(big.Int).SetInt64(1), + GasLimit: 100000, + GasUsed: 2000, + Timestamp: 1234, + ExtraData: []byte{0x7f}, + MixHash: common.HexToHash("0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347"), + Nonce: 1369094286720630784, + BaseFeePerGas: big.NewInt(10), + WithdrawalsRoot: wRoot, + } + + assert.Equal(t, e, h) +} diff --git a/packages/relayer/encoding/signal_proof_test.go b/packages/relayer/encoding/signal_proof_test.go index 09048898103..f0d3561a87d 100644 --- a/packages/relayer/encoding/signal_proof_test.go +++ b/packages/relayer/encoding/signal_proof_test.go @@ -38,7 +38,43 @@ func Test_EncodeSignalProof(t *testing.T) { } // nolint: lll - want := "0x0000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000003603a537c89809712367218bb171b3b1c46aa95df3dee7200ae9dc78f40520240681dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d4934700000000000000000000000000000000000000000000000000000000000000001dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d493471dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d493471dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000186a000000000000000000000000000000000000000000000000000000000000007d000000000000000000000000000000000000000000000000000000000000004d200000000000000000000000000000000000000000000000000000000000002e01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d493470000000000000000000000000000000000000000000000001300000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000017f00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010000edb9377a94f02e691ea208a80a7bd13dcb51dfae3a389d3001a55c5fdf3f3ae70807df1d8ffcaeefa5dc56875a03dae3494d93bbf3074018fea52137a098433d9795f455fcfaf89b6456b970605bd0f70bec98418ef322fa5bba9874ab2277225a38c19f99275cd6d25d9cd4259c366c02b750056a6b71810034f95d34ae12c1298a95e6ba03de90dbbfacc5c8edbeb6ed93a0e01c08f3435b1ca944e9229a176804445432795c14dc315925fe2480084d6b0729c30fb1c2e50e481df5d7daa25769a0c74baf362ff02f2a934538cd11bf939f64377489255aa60a12628b130f4bddd30664d6b5f91d17cc110bee38a7ce5c629585e57d777bfbb2eaf09e15" + want := "0x0000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000003803a537c89809712367218bb171b3b1c46aa95df3dee7200ae9dc78f40520240681dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d4934700000000000000000000000000000000000000000000000000000000000000001dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d493471dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d493471dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000186a000000000000000000000000000000000000000000000000000000000000007d000000000000000000000000000000000000000000000000000000000000004d200000000000000000000000000000000000000000000000000000000000003001dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d4934700000000000000000000000000000000000000000000000013000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000017f00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010000edb9377a94f02e691ea208a80a7bd13dcb51dfae3a389d3001a55c5fdf3f3ae70807df1d8ffcaeefa5dc56875a03dae3494d93bbf3074018fea52137a098433d9795f455fcfaf89b6456b970605bd0f70bec98418ef322fa5bba9874ab2277225a38c19f99275cd6d25d9cd4259c366c02b750056a6b71810034f95d34ae12c1298a95e6ba03de90dbbfacc5c8edbeb6ed93a0e01c08f3435b1ca944e9229a176804445432795c14dc315925fe2480084d6b0729c30fb1c2e50e481df5d7daa25769a0c74baf362ff02f2a934538cd11bf939f64377489255aa60a12628b130f4bddd30664d6b5f91d17cc110bee38a7ce5c629585e57d777bfbb2eaf09e15" + proof, err := EncodeSignalProof(s) + assert.Equal(t, nil, err) + assert.Equal(t, hexutil.Encode(proof), want) +} + +func Test_EncodeSignalProof_Shanghai(t *testing.T) { + wRoot := common.HexToHash("0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347") + header := &types.Header{ + ParentHash: common.HexToHash("0x3a537c89809712367218bb171b3b1c46aa95df3dee7200ae9dc78f4052024068"), + UncleHash: common.HexToHash("0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347"), + Coinbase: common.HexToAddress("0x0000000000000000000000000000000000000000"), + Root: common.HexToHash("0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347"), + TxHash: common.HexToHash("0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347"), + ReceiptHash: common.HexToHash("0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347"), + Bloom: types.Bloom{}, + Difficulty: new(big.Int).SetInt64(2), + Number: new(big.Int).SetInt64(1), + GasLimit: 100000, + GasUsed: 2000, + Time: 1234, + Extra: []byte{0x7f}, + MixDigest: common.HexToHash("0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347"), + Nonce: types.BlockNonce{0x13}, + WithdrawalsHash: &wRoot, + } + + // nolint: lll + storageProof := "0x00edb9377a94f02e691ea208a80a7bd13dcb51dfae3a389d3001a55c5fdf3f3ae70807df1d8ffcaeefa5dc56875a03dae3494d93bbf3074018fea52137a098433d9795f455fcfaf89b6456b970605bd0f70bec98418ef322fa5bba9874ab2277225a38c19f99275cd6d25d9cd4259c366c02b750056a6b71810034f95d34ae12c1298a95e6ba03de90dbbfacc5c8edbeb6ed93a0e01c08f3435b1ca944e9229a176804445432795c14dc315925fe2480084d6b0729c30fb1c2e50e481df5d7daa25769a0c74baf362ff02f2a934538cd11bf939f64377489255aa60a12628b130f4bddd30664d6b5f91d17cc110bee38a7ce5c629585e57d777bfbb2eaf09e15" + + s := SignalProof{ + Header: BlockToBlockHeader(types.NewBlockWithHeader(header)), + Proof: hexutil.MustDecode(storageProof), + } + + // nolint: lll + want := "0x0000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000003803a537c89809712367218bb171b3b1c46aa95df3dee7200ae9dc78f40520240681dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d4934700000000000000000000000000000000000000000000000000000000000000001dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d493471dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d493471dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000186a000000000000000000000000000000000000000000000000000000000000007d000000000000000000000000000000000000000000000000000000000000004d200000000000000000000000000000000000000000000000000000000000003001dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347000000000000000000000000000000000000000000000000130000000000000000000000000000000000000000000000000000000000000000000000000000001dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d4934700000000000000000000000000000000000000000000000000000000000000017f00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010000edb9377a94f02e691ea208a80a7bd13dcb51dfae3a389d3001a55c5fdf3f3ae70807df1d8ffcaeefa5dc56875a03dae3494d93bbf3074018fea52137a098433d9795f455fcfaf89b6456b970605bd0f70bec98418ef322fa5bba9874ab2277225a38c19f99275cd6d25d9cd4259c366c02b750056a6b71810034f95d34ae12c1298a95e6ba03de90dbbfacc5c8edbeb6ed93a0e01c08f3435b1ca944e9229a176804445432795c14dc315925fe2480084d6b0729c30fb1c2e50e481df5d7daa25769a0c74baf362ff02f2a934538cd11bf939f64377489255aa60a12628b130f4bddd30664d6b5f91d17cc110bee38a7ce5c629585e57d777bfbb2eaf09e15" proof, err := EncodeSignalProof(s) assert.Equal(t, nil, err) assert.Equal(t, hexutil.Encode(proof), want) diff --git a/packages/relayer/encoding/types.go b/packages/relayer/encoding/types.go index a58f690696c..c6bfad5843a 100644 --- a/packages/relayer/encoding/types.go +++ b/packages/relayer/encoding/types.go @@ -29,6 +29,7 @@ type BlockHeader struct { MixHash [32]byte `abi:"mixHash"` Nonce uint64 `abi:"nonce"` BaseFeePerGas *big.Int `abi:"baseFeePerGas"` + WithdrawalsRoot [32]byte `abi:"withdrawalsRoot"` } type SignalProof struct { @@ -105,6 +106,10 @@ var signalProofT, _ = abi.NewType("tuple", "", []abi.ArgumentMarshaling{ Name: "baseFeePerGas", Type: "uint256", }, + { + Name: "withdrawalsRoot", + Type: "bytes32", + }, }, }, { diff --git a/packages/relayer/indexer/handle_event.go b/packages/relayer/indexer/handle_event.go index e2b20efd332..8095d68f8e3 100644 --- a/packages/relayer/indexer/handle_event.go +++ b/packages/relayer/indexer/handle_event.go @@ -22,7 +22,7 @@ func (svc *Service) handleEvent( ) error { raw := event.Raw - log.Infof("event found for msgHash: %v", common.Hash(event.MsgHash).Hex()) + log.Infof("event found for msgHash: %v, txHash: %v", common.Hash(event.MsgHash).Hex(), event.Raw.TxHash.Hex()) // handle chain re-org by checking Removed property, no need to // return error, just continue and do not process. diff --git a/packages/relayer/indexer/subscribe.go b/packages/relayer/indexer/subscribe.go index 46b8f82002c..1a87f5e2605 100644 --- a/packages/relayer/indexer/subscribe.go +++ b/packages/relayer/indexer/subscribe.go @@ -30,6 +30,8 @@ func (svc *Service) subscribe(ctx context.Context, chainID *big.Int) error { log.Info("context finished") return nil case err := <-errChan: + relayer.ErrorsEncounteredDuringSubscription.Inc() + return errors.Wrap(err, "errChan") } } @@ -43,6 +45,8 @@ func (svc *Service) subscribeMessageSent(ctx context.Context, chainID *big.Int, log.Errorf("svc.bridge.WatchMessageSent: %v", err) } + log.Info("resubscribing to WatchMessageSent events") + return svc.bridge.WatchMessageSent(&bind.WatchOpts{ Context: ctx, }, sink, nil) @@ -96,6 +100,7 @@ func (svc *Service) subscribeMessageStatusChanged(ctx context.Context, chainID * if err != nil { log.Errorf("svc.bridge.WatchMessageStatusChanged: %v", err) } + log.Info("resubscribing to WatchMessageStatusChanged events") return svc.bridge.WatchMessageStatusChanged(&bind.WatchOpts{ Context: ctx, diff --git a/packages/relayer/message/process_message.go b/packages/relayer/message/process_message.go index 2cc5ecbbf47..c75fc518c16 100644 --- a/packages/relayer/message/process_message.go +++ b/packages/relayer/message/process_message.go @@ -55,12 +55,13 @@ func (p *Processor) ProcessMessage( encodedSignalProof, err := p.prover.EncodedSignalProof(ctx, p.rpc, p.srcSignalServiceAddress, key, latestSyncedHeader) if err != nil { - log.Errorf("srcChainID: %v, destChainID: %v, txHash: %v: msgHash: %v, from: %v", + log.Errorf("srcChainID: %v, destChainID: %v, txHash: %v: msgHash: %v, from: %v encountered signalProofError %v", event.Message.SrcChainId, event.Message.DestChainId, event.Raw.TxHash.Hex(), common.Hash(event.MsgHash).Hex(), event.Message.Owner.Hex(), + err, ) return errors.Wrap(err, "p.prover.GetEncodedSignalProof") @@ -78,7 +79,15 @@ func (p *Processor) ProcessMessage( // message will fail when we try to process it if !received { - log.Warnf("msgHash %v not received on dest chain", common.Hash(event.MsgHash).Hex()) + log.Warnf( + "msgHash: %v, srcChainId: %v, encodedSignalProof: %v not received on dest chain", + common.Hash(event.MsgHash).Hex(), + event.Message.SrcChainId, + hex.EncodeToString(encodedSignalProof), + ) + + relayer.MessagesNotReceivedOnDestChain.Inc() + return errors.New("message not received") } @@ -89,8 +98,6 @@ func (p *Processor) ProcessMessage( relayer.EventsProcessed.Inc() - log.Infof("waiting for tx hash %v", hex.EncodeToString(tx.Hash().Bytes())) - receipt, err := relayer.WaitReceipt(ctx, p.destEthClient, tx.Hash()) if err != nil { return errors.Wrap(err, "relayer.WaitReceipt") @@ -107,7 +114,12 @@ func (p *Processor) ProcessMessage( return errors.Wrap(err, "p.destBridge.GetMessageStatus") } - log.Infof("updating message status to: %v", relayer.EventStatus(messageStatus).String()) + log.Infof( + "updating message status to: %v for txHash: %v, processed in txHash: %v", + relayer.EventStatus(messageStatus).String(), + event.Raw.TxHash.Hex(), + hex.EncodeToString(tx.Hash().Bytes()), + ) if messageStatus == uint8(relayer.EventStatusRetriable) { relayer.RetriableEvents.Inc() diff --git a/packages/relayer/message/wait_for_confirmations.go b/packages/relayer/message/wait_for_confirmations.go index 600ac574a02..d71c34dddbb 100644 --- a/packages/relayer/message/wait_for_confirmations.go +++ b/packages/relayer/message/wait_for_confirmations.go @@ -10,7 +10,6 @@ import ( ) func (p *Processor) waitForConfirmations(ctx context.Context, txHash common.Hash, blockNumber uint64) error { - // TODO: make timeout a config var ctx, cancelFunc := context.WithTimeout(ctx, 5*time.Minute) defer cancelFunc() diff --git a/packages/relayer/message/wait_header_synced.go b/packages/relayer/message/wait_header_synced.go index f839bb4872e..22c67e0e287 100644 --- a/packages/relayer/message/wait_header_synced.go +++ b/packages/relayer/message/wait_header_synced.go @@ -21,8 +21,9 @@ func (p *Processor) waitHeaderSynced(ctx context.Context, event *bridge.BridgeMe return ctx.Err() case <-ticker.C: log.Infof( - "msgHash: %v waiting to be processable. occured in block %v", + "msgHash: %v, txHash: %v is waiting to be processable. occured in block %v", common.Hash(event.MsgHash).Hex(), + event.Raw.TxHash.Hex(), event.Raw.BlockNumber, ) // get latest synced header since not every header is synced from L1 => L2, @@ -40,8 +41,9 @@ func (p *Processor) waitHeaderSynced(ctx context.Context, event *bridge.BridgeMe // header is caught up and processible if header.Number.Uint64() >= event.Raw.BlockNumber { log.Infof( - "msgHash: %v is processable. occured in block %v, latestSynced is block %v", + "msgHash: %v, txHash: %v is processable. occured in block %v, latestSynced is block %v", common.Hash(event.MsgHash).Hex(), + event.Raw.TxHash.Hex(), event.Raw.BlockNumber, header.Number.Uint64(), ) @@ -50,8 +52,9 @@ func (p *Processor) waitHeaderSynced(ctx context.Context, event *bridge.BridgeMe } log.Infof( - "msgHash: %v waiting to be processable. occured in block %v, latestSynced is block %v", + "msgHash: %v, txHash: %v is waiting to be processable. occured in block %v, latestSynced is block %v", common.Hash(event.MsgHash).Hex(), + event.Raw.TxHash.Hex(), event.Raw.BlockNumber, header.Number.Uint64(), ) diff --git a/packages/relayer/prometheus.go b/packages/relayer/prometheus.go index 8d3dfefb11f..b2df6d3c558 100644 --- a/packages/relayer/prometheus.go +++ b/packages/relayer/prometheus.go @@ -26,4 +26,12 @@ var ( Name: "events_processed_error_ops_total", Help: "The total number of processed events that failed due to an error", }) + MessagesNotReceivedOnDestChain = promauto.NewCounter(prometheus.CounterOpts{ + Name: "messages_not_received_on_dest_chain_opts_total", + Help: "The total number of messages that were not received on the destination chain", + }) + ErrorsEncounteredDuringSubscription = promauto.NewCounter(prometheus.CounterOpts{ + Name: "errors_encountered_during_subscription_opts_total", + Help: "The total number of errors that occured during active subscription", + }) ) diff --git a/packages/relayer/proof/encoded_signal_proof_test.go b/packages/relayer/proof/encoded_signal_proof_test.go index 7ae4c9a6f9a..bf375c4942c 100644 --- a/packages/relayer/proof/encoded_signal_proof_test.go +++ b/packages/relayer/proof/encoded_signal_proof_test.go @@ -12,7 +12,7 @@ import ( var ( // nolint: lll - wantEncoded = "0x0000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000003603a537c89809712367218bb171b3b1c46aa95df3dee7200ae9dc78f40520240681dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d4934700000000000000000000000000000000000000000000000000000000000000001dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d493471dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d493471dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000186a000000000000000000000000000000000000000000000000000000000000007d000000000000000000000000000000000000000000000000000000000000004d200000000000000000000000000000000000000000000000000000000000002e01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d493470000000000000000000000000000000000000000000000001300000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000017f0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c0000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000001c0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001c000000000000000000000000000000000000000000000000000000000000000" + wantEncoded = "0x0000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000003803a537c89809712367218bb171b3b1c46aa95df3dee7200ae9dc78f40520240681dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d4934700000000000000000000000000000000000000000000000000000000000000001dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d493471dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d493471dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000186a000000000000000000000000000000000000000000000000000000000000007d000000000000000000000000000000000000000000000000000000000000004d200000000000000000000000000000000000000000000000000000000000003001dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d4934700000000000000000000000000000000000000000000000013000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000017f0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c0000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000001c0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001c000000000000000000000000000000000000000000000000000000000000000" ) func Test_EncodedSignalProof(t *testing.T) { diff --git a/packages/relayer/types.go b/packages/relayer/types.go index f9d32388ff8..81ccf346669 100644 --- a/packages/relayer/types.go +++ b/packages/relayer/types.go @@ -9,6 +9,7 @@ import ( "github.com/ethereum/go-ethereum" "github.com/ethereum/go-ethereum/common" "github.com/ethereum/go-ethereum/core/types" + log "github.com/sirupsen/logrus" ) var ( @@ -37,6 +38,8 @@ func WaitReceipt(ctx context.Context, confirmer confirmer, txHash common.Hash) ( ticker := time.NewTicker(time.Second) defer ticker.Stop() + log.Infof("waiting for transaction receipt for txHash %v", txHash.Hex()) + for { select { case <-ctx.Done(): @@ -51,6 +54,8 @@ func WaitReceipt(ctx context.Context, confirmer confirmer, txHash common.Hash) ( return nil, fmt.Errorf("transaction reverted, hash: %s", txHash) } + log.Infof("transaction receipt found for txHash %v", txHash.Hex()) + return receipt, nil } } @@ -59,7 +64,10 @@ func WaitReceipt(ctx context.Context, confirmer confirmer, txHash common.Hash) ( // WaitConfirmations won't return before N blocks confirmations have been seen // on destination chain. func WaitConfirmations(ctx context.Context, confirmer confirmer, confirmations uint64, txHash common.Hash) error { - ticker := time.NewTicker(time.Second) + log.Infof("txHash %v beginning waiting for confirmations", txHash.Hex()) + + ticker := time.NewTicker(10 * time.Second) + defer ticker.Stop() for { @@ -73,6 +81,8 @@ func WaitConfirmations(ctx context.Context, confirmer confirmer, confirmations u continue } + log.Errorf("txHash: %v encountered error getting receipt: %v", txHash.Hex(), err) + return err } @@ -81,10 +91,21 @@ func WaitConfirmations(ctx context.Context, confirmer confirmer, confirmations u return err } + want := receipt.BlockNumber.Uint64() + confirmations + log.Infof( + "txHash: %v waiting for %v confirmations which will happen in block number: %v, latestBlockNumber: %v", + txHash.Hex(), + confirmations, + want, + latest, + ) + if latest < receipt.BlockNumber.Uint64()+confirmations { continue } + log.Infof("txHash %v received %v confirmations, done", txHash.Hex(), confirmations) + return nil } } diff --git a/packages/starter-dapp/.eslintignore b/packages/starter-dapp/.eslintignore deleted file mode 100644 index 4f8aac2c914..00000000000 --- a/packages/starter-dapp/.eslintignore +++ /dev/null @@ -1,6 +0,0 @@ -build -coverage -node_modules -example -LICENSES -public \ No newline at end of file diff --git a/packages/starter-dapp/.eslintrc.cjs b/packages/starter-dapp/.eslintrc.cjs deleted file mode 100644 index 93f2f346d30..00000000000 --- a/packages/starter-dapp/.eslintrc.cjs +++ /dev/null @@ -1,81 +0,0 @@ -module.exports = { - env: { - node: true, - browser: true, - es2021: true, - webextensions: true, - }, - extends: ["eslint:recommended"], - parser: "@typescript-eslint/parser", - parserOptions: { - ecmaVersion: "latest", - sourceType: "module", - extraFileExtensions: [".svelte"], - }, - plugins: ["svelte3", "@typescript-eslint"], - rules: { - "linebreak-style": ["error", "unix"], - quotes: ["error", "double"], - semi: ["error", "always"], - }, - ignorePatterns: ["node_modules"], // todo: lets lint that separately, or move it to its own package - settings: { - "svelte3/typescript": require("typescript"), - }, - overrides: [ - { - files: ["*.ts", "*.svelte"], - extends: [ - "plugin:@typescript-eslint/recommended", - "plugin:@typescript-eslint/recommended-requiring-type-checking", - ], - parserOptions: { - project: ["./tsconfig.json"], - tsconfigRootDir: __dirname, - }, - rules: { - "@typescript-eslint/no-inferrable-types": 0, - "@typescript-eslint/unbound-method": "off", - "@typescript-eslint/no-empty-interface": "off", - }, - }, - { - files: ["*.svelte"], - processor: "svelte3/svelte3", - // typescript and svelte dont work with template handlers yet. - // https://stackoverflow.com/questions/63337868/svelte-typescript-unexpected-tokensvelteparse-error-when-adding-type-to-an-ev - // we need these 3 rules to be able to do: - // on:change=(e) => anyFunctionHere(). - // when svelte is updated, we can remove these 5 rules for svelte files. - rules: { - "@typescript-eslint/no-explicit-any": "off", - "@typescript-eslint/no-implicit-any": "off", - "@typescript-eslint/no-unsafe-assignment": "off", - "@typescript-eslint/no-unsafe-member-access": "off", - "@typescript-eslint/no-unsafe-argument": "off", - "@typescript-eslint/no-unsafe-call": "off", - "@typescript-eslint/restrict-template-expressions": [ - "warn", - { - allowNumber: true, - allowBoolean: true, - allowNullish: true, - allowAny: true, - }, - ], - }, - }, - { - files: ["*.spec.ts"], - plugins: ["jest"], - rules: { - "@typescript-eslint/no-explicit-any": "off", - "@typescript-eslint/no-empty-function": "off", - "@typescript-eslint/no-unused-vars": "off", - "@typescript-eslint/no-unsafe-assignment": "off", - "@typescript-eslint/unbound-method": "off", - "jest/unbound-method": "error", - }, - }, - ], -}; diff --git a/packages/status-page/.default.env b/packages/status-page/.default.env index c69f749f491..1facacb4ff8 100644 --- a/packages/status-page/.default.env +++ b/packages/status-page/.default.env @@ -5,4 +5,5 @@ VITE_TAIKO_L2_ADDRESS="0x0000777700000000000000000000000000000001" VITE_TAIKO_L1_ADDRESS="0x7B3AF414448ba906f02a1CA307C56c4ADFF27ce7" VITE_L1_EXPLORER_URL="https://l1explorer.a1.taiko.xyz" VITE_L2_EXPLORER_URL="https://l2explorer.a1.taiko.xyz" -VITE_FEE_TOKEN_SYMBOL="TKO"; \ No newline at end of file +VITE_FEE_TOKEN_SYMBOL="TKO"; +VITE_ORACLE_PROVER_ADDRESS="0x1567CDAb5F7a69154e61A16D8Ff5eE6A3e991b39" \ No newline at end of file diff --git a/packages/status-page/.eslintignore b/packages/status-page/.eslintignore deleted file mode 100644 index 4f8aac2c914..00000000000 --- a/packages/status-page/.eslintignore +++ /dev/null @@ -1,6 +0,0 @@ -build -coverage -node_modules -example -LICENSES -public \ No newline at end of file diff --git a/packages/status-page/.eslintrc.cjs b/packages/status-page/.eslintrc.cjs deleted file mode 100644 index 93f2f346d30..00000000000 --- a/packages/status-page/.eslintrc.cjs +++ /dev/null @@ -1,81 +0,0 @@ -module.exports = { - env: { - node: true, - browser: true, - es2021: true, - webextensions: true, - }, - extends: ["eslint:recommended"], - parser: "@typescript-eslint/parser", - parserOptions: { - ecmaVersion: "latest", - sourceType: "module", - extraFileExtensions: [".svelte"], - }, - plugins: ["svelte3", "@typescript-eslint"], - rules: { - "linebreak-style": ["error", "unix"], - quotes: ["error", "double"], - semi: ["error", "always"], - }, - ignorePatterns: ["node_modules"], // todo: lets lint that separately, or move it to its own package - settings: { - "svelte3/typescript": require("typescript"), - }, - overrides: [ - { - files: ["*.ts", "*.svelte"], - extends: [ - "plugin:@typescript-eslint/recommended", - "plugin:@typescript-eslint/recommended-requiring-type-checking", - ], - parserOptions: { - project: ["./tsconfig.json"], - tsconfigRootDir: __dirname, - }, - rules: { - "@typescript-eslint/no-inferrable-types": 0, - "@typescript-eslint/unbound-method": "off", - "@typescript-eslint/no-empty-interface": "off", - }, - }, - { - files: ["*.svelte"], - processor: "svelte3/svelte3", - // typescript and svelte dont work with template handlers yet. - // https://stackoverflow.com/questions/63337868/svelte-typescript-unexpected-tokensvelteparse-error-when-adding-type-to-an-ev - // we need these 3 rules to be able to do: - // on:change=(e) => anyFunctionHere(). - // when svelte is updated, we can remove these 5 rules for svelte files. - rules: { - "@typescript-eslint/no-explicit-any": "off", - "@typescript-eslint/no-implicit-any": "off", - "@typescript-eslint/no-unsafe-assignment": "off", - "@typescript-eslint/no-unsafe-member-access": "off", - "@typescript-eslint/no-unsafe-argument": "off", - "@typescript-eslint/no-unsafe-call": "off", - "@typescript-eslint/restrict-template-expressions": [ - "warn", - { - allowNumber: true, - allowBoolean: true, - allowNullish: true, - allowAny: true, - }, - ], - }, - }, - { - files: ["*.spec.ts"], - plugins: ["jest"], - rules: { - "@typescript-eslint/no-explicit-any": "off", - "@typescript-eslint/no-empty-function": "off", - "@typescript-eslint/no-unused-vars": "off", - "@typescript-eslint/no-unsafe-assignment": "off", - "@typescript-eslint/unbound-method": "off", - "jest/unbound-method": "error", - }, - }, - ], -}; diff --git a/packages/status-page/src/App.svelte b/packages/status-page/src/App.svelte index d44797de51a..744db854b25 100644 --- a/packages/status-page/src/App.svelte +++ b/packages/status-page/src/App.svelte @@ -8,7 +8,6 @@ import { ethers } from "ethers"; setupI18n({ withLocale: "en" }); - console.log(import.meta.env.VITE_L1_RPC_URL); const l1Provider = new ethers.providers.JsonRpcProvider( import.meta.env.VITE_L1_RPC_URL ); @@ -27,6 +26,9 @@ l1ExplorerUrl: import.meta.env.VITE_L1_EXPLORER_URL, l2ExplorerUrl: import.meta.env.VITE_L2_EXPLORER_URL, feeTokenSymbol: import.meta.env.FEE_TOKEN_SYMBOL || "TKO", + oracleProverAddress: + import.meta.env.ORACLE_PROVER_ADDRESS || + "0x1567CDAb5F7a69154e61A16D8Ff5eE6A3e991b39", }, userData: {}, }), diff --git a/packages/status-page/src/constants/abi/HeaderSync.ts b/packages/status-page/src/constants/abi/HeaderSync.ts index 0ce81c2ba66..2b47742c0cd 100644 --- a/packages/status-page/src/constants/abi/HeaderSync.ts +++ b/packages/status-page/src/constants/abi/HeaderSync.ts @@ -2,12 +2,6 @@ export default [ { anonymous: false, inputs: [ - { - indexed: true, - internalType: "uint256", - name: "height", - type: "uint256", - }, { indexed: true, internalType: "uint256", diff --git a/packages/status-page/src/constants/abi/TaikoL1.ts b/packages/status-page/src/constants/abi/TaikoL1.ts index 807baeafe70..72b441cd597 100644 --- a/packages/status-page/src/constants/abi/TaikoL1.ts +++ b/packages/status-page/src/constants/abi/TaikoL1.ts @@ -1,4 +1,219 @@ export default [ + { + inputs: [], + name: "L1_0_FEE_BASE", + type: "error", + }, + { + inputs: [], + name: "L1_0_FEE_BASE", + type: "error", + }, + { + inputs: [], + name: "L1_ALREADY_PROVEN", + type: "error", + }, + { + inputs: [], + name: "L1_ANCHOR_CALLDATA", + type: "error", + }, + { + inputs: [], + name: "L1_ANCHOR_DEST", + type: "error", + }, + { + inputs: [], + name: "L1_ANCHOR_GAS_LIMIT", + type: "error", + }, + { + inputs: [], + name: "L1_ANCHOR_RECEIPT_ADDR", + type: "error", + }, + { + inputs: [], + name: "L1_ANCHOR_RECEIPT_DATA", + type: "error", + }, + { + inputs: [], + name: "L1_ANCHOR_RECEIPT_LOGS", + type: "error", + }, + { + inputs: [], + name: "L1_ANCHOR_RECEIPT_PROOF", + type: "error", + }, + { + inputs: [], + name: "L1_ANCHOR_RECEIPT_STATUS", + type: "error", + }, + { + inputs: [], + name: "L1_ANCHOR_RECEIPT_TOPICS", + type: "error", + }, + { + inputs: [], + name: "L1_ANCHOR_SIG_R", + type: "error", + }, + { + inputs: [], + name: "L1_ANCHOR_SIG_S", + type: "error", + }, + { + inputs: [], + name: "L1_ANCHOR_TX_PROOF", + type: "error", + }, + { + inputs: [], + name: "L1_ANCHOR_TYPE", + type: "error", + }, + { + inputs: [], + name: "L1_BLOCK_NUMBER", + type: "error", + }, + { + inputs: [], + name: "L1_BLOCK_NUMBER", + type: "error", + }, + { + inputs: [], + name: "L1_CANNOT_BE_FIRST_PROVER", + type: "error", + }, + { + inputs: [], + name: "L1_COMMITTED", + type: "error", + }, + { + inputs: [], + name: "L1_CONFLICT_PROOF", + type: "error", + }, + { + inputs: [], + name: "L1_CONTRACT_NOT_ALLOWED", + type: "error", + }, + { + inputs: [], + name: "L1_DUP_PROVERS", + type: "error", + }, + { + inputs: [], + name: "L1_EXTRA_DATA", + type: "error", + }, + { + inputs: [], + name: "L1_GAS_LIMIT", + type: "error", + }, + { + inputs: [], + name: "L1_ID", + type: "error", + }, + { + inputs: [], + name: "L1_ID", + type: "error", + }, + { + inputs: [], + name: "L1_INPUT_SIZE", + type: "error", + }, + { + inputs: [], + name: "L1_INVALID_CONFIG", + type: "error", + }, + { + inputs: [], + name: "L1_INVALID_CONFIG", + type: "error", + }, + { + inputs: [], + name: "L1_INVALID_PARAM", + type: "error", + }, + { + inputs: [], + name: "L1_METADATA_FIELD", + type: "error", + }, + { + inputs: [], + name: "L1_META_MISMATCH", + type: "error", + }, + { + inputs: [], + name: "L1_NOT_COMMITTED", + type: "error", + }, + { + inputs: [], + name: "L1_NOT_ORACLE_PROVER", + type: "error", + }, + { + inputs: [], + name: "L1_PROOF_LENGTH", + type: "error", + }, + { + inputs: [], + name: "L1_PROVER", + type: "error", + }, + { + inputs: [], + name: "L1_SOLO_PROPOSER", + type: "error", + }, + { + inputs: [], + name: "L1_TOO_MANY_BLOCKS", + type: "error", + }, + { + inputs: [], + name: "L1_TX_LIST", + type: "error", + }, + { + inputs: [], + name: "L1_ZKP", + type: "error", + }, + { + inputs: [], + name: "RESOLVER_DENIED", + type: "error", + }, + { + inputs: [], + name: "RESOLVER_INVALID_ADDR", + type: "error", + }, { anonymous: false, inputs: [ @@ -8,12 +223,6 @@ export default [ name: "commitSlot", type: "uint64", }, - { - indexed: false, - internalType: "uint64", - name: "commitHeight", - type: "uint64", - }, { indexed: false, internalType: "bytes32", @@ -123,9 +332,9 @@ export default [ }, { indexed: false, - internalType: "uint64", - name: "timestamp", - type: "uint64", + internalType: "address", + name: "prover", + type: "address", }, { indexed: false, @@ -133,12 +342,6 @@ export default [ name: "provenAt", type: "uint64", }, - { - indexed: false, - internalType: "address", - name: "prover", - type: "address", - }, ], name: "BlockProven", type: "event", @@ -165,25 +368,6 @@ export default [ { anonymous: false, inputs: [ - { - indexed: false, - internalType: "bool", - name: "halted", - type: "bool", - }, - ], - name: "Halted", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: true, - internalType: "uint256", - name: "height", - type: "uint256", - }, { indexed: true, internalType: "uint256", @@ -297,11 +481,6 @@ export default [ name: "blockHashHistory", type: "uint256", }, - { - internalType: "uint256", - name: "zkProofsPerBlock", - type: "uint256", - }, { internalType: "uint256", name: "maxVerificationsPerTx", @@ -312,11 +491,6 @@ export default [ name: "commitConfirmations", type: "uint256", }, - { - internalType: "uint256", - name: "maxProofsPerForkChoice", - type: "uint256", - }, { internalType: "uint256", name: "blockMaxGasLimit", @@ -344,7 +518,7 @@ export default [ }, { internalType: "uint256", - name: "feePremiumLamda", + name: "slotSmoothingFactor", type: "uint256", }, { @@ -402,11 +576,6 @@ export default [ name: "bootstrapDiscountHalvingPeriod", type: "uint64", }, - { - internalType: "uint64", - name: "initialUncleDelay", - type: "uint64", - }, { internalType: "bool", name: "enableTokenomics", @@ -422,11 +591,6 @@ export default [ name: "enableAnchorValidation", type: "bool", }, - { - internalType: "bool", - name: "enableOracleProver", - type: "bool", - }, ], internalType: "struct TaikoData.Config", name: "", @@ -458,16 +622,16 @@ export default [ name: "blockHash", type: "bytes32", }, + { + internalType: "address", + name: "prover", + type: "address", + }, { internalType: "uint64", name: "provenAt", type: "uint64", }, - { - internalType: "address[]", - name: "provers", - type: "address[]", - }, ], internalType: "struct TaikoData.ForkChoice", name: "", @@ -555,6 +719,25 @@ export default [ stateMutability: "view", type: "function", }, + { + inputs: [ + { + internalType: "address", + name: "addr", + type: "address", + }, + ], + name: "getRewardBalance", + outputs: [ + { + internalType: "uint256", + name: "", + type: "uint256", + }, + ], + stateMutability: "view", + type: "function", + }, { inputs: [], name: "getStateVariables", @@ -562,25 +745,20 @@ export default [ { components: [ { - internalType: "uint64", - name: "genesisHeight", - type: "uint64", + internalType: "uint256", + name: "feeBase", + type: "uint256", }, { internalType: "uint64", - name: "genesisTimestamp", + name: "genesisHeight", type: "uint64", }, { internalType: "uint64", - name: "statusBits", + name: "genesisTimestamp", type: "uint64", }, - { - internalType: "uint256", - name: "feeBase", - type: "uint256", - }, { internalType: "uint64", name: "nextBlockId", @@ -639,38 +817,6 @@ export default [ stateMutability: "view", type: "function", }, - { - inputs: [ - { - internalType: "uint256", - name: "blockId", - type: "uint256", - }, - ], - name: "getUncleProofDelay", - outputs: [ - { - internalType: "uint64", - name: "", - type: "uint64", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "bool", - name: "toHalt", - type: "bool", - }, - ], - name: "halt", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, { inputs: [ { @@ -694,30 +840,6 @@ export default [ stateMutability: "nonpayable", type: "function", }, - { - inputs: [ - { - internalType: "uint256", - name: "blockId", - type: "uint256", - }, - { - internalType: "bytes32", - name: "parentHash", - type: "bytes32", - }, - ], - name: "isBlockVerifiable", - outputs: [ - { - internalType: "bool", - name: "", - type: "bool", - }, - ], - stateMutability: "view", - type: "function", - }, { inputs: [ { @@ -747,19 +869,6 @@ export default [ stateMutability: "view", type: "function", }, - { - inputs: [], - name: "isHalted", - outputs: [ - { - internalType: "bool", - name: "", - type: "bool", - }, - ], - stateMutability: "view", - type: "function", - }, { inputs: [], name: "owner", @@ -937,7 +1046,7 @@ export default [ }, { internalType: "uint64", - name: "statusBits", + name: "__reservedA2", type: "uint64", }, { @@ -1015,4 +1124,11 @@ export default [ stateMutability: "nonpayable", type: "function", }, + { + inputs: [], + name: "withdrawBalance", + outputs: [], + stateMutability: "nonpayable", + type: "function", + }, ]; diff --git a/packages/status-page/src/pages/home/Home.svelte b/packages/status-page/src/pages/home/Home.svelte index 63d06eeca05..5d6175383e9 100644 --- a/packages/status-page/src/pages/home/Home.svelte +++ b/packages/status-page/src/pages/home/Home.svelte @@ -25,6 +25,7 @@ export let l1ExplorerUrl: string; export let l2ExplorerUrl: string; export let feeTokenSymbol: string; + export let oracleProverAddress: string; let statusIndicators: StatusIndicatorProp[] = [ { @@ -227,9 +228,15 @@ onEvent: (value: Status) => void ) => { const contract = new Contract(address, TaikoL1, provider); - contract.on("BlockProven", (id, parentHash, blockHash, timestamp) => { - onEvent(new Date(timestamp.toNumber() * 1000).toString()); - }); + contract.on( + "BlockProven", + (id, parentHash, blockHash, prover, provenAt) => { + // ignore oracle prover + if (prover.toLowerCase() !== oracleProverAddress.toLowerCase()) { + onEvent(new Date(provenAt.toNumber()).toString()); + } + } + ); }, colorFunc: function (status: Status) { return "green"; // todo: whats green, yellow, red? @@ -245,7 +252,7 @@ address: string ) => { const stateVars = await getStateVariables(provider, address); - return stateVars.avgProofTime.toNumber(); + return `${stateVars.avgProofTime.toNumber()} seconds`; }, colorFunc: function (status: Status) { return "green"; // todo: whats green, yellow, red? diff --git a/packages/status-page/src/utils/getProofReward.ts b/packages/status-page/src/utils/getProofReward.ts index 8bfcd4dbf42..70dad92b853 100644 --- a/packages/status-page/src/utils/getProofReward.ts +++ b/packages/status-page/src/utils/getProofReward.ts @@ -9,7 +9,7 @@ export const getProofReward = async ( const contract: Contract = new Contract(contractAddress, TaikoL1, provider); const state = await contract.getStateVariables(); const fee = await contract.getProofReward( - new Date().getMilliseconds(), + ~~(new Date().getTime() / 1000), state.lastProposedAt ); return truncateString(ethers.utils.formatEther(fee), 8); diff --git a/packages/status-page/src/utils/watchHeaderSynced.ts b/packages/status-page/src/utils/watchHeaderSynced.ts index e101647e35e..127f32a98ad 100644 --- a/packages/status-page/src/utils/watchHeaderSynced.ts +++ b/packages/status-page/src/utils/watchHeaderSynced.ts @@ -7,7 +7,7 @@ export const watchHeaderSynced = async ( onEvent: (value: string | number | boolean) => void ) => { const contract: Contract = new Contract(taikoL1Address, TaikoL1, provider); - contract.on("HeaderSynced", (height, srcHeight, srcHash) => { + contract.on("HeaderSynced", (srcHeight, srcHash) => { onEvent(srcHash); }); };