diff --git a/go.mod b/go.mod index c3dbbdec..65c117ac 100644 --- a/go.mod +++ b/go.mod @@ -7,7 +7,7 @@ replace github.com/btcsuite/btcd => github.com/btcsuite/btcd v0.22.0-beta exclude github.com/btcsuite/btcd/chaincfg/chainhash v1.0.2 require ( - cosmossdk.io/api v0.7.6 + cosmossdk.io/api v0.9.2 cosmossdk.io/collections v0.4.0 cosmossdk.io/core v0.11.0 cosmossdk.io/depinject v1.2.1 @@ -27,17 +27,17 @@ require ( github.com/libp2p/go-libp2p-pubsub v0.14.0 github.com/multiformats/go-multiaddr v0.15.0 github.com/prometheus/client_golang v1.22.0 - github.com/rollkit/rollkit v0.14.2-0.20250603093058-6a441b7b3018 - github.com/rollkit/rollkit/core v0.0.0-20250529164851-d4b4a1e88558 - github.com/rollkit/rollkit/da v0.0.0-20250526094218-4a5686055970 - github.com/rollkit/rollkit/sequencers/single v0.0.0-20250526094218-4a5686055970 + github.com/rollkit/rollkit v0.14.2-0.20250609100102-37f58596c74c + github.com/rollkit/rollkit/core v0.0.0-20250609100102-37f58596c74c + github.com/rollkit/rollkit/da v0.0.0-20250609100102-37f58596c74c + github.com/rollkit/rollkit/sequencers/single v0.0.0-20250609100102-37f58596c74c github.com/rs/cors v1.11.1 github.com/spf13/cobra v1.9.1 github.com/stretchr/testify v1.10.0 - golang.org/x/net v0.40.0 - golang.org/x/sync v0.14.0 + golang.org/x/net v0.41.0 + golang.org/x/sync v0.15.0 google.golang.org/genproto/googleapis/api v0.0.0-20250505200425-f936aa4a68b2 - google.golang.org/grpc v1.72.2 + google.golang.org/grpc v1.73.0 ) require ( @@ -57,14 +57,14 @@ require ( connectrpc.com/connect v1.18.1 // indirect connectrpc.com/grpcreflect v1.3.0 // indirect connectrpc.com/otelconnect v0.7.2 // indirect - cosmossdk.io/store v1.1.1 // indirect + cosmossdk.io/store v1.1.2 // indirect cosmossdk.io/x/tx v0.13.7 // indirect filippo.io/edwards25519 v1.0.0 // indirect github.com/99designs/go-keychain v0.0.0-20191008050251-8e49817e8af4 // indirect github.com/99designs/keyring v1.2.1 // indirect github.com/Azure/go-ansiterm v0.0.0-20250102033503-faa5f7b0171c // indirect github.com/DataDog/datadog-go v3.2.0+incompatible // indirect - github.com/DataDog/zstd v1.5.5 // indirect + github.com/DataDog/zstd v1.5.6 // indirect github.com/Microsoft/go-winio v0.6.2 // indirect github.com/antlr4-go/antlr/v4 v4.13.1 // indirect github.com/benbjohnson/clock v1.3.5 // indirect @@ -157,10 +157,10 @@ require ( github.com/grpc-ecosystem/go-grpc-middleware v1.4.0 // indirect github.com/gsterjov/go-libsecret v0.0.0-20161001094733-a6f4afe4910c // indirect github.com/hashicorp/errwrap v1.1.0 // indirect - github.com/hashicorp/go-hclog v1.5.0 // indirect + github.com/hashicorp/go-hclog v1.6.3 // indirect github.com/hashicorp/go-immutable-radix v1.3.1 // indirect github.com/hashicorp/go-multierror v1.1.1 // indirect - github.com/hashicorp/go-plugin v1.5.2 // indirect + github.com/hashicorp/go-plugin v1.6.3 // indirect github.com/hashicorp/golang-lru v1.0.2 // indirect github.com/hashicorp/golang-lru/v2 v2.0.7 // indirect github.com/hashicorp/hcl v1.0.0 // indirect @@ -175,7 +175,7 @@ require ( github.com/ipfs/go-cid v0.5.0 // indirect github.com/ipfs/go-ds-badger4 v0.1.8 // indirect github.com/ipfs/go-log v1.0.5 // indirect - github.com/ipfs/go-log/v2 v2.5.1 // indirect + github.com/ipfs/go-log/v2 v2.6.0 // indirect github.com/ipld/go-ipld-prime v0.21.0 // indirect github.com/jackpal/go-nat-pmp v1.0.2 // indirect github.com/jbenet/go-temp-err-catcher v0.1.0 // indirect @@ -211,7 +211,6 @@ require ( github.com/minio/highwayhash v1.0.3 // indirect github.com/minio/sha256-simd v1.0.1 // indirect github.com/mitchellh/go-homedir v1.1.0 // indirect - github.com/mitchellh/go-testing-interface v1.14.1 // indirect github.com/mitchellh/mapstructure v1.5.0 // indirect github.com/moby/docker-image-spec v1.3.1 // indirect github.com/moby/go-archive v0.1.0 // indirect @@ -326,12 +325,12 @@ require ( go.uber.org/zap v1.27.0 // indirect go.uber.org/zap/exp v0.3.0 // indirect golang.org/x/arch v0.15.0 // indirect - golang.org/x/crypto v0.38.0 // indirect + golang.org/x/crypto v0.39.0 // indirect golang.org/x/exp v0.0.0-20250506013437-ce4c2cf36ca6 // indirect - golang.org/x/mod v0.24.0 // indirect + golang.org/x/mod v0.25.0 // indirect golang.org/x/sys v0.33.0 // indirect golang.org/x/term v0.32.0 // indirect - golang.org/x/text v0.25.0 // indirect + golang.org/x/text v0.26.0 // indirect golang.org/x/tools v0.33.0 // indirect golang.org/x/xerrors v0.0.0-20240903120638-7835f813f4da // indirect gonum.org/v1/gonum v0.15.1 // indirect diff --git a/go.sum b/go.sum index fde11671..4d830ff5 100644 --- a/go.sum +++ b/go.sum @@ -34,8 +34,8 @@ connectrpc.com/grpcreflect v1.3.0 h1:Y4V+ACf8/vOb1XOc251Qun7jMB75gCUNw6llvB9csXc connectrpc.com/grpcreflect v1.3.0/go.mod h1:nfloOtCS8VUQOQ1+GTdFzVg2CJo4ZGaat8JIovCtDYs= connectrpc.com/otelconnect v0.7.2 h1:WlnwFzaW64dN06JXU+hREPUGeEzpz3Acz2ACOmN8cMI= connectrpc.com/otelconnect v0.7.2/go.mod h1:JS7XUKfuJs2adhCnXhNHPHLz6oAaZniCJdSF00OZSew= -cosmossdk.io/api v0.7.6 h1:PC20PcXy1xYKH2KU4RMurVoFjjKkCgYRbVAD4PdqUuY= -cosmossdk.io/api v0.7.6/go.mod h1:IcxpYS5fMemZGqyYtErK7OqvdM0C8kdW3dq8Q/XIG38= +cosmossdk.io/api v0.9.2 h1:9i9ptOBdmoIEVEVWLtYYHjxZonlF/aOVODLFaxpmNtg= +cosmossdk.io/api v0.9.2/go.mod h1:CWt31nVohvoPMTlPv+mMNCtC0a7BqRdESjCsstHcTkU= cosmossdk.io/collections v0.4.0 h1:PFmwj2W8szgpD5nOd8GWH6AbYNi1f2J6akWXJ7P5t9s= cosmossdk.io/collections v0.4.0/go.mod h1:oa5lUING2dP+gdDquow+QjlF45eL1t4TJDypgGd+tv0= cosmossdk.io/core v0.11.0 h1:vtIafqUi+1ZNAE/oxLOQQ7Oek2n4S48SWLG8h/+wdbo= @@ -48,8 +48,8 @@ cosmossdk.io/log v1.6.0 h1:SJIOmJ059wi1piyRgNRXKXhlDXGqnB5eQwhcZKv2tOk= cosmossdk.io/log v1.6.0/go.mod h1:5cXXBvfBkR2/BcXmosdCSLXllvgSjphrrDVdfVRmBGM= cosmossdk.io/math v1.5.3 h1:WH6tu6Z3AUCeHbeOSHg2mt9rnoiUWVWaQ2t6Gkll96U= cosmossdk.io/math v1.5.3/go.mod h1:uqcZv7vexnhMFJF+6zh9EWdm/+Ylyln34IvPnBauPCQ= -cosmossdk.io/store v1.1.1 h1:NA3PioJtWDVU7cHHeyvdva5J/ggyLDkyH0hGHl2804Y= -cosmossdk.io/store v1.1.1/go.mod h1:8DwVTz83/2PSI366FERGbWSH7hL6sB7HbYp8bqksNwM= +cosmossdk.io/store v1.1.2 h1:3HOZG8+CuThREKv6cn3WSohAc6yccxO3hLzwK6rBC7o= +cosmossdk.io/store v1.1.2/go.mod h1:60rAGzTHevGm592kFhiUVkNC9w7gooSEn5iUBPzHQ6A= cosmossdk.io/x/tx v0.13.7 h1:8WSk6B/OHJLYjiZeMKhq7DK7lHDMyK0UfDbBMxVmeOI= cosmossdk.io/x/tx v0.13.7/go.mod h1:V6DImnwJMTq5qFjeGWpXNiT/fjgE4HtmclRmTqRVM3w= dmitri.shuralyov.com/app/changes v0.0.0-20180602232624-0a106ad413e3/go.mod h1:Yl+fi1br7+Rr3LqpNJf1/uxUdtRUV+Tnj0o93V2B9MU= @@ -72,8 +72,8 @@ github.com/BurntSushi/toml v0.3.1/go.mod h1:xHWCNGjB5oqiDr8zfno3MHue2Ht5sIBksp03 github.com/BurntSushi/xgb v0.0.0-20160522181843-27f122750802/go.mod h1:IVnqGOEym/WlBOVXweHU+Q+/VP0lqqI8lqeDx9IjBqo= github.com/DataDog/datadog-go v3.2.0+incompatible h1:qSG2N4FghB1He/r2mFrWKCaL7dXCilEuNEeAn20fdD4= github.com/DataDog/datadog-go v3.2.0+incompatible/go.mod h1:LButxg5PwREeZtORoXG3tL4fMGNddJ+vMq1mwgfaqoQ= -github.com/DataDog/zstd v1.5.5 h1:oWf5W7GtOLgp6bciQYDmhHHjdhYkALu6S/5Ni9ZgSvQ= -github.com/DataDog/zstd v1.5.5/go.mod h1:g4AWEaM3yOg3HYfnJ3YIawPnVdXJh9QME85blwSAmyw= +github.com/DataDog/zstd v1.5.6 h1:LbEglqepa/ipmmQJUDnSsfvA8e8IStVcGaFWDuxvGOY= +github.com/DataDog/zstd v1.5.6/go.mod h1:g4AWEaM3yOg3HYfnJ3YIawPnVdXJh9QME85blwSAmyw= github.com/Knetic/govaluate v3.0.1-0.20171022003610-9aa49832a739+incompatible/go.mod h1:r7JcOSlj0wfOMncg0iLm8Leh48TZaKVeNIfJntJ2wa0= github.com/Microsoft/go-winio v0.6.2 h1:F2VQgta7ecxGYO8k3ZZz3RS8fVIXVxONVUPlNERoyfY= github.com/Microsoft/go-winio v0.6.2/go.mod h1:yd8OoFMLzJbo9gZq8j5qaps8bJ9aShtEA8Ipt1oGCvU= @@ -517,8 +517,8 @@ github.com/hashicorp/errwrap v1.1.0 h1:OxrOeh75EUXMY8TBjag2fzXGZ40LB6IKw45YeGUDY github.com/hashicorp/errwrap v1.1.0/go.mod h1:YH+1FKiLXxHSkmPseP+kNlulaMuP3n2brvKWEqk/Jc4= github.com/hashicorp/go-cleanhttp v0.5.0/go.mod h1:JpRdi6/HCYpAwUzNwuwqhbovhLtngrth3wmdIIUrZ80= github.com/hashicorp/go-cleanhttp v0.5.1/go.mod h1:JpRdi6/HCYpAwUzNwuwqhbovhLtngrth3wmdIIUrZ80= -github.com/hashicorp/go-hclog v1.5.0 h1:bI2ocEMgcVlz55Oj1xZNBsVi900c7II+fWDyV9o+13c= -github.com/hashicorp/go-hclog v1.5.0/go.mod h1:W4Qnvbt70Wk/zYJryRzDRU/4r0kIg0PVHBcfoyhpF5M= +github.com/hashicorp/go-hclog v1.6.3 h1:Qr2kF+eVWjTiYmU7Y31tYlP1h0q/X3Nl3tPGdaB11/k= +github.com/hashicorp/go-hclog v1.6.3/go.mod h1:W4Qnvbt70Wk/zYJryRzDRU/4r0kIg0PVHBcfoyhpF5M= github.com/hashicorp/go-immutable-radix v1.0.0/go.mod h1:0y9vanUI8NX6FsYoO3zeMjhV/C5i9g4Q3DwcSNZ4P60= github.com/hashicorp/go-immutable-radix v1.3.1 h1:DKHmCUm2hRBK510BaiZlwvpD40f8bJFeZnpfm2KLowc= github.com/hashicorp/go-immutable-radix v1.3.1/go.mod h1:0y9vanUI8NX6FsYoO3zeMjhV/C5i9g4Q3DwcSNZ4P60= @@ -528,8 +528,8 @@ github.com/hashicorp/go-msgpack v0.5.3/go.mod h1:ahLV/dePpqEmjfWmKiqvPkv/twdG7iP github.com/hashicorp/go-multierror v1.0.0/go.mod h1:dHtQlpGsu+cZNNAkkCN/P3hoUDHhCYQXV3UM06sGGrk= github.com/hashicorp/go-multierror v1.1.1 h1:H5DkEtf6CXdFp0N0Em5UCwQpXMWke8IA0+lD48awMYo= github.com/hashicorp/go-multierror v1.1.1/go.mod h1:iw975J/qwKPdAO1clOe2L8331t/9/fmwbPZ6JB6eMoM= -github.com/hashicorp/go-plugin v1.5.2 h1:aWv8eimFqWlsEiMrYZdPYl+FdHaBJSN4AWwGWfT1G2Y= -github.com/hashicorp/go-plugin v1.5.2/go.mod h1:w1sAEES3g3PuV/RzUrgow20W2uErMly84hhD3um1WL4= +github.com/hashicorp/go-plugin v1.6.3 h1:xgHB+ZUSYeuJi96WtxEjzi23uh7YQpznjGh0U0UUrwg= +github.com/hashicorp/go-plugin v1.6.3/go.mod h1:MRobyh+Wc/nYy1V4KAXUiYfzxoYhs7V1mlH1Z7iY2h0= github.com/hashicorp/go-retryablehttp v0.5.3/go.mod h1:9B5zBasrRhHXnJnui7y6sL7es7NDiJgTc6Er0maI1Xs= github.com/hashicorp/go-rootcerts v1.0.0/go.mod h1:K6zTfqpRlCUIjkwsN4Z+hiSfzSTQa6eBIzfwKfwNnHU= github.com/hashicorp/go-sockaddr v1.0.0/go.mod h1:7Xibr9yA9JjQq1JpNB2Vw7kxv8xerXegt+ozgdvDeDU= @@ -589,8 +589,8 @@ github.com/ipfs/go-ipfs-util v0.0.3/go.mod h1:LHzG1a0Ig4G+iZ26UUOMjHd+lfM84LZCrn github.com/ipfs/go-log v1.0.5 h1:2dOuUCB1Z7uoczMWgAyDck5JLb72zHzrMnGnCNNbvY8= github.com/ipfs/go-log v1.0.5/go.mod h1:j0b8ZoR+7+R99LD9jZ6+AJsrzkPbSXbZfGakb5JPtIo= github.com/ipfs/go-log/v2 v2.1.3/go.mod h1:/8d0SH3Su5Ooc31QlL1WysJhvyOTDCjcCZ9Axpmri6g= -github.com/ipfs/go-log/v2 v2.5.1 h1:1XdUzF7048prq4aBjDQQ4SL5RxftpRGdXhNRwKSAlcY= -github.com/ipfs/go-log/v2 v2.5.1/go.mod h1:prSpmC1Gpllc9UYWxDiZDreBYw7zp4Iqp1kOLU9U5UI= +github.com/ipfs/go-log/v2 v2.6.0 h1:2Nu1KKQQ2ayonKp4MPo6pXCjqw1ULc9iohRqWV5EYqg= +github.com/ipfs/go-log/v2 v2.6.0/go.mod h1:p+Efr3qaY5YXpx9TX7MoLCSEZX5boSWj9wh86P5HJa8= github.com/ipfs/go-test v0.0.4 h1:DKT66T6GBB6PsDFLoO56QZPrOmzJkqU1FZH5C9ySkew= github.com/ipfs/go-test v0.0.4/go.mod h1:qhIM1EluEfElKKM6fnWxGn822/z9knUGM1+I/OAQNKI= github.com/ipld/go-ipld-prime v0.21.0 h1:n4JmcpOlPDIxBcY037SVfpd1G+Sj1nKZah0m6QH9C2E= @@ -739,8 +739,6 @@ github.com/mitchellh/go-homedir v1.0.0/go.mod h1:SfyaCUpYCn1Vlf4IUYiD9fPX4A5wJrk github.com/mitchellh/go-homedir v1.1.0 h1:lukF9ziXFxDFPkA1vsr5zpc1XuPDn/wFntq5mG+4E0Y= github.com/mitchellh/go-homedir v1.1.0/go.mod h1:SfyaCUpYCn1Vlf4IUYiD9fPX4A5wJrkLzIz1N1q0pr0= github.com/mitchellh/go-testing-interface v1.0.0/go.mod h1:kRemZodwjscx+RGhAo8eIhFbs2+BFgRtFPeD/KE+zxI= -github.com/mitchellh/go-testing-interface v1.14.1 h1:jrgshOhYAUVNMAJiKbEu7EqAwgJJ2JqpQmpLJOu07cU= -github.com/mitchellh/go-testing-interface v1.14.1/go.mod h1:gfgS7OtZj6MA4U1UrDRp04twqAjfvlZyCfX3sDjEym8= github.com/mitchellh/gox v0.4.0/go.mod h1:Sd9lOJ0+aimLBi73mGofS1ycjY8lL3uZM3JPS42BGNg= github.com/mitchellh/iochan v1.0.0/go.mod h1:JwYml1nuB7xOzsp52dPpHFffvOCDupsG0QubkSMEySY= github.com/mitchellh/mapstructure v0.0.0-20160808181253-ca63d7c062ee/go.mod h1:FVVH3fgwuzCH5S8UJGiWEs2h04kUh9fWfEaFds41c1Y= @@ -1004,14 +1002,14 @@ github.com/rogpeppe/go-internal v1.3.0/go.mod h1:M8bDsm7K2OlrFYOpmOWEs/qY81heoFR github.com/rogpeppe/go-internal v1.9.0/go.mod h1:WtVeX8xhTBvf0smdhujwtBcq4Qrzq/fJaraNFVN+nFs= github.com/rogpeppe/go-internal v1.14.1 h1:UQB4HGPB6osV0SQTLymcB4TgvyWu6ZyliaW0tI/otEQ= github.com/rogpeppe/go-internal v1.14.1/go.mod h1:MaRKkUm5W0goXpeCfT7UZI6fk/L7L7so1lCWt35ZSgc= -github.com/rollkit/rollkit v0.14.2-0.20250603093058-6a441b7b3018 h1:RjotQTsOsy2nah1IkMUmZyfNE3b6NlJ+hiXSVpVPJS8= -github.com/rollkit/rollkit v0.14.2-0.20250603093058-6a441b7b3018/go.mod h1:Gw1i+hGmPp9Y7b05SXlqGj+tnXhzaiW/xs4wboXsEL0= -github.com/rollkit/rollkit/core v0.0.0-20250529164851-d4b4a1e88558 h1:0jWzjfP/DQSdsRYnIMPNAD7itd8Oq7roV3cu9MddTEA= -github.com/rollkit/rollkit/core v0.0.0-20250529164851-d4b4a1e88558/go.mod h1:0RhbqC8Is970KRhr6zPUQOZkmKt6/WqPRDQWfd2P7P0= -github.com/rollkit/rollkit/da v0.0.0-20250526094218-4a5686055970 h1:PnnQLIkI119NALSqI91peceGsqnBVyBBeyunk6auTpM= -github.com/rollkit/rollkit/da v0.0.0-20250526094218-4a5686055970/go.mod h1:MqbHTMhjb1PGbGaZ7bVddCm5OJg1+GMVEPpERdsO058= -github.com/rollkit/rollkit/sequencers/single v0.0.0-20250526094218-4a5686055970 h1:vQVPtGxKquSxE74CtA/kv2OmtyIDKivKYT8AcRjFNak= -github.com/rollkit/rollkit/sequencers/single v0.0.0-20250526094218-4a5686055970/go.mod h1:KVjWXmDUlMWSg/n+6QhJMueM9nigrDpydyzyAYky/A4= +github.com/rollkit/rollkit v0.14.2-0.20250609100102-37f58596c74c h1:3DDKkVPXNoCAqD2wolOAIeT1NGYU72H8i5TpVlUryN8= +github.com/rollkit/rollkit v0.14.2-0.20250609100102-37f58596c74c/go.mod h1:ZkMe60a1cascHjetgJ4CQo8W2f1B2X8h1va8Dw+BxDM= +github.com/rollkit/rollkit/core v0.0.0-20250609100102-37f58596c74c h1:WTFysVXcwIRsEllzUzJcc96y0tgPgHnKQVb3BppsqEQ= +github.com/rollkit/rollkit/core v0.0.0-20250609100102-37f58596c74c/go.mod h1:0RhbqC8Is970KRhr6zPUQOZkmKt6/WqPRDQWfd2P7P0= +github.com/rollkit/rollkit/da v0.0.0-20250609100102-37f58596c74c h1:hOeuZC89LBmbZDuimTgKrlHAHGCxif+epEbU38gWKj8= +github.com/rollkit/rollkit/da v0.0.0-20250609100102-37f58596c74c/go.mod h1:MqbHTMhjb1PGbGaZ7bVddCm5OJg1+GMVEPpERdsO058= +github.com/rollkit/rollkit/sequencers/single v0.0.0-20250609100102-37f58596c74c h1:7Qv8a+U51bBKu4kUT0CNvQBH3vF+5qdnVxn0x5jW8hI= +github.com/rollkit/rollkit/sequencers/single v0.0.0-20250609100102-37f58596c74c/go.mod h1:bLzu0dp498vvcrY3h7YYp7/RzBOsQekGdGf6sifv09c= github.com/rs/cors v1.7.0/go.mod h1:gFx+x8UowdsKA9AchylcLynDq+nNFfI8FkUZdN/jGCU= github.com/rs/cors v1.11.1 h1:eU3gRzXLRK57F5rKMGMZURNdIG4EoAmX8k94r9wXWHA= github.com/rs/cors v1.11.1/go.mod h1:XyqrcTp5zjWr1wsJ8PIRZssZ8b/WMcMf71DJnit4EMU= @@ -1213,7 +1211,6 @@ go.uber.org/dig v1.18.1/go.mod h1:Us0rSJiThwCv2GteUN0Q7OKvU7n5J4dxZ9JKUXozFdE= go.uber.org/fx v1.23.0 h1:lIr/gYWQGfTwGcSXWXu4vP5Ws6iqnNEIY+F/aFzCKTg= go.uber.org/fx v1.23.0/go.mod h1:o/D9n+2mLP6v1EG+qsdT1O8wKopYAsqZasju97SDFCU= go.uber.org/goleak v1.1.10/go.mod h1:8a7PlsEVH3e/a/GLqe5IIrQx6GzcnRmZEufDUTk4A7A= -go.uber.org/goleak v1.1.11-0.20210813005559-691160354723/go.mod h1:cwTWslyiVhfpKIDGSZEM2HlOvcqm+tG4zioyIeLoqMQ= go.uber.org/goleak v1.3.0 h1:2K3zAYmnTNqV73imy9J1T3WC+gmCePx2hEGkimedGto= go.uber.org/goleak v1.3.0/go.mod h1:CoHD4mav9JJNrW/WLlf7HGZPjdw8EucARQHekz1X6bE= go.uber.org/mock v0.5.2 h1:LbtPTcP8A5k9WPXj54PPPbjcI4Y6lhyOZXn+VS7wNko= @@ -1229,7 +1226,6 @@ go.uber.org/zap v1.10.0/go.mod h1:vwi/ZaCAaUcBkycHslxD9B2zi4UTXhF60s6SWpuDF0Q= go.uber.org/zap v1.13.0/go.mod h1:zwrFLgMcdUuIBviXEYEH1YKNaOBnKXsx2IPda5bBwHM= go.uber.org/zap v1.16.0/go.mod h1:MA8QOfq0BHJwdXa996Y4dYkAqRKB8/1K1QMMZVaNZjQ= go.uber.org/zap v1.18.1/go.mod h1:xg/QME4nWcxGxrpdeYfq7UvYrLh66cuVKdrbD1XF/NI= -go.uber.org/zap v1.19.1/go.mod h1:j3DNczoxDZroyBnOT1L/Q79cfUMGZxlv/9dzN7SM1rI= go.uber.org/zap v1.27.0 h1:aJMhYGrd5QSmlpLMr2MftRKl7t8J8PTZPA732ud/XR8= go.uber.org/zap v1.27.0/go.mod h1:GB2qFLM7cTU87MWRP2mPIjqfIDnGu+VIO4V/SdhGo2E= go.uber.org/zap/exp v0.3.0 h1:6JYzdifzYkGmTdRR59oYH+Ng7k49H9qVpWwNSsGJj3U= @@ -1255,8 +1251,8 @@ golang.org/x/crypto v0.0.0-20210921155107-089bfa567519/go.mod h1:GvvjBRRGRdwPK5y golang.org/x/crypto v0.8.0/go.mod h1:mRqEX+O9/h5TFCrQhkgjo2yKi0yYA+9ecGkdQoHrywE= golang.org/x/crypto v0.12.0/go.mod h1:NF0Gs7EO5K4qLn+Ylc+fih8BSTeIjAP05siRnAh98yw= golang.org/x/crypto v0.18.0/go.mod h1:R0j02AL6hcrfOiy9T4ZYp/rcWeMxM3L6QYxlOuEG1mg= -golang.org/x/crypto v0.38.0 h1:jt+WWG8IZlBnVbomuhg2Mdq0+BBQaHbtqHEFEigjUV8= -golang.org/x/crypto v0.38.0/go.mod h1:MvrbAqul58NNYPKnOra203SB9vpuZW0e+RRZV+Ggqjw= +golang.org/x/crypto v0.39.0 h1:SHs+kF4LP+f+p14esP5jAoDpHU8Gu/v9lFRK6IT5imM= +golang.org/x/crypto v0.39.0/go.mod h1:L+Xg3Wf6HoL4Bn4238Z6ft6KfEpN0tJGo53AAPC632U= golang.org/x/exp v0.0.0-20190121172915-509febef88a4/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA= golang.org/x/exp v0.0.0-20190306152737-a1d7652674e8/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA= golang.org/x/exp v0.0.0-20200331195152-e8c3332aa8e5/go.mod h1:4M0jN8W1tt0AVLNr8HDosyJCDCDuyL9N9+3m7wDWgKw= @@ -1280,8 +1276,8 @@ 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/go.mod h1:jJ57K6gSWd91VN4djpZkiMVwK6gcyfeH4XE8wZrZaV4= golang.org/x/mod v0.8.0/go.mod h1:iBbtSCu2XBx23ZKBPSOrRkjjQPZFPuis4dIYUhu/chs= -golang.org/x/mod v0.24.0 h1:ZfthKaKaT4NrhGVZHO1/WDTwGES4De8KtWO0SIbNJMU= -golang.org/x/mod v0.24.0/go.mod h1:IXM97Txy2VM4PJ3gI61r1YEk/gAj6zAHN3AdZt6S9Ww= +golang.org/x/mod v0.25.0 h1:n7a+ZbQKQA/Ysbyb0/6IbB1H/X41mKgbhfv7AfG/44w= +golang.org/x/mod v0.25.0/go.mod h1:IXM97Txy2VM4PJ3gI61r1YEk/gAj6zAHN3AdZt6S9Ww= 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= @@ -1321,8 +1317,8 @@ golang.org/x/net v0.9.0/go.mod h1:d48xBJpPfHeWQsugry2m+kC02ZBRGRgulfHnEXEuWns= golang.org/x/net v0.10.0/go.mod h1:0qNGK6F8kojg2nk9dLZ2mShWaEBan6FAoqfSigmmuDg= golang.org/x/net v0.14.0/go.mod h1:PpSgVXXLK0OxS0F31C1/tv6XNguvCrnXIDrFMspZIUI= golang.org/x/net v0.20.0/go.mod h1:z8BVo6PvndSri0LbOE3hAn0apkU+1YvI6E70E9jsnvY= -golang.org/x/net v0.40.0 h1:79Xs7wF06Gbdcg4kdCCIQArK11Z1hr5POQ6+fIYHNuY= -golang.org/x/net v0.40.0/go.mod h1:y0hY0exeL2Pku80/zKK7tpntoX23cqL3Oa6njdgRtds= +golang.org/x/net v0.41.0 h1:vBTly1HeNPEn3wtREYfy4GZ/NECgw2Cnl+nK6Nz3uvw= +golang.org/x/net v0.41.0/go.mod h1:B/K4NNqkfmg07DQYrbwvSluqCJOOXwUjeb/5lOisjbA= golang.org/x/oauth2 v0.0.0-20180821212333-d2e6202438be/go.mod h1:N/0e6XlmueqKjAGxoOufVs8QHGRruUQn6yWY3a++T0U= golang.org/x/oauth2 v0.0.0-20181017192945-9dcd33a902f4/go.mod h1:N/0e6XlmueqKjAGxoOufVs8QHGRruUQn6yWY3a++T0U= golang.org/x/oauth2 v0.0.0-20181203162652-d668ce993890/go.mod h1:N/0e6XlmueqKjAGxoOufVs8QHGRruUQn6yWY3a++T0U= @@ -1340,8 +1336,8 @@ golang.org/x/sync v0.0.0-20201207232520-09787c993a3a/go.mod h1:RxMgew5VJxzue5/jJ golang.org/x/sync v0.0.0-20210220032951-036812b2e83c/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20220722155255-886fb9371eb4/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.1.0/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= -golang.org/x/sync v0.14.0 h1:woo0S4Yywslg6hp4eUFjTVOyKt0RookbpAHG4c1HmhQ= -golang.org/x/sync v0.14.0/go.mod h1:1dzgHSNfp02xaA81J2MS99Qcpr2w7fw1gpm99rleRqA= +golang.org/x/sync v0.15.0 h1:KWH3jNZsfyT6xfAfKiz6MRNmd46ByHDYaZ7KSkCtdW8= +golang.org/x/sync v0.15.0/go.mod h1:1dzgHSNfp02xaA81J2MS99Qcpr2w7fw1gpm99rleRqA= golang.org/x/sys v0.0.0-20180810173357-98c5dad5d1a0/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20180823144017-11551d06cbcc/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20180830151530-49385e6e1522/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= @@ -1431,8 +1427,8 @@ golang.org/x/text v0.7.0/go.mod h1:mrYo+phRRbMaCq/xk9113O4dZlRixOauAjOtrjsXDZ8= golang.org/x/text v0.9.0/go.mod h1:e1OnstbJyHTd6l/uOt8jFFHp6TRDWZR/bV3emEE/zU8= golang.org/x/text v0.12.0/go.mod h1:TvPlkZtksWOMsz7fbANvkp4WM8x/WCo/om8BMLbz+aE= golang.org/x/text v0.14.0/go.mod h1:18ZOQIKpY8NJVqYksKHtTdi31H5itFRjB5/qKTNYzSU= -golang.org/x/text v0.25.0 h1:qVyWApTSYLk/drJRO5mDlNYskwQznZmkpV2c8q9zls4= -golang.org/x/text v0.25.0/go.mod h1:WEdwpYrmk1qmdHvhkSTNPm3app7v4rsT8F2UD6+VHIA= +golang.org/x/text v0.26.0 h1:P42AVeLghgTYr4+xUnTRKDMqpar+PtX7KWuNQL21L8M= +golang.org/x/text v0.26.0/go.mod h1:QK15LZJUUQVJxhz7wXgxSy/CJaTFjd0G+YLonydOVQA= 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-20191024005414-555d28b269f0/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= @@ -1461,7 +1457,6 @@ golang.org/x/tools v0.0.0-20200619180055-7c47624df98f/go.mod h1:EkVYQZoAsY45+roY golang.org/x/tools v0.0.0-20201224043029-2b0845dc783e/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA= 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.5/go.mod h1:o0xws9oXOQQZyjljx8fwUC0k7L1pTE6eaCbjGeHmOkk= golang.org/x/tools v0.1.12/go.mod h1:hNGJHUnrk76NpqgfD5Aqm5Crs+Hm0VOH/i9J2+nxYbc= golang.org/x/tools v0.6.0/go.mod h1:Xwgl3UAJ/d3gWutnCtw505GrjyAbvKui8lOU390QaIU= golang.org/x/tools v0.33.0 h1:4qz2S3zmRxbGIhDIAgjxvFutSvH5EfnsYrRBj0UI0bc= @@ -1523,8 +1518,8 @@ google.golang.org/grpc v1.33.2/go.mod h1:JMHMWHQWaTccqQQlmk3MJZS+GWXOdAesneDmEnv google.golang.org/grpc v1.36.0/go.mod h1:qjiiYl8FncCW8feJPdyg3v6XW24KsRHe+dy9BAGRRjU= google.golang.org/grpc v1.45.0/go.mod h1:lN7owxKUQEqMfSyQikvvk5tf/6zMPsrK+ONuO11+0rQ= google.golang.org/grpc v1.49.0/go.mod h1:ZgQEeidpAuNRZ8iRrlBKXZQP1ghovWIVhdJRyCDK+GI= -google.golang.org/grpc v1.72.2 h1:TdbGzwb82ty4OusHWepvFWGLgIbNo1/SUynEN0ssqv8= -google.golang.org/grpc v1.72.2/go.mod h1:wH5Aktxcg25y1I3w7H69nHfXdOG3UiadoBtjh3izSDM= +google.golang.org/grpc v1.73.0 h1:VIWSmpI2MegBtTuFt5/JWy2oXxtjJ/e89Z70ImfD2ok= +google.golang.org/grpc v1.73.0/go.mod h1:50sbHOUqWoCQGI8V2HQLJM0B+LMlIUjNSZmow7EVBQc= google.golang.org/protobuf v0.0.0-20200109180630-ec00e32a8dfd/go.mod h1:DFci5gLYBciE7Vtevhsrf46CRTquxDuWsQurQQe4oz8= google.golang.org/protobuf v0.0.0-20200221191635-4d8936d0db64/go.mod h1:kwYJMbMJ01Woi6D6+Kah6886xMZcty6N08ah7+eCXa0= google.golang.org/protobuf v0.0.0-20200228230310-ab0ca4ff8a60/go.mod h1:cfTl7dwQJ+fmap5saPgwCLgHXTUD7jkjRqWcaiX5VyM= diff --git a/pkg/adapter/adapter.go b/pkg/adapter/adapter.go index 5f19b972..69f18a57 100644 --- a/pkg/adapter/adapter.go +++ b/pkg/adapter/adapter.go @@ -23,12 +23,15 @@ import ( host "github.com/libp2p/go-libp2p/core/host" ma "github.com/multiformats/go-multiaddr" + "github.com/rollkit/rollkit/block" "github.com/rollkit/rollkit/core/execution" rollnode "github.com/rollkit/rollkit/node" rollkitp2p "github.com/rollkit/rollkit/pkg/p2p" + "github.com/rollkit/rollkit/pkg/signer" rstore "github.com/rollkit/rollkit/pkg/store" - "github.com/rollkit/rollkit/types" + rolltypes "github.com/rollkit/rollkit/types" + "github.com/rollkit/go-execution-abci/pkg/cometcompat" "github.com/rollkit/go-execution-abci/pkg/p2p" ) @@ -59,6 +62,8 @@ type Adapter struct { RollkitStore rstore.Store Mempool mempool.Mempool MempoolIDs *mempoolIDs + // Signer is only used to be passed down to RPC via environment. + Signer signer.Signer P2PClient P2PClientInfo TxGossiper *p2p.Gossiper @@ -82,6 +87,7 @@ func NewABCIExecutor( cfg *config.Config, appGenesis *genutiltypes.AppGenesis, metrics *Metrics, + signer signer.Signer, ) *Adapter { if metrics == nil { metrics = NopMetrics() @@ -104,6 +110,7 @@ func NewABCIExecutor( p2pMetrics: p2pMetrics, AppGenesis: appGenesis, MempoolIDs: newMempoolIDs(), + Signer: signer, Metrics: metrics, } @@ -283,7 +290,6 @@ func (a *Adapter) ExecuteTxs( blockHeight uint64, timestamp time.Time, prevStateRoot []byte, - metadata map[string]interface{}, ) ([]byte, uint64, error) { execStart := time.Now() defer func() { @@ -292,18 +298,40 @@ func (a *Adapter) ExecuteTxs( a.Logger.Info("Executing block", "height", blockHeight, "num_txs", len(txs), "timestamp", timestamp) a.Metrics.TxsExecutedPerBlock.Observe(float64(len(txs))) - var headerHash types.Hash - if h, ok := metadata[types.HeaderHashKey]; ok { - headerHash = h.(types.Hash) - } else { - a.Logger.Info("header hash not found in metadata, running genesis block") - } - s, err := a.Store.LoadState(ctx) if err != nil { return nil, 0, fmt.Errorf("failed to load state: %w", err) } + header, ok := ctx.Value(block.HeaderContextKey).(rolltypes.SignedHeader) + if !ok { + return nil, 0, fmt.Errorf("rollkit header not found in context") + } + + signerPubKey, err := a.Signer.GetPublic() + if err != nil { + return nil, 0, fmt.Errorf("failed to get signer public key: %w", err) + } + + if err := header.SetCustomVerifier(func(header *rolltypes.Header) ([]byte, error) { + return cometcompat.SignaturePayloadProvider(signerPubKey, header) + }); err != nil { + return nil, 0, fmt.Errorf("failed to set custom verifier: %w", err) + } + + if err := header.ValidateBasic(); err != nil { + return nil, 0, fmt.Errorf("header validation failed: %w", err) + } + + headerHash, err := cometcompat.CommitHasher( + &header.Signature, + &header.Header, + s.Validators.Proposer.Address, + ) + if err != nil { + return nil, 0, fmt.Errorf("failed to compute header hash: %w", err) + } + var proposedLastCommit abci.CommitInfo if blockHeight > 1 { header, data, err := a.RollkitStore.GetBlockData(ctx, blockHeight-1) @@ -451,7 +479,7 @@ func (a *Adapter) ExecuteTxs( cmtTxs[i] = txs[i] } - var commit = &cmttypes.Commit{ + commit := &cmttypes.Commit{ Height: int64(blockHeight), Round: 0, Signatures: []cmttypes.CommitSig{ diff --git a/pkg/adapter/adapter_test.go b/pkg/adapter/adapter_test.go index b5b7ddba..c7f48121 100644 --- a/pkg/adapter/adapter_test.go +++ b/pkg/adapter/adapter_test.go @@ -20,6 +20,7 @@ import ( "github.com/stretchr/testify/assert" "github.com/stretchr/testify/require" + "github.com/rollkit/rollkit/block" "github.com/rollkit/rollkit/types" ) @@ -77,7 +78,7 @@ func TestExecuteFiresEvents(t *testing.T) { myMockApp := mockApp(myExecResult, spec.mockMutator) originStore := ds.NewMapDatastore() - adapter := NewABCIExecutor(myMockApp, originStore, nil, nil, log.NewTestLogger(t), nil, nil, NopMetrics()) + adapter := NewABCIExecutor(myMockApp, originStore, nil, nil, log.NewTestLogger(t), nil, nil, NopMetrics(), nil) adapter.EventBus = eventBus adapter.MempoolIDs = newMempoolIDs() adapter.Mempool = &mempool.NopMempool{} @@ -87,7 +88,8 @@ func TestExecuteFiresEvents(t *testing.T) { require.NoError(t, adapter.Store.SaveState(ctx, stateFixture())) // when - _, _, err := adapter.ExecuteTxs(ctx, spec.txs, 1, timestamp, bytes.Repeat([]byte{1}, 32), nil) + ctx = context.WithValue(ctx, block.HeaderContextKey, headerFixture().Header) + _, _, err := adapter.ExecuteTxs(ctx, spec.txs, 1, timestamp, bytes.Repeat([]byte{1}, 32)) if spec.expErr { require.Error(t, err) blockMx.RLock() @@ -199,6 +201,7 @@ func (m *MockABCIApp) ProcessProposal(r *abci.RequestProcessProposal) (*abci.Res } return m.ProcessProposalFn(r) } + func (m *MockABCIApp) FinalizeBlock(r *abci.RequestFinalizeBlock) (*abci.ResponseFinalizeBlock, error) { if m.FinalizeBlockFn == nil { panic("not expected to be called") diff --git a/pkg/cometcompat/commit_hasher.go b/pkg/cometcompat/commit_hasher.go new file mode 100644 index 00000000..ba212a40 --- /dev/null +++ b/pkg/cometcompat/commit_hasher.go @@ -0,0 +1,16 @@ +package cometcompat + +import ( + "github.com/rollkit/rollkit/types" +) + +func CommitHasher( + signature *types.Signature, + header *types.Header, + proposerAddress []byte, +) (types.Hash, error) { + abciCommit := GetABCICommit(header.Height(), header.Hash(), proposerAddress, header.Time(), *signature) + abciCommit.Signatures[0].ValidatorAddress = proposerAddress + abciCommit.Signatures[0].Timestamp = header.Time() + return types.Hash(abciCommit.Hash()), nil +} diff --git a/pkg/cometcompat/header_hasher.go b/pkg/cometcompat/header_hasher.go new file mode 100644 index 00000000..bd2621fb --- /dev/null +++ b/pkg/cometcompat/header_hasher.go @@ -0,0 +1,16 @@ +package cometcompat + +import ( + "github.com/libp2p/go-libp2p/core/crypto" + + rollkittypes "github.com/rollkit/rollkit/types" +) + +func HeaderHasher(proposerKey crypto.PubKey, header *rollkittypes.Header) (rollkittypes.Hash, error) { + abciHeader, err := ToABCIHeader(proposerKey, header) + if err != nil { + return nil, err + } + + return rollkittypes.Hash(abciHeader.Hash()), nil +} diff --git a/pkg/cometcompat/signer.go b/pkg/cometcompat/signer.go new file mode 100644 index 00000000..6e5dd367 --- /dev/null +++ b/pkg/cometcompat/signer.go @@ -0,0 +1,33 @@ +package cometcompat + +import ( + cmtproto "github.com/cometbft/cometbft/proto/tendermint/types" + cmtypes "github.com/cometbft/cometbft/types" + "github.com/libp2p/go-libp2p/core/crypto" + + "github.com/rollkit/rollkit/types" +) + +func SignaturePayloadProvider(proposerKey crypto.PubKey, header *types.Header) ([]byte, error) { + abciHeaderForSigning, err := ToABCIHeader(proposerKey, header) + if err != nil { + return nil, err + } + + vote := cmtproto.Vote{ + Type: cmtproto.PrecommitType, + Height: int64(header.Height()), //nolint:gosec + Round: 0, + BlockID: cmtproto.BlockID{ + Hash: abciHeaderForSigning.Hash(), + PartSetHeader: cmtproto.PartSetHeader{}, + }, + Timestamp: header.Time(), + ValidatorAddress: header.ProposerAddress, + ValidatorIndex: 0, + } + chainID := header.ChainID() + consensusVoteBytes := cmtypes.VoteSignBytes(chainID, &vote) + + return consensusVoteBytes, nil +} diff --git a/pkg/rpc/utils.go b/pkg/cometcompat/utils.go similarity index 66% rename from pkg/rpc/utils.go rename to pkg/cometcompat/utils.go index c173cc48..6240460f 100644 --- a/pkg/rpc/utils.go +++ b/pkg/cometcompat/utils.go @@ -1,50 +1,25 @@ -package rpc +package cometcompat import ( "errors" "time" cmbytes "github.com/cometbft/cometbft/libs/bytes" - cmproto "github.com/cometbft/cometbft/proto/tendermint/types" cmversion "github.com/cometbft/cometbft/proto/tendermint/version" cmttypes "github.com/cometbft/cometbft/types" + "github.com/libp2p/go-libp2p/core/crypto" "github.com/rollkit/rollkit/types" ) -// ToABCIHeaderPB converts Rollkit header to Header format defined in ABCI. -// Caller should fill all the fields that are not available in Rollkit header (like ChainID). -func ToABCIHeaderPB(header *types.Header) (cmproto.Header, error) { - return cmproto.Header{ - Version: cmversion.Consensus{ - Block: header.Version.Block, - App: header.Version.App, - }, - Height: int64(header.Height()), //nolint:gosec - Time: header.Time(), - LastBlockId: cmproto.BlockID{ - Hash: header.LastHeaderHash[:], - PartSetHeader: cmproto.PartSetHeader{ - Total: 0, - Hash: nil, - }, - }, - LastCommitHash: header.LastCommitHash[:], - DataHash: header.DataHash[:], - ConsensusHash: header.ConsensusHash[:], - AppHash: header.AppHash[:], - LastResultsHash: header.LastResultsHash[:], - EvidenceHash: new(cmttypes.EvidenceData).Hash(), - ProposerAddress: header.ProposerAddress, - ChainID: header.ChainID(), - ValidatorsHash: header.ValidatorHash, - NextValidatorsHash: header.ValidatorHash, - }, nil -} - // ToABCIHeader converts Rollkit header to Header format defined in ABCI. // Caller should fill all the fields that are not available in Rollkit header (like ChainID). -func ToABCIHeader(header *types.Header) (cmttypes.Header, error) { +func ToABCIHeader(proposerKey crypto.PubKey, header *types.Header) (cmttypes.Header, error) { + validatorHash, err := ValidatorHasher(header.ProposerAddress, proposerKey) + if err != nil { + return cmttypes.Header{}, err + } + return cmttypes.Header{ Version: cmversion.Consensus{ Block: header.Version.Block, @@ -67,15 +42,15 @@ func ToABCIHeader(header *types.Header) (cmttypes.Header, error) { EvidenceHash: new(cmttypes.EvidenceData).Hash(), ProposerAddress: header.ProposerAddress, ChainID: header.ChainID(), - ValidatorsHash: cmbytes.HexBytes(header.ValidatorHash), - NextValidatorsHash: cmbytes.HexBytes(header.ValidatorHash), + ValidatorsHash: cmbytes.HexBytes(validatorHash), + NextValidatorsHash: cmbytes.HexBytes(validatorHash), }, nil } // ToABCIBlock converts Rolkit block into block format defined by ABCI. // Returned block should pass `ValidateBasic`. -func ToABCIBlock(header *types.SignedHeader, data *types.Data) (*cmttypes.Block, error) { - abciHeader, err := ToABCIHeader(&header.Header) +func ToABCIBlock(proposerKey crypto.PubKey, header *types.SignedHeader, data *types.Data) (*cmttypes.Block, error) { + abciHeader, err := ToABCIHeader(proposerKey, &header.Header) if err != nil { return nil, err } @@ -108,8 +83,8 @@ func ToABCIBlock(header *types.SignedHeader, data *types.Data) (*cmttypes.Block, } // ToABCIBlockMeta converts Rollkit block into BlockMeta format defined by ABCI -func ToABCIBlockMeta(header *types.SignedHeader, data *types.Data) (*cmttypes.BlockMeta, error) { - cmblock, err := ToABCIBlock(header, data) +func ToABCIBlockMeta(proposerPubKey crypto.PubKey, header *types.SignedHeader, data *types.Data) (*cmttypes.BlockMeta, error) { + cmblock, err := ToABCIBlock(proposerPubKey, header, data) if err != nil { return nil, err } @@ -145,3 +120,22 @@ func GetABCICommit(height uint64, hash []byte, val cmttypes.Address, time time.T return &tmCommit } + +// ToABCICommit returns a commit format defined by ABCI. +// Other fields (especially ValidatorAddress and Timestamp of Signature) have to be filled by caller. +func ToABCICommit(height uint64, hash []byte, val cmttypes.Address, time time.Time, signature types.Signature) *cmttypes.Commit { + return &cmttypes.Commit{ + Height: int64(height), //nolint:gosec + Round: 0, + BlockID: cmttypes.BlockID{ + Hash: cmbytes.HexBytes(hash), + PartSetHeader: cmttypes.PartSetHeader{}, + }, + Signatures: []cmttypes.CommitSig{{ + BlockIDFlag: cmttypes.BlockIDFlagCommit, + Signature: signature, + ValidatorAddress: val, + Timestamp: time, + }}, + } +} diff --git a/pkg/cometcompat/validator_hasher.go b/pkg/cometcompat/validator_hasher.go new file mode 100644 index 00000000..fa53163a --- /dev/null +++ b/pkg/cometcompat/validator_hasher.go @@ -0,0 +1,55 @@ +package cometcompat + +import ( + "bytes" + stdsha256 "crypto/sha256" + "encoding/hex" + "fmt" + + tmcryptoed25519 "github.com/cometbft/cometbft/crypto/ed25519" + tmtypes "github.com/cometbft/cometbft/types" + "github.com/libp2p/go-libp2p/core/crypto" + + rollkittypes "github.com/rollkit/rollkit/types" +) + +// ValidatorHasher returns a function that calculates the ValidatorHash +// compatible with CometBFT. This function is intended to be injected into Rollkit's Manager. +func ValidatorHasher(proposerAddress []byte, pubKey crypto.PubKey) (rollkittypes.Hash, error) { + var calculatedHash rollkittypes.Hash + + var cometBftPubKey tmcryptoed25519.PubKey + if pubKey.Type() == crypto.Ed25519 { + rawKey, err := pubKey.Raw() + if err != nil { + return calculatedHash, fmt.Errorf("ValidatorHasher: failed to get raw bytes from libp2p public key: %w", err) + } + if len(rawKey) != tmcryptoed25519.PubKeySize { + return calculatedHash, fmt.Errorf("ValidatorHasher: libp2p public key size (%d) does not match CometBFT Ed25519 PubKeySize (%d)", len(rawKey), tmcryptoed25519.PubKeySize) + } + cometBftPubKey = rawKey + } else { + return calculatedHash, fmt.Errorf("ValidatorHasher: unsupported public key type '%s', expected Ed25519 for CometBFT compatibility", pubKey.Type()) + } + + votingPower := int64(1) + sequencerValidator := tmtypes.NewValidator(cometBftPubKey, votingPower) + + derivedAddress := sequencerValidator.Address.Bytes() + if !bytes.Equal(derivedAddress, proposerAddress) { + errMsg := fmt.Errorf("ValidatorHasher: CRITICAL MISMATCH - derived validator address (%s) does not match expected proposer address (%s). PubKey used for derivation: %s", + hex.EncodeToString(derivedAddress), + hex.EncodeToString(proposerAddress), + hex.EncodeToString(cometBftPubKey.Bytes())) + return calculatedHash, errMsg + } + + sequencerValidatorSet := tmtypes.NewValidatorSet([]*tmtypes.Validator{sequencerValidator}) + + hashSumBytes := sequencerValidatorSet.Hash() + + calculatedHash = make(rollkittypes.Hash, stdsha256.Size) + copy(calculatedHash, hashSumBytes) + + return calculatedHash, nil +} diff --git a/pkg/common/convert.go b/pkg/common/convert.go deleted file mode 100644 index 7a452381..00000000 --- a/pkg/common/convert.go +++ /dev/null @@ -1,113 +0,0 @@ -package common - -import ( - "errors" - "time" - - cmbytes "github.com/cometbft/cometbft/libs/bytes" - cmprotoversion "github.com/cometbft/cometbft/proto/tendermint/version" - cmttypes "github.com/cometbft/cometbft/types" - cmtversion "github.com/cometbft/cometbft/version" - - rlktypes "github.com/rollkit/rollkit/types" -) - -// ToABCIHeader converts Rollkit header to Header format defined in ABCI. -// Caller should fill all the fields that are not available in Rollkit header (like ChainID). -func ToABCIHeader(header *rlktypes.Header) (cmttypes.Header, error) { - return cmttypes.Header{ - Version: cmprotoversion.Consensus{ - Block: cmtversion.BlockProtocol, - App: header.Version.App, - }, - Height: int64(header.Height()), //nolint:gosec - Time: header.Time(), - LastBlockID: cmttypes.BlockID{ - Hash: cmbytes.HexBytes(header.LastHeaderHash), - PartSetHeader: cmttypes.PartSetHeader{ - Total: 0, - Hash: nil, - }, - }, - LastCommitHash: cmbytes.HexBytes(header.LastCommitHash), - DataHash: cmbytes.HexBytes(header.DataHash), - ConsensusHash: cmbytes.HexBytes(header.ConsensusHash), - AppHash: cmbytes.HexBytes(header.AppHash), - LastResultsHash: cmbytes.HexBytes(header.LastResultsHash), - EvidenceHash: new(cmttypes.EvidenceData).Hash(), - ProposerAddress: header.ProposerAddress, - ChainID: header.ChainID(), - ValidatorsHash: cmbytes.HexBytes(header.ValidatorHash), - NextValidatorsHash: cmbytes.HexBytes(header.ValidatorHash), - }, nil -} - -// ToABCIBlock converts Rolkit block into block format defined by ABCI. -// Returned block should pass `ValidateBasic`. -func ToABCIBlock(header *rlktypes.SignedHeader, data *rlktypes.Data) (*cmttypes.Block, error) { - abciHeader, err := ToABCIHeader(&header.Header) - if err != nil { - return nil, err - } - - // we have one validator - if len(header.ProposerAddress) == 0 { - return nil, errors.New("proposer address is not set") - } - - abciCommit := ToABCICommit(header.Height(), header.Hash(), header.ProposerAddress, header.Time(), header.Signature) - - // This assumes that we have only one signature - if len(abciCommit.Signatures) == 1 { - abciCommit.Signatures[0].ValidatorAddress = header.ProposerAddress - } - abciBlock := cmttypes.Block{ - Header: abciHeader, - Evidence: cmttypes.EvidenceData{ - Evidence: nil, - }, - LastCommit: abciCommit, - } - abciBlock.Txs = make([]cmttypes.Tx, len(data.Txs)) - for i := range data.Txs { - abciBlock.Txs[i] = cmttypes.Tx(data.Txs[i]) - } - abciBlock.DataHash = cmbytes.HexBytes(header.DataHash) - - return &abciBlock, nil -} - -// ToABCIBlockMeta converts Rollkit block into BlockMeta format defined by ABCI -func ToABCIBlockMeta(header *rlktypes.SignedHeader, data *rlktypes.Data) (*cmttypes.BlockMeta, error) { - cmblock, err := ToABCIBlock(header, data) - if err != nil { - return nil, err - } - blockID := cmttypes.BlockID{Hash: cmblock.Hash()} - - return &cmttypes.BlockMeta{ - BlockID: blockID, - BlockSize: cmblock.Size(), - Header: cmblock.Header, - NumTxs: len(cmblock.Txs), - }, nil -} - -// ToABCICommit returns a commit format defined by ABCI. -// Other fields (especially ValidatorAddress and Timestamp of Signature) have to be filled by caller. -func ToABCICommit(height uint64, hash []byte, val cmttypes.Address, time time.Time, signature rlktypes.Signature) *cmttypes.Commit { - return &cmttypes.Commit{ - Height: int64(height), //nolint:gosec - Round: 0, - BlockID: cmttypes.BlockID{ - Hash: cmbytes.HexBytes(hash), - PartSetHeader: cmttypes.PartSetHeader{}, - }, - Signatures: []cmttypes.CommitSig{{ - BlockIDFlag: cmttypes.BlockIDFlagCommit, - Signature: signature, - ValidatorAddress: val, - Timestamp: time, - }}, - } -} diff --git a/pkg/rollkit_adapter/commit_hasher.go b/pkg/rollkit_adapter/commit_hasher.go deleted file mode 100644 index 993e7ef6..00000000 --- a/pkg/rollkit_adapter/commit_hasher.go +++ /dev/null @@ -1,16 +0,0 @@ -package rollkitadapter - -import ( - "github.com/rollkit/rollkit/types" - - "github.com/rollkit/go-execution-abci/pkg/rpc" -) - -func CreateCometBFTCommitHasher() types.CommitHashProvider { - return func(signature *types.Signature, header *types.Header, proposerAddress []byte) (types.Hash, error) { - abciCommit := rpc.GetABCICommit(header.Height(), header.Hash(), proposerAddress, header.Time(), *signature) - abciCommit.Signatures[0].ValidatorAddress = proposerAddress - abciCommit.Signatures[0].Timestamp = header.Time() - return types.Hash(abciCommit.Hash()), nil - } -} diff --git a/pkg/rollkit_adapter/header_hasher.go b/pkg/rollkit_adapter/header_hasher.go deleted file mode 100644 index e2dffcae..00000000 --- a/pkg/rollkit_adapter/header_hasher.go +++ /dev/null @@ -1,23 +0,0 @@ -package rollkitadapter - -import ( - rollkittypes "github.com/rollkit/rollkit/types" - - "github.com/rollkit/go-execution-abci/pkg/common" -) - -// init automatically sets the CometBFT header hasher as the default when this package is imported -func init() { - rollkittypes.SetHeaderHasher(CreateCometBFTHeaderHasher()) -} - -func CreateCometBFTHeaderHasher() rollkittypes.HeaderHasher { - return func(header *rollkittypes.Header) (rollkittypes.Hash, error) { - abciHeader, err := common.ToABCIHeader(header) - if err != nil { - return nil, err - } - - return rollkittypes.Hash(abciHeader.Hash()), nil - } -} diff --git a/pkg/rollkit_adapter/signer.go b/pkg/rollkit_adapter/signer.go deleted file mode 100644 index 43c90526..00000000 --- a/pkg/rollkit_adapter/signer.go +++ /dev/null @@ -1,35 +0,0 @@ -package rollkitadapter - -import ( - cmtproto "github.com/cometbft/cometbft/proto/tendermint/types" - cmtypes "github.com/cometbft/cometbft/types" - - "github.com/rollkit/rollkit/types" - - "github.com/rollkit/go-execution-abci/pkg/rpc" -) - -func CreateCometBFTPayloadProvider() types.SignaturePayloadProvider { - return func(header *types.Header, data *types.Data) ([]byte, error) { - abciHeaderForSigning, err := rpc.ToABCIHeader(header) - if err != nil { - return nil, err - } - vote := cmtproto.Vote{ - Type: cmtproto.PrecommitType, - Height: int64(header.Height()), //nolint:gosec - Round: 0, - BlockID: cmtproto.BlockID{ - Hash: abciHeaderForSigning.Hash(), - PartSetHeader: cmtproto.PartSetHeader{}, - }, - Timestamp: header.Time(), - ValidatorAddress: header.ProposerAddress, - ValidatorIndex: 0, - } - chainID := header.ChainID() - consensusVoteBytes := cmtypes.VoteSignBytes(chainID, &vote) - - return consensusVoteBytes, nil - } -} diff --git a/pkg/rollkit_adapter/validator_hasher.go b/pkg/rollkit_adapter/validator_hasher.go deleted file mode 100644 index 65582291..00000000 --- a/pkg/rollkit_adapter/validator_hasher.go +++ /dev/null @@ -1,65 +0,0 @@ -package rollkitadapter - -import ( - "bytes" - stdsha256 "crypto/sha256" - "encoding/hex" - "fmt" - - "cosmossdk.io/log" - tmcryptoed25519 "github.com/cometbft/cometbft/crypto/ed25519" - tmtypes "github.com/cometbft/cometbft/types" - "github.com/libp2p/go-libp2p/core/crypto" - - rollkittypes "github.com/rollkit/rollkit/types" -) - -// CreateCometBFTValidatorHasher returns a function that calculates the ValidatorHash -// compatible with CometBFT. This function is intended to be injected into Rollkit's Manager. -func CreateCometBFTValidatorHasher(logger log.Logger) rollkittypes.ValidatorHasher { - return func(proposerAddress []byte, pubKey crypto.PubKey) (rollkittypes.Hash, error) { - var calculatedHash rollkittypes.Hash - - var cometBftPubKey tmcryptoed25519.PubKey - if pubKey.Type() == crypto.Ed25519 { - rawKey, err := pubKey.Raw() - if err != nil { - logger.Error("ValidatorHasher: failed to get raw bytes from libp2p public key", "error", err) - return calculatedHash, fmt.Errorf("ValidatorHasher: failed to get raw bytes from libp2p public key: %w", err) - } - if len(rawKey) != tmcryptoed25519.PubKeySize { - errMsg := fmt.Sprintf("ValidatorHasher: libp2p public key size (%d) does not match CometBFT Ed25519 PubKeySize (%d)", len(rawKey), tmcryptoed25519.PubKeySize) - logger.Error(errMsg) - return calculatedHash, fmt.Errorf("%s", errMsg) - } - cometBftPubKey = rawKey - } else { - errMsg := fmt.Sprintf("ValidatorHasher: unsupported public key type '%s', expected Ed25519 for CometBFT compatibility", pubKey.Type()) - logger.Error(errMsg) - return calculatedHash, fmt.Errorf("%s", errMsg) - } - - votingPower := int64(1) - sequencerValidator := tmtypes.NewValidator(cometBftPubKey, votingPower) - - derivedAddress := sequencerValidator.Address.Bytes() - if !bytes.Equal(derivedAddress, proposerAddress) { - errMsg := fmt.Sprintf("ValidatorHasher: CRITICAL MISMATCH - derived validator address (%s) does not match expected proposer address (%s). PubKey used for derivation: %s", - hex.EncodeToString(derivedAddress), - hex.EncodeToString(proposerAddress), - hex.EncodeToString(cometBftPubKey.Bytes())) - logger.Error(errMsg) - return calculatedHash, fmt.Errorf("%s", errMsg) - } - - sequencerValidatorSet := tmtypes.NewValidatorSet([]*tmtypes.Validator{sequencerValidator}) - - hashSumBytes := sequencerValidatorSet.Hash() - - calculatedHash = make(rollkittypes.Hash, stdsha256.Size) - copy(calculatedHash, hashSumBytes) - - logger.Debug("ValidatorHasher: Hashing process completed successfully", "calculatedHash", hex.EncodeToString(calculatedHash)) - return calculatedHash, nil - } -} diff --git a/pkg/rpc/core/blocks.go b/pkg/rpc/core/blocks.go index 3f8af190..2b551c56 100644 --- a/pkg/rpc/core/blocks.go +++ b/pkg/rpc/core/blocks.go @@ -15,7 +15,7 @@ import ( "github.com/rollkit/rollkit/block" rlktypes "github.com/rollkit/rollkit/types" - "github.com/rollkit/go-execution-abci/pkg/common" + "github.com/rollkit/go-execution-abci/pkg/cometcompat" ) // BlockSearch searches for a paginated set of blocks matching BeginBlock and @@ -65,13 +65,18 @@ func BlockSearch( skipCount := validateSkipCount(pageVal, perPageVal) pageSize := min(perPageVal, totalCount-skipCount) + signerPubKey, err := env.Adapter.Signer.GetPublic() + if err != nil { + return nil, fmt.Errorf("failed to get signer public key: %w", err) + } + blocks := make([]*ctypes.ResultBlock, 0, pageSize) for i := skipCount; i < skipCount+pageSize; i++ { header, data, err := env.Adapter.RollkitStore.GetBlockData(wrappedCtx, uint64(results[i])) if err != nil { return nil, err } - block, err := common.ToABCIBlock(header, data) + block, err := cometcompat.ToABCIBlock(signerPubKey, header, data) if err != nil { return nil, err } @@ -115,15 +120,24 @@ func Block(ctx *rpctypes.Context, heightPtr *int64) (*ctypes.ResultBlock, error) return nil, err } - hash, err := env.HeaderHasher(&header.Header) + signerPubKey, err := env.Adapter.Signer.GetPublic() + if err != nil { + return nil, fmt.Errorf("failed to get signer public key: %w", err) + } + + abciBlock, err := cometcompat.ToABCIBlock(signerPubKey, header, data) if err != nil { return nil, err } - abciBlock, err := common.ToABCIBlock(header, data) + // hashe is calculcated in ToABCIBlock, so we should overide it before hashing the header + header.Header.ValidatorHash = rlktypes.Hash(abciBlock.ValidatorsHash) + + hash, err := cometcompat.HeaderHasher(signerPubKey, &header.Header) if err != nil { return nil, err } + return &ctypes.ResultBlock{ BlockID: cmttypes.BlockID{ Hash: cmbytes.HexBytes(hash), @@ -144,7 +158,12 @@ func BlockByHash(ctx *rpctypes.Context, hash []byte) (*ctypes.ResultBlock, error return nil, err } - abciBlock, err := common.ToABCIBlock(header, data) + signerPubKey, err := env.Adapter.Signer.GetPublic() + if err != nil { + return nil, fmt.Errorf("failed to get signer public key: %w", err) + } + + abciBlock, err := cometcompat.ToABCIBlock(signerPubKey, header, data) if err != nil { return nil, err } @@ -176,13 +195,18 @@ func Commit(ctx *rpctypes.Context, heightPtr *int64) (*ctypes.ResultCommit, erro return nil, errors.New("empty proposer address found in block header") } + signerPubKey, err := env.Adapter.Signer.GetPublic() + if err != nil { + return nil, fmt.Errorf("failed to get signer public key: %w", err) + } + // Convert to CometBFT block to get the correct CometBFT header and its hash - abciBlock, err := common.ToABCIBlock(rollkitSignedHeader, rollkitData) + abciBlock, err := cometcompat.ToABCIBlock(signerPubKey, rollkitSignedHeader, rollkitData) if err != nil { return nil, err } - commitForAbciHeader := common.ToABCICommit( + commitForAbciHeader := cometcompat.ToABCICommit( uint64(abciBlock.Height), abciBlock.Hash(), rollkitSignedHeader.ProposerAddress, @@ -250,7 +274,12 @@ func HeaderByHash(ctx *rpctypes.Context, hash cmbytes.HexBytes) (*ctypes.ResultH return nil, err } - blockMeta, err := common.ToABCIBlockMeta(header, data) + signerPubKey, err := env.Adapter.Signer.GetPublic() + if err != nil { + return nil, fmt.Errorf("failed to get signer public key: %w", err) + } + + blockMeta, err := cometcompat.ToABCIBlockMeta(signerPubKey, header, data) if err != nil { return nil, err } @@ -285,10 +314,15 @@ func BlockchainInfo(ctx *rpctypes.Context, minHeight, maxHeight int64) (*ctypes. } env.Logger.Debug("BlockchainInfo", "maxHeight", maxHeight, "minHeight", minHeight) + signerPubKey, err := env.Adapter.Signer.GetPublic() + if err != nil { + return nil, fmt.Errorf("failed to get signer public key: %w", err) + } + blocks := make([]*cmttypes.BlockMeta, 0, maxHeight-minHeight+1) for _, block := range BlockIterator(ctx.Context(), maxHeight, minHeight) { if block.header != nil && block.data != nil { - cmblockmeta, err := common.ToABCIBlockMeta(block.header, block.data) + cmblockmeta, err := cometcompat.ToABCIBlockMeta(signerPubKey, block.header, block.data) if err != nil { return nil, err } diff --git a/pkg/rpc/core/blocks_test.go b/pkg/rpc/core/blocks_test.go index f2cc778a..1220146c 100644 --- a/pkg/rpc/core/blocks_test.go +++ b/pkg/rpc/core/blocks_test.go @@ -20,7 +20,7 @@ import ( "github.com/rollkit/rollkit/types" "github.com/rollkit/go-execution-abci/pkg/adapter" - goexeccommon "github.com/rollkit/go-execution-abci/pkg/common" + "github.com/rollkit/go-execution-abci/pkg/cometcompat" ) func newTestRPCContext() *rpctypes.Context { @@ -171,7 +171,7 @@ func TestCommit_VerifyCometBFTLightClientCompatibility_MultipleBlocks(t *testing ProposerAddress: fixedValSet.Proposer.Address, } - abciHeaderForSigning, err := goexeccommon.ToABCIHeader(&rollkitHeader) + abciHeaderForSigning, err := cometcompat.ToABCIHeader(pubKey, &rollkitHeader) require.NoError(err) abciHeaderHashForSigning := abciHeaderForSigning.Hash() abciHeaderTimeForSigning := abciHeaderForSigning.Time diff --git a/pkg/rpc/core/consensus_test.go b/pkg/rpc/core/consensus_test.go index 7ae02a6b..97d4a6bb 100644 --- a/pkg/rpc/core/consensus_test.go +++ b/pkg/rpc/core/consensus_test.go @@ -87,6 +87,8 @@ func newValidState() cmtstate.State { // setupTestValidatorsEnv helper for TestValidators func setupTestValidatorsEnv(t *testing.T, gvs []cmttypes.GenesisValidator, consensusParams *cmttypes.ConsensusParams) *MockRollkitStore { + t.Helper() + mockStore := new(MockRollkitStore) adapterInstance := &adapter.Adapter{ RollkitStore: mockStore, diff --git a/pkg/rpc/core/env.go b/pkg/rpc/core/env.go index 5a859faa..655c1243 100644 --- a/pkg/rpc/core/env.go +++ b/pkg/rpc/core/env.go @@ -8,15 +8,11 @@ import ( "github.com/cometbft/cometbft/state/indexer" "github.com/cometbft/cometbft/state/txindex" - "github.com/rollkit/rollkit/types" - "github.com/rollkit/go-execution-abci/pkg/adapter" ) -var ( - // set by Node - env *Environment -) +// set by Node +var env *Environment // SetEnvironment sets up the given Environment. // It will race if multiple Node call SetEnvironment. @@ -32,8 +28,6 @@ type Environment struct { BlockIndexer indexer.BlockIndexer Logger cmtlog.Logger Config cmtcfg.RPCConfig - - HeaderHasher types.HeaderHasher } func validateSkipCount(page, perPage int) int { diff --git a/pkg/rpc/core/utils.go b/pkg/rpc/core/utils.go index fb3e53a0..ec2457ec 100644 --- a/pkg/rpc/core/utils.go +++ b/pkg/rpc/core/utils.go @@ -13,7 +13,7 @@ import ( rlktypes "github.com/rollkit/rollkit/types" - "github.com/rollkit/go-execution-abci/pkg/common" + "github.com/rollkit/go-execution-abci/pkg/cometcompat" ) const NodeIDByteLength = 20 @@ -56,8 +56,15 @@ func getBlockMeta(ctx context.Context, n uint64) *cmttypes.BlockMeta { env.Logger.Error("Nil header or data returned from GetBlockData", "height", n) return nil } + + signerPubKey, err := env.Adapter.Signer.GetPublic() + if err != nil { + env.Logger.Error("Failed to get signer public key", "height", n, "err", err) + return nil + } + // Assuming ToABCIBlockMeta is now in pkg/rpc/provider/provider_utils.go - bmeta, err := common.ToABCIBlockMeta(header, data) // Removed rpc. prefix + bmeta, err := cometcompat.ToABCIBlockMeta(signerPubKey, header, data) // Removed rpc. prefix if err != nil { env.Logger.Error("Failed to convert block to ABCI block meta", "height", n, "err", err) return nil @@ -131,7 +138,7 @@ func getHeightFromEntry(field string, value []byte) (uint64, error) { type blockFilter struct { // needs this for the Filter interface max int64 min int64 - field string //need this field for differentiation between getting headers and getting data + field string // need this field for differentiation between getting headers and getting data } func (f *blockFilter) Filter(e dsq.Entry) bool { @@ -178,7 +185,7 @@ func BlockIterator(ctx context.Context, max int64, min int64) []BlockResponse { defer rHeader.Close() //nolint:errcheck defer rData.Close() //nolint:errcheck - //we need to match the data to the header using the height, for that we use a map + // we need to match the data to the header using the height, for that we use a map headerMap := make(map[uint64]*rlktypes.SignedHeader) for res := range rHeader.Next() { if res.Error != nil { @@ -203,14 +210,14 @@ func BlockIterator(ctx context.Context, max int64, min int64) []BlockResponse { dataMap[data.Height()] = data } - //maps the headers to the data + // maps the headers to the data for height, header := range headerMap { if data, ok := dataMap[height]; ok { blocks = append(blocks, BlockResponse{header: header, data: data}) } } - //sort blocks by height descending + // sort blocks by height descending sort.Slice(blocks, func(i, j int) bool { return blocks[i].header.Height() > blocks[j].header.Height() }) diff --git a/server/start.go b/server/start.go index 67979837..fe68970d 100644 --- a/server/start.go +++ b/server/start.go @@ -34,7 +34,6 @@ import ( "google.golang.org/grpc" "google.golang.org/grpc/credentials/insecure" - rlkblock "github.com/rollkit/rollkit/block" "github.com/rollkit/rollkit/da/jsonrpc" "github.com/rollkit/rollkit/node" "github.com/rollkit/rollkit/pkg/config" @@ -46,7 +45,6 @@ import ( "github.com/rollkit/rollkit/sequencers/single" "github.com/rollkit/go-execution-abci/pkg/adapter" - rollkit_adapter "github.com/rollkit/go-execution-abci/pkg/rollkit_adapter" "github.com/rollkit/go-execution-abci/pkg/rpc" "github.com/rollkit/go-execution-abci/pkg/rpc/core" execsigner "github.com/rollkit/go-execution-abci/pkg/signer" @@ -297,7 +295,7 @@ func setupNodeAndExecutor( srvCtx *server.Context, cfg *cmtcfg.Config, app sdktypes.Application, -) (rolllkitNode node.Node, executor *adapter.Adapter, cleanupFn func(), err error) { +) (rollkitNode node.Node, executor *adapter.Adapter, cleanupFn func(), err error) { logger := srvCtx.Logger.With("module", "rollkit") logger.Info("starting node with Rollkit in-process") @@ -370,6 +368,7 @@ func setupNodeAndExecutor( cfg, appGenesis, adapterMetrics, + signer, ) cmtApp := server.NewCometABCIWrapper(app) @@ -412,11 +411,6 @@ func setupNodeAndExecutor( } } - cometBFTHasher := rollkit_adapter.CreateCometBFTValidatorHasher(logger.With("module", "CometBFTValidatorHasher")) - cometBFTPayloadProvider := rollkit_adapter.CreateCometBFTPayloadProvider() - cometBFTHeaderHasher := rollkit_adapter.CreateCometBFTHeaderHasher() - cometBFTCommitHashProvider := rollkit_adapter.CreateCometBFTCommitHasher() - sequencer, err := single.NewSequencer( ctx, logger, @@ -431,7 +425,7 @@ func setupNodeAndExecutor( return nil, nil, cleanupFn, err } - rolllkitNode, err = node.NewNode( + rollkitNode, err = node.NewNode( ctx, rollkitcfg, executor, @@ -443,9 +437,6 @@ func setupNodeAndExecutor( database, metrics, logger, - rlkblock.WithValidatorHasher(cometBFTHasher), - rlkblock.WithSignaturePayloadProvider(cometBFTPayloadProvider), - rlkblock.WithCommitHashProvider(cometBFTCommitHashProvider), ) if err != nil { return nil, nil, cleanupFn, err @@ -466,7 +457,6 @@ func setupNodeAndExecutor( BlockIndexer: blockIndexer, Logger: servercmtlog.CometLoggerWrapper{Logger: logger}, Config: *cfg.RPC, - HeaderHasher: cometBFTHeaderHasher, }) // Pass the created handler to the RPC server constructor @@ -487,7 +477,7 @@ func setupNodeAndExecutor( } } - return rolllkitNode, executor, cleanupFn, nil + return rollkitNode, executor, cleanupFn, nil } func createAndStartEventBus(logger log.Logger) (*cmttypes.EventBus, error) {