Skip to content

Commit

Permalink
v2 blob metadata store
Browse files Browse the repository at this point in the history
  • Loading branch information
ian-shim committed Oct 18, 2024
1 parent 719dfc8 commit 75c03ab
Show file tree
Hide file tree
Showing 9 changed files with 567 additions and 1,033 deletions.
25 changes: 25 additions & 0 deletions core/data.go
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@ package core

import (
"encoding/binary"
"encoding/hex"
"errors"
"fmt"
"math/big"
Expand Down Expand Up @@ -517,3 +518,27 @@ type ActiveReservation struct {
type OnDemandPayment struct {
CumulativePayment *big.Int // Total amount deposited by the user
}

type BlobVersion uint32

type BlobKey [32]byte

func (b BlobKey) Hex() string {
return hex.EncodeToString(b[:])
}

func HexToBlobKey(h string) (BlobKey, error) {
b, err := hex.DecodeString(h)
if err != nil {
return BlobKey{}, err
}
return BlobKey(b), nil
}

type BlobHeaderV2 struct {
BlobVersion BlobVersion `json:"version"`
QuorumIDs []QuorumID `json:"quorum_ids"`
BlobCommitment encoding.BlobCommitments `json:"commitments"`

PaymentMetadata `json:"payment_metadata"`
}
47 changes: 10 additions & 37 deletions disperser/common/v2/blob.go
Original file line number Diff line number Diff line change
@@ -1,11 +1,6 @@
package v2

import (
"encoding/hex"

"github.com/Layr-Labs/eigenda/core"
"github.com/Layr-Labs/eigenda/encoding"
)
import "github.com/Layr-Labs/eigenda/core"

type BlobStatus uint

Expand All @@ -16,36 +11,14 @@ const (
Failed
)

type BlobVersion uint32

type BlobKey [32]byte

func (b BlobKey) Hex() string {
return hex.EncodeToString(b[:])
}

func HexToBlobKey(h string) (BlobKey, error) {
b, err := hex.DecodeString(h)
if err != nil {
return BlobKey{}, err
}
return BlobKey(b), nil
}

type BlobHeader struct {
BlobVersion BlobVersion `json:"version"`
BlobQuorumInfos []*core.BlobQuorumInfo `json:"blob_quorum_infos"`
BlobCommitment encoding.BlobCommitments `json:"commitments"`

core.PaymentMetadata `json:"payment_metadata"`
}

type BlobMetadata struct {
BlobHeader `json:"blob_header"`

BlobStatus BlobStatus `json:"blob_status"`
Expiry uint64 `json:"expiry"`
NumRetries uint `json:"num_retries"`
BlobSize uint64 `json:"blob_size"`
RequestedAt uint64 `json:"requested_at"`
core.BlobHeaderV2 `json:"blob_header"`

BlobKey core.BlobKey `json:"blob_key"`
BlobStatus BlobStatus `json:"blob_status"`
// Expiry is Unix timestamp of the blob expiry in seconds from epoch
Expiry uint64 `json:"expiry"`
NumRetries uint `json:"num_retries"`
BlobSize uint64 `json:"blob_size"`
RequestedAt uint64 `json:"requested_at"`
}
15 changes: 15 additions & 0 deletions disperser/common/v2/blobstore/blob_metadata_store.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,15 @@
package blobstore

import (
"context"

"github.com/Layr-Labs/eigenda/core"
v2 "github.com/Layr-Labs/eigenda/disperser/common/v2"
)

type BlobMetadataStore interface {
PutBlobMetadata(ctx context.Context, metadata *v2.BlobMetadata) error
GetBlobMetadata(ctx context.Context, blobKey core.BlobKey) (*v2.BlobMetadata, error)
GetBlobMetadataByStatus(ctx context.Context, status v2.BlobStatus) ([]*v2.BlobMetadata, error)
GetBlobMetadataCountByStatus(ctx context.Context, status v2.BlobStatus) (int32, error)
}
137 changes: 137 additions & 0 deletions disperser/common/v2/blobstore/blob_metadata_store_test.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,137 @@
package blobstore_test

import (
"context"
"fmt"
"math/big"
"os"
"testing"
"time"

"github.com/Layr-Labs/eigenda/common/aws"
"github.com/Layr-Labs/eigenda/common/aws/dynamodb"
test_utils "github.com/Layr-Labs/eigenda/common/aws/dynamodb/utils"
"github.com/Layr-Labs/eigenda/encoding"
"github.com/Layr-Labs/eigensdk-go/logging"
"github.com/consensys/gnark-crypto/ecc/bn254"
"github.com/consensys/gnark-crypto/ecc/bn254/fp"
"github.com/google/uuid"

"github.com/Layr-Labs/eigenda/disperser/common/v2/blobstore"
"github.com/Layr-Labs/eigenda/inabox/deploy"
"github.com/ory/dockertest/v3"
)

var (
logger = logging.NewNoopLogger()

dockertestPool *dockertest.Pool
dockertestResource *dockertest.Resource

deployLocalStack bool
localStackPort = "4571"

dynamoClient *dynamodb.Client
blobMetadataStore blobstore.BlobMetadataStore

UUID = uuid.New()
metadataTableName = fmt.Sprintf("test-BlobMetadata-%v", UUID)

mockCommitment = encoding.BlobCommitments{}
)

func TestMain(m *testing.M) {
setup(m)
code := m.Run()
teardown()
os.Exit(code)
}

func setup(m *testing.M) {

deployLocalStack = !(os.Getenv("DEPLOY_LOCALSTACK") == "false")
if !deployLocalStack {
localStackPort = os.Getenv("LOCALSTACK_PORT")
}

if deployLocalStack {
var err error
dockertestPool, dockertestResource, err = deploy.StartDockertestWithLocalstackContainer(localStackPort)
if err != nil {
teardown()
panic("failed to start localstack container")
}

}

cfg := aws.ClientConfig{
Region: "us-east-1",
AccessKey: "localstack",
SecretAccessKey: "localstack",
EndpointURL: fmt.Sprintf("http://0.0.0.0:%s", localStackPort),
}

_, err := test_utils.CreateTable(context.Background(), cfg, metadataTableName, blobstore.GenerateTableSchema(metadataTableName, 10, 10))
if err != nil {
teardown()
panic("failed to create dynamodb table: " + err.Error())
}

dynamoClient, err = dynamodb.NewClient(cfg, logger)
if err != nil {
teardown()
panic("failed to create dynamodb client: " + err.Error())
}

blobMetadataStore = blobstore.NewBlobMetadataStore(dynamoClient, logger, metadataTableName, time.Hour)

var X1, Y1 fp.Element
X1 = *X1.SetBigInt(big.NewInt(1))
Y1 = *Y1.SetBigInt(big.NewInt(2))

var lengthXA0, lengthXA1, lengthYA0, lengthYA1 fp.Element
_, err = lengthXA0.SetString("10857046999023057135944570762232829481370756359578518086990519993285655852781")
if err != nil {
teardown()
panic("failed to create mock commitment: " + err.Error())
}
_, err = lengthXA1.SetString("11559732032986387107991004021392285783925812861821192530917403151452391805634")
if err != nil {
teardown()
panic("failed to create mock commitment: " + err.Error())
}
_, err = lengthYA0.SetString("8495653923123431417604973247489272438418190587263600148770280649306958101930")
if err != nil {
teardown()
panic("failed to create mock commitment: " + err.Error())
}
_, err = lengthYA1.SetString("4082367875863433681332203403145435568316851327593401208105741076214120093531")
if err != nil {
teardown()
panic("failed to create mock commitment: " + err.Error())
}

var lengthProof, lengthCommitment bn254.G2Affine
lengthProof.X.A0 = lengthXA0
lengthProof.X.A1 = lengthXA1
lengthProof.Y.A0 = lengthYA0
lengthProof.Y.A1 = lengthYA1

lengthCommitment = lengthProof

mockCommitment = encoding.BlobCommitments{
Commitment: &encoding.G1Commitment{
X: X1,
Y: Y1,
},
LengthCommitment: (*encoding.G2Commitment)(&lengthCommitment),
LengthProof: (*encoding.G2Commitment)(&lengthProof),
Length: 10,
}
}

func teardown() {
if deployLocalStack {
deploy.PurgeDockertestResources(dockertestPool, dockertestResource)
}
}
Loading

0 comments on commit 75c03ab

Please sign in to comment.