Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Add inabox-docker framework for 'docker-compose up' local deploys #39

Closed
wants to merge 1 commit into from
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
5 changes: 4 additions & 1 deletion .gitignore
Original file line number Diff line number Diff line change
@@ -1,8 +1,11 @@
inabox/testdata/*
inabox/anvil.pid
inabox/resources/kzg/SRSTables/*

inabox-docker/testdata/*
inabox-docker/resources/kzg/SRSTables/*

test/testdata/*
inabox/resources/kzg/SRSTables/*

**/bin/*
coverage.*
2 changes: 1 addition & 1 deletion common/aws/dynamodb/client_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -67,7 +67,7 @@ func teardown() {

func createTable(t *testing.T, tableName string) {
ctx := context.Background()
tableDescription, err := test_utils.CreateTable(ctx, clientConfig, tableName, &dynamodb.CreateTableInput{
tableDescription, err := test_utils.CreateTableIfNotExists(ctx, clientConfig, tableName, &dynamodb.CreateTableInput{
AttributeDefinitions: []types.AttributeDefinition{{
AttributeName: aws.String("MetadataKey"),
AttributeType: types.ScalarAttributeTypeS,
Expand Down
42 changes: 35 additions & 7 deletions common/aws/dynamodb/utils/test_utils.go
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@ package test_utils

import (
"context"
"errors"
"time"

commonaws "github.com/Layr-Labs/eigenda/common/aws"
Expand All @@ -17,25 +18,52 @@ const (
waiterDuration = 15 * time.Second
)

func CreateTable(ctx context.Context, cfg commonaws.ClientConfig, name string, input *dynamodb.CreateTableInput) (*types.TableDescription, error) {
func CreateTableIfNotExists(ctx context.Context, cfg commonaws.ClientConfig, name string, input *dynamodb.CreateTableInput) (*types.TableDescription, error) {
c, err := getClient(cfg)
if err != nil {
return nil, err
}
table, err := c.CreateTable(ctx, input)

// Check if the table already exists
_, err = c.DescribeTable(ctx, &dynamodb.DescribeTableInput{
TableName: aws.String(name),
})

// If the table does not exist, create it
if err != nil {
return nil, err
var aerr *types.ResourceNotFoundException
if errors.As(err, &aerr) {
// Table does not exist, so create it
table, err := c.CreateTable(ctx, input)
if err != nil {
return nil, err
}

// Wait for the table to be created
waiter := dynamodb.NewTableExistsWaiter(c)
err = waiter.Wait(ctx, &dynamodb.DescribeTableInput{
TableName: aws.String(name),
}, waiterDuration)
if err != nil {
return nil, err
}

return table.TableDescription, nil
} else {
// Some other error occurred
return nil, err
}
}

waiter := dynamodb.NewTableExistsWaiter(c)
err = waiter.Wait(ctx, &dynamodb.DescribeTableInput{
// If the table exists, return its description
tableDescription, err := c.DescribeTable(ctx, &dynamodb.DescribeTableInput{
TableName: aws.String(name),
}, waiterDuration)
})
if err != nil {
return nil, err
}

return table.TableDescription, nil
return tableDescription.Table, nil
}

func getClient(clientConfig commonaws.ClientConfig) (*dynamodb.Client, error) {
Expand Down
55 changes: 55 additions & 0 deletions common/aws/s3/utils/utils.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,55 @@
package utils

import (
"context"
"fmt"
"log"

"github.com/aws/aws-sdk-go-v2/aws"
"github.com/aws/aws-sdk-go-v2/config"
"github.com/aws/aws-sdk-go-v2/credentials"
"github.com/aws/aws-sdk-go-v2/service/s3"
)

func CheckOrCreateBucket(awsAccessKeyID, awsSecretAccessKey, bucketName, region, endpoint string) {
customResolver := aws.EndpointResolverWithOptionsFunc(func(service, region string, options ...interface{}) (aws.Endpoint, error) {
if service == s3.ServiceID {
return aws.Endpoint{
PartitionID: "aws",
URL: endpoint,
SigningRegion: region,
HostnameImmutable: true,
}, nil
}
// Fallback to default resolver
return aws.Endpoint{}, &aws.EndpointNotFoundError{}
})

cfg, err := config.LoadDefaultConfig(context.TODO(),
config.WithRegion(region),
config.WithCredentialsProvider(credentials.NewStaticCredentialsProvider(awsAccessKeyID, awsSecretAccessKey, "")),
config.WithEndpointResolverWithOptions(customResolver),
)
if err != nil {
log.Fatalf("unable to load SDK config, %v", err)
}

s3Client := s3.NewFromConfig(cfg)

_, err = s3Client.HeadBucket(context.TODO(), &s3.HeadBucketInput{
Bucket: aws.String(bucketName),
})

if err == nil {
fmt.Printf("Bucket %s already exists\n", bucketName)
} else {
fmt.Printf("Creating bucket %s\n", bucketName)
_, err = s3Client.CreateBucket(context.TODO(), &s3.CreateBucketInput{
Bucket: aws.String(bucketName),
})
if err != nil {
log.Fatalf("Unable to create bucket %s, %v", bucketName, err)
}
fmt.Printf("Bucket %s created successfully\n", bucketName)
}
}
12 changes: 8 additions & 4 deletions common/geth/cli.go
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,7 @@ import (

var (
rpcUrlFlagName = "chain.rpc"
privateKeyFlagName = "chain.private-key"
PrivateKeyFlagName = "chain.private-key"
)

type EthClientConfig struct {
Expand All @@ -24,9 +24,9 @@ func EthClientFlags(envPrefix string) []cli.Flag {
EnvVar: common.PrefixEnvVar(envPrefix, "CHAIN_RPC"),
},
cli.StringFlag{
Name: privateKeyFlagName,
Name: PrivateKeyFlagName,
Usage: "Ethereum private key for disperser",
Required: true,
Required: false,
EnvVar: common.PrefixEnvVar(envPrefix, "PRIVATE_KEY"),
},
}
Expand All @@ -35,7 +35,11 @@ func EthClientFlags(envPrefix string) []cli.Flag {
func ReadEthClientConfig(ctx *cli.Context) EthClientConfig {
cfg := EthClientConfig{}
cfg.RPCURL = ctx.GlobalString(rpcUrlFlagName)
cfg.PrivateKeyString = ctx.GlobalString(privateKeyFlagName)
pkStr := ctx.GlobalString(PrivateKeyFlagName)
if len(pkStr) >= 2 && pkStr[:2] == "0x" {
pkStr = pkStr[2:]
}
cfg.PrivateKeyString = pkStr
return cfg
}

Expand Down
2 changes: 1 addition & 1 deletion common/store/dynamo_store_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -59,7 +59,7 @@ func setup(m *testing.M) {
panic("failed to create dynamodb client: " + err.Error())
}

_, err = test_utils.CreateTable(context.Background(), cfg, bucketTableName, store.GenerateTableSchema(10, 10, bucketTableName))
_, err = test_utils.CreateTableIfNotExists(context.Background(), cfg, bucketTableName, store.GenerateTableSchema(10, 10, bucketTableName))
if err != nil {
teardown()
panic("failed to create dynamodb table: " + err.Error())
Expand Down
6 changes: 3 additions & 3 deletions contracts/foundry.toml
Original file line number Diff line number Diff line change
Expand Up @@ -2,15 +2,15 @@
src = 'src'
out = 'out'
libs = ['lib']
fs_permissions = [{ access = "read-write", path = "./"}]
fs_permissions = [{ access = "read-write", path = "./" }]

remappings = [
"@eigenlayer-middleware/=lib/eigenlayer-middleware/src/",
"@eigenlayer-core/=lib/eigenlayer-contracts/src/",
"@eigenlayer-scripts/=lib/eigenlayer-contracts/script/",
"@openzeppelin/=lib/openzeppelin-contracts/",
"@openzeppelin-upgrades/=lib/openzeppelin-contracts-upgradeable/",
"forge-std/=lib/forge-std/src/"
"forge-std/=lib/forge-std/src/",
]

gas_reports = ["*"]
Expand All @@ -24,4 +24,4 @@ optimizer_runs = 200
# Whether or not to use the Yul intermediate representation compilation pipeline
via_ir = false
# Override the Solidity version (this overrides `auto_detect_solc`)
solc_version = '0.8.12'
solc_version = '0.8.12'
2 changes: 1 addition & 1 deletion contracts/lib/eigenlayer-contracts
Submodule eigenlayer-contracts updated 45 files
+0 −23 .github/workflows/commitlint.yml
+0 −1 .github/workflows/testinparallel.yml
+0 −4 .husky/commit-msg
+0 −38 CONTRIBUTING.md
+287 −0 CVL2.py
+0 −19 README.md
+0 −1 commitlint.config.js
+73 −0 docs/core/EigenPod.md
+76 −3,020 package-lock.json
+0 −3 package.json
+12 −0 script/M2_deploy.config.json
+129 −0 script/milestone/M2Deploy.sol
+5 −5 script/output/M2_deployment_data_goerli.json
+14 −0 script/utils/Allocator.sol
+346 −0 src/contracts/libraries/BN254.sol
+10 −10 src/contracts/libraries/BeaconChainProofs.sol
+283 −0 src/contracts/libraries/BitmapUtils.sol
+5 −13 src/contracts/pods/EigenPod.sol
+0 −2 src/test/EigenLayerTestHelper.t.sol
+513 −152 src/test/EigenPod.t.sol
+128 −0 src/test/Registration.t.sol
+1 −1 src/test/WithdrawalMigration.t.sol
+0 −42 src/test/events/IEigenPodEvents.sol
+41 −0 src/test/harnesses/BitmapUtilsWrapper.sol
+2 −42 src/test/harnesses/EigenPodHarness.sol
+0 −52 src/test/mocks/DelayedWithdrawalRouterMock.sol
+0 −1 src/test/test-data/balanceUpdateProof_balance28ETH_302913.json
+1 −1 src/test/test-data/fullWithdrawalProof_Latest.json
+0 −1 src/test/test-data/fullWithdrawalProof_Latest_28ETH.json
+1 −1 src/test/test-data/partialWithdrawalProof_Latest.json
+0 −1 src/test/test-data/withdrawal_credential_proof_302913_30ETHBalance.json
+2 −2 src/test/tree/EigenPodManagerUnit.tree
+0 −171 src/test/tree/EigenPodUnit.tree
+0 −111 src/test/tree/StrategyManangerUnit.tree
+180 −0 src/test/unit/BitmapUtils.t.sol
+1 −3 src/test/unit/DelegationUnit.t.sol
+33 −11 src/test/unit/EigenPodManagerUnit.t.sol
+0 −1,034 src/test/unit/EigenPodUnit.t.sol
+1 −1 src/test/unit/SlasherUnit.t.sol
+757 −866 src/test/unit/StrategyManagerUnit.t.sol
+1 −1 src/test/unit/Utils.sol
+0 −35 src/test/utils/EigenLayerUnitTestBase.sol
+15 −23 src/test/utils/EigenLayerUnitTestSetup.sol
+32 −0 src/test/utils/Operators.sol
+10 −4 src/test/utils/ProofParsing.sol
2 changes: 1 addition & 1 deletion contracts/lib/eigenlayer-middleware
Submodule eigenlayer-middleware updated 46 files
+0 −23 .github/workflows/commitlint.yml
+0 −4 .husky/commit-msg
+0 −37 CONTRIBUTING.md
+12 −25 README.md
+0 −1 commitlint.config.js
+7 −4 docs/AVS-Guide.md
+0 −0 docs/middleware/BLSOperatorStateRetriever.md
+0 −0 docs/middleware/BLSPubkeyRegistry.md
+0 −0 docs/middleware/BLSPublicKeyCompendium.md
+0 −0 docs/middleware/BLSRegistryCoordinatorWithIndices.md
+0 −0 docs/middleware/BLSSignatureChecker.md
+0 −0 docs/middleware/IndexRegistry.md
+86 −0 docs/middleware/README.md
+0 −0 docs/middleware/StakeRegistry.md
+1 −1 lib/eigenlayer-contracts
+0 −2,137 package-lock.json
+0 −8 package.json
+0 −28 script/configs/AVSContractsDeploy.json
+1 −2 src/BLSOperatorStateRetriever.sol
+1 −2 src/BLSPubkeyRegistry.sol
+1 −2 src/BLSPubkeyRegistryStorage.sol
+1 −2 src/BLSPublicKeyCompendium.sol
+8 −4 src/BLSRegistryCoordinatorWithIndices.sol
+3 −4 src/BLSSignatureChecker.sol
+1 −0 src/IndexRegistry.sol
+4 −6 src/ServiceManagerBase.sol
+9 −3 src/StakeRegistry.sol
+6 −0 src/VoteWeigherBase.sol
+1 −1 src/interfaces/IBLSPubkeyRegistry.sol
+1 −1 src/interfaces/IBLSPublicKeyCompendium.sol
+1 −1 src/interfaces/IBLSRegistry.sol
+1 −1 src/interfaces/IBLSRegistryCoordinatorWithIndices.sol
+1 −1 src/interfaces/IBLSSignatureChecker.sol
+1 −2 src/interfaces/IServiceManager.sol
+0 −346 src/libraries/BN254.sol
+0 −283 src/libraries/BitmapUtils.sol
+2 −2 test/ffi/BLSSignatureCheckerFFI.t.sol
+1 −1 test/ffi/util/G2Operations.sol
+1 −1 test/harnesses/BitmapUtilsWrapper.sol
+5 −0 test/harnesses/StakeRegistryHarness.sol
+1 −1 test/mocks/BLSPublicKeyCompendiumMock.sol
+1 −1 test/unit/StakeRegistryUnit.t.sol
+2 −2 test/utils/BLSMockAVSDeployer.sol
+2 −2 test/utils/MockAVSDeployer.sol
+1 −1 test/utils/Operators.sol
+1 −1 test/utils/ProofParsing.sol
2 changes: 1 addition & 1 deletion disperser/blobstore/blobstore_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -76,7 +76,7 @@ func setup(m *testing.M) {
panic("failed to create dynamodb client: " + err.Error())
}

_, err = test_utils.CreateTable(context.Background(), cfg, metadataTableName, blobstore.GenerateTableSchema(metadataTableName, 10, 10))
_, err = test_utils.CreateTableIfNotExists(context.Background(), cfg, metadataTableName, blobstore.GenerateTableSchema(metadataTableName, 10, 10))
if err != nil {
teardown()
panic("failed to create dynamodb table: " + err.Error())
Expand Down
2 changes: 1 addition & 1 deletion disperser/proto/protogen/encoder/encoder.pb.go

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

12 changes: 4 additions & 8 deletions disperser/proto/protogen/encoder/encoder_grpc.pb.go

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

1 change: 1 addition & 0 deletions inabox-docker/.gitignore
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
data/
41 changes: 41 additions & 0 deletions inabox-docker/Makefile
Original file line number Diff line number Diff line change
@@ -0,0 +1,41 @@
dt := $(shell date '+%YY-%mM-%dD-%HH-%MM-%SS')

new-anvil:
mkdir -p "testdata/$(dt)"
cp ./templates/testconfig-anvil.yaml "testdata/$(dt)/config.yaml"

new-docker-anvil:
mkdir -p "testdata/$(dt)"
cp ./templates/testconfig-anvil-docker.yaml "testdata/$(dt)/config.yaml"

config:
go run ./deploy/cmd
$(eval CURRENT_TESTDATA := $(shell ls -1r testdata/ | head -n 1))
docker-compose \
-f docker-compose.yml \
-f testdata/$(CURRENT_TESTDATA)/docker-compose.yml \
config > testdata/$(CURRENT_TESTDATA)/docker-compose.all.yml

devnet-up:
$(eval CURRENT_TESTDATA := $(shell ls -1r testdata/ | head -n 1))
docker-compose -f testdata/$(CURRENT_TESTDATA)/docker-compose.all.yml up --detach

devnet-logs:
$(eval CURRENT_TESTDATA := $(shell ls -1r testdata/ | head -n 1))
docker-compose -f testdata/$(CURRENT_TESTDATA)/docker-compose.all.yml logs --follow

devnet-down:
$(eval CURRENT_TESTDATA := $(shell ls -1r testdata/ | head -n 1))
docker-compose -f testdata/$(CURRENT_TESTDATA)/docker-compose.all.yml down --volumes

# run-e2e:
# go test ./tests -v -config=../templates/testconfig-anvil.yaml

# run-e2e-nochurner:
# go test ./tests -v -config=../templates/testconfig-anvil-nochurner.yaml

# run-e2e-nograph:
# go test ./tests -v -config=../templates/testconfig-anvil-nograph.yaml

clean:
rm -rf testdata/*
8 changes: 8 additions & 0 deletions inabox-docker/README.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
# Inabox Docker Environment

A fully docker-based local EigenDA environment.

### Usage

1. `make devnet-up`
2. `make devnet-logs`
Loading
Loading