├── .devcontainer ├── Dockerfile ├── devcontainer.json └── install.sh ├── .dockerignore ├── .gitattributes ├── .github ├── CODEOWNERS ├── ISSUE_TEMPLATE │ ├── bug_report.yml │ ├── documentation.yml │ ├── enhancement.yml │ ├── feature.yml │ └── question.yml ├── actions │ └── test-coverage │ │ ├── action.yml │ │ └── coverage.sh ├── dependabot.yml ├── pull_request_template.md └── workflows │ ├── buf-proto.yaml │ ├── codeql-scanning.yaml │ ├── compile-protobufs.yaml │ ├── docker-publish-release.yaml │ ├── docker-publish.yaml │ ├── golangci-lint.yml │ ├── integration-tests.yml │ ├── mdbook.yaml │ ├── pr-title.yaml │ ├── test-contracts.yml │ └── unit-tests.yml ├── .gitignore ├── .gitmodules ├── .golangci.yml ├── Dockerfile ├── GitVersion.yml ├── LICENSE ├── Makefile ├── README.md ├── SECURITY.md ├── api ├── Makefile ├── buf.yaml ├── builder │ ├── Dockerfile │ ├── README.md │ ├── build-docker.sh │ ├── clean.sh │ ├── debug-docker.sh │ ├── is-repo-clean.sh │ ├── protoc-docker.sh │ ├── protoc.sh │ └── rm-docker.sh ├── clients │ ├── codecs │ │ ├── blob_codec.go │ │ ├── blob_codec_test.go │ │ ├── default_blob_codec.go │ │ ├── fft.go │ │ ├── ifft_codec.go │ │ ├── no_ifft_codec.go │ │ └── polynomial_form.go │ ├── config.go │ ├── config_test.go │ ├── disperser_client.go │ ├── disperser_client_test.go │ ├── eigenda_client.go │ ├── eigenda_client_e2e_test.go │ ├── eigenda_client_test.go │ ├── mock │ │ ├── disperser_client.go │ │ ├── disperser_server.go │ │ ├── node_client.go │ │ ├── retrieval_client.go │ │ └── static_request_signer.go │ ├── node_client.go │ ├── retrieval_client.go │ ├── retrieval_client_test.go │ └── v2 │ │ ├── README.md │ │ ├── accountant.go │ │ ├── accountant_test.go │ │ ├── assets │ │ └── core_clients_v2.svg │ │ ├── cert_builder.go │ │ ├── cert_verifier_address_provider.go │ │ ├── coretypes │ │ ├── blob.go │ │ ├── blob_test.go │ │ ├── conversion_utils.go │ │ ├── conversion_utils_test.go │ │ ├── eigenda_cert.go │ │ ├── encoded_payload.go │ │ ├── encoded_payload_test.go │ │ └── payload.go │ │ ├── dispersal_request_signer.go │ │ ├── dispersal_request_signer_test.go │ │ ├── disperser_client.go │ │ ├── disperser_client_test.go │ │ ├── examples │ │ ├── client_construction.go │ │ ├── example_relay_retrieval_test.go │ │ ├── example_validator_retrieval_test.go │ │ └── utils.go │ │ ├── mock │ │ ├── node_client.go │ │ ├── relay_client.go │ │ └── retrieval_client.go │ │ ├── node_client.go │ │ ├── payload_client_config.go │ │ ├── payload_retriever.go │ │ ├── payloaddispersal │ │ ├── check_thresholds.go │ │ ├── payload_disperser.go │ │ └── payload_disperser_config.go │ │ ├── payloadretrieval │ │ ├── relay_payload_retriever.go │ │ ├── relay_payload_retriever_config.go │ │ ├── relay_payload_retriever_test.go │ │ ├── test │ │ │ └── test_relay_url_provider.go │ │ ├── validator_payload_retriever.go │ │ └── validator_payload_retriever_config.go │ │ ├── relay │ │ ├── key_lock.go │ │ ├── key_lock_test.go │ │ ├── relay_client.go │ │ └── relay_url_provider.go │ │ ├── utils.go │ │ ├── validator │ │ ├── internal │ │ │ ├── blob_decoder.go │ │ │ ├── chunk_deserializer.go │ │ │ └── validator_grpc_manager.go │ │ ├── mock │ │ │ ├── mock_blob_decoder.go │ │ │ ├── mock_chunk_deserializer.go │ │ │ └── mock_validator_grpc_manager.go │ │ ├── retrieval_worker.go │ │ ├── validator_client.go │ │ ├── validator_client_config.go │ │ ├── validator_client_metrics.go │ │ ├── validator_client_test.go │ │ └── validator_non_mock_test.go │ │ └── verification │ │ ├── block_number_monitor.go │ │ ├── block_number_monitor_test.go │ │ ├── cert_verifier.go │ │ ├── commitment_utils.go │ │ ├── commitment_utils_test.go │ │ ├── errors.go │ │ ├── router_cert_verifier_address_provider.go │ │ ├── static_cert_verifier_address_provider.go │ │ └── test │ │ └── test_cert_verifier_address_provider.go ├── constants.go ├── errors.go ├── errors_test.go ├── grpc │ ├── churner │ │ ├── churner.pb.go │ │ └── churner_grpc.pb.go │ ├── common │ │ ├── common.pb.go │ │ └── v2 │ │ │ └── common_v2.pb.go │ ├── disperser │ │ ├── disperser.pb.go │ │ ├── disperser_grpc.pb.go │ │ └── v2 │ │ │ ├── disperser_v2.pb.go │ │ │ ├── disperser_v2_grpc.pb.go │ │ │ └── mock │ │ │ └── disperser_mock.go │ ├── encoder │ │ ├── encoder.pb.go │ │ ├── encoder_grpc.pb.go │ │ └── v2 │ │ │ ├── encoder_v2.pb.go │ │ │ └── encoder_v2_grpc.pb.go │ ├── mock │ │ ├── disperser.go │ │ └── node_disperser_client.go │ ├── node │ │ ├── node.pb.go │ │ └── node_grpc.pb.go │ ├── relay │ │ ├── relay.pb.go │ │ └── relay_grpc.pb.go │ ├── retriever │ │ ├── retriever.pb.go │ │ ├── retriever_grpc.pb.go │ │ └── v2 │ │ │ ├── retriever_v2.pb.go │ │ │ └── retriever_v2_grpc.pb.go │ └── validator │ │ ├── node_v2.pb.go │ │ └── node_v2_grpc.pb.go ├── hashing │ ├── node_hashing.go │ ├── payment_state_hashing.go │ ├── relay_hashing.go │ └── utils.go └── proto │ ├── README.md │ ├── churner │ └── churner.proto │ ├── common │ ├── common.proto │ └── v2 │ │ └── common_v2.proto │ ├── disperser │ ├── disperser.proto │ └── v2 │ │ └── disperser_v2.proto │ ├── encoder │ ├── encoder.proto │ └── v2 │ │ └── encoder_v2.proto │ ├── node │ └── node.proto │ ├── relay │ └── relay.proto │ ├── retriever │ ├── retriever.proto │ └── v2 │ │ └── retriever_v2.proto │ └── validator │ └── node_v2.proto ├── common ├── abi.go ├── abis │ └── EigenDAServiceManager.json ├── aws │ ├── cli.go │ ├── dynamodb │ │ ├── client.go │ │ ├── client_test.go │ │ ├── utils │ │ │ └── test_utils.go │ │ └── utils_test.go │ ├── kms.go │ ├── kms_fuzz_test.go │ ├── mock │ │ ├── dynamodb_client.go │ │ └── s3_client.go │ ├── s3 │ │ ├── client.go │ │ ├── fragment.go │ │ ├── fragment_test.go │ │ ├── s3.go │ │ └── scoped_keys.go │ ├── secretmanager │ │ └── secretmanager.go │ └── test │ │ └── client_test.go ├── cache │ ├── cache.go │ ├── cache_metrics.go │ ├── fifo_cache.go │ ├── fifo_cache_test.go │ └── thread_safe_cache.go ├── common.go ├── common_test.go ├── deterministic_rand.go ├── ethclient.go ├── fireblocks_config.go ├── geth │ ├── cli.go │ ├── client.go │ ├── failover.go │ ├── handle_error.go │ ├── instrumented_client.go │ ├── multihoming_client.go │ └── multihoming_client_test.go ├── healthcheck │ ├── heartbeat.go │ ├── heartbeat_test.go │ └── server.go ├── index_lock.go ├── kms_wallet_config.go ├── kvstore │ ├── batch.go │ ├── key.go │ ├── leveldb │ │ ├── leveldb_store.go │ │ └── metrics.go │ ├── mapstore │ │ └── map_store.go │ ├── store.go │ ├── table.go │ ├── tablestore │ │ ├── config.go │ │ ├── key_test.go │ │ ├── table_store.go │ │ ├── table_store_batch.go │ │ ├── table_store_builder.go │ │ ├── table_store_iterator.go │ │ ├── table_store_keys.go │ │ ├── table_store_test.go │ │ ├── ttl_test.go │ │ └── util.go │ └── test │ │ ├── store_performance_test.go │ │ ├── store_test.go │ │ └── table_as_a_store.go ├── logger_config.go ├── memory │ ├── Dockerfile.memtest │ ├── memory.go │ ├── memory_test.go │ └── run_memory_test.sh ├── mock │ ├── ethclient.go │ ├── ratelimiter.go │ ├── rpc_ethclient.go │ └── workerpool.go ├── param_store.go ├── pprof │ └── server.go ├── pubip │ ├── mock_provider.go │ ├── multi_provider.go │ ├── pubip.go │ ├── pubip_test.go │ └── simple_provider.go ├── ratelimit.go ├── ratelimit │ ├── limiter.go │ ├── limiter_cli.go │ └── ratelimit_test.go ├── ratelimit_test.go ├── read_only_map.go ├── read_only_map_test.go ├── replay │ ├── no_op_replay_gaurdian.go │ ├── replay_gaurdian.go │ ├── replay_gaurdian_test.go │ └── replay_guardian_impl.go ├── rpc_ethclient.go ├── stage_timer.go ├── store │ ├── dynamo_store.go │ ├── dynamo_store_test.go │ ├── local_store.go │ └── local_store_test.go ├── testutils │ ├── random │ │ ├── test_random.go │ │ └── test_random_test.go │ ├── size_of.go │ ├── test_utils.go │ └── test_utils_test.go └── workerpool.go ├── contracts ├── .dockerignore ├── .gitignore ├── Dockerfile ├── Makefile ├── README.md ├── bindings │ ├── AVSDirectory │ │ └── binding.go │ ├── BLSApkRegistry │ │ └── binding.go │ ├── BN254 │ │ └── binding.go │ ├── BitmapUtils │ │ └── binding.go │ ├── DelegationManager │ │ └── binding.go │ ├── EigenDACertVerifier │ │ └── binding.go │ ├── EigenDACertVerifierRouter │ │ └── binding.go │ ├── EigenDACertVerifierV1 │ │ └── binding.go │ ├── EigenDACertVerifierV2 │ │ └── binding.go │ ├── EigenDADisperserRegistry │ │ └── binding.go │ ├── EigenDARelayRegistry │ │ └── binding.go │ ├── EigenDAServiceManager │ │ └── binding.go │ ├── EigenDAStateRetriever │ │ └── binding.go │ ├── EigenDAThresholdRegistry │ │ └── binding.go │ ├── EjectionManager │ │ └── binding.go │ ├── IEigenDACertTypeBindings │ │ └── binding.go │ ├── IEigenDACertVerifierLegacy │ │ └── binding.go │ ├── IEigenDARelayRegistry │ │ └── binding.go │ ├── IEigenDAServiceManager │ │ └── binding.go │ ├── IIndexRegistry │ │ └── binding.go │ ├── MockRollup │ │ └── binding.go │ ├── OperatorStateRetriever │ │ └── binding.go │ ├── PaymentVault │ │ └── binding.go │ ├── RegistryCoordinator │ │ └── binding.go │ ├── SocketRegistry │ │ └── binding.go │ └── StakeRegistry │ │ └── binding.go ├── compile.sh ├── foundry.toml ├── package.json ├── remappings.txt ├── script │ ├── DeployOpenEigenLayer.s.sol │ ├── EigenDADeployer.s.sol │ ├── EigenLayerUtils.s.sol │ ├── EjectionManagerDeployer.s.sol │ ├── GenerateUnitTestHashes.s.sol │ ├── SetUpEigenDA.s.sol │ ├── deploy │ │ ├── certverifier │ │ │ ├── CertVerifierDeployerV1.s.sol │ │ │ ├── CertVerifierDeployerV2.s.sol │ │ │ ├── README.md │ │ │ ├── config │ │ │ │ ├── holesky │ │ │ │ │ ├── preprod.config.json │ │ │ │ │ └── testnet.config.json │ │ │ │ └── sepolia │ │ │ │ │ └── testnet.config.json │ │ │ └── output │ │ │ │ └── h.txt │ │ ├── existing │ │ │ ├── GV2_deployment_2024_6_2.json │ │ │ ├── GV2_preprod_deployment_2024_30_1.json │ │ │ ├── Holesky_preprod.json │ │ │ ├── Holesky_testnet.json │ │ │ ├── M1_deployment_goerli_2023_3_23.json │ │ │ └── M2_from_scratch_deployment_data.json │ │ ├── goerliv2 │ │ │ ├── GoerliV2_Deploy.s.sol │ │ │ ├── config │ │ │ │ ├── preprod.config.json │ │ │ │ └── prod.config.json │ │ │ └── output │ │ │ │ ├── GV2_preprod_deployment_data.json │ │ │ │ └── GV2_prod_deployment_data.json │ │ ├── holesky │ │ │ ├── EigenDASM_RewardsUpgrade.s.sol │ │ │ ├── Holesky_Deploy.s.sol │ │ │ ├── config │ │ │ │ ├── eigenlayer_preprod.config.json │ │ │ │ ├── eigenlayer_preprod_addresses.config.json │ │ │ │ ├── ejector.config.json │ │ │ │ ├── preprod.config.json │ │ │ │ └── testnet.config.json │ │ │ └── output │ │ │ │ ├── holesky_preprod_deployment_data.json │ │ │ │ └── holesky_testnet_deployment_data.json │ │ ├── m2 │ │ │ ├── M2_Deploy.s.sol │ │ │ ├── config │ │ │ │ ├── M2_deploy.config.json │ │ │ │ └── M2_preprod_deploy.config.json │ │ │ └── output │ │ │ │ └── M2_preprod_deployment_data.json │ │ ├── mainnet │ │ │ ├── Mainnet_Deploy.s.sol │ │ │ ├── config │ │ │ │ ├── ejector.config.json │ │ │ │ ├── mainnet.config.json │ │ │ │ └── mainnet_addresses.json │ │ │ └── output │ │ │ │ └── mainnet_deployment_data.json │ │ ├── router │ │ │ ├── CertVerifierRouterDeployer.s.sol │ │ │ ├── README.md │ │ │ └── config │ │ │ │ └── example_config.json │ │ └── verifiable │ │ │ ├── DeployVerifiable.s.sol │ │ │ ├── DeploymentInitializer.sol │ │ │ ├── DeploymentTypes.sol │ │ │ ├── PrintMultisigCalldata.s.sol │ │ │ ├── config │ │ │ └── placeholder.config.toml │ │ │ ├── doc │ │ │ └── DEPLOY.md │ │ │ ├── mocks │ │ │ ├── MockRegistryCoordinator.sol │ │ │ └── MockStakeRegistry.sol │ │ │ └── test │ │ │ └── BeforeVerifiableDeploymentInitialization.s.sol │ └── input │ │ └── .gitkeep ├── src │ ├── Imports.sol │ ├── core │ │ ├── EigenDADisperserRegistry.sol │ │ ├── EigenDADisperserRegistryStorage.sol │ │ ├── EigenDARelayRegistry.sol │ │ ├── EigenDARelayRegistryStorage.sol │ │ ├── EigenDAServiceManager.sol │ │ ├── EigenDAServiceManagerStorage.sol │ │ ├── EigenDAThresholdRegistry.sol │ │ ├── EigenDAThresholdRegistryStorage.sol │ │ ├── PaymentVault.sol │ │ ├── PaymentVaultStorage.sol │ │ ├── interfaces │ │ │ ├── IEigenDABatchMetadataStorage.sol │ │ │ ├── IEigenDADisperserRegistry.sol │ │ │ ├── IEigenDARelayRegistry.sol │ │ │ ├── IEigenDAServiceManager.sol │ │ │ ├── IEigenDASignatureVerifier.sol │ │ │ ├── IEigenDAThresholdRegistry.sol │ │ │ └── IPaymentVault.sol │ │ └── libraries │ │ │ ├── v1 │ │ │ └── EigenDATypesV1.sol │ │ │ └── v2 │ │ │ └── EigenDATypesV2.sol │ └── periphery │ │ └── cert │ │ ├── EigenDACertTypes.sol │ │ ├── EigenDACertVerifier.sol │ │ ├── interfaces │ │ ├── IEigenDACertTypeBindings.sol │ │ ├── IEigenDACertVerifier.sol │ │ ├── IEigenDACertVerifierBase.sol │ │ ├── IEigenDACertVerifierRouter.sol │ │ └── IVersionedEigenDACertVerifier.sol │ │ ├── legacy │ │ ├── IEigenDACertVerifierLegacy.sol │ │ ├── v1 │ │ │ ├── EigenDACertVerificationV1Lib.sol │ │ │ └── EigenDACertVerifierV1.sol │ │ └── v2 │ │ │ ├── EigenDACertVerificationV2Lib.sol │ │ │ └── EigenDACertVerifierV2.sol │ │ ├── libraries │ │ └── EigenDACertVerificationLib.sol │ │ └── router │ │ └── EigenDACertVerifierRouter.sol └── test │ ├── MockEigenDADeployer.sol │ └── unit │ ├── EigenDABlobUtilsV1Unit.t.sol │ ├── EigenDACertVerifierRouterUnit.t.sol │ ├── EigenDACertVerifierV2Unit.t.sol │ ├── EigenDADisperserRegistryUnit.t.sol │ ├── EigenDARelayRegistryUnit.t.sol │ ├── EigenDAServiceManagerUnit.t.sol │ ├── EigenDAThresholdRegistryUnit.t.sol │ └── PaymentVaultUnit.t.sol ├── core ├── aggregation.go ├── aggregation_test.go ├── assignment.go ├── assignment_test.go ├── attestation.go ├── auth.go ├── auth │ ├── auth_test.go │ ├── authenticator.go │ ├── signer.go │ └── v2 │ │ ├── auth_test.go │ │ ├── authenticator.go │ │ ├── signer.go │ │ └── signer_test.go ├── bn254 │ └── attestation.go ├── chainio.go ├── data.go ├── data_test.go ├── eth │ ├── reader.go │ ├── state.go │ ├── utils.go │ └── writer.go ├── indexer │ ├── errors.go │ ├── indexer.go │ ├── indexer_suite_test.go │ ├── operator_pubkeys.go │ ├── operator_pubkeys_filterer.go │ ├── operator_sockets.go │ ├── operator_sockets_filterer.go │ ├── state.go │ ├── state_test.go │ └── upgrader.go ├── meterer │ ├── dynamodb_metering_store.go │ ├── dynamodb_metering_store_test.go │ ├── meterer.go │ ├── meterer_test.go │ ├── metering_store.go │ ├── onchain_state.go │ ├── onchain_state_test.go │ └── util.go ├── mock │ ├── indexed_state.go │ ├── operator_sockets_filterer.go │ ├── payment_state.go │ ├── state.go │ ├── v2 │ │ └── validator.go │ ├── validator.go │ └── writer.go ├── ntp.go ├── serialization.go ├── serialization_test.go ├── state.go ├── state_test.go ├── test │ └── core_test.go ├── thegraph │ ├── config.go │ ├── querier.go │ ├── querier_test.go │ ├── state.go │ ├── state_integration_test.go │ └── state_test.go ├── utils.go ├── v2 │ ├── assignment.go │ ├── assignment_test.go │ ├── auth.go │ ├── blob_params.go │ ├── core_test.go │ ├── errors.go │ ├── serialization.go │ ├── serialization_test.go │ ├── types.go │ ├── types_test.go │ └── validator.go └── validator.go ├── crypto └── ecc │ └── bn254 │ ├── attestation.go │ └── utils.go ├── disperser ├── .gitignore ├── Makefile ├── apiserver │ ├── config.go │ ├── disperse_blob_v2.go │ ├── get_blob_status_v2.go │ ├── metrics_v2.go │ ├── ratelimit_test.go │ ├── server.go │ ├── server_test.go │ ├── server_v2.go │ └── server_v2_test.go ├── batcher │ ├── batcher.go │ ├── batcher_test.go │ ├── encoded_blob_store.go │ ├── encoding_streamer.go │ ├── encoding_streamer_test.go │ ├── finalizer.go │ ├── finalizer_test.go │ ├── grpc │ │ └── dispatcher.go │ ├── metrics.go │ ├── mock │ │ ├── finalizer.go │ │ └── txn_manager.go │ ├── txn_manager.go │ └── txn_manager_test.go ├── cmd │ ├── apiserver │ │ ├── config.go │ │ ├── flags │ │ │ └── flags.go │ │ └── main.go │ ├── batcher │ │ ├── config.go │ │ ├── flags │ │ │ └── flags.go │ │ └── main.go │ ├── controller │ │ ├── config.go │ │ ├── flags │ │ │ └── flags.go │ │ └── main.go │ ├── dataapi │ │ ├── config.go │ │ ├── docs │ │ │ └── docs.go │ │ ├── flags │ │ │ └── flags.go │ │ └── main.go │ └── encoder │ │ ├── config.go │ │ ├── flags │ │ └── flags.go │ │ ├── icicle.Dockerfile │ │ └── main.go ├── common │ ├── blobstore │ │ ├── blob_metadata_store.go │ │ ├── blob_metadata_store_test.go │ │ ├── blobstore_test.go │ │ ├── shared_storage.go │ │ └── shared_storage_test.go │ ├── errors.go │ ├── inmem │ │ ├── store.go │ │ └── store_test.go │ ├── semver │ │ └── semver.go │ ├── utils.go │ └── v2 │ │ ├── blob.go │ │ └── blobstore │ │ ├── blobstore_test.go │ │ ├── dynamo_metadata_store.go │ │ ├── dynamo_metadata_store_test.go │ │ ├── errors.go │ │ ├── instrumented_metadata_store.go │ │ ├── metadata_store.go │ │ ├── s3_blob_store.go │ │ └── s3_blob_store_test.go ├── controller │ ├── blob_set.go │ ├── blob_set_test.go │ ├── controller_test.go │ ├── dispatcher.go │ ├── dispatcher_metrics.go │ ├── dispatcher_test.go │ ├── encoding_manager.go │ ├── encoding_manager_metrics.go │ ├── encoding_manager_test.go │ ├── mock_blob_set.go │ ├── mock_node_client_manager.go │ ├── node_client_manager.go │ ├── node_client_manager_test.go │ ├── recover_state.go │ ├── recover_state_test.go │ ├── signature_receiver.go │ └── signature_receiver_test.go ├── dataapi │ ├── Makefile │ ├── blobs_handlers.go │ ├── config.go │ ├── docs │ │ ├── v1 │ │ │ ├── V1_docs.go │ │ │ ├── V1_swagger.json │ │ │ └── V1_swagger.yaml │ │ └── v2 │ │ │ ├── V2_docs.go │ │ │ ├── V2_swagger.json │ │ │ └── V2_swagger.yaml │ ├── feed_cache_metrics.go │ ├── grpc_service_availability_handler.go │ ├── http_service_availability_handler.go │ ├── metrics.go │ ├── metrics_handler.go │ ├── metrics_handlers.go │ ├── nonsigner_handler.go │ ├── nonsigner_utils.go │ ├── nonsigner_utils_test.go │ ├── operator_handler.go │ ├── prometheus │ │ ├── api.go │ │ ├── config.go │ │ └── mock │ │ │ └── api.go │ ├── prometheus_client.go │ ├── queried_operators_handlers.go │ ├── server.go │ ├── server_test.go │ ├── subgraph │ │ ├── api.go │ │ ├── mock │ │ │ └── api.go │ │ └── queries.go │ ├── subgraph_client.go │ ├── subgraph_client_test.go │ ├── testdata │ │ ├── prometheus-resp-avg-throughput.json │ │ └── prometheus-response-sample.json │ ├── utils.go │ └── v2 │ │ ├── accounts.go │ │ ├── batches.go │ │ ├── blobs.go │ │ ├── circular_queue.go │ │ ├── circular_queue_test.go │ │ ├── feed_cache.go │ │ ├── feed_cache_test.go │ │ ├── metrics.go │ │ ├── operators.go │ │ ├── server_v2.go │ │ ├── server_v2_test.go │ │ ├── swagger.go │ │ ├── testdata │ │ ├── prometheus-resp-avg-throughput.json │ │ ├── prometheus-response-network-signing-rate.json │ │ └── prometheus-response-sample.json │ │ └── types.go ├── disperser.go ├── encoder │ ├── client.go │ ├── client_v2.go │ ├── config.go │ ├── metrics.go │ ├── server.go │ ├── server_test.go │ ├── server_v2.go │ ├── server_v2_test.go │ └── setup_test.go ├── encoder_client.go ├── encoder_client_v2.go ├── local_encoder_client.go ├── metrics.go ├── mock │ ├── dispatcher.go │ ├── encoder.go │ └── encoder_v2.go └── server_config.go ├── docker-bake.hcl ├── docs ├── audits │ └── Sigma_Prime_EigenDA_Offchain_Security_Assessment_Report.pdf ├── contributing.md └── spec │ ├── .gitignore │ ├── Makefile │ ├── README.md │ ├── book.toml │ ├── mermaid-init.js │ ├── mermaid.min.js │ └── src │ ├── SUMMARY.md │ ├── assets │ ├── architecture.png │ ├── assignment-module.png │ ├── attestation-layer-parts.png │ ├── attestation-layer.png │ ├── blazar-diagram.png │ ├── bridging-module.png │ ├── encoding-groups.png │ ├── encoding-module.png │ ├── integration │ │ ├── blob-certificate.png │ │ ├── cert-rbn-recency-window.png │ │ ├── contracts-eigenda.png │ │ ├── contracts-rollup.png │ │ ├── high-level-diagram.png │ │ ├── op-integration-high-level.png │ │ ├── payload-to-blob-encoding.png │ │ ├── recency-window-timeline.png │ │ ├── rollup-proxy-da-integration.png │ │ ├── ultra-high-res-diagram.png │ │ ├── v2-batch-hashing-structure.png │ │ └── v2-cert.png │ └── network-layer.png │ ├── integration.md │ ├── integration │ ├── rollup-stacks.md │ ├── rollup-stacks │ │ └── 1-op-secure-integration-workflow.md │ ├── spec.md │ └── spec │ │ ├── 1-apis.md │ │ ├── 2-rollup-payload-lifecycle.md │ │ ├── 3-datastructs.md │ │ ├── 4-contracts.md │ │ ├── 5-lifecycle-phases.md │ │ └── 6-secure-integration.md │ ├── introduction.md │ ├── protobufs │ └── generated │ │ ├── churner.md │ │ ├── common.md │ │ ├── common_v2.md │ │ ├── disperser.md │ │ ├── disperser_v2.md │ │ ├── eigenda-protos.md │ │ ├── encoder.md │ │ ├── encoder_v2.md │ │ ├── node.md │ │ ├── node_v2.md │ │ ├── relay.md │ │ ├── retriever.md │ │ └── retriever_v2.md │ ├── protocol.md │ ├── protocol │ ├── architecture.md │ ├── architecture │ │ ├── amortized-proving.md │ │ ├── assignment.md │ │ ├── bridging.md │ │ └── encoding.md │ └── contracts.md │ └── v1.md ├── encoding ├── backend.go ├── bench │ ├── Makefile │ └── main.go ├── constants.go ├── data.go ├── encoding.go ├── fft │ ├── errors.go │ ├── fft.go │ ├── fft_fr.go │ ├── fft_fr_test.go │ ├── fft_g1.go │ ├── recover_from_samples.go │ ├── recover_from_samples_test.go │ ├── zero_poly.go │ └── zero_poly_test.go ├── icicle │ ├── device_setup.go │ ├── msm_setup.go │ ├── ntt_setup.go │ └── utils.go ├── kzg │ ├── cli.go │ ├── constants.go │ ├── kzg.go │ ├── kzgrs.go │ ├── pointsIO.go │ ├── prover │ │ ├── decode.go │ │ ├── decode_test.go │ │ ├── gnark │ │ │ ├── commitments.go │ │ │ └── multiframe_proof.go │ │ ├── icicle.go │ │ ├── icicle │ │ │ ├── ecntt.go │ │ │ ├── msm.go │ │ │ └── multiframe_proof.go │ │ ├── noicicle.go │ │ ├── parametrized_prover.go │ │ ├── parametrized_prover_test.go │ │ ├── precompute.go │ │ ├── precompute_test.go │ │ ├── proof_backend.go │ │ ├── prover.go │ │ ├── prover_fuzz_test.go │ │ └── prover_test.go │ ├── setup.go │ ├── srs.go │ └── verifier │ │ ├── batch_commit_equivalence.go │ │ ├── batch_commit_equivalence_test.go │ │ ├── frame_test.go │ │ ├── length_test.go │ │ ├── multiframe.go │ │ ├── multiframe_test.go │ │ ├── verifier.go │ │ └── verifier_test.go ├── mock │ └── encoder.go ├── params.go ├── rs │ ├── bundle_builder.go │ ├── bundle_builder_test.go │ ├── decode.go │ ├── encode.go │ ├── encode_test.go │ ├── encoder.go │ ├── encoder_fuzz_test.go │ ├── encoder_suite_test.go │ ├── frame_coeffs.go │ ├── frame_coeffs_test.go │ ├── frame_proofs.go │ ├── frame_proofs_test.go │ ├── gnark │ │ └── extend_poly.go │ ├── icicle.go │ ├── icicle │ │ └── extend_poly.go │ ├── interpolation.go │ ├── noicicle.go │ ├── parametrized_encoder.go │ ├── params.go │ ├── utils.go │ └── utils_test.go ├── serialization.go ├── serialization_test.go ├── test │ ├── README.md │ ├── main.go │ ├── testCrypto.go │ └── testKzgBn254.go ├── test_utils.go ├── utils.go ├── utils │ ├── codec │ │ ├── README.md │ │ ├── codec.go │ │ └── test │ │ │ └── codec_test.go │ ├── openCommitment │ │ ├── open_commitment.go │ │ └── open_commitment_test.go │ ├── reverseBits │ │ └── reverseBits.go │ └── toeplitz │ │ ├── cir.go │ │ ├── cir_test.go │ │ ├── toeplitz.go │ │ └── toeplitz_test.go └── utils_test.go ├── go.mod ├── go.sum ├── inabox ├── .gitignore ├── AnvilStateGen_README.md ├── Makefile ├── README.md ├── anvil │ └── docker-compose.yaml ├── bin.sh ├── create-s3-bucket.sh ├── deploy │ ├── cmd │ │ └── main.go │ ├── codegen │ │ ├── gen.sh │ │ └── main.go │ ├── config.go │ ├── config_types.go │ ├── deploy.go │ ├── env_vars.go │ ├── localstack.go │ ├── subgraph.go │ └── utils.go ├── geth │ ├── .env │ ├── .gitignore │ ├── docker-compose.yml │ ├── genesis.json │ ├── get-revert.sh │ ├── run.sh │ ├── scripts │ │ └── gen-gensis-config.py │ ├── secret │ │ └── geth-account-password │ └── setup.sh ├── grafana-agent │ └── agent-config.yaml ├── node-plugin.sh ├── ratelimit.sh ├── resources │ └── kzg │ │ ├── g1.point │ │ ├── g1.point.300000 │ │ ├── g2.point │ │ ├── g2.point.300000 │ │ ├── g2.point.300000.powerOf2 │ │ └── g2.point.powerOf2 ├── secrets │ ├── bls_keys │ │ ├── keys │ │ │ ├── 1.bls.key.json │ │ │ ├── 10.bls.key.json │ │ │ ├── 11.bls.key.json │ │ │ ├── 12.bls.key.json │ │ │ ├── 13.bls.key.json │ │ │ ├── 14.bls.key.json │ │ │ ├── 15.bls.key.json │ │ │ ├── 16.bls.key.json │ │ │ ├── 17.bls.key.json │ │ │ ├── 18.bls.key.json │ │ │ ├── 19.bls.key.json │ │ │ ├── 2.bls.key.json │ │ │ ├── 20.bls.key.json │ │ │ ├── 21.bls.key.json │ │ │ ├── 22.bls.key.json │ │ │ ├── 23.bls.key.json │ │ │ ├── 24.bls.key.json │ │ │ ├── 25.bls.key.json │ │ │ ├── 26.bls.key.json │ │ │ ├── 27.bls.key.json │ │ │ ├── 28.bls.key.json │ │ │ ├── 29.bls.key.json │ │ │ ├── 3.bls.key.json │ │ │ ├── 30.bls.key.json │ │ │ ├── 31.bls.key.json │ │ │ ├── 32.bls.key.json │ │ │ ├── 4.bls.key.json │ │ │ ├── 5.bls.key.json │ │ │ ├── 6.bls.key.json │ │ │ ├── 7.bls.key.json │ │ │ ├── 8.bls.key.json │ │ │ └── 9.bls.key.json │ │ ├── password.txt │ │ └── private_key_hex.txt │ ├── ecdsa_keys │ │ ├── keys │ │ │ ├── 1.ecdsa.key.json │ │ │ ├── 10.ecdsa.key.json │ │ │ ├── 11.ecdsa.key.json │ │ │ ├── 12.ecdsa.key.json │ │ │ ├── 13.ecdsa.key.json │ │ │ ├── 14.ecdsa.key.json │ │ │ ├── 15.ecdsa.key.json │ │ │ ├── 16.ecdsa.key.json │ │ │ ├── 17.ecdsa.key.json │ │ │ ├── 18.ecdsa.key.json │ │ │ ├── 19.ecdsa.key.json │ │ │ ├── 2.ecdsa.key.json │ │ │ ├── 20.ecdsa.key.json │ │ │ ├── 21.ecdsa.key.json │ │ │ ├── 22.ecdsa.key.json │ │ │ ├── 23.ecdsa.key.json │ │ │ ├── 24.ecdsa.key.json │ │ │ ├── 25.ecdsa.key.json │ │ │ ├── 26.ecdsa.key.json │ │ │ ├── 27.ecdsa.key.json │ │ │ ├── 28.ecdsa.key.json │ │ │ ├── 29.ecdsa.key.json │ │ │ ├── 3.ecdsa.key.json │ │ │ ├── 30.ecdsa.key.json │ │ │ ├── 31.ecdsa.key.json │ │ │ ├── 32.ecdsa.key.json │ │ │ ├── 4.ecdsa.key.json │ │ │ ├── 5.ecdsa.key.json │ │ │ ├── 6.ecdsa.key.json │ │ │ ├── 7.ecdsa.key.json │ │ │ ├── 8.ecdsa.key.json │ │ │ └── 9.ecdsa.key.json │ │ ├── password.txt │ │ └── private_key_hex.txt │ └── keys_for_200_operators.zip ├── templates │ ├── testconfig-anvil-docker.yaml │ ├── testconfig-anvil-nochurner.yaml │ ├── testconfig-anvil-nograph.yaml │ ├── testconfig-anvil.yaml │ ├── testconfig-docker-anvil.yaml │ └── testconfig-geth.yaml ├── tests │ ├── integration_suite_test.go │ ├── integration_test.go │ ├── integration_v2_test.go │ └── ratelimit_test.go ├── thegraph │ └── docker-compose.yml └── wait-for ├── indexer ├── accumulator.go ├── cli.go ├── config.go ├── eth │ ├── header_service.go │ └── header_service_test.go ├── filterer.go ├── header.go ├── header_service.go ├── header_store.go ├── indexer.go ├── inmem │ ├── encoding.go │ ├── header_store.go │ ├── header_store_test.go │ └── testdata │ │ ├── fork1.json │ │ └── fork2.json ├── leveldb │ ├── encoding.go │ ├── header_store.go │ ├── header_store_test.go │ ├── leveldb.go │ ├── schema.go │ └── testdata │ │ ├── fork1.json │ │ ├── fork2.json │ │ └── headers.json ├── mock │ └── indexer.go ├── test │ ├── accumulator.go │ ├── accumulator │ │ ├── accumulator.go │ │ ├── bindings │ │ │ └── binding.go │ │ └── filterer.go │ ├── contracts │ │ ├── WETH9.abi │ │ ├── WETH9.bin │ │ ├── Weth.go │ │ └── weth.sol │ ├── filterer.go │ ├── indexer_test.go │ ├── mock │ │ ├── chain.json │ │ ├── contract_simulator.go │ │ ├── contract_simulator_test.go │ │ └── simulated_backend.go │ └── upgrader.go ├── upgrader │ └── upgrader.go └── upgrades.go ├── litt ├── README.md ├── cache │ └── cached_table.go ├── db.go ├── disktable │ ├── control_loop.go │ ├── control_loop_messages.go │ ├── disk_table.go │ ├── disk_table_flush_loop.go │ ├── disk_table_test.go │ ├── flush_loop.go │ ├── flush_loop_messages.go │ ├── keymap │ │ ├── keymap.go │ │ ├── keymap_test.go │ │ ├── keymap_type.go │ │ ├── keymap_type_file.go │ │ ├── level_db_keymap.go │ │ └── mem_keymap.go │ ├── segment │ │ ├── address_test.go │ │ ├── key_file.go │ │ ├── key_file_test.go │ │ ├── metadata_file.go │ │ ├── metadata_file_test.go │ │ ├── segment.go │ │ ├── segment_scanner.go │ │ ├── segment_test.go │ │ ├── segment_version.go │ │ ├── value_file.go │ │ └── value_file_test.go │ └── table_metadata.go ├── littbuilder │ ├── build_utils.go │ └── db_impl.go ├── littdb_config.go ├── memtable │ └── mem_table.go ├── metrics │ └── littdb_metrics.go ├── resources │ ├── flush-visual.png │ ├── iDidIt.png │ ├── iteration1.png │ ├── iteration2.png │ ├── iteration3.png │ ├── iteration4.png │ ├── iteration5.png │ ├── iteration6.png │ ├── iteration7.png │ ├── iteration8.png │ ├── iteration9.png │ ├── littdb-big-picture.png │ └── littdb-logo.png ├── table.go ├── test │ ├── cache_test.go │ ├── db_test.go │ ├── generate_example_tree_test.go │ ├── keymap_migration_test.go │ ├── migration_data.go │ ├── migration_test.go │ ├── table_test.go │ └── testdata │ │ ├── v0 │ │ └── test │ │ │ ├── keymap │ │ │ ├── data │ │ │ │ ├── 000001.log │ │ │ │ ├── CURRENT │ │ │ │ ├── LOCK │ │ │ │ ├── LOG │ │ │ │ └── MANIFEST-000000 │ │ │ ├── initialized │ │ │ └── keymap-type.txt │ │ │ ├── segments │ │ │ ├── 0-0.values │ │ │ ├── 0-1.values │ │ │ ├── 0-2.values │ │ │ ├── 0-3.values │ │ │ ├── 0.keys │ │ │ ├── 0.metadata │ │ │ ├── 1-0.values │ │ │ ├── 1-1.values │ │ │ ├── 1-2.values │ │ │ ├── 1-3.values │ │ │ ├── 1.keys │ │ │ ├── 1.metadata │ │ │ ├── 2-0.values │ │ │ ├── 2-1.values │ │ │ ├── 2-2.values │ │ │ ├── 2-3.values │ │ │ ├── 2.keys │ │ │ ├── 2.metadata │ │ │ ├── 3-0.values │ │ │ ├── 3-1.values │ │ │ ├── 3-2.values │ │ │ ├── 3-3.values │ │ │ ├── 3.keys │ │ │ ├── 3.metadata │ │ │ ├── 4-0.values │ │ │ ├── 4-1.values │ │ │ ├── 4-2.values │ │ │ ├── 4-3.values │ │ │ ├── 4.keys │ │ │ ├── 4.metadata │ │ │ ├── 5-0.values │ │ │ ├── 5-1.values │ │ │ ├── 5-2.values │ │ │ ├── 5-3.values │ │ │ ├── 5.keys │ │ │ ├── 5.metadata │ │ │ ├── 6-0.values │ │ │ ├── 6-1.values │ │ │ ├── 6-2.values │ │ │ ├── 6-3.values │ │ │ ├── 6.keys │ │ │ └── 6.metadata │ │ │ └── table.metadata │ │ ├── v1 │ │ └── test │ │ │ ├── keymap │ │ │ ├── data │ │ │ │ ├── 000001.log │ │ │ │ ├── CURRENT │ │ │ │ ├── LOCK │ │ │ │ ├── LOG │ │ │ │ └── MANIFEST-000000 │ │ │ ├── initialized │ │ │ └── keymap-type.txt │ │ │ ├── segments │ │ │ ├── 0-0.values │ │ │ ├── 0-1.values │ │ │ ├── 0-2.values │ │ │ ├── 0-3.values │ │ │ ├── 0.keys │ │ │ ├── 0.metadata │ │ │ ├── 1-0.values │ │ │ ├── 1-1.values │ │ │ ├── 1-2.values │ │ │ ├── 1-3.values │ │ │ ├── 1.keys │ │ │ ├── 1.metadata │ │ │ ├── 2-0.values │ │ │ ├── 2-1.values │ │ │ ├── 2-2.values │ │ │ ├── 2-3.values │ │ │ ├── 2.keys │ │ │ ├── 2.metadata │ │ │ ├── 3-0.values │ │ │ ├── 3-1.values │ │ │ ├── 3-2.values │ │ │ ├── 3-3.values │ │ │ ├── 3.keys │ │ │ ├── 3.metadata │ │ │ ├── 4-0.values │ │ │ ├── 4-1.values │ │ │ ├── 4-2.values │ │ │ ├── 4-3.values │ │ │ ├── 4.keys │ │ │ ├── 4.metadata │ │ │ ├── 5-0.values │ │ │ ├── 5-1.values │ │ │ ├── 5-2.values │ │ │ ├── 5-3.values │ │ │ ├── 5.keys │ │ │ ├── 5.metadata │ │ │ ├── 6-0.values │ │ │ ├── 6-1.values │ │ │ ├── 6-2.values │ │ │ ├── 6-3.values │ │ │ ├── 6.keys │ │ │ └── 6.metadata │ │ │ └── table.metadata │ │ └── v2 │ │ └── test │ │ ├── keymap │ │ ├── data │ │ │ ├── 000001.log │ │ │ ├── CURRENT │ │ │ ├── LOCK │ │ │ ├── LOG │ │ │ └── MANIFEST-000000 │ │ ├── initialized │ │ └── keymap-type.txt │ │ ├── segments │ │ ├── 0-0.values │ │ ├── 0-1.values │ │ ├── 0-2.values │ │ ├── 0-3.values │ │ ├── 0.keys │ │ ├── 0.metadata │ │ ├── 1-0.values │ │ ├── 1-1.values │ │ ├── 1-2.values │ │ ├── 1-3.values │ │ ├── 1.keys │ │ ├── 1.metadata │ │ ├── 2-0.values │ │ ├── 2-1.values │ │ ├── 2-2.values │ │ ├── 2-3.values │ │ ├── 2.keys │ │ ├── 2.metadata │ │ ├── 3-0.values │ │ ├── 3-1.values │ │ ├── 3-2.values │ │ ├── 3-3.values │ │ ├── 3.keys │ │ ├── 3.metadata │ │ ├── 4-0.values │ │ ├── 4-1.values │ │ ├── 4-2.values │ │ ├── 4-3.values │ │ ├── 4.keys │ │ ├── 4.metadata │ │ ├── 5-0.values │ │ ├── 5-1.values │ │ ├── 5-2.values │ │ ├── 5-3.values │ │ ├── 5.keys │ │ ├── 5.metadata │ │ ├── 6-0.values │ │ ├── 6-1.values │ │ ├── 6-2.values │ │ ├── 6-3.values │ │ ├── 6.keys │ │ ├── 6.metadata │ │ ├── 7-0.values │ │ ├── 7-1.values │ │ ├── 7-2.values │ │ ├── 7-3.values │ │ ├── 7.keys │ │ └── 7.metadata │ │ └── table.metadata ├── types │ ├── address.go │ ├── kv_pair.go │ └── scoped_key.go └── util │ ├── fatal_error_handler.go │ ├── files.go │ ├── files_test.go │ ├── hashing.go │ └── unsafe_string.go ├── mise.toml ├── node ├── .gitignore ├── Makefile ├── auth │ ├── authenticator.go │ ├── authenticator_test.go │ ├── request_signing.go │ ├── request_signing_test.go │ └── request_signing_test_utils.go ├── churner_client.go ├── cmd │ ├── main.go │ └── resources │ │ ├── nginx-ec2.conf │ │ └── nginx-local.conf ├── config.go ├── database-paths.md ├── errors.go ├── flags │ └── flags.go ├── grpc │ ├── metrics_v2.go │ ├── run.go │ ├── server.go │ ├── server_load_test.go │ ├── server_test.go │ ├── server_v2.go │ └── server_v2_test.go ├── metrics.go ├── mock │ ├── .keep │ ├── churner_client.go │ ├── store_v2.go │ └── testdata.go ├── node.go ├── node_test.go ├── node_v2.go ├── node_v2_test.go ├── operator.go ├── operator_test.go ├── plugin │ ├── cmd │ │ └── main.go │ ├── config.go │ ├── tests │ │ └── plugin_test.go │ └── utils.go ├── store.go ├── store_test.go ├── store_utils.go ├── store_utils_test.go ├── utils.go ├── validator_store.go ├── validator_store_test.go └── version.go ├── operators ├── churner │ ├── Makefile │ ├── churner.go │ ├── churner_test.go │ ├── cmd │ │ └── main.go │ ├── config.go │ ├── flags │ │ └── flags.go │ ├── metrics.go │ ├── server.go │ ├── server_test.go │ └── tests │ │ └── churner_test.go ├── ejector │ ├── ejector.go │ └── metrics.go └── utils.go ├── prometheus.yml ├── relay ├── Makefile ├── auth │ ├── authenticator.go │ ├── authenticator_test.go │ ├── request_signing.go │ └── request_signing_test.go ├── blob_provider.go ├── blob_provider_test.go ├── cache │ ├── cache_accessor.go │ ├── cache_accessor_metrics.go │ └── cache_accessor_test.go ├── chunk_provider.go ├── chunk_provider_test.go ├── chunkstore │ ├── chunk_reader.go │ ├── chunk_store_test.go │ ├── chunk_writer.go │ └── config.go ├── cmd │ ├── config.go │ ├── flags │ │ └── flags.go │ └── main.go ├── config.go ├── limiter │ ├── blob_rate_limiter.go │ ├── blob_rate_limiter_test.go │ ├── chunk_rate_limiter.go │ ├── chunk_rate_limiter_test.go │ ├── config.go │ └── limiter_test.go ├── metadata_provider.go ├── metadata_provider_test.go ├── metrics │ └── metrics.go ├── relay_test_utils.go ├── server.go ├── server_test.go └── timeout_config.go ├── resources └── srs │ ├── README.md │ ├── g1.point │ ├── g2.point │ ├── g2.trailing.point │ └── srs-files-16777216.sha256 ├── retriever ├── Makefile ├── cmd │ ├── .keep │ └── main.go ├── config.go ├── eth │ ├── chain_client.go │ └── chain_client_test.go ├── flags │ └── flags.go ├── metrics.go ├── mock │ └── chain_client.go ├── server.go ├── server_test.go └── v2 │ ├── server.go │ └── server_test.go ├── subgraphs ├── .gitignore ├── README.md ├── constants.ts ├── eigenda-batch-metadata │ ├── abis │ │ └── EigenDAServiceManager.json │ ├── package.json │ ├── schema.graphql │ ├── src │ │ └── edasm.ts │ ├── templates │ │ ├── networks.json │ │ └── subgraph.yaml │ ├── tests │ │ ├── edasm-utils.ts │ │ └── edasm.test.ts │ └── yarn.lock ├── eigenda-operator-state │ ├── VERSION │ ├── abis │ │ ├── BLSApkRegistry.json │ │ ├── EjectionManager.json │ │ └── RegistryCoordinator.json │ ├── package.json │ ├── schema.graphql │ ├── src │ │ ├── bls-apk-registry.ts │ │ ├── ejection-manager.ts │ │ ├── operator-creation.ts │ │ ├── operator-registration-status.ts │ │ ├── quorum-apk-updates.ts │ │ └── registry-coordinator.ts │ ├── templates │ │ ├── networks.json │ │ └── subgraph.yaml │ ├── tests │ │ ├── operator-state-utils.ts │ │ ├── operator-state.test.ts │ │ ├── quorum-apk-utils.ts │ │ └── quorum-apk.test.ts │ └── yarn.lock ├── package.json ├── tsconfig.json └── yarn.lock ├── test.sh ├── test ├── integration_test.go └── v2 │ ├── Makefile │ ├── client │ ├── test_client.go │ ├── test_client_config.go │ ├── test_client_metrics.go │ ├── test_client_setup.go │ └── util.go │ ├── config │ ├── environment │ │ ├── preprod.json │ │ └── testnet.json │ └── load │ │ ├── 100kb_s-1mb-3x.json │ │ ├── 1mb_s-1mb-0x.json │ │ └── 3mb_s-1mb-0x.json │ ├── correctness │ └── correctness_test.go │ └── load │ ├── load_generator.go │ ├── load_generator_config.go │ ├── load_generator_metrics.go │ └── main │ └── load_main.go └── tools ├── calculator └── calculator.html ├── ejections ├── Makefile ├── cmd │ └── main.go ├── config.go └── flags │ └── flags.go ├── kzgpad ├── Makefile └── main.go ├── quorumscan ├── Makefile ├── cmd │ └── main.go ├── config.go ├── flags │ └── flags.go └── quorum.go ├── semverscan ├── Makefile ├── cmd │ └── main.go ├── config.go └── flags │ └── flags.go ├── srs-utils ├── README.md ├── downloader │ ├── downloader.go │ ├── downloader_config.go │ ├── flags.go │ └── srs_hash_file.go ├── main.go ├── parser │ ├── flags.go │ ├── g1FileIO.go │ ├── g2FileIO.go │ ├── params.go │ ├── parser.go │ └── parser_test.go ├── resources │ └── challenge_0085_with_4_g1_points └── verifier │ ├── flags.go │ ├── gnarkParser.go │ ├── verifier.go │ └── verifier_test.go └── traffic ├── Makefile ├── cmd └── main.go ├── config.go ├── flags └── flags.go ├── generator.go └── generator_test.go /.devcontainer/install.sh: -------------------------------------------------------------------------------- 1 | # Install foundry 2 | curl -L https://foundry.paradigm.xyz | bash 3 | ~/.foundry/bin/foundryup 4 | 5 | # Install go dependencies 6 | go install github.com/onsi/ginkgo/v2/ginkgo@v2.2.0 7 | go install github.com/fullstorydev/grpcurl/cmd/grpcurl@latest 8 | go install google.golang.org/protobuf/cmd/protoc-gen-go@v1.28 9 | go install google.golang.org/grpc/cmd/protoc-gen-go-grpc@v1.2 10 | # go install github.com/mikefarah/yq/v4@latest 11 | 12 | # yarn global add @graphprotocol/graph-cli@0.51.0 -------------------------------------------------------------------------------- /.dockerignore: -------------------------------------------------------------------------------- 1 | node_modules 2 | testdata 3 | data 4 | bin 5 | ./contracts/out 6 | ./contracts/cache 7 | -------------------------------------------------------------------------------- /.gitattributes: -------------------------------------------------------------------------------- 1 | # Auto-generated files should not be rendered in diffs. 2 | docs/spec/src/protobufs/generated/*.md linguist-generated=true 3 | api/docs/*.html linguist-generated=true 4 | *.pb.go linguist-generated=true 5 | inabox/deploy/env_vars.go linguist-generated=true 6 | # contracts/bindings/*.go linguist-generated=true Enable once bindings are checked in CI 7 | -------------------------------------------------------------------------------- /.github/CODEOWNERS: -------------------------------------------------------------------------------- 1 | # Clients 2 | # See https://github.com/orgs/Layr-Labs/teams/eigenda-intg 3 | /api/clients @Layr-Labs/eigenda-intg 4 | 5 | # Contracts 6 | /contracts @pakim249CAL 7 | 8 | # Security docs 9 | /docs/audits @anupsv 10 | -------------------------------------------------------------------------------- /.github/ISSUE_TEMPLATE/documentation.yml: -------------------------------------------------------------------------------- 1 | name: "📃 Documentation Request" 2 | description: Suggest improvements, additions, or revisions to EigenDA documentation 3 | title: "[Documentation]: " 4 | labels: [docs, triage] 5 | body: 6 | - type: markdown 7 | attributes: 8 | value: | 9 | Thank you for helping us improve the EigenDA documentation! 10 | - type: textarea 11 | attributes: 12 | label: Documentation. 13 | description: Explain which part of the documents is lacking. 14 | placeholder: | 15 | Type here. 16 | validations: 17 | required: true 18 | - type: textarea 19 | attributes: 20 | label: Additional information. 21 | description: Tell us anything else you think we should know. 22 | -------------------------------------------------------------------------------- /.github/ISSUE_TEMPLATE/question.yml: -------------------------------------------------------------------------------- 1 | name: "🙋 Question" 2 | description: Ask a question or request support for using EigenDA 3 | title: "[Question]: <Title>" 4 | labels: [question, triage] 5 | body: 6 | - type: markdown 7 | attributes: 8 | value: | 9 | The GitHub issue tracker is not for questions. 10 | - If you have a question, please try asking it on <TBD> 11 | - Our Docs: <TBD> 12 | - type: textarea 13 | attributes: 14 | label: Question. 15 | description: Ask your question. 16 | -------------------------------------------------------------------------------- /.github/pull_request_template.md: -------------------------------------------------------------------------------- 1 | ## Why are these changes needed? 2 | 3 | <!-- Please give a short summary of the change and the problem this solves. --> 4 | 5 | ## Checks 6 | 7 | - [ ] I've made sure the tests are passing. Note that there might be a few flaky tests, in that case, please comment that they are not relevant. 8 | - [ ] I've checked the new test coverage and the coverage percentage didn't drop. 9 | - Testing Strategy 10 | - [ ] Unit tests 11 | - [ ] Integration tests 12 | - [ ] This PR is not tested :( 13 | -------------------------------------------------------------------------------- /.github/workflows/compile-protobufs.yaml: -------------------------------------------------------------------------------- 1 | name: compile-protobufs 2 | on: 3 | push: 4 | branches: 5 | - master 6 | pull_request: 7 | branches: 8 | - master 9 | 10 | jobs: 11 | golangci: 12 | name: Compile Protobufs 13 | runs-on: ubuntu-latest 14 | steps: 15 | - name: Checkout EigenDA 16 | uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 #4.2.2 17 | - uses: bufbuild/buf-action@v1 18 | with: 19 | setup_only: true #only install buf -- needed by `make protoc` command 20 | - name: Recompile Protobufs 21 | run: | 22 | make clean 23 | make protoc 24 | - name: Verify No Git Changes 25 | run: ./api/builder/is-repo-clean.sh 26 | -------------------------------------------------------------------------------- /.github/workflows/golangci-lint.yml: -------------------------------------------------------------------------------- 1 | name: lint 2 | on: 3 | push: 4 | branches: 5 | - master 6 | pull_request: 7 | 8 | env: 9 | MISE_VERSION: 2024.12.14 10 | 11 | jobs: 12 | golangci: 13 | name: Linter 14 | runs-on: ubuntu-latest 15 | steps: 16 | - name: Checkout EigenDA 17 | uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 #4.2.2 18 | 19 | - uses: jdx/mise-action@v2 20 | with: 21 | version: ${{ env.MISE_VERSION }} 22 | experimental: true 23 | - run: go version 24 | 25 | - run: make lint 26 | 27 | - run: make fmt-check 28 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | inabox/testdata/* 2 | inabox/anvil.pid 3 | 4 | test/testdata/* 5 | inabox/resources/kzg/SRSTables/* 6 | encoding/kzgrs/prover/data/SRSTable/* 7 | resources/srs/SRSTables/* 8 | 9 | **/bin/* 10 | coverage.* 11 | 12 | contracts/broadcast 13 | 14 | lightnode/docker/build-info.txt 15 | lightnode/docker/args.sh 16 | 17 | .idea 18 | .env 19 | .vscode 20 | .claude 21 | .cursor 22 | 23 | icicle/* 24 | 25 | # OSX specific 26 | .DS_Store 27 | -------------------------------------------------------------------------------- /.gitmodules: -------------------------------------------------------------------------------- 1 | [submodule "contracts/lib/forge-std"] 2 | path = contracts/lib/forge-std 3 | url = https://github.com/foundry-rs/forge-std 4 | [submodule "contracts/lib/openzeppelin-contracts"] 5 | path = contracts/lib/openzeppelin-contracts 6 | url = https://github.com/OpenZeppelin/openzeppelin-contracts 7 | [submodule "contracts/lib/openzeppelin-contracts-upgradeable"] 8 | path = contracts/lib/openzeppelin-contracts-upgradeable 9 | url = https://github.com/OpenZeppelin/openzeppelin-contracts-upgradeable 10 | [submodule "contracts/lib/eigenlayer-middleware"] 11 | path = contracts/lib/eigenlayer-middleware 12 | url = https://github.com/Layr-Labs/eigenlayer-middleware 13 | branch = m2-mainnet-fixes 14 | -------------------------------------------------------------------------------- /.golangci.yml: -------------------------------------------------------------------------------- 1 | version: "2" 2 | 3 | run: 4 | # CI was timing out with the default timeout of 1m. 5 | timeout: 5m 6 | 7 | # But right now revive raises 50+ issues, whereas golint didn't have any. 8 | # despite revive being recommended as a replacement for golint. 9 | # TODO: should we turn on revive and fix the issues? 10 | # linters: 11 | # enable: 12 | # - revive # drop-in replacement for golint 13 | -------------------------------------------------------------------------------- /GitVersion.yml: -------------------------------------------------------------------------------- 1 | increment: None 2 | branches: 3 | main: 4 | mode: ContinuousDelivery 5 | tag: pre 6 | increment: Patch 7 | prevent-increment-of-merged-branch-version: true 8 | track-merge-target: false 9 | regex: ^master$|^main$ 10 | source-branches: [] 11 | tracks-release-branches: true 12 | is-release-branch: false 13 | is-mainline: true 14 | pre-release-weight: 55000 15 | release: 16 | mode: ContinuousDelivery 17 | tag: rc 18 | increment: None 19 | prevent-increment-of-merged-branch-version: true 20 | track-merge-target: false 21 | regex: ^tags/v\d+\.\d+\.\d+(-[a-z]+\.\d+)?|^releases?[/-] 22 | source-branches: [] 23 | tracks-release-branches: false 24 | is-release-branch: true 25 | is-mainline: false 26 | pre-release-weight: 30000 27 | -------------------------------------------------------------------------------- /SECURITY.md: -------------------------------------------------------------------------------- 1 | # Security Policy 2 | 3 | ## Version Information 4 | 5 | Please see [Releases](https://github.com/Layr-Labs/eigenda/releases) and we recommend using the [most recently released version](https://github.com/Layr-Labs/eigenda/releases/latest). 6 | 7 | ## Audit reports 8 | 9 | Audit reports are published in the `docs` folder: https://github.com/Layr-Labs/eigenda/master/docs/audits 10 | 11 | | Date | Report Link | 12 | | ------- | ----------- | 13 | | 202404 | [pdf](https://github.com/Layr-Labs/eigenda/blob/security-doc/docs/audits/Sigma_Prime_EigenDA_Offchain_Security_Assessment_Report.pdf) | 14 | 15 | ## Reporting a Vulnerability 16 | 17 | **Please do not file a public ticket** mentioning the vulnerability. 18 | 19 | Please report security vulnerabilities to security@eigenlabs.org with the all the relavent details included in the email. 20 | 21 | -------------------------------------------------------------------------------- /api/Makefile: -------------------------------------------------------------------------------- 1 | # Buf commands to lint/format proto files 2 | # All of these commands are run by the github action in `.github/workflows/buf-proto.yaml` 3 | proto-lint: 4 | buf lint 5 | 6 | proto-format: 7 | buf format -w 8 | 9 | # Builds the protobuf files inside a docker container. 10 | protoc: clean proto-format 11 | ./builder/protoc-docker.sh 12 | 13 | # Builds the protobuf files locally (i.e. without docker). 14 | protoc-local: clean 15 | ./builder/protoc.sh 16 | 17 | clean: 18 | ./builder/clean.sh -------------------------------------------------------------------------------- /api/builder/README.md: -------------------------------------------------------------------------------- 1 | This directory contains scripts for building a docker image capable of compiling the EigenDA protobufs. I found 2 | it difficult to control the exact build version of the protobufs, since the version depends on whatever is installed 3 | locally when they are built. This is an attempt to standardize the protobuf build process. 4 | 5 | # Usage 6 | 7 | To build the docker image, run the following command: 8 | 9 | ```bash 10 | ./api/builder/build-docker.sh 11 | ``` 12 | 13 | Once the docker image is built, you can build the protobufs via the following command: 14 | 15 | ```bash 16 | ./api/builder/protoc-docker.sh 17 | ``` 18 | 19 | # Caveats 20 | 21 | I've tested this on my m3 macbook. It's possible that the docker image may have trouble on other architectures. 22 | Please report any issues you encounter with this build process to the EigenDA team. The goal is to be arcihtecturally 23 | agnostic, but that isn't a priority in the very short term. 24 | -------------------------------------------------------------------------------- /api/builder/build-docker.sh: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env bash 2 | 3 | # The location where this script can be found. 4 | SCRIPT_DIR=$( cd -- "$( dirname -- "${BASH_SOURCE[0]}" )" &> /dev/null && pwd ) 5 | 6 | ARCH=$(uname -m) 7 | if [ "${ARCH}" == "arm64" ]; then 8 | PROTOC_URL='https://github.com/protocolbuffers/protobuf/releases/download/v23.4/protoc-23.4-linux-aarch_64.zip' 9 | elif [ "${ARCH}" == "x86_64" ]; then 10 | PROTOC_URL='https://github.com/protocolbuffers/protobuf/releases/download/v23.4/protoc-23.4-linux-x86_64.zip' 11 | else 12 | echo "Unsupported architecture: ${ARCH}" 13 | exit 1 14 | fi 15 | 16 | # Add the --no-cache flag to force a rebuild. 17 | # Add the --progress=plain flag to show verbose output during the build. 18 | 19 | docker build \ 20 | -f "${SCRIPT_DIR}/Dockerfile" \ 21 | --tag pbuf-compiler:latest \ 22 | --build-arg PROTOC_URL="${PROTOC_URL}" \ 23 | --build-arg UID=$(id -u) \ 24 | . 25 | 26 | if [ $? -ne 0 ]; then 27 | exit 1 28 | fi -------------------------------------------------------------------------------- /api/builder/clean.sh: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env bash 2 | 3 | # This script finds and deletes all compiled protobufs. 4 | 5 | # The location where this script can be found. 6 | SCRIPT_DIR=$( cd -- "$( dirname -- "${BASH_SOURCE[0]}" )" &> /dev/null && pwd ) 7 | 8 | API_DIR="${SCRIPT_DIR}/.." 9 | GRPC_DIR="${API_DIR}/grpc" 10 | 11 | if [ -d "${GRPC_DIR}" ]; then 12 | # Delete all compiled protobufs 13 | find "${GRPC_DIR}" -name '*.pb.go' -type f | xargs rm -rf 14 | # Delete all empty directories 15 | find "${GRPC_DIR}" -type d -empty -delete 16 | fi 17 | 18 | DISPERSER_DIR="$SCRIPT_DIR/../../disperser" 19 | DISPERSER_GRPC_DIR="$DISPERSER_DIR/api/grpc" 20 | if [ -d "${DISPERSER_GRPC_DIR}" ]; then 21 | # Delete all compiled protobufs 22 | find "${DISPERSER_GRPC_DIR}" -name '*.pb.go' -type f | xargs rm -rf 23 | # Delete all empty directories 24 | find "${DISPERSER_GRPC_DIR}" -type d -empty -delete 25 | fi -------------------------------------------------------------------------------- /api/builder/debug-docker.sh: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env bash 2 | 3 | # This is a handy little script for debugging the pbuf-compiler container. Attaches a bash shell to the container. 4 | 5 | # The location where this script can be found. 6 | SCRIPT_DIR=$( cd -- "$( dirname -- "${BASH_SOURCE[0]}" )" &> /dev/null && pwd ) 7 | ROOT="${SCRIPT_DIR}/../.." 8 | 9 | docker container run \ 10 | --rm \ 11 | --mount "type=bind,source=${ROOT},target=/home/user/eigenda" \ 12 | -it \ 13 | pbuf-compiler bash 14 | 15 | -------------------------------------------------------------------------------- /api/builder/is-repo-clean.sh: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env bash 2 | 3 | # This script exits with error code 0 if the git repository is clean, and error code 1 if it is not. 4 | # This is utilized by the github workflow that checks to see if the repo is clean after recompiling 5 | # protobufs. 6 | 7 | if output=$(git status --porcelain) && [ -z "$output" ]; then 8 | echo "Repository is clean." 9 | exit 0 10 | else 11 | echo "Repository is dirty:" 12 | git status 13 | git diff 14 | exit 1 15 | fi -------------------------------------------------------------------------------- /api/builder/protoc-docker.sh: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env bash 2 | 3 | # This script builds the eigenDA protobufs. It does this by running protoc.sh inside of the pbuf-compiler container. 4 | 5 | # The location where this script can be found. 6 | SCRIPT_DIR=$( cd -- "$( dirname -- "${BASH_SOURCE[0]}" )" &> /dev/null && pwd ) 7 | ROOT="${SCRIPT_DIR}/../.." 8 | 9 | if [ -z "$(docker images -q pbuf-compiler:latest 2> /dev/null)" ]; then 10 | echo "Docker image pbuf-compiler:latest does not exist. Building it now..." 11 | "${SCRIPT_DIR}"/build-docker.sh 12 | fi 13 | 14 | if [ $? -ne 0 ]; then 15 | exit 1 16 | fi 17 | 18 | docker container run \ 19 | --rm \ 20 | --mount "type=bind,source=${ROOT},target=/home/user/eigenda" \ 21 | pbuf-compiler bash -c "source ~/.bashrc && eigenda/api/builder/protoc.sh" 22 | 23 | if [ $? -ne 0 ]; then 24 | exit 1 25 | fi -------------------------------------------------------------------------------- /api/builder/protoc.sh: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env bash 2 | set -o errexit -o nounset -o pipefail 3 | 4 | # This script builds the eigenDA protobufs. 5 | 6 | # The location where this script can be found. 7 | SCRIPT_DIR=$(cd -- "$(dirname -- "${BASH_SOURCE[0]}")" &>/dev/null && pwd) 8 | 9 | # Build protobufs in the api/proto directory. 10 | 11 | API_DIR="${SCRIPT_DIR}/.." 12 | PROTO_DIR="${API_DIR}/proto" 13 | GRPC_DIR="${API_DIR}/grpc" 14 | mkdir -p "${GRPC_DIR}" 15 | 16 | if [ $? -ne 0 ]; then 17 | exit 1 18 | fi 19 | 20 | PROTO_FILES=($(find "${PROTO_DIR}" -name '*.proto')) 21 | 22 | protoc -I "${PROTO_DIR}" \ 23 | --go_out="${GRPC_DIR}" \ 24 | --go_opt=paths=source_relative \ 25 | --go-grpc_out="${GRPC_DIR}" \ 26 | --go-grpc_opt=paths=source_relative \ 27 | ${PROTO_FILES[@]} 28 | 29 | if [ $? -ne 0 ]; then 30 | exit 1 31 | fi 32 | -------------------------------------------------------------------------------- /api/builder/rm-docker.sh: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env bash 2 | 3 | # This script fully deletes the pbuf-compiler docker image and all cached steps. 4 | 5 | # Cleans the docker image and all cached steps. 6 | docker image rm pbuf-compiler 2> /dev/null || true 7 | docker builder prune -f -------------------------------------------------------------------------------- /api/clients/codecs/no_ifft_codec.go: -------------------------------------------------------------------------------- 1 | package codecs 2 | 3 | type NoIFFTCodec struct { 4 | writeCodec BlobCodec 5 | } 6 | 7 | var _ BlobCodec = NoIFFTCodec{} 8 | 9 | func NewNoIFFTCodec(writeCodec BlobCodec) NoIFFTCodec { 10 | return NoIFFTCodec{ 11 | writeCodec: writeCodec, 12 | } 13 | } 14 | 15 | func (v NoIFFTCodec) EncodeBlob(data []byte) ([]byte, error) { 16 | return v.writeCodec.EncodeBlob(data) 17 | } 18 | 19 | func (v NoIFFTCodec) DecodeBlob(data []byte) ([]byte, error) { 20 | return GenericDecodeBlob(data) 21 | } 22 | -------------------------------------------------------------------------------- /api/clients/codecs/polynomial_form.go: -------------------------------------------------------------------------------- 1 | package codecs 2 | 3 | // PolynomialForm is an enum that describes the different ways a polynomial may be represented. 4 | type PolynomialForm uint 5 | 6 | const ( 7 | // PolynomialFormEval is short for polynomial "evaluation form". 8 | // The field elements represent the evaluation of the polynomial at roots of unity. 9 | PolynomialFormEval PolynomialForm = iota 10 | // PolynomialFormCoeff is short for polynomial "coefficient form". 11 | // The field elements represent the coefficients of the polynomial. 12 | PolynomialFormCoeff 13 | ) 14 | -------------------------------------------------------------------------------- /api/clients/mock/disperser_server.go: -------------------------------------------------------------------------------- 1 | package mock 2 | 3 | import ( 4 | "context" 5 | 6 | disperser_rpc "github.com/Layr-Labs/eigenda/api/grpc/disperser" 7 | ) 8 | 9 | // Currently only implements the RetrieveBlob RPC 10 | type DisperserServer struct { 11 | disperser_rpc.UnimplementedDisperserServer 12 | } 13 | 14 | // RetrieveBlob returns a ~5MiB(+header_size) blob. It is used to test that the client correctly sets the max message size, 15 | // to be able to support large blobs (default grpc max message size is 4MiB). 16 | func (m *DisperserServer) RetrieveBlob(ctx context.Context, req *disperser_rpc.RetrieveBlobRequest) (*disperser_rpc.RetrieveBlobReply, error) { 17 | // Create a blob larger than default max size (4MiB) 18 | largeBlob := make([]byte, 5*1024*1024) // 5MiB 19 | for i := range largeBlob { 20 | largeBlob[i] = byte(i % 256) 21 | } 22 | 23 | return &disperser_rpc.RetrieveBlobReply{ 24 | Data: largeBlob, 25 | }, nil 26 | } 27 | -------------------------------------------------------------------------------- /api/clients/mock/static_request_signer.go: -------------------------------------------------------------------------------- 1 | package mock 2 | 3 | import ( 4 | "context" 5 | "crypto/ecdsa" 6 | 7 | "github.com/Layr-Labs/eigenda/api/clients/v2" 8 | "github.com/Layr-Labs/eigenda/api/grpc/validator" 9 | "github.com/Layr-Labs/eigenda/node/auth" 10 | ) 11 | 12 | var _ clients.DispersalRequestSigner = &staticRequestSigner{} 13 | 14 | // StaticRequestSigner is a DispersalRequestSigner that signs requests with a static key (i.e. it doesn't use AWS KMS). 15 | // Useful for testing. 16 | type staticRequestSigner struct { 17 | key *ecdsa.PrivateKey 18 | } 19 | 20 | func NewStaticRequestSigner(key *ecdsa.PrivateKey) clients.DispersalRequestSigner { 21 | return &staticRequestSigner{ 22 | key: key, 23 | } 24 | } 25 | 26 | func (s *staticRequestSigner) SignStoreChunksRequest( 27 | ctx context.Context, 28 | request *validator.StoreChunksRequest) ([]byte, error) { 29 | 30 | return auth.SignStoreChunksRequest(s.key, request) 31 | } 32 | -------------------------------------------------------------------------------- /api/clients/v2/README.md: -------------------------------------------------------------------------------- 1 | # Core Clients 2 | 3 | ![Core Client Diagram](assets/core_clients_v2.svg) 4 | 5 | TODO(litt3): Expand this README -------------------------------------------------------------------------------- /api/clients/v2/cert_verifier_address_provider.go: -------------------------------------------------------------------------------- 1 | package clients 2 | 3 | import ( 4 | "context" 5 | 6 | "github.com/ethereum/go-ethereum/common" 7 | ) 8 | 9 | // CertVerifierAddressProvider defines an object which can translate block number to cert verifier address 10 | // 11 | // This provider uses reference block number as a key, since updates to a cert verifier address in a running system are 12 | // coordinated by defining the reference block number at which a new cert verifier address takes effect. Specifically, 13 | // a blob shall be verified by the latest defined cert verifier contract with a reference block number key that doesn't 14 | // exceed the reference block number of the blob's batch. 15 | type CertVerifierAddressProvider interface { 16 | // GetCertVerifierAddress returns the EigenDACertVerifierAddress that is active at the input reference block number 17 | GetCertVerifierAddress(ctx context.Context, referenceBlockNumber uint64) (common.Address, error) 18 | } 19 | -------------------------------------------------------------------------------- /api/clients/v2/examples/utils.go: -------------------------------------------------------------------------------- 1 | package examples 2 | 3 | import ( 4 | "crypto/rand" 5 | 6 | "github.com/Layr-Labs/eigenda/api/clients/v2/coretypes" 7 | ) 8 | 9 | // createRandomPayload creates a payload with random data of the specified size in bytes 10 | func createRandomPayload(byteCount int) (*coretypes.Payload, error) { 11 | payloadBytes := make([]byte, byteCount) 12 | _, err := rand.Read(payloadBytes) 13 | if err != nil { 14 | return nil, err 15 | } 16 | return coretypes.NewPayload(payloadBytes), nil 17 | } 18 | -------------------------------------------------------------------------------- /api/clients/v2/mock/node_client.go: -------------------------------------------------------------------------------- 1 | package mock 2 | 3 | import ( 4 | "context" 5 | 6 | "github.com/Layr-Labs/eigenda/api/clients/v2" 7 | "github.com/Layr-Labs/eigenda/core" 8 | corev2 "github.com/Layr-Labs/eigenda/core/v2" 9 | "github.com/stretchr/testify/mock" 10 | ) 11 | 12 | type MockNodeClient struct { 13 | mock.Mock 14 | } 15 | 16 | var _ clients.NodeClient = (*MockNodeClient)(nil) 17 | 18 | func NewNodeClient() *MockNodeClient { 19 | return &MockNodeClient{} 20 | } 21 | 22 | func (c *MockNodeClient) StoreChunks(ctx context.Context, batch *corev2.Batch) (*core.Signature, error) { 23 | args := c.Called() 24 | var signature *core.Signature 25 | if args.Get(0) != nil { 26 | signature = (args.Get(0)).(*core.Signature) 27 | } 28 | return signature, args.Error(1) 29 | } 30 | 31 | func (c *MockNodeClient) Close() error { 32 | args := c.Called() 33 | return args.Error(0) 34 | } 35 | -------------------------------------------------------------------------------- /api/clients/v2/payload_retriever.go: -------------------------------------------------------------------------------- 1 | package clients 2 | 3 | import ( 4 | "context" 5 | 6 | "github.com/Layr-Labs/eigenda/api/clients/v2/coretypes" 7 | ) 8 | 9 | // PayloadRetriever represents something that knows how to retrieve a payload from some backend using a verification.EigenDACert 10 | // 11 | // This interface may be implemented to provide alternate retrieval methods, for example payload retrieval from an S3 12 | // bucket instead of from EigenDA relays or nodes. 13 | type PayloadRetriever interface { 14 | // GetPayload retrieves a payload from some backend, using the provided certificate 15 | GetPayload(ctx context.Context, eigenDACert coretypes.RetrievableEigenDACert) (*coretypes.Payload, error) 16 | } 17 | -------------------------------------------------------------------------------- /api/clients/v2/utils.go: -------------------------------------------------------------------------------- 1 | package clients 2 | 3 | import ( 4 | "crypto/tls" 5 | 6 | "google.golang.org/grpc" 7 | "google.golang.org/grpc/credentials" 8 | "google.golang.org/grpc/credentials/insecure" 9 | ) 10 | 11 | // GetGrpcDialOptions builds the gRPC dial options based on the useSecureGrpcFlag and maxMessageSize. 12 | func GetGrpcDialOptions(useSecureGrpcFlag bool, maxMessageSize uint) []grpc.DialOption { 13 | options := []grpc.DialOption{} 14 | if useSecureGrpcFlag { 15 | options = append(options, grpc.WithTransportCredentials(credentials.NewTLS(&tls.Config{}))) 16 | } else { 17 | options = append(options, grpc.WithTransportCredentials(insecure.NewCredentials())) 18 | } 19 | 20 | options = append(options, grpc.WithDefaultCallOptions(grpc.MaxCallRecvMsgSize(int(maxMessageSize)))) 21 | 22 | return options 23 | } 24 | -------------------------------------------------------------------------------- /api/constants.go: -------------------------------------------------------------------------------- 1 | package api 2 | 3 | // EigenLabsDisperserID is the ID of the disperser that is managed by Eigen Labs. 4 | const EigenLabsDisperserID = uint32(0) 5 | -------------------------------------------------------------------------------- /api/hashing/payment_state_hashing.go: -------------------------------------------------------------------------------- 1 | package hashing 2 | 3 | import ( 4 | "fmt" 5 | "github.com/ethereum/go-ethereum/common" 6 | "golang.org/x/crypto/sha3" 7 | ) 8 | 9 | // HashGetPaymentStateRequest hashes the given GetPaymentStateRequest from accountId and timestamp 10 | func HashGetPaymentStateRequest(accountId common.Address, timestamp uint64) ([]byte, error) { 11 | hasher := sha3.NewLegacyKeccak256() 12 | 13 | // Hash the accountId 14 | err := hashByteArray(hasher, accountId.Bytes()) 15 | if err != nil { 16 | return nil, fmt.Errorf("failed to hash account id: %w", err) 17 | } 18 | 19 | // Hash the timestamp 20 | hashUint64(hasher, timestamp) 21 | 22 | return hasher.Sum(nil), nil 23 | } 24 | -------------------------------------------------------------------------------- /common/abi.go: -------------------------------------------------------------------------------- 1 | package common 2 | 3 | import ( 4 | _ "embed" 5 | 6 | "github.com/ethereum/go-ethereum/crypto" 7 | ) 8 | 9 | //go:embed abis/EigenDAServiceManager.json 10 | var ServiceManagerAbi []byte 11 | 12 | var BatchConfirmedEventSigHash = crypto.Keccak256Hash([]byte("BatchConfirmed(bytes32,uint32)")) 13 | -------------------------------------------------------------------------------- /common/healthcheck/server.go: -------------------------------------------------------------------------------- 1 | package healthcheck 2 | 3 | import ( 4 | "google.golang.org/grpc" 5 | "google.golang.org/grpc/health" 6 | "google.golang.org/grpc/health/grpc_health_v1" 7 | ) 8 | 9 | // RegisterHealthServer registers the default gRPC health check server implementation 10 | // with the given gRPC server. 11 | func RegisterHealthServer(name string, server *grpc.Server) { 12 | healthServer := health.NewServer() 13 | healthServer.SetServingStatus(name, grpc_health_v1.HealthCheckResponse_SERVING) 14 | grpc_health_v1.RegisterHealthServer(server, healthServer) 15 | } 16 | -------------------------------------------------------------------------------- /common/kvstore/tablestore/key_test.go: -------------------------------------------------------------------------------- 1 | package tablestore 2 | 3 | import ( 4 | "testing" 5 | 6 | tu "github.com/Layr-Labs/eigenda/common/testutils" 7 | "github.com/stretchr/testify/assert" 8 | ) 9 | 10 | func TestGetName(t *testing.T) { 11 | tu.InitializeRandom() 12 | 13 | tableName := tu.RandomString(10) 14 | 15 | kb := newKeyBuilder(tableName, 0) 16 | assert.Equal(t, tableName, kb.TableName()) 17 | } 18 | 19 | func TestBytesRoundTrip(t *testing.T) { 20 | tu.InitializeRandom() 21 | 22 | tableName := tu.RandomString(10) 23 | b := tu.RandomBytes(10) 24 | 25 | kb := newKeyBuilder(tableName, 0) 26 | k := kb.Key(b) 27 | assert.Equal(t, b, k.Bytes()) 28 | } 29 | -------------------------------------------------------------------------------- /common/kvstore/tablestore/util.go: -------------------------------------------------------------------------------- 1 | package tablestore 2 | 3 | import ( 4 | "encoding/binary" 5 | "time" 6 | ) 7 | 8 | // prependTimestamp prepends the given timestamp to the given base byte slice. The timestamp is 9 | // stored as an 8-byte big-endian integer. 10 | func prependTimestamp( 11 | timestamp time.Time, 12 | baseValue []byte) []byte { 13 | 14 | result := make([]byte, len(baseValue)+8) 15 | unixNano := timestamp.UnixNano() 16 | binary.BigEndian.PutUint64(result, uint64(unixNano)) 17 | 18 | copy(result[8:], baseValue) 19 | 20 | return result 21 | } 22 | 23 | // parsePrependedTimestamp extracts the timestamp and base key from the given byte slice. This method 24 | // is the inverse of prependTimestamp. 25 | func parsePrependedTimestamp(data []byte) (timestamp time.Time, baseValue []byte) { 26 | expiryUnixNano := int64(binary.BigEndian.Uint64(data)) 27 | timestamp = time.Unix(0, expiryUnixNano) 28 | baseValue = data[8:] 29 | return timestamp, baseValue 30 | } 31 | -------------------------------------------------------------------------------- /common/memory/Dockerfile.memtest: -------------------------------------------------------------------------------- 1 | FROM golang:1.21-alpine 2 | 3 | WORKDIR /app 4 | 5 | # Copy go.mod, go.sum and relevant files 6 | COPY go.mod go.sum ./ 7 | RUN go mod download 8 | 9 | # Copy common package and its dependencies 10 | COPY common/ ./common/ 11 | 12 | # Run the memory test 13 | CMD ["go", "test", "-v", "./common/memory", "-run", "TestGetMaximumAvailableMemory"] -------------------------------------------------------------------------------- /common/memory/memory_test.go: -------------------------------------------------------------------------------- 1 | package memory 2 | 3 | import ( 4 | "fmt" 5 | "testing" 6 | 7 | "github.com/docker/go-units" 8 | "github.com/stretchr/testify/require" 9 | ) 10 | 11 | func TestGetMaximumAvailableMemory(t *testing.T) { 12 | memory, err := GetMaximumAvailableMemory() 13 | require.NoError(t, err) 14 | 15 | // Since the outcome of this test depends on the environment, we can only check if the value is greater than 0. 16 | // This test is mostly intended designed for manual verification, although it does at least verify that the 17 | // function does not return an error. 18 | fmt.Printf("Maximum available memory: %dGB\n", memory/units.GiB) 19 | require.Greater(t, memory, uint64(0), "Memory should be greater than 0") 20 | 21 | } 22 | -------------------------------------------------------------------------------- /common/memory/run_memory_test.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | 3 | # Set the memory limit (2GB by default, but can be overridden) 4 | MEMORY_LIMIT=${1:-2g} 5 | 6 | # Directory containing the Dockerfile and where the command should be executed 7 | cd "$(dirname "$0")/../.." 8 | 9 | # Build the Docker image 10 | echo "Building Docker image..." 11 | docker build -t eigenda-memory-test -f common/memory/Dockerfile.memtest . 12 | 13 | # Run the container with the specified memory limit 14 | echo "Running test with ${MEMORY_LIMIT} memory limit..." 15 | docker run --rm -m "${MEMORY_LIMIT}" eigenda-memory-test 16 | 17 | echo "Test completed." -------------------------------------------------------------------------------- /common/mock/ratelimiter.go: -------------------------------------------------------------------------------- 1 | package mock 2 | 3 | import ( 4 | "context" 5 | 6 | "github.com/Layr-Labs/eigenda/common" 7 | ) 8 | 9 | type NoopRatelimiter struct { 10 | } 11 | 12 | var _ common.RateLimiter = &NoopRatelimiter{} 13 | 14 | func (r *NoopRatelimiter) AllowRequest(ctx context.Context, params []common.RequestParams) (bool, *common.RequestParams, error) { 15 | return true, nil, nil 16 | } 17 | -------------------------------------------------------------------------------- /common/param_store.go: -------------------------------------------------------------------------------- 1 | package common 2 | 3 | import "context" 4 | 5 | // KVStore is a simple key value store interface. 6 | type KVStore[T any] interface { 7 | // GetItem returns the value associated with a given key. 8 | GetItem(ctx context.Context, key string) (*T, error) 9 | // UpdateItem updates the value for the given key. 10 | UpdateItem(ctx context.Context, key string, value *T) error 11 | } 12 | -------------------------------------------------------------------------------- /common/pprof/server.go: -------------------------------------------------------------------------------- 1 | package pprof 2 | 3 | import ( 4 | "fmt" 5 | "net/http" 6 | 7 | _ "net/http/pprof" 8 | 9 | "github.com/Layr-Labs/eigensdk-go/logging" 10 | ) 11 | 12 | type PprofProfiler struct { 13 | logger logging.Logger 14 | httpPort string 15 | } 16 | 17 | func NewPprofProfiler(httpPort string, logger logging.Logger) *PprofProfiler { 18 | return &PprofProfiler{ 19 | logger: logger.With("component", "PprofProfiler"), 20 | httpPort: httpPort, 21 | } 22 | } 23 | 24 | // Start the pprof server 25 | func (p *PprofProfiler) Start() { 26 | pprofAddr := fmt.Sprintf("%s:%s", "0.0.0.0", p.httpPort) 27 | 28 | if err := http.ListenAndServe(pprofAddr, nil); err != nil { 29 | p.logger.Error("pprof server failed", "error", err, "pprofAddr", pprofAddr) 30 | } 31 | } 32 | -------------------------------------------------------------------------------- /common/pubip/mock_provider.go: -------------------------------------------------------------------------------- 1 | package pubip 2 | 3 | import "context" 4 | 5 | var _ Provider = (*mockProvider)(nil) 6 | 7 | // mockProvider is a mock implementation of the Provider interface. 8 | type mockProvider struct { 9 | } 10 | 11 | func (m mockProvider) Name() string { 12 | return "mockip" 13 | } 14 | 15 | func (m mockProvider) PublicIPAddress(ctx context.Context) (string, error) { 16 | return "localhost", nil 17 | } 18 | -------------------------------------------------------------------------------- /common/read_only_map.go: -------------------------------------------------------------------------------- 1 | package common 2 | 3 | import ( 4 | "maps" 5 | ) 6 | 7 | type ReadOnlyMap[K comparable, V comparable] struct { 8 | data map[K]V 9 | } 10 | 11 | func NewReadOnlyMap[K comparable, V comparable](data map[K]V) *ReadOnlyMap[K, V] { 12 | return &ReadOnlyMap[K, V]{data: data} 13 | } 14 | 15 | func (m *ReadOnlyMap[K, V]) Get(key K) (V, bool) { 16 | value, ok := m.data[key] 17 | return value, ok 18 | } 19 | 20 | func (m *ReadOnlyMap[K, V]) Keys() []K { 21 | keys := make([]K, 0, len(m.data)) 22 | for key := range m.data { 23 | keys = append(keys, key) 24 | } 25 | return keys 26 | } 27 | 28 | func (m *ReadOnlyMap[K, V]) Len() int { 29 | return len(m.data) 30 | } 31 | 32 | func (m *ReadOnlyMap[K, V]) Equal(data map[K]V) bool { 33 | return maps.Equal(m.data, data) 34 | } 35 | -------------------------------------------------------------------------------- /common/read_only_map_test.go: -------------------------------------------------------------------------------- 1 | package common_test 2 | 3 | import ( 4 | "testing" 5 | 6 | "github.com/Layr-Labs/eigenda/common" 7 | "github.com/stretchr/testify/require" 8 | ) 9 | 10 | func TestReadOnlyMap(t *testing.T) { 11 | data := map[uint8]string{ 12 | 1: "one", 13 | 2: "two", 14 | 3: "three", 15 | } 16 | m := common.NewReadOnlyMap(data) 17 | res, ok := m.Get(1) 18 | require.True(t, ok) 19 | require.Equal(t, "one", res) 20 | res, ok = m.Get(2) 21 | require.True(t, ok) 22 | require.Equal(t, "two", res) 23 | res, ok = m.Get(3) 24 | require.True(t, ok) 25 | require.Equal(t, "three", res) 26 | res, ok = m.Get(4) 27 | require.False(t, ok) 28 | require.Equal(t, "", res) 29 | require.Equal(t, 3, m.Len()) 30 | require.ElementsMatch(t, []uint8{1, 2, 3}, m.Keys()) 31 | } 32 | -------------------------------------------------------------------------------- /common/replay/no_op_replay_gaurdian.go: -------------------------------------------------------------------------------- 1 | package replay 2 | 3 | import ( 4 | "time" 5 | ) 6 | 7 | var _ ReplayGuardian = &noOpReplayGuardian{} 8 | 9 | // noOpReplayGuardian is a ReplayGuardian that does nothing, always accepting requests without actually verifying them. 10 | // Useful for unit tests where that want to be able to send duplicate requests without mocking the clock. 11 | type noOpReplayGuardian struct{} 12 | 13 | // NewNoOpReplayGuardian creates a new ReplayGuardian that does nothing, always accepting requests without actually 14 | // verifying them. Useful for unit tests where that want to be able to send duplicate requests without mocking the 15 | // clock. 16 | func NewNoOpReplayGuardian() ReplayGuardian { 17 | return &noOpReplayGuardian{} 18 | } 19 | 20 | func (n *noOpReplayGuardian) VerifyRequest(requestHash []byte, requestTimestamp time.Time) error { 21 | return nil 22 | } 23 | -------------------------------------------------------------------------------- /common/replay/replay_gaurdian.go: -------------------------------------------------------------------------------- 1 | package replay 2 | 3 | import "time" 4 | 5 | // ReplayGuardian ensures that the same request is not processed more than once. It can be used to do things such 6 | // as protecting against replay attacks or accidental duplicate requests. 7 | type ReplayGuardian interface { 8 | 9 | // VerifyRequest verifies that a request with the given hash and timestamp is not a replay 10 | // of a previous request. If it cannot be determined if a request is a replay or not, 11 | // then the request is rejected. Only if it can be guaranteed that the request is not a replay 12 | // will this method return nil. 13 | VerifyRequest( 14 | requestHash []byte, 15 | requestTimestamp time.Time) error 16 | } 17 | -------------------------------------------------------------------------------- /common/rpc_ethclient.go: -------------------------------------------------------------------------------- 1 | package common 2 | 3 | import ( 4 | "context" 5 | 6 | "github.com/ethereum/go-ethereum/rpc" 7 | ) 8 | 9 | type RPCEthClient interface { 10 | BatchCall(b []rpc.BatchElem) error 11 | BatchCallContext(ctx context.Context, b []rpc.BatchElem) error 12 | Call(result interface{}, method string, args ...interface{}) error 13 | CallContext(ctx context.Context, result interface{}, method string, args ...interface{}) error 14 | } 15 | -------------------------------------------------------------------------------- /common/store/local_store.go: -------------------------------------------------------------------------------- 1 | package store 2 | 3 | import ( 4 | "context" 5 | "errors" 6 | 7 | "github.com/Layr-Labs/eigenda/common" 8 | lru "github.com/hashicorp/golang-lru/v2" 9 | ) 10 | 11 | type localParamStore[T any] struct { 12 | cache *lru.Cache[string, T] 13 | } 14 | 15 | func NewLocalParamStore[T any](size int) (common.KVStore[T], error) { 16 | cache, err := lru.New[string, T](size) 17 | if err != nil { 18 | return nil, err 19 | } 20 | 21 | return &localParamStore[T]{ 22 | cache: cache, 23 | }, nil 24 | } 25 | 26 | func (s *localParamStore[T]) GetItem(ctx context.Context, key string) (*T, error) { 27 | 28 | obj, ok := s.cache.Get(key) 29 | if !ok { 30 | return nil, errors.New("error retrieving key") 31 | } 32 | 33 | return &obj, nil 34 | 35 | } 36 | 37 | func (s *localParamStore[T]) UpdateItem(ctx context.Context, key string, params *T) error { 38 | 39 | s.cache.Add(key, *params) 40 | 41 | return nil 42 | } 43 | -------------------------------------------------------------------------------- /common/testutils/test_utils_test.go: -------------------------------------------------------------------------------- 1 | package testutils 2 | 3 | import ( 4 | "github.com/stretchr/testify/assert" 5 | "golang.org/x/exp/rand" 6 | "testing" 7 | ) 8 | 9 | func TestRandomSetup(t *testing.T) { 10 | InitializeRandom() 11 | x := rand.Int() 12 | 13 | InitializeRandom() 14 | y := rand.Int() 15 | 16 | assert.NotEqual(t, x, y) 17 | 18 | seed := uint64(rand.Int()) 19 | InitializeRandom(seed) 20 | a := rand.Int() 21 | 22 | InitializeRandom(seed) 23 | b := rand.Int() 24 | 25 | assert.Equal(t, a, b) 26 | } 27 | -------------------------------------------------------------------------------- /common/workerpool.go: -------------------------------------------------------------------------------- 1 | package common 2 | 3 | import "context" 4 | 5 | // WorkerPool is an interface for a worker pool taken from "github.com/gammazero/workerpool" 6 | type WorkerPool interface { 7 | Size() int 8 | Stop() 9 | StopWait() 10 | Stopped() bool 11 | Submit(task func()) 12 | SubmitWait(task func()) 13 | WaitingQueueSize() int 14 | Pause(ctx context.Context) 15 | } 16 | -------------------------------------------------------------------------------- /contracts/.dockerignore: -------------------------------------------------------------------------------- 1 | cache/ 2 | out/ 3 | broadcast/ 4 | bindings/ -------------------------------------------------------------------------------- /contracts/.gitignore: -------------------------------------------------------------------------------- 1 | # Compiler files 2 | cache/ 3 | out/ 4 | 5 | # Ignores development broadcast logs 6 | !/broadcast 7 | /broadcast/*/31337/ 8 | /broadcast/*/40525/ 9 | /broadcast/**/dry-run/ 10 | 11 | # Docs 12 | docs/ 13 | 14 | # Dotenv file 15 | .env 16 | 17 | data/ 18 | 19 | script/output/* 20 | script/input/eigenda_deploy_config.json 21 | 22 | # yarn dependencies 23 | yarn.lock 24 | node_modules 25 | 26 | # release dependencies 27 | artifacts/ -------------------------------------------------------------------------------- /contracts/Dockerfile: -------------------------------------------------------------------------------- 1 | # Use the latest foundry image 2 | FROM --platform=linux/amd64 ghcr.io/foundry-rs/foundry:latest 3 | 4 | # Copy our source code into the container 5 | WORKDIR /app 6 | 7 | # Build and test the source code 8 | COPY . . 9 | RUN forge build 10 | RUN forge test 11 | 12 | # Set the entrypoint to the forge command 13 | ENTRYPOINT ["/bin/sh", "-c"] -------------------------------------------------------------------------------- /contracts/Makefile: -------------------------------------------------------------------------------- 1 | deps: 2 | yarn 3 | 4 | compile: deps 5 | # compile.sh compiles the contracts and creates go bindings 6 | ./compile.sh 7 | 8 | fmt: 9 | forge fmt 10 | 11 | fmt-check: 12 | forge fmt --check -------------------------------------------------------------------------------- /contracts/foundry.toml: -------------------------------------------------------------------------------- 1 | [profile.default] 2 | src = 'src' 3 | out = 'out' 4 | libs = ['lib'] 5 | fs_permissions = [{ access = "read-write", path = "./" }] 6 | 7 | # We force all warnings to be fixed 8 | deny_warnings = true 9 | # We error warnings from libraries. This should be fixed upstream but I'm lazy. 10 | # See https://github.com/ethereum/solidity/issues/2675 for an interesting discussion. 11 | ignored_warnings_from = [ 12 | "lib/eigenlayer-middleware/src/RegistryCoordinator.sol", 13 | ] 14 | 15 | gas_reports = ["*"] 16 | 17 | # Enables or disables the optimizer 18 | optimizer = true 19 | # The number of optimizer runs 20 | optimizer_runs = 200 21 | # Whether or not to use the Yul intermediate representation compilation pipeline 22 | via_ir = false 23 | # Override the Solidity version (this overrides `auto_detect_solc`) 24 | solc_version = '0.8.12' 25 | -------------------------------------------------------------------------------- /contracts/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "@eigenda/contracts", 3 | "version": "0.1.0", 4 | "description": "EigenDA core contracts", 5 | "main": "index.js", 6 | "directories": { 7 | "lib": "lib", 8 | "test": "test", 9 | "src": "src" 10 | }, 11 | "files": [ 12 | "out/", 13 | "src/", 14 | "lib/" 15 | ], 16 | "scripts": { 17 | "test": "forge test -v", 18 | "build": "yarn && forge build" 19 | }, 20 | "repository": { 21 | "type": "git", 22 | "url": "github.com/Layr-Labs/eigenda" 23 | }, 24 | "author": "", 25 | "license": "ISC", 26 | "dependencies": { 27 | "@openzeppelin/contracts": "4.7.0", 28 | "@openzeppelin/contracts-upgradeable": "4.7.0" 29 | } 30 | } 31 | -------------------------------------------------------------------------------- /contracts/remappings.txt: -------------------------------------------------------------------------------- 1 | @openzeppelin/=node_modules/@openzeppelin/ -------------------------------------------------------------------------------- /contracts/script/EigenLayerUtils.s.sol: -------------------------------------------------------------------------------- 1 | // SPDX-License-Identifier: BUSL-1.1 2 | pragma solidity =0.8.12; 3 | 4 | import {IERC20} from "@openzeppelin/contracts/token/ERC20/IERC20.sol"; 5 | 6 | import "forge-std/Script.sol"; 7 | import "forge-std/StdJson.sol"; 8 | 9 | contract EigenLayerUtils { 10 | function _allocate(IERC20 token, address[] memory tos, uint256[] memory amounts) internal { 11 | for (uint256 i = 0; i < tos.length; i++) { 12 | if (token == IERC20(address(0))) { 13 | payable(tos[i]).transfer(amounts[i]); 14 | } else { 15 | token.transfer(tos[i], amounts[i]); 16 | } 17 | } 18 | } 19 | } 20 | -------------------------------------------------------------------------------- /contracts/script/deploy/certverifier/config/holesky/preprod.config.json: -------------------------------------------------------------------------------- 1 | { 2 | "eigenDAServiceManager": "0x54A03db2784E3D0aCC08344D05385d0b62d4F432", 3 | "eigenDAThresholdRegistry": "0x41AEE4A23770045e9977CC9f964d3380D6Ff9e4E", 4 | "defaultSecurityThresholds": { 5 | "0_confirmationThreshold": 55, 6 | "1_adversaryThreshold": 33 7 | }, 8 | 9 | "quorumNumbersRequired": "0x0001" 10 | } -------------------------------------------------------------------------------- /contracts/script/deploy/certverifier/config/holesky/testnet.config.json: -------------------------------------------------------------------------------- 1 | { 2 | "eigenDAServiceManager": "0xD4A7E1Bd8015057293f0D0A557088c286942e84b", 3 | "eigenDAThresholdRegistry": "0x76d131CFBD900dA12f859a363Fb952eEDD1d1Ec1", 4 | "defaultSecurityThresholds": { 5 | "0_confirmationThreshold": 55, 6 | "1_adversaryThreshold": 33 7 | }, 8 | 9 | "quorumNumbersRequired": "0x0001" 10 | } -------------------------------------------------------------------------------- /contracts/script/deploy/certverifier/config/sepolia/testnet.config.json: -------------------------------------------------------------------------------- 1 | { 2 | "eigenDAServiceManager": "0x3a5acf46ba6890B8536420F4900AC9BC45Df4764", 3 | "eigenDAThresholdRegistry": "0x0DA66C1930Acc54809093Bb42f2e6a4bE21d5403", 4 | "defaultSecurityThresholds": { 5 | "0_confirmationThreshold": 55, 6 | "1_adversaryThreshold": 33 7 | }, 8 | 9 | "quorumNumbersRequired": "0x0001" 10 | } -------------------------------------------------------------------------------- /contracts/script/deploy/certverifier/output/h.txt: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Layr-Labs/eigenda/9192afc4f1207c444d00fdf838cf90f87ee07b26/contracts/script/deploy/certverifier/output/h.txt -------------------------------------------------------------------------------- /contracts/script/deploy/holesky/config/ejector.config.json: -------------------------------------------------------------------------------- 1 | { 2 | "chainInfo": { 3 | "chainId": 17000 4 | }, 5 | 6 | "permissions" : { 7 | "owner": "0x28Ade60640fdBDb2609D8d8734D1b5cBeFc0C348", 8 | "ejector": "0xe93765d8462034C43B417e6081BC1e1572c7F55f", 9 | "fallbackEjector": "0xDA29BB71669f46F2a779b4b62f03644A84eE3479", 10 | "deployer": "0xDA29BB71669f46F2a779b4b62f03644A84eE3479", 11 | "emptyContract": "0x9690d52B1Ce155DB2ec5eCbF5a262ccCc7B3A6D2" 12 | }, 13 | 14 | "quorumEjectionParams": [ 15 | { 16 | "0_rateLimitWindow": 604800, 17 | "1_ejectableStakePercent": 3000 18 | }, 19 | { 20 | "0_rateLimitWindow": 604800, 21 | "1_ejectableStakePercent": 3000 22 | } 23 | ] 24 | 25 | } -------------------------------------------------------------------------------- /contracts/script/deploy/mainnet/config/ejector.config.json: -------------------------------------------------------------------------------- 1 | { 2 | "chainInfo": { 3 | "chainId": 1 4 | }, 5 | 6 | "permissions" : { 7 | "owner": "0xBE1685C81aA44FF9FB319dD389addd9374383e90", 8 | "ejector": "0xD2Ee81Cf07B12140C793FcE5B26313CDd9d78eA8", 9 | "deployer": "0x45B866E099a790cbddA655Ca20Cb11168B2cD088", 10 | "emptyContract": "0x1f96861fEFa1065a5A96F20Deb6D8DC3ff48F7f9" 11 | }, 12 | 13 | "quorumEjectionParams": [ 14 | { 15 | "0_rateLimitWindow": 604800, 16 | "1_ejectableStakePercent": 3333 17 | }, 18 | { 19 | "0_rateLimitWindow": 604800, 20 | "1_ejectableStakePercent": 3333 21 | } 22 | ] 23 | 24 | } -------------------------------------------------------------------------------- /contracts/script/deploy/router/config/example_config.json: -------------------------------------------------------------------------------- 1 | { 2 | "initialOwner": "0x0000000000000000000000000000000000000001", 3 | "initialCertVerifier": "0x0000000000000000000000000000000000000002", 4 | "proxyAdmin": "0x0000000000000000000000000000000000000003" 5 | } -------------------------------------------------------------------------------- /contracts/script/deploy/verifiable/mocks/MockRegistryCoordinator.sol: -------------------------------------------------------------------------------- 1 | // SPDX-License-Identifier: BUSL-1.1 2 | 3 | import {IStakeRegistry} from "lib/eigenlayer-middleware/src/interfaces/IStakeRegistry.sol"; 4 | import {IBLSApkRegistry} from "lib/eigenlayer-middleware/src/interfaces/IBLSApkRegistry.sol"; 5 | 6 | pragma solidity =0.8.12; 7 | 8 | // This mock is needed by the service manager contract's constructor 9 | contract MockRegistryCoordinator { 10 | IStakeRegistry public immutable stakeRegistry; 11 | IBLSApkRegistry public immutable blsApkRegistry; 12 | 13 | constructor(IStakeRegistry _stakeRegistry, IBLSApkRegistry _blsApkRegistry) { 14 | stakeRegistry = _stakeRegistry; 15 | blsApkRegistry = _blsApkRegistry; 16 | } 17 | } 18 | -------------------------------------------------------------------------------- /contracts/script/deploy/verifiable/mocks/MockStakeRegistry.sol: -------------------------------------------------------------------------------- 1 | // SPDX-License-Identifier: BUSL-1.1 2 | 3 | import {IDelegationManager} from 4 | "lib/eigenlayer-middleware/lib/eigenlayer-contracts/src/contracts/interfaces/IDelegationManager.sol"; 5 | 6 | pragma solidity =0.8.12; 7 | 8 | // This mock is needed by the service manager contract's constructor 9 | contract MockStakeRegistry { 10 | IDelegationManager public immutable delegation; 11 | 12 | constructor(IDelegationManager delegationManager) { 13 | delegation = delegationManager; 14 | } 15 | } 16 | -------------------------------------------------------------------------------- /contracts/script/input/.gitkeep: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Layr-Labs/eigenda/9192afc4f1207c444d00fdf838cf90f87ee07b26/contracts/script/input/.gitkeep -------------------------------------------------------------------------------- /contracts/src/Imports.sol: -------------------------------------------------------------------------------- 1 | // Imports used for compiling for bindings for clients 2 | pragma solidity ^0.8.12; 3 | 4 | import "../lib/eigenlayer-middleware/src/OperatorStateRetriever.sol"; 5 | import "../lib/eigenlayer-middleware/src/BLSApkRegistry.sol"; 6 | import "../lib/eigenlayer-middleware/src/RegistryCoordinator.sol"; 7 | import "../lib/eigenlayer-middleware/src/EjectionManager.sol"; 8 | -------------------------------------------------------------------------------- /contracts/src/core/EigenDADisperserRegistryStorage.sol: -------------------------------------------------------------------------------- 1 | // SPDX-License-Identifier: MIT 2 | pragma solidity ^0.8.9; 3 | 4 | import {EigenDATypesV2} from "src/core/libraries/v2/EigenDATypesV2.sol"; 5 | 6 | /** 7 | * @title Storage variables for the `EigenDADisperserRegistry` contract. 8 | * @author Layr Labs, Inc. 9 | * @notice This storage contract is separate from the logic to simplify the upgrade process. 10 | */ 11 | abstract contract EigenDADisperserRegistryStorage { 12 | mapping(uint32 => EigenDATypesV2.DisperserInfo) public disperserKeyToInfo; 13 | 14 | // storage gap for upgradeability 15 | // slither-disable-next-line shadowing-state 16 | uint256[49] private __GAP; 17 | } 18 | -------------------------------------------------------------------------------- /contracts/src/core/EigenDARelayRegistryStorage.sol: -------------------------------------------------------------------------------- 1 | // SPDX-License-Identifier: MIT 2 | pragma solidity ^0.8.9; 3 | 4 | import {EigenDATypesV2} from "src/core/libraries/v2/EigenDATypesV2.sol"; 5 | 6 | /** 7 | * @title Storage variables for the `EigenDARelayRegistry` contract. 8 | * @author Layr Labs, Inc. 9 | * @notice This storage contract is separate from the logic to simplify the upgrade process. 10 | */ 11 | abstract contract EigenDARelayRegistryStorage { 12 | mapping(uint32 => EigenDATypesV2.RelayInfo) public relayKeyToInfo; 13 | 14 | uint32 public nextRelayKey; 15 | 16 | // storage gap for upgradeability 17 | // slither-disable-next-line shadowing-state 18 | uint256[48] private __GAP; 19 | } 20 | -------------------------------------------------------------------------------- /contracts/src/core/interfaces/IEigenDABatchMetadataStorage.sol: -------------------------------------------------------------------------------- 1 | // SPDX-License-Identifier: MIT 2 | pragma solidity ^0.8.9; 3 | 4 | interface IEigenDABatchMetadataStorage { 5 | function batchIdToBatchMetadataHash(uint32 batchId) external view returns (bytes32); 6 | } 7 | -------------------------------------------------------------------------------- /contracts/src/core/interfaces/IEigenDADisperserRegistry.sol: -------------------------------------------------------------------------------- 1 | // SPDX-License-Identifier: MIT 2 | pragma solidity ^0.8.9; 3 | 4 | import {EigenDATypesV2} from "src/core/libraries/v2/EigenDATypesV2.sol"; 5 | 6 | interface IEigenDADisperserRegistry { 7 | event DisperserAdded(uint32 indexed key, address indexed disperser); 8 | 9 | function setDisperserInfo(uint32 _disperserKey, EigenDATypesV2.DisperserInfo memory _disperserInfo) external; 10 | 11 | function disperserKeyToAddress(uint32 key) external view returns (address); 12 | } 13 | -------------------------------------------------------------------------------- /contracts/src/core/interfaces/IEigenDARelayRegistry.sol: -------------------------------------------------------------------------------- 1 | // SPDX-License-Identifier: MIT 2 | pragma solidity ^0.8.9; 3 | 4 | import {EigenDATypesV2} from "src/core/libraries/v2/EigenDATypesV2.sol"; 5 | 6 | interface IEigenDARelayRegistry { 7 | event RelayAdded(address indexed relay, uint32 indexed key, string relayURL); 8 | 9 | function addRelayInfo(EigenDATypesV2.RelayInfo memory relayInfo) external returns (uint32); 10 | 11 | function relayKeyToAddress(uint32 key) external view returns (address); 12 | 13 | function relayKeyToUrl(uint32 key) external view returns (string memory); 14 | } 15 | -------------------------------------------------------------------------------- /contracts/src/core/interfaces/IEigenDASignatureVerifier.sol: -------------------------------------------------------------------------------- 1 | // SPDX-License-Identifier: MIT 2 | pragma solidity ^0.8.9; 3 | 4 | import {EigenDATypesV1} from "src/core/libraries/v1/EigenDATypesV1.sol"; 5 | 6 | interface IEigenDASignatureVerifier { 7 | function checkSignatures( 8 | bytes32 msgHash, 9 | bytes calldata quorumNumbers, 10 | uint32 referenceBlockNumber, 11 | EigenDATypesV1.NonSignerStakesAndSignature memory params 12 | ) external view returns (EigenDATypesV1.QuorumStakeTotals memory, bytes32); 13 | } 14 | -------------------------------------------------------------------------------- /contracts/src/periphery/cert/EigenDACertTypes.sol: -------------------------------------------------------------------------------- 1 | // SPDX-License-Identifier: MIT 2 | pragma solidity ^0.8.9; 3 | 4 | import {EigenDATypesV1 as DATypesV1} from "src/core/libraries/v1/EigenDATypesV1.sol"; 5 | import {EigenDATypesV2 as DATypesV2} from "src/core/libraries/v2/EigenDATypesV2.sol"; 6 | 7 | /// @title EigenDACertTypes 8 | /// @notice This library defines the types for each EigenDA certificate version. 9 | /// @dev It is required that RBN be located in positions 32:64 (padded) in the ABI encoded certificate. 10 | library EigenDACertTypes { 11 | struct EigenDACertV3 { 12 | DATypesV2.BatchHeaderV2 batchHeader; 13 | DATypesV2.BlobInclusionInfo blobInclusionInfo; 14 | DATypesV1.NonSignerStakesAndSignature nonSignerStakesAndSignature; 15 | bytes signedQuorumNumbers; 16 | } 17 | } 18 | -------------------------------------------------------------------------------- /contracts/src/periphery/cert/interfaces/IEigenDACertVerifierBase.sol: -------------------------------------------------------------------------------- 1 | // SPDX-License-Identifier: MIT 2 | pragma solidity ^0.8.9; 3 | 4 | interface IEigenDACertVerifierBase { 5 | /// @notice Check a DA cert's validity 6 | /// @param abiEncodedCert The ABI encoded certificate. Any cert verifier should decode this ABI encoding based on the certificate version. 7 | /// @return status An enum value. Success is always mapped to 1, and other values are errors specific to each CertVerifier. 8 | function checkDACert(bytes calldata abiEncodedCert) external view returns (uint8 status); 9 | } 10 | -------------------------------------------------------------------------------- /contracts/src/periphery/cert/interfaces/IEigenDACertVerifierRouter.sol: -------------------------------------------------------------------------------- 1 | // SPDX-License-Identifier: MIT 2 | pragma solidity ^0.8.9; 3 | 4 | import {IEigenDACertVerifierBase} from "src/periphery/cert/interfaces/IEigenDACertVerifierBase.sol"; 5 | 6 | interface IEigenDACertVerifierRouter is IEigenDACertVerifierBase { 7 | /// @notice Returns the address for the active cert verifier at a given reference block number. 8 | /// The reference block number must not be in the future. 9 | function getCertVerifierAt(uint32 referenceBlockNumber) external view returns (address); 10 | } 11 | -------------------------------------------------------------------------------- /contracts/src/periphery/cert/interfaces/IVersionedEigenDACertVerifier.sol: -------------------------------------------------------------------------------- 1 | // SPDX-License-Identifier: MIT 2 | pragma solidity ^0.8.9; 3 | 4 | import {IEigenDAThresholdRegistry} from "src/core/interfaces/IEigenDAThresholdRegistry.sol"; 5 | import {IEigenDASignatureVerifier} from "src/core/interfaces/IEigenDASignatureVerifier.sol"; 6 | import {IEigenDACertVerifierBase} from "src/periphery/cert/interfaces/IEigenDACertVerifierBase.sol"; 7 | import {EigenDATypesV1 as DATypesV1} from "src/core/libraries/v1/EigenDATypesV1.sol"; 8 | 9 | interface IVersionedEigenDACertVerifier { 10 | /// @notice Returns the EigenDA certificate version. Used off-chain to identify how to encode a certificate for this CertVerifier. 11 | /// @return The EigenDA certificate version. 12 | function certVersion() external view returns (uint8); 13 | } 14 | -------------------------------------------------------------------------------- /core/indexer/errors.go: -------------------------------------------------------------------------------- 1 | package indexer 2 | 3 | import "errors" 4 | 5 | var ( 6 | ErrNotImplemented = errors.New("not implemented") 7 | ErrIncorrectObject = errors.New("incorrect object") 8 | ErrUnrecognizedFork = errors.New("unrecognized fork") 9 | ErrHeadersNotOrdered = errors.New("headers not ordered") 10 | ErrIncorrectEvent = errors.New("incorrect event payload") 11 | ErrOperatorNotFound = errors.New("operator not found") 12 | ErrWrongObjectFromIndexer = errors.New("indexer returned error of wrong type") 13 | ) 14 | -------------------------------------------------------------------------------- /core/indexer/upgrader.go: -------------------------------------------------------------------------------- 1 | package indexer 2 | 3 | import "github.com/Layr-Labs/eigenda/indexer" 4 | 5 | type Upgrader struct { 6 | } 7 | 8 | // DetectUpgrade takes in a list of headers and sets the CurrentFork and IsUpgrade fields 9 | func (u *Upgrader) DetectUpgrade(headers indexer.Headers) indexer.Headers { 10 | for i := 0; i < len(headers); i++ { 11 | headers[i].CurrentFork = "genesis" 12 | } 13 | return headers 14 | } 15 | 16 | func (u *Upgrader) GetLatestUpgrade(header *indexer.Header) uint64 { 17 | return header.Number 18 | } 19 | -------------------------------------------------------------------------------- /core/v2/auth.go: -------------------------------------------------------------------------------- 1 | package v2 2 | 3 | import ( 4 | pb "github.com/Layr-Labs/eigenda/api/grpc/disperser/v2" 5 | gethcommon "github.com/ethereum/go-ethereum/common" 6 | ) 7 | 8 | type BlobRequestAuthenticator interface { 9 | AuthenticateBlobRequest(header *BlobHeader, signature []byte) error 10 | AuthenticatePaymentStateRequest(accountId gethcommon.Address, request *pb.GetPaymentStateRequest) error 11 | AuthenticatePaymentStateForAllQuorumsRequest(accountId gethcommon.Address, request *pb.GetPaymentStateForAllQuorumsRequest) error 12 | } 13 | 14 | type BlobRequestSigner interface { 15 | SignBlobRequest(header *BlobHeader) ([]byte, error) 16 | SignPaymentStateRequest(timestamp uint64) ([]byte, error) 17 | GetAccountID() (gethcommon.Address, error) 18 | } 19 | -------------------------------------------------------------------------------- /core/v2/blob_params.go: -------------------------------------------------------------------------------- 1 | package v2 2 | 3 | import ( 4 | "github.com/Layr-Labs/eigenda/common" 5 | "github.com/Layr-Labs/eigenda/core" 6 | ) 7 | 8 | type BlobVersionParameterMap = common.ReadOnlyMap[BlobVersion, *core.BlobVersionParameters] 9 | 10 | func NewBlobVersionParameterMap(params map[BlobVersion]*core.BlobVersionParameters) *BlobVersionParameterMap { 11 | return common.NewReadOnlyMap(params) 12 | } 13 | -------------------------------------------------------------------------------- /core/v2/errors.go: -------------------------------------------------------------------------------- 1 | package v2 2 | 3 | import "errors" 4 | 5 | var ( 6 | ErrNotFound = errors.New("not found") 7 | ) 8 | -------------------------------------------------------------------------------- /disperser/.gitignore: -------------------------------------------------------------------------------- 1 | bin/* 2 | text -------------------------------------------------------------------------------- /disperser/batcher/mock/finalizer.go: -------------------------------------------------------------------------------- 1 | package mock 2 | 3 | import ( 4 | "context" 5 | 6 | "github.com/stretchr/testify/mock" 7 | ) 8 | 9 | type MockFinalizer struct { 10 | mock.Mock 11 | } 12 | 13 | func NewFinalizer() *MockFinalizer { 14 | return &MockFinalizer{} 15 | } 16 | 17 | func (b *MockFinalizer) Start(ctx context.Context) {} 18 | 19 | func (b *MockFinalizer) FinalizeBlobs(ctx context.Context) error { 20 | args := b.Called() 21 | return args.Error(0) 22 | } 23 | -------------------------------------------------------------------------------- /disperser/batcher/mock/txn_manager.go: -------------------------------------------------------------------------------- 1 | package mock 2 | 3 | import ( 4 | "context" 5 | 6 | "github.com/Layr-Labs/eigenda/disperser/batcher" 7 | "github.com/stretchr/testify/mock" 8 | ) 9 | 10 | type MockTxnManager struct { 11 | mock.Mock 12 | 13 | Requests []*batcher.TxnRequest 14 | } 15 | 16 | var _ batcher.TxnManager = (*MockTxnManager)(nil) 17 | 18 | func NewTxnManager() *MockTxnManager { 19 | return &MockTxnManager{} 20 | } 21 | 22 | func (b *MockTxnManager) Start(ctx context.Context) {} 23 | 24 | func (b *MockTxnManager) ProcessTransaction(ctx context.Context, req *batcher.TxnRequest) error { 25 | args := b.Called() 26 | b.Requests = append(b.Requests, req) 27 | return args.Error(0) 28 | } 29 | 30 | func (b *MockTxnManager) ReceiptChan() chan *batcher.ReceiptOrErr { 31 | args := b.Called() 32 | return args.Get(0).(chan *batcher.ReceiptOrErr) 33 | } 34 | -------------------------------------------------------------------------------- /disperser/common/errors.go: -------------------------------------------------------------------------------- 1 | package common 2 | 3 | import "errors" 4 | 5 | var ( 6 | ErrBlobNotFound = errors.New("blob not found") 7 | ErrMetadataNotFound = errors.New("metadata not found") 8 | ErrAlreadyExists = errors.New("record already exists") 9 | ) 10 | -------------------------------------------------------------------------------- /disperser/common/v2/blobstore/errors.go: -------------------------------------------------------------------------------- 1 | package blobstore 2 | 3 | import "errors" 4 | 5 | var ( 6 | ErrBlobNotFound = errors.New("blob not found") 7 | ErrMetadataNotFound = errors.New("metadata not found") 8 | ErrAlreadyExists = errors.New("record already exists") 9 | ErrInvalidStateTransition = errors.New("invalid state transition") 10 | ) 11 | -------------------------------------------------------------------------------- /disperser/common/v2/blobstore/s3_blob_store_test.go: -------------------------------------------------------------------------------- 1 | package blobstore_test 2 | 3 | import ( 4 | "context" 5 | "testing" 6 | 7 | tu "github.com/Layr-Labs/eigenda/common/testutils" 8 | corev2 "github.com/Layr-Labs/eigenda/core/v2" 9 | 10 | "github.com/stretchr/testify/assert" 11 | ) 12 | 13 | func TestStoreGetBlob(t *testing.T) { 14 | testBlobKey := corev2.BlobKey(tu.RandomBytes(32)) 15 | err := blobStore.StoreBlob(context.Background(), testBlobKey, []byte("testBlobData")) 16 | assert.NoError(t, err) 17 | data, err := blobStore.GetBlob(context.Background(), testBlobKey) 18 | assert.NoError(t, err) 19 | assert.Equal(t, []byte("testBlobData"), data) 20 | } 21 | 22 | func TestGetBlobNotFound(t *testing.T) { 23 | testBlobKey := corev2.BlobKey(tu.RandomBytes(32)) 24 | data, err := blobStore.GetBlob(context.Background(), testBlobKey) 25 | assert.Error(t, err) 26 | assert.Nil(t, data) 27 | } 28 | -------------------------------------------------------------------------------- /disperser/controller/mock_blob_set.go: -------------------------------------------------------------------------------- 1 | package controller 2 | 3 | import ( 4 | v2 "github.com/Layr-Labs/eigenda/core/v2" 5 | "github.com/stretchr/testify/mock" 6 | ) 7 | 8 | type MockBlobSet struct { 9 | mock.Mock 10 | } 11 | 12 | func (q *MockBlobSet) AddBlob(blobKey v2.BlobKey) { 13 | _ = q.Called(blobKey) 14 | } 15 | 16 | func (q *MockBlobSet) RemoveBlob(blobKey v2.BlobKey) { 17 | _ = q.Called(blobKey) 18 | } 19 | 20 | func (q *MockBlobSet) Size() int { 21 | args := q.Called() 22 | return args.Int(0) 23 | } 24 | 25 | func (q *MockBlobSet) Contains(blobKey v2.BlobKey) bool { 26 | args := q.Called(blobKey) 27 | return args.Bool(0) 28 | } 29 | -------------------------------------------------------------------------------- /disperser/controller/mock_node_client_manager.go: -------------------------------------------------------------------------------- 1 | package controller 2 | 3 | import ( 4 | "github.com/Layr-Labs/eigenda/api/clients/v2" 5 | "github.com/stretchr/testify/mock" 6 | ) 7 | 8 | type MockClientManager struct { 9 | mock.Mock 10 | } 11 | 12 | var _ NodeClientManager = (*MockClientManager)(nil) 13 | 14 | func (m *MockClientManager) GetClient(host, port string) (clients.NodeClient, error) { 15 | args := m.Called(host, port) 16 | client, _ := args.Get(0).(clients.NodeClient) 17 | return client, args.Error(1) 18 | } 19 | -------------------------------------------------------------------------------- /disperser/dataapi/Makefile: -------------------------------------------------------------------------------- 1 | build: 2 | cd .. && go build -o ./bin/dataapi ./cmd/dataapi 3 | 4 | test: 5 | go test -v ./... 6 | 7 | generate-swagger-v1: 8 | @echo " > Generating v1 swagger..." 9 | swag init -g ../cmd/dataapi/main.go --parseDependency --output docs/v1 --instanceName V1 --packageName v1 --parseDepth 0 --exclude ./v2 --dir . 10 | swag fmt --dir . --exclude ./v2/server_v2.go 11 | 12 | generate-swagger-v2: 13 | @echo " > Generating v2 swagger..." 14 | swag init -g swagger.go --parseDependency --output docs/v2 --instanceName V2 --packageName v2 --dir ./v2 --parseDepth 0 15 | swag fmt --dir ./v2 16 | 17 | generate-swagger: generate-swagger-v1 generate-swagger-v2 18 | -------------------------------------------------------------------------------- /disperser/dataapi/config.go: -------------------------------------------------------------------------------- 1 | package dataapi 2 | 3 | type Config struct { 4 | SocketAddr string 5 | ServerMode string 6 | AllowOrigins []string 7 | DisperserHostname string 8 | ChurnerHostname string 9 | BatcherHealthEndpt string 10 | } 11 | 12 | type DataApiVersion uint 13 | 14 | const ( 15 | V1 DataApiVersion = 1 16 | V2 DataApiVersion = 2 17 | ) 18 | -------------------------------------------------------------------------------- /disperser/dataapi/prometheus/config.go: -------------------------------------------------------------------------------- 1 | package prometheus 2 | 3 | type Config struct { 4 | ServerURL string 5 | Username string 6 | Secret string 7 | Cluster string 8 | } 9 | -------------------------------------------------------------------------------- /disperser/dataapi/prometheus/mock/api.go: -------------------------------------------------------------------------------- 1 | package mock 2 | 3 | import ( 4 | "context" 5 | "time" 6 | 7 | "github.com/Layr-Labs/eigenda/disperser/dataapi/prometheus" 8 | v1 "github.com/prometheus/client_golang/api/prometheus/v1" 9 | "github.com/prometheus/common/model" 10 | "github.com/stretchr/testify/mock" 11 | ) 12 | 13 | type MockPrometheusApi struct { 14 | mock.Mock 15 | } 16 | 17 | var _ prometheus.Api = (*MockPrometheusApi)(nil) 18 | 19 | func (m *MockPrometheusApi) QueryRange(ctx context.Context, query string, start time.Time, end time.Time, step time.Duration) (model.Value, v1.Warnings, error) { 20 | args := m.Called() 21 | var value model.Value 22 | if args.Get(0) != nil { 23 | value = args.Get(0).(model.Value) 24 | } 25 | var warnings v1.Warnings 26 | if args.Get(1) != nil { 27 | warnings = args.Get(1).(v1.Warnings) 28 | } 29 | return value, warnings, args.Error(2) 30 | } 31 | -------------------------------------------------------------------------------- /disperser/dataapi/v2/swagger.go: -------------------------------------------------------------------------------- 1 | package v2 2 | 3 | // @title EigenDA Data Access API V2 4 | // @version 2.0 5 | // @description This is the EigenDA Data Access API V2 server. 6 | // @BasePath /api/v2 7 | // @schemes https http 8 | 9 | // SwaggerV2Doc holds swagger docs for v2 10 | func SwaggerV2Doc() { 11 | // This function exists solely to hold the swagger docs 12 | // It should never be called 13 | } 14 | -------------------------------------------------------------------------------- /disperser/encoder/config.go: -------------------------------------------------------------------------------- 1 | package encoder 2 | 3 | const ( 4 | Localhost = "0.0.0.0" 5 | ) 6 | 7 | type ServerConfig struct { 8 | GrpcPort string 9 | MaxConcurrentRequests int 10 | RequestPoolSize int 11 | RequestQueueSize int 12 | EnableGnarkChunkEncoding bool 13 | PreventReencoding bool 14 | Backend string 15 | GPUEnable bool 16 | PprofHttpPort string 17 | EnablePprof bool 18 | } 19 | -------------------------------------------------------------------------------- /disperser/encoder_client.go: -------------------------------------------------------------------------------- 1 | package disperser 2 | 3 | import ( 4 | "context" 5 | 6 | "github.com/Layr-Labs/eigenda/core" 7 | "github.com/Layr-Labs/eigenda/encoding" 8 | ) 9 | 10 | type EncoderClient interface { 11 | EncodeBlob(ctx context.Context, data []byte, encodingParams encoding.EncodingParams) (*encoding.BlobCommitments, *core.ChunksData, error) 12 | } 13 | -------------------------------------------------------------------------------- /disperser/encoder_client_v2.go: -------------------------------------------------------------------------------- 1 | package disperser 2 | 3 | import ( 4 | "context" 5 | 6 | corev2 "github.com/Layr-Labs/eigenda/core/v2" 7 | "github.com/Layr-Labs/eigenda/encoding" 8 | ) 9 | 10 | type EncoderClientV2 interface { 11 | EncodeBlob(ctx context.Context, blobKey corev2.BlobKey, encodingParams encoding.EncodingParams, blobSize uint64) (*encoding.FragmentInfo, error) 12 | } 13 | -------------------------------------------------------------------------------- /disperser/mock/encoder_v2.go: -------------------------------------------------------------------------------- 1 | package mock 2 | 3 | import ( 4 | "context" 5 | 6 | corev2 "github.com/Layr-Labs/eigenda/core/v2" 7 | "github.com/Layr-Labs/eigenda/disperser" 8 | "github.com/Layr-Labs/eigenda/encoding" 9 | "github.com/stretchr/testify/mock" 10 | ) 11 | 12 | type MockEncoderClientV2 struct { 13 | mock.Mock 14 | } 15 | 16 | var _ disperser.EncoderClientV2 = (*MockEncoderClientV2)(nil) 17 | 18 | func NewMockEncoderClientV2() *MockEncoderClientV2 { 19 | return &MockEncoderClientV2{} 20 | } 21 | 22 | func (m *MockEncoderClientV2) EncodeBlob(ctx context.Context, blobKey corev2.BlobKey, encodingParams encoding.EncodingParams, blobSize uint64) (*encoding.FragmentInfo, error) { 23 | args := m.Called() 24 | var fragmentInfo *encoding.FragmentInfo 25 | if args.Get(0) != nil { 26 | fragmentInfo = args.Get(0).(*encoding.FragmentInfo) 27 | } 28 | return fragmentInfo, args.Error(1) 29 | } 30 | -------------------------------------------------------------------------------- /disperser/server_config.go: -------------------------------------------------------------------------------- 1 | package disperser 2 | 3 | import "time" 4 | 5 | const ( 6 | Localhost = "0.0.0.0" 7 | ) 8 | 9 | type ServerConfig struct { 10 | GrpcPort string 11 | GrpcTimeout time.Duration 12 | 13 | PprofHttpPort string 14 | EnablePprof bool 15 | } 16 | -------------------------------------------------------------------------------- /docs/audits/Sigma_Prime_EigenDA_Offchain_Security_Assessment_Report.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Layr-Labs/eigenda/9192afc4f1207c444d00fdf838cf90f87ee07b26/docs/audits/Sigma_Prime_EigenDA_Offchain_Security_Assessment_Report.pdf -------------------------------------------------------------------------------- /docs/spec/.gitignore: -------------------------------------------------------------------------------- 1 | book 2 | -------------------------------------------------------------------------------- /docs/spec/Makefile: -------------------------------------------------------------------------------- 1 | # Serves the mdbook docs located in this directory. 2 | # Will open a browser window to view the docs. 3 | serve: install-deps 4 | mdbook serve . --open 5 | 6 | build: install-deps 7 | mdbook build 8 | 9 | install-deps: 10 | cargo install mdbook mdbook-mermaid@0.14.1 -------------------------------------------------------------------------------- /docs/spec/book.toml: -------------------------------------------------------------------------------- 1 | [book] 2 | authors = ["Samuel Laferriere"] 3 | language = "en" 4 | multilingual = false 5 | src = "src" 6 | title = "EigenDA Spec" 7 | 8 | [output.html] 9 | mathjax-support = true 10 | additional-js = ["mermaid.min.js", "mermaid-init.js"] 11 | 12 | [preprocessor] 13 | 14 | [preprocessor.mermaid] 15 | # Preprocesses the mermaid diagrams (see src/integration/proxy.md for an example) 16 | # and generates the corresponding SVG files. 17 | # See https://github.com/badboy/mdbook-mermaid for more information. 18 | # This requires the mdbook-mermaid crate to be installed. 19 | command = "mdbook-mermaid" 20 | -------------------------------------------------------------------------------- /docs/spec/src/assets/architecture.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Layr-Labs/eigenda/9192afc4f1207c444d00fdf838cf90f87ee07b26/docs/spec/src/assets/architecture.png -------------------------------------------------------------------------------- /docs/spec/src/assets/assignment-module.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Layr-Labs/eigenda/9192afc4f1207c444d00fdf838cf90f87ee07b26/docs/spec/src/assets/assignment-module.png -------------------------------------------------------------------------------- /docs/spec/src/assets/attestation-layer-parts.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Layr-Labs/eigenda/9192afc4f1207c444d00fdf838cf90f87ee07b26/docs/spec/src/assets/attestation-layer-parts.png -------------------------------------------------------------------------------- /docs/spec/src/assets/attestation-layer.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Layr-Labs/eigenda/9192afc4f1207c444d00fdf838cf90f87ee07b26/docs/spec/src/assets/attestation-layer.png -------------------------------------------------------------------------------- /docs/spec/src/assets/blazar-diagram.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Layr-Labs/eigenda/9192afc4f1207c444d00fdf838cf90f87ee07b26/docs/spec/src/assets/blazar-diagram.png -------------------------------------------------------------------------------- /docs/spec/src/assets/bridging-module.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Layr-Labs/eigenda/9192afc4f1207c444d00fdf838cf90f87ee07b26/docs/spec/src/assets/bridging-module.png -------------------------------------------------------------------------------- /docs/spec/src/assets/encoding-groups.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Layr-Labs/eigenda/9192afc4f1207c444d00fdf838cf90f87ee07b26/docs/spec/src/assets/encoding-groups.png -------------------------------------------------------------------------------- /docs/spec/src/assets/encoding-module.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Layr-Labs/eigenda/9192afc4f1207c444d00fdf838cf90f87ee07b26/docs/spec/src/assets/encoding-module.png -------------------------------------------------------------------------------- /docs/spec/src/assets/integration/blob-certificate.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Layr-Labs/eigenda/9192afc4f1207c444d00fdf838cf90f87ee07b26/docs/spec/src/assets/integration/blob-certificate.png -------------------------------------------------------------------------------- /docs/spec/src/assets/integration/cert-rbn-recency-window.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Layr-Labs/eigenda/9192afc4f1207c444d00fdf838cf90f87ee07b26/docs/spec/src/assets/integration/cert-rbn-recency-window.png -------------------------------------------------------------------------------- /docs/spec/src/assets/integration/contracts-eigenda.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Layr-Labs/eigenda/9192afc4f1207c444d00fdf838cf90f87ee07b26/docs/spec/src/assets/integration/contracts-eigenda.png -------------------------------------------------------------------------------- /docs/spec/src/assets/integration/contracts-rollup.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Layr-Labs/eigenda/9192afc4f1207c444d00fdf838cf90f87ee07b26/docs/spec/src/assets/integration/contracts-rollup.png -------------------------------------------------------------------------------- /docs/spec/src/assets/integration/high-level-diagram.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Layr-Labs/eigenda/9192afc4f1207c444d00fdf838cf90f87ee07b26/docs/spec/src/assets/integration/high-level-diagram.png -------------------------------------------------------------------------------- /docs/spec/src/assets/integration/op-integration-high-level.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Layr-Labs/eigenda/9192afc4f1207c444d00fdf838cf90f87ee07b26/docs/spec/src/assets/integration/op-integration-high-level.png -------------------------------------------------------------------------------- /docs/spec/src/assets/integration/payload-to-blob-encoding.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Layr-Labs/eigenda/9192afc4f1207c444d00fdf838cf90f87ee07b26/docs/spec/src/assets/integration/payload-to-blob-encoding.png -------------------------------------------------------------------------------- /docs/spec/src/assets/integration/recency-window-timeline.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Layr-Labs/eigenda/9192afc4f1207c444d00fdf838cf90f87ee07b26/docs/spec/src/assets/integration/recency-window-timeline.png -------------------------------------------------------------------------------- /docs/spec/src/assets/integration/rollup-proxy-da-integration.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Layr-Labs/eigenda/9192afc4f1207c444d00fdf838cf90f87ee07b26/docs/spec/src/assets/integration/rollup-proxy-da-integration.png -------------------------------------------------------------------------------- /docs/spec/src/assets/integration/ultra-high-res-diagram.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Layr-Labs/eigenda/9192afc4f1207c444d00fdf838cf90f87ee07b26/docs/spec/src/assets/integration/ultra-high-res-diagram.png -------------------------------------------------------------------------------- /docs/spec/src/assets/integration/v2-batch-hashing-structure.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Layr-Labs/eigenda/9192afc4f1207c444d00fdf838cf90f87ee07b26/docs/spec/src/assets/integration/v2-batch-hashing-structure.png -------------------------------------------------------------------------------- /docs/spec/src/assets/integration/v2-cert.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Layr-Labs/eigenda/9192afc4f1207c444d00fdf838cf90f87ee07b26/docs/spec/src/assets/integration/v2-cert.png -------------------------------------------------------------------------------- /docs/spec/src/assets/network-layer.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Layr-Labs/eigenda/9192afc4f1207c444d00fdf838cf90f87ee07b26/docs/spec/src/assets/network-layer.png -------------------------------------------------------------------------------- /docs/spec/src/integration.md: -------------------------------------------------------------------------------- 1 | # EigenDA Integrations 2 | 3 | This book is meant to be read by eigenda and rollup developers who are writing or extending an integration with EigenDA. 4 | Users and developers who just want to understand how an integration works at a high level, and need to learn 5 | how to configure their own integration, should instead visit our [Integrations Guides](https://docs.eigenda.xyz/integrations-guides/overview). -------------------------------------------------------------------------------- /docs/spec/src/protocol.md: -------------------------------------------------------------------------------- 1 | # EigenDA Protocol 2 | 3 | Broken down into 2 main sections. 4 | 5 | ## Core Services 6 | 7 | EigenDA Protocol consists of a suite of services that allow for data to be securely stored and retrieved from the validators. 8 | 9 | ![Core](./assets/blazar-diagram.png) 10 | 11 | ## Contracts -------------------------------------------------------------------------------- /docs/spec/src/v1.md: -------------------------------------------------------------------------------- 1 | # V1 2 | 3 | Link to previous documentation? -------------------------------------------------------------------------------- /encoding/bench/Makefile: -------------------------------------------------------------------------------- 1 | build_cpu: 2 | go build -gcflags="all=-N -l" -ldflags="-s=false -w=false" -o bin/main main.go 3 | 4 | build_icicle: 5 | go build -tags=icicle -gcflags="all=-N -l" -ldflags="-s=false -w=false" -o bin/main_icicle main.go 6 | 7 | benchmark_default: 8 | go run main.go -cpuprofile cpu.prof -memprofile mem.prof 9 | 10 | benchmark_icicle: 11 | go run -tags=icicle main.go -cpuprofile cpu.prof -memprofile mem.prof 12 | 13 | cpu_profile: 14 | go tool pprof -http=:8080 cpu.prof 15 | 16 | mem_profile: 17 | go tool pprof -http=:8080 mem.prof 18 | -------------------------------------------------------------------------------- /encoding/kzg/constants.go: -------------------------------------------------------------------------------- 1 | package kzg 2 | 3 | import ( 4 | "github.com/consensys/gnark-crypto/ecc/bn254" 5 | ) 6 | 7 | func init() { 8 | initG1G2() 9 | } 10 | 11 | var GenG1 bn254.G1Affine 12 | var GenG2 bn254.G2Affine 13 | 14 | var ZeroG1 bn254.G1Affine 15 | var ZeroG2 bn254.G2Affine 16 | 17 | func initG1G2() { 18 | 19 | _, _, genG1, genG2 := bn254.Generators() 20 | 21 | GenG1 = *(*bn254.G1Affine)(&genG1) 22 | GenG2 = *(*bn254.G2Affine)(&genG2) 23 | 24 | var g1Jac bn254.G1Jac 25 | g1Jac.X.SetZero() 26 | g1Jac.Y.SetOne() 27 | g1Jac.Z.SetZero() 28 | 29 | var g1Aff bn254.G1Affine 30 | g1Aff.FromJacobian(&g1Jac) 31 | ZeroG1 = *(*bn254.G1Affine)(&g1Aff) 32 | 33 | var g2Jac bn254.G2Jac 34 | g2Jac.X.SetZero() 35 | g2Jac.Y.SetOne() 36 | g2Jac.Z.SetZero() 37 | var g2Aff bn254.G2Affine 38 | g2Aff.FromJacobian(&g2Jac) 39 | ZeroG2 = *(*bn254.G2Affine)(&g2Aff) 40 | } 41 | -------------------------------------------------------------------------------- /encoding/kzg/kzgrs.go: -------------------------------------------------------------------------------- 1 | package kzg 2 | 3 | type KzgConfig struct { 4 | G1Path string 5 | G2Path string 6 | G2TrailingPath string 7 | G1PowerOf2Path string 8 | G2PowerOf2Path string 9 | CacheDir string 10 | NumWorker uint64 11 | SRSOrder uint64 // Order is the total size of SRS 12 | SRSNumberToLoad uint64 // Number of points to be loaded from the beginning 13 | Verbose bool 14 | PreloadEncoder bool 15 | LoadG2Points bool 16 | } 17 | -------------------------------------------------------------------------------- /encoding/kzg/prover/decode.go: -------------------------------------------------------------------------------- 1 | package prover 2 | 3 | import ( 4 | enc "github.com/Layr-Labs/eigenda/encoding" 5 | "github.com/Layr-Labs/eigenda/encoding/rs" 6 | ) 7 | 8 | func (g *ParametrizedProver) Decode(frames []enc.Frame, indices []uint64, maxInputSize uint64) ([]byte, error) { 9 | rsFrames := make([]rs.FrameCoeffs, len(frames)) 10 | for ind, frame := range frames { 11 | rsFrames[ind] = frame.Coeffs 12 | } 13 | 14 | return g.Encoder.Decode(rsFrames, indices, maxInputSize, g.EncodingParams) 15 | } 16 | -------------------------------------------------------------------------------- /encoding/kzg/prover/noicicle.go: -------------------------------------------------------------------------------- 1 | //go:build !icicle 2 | 3 | package prover 4 | 5 | import ( 6 | "errors" 7 | 8 | "github.com/Layr-Labs/eigenda/encoding" 9 | "github.com/Layr-Labs/eigenda/encoding/fft" 10 | "github.com/Layr-Labs/eigenda/encoding/kzg" 11 | ) 12 | 13 | func CreateIcicleBackendProver(p *Prover, params encoding.EncodingParams, fs *fft.FFTSettings, ks *kzg.KZGSettings) (*ParametrizedProver, error) { 14 | // Not supported 15 | return nil, errors.New("icicle backend called without icicle build tag") 16 | } 17 | -------------------------------------------------------------------------------- /encoding/kzg/prover/proof_backend.go: -------------------------------------------------------------------------------- 1 | package prover 2 | 3 | import ( 4 | "github.com/consensys/gnark-crypto/ecc/bn254" 5 | "github.com/consensys/gnark-crypto/ecc/bn254/fr" 6 | ) 7 | 8 | // Proof device represents a backend capable of computing KZG multiproofs. 9 | type KzgMultiProofsBackend interface { 10 | ComputeMultiFrameProof(blobFr []fr.Element, numChunks, chunkLen, numWorker uint64) ([]bn254.G1Affine, error) 11 | } 12 | 13 | // CommitmentDevice represents a backend capable of computing various KZG commitments. 14 | type KzgCommitmentsBackend interface { 15 | ComputeCommitment(coeffs []fr.Element) (*bn254.G1Affine, error) 16 | ComputeLengthCommitment(coeffs []fr.Element) (*bn254.G2Affine, error) 17 | ComputeLengthProof(coeffs []fr.Element) (*bn254.G2Affine, error) 18 | ComputeLengthProofForLength(blobFr []fr.Element, length uint64) (*bn254.G2Affine, error) 19 | } 20 | -------------------------------------------------------------------------------- /encoding/rs/gnark/extend_poly.go: -------------------------------------------------------------------------------- 1 | package gnark 2 | 3 | import ( 4 | "github.com/Layr-Labs/eigenda/encoding/fft" 5 | "github.com/consensys/gnark-crypto/ecc/bn254/fr" 6 | ) 7 | 8 | type RsGnarkBackend struct { 9 | Fs *fft.FFTSettings 10 | } 11 | 12 | // Encoding Reed Solomon using FFT 13 | func (g *RsGnarkBackend) ExtendPolyEval(coeffs []fr.Element) ([]fr.Element, error) { 14 | evals, err := g.Fs.FFT(coeffs, false) 15 | if err != nil { 16 | return nil, err 17 | } 18 | 19 | return evals, nil 20 | } 21 | -------------------------------------------------------------------------------- /encoding/rs/noicicle.go: -------------------------------------------------------------------------------- 1 | //go:build !icicle 2 | 3 | package rs 4 | 5 | import ( 6 | "errors" 7 | 8 | "github.com/Layr-Labs/eigenda/encoding" 9 | "github.com/Layr-Labs/eigenda/encoding/fft" 10 | ) 11 | 12 | func CreateIcicleBackendEncoder(p *Encoder, params encoding.EncodingParams, fs *fft.FFTSettings) (*ParametrizedEncoder, error) { 13 | // Not supported 14 | return nil, errors.New("icicle backend called without icicle build tag") 15 | } 16 | -------------------------------------------------------------------------------- /encoding/test/README.md: -------------------------------------------------------------------------------- 1 | # encoding 2 | 3 | 4 | - performs Reed Solomon Encoding using elliptic curve points. The library enables KZG multi-proof and reveal in O(n log n) time using FFT, based on FK20 algorithm. 5 | 6 | - is built upon crypto primitive from https://pkg.go.dev/github.com/protolambda/go-kzg 7 | 8 | - accepts arbitrary number of systematic nodes, parity nodes and data size, free of restriction on power of 2 9 | -------------------------------------------------------------------------------- /encoding/test_utils.go: -------------------------------------------------------------------------------- 1 | package encoding 2 | 3 | import ( 4 | "golang.org/x/exp/constraints" 5 | ) 6 | 7 | // GeneratePowersOfTwo creates a slice of integers, containing powers of 2 (starting with element == 1), with 8 | // powersToGenerate number of elements 9 | func GeneratePowersOfTwo[T constraints.Integer](powersToGenerate T) []T { 10 | powers := make([]T, powersToGenerate) 11 | for i := T(0); i < powersToGenerate; i++ { 12 | powers[i] = 1 << i 13 | } 14 | 15 | return powers 16 | } 17 | -------------------------------------------------------------------------------- /encoding/utils_test.go: -------------------------------------------------------------------------------- 1 | package encoding 2 | 3 | import ( 4 | "testing" 5 | 6 | "github.com/stretchr/testify/require" 7 | ) 8 | 9 | func TestNextPowerOf2(t *testing.T) { 10 | testHeight := 65536 11 | 12 | // 2 ^ 16 = 65536 13 | // i.e., the last element generated here == testHeight 14 | powers := GeneratePowersOfTwo(17) 15 | 16 | powerIndex := 0 17 | for i := 1; i <= testHeight; i++ { 18 | nextPowerOf2 := NextPowerOf2(i) 19 | require.Equal(t, nextPowerOf2, powers[powerIndex]) 20 | 21 | if i == powers[powerIndex] { 22 | powerIndex++ 23 | } 24 | } 25 | 26 | // sanity check the test logic 27 | require.Equal(t, powerIndex, len(powers)) 28 | 29 | // extra sanity check, since we *really* rely on NextPowerOf2 returning 30 | // the same value, if it's already a power of 2 31 | require.Equal(t, 16, NextPowerOf2(16)) 32 | } 33 | -------------------------------------------------------------------------------- /inabox/.gitignore: -------------------------------------------------------------------------------- 1 | data/ 2 | -------------------------------------------------------------------------------- /inabox/anvil/docker-compose.yaml: -------------------------------------------------------------------------------- 1 | version: '3' 2 | services: 3 | anvil: 4 | image: ghcr.io/foundry-rs/foundry:v1.0.0 5 | ports: 6 | - 8545:8545 7 | networks: 8 | - eigenda-demo 9 | command: ["anvil --host 0.0.0.0"] 10 | networks: 11 | eigenda-demo: 12 | name: eigenda-demo 13 | -------------------------------------------------------------------------------- /inabox/create-s3-bucket.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | set -e 3 | 4 | S3_BUCKET="test-eigenda-blobstore" 5 | S3_REGION="us-east-1" 6 | 7 | if AWS_ACCESS_KEY_ID=localstack AWS_SECRET_ACCESS_KEY=localstack \ 8 | aws s3api head-bucket --endpoint-url=$AWS_URL --bucket "$S3_BUCKET" 2>/dev/null; then 9 | echo "Bucket $S3_BUCKET already exists" 10 | else 11 | echo "Creating bucket $S3_BUCKET" 12 | AWS_ACCESS_KEY_ID=localstack AWS_SECRET_ACCESS_KEY=localstack aws s3api create-bucket \ 13 | --endpoint-url=$AWS_URL \ 14 | --bucket "$S3_BUCKET" \ 15 | --region "$S3_REGION" 16 | fi 17 | -------------------------------------------------------------------------------- /inabox/deploy/codegen/gen.sh: -------------------------------------------------------------------------------- 1 | go run . 2 | cd ../ && gofmt -s -w . -------------------------------------------------------------------------------- /inabox/geth/.env: -------------------------------------------------------------------------------- 1 | GETH_CHAINID=40525 2 | GETH_UNLOCK_ADDRESS=3aa273f6c6df3a8498ebdcdd241a2575e08cde64 -------------------------------------------------------------------------------- /inabox/geth/.gitignore: -------------------------------------------------------------------------------- 1 | data 2 | -------------------------------------------------------------------------------- /inabox/geth/get-revert.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | 3 | docker exec geth sh -c "cd /root/.ethereum/ && geth --exec 'tx = eth.getTransaction(\"$1\"); eth.call(tx,tx.blockNumber)' attach geth.ipc" 4 | 5 | -------------------------------------------------------------------------------- /inabox/geth/secret/geth-account-password: -------------------------------------------------------------------------------- 1 | not-a-secret-hmwUHAxZ0yog6vaKYRS3nLwMR5luMMNVHTn6Toyzgl8 2 | -------------------------------------------------------------------------------- /inabox/node-plugin.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | 3 | go mod tidy 4 | go build -o ../node/plugin/bin/nodeplugin ../node/plugin/cmd 5 | ../node/plugin/bin/nodeplugin 6 | 7 | 8 | -------------------------------------------------------------------------------- /inabox/ratelimit.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | 3 | for ((i=0;i<10;i++)); do 4 | # Generate 1KB of random data and store it in a variable called "data" 5 | # The data is stored in hex format 6 | data=$(printf '1%.0s' {1..1000} | base64 | tr -d '\n') 7 | grpcurl -plaintext -d "{\"data\": \"$data\", \"security_params\": [{\"quorum_id\": 0, \"adversary_threshold\": 50, \"quorum_threshold\": 100}]}" localhost:32003 disperser.Disperser/DisperseBlob 8 | sleep 0.5 9 | done 10 | 11 | -------------------------------------------------------------------------------- /inabox/resources/kzg/g1.point: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Layr-Labs/eigenda/9192afc4f1207c444d00fdf838cf90f87ee07b26/inabox/resources/kzg/g1.point -------------------------------------------------------------------------------- /inabox/resources/kzg/g1.point.300000: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Layr-Labs/eigenda/9192afc4f1207c444d00fdf838cf90f87ee07b26/inabox/resources/kzg/g1.point.300000 -------------------------------------------------------------------------------- /inabox/resources/kzg/g2.point: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Layr-Labs/eigenda/9192afc4f1207c444d00fdf838cf90f87ee07b26/inabox/resources/kzg/g2.point -------------------------------------------------------------------------------- /inabox/resources/kzg/g2.point.300000: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Layr-Labs/eigenda/9192afc4f1207c444d00fdf838cf90f87ee07b26/inabox/resources/kzg/g2.point.300000 -------------------------------------------------------------------------------- /inabox/resources/kzg/g2.point.300000.powerOf2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Layr-Labs/eigenda/9192afc4f1207c444d00fdf838cf90f87ee07b26/inabox/resources/kzg/g2.point.300000.powerOf2 -------------------------------------------------------------------------------- /inabox/resources/kzg/g2.point.powerOf2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Layr-Labs/eigenda/9192afc4f1207c444d00fdf838cf90f87ee07b26/inabox/resources/kzg/g2.point.powerOf2 -------------------------------------------------------------------------------- /inabox/secrets/bls_keys/keys/1.bls.key.json: -------------------------------------------------------------------------------- 1 | {"pubKey":"E([19408553463882111916887171276012224475029133183214861480489485386352635269635,17418827901203159022109906145273000034647571131322064812191371351028964064220])","crypto":{"cipher":"aes-128-ctr","ciphertext":"f2e5a3df524234426297f84b80c3c69e008ca17960fa512845b250a5308a7a6c","cipherparams":{"iv":"64528130796bc7227f48b0b01030b4c2"},"kdf":"scrypt","kdfparams":{"dklen":32,"n":262144,"p":1,"r":8,"salt":"7ceca78a0011e3ab5dce8b4f562b0615f60d8642b841d751bc676fb7dc574938"},"mac":"f9e5050e1077e2558a66f82fad05259ebc9e81da6e5ef8025f34d8fbc7e6e8ac"}} -------------------------------------------------------------------------------- /inabox/secrets/bls_keys/keys/10.bls.key.json: -------------------------------------------------------------------------------- 1 | {"pubKey":"E([20033409541027087898996013771015099400853424042652173285582728583342902337204,8416926931350553541792180249382124323637891725898225988928698524457350547010])","crypto":{"cipher":"aes-128-ctr","ciphertext":"58548f8ec4485ab038b1720a557f24b0f0c0ef6a93b0d96c33987e4c798c57f5","cipherparams":{"iv":"882d3a1bb323249eee50eb29fc8305c3"},"kdf":"scrypt","kdfparams":{"dklen":32,"n":262144,"p":1,"r":8,"salt":"8b46adbb03cc578c824a405fd4b8341c9dd7dc963b94d0469f953d36a3091ba5"},"mac":"6871e231c5adcf392c1f7cd64a4847f8637f816318a089d429b4a33253256a10"}} -------------------------------------------------------------------------------- /inabox/secrets/bls_keys/keys/11.bls.key.json: -------------------------------------------------------------------------------- 1 | {"pubKey":"E([15502524601299916150245655233543504409193146014048710197277977261608811399255,14153842553566963645735714104720254516908385743823296858687275901813164519452])","crypto":{"cipher":"aes-128-ctr","ciphertext":"0a54ac7ec8a3cd6326a0303acbe1bd078fdeca29976f4c1e218c8f36f2c24f9d","cipherparams":{"iv":"c19f09077e498b80a4060894e0c0596c"},"kdf":"scrypt","kdfparams":{"dklen":32,"n":262144,"p":1,"r":8,"salt":"f668e0fa1f5b333560625355dd260cc1fe569d4e3c172fa1bff2e40286d2987d"},"mac":"7fb80682707f2e2f2239c85a435060438633725a88a57e9c3a45bd2caf163fc0"}} -------------------------------------------------------------------------------- /inabox/secrets/bls_keys/keys/12.bls.key.json: -------------------------------------------------------------------------------- 1 | {"pubKey":"E([19009689770016361008874792588161204898256643176830095028466269435894493868298,4912523978018349909704186140526655471803096217359334026755399239052745641211])","crypto":{"cipher":"aes-128-ctr","ciphertext":"a97ccaa6e75482758a7402bde272a10c20dcf1bbf2ca29ef7cbbe426ccf6f079","cipherparams":{"iv":"d6bf0335fd1ba91e868b99d87084c2df"},"kdf":"scrypt","kdfparams":{"dklen":32,"n":262144,"p":1,"r":8,"salt":"69ac9c65923484c1c0f91acb7e9d251d4a7b501fc13ae0f2b2ceda3de4e2afbc"},"mac":"953b45a0162c5e72ac4354ae303758ebfcc0b0b7154a937dbe49b6e8e7051ecd"}} -------------------------------------------------------------------------------- /inabox/secrets/bls_keys/keys/13.bls.key.json: -------------------------------------------------------------------------------- 1 | {"pubKey":"E([11865866222739240520202720723084025794427398361251258363778734130543871337026,21865821699390548202156622413426869512020811304738537869411524407418522130817])","crypto":{"cipher":"aes-128-ctr","ciphertext":"4e62016153f7a58de186eb4e87c3e347e60d9efbd8877b8c2f17142f21bf50a9","cipherparams":{"iv":"34ce083131884470f0a94587c0e29df0"},"kdf":"scrypt","kdfparams":{"dklen":32,"n":262144,"p":1,"r":8,"salt":"4b850bde4fb9b22fff326236bb92cbc615c2df586d9ec8f005cefb0a12a1f2e7"},"mac":"b90a0dacb7b144e2bfd4a233515994d440c6016f7a28f2ecf14be55d0ce84cd9"}} -------------------------------------------------------------------------------- /inabox/secrets/bls_keys/keys/14.bls.key.json: -------------------------------------------------------------------------------- 1 | {"pubKey":"E([4170044650287645380007257573020871410146338308102297291163569597744671189461,14862370309568996594590751054295513494064434496409357401358399319477797787354])","crypto":{"cipher":"aes-128-ctr","ciphertext":"4e0099e1cf85735aed2838150e661a652b228eb2999306d1e9404a2be7fbba87","cipherparams":{"iv":"86732f8e4f429c9680a4c5707ffd516b"},"kdf":"scrypt","kdfparams":{"dklen":32,"n":262144,"p":1,"r":8,"salt":"5e901ea4879ac81528476ee15cca8ecd30b8886d7ede0b93a49c5843ba09d968"},"mac":"a3ec59cc1fb4838c494d9f83b33fe88d76f0fcf97cdec60c3101e99c2da3b53c"}} -------------------------------------------------------------------------------- /inabox/secrets/bls_keys/keys/15.bls.key.json: -------------------------------------------------------------------------------- 1 | {"pubKey":"E([4778508791671878707696625341757108045469823747457849397057211199876782613140,436650946239391756088160092786429646505273196934632454665576473951248571856])","crypto":{"cipher":"aes-128-ctr","ciphertext":"8c6bb9c0671cce81492c2b4fd874be8a2ccb7341c9b5a1d421157e6882f46a86","cipherparams":{"iv":"6d6d272371bd18d2b641020fabd85046"},"kdf":"scrypt","kdfparams":{"dklen":32,"n":262144,"p":1,"r":8,"salt":"82018e43f2493609c70eafe273c461083d25b51c05c705897e4dfe715ee16944"},"mac":"61a119e443d34bb4af771a78ee0add34e130647ee95b63175e792bd356d486bd"}} -------------------------------------------------------------------------------- /inabox/secrets/bls_keys/keys/16.bls.key.json: -------------------------------------------------------------------------------- 1 | {"pubKey":"E([1774947307409682024232743159557093339555515859683543874764588099792165762450,2232650464846518366181702807340869181905349571621858816472725033095954625359])","crypto":{"cipher":"aes-128-ctr","ciphertext":"211828753077fbc9ac9f736e4f5238aff1ec2b875c415d17991c84aab2f5b622","cipherparams":{"iv":"cdfd6728b58fcf1cee22fefc59692ec3"},"kdf":"scrypt","kdfparams":{"dklen":32,"n":262144,"p":1,"r":8,"salt":"df49247875627f0251dead386f6c7842a6cfc9a610f6f6fd5402dbee93007498"},"mac":"8ba8f25c756b2268fda1695785e0ba367f26fc5449485a53a0dd60ae7e2f3a83"}} -------------------------------------------------------------------------------- /inabox/secrets/bls_keys/keys/17.bls.key.json: -------------------------------------------------------------------------------- 1 | {"pubKey":"E([3292787205237787786404181949764862423868540994315986995739065457522354359450,5705885397989773263704230122447348805954131884083482715712697241126273466490])","crypto":{"cipher":"aes-128-ctr","ciphertext":"c936991848341be8314affb469192f323ba04cb5c263e4d5f7d95b90f2ad86ef","cipherparams":{"iv":"ee0dcc334827792482a9a631e94c340b"},"kdf":"scrypt","kdfparams":{"dklen":32,"n":262144,"p":1,"r":8,"salt":"8a4665a2600c7ea2d763618ecda82920e8e84e0995cbc85e1f1374e34ec0fa77"},"mac":"09b781fcc420bc6d44816ee62452ec993b44028e113194349d69b438b20f73d6"}} -------------------------------------------------------------------------------- /inabox/secrets/bls_keys/keys/18.bls.key.json: -------------------------------------------------------------------------------- 1 | {"pubKey":"E([17662341945116438437372260978705417746694081322033088584589556765447179368866,11499377907443342629295584958700515883694730608180219279391253015189625425210])","crypto":{"cipher":"aes-128-ctr","ciphertext":"bf687ede9c2cd36f853271a0bac32b273c550859922fab6974d8b3b159778da9","cipherparams":{"iv":"0006f3e99a935cb07e3a81bacc8286bf"},"kdf":"scrypt","kdfparams":{"dklen":32,"n":262144,"p":1,"r":8,"salt":"ae6e04af34321d8cdf9e8fed9f5ef8f15d09be40def1e4bb35b629dcc3a2f724"},"mac":"6e42154ebd4b1378ef96860e70a5e3a2c6a9ca1e5af670a113d41063343f7cdd"}} -------------------------------------------------------------------------------- /inabox/secrets/bls_keys/keys/19.bls.key.json: -------------------------------------------------------------------------------- 1 | {"pubKey":"E([6468037626967245517319378401142610731388673156871748053341480709801747198875,5417212409640004026554663172732175455404352775439714083798919870258332316627])","crypto":{"cipher":"aes-128-ctr","ciphertext":"97a59c1f90f15117656c2765f4f3fd92c2a8a0f0e632dc0ca5b9ffcf7158018f","cipherparams":{"iv":"61eb077fc0c2c1874f3a209147e3f909"},"kdf":"scrypt","kdfparams":{"dklen":32,"n":262144,"p":1,"r":8,"salt":"240b6ce6bb4dbd112bcb6bfe2f00a5ad001ae3652cfa3833dc0bc69b988175b1"},"mac":"a7428c8c0a1cf67a2c6a285b43c3df0bc588488b0984f4f2a0a1e147906a1a05"}} -------------------------------------------------------------------------------- /inabox/secrets/bls_keys/keys/2.bls.key.json: -------------------------------------------------------------------------------- 1 | {"pubKey":"E([1611472477336575391907540595283981736749839435478357492584206660415845982634,17740534282163859696734712865013083642718796435843138137894885755851743300823])","crypto":{"cipher":"aes-128-ctr","ciphertext":"d6dd67cddc77447c63b3bba2a1ffb115af151a31c3a9811b40b7b3b965799402","cipherparams":{"iv":"bf935b67d026db7f0502a46b8e35bddd"},"kdf":"scrypt","kdfparams":{"dklen":32,"n":262144,"p":1,"r":8,"salt":"85c1c9b32e1182b5d769cce7005b00f5c64eec2537636e8b2a3d125083bc8ef6"},"mac":"b398381ce566074af656237d71be1551254f8824221690b59dd9bcdbcb409055"}} -------------------------------------------------------------------------------- /inabox/secrets/bls_keys/keys/20.bls.key.json: -------------------------------------------------------------------------------- 1 | {"pubKey":"E([5321928503098549071144871780170782893592499614062793259604054757590399860255,8401170400834122764849845076483272340954616640180545821685966380462394304641])","crypto":{"cipher":"aes-128-ctr","ciphertext":"603ec876ee064a46d1f5e1b67a297664ee20bb130c83a9eb4cf7781c3ab7ca34","cipherparams":{"iv":"a0d426740d346eb75eabcd29bf0b110e"},"kdf":"scrypt","kdfparams":{"dklen":32,"n":262144,"p":1,"r":8,"salt":"1dcdac3ad07e3eb7985de1e15b50ee2ba5b98bca5782ee034fd78d6ccdec822f"},"mac":"18f044948e944a81dede03a283588383fed744025bfcaf22e5267f05f7174d3d"}} -------------------------------------------------------------------------------- /inabox/secrets/bls_keys/keys/21.bls.key.json: -------------------------------------------------------------------------------- 1 | {"pubKey":"E([3524922105389497027532498842087977614646368645154131179932294105973095821043,5962939692567729054218075115988509248001064588529118334928421836165015323343])","crypto":{"cipher":"aes-128-ctr","ciphertext":"972918725dc6cca265640b363c14197b4a29e344d88e419d6f11ebb94bf84daa","cipherparams":{"iv":"de12b4c4afa4c1a98f103fd82e852206"},"kdf":"scrypt","kdfparams":{"dklen":32,"n":262144,"p":1,"r":8,"salt":"18a697569c0dbe48ab559047a0550a7923c38d548647c37abd69597e7069bd02"},"mac":"b0afbd653a1a0f9ef7dce7daee3a08a79831dbe219723999600d01161d7cf01f"}} -------------------------------------------------------------------------------- /inabox/secrets/bls_keys/keys/22.bls.key.json: -------------------------------------------------------------------------------- 1 | {"pubKey":"E([11471892416773457407091068942788497959257224091607815828153304296045519114880,14140073466323338932172175861726747362569681611532276660372516139806264668876])","crypto":{"cipher":"aes-128-ctr","ciphertext":"e1e49f792ff58c5a0cce973a3aad8c9e01773e72ffb0230320acf640869d9ee8","cipherparams":{"iv":"dc07986599284c8e29797a967ba84d63"},"kdf":"scrypt","kdfparams":{"dklen":32,"n":262144,"p":1,"r":8,"salt":"45200f81f74e5bbe900cd9564053287fecc41528a1e791468716bc38fcebf5b8"},"mac":"3298380e8a9eb8f17317fa033769a2644e917c7725d872194902b80e794de417"}} -------------------------------------------------------------------------------- /inabox/secrets/bls_keys/keys/23.bls.key.json: -------------------------------------------------------------------------------- 1 | {"pubKey":"E([8615396526982290483716822796719588690664151189844094144250101991232017031766,4068376951340680645482646101040130753787448653498753043705254185356387670245])","crypto":{"cipher":"aes-128-ctr","ciphertext":"725959e5b8edc442e634a4bfc313f0c4a1fa6ad330b74c4ec8b0efd560a67530","cipherparams":{"iv":"9d49d9b0f50108566514a9f9fca3bd6c"},"kdf":"scrypt","kdfparams":{"dklen":32,"n":262144,"p":1,"r":8,"salt":"2367b66a60d876906317a45d98d5190873d2ea8ef21b0b71c17570e18ffb4b6b"},"mac":"dea952abbd34f1ec026828c4b756c3ad881e93c9b2320cc85f634b4dc28c9d78"}} -------------------------------------------------------------------------------- /inabox/secrets/bls_keys/keys/24.bls.key.json: -------------------------------------------------------------------------------- 1 | {"pubKey":"E([7821807743331815964877297788616887822098209160179239882064957823554483982886,4561300339252835354522579034779040885322431581276553896860750987138688478123])","crypto":{"cipher":"aes-128-ctr","ciphertext":"ce06cc5a24f88e371a4542947bf8b0e32dcb522a87bf63f3d0ec044056cc577a","cipherparams":{"iv":"72cf7944231cb0a53d0cdd47be88fd8c"},"kdf":"scrypt","kdfparams":{"dklen":32,"n":262144,"p":1,"r":8,"salt":"bb8ab267a4e7a63d833319d4589b9cdfba2d15d5a4ef1df93affaeb2ee94520d"},"mac":"5afdebb7343c12c59fb3f912da40a7eb63fac3bfda2e3aea9b517ec3be4d1c58"}} -------------------------------------------------------------------------------- /inabox/secrets/bls_keys/keys/25.bls.key.json: -------------------------------------------------------------------------------- 1 | {"pubKey":"E([17457351878230120628732659494308320329195458083282464989581298203528036820947,18108457133599756998482128651546146875085258076477544622327461656239151731258])","crypto":{"cipher":"aes-128-ctr","ciphertext":"6c4fb68804bde73c0476ca57fb0be4b8b0bac72a622e9e26e0a92aa0d6dda3e8","cipherparams":{"iv":"32dbe657774ef412844f1d617cdca8d5"},"kdf":"scrypt","kdfparams":{"dklen":32,"n":262144,"p":1,"r":8,"salt":"d9e64773d5ee16eb8bf0d4838a3c4390876367caa6405e2e7c63e35a40963e7b"},"mac":"8a145ef9a32fc197cd65701a6888f2c793e240da495f2a251e4e37c8b61df209"}} -------------------------------------------------------------------------------- /inabox/secrets/bls_keys/keys/26.bls.key.json: -------------------------------------------------------------------------------- 1 | {"pubKey":"E([19158831748122645944593644394503545678618290934954617492699067769981756358210,12560741521317272139746886807177768918742277656703145905491815814034284961092])","crypto":{"cipher":"aes-128-ctr","ciphertext":"8c53fcf13ad0d68089027e52b1140c4fe80c4033b8ae1b81efef160670abe2a2","cipherparams":{"iv":"255ade353730bb457bc69c0b9de9ff67"},"kdf":"scrypt","kdfparams":{"dklen":32,"n":262144,"p":1,"r":8,"salt":"badfca9870f3794ba15ad2c692db0b9dbf4ac156c398957909ab1731c9303523"},"mac":"397286905251c9fe2ad5b29d41b69064e1da3f25a7dcf6d4ef7b7da01b5ddd05"}} -------------------------------------------------------------------------------- /inabox/secrets/bls_keys/keys/27.bls.key.json: -------------------------------------------------------------------------------- 1 | {"pubKey":"E([12136157236363643616142116383032860405815745886037271489416898913863972661989,4779075748177536006328755206808714968524308027798850811421334467066317716242])","crypto":{"cipher":"aes-128-ctr","ciphertext":"b9c33a59f7ce47eff6295574174d3ad798db82be6a0acd007f5376271d5e3f77","cipherparams":{"iv":"7dbadd8f3705d37a6db480bf60894ed3"},"kdf":"scrypt","kdfparams":{"dklen":32,"n":262144,"p":1,"r":8,"salt":"6b34d0a44b7e2ebdf40385f0d3fd1d571adf50706e4fdab4e77238f1fc47e7a2"},"mac":"1c3fcee997e64965a36fa5fb19182ace68af0a9b6bc28fdc0465515012059eb9"}} -------------------------------------------------------------------------------- /inabox/secrets/bls_keys/keys/28.bls.key.json: -------------------------------------------------------------------------------- 1 | {"pubKey":"E([18980855470778741648710005752467139596946957760626274292252653515019813706269,17540213314418470343529136421950389518297135810471497466972135437287199160701])","crypto":{"cipher":"aes-128-ctr","ciphertext":"edf353fccf65772395df040ed1be820c16a09d4534aac352a59845e7d0ff96ff","cipherparams":{"iv":"41cd295548fbb62b20bee78b552402ac"},"kdf":"scrypt","kdfparams":{"dklen":32,"n":262144,"p":1,"r":8,"salt":"5217d2fcff7d73997c0d306d13ca0b3104a2bf454de5e7df13219b18b158ec16"},"mac":"2f4ed657738db37db81f03e7167c8a6a653ea3264e6e1d82fa532ac29951220f"}} -------------------------------------------------------------------------------- /inabox/secrets/bls_keys/keys/29.bls.key.json: -------------------------------------------------------------------------------- 1 | {"pubKey":"E([5911644245449547299959042957521482342513620478013021875557255460485422202816,18110982877430979422646478522923686996918866416323459490119359474448467138017])","crypto":{"cipher":"aes-128-ctr","ciphertext":"375ea29f42f01ab2cbb5bdca5b90492d2bd579bdc46669dc1f3877c3aea1cb26","cipherparams":{"iv":"ea29b6eb28197b9ea65dbdeec19e2cde"},"kdf":"scrypt","kdfparams":{"dklen":32,"n":262144,"p":1,"r":8,"salt":"fdf68e1dfdbfaeabe3371aa19690802a9f6412d7da20c57e2cf8a4fb27302a2d"},"mac":"1ecfba7f53f246b8b17b67c9789de2f220cd592f425bafff8b768026ecec6570"}} -------------------------------------------------------------------------------- /inabox/secrets/bls_keys/keys/3.bls.key.json: -------------------------------------------------------------------------------- 1 | {"pubKey":"E([3336192159512049190945679273141887248666932624338963482128432381981287252980,15195175002875833468883745675063986308012687914999552116603423331534089122704])","crypto":{"cipher":"aes-128-ctr","ciphertext":"c7fc50d7cd8e324f8e27d4f14991dc821b6552496c5c0330506d239bd11f5fca","cipherparams":{"iv":"e9a0897abbd105b322ecaecee5acb344"},"kdf":"scrypt","kdfparams":{"dklen":32,"n":262144,"p":1,"r":8,"salt":"1bb93fdaef6fe17cb50d1d7963f27efa025e09390b4718e56f51479b85937d78"},"mac":"4c28491d98ee0181d99277f011c2a396dbd29d8b6461fb3d802a0ba4317955ba"}} -------------------------------------------------------------------------------- /inabox/secrets/bls_keys/keys/30.bls.key.json: -------------------------------------------------------------------------------- 1 | {"pubKey":"E([2720044833204188395624694657686773550091618426264251159690669884716975954779,19604939037818477735018594599099942177900991174118281554694461044141050953005])","crypto":{"cipher":"aes-128-ctr","ciphertext":"a8b63b485a261c727bb0c02dcd54ec543fe13c92d825ba45d4f06f61c9f9ec65","cipherparams":{"iv":"5bdd7645eac1c78dff5162abebe061ce"},"kdf":"scrypt","kdfparams":{"dklen":32,"n":262144,"p":1,"r":8,"salt":"d7c950442da39cb5eb3d18316eee07adf43b86aef0773f40ba6b9cfb776796b2"},"mac":"4c9b875046ceca809efda96370fb34dfab0f3f57804d4d10d9808afff84bbf02"}} -------------------------------------------------------------------------------- /inabox/secrets/bls_keys/keys/31.bls.key.json: -------------------------------------------------------------------------------- 1 | {"pubKey":"E([18022940499431174446329667667911375299162137368251831572661025609212615967435,7261497491102091953736260388560598706619812982761347484816839293190798006190])","crypto":{"cipher":"aes-128-ctr","ciphertext":"e2c2efbb1e4db8c880fc4e85f858259e8b24ae4161c38dd26632baf608c27d35","cipherparams":{"iv":"c8a37180f3ee3c547a11c8216a69c767"},"kdf":"scrypt","kdfparams":{"dklen":32,"n":262144,"p":1,"r":8,"salt":"2cc181134ebe4340230ba84984b56530ed3294067714bd2b0b1a5d7f96da437c"},"mac":"a4ee1b3636837c4354640b99363e661ec9d89d9984961b301efd661103583eff"}} -------------------------------------------------------------------------------- /inabox/secrets/bls_keys/keys/32.bls.key.json: -------------------------------------------------------------------------------- 1 | {"pubKey":"E([8060345189150686086757712455644277851592796326949026610511653927255572899664,15493352568303228031174308449620003073974090709310364781561275376160658199815])","crypto":{"cipher":"aes-128-ctr","ciphertext":"1c0c0a5d790a336c0ae8673afea54f7fb02647ac95d69dcd447b69f209c1d94d","cipherparams":{"iv":"11f81079a7fcd19494216dd685cee34d"},"kdf":"scrypt","kdfparams":{"dklen":32,"n":262144,"p":1,"r":8,"salt":"59b8276ffda34cae621ba55c88487e8056420fd0e898f1b89b2baeaf4e713f00"},"mac":"7c01e113f56ffdc8aed039580536b186960d034b4b0c78e2d4956cfaf318697d"}} -------------------------------------------------------------------------------- /inabox/secrets/bls_keys/keys/4.bls.key.json: -------------------------------------------------------------------------------- 1 | {"pubKey":"E([5461183145235095536185921866819931413759917396672055080092869234016663469138,20442419532030122204650237288303516480860317711313899660505680678599256877121])","crypto":{"cipher":"aes-128-ctr","ciphertext":"b79e6d2c40b086f03e869709fb5c7d171fde848c0aa979e3aa88606143970c9c","cipherparams":{"iv":"603d9100d76a7aeae988b708f9c0f36a"},"kdf":"scrypt","kdfparams":{"dklen":32,"n":262144,"p":1,"r":8,"salt":"52f88a7f27b638341604c88a769d2c3f2b72817b41321625ac56e5cfc7c21ba8"},"mac":"cce3ec704533aa41cfe2a43899d91edc3c12f2d77010a4b03209c4788210a3aa"}} -------------------------------------------------------------------------------- /inabox/secrets/bls_keys/keys/5.bls.key.json: -------------------------------------------------------------------------------- 1 | {"pubKey":"E([12634190904373954099752375119048571088990104805633586004685592779380787618974,10807246208937483335882723488636120559144850639059326860720519447026541499868])","crypto":{"cipher":"aes-128-ctr","ciphertext":"46d94a18493f8caee43c1506edcf819a44d9ff0e7dfe61d570a1f1d91961d46c","cipherparams":{"iv":"4d514574517a07bbee24c4e853248333"},"kdf":"scrypt","kdfparams":{"dklen":32,"n":262144,"p":1,"r":8,"salt":"85cce755c421ca53c10ad464a10039b388f45f51498dc05aa3f319045c9ee21c"},"mac":"6a17e859c67ef884fea9a2926a5d5327e8f7005b7996a5225c91677bcf0c0285"}} -------------------------------------------------------------------------------- /inabox/secrets/bls_keys/keys/6.bls.key.json: -------------------------------------------------------------------------------- 1 | {"pubKey":"E([998825606277355757420316283675673966461252242163581460241088847131404357665,14143186989268053039151094265450088754922200128802663655609357967257532908268])","crypto":{"cipher":"aes-128-ctr","ciphertext":"6a5db6036795127ea2a641ea90d18e80d26dd63d276b8618633980aba2546fcb","cipherparams":{"iv":"235de1df43f4d852d86acbb4705d5e1a"},"kdf":"scrypt","kdfparams":{"dklen":32,"n":262144,"p":1,"r":8,"salt":"99af46b2bc7e49acb6d13662468ea0cf1193a75df07799a4e56b51af1980652c"},"mac":"beec633e6a8dc9086f80dc1ab6c510199d9ac9bafbdd6e5d7f20a2012ff5c379"}} -------------------------------------------------------------------------------- /inabox/secrets/bls_keys/keys/7.bls.key.json: -------------------------------------------------------------------------------- 1 | {"pubKey":"E([10121256457265938196706067601404064832627252560034336421499695400642545254801,11674275106027330324731802358520890306350968322254870970449761074002347263215])","crypto":{"cipher":"aes-128-ctr","ciphertext":"184d2358c38d97cb2d061f56f2cd84d7160c8846ae9711ebea2f9ce2e232f20f","cipherparams":{"iv":"525f365bc630356fe31c919b799c368f"},"kdf":"scrypt","kdfparams":{"dklen":32,"n":262144,"p":1,"r":8,"salt":"951f54be5c52a9c75d7d498bad5eef96a911e89faa1743e6a1ec5784ae46bb87"},"mac":"9ce78192fac9f85541561d338d62aaefc7046306c721fba3c843edeb2c9af06b"}} -------------------------------------------------------------------------------- /inabox/secrets/bls_keys/keys/8.bls.key.json: -------------------------------------------------------------------------------- 1 | {"pubKey":"E([14426781743224558418735683552171722414505149113035076242158568262547142570240,21016114064160213955277812867535917602079212232975414551749771881432738089623])","crypto":{"cipher":"aes-128-ctr","ciphertext":"762ebff4726599abe39cf96fa7bd3339d5ad8ac23f7192d1eaa702b9a4a08181","cipherparams":{"iv":"c226ebc79d8f643d5274af1d9b3d6d4f"},"kdf":"scrypt","kdfparams":{"dklen":32,"n":262144,"p":1,"r":8,"salt":"2e881774c0f6130f5eb799fe59734c0a705b8f814561e0e998a9ec6f673aab10"},"mac":"0059b637d8ecef60b101cd7676c725084e1beefcf83b9fc523d39737cf518f9a"}} -------------------------------------------------------------------------------- /inabox/secrets/bls_keys/keys/9.bls.key.json: -------------------------------------------------------------------------------- 1 | {"pubKey":"E([15024754042811110095159400258551582491803596155580374188962567421363036126618,12539083378736512837240993976596344871120568508209823835620515871494903252733])","crypto":{"cipher":"aes-128-ctr","ciphertext":"370de40015c0833e75bb9a34b23b66ccd1bb91eb3e120590780ab5980623ef29","cipherparams":{"iv":"de728af3349faf4205c06f402201dad2"},"kdf":"scrypt","kdfparams":{"dklen":32,"n":262144,"p":1,"r":8,"salt":"72a1e5209ccc0007c2c36b37197870b9420d6280155e68f605829ab390dca456"},"mac":"51fb19e1cbac91e456c1cb04be807192ed6d5f562caba98d62131ed94daead05"}} -------------------------------------------------------------------------------- /inabox/secrets/bls_keys/password.txt: -------------------------------------------------------------------------------- 1 | fDUMDLmBROwlzzPXyIcy 2 | 2EVEUyHCrHZdfdo8lp29 3 | k1ZxvbBylq0lscHnrrJy 4 | gf3ypq0bqyI62VyAQU4G 5 | Y76UPXxemfxjNPyEFrFS 6 | NseVMocfivFVP887Wqy0 7 | aUhenVkkwPZhX7WPVYrl 8 | 5p5ZHom4QfpCRLy8p0yf 9 | rBolCI7PcAeZjGIXvdBJ 10 | LOlpjZ21cvsH4fr25SWM 11 | pdLIK4CE3HUK4h0I8ppw 12 | wjCGHTWSQmFNvXC9p5uS 13 | 9RaW4fbzNqW2HUIuAHXg 14 | Li85M8y9lMx8p5wpnT5d 15 | FvgdTzbLfw9UpEskGSCY 16 | WbTNo4QDNyl42vGe0U6i 17 | QL3MY48hv4lFpvHlcXJ3 18 | jUuT6HSJI8g7BGPSYLIP 19 | hBdbpU13NpQitWT1IVFN 20 | qlaraP4l2Q1Hy53t9UxZ 21 | ikZZHQiIofHMfazoCO3b 22 | hjc3PMR6crv19WJpaK57 23 | aGbugQk1TY0Nza3Jmauh 24 | lG2EBdFfy7uF6wvyzNiu 25 | aC3fLJWEtZrb42vcVsiu 26 | rF6YJd3ao839dpoB3tIc 27 | Mt078Gxmuey71WrNIHN2 28 | 4qLJQXwDzONo1BqZyhYf 29 | 4gZkXVPO9EhnrMrsKCOA 30 | WD7sPzlZT9eWkvkFUMBh 31 | kwsX9141JLqzgwOO7cmq 32 | LQtA5PcUBPr7Tom8U0Zo -------------------------------------------------------------------------------- /inabox/secrets/ecdsa_keys/keys/1.ecdsa.key.json: -------------------------------------------------------------------------------- 1 | {"address":"d5a0359da7b310917d7760385516b2426e86ab7f","crypto":{"cipher":"aes-128-ctr","ciphertext":"91a55f690a65c9b352a24783d1db851a7b2f826763ff979a877bb78ae63860eb","cipherparams":{"iv":"313c5db87ccef736f2844c218b0728c2"},"kdf":"scrypt","kdfparams":{"dklen":32,"n":262144,"p":1,"r":8,"salt":"64e28acc8270b64aa22fb6554a694657face2887ceb6cc209c607db11c4338d7"},"mac":"9087dd2b17322a7237505b368eac0462dd8c87637516cd80740fafe7d2f3ae5b"},"id":"96c2a806-cd73-4e95-8d65-e0933a3e7e1c","version":3} -------------------------------------------------------------------------------- /inabox/secrets/ecdsa_keys/keys/10.ecdsa.key.json: -------------------------------------------------------------------------------- 1 | {"address":"0b3cf18fa9043390da5c47cf814e0d7cfc468587","crypto":{"cipher":"aes-128-ctr","ciphertext":"7ffe84722472a26a794f883d089f5d4bdcfaf737f85928739f2350a3510b08db","cipherparams":{"iv":"40644a2d5835fe1a6ba71525534079a7"},"kdf":"scrypt","kdfparams":{"dklen":32,"n":262144,"p":1,"r":8,"salt":"26628be475a91c93fc530e59a05b8fe3b5e07f53a7ed3ac1216df78808a72070"},"mac":"faa8736c9650e74528ec35bb1cf888c3c2b20bb50895b55da117e7e42dbb59a7"},"id":"95b573bb-16ee-4872-a043-cd56828a5ded","version":3} -------------------------------------------------------------------------------- /inabox/secrets/ecdsa_keys/keys/11.ecdsa.key.json: -------------------------------------------------------------------------------- 1 | {"address":"59100e7fc2facd855194096086c4bf0ffb3d50e8","crypto":{"cipher":"aes-128-ctr","ciphertext":"ab407cb1e8555776b01b615f366a80ae9108078d4fad8caea5ce6a481944e269","cipherparams":{"iv":"d2c199c312b3cb140c7533c0a95c61f7"},"kdf":"scrypt","kdfparams":{"dklen":32,"n":262144,"p":1,"r":8,"salt":"b73e5791defd7dbd2931d085b2afaeeb3e93e7323bc306fc4df8d8085941b370"},"mac":"f39dedacf980c4fbd7ab5956278ad85e16a5083961f339f3d8568dbd8e3985aa"},"id":"c68b594a-b999-465a-8680-54610bc9fbdd","version":3} -------------------------------------------------------------------------------- /inabox/secrets/ecdsa_keys/keys/12.ecdsa.key.json: -------------------------------------------------------------------------------- 1 | {"address":"642d1008e558cc11e33ec94f13f12d893682b338","crypto":{"cipher":"aes-128-ctr","ciphertext":"69d6f09dfa40c0f60892a743db9d3e8609eb84c9d5faca1e94bcc487cd8d2946","cipherparams":{"iv":"bcee7119fec80e94b7fcbcfea0b4d41a"},"kdf":"scrypt","kdfparams":{"dklen":32,"n":262144,"p":1,"r":8,"salt":"c5bf0fcd5d8a1cde76c539ca5f0c4d2a8fc997b22b81eccbe4ee07fb73fa615e"},"mac":"5bb3e4e511d55bf5d8b8e9b393e8a88596994adaef3bd74c8a1851af489262b4"},"id":"70a11e80-847d-4076-9438-8a9200f6cc29","version":3} -------------------------------------------------------------------------------- /inabox/secrets/ecdsa_keys/keys/13.ecdsa.key.json: -------------------------------------------------------------------------------- 1 | {"address":"3dbbe0ea7814e42269d049e7e41fba069e1bf336","crypto":{"cipher":"aes-128-ctr","ciphertext":"66e0dc0fa30888ff51e8ad01ef5c1c6a7b84aac7d494db563bf251e5e2c85007","cipherparams":{"iv":"fe7269b215c984d2d31cf0d2c5336e6b"},"kdf":"scrypt","kdfparams":{"dklen":32,"n":262144,"p":1,"r":8,"salt":"c999910020707a10242049558cd046b55f23b16099673eb53743bbc7cfe2e81b"},"mac":"e2f05655790395a679013041b6f0302866449161a0e34072e9181df33cfefb87"},"id":"2eb4c107-8408-452f-a5db-b9a3c8907f64","version":3} -------------------------------------------------------------------------------- /inabox/secrets/ecdsa_keys/keys/14.ecdsa.key.json: -------------------------------------------------------------------------------- 1 | {"address":"5ed64a0bafa9d11c4284abf24cb3d441fc1d7398","crypto":{"cipher":"aes-128-ctr","ciphertext":"2fa2c023f707639d249c42ab25f85b71c8ce75e8e0cd2a592150f4a2f3419065","cipherparams":{"iv":"8747d27a09a8028a48320bbc84b84756"},"kdf":"scrypt","kdfparams":{"dklen":32,"n":262144,"p":1,"r":8,"salt":"14b15c78ff7286765e9bd2c7bc1e79e10d705d114c5affc9ecf90ef7f7a814b5"},"mac":"4a1f8dc8c6373394298a499f92f520b4400312e7737160534952844e220c1ccb"},"id":"1c8d5d68-91dc-4b45-8b32-f597cadf041b","version":3} -------------------------------------------------------------------------------- /inabox/secrets/ecdsa_keys/keys/15.ecdsa.key.json: -------------------------------------------------------------------------------- 1 | {"address":"ec8cec1d7dc14aa0bd2d93f328e672f50e72e234","crypto":{"cipher":"aes-128-ctr","ciphertext":"87ec639d189ca110ad05c92ed5ae4b78d8c2df51c7a16e5d20b03ac906878019","cipherparams":{"iv":"c774a26cb597ce4d7511e3ae16979f56"},"kdf":"scrypt","kdfparams":{"dklen":32,"n":262144,"p":1,"r":8,"salt":"bc2203a28931c6e5d41aa0b3e97df1d29a1136f1aa54423afcfbbc49c209aa89"},"mac":"1e460861664b5bb8f040f7ba6eff98bfae743203a38041676ff44c1ab9ff95b1"},"id":"8e754f2b-dde9-46d5-9470-cb3cb639e541","version":3} -------------------------------------------------------------------------------- /inabox/secrets/ecdsa_keys/keys/16.ecdsa.key.json: -------------------------------------------------------------------------------- 1 | {"address":"0e25cbd0de92f5686c815a360d0d223e4e376f8d","crypto":{"cipher":"aes-128-ctr","ciphertext":"6173f9067d8b4077cfaf3b233d7671b254ee24a0b720e84a0a687bbf93c7e852","cipherparams":{"iv":"ce0287cc5eda247292b4c4a29370d563"},"kdf":"scrypt","kdfparams":{"dklen":32,"n":262144,"p":1,"r":8,"salt":"29f6d63e5fc598700888de697b12c6fb0c4bf2093f339df88bde56db7a52abfe"},"mac":"18713f079cb422eb9a2be4e8e8eecf3f12a1ffa967b539866caa8932e4ecbe20"},"id":"e8f45765-9982-4583-9e9a-bdf68311a8c5","version":3} -------------------------------------------------------------------------------- /inabox/secrets/ecdsa_keys/keys/17.ecdsa.key.json: -------------------------------------------------------------------------------- 1 | {"address":"d11214af99a3eb6163d4bf0a379af52e63308560","crypto":{"cipher":"aes-128-ctr","ciphertext":"7d31e416abeded6c30363d03e6b7bf420db9481b057824b6e7109e0653fb01e7","cipherparams":{"iv":"774784b58f450834836411d2f61310c2"},"kdf":"scrypt","kdfparams":{"dklen":32,"n":262144,"p":1,"r":8,"salt":"2aac5975ed2cccc2b9912f7372a67d1824fe5411d1642c848c8e22b50b327d50"},"mac":"0c329739a306493d6c09c502e0708beca0df979afe1ab2fc3c43c8a681316ca0"},"id":"6cb0bc83-d1b7-41df-8557-effada7899f6","version":3} -------------------------------------------------------------------------------- /inabox/secrets/ecdsa_keys/keys/18.ecdsa.key.json: -------------------------------------------------------------------------------- 1 | {"address":"8ebd37ac6af1b7e414e26b30a3b7ece43aaf8941","crypto":{"cipher":"aes-128-ctr","ciphertext":"5e90d08a131bd6a0d5dde116c9aa1b083052eaa3d3b5adb8b031516f931c328b","cipherparams":{"iv":"3bc28bb9df18c70acedfdb7ced98c218"},"kdf":"scrypt","kdfparams":{"dklen":32,"n":262144,"p":1,"r":8,"salt":"f46e3e829d8901eb2b89f1a9e7cba49963c70e9110f854893b8fa486f4eb0b8b"},"mac":"3855bb83623661a04b9bdf47ab4f9a4961ac59c72e02cdc0c3fe8b6dbfcdaf85"},"id":"c0d0575c-df49-4077-8c40-86a578edf838","version":3} -------------------------------------------------------------------------------- /inabox/secrets/ecdsa_keys/keys/19.ecdsa.key.json: -------------------------------------------------------------------------------- 1 | {"address":"c9bf2eda569bd5e809b1fa18c7101175d16e08e1","crypto":{"cipher":"aes-128-ctr","ciphertext":"2c48bd19474681953d1f4561d987aaad15bf4f6552a717fe3fe4d2fcb17ada4b","cipherparams":{"iv":"9dc2e48f2ca9157f24f7ec9fcdc46876"},"kdf":"scrypt","kdfparams":{"dklen":32,"n":262144,"p":1,"r":8,"salt":"25ff2e5450c5993fe27c752e0ff4e45a71a8fe2e8dd46326b6e8f37bbda85b9b"},"mac":"607e62c4eb3079f5aac590b83e5d22157581883ff94cae08057e8c5017c9ee49"},"id":"a3de72fe-3935-4d64-9ef0-f1dc179871f2","version":3} -------------------------------------------------------------------------------- /inabox/secrets/ecdsa_keys/keys/2.ecdsa.key.json: -------------------------------------------------------------------------------- 1 | {"address":"9441540e8183d416f2dc1901ab2034600f17b65a","crypto":{"cipher":"aes-128-ctr","ciphertext":"f5eb7776cb577b05ac7762177e447f15c1adcfab57a39f757f3e4b92af6f661b","cipherparams":{"iv":"2b41e5cbb0bc3ca4c380071831f00ae4"},"kdf":"scrypt","kdfparams":{"dklen":32,"n":262144,"p":1,"r":8,"salt":"e984d8a762013fd76e5a7c6df30de81a613899962a4c154f370259274b7e6b83"},"mac":"54b650442a628bdce4585d499f5bdf4e35c7cee81b90cdcbd89db4646f595aa2"},"id":"e8555893-d21a-48d7-98a6-06b7f07eba39","version":3} -------------------------------------------------------------------------------- /inabox/secrets/ecdsa_keys/keys/20.ecdsa.key.json: -------------------------------------------------------------------------------- 1 | {"address":"cbd9c4b0eafbf0f34443bf27c69fd5e68f773834","crypto":{"cipher":"aes-128-ctr","ciphertext":"1c8a5aa6c532adb3afc8bbc0644f52bb28f4c11a99c8067ba0e7eff2b3ec28c3","cipherparams":{"iv":"a3686a3ef4550acbc6e582a00627599f"},"kdf":"scrypt","kdfparams":{"dklen":32,"n":262144,"p":1,"r":8,"salt":"95cf8f6813618919ee93ed44e010888058a89733fb305db7bf0fcba591cc85be"},"mac":"ba8d2fb19084f27bd10e946120ef630cd6a2cadb8837f0315aaf87bed6e9e6b0"},"id":"439fe081-8737-434e-a9c1-2155923666d5","version":3} -------------------------------------------------------------------------------- /inabox/secrets/ecdsa_keys/keys/21.ecdsa.key.json: -------------------------------------------------------------------------------- 1 | {"address":"00895d817ac4d7a9c45fceadc9b7c6e113b2b461","crypto":{"cipher":"aes-128-ctr","ciphertext":"28f4ac8f746e037fd95ab732e7703bef21f013cafa78f1b44f8b3cf60b292bde","cipherparams":{"iv":"0f96d3cd4f09a67d8a6f3cba7e2f14aa"},"kdf":"scrypt","kdfparams":{"dklen":32,"n":262144,"p":1,"r":8,"salt":"88e56f59b89a4628ca90c12163a916880821f57a34c7922b3c900accaf292722"},"mac":"eb645d1304e0d10d155f320e1f2e8b3a3fe9b58bd84f812b31d6e16e37968e12"},"id":"843070b4-9c96-4dda-95d6-70dbc0f8aa15","version":3} -------------------------------------------------------------------------------- /inabox/secrets/ecdsa_keys/keys/22.ecdsa.key.json: -------------------------------------------------------------------------------- 1 | {"address":"7955072ec31a2ef8157e85428b5592986fdce55a","crypto":{"cipher":"aes-128-ctr","ciphertext":"2e881bd3feed3eb7fad3801b89cd64b2e0f76e93339355bb0ff6cc8154a76a17","cipherparams":{"iv":"0c0b3b59377b2bb3db9811c94045d90d"},"kdf":"scrypt","kdfparams":{"dklen":32,"n":262144,"p":1,"r":8,"salt":"73ea3b06e6c2d941566a09196caa17382975cdb9c8761eaa1ccc35a053414419"},"mac":"c32881fcfca0357e2b7913c3cd5256bb858fa73e8bb28b92a464137005ddffd6"},"id":"526e2557-7557-475a-9fde-b07cd63ec5a0","version":3} -------------------------------------------------------------------------------- /inabox/secrets/ecdsa_keys/keys/23.ecdsa.key.json: -------------------------------------------------------------------------------- 1 | {"address":"4452be9e000e4fcd0a24eed063f9f0b6da5d27a8","crypto":{"cipher":"aes-128-ctr","ciphertext":"23945a98b0639971143af18cf55a3019c4d1916c57643f84afc2d8ed3866d585","cipherparams":{"iv":"258dec0769d9a8853698e8dfd59faa30"},"kdf":"scrypt","kdfparams":{"dklen":32,"n":262144,"p":1,"r":8,"salt":"db3c9cc7800afce6d865ce1a26bf243942f1f4ae0d87ec5b94635ec9044e41f5"},"mac":"033ce65e62cc5f074ca9673234b38ceb5ffde4fd5bcad8f5d9a18070d4c0ba98"},"id":"3b8aca37-ac9f-4360-a523-f5d195d5d283","version":3} -------------------------------------------------------------------------------- /inabox/secrets/ecdsa_keys/keys/24.ecdsa.key.json: -------------------------------------------------------------------------------- 1 | {"address":"d1a22e0c13bdc584c5e5bd18a064c3dd89a4b28b","crypto":{"cipher":"aes-128-ctr","ciphertext":"19a2b7d8700436c319e436d0b6782b56bb27378a828e72c3c457babe8f8ac991","cipherparams":{"iv":"d3ede0a4d3a66dbe367a2d3325071abe"},"kdf":"scrypt","kdfparams":{"dklen":32,"n":262144,"p":1,"r":8,"salt":"da95a06735056b9c8474dd8f77929d6f208fec44d123d7ec24cfb0b17c375be1"},"mac":"ab93c6aa8ad28d771a37eb1462a29616fd9ce38f5c30af111d406a0388670098"},"id":"41569731-e3ab-4d27-a3f7-58246ddea0ef","version":3} -------------------------------------------------------------------------------- /inabox/secrets/ecdsa_keys/keys/25.ecdsa.key.json: -------------------------------------------------------------------------------- 1 | {"address":"352cf6e408aced515a958c7e9829fefed8892a15","crypto":{"cipher":"aes-128-ctr","ciphertext":"109fdcd8054f21cdb03e33f19653f26e461fd19328e01f3a81af23f85549ed09","cipherparams":{"iv":"3b44a3854d75f393a810e8b8c268a7a9"},"kdf":"scrypt","kdfparams":{"dklen":32,"n":262144,"p":1,"r":8,"salt":"7ee0329b68c18d8198bfae3f5e39dccf6e2713b7d1abc17a8a5d4beea5d3a5b0"},"mac":"a8f4a08659100ba516a272141f6c3fa037abb3406c8cdbf7abf43955d3d9d1da"},"id":"ae3988d0-ee5a-49e1-b65a-f9dd53c009a7","version":3} -------------------------------------------------------------------------------- /inabox/secrets/ecdsa_keys/keys/26.ecdsa.key.json: -------------------------------------------------------------------------------- 1 | {"address":"666ce65fd2fedd3fae22a1523b659b90afaebe4a","crypto":{"cipher":"aes-128-ctr","ciphertext":"7a90a996bd650f501a8efbb1165f3f332171dd85c29fbba93d2f339728cbca2a","cipherparams":{"iv":"3f2c2adcc43a7c5fd597dc155a8d264a"},"kdf":"scrypt","kdfparams":{"dklen":32,"n":262144,"p":1,"r":8,"salt":"52847fa5b580e0d71e99c28ae409860a1ce7d68f4a91fc085b6362a0c335bc7c"},"mac":"3639637a15eab2722710a21cf59fcc9239e53ec1505c625c6ee9edafe534756d"},"id":"405acb37-2593-49cc-9dda-61cc79e6aff6","version":3} -------------------------------------------------------------------------------- /inabox/secrets/ecdsa_keys/keys/27.ecdsa.key.json: -------------------------------------------------------------------------------- 1 | {"address":"eb73044f28ee22e9b27d7b4ed596e7d6a1ba6b8d","crypto":{"cipher":"aes-128-ctr","ciphertext":"cbd65cbe1077675195bc072cb52ee09ec04da7ee441b45cd0db7ed2c84f7e42e","cipherparams":{"iv":"9bd060575ba9e7fcd25e5b6318c4ade9"},"kdf":"scrypt","kdfparams":{"dklen":32,"n":262144,"p":1,"r":8,"salt":"b35f14064ea87d78a049baef4165548ed239f4eb712627875551d67f612783af"},"mac":"21387a7b018d78cb8462c210c0c724e04a17fb4248385041b2f44be2ded5af9e"},"id":"041f04c0-bb85-4b25-802c-6aee643996e1","version":3} -------------------------------------------------------------------------------- /inabox/secrets/ecdsa_keys/keys/28.ecdsa.key.json: -------------------------------------------------------------------------------- 1 | {"address":"a9b859bc8e665228602a35e26d6a59a4b8928b22","crypto":{"cipher":"aes-128-ctr","ciphertext":"80ee116be249473d8f4b7aadd22e4d4dff402157c3b8451f7eae7229dfdff1d0","cipherparams":{"iv":"9c1cef56fd49953d91cb466df95531f4"},"kdf":"scrypt","kdfparams":{"dklen":32,"n":262144,"p":1,"r":8,"salt":"aec293f9ef3c1bbb9423ec3c37a4bad519b194b4a2ac153846cdc46fa2a80b46"},"mac":"3e0b79e67ec62fde9848641f83f567012969fecb25ad874ef0721b1cefd8da8b"},"id":"9f10d9b0-18ee-459e-8e76-db89777a564e","version":3} -------------------------------------------------------------------------------- /inabox/secrets/ecdsa_keys/keys/29.ecdsa.key.json: -------------------------------------------------------------------------------- 1 | {"address":"ccf0d0066eb3eed53196774b5eac08a38c0c6e0e","crypto":{"cipher":"aes-128-ctr","ciphertext":"880e74371093d27eafbac57f737d24ef017d5ae4095390e6949d283190956735","cipherparams":{"iv":"0cc4e20e186ec48007b909155a1d35d8"},"kdf":"scrypt","kdfparams":{"dklen":32,"n":262144,"p":1,"r":8,"salt":"865afcc45b0b72af6f436c1d26dd55a2b120495d8558404186f4436ea26a839e"},"mac":"960f218168b69ac164fd2afc4b86df6fc57accc6b02e133ede26bab8b15d7083"},"id":"26fe64b3-8182-43dc-bae7-b89c48c4cf08","version":3} -------------------------------------------------------------------------------- /inabox/secrets/ecdsa_keys/keys/3.ecdsa.key.json: -------------------------------------------------------------------------------- 1 | {"address":"f270e0dd5a1cc34cda8fb991307604097e622002","crypto":{"cipher":"aes-128-ctr","ciphertext":"d382b45ad3a9b69fd5933a38d711996b5283bb0e6a71e6da09edeb6c4a23b069","cipherparams":{"iv":"cf764c9c72afcf5748131711f61c49d0"},"kdf":"scrypt","kdfparams":{"dklen":32,"n":262144,"p":1,"r":8,"salt":"bbdbccf9058c71c63cd251a9d975454ecdbd5f7795329954867a607512492b0d"},"mac":"3c16f6528a7812c2da48ff2d251e4c830875f5fcff6694a81b908cabdb809a7c"},"id":"05b7b538-57c6-489c-bf34-fe25409e7bf4","version":3} -------------------------------------------------------------------------------- /inabox/secrets/ecdsa_keys/keys/30.ecdsa.key.json: -------------------------------------------------------------------------------- 1 | {"address":"c45ea551caf9c7f203ecf44f6e6049dfe625ce67","crypto":{"cipher":"aes-128-ctr","ciphertext":"d1349feffa1a63fb99e2f6e00128ff033664f059a8d3a45efd425796e2e7bede","cipherparams":{"iv":"bcb00c71a916171f0ff7a71b8aa570d2"},"kdf":"scrypt","kdfparams":{"dklen":32,"n":262144,"p":1,"r":8,"salt":"0ee32c44235bf53b65550767a85519123ead6e1017f25f71b98702ce1536bb01"},"mac":"e0541f7772b952b314ce4e4087262e965a4d99ac74940da231054b7c572bab8b"},"id":"6e8c192d-3548-4a55-b5b1-2690ac5b7a64","version":3} -------------------------------------------------------------------------------- /inabox/secrets/ecdsa_keys/keys/31.ecdsa.key.json: -------------------------------------------------------------------------------- 1 | {"address":"2a49d0005a6bd2fe60c129d23b75727f1a038ead","crypto":{"cipher":"aes-128-ctr","ciphertext":"610db04fc54e78307fbed32dfb7be134234f0ab749257922939cc0da0fecf76d","cipherparams":{"iv":"7fc6ab696fe10ce0f6dc26a91555560d"},"kdf":"scrypt","kdfparams":{"dklen":32,"n":262144,"p":1,"r":8,"salt":"bf21a5cd96d6f5c9aa46b2a9ee182d70de8ab6da903c94bf9944c67e7eb6280d"},"mac":"6243abb184de084c33cd9ba88e72dbea8ee7f1776dc2fb485259f10ff2a9ed84"},"id":"5542e626-5695-495e-b499-86ad99e6afeb","version":3} -------------------------------------------------------------------------------- /inabox/secrets/ecdsa_keys/keys/32.ecdsa.key.json: -------------------------------------------------------------------------------- 1 | {"address":"7548db693b038db64b1e945ae2bc011f03d6edf1","crypto":{"cipher":"aes-128-ctr","ciphertext":"5cd910b740c8e30fbdc6c4dfe5fb5e9f0be22ea0aefcb905e114845bea3d2813","cipherparams":{"iv":"0e446ecc5cd4ccc0ec4eff086737db4e"},"kdf":"scrypt","kdfparams":{"dklen":32,"n":262144,"p":1,"r":8,"salt":"3233d60bec2eaeb7d717aab7b9194289e6811c633477b266b6d59c60d796fc99"},"mac":"280e4181516b9d776938c63e5d2e6bace059ddf4be3d680e177dcc1894dab76b"},"id":"e29eb110-3579-4090-ae50-e203544b9d0a","version":3} -------------------------------------------------------------------------------- /inabox/secrets/ecdsa_keys/keys/4.ecdsa.key.json: -------------------------------------------------------------------------------- 1 | {"address":"cab1b44dd1f1c265405878ac1179cd94d0dba634","crypto":{"cipher":"aes-128-ctr","ciphertext":"90677adad6b5bfd8308956b5a9af9215dfe4a4c9844472f152db936a5218bf8a","cipherparams":{"iv":"e4d7768d9eaeaced4789617f0d187fec"},"kdf":"scrypt","kdfparams":{"dklen":32,"n":262144,"p":1,"r":8,"salt":"f4a39322818f67d9ff783947956b9e81543a05ad437a467fa1606eb58e7c98cd"},"mac":"52c630d93bc550b4fc8902803d34b851df8be13e77ea74d796a5c0cd3a67f5f0"},"id":"0ebaea50-86d4-4973-aabf-949e88bb4c45","version":3} -------------------------------------------------------------------------------- /inabox/secrets/ecdsa_keys/keys/5.ecdsa.key.json: -------------------------------------------------------------------------------- 1 | {"address":"cebe05cd708f000177b12e8270dfc310d834f4cb","crypto":{"cipher":"aes-128-ctr","ciphertext":"1c74aca2a87723d366f93abbfb29c1eca0a49a8f9042a028d5178cc7880ab8ae","cipherparams":{"iv":"16d52a0111e02d000566314235884f5b"},"kdf":"scrypt","kdfparams":{"dklen":32,"n":262144,"p":1,"r":8,"salt":"40886cf6d8526ea5e678993cca65f877477fd0d65fee7e8d0dfa73a2c7662311"},"mac":"20aa05c60bfbc79279419b5e1f8de70c3304822026196c32526cfef9817fa9d6"},"id":"943f80c6-9dd8-496a-a5c4-fc5d41ee06b9","version":3} -------------------------------------------------------------------------------- /inabox/secrets/ecdsa_keys/keys/6.ecdsa.key.json: -------------------------------------------------------------------------------- 1 | {"address":"ad5824ed245e92ec3ec65ffd828f5de74529fba8","crypto":{"cipher":"aes-128-ctr","ciphertext":"3fa43553999d728dc36dba19ed6f072128140872bbad630ff89beb6cae00a2ac","cipherparams":{"iv":"5b23ef9a4bc487f64340a17bac19d7ca"},"kdf":"scrypt","kdfparams":{"dklen":32,"n":262144,"p":1,"r":8,"salt":"2e6491baf78fd9cda53e907b136d49860a3f948e8df88d4cef1bc0cac5aafe1b"},"mac":"2c65bb27ef294a5db4e12886802791cbc1630e1273022775d1111c06ffc1a81c"},"id":"0f72f179-2a4b-4cf9-89a0-a055e07d48a4","version":3} -------------------------------------------------------------------------------- /inabox/secrets/ecdsa_keys/keys/7.ecdsa.key.json: -------------------------------------------------------------------------------- 1 | {"address":"8ac5c23217164edcbb4ffc54a784961b7349d8db","crypto":{"cipher":"aes-128-ctr","ciphertext":"b0a1ac28c336f2865f6f8be58582db78a5f6915d01530f78aa9cfd2dc121d44d","cipherparams":{"iv":"2d148abd57b3ed1ec71b9c17c7360040"},"kdf":"scrypt","kdfparams":{"dklen":32,"n":262144,"p":1,"r":8,"salt":"86452cea6ceba3018ec0d0cf780c05e0b4b814cf468b182f718465a7a2e82da5"},"mac":"89d7e37cc7bfdd5bc70cf85efbb4fc2903e0190967b9b750bb484ed28bd13b53"},"id":"e1f714fd-9158-44cd-bdb3-83e4ca4bff98","version":3} -------------------------------------------------------------------------------- /inabox/secrets/ecdsa_keys/keys/8.ecdsa.key.json: -------------------------------------------------------------------------------- 1 | {"address":"b298731f7a058aa7f27edd28d5085f8096016077","crypto":{"cipher":"aes-128-ctr","ciphertext":"64981c9972ad936da07f9e859a136f9b1c5e249ba2e88544ad9bf959fb8f9527","cipherparams":{"iv":"f27eed3ef2c1d687965ee4a887b944ca"},"kdf":"scrypt","kdfparams":{"dklen":32,"n":262144,"p":1,"r":8,"salt":"2e389c33c50a0d62e2083126e3b3fbe9472c516baa30f7ab2c170fc35e7b93cf"},"mac":"f98c4c7d7a4f5d233ede509bb3afe964d63b87ab2f5ab348decf57bec56f9b8d"},"id":"6902db2c-90f0-4bb1-886f-c71fc7210e37","version":3} -------------------------------------------------------------------------------- /inabox/secrets/ecdsa_keys/keys/9.ecdsa.key.json: -------------------------------------------------------------------------------- 1 | {"address":"1ed94239dd059dbe628743dd541686095c37e7d4","crypto":{"cipher":"aes-128-ctr","ciphertext":"004dce42690816cf5ecc1b7e7b6fa4a46806d918c48e5690be2db7fefa7895dc","cipherparams":{"iv":"934d2da5ad004bf0fbdfdb32fa4c4e2e"},"kdf":"scrypt","kdfparams":{"dklen":32,"n":262144,"p":1,"r":8,"salt":"fa1fd7aaa8605012178434dffdb51f2edd7490e49036d92d902a22a819ed482d"},"mac":"20f2b6ca2c167e1fbebbbe909f800e4e7a3e47a293216249e421f0a66dd838be"},"id":"bac99176-38e1-4774-9d8f-ac2971442307","version":3} -------------------------------------------------------------------------------- /inabox/secrets/ecdsa_keys/password.txt: -------------------------------------------------------------------------------- 1 | EnJuncq01CiVk9UbuBYl 2 | isru1gvtykIavuk1Fg1Q 3 | 3bxTdXda0Kwvo8KC9GGT 4 | pdDHi8PvCZuH2NJSiXKw 5 | hiS6AIWRbXYLyJP7TNPn 6 | tqNhwY4gi9HLMAkMVe93 7 | mAdR3cbfAcMu9nhzuV6i 8 | xaP3cOWum2dWYfzmMVXt 9 | k8fPmH9iwahgmstfUaCH 10 | yFicmvGUUrjQiNdDnNkz 11 | stbGXMQzT3fSm0LPhNox 12 | ezgAw90wUeyjsQeY2jsa 13 | Vw38M8yiqZxUokTzU1Ob 14 | oHbsTP9Fkqu09oyWYhOM 15 | Ie7hUi42fNSTrXiXifcO 16 | ssRPp0RHbJlVEqa2eIJb 17 | 1WB8ZRC6WiwVEwS7qJkl 18 | LDUgvPjz25rXPcocM103 19 | 5zGZfbT3PYR6afkpecnl 20 | xMgH2uC67aazoly2RrN9 21 | syxghmpnjEQ5Z0a3s2qG 22 | AXxCFZ031Noesz0dUuIp 23 | BP9nFRp4j70tnJcVzt4O 24 | iJhtsSAswlaVMhrBglzT 25 | xmm0XMIuYKPYV6cBt2nG 26 | T7XrcsKkligq1hTzEZIN 27 | nTzhHKFaTtF2xU9W3Mi3 28 | yw1dkYY1tnLLSmB3rZMt 29 | iGWvjh9qvmJ6e1kTOxO9 30 | XfeDX2mVm8YAef0GHBPu 31 | G8Gtz530EOd5X6phMhZV 32 | hb7uCYAO6HI3r5ZsGRtx -------------------------------------------------------------------------------- /inabox/secrets/keys_for_200_operators.zip: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Layr-Labs/eigenda/9192afc4f1207c444d00fdf838cf90f87ee07b26/inabox/secrets/keys_for_200_operators.zip -------------------------------------------------------------------------------- /indexer/accumulator.go: -------------------------------------------------------------------------------- 1 | package indexer 2 | 3 | type AccumulatorObject interface { 4 | } 5 | 6 | type Accumulator interface { 7 | InitializeObject(header Header) (AccumulatorObject, error) 8 | 9 | UpdateObject(object AccumulatorObject, header *Header, event Event) (AccumulatorObject, error) 10 | 11 | // SerializeObject takes the accumulator object, and serializes it using the rules for the specified fork. 12 | SerializeObject(object AccumulatorObject, fork UpgradeFork) ([]byte, error) 13 | 14 | // DeserializeObject deserializes an accumulator object using the rules for the specified fork. 15 | DeserializeObject(data []byte, fork UpgradeFork) (AccumulatorObject, error) 16 | } 17 | -------------------------------------------------------------------------------- /indexer/cli.go: -------------------------------------------------------------------------------- 1 | package indexer 2 | 3 | import ( 4 | "time" 5 | 6 | "github.com/Layr-Labs/eigenda/common" 7 | "github.com/urfave/cli" 8 | ) 9 | 10 | const ( 11 | PullIntervalFlagName = "indexer-pull-interval" 12 | ) 13 | 14 | func CLIFlags(envPrefix string) []cli.Flag { 15 | return []cli.Flag{ 16 | cli.DurationFlag{ 17 | Name: PullIntervalFlagName, 18 | Usage: "Interval at which to pull and index new blocks and events from chain", 19 | Required: false, 20 | EnvVar: common.PrefixEnvVar(envPrefix, "INDEXER_PULL_INTERVAL"), 21 | Value: 1 * time.Second, 22 | }, 23 | } 24 | } 25 | 26 | func ReadIndexerConfig(ctx *cli.Context) Config { 27 | return Config{ 28 | PullInterval: ctx.GlobalDuration(PullIntervalFlagName), 29 | } 30 | } 31 | -------------------------------------------------------------------------------- /indexer/config.go: -------------------------------------------------------------------------------- 1 | package indexer 2 | 3 | import "time" 4 | 5 | type Config struct { 6 | PullInterval time.Duration 7 | } 8 | -------------------------------------------------------------------------------- /indexer/header_service.go: -------------------------------------------------------------------------------- 1 | package indexer 2 | 3 | // HeaderService 4 | type HeaderService interface { 5 | 6 | // GetHeaders returns a list of new headers since the indicated header. PullNewHeaders automatically handles batching and waiting for a specified period if it is already at head. PullNewHeaders sets the finalization status of the headers according to a finalization rule. 7 | PullNewHeaders(lastHeader *Header) (Headers, bool, error) 8 | 9 | // PullLatestHeader gets the latest header from the chain client 10 | PullLatestHeader(finalized bool) (*Header, error) 11 | } 12 | -------------------------------------------------------------------------------- /indexer/inmem/encoding.go: -------------------------------------------------------------------------------- 1 | package inmem 2 | 3 | import ( 4 | "bytes" 5 | "encoding/gob" 6 | ) 7 | 8 | func encode(v any) ([]byte, error) { 9 | buf := new(bytes.Buffer) 10 | enc := gob.NewEncoder(buf) 11 | if err := enc.Encode(v); err != nil { 12 | return nil, err 13 | } 14 | return buf.Bytes(), nil 15 | } 16 | 17 | func decode(data []byte, v any) error { 18 | dec := gob.NewDecoder(bytes.NewReader(data)) 19 | return dec.Decode(v) 20 | } 21 | -------------------------------------------------------------------------------- /indexer/leveldb/encoding.go: -------------------------------------------------------------------------------- 1 | package leveldb 2 | 3 | import ( 4 | "bytes" 5 | "encoding/gob" 6 | ) 7 | 8 | func encode(v any) ([]byte, error) { 9 | buf := new(bytes.Buffer) 10 | enc := gob.NewEncoder(buf) 11 | if err := enc.Encode(v); err != nil { 12 | return nil, err 13 | } 14 | return buf.Bytes(), nil 15 | } 16 | 17 | func decode(data []byte, v any) error { 18 | dec := gob.NewDecoder(bytes.NewReader(data)) 19 | return dec.Decode(v) 20 | } 21 | -------------------------------------------------------------------------------- /indexer/test/mock/chain.json: -------------------------------------------------------------------------------- 1 | 2 | { 3 | "chain":[ 4 | { 5 | "id":0, 6 | "fork":null 7 | }, 8 | { 9 | "id":1, 10 | "fork":null 11 | }, 12 | { 13 | "id":2, 14 | "fork":0 15 | }, 16 | { 17 | "id":3, 18 | "fork":null 19 | } 20 | ] 21 | } 22 | -------------------------------------------------------------------------------- /indexer/test/mock/contract_simulator_test.go: -------------------------------------------------------------------------------- 1 | package mock 2 | 3 | import ( 4 | "context" 5 | "testing" 6 | "time" 7 | 8 | "github.com/stretchr/testify/assert" 9 | ) 10 | 11 | func TestContractSimulator(t *testing.T) { 12 | t.Skip("Skipping this test after the simulated backend upgrade broke this test. Enable it after fixing the issue.") 13 | sc := MustNewContractSimulator() 14 | ctx, cancel := context.WithCancel(context.Background()) 15 | sc.Start(time.Millisecond, cancel) 16 | 17 | <-ctx.Done() 18 | 19 | events, err := sc.DepositEvents() 20 | assert.Nil(t, err) 21 | assert.Equal(t, 3, len(events)) 22 | assert.Equal(t, events[0].Wad.Int64(), int64(1)) 23 | assert.Equal(t, events[1].Wad.Int64(), int64(3)) 24 | assert.Equal(t, events[2].Wad.Int64(), int64(4)) 25 | } 26 | -------------------------------------------------------------------------------- /indexer/test/upgrader.go: -------------------------------------------------------------------------------- 1 | package weth_test 2 | 3 | import "github.com/Layr-Labs/eigenda/indexer" 4 | 5 | type Upgrader struct { 6 | } 7 | 8 | // DetectUpgrade takes in a list of headers and sets the CurrentFork and IsUpgrade fields 9 | func (u *Upgrader) DetectUpgrade(headers indexer.Headers) indexer.Headers { 10 | for i := 0; i < len(headers); i++ { 11 | headers[i].CurrentFork = "genesis" 12 | } 13 | return headers 14 | } 15 | 16 | func (u *Upgrader) GetLatestUpgrade(header *indexer.Header) uint64 { 17 | return header.Number 18 | } 19 | -------------------------------------------------------------------------------- /indexer/upgrader/upgrader.go: -------------------------------------------------------------------------------- 1 | package eigendaUpgrader 2 | 3 | import "github.com/Layr-Labs/eigenda/indexer" 4 | 5 | type Upgrader struct { 6 | } 7 | 8 | // DetectUpgrade takes in a list of headers and sets the CurrentFork and IsUpgrade fields 9 | func (u *Upgrader) DetectUpgrade(headers []indexer.Header) []indexer.Header { 10 | return nil 11 | } 12 | 13 | func (u *Upgrader) GetLatestUpgrade(header indexer.Header) uint64 { 14 | return 0 15 | } 16 | -------------------------------------------------------------------------------- /indexer/upgrades.go: -------------------------------------------------------------------------------- 1 | package indexer 2 | 3 | type UpgradeFork string 4 | 5 | // UpgradeForkWatcher is a component that is used to scan a list of headers for an upgrade. Future upgrades may be based on a condition; past upgrades should have a block number configuration provided. 6 | type UpgradeForkWatcher interface { 7 | 8 | // DetectUpgrade takes in a list of headers and sets the CurrentFork and IsUpgrade fields 9 | DetectUpgrade(headers Headers) Headers 10 | 11 | GetLatestUpgrade(header *Header) uint64 12 | } 13 | -------------------------------------------------------------------------------- /litt/disktable/disk_table_flush_loop.go: -------------------------------------------------------------------------------- 1 | package disktable 2 | -------------------------------------------------------------------------------- /litt/disktable/keymap/keymap_type.go: -------------------------------------------------------------------------------- 1 | package keymap 2 | 3 | // KeymapType represents the type of a keymap. 4 | type KeymapType string 5 | 6 | // LevelDBKeymapType is the type of a LevelDBKeymap. 7 | const LevelDBKeymapType = "LevelDBKeymap" 8 | 9 | // UnsafeLevelDBKeymapType is similar to LevelDBKeymapType, but it is not safe to use in production. 10 | // It runs a lot faster, but with weaker crash recovery guarantees. 11 | const UnsafeLevelDBKeymapType = "UnsafeLevelDBKeymap" 12 | 13 | // MemKeymapType is the type of a MemKeymap. 14 | const MemKeymapType = "MemKeymap" 15 | -------------------------------------------------------------------------------- /litt/disktable/segment/address_test.go: -------------------------------------------------------------------------------- 1 | package segment 2 | 3 | import ( 4 | "testing" 5 | 6 | "github.com/Layr-Labs/eigenda/common/testutils/random" 7 | "github.com/Layr-Labs/eigenda/litt/types" 8 | "github.com/stretchr/testify/require" 9 | ) 10 | 11 | func TestAddress(t *testing.T) { 12 | t.Parallel() 13 | rand := random.NewTestRandom() 14 | 15 | index := rand.Uint32() 16 | offset := rand.Uint32() 17 | address := types.NewAddress(index, offset) 18 | 19 | require.Equal(t, index, address.Index()) 20 | require.Equal(t, offset, address.Offset()) 21 | } 22 | -------------------------------------------------------------------------------- /litt/resources/flush-visual.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Layr-Labs/eigenda/9192afc4f1207c444d00fdf838cf90f87ee07b26/litt/resources/flush-visual.png -------------------------------------------------------------------------------- /litt/resources/iDidIt.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Layr-Labs/eigenda/9192afc4f1207c444d00fdf838cf90f87ee07b26/litt/resources/iDidIt.png -------------------------------------------------------------------------------- /litt/resources/iteration1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Layr-Labs/eigenda/9192afc4f1207c444d00fdf838cf90f87ee07b26/litt/resources/iteration1.png -------------------------------------------------------------------------------- /litt/resources/iteration2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Layr-Labs/eigenda/9192afc4f1207c444d00fdf838cf90f87ee07b26/litt/resources/iteration2.png -------------------------------------------------------------------------------- /litt/resources/iteration3.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Layr-Labs/eigenda/9192afc4f1207c444d00fdf838cf90f87ee07b26/litt/resources/iteration3.png -------------------------------------------------------------------------------- /litt/resources/iteration4.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Layr-Labs/eigenda/9192afc4f1207c444d00fdf838cf90f87ee07b26/litt/resources/iteration4.png -------------------------------------------------------------------------------- /litt/resources/iteration5.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Layr-Labs/eigenda/9192afc4f1207c444d00fdf838cf90f87ee07b26/litt/resources/iteration5.png -------------------------------------------------------------------------------- /litt/resources/iteration6.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Layr-Labs/eigenda/9192afc4f1207c444d00fdf838cf90f87ee07b26/litt/resources/iteration6.png -------------------------------------------------------------------------------- /litt/resources/iteration7.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Layr-Labs/eigenda/9192afc4f1207c444d00fdf838cf90f87ee07b26/litt/resources/iteration7.png -------------------------------------------------------------------------------- /litt/resources/iteration8.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Layr-Labs/eigenda/9192afc4f1207c444d00fdf838cf90f87ee07b26/litt/resources/iteration8.png -------------------------------------------------------------------------------- /litt/resources/iteration9.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Layr-Labs/eigenda/9192afc4f1207c444d00fdf838cf90f87ee07b26/litt/resources/iteration9.png -------------------------------------------------------------------------------- /litt/resources/littdb-big-picture.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Layr-Labs/eigenda/9192afc4f1207c444d00fdf838cf90f87ee07b26/litt/resources/littdb-big-picture.png -------------------------------------------------------------------------------- /litt/resources/littdb-logo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Layr-Labs/eigenda/9192afc4f1207c444d00fdf838cf90f87ee07b26/litt/resources/littdb-logo.png -------------------------------------------------------------------------------- /litt/test/testdata/v0/test/keymap/data/000001.log: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Layr-Labs/eigenda/9192afc4f1207c444d00fdf838cf90f87ee07b26/litt/test/testdata/v0/test/keymap/data/000001.log -------------------------------------------------------------------------------- /litt/test/testdata/v0/test/keymap/data/CURRENT: -------------------------------------------------------------------------------- 1 | MANIFEST-000000 2 | -------------------------------------------------------------------------------- /litt/test/testdata/v0/test/keymap/data/LOCK: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Layr-Labs/eigenda/9192afc4f1207c444d00fdf838cf90f87ee07b26/litt/test/testdata/v0/test/keymap/data/LOCK -------------------------------------------------------------------------------- /litt/test/testdata/v0/test/keymap/data/LOG: -------------------------------------------------------------------------------- 1 | =============== May 7, 2025 (CDT) =============== 2 | 09:33:37.810933 log@legend F·NumFile S·FileSize N·Entry C·BadEntry B·BadBlock Ke·KeyError D·DroppedEntry L·Level Q·SeqNum T·TimeElapsed 3 | 09:33:37.824567 db@open opening 4 | 09:33:37.825148 version@stat F·[] S·0B[] Sc·[] 5 | 09:33:37.828724 db@janitor F·2 G·0 6 | 09:33:37.828751 db@open done T·4.167625ms 7 | 09:33:37.859690 db@close closing 8 | 09:33:37.859770 db@close done T·79.375µs 9 | -------------------------------------------------------------------------------- /litt/test/testdata/v0/test/keymap/data/MANIFEST-000000: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Layr-Labs/eigenda/9192afc4f1207c444d00fdf838cf90f87ee07b26/litt/test/testdata/v0/test/keymap/data/MANIFEST-000000 -------------------------------------------------------------------------------- /litt/test/testdata/v0/test/keymap/initialized: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Layr-Labs/eigenda/9192afc4f1207c444d00fdf838cf90f87ee07b26/litt/test/testdata/v0/test/keymap/initialized -------------------------------------------------------------------------------- /litt/test/testdata/v0/test/keymap/keymap-type.txt: -------------------------------------------------------------------------------- 1 | LevelDBKeymap -------------------------------------------------------------------------------- /litt/test/testdata/v0/test/segments/0-0.values: -------------------------------------------------------------------------------- 1 | ��� 2 | VpmOg5d6Ya��� vxwc3n4trq3D��� VT0tSNW17vJ��� i1BYGFSfM3P��� dCXgS4SlWnmo���GHinZXfMWGfZqfrEUj -------------------------------------------------------------------------------- /litt/test/testdata/v0/test/segments/0-1.values: -------------------------------------------------------------------------------- 1 | ��� haThtIFGmQ2a1���zEpiTYqMnM4AEpQecs��� XzBcPMUZyryB -------------------------------------------------------------------------------- /litt/test/testdata/v0/test/segments/0-2.values: -------------------------------------------------------------------------------- 1 | ���w4XuLp12Gg6pWll���zol4hrMcjKh4wXBW0X4��� ZuvhlCcIRKcdn���Al7tASqhEtUxwv8O8 -------------------------------------------------------------------------------- /litt/test/testdata/v0/test/segments/0-3.values: -------------------------------------------------------------------------------- 1 | ��� uhI9oNwGZvOR���AtkhY6eBDwJjPC9Yq0���6vZh6B840MN8W8Edx���XiM14PxeApDwgCwoWl��� 2 | l1R6uK4eCQ���3G5RAf58WUmqTEQed -------------------------------------------------------------------------------- /litt/test/testdata/v0/test/segments/0.keys: -------------------------------------------------------------------------------- 1 | ��� fZLvo7jDSSlWP����������� 2 | sg7u1aDylz����������� f8y4xuM57qFQg�����������EdLROPjF0lrQR5Y����������� 2VFfY7yWW5cEs����������iMV7t0BLFhp8WDt3z����������zO3XDUKdmFWhzwL8����������Cl74jcT7McogOuI����������K3LPe7EsYmzmZfmJSr����������b2yGXFlpHJuQwpCaa�������*��� fycSvFVXdL7�������;��� ivHrCBthr8qu�������-��� bK6ShP3Ji9FN�������<��� LcUMjv2DlnS�������&��� 3 | 35RKf4sd9a�������L��� EpfdcYJauGI�������'��� BUHqRs6XNnk�������;��� 3UwjwlxbofoH�������Q���2nk7LDEAIiP17i�������_ -------------------------------------------------------------------------------- /litt/test/testdata/v0/test/segments/0.metadata: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Layr-Labs/eigenda/9192afc4f1207c444d00fdf838cf90f87ee07b26/litt/test/testdata/v0/test/segments/0.metadata -------------------------------------------------------------------------------- /litt/test/testdata/v0/test/segments/1-0.values: -------------------------------------------------------------------------------- 1 | ���IToFVMqwa2woQfsh���M5s0cyA2UJ3jstDz���NtCNQZAEuJizQhXXL���MuP0gvMHSbk51W93N -------------------------------------------------------------------------------- /litt/test/testdata/v0/test/segments/1-1.values: -------------------------------------------------------------------------------- 1 | ��� ZGzgRuGu55bFY���4TGH4FzHWSUn5oc -------------------------------------------------------------------------------- /litt/test/testdata/v0/test/segments/1-2.values: -------------------------------------------------------------------------------- 1 | ��� QH2dqRdzH7Vr��� QQZ9cqPEq2VVR���6xevs3LFY58gxg -------------------------------------------------------------------------------- /litt/test/testdata/v0/test/segments/1-3.values: -------------------------------------------------------------------------------- 1 | ��� flw6IHhUi8NmZ���ro7MlUTDJt3yCG4I9x���lrB2OPxXpvA9GEr���jxRBNQOMpHErksJu4���cbBr5XwaDgyduz7lF��� 2 | RqsHSDNJbX -------------------------------------------------------------------------------- /litt/test/testdata/v0/test/segments/1.keys: -------------------------------------------------------------------------------- 1 | ��� KC9ljchlpJGC����������Ge55N78jIGzl4kyWAQ����������4plod7WQcLypxeJ24B4����������7Lw3q58svTi4SEAFw��������� 2 | 4aEyphJuc5������!���mvyYTJEO2cJ6oY3L4U��������� Bx0ARO4F4BSg������(���C8kiIIMWffu5UH����������C3ZqqO4cenvQhUXr5���������cdlFwQ3izP6gddTWg������'��� 3 | NRrxErIRM4������=���jrDRPJ1uXPLeJxwbDdp��������� xFSCCXEBQfVB������:��� 4KcWZuzvlSMI������O���iHCadisZ2d4Lhh������d -------------------------------------------------------------------------------- /litt/test/testdata/v0/test/segments/1.metadata: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Layr-Labs/eigenda/9192afc4f1207c444d00fdf838cf90f87ee07b26/litt/test/testdata/v0/test/segments/1.metadata -------------------------------------------------------------------------------- /litt/test/testdata/v0/test/segments/2-0.values: -------------------------------------------------------------------------------- 1 | ��� w2Fkpvl9PAI���4kD25VKJGYTJXNScjKI��� syZQNyr47tVH4���26b4nHzUbnFbragc6D���CTFHvtahyIn0CAN -------------------------------------------------------------------------------- /litt/test/testdata/v0/test/segments/2-1.values: -------------------------------------------------------------------------------- 1 | ���5qDf9Tg08OHwOyrbV��� KcMnVtYPwgcqT��� QqgioH4rseg���bUHbWNpRnJFmR5zdgMY��� 5P1OmVO3hI1PI -------------------------------------------------------------------------------- /litt/test/testdata/v0/test/segments/2-2.values: -------------------------------------------------------------------------------- 1 | ���Arky8MofGkvEhFNc -------------------------------------------------------------------------------- /litt/test/testdata/v0/test/segments/2-3.values: -------------------------------------------------------------------------------- 1 | ���oImOAez9d2M3LodO���kDUv68Hm807FEDCj���KNhNwNybSgp0hjsayh��� 2 | 0K4RIpQbBU���2H41w79yXlFcxg��� 3 | Tn2MgaTP5B -------------------------------------------------------------------------------- /litt/test/testdata/v0/test/segments/2.keys: -------------------------------------------------------------------------------- 1 | ���KnHZhDP4EezmNcH6waF���������� J0iTmnA2jc0g���������� dysi8hDsKj8FF���������� 2S3X8sDLwDNk���������sJtKBhkqXJ8QjPab������(���7PTApk1JZnegET������>��� 2 | Xg9t7f0x9F���������nSlaWA77r6Dqbl3Lyv���������x5yJoUs8wOwkiiiao������&���dUVvq2B95CkIOHn������&���lYtAmE5Oe0wYeLTr������7��� chzmznu42ET4i������5���U2E9LMOhu0uY1DL������L��� n64zlB9gKtk����������6x45pVeBPckE9Rbb������M���Y21Q4luB2YR9tkH������L���uQxQ25apaahwztuOzNi������^ -------------------------------------------------------------------------------- /litt/test/testdata/v0/test/segments/2.metadata: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Layr-Labs/eigenda/9192afc4f1207c444d00fdf838cf90f87ee07b26/litt/test/testdata/v0/test/segments/2.metadata -------------------------------------------------------------------------------- /litt/test/testdata/v0/test/segments/3-0.values: -------------------------------------------------------------------------------- 1 | ���fXVDjf4H3LAPZo���QOaCQaRS67dCW6���p2EakPC1qFy1Ln7X1gy���R8AEX7ZSVc5Kku���Lus1iBWnndJca1BGPw��� MqA1KDBYG53K -------------------------------------------------------------------------------- /litt/test/testdata/v0/test/segments/3-1.values: -------------------------------------------------------------------------------- 1 | ��� 24ptxcYqnwu -------------------------------------------------------------------------------- /litt/test/testdata/v0/test/segments/3-2.values: -------------------------------------------------------------------------------- 1 | ��� TuVWcQMIUC3w���qQZMRlvQ4MJRRST��� 2 | vaPjmDx1lP���CuskocQHlFcYtG -------------------------------------------------------------------------------- /litt/test/testdata/v0/test/segments/3-3.values: -------------------------------------------------------------------------------- 1 | ���CV1D4By3PkfctVA8pEA���6PpFUoLqEtg5QLPf7Q -------------------------------------------------------------------------------- /litt/test/testdata/v0/test/segments/3.keys: -------------------------------------------------------------------------------- 1 | ���UxtCua2isEaZAuCEM1����������anEZPbHRLgbK8ab8k����������9v3kYNhyWqpbXKjB���������� kYCtV1TdwjO���������dNmMpVGPQpUkcUE������#��� 4Upqz2PKSR1��������� UMlCE2OHHYREl��������� ypMpA354f9xP������1��� 3pkkNwZmFgO1������$���qB8FM7KKVM192bW7c������;��� 2 | 8zjsG3w3mP������M���c2D85oqCiSFv344vw����������j0FvUY2kdcFehwSFTPU������c -------------------------------------------------------------------------------- /litt/test/testdata/v0/test/segments/3.metadata: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Layr-Labs/eigenda/9192afc4f1207c444d00fdf838cf90f87ee07b26/litt/test/testdata/v0/test/segments/3.metadata -------------------------------------------------------------------------------- /litt/test/testdata/v0/test/segments/4-0.values: -------------------------------------------------------------------------------- 1 | ���74ndgZk9ymMxhn0spv��� 4tndorV1Yltoz��� 2 | D4MBDXATSN���UaaoCv0nA6DuXQ��� 3 | fYw79uPHmN -------------------------------------------------------------------------------- /litt/test/testdata/v0/test/segments/4-1.values: -------------------------------------------------------------------------------- 1 | ���4XUTqdsnQPtI2Bk���blcXwtWmVB8Xkzv��� ontvK6EElNxUt -------------------------------------------------------------------------------- /litt/test/testdata/v0/test/segments/4-2.values: -------------------------------------------------------------------------------- 1 | ���JLZ1yjpuYQXFRsG���ofNCxSlZx44UPkG8C04��� fbJrgwABL86Kh���3kwfJ9pzGeB67Y���TuVgbSDFtna5dv��� 2 | BmAwd2EvHw -------------------------------------------------------------------------------- /litt/test/testdata/v0/test/segments/4-3.values: -------------------------------------------------------------------------------- 1 | ��� 2 | pMyKVDIUyz��� Mz9q5TUxPfkh -------------------------------------------------------------------------------- /litt/test/testdata/v0/test/segments/4.keys: -------------------------------------------------------------------------------- 1 | ���KYL5i7mIx6I95dO0����������nz7DN3LHVWsjEPVD���������Z3IErKLZrStej27����������LMCzFVEVHL8yozVw3X���������� R12vsDgE9vHSh��������� ue2g7bcwq1xS������*���j8GIOZUCpcotvNs������'���9OIQkcyEZ4V0hgJT������;���i1RqPkH2XKRj4wS������5���UY9YfW75SzDqCPy���������zMJPfHe0Td4m5JLD���������� 2 | XxAUWO6zyJ��������� azDFe3GvhnR������G���hZ9XON4x4WivPJ3������M���aQ0Y9rb1UisYU03FW������&��� ZEeVJZTz6372d������_ -------------------------------------------------------------------------------- /litt/test/testdata/v0/test/segments/4.metadata: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Layr-Labs/eigenda/9192afc4f1207c444d00fdf838cf90f87ee07b26/litt/test/testdata/v0/test/segments/4.metadata -------------------------------------------------------------------------------- /litt/test/testdata/v0/test/segments/5-0.values: -------------------------------------------------------------------------------- 1 | ���ToPJqT4cHpuK7j7oHs���qu1IYzyZXWSrRt0Q7���KJ9lMw28tR3i5CzSOe��� rIea0vLsQnLpL���K2xRiBNQ5MNb75d3B -------------------------------------------------------------------------------- /litt/test/testdata/v0/test/segments/5-1.values: -------------------------------------------------------------------------------- 1 | ��� FlWDrgzeshrq���26FYmPjkYs51nh98��� cTqqONfvuSAtt -------------------------------------------------------------------------------- /litt/test/testdata/v0/test/segments/5-2.values: -------------------------------------------------------------------------------- 1 | ���428u9CE6zZlQoWG��� 2 | UXtbSmjYPR -------------------------------------------------------------------------------- /litt/test/testdata/v0/test/segments/5-3.values: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Layr-Labs/eigenda/9192afc4f1207c444d00fdf838cf90f87ee07b26/litt/test/testdata/v0/test/segments/5-3.values -------------------------------------------------------------------------------- /litt/test/testdata/v0/test/segments/5.keys: -------------------------------------------------------------------------------- 1 | ��� 2 | 6B1wwUMjTF���������� UFjhyw212E1HB���������� kkVYsbOBrIhrm���������2WvlDWvByFAjHGO5���������� sX3VM3pdWuTN���������QWGu2AnfcifYECejE��������� MHwGBaYMRtPVX������$��� DQXDdUJvMijK������+���zmNLDGiOsX0zzLxgqx������A��� lWQkLUVEFMS������R -------------------------------------------------------------------------------- /litt/test/testdata/v0/test/segments/5.metadata: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Layr-Labs/eigenda/9192afc4f1207c444d00fdf838cf90f87ee07b26/litt/test/testdata/v0/test/segments/5.metadata -------------------------------------------------------------------------------- /litt/test/testdata/v0/test/segments/6-0.values: -------------------------------------------------------------------------------- 1 | ��� xa6IUSXbcqxdo -------------------------------------------------------------------------------- /litt/test/testdata/v0/test/segments/6-1.values: -------------------------------------------------------------------------------- 1 | ��� 2 | qECowRfgz0��� zryjRgkY3B9���oSNhtpEtRb48ntgPkhL -------------------------------------------------------------------------------- /litt/test/testdata/v0/test/segments/6-2.values: -------------------------------------------------------------------------------- 1 | ���7dvQROKGAjCFfEHmHT -------------------------------------------------------------------------------- /litt/test/testdata/v0/test/segments/6-3.values: -------------------------------------------------------------------------------- 1 | ��� t3zE0G6XVVG���CJPo06kCod8H5nl��� 3W9GuwG3XH0��� 2 | 67hj2DdNr8���dkLkKFlbNsRhgCZGsp -------------------------------------------------------------------------------- /litt/test/testdata/v0/test/segments/6.keys: -------------------------------------------------------------------------------- 1 | ��� MfA1l81VnHH���������� 8G9r4r7hKZs���������OGfnB7QR4eQaatXwP���������� k30CXpbPH7N��������� 2 | EvJlXug4Lj���������� eHhgOVn7XZBvp������"���2qIhPhR0tqr0sf9n������1���snbz01TFonWpok1WQJQ������?���TejKR8aotSlTBW78Mt���������� 3 | S7MOxfceWW������ -------------------------------------------------------------------------------- /litt/test/testdata/v0/test/segments/6.metadata: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Layr-Labs/eigenda/9192afc4f1207c444d00fdf838cf90f87ee07b26/litt/test/testdata/v0/test/segments/6.metadata -------------------------------------------------------------------------------- /litt/test/testdata/v0/test/table.metadata: -------------------------------------------------------------------------------- 1 | ��������������� -------------------------------------------------------------------------------- /litt/test/testdata/v1/test/keymap/data/000001.log: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Layr-Labs/eigenda/9192afc4f1207c444d00fdf838cf90f87ee07b26/litt/test/testdata/v1/test/keymap/data/000001.log -------------------------------------------------------------------------------- /litt/test/testdata/v1/test/keymap/data/CURRENT: -------------------------------------------------------------------------------- 1 | MANIFEST-000000 2 | -------------------------------------------------------------------------------- /litt/test/testdata/v1/test/keymap/data/LOCK: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Layr-Labs/eigenda/9192afc4f1207c444d00fdf838cf90f87ee07b26/litt/test/testdata/v1/test/keymap/data/LOCK -------------------------------------------------------------------------------- /litt/test/testdata/v1/test/keymap/data/LOG: -------------------------------------------------------------------------------- 1 | =============== May 12, 2025 (CDT) =============== 2 | 12:12:52.269858 log@legend F·NumFile S·FileSize N·Entry C·BadEntry B·BadBlock Ke·KeyError D·DroppedEntry L·Level Q·SeqNum T·TimeElapsed 3 | 12:12:52.280593 db@open opening 4 | 12:12:52.281865 version@stat F·[] S·0B[] Sc·[] 5 | 12:12:52.284835 db@janitor F·2 G·0 6 | 12:12:52.284865 db@open done T·4.2475ms 7 | 12:12:52.312588 db@close closing 8 | 12:12:52.312685 db@close done T·95.916µs 9 | -------------------------------------------------------------------------------- /litt/test/testdata/v1/test/keymap/data/MANIFEST-000000: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Layr-Labs/eigenda/9192afc4f1207c444d00fdf838cf90f87ee07b26/litt/test/testdata/v1/test/keymap/data/MANIFEST-000000 -------------------------------------------------------------------------------- /litt/test/testdata/v1/test/keymap/initialized: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Layr-Labs/eigenda/9192afc4f1207c444d00fdf838cf90f87ee07b26/litt/test/testdata/v1/test/keymap/initialized -------------------------------------------------------------------------------- /litt/test/testdata/v1/test/keymap/keymap-type.txt: -------------------------------------------------------------------------------- 1 | LevelDBKeymap -------------------------------------------------------------------------------- /litt/test/testdata/v1/test/segments/0-0.values: -------------------------------------------------------------------------------- 1 | ���3kwfJ9pzGeB67Y��� 2 | VpmOg5d6Ya���7dvQROKGAjCFfEHmHT���ofNCxSlZx44UPkG8C04���6vZh6B840MN8W8Edx��� 3 | RqsHSDNJbX -------------------------------------------------------------------------------- /litt/test/testdata/v1/test/segments/0-1.values: -------------------------------------------------------------------------------- 1 | ��� TuVWcQMIUC3w��� zryjRgkY3B9���lrB2OPxXpvA9GEr���3G5RAf58WUmqTEQed��� 2 | qECowRfgz0 -------------------------------------------------------------------------------- /litt/test/testdata/v1/test/segments/0-2.values: -------------------------------------------------------------------------------- 1 | ���dkLkKFlbNsRhgCZGsp���CTFHvtahyIn0CAN���5qDf9Tg08OHwOyrbV��� KcMnVtYPwgcqT -------------------------------------------------------------------------------- /litt/test/testdata/v1/test/segments/0-3.values: -------------------------------------------------------------------------------- 1 | ���fXVDjf4H3LAPZo���GHinZXfMWGfZqfrEUj -------------------------------------------------------------------------------- /litt/test/testdata/v1/test/segments/0.keys: -------------------------------------------------------------------------------- 1 | ���9OIQkcyEZ4V0hgJT�����������anEZPbHRLgbK8ab8k����������� 8G9r4r7hKZs����������snbz01TFonWpok1WQJQ�����������cdlFwQ3izP6gddTWg����������6x45pVeBPckE9Rbb����������2nk7LDEAIiP17i�������2���EdLROPjF0lrQR5Y����������KnHZhDP4EezmNcH6waF�������)���nSlaWA77r6Dqbl3Lyv�������>���TejKR8aotSlTBW78Mt������� ���9v3kYNhyWqpbXKjB����������� R12vsDgE9vHSh�������6��� LcUMjv2DlnS�������M��� MfA1l81VnHH�������G��� 2 | 35RKf4sd9a����������iHCadisZ2d4Lhh�������b -------------------------------------------------------------------------------- /litt/test/testdata/v1/test/segments/0.metadata: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Layr-Labs/eigenda/9192afc4f1207c444d00fdf838cf90f87ee07b26/litt/test/testdata/v1/test/segments/0.metadata -------------------------------------------------------------------------------- /litt/test/testdata/v1/test/segments/1-0.values: -------------------------------------------------------------------------------- 1 | ��� syZQNyr47tVH4���CuskocQHlFcYtG��� t3zE0G6XVVG -------------------------------------------------------------------------------- /litt/test/testdata/v1/test/segments/1-1.values: -------------------------------------------------------------------------------- 1 | ���AtkhY6eBDwJjPC9Yq0��� haThtIFGmQ2a1���Al7tASqhEtUxwv8O8 -------------------------------------------------------------------------------- /litt/test/testdata/v1/test/segments/1-2.values: -------------------------------------------------------------------------------- 1 | ��� 2 | BmAwd2EvHw��� 3 | pMyKVDIUyz��� 5P1OmVO3hI1PI���ToPJqT4cHpuK7j7oHs���26b4nHzUbnFbragc6D���26FYmPjkYs51nh98 -------------------------------------------------------------------------------- /litt/test/testdata/v1/test/segments/1-3.values: -------------------------------------------------------------------------------- 1 | ��� uhI9oNwGZvOR���zEpiTYqMnM4AEpQecs���QOaCQaRS67dCW6 -------------------------------------------------------------------------------- /litt/test/testdata/v1/test/segments/1.keys: -------------------------------------------------------------------------------- 1 | ���x5yJoUs8wOwkiiiao���������� ypMpA354f9xP���������iMV7t0BLFhp8WDt3z���������� fZLvo7jDSSlWP����������Cl74jcT7McogOuI��������� UMlCE2OHHYREl������&��� ZEeVJZTz6372d����������LMCzFVEVHL8yozVw3X���������U2E9LMOhu0uY1DL��������� f8y4xuM57qFQg���������2WvlDWvByFAjHGO5������-��� fycSvFVXdL7������'���OGfnB7QR4eQaatXwP������#���lYtAmE5Oe0wYeLTr������C���QWGu2AnfcifYECejE������Y -------------------------------------------------------------------------------- /litt/test/testdata/v1/test/segments/1.metadata: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Layr-Labs/eigenda/9192afc4f1207c444d00fdf838cf90f87ee07b26/litt/test/testdata/v1/test/segments/1.metadata -------------------------------------------------------------------------------- /litt/test/testdata/v1/test/segments/2-0.values: -------------------------------------------------------------------------------- 1 | ���M5s0cyA2UJ3jstDz��� MqA1KDBYG53K��� 2 | UXtbSmjYPR���jxRBNQOMpHErksJu4���XiM14PxeApDwgCwoWl��� rIea0vLsQnLpL -------------------------------------------------------------------------------- /litt/test/testdata/v1/test/segments/2-1.values: -------------------------------------------------------------------------------- 1 | ��� 2 | vaPjmDx1lP��� 3 | l1R6uK4eCQ���kDUv68Hm807FEDCj -------------------------------------------------------------------------------- /litt/test/testdata/v1/test/segments/2-2.values: -------------------------------------------------------------------------------- 1 | ���CV1D4By3PkfctVA8pEA��� ZGzgRuGu55bFY��� dCXgS4SlWnmo��� vxwc3n4trq3D��� flw6IHhUi8NmZ -------------------------------------------------------------------------------- /litt/test/testdata/v1/test/segments/2-3.values: -------------------------------------------------------------------------------- 1 | ���6PpFUoLqEtg5QLPf7Q��� QqgioH4rseg��� 2 | fYw79uPHmN -------------------------------------------------------------------------------- /litt/test/testdata/v1/test/segments/2.keys: -------------------------------------------------------------------------------- 1 | ���dNmMpVGPQpUkcUE����������mvyYTJEO2cJ6oY3L4U���������� 4Upqz2PKSR1����������UxtCua2isEaZAuCEM1����������C8kiIIMWffu5UH���������j0FvUY2kdcFehwSFTPU��������� bK6ShP3Ji9FN������(��� 3UwjwlxbofoH��������� 2S3X8sDLwDNk��������� kkVYsbOBrIhrm������$��� xFSCCXEBQfVB������2��� 2VFfY7yWW5cEs������8���4plod7WQcLypxeJ24B4������H���dUVvq2B95CkIOHn��������� azDFe3GvhnR������%��� BUHqRs6XNnk������G���zmNLDGiOsX0zzLxgqx������] -------------------------------------------------------------------------------- /litt/test/testdata/v1/test/segments/2.metadata: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Layr-Labs/eigenda/9192afc4f1207c444d00fdf838cf90f87ee07b26/litt/test/testdata/v1/test/segments/2.metadata -------------------------------------------------------------------------------- /litt/test/testdata/v1/test/segments/3-0.values: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Layr-Labs/eigenda/9192afc4f1207c444d00fdf838cf90f87ee07b26/litt/test/testdata/v1/test/segments/3-0.values -------------------------------------------------------------------------------- /litt/test/testdata/v1/test/segments/3-1.values: -------------------------------------------------------------------------------- 1 | ��� 4tndorV1Yltoz���2H41w79yXlFcxg -------------------------------------------------------------------------------- /litt/test/testdata/v1/test/segments/3-2.values: -------------------------------------------------------------------------------- 1 | ���KNhNwNybSgp0hjsayh��� 2 | 0K4RIpQbBU��� QH2dqRdzH7Vr -------------------------------------------------------------------------------- /litt/test/testdata/v1/test/segments/3-3.values: -------------------------------------------------------------------------------- 1 | ���oImOAez9d2M3LodO��� VT0tSNW17vJ���428u9CE6zZlQoWG��� i1BYGFSfM3P���IToFVMqwa2woQfsh��� 2 | Tn2MgaTP5B -------------------------------------------------------------------------------- /litt/test/testdata/v1/test/segments/3.keys: -------------------------------------------------------------------------------- 1 | ���sJtKBhkqXJ8QjPab���������� J0iTmnA2jc0g����������K3LPe7EsYmzmZfmJSr��������� 2 | 6B1wwUMjTF������#��� ivHrCBthr8qu������6���Ge55N78jIGzl4kyWAQ������E���nz7DN3LHVWsjEPVD����������Y21Q4luB2YR9tkH���������7PTApk1JZnegET��������� KC9ljchlpJGC������$���uQxQ25apaahwztuOzNi������Y -------------------------------------------------------------------------------- /litt/test/testdata/v1/test/segments/3.metadata: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Layr-Labs/eigenda/9192afc4f1207c444d00fdf838cf90f87ee07b26/litt/test/testdata/v1/test/segments/3.metadata -------------------------------------------------------------------------------- /litt/test/testdata/v1/test/segments/4-0.values: -------------------------------------------------------------------------------- 1 | ���NtCNQZAEuJizQhXXL��� 3W9GuwG3XH0���w4XuLp12Gg6pWll���zol4hrMcjKh4wXBW0X4��� w2Fkpvl9PAI���K2xRiBNQ5MNb75d3B -------------------------------------------------------------------------------- /litt/test/testdata/v1/test/segments/4-1.values: -------------------------------------------------------------------------------- 1 | ���qu1IYzyZXWSrRt0Q7���cbBr5XwaDgyduz7lF���ro7MlUTDJt3yCG4I9x��� 2 | D4MBDXATSN -------------------------------------------------------------------------------- /litt/test/testdata/v1/test/segments/4-2.values: -------------------------------------------------------------------------------- 1 | ��� QQZ9cqPEq2VVR��� fbJrgwABL86Kh��� 2 | 67hj2DdNr8 -------------------------------------------------------------------------------- /litt/test/testdata/v1/test/segments/4-3.values: -------------------------------------------------------------------------------- 1 | ��� FlWDrgzeshrq���JLZ1yjpuYQXFRsG -------------------------------------------------------------------------------- /litt/test/testdata/v1/test/segments/4.keys: -------------------------------------------------------------------------------- 1 | ��� UFjhyw212E1HB���������� Bx0ARO4F4BSg���������� eHhgOVn7XZBvp��������� sX3VM3pdWuTN���������� 4KcWZuzvlSMI���������C3ZqqO4cenvQhUXr5������*���Z3IErKLZrStej27���������7Lw3q58svTi4SEAFw���������� ue2g7bcwq1xS��������� 2 | sg7u1aDylz������$���j8GIOZUCpcotvNs������@���zO3XDUKdmFWhzwL8������7���2qIhPhR0tqr0sf9n������"��� dysi8hDsKj8FF������N��� lWQkLUVEFMS������] -------------------------------------------------------------------------------- /litt/test/testdata/v1/test/segments/4.metadata: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Layr-Labs/eigenda/9192afc4f1207c444d00fdf838cf90f87ee07b26/litt/test/testdata/v1/test/segments/4.metadata -------------------------------------------------------------------------------- /litt/test/testdata/v1/test/segments/5-0.values: -------------------------------------------------------------------------------- 1 | ���Arky8MofGkvEhFNc��� xa6IUSXbcqxdo���TuVgbSDFtna5dv -------------------------------------------------------------------------------- /litt/test/testdata/v1/test/segments/5-1.values: -------------------------------------------------------------------------------- 1 | ���4XUTqdsnQPtI2Bk��� 24ptxcYqnwu��� cTqqONfvuSAtt���qQZMRlvQ4MJRRST -------------------------------------------------------------------------------- /litt/test/testdata/v1/test/segments/5-2.values: -------------------------------------------------------------------------------- 1 | ���oSNhtpEtRb48ntgPkhL��� ontvK6EElNxUt���bUHbWNpRnJFmR5zdgMY���blcXwtWmVB8Xkzv��� XzBcPMUZyryB���p2EakPC1qFy1Ln7X1gy -------------------------------------------------------------------------------- /litt/test/testdata/v1/test/segments/5-3.values: -------------------------------------------------------------------------------- 1 | ���UaaoCv0nA6DuXQ��� Mz9q5TUxPfkh -------------------------------------------------------------------------------- /litt/test/testdata/v1/test/segments/5.keys: -------------------------------------------------------------------------------- 1 | ��� n64zlB9gKtk���������� 2 | EvJlXug4Lj���������zMJPfHe0Td4m5JLD���������� 3 | S7MOxfceWW����������aQ0Y9rb1UisYU03FW���������i1RqPkH2XKRj4wS����������c2D85oqCiSFv344vw��������� MHwGBaYMRtPVX������"���UY9YfW75SzDqCPy���������hZ9XON4x4WivPJ3������%��� chzmznu42ET4i������(��� kYCtV1TdwjO������3��� 4 | XxAUWO6zyJ������?��� EpfdcYJauGI������R��� 3pkkNwZmFgO1������b -------------------------------------------------------------------------------- /litt/test/testdata/v1/test/segments/5.metadata: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Layr-Labs/eigenda/9192afc4f1207c444d00fdf838cf90f87ee07b26/litt/test/testdata/v1/test/segments/5.metadata -------------------------------------------------------------------------------- /litt/test/testdata/v1/test/segments/6-0.values: -------------------------------------------------------------------------------- 1 | ���CJPo06kCod8H5nl���R8AEX7ZSVc5Kku���Lus1iBWnndJca1BGPw���KJ9lMw28tR3i5CzSOe -------------------------------------------------------------------------------- /litt/test/testdata/v1/test/segments/6-1.values: -------------------------------------------------------------------------------- 1 | ���74ndgZk9ymMxhn0spv���6xevs3LFY58gxg -------------------------------------------------------------------------------- /litt/test/testdata/v1/test/segments/6-2.values: -------------------------------------------------------------------------------- 1 | ���4TGH4FzHWSUn5oc���MuP0gvMHSbk51W93N��� ZuvhlCcIRKcdn -------------------------------------------------------------------------------- /litt/test/testdata/v1/test/segments/6-3.values: -------------------------------------------------------------------------------- 1 | ���4kD25VKJGYTJXNScjKI -------------------------------------------------------------------------------- /litt/test/testdata/v1/test/segments/6.keys: -------------------------------------------------------------------------------- 1 | ��� k30CXpbPH7N����������jrDRPJ1uXPLeJxwbDdp����������qB8FM7KKVM192bW7c��������� 2 | 8zjsG3w3mP������%��� DQXDdUJvMijK������;��� 3 | Xg9t7f0x9F����������KYL5i7mIx6I95dO0���������� 4 | 4aEyphJuc5��������� 5 | NRrxErIRM4���������b2yGXFlpHJuQwpCaa������( -------------------------------------------------------------------------------- /litt/test/testdata/v1/test/segments/6.metadata: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Layr-Labs/eigenda/9192afc4f1207c444d00fdf838cf90f87ee07b26/litt/test/testdata/v1/test/segments/6.metadata -------------------------------------------------------------------------------- /litt/test/testdata/v1/test/table.metadata: -------------------------------------------------------------------------------- 1 | ��������������� -------------------------------------------------------------------------------- /litt/test/testdata/v2/test/keymap/data/000001.log: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Layr-Labs/eigenda/9192afc4f1207c444d00fdf838cf90f87ee07b26/litt/test/testdata/v2/test/keymap/data/000001.log -------------------------------------------------------------------------------- /litt/test/testdata/v2/test/keymap/data/CURRENT: -------------------------------------------------------------------------------- 1 | MANIFEST-000000 2 | -------------------------------------------------------------------------------- /litt/test/testdata/v2/test/keymap/data/LOCK: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Layr-Labs/eigenda/9192afc4f1207c444d00fdf838cf90f87ee07b26/litt/test/testdata/v2/test/keymap/data/LOCK -------------------------------------------------------------------------------- /litt/test/testdata/v2/test/keymap/data/LOG: -------------------------------------------------------------------------------- 1 | =============== May 15, 2025 (CDT) =============== 2 | 15:54:37.535265 log@legend F·NumFile S·FileSize N·Entry C·BadEntry B·BadBlock Ke·KeyError D·DroppedEntry L·Level Q·SeqNum T·TimeElapsed 3 | 15:54:37.556992 db@open opening 4 | 15:54:37.557686 version@stat F·[] S·0B[] Sc·[] 5 | 15:54:37.566101 db@janitor F·2 G·0 6 | 15:54:37.566141 db@open done T·9.127417ms 7 | 15:54:37.602897 db@close closing 8 | 15:54:37.602996 db@close done T·95.417µs 9 | -------------------------------------------------------------------------------- /litt/test/testdata/v2/test/keymap/data/MANIFEST-000000: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Layr-Labs/eigenda/9192afc4f1207c444d00fdf838cf90f87ee07b26/litt/test/testdata/v2/test/keymap/data/MANIFEST-000000 -------------------------------------------------------------------------------- /litt/test/testdata/v2/test/keymap/initialized: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Layr-Labs/eigenda/9192afc4f1207c444d00fdf838cf90f87ee07b26/litt/test/testdata/v2/test/keymap/initialized -------------------------------------------------------------------------------- /litt/test/testdata/v2/test/keymap/keymap-type.txt: -------------------------------------------------------------------------------- 1 | LevelDBKeymap -------------------------------------------------------------------------------- /litt/test/testdata/v2/test/segments/0-0.values: -------------------------------------------------------------------------------- 1 | ���UaaoCv0nA6DuXQ -------------------------------------------------------------------------------- /litt/test/testdata/v2/test/segments/0-1.values: -------------------------------------------------------------------------------- 1 | ��� XzBcPMUZyryB���M5s0cyA2UJ3jstDz���CTFHvtahyIn0CAN -------------------------------------------------------------------------------- /litt/test/testdata/v2/test/segments/0-2.values: -------------------------------------------------------------------------------- 1 | ���p2EakPC1qFy1Ln7X1gy���IToFVMqwa2woQfsh���jxRBNQOMpHErksJu4���GHinZXfMWGfZqfrEUj���oImOAez9d2M3LodO -------------------------------------------------------------------------------- /litt/test/testdata/v2/test/segments/0-3.values: -------------------------------------------------------------------------------- 1 | ���Lus1iBWnndJca1BGPw -------------------------------------------------------------------------------- /litt/test/testdata/v2/test/segments/0.keys: -------------------------------------------------------------------------------- 1 | ��� 3pkkNwZmFgO1�������������� 2 | 8zjsG3w3mP��������������i1RqPkH2XKRj4wS��������������Ge55N78jIGzl4kyWAQ������������� EpfdcYJauGI����������� ���mvyYTJEO2cJ6oY3L4U�������������6x45pVeBPckE9Rbb�������$������ xFSCCXEBQfVB�������+������ 3 | 35RKf4sd9a�������@������ J0iTmnA2jc0g�������V��� -------------------------------------------------------------------------------- /litt/test/testdata/v2/test/segments/0.metadata: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Layr-Labs/eigenda/9192afc4f1207c444d00fdf838cf90f87ee07b26/litt/test/testdata/v2/test/segments/0.metadata -------------------------------------------------------------------------------- /litt/test/testdata/v2/test/segments/1-0.values: -------------------------------------------------------------------------------- 1 | ��� fbJrgwABL86Kh -------------------------------------------------------------------------------- /litt/test/testdata/v2/test/segments/1-1.values: -------------------------------------------------------------------------------- 1 | ��� haThtIFGmQ2a1���qQZMRlvQ4MJRRST -------------------------------------------------------------------------------- /litt/test/testdata/v2/test/segments/1-2.values: -------------------------------------------------------------------------------- 1 | ��� xa6IUSXbcqxdo��� TuVWcQMIUC3w���dkLkKFlbNsRhgCZGsp���4XUTqdsnQPtI2Bk��� 2 | l1R6uK4eCQ���KNhNwNybSgp0hjsayh -------------------------------------------------------------------------------- /litt/test/testdata/v2/test/segments/1-3.values: -------------------------------------------------------------------------------- 1 | ��� Mz9q5TUxPfkh���bUHbWNpRnJFmR5zdgMY���lrB2OPxXpvA9GEr���CuskocQHlFcYtG -------------------------------------------------------------------------------- /litt/test/testdata/v2/test/segments/1.keys: -------------------------------------------------------------------------------- 1 | ���UY9YfW75SzDqCPy���������� ��� chzmznu42ET4i������������ f8y4xuM57qFQg���������� ��� 2 | EvJlXug4Lj���������� ���anEZPbHRLgbK8ab8k��������� ���snbz01TFonWpok1WQJQ������!������cdlFwQ3izP6gddTWg������'������ kYCtV1TdwjO������������zMJPfHe0Td4m5JLD������7������ ypMpA354f9xP������:������ ue2g7bcwq1xS���������� ��� 3UwjwlxbofoH������J��� 3 | ���sJtKBhkqXJ8QjPab������X��� -------------------------------------------------------------------------------- /litt/test/testdata/v2/test/segments/1.metadata: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Layr-Labs/eigenda/9192afc4f1207c444d00fdf838cf90f87ee07b26/litt/test/testdata/v2/test/segments/1.metadata -------------------------------------------------------------------------------- /litt/test/testdata/v2/test/segments/2-0.values: -------------------------------------------------------------------------------- 1 | ��� ZGzgRuGu55bFY��� flw6IHhUi8NmZ -------------------------------------------------------------------------------- /litt/test/testdata/v2/test/segments/2-1.values: -------------------------------------------------------------------------------- 1 | ���K2xRiBNQ5MNb75d3B��� FlWDrgzeshrq���CV1D4By3PkfctVA8pEA -------------------------------------------------------------------------------- /litt/test/testdata/v2/test/segments/2-2.values: -------------------------------------------------------------------------------- 1 | ���MuP0gvMHSbk51W93N��� MqA1KDBYG53K��� VT0tSNW17vJ��� 2 | RqsHSDNJbX���3G5RAf58WUmqTEQed -------------------------------------------------------------------------------- /litt/test/testdata/v2/test/segments/2-3.values: -------------------------------------------------------------------------------- 1 | ��� 2 | Tn2MgaTP5B���blcXwtWmVB8Xkzv��� 3 | VpmOg5d6Ya��� zryjRgkY3B9��� 4 | fYw79uPHmN��� 5 | qECowRfgz0��� QqgioH4rseg -------------------------------------------------------------------------------- /litt/test/testdata/v2/test/segments/2.keys: -------------------------------------------------------------------------------- 1 | ���uQxQ25apaahwztuOzNi���������� 2 | ��� 3 | XxAUWO6zyJ������������ lWQkLUVEFMS������������� 4 | NRrxErIRM4������������� UFjhyw212E1HB��������� ���j0FvUY2kdcFehwSFTPU��������� ���K3LPe7EsYmzmZfmJSr������%��� ���UxtCua2isEaZAuCEM1������%������C8kiIIMWffu5UH���������� ���EdLROPjF0lrQR5Y������!��� 5 | ��� 8G9r4r7hKZs������/��� ���iHCadisZ2d4Lhh������4��� 6 | ��� azDFe3GvhnR������>��� 7 | ���2nk7LDEAIiP17i������B������ MfA1l81VnHH������L��� 8 | ���4plod7WQcLypxeJ24B4��������� ���dUVvq2B95CkIOHn������Z��� -------------------------------------------------------------------------------- /litt/test/testdata/v2/test/segments/2.metadata: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Layr-Labs/eigenda/9192afc4f1207c444d00fdf838cf90f87ee07b26/litt/test/testdata/v2/test/segments/2.metadata -------------------------------------------------------------------------------- /litt/test/testdata/v2/test/segments/3-0.values: -------------------------------------------------------------------------------- 1 | ���Al7tASqhEtUxwv8O8���2H41w79yXlFcxg��� ontvK6EElNxUt��� 2 | BmAwd2EvHw��� ZuvhlCcIRKcdn��� 3 | 67hj2DdNr8 -------------------------------------------------------------------------------- /litt/test/testdata/v2/test/segments/3-1.values: -------------------------------------------------------------------------------- 1 | ���kDUv68Hm807FEDCj��� dCXgS4SlWnmo���w4XuLp12Gg6pWll���26b4nHzUbnFbragc6D -------------------------------------------------------------------------------- /litt/test/testdata/v2/test/segments/3-2.values: -------------------------------------------------------------------------------- 1 | ��� 2 | UXtbSmjYPR���74ndgZk9ymMxhn0spv���KJ9lMw28tR3i5CzSOe���fXVDjf4H3LAPZo -------------------------------------------------------------------------------- /litt/test/testdata/v2/test/segments/3-3.values: -------------------------------------------------------------------------------- 1 | ���7dvQROKGAjCFfEHmHT��� 2 | 0K4RIpQbBU��� uhI9oNwGZvOR��� QQZ9cqPEq2VVR��� 3 | D4MBDXATSN -------------------------------------------------------------------------------- /litt/test/testdata/v2/test/segments/3.keys: -------------------------------------------------------------------------------- 1 | ���TejKR8aotSlTBW78Mt������������� 2S3X8sDLwDNk������������� bK6ShP3Ji9FN��������� ��� 2 | sg7u1aDylz������$������ kkVYsbOBrIhrm���������� 3 | ���KYL5i7mIx6I95dO0������������ fycSvFVXdL7�������������Y21Q4luB2YR9tkH������������7PTApk1JZnegET��������� 4 | ��� DQXDdUJvMijK������$������ fZLvo7jDSSlWP������$��� ���aQ0Y9rb1UisYU03FW������'��� ��� ZEeVJZTz6372d������8��� 5 | ���7Lw3q58svTi4SEAFw������4��� ���j8GIOZUCpcotvNs������E��� 6 | ���b2yGXFlpHJuQwpCaa������F��� ���9v3kYNhyWqpbXKjB������:������lYtAmE5Oe0wYeLTr������7������2qIhPhR0tqr0sf9n������W��� 7 | -------------------------------------------------------------------------------- /litt/test/testdata/v2/test/segments/3.metadata: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Layr-Labs/eigenda/9192afc4f1207c444d00fdf838cf90f87ee07b26/litt/test/testdata/v2/test/segments/3.metadata -------------------------------------------------------------------------------- /litt/test/testdata/v2/test/segments/4-0.values: -------------------------------------------------------------------------------- 1 | ��� 4tndorV1Yltoz��� 2 | pMyKVDIUyz���QOaCQaRS67dCW6��� w2Fkpvl9PAI���3kwfJ9pzGeB67Y���qu1IYzyZXWSrRt0Q7 -------------------------------------------------------------------------------- /litt/test/testdata/v2/test/segments/4-1.values: -------------------------------------------------------------------------------- 1 | ���TuVgbSDFtna5dv��� cTqqONfvuSAtt���R8AEX7ZSVc5Kku -------------------------------------------------------------------------------- /litt/test/testdata/v2/test/segments/4-2.values: -------------------------------------------------------------------------------- 1 | ���CJPo06kCod8H5nl -------------------------------------------------------------------------------- /litt/test/testdata/v2/test/segments/4-3.values: -------------------------------------------------------------------------------- 1 | ���XiM14PxeApDwgCwoWl -------------------------------------------------------------------------------- /litt/test/testdata/v2/test/segments/4.keys: -------------------------------------------------------------------------------- 1 | ���hZ9XON4x4WivPJ3�������������nz7DN3LHVWsjEPVD���������� ��� BUHqRs6XNnk������������� k30CXpbPH7N�������������LMCzFVEVHL8yozVw3X��������� 2 | ��� MHwGBaYMRtPVX��������� ��� UMlCE2OHHYREl������������ dysi8hDsKj8FF������1��� ���qB8FM7KKVM192bW7c������#������9OIQkcyEZ4V0hgJT������@������ sX3VM3pdWuTN������R��� -------------------------------------------------------------------------------- /litt/test/testdata/v2/test/segments/4.metadata: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Layr-Labs/eigenda/9192afc4f1207c444d00fdf838cf90f87ee07b26/litt/test/testdata/v2/test/segments/4.metadata -------------------------------------------------------------------------------- /litt/test/testdata/v2/test/segments/5-0.values: -------------------------------------------------------------------------------- 1 | ��� rIea0vLsQnLpL���ofNCxSlZx44UPkG8C04���ro7MlUTDJt3yCG4I9x��� 5P1OmVO3hI1PI��� t3zE0G6XVVG���6xevs3LFY58gxg -------------------------------------------------------------------------------- /litt/test/testdata/v2/test/segments/5-1.values: -------------------------------------------------------------------------------- 1 | ��� 24ptxcYqnwu���26FYmPjkYs51nh98 -------------------------------------------------------------------------------- /litt/test/testdata/v2/test/segments/5-2.values: -------------------------------------------------------------------------------- 1 | ���Arky8MofGkvEhFNc -------------------------------------------------------------------------------- /litt/test/testdata/v2/test/segments/5-3.values: -------------------------------------------------------------------------------- 1 | ���428u9CE6zZlQoWG��� syZQNyr47tVH4 -------------------------------------------------------------------------------- /litt/test/testdata/v2/test/segments/5.keys: -------------------------------------------------------------------------------- 1 | ���c2D85oqCiSFv344vw���������� ��� n64zlB9gKtk������������� 2 | 6B1wwUMjTF�������������zmNLDGiOsX0zzLxgqx���������� ��� R12vsDgE9vHSh������������C3ZqqO4cenvQhUXr5������(������QWGu2AnfcifYECejE������������U2E9LMOhu0uY1DL������>��� ���x5yJoUs8wOwkiiiao��������� ���OGfnB7QR4eQaatXwP������O��� ��� 3 | 4aEyphJuc5������^��� -------------------------------------------------------------------------------- /litt/test/testdata/v2/test/segments/5.metadata: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Layr-Labs/eigenda/9192afc4f1207c444d00fdf838cf90f87ee07b26/litt/test/testdata/v2/test/segments/5.metadata -------------------------------------------------------------------------------- /litt/test/testdata/v2/test/segments/6-0.values: -------------------------------------------------------------------------------- 1 | ���6PpFUoLqEtg5QLPf7Q��� 3W9GuwG3XH0���AtkhY6eBDwJjPC9Yq0���zEpiTYqMnM4AEpQecs���4kD25VKJGYTJXNScjKI -------------------------------------------------------------------------------- /litt/test/testdata/v2/test/segments/6-1.values: -------------------------------------------------------------------------------- 1 | ���5qDf9Tg08OHwOyrbV��� vxwc3n4trq3D���4TGH4FzHWSUn5oc���NtCNQZAEuJizQhXXL -------------------------------------------------------------------------------- /litt/test/testdata/v2/test/segments/6-2.values: -------------------------------------------------------------------------------- 1 | ���JLZ1yjpuYQXFRsG -------------------------------------------------------------------------------- /litt/test/testdata/v2/test/segments/6-3.values: -------------------------------------------------------------------------------- 1 | ���zol4hrMcjKh4wXBW0X4��� i1BYGFSfM3P��� QH2dqRdzH7Vr -------------------------------------------------------------------------------- /litt/test/testdata/v2/test/segments/6.keys: -------------------------------------------------------------------------------- 1 | ��� 4Upqz2PKSR1�������������zO3XDUKdmFWhzwL8�������������Z3IErKLZrStej27������������� eHhgOVn7XZBvp��������� ���KnHZhDP4EezmNcH6waF������������� 2VFfY7yWW5cEs��������� ���iMV7t0BLFhp8WDt3z������%������ ivHrCBthr8qu��������� ���jrDRPJ1uXPLeJxwbDdp������%������ Bx0ARO4F4BSg������8������ KC9ljchlpJGC������&��� ���Cl74jcT7McogOuI������;������ 2 | Xg9t7f0x9F������Q��� -------------------------------------------------------------------------------- /litt/test/testdata/v2/test/segments/6.metadata: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Layr-Labs/eigenda/9192afc4f1207c444d00fdf838cf90f87ee07b26/litt/test/testdata/v2/test/segments/6.metadata -------------------------------------------------------------------------------- /litt/test/testdata/v2/test/segments/7-0.values: -------------------------------------------------------------------------------- 1 | ���oSNhtpEtRb48ntgPkhL���6vZh6B840MN8W8Edx��� 2 | vaPjmDx1lP -------------------------------------------------------------------------------- /litt/test/testdata/v2/test/segments/7-1.values: -------------------------------------------------------------------------------- 1 | ���ToPJqT4cHpuK7j7oHs -------------------------------------------------------------------------------- /litt/test/testdata/v2/test/segments/7-2.values: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Layr-Labs/eigenda/9192afc4f1207c444d00fdf838cf90f87ee07b26/litt/test/testdata/v2/test/segments/7-2.values -------------------------------------------------------------------------------- /litt/test/testdata/v2/test/segments/7-3.values: -------------------------------------------------------------------------------- 1 | ��� KcMnVtYPwgcqT���cbBr5XwaDgyduz7lF -------------------------------------------------------------------------------- /litt/test/testdata/v2/test/segments/7.keys: -------------------------------------------------------------------------------- 1 | ���nSlaWA77r6Dqbl3Lyv���������� ��� 2 | S7MOxfceWW������������� LcUMjv2DlnS������������dNmMpVGPQpUkcUE������,��� 3 | ���2WvlDWvByFAjHGO5������������� 4KcWZuzvlSMI��������� -------------------------------------------------------------------------------- /litt/test/testdata/v2/test/segments/7.metadata: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Layr-Labs/eigenda/9192afc4f1207c444d00fdf838cf90f87ee07b26/litt/test/testdata/v2/test/segments/7.metadata -------------------------------------------------------------------------------- /litt/test/testdata/v2/test/table.metadata: -------------------------------------------------------------------------------- 1 | ��������������� -------------------------------------------------------------------------------- /litt/types/kv_pair.go: -------------------------------------------------------------------------------- 1 | package types 2 | 3 | // KVPair represents a key-value pair. 4 | type KVPair struct { 5 | // Key is the key. 6 | Key []byte 7 | // Value is the value. 8 | Value []byte 9 | } 10 | -------------------------------------------------------------------------------- /litt/types/scoped_key.go: -------------------------------------------------------------------------------- 1 | package types 2 | 3 | // ScopedKey is a key, plus additional information about the value associated with the key. 4 | type ScopedKey struct { 5 | // A key in the DB. 6 | Key []byte 7 | // The location where the value associated with the key is stored. 8 | Address Address 9 | // The length of the value associated with the key. 10 | ValueSize uint32 11 | } 12 | -------------------------------------------------------------------------------- /litt/util/unsafe_string.go: -------------------------------------------------------------------------------- 1 | package util 2 | 3 | import "unsafe" 4 | 5 | // UnsafeBytesToString converts a byte slice to a string without copying the data. 6 | // Note that once converted in this way, it is not safe to modify the byte slice for any reason. 7 | func UnsafeBytesToString(b []byte) string { 8 | if len(b) == 0 { 9 | return "" 10 | } 11 | return unsafe.String(&b[0], len(b)) 12 | } 13 | -------------------------------------------------------------------------------- /mise.toml: -------------------------------------------------------------------------------- 1 | [tools] 2 | # Core Dependencies 3 | go = "1.21" 4 | 5 | # Tooling Dependencies 6 | "go:github.com/golangci/golangci-lint/cmd/golangci-lint" = "1.60.3" 7 | "go:github.com/ethereum/go-ethereum/cmd/abigen" = "v1.14.0" 8 | # Belive yarn is needed for foundry deps (see contracts/remappings.txt) and subgraph stuff. 9 | # TODO: document exactly why these are needed. 10 | node = "20.18.1" 11 | yarn = "1.22.22" 12 | 13 | # Forge Dependencies 14 | forge = "v1.0.0" 15 | cast = "v1.0.0" 16 | 17 | [alias] 18 | forge = "ubi:foundry-rs/foundry[exe=forge]" 19 | cast = "ubi:foundry-rs/foundry[exe=cast]" 20 | yarn = "https://github.com/mise-plugins/mise-yarn" -------------------------------------------------------------------------------- /node/.gitignore: -------------------------------------------------------------------------------- 1 | grpc/tests/ 2 | log 3 | -------------------------------------------------------------------------------- /node/cmd/resources/nginx-ec2.conf: -------------------------------------------------------------------------------- 1 | limit_req_zone $binary_remote_addr zone=ip:10m rate=${REQUEST_LIMIT}; 2 | 3 | server { 4 | listen ${NODE_DISPERSAL_PORT}; 5 | 6 | http2 on; 7 | 8 | location / { 9 | allow ${NAT_GATEWAY_IP}; 10 | deny all; # Deny everyone else 11 | 12 | grpc_pass grpc://${NODE_HOST}:${NODE_INTERNAL_DISPERSAL_PORT}; 13 | } 14 | } 15 | 16 | server { 17 | listen ${NODE_RETRIEVAL_PORT}; 18 | 19 | http2 on; 20 | 21 | location / { 22 | limit_req zone=ip burst=${BURST_LIMIT} nodelay; 23 | 24 | grpc_set_header X-Real-IP $remote_addr; 25 | 26 | grpc_pass grpc://${NODE_HOST}:${NODE_INTERNAL_RETRIEVAL_PORT}; 27 | } 28 | } -------------------------------------------------------------------------------- /node/cmd/resources/nginx-local.conf: -------------------------------------------------------------------------------- 1 | limit_req_zone $binary_remote_addr zone=ip:10m rate=${REQUEST_LIMIT}; 2 | 3 | server { 4 | listen ${NODE_DISPERSAL_PORT}; 5 | 6 | http2 on; 7 | 8 | location / { 9 | grpc_pass grpc://${NODE_HOST}:${NODE_INTERNAL_DISPERSAL_PORT}; 10 | } 11 | } 12 | 13 | server { 14 | listen ${NODE_RETRIEVAL_PORT}; 15 | 16 | http2 on; 17 | 18 | location / { 19 | limit_req zone=ip burst=${BURST_LIMIT} nodelay; 20 | 21 | proxy_set_header X-Real-IP $binary_remote_addr; 22 | 23 | grpc_pass grpc://${NODE_HOST}:${NODE_INTERNAL_RETRIEVAL_PORT}; 24 | } 25 | } 26 | -------------------------------------------------------------------------------- /node/errors.go: -------------------------------------------------------------------------------- 1 | package node 2 | 3 | import ( 4 | "errors" 5 | ) 6 | 7 | var ( 8 | ErrKeyAlreadyExists = errors.New("commit already exists as key in levelDB") 9 | ErrKeyNotFound = errors.New("commit not found in levelDB") 10 | ErrKeyExpired = errors.New("commit is expired") 11 | ErrKeyNotFoundOrExpired = errors.New("data is either expired or not found") 12 | ) 13 | -------------------------------------------------------------------------------- /node/mock/.keep: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Layr-Labs/eigenda/9192afc4f1207c444d00fdf838cf90f87ee07b26/node/mock/.keep -------------------------------------------------------------------------------- /node/mock/churner_client.go: -------------------------------------------------------------------------------- 1 | package mock 2 | 3 | import ( 4 | "context" 5 | 6 | churnerpb "github.com/Layr-Labs/eigenda/api/grpc/churner" 7 | "github.com/Layr-Labs/eigenda/core" 8 | "github.com/Layr-Labs/eigenda/node" 9 | blssigner "github.com/Layr-Labs/eigensdk-go/signer/bls" 10 | "github.com/stretchr/testify/mock" 11 | ) 12 | 13 | type ChurnerClient struct { 14 | mock.Mock 15 | } 16 | 17 | var _ node.ChurnerClient = (*ChurnerClient)(nil) 18 | 19 | func (c *ChurnerClient) Churn(ctx context.Context, operatorAddress string, signer blssigner.Signer, quorumIDs []core.QuorumID) (*churnerpb.ChurnReply, error) { 20 | args := c.Called() 21 | var reply *churnerpb.ChurnReply 22 | if args.Get(0) != nil { 23 | reply = (args.Get(0)).(*churnerpb.ChurnReply) 24 | } 25 | 26 | var err error 27 | if args.Get(1) != nil { 28 | err = (args.Get(1)).(error) 29 | } 30 | return reply, err 31 | } 32 | -------------------------------------------------------------------------------- /node/plugin/utils.go: -------------------------------------------------------------------------------- 1 | package plugin 2 | 3 | import ( 4 | "fmt" 5 | "os" 6 | 7 | "github.com/ethereum/go-ethereum/accounts/keystore" 8 | "github.com/ethereum/go-ethereum/crypto" 9 | ) 10 | 11 | // Returns the decrypted ECDSA private key from the given file. 12 | func GetECDSAPrivateKey(keyFile string, password string) (*keystore.Key, *string, error) { 13 | keyContents, err := os.ReadFile(keyFile) 14 | if err != nil { 15 | return nil, nil, err 16 | } 17 | sk, err := keystore.DecryptKey(keyContents, password) 18 | if err != nil { 19 | return nil, nil, err 20 | } 21 | privateKey := fmt.Sprintf("%x", crypto.FromECDSA(sk.PrivateKey)) 22 | return sk, &privateKey, nil 23 | } 24 | -------------------------------------------------------------------------------- /node/version.go: -------------------------------------------------------------------------------- 1 | package node 2 | 3 | var ( 4 | SemVer = ">=0.9.0-rc.1" 5 | GitCommit = "" 6 | GitDate = "" 7 | ) 8 | -------------------------------------------------------------------------------- /operators/churner/Makefile: -------------------------------------------------------------------------------- 1 | clean: 2 | rm -rf ./bin 3 | 4 | build: clean 5 | # cd .. && make protoc 6 | go mod tidy 7 | go build -o ./bin/server ./cmd -------------------------------------------------------------------------------- /prometheus.yml: -------------------------------------------------------------------------------- 1 | global: 2 | scrape_interval: 15s 3 | evaluation_interval: 15s 4 | 5 | scrape_configs: 6 | - job_name: "eigenda" 7 | static_configs: 8 | - targets: ["localhost:9100"] 9 | -------------------------------------------------------------------------------- /relay/Makefile: -------------------------------------------------------------------------------- 1 | SHELL := /bin/bash 2 | 3 | # Clean the light node build files. 4 | clean: 5 | rm -rf ./bin 6 | 7 | # Build the light node. 8 | build: clean 9 | go mod tidy 10 | go build -o ./bin/relay ./cmd 11 | 12 | # Run the light node. 13 | run: build 14 | ./bin/relay 15 | -------------------------------------------------------------------------------- /relay/auth/request_signing.go: -------------------------------------------------------------------------------- 1 | package auth 2 | 3 | import ( 4 | "fmt" 5 | 6 | pb "github.com/Layr-Labs/eigenda/api/grpc/relay" 7 | "github.com/Layr-Labs/eigenda/api/hashing" 8 | "github.com/Layr-Labs/eigenda/core" 9 | ) 10 | 11 | // SignGetChunksRequest signs the given GetChunksRequest with the given private key. Does not 12 | // write the signature into the request. 13 | func SignGetChunksRequest(keys *core.KeyPair, request *pb.GetChunksRequest) ([]byte, error) { 14 | hash, err := hashing.HashGetChunksRequest(request) 15 | if err != nil { 16 | return nil, fmt.Errorf("failed to hash request: %w", err) 17 | } 18 | signature := keys.SignMessage(([32]byte)(hash)) 19 | return signature.G1Point.Serialize(), nil 20 | } 21 | -------------------------------------------------------------------------------- /relay/chunkstore/config.go: -------------------------------------------------------------------------------- 1 | package chunkstore 2 | 3 | type Config struct { 4 | BucketName string 5 | } 6 | -------------------------------------------------------------------------------- /resources/srs/README.md: -------------------------------------------------------------------------------- 1 | # Structured Reference String (SRS) Files 2 | 3 | This directory contains the Structured Reference String (SRS) files required for KZG commitments and proofs in EigenDA. 4 | 5 | For complete documentation on downloading, generating, and verifying SRS files, please refer to the 6 | [SRS Utilities README](/tools/srs-utils/README.md). 7 | -------------------------------------------------------------------------------- /resources/srs/g1.point: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Layr-Labs/eigenda/9192afc4f1207c444d00fdf838cf90f87ee07b26/resources/srs/g1.point -------------------------------------------------------------------------------- /resources/srs/g2.point: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Layr-Labs/eigenda/9192afc4f1207c444d00fdf838cf90f87ee07b26/resources/srs/g2.point -------------------------------------------------------------------------------- /resources/srs/g2.trailing.point: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Layr-Labs/eigenda/9192afc4f1207c444d00fdf838cf90f87ee07b26/resources/srs/g2.trailing.point -------------------------------------------------------------------------------- /resources/srs/srs-files-16777216.sha256: -------------------------------------------------------------------------------- 1 | # SRS files hashes for blob size 16777216 bytes 2 | # Generated on 2025-04-15 19:21:06 UTC 3 | # Format: SHA256 (filename) 4 | 5 | 8f18b9c04ed4bddcdb73001fb693703197328cecabdfa9025f647410b0c50d7f g1.point 6 | a6942684aa751b4ec7873e2edb4660ac5c4516adb3b310441802cc0d489f645a g2.point 7 | 78fad17d74d28cecdb7f826fdd72dee08bdbe1e8ad66f2b24fcf2fc140176788 g2.trailing.point 8 | -------------------------------------------------------------------------------- /retriever/Makefile: -------------------------------------------------------------------------------- 1 | clean: 2 | rm -rf ./bin 3 | 4 | build: clean 5 | # cd .. && make protoc 6 | go mod tidy 7 | go build -o ./bin/server ./cmd 8 | 9 | run: build 10 | DA_RETRIEVER_HOSTNAME=localhost \ 11 | DA_RETRIEVER_GRPC_PORT=50051 \ 12 | DA_RETRIEVER_TIMEOUT=10s \ 13 | ./bin/server \ 14 | --retriever.hostname localhost \ 15 | --retriever.grpc-port 32011 \ 16 | --retriever.timeout 10s \ 17 | --retriever.bls-operator-state-retriever 0x9d4454B023096f34B160D6B654540c56A1F81688 \ 18 | --retriever.eigenda-service-manager 0x67d269191c92Caf3cD7723F116c85e6E9bf55933 \ 19 | --kzg.g1-path ../inabox/resources/kzg/g1.point \ 20 | --kzg.g2-path ../inabox/resources/kzg/g2.point \ 21 | --kzg.cache-path ../inabox/resources/kzg/SRSTables \ 22 | --kzg.srs-order 3000 \ 23 | --chain.rpc http://localhost:8545 \ 24 | --chain.private-key="" -------------------------------------------------------------------------------- /retriever/cmd/.keep: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Layr-Labs/eigenda/9192afc4f1207c444d00fdf838cf90f87ee07b26/retriever/cmd/.keep -------------------------------------------------------------------------------- /retriever/mock/chain_client.go: -------------------------------------------------------------------------------- 1 | package mock 2 | 3 | import ( 4 | "context" 5 | "math/big" 6 | 7 | binding "github.com/Layr-Labs/eigenda/contracts/bindings/EigenDAServiceManager" 8 | "github.com/Layr-Labs/eigenda/retriever/eth" 9 | gcommon "github.com/ethereum/go-ethereum/common" 10 | "github.com/stretchr/testify/mock" 11 | ) 12 | 13 | type MockChainClient struct { 14 | mock.Mock 15 | } 16 | 17 | var _ eth.ChainClient = (*MockChainClient)(nil) 18 | 19 | func NewMockChainClient() *MockChainClient { 20 | return &MockChainClient{} 21 | } 22 | 23 | func (c *MockChainClient) FetchBatchHeader(ctx context.Context, serviceManagerAddress gcommon.Address, batchHeaderHash []byte, fromBlock *big.Int, toBlock *big.Int) (*binding.EigenDATypesV1BatchHeader, error) { 24 | args := c.Called() 25 | return args.Get(0).(*binding.EigenDATypesV1BatchHeader), args.Error(1) 26 | } 27 | -------------------------------------------------------------------------------- /subgraphs/.gitignore: -------------------------------------------------------------------------------- 1 | **/node_modules 2 | **/generated 3 | **/tests/.bin 4 | **/tests/*.json 5 | **/build 6 | 7 | eigenda-operator-state/networks.json 8 | eigenda-operator-state/subgraph.yaml 9 | eigenda-operator-state/Makefile 10 | 11 | eigenda-batch-metadata/networks.json 12 | eigenda-batch-metadata/subgraph.yaml 13 | eigenda-batch-metadata/Makefile 14 | -------------------------------------------------------------------------------- /subgraphs/constants.ts: -------------------------------------------------------------------------------- 1 | import { Address, Bytes } from "@graphprotocol/graph-ts"; 2 | 3 | export const ZERO_ADDRESS = Address.fromHexString("0x0000000000000000000000000000000000000000") 4 | export const ZERO_ADDRESS_BYTES = Bytes.fromHexString("0x0000000000000000000000000000000000000000"); 5 | export const ZERO_ADDRESS_HEX_STRING = "0x0000000000000000000000000000000000000000"; -------------------------------------------------------------------------------- /subgraphs/eigenda-batch-metadata/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "eigenda-batch-metadata", 3 | "license": "UNLICENSED", 4 | "scripts": { 5 | "codegen": "graph codegen", 6 | "build": "graph build", 7 | "deploy": "graph deploy --node https://api.thegraph.com/deploy/ Layr-Labs/eigenda-batch-metadata", 8 | "create-local": "graph create --node http://localhost:8020/ Layr-Labs/eigenda-batch-metadata", 9 | "remove-local": "graph remove --node http://localhost:8020/ Layr-Labs/eigenda-batch-metadata", 10 | "deploy-local": "graph deploy --node http://localhost:8020/ --ipfs http://localhost:5001 Layr-Labs/eigenda-batch-metadata", 11 | "test": "graph test" 12 | }, 13 | "devDependencies": { 14 | "@graphprotocol/graph-cli": "^0.96.0", 15 | "@graphprotocol/graph-ts": "^0.38.0", 16 | "matchstick-as": "^0.6.0" 17 | } 18 | } 19 | -------------------------------------------------------------------------------- /subgraphs/eigenda-operator-state/VERSION: -------------------------------------------------------------------------------- 1 | v0.7.0 2 | -------------------------------------------------------------------------------- /subgraphs/eigenda-operator-state/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "eigenda-operator-state", 3 | "license": "UNLICENSED", 4 | "scripts": { 5 | "codegen": "graph codegen", 6 | "build": "graph build", 7 | "deploy": "graph deploy --node https://api.thegraph.com/deploy/ Layr-Labs/eigenda-operator-state", 8 | "create-local": "graph create --node http://localhost:8020/ Layr-Labs/eigenda-operator-state", 9 | "remove-local": "graph remove --node http://localhost:8020/ Layr-Labs/eigenda-operator-state", 10 | "deploy-local": "graph deploy --node http://localhost:8020/ --ipfs http://localhost:5001 Layr-Labs/eigenda-operator-state", 11 | "test": "graph test" 12 | }, 13 | "devDependencies": { 14 | "@graphprotocol/graph-cli": "^0.96.0", 15 | "@graphprotocol/graph-ts": "^0.38.0", 16 | "matchstick-as": "^0.6.0" 17 | } 18 | } 19 | -------------------------------------------------------------------------------- /subgraphs/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "eigenda-subgraphs", 3 | "license": "UNLICENSED", 4 | "dependencies": { 5 | "@graphprotocol/graph-cli": "0.96.0", 6 | "@graphprotocol/graph-ts": "0.38.0" 7 | }, 8 | "devDependencies": { "matchstick-as": "0.6.0" } 9 | } 10 | -------------------------------------------------------------------------------- /subgraphs/tsconfig.json: -------------------------------------------------------------------------------- 1 | { 2 | "extends": "@graphprotocol/graph-ts/types/tsconfig.base.json", 3 | "include": ["./*/src"] 4 | } 5 | -------------------------------------------------------------------------------- /test.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | 3 | result=0 4 | function tearDown { 5 | docker stop localstack-test 6 | exit $result 7 | } 8 | trap tearDown EXIT 9 | 10 | go run ./inabox/deploy/cmd -localstack-port=4570 -deploy-resources=false localstack 11 | go clean -testcache 12 | # expand all arguments to script at the end of this line 13 | LOCALSTACK_PORT=4570 DEPLOY_LOCALSTACK=false CI=true go test -short ./... "$@" 14 | result=$? 15 | -------------------------------------------------------------------------------- /test/v2/Makefile: -------------------------------------------------------------------------------- 1 | clean: 2 | rm -rf bin 2>/dev/null || true 3 | 4 | build: clean 5 | go build -o bin/load load/main/load_main.go 6 | 7 | test: 8 | cd correctness && go test 9 | 10 | generate-load: build 11 | ./bin/load $(ARGS) 12 | -------------------------------------------------------------------------------- /test/v2/client/util.go: -------------------------------------------------------------------------------- 1 | package client 2 | 3 | import ( 4 | "fmt" 5 | "os" 6 | "strings" 7 | ) 8 | 9 | // ResolveTildeInPath resolves the tilde (~) in the given path to the user's home directory. 10 | func ResolveTildeInPath(path string) (string, error) { 11 | homeDir, err := os.UserHomeDir() 12 | if err != nil { 13 | return "", fmt.Errorf("failed to get user home directory: %w", err) 14 | } 15 | 16 | return strings.Replace(path, "~", homeDir, 1), nil 17 | } 18 | -------------------------------------------------------------------------------- /test/v2/config/load/100kb_s-1mb-3x.json: -------------------------------------------------------------------------------- 1 | { 2 | "MBPerSecond": 0.1, 3 | "AverageBlobSizeMB": 1, 4 | "BlobSizeStdDevMB": 0.25, 5 | "RelayReadAmplification": 3, 6 | "ValidatorReadAmplification": 3, 7 | "MaxParallelism": 100, 8 | "DispersalTimeout": 300 9 | } -------------------------------------------------------------------------------- /test/v2/config/load/1mb_s-1mb-0x.json: -------------------------------------------------------------------------------- 1 | { 2 | "MBPerSecond": 1, 3 | "AverageBlobSizeMB": 1, 4 | "BlobSizeStdDevMB": 0.25, 5 | "RelayReadAmplification": 0, 6 | "ValidatorReadAmplification": 0, 7 | "MaxParallelism": 100, 8 | "DispersalTimeout": 300 9 | } -------------------------------------------------------------------------------- /test/v2/config/load/3mb_s-1mb-0x.json: -------------------------------------------------------------------------------- 1 | { 2 | "MBPerSecond": 3, 3 | "AverageBlobSizeMB": 1, 4 | "BlobSizeStdDevMB": 0.25, 5 | "RelayReadAmplification": 0, 6 | "ValidatorReadAmplification": 0, 7 | "MaxParallelism": 100, 8 | "DispersalTimeout": 300 9 | } -------------------------------------------------------------------------------- /tools/ejections/Makefile: -------------------------------------------------------------------------------- 1 | build: clean 2 | go mod tidy 3 | go build -o ./bin/ejections ./cmd 4 | 5 | clean: 6 | rm -rf ./bin 7 | 8 | run: build 9 | ./bin/ejections --help 10 | -------------------------------------------------------------------------------- /tools/kzgpad/Makefile: -------------------------------------------------------------------------------- 1 | clean: 2 | rm -rf ./bin 3 | 4 | build: clean 5 | go mod tidy 6 | go build -o ./bin/kzgpad . -------------------------------------------------------------------------------- /tools/quorumscan/Makefile: -------------------------------------------------------------------------------- 1 | build: clean 2 | go mod tidy 3 | go build -o ./bin/quorumscan ./cmd 4 | 5 | clean: 6 | rm -rf ./bin 7 | 8 | lint: 9 | golangci-lint run ./... 10 | 11 | run: build 12 | ./bin/quorumscan --help 13 | -------------------------------------------------------------------------------- /tools/semverscan/Makefile: -------------------------------------------------------------------------------- 1 | build: clean 2 | go mod tidy 3 | go build -o ./bin/semverscan ./cmd 4 | 5 | clean: 6 | rm -rf ./bin 7 | 8 | run: build 9 | ./bin/semverscan --help 10 | -------------------------------------------------------------------------------- /tools/srs-utils/parser/params.go: -------------------------------------------------------------------------------- 1 | package parser 2 | 3 | type Params struct { 4 | NumPoint uint64 5 | NumTotalG1Points uint64 6 | G1Size uint64 7 | G2Size uint64 8 | 9 | G1StartByte uint64 10 | G2StartByte uint64 11 | } 12 | 13 | func (p *Params) SetG1StartBytePos(startPoint uint64) { 14 | p.G1StartByte = startPoint*p.G1Size + OffsetToG1 15 | } 16 | 17 | func (p *Params) SetG2StartBytePos(startPoint uint64) { 18 | p.G2StartByte = startPoint*p.G2Size + OffsetToG1 + p.NumTotalG1Points*p.G1Size 19 | } 20 | 21 | func (p *Params) GetG1EndBytePos() uint64 { 22 | return p.G1StartByte + uint64(p.NumPoint*p.G1Size) 23 | } 24 | 25 | func (p *Params) GetG2EndBytePos() uint64 { 26 | return p.G2StartByte + uint64(p.NumPoint*p.G2Size) 27 | } 28 | -------------------------------------------------------------------------------- /tools/srs-utils/resources/challenge_0085_with_4_g1_points: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Layr-Labs/eigenda/9192afc4f1207c444d00fdf838cf90f87ee07b26/tools/srs-utils/resources/challenge_0085_with_4_g1_points -------------------------------------------------------------------------------- /tools/traffic/Makefile: -------------------------------------------------------------------------------- 1 | clean: 2 | rm -rf ./bin 3 | 4 | build: clean 5 | # cd ../.. && make protoc 6 | go mod tidy 7 | go build -o ./bin/server ./cmd 8 | 9 | run: build 10 | TRAFFIC_GENERATOR_HOSTNAME=localhost \ 11 | TRAFFIC_GENERATOR_GRPC_PORT=32001 \ 12 | TRAFFIC_GENERATOR_TIMEOUT=10s \ 13 | TRAFFIC_GENERATOR_NUM_INSTANCES=1 \ 14 | TRAFFIC_GENERATOR_REQUEST_INTERVAL=1s \ 15 | TRAFFIC_GENERATOR_DATA_SIZE=1000 \ 16 | TRAFFIC_GENERATOR_RANDOMIZE_BLOBS=true \ 17 | ./bin/server 18 | --------------------------------------------------------------------------------