Skip to content

Commit

Permalink
feat(nodebuilder/da): implement go-da v0.6.x changes
Browse files Browse the repository at this point in the history
  • Loading branch information
tzdybal committed Sep 19, 2024
1 parent bb6b508 commit 9332823
Show file tree
Hide file tree
Showing 4 changed files with 70 additions and 19 deletions.
6 changes: 3 additions & 3 deletions go.mod
Original file line number Diff line number Diff line change
Expand Up @@ -53,7 +53,7 @@ require (
github.com/multiformats/go-multihash v0.2.3
github.com/open-rpc/meta-schema v0.0.0-20201029221707-1b72ef2ea333
github.com/prometheus/client_golang v1.19.1
github.com/rollkit/go-da v0.5.0
github.com/rollkit/go-da v0.5.3-0.20240918201948-f132b113e642
github.com/spf13/cobra v1.8.1
github.com/spf13/pflag v1.0.5
github.com/stretchr/testify v1.9.0
Expand All @@ -74,7 +74,7 @@ require (
golang.org/x/exp v0.0.0-20240719175910-8a7402abbf56
golang.org/x/sync v0.7.0
golang.org/x/text v0.16.0
google.golang.org/grpc v1.65.0
google.golang.org/grpc v1.66.2
google.golang.org/protobuf v1.34.2
)

Expand Down Expand Up @@ -116,7 +116,7 @@ require (
github.com/cosmos/btcutil v1.0.5 // indirect
github.com/cosmos/cosmos-proto v1.0.0-beta.5 // indirect
github.com/cosmos/go-bip39 v1.0.0 // indirect
github.com/cosmos/gogoproto v1.5.0 // indirect
github.com/cosmos/gogoproto v1.7.0 // indirect
github.com/cosmos/gorocksdb v1.2.0 // indirect
github.com/cosmos/iavl v0.19.6 // indirect
github.com/cosmos/ibc-apps/middleware/packet-forward-middleware/v6 v6.1.2 // indirect
Expand Down
12 changes: 6 additions & 6 deletions go.sum
Original file line number Diff line number Diff line change
Expand Up @@ -481,8 +481,8 @@ github.com/cosmos/cosmos-proto v1.0.0-beta.5/go.mod h1:hQGLpiIUloJBMdQMMWb/4wRAp
github.com/cosmos/go-bip39 v0.0.0-20180819234021-555e2067c45d/go.mod h1:tSxLoYXyBmiFeKpvmq4dzayMdCjCnu8uqmCysIGBT2Y=
github.com/cosmos/go-bip39 v1.0.0 h1:pcomnQdrdH22njcAatO0yWojsUnCO3y2tNoV1cb6hHY=
github.com/cosmos/go-bip39 v1.0.0/go.mod h1:RNJv0H/pOIVgxw6KS7QeX2a0Uo0aKUlfhZ4xuwvCdJw=
github.com/cosmos/gogoproto v1.5.0 h1:SDVwzEqZDDBoslaeZg+dGE55hdzHfgUA40pEanMh52o=
github.com/cosmos/gogoproto v1.5.0/go.mod h1:iUM31aofn3ymidYG6bUR5ZFrk+Om8p5s754eMUcyp8I=
github.com/cosmos/gogoproto v1.7.0 h1:79USr0oyXAbxg3rspGh/m4SWNyoz/GLaAh0QlCe2fro=
github.com/cosmos/gogoproto v1.7.0/go.mod h1:yWChEv5IUEYURQasfyBW5ffkMHR/90hiHgbNgrtp4j0=
github.com/cosmos/gorocksdb v1.2.0 h1:d0l3jJG8M4hBouIZq0mDUHZ+zjOx044J3nGRskwTb4Y=
github.com/cosmos/gorocksdb v1.2.0/go.mod h1:aaKvKItm514hKfNJpUJXnnOWeBnk2GL4+Qw9NHizILw=
github.com/cosmos/iavl v0.19.6 h1:XY78yEeNPrEYyNCKlqr9chrwoeSDJ0bV2VjocTk//OU=
Expand Down Expand Up @@ -2176,8 +2176,8 @@ github.com/rogpeppe/go-internal v1.6.1/go.mod h1:xXDCJY+GAPziupqXw64V24skbSoqbTE
github.com/rogpeppe/go-internal v1.9.0/go.mod h1:WtVeX8xhTBvf0smdhujwtBcq4Qrzq/fJaraNFVN+nFs=
github.com/rogpeppe/go-internal v1.12.0 h1:exVL4IDcn6na9z1rAb56Vxr+CgyK3nn3O+epU5NdKM8=
github.com/rogpeppe/go-internal v1.12.0/go.mod h1:E+RYuTGaKKdloAfM02xzb0FW3Paa99yedzYV+kq4uf4=
github.com/rollkit/go-da v0.5.0 h1:sQpZricNS+2TLx3HMjNWhtRfqtvVC/U4pWHpfUz3eN4=
github.com/rollkit/go-da v0.5.0/go.mod h1:VsUeAoPvKl4Y8wWguu/VibscYiFFePkkrvZWyTjZHww=
github.com/rollkit/go-da v0.5.3-0.20240918201948-f132b113e642 h1:VC1H7miu5OT9cmBk5yfWrd49HBfpXbK1WbMEJ6qKxj8=
github.com/rollkit/go-da v0.5.3-0.20240918201948-f132b113e642/go.mod h1:9YCbEhUkF/QHbbKPBe5uvu93Co/mgPRtYjlwj6GPuhI=
github.com/rs/cors v1.7.0/go.mod h1:gFx+x8UowdsKA9AchylcLynDq+nNFfI8FkUZdN/jGCU=
github.com/rs/cors v1.8.3 h1:O+qNyWn7Z+F9M0ILBHgMVPuB1xTOucVd5gtaYyXBpRo=
github.com/rs/cors v1.8.3/go.mod h1:XyqrcTp5zjWr1wsJ8PIRZssZ8b/WMcMf71DJnit4EMU=
Expand Down Expand Up @@ -3295,8 +3295,8 @@ google.golang.org/grpc v1.48.0/go.mod h1:vN9eftEi1UMyUsIF80+uQXhHjbXYbm0uXoFCACu
google.golang.org/grpc v1.49.0/go.mod h1:ZgQEeidpAuNRZ8iRrlBKXZQP1ghovWIVhdJRyCDK+GI=
google.golang.org/grpc v1.50.0/go.mod h1:ZgQEeidpAuNRZ8iRrlBKXZQP1ghovWIVhdJRyCDK+GI=
google.golang.org/grpc v1.50.1/go.mod h1:ZgQEeidpAuNRZ8iRrlBKXZQP1ghovWIVhdJRyCDK+GI=
google.golang.org/grpc v1.65.0 h1:bs/cUb4lp1G5iImFFd3u5ixQzweKizoZJAwBNLR42lc=
google.golang.org/grpc v1.65.0/go.mod h1:WgYC2ypjlB0EiQi6wdKixMqukr6lBc0Vo+oOgjrM5ZQ=
google.golang.org/grpc v1.66.2 h1:3QdXkuq3Bkh7w+ywLdLvM56cmGvQHUMZpiCzt6Rqaoo=
google.golang.org/grpc v1.66.2/go.mod h1:s3/l6xSSCURdVfAnL+TqCNMyTDAGN6+lZeVxnZR128Y=
google.golang.org/grpc/cmd/protoc-gen-go-grpc v1.1.0/go.mod h1:6Kw0yEErY5E/yWrBtf03jp27GLLJujG4z/JK95pnjjw=
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=
Expand Down
4 changes: 2 additions & 2 deletions nodebuilder/da/da.go
Original file line number Diff line number Diff line change
Expand Up @@ -17,7 +17,7 @@ type API struct {
Internal struct {
MaxBlobSize func(ctx context.Context) (uint64, error) `perm:"read"`
Get func(ctx context.Context, ids []da.ID, ns da.Namespace) ([]da.Blob, error) `perm:"read"`
GetIDs func(ctx context.Context, height uint64, ns da.Namespace) ([]da.ID, error) `perm:"read"`
GetIDs func(ctx context.Context, height uint64, ns da.Namespace) (*da.GetIDsResult, error) `perm:"read"`
GetProofs func(ctx context.Context, ids []da.ID, ns da.Namespace) ([]da.Proof, error) `perm:"read"`
Commit func(ctx context.Context, blobs []da.Blob, ns da.Namespace) ([]da.Commitment, error) `perm:"read"`
Validate func(context.Context, []da.ID, []da.Proof, da.Namespace) ([]bool, error) `perm:"read"`
Expand All @@ -33,7 +33,7 @@ func (api *API) Get(ctx context.Context, ids []da.ID, ns da.Namespace) ([]da.Blo
return api.Internal.Get(ctx, ids, ns)
}

func (api *API) GetIDs(ctx context.Context, height uint64, ns da.Namespace) ([]da.ID, error) {
func (api *API) GetIDs(ctx context.Context, height uint64, ns da.Namespace) (*da.GetIDsResult, error) {
return api.Internal.GetIDs(ctx, height, ns)
}

Expand Down
67 changes: 59 additions & 8 deletions nodebuilder/da/service.go
Original file line number Diff line number Diff line change
Expand Up @@ -13,6 +13,7 @@ import (
"github.com/celestiaorg/celestia-app/v2/pkg/appconsts"

"github.com/celestiaorg/celestia-node/blob"
"github.com/celestiaorg/celestia-node/header"
nodeblob "github.com/celestiaorg/celestia-node/nodebuilder/blob"
"github.com/celestiaorg/celestia-node/share"
"github.com/celestiaorg/celestia-node/state"
Expand All @@ -28,12 +29,17 @@ var log = logging.Logger("go-da")
const heightLen = 8

type Service struct {
blobServ nodeblob.Module
blobServ nodeblob.Module
headerGetter func(context.Context, uint64) (*header.ExtendedHeader, error)
}

func NewService(blobMod nodeblob.Module) *Service {
func NewService(
blobMod nodeblob.Module,
headerGetter func(context.Context, uint64) (*header.ExtendedHeader, error),
) *Service {
return &Service{
blobServ: blobMod,
blobServ: blobMod,
headerGetter: headerGetter,
}
}

Expand All @@ -59,21 +65,25 @@ func (s *Service) Get(ctx context.Context, ids []da.ID, ns da.Namespace) ([]da.B
}

// GetIDs returns IDs of all Blobs located in DA at given height.
func (s *Service) GetIDs(ctx context.Context, height uint64, namespace da.Namespace) ([]da.ID, error) {
func (s *Service) GetIDs(ctx context.Context, height uint64, namespace da.Namespace) (*da.GetIDsResult, error) {
var ids []da.ID //nolint:prealloc
log.Debugw("getting ids", "height", height, "namespace", share.Namespace(namespace))
blobs, err := s.blobServ.GetAll(ctx, height, []share.Namespace{namespace})
log.Debugw("got ids", "height", height, "namespace", share.Namespace(namespace))
if err != nil {
if strings.Contains(err.Error(), blob.ErrBlobNotFound.Error()) {
return nil, nil
return nil, nil //nolint:nilnil
}
return nil, err
}
for _, b := range blobs {
ids = append(ids, MakeID(height, b.Commitment))
}
return ids, nil
h, err := s.headerGetter(ctx, height)
if err != nil {
return nil, err
}
return &da.GetIDsResult{IDs: ids, Timestamp: h.Time()}, nil
}

// GetProofs returns inclusion Proofs for all Blobs located in DA at given height.
Expand Down Expand Up @@ -105,15 +115,31 @@ func (s *Service) Submit(
daBlobs []da.Blob,
gasPrice float64,
namespace da.Namespace,
) ([]da.ID, error) {
return s.SubmitWithOptions(ctx, daBlobs, gasPrice, namespace, nil)
}

// SubmitWithOptions submits the Blobs to Data Availability layer.
func (s *Service) SubmitWithOptions(
ctx context.Context,
daBlobs []da.Blob,
gasPrice float64,
namespace da.Namespace,
options []byte,
) ([]da.ID, error) {
blobs, _, err := s.blobsAndCommitments(daBlobs, namespace)
if err != nil {
return nil, err
}

opts := state.NewTxConfig(state.WithGasPrice(gasPrice))
opts, err := parseOptions(options)
if err != nil {
return nil, err
}
opts = append(opts, state.WithGasPrice(gasPrice))
cfg := state.NewTxConfig(opts...)

height, err := s.blobServ.Submit(ctx, blobs, opts)
height, err := s.blobServ.Submit(ctx, blobs, cfg)
if err != nil {
log.Error("failed to submit blobs", "height", height, "gas price", gasPrice)
return nil, err
Expand All @@ -126,6 +152,31 @@ func (s *Service) Submit(
return ids, nil
}

func parseOptions(options []byte) ([]state.ConfigOption, error) {
parsedOpts := struct {
KeyName string
SignerAddress string
FeeGranterAddress string
}{}

err := json.Unmarshal(options, &parsedOpts)
if err != nil {
return nil, err
}

var opts []state.ConfigOption
if parsedOpts.KeyName != "" {
opts = append(opts, state.WithKeyName(parsedOpts.KeyName))
}
if parsedOpts.SignerAddress != "" {
opts = append(opts, state.WithSignerAddress(parsedOpts.SignerAddress))
}
if parsedOpts.FeeGranterAddress != "" {
opts = append(opts, state.WithFeeGranterAddress(parsedOpts.FeeGranterAddress))
}
return opts, nil
}

// blobsAndCommitments converts []da.Blob to []*blob.Blob and generates corresponding
// []da.Commitment
func (s *Service) blobsAndCommitments(
Expand Down

0 comments on commit 9332823

Please sign in to comment.