From 1bd911ca0990ac84dbc0d890a8225b5e995210d0 Mon Sep 17 00:00:00 2001 From: Ian Shim Date: Tue, 21 Jan 2025 17:57:40 -0800 Subject: [PATCH] rename structs --- api/clients/v2/disperser_client.go | 6 +- api/clients/v2/verification/blob_verifier.go | 4 +- api/docs/common_v2.html | 18 +- api/docs/common_v2.md | 4 +- api/docs/disperser_v2.html | 89 ++-- api/docs/disperser_v2.md | 39 +- api/docs/eigenda-protos.html | 107 ++--- api/docs/eigenda-protos.md | 43 +- api/grpc/common/v2/common_v2.pb.go | 101 ++--- api/grpc/disperser/v2/disperser_v2.pb.go | 390 +++++++++--------- api/hashing/node_hashing.go | 4 +- api/proto/common/v2/common_v2.proto | 8 +- api/proto/disperser/v2/disperser_v2.proto | 16 +- .../bindings/EigenDABlobVerifier/binding.go | 29 +- .../EigenDABlobVerifier/conversion_utils.go | 11 +- .../EigenDADisperserRegistry/binding.go | 2 +- .../bindings/EigenDARelayRegistry/binding.go | 2 +- .../bindings/EigenDAServiceManager/binding.go | 2 +- .../EigenDAThresholdRegistry/binding.go | 2 +- contracts/bindings/MockRollup/binding.go | 2 +- contracts/src/interfaces/IEigenDAStructs.sol | 1 + contracts/src/libraries/EigenDAHasher.sol | 1 + .../test/unit/EigenDABlobVerifierV2Unit.t.sol | 2 + core/auth/v2/auth_test.go | 9 +- core/auth/v2/authenticator.go | 10 +- core/v2/auth.go | 2 +- core/v2/serialization.go | 10 +- core/v2/serialization_test.go | 15 +- core/v2/types.go | 29 +- core/v2/types_test.go | 7 +- disperser/apiserver/disperse_blob_v2.go | 17 +- disperser/apiserver/get_blob_status_v2.go | 30 +- disperser/apiserver/server_v2.go | 4 +- disperser/apiserver/server_v2_test.go | 57 +-- disperser/common/v2/blob.go | 1 + .../v2/blobstore/dynamo_metadata_store.go | 52 +-- .../blobstore/dynamo_metadata_store_test.go | 35 +- disperser/controller/controller_test.go | 1 - disperser/controller/dispatcher.go | 22 +- disperser/controller/dispatcher_metrics.go | 12 +- disperser/controller/dispatcher_test.go | 14 +- disperser/controller/encoding_manager.go | 1 + disperser/dataapi/v2/server_v2.go | 40 +- disperser/dataapi/v2/server_v2_test.go | 24 +- inabox/tests/integration_v2_test.go | 45 +- node/auth/request_signing_test.go | 10 +- node/auth/request_signing_test_utils.go | 6 +- node/mock/testdata.go | 6 +- 48 files changed, 698 insertions(+), 644 deletions(-) diff --git a/api/clients/v2/disperser_client.go b/api/clients/v2/disperser_client.go index e804454232..9713ae0ff4 100644 --- a/api/clients/v2/disperser_client.go +++ b/api/clients/v2/disperser_client.go @@ -194,13 +194,13 @@ func (c *disperserClient) DisperseBlob( if err != nil { return nil, [32]byte{}, fmt.Errorf("error signing blob request: %w", err) } - blobHeader.Signature = sig blobHeaderProto, err := blobHeader.ToProtobuf() if err != nil { return nil, [32]byte{}, fmt.Errorf("error converting blob header to protobuf: %w", err) } request := &disperser_rpc.DisperseBlobRequest{ - Data: data, + Blob: data, + Signature: sig, BlobHeader: blobHeaderProto, } @@ -265,7 +265,7 @@ func (c *disperserClient) GetBlobCommitment(ctx context.Context, data []byte) (* } request := &disperser_rpc.BlobCommitmentRequest{ - Data: data, + Blob: data, } return c.client.GetBlobCommitment(ctx, request) } diff --git a/api/clients/v2/verification/blob_verifier.go b/api/clients/v2/verification/blob_verifier.go index 4dc8d4e06c..b42d0d675c 100644 --- a/api/clients/v2/verification/blob_verifier.go +++ b/api/clients/v2/verification/blob_verifier.go @@ -50,7 +50,7 @@ func (v *BlobVerifier) VerifyBlobV2FromSignedBatch( // to verify that the described blob actually exists in a valid batch. signedBatch *disperser.SignedBatch, // Contains all necessary information about the blob, so that it can be verified. - blobVerificationProof *disperser.BlobVerificationInfo, + blobVerificationProof *disperser.BlobInclusionInfo, ) error { convertedSignedBatch, err := verifierBindings.ConvertSignedBatch(signedBatch) if err != nil { @@ -82,7 +82,7 @@ func (v *BlobVerifier) VerifyBlobV2( // The header of the batch that the blob is contained in batchHeader *commonv2.BatchHeader, // Contains data pertaining to the blob's inclusion in the batch - blobVerificationProof *disperser.BlobVerificationInfo, + blobVerificationProof *disperser.BlobInclusionInfo, // Contains data that can be used to verify that the blob actually exists in the claimed batch nonSignerStakesAndSignature verifierBindings.NonSignerStakesAndSignature, ) error { diff --git a/api/docs/common_v2.html b/api/docs/common_v2.html index 795726c4f7..611868d129 100644 --- a/api/docs/common_v2.html +++ b/api/docs/common_v2.html @@ -296,10 +296,17 @@

BlobCertificate

- relays + signature + bytes + +

signature over keccak hash of the blob_header that can be verified by blob_header.payment_header.account_id

+ + + + relay_keys uint32 repeated -

relays is the list of relays that are in custody of the blob. +

relay_keys is the list of relay keys that are in custody of the blob. The relays custodying the data are chosen by the Disperser to which the DisperseBlob request was submitted. It needs to contain at least 1 relay number. To retrieve a blob from the relay, one can find that relay's URL in the EigenDARelayRegistry contract: @@ -368,13 +375,6 @@

BlobHeader

payments already have unique cumulative_payment values for intentionally unique dispersal requests.

- - signature - bytes - -

signature over keccak hash of the blob_header that can be verified by blob_header.account_id

- - diff --git a/api/docs/common_v2.md b/api/docs/common_v2.md index 11c06c13f4..6a93def8e6 100644 --- a/api/docs/common_v2.md +++ b/api/docs/common_v2.md @@ -65,7 +65,8 @@ Validator nodes eventually sign the blob certificate once they are in custody of | Field | Type | Label | Description | | ----- | ---- | ----- | ----------- | | blob_header | [BlobHeader](#common-v2-BlobHeader) | | blob_header contains data about the blob. | -| relays | [uint32](#uint32) | repeated | relays is the list of relays that are in custody of the blob. The relays custodying the data are chosen by the Disperser to which the DisperseBlob request was submitted. It needs to contain at least 1 relay number. To retrieve a blob from the relay, one can find that relay's URL in the EigenDARelayRegistry contract: https://github.com/Layr-Labs/eigenda/blob/master/contracts/src/core/EigenDARelayRegistry.sol | +| signature | [bytes](#bytes) | | signature over keccak hash of the blob_header that can be verified by blob_header.payment_header.account_id | +| relay_keys | [uint32](#uint32) | repeated | relay_keys is the list of relay keys that are in custody of the blob. The relays custodying the data are chosen by the Disperser to which the DisperseBlob request was submitted. It needs to contain at least 1 relay number. To retrieve a blob from the relay, one can find that relay's URL in the EigenDARelayRegistry contract: https://github.com/Layr-Labs/eigenda/blob/master/contracts/src/core/EigenDARelayRegistry.sol | @@ -87,7 +88,6 @@ The following quorums are currently required: - 0: ETH - 1: EIGEN | | commitment | [common.BlobCommitment](#common-BlobCommitment) | | commitment is the KZG commitment to the blob | | payment_header | [PaymentHeader](#common-v2-PaymentHeader) | | payment_header contains payment information for the blob | | salt | [uint32](#uint32) | | salt is used to ensure that the dispersal request is intentionally unique. This is currently only useful for reserved payments when the same blob is submitted multiple times within the same reservation period. On-demand payments already have unique cumulative_payment values for intentionally unique dispersal requests. | -| signature | [bytes](#bytes) | | signature over keccak hash of the blob_header that can be verified by blob_header.account_id | diff --git a/api/docs/disperser_v2.html b/api/docs/disperser_v2.html index cb18f5cd38..8b88e4b9f5 100644 --- a/api/docs/disperser_v2.html +++ b/api/docs/disperser_v2.html @@ -191,15 +191,15 @@

Table of Contents

  • - MBlobStatusReply + MBlobInclusionInfo
  • - MBlobStatusRequest + MBlobStatusReply
  • - MBlobVerificationInfo + MBlobStatusRequest
  • @@ -356,7 +356,7 @@

    BlobCommitmentRequest

    - data + blob bytes

    The blob data to compute the commitment for.

    @@ -369,8 +369,8 @@

    BlobCommitmentRequest

    -

    BlobStatusReply

    -

    BlobStatusReply is the reply to a BlobStatusRequest.

    +

    BlobInclusionInfo

    +

    BlobInclusionInfo is the information needed to verify the inclusion of a blob in a batch.

    @@ -380,25 +380,24 @@

    BlobStatusReply

    - - + + - + - - + + - + - - + + - + @@ -408,8 +407,8 @@

    BlobStatusReply

    -

    BlobStatusRequest

    -

    BlobStatusRequest is used to query the status of a blob.

    +

    BlobStatusReply

    +

    BlobStatusReply is the reply to a BlobStatusRequest.

    statusBlobStatusblob_certificatecommon.v2.BlobCertificate

    The status of the blob.

    signed_batchSignedBatchblob_indexuint32

    The signed batch. Unset if the status is not CERTIFIED.

    blob_index is the index of the blob in the batch

    blob_verification_infoBlobVerificationInfoinclusion_proofbytes

    BlobVerificationInfo is the information needed to verify the inclusion of a blob in a batch. -Unset if the status is not CERTIFIED.

    inclusion_proof is the inclusion proof of the blob in the batch

    @@ -419,10 +418,25 @@

    BlobStatusRequest

    - - + + - + + + + + + + + + + + + + + + @@ -432,8 +446,8 @@

    BlobStatusRequest

    -

    BlobVerificationInfo

    -

    BlobVerificationInfo is the information needed to verify the inclusion of a blob in a batch.

    +

    BlobStatusRequest

    +

    BlobStatusRequest is used to query the status of a blob.

    blob_keybytesstatusBlobStatus

    The unique identifier for the blob.

    The status of the blob.

    signed_batchSignedBatch

    The signed batch. Unset if the status is not CERTIFIED.

    blob_inclusion_infoBlobInclusionInfo

    BlobInclusionInfo is the information needed to verify the inclusion of a blob in a batch. +Unset if the status is not CERTIFIED.

    @@ -443,24 +457,10 @@

    BlobVerificationInfo

    - - - - - - - - - - - - - - - + - + @@ -520,10 +520,10 @@

    DisperseBlobRequest

    - + - + + + + + + +
    blob_certificatecommon.v2.BlobCertificate

    blob_indexuint32

    blob_index is the index of the blob in the batch

    inclusion_proofblob_key bytes

    inclusion_proof is the inclusion proof of the blob in the batch

    The unique identifier for the blob.

    datablob bytes

    The data to be dispersed. +

    The blob to be dispersed. The size of this byte array may be any size as long as it does not exceed the maximum length of 16MiB. (In the future, the 16MiB limit may be increased, but this is not guaranteed to happen.) @@ -546,6 +546,13 @@

    DisperseBlobRequest

    which is dispersed separately.

    signaturebytes

    signature over keccak hash of the blob_header that can be verified by blob_header.payment_header.account_id

    diff --git a/api/docs/disperser_v2.md b/api/docs/disperser_v2.md index 8de1248c82..9bf70fff52 100644 --- a/api/docs/disperser_v2.md +++ b/api/docs/disperser_v2.md @@ -7,9 +7,9 @@ - [Attestation](#disperser-v2-Attestation) - [BlobCommitmentReply](#disperser-v2-BlobCommitmentReply) - [BlobCommitmentRequest](#disperser-v2-BlobCommitmentRequest) + - [BlobInclusionInfo](#disperser-v2-BlobInclusionInfo) - [BlobStatusReply](#disperser-v2-BlobStatusReply) - [BlobStatusRequest](#disperser-v2-BlobStatusRequest) - - [BlobVerificationInfo](#disperser-v2-BlobVerificationInfo) - [DisperseBlobReply](#disperser-v2-DisperseBlobReply) - [DisperseBlobRequest](#disperser-v2-DisperseBlobRequest) - [GetPaymentStateReply](#disperser-v2-GetPaymentStateReply) @@ -78,56 +78,56 @@ This can be used to construct a BlobHeader.commitment. | Field | Type | Label | Description | | ----- | ---- | ----- | ----------- | -| data | [bytes](#bytes) | | The blob data to compute the commitment for. | +| blob | [bytes](#bytes) | | The blob data to compute the commitment for. | - + -### BlobStatusReply -BlobStatusReply is the reply to a BlobStatusRequest. +### BlobInclusionInfo +BlobInclusionInfo is the information needed to verify the inclusion of a blob in a batch. | Field | Type | Label | Description | | ----- | ---- | ----- | ----------- | -| status | [BlobStatus](#disperser-v2-BlobStatus) | | The status of the blob. | -| signed_batch | [SignedBatch](#disperser-v2-SignedBatch) | | The signed batch. Unset if the status is not CERTIFIED. | -| blob_verification_info | [BlobVerificationInfo](#disperser-v2-BlobVerificationInfo) | | BlobVerificationInfo is the information needed to verify the inclusion of a blob in a batch. Unset if the status is not CERTIFIED. | +| blob_certificate | [common.v2.BlobCertificate](#common-v2-BlobCertificate) | | | +| blob_index | [uint32](#uint32) | | blob_index is the index of the blob in the batch | +| inclusion_proof | [bytes](#bytes) | | inclusion_proof is the inclusion proof of the blob in the batch | - + -### BlobStatusRequest -BlobStatusRequest is used to query the status of a blob. +### BlobStatusReply +BlobStatusReply is the reply to a BlobStatusRequest. | Field | Type | Label | Description | | ----- | ---- | ----- | ----------- | -| blob_key | [bytes](#bytes) | | The unique identifier for the blob. | +| status | [BlobStatus](#disperser-v2-BlobStatus) | | The status of the blob. | +| signed_batch | [SignedBatch](#disperser-v2-SignedBatch) | | The signed batch. Unset if the status is not CERTIFIED. | +| blob_inclusion_info | [BlobInclusionInfo](#disperser-v2-BlobInclusionInfo) | | BlobInclusionInfo is the information needed to verify the inclusion of a blob in a batch. Unset if the status is not CERTIFIED. | - + -### BlobVerificationInfo -BlobVerificationInfo is the information needed to verify the inclusion of a blob in a batch. +### BlobStatusRequest +BlobStatusRequest is used to query the status of a blob. | Field | Type | Label | Description | | ----- | ---- | ----- | ----------- | -| blob_certificate | [common.v2.BlobCertificate](#common-v2-BlobCertificate) | | | -| blob_index | [uint32](#uint32) | | blob_index is the index of the blob in the batch | -| inclusion_proof | [bytes](#bytes) | | inclusion_proof is the inclusion proof of the blob in the batch | +| blob_key | [bytes](#bytes) | | The unique identifier for the blob. | @@ -162,7 +162,7 @@ A request to disperse a blob. | Field | Type | Label | Description | | ----- | ---- | ----- | ----------- | -| data | [bytes](#bytes) | | The data to be dispersed. +| blob | [bytes](#bytes) | | The blob to be dispersed. The size of this byte array may be any size as long as it does not exceed the maximum length of 16MiB. (In the future, the 16MiB limit may be increased, but this is not guaranteed to happen.) @@ -170,6 +170,7 @@ Every 32 bytes of data is interpreted as an integer in big endian format where t | blob_header | [common.v2.BlobHeader](#common-v2-BlobHeader) | | The header contains metadata about the blob. This header can be thought of as an "eigenDA tx", in that it plays a purpose similar to an eth_tx to disperse a 4844 blob. Note that a call to DisperseBlob requires the blob and the blobHeader, which is similar to how dispersing a blob to ethereum requires sending a tx whose data contains the hash of the kzg commit of the blob, which is dispersed separately. | +| signature | [bytes](#bytes) | | signature over keccak hash of the blob_header that can be verified by blob_header.payment_header.account_id | diff --git a/api/docs/eigenda-protos.html b/api/docs/eigenda-protos.html index 0bd4fb756d..a58b1400ac 100644 --- a/api/docs/eigenda-protos.html +++ b/api/docs/eigenda-protos.html @@ -355,15 +355,15 @@

    Table of Contents

  • - MBlobStatusReply + MBlobInclusionInfo
  • - MBlobStatusRequest + MBlobStatusReply
  • - MBlobVerificationInfo + MBlobStatusRequest
  • @@ -1052,10 +1052,17 @@

    BlobCertificate

    - relays + signature + bytes + +

    signature over keccak hash of the blob_header that can be verified by blob_header.payment_header.account_id

    + + + + relay_keys uint32 repeated -

    relays is the list of relays that are in custody of the blob. +

    relay_keys is the list of relay keys that are in custody of the blob. The relays custodying the data are chosen by the Disperser to which the DisperseBlob request was submitted. It needs to contain at least 1 relay number. To retrieve a blob from the relay, one can find that relay's URL in the EigenDARelayRegistry contract: @@ -1124,13 +1131,6 @@

    BlobHeader

    payments already have unique cumulative_payment values for intentionally unique dispersal requests.

    - - signature - bytes - -

    signature over keccak hash of the blob_header that can be verified by blob_header.account_id

    - - @@ -2019,7 +2019,7 @@

    BlobCommitmentRequest

    - data + blob bytes

    The blob data to compute the commitment for.

    @@ -2032,8 +2032,8 @@

    BlobCommitmentRequest

    -

    BlobStatusReply

    -

    BlobStatusReply is the reply to a BlobStatusRequest.

    +

    BlobInclusionInfo

    +

    BlobInclusionInfo is the information needed to verify the inclusion of a blob in a batch.

    @@ -2043,25 +2043,24 @@

    BlobStatusReply

    - - + + - + - - + + - + - - + + - + @@ -2071,8 +2070,8 @@

    BlobStatusReply

    -

    BlobStatusRequest

    -

    BlobStatusRequest is used to query the status of a blob.

    +

    BlobStatusReply

    +

    BlobStatusReply is the reply to a BlobStatusRequest.

    statusBlobStatusblob_certificatecommon.v2.BlobCertificate

    The status of the blob.

    signed_batchSignedBatchblob_indexuint32

    The signed batch. Unset if the status is not CERTIFIED.

    blob_index is the index of the blob in the batch

    blob_verification_infoBlobVerificationInfoinclusion_proofbytes

    BlobVerificationInfo is the information needed to verify the inclusion of a blob in a batch. -Unset if the status is not CERTIFIED.

    inclusion_proof is the inclusion proof of the blob in the batch

    @@ -2082,10 +2081,25 @@

    BlobStatusRequest

    - - + + - + + + + + + + + + + + + + + + @@ -2095,8 +2109,8 @@

    BlobStatusRequest

    -

    BlobVerificationInfo

    -

    BlobVerificationInfo is the information needed to verify the inclusion of a blob in a batch.

    +

    BlobStatusRequest

    +

    BlobStatusRequest is used to query the status of a blob.

    blob_keybytesstatusBlobStatus

    The unique identifier for the blob.

    The status of the blob.

    signed_batchSignedBatch

    The signed batch. Unset if the status is not CERTIFIED.

    blob_inclusion_infoBlobInclusionInfo

    BlobInclusionInfo is the information needed to verify the inclusion of a blob in a batch. +Unset if the status is not CERTIFIED.

    @@ -2106,24 +2120,10 @@

    BlobVerificationInfo

    - - - - - - - - - - - - - - - + - + @@ -2183,10 +2183,10 @@

    DisperseBlobRequest

    - + - + + + + + + +
    blob_certificatecommon.v2.BlobCertificate

    blob_indexuint32

    blob_index is the index of the blob in the batch

    inclusion_proofblob_key bytes

    inclusion_proof is the inclusion proof of the blob in the batch

    The unique identifier for the blob.

    datablob bytes

    The data to be dispersed. +

    The blob to be dispersed. The size of this byte array may be any size as long as it does not exceed the maximum length of 16MiB. (In the future, the 16MiB limit may be increased, but this is not guaranteed to happen.) @@ -2209,6 +2209,13 @@

    DisperseBlobRequest

    which is dispersed separately.

    signaturebytes

    signature over keccak hash of the blob_header that can be verified by blob_header.payment_header.account_id

    diff --git a/api/docs/eigenda-protos.md b/api/docs/eigenda-protos.md index 7341e077f6..fb32dbb211 100644 --- a/api/docs/eigenda-protos.md +++ b/api/docs/eigenda-protos.md @@ -48,9 +48,9 @@ - [Attestation](#disperser-v2-Attestation) - [BlobCommitmentReply](#disperser-v2-BlobCommitmentReply) - [BlobCommitmentRequest](#disperser-v2-BlobCommitmentRequest) + - [BlobInclusionInfo](#disperser-v2-BlobInclusionInfo) - [BlobStatusReply](#disperser-v2-BlobStatusReply) - [BlobStatusRequest](#disperser-v2-BlobStatusRequest) - - [BlobVerificationInfo](#disperser-v2-BlobVerificationInfo) - [DisperseBlobReply](#disperser-v2-DisperseBlobReply) - [DisperseBlobRequest](#disperser-v2-DisperseBlobRequest) - [GetPaymentStateReply](#disperser-v2-GetPaymentStateReply) @@ -337,7 +337,8 @@ Validator nodes eventually sign the blob certificate once they are in custody of | Field | Type | Label | Description | | ----- | ---- | ----- | ----------- | | blob_header | [BlobHeader](#common-v2-BlobHeader) | | blob_header contains data about the blob. | -| relays | [uint32](#uint32) | repeated | relays is the list of relays that are in custody of the blob. The relays custodying the data are chosen by the Disperser to which the DisperseBlob request was submitted. It needs to contain at least 1 relay number. To retrieve a blob from the relay, one can find that relay's URL in the EigenDARelayRegistry contract: https://github.com/Layr-Labs/eigenda/blob/master/contracts/src/core/EigenDARelayRegistry.sol | +| signature | [bytes](#bytes) | | signature over keccak hash of the blob_header that can be verified by blob_header.payment_header.account_id | +| relay_keys | [uint32](#uint32) | repeated | relay_keys is the list of relay keys that are in custody of the blob. The relays custodying the data are chosen by the Disperser to which the DisperseBlob request was submitted. It needs to contain at least 1 relay number. To retrieve a blob from the relay, one can find that relay's URL in the EigenDARelayRegistry contract: https://github.com/Layr-Labs/eigenda/blob/master/contracts/src/core/EigenDARelayRegistry.sol | @@ -359,7 +360,6 @@ The following quorums are currently required: - 0: ETH - 1: EIGEN | | commitment | [common.BlobCommitment](#common-BlobCommitment) | | commitment is the KZG commitment to the blob | | payment_header | [PaymentHeader](#common-v2-PaymentHeader) | | payment_header contains payment information for the blob | | salt | [uint32](#uint32) | | salt is used to ensure that the dispersal request is intentionally unique. This is currently only useful for reserved payments when the same blob is submitted multiple times within the same reservation period. On-demand payments already have unique cumulative_payment values for intentionally unique dispersal requests. | -| signature | [bytes](#bytes) | | signature over keccak hash of the blob_header that can be verified by blob_header.account_id | @@ -777,56 +777,56 @@ This can be used to construct a BlobHeader.commitment. | Field | Type | Label | Description | | ----- | ---- | ----- | ----------- | -| data | [bytes](#bytes) | | The blob data to compute the commitment for. | +| blob | [bytes](#bytes) | | The blob data to compute the commitment for. | - + -### BlobStatusReply -BlobStatusReply is the reply to a BlobStatusRequest. +### BlobInclusionInfo +BlobInclusionInfo is the information needed to verify the inclusion of a blob in a batch. | Field | Type | Label | Description | | ----- | ---- | ----- | ----------- | -| status | [BlobStatus](#disperser-v2-BlobStatus) | | The status of the blob. | -| signed_batch | [SignedBatch](#disperser-v2-SignedBatch) | | The signed batch. Unset if the status is not CERTIFIED. | -| blob_verification_info | [BlobVerificationInfo](#disperser-v2-BlobVerificationInfo) | | BlobVerificationInfo is the information needed to verify the inclusion of a blob in a batch. Unset if the status is not CERTIFIED. | +| blob_certificate | [common.v2.BlobCertificate](#common-v2-BlobCertificate) | | | +| blob_index | [uint32](#uint32) | | blob_index is the index of the blob in the batch | +| inclusion_proof | [bytes](#bytes) | | inclusion_proof is the inclusion proof of the blob in the batch | - + -### BlobStatusRequest -BlobStatusRequest is used to query the status of a blob. +### BlobStatusReply +BlobStatusReply is the reply to a BlobStatusRequest. | Field | Type | Label | Description | | ----- | ---- | ----- | ----------- | -| blob_key | [bytes](#bytes) | | The unique identifier for the blob. | +| status | [BlobStatus](#disperser-v2-BlobStatus) | | The status of the blob. | +| signed_batch | [SignedBatch](#disperser-v2-SignedBatch) | | The signed batch. Unset if the status is not CERTIFIED. | +| blob_inclusion_info | [BlobInclusionInfo](#disperser-v2-BlobInclusionInfo) | | BlobInclusionInfo is the information needed to verify the inclusion of a blob in a batch. Unset if the status is not CERTIFIED. | - + -### BlobVerificationInfo -BlobVerificationInfo is the information needed to verify the inclusion of a blob in a batch. +### BlobStatusRequest +BlobStatusRequest is used to query the status of a blob. | Field | Type | Label | Description | | ----- | ---- | ----- | ----------- | -| blob_certificate | [common.v2.BlobCertificate](#common-v2-BlobCertificate) | | | -| blob_index | [uint32](#uint32) | | blob_index is the index of the blob in the batch | -| inclusion_proof | [bytes](#bytes) | | inclusion_proof is the inclusion proof of the blob in the batch | +| blob_key | [bytes](#bytes) | | The unique identifier for the blob. | @@ -861,7 +861,7 @@ A request to disperse a blob. | Field | Type | Label | Description | | ----- | ---- | ----- | ----------- | -| data | [bytes](#bytes) | | The data to be dispersed. +| blob | [bytes](#bytes) | | The blob to be dispersed. The size of this byte array may be any size as long as it does not exceed the maximum length of 16MiB. (In the future, the 16MiB limit may be increased, but this is not guaranteed to happen.) @@ -869,6 +869,7 @@ Every 32 bytes of data is interpreted as an integer in big endian format where t | blob_header | [common.v2.BlobHeader](#common-v2-BlobHeader) | | The header contains metadata about the blob. This header can be thought of as an "eigenDA tx", in that it plays a purpose similar to an eth_tx to disperse a 4844 blob. Note that a call to DisperseBlob requires the blob and the blobHeader, which is similar to how dispersing a blob to ethereum requires sending a tx whose data contains the hash of the kzg commit of the blob, which is dispersed separately. | +| signature | [bytes](#bytes) | | signature over keccak hash of the blob_header that can be verified by blob_header.payment_header.account_id | diff --git a/api/grpc/common/v2/common_v2.pb.go b/api/grpc/common/v2/common_v2.pb.go index 1f85543f6d..36bef22d32 100644 --- a/api/grpc/common/v2/common_v2.pb.go +++ b/api/grpc/common/v2/common_v2.pb.go @@ -47,8 +47,6 @@ type BlobHeader struct { // reserved payments when the same blob is submitted multiple times within the same reservation period. On-demand // payments already have unique cumulative_payment values for intentionally unique dispersal requests. Salt uint32 `protobuf:"varint,5,opt,name=salt,proto3" json:"salt,omitempty"` - // signature over keccak hash of the blob_header that can be verified by blob_header.account_id - Signature []byte `protobuf:"bytes,6,opt,name=signature,proto3" json:"signature,omitempty"` } func (x *BlobHeader) Reset() { @@ -118,13 +116,6 @@ func (x *BlobHeader) GetSalt() uint32 { return 0 } -func (x *BlobHeader) GetSignature() []byte { - if x != nil { - return x.Signature - } - return nil -} - // BlobCertificate contains a full description of a blob and how it is dispersed. Part of the certificate // is provided by the blob submitter (i.e. the blob header), and part is provided by the disperser (i.e. the relays). // Validator nodes eventually sign the blob certificate once they are in custody of the required chunks @@ -136,12 +127,14 @@ type BlobCertificate struct { // blob_header contains data about the blob. BlobHeader *BlobHeader `protobuf:"bytes,1,opt,name=blob_header,json=blobHeader,proto3" json:"blob_header,omitempty"` - // relays is the list of relays that are in custody of the blob. + // signature over keccak hash of the blob_header that can be verified by blob_header.payment_header.account_id + Signature []byte `protobuf:"bytes,2,opt,name=signature,proto3" json:"signature,omitempty"` + // relay_keys is the list of relay keys that are in custody of the blob. // The relays custodying the data are chosen by the Disperser to which the DisperseBlob request was submitted. // It needs to contain at least 1 relay number. // To retrieve a blob from the relay, one can find that relay's URL in the EigenDARelayRegistry contract: // https://github.com/Layr-Labs/eigenda/blob/master/contracts/src/core/EigenDARelayRegistry.sol - Relays []uint32 `protobuf:"varint,2,rep,packed,name=relays,proto3" json:"relays,omitempty"` + RelayKeys []uint32 `protobuf:"varint,3,rep,packed,name=relay_keys,json=relayKeys,proto3" json:"relay_keys,omitempty"` } func (x *BlobCertificate) Reset() { @@ -183,9 +176,16 @@ func (x *BlobCertificate) GetBlobHeader() *BlobHeader { return nil } -func (x *BlobCertificate) GetRelays() []uint32 { +func (x *BlobCertificate) GetSignature() []byte { + if x != nil { + return x.Signature + } + return nil +} + +func (x *BlobCertificate) GetRelayKeys() []uint32 { if x != nil { - return x.Relays + return x.RelayKeys } return nil } @@ -385,7 +385,7 @@ var file_common_v2_common_v2_proto_rawDesc = []byte{ 0x0a, 0x19, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2f, 0x76, 0x32, 0x2f, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x5f, 0x76, 0x32, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x12, 0x09, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x76, 0x32, 0x1a, 0x13, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2f, 0x63, - 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x22, 0xf8, 0x01, 0x0a, 0x0a, + 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x22, 0xda, 0x01, 0x0a, 0x0a, 0x42, 0x6c, 0x6f, 0x62, 0x48, 0x65, 0x61, 0x64, 0x65, 0x72, 0x12, 0x18, 0x0a, 0x07, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x07, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x12, 0x25, 0x0a, 0x0e, 0x71, 0x75, 0x6f, 0x72, 0x75, 0x6d, 0x5f, 0x6e, @@ -399,42 +399,43 @@ var file_common_v2_common_v2_proto_rawDesc = []byte{ 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x76, 0x32, 0x2e, 0x50, 0x61, 0x79, 0x6d, 0x65, 0x6e, 0x74, 0x48, 0x65, 0x61, 0x64, 0x65, 0x72, 0x52, 0x0d, 0x70, 0x61, 0x79, 0x6d, 0x65, 0x6e, 0x74, 0x48, 0x65, 0x61, 0x64, 0x65, 0x72, 0x12, 0x12, 0x0a, 0x04, 0x73, 0x61, 0x6c, 0x74, 0x18, 0x05, 0x20, 0x01, - 0x28, 0x0d, 0x52, 0x04, 0x73, 0x61, 0x6c, 0x74, 0x12, 0x1c, 0x0a, 0x09, 0x73, 0x69, 0x67, 0x6e, - 0x61, 0x74, 0x75, 0x72, 0x65, 0x18, 0x06, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x09, 0x73, 0x69, 0x67, - 0x6e, 0x61, 0x74, 0x75, 0x72, 0x65, 0x22, 0x61, 0x0a, 0x0f, 0x42, 0x6c, 0x6f, 0x62, 0x43, 0x65, - 0x72, 0x74, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x65, 0x12, 0x36, 0x0a, 0x0b, 0x62, 0x6c, 0x6f, - 0x62, 0x5f, 0x68, 0x65, 0x61, 0x64, 0x65, 0x72, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x15, - 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x76, 0x32, 0x2e, 0x42, 0x6c, 0x6f, 0x62, 0x48, - 0x65, 0x61, 0x64, 0x65, 0x72, 0x52, 0x0a, 0x62, 0x6c, 0x6f, 0x62, 0x48, 0x65, 0x61, 0x64, 0x65, - 0x72, 0x12, 0x16, 0x0a, 0x06, 0x72, 0x65, 0x6c, 0x61, 0x79, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, - 0x0d, 0x52, 0x06, 0x72, 0x65, 0x6c, 0x61, 0x79, 0x73, 0x22, 0x62, 0x0a, 0x0b, 0x42, 0x61, 0x74, - 0x63, 0x68, 0x48, 0x65, 0x61, 0x64, 0x65, 0x72, 0x12, 0x1d, 0x0a, 0x0a, 0x62, 0x61, 0x74, 0x63, - 0x68, 0x5f, 0x72, 0x6f, 0x6f, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x09, 0x62, 0x61, - 0x74, 0x63, 0x68, 0x52, 0x6f, 0x6f, 0x74, 0x12, 0x34, 0x0a, 0x16, 0x72, 0x65, 0x66, 0x65, 0x72, - 0x65, 0x6e, 0x63, 0x65, 0x5f, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x5f, 0x6e, 0x75, 0x6d, 0x62, 0x65, - 0x72, 0x18, 0x02, 0x20, 0x01, 0x28, 0x04, 0x52, 0x14, 0x72, 0x65, 0x66, 0x65, 0x72, 0x65, 0x6e, - 0x63, 0x65, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x4e, 0x75, 0x6d, 0x62, 0x65, 0x72, 0x22, 0x80, 0x01, - 0x0a, 0x05, 0x42, 0x61, 0x74, 0x63, 0x68, 0x12, 0x2e, 0x0a, 0x06, 0x68, 0x65, 0x61, 0x64, 0x65, - 0x72, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x16, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, - 0x2e, 0x76, 0x32, 0x2e, 0x42, 0x61, 0x74, 0x63, 0x68, 0x48, 0x65, 0x61, 0x64, 0x65, 0x72, 0x52, - 0x06, 0x68, 0x65, 0x61, 0x64, 0x65, 0x72, 0x12, 0x47, 0x0a, 0x11, 0x62, 0x6c, 0x6f, 0x62, 0x5f, - 0x63, 0x65, 0x72, 0x74, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x65, 0x73, 0x18, 0x02, 0x20, 0x03, - 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x76, 0x32, 0x2e, 0x42, - 0x6c, 0x6f, 0x62, 0x43, 0x65, 0x72, 0x74, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x65, 0x52, 0x10, - 0x62, 0x6c, 0x6f, 0x62, 0x43, 0x65, 0x72, 0x74, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x65, 0x73, - 0x22, 0x8c, 0x01, 0x0a, 0x0d, 0x50, 0x61, 0x79, 0x6d, 0x65, 0x6e, 0x74, 0x48, 0x65, 0x61, 0x64, - 0x65, 0x72, 0x12, 0x1d, 0x0a, 0x0a, 0x61, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x5f, 0x69, 0x64, - 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x61, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x49, - 0x64, 0x12, 0x2d, 0x0a, 0x12, 0x72, 0x65, 0x73, 0x65, 0x72, 0x76, 0x61, 0x74, 0x69, 0x6f, 0x6e, - 0x5f, 0x70, 0x65, 0x72, 0x69, 0x6f, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x11, 0x72, - 0x65, 0x73, 0x65, 0x72, 0x76, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x50, 0x65, 0x72, 0x69, 0x6f, 0x64, - 0x12, 0x2d, 0x0a, 0x12, 0x63, 0x75, 0x6d, 0x75, 0x6c, 0x61, 0x74, 0x69, 0x76, 0x65, 0x5f, 0x70, - 0x61, 0x79, 0x6d, 0x65, 0x6e, 0x74, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x11, 0x63, 0x75, - 0x6d, 0x75, 0x6c, 0x61, 0x74, 0x69, 0x76, 0x65, 0x50, 0x61, 0x79, 0x6d, 0x65, 0x6e, 0x74, 0x42, - 0x31, 0x5a, 0x2f, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x4c, 0x61, - 0x79, 0x72, 0x2d, 0x4c, 0x61, 0x62, 0x73, 0x2f, 0x65, 0x69, 0x67, 0x65, 0x6e, 0x64, 0x61, 0x2f, - 0x61, 0x70, 0x69, 0x2f, 0x67, 0x72, 0x70, 0x63, 0x2f, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2f, - 0x76, 0x32, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, + 0x28, 0x0d, 0x52, 0x04, 0x73, 0x61, 0x6c, 0x74, 0x22, 0x86, 0x01, 0x0a, 0x0f, 0x42, 0x6c, 0x6f, + 0x62, 0x43, 0x65, 0x72, 0x74, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x65, 0x12, 0x36, 0x0a, 0x0b, + 0x62, 0x6c, 0x6f, 0x62, 0x5f, 0x68, 0x65, 0x61, 0x64, 0x65, 0x72, 0x18, 0x01, 0x20, 0x01, 0x28, + 0x0b, 0x32, 0x15, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x76, 0x32, 0x2e, 0x42, 0x6c, + 0x6f, 0x62, 0x48, 0x65, 0x61, 0x64, 0x65, 0x72, 0x52, 0x0a, 0x62, 0x6c, 0x6f, 0x62, 0x48, 0x65, + 0x61, 0x64, 0x65, 0x72, 0x12, 0x1c, 0x0a, 0x09, 0x73, 0x69, 0x67, 0x6e, 0x61, 0x74, 0x75, 0x72, + 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x09, 0x73, 0x69, 0x67, 0x6e, 0x61, 0x74, 0x75, + 0x72, 0x65, 0x12, 0x1d, 0x0a, 0x0a, 0x72, 0x65, 0x6c, 0x61, 0x79, 0x5f, 0x6b, 0x65, 0x79, 0x73, + 0x18, 0x03, 0x20, 0x03, 0x28, 0x0d, 0x52, 0x09, 0x72, 0x65, 0x6c, 0x61, 0x79, 0x4b, 0x65, 0x79, + 0x73, 0x22, 0x62, 0x0a, 0x0b, 0x42, 0x61, 0x74, 0x63, 0x68, 0x48, 0x65, 0x61, 0x64, 0x65, 0x72, + 0x12, 0x1d, 0x0a, 0x0a, 0x62, 0x61, 0x74, 0x63, 0x68, 0x5f, 0x72, 0x6f, 0x6f, 0x74, 0x18, 0x01, + 0x20, 0x01, 0x28, 0x0c, 0x52, 0x09, 0x62, 0x61, 0x74, 0x63, 0x68, 0x52, 0x6f, 0x6f, 0x74, 0x12, + 0x34, 0x0a, 0x16, 0x72, 0x65, 0x66, 0x65, 0x72, 0x65, 0x6e, 0x63, 0x65, 0x5f, 0x62, 0x6c, 0x6f, + 0x63, 0x6b, 0x5f, 0x6e, 0x75, 0x6d, 0x62, 0x65, 0x72, 0x18, 0x02, 0x20, 0x01, 0x28, 0x04, 0x52, + 0x14, 0x72, 0x65, 0x66, 0x65, 0x72, 0x65, 0x6e, 0x63, 0x65, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x4e, + 0x75, 0x6d, 0x62, 0x65, 0x72, 0x22, 0x80, 0x01, 0x0a, 0x05, 0x42, 0x61, 0x74, 0x63, 0x68, 0x12, + 0x2e, 0x0a, 0x06, 0x68, 0x65, 0x61, 0x64, 0x65, 0x72, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, + 0x16, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x76, 0x32, 0x2e, 0x42, 0x61, 0x74, 0x63, + 0x68, 0x48, 0x65, 0x61, 0x64, 0x65, 0x72, 0x52, 0x06, 0x68, 0x65, 0x61, 0x64, 0x65, 0x72, 0x12, + 0x47, 0x0a, 0x11, 0x62, 0x6c, 0x6f, 0x62, 0x5f, 0x63, 0x65, 0x72, 0x74, 0x69, 0x66, 0x69, 0x63, + 0x61, 0x74, 0x65, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x63, 0x6f, 0x6d, + 0x6d, 0x6f, 0x6e, 0x2e, 0x76, 0x32, 0x2e, 0x42, 0x6c, 0x6f, 0x62, 0x43, 0x65, 0x72, 0x74, 0x69, + 0x66, 0x69, 0x63, 0x61, 0x74, 0x65, 0x52, 0x10, 0x62, 0x6c, 0x6f, 0x62, 0x43, 0x65, 0x72, 0x74, + 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x65, 0x73, 0x22, 0x8c, 0x01, 0x0a, 0x0d, 0x50, 0x61, 0x79, + 0x6d, 0x65, 0x6e, 0x74, 0x48, 0x65, 0x61, 0x64, 0x65, 0x72, 0x12, 0x1d, 0x0a, 0x0a, 0x61, 0x63, + 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, + 0x61, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x49, 0x64, 0x12, 0x2d, 0x0a, 0x12, 0x72, 0x65, 0x73, + 0x65, 0x72, 0x76, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x70, 0x65, 0x72, 0x69, 0x6f, 0x64, 0x18, + 0x02, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x11, 0x72, 0x65, 0x73, 0x65, 0x72, 0x76, 0x61, 0x74, 0x69, + 0x6f, 0x6e, 0x50, 0x65, 0x72, 0x69, 0x6f, 0x64, 0x12, 0x2d, 0x0a, 0x12, 0x63, 0x75, 0x6d, 0x75, + 0x6c, 0x61, 0x74, 0x69, 0x76, 0x65, 0x5f, 0x70, 0x61, 0x79, 0x6d, 0x65, 0x6e, 0x74, 0x18, 0x03, + 0x20, 0x01, 0x28, 0x0c, 0x52, 0x11, 0x63, 0x75, 0x6d, 0x75, 0x6c, 0x61, 0x74, 0x69, 0x76, 0x65, + 0x50, 0x61, 0x79, 0x6d, 0x65, 0x6e, 0x74, 0x42, 0x31, 0x5a, 0x2f, 0x67, 0x69, 0x74, 0x68, 0x75, + 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x4c, 0x61, 0x79, 0x72, 0x2d, 0x4c, 0x61, 0x62, 0x73, 0x2f, + 0x65, 0x69, 0x67, 0x65, 0x6e, 0x64, 0x61, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x67, 0x72, 0x70, 0x63, + 0x2f, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2f, 0x76, 0x32, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, + 0x6f, 0x33, } var ( diff --git a/api/grpc/disperser/v2/disperser_v2.pb.go b/api/grpc/disperser/v2/disperser_v2.pb.go index fc1f7a6d97..4de93e86be 100644 --- a/api/grpc/disperser/v2/disperser_v2.pb.go +++ b/api/grpc/disperser/v2/disperser_v2.pb.go @@ -113,7 +113,7 @@ type DisperseBlobRequest struct { sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields - // The data to be dispersed. + // The blob to be dispersed. // // The size of this byte array may be any size as long as it does not exceed the maximum length of 16MiB. // (In the future, the 16MiB limit may be increased, but this is not guaranteed to happen.) @@ -122,7 +122,7 @@ type DisperseBlobRequest struct { // significant bits. The integer must stay in the valid range to be interpreted as a field element on the bn254 curve. // The valid range is 0 <= x < 21888242871839275222246405745257275088548364400416034343698204186575808495617. // If any one of the 32 bytes elements is outside the range, the whole request is deemed as invalid, and rejected. - Data []byte `protobuf:"bytes,1,opt,name=data,proto3" json:"data,omitempty"` + Blob []byte `protobuf:"bytes,1,opt,name=blob,proto3" json:"blob,omitempty"` // The header contains metadata about the blob. // // This header can be thought of as an "eigenDA tx", in that it plays a purpose similar to an eth_tx to disperse a @@ -130,6 +130,8 @@ type DisperseBlobRequest struct { // dispersing a blob to ethereum requires sending a tx whose data contains the hash of the kzg commit of the blob, // which is dispersed separately. BlobHeader *v2.BlobHeader `protobuf:"bytes,2,opt,name=blob_header,json=blobHeader,proto3" json:"blob_header,omitempty"` + // signature over keccak hash of the blob_header that can be verified by blob_header.payment_header.account_id + Signature []byte `protobuf:"bytes,3,opt,name=signature,proto3" json:"signature,omitempty"` } func (x *DisperseBlobRequest) Reset() { @@ -164,9 +166,9 @@ func (*DisperseBlobRequest) Descriptor() ([]byte, []int) { return file_disperser_v2_disperser_v2_proto_rawDescGZIP(), []int{0} } -func (x *DisperseBlobRequest) GetData() []byte { +func (x *DisperseBlobRequest) GetBlob() []byte { if x != nil { - return x.Data + return x.Blob } return nil } @@ -178,6 +180,13 @@ func (x *DisperseBlobRequest) GetBlobHeader() *v2.BlobHeader { return nil } +func (x *DisperseBlobRequest) GetSignature() []byte { + if x != nil { + return x.Signature + } + return nil +} + // A reply to a DisperseBlob request. type DisperseBlobReply struct { state protoimpl.MessageState @@ -303,9 +312,9 @@ type BlobStatusReply struct { Status BlobStatus `protobuf:"varint,1,opt,name=status,proto3,enum=disperser.v2.BlobStatus" json:"status,omitempty"` // The signed batch. Unset if the status is not CERTIFIED. SignedBatch *SignedBatch `protobuf:"bytes,2,opt,name=signed_batch,json=signedBatch,proto3" json:"signed_batch,omitempty"` - // BlobVerificationInfo is the information needed to verify the inclusion of a blob in a batch. + // BlobInclusionInfo is the information needed to verify the inclusion of a blob in a batch. // Unset if the status is not CERTIFIED. - BlobVerificationInfo *BlobVerificationInfo `protobuf:"bytes,3,opt,name=blob_verification_info,json=blobVerificationInfo,proto3" json:"blob_verification_info,omitempty"` + BlobInclusionInfo *BlobInclusionInfo `protobuf:"bytes,3,opt,name=blob_inclusion_info,json=blobInclusionInfo,proto3" json:"blob_inclusion_info,omitempty"` } func (x *BlobStatusReply) Reset() { @@ -354,9 +363,9 @@ func (x *BlobStatusReply) GetSignedBatch() *SignedBatch { return nil } -func (x *BlobStatusReply) GetBlobVerificationInfo() *BlobVerificationInfo { +func (x *BlobStatusReply) GetBlobInclusionInfo() *BlobInclusionInfo { if x != nil { - return x.BlobVerificationInfo + return x.BlobInclusionInfo } return nil } @@ -369,7 +378,7 @@ type BlobCommitmentRequest struct { unknownFields protoimpl.UnknownFields // The blob data to compute the commitment for. - Data []byte `protobuf:"bytes,1,opt,name=data,proto3" json:"data,omitempty"` + Blob []byte `protobuf:"bytes,1,opt,name=blob,proto3" json:"blob,omitempty"` } func (x *BlobCommitmentRequest) Reset() { @@ -404,9 +413,9 @@ func (*BlobCommitmentRequest) Descriptor() ([]byte, []int) { return file_disperser_v2_disperser_v2_proto_rawDescGZIP(), []int{4} } -func (x *BlobCommitmentRequest) GetData() []byte { +func (x *BlobCommitmentRequest) GetBlob() []byte { if x != nil { - return x.Data + return x.Blob } return nil } @@ -661,8 +670,8 @@ func (x *SignedBatch) GetAttestation() *Attestation { return nil } -// BlobVerificationInfo is the information needed to verify the inclusion of a blob in a batch. -type BlobVerificationInfo struct { +// BlobInclusionInfo is the information needed to verify the inclusion of a blob in a batch. +type BlobInclusionInfo struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields @@ -674,8 +683,8 @@ type BlobVerificationInfo struct { InclusionProof []byte `protobuf:"bytes,3,opt,name=inclusion_proof,json=inclusionProof,proto3" json:"inclusion_proof,omitempty"` } -func (x *BlobVerificationInfo) Reset() { - *x = BlobVerificationInfo{} +func (x *BlobInclusionInfo) Reset() { + *x = BlobInclusionInfo{} if protoimpl.UnsafeEnabled { mi := &file_disperser_v2_disperser_v2_proto_msgTypes[9] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) @@ -683,13 +692,13 @@ func (x *BlobVerificationInfo) Reset() { } } -func (x *BlobVerificationInfo) String() string { +func (x *BlobInclusionInfo) String() string { return protoimpl.X.MessageStringOf(x) } -func (*BlobVerificationInfo) ProtoMessage() {} +func (*BlobInclusionInfo) ProtoMessage() {} -func (x *BlobVerificationInfo) ProtoReflect() protoreflect.Message { +func (x *BlobInclusionInfo) ProtoReflect() protoreflect.Message { mi := &file_disperser_v2_disperser_v2_proto_msgTypes[9] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) @@ -701,26 +710,26 @@ func (x *BlobVerificationInfo) ProtoReflect() protoreflect.Message { return mi.MessageOf(x) } -// Deprecated: Use BlobVerificationInfo.ProtoReflect.Descriptor instead. -func (*BlobVerificationInfo) Descriptor() ([]byte, []int) { +// Deprecated: Use BlobInclusionInfo.ProtoReflect.Descriptor instead. +func (*BlobInclusionInfo) Descriptor() ([]byte, []int) { return file_disperser_v2_disperser_v2_proto_rawDescGZIP(), []int{9} } -func (x *BlobVerificationInfo) GetBlobCertificate() *v2.BlobCertificate { +func (x *BlobInclusionInfo) GetBlobCertificate() *v2.BlobCertificate { if x != nil { return x.BlobCertificate } return nil } -func (x *BlobVerificationInfo) GetBlobIndex() uint32 { +func (x *BlobInclusionInfo) GetBlobIndex() uint32 { if x != nil { return x.BlobIndex } return 0 } -func (x *BlobVerificationInfo) GetInclusionProof() []byte { +func (x *BlobInclusionInfo) GetInclusionProof() []byte { if x != nil { return x.InclusionProof } @@ -1060,172 +1069,173 @@ var file_disperser_v2_disperser_v2_proto_rawDesc = []byte{ 0x13, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2f, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x19, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2f, 0x76, 0x32, 0x2f, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x5f, 0x76, 0x32, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x22, - 0x61, 0x0a, 0x13, 0x44, 0x69, 0x73, 0x70, 0x65, 0x72, 0x73, 0x65, 0x42, 0x6c, 0x6f, 0x62, 0x52, - 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x12, 0x0a, 0x04, 0x64, 0x61, 0x74, 0x61, 0x18, 0x01, - 0x20, 0x01, 0x28, 0x0c, 0x52, 0x04, 0x64, 0x61, 0x74, 0x61, 0x12, 0x36, 0x0a, 0x0b, 0x62, 0x6c, + 0x7f, 0x0a, 0x13, 0x44, 0x69, 0x73, 0x70, 0x65, 0x72, 0x73, 0x65, 0x42, 0x6c, 0x6f, 0x62, 0x52, + 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x12, 0x0a, 0x04, 0x62, 0x6c, 0x6f, 0x62, 0x18, 0x01, + 0x20, 0x01, 0x28, 0x0c, 0x52, 0x04, 0x62, 0x6c, 0x6f, 0x62, 0x12, 0x36, 0x0a, 0x0b, 0x62, 0x6c, 0x6f, 0x62, 0x5f, 0x68, 0x65, 0x61, 0x64, 0x65, 0x72, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x15, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x76, 0x32, 0x2e, 0x42, 0x6c, 0x6f, 0x62, 0x48, 0x65, 0x61, 0x64, 0x65, 0x72, 0x52, 0x0a, 0x62, 0x6c, 0x6f, 0x62, 0x48, 0x65, 0x61, 0x64, - 0x65, 0x72, 0x22, 0x60, 0x0a, 0x11, 0x44, 0x69, 0x73, 0x70, 0x65, 0x72, 0x73, 0x65, 0x42, 0x6c, - 0x6f, 0x62, 0x52, 0x65, 0x70, 0x6c, 0x79, 0x12, 0x30, 0x0a, 0x06, 0x72, 0x65, 0x73, 0x75, 0x6c, - 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x18, 0x2e, 0x64, 0x69, 0x73, 0x70, 0x65, 0x72, - 0x73, 0x65, 0x72, 0x2e, 0x76, 0x32, 0x2e, 0x42, 0x6c, 0x6f, 0x62, 0x53, 0x74, 0x61, 0x74, 0x75, - 0x73, 0x52, 0x06, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x12, 0x19, 0x0a, 0x08, 0x62, 0x6c, 0x6f, - 0x62, 0x5f, 0x6b, 0x65, 0x79, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x07, 0x62, 0x6c, 0x6f, - 0x62, 0x4b, 0x65, 0x79, 0x22, 0x2e, 0x0a, 0x11, 0x42, 0x6c, 0x6f, 0x62, 0x53, 0x74, 0x61, 0x74, - 0x75, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x19, 0x0a, 0x08, 0x62, 0x6c, 0x6f, - 0x62, 0x5f, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x07, 0x62, 0x6c, 0x6f, - 0x62, 0x4b, 0x65, 0x79, 0x22, 0xdb, 0x01, 0x0a, 0x0f, 0x42, 0x6c, 0x6f, 0x62, 0x53, 0x74, 0x61, - 0x74, 0x75, 0x73, 0x52, 0x65, 0x70, 0x6c, 0x79, 0x12, 0x30, 0x0a, 0x06, 0x73, 0x74, 0x61, 0x74, - 0x75, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x18, 0x2e, 0x64, 0x69, 0x73, 0x70, 0x65, - 0x72, 0x73, 0x65, 0x72, 0x2e, 0x76, 0x32, 0x2e, 0x42, 0x6c, 0x6f, 0x62, 0x53, 0x74, 0x61, 0x74, - 0x75, 0x73, 0x52, 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x12, 0x3c, 0x0a, 0x0c, 0x73, 0x69, - 0x67, 0x6e, 0x65, 0x64, 0x5f, 0x62, 0x61, 0x74, 0x63, 0x68, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, - 0x32, 0x19, 0x2e, 0x64, 0x69, 0x73, 0x70, 0x65, 0x72, 0x73, 0x65, 0x72, 0x2e, 0x76, 0x32, 0x2e, - 0x53, 0x69, 0x67, 0x6e, 0x65, 0x64, 0x42, 0x61, 0x74, 0x63, 0x68, 0x52, 0x0b, 0x73, 0x69, 0x67, - 0x6e, 0x65, 0x64, 0x42, 0x61, 0x74, 0x63, 0x68, 0x12, 0x58, 0x0a, 0x16, 0x62, 0x6c, 0x6f, 0x62, - 0x5f, 0x76, 0x65, 0x72, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x69, 0x6e, - 0x66, 0x6f, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x22, 0x2e, 0x64, 0x69, 0x73, 0x70, 0x65, - 0x72, 0x73, 0x65, 0x72, 0x2e, 0x76, 0x32, 0x2e, 0x42, 0x6c, 0x6f, 0x62, 0x56, 0x65, 0x72, 0x69, - 0x66, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x14, 0x62, 0x6c, - 0x6f, 0x62, 0x56, 0x65, 0x72, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x49, 0x6e, - 0x66, 0x6f, 0x22, 0x2b, 0x0a, 0x15, 0x42, 0x6c, 0x6f, 0x62, 0x43, 0x6f, 0x6d, 0x6d, 0x69, 0x74, - 0x6d, 0x65, 0x6e, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x12, 0x0a, 0x04, 0x64, - 0x61, 0x74, 0x61, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x04, 0x64, 0x61, 0x74, 0x61, 0x22, - 0x56, 0x0a, 0x13, 0x42, 0x6c, 0x6f, 0x62, 0x43, 0x6f, 0x6d, 0x6d, 0x69, 0x74, 0x6d, 0x65, 0x6e, - 0x74, 0x52, 0x65, 0x70, 0x6c, 0x79, 0x12, 0x3f, 0x0a, 0x0f, 0x62, 0x6c, 0x6f, 0x62, 0x5f, 0x63, - 0x6f, 0x6d, 0x6d, 0x69, 0x74, 0x6d, 0x65, 0x6e, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, - 0x16, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x42, 0x6c, 0x6f, 0x62, 0x43, 0x6f, 0x6d, - 0x6d, 0x69, 0x74, 0x6d, 0x65, 0x6e, 0x74, 0x52, 0x0e, 0x62, 0x6c, 0x6f, 0x62, 0x43, 0x6f, 0x6d, - 0x6d, 0x69, 0x74, 0x6d, 0x65, 0x6e, 0x74, 0x22, 0x55, 0x0a, 0x16, 0x47, 0x65, 0x74, 0x50, 0x61, - 0x79, 0x6d, 0x65, 0x6e, 0x74, 0x53, 0x74, 0x61, 0x74, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, - 0x74, 0x12, 0x1d, 0x0a, 0x0a, 0x61, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x5f, 0x69, 0x64, 0x18, - 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x61, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x49, 0x64, - 0x12, 0x1c, 0x0a, 0x09, 0x73, 0x69, 0x67, 0x6e, 0x61, 0x74, 0x75, 0x72, 0x65, 0x18, 0x02, 0x20, - 0x01, 0x28, 0x0c, 0x52, 0x09, 0x73, 0x69, 0x67, 0x6e, 0x61, 0x74, 0x75, 0x72, 0x65, 0x22, 0xda, - 0x02, 0x0a, 0x14, 0x47, 0x65, 0x74, 0x50, 0x61, 0x79, 0x6d, 0x65, 0x6e, 0x74, 0x53, 0x74, 0x61, - 0x74, 0x65, 0x52, 0x65, 0x70, 0x6c, 0x79, 0x12, 0x55, 0x0a, 0x15, 0x70, 0x61, 0x79, 0x6d, 0x65, - 0x6e, 0x74, 0x5f, 0x67, 0x6c, 0x6f, 0x62, 0x61, 0x6c, 0x5f, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x73, - 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x21, 0x2e, 0x64, 0x69, 0x73, 0x70, 0x65, 0x72, 0x73, - 0x65, 0x72, 0x2e, 0x76, 0x32, 0x2e, 0x50, 0x61, 0x79, 0x6d, 0x65, 0x6e, 0x74, 0x47, 0x6c, 0x6f, - 0x62, 0x61, 0x6c, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x52, 0x13, 0x70, 0x61, 0x79, 0x6d, 0x65, - 0x6e, 0x74, 0x47, 0x6c, 0x6f, 0x62, 0x61, 0x6c, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x12, 0x41, - 0x0a, 0x0e, 0x70, 0x65, 0x72, 0x69, 0x6f, 0x64, 0x5f, 0x72, 0x65, 0x63, 0x6f, 0x72, 0x64, 0x73, - 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x64, 0x69, 0x73, 0x70, 0x65, 0x72, 0x73, - 0x65, 0x72, 0x2e, 0x76, 0x32, 0x2e, 0x50, 0x65, 0x72, 0x69, 0x6f, 0x64, 0x52, 0x65, 0x63, 0x6f, - 0x72, 0x64, 0x52, 0x0d, 0x70, 0x65, 0x72, 0x69, 0x6f, 0x64, 0x52, 0x65, 0x63, 0x6f, 0x72, 0x64, - 0x73, 0x12, 0x3b, 0x0a, 0x0b, 0x72, 0x65, 0x73, 0x65, 0x72, 0x76, 0x61, 0x74, 0x69, 0x6f, 0x6e, - 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x19, 0x2e, 0x64, 0x69, 0x73, 0x70, 0x65, 0x72, 0x73, - 0x65, 0x72, 0x2e, 0x76, 0x32, 0x2e, 0x52, 0x65, 0x73, 0x65, 0x72, 0x76, 0x61, 0x74, 0x69, 0x6f, - 0x6e, 0x52, 0x0b, 0x72, 0x65, 0x73, 0x65, 0x72, 0x76, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x2d, - 0x0a, 0x12, 0x63, 0x75, 0x6d, 0x75, 0x6c, 0x61, 0x74, 0x69, 0x76, 0x65, 0x5f, 0x70, 0x61, 0x79, - 0x6d, 0x65, 0x6e, 0x74, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x11, 0x63, 0x75, 0x6d, 0x75, - 0x6c, 0x61, 0x74, 0x69, 0x76, 0x65, 0x50, 0x61, 0x79, 0x6d, 0x65, 0x6e, 0x74, 0x12, 0x3c, 0x0a, - 0x1a, 0x6f, 0x6e, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x5f, 0x63, 0x75, 0x6d, 0x75, 0x6c, 0x61, 0x74, - 0x69, 0x76, 0x65, 0x5f, 0x70, 0x61, 0x79, 0x6d, 0x65, 0x6e, 0x74, 0x18, 0x05, 0x20, 0x01, 0x28, - 0x0c, 0x52, 0x18, 0x6f, 0x6e, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x43, 0x75, 0x6d, 0x75, 0x6c, 0x61, - 0x74, 0x69, 0x76, 0x65, 0x50, 0x61, 0x79, 0x6d, 0x65, 0x6e, 0x74, 0x22, 0x7a, 0x0a, 0x0b, 0x53, - 0x69, 0x67, 0x6e, 0x65, 0x64, 0x42, 0x61, 0x74, 0x63, 0x68, 0x12, 0x2e, 0x0a, 0x06, 0x68, 0x65, - 0x61, 0x64, 0x65, 0x72, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x16, 0x2e, 0x63, 0x6f, 0x6d, - 0x6d, 0x6f, 0x6e, 0x2e, 0x76, 0x32, 0x2e, 0x42, 0x61, 0x74, 0x63, 0x68, 0x48, 0x65, 0x61, 0x64, - 0x65, 0x72, 0x52, 0x06, 0x68, 0x65, 0x61, 0x64, 0x65, 0x72, 0x12, 0x3b, 0x0a, 0x0b, 0x61, 0x74, - 0x74, 0x65, 0x73, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, - 0x19, 0x2e, 0x64, 0x69, 0x73, 0x70, 0x65, 0x72, 0x73, 0x65, 0x72, 0x2e, 0x76, 0x32, 0x2e, 0x41, - 0x74, 0x74, 0x65, 0x73, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x0b, 0x61, 0x74, 0x74, 0x65, - 0x73, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x22, 0xa5, 0x01, 0x0a, 0x14, 0x42, 0x6c, 0x6f, 0x62, - 0x56, 0x65, 0x72, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x49, 0x6e, 0x66, 0x6f, - 0x12, 0x45, 0x0a, 0x10, 0x62, 0x6c, 0x6f, 0x62, 0x5f, 0x63, 0x65, 0x72, 0x74, 0x69, 0x66, 0x69, - 0x63, 0x61, 0x74, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x63, 0x6f, 0x6d, - 0x6d, 0x6f, 0x6e, 0x2e, 0x76, 0x32, 0x2e, 0x42, 0x6c, 0x6f, 0x62, 0x43, 0x65, 0x72, 0x74, 0x69, - 0x66, 0x69, 0x63, 0x61, 0x74, 0x65, 0x52, 0x0f, 0x62, 0x6c, 0x6f, 0x62, 0x43, 0x65, 0x72, 0x74, - 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x65, 0x12, 0x1d, 0x0a, 0x0a, 0x62, 0x6c, 0x6f, 0x62, 0x5f, - 0x69, 0x6e, 0x64, 0x65, 0x78, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x09, 0x62, 0x6c, 0x6f, - 0x62, 0x49, 0x6e, 0x64, 0x65, 0x78, 0x12, 0x27, 0x0a, 0x0f, 0x69, 0x6e, 0x63, 0x6c, 0x75, 0x73, - 0x69, 0x6f, 0x6e, 0x5f, 0x70, 0x72, 0x6f, 0x6f, 0x66, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0c, 0x52, - 0x0e, 0x69, 0x6e, 0x63, 0x6c, 0x75, 0x73, 0x69, 0x6f, 0x6e, 0x50, 0x72, 0x6f, 0x6f, 0x66, 0x22, - 0xec, 0x01, 0x0a, 0x0b, 0x41, 0x74, 0x74, 0x65, 0x73, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, - 0x2c, 0x0a, 0x12, 0x6e, 0x6f, 0x6e, 0x5f, 0x73, 0x69, 0x67, 0x6e, 0x65, 0x72, 0x5f, 0x70, 0x75, - 0x62, 0x6b, 0x65, 0x79, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0c, 0x52, 0x10, 0x6e, 0x6f, 0x6e, - 0x53, 0x69, 0x67, 0x6e, 0x65, 0x72, 0x50, 0x75, 0x62, 0x6b, 0x65, 0x79, 0x73, 0x12, 0x15, 0x0a, - 0x06, 0x61, 0x70, 0x6b, 0x5f, 0x67, 0x32, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x05, 0x61, - 0x70, 0x6b, 0x47, 0x32, 0x12, 0x1f, 0x0a, 0x0b, 0x71, 0x75, 0x6f, 0x72, 0x75, 0x6d, 0x5f, 0x61, - 0x70, 0x6b, 0x73, 0x18, 0x03, 0x20, 0x03, 0x28, 0x0c, 0x52, 0x0a, 0x71, 0x75, 0x6f, 0x72, 0x75, - 0x6d, 0x41, 0x70, 0x6b, 0x73, 0x12, 0x14, 0x0a, 0x05, 0x73, 0x69, 0x67, 0x6d, 0x61, 0x18, 0x04, - 0x20, 0x01, 0x28, 0x0c, 0x52, 0x05, 0x73, 0x69, 0x67, 0x6d, 0x61, 0x12, 0x25, 0x0a, 0x0e, 0x71, - 0x75, 0x6f, 0x72, 0x75, 0x6d, 0x5f, 0x6e, 0x75, 0x6d, 0x62, 0x65, 0x72, 0x73, 0x18, 0x05, 0x20, - 0x03, 0x28, 0x0d, 0x52, 0x0d, 0x71, 0x75, 0x6f, 0x72, 0x75, 0x6d, 0x4e, 0x75, 0x6d, 0x62, 0x65, - 0x72, 0x73, 0x12, 0x3a, 0x0a, 0x19, 0x71, 0x75, 0x6f, 0x72, 0x75, 0x6d, 0x5f, 0x73, 0x69, 0x67, - 0x6e, 0x65, 0x64, 0x5f, 0x70, 0x65, 0x72, 0x63, 0x65, 0x6e, 0x74, 0x61, 0x67, 0x65, 0x73, 0x18, - 0x06, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x17, 0x71, 0x75, 0x6f, 0x72, 0x75, 0x6d, 0x53, 0x69, 0x67, - 0x6e, 0x65, 0x64, 0x50, 0x65, 0x72, 0x63, 0x65, 0x6e, 0x74, 0x61, 0x67, 0x65, 0x73, 0x22, 0x8a, - 0x02, 0x0a, 0x13, 0x50, 0x61, 0x79, 0x6d, 0x65, 0x6e, 0x74, 0x47, 0x6c, 0x6f, 0x62, 0x61, 0x6c, - 0x50, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x12, 0x39, 0x0a, 0x19, 0x67, 0x6c, 0x6f, 0x62, 0x61, 0x6c, - 0x5f, 0x73, 0x79, 0x6d, 0x62, 0x6f, 0x6c, 0x73, 0x5f, 0x70, 0x65, 0x72, 0x5f, 0x73, 0x65, 0x63, - 0x6f, 0x6e, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x04, 0x52, 0x16, 0x67, 0x6c, 0x6f, 0x62, 0x61, - 0x6c, 0x53, 0x79, 0x6d, 0x62, 0x6f, 0x6c, 0x73, 0x50, 0x65, 0x72, 0x53, 0x65, 0x63, 0x6f, 0x6e, - 0x64, 0x12, 0x26, 0x0a, 0x0f, 0x6d, 0x69, 0x6e, 0x5f, 0x6e, 0x75, 0x6d, 0x5f, 0x73, 0x79, 0x6d, - 0x62, 0x6f, 0x6c, 0x73, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x0d, 0x6d, 0x69, 0x6e, 0x4e, - 0x75, 0x6d, 0x53, 0x79, 0x6d, 0x62, 0x6f, 0x6c, 0x73, 0x12, 0x28, 0x0a, 0x10, 0x70, 0x72, 0x69, - 0x63, 0x65, 0x5f, 0x70, 0x65, 0x72, 0x5f, 0x73, 0x79, 0x6d, 0x62, 0x6f, 0x6c, 0x18, 0x03, 0x20, - 0x01, 0x28, 0x0d, 0x52, 0x0e, 0x70, 0x72, 0x69, 0x63, 0x65, 0x50, 0x65, 0x72, 0x53, 0x79, 0x6d, - 0x62, 0x6f, 0x6c, 0x12, 0x2d, 0x0a, 0x12, 0x72, 0x65, 0x73, 0x65, 0x72, 0x76, 0x61, 0x74, 0x69, - 0x6f, 0x6e, 0x5f, 0x77, 0x69, 0x6e, 0x64, 0x6f, 0x77, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0d, 0x52, - 0x11, 0x72, 0x65, 0x73, 0x65, 0x72, 0x76, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x57, 0x69, 0x6e, 0x64, - 0x6f, 0x77, 0x12, 0x37, 0x0a, 0x18, 0x6f, 0x6e, 0x5f, 0x64, 0x65, 0x6d, 0x61, 0x6e, 0x64, 0x5f, - 0x71, 0x75, 0x6f, 0x72, 0x75, 0x6d, 0x5f, 0x6e, 0x75, 0x6d, 0x62, 0x65, 0x72, 0x73, 0x18, 0x05, - 0x20, 0x03, 0x28, 0x0d, 0x52, 0x15, 0x6f, 0x6e, 0x44, 0x65, 0x6d, 0x61, 0x6e, 0x64, 0x51, 0x75, - 0x6f, 0x72, 0x75, 0x6d, 0x4e, 0x75, 0x6d, 0x62, 0x65, 0x72, 0x73, 0x22, 0xd5, 0x01, 0x0a, 0x0b, - 0x52, 0x65, 0x73, 0x65, 0x72, 0x76, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x2c, 0x0a, 0x12, 0x73, - 0x79, 0x6d, 0x62, 0x6f, 0x6c, 0x73, 0x5f, 0x70, 0x65, 0x72, 0x5f, 0x73, 0x65, 0x63, 0x6f, 0x6e, - 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x04, 0x52, 0x10, 0x73, 0x79, 0x6d, 0x62, 0x6f, 0x6c, 0x73, - 0x50, 0x65, 0x72, 0x53, 0x65, 0x63, 0x6f, 0x6e, 0x64, 0x12, 0x27, 0x0a, 0x0f, 0x73, 0x74, 0x61, - 0x72, 0x74, 0x5f, 0x74, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x18, 0x02, 0x20, 0x01, - 0x28, 0x0d, 0x52, 0x0e, 0x73, 0x74, 0x61, 0x72, 0x74, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, - 0x6d, 0x70, 0x12, 0x23, 0x0a, 0x0d, 0x65, 0x6e, 0x64, 0x5f, 0x74, 0x69, 0x6d, 0x65, 0x73, 0x74, - 0x61, 0x6d, 0x70, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x0c, 0x65, 0x6e, 0x64, 0x54, 0x69, - 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x12, 0x25, 0x0a, 0x0e, 0x71, 0x75, 0x6f, 0x72, 0x75, - 0x6d, 0x5f, 0x6e, 0x75, 0x6d, 0x62, 0x65, 0x72, 0x73, 0x18, 0x04, 0x20, 0x03, 0x28, 0x0d, 0x52, - 0x0d, 0x71, 0x75, 0x6f, 0x72, 0x75, 0x6d, 0x4e, 0x75, 0x6d, 0x62, 0x65, 0x72, 0x73, 0x12, 0x23, - 0x0a, 0x0d, 0x71, 0x75, 0x6f, 0x72, 0x75, 0x6d, 0x5f, 0x73, 0x70, 0x6c, 0x69, 0x74, 0x73, 0x18, - 0x05, 0x20, 0x03, 0x28, 0x0d, 0x52, 0x0c, 0x71, 0x75, 0x6f, 0x72, 0x75, 0x6d, 0x53, 0x70, 0x6c, - 0x69, 0x74, 0x73, 0x22, 0x3a, 0x0a, 0x0c, 0x50, 0x65, 0x72, 0x69, 0x6f, 0x64, 0x52, 0x65, 0x63, - 0x6f, 0x72, 0x64, 0x12, 0x14, 0x0a, 0x05, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x18, 0x01, 0x20, 0x01, - 0x28, 0x0d, 0x52, 0x05, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x12, 0x14, 0x0a, 0x05, 0x75, 0x73, 0x61, - 0x67, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x04, 0x52, 0x05, 0x75, 0x73, 0x61, 0x67, 0x65, 0x2a, - 0x6a, 0x0a, 0x0a, 0x42, 0x6c, 0x6f, 0x62, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x12, 0x0b, 0x0a, - 0x07, 0x55, 0x4e, 0x4b, 0x4e, 0x4f, 0x57, 0x4e, 0x10, 0x00, 0x12, 0x0a, 0x0a, 0x06, 0x51, 0x55, - 0x45, 0x55, 0x45, 0x44, 0x10, 0x01, 0x12, 0x0b, 0x0a, 0x07, 0x45, 0x4e, 0x43, 0x4f, 0x44, 0x45, - 0x44, 0x10, 0x02, 0x12, 0x0d, 0x0a, 0x09, 0x43, 0x45, 0x52, 0x54, 0x49, 0x46, 0x49, 0x45, 0x44, - 0x10, 0x03, 0x12, 0x0a, 0x0a, 0x06, 0x46, 0x41, 0x49, 0x4c, 0x45, 0x44, 0x10, 0x04, 0x12, 0x1b, - 0x0a, 0x17, 0x49, 0x4e, 0x53, 0x55, 0x46, 0x46, 0x49, 0x43, 0x49, 0x45, 0x4e, 0x54, 0x5f, 0x53, - 0x49, 0x47, 0x4e, 0x41, 0x54, 0x55, 0x52, 0x45, 0x53, 0x10, 0x05, 0x32, 0xf2, 0x02, 0x0a, 0x09, - 0x44, 0x69, 0x73, 0x70, 0x65, 0x72, 0x73, 0x65, 0x72, 0x12, 0x54, 0x0a, 0x0c, 0x44, 0x69, 0x73, - 0x70, 0x65, 0x72, 0x73, 0x65, 0x42, 0x6c, 0x6f, 0x62, 0x12, 0x21, 0x2e, 0x64, 0x69, 0x73, 0x70, - 0x65, 0x72, 0x73, 0x65, 0x72, 0x2e, 0x76, 0x32, 0x2e, 0x44, 0x69, 0x73, 0x70, 0x65, 0x72, 0x73, - 0x65, 0x42, 0x6c, 0x6f, 0x62, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1f, 0x2e, 0x64, - 0x69, 0x73, 0x70, 0x65, 0x72, 0x73, 0x65, 0x72, 0x2e, 0x76, 0x32, 0x2e, 0x44, 0x69, 0x73, 0x70, - 0x65, 0x72, 0x73, 0x65, 0x42, 0x6c, 0x6f, 0x62, 0x52, 0x65, 0x70, 0x6c, 0x79, 0x22, 0x00, 0x12, - 0x51, 0x0a, 0x0d, 0x47, 0x65, 0x74, 0x42, 0x6c, 0x6f, 0x62, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, - 0x12, 0x1f, 0x2e, 0x64, 0x69, 0x73, 0x70, 0x65, 0x72, 0x73, 0x65, 0x72, 0x2e, 0x76, 0x32, 0x2e, - 0x42, 0x6c, 0x6f, 0x62, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, - 0x74, 0x1a, 0x1d, 0x2e, 0x64, 0x69, 0x73, 0x70, 0x65, 0x72, 0x73, 0x65, 0x72, 0x2e, 0x76, 0x32, - 0x2e, 0x42, 0x6c, 0x6f, 0x62, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x52, 0x65, 0x70, 0x6c, 0x79, - 0x22, 0x00, 0x12, 0x5d, 0x0a, 0x11, 0x47, 0x65, 0x74, 0x42, 0x6c, 0x6f, 0x62, 0x43, 0x6f, 0x6d, - 0x6d, 0x69, 0x74, 0x6d, 0x65, 0x6e, 0x74, 0x12, 0x23, 0x2e, 0x64, 0x69, 0x73, 0x70, 0x65, 0x72, - 0x73, 0x65, 0x72, 0x2e, 0x76, 0x32, 0x2e, 0x42, 0x6c, 0x6f, 0x62, 0x43, 0x6f, 0x6d, 0x6d, 0x69, - 0x74, 0x6d, 0x65, 0x6e, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x21, 0x2e, 0x64, - 0x69, 0x73, 0x70, 0x65, 0x72, 0x73, 0x65, 0x72, 0x2e, 0x76, 0x32, 0x2e, 0x42, 0x6c, 0x6f, 0x62, - 0x43, 0x6f, 0x6d, 0x6d, 0x69, 0x74, 0x6d, 0x65, 0x6e, 0x74, 0x52, 0x65, 0x70, 0x6c, 0x79, 0x22, - 0x00, 0x12, 0x5d, 0x0a, 0x0f, 0x47, 0x65, 0x74, 0x50, 0x61, 0x79, 0x6d, 0x65, 0x6e, 0x74, 0x53, - 0x74, 0x61, 0x74, 0x65, 0x12, 0x24, 0x2e, 0x64, 0x69, 0x73, 0x70, 0x65, 0x72, 0x73, 0x65, 0x72, - 0x2e, 0x76, 0x32, 0x2e, 0x47, 0x65, 0x74, 0x50, 0x61, 0x79, 0x6d, 0x65, 0x6e, 0x74, 0x53, 0x74, - 0x61, 0x74, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x22, 0x2e, 0x64, 0x69, 0x73, - 0x70, 0x65, 0x72, 0x73, 0x65, 0x72, 0x2e, 0x76, 0x32, 0x2e, 0x47, 0x65, 0x74, 0x50, 0x61, 0x79, - 0x6d, 0x65, 0x6e, 0x74, 0x53, 0x74, 0x61, 0x74, 0x65, 0x52, 0x65, 0x70, 0x6c, 0x79, 0x22, 0x00, - 0x42, 0x34, 0x5a, 0x32, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x4c, - 0x61, 0x79, 0x72, 0x2d, 0x4c, 0x61, 0x62, 0x73, 0x2f, 0x65, 0x69, 0x67, 0x65, 0x6e, 0x64, 0x61, - 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x67, 0x72, 0x70, 0x63, 0x2f, 0x64, 0x69, 0x73, 0x70, 0x65, 0x72, - 0x73, 0x65, 0x72, 0x2f, 0x76, 0x32, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, + 0x65, 0x72, 0x12, 0x1c, 0x0a, 0x09, 0x73, 0x69, 0x67, 0x6e, 0x61, 0x74, 0x75, 0x72, 0x65, 0x18, + 0x03, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x09, 0x73, 0x69, 0x67, 0x6e, 0x61, 0x74, 0x75, 0x72, 0x65, + 0x22, 0x60, 0x0a, 0x11, 0x44, 0x69, 0x73, 0x70, 0x65, 0x72, 0x73, 0x65, 0x42, 0x6c, 0x6f, 0x62, + 0x52, 0x65, 0x70, 0x6c, 0x79, 0x12, 0x30, 0x0a, 0x06, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x18, + 0x01, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x18, 0x2e, 0x64, 0x69, 0x73, 0x70, 0x65, 0x72, 0x73, 0x65, + 0x72, 0x2e, 0x76, 0x32, 0x2e, 0x42, 0x6c, 0x6f, 0x62, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x52, + 0x06, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x12, 0x19, 0x0a, 0x08, 0x62, 0x6c, 0x6f, 0x62, 0x5f, + 0x6b, 0x65, 0x79, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x07, 0x62, 0x6c, 0x6f, 0x62, 0x4b, + 0x65, 0x79, 0x22, 0x2e, 0x0a, 0x11, 0x42, 0x6c, 0x6f, 0x62, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, + 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x19, 0x0a, 0x08, 0x62, 0x6c, 0x6f, 0x62, 0x5f, + 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x07, 0x62, 0x6c, 0x6f, 0x62, 0x4b, + 0x65, 0x79, 0x22, 0xd2, 0x01, 0x0a, 0x0f, 0x42, 0x6c, 0x6f, 0x62, 0x53, 0x74, 0x61, 0x74, 0x75, + 0x73, 0x52, 0x65, 0x70, 0x6c, 0x79, 0x12, 0x30, 0x0a, 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, + 0x18, 0x01, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x18, 0x2e, 0x64, 0x69, 0x73, 0x70, 0x65, 0x72, 0x73, + 0x65, 0x72, 0x2e, 0x76, 0x32, 0x2e, 0x42, 0x6c, 0x6f, 0x62, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, + 0x52, 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x12, 0x3c, 0x0a, 0x0c, 0x73, 0x69, 0x67, 0x6e, + 0x65, 0x64, 0x5f, 0x62, 0x61, 0x74, 0x63, 0x68, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x19, + 0x2e, 0x64, 0x69, 0x73, 0x70, 0x65, 0x72, 0x73, 0x65, 0x72, 0x2e, 0x76, 0x32, 0x2e, 0x53, 0x69, + 0x67, 0x6e, 0x65, 0x64, 0x42, 0x61, 0x74, 0x63, 0x68, 0x52, 0x0b, 0x73, 0x69, 0x67, 0x6e, 0x65, + 0x64, 0x42, 0x61, 0x74, 0x63, 0x68, 0x12, 0x4f, 0x0a, 0x13, 0x62, 0x6c, 0x6f, 0x62, 0x5f, 0x69, + 0x6e, 0x63, 0x6c, 0x75, 0x73, 0x69, 0x6f, 0x6e, 0x5f, 0x69, 0x6e, 0x66, 0x6f, 0x18, 0x03, 0x20, + 0x01, 0x28, 0x0b, 0x32, 0x1f, 0x2e, 0x64, 0x69, 0x73, 0x70, 0x65, 0x72, 0x73, 0x65, 0x72, 0x2e, + 0x76, 0x32, 0x2e, 0x42, 0x6c, 0x6f, 0x62, 0x49, 0x6e, 0x63, 0x6c, 0x75, 0x73, 0x69, 0x6f, 0x6e, + 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x11, 0x62, 0x6c, 0x6f, 0x62, 0x49, 0x6e, 0x63, 0x6c, 0x75, 0x73, + 0x69, 0x6f, 0x6e, 0x49, 0x6e, 0x66, 0x6f, 0x22, 0x2b, 0x0a, 0x15, 0x42, 0x6c, 0x6f, 0x62, 0x43, + 0x6f, 0x6d, 0x6d, 0x69, 0x74, 0x6d, 0x65, 0x6e, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, + 0x12, 0x12, 0x0a, 0x04, 0x62, 0x6c, 0x6f, 0x62, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x04, + 0x62, 0x6c, 0x6f, 0x62, 0x22, 0x56, 0x0a, 0x13, 0x42, 0x6c, 0x6f, 0x62, 0x43, 0x6f, 0x6d, 0x6d, + 0x69, 0x74, 0x6d, 0x65, 0x6e, 0x74, 0x52, 0x65, 0x70, 0x6c, 0x79, 0x12, 0x3f, 0x0a, 0x0f, 0x62, + 0x6c, 0x6f, 0x62, 0x5f, 0x63, 0x6f, 0x6d, 0x6d, 0x69, 0x74, 0x6d, 0x65, 0x6e, 0x74, 0x18, 0x01, + 0x20, 0x01, 0x28, 0x0b, 0x32, 0x16, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x42, 0x6c, + 0x6f, 0x62, 0x43, 0x6f, 0x6d, 0x6d, 0x69, 0x74, 0x6d, 0x65, 0x6e, 0x74, 0x52, 0x0e, 0x62, 0x6c, + 0x6f, 0x62, 0x43, 0x6f, 0x6d, 0x6d, 0x69, 0x74, 0x6d, 0x65, 0x6e, 0x74, 0x22, 0x55, 0x0a, 0x16, + 0x47, 0x65, 0x74, 0x50, 0x61, 0x79, 0x6d, 0x65, 0x6e, 0x74, 0x53, 0x74, 0x61, 0x74, 0x65, 0x52, + 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x1d, 0x0a, 0x0a, 0x61, 0x63, 0x63, 0x6f, 0x75, 0x6e, + 0x74, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x61, 0x63, 0x63, 0x6f, + 0x75, 0x6e, 0x74, 0x49, 0x64, 0x12, 0x1c, 0x0a, 0x09, 0x73, 0x69, 0x67, 0x6e, 0x61, 0x74, 0x75, + 0x72, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x09, 0x73, 0x69, 0x67, 0x6e, 0x61, 0x74, + 0x75, 0x72, 0x65, 0x22, 0xda, 0x02, 0x0a, 0x14, 0x47, 0x65, 0x74, 0x50, 0x61, 0x79, 0x6d, 0x65, + 0x6e, 0x74, 0x53, 0x74, 0x61, 0x74, 0x65, 0x52, 0x65, 0x70, 0x6c, 0x79, 0x12, 0x55, 0x0a, 0x15, + 0x70, 0x61, 0x79, 0x6d, 0x65, 0x6e, 0x74, 0x5f, 0x67, 0x6c, 0x6f, 0x62, 0x61, 0x6c, 0x5f, 0x70, + 0x61, 0x72, 0x61, 0x6d, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x21, 0x2e, 0x64, 0x69, + 0x73, 0x70, 0x65, 0x72, 0x73, 0x65, 0x72, 0x2e, 0x76, 0x32, 0x2e, 0x50, 0x61, 0x79, 0x6d, 0x65, + 0x6e, 0x74, 0x47, 0x6c, 0x6f, 0x62, 0x61, 0x6c, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x52, 0x13, + 0x70, 0x61, 0x79, 0x6d, 0x65, 0x6e, 0x74, 0x47, 0x6c, 0x6f, 0x62, 0x61, 0x6c, 0x50, 0x61, 0x72, + 0x61, 0x6d, 0x73, 0x12, 0x41, 0x0a, 0x0e, 0x70, 0x65, 0x72, 0x69, 0x6f, 0x64, 0x5f, 0x72, 0x65, + 0x63, 0x6f, 0x72, 0x64, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x64, 0x69, + 0x73, 0x70, 0x65, 0x72, 0x73, 0x65, 0x72, 0x2e, 0x76, 0x32, 0x2e, 0x50, 0x65, 0x72, 0x69, 0x6f, + 0x64, 0x52, 0x65, 0x63, 0x6f, 0x72, 0x64, 0x52, 0x0d, 0x70, 0x65, 0x72, 0x69, 0x6f, 0x64, 0x52, + 0x65, 0x63, 0x6f, 0x72, 0x64, 0x73, 0x12, 0x3b, 0x0a, 0x0b, 0x72, 0x65, 0x73, 0x65, 0x72, 0x76, + 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x19, 0x2e, 0x64, 0x69, + 0x73, 0x70, 0x65, 0x72, 0x73, 0x65, 0x72, 0x2e, 0x76, 0x32, 0x2e, 0x52, 0x65, 0x73, 0x65, 0x72, + 0x76, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x0b, 0x72, 0x65, 0x73, 0x65, 0x72, 0x76, 0x61, 0x74, + 0x69, 0x6f, 0x6e, 0x12, 0x2d, 0x0a, 0x12, 0x63, 0x75, 0x6d, 0x75, 0x6c, 0x61, 0x74, 0x69, 0x76, + 0x65, 0x5f, 0x70, 0x61, 0x79, 0x6d, 0x65, 0x6e, 0x74, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0c, 0x52, + 0x11, 0x63, 0x75, 0x6d, 0x75, 0x6c, 0x61, 0x74, 0x69, 0x76, 0x65, 0x50, 0x61, 0x79, 0x6d, 0x65, + 0x6e, 0x74, 0x12, 0x3c, 0x0a, 0x1a, 0x6f, 0x6e, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x5f, 0x63, 0x75, + 0x6d, 0x75, 0x6c, 0x61, 0x74, 0x69, 0x76, 0x65, 0x5f, 0x70, 0x61, 0x79, 0x6d, 0x65, 0x6e, 0x74, + 0x18, 0x05, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x18, 0x6f, 0x6e, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x43, + 0x75, 0x6d, 0x75, 0x6c, 0x61, 0x74, 0x69, 0x76, 0x65, 0x50, 0x61, 0x79, 0x6d, 0x65, 0x6e, 0x74, + 0x22, 0x7a, 0x0a, 0x0b, 0x53, 0x69, 0x67, 0x6e, 0x65, 0x64, 0x42, 0x61, 0x74, 0x63, 0x68, 0x12, + 0x2e, 0x0a, 0x06, 0x68, 0x65, 0x61, 0x64, 0x65, 0x72, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, + 0x16, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x76, 0x32, 0x2e, 0x42, 0x61, 0x74, 0x63, + 0x68, 0x48, 0x65, 0x61, 0x64, 0x65, 0x72, 0x52, 0x06, 0x68, 0x65, 0x61, 0x64, 0x65, 0x72, 0x12, + 0x3b, 0x0a, 0x0b, 0x61, 0x74, 0x74, 0x65, 0x73, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x02, + 0x20, 0x01, 0x28, 0x0b, 0x32, 0x19, 0x2e, 0x64, 0x69, 0x73, 0x70, 0x65, 0x72, 0x73, 0x65, 0x72, + 0x2e, 0x76, 0x32, 0x2e, 0x41, 0x74, 0x74, 0x65, 0x73, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, + 0x0b, 0x61, 0x74, 0x74, 0x65, 0x73, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x22, 0xa2, 0x01, 0x0a, + 0x11, 0x42, 0x6c, 0x6f, 0x62, 0x49, 0x6e, 0x63, 0x6c, 0x75, 0x73, 0x69, 0x6f, 0x6e, 0x49, 0x6e, + 0x66, 0x6f, 0x12, 0x45, 0x0a, 0x10, 0x62, 0x6c, 0x6f, 0x62, 0x5f, 0x63, 0x65, 0x72, 0x74, 0x69, + 0x66, 0x69, 0x63, 0x61, 0x74, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x63, + 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x76, 0x32, 0x2e, 0x42, 0x6c, 0x6f, 0x62, 0x43, 0x65, 0x72, + 0x74, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x65, 0x52, 0x0f, 0x62, 0x6c, 0x6f, 0x62, 0x43, 0x65, + 0x72, 0x74, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x65, 0x12, 0x1d, 0x0a, 0x0a, 0x62, 0x6c, 0x6f, + 0x62, 0x5f, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x09, 0x62, + 0x6c, 0x6f, 0x62, 0x49, 0x6e, 0x64, 0x65, 0x78, 0x12, 0x27, 0x0a, 0x0f, 0x69, 0x6e, 0x63, 0x6c, + 0x75, 0x73, 0x69, 0x6f, 0x6e, 0x5f, 0x70, 0x72, 0x6f, 0x6f, 0x66, 0x18, 0x03, 0x20, 0x01, 0x28, + 0x0c, 0x52, 0x0e, 0x69, 0x6e, 0x63, 0x6c, 0x75, 0x73, 0x69, 0x6f, 0x6e, 0x50, 0x72, 0x6f, 0x6f, + 0x66, 0x22, 0xec, 0x01, 0x0a, 0x0b, 0x41, 0x74, 0x74, 0x65, 0x73, 0x74, 0x61, 0x74, 0x69, 0x6f, + 0x6e, 0x12, 0x2c, 0x0a, 0x12, 0x6e, 0x6f, 0x6e, 0x5f, 0x73, 0x69, 0x67, 0x6e, 0x65, 0x72, 0x5f, + 0x70, 0x75, 0x62, 0x6b, 0x65, 0x79, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0c, 0x52, 0x10, 0x6e, + 0x6f, 0x6e, 0x53, 0x69, 0x67, 0x6e, 0x65, 0x72, 0x50, 0x75, 0x62, 0x6b, 0x65, 0x79, 0x73, 0x12, + 0x15, 0x0a, 0x06, 0x61, 0x70, 0x6b, 0x5f, 0x67, 0x32, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0c, 0x52, + 0x05, 0x61, 0x70, 0x6b, 0x47, 0x32, 0x12, 0x1f, 0x0a, 0x0b, 0x71, 0x75, 0x6f, 0x72, 0x75, 0x6d, + 0x5f, 0x61, 0x70, 0x6b, 0x73, 0x18, 0x03, 0x20, 0x03, 0x28, 0x0c, 0x52, 0x0a, 0x71, 0x75, 0x6f, + 0x72, 0x75, 0x6d, 0x41, 0x70, 0x6b, 0x73, 0x12, 0x14, 0x0a, 0x05, 0x73, 0x69, 0x67, 0x6d, 0x61, + 0x18, 0x04, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x05, 0x73, 0x69, 0x67, 0x6d, 0x61, 0x12, 0x25, 0x0a, + 0x0e, 0x71, 0x75, 0x6f, 0x72, 0x75, 0x6d, 0x5f, 0x6e, 0x75, 0x6d, 0x62, 0x65, 0x72, 0x73, 0x18, + 0x05, 0x20, 0x03, 0x28, 0x0d, 0x52, 0x0d, 0x71, 0x75, 0x6f, 0x72, 0x75, 0x6d, 0x4e, 0x75, 0x6d, + 0x62, 0x65, 0x72, 0x73, 0x12, 0x3a, 0x0a, 0x19, 0x71, 0x75, 0x6f, 0x72, 0x75, 0x6d, 0x5f, 0x73, + 0x69, 0x67, 0x6e, 0x65, 0x64, 0x5f, 0x70, 0x65, 0x72, 0x63, 0x65, 0x6e, 0x74, 0x61, 0x67, 0x65, + 0x73, 0x18, 0x06, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x17, 0x71, 0x75, 0x6f, 0x72, 0x75, 0x6d, 0x53, + 0x69, 0x67, 0x6e, 0x65, 0x64, 0x50, 0x65, 0x72, 0x63, 0x65, 0x6e, 0x74, 0x61, 0x67, 0x65, 0x73, + 0x22, 0x8a, 0x02, 0x0a, 0x13, 0x50, 0x61, 0x79, 0x6d, 0x65, 0x6e, 0x74, 0x47, 0x6c, 0x6f, 0x62, + 0x61, 0x6c, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x12, 0x39, 0x0a, 0x19, 0x67, 0x6c, 0x6f, 0x62, + 0x61, 0x6c, 0x5f, 0x73, 0x79, 0x6d, 0x62, 0x6f, 0x6c, 0x73, 0x5f, 0x70, 0x65, 0x72, 0x5f, 0x73, + 0x65, 0x63, 0x6f, 0x6e, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x04, 0x52, 0x16, 0x67, 0x6c, 0x6f, + 0x62, 0x61, 0x6c, 0x53, 0x79, 0x6d, 0x62, 0x6f, 0x6c, 0x73, 0x50, 0x65, 0x72, 0x53, 0x65, 0x63, + 0x6f, 0x6e, 0x64, 0x12, 0x26, 0x0a, 0x0f, 0x6d, 0x69, 0x6e, 0x5f, 0x6e, 0x75, 0x6d, 0x5f, 0x73, + 0x79, 0x6d, 0x62, 0x6f, 0x6c, 0x73, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x0d, 0x6d, 0x69, + 0x6e, 0x4e, 0x75, 0x6d, 0x53, 0x79, 0x6d, 0x62, 0x6f, 0x6c, 0x73, 0x12, 0x28, 0x0a, 0x10, 0x70, + 0x72, 0x69, 0x63, 0x65, 0x5f, 0x70, 0x65, 0x72, 0x5f, 0x73, 0x79, 0x6d, 0x62, 0x6f, 0x6c, 0x18, + 0x03, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x0e, 0x70, 0x72, 0x69, 0x63, 0x65, 0x50, 0x65, 0x72, 0x53, + 0x79, 0x6d, 0x62, 0x6f, 0x6c, 0x12, 0x2d, 0x0a, 0x12, 0x72, 0x65, 0x73, 0x65, 0x72, 0x76, 0x61, + 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x77, 0x69, 0x6e, 0x64, 0x6f, 0x77, 0x18, 0x04, 0x20, 0x01, 0x28, + 0x0d, 0x52, 0x11, 0x72, 0x65, 0x73, 0x65, 0x72, 0x76, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x57, 0x69, + 0x6e, 0x64, 0x6f, 0x77, 0x12, 0x37, 0x0a, 0x18, 0x6f, 0x6e, 0x5f, 0x64, 0x65, 0x6d, 0x61, 0x6e, + 0x64, 0x5f, 0x71, 0x75, 0x6f, 0x72, 0x75, 0x6d, 0x5f, 0x6e, 0x75, 0x6d, 0x62, 0x65, 0x72, 0x73, + 0x18, 0x05, 0x20, 0x03, 0x28, 0x0d, 0x52, 0x15, 0x6f, 0x6e, 0x44, 0x65, 0x6d, 0x61, 0x6e, 0x64, + 0x51, 0x75, 0x6f, 0x72, 0x75, 0x6d, 0x4e, 0x75, 0x6d, 0x62, 0x65, 0x72, 0x73, 0x22, 0xd5, 0x01, + 0x0a, 0x0b, 0x52, 0x65, 0x73, 0x65, 0x72, 0x76, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x2c, 0x0a, + 0x12, 0x73, 0x79, 0x6d, 0x62, 0x6f, 0x6c, 0x73, 0x5f, 0x70, 0x65, 0x72, 0x5f, 0x73, 0x65, 0x63, + 0x6f, 0x6e, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x04, 0x52, 0x10, 0x73, 0x79, 0x6d, 0x62, 0x6f, + 0x6c, 0x73, 0x50, 0x65, 0x72, 0x53, 0x65, 0x63, 0x6f, 0x6e, 0x64, 0x12, 0x27, 0x0a, 0x0f, 0x73, + 0x74, 0x61, 0x72, 0x74, 0x5f, 0x74, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x18, 0x02, + 0x20, 0x01, 0x28, 0x0d, 0x52, 0x0e, 0x73, 0x74, 0x61, 0x72, 0x74, 0x54, 0x69, 0x6d, 0x65, 0x73, + 0x74, 0x61, 0x6d, 0x70, 0x12, 0x23, 0x0a, 0x0d, 0x65, 0x6e, 0x64, 0x5f, 0x74, 0x69, 0x6d, 0x65, + 0x73, 0x74, 0x61, 0x6d, 0x70, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x0c, 0x65, 0x6e, 0x64, + 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x12, 0x25, 0x0a, 0x0e, 0x71, 0x75, 0x6f, + 0x72, 0x75, 0x6d, 0x5f, 0x6e, 0x75, 0x6d, 0x62, 0x65, 0x72, 0x73, 0x18, 0x04, 0x20, 0x03, 0x28, + 0x0d, 0x52, 0x0d, 0x71, 0x75, 0x6f, 0x72, 0x75, 0x6d, 0x4e, 0x75, 0x6d, 0x62, 0x65, 0x72, 0x73, + 0x12, 0x23, 0x0a, 0x0d, 0x71, 0x75, 0x6f, 0x72, 0x75, 0x6d, 0x5f, 0x73, 0x70, 0x6c, 0x69, 0x74, + 0x73, 0x18, 0x05, 0x20, 0x03, 0x28, 0x0d, 0x52, 0x0c, 0x71, 0x75, 0x6f, 0x72, 0x75, 0x6d, 0x53, + 0x70, 0x6c, 0x69, 0x74, 0x73, 0x22, 0x3a, 0x0a, 0x0c, 0x50, 0x65, 0x72, 0x69, 0x6f, 0x64, 0x52, + 0x65, 0x63, 0x6f, 0x72, 0x64, 0x12, 0x14, 0x0a, 0x05, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x18, 0x01, + 0x20, 0x01, 0x28, 0x0d, 0x52, 0x05, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x12, 0x14, 0x0a, 0x05, 0x75, + 0x73, 0x61, 0x67, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x04, 0x52, 0x05, 0x75, 0x73, 0x61, 0x67, + 0x65, 0x2a, 0x6a, 0x0a, 0x0a, 0x42, 0x6c, 0x6f, 0x62, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x12, + 0x0b, 0x0a, 0x07, 0x55, 0x4e, 0x4b, 0x4e, 0x4f, 0x57, 0x4e, 0x10, 0x00, 0x12, 0x0a, 0x0a, 0x06, + 0x51, 0x55, 0x45, 0x55, 0x45, 0x44, 0x10, 0x01, 0x12, 0x0b, 0x0a, 0x07, 0x45, 0x4e, 0x43, 0x4f, + 0x44, 0x45, 0x44, 0x10, 0x02, 0x12, 0x0d, 0x0a, 0x09, 0x43, 0x45, 0x52, 0x54, 0x49, 0x46, 0x49, + 0x45, 0x44, 0x10, 0x03, 0x12, 0x0a, 0x0a, 0x06, 0x46, 0x41, 0x49, 0x4c, 0x45, 0x44, 0x10, 0x04, + 0x12, 0x1b, 0x0a, 0x17, 0x49, 0x4e, 0x53, 0x55, 0x46, 0x46, 0x49, 0x43, 0x49, 0x45, 0x4e, 0x54, + 0x5f, 0x53, 0x49, 0x47, 0x4e, 0x41, 0x54, 0x55, 0x52, 0x45, 0x53, 0x10, 0x05, 0x32, 0xf2, 0x02, + 0x0a, 0x09, 0x44, 0x69, 0x73, 0x70, 0x65, 0x72, 0x73, 0x65, 0x72, 0x12, 0x54, 0x0a, 0x0c, 0x44, + 0x69, 0x73, 0x70, 0x65, 0x72, 0x73, 0x65, 0x42, 0x6c, 0x6f, 0x62, 0x12, 0x21, 0x2e, 0x64, 0x69, + 0x73, 0x70, 0x65, 0x72, 0x73, 0x65, 0x72, 0x2e, 0x76, 0x32, 0x2e, 0x44, 0x69, 0x73, 0x70, 0x65, + 0x72, 0x73, 0x65, 0x42, 0x6c, 0x6f, 0x62, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1f, + 0x2e, 0x64, 0x69, 0x73, 0x70, 0x65, 0x72, 0x73, 0x65, 0x72, 0x2e, 0x76, 0x32, 0x2e, 0x44, 0x69, + 0x73, 0x70, 0x65, 0x72, 0x73, 0x65, 0x42, 0x6c, 0x6f, 0x62, 0x52, 0x65, 0x70, 0x6c, 0x79, 0x22, + 0x00, 0x12, 0x51, 0x0a, 0x0d, 0x47, 0x65, 0x74, 0x42, 0x6c, 0x6f, 0x62, 0x53, 0x74, 0x61, 0x74, + 0x75, 0x73, 0x12, 0x1f, 0x2e, 0x64, 0x69, 0x73, 0x70, 0x65, 0x72, 0x73, 0x65, 0x72, 0x2e, 0x76, + 0x32, 0x2e, 0x42, 0x6c, 0x6f, 0x62, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x52, 0x65, 0x71, 0x75, + 0x65, 0x73, 0x74, 0x1a, 0x1d, 0x2e, 0x64, 0x69, 0x73, 0x70, 0x65, 0x72, 0x73, 0x65, 0x72, 0x2e, + 0x76, 0x32, 0x2e, 0x42, 0x6c, 0x6f, 0x62, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x52, 0x65, 0x70, + 0x6c, 0x79, 0x22, 0x00, 0x12, 0x5d, 0x0a, 0x11, 0x47, 0x65, 0x74, 0x42, 0x6c, 0x6f, 0x62, 0x43, + 0x6f, 0x6d, 0x6d, 0x69, 0x74, 0x6d, 0x65, 0x6e, 0x74, 0x12, 0x23, 0x2e, 0x64, 0x69, 0x73, 0x70, + 0x65, 0x72, 0x73, 0x65, 0x72, 0x2e, 0x76, 0x32, 0x2e, 0x42, 0x6c, 0x6f, 0x62, 0x43, 0x6f, 0x6d, + 0x6d, 0x69, 0x74, 0x6d, 0x65, 0x6e, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x21, + 0x2e, 0x64, 0x69, 0x73, 0x70, 0x65, 0x72, 0x73, 0x65, 0x72, 0x2e, 0x76, 0x32, 0x2e, 0x42, 0x6c, + 0x6f, 0x62, 0x43, 0x6f, 0x6d, 0x6d, 0x69, 0x74, 0x6d, 0x65, 0x6e, 0x74, 0x52, 0x65, 0x70, 0x6c, + 0x79, 0x22, 0x00, 0x12, 0x5d, 0x0a, 0x0f, 0x47, 0x65, 0x74, 0x50, 0x61, 0x79, 0x6d, 0x65, 0x6e, + 0x74, 0x53, 0x74, 0x61, 0x74, 0x65, 0x12, 0x24, 0x2e, 0x64, 0x69, 0x73, 0x70, 0x65, 0x72, 0x73, + 0x65, 0x72, 0x2e, 0x76, 0x32, 0x2e, 0x47, 0x65, 0x74, 0x50, 0x61, 0x79, 0x6d, 0x65, 0x6e, 0x74, + 0x53, 0x74, 0x61, 0x74, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x22, 0x2e, 0x64, + 0x69, 0x73, 0x70, 0x65, 0x72, 0x73, 0x65, 0x72, 0x2e, 0x76, 0x32, 0x2e, 0x47, 0x65, 0x74, 0x50, + 0x61, 0x79, 0x6d, 0x65, 0x6e, 0x74, 0x53, 0x74, 0x61, 0x74, 0x65, 0x52, 0x65, 0x70, 0x6c, 0x79, + 0x22, 0x00, 0x42, 0x34, 0x5a, 0x32, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, + 0x2f, 0x4c, 0x61, 0x79, 0x72, 0x2d, 0x4c, 0x61, 0x62, 0x73, 0x2f, 0x65, 0x69, 0x67, 0x65, 0x6e, + 0x64, 0x61, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x67, 0x72, 0x70, 0x63, 0x2f, 0x64, 0x69, 0x73, 0x70, + 0x65, 0x72, 0x73, 0x65, 0x72, 0x2f, 0x76, 0x32, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, } var ( @@ -1253,7 +1263,7 @@ var file_disperser_v2_disperser_v2_proto_goTypes = []interface{}{ (*GetPaymentStateRequest)(nil), // 7: disperser.v2.GetPaymentStateRequest (*GetPaymentStateReply)(nil), // 8: disperser.v2.GetPaymentStateReply (*SignedBatch)(nil), // 9: disperser.v2.SignedBatch - (*BlobVerificationInfo)(nil), // 10: disperser.v2.BlobVerificationInfo + (*BlobInclusionInfo)(nil), // 10: disperser.v2.BlobInclusionInfo (*Attestation)(nil), // 11: disperser.v2.Attestation (*PaymentGlobalParams)(nil), // 12: disperser.v2.PaymentGlobalParams (*Reservation)(nil), // 13: disperser.v2.Reservation @@ -1268,14 +1278,14 @@ var file_disperser_v2_disperser_v2_proto_depIdxs = []int32{ 0, // 1: disperser.v2.DisperseBlobReply.result:type_name -> disperser.v2.BlobStatus 0, // 2: disperser.v2.BlobStatusReply.status:type_name -> disperser.v2.BlobStatus 9, // 3: disperser.v2.BlobStatusReply.signed_batch:type_name -> disperser.v2.SignedBatch - 10, // 4: disperser.v2.BlobStatusReply.blob_verification_info:type_name -> disperser.v2.BlobVerificationInfo + 10, // 4: disperser.v2.BlobStatusReply.blob_inclusion_info:type_name -> disperser.v2.BlobInclusionInfo 16, // 5: disperser.v2.BlobCommitmentReply.blob_commitment:type_name -> common.BlobCommitment 12, // 6: disperser.v2.GetPaymentStateReply.payment_global_params:type_name -> disperser.v2.PaymentGlobalParams 14, // 7: disperser.v2.GetPaymentStateReply.period_records:type_name -> disperser.v2.PeriodRecord 13, // 8: disperser.v2.GetPaymentStateReply.reservation:type_name -> disperser.v2.Reservation 17, // 9: disperser.v2.SignedBatch.header:type_name -> common.v2.BatchHeader 11, // 10: disperser.v2.SignedBatch.attestation:type_name -> disperser.v2.Attestation - 18, // 11: disperser.v2.BlobVerificationInfo.blob_certificate:type_name -> common.v2.BlobCertificate + 18, // 11: disperser.v2.BlobInclusionInfo.blob_certificate:type_name -> common.v2.BlobCertificate 1, // 12: disperser.v2.Disperser.DisperseBlob:input_type -> disperser.v2.DisperseBlobRequest 3, // 13: disperser.v2.Disperser.GetBlobStatus:input_type -> disperser.v2.BlobStatusRequest 5, // 14: disperser.v2.Disperser.GetBlobCommitment:input_type -> disperser.v2.BlobCommitmentRequest @@ -1406,7 +1416,7 @@ func file_disperser_v2_disperser_v2_proto_init() { } } file_disperser_v2_disperser_v2_proto_msgTypes[9].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*BlobVerificationInfo); i { + switch v := v.(*BlobInclusionInfo); i { case 0: return &v.state case 1: diff --git a/api/hashing/node_hashing.go b/api/hashing/node_hashing.go index 058c505fcb..972cef4882 100644 --- a/api/hashing/node_hashing.go +++ b/api/hashing/node_hashing.go @@ -26,7 +26,8 @@ func HashStoreChunksRequest(request *grpc.StoreChunksRequest) []byte { func hashBlobCertificate(hasher hash.Hash, blobCertificate *common.BlobCertificate) { hashBlobHeader(hasher, blobCertificate.BlobHeader) - for _, relayID := range blobCertificate.Relays { + hasher.Write(blobCertificate.Signature) + for _, relayID := range blobCertificate.RelayKeys { hashUint32(hasher, relayID) } } @@ -39,7 +40,6 @@ func hashBlobHeader(hasher hash.Hash, header *common.BlobHeader) { hashBlobCommitment(hasher, header.Commitment) hashPaymentHeader(hasher, header.PaymentHeader) hashUint32(hasher, header.Salt) - hasher.Write(header.Signature) } func hashBatchHeader(hasher hash.Hash, header *common.BatchHeader) { diff --git a/api/proto/common/v2/common_v2.proto b/api/proto/common/v2/common_v2.proto index 4241cb3031..6b91861a76 100644 --- a/api/proto/common/v2/common_v2.proto +++ b/api/proto/common/v2/common_v2.proto @@ -25,8 +25,6 @@ message BlobHeader { // reserved payments when the same blob is submitted multiple times within the same reservation period. On-demand // payments already have unique cumulative_payment values for intentionally unique dispersal requests. uint32 salt = 5; - // signature over keccak hash of the blob_header that can be verified by blob_header.account_id - bytes signature = 6; } // BlobCertificate contains a full description of a blob and how it is dispersed. Part of the certificate @@ -36,12 +34,14 @@ message BlobHeader { message BlobCertificate { // blob_header contains data about the blob. BlobHeader blob_header = 1; - // relays is the list of relays that are in custody of the blob. + // signature over keccak hash of the blob_header that can be verified by blob_header.payment_header.account_id + bytes signature = 2; + // relay_keys is the list of relay keys that are in custody of the blob. // The relays custodying the data are chosen by the Disperser to which the DisperseBlob request was submitted. // It needs to contain at least 1 relay number. // To retrieve a blob from the relay, one can find that relay's URL in the EigenDARelayRegistry contract: // https://github.com/Layr-Labs/eigenda/blob/master/contracts/src/core/EigenDARelayRegistry.sol - repeated uint32 relays = 2; + repeated uint32 relay_keys = 3; } // BatchHeader is the header of a batch of blobs diff --git a/api/proto/disperser/v2/disperser_v2.proto b/api/proto/disperser/v2/disperser_v2.proto index 8d5689fad8..e521171705 100644 --- a/api/proto/disperser/v2/disperser_v2.proto +++ b/api/proto/disperser/v2/disperser_v2.proto @@ -26,7 +26,7 @@ service Disperser { // A request to disperse a blob. message DisperseBlobRequest { - // The data to be dispersed. + // The blob to be dispersed. // // The size of this byte array may be any size as long as it does not exceed the maximum length of 16MiB. // (In the future, the 16MiB limit may be increased, but this is not guaranteed to happen.) @@ -35,7 +35,7 @@ message DisperseBlobRequest { // significant bits. The integer must stay in the valid range to be interpreted as a field element on the bn254 curve. // The valid range is 0 <= x < 21888242871839275222246405745257275088548364400416034343698204186575808495617. // If any one of the 32 bytes elements is outside the range, the whole request is deemed as invalid, and rejected. - bytes data = 1; + bytes blob = 1; // The header contains metadata about the blob. // // This header can be thought of as an "eigenDA tx", in that it plays a purpose similar to an eth_tx to disperse a @@ -43,6 +43,8 @@ message DisperseBlobRequest { // dispersing a blob to ethereum requires sending a tx whose data contains the hash of the kzg commit of the blob, // which is dispersed separately. common.v2.BlobHeader blob_header = 2; + // signature over keccak hash of the blob_header that can be verified by blob_header.payment_header.account_id + bytes signature = 3; } // A reply to a DisperseBlob request. @@ -73,16 +75,16 @@ message BlobStatusReply { BlobStatus status = 1; // The signed batch. Unset if the status is not CERTIFIED. SignedBatch signed_batch = 2; - // BlobVerificationInfo is the information needed to verify the inclusion of a blob in a batch. + // BlobInclusionInfo is the information needed to verify the inclusion of a blob in a batch. // Unset if the status is not CERTIFIED. - BlobVerificationInfo blob_verification_info = 3; + BlobInclusionInfo blob_inclusion_info = 3; } // The input for a BlobCommitmentRequest(). // This can be used to construct a BlobHeader.commitment. message BlobCommitmentRequest { // The blob data to compute the commitment for. - bytes data = 1; + bytes blob = 1; } // The result of a BlobCommitmentRequest(). @@ -164,8 +166,8 @@ message SignedBatch { Attestation attestation = 2; } -// BlobVerificationInfo is the information needed to verify the inclusion of a blob in a batch. -message BlobVerificationInfo { +// BlobInclusionInfo is the information needed to verify the inclusion of a blob in a batch. +message BlobInclusionInfo { common.v2.BlobCertificate blob_certificate = 1; // blob_index is the index of the blob in the batch uint32 blob_index = 2; diff --git a/contracts/bindings/EigenDABlobVerifier/binding.go b/contracts/bindings/EigenDABlobVerifier/binding.go index e3c746e888..49f3e5f873 100644 --- a/contracts/bindings/EigenDABlobVerifier/binding.go +++ b/contracts/bindings/EigenDABlobVerifier/binding.go @@ -74,6 +74,7 @@ type BatchMetadata struct { // BlobCertificate is an auto generated low-level Go binding around an user-defined struct. type BlobCertificate struct { BlobHeader BlobHeaderV2 + Signature []byte RelayKeys []uint32 } @@ -158,8 +159,8 @@ type VersionedBlobParams struct { // ContractEigenDABlobVerifierMetaData contains all meta data concerning the ContractEigenDABlobVerifier contract. var ContractEigenDABlobVerifierMetaData = &bind.MetaData{ - ABI: "[{\"type\":\"constructor\",\"inputs\":[{\"name\":\"_eigenDAThresholdRegistry\",\"type\":\"address\",\"internalType\":\"contractIEigenDAThresholdRegistry\"},{\"name\":\"_eigenDABatchMetadataStorage\",\"type\":\"address\",\"internalType\":\"contractIEigenDABatchMetadataStorage\"},{\"name\":\"_eigenDASignatureVerifier\",\"type\":\"address\",\"internalType\":\"contractIEigenDASignatureVerifier\"},{\"name\":\"_eigenDARelayRegistry\",\"type\":\"address\",\"internalType\":\"contractIEigenDARelayRegistry\"},{\"name\":\"_operatorStateRetriever\",\"type\":\"address\",\"internalType\":\"contractOperatorStateRetriever\"},{\"name\":\"_registryCoordinator\",\"type\":\"address\",\"internalType\":\"contractIRegistryCoordinator\"}],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"eigenDABatchMetadataStorage\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"contractIEigenDABatchMetadataStorage\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"eigenDARelayRegistry\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"contractIEigenDARelayRegistry\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"eigenDASignatureVerifier\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"contractIEigenDASignatureVerifier\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"eigenDAThresholdRegistry\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"contractIEigenDAThresholdRegistry\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"getBlobParams\",\"inputs\":[{\"name\":\"version\",\"type\":\"uint16\",\"internalType\":\"uint16\"}],\"outputs\":[{\"name\":\"\",\"type\":\"tuple\",\"internalType\":\"structVersionedBlobParams\",\"components\":[{\"name\":\"maxNumOperators\",\"type\":\"uint32\",\"internalType\":\"uint32\"},{\"name\":\"numChunks\",\"type\":\"uint32\",\"internalType\":\"uint32\"},{\"name\":\"codingRate\",\"type\":\"uint8\",\"internalType\":\"uint8\"}]}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"getDefaultSecurityThresholdsV2\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"tuple\",\"internalType\":\"structSecurityThresholds\",\"components\":[{\"name\":\"confirmationThreshold\",\"type\":\"uint8\",\"internalType\":\"uint8\"},{\"name\":\"adversaryThreshold\",\"type\":\"uint8\",\"internalType\":\"uint8\"}]}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"getIsQuorumRequired\",\"inputs\":[{\"name\":\"quorumNumber\",\"type\":\"uint8\",\"internalType\":\"uint8\"}],\"outputs\":[{\"name\":\"\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"getNonSignerStakesAndSignature\",\"inputs\":[{\"name\":\"signedBatch\",\"type\":\"tuple\",\"internalType\":\"structSignedBatch\",\"components\":[{\"name\":\"batchHeader\",\"type\":\"tuple\",\"internalType\":\"structBatchHeaderV2\",\"components\":[{\"name\":\"batchRoot\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"referenceBlockNumber\",\"type\":\"uint32\",\"internalType\":\"uint32\"}]},{\"name\":\"attestation\",\"type\":\"tuple\",\"internalType\":\"structAttestation\",\"components\":[{\"name\":\"nonSignerPubkeys\",\"type\":\"tuple[]\",\"internalType\":\"structBN254.G1Point[]\",\"components\":[{\"name\":\"X\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"Y\",\"type\":\"uint256\",\"internalType\":\"uint256\"}]},{\"name\":\"quorumApks\",\"type\":\"tuple[]\",\"internalType\":\"structBN254.G1Point[]\",\"components\":[{\"name\":\"X\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"Y\",\"type\":\"uint256\",\"internalType\":\"uint256\"}]},{\"name\":\"sigma\",\"type\":\"tuple\",\"internalType\":\"structBN254.G1Point\",\"components\":[{\"name\":\"X\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"Y\",\"type\":\"uint256\",\"internalType\":\"uint256\"}]},{\"name\":\"apkG2\",\"type\":\"tuple\",\"internalType\":\"structBN254.G2Point\",\"components\":[{\"name\":\"X\",\"type\":\"uint256[2]\",\"internalType\":\"uint256[2]\"},{\"name\":\"Y\",\"type\":\"uint256[2]\",\"internalType\":\"uint256[2]\"}]},{\"name\":\"quorumNumbers\",\"type\":\"uint32[]\",\"internalType\":\"uint32[]\"}]}]}],\"outputs\":[{\"name\":\"\",\"type\":\"tuple\",\"internalType\":\"structNonSignerStakesAndSignature\",\"components\":[{\"name\":\"nonSignerQuorumBitmapIndices\",\"type\":\"uint32[]\",\"internalType\":\"uint32[]\"},{\"name\":\"nonSignerPubkeys\",\"type\":\"tuple[]\",\"internalType\":\"structBN254.G1Point[]\",\"components\":[{\"name\":\"X\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"Y\",\"type\":\"uint256\",\"internalType\":\"uint256\"}]},{\"name\":\"quorumApks\",\"type\":\"tuple[]\",\"internalType\":\"structBN254.G1Point[]\",\"components\":[{\"name\":\"X\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"Y\",\"type\":\"uint256\",\"internalType\":\"uint256\"}]},{\"name\":\"apkG2\",\"type\":\"tuple\",\"internalType\":\"structBN254.G2Point\",\"components\":[{\"name\":\"X\",\"type\":\"uint256[2]\",\"internalType\":\"uint256[2]\"},{\"name\":\"Y\",\"type\":\"uint256[2]\",\"internalType\":\"uint256[2]\"}]},{\"name\":\"sigma\",\"type\":\"tuple\",\"internalType\":\"structBN254.G1Point\",\"components\":[{\"name\":\"X\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"Y\",\"type\":\"uint256\",\"internalType\":\"uint256\"}]},{\"name\":\"quorumApkIndices\",\"type\":\"uint32[]\",\"internalType\":\"uint32[]\"},{\"name\":\"totalStakeIndices\",\"type\":\"uint32[]\",\"internalType\":\"uint32[]\"},{\"name\":\"nonSignerStakeIndices\",\"type\":\"uint32[][]\",\"internalType\":\"uint32[][]\"}]}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"getQuorumAdversaryThresholdPercentage\",\"inputs\":[{\"name\":\"quorumNumber\",\"type\":\"uint8\",\"internalType\":\"uint8\"}],\"outputs\":[{\"name\":\"\",\"type\":\"uint8\",\"internalType\":\"uint8\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"getQuorumConfirmationThresholdPercentage\",\"inputs\":[{\"name\":\"quorumNumber\",\"type\":\"uint8\",\"internalType\":\"uint8\"}],\"outputs\":[{\"name\":\"\",\"type\":\"uint8\",\"internalType\":\"uint8\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"operatorStateRetriever\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"contractOperatorStateRetriever\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"quorumAdversaryThresholdPercentages\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bytes\",\"internalType\":\"bytes\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"quorumConfirmationThresholdPercentages\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bytes\",\"internalType\":\"bytes\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"quorumNumbersRequired\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bytes\",\"internalType\":\"bytes\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"registryCoordinator\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"contractIRegistryCoordinator\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"verifyBlobSecurityParams\",\"inputs\":[{\"name\":\"version\",\"type\":\"uint16\",\"internalType\":\"uint16\"},{\"name\":\"securityThresholds\",\"type\":\"tuple\",\"internalType\":\"structSecurityThresholds\",\"components\":[{\"name\":\"confirmationThreshold\",\"type\":\"uint8\",\"internalType\":\"uint8\"},{\"name\":\"adversaryThreshold\",\"type\":\"uint8\",\"internalType\":\"uint8\"}]}],\"outputs\":[],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"verifyBlobSecurityParams\",\"inputs\":[{\"name\":\"blobParams\",\"type\":\"tuple\",\"internalType\":\"structVersionedBlobParams\",\"components\":[{\"name\":\"maxNumOperators\",\"type\":\"uint32\",\"internalType\":\"uint32\"},{\"name\":\"numChunks\",\"type\":\"uint32\",\"internalType\":\"uint32\"},{\"name\":\"codingRate\",\"type\":\"uint8\",\"internalType\":\"uint8\"}]},{\"name\":\"securityThresholds\",\"type\":\"tuple\",\"internalType\":\"structSecurityThresholds\",\"components\":[{\"name\":\"confirmationThreshold\",\"type\":\"uint8\",\"internalType\":\"uint8\"},{\"name\":\"adversaryThreshold\",\"type\":\"uint8\",\"internalType\":\"uint8\"}]}],\"outputs\":[],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"verifyBlobV1\",\"inputs\":[{\"name\":\"blobHeader\",\"type\":\"tuple\",\"internalType\":\"structBlobHeader\",\"components\":[{\"name\":\"commitment\",\"type\":\"tuple\",\"internalType\":\"structBN254.G1Point\",\"components\":[{\"name\":\"X\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"Y\",\"type\":\"uint256\",\"internalType\":\"uint256\"}]},{\"name\":\"dataLength\",\"type\":\"uint32\",\"internalType\":\"uint32\"},{\"name\":\"quorumBlobParams\",\"type\":\"tuple[]\",\"internalType\":\"structQuorumBlobParam[]\",\"components\":[{\"name\":\"quorumNumber\",\"type\":\"uint8\",\"internalType\":\"uint8\"},{\"name\":\"adversaryThresholdPercentage\",\"type\":\"uint8\",\"internalType\":\"uint8\"},{\"name\":\"confirmationThresholdPercentage\",\"type\":\"uint8\",\"internalType\":\"uint8\"},{\"name\":\"chunkLength\",\"type\":\"uint32\",\"internalType\":\"uint32\"}]}]},{\"name\":\"blobVerificationProof\",\"type\":\"tuple\",\"internalType\":\"structBlobVerificationProof\",\"components\":[{\"name\":\"batchId\",\"type\":\"uint32\",\"internalType\":\"uint32\"},{\"name\":\"blobIndex\",\"type\":\"uint32\",\"internalType\":\"uint32\"},{\"name\":\"batchMetadata\",\"type\":\"tuple\",\"internalType\":\"structBatchMetadata\",\"components\":[{\"name\":\"batchHeader\",\"type\":\"tuple\",\"internalType\":\"structBatchHeader\",\"components\":[{\"name\":\"blobHeadersRoot\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"quorumNumbers\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"signedStakeForQuorums\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"referenceBlockNumber\",\"type\":\"uint32\",\"internalType\":\"uint32\"}]},{\"name\":\"signatoryRecordHash\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"confirmationBlockNumber\",\"type\":\"uint32\",\"internalType\":\"uint32\"}]},{\"name\":\"inclusionProof\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"quorumIndices\",\"type\":\"bytes\",\"internalType\":\"bytes\"}]}],\"outputs\":[],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"verifyBlobV2\",\"inputs\":[{\"name\":\"batchHeader\",\"type\":\"tuple\",\"internalType\":\"structBatchHeaderV2\",\"components\":[{\"name\":\"batchRoot\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"referenceBlockNumber\",\"type\":\"uint32\",\"internalType\":\"uint32\"}]},{\"name\":\"blobVerificationProof\",\"type\":\"tuple\",\"internalType\":\"structBlobVerificationProofV2\",\"components\":[{\"name\":\"blobCertificate\",\"type\":\"tuple\",\"internalType\":\"structBlobCertificate\",\"components\":[{\"name\":\"blobHeader\",\"type\":\"tuple\",\"internalType\":\"structBlobHeaderV2\",\"components\":[{\"name\":\"version\",\"type\":\"uint16\",\"internalType\":\"uint16\"},{\"name\":\"quorumNumbers\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"commitment\",\"type\":\"tuple\",\"internalType\":\"structBlobCommitment\",\"components\":[{\"name\":\"commitment\",\"type\":\"tuple\",\"internalType\":\"structBN254.G1Point\",\"components\":[{\"name\":\"X\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"Y\",\"type\":\"uint256\",\"internalType\":\"uint256\"}]},{\"name\":\"lengthCommitment\",\"type\":\"tuple\",\"internalType\":\"structBN254.G2Point\",\"components\":[{\"name\":\"X\",\"type\":\"uint256[2]\",\"internalType\":\"uint256[2]\"},{\"name\":\"Y\",\"type\":\"uint256[2]\",\"internalType\":\"uint256[2]\"}]},{\"name\":\"lengthProof\",\"type\":\"tuple\",\"internalType\":\"structBN254.G2Point\",\"components\":[{\"name\":\"X\",\"type\":\"uint256[2]\",\"internalType\":\"uint256[2]\"},{\"name\":\"Y\",\"type\":\"uint256[2]\",\"internalType\":\"uint256[2]\"}]},{\"name\":\"dataLength\",\"type\":\"uint32\",\"internalType\":\"uint32\"}]},{\"name\":\"salt\",\"type\":\"uint32\",\"internalType\":\"uint32\"},{\"name\":\"paymentHeaderHash\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}]},{\"name\":\"relayKeys\",\"type\":\"uint32[]\",\"internalType\":\"uint32[]\"}]},{\"name\":\"blobIndex\",\"type\":\"uint32\",\"internalType\":\"uint32\"},{\"name\":\"inclusionProof\",\"type\":\"bytes\",\"internalType\":\"bytes\"}]},{\"name\":\"nonSignerStakesAndSignature\",\"type\":\"tuple\",\"internalType\":\"structNonSignerStakesAndSignature\",\"components\":[{\"name\":\"nonSignerQuorumBitmapIndices\",\"type\":\"uint32[]\",\"internalType\":\"uint32[]\"},{\"name\":\"nonSignerPubkeys\",\"type\":\"tuple[]\",\"internalType\":\"structBN254.G1Point[]\",\"components\":[{\"name\":\"X\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"Y\",\"type\":\"uint256\",\"internalType\":\"uint256\"}]},{\"name\":\"quorumApks\",\"type\":\"tuple[]\",\"internalType\":\"structBN254.G1Point[]\",\"components\":[{\"name\":\"X\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"Y\",\"type\":\"uint256\",\"internalType\":\"uint256\"}]},{\"name\":\"apkG2\",\"type\":\"tuple\",\"internalType\":\"structBN254.G2Point\",\"components\":[{\"name\":\"X\",\"type\":\"uint256[2]\",\"internalType\":\"uint256[2]\"},{\"name\":\"Y\",\"type\":\"uint256[2]\",\"internalType\":\"uint256[2]\"}]},{\"name\":\"sigma\",\"type\":\"tuple\",\"internalType\":\"structBN254.G1Point\",\"components\":[{\"name\":\"X\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"Y\",\"type\":\"uint256\",\"internalType\":\"uint256\"}]},{\"name\":\"quorumApkIndices\",\"type\":\"uint32[]\",\"internalType\":\"uint32[]\"},{\"name\":\"totalStakeIndices\",\"type\":\"uint32[]\",\"internalType\":\"uint32[]\"},{\"name\":\"nonSignerStakeIndices\",\"type\":\"uint32[][]\",\"internalType\":\"uint32[][]\"}]}],\"outputs\":[],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"verifyBlobV2FromSignedBatch\",\"inputs\":[{\"name\":\"signedBatch\",\"type\":\"tuple\",\"internalType\":\"structSignedBatch\",\"components\":[{\"name\":\"batchHeader\",\"type\":\"tuple\",\"internalType\":\"structBatchHeaderV2\",\"components\":[{\"name\":\"batchRoot\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"referenceBlockNumber\",\"type\":\"uint32\",\"internalType\":\"uint32\"}]},{\"name\":\"attestation\",\"type\":\"tuple\",\"internalType\":\"structAttestation\",\"components\":[{\"name\":\"nonSignerPubkeys\",\"type\":\"tuple[]\",\"internalType\":\"structBN254.G1Point[]\",\"components\":[{\"name\":\"X\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"Y\",\"type\":\"uint256\",\"internalType\":\"uint256\"}]},{\"name\":\"quorumApks\",\"type\":\"tuple[]\",\"internalType\":\"structBN254.G1Point[]\",\"components\":[{\"name\":\"X\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"Y\",\"type\":\"uint256\",\"internalType\":\"uint256\"}]},{\"name\":\"sigma\",\"type\":\"tuple\",\"internalType\":\"structBN254.G1Point\",\"components\":[{\"name\":\"X\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"Y\",\"type\":\"uint256\",\"internalType\":\"uint256\"}]},{\"name\":\"apkG2\",\"type\":\"tuple\",\"internalType\":\"structBN254.G2Point\",\"components\":[{\"name\":\"X\",\"type\":\"uint256[2]\",\"internalType\":\"uint256[2]\"},{\"name\":\"Y\",\"type\":\"uint256[2]\",\"internalType\":\"uint256[2]\"}]},{\"name\":\"quorumNumbers\",\"type\":\"uint32[]\",\"internalType\":\"uint32[]\"}]}]},{\"name\":\"blobVerificationProof\",\"type\":\"tuple\",\"internalType\":\"structBlobVerificationProofV2\",\"components\":[{\"name\":\"blobCertificate\",\"type\":\"tuple\",\"internalType\":\"structBlobCertificate\",\"components\":[{\"name\":\"blobHeader\",\"type\":\"tuple\",\"internalType\":\"structBlobHeaderV2\",\"components\":[{\"name\":\"version\",\"type\":\"uint16\",\"internalType\":\"uint16\"},{\"name\":\"quorumNumbers\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"commitment\",\"type\":\"tuple\",\"internalType\":\"structBlobCommitment\",\"components\":[{\"name\":\"commitment\",\"type\":\"tuple\",\"internalType\":\"structBN254.G1Point\",\"components\":[{\"name\":\"X\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"Y\",\"type\":\"uint256\",\"internalType\":\"uint256\"}]},{\"name\":\"lengthCommitment\",\"type\":\"tuple\",\"internalType\":\"structBN254.G2Point\",\"components\":[{\"name\":\"X\",\"type\":\"uint256[2]\",\"internalType\":\"uint256[2]\"},{\"name\":\"Y\",\"type\":\"uint256[2]\",\"internalType\":\"uint256[2]\"}]},{\"name\":\"lengthProof\",\"type\":\"tuple\",\"internalType\":\"structBN254.G2Point\",\"components\":[{\"name\":\"X\",\"type\":\"uint256[2]\",\"internalType\":\"uint256[2]\"},{\"name\":\"Y\",\"type\":\"uint256[2]\",\"internalType\":\"uint256[2]\"}]},{\"name\":\"dataLength\",\"type\":\"uint32\",\"internalType\":\"uint32\"}]},{\"name\":\"salt\",\"type\":\"uint32\",\"internalType\":\"uint32\"},{\"name\":\"paymentHeaderHash\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}]},{\"name\":\"relayKeys\",\"type\":\"uint32[]\",\"internalType\":\"uint32[]\"}]},{\"name\":\"blobIndex\",\"type\":\"uint32\",\"internalType\":\"uint32\"},{\"name\":\"inclusionProof\",\"type\":\"bytes\",\"internalType\":\"bytes\"}]}],\"outputs\":[],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"verifyBlobsV1\",\"inputs\":[{\"name\":\"blobHeaders\",\"type\":\"tuple[]\",\"internalType\":\"structBlobHeader[]\",\"components\":[{\"name\":\"commitment\",\"type\":\"tuple\",\"internalType\":\"structBN254.G1Point\",\"components\":[{\"name\":\"X\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"Y\",\"type\":\"uint256\",\"internalType\":\"uint256\"}]},{\"name\":\"dataLength\",\"type\":\"uint32\",\"internalType\":\"uint32\"},{\"name\":\"quorumBlobParams\",\"type\":\"tuple[]\",\"internalType\":\"structQuorumBlobParam[]\",\"components\":[{\"name\":\"quorumNumber\",\"type\":\"uint8\",\"internalType\":\"uint8\"},{\"name\":\"adversaryThresholdPercentage\",\"type\":\"uint8\",\"internalType\":\"uint8\"},{\"name\":\"confirmationThresholdPercentage\",\"type\":\"uint8\",\"internalType\":\"uint8\"},{\"name\":\"chunkLength\",\"type\":\"uint32\",\"internalType\":\"uint32\"}]}]},{\"name\":\"blobVerificationProofs\",\"type\":\"tuple[]\",\"internalType\":\"structBlobVerificationProof[]\",\"components\":[{\"name\":\"batchId\",\"type\":\"uint32\",\"internalType\":\"uint32\"},{\"name\":\"blobIndex\",\"type\":\"uint32\",\"internalType\":\"uint32\"},{\"name\":\"batchMetadata\",\"type\":\"tuple\",\"internalType\":\"structBatchMetadata\",\"components\":[{\"name\":\"batchHeader\",\"type\":\"tuple\",\"internalType\":\"structBatchHeader\",\"components\":[{\"name\":\"blobHeadersRoot\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"quorumNumbers\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"signedStakeForQuorums\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"referenceBlockNumber\",\"type\":\"uint32\",\"internalType\":\"uint32\"}]},{\"name\":\"signatoryRecordHash\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"confirmationBlockNumber\",\"type\":\"uint32\",\"internalType\":\"uint32\"}]},{\"name\":\"inclusionProof\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"quorumIndices\",\"type\":\"bytes\",\"internalType\":\"bytes\"}]}],\"outputs\":[],\"stateMutability\":\"view\"},{\"type\":\"event\",\"name\":\"DefaultSecurityThresholdsV2Updated\",\"inputs\":[{\"name\":\"previousDefaultSecurityThresholdsV2\",\"type\":\"tuple\",\"indexed\":false,\"internalType\":\"structSecurityThresholds\",\"components\":[{\"name\":\"confirmationThreshold\",\"type\":\"uint8\",\"internalType\":\"uint8\"},{\"name\":\"adversaryThreshold\",\"type\":\"uint8\",\"internalType\":\"uint8\"}]},{\"name\":\"newDefaultSecurityThresholdsV2\",\"type\":\"tuple\",\"indexed\":false,\"internalType\":\"structSecurityThresholds\",\"components\":[{\"name\":\"confirmationThreshold\",\"type\":\"uint8\",\"internalType\":\"uint8\"},{\"name\":\"adversaryThreshold\",\"type\":\"uint8\",\"internalType\":\"uint8\"}]}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"QuorumAdversaryThresholdPercentagesUpdated\",\"inputs\":[{\"name\":\"previousQuorumAdversaryThresholdPercentages\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"},{\"name\":\"newQuorumAdversaryThresholdPercentages\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"QuorumConfirmationThresholdPercentagesUpdated\",\"inputs\":[{\"name\":\"previousQuorumConfirmationThresholdPercentages\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"},{\"name\":\"newQuorumConfirmationThresholdPercentages\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"QuorumNumbersRequiredUpdated\",\"inputs\":[{\"name\":\"previousQuorumNumbersRequired\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"},{\"name\":\"newQuorumNumbersRequired\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"VersionedBlobParamsAdded\",\"inputs\":[{\"name\":\"version\",\"type\":\"uint16\",\"indexed\":true,\"internalType\":\"uint16\"},{\"name\":\"versionedBlobParams\",\"type\":\"tuple\",\"indexed\":false,\"internalType\":\"structVersionedBlobParams\",\"components\":[{\"name\":\"maxNumOperators\",\"type\":\"uint32\",\"internalType\":\"uint32\"},{\"name\":\"numChunks\",\"type\":\"uint32\",\"internalType\":\"uint32\"},{\"name\":\"codingRate\",\"type\":\"uint8\",\"internalType\":\"uint8\"}]}],\"anonymous\":false}]", - Bin: "0x6101406040523480156200001257600080fd5b506040516200446f3803806200446f83398101604081905262000035916200007e565b6001600160a01b0395861660805293851660a05291841660c052831660e052821661010052166101205262000112565b6001600160a01b03811681146200007b57600080fd5b50565b60008060008060008060c087890312156200009857600080fd5b8651620000a58162000065565b6020880151909650620000b88162000065565b6040880151909550620000cb8162000065565b6060880151909450620000de8162000065565b6080880151909350620000f18162000065565b60a0880151909250620001048162000065565b809150509295509295509295565b60805160a05160c05160e0516101005161012051614273620001fc6000396000818161025f0152818161062a01526109db0152600081816101e60152818161060901526109ba015260008181610286015281816105e80152610a4f015260008181610347015281816105c70152610a2e0152600081816102380152818161077201526107d001526000818161038e015281816103de0152818161048801528181610536015281816105a6015281816106c301528181610751015281816107af0152818161080a0152818161086a015281816108e10152818161092e0152610a0d01526142736000f3fe608060405234801561001057600080fd5b50600436106101375760003560e01c80638d67b909116100b8578063ee6c3bcf1161007c578063ee6c3bcf14610306578063ef63552914610319578063efd4532b14610342578063f25de3f814610369578063f8c6681414610389578063fa00e5bd146103b057600080fd5b80638d67b909146102bd57806392ce4ab2146102d0578063b60e9662146102e3578063bafa9107146102f6578063e15234ff146102fe57600080fd5b80636179f7d9116100ff5780636179f7d914610220578063640f65d9146102335780636d14a9871461025a57806372276443146102815780638687feae146102a857600080fd5b8063048886d21461013c578063127af44d146101645780631429c7c2146101795780632ecfe72b1461019e5780634ca22c3f146101e1575b600080fd5b61014f61014a36600461266e565b6103c3565b60405190151581526020015b60405180910390f35b6101776101723660046127e2565b610457565b005b61018c61018736600461266e565b61046d565b60405160ff909116815260200161015b565b6101b16101ac366004612816565b6104fc565b60408051825163ffffffff9081168252602080850151909116908201529181015160ff169082015260600161015b565b6102087f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b03909116815260200161015b565b61017761022e366004612849565b6105a1565b6102087f000000000000000000000000000000000000000000000000000000000000000081565b6102087f000000000000000000000000000000000000000000000000000000000000000081565b6102087f000000000000000000000000000000000000000000000000000000000000000081565b6102b06106bf565b60405161015b9190612904565b6101776102cb366004612917565b61074c565b6101776102de3660046129a6565b6107a0565b6101776102f1366004612a5e565b6107aa565b6102b0610806565b6102b0610866565b61018c61031436600461266e565b6108c6565b610321610918565b60408051825160ff908116825260209384015116928101929092520161015b565b6102087f000000000000000000000000000000000000000000000000000000000000000081565b61037c610377366004612ac9565b6109ad565b60405161015b9190612cec565b6102087f000000000000000000000000000000000000000000000000000000000000000081565b6101776103be366004612cff565b610a08565b604051630244436960e11b815260ff821660048201526000907f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03169063048886d290602401602060405180830381865afa15801561042d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906104519190612d82565b92915050565b610469610463836104fc565b82610af8565b5050565b604051630a14e3e160e11b815260ff821660048201526000907f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031690631429c7c2906024015b602060405180830381865afa1580156104d8573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906104519190612da4565b60408051606081018252600080825260208201819052818301529051632ecfe72b60e01b815261ffff831660048201526001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001690632ecfe72b90602401606060405180830381865afa15801561057d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906104519190612dc1565b6104697f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f000000000000000000000000000000000000000000000000000000000000000061065288613010565b61065b8861317f565b610663610918565b61066d8a80613316565b6106779080613336565b61068590602081019061334d565b8080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250610cae92505050565b60607f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316638687feae6040518163ffffffff1660e01b8152600401600060405180830381865afa15801561071f573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526107479190810190613393565b905090565b6104697f00000000000000000000000000000000000000000000000000000000000000007f0000000000000000000000000000000000000000000000000000000000000000848461079b610866565b610cdd565b6104698282610af8565b6108007f00000000000000000000000000000000000000000000000000000000000000007f0000000000000000000000000000000000000000000000000000000000000000868686866107fb610866565b61121d565b50505050565b60607f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663bafa91076040518163ffffffff1660e01b8152600401600060405180830381865afa15801561071f573d6000803e3d6000fd5b60607f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663e15234ff6040518163ffffffff1660e01b8152600401600060405180830381865afa15801561071f573d6000803e3d6000fd5b60405163ee6c3bcf60e01b815260ff821660048201526000907f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03169063ee6c3bcf906024016104bb565b60408051808201909152600080825260208201527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663ef6355296040518163ffffffff1660e01b81526004016040805180830381865afa158015610989573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906107479190613400565b6109b56125b3565b6104517f00000000000000000000000000000000000000000000000000000000000000007f0000000000000000000000000000000000000000000000000000000000000000610a0385613010565b611a6b565b610af37f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f0000000000000000000000000000000000000000000000000000000000000000610a7d36889003880188613441565b610a868761317f565b610a8f876134dc565b610a97610918565b610aa18a80613316565b610aab9080613336565b610ab990602081019061334d565b8080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250611c8192505050565b505050565b806020015160ff16816000015160ff1611610bb25760405162461bcd60e51b8152602060048201526075602482015260008051602061421e83398151915260448201527f72696679426c6f625365637572697479506172616d733a20636f6e6669726d6160648201527f74696f6e5468726573686f6c64206d7573742062652067726561746572207468608482015274185b8818591d995c9cd85c9e551a1c995cda1bdb19605a1b60a482015260c4015b60405180910390fd5b60208101518151600091610bc59161361a565b60ff1690506000836020015163ffffffff16846040015160ff1683620f4240610bee9190613653565b610bf89190613653565b610c0490612710613667565b610c0e919061367e565b8451909150610c1f9061271061369d565b63ffffffff168110156108005760405162461bcd60e51b8152602060048201526058602482015260008051602061421e83398151915260448201527f72696679426c6f625365637572697479506172616d733a20736563757269747960648201527f20617373756d7074696f6e7320617265206e6f74206d65740000000000000000608482015260a401610ba9565b6000610cbb878787611a6b565b9050610cd18a8a8a886000015188868989611c81565b50505050505050505050565b6001600160a01b03841663eccbbfc9610cf960208501856136c9565b6040516001600160e01b031960e084901b16815263ffffffff919091166004820152602401602060405180830381865afa158015610d3b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d5f91906136e6565b610d7d610d6f60408501856136ff565b610d7890613715565b612093565b14610d9a5760405162461bcd60e51b8152600401610ba9906137ec565b610e4e610daa606084018461334d565b8080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250610dec9250505060408501856136ff565b610df6908061385e565b35610e08610e0387613874565b612104565b604051602001610e1a91815260200190565b60405160208183030381529060405280519060200120856020016020810190610e4391906136c9565b63ffffffff16612134565b610e6a5760405162461bcd60e51b8152600401610ba990613993565b6000805b610e7b60608601866139f5565b90508110156111e557610e9160608601866139f5565b82818110610ea157610ea1613a3e565b610eb7926020608090920201908101915061266e565b60ff16610ec760408601866136ff565b610ed1908061385e565b610edf90602081019061334d565b610eec608088018861334d565b85818110610efc57610efc613a3e565b919091013560f81c9050818110610f1557610f15613a3e565b9050013560f81c60f81b60f81c60ff1614610f425760405162461bcd60e51b8152600401610ba990613a54565b610f4f60608601866139f5565b82818110610f5f57610f5f613a3e565b9050608002016020016020810190610f77919061266e565b60ff16610f8760608701876139f5565b83818110610f9757610f97613a3e565b9050608002016040016020810190610faf919061266e565b60ff1611610fcf5760405162461bcd60e51b8152600401610ba990613ab7565b6001600160a01b038716631429c7c2610feb60608801886139f5565b84818110610ffb57610ffb613a3e565b611011926020608090920201908101915061266e565b6040516001600160e01b031960e084901b16815260ff9091166004820152602401602060405180830381865afa15801561104f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906110739190612da4565b60ff1661108360608701876139f5565b8381811061109357611093613a3e565b90506080020160400160208101906110ab919061266e565b60ff1610156110cc5760405162461bcd60e51b8152600401610ba990613b28565b6110d960608601866139f5565b828181106110e9576110e9613a3e565b9050608002016040016020810190611101919061266e565b60ff1661111160408601866136ff565b61111b908061385e565b61112990604081019061334d565b611136608088018861334d565b8581811061114657611146613a3e565b919091013560f81c905081811061115f5761115f613a3e565b9050013560f81c60f81b60f81c60ff16101561118d5760405162461bcd60e51b8152600401610ba990613b28565b6111d18261119e60608801886139f5565b848181106111ae576111ae613a3e565b6111c4926020608090920201908101915061266e565b600160ff919091161b1790565b9150806111dd81613b99565b915050610e6e565b506111f96111f28361214c565b8281161490565b6112155760405162461bcd60e51b8152600401610ba990613bb4565b505050505050565b8382146112ba5760405162461bcd60e51b815260206004820152606b602482015260008051602061421e83398151915260448201527f72696679426c6f6273466f7251756f72756d733a20626c6f624865616465727360648201527f20616e6420626c6f62566572696669636174696f6e50726f6f6673206c656e6760848201526a0e8d040dad2e6dac2e8c6d60ab1b60a482015260c401610ba9565b6000876001600160a01b031663bafa91076040518163ffffffff1660e01b8152600401600060405180830381865afa1580156112fa573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526113229190810190613393565b905060005b85811015611a6057876001600160a01b031663eccbbfc986868481811061135057611350613a3e565b90506020028101906113629190613c3c565b6113709060208101906136c9565b6040516001600160e01b031960e084901b16815263ffffffff919091166004820152602401602060405180830381865afa1580156113b2573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906113d691906136e6565b61140b8686848181106113eb576113eb613a3e565b90506020028101906113fd9190613c3c565b610d6f9060408101906136ff565b146114285760405162461bcd60e51b8152600401610ba9906137ec565b61155e85858381811061143d5761143d613a3e565b905060200281019061144f9190613c3c565b61145d90606081019061334d565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152508992508891508590508181106114a6576114a6613a3e565b90506020028101906114b89190613c3c565b6114c69060408101906136ff565b6114d0908061385e565b356115018a8a868181106114e6576114e6613a3e565b90506020028101906114f8919061385e565b610e0390613874565b60405160200161151391815260200190565b6040516020818303038152906040528051906020012088888681811061153b5761153b613a3e565b905060200281019061154d9190613c3c565b610e439060408101906020016136c9565b61157a5760405162461bcd60e51b8152600401610ba990613993565b6000805b88888481811061159057611590613a3e565b90506020028101906115a2919061385e565b6115b09060608101906139f5565b9050811015611a26578888848181106115cb576115cb613a3e565b90506020028101906115dd919061385e565b6115eb9060608101906139f5565b828181106115fb576115fb613a3e565b611611926020608090920201908101915061266e565b60ff1687878581811061162657611626613a3e565b90506020028101906116389190613c3c565b6116469060408101906136ff565b611650908061385e565b61165e90602081019061334d565b89898781811061167057611670613a3e565b90506020028101906116829190613c3c565b61169090608081019061334d565b858181106116a0576116a0613a3e565b919091013560f81c90508181106116b9576116b9613a3e565b9050013560f81c60f81b60f81c60ff16146116e65760405162461bcd60e51b8152600401610ba990613a54565b8888848181106116f8576116f8613a3e565b905060200281019061170a919061385e565b6117189060608101906139f5565b8281811061172857611728613a3e565b9050608002016020016020810190611740919061266e565b60ff1689898581811061175557611755613a3e565b9050602002810190611767919061385e565b6117759060608101906139f5565b8381811061178557611785613a3e565b905060800201604001602081019061179d919061266e565b60ff16116117bd5760405162461bcd60e51b8152600401610ba990613ab7565b838989858181106117d0576117d0613a3e565b90506020028101906117e2919061385e565b6117f09060608101906139f5565b8381811061180057611800613a3e565b611816926020608090920201908101915061266e565b60ff168151811061182957611829613a3e565b016020015160f81c89898581811061184357611843613a3e565b9050602002810190611855919061385e565b6118639060608101906139f5565b8381811061187357611873613a3e565b905060800201604001602081019061188b919061266e565b60ff1610156118ac5760405162461bcd60e51b8152600401610ba990613b28565b8888848181106118be576118be613a3e565b90506020028101906118d0919061385e565b6118de9060608101906139f5565b828181106118ee576118ee613a3e565b9050608002016040016020810190611906919061266e565b60ff1687878581811061191b5761191b613a3e565b905060200281019061192d9190613c3c565b61193b9060408101906136ff565b611945908061385e565b61195390604081019061334d565b89898781811061196557611965613a3e565b90506020028101906119779190613c3c565b61198590608081019061334d565b8581811061199557611995613a3e565b919091013560f81c90508181106119ae576119ae613a3e565b9050013560f81c60f81b60f81c60ff1610156119dc5760405162461bcd60e51b8152600401610ba990613b28565b611a12828a8a868181106119f2576119f2613a3e565b9050602002810190611a04919061385e565b61119e9060608101906139f5565b915080611a1e81613b99565b91505061157e565b50611a336111f28561214c565b611a4f5760405162461bcd60e51b8152600401610ba990613bb4565b50611a5981613b99565b9050611327565b505050505050505050565b611a736125b3565b602082015151516000906001600160401b03811115611a9457611a946126a9565b604051908082528060200260200182016040528015611abd578160200160208202803683370190505b50905060005b60208401515151811015611b3a57611b0d8460200151600001518281518110611aee57611aee613a3e565b6020026020010151805160009081526020918201519091526040902090565b828281518110611b1f57611b1f613a3e565b6020908102919091010152611b3381613b99565b9050611ac3565b50606060005b84602001516080015151811015611ba757818560200151608001518281518110611b6c57611b6c613a3e565b6020026020010151604051602001611b85929190613c52565b604051602081830303815290604052915080611ba090613b99565b9050611b40565b508351602001516040516313dce7dd60e21b81526000916001600160a01b03891691634f739f7491611be2918a919087908990600401613c84565b600060405180830381865afa158015611bff573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052611c279190810190613dd7565b805185526020958601805151878701528051870151604080880191909152815160609081015181890152915181015160808801529682015160a08701529581015160c0860152949094015160e08401525090949350505050565b611cd384604001518660000151611c9b87600001516122d9565b604051602001611cad91815260200190565b60405160208183030381529060405280519060200120876020015163ffffffff16612134565b611d4c5760405162461bcd60e51b8152602060048201526050602482015260008051602061421e83398151915260448201527f72696679426c6f625632466f7251756f72756d733a20696e636c7573696f6e2060648201526f1c1c9bdbd9881a5cc81a5b9d985b1a5960821b608482015260a401610ba9565b600080886001600160a01b0316636efb4636611d67896122fc565b885151602090810151908b01516040516001600160e01b031960e086901b168152611d99939291908b90600401613eaf565b600060405180830381865afa158015611db6573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052611dde9190810190613f62565b91509150611df488876000015160200151612327565b85515151604051632ecfe72b60e01b815261ffff9091166004820152611e6f906001600160a01b038c1690632ecfe72b90602401606060405180830381865afa158015611e45573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611e699190612dc1565b85610af8565b6000805b8751516020015151811015611fda57856000015160ff1684602001518281518110611ea057611ea0613a3e565b6020026020010151611eb29190613ffe565b6001600160601b0316606485600001518381518110611ed357611ed3613a3e565b60200260200101516001600160601b0316611eee919061367e565b1015611f955760405162461bcd60e51b8152602060048201526076602482015260008051602061421e83398151915260448201527f72696679426c6f625632466f7251756f72756d733a207369676e61746f72696560648201527f7320646f206e6f74206f776e206174206c65617374207468726573686f6c642060848201527570657263656e74616765206f6620612071756f72756d60501b60a482015260c401610ba9565b875151602001518051611fc691849184908110611fb457611fb4613a3e565b0160200151600160f89190911c1b1790565b915080611fd281613b99565b915050611e73565b50611fe76111f28561214c565b6120865760405162461bcd60e51b8152602060048201526070602482015260008051602061421e83398151915260448201527f72696679426c6f625632466f7251756f72756d733a207265717569726564207160648201527f756f72756d7320617265206e6f74206120737562736574206f6620746865206360848201526f6f6e6669726d65642071756f72756d7360801b60a482015260c401610ba9565b5050505050505050505050565b600061045182600001516040516020016120ad9190614024565b60408051808303601f1901815282825280516020918201208682015187840151838601929092528484015260e01b6001600160e01b0319166060840152815160448185030181526064909301909152815191012090565b6000816040516020016121179190614084565b604051602081830303815290604052805190602001209050919050565b60008361214286858561245a565b1495945050505050565b6000610100825111156121d55760405162461bcd60e51b8152602060048201526044602482018190527f4269746d61705574696c732e6f72646572656442797465734172726179546f42908201527f69746d61703a206f7264657265644279746573417272617920697320746f6f206064820152636c6f6e6760e01b608482015260a401610ba9565b81516121e357506000919050565b600080836000815181106121f9576121f9613a3e565b0160200151600160f89190911c81901b92505b84518110156122d05784818151811061222757612227613a3e565b0160200151600160f89190911c1b91508282116122bc5760405162461bcd60e51b815260206004820152604760248201527f4269746d61705574696c732e6f72646572656442797465734172726179546f4260448201527f69746d61703a206f72646572656442797465734172726179206973206e6f74206064820152661bdc99195c995960ca1b608482015260a401610ba9565b918117916122c981613b99565b905061220c565b50909392505050565b60006122e8826000015161255d565b602080840151604051612117939201614129565b60008160405160200161211791908151815260209182015163ffffffff169181019190915260400190565b60005b8151811015610af35760006001600160a01b0316836001600160a01b031663b5a872da84848151811061235f5761235f613a3e565b60200260200101516040518263ffffffff1660e01b815260040161238f919063ffffffff91909116815260200190565b602060405180830381865afa1580156123ac573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906123d09190614142565b6001600160a01b0316141561244a5760405162461bcd60e51b8152602060048201526046602482015260008051602061421e83398151915260448201527f7269667952656c61794b6579735365743a2072656c6179206b6579206973206e6064820152651bdd081cd95d60d21b608482015260a401610ba9565b61245381613b99565b905061232a565b60006020845161246a919061416b565b156124f15760405162461bcd60e51b815260206004820152604b60248201527f4d65726b6c652e70726f63657373496e636c7573696f6e50726f6f664b65636360448201527f616b3a2070726f6f66206c656e6774682073686f756c642062652061206d756c60648201526a3a34b836329037b310199960a91b608482015260a401610ba9565b8260205b855181116125545761250860028561416b565b61252957816000528086015160205260406000209150600284049350612542565b8086015160005281602052604060002091506002840493505b61254d60208261417f565b90506124f5565b50949350505050565b600081600001518260200151836040015184606001516040516020016125869493929190614197565b60408051601f19818403018152828252805160209182012060808601519184015290820152606001612117565b6040518061010001604052806060815260200160608152602001606081526020016125dc612619565b81526020016125fe604051806040016040528060008152602001600081525090565b81526020016060815260200160608152602001606081525090565b604051806040016040528061262c61263e565b815260200161263961263e565b905290565b60405180604001604052806002906020820280368337509192915050565b60ff8116811461266b57600080fd5b50565b60006020828403121561268057600080fd5b813561268b8161265c565b9392505050565b803561ffff811681146126a457600080fd5b919050565b634e487b7160e01b600052604160045260246000fd5b604080519081016001600160401b03811182821017156126e1576126e16126a9565b60405290565b604051606081016001600160401b03811182821017156126e1576126e16126a9565b60405160a081016001600160401b03811182821017156126e1576126e16126a9565b604051608081016001600160401b03811182821017156126e1576126e16126a9565b60405161010081016001600160401b03811182821017156126e1576126e16126a9565b604051601f8201601f191681016001600160401b0381118282101715612798576127986126a9565b604052919050565b6000604082840312156127b257600080fd5b6127ba6126bf565b905081356127c78161265c565b815260208201356127d78161265c565b602082015292915050565b600080606083850312156127f557600080fd5b6127fe83612692565b915061280d84602085016127a0565b90509250929050565b60006020828403121561282857600080fd5b61268b82612692565b60006060828403121561284357600080fd5b50919050565b6000806040838503121561285c57600080fd5b82356001600160401b038082111561287357600080fd5b61287f86838701612831565b9350602085013591508082111561289557600080fd5b506128a285828601612831565b9150509250929050565b60005b838110156128c75781810151838201526020016128af565b838111156108005750506000910152565b600081518084526128f08160208601602086016128ac565b601f01601f19169290920160200192915050565b60208152600061268b60208301846128d8565b6000806040838503121561292a57600080fd5b82356001600160401b038082111561294157600080fd5b908401906080828703121561295557600080fd5b9092506020840135908082111561296b57600080fd5b50830160a0818603121561297e57600080fd5b809150509250929050565b63ffffffff8116811461266b57600080fd5b80356126a481612989565b60008082840360a08112156129ba57600080fd5b60608112156129c857600080fd5b506129d16126e7565b83356129dc81612989565b815260208401356129ec81612989565b602082015260408401356129ff8161265c565b6040820152915061280d84606085016127a0565b60008083601f840112612a2557600080fd5b5081356001600160401b03811115612a3c57600080fd5b6020830191508360208260051b8501011115612a5757600080fd5b9250929050565b60008060008060408587031215612a7457600080fd5b84356001600160401b0380821115612a8b57600080fd5b612a9788838901612a13565b90965094506020870135915080821115612ab057600080fd5b50612abd87828801612a13565b95989497509550505050565b600060208284031215612adb57600080fd5b81356001600160401b03811115612af157600080fd5b612afd84828501612831565b949350505050565b600081518084526020808501945080840160005b83811015612b3b57815163ffffffff1687529582019590820190600101612b19565b509495945050505050565b600081518084526020808501945080840160005b83811015612b3b57612b7787835180518252602090810151910152565b6040969096019590820190600101612b5a565b8060005b6002811015610800578151845260209384019390910190600101612b8e565b612bb8828251612b8a565b6020810151610af36040840182612b8a565b600081518084526020808501808196508360051b8101915082860160005b85811015612c12578284038952612c00848351612b05565b98850198935090840190600101612be8565b5091979650505050505050565b60006101808251818552612c3582860182612b05565b91505060208301518482036020860152612c4f8282612b46565b91505060408301518482036040860152612c698282612b46565b9150506060830151612c7e6060860182612bad565b506080830151805160e08601526020015161010085015260a0830151848203610120860152612cad8282612b05565b91505060c0830151848203610140860152612cc88282612b05565b91505060e0830151848203610160860152612ce38282612bca565b95945050505050565b60208152600061268b6020830184612c1f565b60008060008385036080811215612d1557600080fd5b6040811215612d2357600080fd5b5083925060408401356001600160401b0380821115612d4157600080fd5b612d4d87838801612831565b93506060860135915080821115612d6357600080fd5b5084016101808187031215612d7757600080fd5b809150509250925092565b600060208284031215612d9457600080fd5b8151801515811461268b57600080fd5b600060208284031215612db657600080fd5b815161268b8161265c565b600060608284031215612dd357600080fd5b604051606081018181106001600160401b0382111715612df557612df56126a9565b6040528251612e0381612989565b81526020830151612e1381612989565b60208201526040830151612e268161265c565b60408201529392505050565b600060408284031215612e4457600080fd5b612e4c6126bf565b90508135815260208201356127d781612989565b60006001600160401b03821115612e7957612e796126a9565b5060051b60200190565b600060408284031215612e9557600080fd5b612e9d6126bf565b9050813581526020820135602082015292915050565b600082601f830112612ec457600080fd5b81356020612ed9612ed483612e60565b612770565b82815260069290921b84018101918181019086841115612ef857600080fd5b8286015b84811015612f1c57612f0e8882612e83565b835291830191604001612efc565b509695505050505050565b600082601f830112612f3857600080fd5b612f406126bf565b806040840185811115612f5257600080fd5b845b81811015612f6c578035845260209384019301612f54565b509095945050505050565b600060808284031215612f8957600080fd5b612f916126bf565b9050612f9d8383612f27565b81526127d78360408401612f27565b600082601f830112612fbd57600080fd5b81356020612fcd612ed483612e60565b82815260059290921b84018101918181019086841115612fec57600080fd5b8286015b84811015612f1c57803561300381612989565b8352918301918301612ff0565b60006060823603121561302257600080fd5b61302a6126bf565b6130343684612e32565b815260408301356001600160401b038082111561305057600080fd5b8185019150610120823603121561306657600080fd5b61306e612709565b82358281111561307d57600080fd5b61308936828601612eb3565b82525060208301358281111561309e57600080fd5b6130aa36828601612eb3565b6020830152506130bd3660408501612e83565b60408201526130cf3660808501612f77565b6060820152610100830135828111156130e757600080fd5b6130f336828601612fac565b608083015250602084015250909392505050565b60006001600160401b03821115613120576131206126a9565b50601f01601f191660200190565b600082601f83011261313f57600080fd5b813561314d612ed482613107565b81815284602083860101111561316257600080fd5b816020850160208301376000918101602001919091529392505050565b60006060823603121561319157600080fd5b6131996126e7565b82356001600160401b03808211156131b057600080fd5b818501915060408083360312156131c657600080fd5b6131ce6126bf565b8335838111156131dd57600080fd5b8401368190036101e08112156131f257600080fd5b6131fa612709565b61320383612692565b81526020808401358781111561321857600080fd5b6132243682870161312e565b8383015250610160603f198401121561323c57600080fd5b61324461272b565b925061325236878601612e83565b83526132613660808601612f77565b81840152613273366101008601612f77565b8684015261018084013561328681612989565b606084015281860183905261329e6101a0850161299b565b60608301526101c08401356080830152818552808801359350868411156132c457600080fd5b6132d036858a01612fac565b818601528489526132e2818c0161299b565b9089015250505050858101359250818311156132fd57600080fd5b6133093684880161312e565b9084015250909392505050565b60008235603e1983360301811261332c57600080fd5b9190910192915050565b600082356101de1983360301811261332c57600080fd5b6000808335601e1984360301811261336457600080fd5b8301803591506001600160401b0382111561337e57600080fd5b602001915036819003821315612a5757600080fd5b6000602082840312156133a557600080fd5b81516001600160401b038111156133bb57600080fd5b8201601f810184136133cc57600080fd5b80516133da612ed482613107565b8181528560208385010111156133ef57600080fd5b612ce38260208301602086016128ac565b60006040828403121561341257600080fd5b61341a6126bf565b82516134258161265c565b815260208301516134358161265c565b60208201529392505050565b60006040828403121561345357600080fd5b61268b8383612e32565b600082601f83011261346e57600080fd5b8135602061347e612ed483612e60565b82815260059290921b8401810191818101908684111561349d57600080fd5b8286015b84811015612f1c5780356001600160401b038111156134c05760008081fd5b6134ce8986838b0101612fac565b8452509183019183016134a1565b600061018082360312156134ef57600080fd5b6134f761274d565b82356001600160401b038082111561350e57600080fd5b61351a36838701612fac565b8352602085013591508082111561353057600080fd5b61353c36838701612eb3565b6020840152604085013591508082111561355557600080fd5b61356136838701612eb3565b60408401526135733660608701612f77565b60608401526135853660e08701612e83565b608084015261012085013591508082111561359f57600080fd5b6135ab36838701612fac565b60a08401526101408501359150808211156135c557600080fd5b6135d136838701612fac565b60c08401526101608501359150808211156135eb57600080fd5b506135f83682860161345d565b60e08301525092915050565b634e487b7160e01b600052601160045260246000fd5b600060ff821660ff84168082101561363457613634613604565b90039392505050565b634e487b7160e01b600052601260045260246000fd5b6000826136625761366261363d565b500490565b60008282101561367957613679613604565b500390565b600081600019048311821515161561369857613698613604565b500290565b600063ffffffff808316818516818304811182151516156136c0576136c0613604565b02949350505050565b6000602082840312156136db57600080fd5b813561268b81612989565b6000602082840312156136f857600080fd5b5051919050565b60008235605e1983360301811261332c57600080fd5b60006060823603121561372757600080fd5b61372f6126e7565b82356001600160401b038082111561374657600080fd5b81850191506080823603121561375b57600080fd5b61376361272b565b8235815260208301358281111561377957600080fd5b6137853682860161312e565b60208301525060408301358281111561379d57600080fd5b6137a93682860161312e565b604083015250606083013592506137bf83612989565b826060820152808452505050602083013560208201526137e16040840161299b565b604082015292915050565b6020808252606090820181905260008051602061421e83398151915260408301527f72696679426c6f62466f7251756f72756d733a2062617463684d657461646174908201527f6120646f6573206e6f74206d617463682073746f726564206d65746164617461608082015260a00190565b60008235607e1983360301811261332c57600080fd5b6000608080833603121561388757600080fd5b61388f6126e7565b6138993685612e83565b81526040808501356138aa81612989565b6020818185015260609150818701356001600160401b038111156138cd57600080fd5b870136601f8201126138de57600080fd5b80356138ec612ed482612e60565b81815260079190911b8201830190838101903683111561390b57600080fd5b928401925b8284101561397f578884360312156139285760008081fd5b61393061272b565b843561393b8161265c565b81528486013561394a8161265c565b818701528488013561395b8161265c565b818901528487013561396c81612989565b8188015282529288019290840190613910565b958701959095525093979650505050505050565b6020808252604e9082015260008051602061421e83398151915260408201527f72696679426c6f62466f7251756f72756d733a20696e636c7573696f6e20707260608201526d1bdbd9881a5cc81a5b9d985b1a5960921b608082015260a00190565b6000808335601e19843603018112613a0c57600080fd5b8301803591506001600160401b03821115613a2657600080fd5b6020019150600781901b3603821315612a5757600080fd5b634e487b7160e01b600052603260045260246000fd5b6020808252604f9082015260008051602061421e83398151915260408201527f72696679426c6f62466f7251756f72756d733a2071756f72756d4e756d62657260608201526e040c8decae640dcdee840dac2e8c6d608b1b608082015260a00190565b602080825260579082015260008051602061421e83398151915260408201527f72696679426c6f62466f7251756f72756d733a207468726573686f6c6420706560608201527f7263656e746167657320617265206e6f742076616c6964000000000000000000608082015260a00190565b6020808252605e9082015260008051602061421e83398151915260408201527f72696679426c6f62466f7251756f72756d733a20636f6e6669726d6174696f6e60608201527f5468726573686f6c6450657263656e74616765206973206e6f74206d65740000608082015260a00190565b6000600019821415613bad57613bad613604565b5060010190565b6020808252606e9082015260008051602061421e83398151915260408201527f72696679426c6f62466f7251756f72756d733a2072657175697265642071756f60608201527f72756d7320617265206e6f74206120737562736574206f662074686520636f6e60808201526d6669726d65642071756f72756d7360901b60a082015260c00190565b60008235609e1983360301811261332c57600080fd5b60008351613c648184602088016128ac565b60f89390931b6001600160f81b0319169190920190815260010192915050565b60018060a01b03851681526000602063ffffffff86168184015260806040840152613cb260808401866128d8565b838103606085015284518082528286019183019060005b81811015613ce557835183529284019291840191600101613cc9565b50909998505050505050505050565b600082601f830112613d0557600080fd5b81516020613d15612ed483612e60565b82815260059290921b84018101918181019086841115613d3457600080fd5b8286015b84811015612f1c578051613d4b81612989565b8352918301918301613d38565b600082601f830112613d6957600080fd5b81516020613d79612ed483612e60565b82815260059290921b84018101918181019086841115613d9857600080fd5b8286015b84811015612f1c5780516001600160401b03811115613dbb5760008081fd5b613dc98986838b0101613cf4565b845250918301918301613d9c565b600060208284031215613de957600080fd5b81516001600160401b0380821115613e0057600080fd5b9083019060808286031215613e1457600080fd5b613e1c61272b565b825182811115613e2b57600080fd5b613e3787828601613cf4565b825250602083015182811115613e4c57600080fd5b613e5887828601613cf4565b602083015250604083015182811115613e7057600080fd5b613e7c87828601613cf4565b604083015250606083015182811115613e9457600080fd5b613ea087828601613d58565b60608301525095945050505050565b848152608060208201526000613ec860808301866128d8565b63ffffffff851660408401528281036060840152613ee68185612c1f565b979650505050505050565b600082601f830112613f0257600080fd5b81516020613f12612ed483612e60565b82815260059290921b84018101918181019086841115613f3157600080fd5b8286015b84811015612f1c5780516001600160601b0381168114613f555760008081fd5b8352918301918301613f35565b60008060408385031215613f7557600080fd5b82516001600160401b0380821115613f8c57600080fd5b9084019060408287031215613fa057600080fd5b613fa86126bf565b825182811115613fb757600080fd5b613fc388828601613ef1565b825250602083015182811115613fd857600080fd5b613fe488828601613ef1565b602083015250809450505050602083015190509250929050565b60006001600160601b03808316818516818304811182151516156136c0576136c0613604565b6020815281516020820152600060208301516080604084015261404a60a08401826128d8565b90506040840151601f1984830301606085015261406782826128d8565b91505063ffffffff60608501511660808401528091505092915050565b60208082528251805183830152810151604083015260009060a0830181850151606063ffffffff808316828801526040925082880151608080818a015285825180885260c08b0191508884019750600093505b8084101561411a578751805160ff90811684528a82015181168b8501528882015116888401528601518516868301529688019660019390930192908201906140d7565b509a9950505050505050505050565b828152604060208201526000612afd6040830184612b05565b60006020828403121561415457600080fd5b81516001600160a01b038116811461268b57600080fd5b60008261417a5761417a61363d565b500690565b6000821982111561419257614192613604565b500190565b60006101c061ffff871683528060208401526141b5818401876128d8565b85518051604086015260200151606085015291506141d09050565b60208401516141e26080840182612bad565b5060408401516141f6610100840182612bad565b506060939093015163ffffffff908116610180830152919091166101a0909101529291505056fe456967656e4441426c6f62566572696669636174696f6e5574696c732e5f7665a2646970667358221220c30d156ddbf7d6bc6084f92df06805851f15524b92d975e46b0733d3aba4e65864736f6c634300080c0033", + ABI: "[{\"type\":\"constructor\",\"inputs\":[{\"name\":\"_eigenDAThresholdRegistry\",\"type\":\"address\",\"internalType\":\"contractIEigenDAThresholdRegistry\"},{\"name\":\"_eigenDABatchMetadataStorage\",\"type\":\"address\",\"internalType\":\"contractIEigenDABatchMetadataStorage\"},{\"name\":\"_eigenDASignatureVerifier\",\"type\":\"address\",\"internalType\":\"contractIEigenDASignatureVerifier\"},{\"name\":\"_eigenDARelayRegistry\",\"type\":\"address\",\"internalType\":\"contractIEigenDARelayRegistry\"},{\"name\":\"_operatorStateRetriever\",\"type\":\"address\",\"internalType\":\"contractOperatorStateRetriever\"},{\"name\":\"_registryCoordinator\",\"type\":\"address\",\"internalType\":\"contractIRegistryCoordinator\"}],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"eigenDABatchMetadataStorage\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"contractIEigenDABatchMetadataStorage\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"eigenDARelayRegistry\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"contractIEigenDARelayRegistry\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"eigenDASignatureVerifier\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"contractIEigenDASignatureVerifier\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"eigenDAThresholdRegistry\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"contractIEigenDAThresholdRegistry\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"getBlobParams\",\"inputs\":[{\"name\":\"version\",\"type\":\"uint16\",\"internalType\":\"uint16\"}],\"outputs\":[{\"name\":\"\",\"type\":\"tuple\",\"internalType\":\"structVersionedBlobParams\",\"components\":[{\"name\":\"maxNumOperators\",\"type\":\"uint32\",\"internalType\":\"uint32\"},{\"name\":\"numChunks\",\"type\":\"uint32\",\"internalType\":\"uint32\"},{\"name\":\"codingRate\",\"type\":\"uint8\",\"internalType\":\"uint8\"}]}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"getDefaultSecurityThresholdsV2\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"tuple\",\"internalType\":\"structSecurityThresholds\",\"components\":[{\"name\":\"confirmationThreshold\",\"type\":\"uint8\",\"internalType\":\"uint8\"},{\"name\":\"adversaryThreshold\",\"type\":\"uint8\",\"internalType\":\"uint8\"}]}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"getIsQuorumRequired\",\"inputs\":[{\"name\":\"quorumNumber\",\"type\":\"uint8\",\"internalType\":\"uint8\"}],\"outputs\":[{\"name\":\"\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"getNonSignerStakesAndSignature\",\"inputs\":[{\"name\":\"signedBatch\",\"type\":\"tuple\",\"internalType\":\"structSignedBatch\",\"components\":[{\"name\":\"batchHeader\",\"type\":\"tuple\",\"internalType\":\"structBatchHeaderV2\",\"components\":[{\"name\":\"batchRoot\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"referenceBlockNumber\",\"type\":\"uint32\",\"internalType\":\"uint32\"}]},{\"name\":\"attestation\",\"type\":\"tuple\",\"internalType\":\"structAttestation\",\"components\":[{\"name\":\"nonSignerPubkeys\",\"type\":\"tuple[]\",\"internalType\":\"structBN254.G1Point[]\",\"components\":[{\"name\":\"X\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"Y\",\"type\":\"uint256\",\"internalType\":\"uint256\"}]},{\"name\":\"quorumApks\",\"type\":\"tuple[]\",\"internalType\":\"structBN254.G1Point[]\",\"components\":[{\"name\":\"X\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"Y\",\"type\":\"uint256\",\"internalType\":\"uint256\"}]},{\"name\":\"sigma\",\"type\":\"tuple\",\"internalType\":\"structBN254.G1Point\",\"components\":[{\"name\":\"X\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"Y\",\"type\":\"uint256\",\"internalType\":\"uint256\"}]},{\"name\":\"apkG2\",\"type\":\"tuple\",\"internalType\":\"structBN254.G2Point\",\"components\":[{\"name\":\"X\",\"type\":\"uint256[2]\",\"internalType\":\"uint256[2]\"},{\"name\":\"Y\",\"type\":\"uint256[2]\",\"internalType\":\"uint256[2]\"}]},{\"name\":\"quorumNumbers\",\"type\":\"uint32[]\",\"internalType\":\"uint32[]\"}]}]}],\"outputs\":[{\"name\":\"\",\"type\":\"tuple\",\"internalType\":\"structNonSignerStakesAndSignature\",\"components\":[{\"name\":\"nonSignerQuorumBitmapIndices\",\"type\":\"uint32[]\",\"internalType\":\"uint32[]\"},{\"name\":\"nonSignerPubkeys\",\"type\":\"tuple[]\",\"internalType\":\"structBN254.G1Point[]\",\"components\":[{\"name\":\"X\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"Y\",\"type\":\"uint256\",\"internalType\":\"uint256\"}]},{\"name\":\"quorumApks\",\"type\":\"tuple[]\",\"internalType\":\"structBN254.G1Point[]\",\"components\":[{\"name\":\"X\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"Y\",\"type\":\"uint256\",\"internalType\":\"uint256\"}]},{\"name\":\"apkG2\",\"type\":\"tuple\",\"internalType\":\"structBN254.G2Point\",\"components\":[{\"name\":\"X\",\"type\":\"uint256[2]\",\"internalType\":\"uint256[2]\"},{\"name\":\"Y\",\"type\":\"uint256[2]\",\"internalType\":\"uint256[2]\"}]},{\"name\":\"sigma\",\"type\":\"tuple\",\"internalType\":\"structBN254.G1Point\",\"components\":[{\"name\":\"X\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"Y\",\"type\":\"uint256\",\"internalType\":\"uint256\"}]},{\"name\":\"quorumApkIndices\",\"type\":\"uint32[]\",\"internalType\":\"uint32[]\"},{\"name\":\"totalStakeIndices\",\"type\":\"uint32[]\",\"internalType\":\"uint32[]\"},{\"name\":\"nonSignerStakeIndices\",\"type\":\"uint32[][]\",\"internalType\":\"uint32[][]\"}]}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"getQuorumAdversaryThresholdPercentage\",\"inputs\":[{\"name\":\"quorumNumber\",\"type\":\"uint8\",\"internalType\":\"uint8\"}],\"outputs\":[{\"name\":\"\",\"type\":\"uint8\",\"internalType\":\"uint8\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"getQuorumConfirmationThresholdPercentage\",\"inputs\":[{\"name\":\"quorumNumber\",\"type\":\"uint8\",\"internalType\":\"uint8\"}],\"outputs\":[{\"name\":\"\",\"type\":\"uint8\",\"internalType\":\"uint8\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"operatorStateRetriever\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"contractOperatorStateRetriever\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"quorumAdversaryThresholdPercentages\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bytes\",\"internalType\":\"bytes\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"quorumConfirmationThresholdPercentages\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bytes\",\"internalType\":\"bytes\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"quorumNumbersRequired\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bytes\",\"internalType\":\"bytes\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"registryCoordinator\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"contractIRegistryCoordinator\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"verifyBlobSecurityParams\",\"inputs\":[{\"name\":\"version\",\"type\":\"uint16\",\"internalType\":\"uint16\"},{\"name\":\"securityThresholds\",\"type\":\"tuple\",\"internalType\":\"structSecurityThresholds\",\"components\":[{\"name\":\"confirmationThreshold\",\"type\":\"uint8\",\"internalType\":\"uint8\"},{\"name\":\"adversaryThreshold\",\"type\":\"uint8\",\"internalType\":\"uint8\"}]}],\"outputs\":[],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"verifyBlobSecurityParams\",\"inputs\":[{\"name\":\"blobParams\",\"type\":\"tuple\",\"internalType\":\"structVersionedBlobParams\",\"components\":[{\"name\":\"maxNumOperators\",\"type\":\"uint32\",\"internalType\":\"uint32\"},{\"name\":\"numChunks\",\"type\":\"uint32\",\"internalType\":\"uint32\"},{\"name\":\"codingRate\",\"type\":\"uint8\",\"internalType\":\"uint8\"}]},{\"name\":\"securityThresholds\",\"type\":\"tuple\",\"internalType\":\"structSecurityThresholds\",\"components\":[{\"name\":\"confirmationThreshold\",\"type\":\"uint8\",\"internalType\":\"uint8\"},{\"name\":\"adversaryThreshold\",\"type\":\"uint8\",\"internalType\":\"uint8\"}]}],\"outputs\":[],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"verifyBlobV1\",\"inputs\":[{\"name\":\"blobHeader\",\"type\":\"tuple\",\"internalType\":\"structBlobHeader\",\"components\":[{\"name\":\"commitment\",\"type\":\"tuple\",\"internalType\":\"structBN254.G1Point\",\"components\":[{\"name\":\"X\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"Y\",\"type\":\"uint256\",\"internalType\":\"uint256\"}]},{\"name\":\"dataLength\",\"type\":\"uint32\",\"internalType\":\"uint32\"},{\"name\":\"quorumBlobParams\",\"type\":\"tuple[]\",\"internalType\":\"structQuorumBlobParam[]\",\"components\":[{\"name\":\"quorumNumber\",\"type\":\"uint8\",\"internalType\":\"uint8\"},{\"name\":\"adversaryThresholdPercentage\",\"type\":\"uint8\",\"internalType\":\"uint8\"},{\"name\":\"confirmationThresholdPercentage\",\"type\":\"uint8\",\"internalType\":\"uint8\"},{\"name\":\"chunkLength\",\"type\":\"uint32\",\"internalType\":\"uint32\"}]}]},{\"name\":\"blobVerificationProof\",\"type\":\"tuple\",\"internalType\":\"structBlobVerificationProof\",\"components\":[{\"name\":\"batchId\",\"type\":\"uint32\",\"internalType\":\"uint32\"},{\"name\":\"blobIndex\",\"type\":\"uint32\",\"internalType\":\"uint32\"},{\"name\":\"batchMetadata\",\"type\":\"tuple\",\"internalType\":\"structBatchMetadata\",\"components\":[{\"name\":\"batchHeader\",\"type\":\"tuple\",\"internalType\":\"structBatchHeader\",\"components\":[{\"name\":\"blobHeadersRoot\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"quorumNumbers\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"signedStakeForQuorums\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"referenceBlockNumber\",\"type\":\"uint32\",\"internalType\":\"uint32\"}]},{\"name\":\"signatoryRecordHash\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"confirmationBlockNumber\",\"type\":\"uint32\",\"internalType\":\"uint32\"}]},{\"name\":\"inclusionProof\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"quorumIndices\",\"type\":\"bytes\",\"internalType\":\"bytes\"}]}],\"outputs\":[],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"verifyBlobV2\",\"inputs\":[{\"name\":\"batchHeader\",\"type\":\"tuple\",\"internalType\":\"structBatchHeaderV2\",\"components\":[{\"name\":\"batchRoot\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"referenceBlockNumber\",\"type\":\"uint32\",\"internalType\":\"uint32\"}]},{\"name\":\"blobVerificationProof\",\"type\":\"tuple\",\"internalType\":\"structBlobVerificationProofV2\",\"components\":[{\"name\":\"blobCertificate\",\"type\":\"tuple\",\"internalType\":\"structBlobCertificate\",\"components\":[{\"name\":\"blobHeader\",\"type\":\"tuple\",\"internalType\":\"structBlobHeaderV2\",\"components\":[{\"name\":\"version\",\"type\":\"uint16\",\"internalType\":\"uint16\"},{\"name\":\"quorumNumbers\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"commitment\",\"type\":\"tuple\",\"internalType\":\"structBlobCommitment\",\"components\":[{\"name\":\"commitment\",\"type\":\"tuple\",\"internalType\":\"structBN254.G1Point\",\"components\":[{\"name\":\"X\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"Y\",\"type\":\"uint256\",\"internalType\":\"uint256\"}]},{\"name\":\"lengthCommitment\",\"type\":\"tuple\",\"internalType\":\"structBN254.G2Point\",\"components\":[{\"name\":\"X\",\"type\":\"uint256[2]\",\"internalType\":\"uint256[2]\"},{\"name\":\"Y\",\"type\":\"uint256[2]\",\"internalType\":\"uint256[2]\"}]},{\"name\":\"lengthProof\",\"type\":\"tuple\",\"internalType\":\"structBN254.G2Point\",\"components\":[{\"name\":\"X\",\"type\":\"uint256[2]\",\"internalType\":\"uint256[2]\"},{\"name\":\"Y\",\"type\":\"uint256[2]\",\"internalType\":\"uint256[2]\"}]},{\"name\":\"dataLength\",\"type\":\"uint32\",\"internalType\":\"uint32\"}]},{\"name\":\"salt\",\"type\":\"uint32\",\"internalType\":\"uint32\"},{\"name\":\"paymentHeaderHash\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}]},{\"name\":\"signature\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"relayKeys\",\"type\":\"uint32[]\",\"internalType\":\"uint32[]\"}]},{\"name\":\"blobIndex\",\"type\":\"uint32\",\"internalType\":\"uint32\"},{\"name\":\"inclusionProof\",\"type\":\"bytes\",\"internalType\":\"bytes\"}]},{\"name\":\"nonSignerStakesAndSignature\",\"type\":\"tuple\",\"internalType\":\"structNonSignerStakesAndSignature\",\"components\":[{\"name\":\"nonSignerQuorumBitmapIndices\",\"type\":\"uint32[]\",\"internalType\":\"uint32[]\"},{\"name\":\"nonSignerPubkeys\",\"type\":\"tuple[]\",\"internalType\":\"structBN254.G1Point[]\",\"components\":[{\"name\":\"X\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"Y\",\"type\":\"uint256\",\"internalType\":\"uint256\"}]},{\"name\":\"quorumApks\",\"type\":\"tuple[]\",\"internalType\":\"structBN254.G1Point[]\",\"components\":[{\"name\":\"X\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"Y\",\"type\":\"uint256\",\"internalType\":\"uint256\"}]},{\"name\":\"apkG2\",\"type\":\"tuple\",\"internalType\":\"structBN254.G2Point\",\"components\":[{\"name\":\"X\",\"type\":\"uint256[2]\",\"internalType\":\"uint256[2]\"},{\"name\":\"Y\",\"type\":\"uint256[2]\",\"internalType\":\"uint256[2]\"}]},{\"name\":\"sigma\",\"type\":\"tuple\",\"internalType\":\"structBN254.G1Point\",\"components\":[{\"name\":\"X\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"Y\",\"type\":\"uint256\",\"internalType\":\"uint256\"}]},{\"name\":\"quorumApkIndices\",\"type\":\"uint32[]\",\"internalType\":\"uint32[]\"},{\"name\":\"totalStakeIndices\",\"type\":\"uint32[]\",\"internalType\":\"uint32[]\"},{\"name\":\"nonSignerStakeIndices\",\"type\":\"uint32[][]\",\"internalType\":\"uint32[][]\"}]}],\"outputs\":[],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"verifyBlobV2FromSignedBatch\",\"inputs\":[{\"name\":\"signedBatch\",\"type\":\"tuple\",\"internalType\":\"structSignedBatch\",\"components\":[{\"name\":\"batchHeader\",\"type\":\"tuple\",\"internalType\":\"structBatchHeaderV2\",\"components\":[{\"name\":\"batchRoot\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"referenceBlockNumber\",\"type\":\"uint32\",\"internalType\":\"uint32\"}]},{\"name\":\"attestation\",\"type\":\"tuple\",\"internalType\":\"structAttestation\",\"components\":[{\"name\":\"nonSignerPubkeys\",\"type\":\"tuple[]\",\"internalType\":\"structBN254.G1Point[]\",\"components\":[{\"name\":\"X\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"Y\",\"type\":\"uint256\",\"internalType\":\"uint256\"}]},{\"name\":\"quorumApks\",\"type\":\"tuple[]\",\"internalType\":\"structBN254.G1Point[]\",\"components\":[{\"name\":\"X\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"Y\",\"type\":\"uint256\",\"internalType\":\"uint256\"}]},{\"name\":\"sigma\",\"type\":\"tuple\",\"internalType\":\"structBN254.G1Point\",\"components\":[{\"name\":\"X\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"Y\",\"type\":\"uint256\",\"internalType\":\"uint256\"}]},{\"name\":\"apkG2\",\"type\":\"tuple\",\"internalType\":\"structBN254.G2Point\",\"components\":[{\"name\":\"X\",\"type\":\"uint256[2]\",\"internalType\":\"uint256[2]\"},{\"name\":\"Y\",\"type\":\"uint256[2]\",\"internalType\":\"uint256[2]\"}]},{\"name\":\"quorumNumbers\",\"type\":\"uint32[]\",\"internalType\":\"uint32[]\"}]}]},{\"name\":\"blobVerificationProof\",\"type\":\"tuple\",\"internalType\":\"structBlobVerificationProofV2\",\"components\":[{\"name\":\"blobCertificate\",\"type\":\"tuple\",\"internalType\":\"structBlobCertificate\",\"components\":[{\"name\":\"blobHeader\",\"type\":\"tuple\",\"internalType\":\"structBlobHeaderV2\",\"components\":[{\"name\":\"version\",\"type\":\"uint16\",\"internalType\":\"uint16\"},{\"name\":\"quorumNumbers\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"commitment\",\"type\":\"tuple\",\"internalType\":\"structBlobCommitment\",\"components\":[{\"name\":\"commitment\",\"type\":\"tuple\",\"internalType\":\"structBN254.G1Point\",\"components\":[{\"name\":\"X\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"Y\",\"type\":\"uint256\",\"internalType\":\"uint256\"}]},{\"name\":\"lengthCommitment\",\"type\":\"tuple\",\"internalType\":\"structBN254.G2Point\",\"components\":[{\"name\":\"X\",\"type\":\"uint256[2]\",\"internalType\":\"uint256[2]\"},{\"name\":\"Y\",\"type\":\"uint256[2]\",\"internalType\":\"uint256[2]\"}]},{\"name\":\"lengthProof\",\"type\":\"tuple\",\"internalType\":\"structBN254.G2Point\",\"components\":[{\"name\":\"X\",\"type\":\"uint256[2]\",\"internalType\":\"uint256[2]\"},{\"name\":\"Y\",\"type\":\"uint256[2]\",\"internalType\":\"uint256[2]\"}]},{\"name\":\"dataLength\",\"type\":\"uint32\",\"internalType\":\"uint32\"}]},{\"name\":\"salt\",\"type\":\"uint32\",\"internalType\":\"uint32\"},{\"name\":\"paymentHeaderHash\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}]},{\"name\":\"signature\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"relayKeys\",\"type\":\"uint32[]\",\"internalType\":\"uint32[]\"}]},{\"name\":\"blobIndex\",\"type\":\"uint32\",\"internalType\":\"uint32\"},{\"name\":\"inclusionProof\",\"type\":\"bytes\",\"internalType\":\"bytes\"}]}],\"outputs\":[],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"verifyBlobsV1\",\"inputs\":[{\"name\":\"blobHeaders\",\"type\":\"tuple[]\",\"internalType\":\"structBlobHeader[]\",\"components\":[{\"name\":\"commitment\",\"type\":\"tuple\",\"internalType\":\"structBN254.G1Point\",\"components\":[{\"name\":\"X\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"Y\",\"type\":\"uint256\",\"internalType\":\"uint256\"}]},{\"name\":\"dataLength\",\"type\":\"uint32\",\"internalType\":\"uint32\"},{\"name\":\"quorumBlobParams\",\"type\":\"tuple[]\",\"internalType\":\"structQuorumBlobParam[]\",\"components\":[{\"name\":\"quorumNumber\",\"type\":\"uint8\",\"internalType\":\"uint8\"},{\"name\":\"adversaryThresholdPercentage\",\"type\":\"uint8\",\"internalType\":\"uint8\"},{\"name\":\"confirmationThresholdPercentage\",\"type\":\"uint8\",\"internalType\":\"uint8\"},{\"name\":\"chunkLength\",\"type\":\"uint32\",\"internalType\":\"uint32\"}]}]},{\"name\":\"blobVerificationProofs\",\"type\":\"tuple[]\",\"internalType\":\"structBlobVerificationProof[]\",\"components\":[{\"name\":\"batchId\",\"type\":\"uint32\",\"internalType\":\"uint32\"},{\"name\":\"blobIndex\",\"type\":\"uint32\",\"internalType\":\"uint32\"},{\"name\":\"batchMetadata\",\"type\":\"tuple\",\"internalType\":\"structBatchMetadata\",\"components\":[{\"name\":\"batchHeader\",\"type\":\"tuple\",\"internalType\":\"structBatchHeader\",\"components\":[{\"name\":\"blobHeadersRoot\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"quorumNumbers\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"signedStakeForQuorums\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"referenceBlockNumber\",\"type\":\"uint32\",\"internalType\":\"uint32\"}]},{\"name\":\"signatoryRecordHash\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"confirmationBlockNumber\",\"type\":\"uint32\",\"internalType\":\"uint32\"}]},{\"name\":\"inclusionProof\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"quorumIndices\",\"type\":\"bytes\",\"internalType\":\"bytes\"}]}],\"outputs\":[],\"stateMutability\":\"view\"},{\"type\":\"event\",\"name\":\"DefaultSecurityThresholdsV2Updated\",\"inputs\":[{\"name\":\"previousDefaultSecurityThresholdsV2\",\"type\":\"tuple\",\"indexed\":false,\"internalType\":\"structSecurityThresholds\",\"components\":[{\"name\":\"confirmationThreshold\",\"type\":\"uint8\",\"internalType\":\"uint8\"},{\"name\":\"adversaryThreshold\",\"type\":\"uint8\",\"internalType\":\"uint8\"}]},{\"name\":\"newDefaultSecurityThresholdsV2\",\"type\":\"tuple\",\"indexed\":false,\"internalType\":\"structSecurityThresholds\",\"components\":[{\"name\":\"confirmationThreshold\",\"type\":\"uint8\",\"internalType\":\"uint8\"},{\"name\":\"adversaryThreshold\",\"type\":\"uint8\",\"internalType\":\"uint8\"}]}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"QuorumAdversaryThresholdPercentagesUpdated\",\"inputs\":[{\"name\":\"previousQuorumAdversaryThresholdPercentages\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"},{\"name\":\"newQuorumAdversaryThresholdPercentages\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"QuorumConfirmationThresholdPercentagesUpdated\",\"inputs\":[{\"name\":\"previousQuorumConfirmationThresholdPercentages\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"},{\"name\":\"newQuorumConfirmationThresholdPercentages\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"QuorumNumbersRequiredUpdated\",\"inputs\":[{\"name\":\"previousQuorumNumbersRequired\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"},{\"name\":\"newQuorumNumbersRequired\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"VersionedBlobParamsAdded\",\"inputs\":[{\"name\":\"version\",\"type\":\"uint16\",\"indexed\":true,\"internalType\":\"uint16\"},{\"name\":\"versionedBlobParams\",\"type\":\"tuple\",\"indexed\":false,\"internalType\":\"structVersionedBlobParams\",\"components\":[{\"name\":\"maxNumOperators\",\"type\":\"uint32\",\"internalType\":\"uint32\"},{\"name\":\"numChunks\",\"type\":\"uint32\",\"internalType\":\"uint32\"},{\"name\":\"codingRate\",\"type\":\"uint8\",\"internalType\":\"uint8\"}]}],\"anonymous\":false}]", + Bin: "0x6101406040523480156200001257600080fd5b50604051620044a2380380620044a283398101604081905262000035916200007e565b6001600160a01b0395861660805293851660a05291841660c052831660e052821661010052166101205262000112565b6001600160a01b03811681146200007b57600080fd5b50565b60008060008060008060c087890312156200009857600080fd5b8651620000a58162000065565b6020880151909650620000b88162000065565b6040880151909550620000cb8162000065565b6060880151909450620000de8162000065565b6080880151909350620000f18162000065565b60a0880151909250620001048162000065565b809150509295509295509295565b60805160a05160c05160e05161010051610120516142a6620001fc6000396000818161025f015281816108610152610acb0152600081816101e6015281816108400152610aaa015260008181610286015281816105e8015261081f01526000818161035a015281816105c701526107fe0152600081816102380152818161074401526107a20152600081816103a1015281816103de0152818161048801528181610536015281816105a6015281816106950152818161072301528181610781015281816107dd015281816108fa0152818161095a015281816109d10152610a1e01526142a66000f3fe608060405234801561001057600080fd5b50600436106101375760003560e01c80638d67b909116100b8578063e15234ff1161007c578063e15234ff14610311578063ee6c3bcf14610319578063ef6355291461032c578063efd4532b14610355578063f25de3f81461037c578063f8c668141461039c57600080fd5b80638d67b909146102bd57806392ce4ab2146102d0578063b60e9662146102e3578063b64feb4b146102f6578063bafa91071461030957600080fd5b80635c01da73116100ff5780635c01da7314610220578063640f65d9146102335780636d14a9871461025a57806372276443146102815780638687feae146102a857600080fd5b8063048886d21461013c578063127af44d146101645780631429c7c2146101795780632ecfe72b1461019e5780634ca22c3f146101e1575b600080fd5b61014f61014a366004612673565b6103c3565b60405190151581526020015b60405180910390f35b6101776101723660046127e7565b610457565b005b61018c610187366004612673565b61046d565b60405160ff909116815260200161015b565b6101b16101ac36600461281b565b6104fc565b60408051825163ffffffff9081168252602080850151909116908201529181015160ff169082015260600161015b565b6102087f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b03909116815260200161015b565b61017761022e36600461284e565b6105a1565b6102087f000000000000000000000000000000000000000000000000000000000000000081565b6102087f000000000000000000000000000000000000000000000000000000000000000081565b6102087f000000000000000000000000000000000000000000000000000000000000000081565b6102b0610691565b60405161015b9190612929565b6101776102cb36600461293c565b61071e565b6101776102de3660046129cb565b610772565b6101776102f1366004612a83565b61077c565b610177610304366004612aee565b6107d8565b6102b06108f6565b6102b0610956565b61018c610327366004612673565b6109b6565b610334610a08565b60408051825160ff908116825260209384015116928101929092520161015b565b6102087f000000000000000000000000000000000000000000000000000000000000000081565b61038f61038a366004612b51565b610a9d565b60405161015b9190612d77565b6102087f000000000000000000000000000000000000000000000000000000000000000081565b604051630244436960e11b815260ff821660048201526000907f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03169063048886d290602401602060405180830381865afa15801561042d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906104519190612d8a565b92915050565b610469610463836104fc565b82610af8565b5050565b604051630a14e3e160e11b815260ff821660048201526000907f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031690631429c7c2906024015b602060405180830381865afa1580156104d8573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906104519190612dac565b60408051606081018252600080825260208201819052818301529051632ecfe72b60e01b815261ffff831660048201526001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001690632ecfe72b90602401606060405180830381865afa15801561057d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906104519190612dc9565b61068c7f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f000000000000000000000000000000000000000000000000000000000000000061061636889003880188612e68565b61061f87613048565b610628876132e7565b610630610a08565b61063a8a8061340f565b610644908061342f565b610652906020810190613446565b8080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250610cae92505050565b505050565b60607f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316638687feae6040518163ffffffff1660e01b8152600401600060405180830381865afa1580156106f1573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052610719919081019061348c565b905090565b6104697f00000000000000000000000000000000000000000000000000000000000000007f0000000000000000000000000000000000000000000000000000000000000000848461076d610956565b6110c7565b6104698282610af8565b6107d27f00000000000000000000000000000000000000000000000000000000000000007f0000000000000000000000000000000000000000000000000000000000000000868686866107cd610956565b611600565b50505050565b6104697f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f0000000000000000000000000000000000000000000000000000000000000000610889886134f9565b61089288613048565b61089a610a08565b6108a48a8061340f565b6108ae908061342f565b6108bc906020810190613446565b8080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250611e4e92505050565b60607f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663bafa91076040518163ffffffff1660e01b8152600401600060405180830381865afa1580156106f1573d6000803e3d6000fd5b60607f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663e15234ff6040518163ffffffff1660e01b8152600401600060405180830381865afa1580156106f1573d6000803e3d6000fd5b60405163ee6c3bcf60e01b815260ff821660048201526000907f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03169063ee6c3bcf906024016104bb565b60408051808201909152600080825260208201527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663ef6355296040518163ffffffff1660e01b81526004016040805180830381865afa158015610a79573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061071991906135f0565b610aa56125b8565b6104517f00000000000000000000000000000000000000000000000000000000000000007f0000000000000000000000000000000000000000000000000000000000000000610af3856134f9565b611e7d565b806020015160ff16816000015160ff1611610bb25760405162461bcd60e51b8152602060048201526075602482015260008051602061425183398151915260448201527f72696679426c6f625365637572697479506172616d733a20636f6e6669726d6160648201527f74696f6e5468726573686f6c64206d7573742062652067726561746572207468608482015274185b8818591d995c9cd85c9e551a1c995cda1bdb19605a1b60a482015260c4015b60405180910390fd5b60208101518151600091610bc591613647565b60ff1690506000836020015163ffffffff16846040015160ff1683620f4240610bee9190613680565b610bf89190613680565b610c0490612710613694565b610c0e91906136ab565b8451909150610c1f906127106136ca565b63ffffffff168110156107d25760405162461bcd60e51b8152602060048201526058602482015260008051602061425183398151915260448201527f72696679426c6f625365637572697479506172616d733a20736563757269747960648201527f20617373756d7074696f6e7320617265206e6f74206d65740000000000000000608482015260a401610ba9565b610d0084604001518660000151610cc88760000151612093565b604051602001610cda91815260200190565b60405160208183030381529060405280519060200120876020015163ffffffff166120d8565b610d795760405162461bcd60e51b8152602060048201526050602482015260008051602061425183398151915260448201527f72696679426c6f625632466f7251756f72756d733a20696e636c7573696f6e2060648201526f1c1c9bdbd9881a5cc81a5b9d985b1a5960821b608482015260a401610ba9565b600080886001600160a01b0316636efb4636610d94896120f0565b885151602090810151908b01516040516001600160e01b031960e086901b168152610dc6939291908b906004016136f6565b600060405180830381865afa158015610de3573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052610e0b91908101906137a9565b91509150610e218887600001516040015161211b565b85515151604051632ecfe72b60e01b815261ffff9091166004820152610e9c906001600160a01b038c1690632ecfe72b90602401606060405180830381865afa158015610e72573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e969190612dc9565b85610af8565b6000805b875151602001515181101561100757856000015160ff1684602001518281518110610ecd57610ecd613845565b6020026020010151610edf919061385b565b6001600160601b0316606485600001518381518110610f0057610f00613845565b60200260200101516001600160601b0316610f1b91906136ab565b1015610fc25760405162461bcd60e51b8152602060048201526076602482015260008051602061425183398151915260448201527f72696679426c6f625632466f7251756f72756d733a207369676e61746f72696560648201527f7320646f206e6f74206f776e206174206c65617374207468726573686f6c642060848201527570657263656e74616765206f6620612071756f72756d60501b60a482015260c401610ba9565b875151602001518051610ff391849184908110610fe157610fe1613845565b0160200151600160f89190911c1b1790565b915080610fff81613881565b915050610ea0565b5061101b6110148561224e565b8281161490565b6110ba5760405162461bcd60e51b8152602060048201526070602482015260008051602061425183398151915260448201527f72696679426c6f625632466f7251756f72756d733a207265717569726564207160648201527f756f72756d7320617265206e6f74206120737562736574206f6620746865206360848201526f6f6e6669726d65642071756f72756d7360801b60a482015260c401610ba9565b5050505050505050505050565b6001600160a01b03841663eccbbfc96110e3602085018561389c565b6040516001600160e01b031960e084901b16815263ffffffff919091166004820152602401602060405180830381865afa158015611125573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061114991906138b9565b611167611159604085018561340f565b611162906138d2565b6123db565b146111845760405162461bcd60e51b8152600401610ba9906139a9565b6112386111946060840184613446565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152506111d692505050604085018561340f565b6111e09080613a1b565b356111f26111ed87613a31565b61244c565b60405160200161120491815260200190565b6040516020818303038152906040528051906020012085602001602081019061122d919061389c565b63ffffffff166120d8565b6112545760405162461bcd60e51b8152600401610ba990613b50565b6000805b6112656060860186613bb2565b90508110156115cf5761127b6060860186613bb2565b8281811061128b5761128b613845565b6112a19260206080909202019081019150612673565b60ff166112b1604086018661340f565b6112bb9080613a1b565b6112c9906020810190613446565b6112d66080880188613446565b858181106112e6576112e6613845565b919091013560f81c90508181106112ff576112ff613845565b9050013560f81c60f81b60f81c60ff161461132c5760405162461bcd60e51b8152600401610ba990613bfb565b6113396060860186613bb2565b8281811061134957611349613845565b90506080020160200160208101906113619190612673565b60ff166113716060870187613bb2565b8381811061138157611381613845565b90506080020160400160208101906113999190612673565b60ff16116113b95760405162461bcd60e51b8152600401610ba990613c5e565b6001600160a01b038716631429c7c26113d56060880188613bb2565b848181106113e5576113e5613845565b6113fb9260206080909202019081019150612673565b6040516001600160e01b031960e084901b16815260ff9091166004820152602401602060405180830381865afa158015611439573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061145d9190612dac565b60ff1661146d6060870187613bb2565b8381811061147d5761147d613845565b90506080020160400160208101906114959190612673565b60ff1610156114b65760405162461bcd60e51b8152600401610ba990613ccf565b6114c36060860186613bb2565b828181106114d3576114d3613845565b90506080020160400160208101906114eb9190612673565b60ff166114fb604086018661340f565b6115059080613a1b565b611513906040810190613446565b6115206080880188613446565b8581811061153057611530613845565b919091013560f81c905081811061154957611549613845565b9050013560f81c60f81b60f81c60ff1610156115775760405162461bcd60e51b8152600401610ba990613ccf565b6115bb826115886060880188613bb2565b8481811061159857611598613845565b6115ae9260206080909202019081019150612673565b600160ff919091161b1790565b9150806115c781613881565b915050611258565b506115dc6110148361224e565b6115f85760405162461bcd60e51b8152600401610ba990613d40565b505050505050565b83821461169d5760405162461bcd60e51b815260206004820152606b602482015260008051602061425183398151915260448201527f72696679426c6f6273466f7251756f72756d733a20626c6f624865616465727360648201527f20616e6420626c6f62566572696669636174696f6e50726f6f6673206c656e6760848201526a0e8d040dad2e6dac2e8c6d60ab1b60a482015260c401610ba9565b6000876001600160a01b031663bafa91076040518163ffffffff1660e01b8152600401600060405180830381865afa1580156116dd573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052611705919081019061348c565b905060005b85811015611e4357876001600160a01b031663eccbbfc986868481811061173357611733613845565b90506020028101906117459190613dc8565b61175390602081019061389c565b6040516001600160e01b031960e084901b16815263ffffffff919091166004820152602401602060405180830381865afa158015611795573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906117b991906138b9565b6117ee8686848181106117ce576117ce613845565b90506020028101906117e09190613dc8565b61115990604081019061340f565b1461180b5760405162461bcd60e51b8152600401610ba9906139a9565b61194185858381811061182057611820613845565b90506020028101906118329190613dc8565b611840906060810190613446565b8080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525089925088915085905081811061188957611889613845565b905060200281019061189b9190613dc8565b6118a990604081019061340f565b6118b39080613a1b565b356118e48a8a868181106118c9576118c9613845565b90506020028101906118db9190613a1b565b6111ed90613a31565b6040516020016118f691815260200190565b6040516020818303038152906040528051906020012088888681811061191e5761191e613845565b90506020028101906119309190613dc8565b61122d90604081019060200161389c565b61195d5760405162461bcd60e51b8152600401610ba990613b50565b6000805b88888481811061197357611973613845565b90506020028101906119859190613a1b565b611993906060810190613bb2565b9050811015611e09578888848181106119ae576119ae613845565b90506020028101906119c09190613a1b565b6119ce906060810190613bb2565b828181106119de576119de613845565b6119f49260206080909202019081019150612673565b60ff16878785818110611a0957611a09613845565b9050602002810190611a1b9190613dc8565b611a2990604081019061340f565b611a339080613a1b565b611a41906020810190613446565b898987818110611a5357611a53613845565b9050602002810190611a659190613dc8565b611a73906080810190613446565b85818110611a8357611a83613845565b919091013560f81c9050818110611a9c57611a9c613845565b9050013560f81c60f81b60f81c60ff1614611ac95760405162461bcd60e51b8152600401610ba990613bfb565b888884818110611adb57611adb613845565b9050602002810190611aed9190613a1b565b611afb906060810190613bb2565b82818110611b0b57611b0b613845565b9050608002016020016020810190611b239190612673565b60ff16898985818110611b3857611b38613845565b9050602002810190611b4a9190613a1b565b611b58906060810190613bb2565b83818110611b6857611b68613845565b9050608002016040016020810190611b809190612673565b60ff1611611ba05760405162461bcd60e51b8152600401610ba990613c5e565b83898985818110611bb357611bb3613845565b9050602002810190611bc59190613a1b565b611bd3906060810190613bb2565b83818110611be357611be3613845565b611bf99260206080909202019081019150612673565b60ff1681518110611c0c57611c0c613845565b016020015160f81c898985818110611c2657611c26613845565b9050602002810190611c389190613a1b565b611c46906060810190613bb2565b83818110611c5657611c56613845565b9050608002016040016020810190611c6e9190612673565b60ff161015611c8f5760405162461bcd60e51b8152600401610ba990613ccf565b888884818110611ca157611ca1613845565b9050602002810190611cb39190613a1b565b611cc1906060810190613bb2565b82818110611cd157611cd1613845565b9050608002016040016020810190611ce99190612673565b60ff16878785818110611cfe57611cfe613845565b9050602002810190611d109190613dc8565b611d1e90604081019061340f565b611d289080613a1b565b611d36906040810190613446565b898987818110611d4857611d48613845565b9050602002810190611d5a9190613dc8565b611d68906080810190613446565b85818110611d7857611d78613845565b919091013560f81c9050818110611d9157611d91613845565b9050013560f81c60f81b60f81c60ff161015611dbf5760405162461bcd60e51b8152600401610ba990613ccf565b611df5828a8a86818110611dd557611dd5613845565b9050602002810190611de79190613a1b565b611588906060810190613bb2565b915080611e0181613881565b915050611961565b50611e166110148561224e565b611e325760405162461bcd60e51b8152600401610ba990613d40565b50611e3c81613881565b905061170a565b505050505050505050565b6000611e5b878787611e7d565b9050611e718a8a8a886000015188868989610cae565b50505050505050505050565b611e856125b8565b602082015151516000906001600160401b03811115611ea657611ea66126ae565b604051908082528060200260200182016040528015611ecf578160200160208202803683370190505b50905060005b60208401515151811015611f4c57611f1f8460200151600001518281518110611f0057611f00613845565b6020026020010151805160009081526020918201519091526040902090565b828281518110611f3157611f31613845565b6020908102919091010152611f4581613881565b9050611ed5565b50606060005b84602001516080015151811015611fb957818560200151608001518281518110611f7e57611f7e613845565b6020026020010151604051602001611f97929190613dde565b604051602081830303815290604052915080611fb290613881565b9050611f52565b508351602001516040516313dce7dd60e21b81526000916001600160a01b03891691634f739f7491611ff4918a919087908990600401613e10565b600060405180830381865afa158015612011573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526120399190810190613f63565b805185526020958601805151878701528051870151604080880191909152815160609081015181890152915181015160808801529682015160a08701529581015160c0860152949094015160e08401525090949350505050565b60006120a2826000015161245f565b60208084015160408086015190516120bb94930161403b565b604051602081830303815290604052805190602001209050919050565b6000836120e68685856124b5565b1495945050505050565b6000816040516020016120bb91908151815260209182015163ffffffff169181019190915260400190565b60005b815181101561068c5760006001600160a01b0316836001600160a01b031663b5a872da84848151811061215357612153613845565b60200260200101516040518263ffffffff1660e01b8152600401612183919063ffffffff91909116815260200190565b602060405180830381865afa1580156121a0573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906121c49190614070565b6001600160a01b0316141561223e5760405162461bcd60e51b8152602060048201526046602482015260008051602061425183398151915260448201527f7269667952656c61794b6579735365743a2072656c6179206b6579206973206e6064820152651bdd081cd95d60d21b608482015260a401610ba9565b61224781613881565b905061211e565b6000610100825111156122d75760405162461bcd60e51b8152602060048201526044602482018190527f4269746d61705574696c732e6f72646572656442797465734172726179546f42908201527f69746d61703a206f7264657265644279746573417272617920697320746f6f206064820152636c6f6e6760e01b608482015260a401610ba9565b81516122e557506000919050565b600080836000815181106122fb576122fb613845565b0160200151600160f89190911c81901b92505b84518110156123d25784818151811061232957612329613845565b0160200151600160f89190911c1b91508282116123be5760405162461bcd60e51b815260206004820152604760248201527f4269746d61705574696c732e6f72646572656442797465734172726179546f4260448201527f69746d61703a206f72646572656442797465734172726179206973206e6f74206064820152661bdc99195c995960ca1b608482015260a401610ba9565b918117916123cb81613881565b905061230e565b50909392505050565b600061045182600001516040516020016123f59190614099565b60408051808303601f1901815282825280516020918201208682015187840151838601929092528484015260e01b6001600160e01b0319166060840152815160448185030181526064909301909152815191012090565b6000816040516020016120bb91906140f9565b60008160000151826020015183604001518460600151604051602001612488949392919061419e565b60408051601f198184030181528282528051602091820120608086015191840152908201526060016120bb565b6000602084516124c59190614224565b1561254c5760405162461bcd60e51b815260206004820152604b60248201527f4d65726b6c652e70726f63657373496e636c7573696f6e50726f6f664b65636360448201527f616b3a2070726f6f66206c656e6774682073686f756c642062652061206d756c60648201526a3a34b836329037b310199960a91b608482015260a401610ba9565b8260205b855181116125af57612563600285614224565b6125845781600052808601516020526040600020915060028404935061259d565b8086015160005281602052604060002091506002840493505b6125a8602082614238565b9050612550565b50949350505050565b6040518061010001604052806060815260200160608152602001606081526020016125e161261e565b8152602001612603604051806040016040528060008152602001600081525090565b81526020016060815260200160608152602001606081525090565b6040518060400160405280612631612643565b815260200161263e612643565b905290565b60405180604001604052806002906020820280368337509192915050565b60ff8116811461267057600080fd5b50565b60006020828403121561268557600080fd5b813561269081612661565b9392505050565b803561ffff811681146126a957600080fd5b919050565b634e487b7160e01b600052604160045260246000fd5b604080519081016001600160401b03811182821017156126e6576126e66126ae565b60405290565b604051606081016001600160401b03811182821017156126e6576126e66126ae565b60405160a081016001600160401b03811182821017156126e6576126e66126ae565b604051608081016001600160401b03811182821017156126e6576126e66126ae565b60405161010081016001600160401b03811182821017156126e6576126e66126ae565b604051601f8201601f191681016001600160401b038111828210171561279d5761279d6126ae565b604052919050565b6000604082840312156127b757600080fd5b6127bf6126c4565b905081356127cc81612661565b815260208201356127dc81612661565b602082015292915050565b600080606083850312156127fa57600080fd5b61280383612697565b915061281284602085016127a5565b90509250929050565b60006020828403121561282d57600080fd5b61269082612697565b60006060828403121561284857600080fd5b50919050565b6000806000838503608081121561286457600080fd5b604081121561287257600080fd5b5083925060408401356001600160401b038082111561289057600080fd5b61289c87838801612836565b935060608601359150808211156128b257600080fd5b50840161018081870312156128c657600080fd5b809150509250925092565b60005b838110156128ec5781810151838201526020016128d4565b838111156107d25750506000910152565b600081518084526129158160208601602086016128d1565b601f01601f19169290920160200192915050565b60208152600061269060208301846128fd565b6000806040838503121561294f57600080fd5b82356001600160401b038082111561296657600080fd5b908401906080828703121561297a57600080fd5b9092506020840135908082111561299057600080fd5b50830160a081860312156129a357600080fd5b809150509250929050565b63ffffffff8116811461267057600080fd5b80356126a9816129ae565b60008082840360a08112156129df57600080fd5b60608112156129ed57600080fd5b506129f66126ec565b8335612a01816129ae565b81526020840135612a11816129ae565b60208201526040840135612a2481612661565b6040820152915061281284606085016127a5565b60008083601f840112612a4a57600080fd5b5081356001600160401b03811115612a6157600080fd5b6020830191508360208260051b8501011115612a7c57600080fd5b9250929050565b60008060008060408587031215612a9957600080fd5b84356001600160401b0380821115612ab057600080fd5b612abc88838901612a38565b90965094506020870135915080821115612ad557600080fd5b50612ae287828801612a38565b95989497509550505050565b60008060408385031215612b0157600080fd5b82356001600160401b0380821115612b1857600080fd5b612b2486838701612836565b93506020850135915080821115612b3a57600080fd5b50612b4785828601612836565b9150509250929050565b600060208284031215612b6357600080fd5b81356001600160401b03811115612b7957600080fd5b612b8584828501612836565b949350505050565b600081518084526020808501945080840160005b83811015612bc357815163ffffffff1687529582019590820190600101612ba1565b509495945050505050565b600081518084526020808501945080840160005b83811015612bc357612bff87835180518252602090810151910152565b6040969096019590820190600101612be2565b8060005b60028110156107d2578151845260209384019390910190600101612c16565b612c40828251612c12565b602081015161068c6040840182612c12565b600082825180855260208086019550808260051b84010181860160005b84811015612c9d57601f19868403018952612c8b838351612b8d565b98840198925090830190600101612c6f565b5090979650505050505050565b60006101808251818552612cc082860182612b8d565b91505060208301518482036020860152612cda8282612bce565b91505060408301518482036040860152612cf48282612bce565b9150506060830151612d096060860182612c35565b506080830151805160e08601526020015161010085015260a0830151848203610120860152612d388282612b8d565b91505060c0830151848203610140860152612d538282612b8d565b91505060e0830151848203610160860152612d6e8282612c52565b95945050505050565b6020815260006126906020830184612caa565b600060208284031215612d9c57600080fd5b8151801515811461269057600080fd5b600060208284031215612dbe57600080fd5b815161269081612661565b600060608284031215612ddb57600080fd5b604051606081018181106001600160401b0382111715612dfd57612dfd6126ae565b6040528251612e0b816129ae565b81526020830151612e1b816129ae565b60208201526040830151612e2e81612661565b60408201529392505050565b600060408284031215612e4c57600080fd5b612e546126c4565b90508135815260208201356127dc816129ae565b600060408284031215612e7a57600080fd5b6126908383612e3a565b60006001600160401b03821115612e9d57612e9d6126ae565b50601f01601f191660200190565b600082601f830112612ebc57600080fd5b8135612ecf612eca82612e84565b612775565b818152846020838601011115612ee457600080fd5b816020850160208301376000918101602001919091529392505050565b600060408284031215612f1357600080fd5b612f1b6126c4565b9050813581526020820135602082015292915050565b600082601f830112612f4257600080fd5b612f4a6126c4565b806040840185811115612f5c57600080fd5b845b81811015612f76578035845260209384019301612f5e565b509095945050505050565b600060808284031215612f9357600080fd5b612f9b6126c4565b9050612fa78383612f31565b81526127dc8360408401612f31565b60006001600160401b03821115612fcf57612fcf6126ae565b5060051b60200190565b600082601f830112612fea57600080fd5b81356020612ffa612eca83612fb6565b82815260059290921b8401810191818101908684111561301957600080fd5b8286015b8481101561303d578035613030816129ae565b835291830191830161301d565b509695505050505050565b60006060823603121561305a57600080fd5b6130626126ec565b82356001600160401b038082111561307957600080fd5b81850191506060823603121561308e57600080fd5b6130966126ec565b8235828111156130a557600080fd5b8301368190036101e08112156130ba57600080fd5b6130c261270e565b6130cb83612697565b8152602080840135868111156130e057600080fd5b6130ec36828701612eab565b83830152506040610160603f198501121561310657600080fd5b61310e612730565b935061311c36828701612f01565b845261312b3660808701612f81565b8285015261313d366101008701612f81565b81850152610180850135613150816129ae565b60608501528281018490526131686101a086016129c0565b60608401526101c085013560808401528286528188013594508685111561318e57600080fd5b61319a36868a01612eab565b82870152808801359450868511156131b157600080fd5b6131bd36868a01612fd9565b818701528589526131cf828c016129c0565b828a0152808b01359750868811156131e657600080fd5b6131f236898d01612eab565b90890152509598975050505050505050565b600082601f83011261321557600080fd5b81356020613225612eca83612fb6565b82815260069290921b8401810191818101908684111561324457600080fd5b8286015b8481101561303d5761325a8882612f01565b835291830191604001613248565b600082601f83011261327957600080fd5b81356020613289612eca83612fb6565b82815260059290921b840181019181810190868411156132a857600080fd5b8286015b8481101561303d5780356001600160401b038111156132cb5760008081fd5b6132d98986838b0101612fd9565b8452509183019183016132ac565b600061018082360312156132fa57600080fd5b613302612752565b82356001600160401b038082111561331957600080fd5b61332536838701612fd9565b8352602085013591508082111561333b57600080fd5b61334736838701613204565b6020840152604085013591508082111561336057600080fd5b61336c36838701613204565b604084015261337e3660608701612f81565b60608401526133903660e08701612f01565b60808401526101208501359150808211156133aa57600080fd5b6133b636838701612fd9565b60a08401526101408501359150808211156133d057600080fd5b6133dc36838701612fd9565b60c08401526101608501359150808211156133f657600080fd5b5061340336828601613268565b60e08301525092915050565b60008235605e1983360301811261342557600080fd5b9190910192915050565b600082356101de1983360301811261342557600080fd5b6000808335601e1984360301811261345d57600080fd5b8301803591506001600160401b0382111561347757600080fd5b602001915036819003821315612a7c57600080fd5b60006020828403121561349e57600080fd5b81516001600160401b038111156134b457600080fd5b8201601f810184136134c557600080fd5b80516134d3612eca82612e84565b8181528560208385010111156134e857600080fd5b612d6e8260208301602086016128d1565b60006060823603121561350b57600080fd5b6135136126c4565b61351d3684612e3a565b815260408301356001600160401b038082111561353957600080fd5b8185019150610120823603121561354f57600080fd5b61355761270e565b82358281111561356657600080fd5b61357236828601613204565b82525060208301358281111561358757600080fd5b61359336828601613204565b6020830152506135a63660408501612f01565b60408201526135b83660808501612f81565b6060820152610100830135828111156135d057600080fd5b6135dc36828601612fd9565b608083015250602084015250909392505050565b60006040828403121561360257600080fd5b61360a6126c4565b825161361581612661565b8152602083015161362581612661565b60208201529392505050565b634e487b7160e01b600052601160045260246000fd5b600060ff821660ff84168082101561366157613661613631565b90039392505050565b634e487b7160e01b600052601260045260246000fd5b60008261368f5761368f61366a565b500490565b6000828210156136a6576136a6613631565b500390565b60008160001904831182151516156136c5576136c5613631565b500290565b600063ffffffff808316818516818304811182151516156136ed576136ed613631565b02949350505050565b84815260806020820152600061370f60808301866128fd565b63ffffffff85166040840152828103606084015261372d8185612caa565b979650505050505050565b600082601f83011261374957600080fd5b81516020613759612eca83612fb6565b82815260059290921b8401810191818101908684111561377857600080fd5b8286015b8481101561303d5780516001600160601b038116811461379c5760008081fd5b835291830191830161377c565b600080604083850312156137bc57600080fd5b82516001600160401b03808211156137d357600080fd5b90840190604082870312156137e757600080fd5b6137ef6126c4565b8251828111156137fe57600080fd5b61380a88828601613738565b82525060208301518281111561381f57600080fd5b61382b88828601613738565b602083015250809450505050602083015190509250929050565b634e487b7160e01b600052603260045260246000fd5b60006001600160601b03808316818516818304811182151516156136ed576136ed613631565b600060001982141561389557613895613631565b5060010190565b6000602082840312156138ae57600080fd5b8135612690816129ae565b6000602082840312156138cb57600080fd5b5051919050565b6000606082360312156138e457600080fd5b6138ec6126ec565b82356001600160401b038082111561390357600080fd5b81850191506080823603121561391857600080fd5b613920612730565b8235815260208301358281111561393657600080fd5b61394236828601612eab565b60208301525060408301358281111561395a57600080fd5b61396636828601612eab565b6040830152506060830135925061397c836129ae565b8260608201528084525050506020830135602082015261399e604084016129c0565b604082015292915050565b6020808252606090820181905260008051602061425183398151915260408301527f72696679426c6f62466f7251756f72756d733a2062617463684d657461646174908201527f6120646f6573206e6f74206d617463682073746f726564206d65746164617461608082015260a00190565b60008235607e1983360301811261342557600080fd5b60006080808336031215613a4457600080fd5b613a4c6126ec565b613a563685612f01565b8152604080850135613a67816129ae565b6020818185015260609150818701356001600160401b03811115613a8a57600080fd5b870136601f820112613a9b57600080fd5b8035613aa9612eca82612fb6565b81815260079190911b82018301908381019036831115613ac857600080fd5b928401925b82841015613b3c57888436031215613ae55760008081fd5b613aed612730565b8435613af881612661565b815284860135613b0781612661565b8187015284880135613b1881612661565b8189015284870135613b29816129ae565b8188015282529288019290840190613acd565b958701959095525093979650505050505050565b6020808252604e9082015260008051602061425183398151915260408201527f72696679426c6f62466f7251756f72756d733a20696e636c7573696f6e20707260608201526d1bdbd9881a5cc81a5b9d985b1a5960921b608082015260a00190565b6000808335601e19843603018112613bc957600080fd5b8301803591506001600160401b03821115613be357600080fd5b6020019150600781901b3603821315612a7c57600080fd5b6020808252604f9082015260008051602061425183398151915260408201527f72696679426c6f62466f7251756f72756d733a2071756f72756d4e756d62657260608201526e040c8decae640dcdee840dac2e8c6d608b1b608082015260a00190565b602080825260579082015260008051602061425183398151915260408201527f72696679426c6f62466f7251756f72756d733a207468726573686f6c6420706560608201527f7263656e746167657320617265206e6f742076616c6964000000000000000000608082015260a00190565b6020808252605e9082015260008051602061425183398151915260408201527f72696679426c6f62466f7251756f72756d733a20636f6e6669726d6174696f6e60608201527f5468726573686f6c6450657263656e74616765206973206e6f74206d65740000608082015260a00190565b6020808252606e9082015260008051602061425183398151915260408201527f72696679426c6f62466f7251756f72756d733a2072657175697265642071756f60608201527f72756d7320617265206e6f74206120737562736574206f662074686520636f6e60808201526d6669726d65642071756f72756d7360901b60a082015260c00190565b60008235609e1983360301811261342557600080fd5b60008351613df08184602088016128d1565b60f89390931b6001600160f81b0319169190920190815260010192915050565b60018060a01b03851681526000602063ffffffff86168184015260806040840152613e3e60808401866128fd565b838103606085015284518082528286019183019060005b81811015613e7157835183529284019291840191600101613e55565b50909998505050505050505050565b600082601f830112613e9157600080fd5b81516020613ea1612eca83612fb6565b82815260059290921b84018101918181019086841115613ec057600080fd5b8286015b8481101561303d578051613ed7816129ae565b8352918301918301613ec4565b600082601f830112613ef557600080fd5b81516020613f05612eca83612fb6565b82815260059290921b84018101918181019086841115613f2457600080fd5b8286015b8481101561303d5780516001600160401b03811115613f475760008081fd5b613f558986838b0101613e80565b845250918301918301613f28565b600060208284031215613f7557600080fd5b81516001600160401b0380821115613f8c57600080fd5b9083019060808286031215613fa057600080fd5b613fa8612730565b825182811115613fb757600080fd5b613fc387828601613e80565b825250602083015182811115613fd857600080fd5b613fe487828601613e80565b602083015250604083015182811115613ffc57600080fd5b61400887828601613e80565b60408301525060608301518281111561402057600080fd5b61402c87828601613ee4565b60608301525095945050505050565b83815260606020820152600061405460608301856128fd565b82810360408401526140668185612b8d565b9695505050505050565b60006020828403121561408257600080fd5b81516001600160a01b038116811461269057600080fd5b602081528151602082015260006020830151608060408401526140bf60a08401826128fd565b90506040840151601f198483030160608501526140dc82826128fd565b91505063ffffffff60608501511660808401528091505092915050565b60208082528251805183830152810151604083015260009060a0830181850151606063ffffffff808316828801526040925082880151608080818a015285825180885260c08b0191508884019750600093505b8084101561418f578751805160ff90811684528a82015181168b85015288820151168884015286015185168683015296880196600193909301929082019061414c565b509a9950505050505050505050565b60006101c061ffff871683528060208401526141bc818401876128fd565b85518051604086015260200151606085015291506141d79050565b60208401516141e96080840182612c35565b5060408401516141fd610100840182612c35565b506060939093015163ffffffff908116610180830152919091166101a09091015292915050565b6000826142335761423361366a565b500690565b6000821982111561424b5761424b613631565b50019056fe456967656e4441426c6f62566572696669636174696f6e5574696c732e5f7665a2646970667358221220e1c0f35bc5b9ea9dd8e25ba5629ff8969c6b767cf69a33c66dd8e7f58d8ba69664736f6c634300080c0033", } // ContractEigenDABlobVerifierABI is the input ABI used to generate the binding from. @@ -881,9 +882,9 @@ func (_ContractEigenDABlobVerifier *ContractEigenDABlobVerifierCallerSession) Ve return _ContractEigenDABlobVerifier.Contract.VerifyBlobV1(&_ContractEigenDABlobVerifier.CallOpts, blobHeader, blobVerificationProof) } -// VerifyBlobV2 is a free data retrieval call binding the contract method 0xfa00e5bd. +// VerifyBlobV2 is a free data retrieval call binding the contract method 0x5c01da73. // -// Solidity: function verifyBlobV2((bytes32,uint32) batchHeader, (((uint16,bytes,((uint256,uint256),(uint256[2],uint256[2]),(uint256[2],uint256[2]),uint32),uint32,bytes32),uint32[]),uint32,bytes) blobVerificationProof, (uint32[],(uint256,uint256)[],(uint256,uint256)[],(uint256[2],uint256[2]),(uint256,uint256),uint32[],uint32[],uint32[][]) nonSignerStakesAndSignature) view returns() +// Solidity: function verifyBlobV2((bytes32,uint32) batchHeader, (((uint16,bytes,((uint256,uint256),(uint256[2],uint256[2]),(uint256[2],uint256[2]),uint32),uint32,bytes32),bytes,uint32[]),uint32,bytes) blobVerificationProof, (uint32[],(uint256,uint256)[],(uint256,uint256)[],(uint256[2],uint256[2]),(uint256,uint256),uint32[],uint32[],uint32[][]) nonSignerStakesAndSignature) view returns() func (_ContractEigenDABlobVerifier *ContractEigenDABlobVerifierCaller) VerifyBlobV2(opts *bind.CallOpts, batchHeader BatchHeaderV2, blobVerificationProof BlobVerificationProofV2, nonSignerStakesAndSignature NonSignerStakesAndSignature) error { var out []interface{} err := _ContractEigenDABlobVerifier.contract.Call(opts, &out, "verifyBlobV2", batchHeader, blobVerificationProof, nonSignerStakesAndSignature) @@ -896,23 +897,23 @@ func (_ContractEigenDABlobVerifier *ContractEigenDABlobVerifierCaller) VerifyBlo } -// VerifyBlobV2 is a free data retrieval call binding the contract method 0xfa00e5bd. +// VerifyBlobV2 is a free data retrieval call binding the contract method 0x5c01da73. // -// Solidity: function verifyBlobV2((bytes32,uint32) batchHeader, (((uint16,bytes,((uint256,uint256),(uint256[2],uint256[2]),(uint256[2],uint256[2]),uint32),uint32,bytes32),uint32[]),uint32,bytes) blobVerificationProof, (uint32[],(uint256,uint256)[],(uint256,uint256)[],(uint256[2],uint256[2]),(uint256,uint256),uint32[],uint32[],uint32[][]) nonSignerStakesAndSignature) view returns() +// Solidity: function verifyBlobV2((bytes32,uint32) batchHeader, (((uint16,bytes,((uint256,uint256),(uint256[2],uint256[2]),(uint256[2],uint256[2]),uint32),uint32,bytes32),bytes,uint32[]),uint32,bytes) blobVerificationProof, (uint32[],(uint256,uint256)[],(uint256,uint256)[],(uint256[2],uint256[2]),(uint256,uint256),uint32[],uint32[],uint32[][]) nonSignerStakesAndSignature) view returns() func (_ContractEigenDABlobVerifier *ContractEigenDABlobVerifierSession) VerifyBlobV2(batchHeader BatchHeaderV2, blobVerificationProof BlobVerificationProofV2, nonSignerStakesAndSignature NonSignerStakesAndSignature) error { return _ContractEigenDABlobVerifier.Contract.VerifyBlobV2(&_ContractEigenDABlobVerifier.CallOpts, batchHeader, blobVerificationProof, nonSignerStakesAndSignature) } -// VerifyBlobV2 is a free data retrieval call binding the contract method 0xfa00e5bd. +// VerifyBlobV2 is a free data retrieval call binding the contract method 0x5c01da73. // -// Solidity: function verifyBlobV2((bytes32,uint32) batchHeader, (((uint16,bytes,((uint256,uint256),(uint256[2],uint256[2]),(uint256[2],uint256[2]),uint32),uint32,bytes32),uint32[]),uint32,bytes) blobVerificationProof, (uint32[],(uint256,uint256)[],(uint256,uint256)[],(uint256[2],uint256[2]),(uint256,uint256),uint32[],uint32[],uint32[][]) nonSignerStakesAndSignature) view returns() +// Solidity: function verifyBlobV2((bytes32,uint32) batchHeader, (((uint16,bytes,((uint256,uint256),(uint256[2],uint256[2]),(uint256[2],uint256[2]),uint32),uint32,bytes32),bytes,uint32[]),uint32,bytes) blobVerificationProof, (uint32[],(uint256,uint256)[],(uint256,uint256)[],(uint256[2],uint256[2]),(uint256,uint256),uint32[],uint32[],uint32[][]) nonSignerStakesAndSignature) view returns() func (_ContractEigenDABlobVerifier *ContractEigenDABlobVerifierCallerSession) VerifyBlobV2(batchHeader BatchHeaderV2, blobVerificationProof BlobVerificationProofV2, nonSignerStakesAndSignature NonSignerStakesAndSignature) error { return _ContractEigenDABlobVerifier.Contract.VerifyBlobV2(&_ContractEigenDABlobVerifier.CallOpts, batchHeader, blobVerificationProof, nonSignerStakesAndSignature) } -// VerifyBlobV2FromSignedBatch is a free data retrieval call binding the contract method 0x6179f7d9. +// VerifyBlobV2FromSignedBatch is a free data retrieval call binding the contract method 0xb64feb4b. // -// Solidity: function verifyBlobV2FromSignedBatch(((bytes32,uint32),((uint256,uint256)[],(uint256,uint256)[],(uint256,uint256),(uint256[2],uint256[2]),uint32[])) signedBatch, (((uint16,bytes,((uint256,uint256),(uint256[2],uint256[2]),(uint256[2],uint256[2]),uint32),uint32,bytes32),uint32[]),uint32,bytes) blobVerificationProof) view returns() +// Solidity: function verifyBlobV2FromSignedBatch(((bytes32,uint32),((uint256,uint256)[],(uint256,uint256)[],(uint256,uint256),(uint256[2],uint256[2]),uint32[])) signedBatch, (((uint16,bytes,((uint256,uint256),(uint256[2],uint256[2]),(uint256[2],uint256[2]),uint32),uint32,bytes32),bytes,uint32[]),uint32,bytes) blobVerificationProof) view returns() func (_ContractEigenDABlobVerifier *ContractEigenDABlobVerifierCaller) VerifyBlobV2FromSignedBatch(opts *bind.CallOpts, signedBatch SignedBatch, blobVerificationProof BlobVerificationProofV2) error { var out []interface{} err := _ContractEigenDABlobVerifier.contract.Call(opts, &out, "verifyBlobV2FromSignedBatch", signedBatch, blobVerificationProof) @@ -925,16 +926,16 @@ func (_ContractEigenDABlobVerifier *ContractEigenDABlobVerifierCaller) VerifyBlo } -// VerifyBlobV2FromSignedBatch is a free data retrieval call binding the contract method 0x6179f7d9. +// VerifyBlobV2FromSignedBatch is a free data retrieval call binding the contract method 0xb64feb4b. // -// Solidity: function verifyBlobV2FromSignedBatch(((bytes32,uint32),((uint256,uint256)[],(uint256,uint256)[],(uint256,uint256),(uint256[2],uint256[2]),uint32[])) signedBatch, (((uint16,bytes,((uint256,uint256),(uint256[2],uint256[2]),(uint256[2],uint256[2]),uint32),uint32,bytes32),uint32[]),uint32,bytes) blobVerificationProof) view returns() +// Solidity: function verifyBlobV2FromSignedBatch(((bytes32,uint32),((uint256,uint256)[],(uint256,uint256)[],(uint256,uint256),(uint256[2],uint256[2]),uint32[])) signedBatch, (((uint16,bytes,((uint256,uint256),(uint256[2],uint256[2]),(uint256[2],uint256[2]),uint32),uint32,bytes32),bytes,uint32[]),uint32,bytes) blobVerificationProof) view returns() func (_ContractEigenDABlobVerifier *ContractEigenDABlobVerifierSession) VerifyBlobV2FromSignedBatch(signedBatch SignedBatch, blobVerificationProof BlobVerificationProofV2) error { return _ContractEigenDABlobVerifier.Contract.VerifyBlobV2FromSignedBatch(&_ContractEigenDABlobVerifier.CallOpts, signedBatch, blobVerificationProof) } -// VerifyBlobV2FromSignedBatch is a free data retrieval call binding the contract method 0x6179f7d9. +// VerifyBlobV2FromSignedBatch is a free data retrieval call binding the contract method 0xb64feb4b. // -// Solidity: function verifyBlobV2FromSignedBatch(((bytes32,uint32),((uint256,uint256)[],(uint256,uint256)[],(uint256,uint256),(uint256[2],uint256[2]),uint32[])) signedBatch, (((uint16,bytes,((uint256,uint256),(uint256[2],uint256[2]),(uint256[2],uint256[2]),uint32),uint32,bytes32),uint32[]),uint32,bytes) blobVerificationProof) view returns() +// Solidity: function verifyBlobV2FromSignedBatch(((bytes32,uint32),((uint256,uint256)[],(uint256,uint256)[],(uint256,uint256),(uint256[2],uint256[2]),uint32[])) signedBatch, (((uint16,bytes,((uint256,uint256),(uint256[2],uint256[2]),(uint256[2],uint256[2]),uint32),uint32,bytes32),bytes,uint32[]),uint32,bytes) blobVerificationProof) view returns() func (_ContractEigenDABlobVerifier *ContractEigenDABlobVerifierCallerSession) VerifyBlobV2FromSignedBatch(signedBatch SignedBatch, blobVerificationProof BlobVerificationProofV2) error { return _ContractEigenDABlobVerifier.Contract.VerifyBlobV2FromSignedBatch(&_ContractEigenDABlobVerifier.CallOpts, signedBatch, blobVerificationProof) } diff --git a/contracts/bindings/EigenDABlobVerifier/conversion_utils.go b/contracts/bindings/EigenDABlobVerifier/conversion_utils.go index ff955af40f..7acd8d5dd3 100644 --- a/contracts/bindings/EigenDABlobVerifier/conversion_utils.go +++ b/contracts/bindings/EigenDABlobVerifier/conversion_utils.go @@ -88,8 +88,8 @@ func convertAttestation(inputAttestation *disperserv2.Attestation) (*Attestation return convertedAttestation, nil } -func ConvertVerificationProof(inputVerificationInfo *disperserv2.BlobVerificationInfo) (*BlobVerificationProofV2, error) { - convertedBlobCertificate, err := convertBlobCertificate(inputVerificationInfo.GetBlobCertificate()) +func ConvertVerificationProof(inputInclusionInfo *disperserv2.BlobInclusionInfo) (*BlobVerificationProofV2, error) { + convertedBlobCertificate, err := convertBlobCertificate(inputInclusionInfo.GetBlobCertificate()) if err != nil { return nil, fmt.Errorf("convert blob certificate: %s", err) @@ -97,8 +97,8 @@ func ConvertVerificationProof(inputVerificationInfo *disperserv2.BlobVerificatio return &BlobVerificationProofV2{ BlobCertificate: *convertedBlobCertificate, - BlobIndex: inputVerificationInfo.GetBlobIndex(), - InclusionProof: inputVerificationInfo.GetInclusionProof(), + BlobIndex: inputInclusionInfo.GetBlobIndex(), + InclusionProof: inputInclusionInfo.GetInclusionProof(), }, nil } @@ -110,7 +110,8 @@ func convertBlobCertificate(inputCertificate *commonv2.BlobCertificate) (*BlobCe return &BlobCertificate{ BlobHeader: *convertedBlobHeader, - RelayKeys: inputCertificate.GetRelays(), + Signature: inputCertificate.GetSignature(), + RelayKeys: inputCertificate.GetRelayKeys(), }, nil } diff --git a/contracts/bindings/EigenDADisperserRegistry/binding.go b/contracts/bindings/EigenDADisperserRegistry/binding.go index 5cd485e853..ff84d0c1f7 100644 --- a/contracts/bindings/EigenDADisperserRegistry/binding.go +++ b/contracts/bindings/EigenDADisperserRegistry/binding.go @@ -37,7 +37,7 @@ type DisperserInfo struct { // ContractEigenDADisperserRegistryMetaData contains all meta data concerning the ContractEigenDADisperserRegistry contract. var ContractEigenDADisperserRegistryMetaData = &bind.MetaData{ ABI: "[{\"type\":\"constructor\",\"inputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"disperserKeyToAddress\",\"inputs\":[{\"name\":\"_key\",\"type\":\"uint32\",\"internalType\":\"uint32\"}],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"disperserKeyToInfo\",\"inputs\":[{\"name\":\"\",\"type\":\"uint32\",\"internalType\":\"uint32\"}],\"outputs\":[{\"name\":\"disperserAddress\",\"type\":\"address\",\"internalType\":\"address\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"initialize\",\"inputs\":[{\"name\":\"_initialOwner\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"owner\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"renounceOwnership\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"setDisperserInfo\",\"inputs\":[{\"name\":\"_disperserKey\",\"type\":\"uint32\",\"internalType\":\"uint32\"},{\"name\":\"_disperserInfo\",\"type\":\"tuple\",\"internalType\":\"structDisperserInfo\",\"components\":[{\"name\":\"disperserAddress\",\"type\":\"address\",\"internalType\":\"address\"}]}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"transferOwnership\",\"inputs\":[{\"name\":\"newOwner\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"event\",\"name\":\"DisperserAdded\",\"inputs\":[{\"name\":\"key\",\"type\":\"uint32\",\"indexed\":true,\"internalType\":\"uint32\"},{\"name\":\"disperser\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"Initialized\",\"inputs\":[{\"name\":\"version\",\"type\":\"uint8\",\"indexed\":false,\"internalType\":\"uint8\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"OwnershipTransferred\",\"inputs\":[{\"name\":\"previousOwner\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"newOwner\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"}],\"anonymous\":false}]", - Bin: "0x608060405234801561001057600080fd5b5061001961001e565b6100de565b600054610100900460ff161561008a5760405162461bcd60e51b815260206004820152602760248201527f496e697469616c697a61626c653a20636f6e747261637420697320696e697469604482015266616c697a696e6760c81b606482015260840160405180910390fd5b60005460ff90811610156100dc576000805460ff191660ff9081179091556040519081527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b565b610526806100ed6000396000f3fe608060405234801561001057600080fd5b506004361061007d5760003560e01c80638da5cb5b1161005b5780638da5cb5b146101005780639a0f62a014610111578063c4d66de814610124578063f2fde38b1461013757600080fd5b806307d69fad146100825780631e0bf73c146100cd578063715018a6146100f6575b600080fd5b6100b161009036600461041d565b63ffffffff166000908152606560205260409020546001600160a01b031690565b6040516001600160a01b03909116815260200160405180910390f35b6100b16100db36600461041d565b6065602052600090815260409020546001600160a01b031681565b6100fe61014a565b005b6033546001600160a01b03166100b1565b6100fe61011f366004610456565b61015e565b6100fe6101323660046104d5565b6101c7565b6100fe6101453660046104d5565b6102df565b610152610358565b61015c60006103b2565b565b610166610358565b63ffffffff8216600081815260656020526040808220845181546001600160a01b0319166001600160a01b0390911690811790915590519092917f97fb4432fef273711f9ccc876095cf8e22b00f159658bbd807a8ea80a4c3c85991a35050565b600054610100900460ff16158080156101e75750600054600160ff909116105b806102015750303b158015610201575060005460ff166001145b6102695760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b60648201526084015b60405180910390fd5b6000805460ff19166001179055801561028c576000805461ff0019166101001790555b610295826103b2565b80156102db576000805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b5050565b6102e7610358565b6001600160a01b03811661034c5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610260565b610355816103b2565b50565b6033546001600160a01b0316331461015c5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610260565b603380546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b803563ffffffff8116811461041857600080fd5b919050565b60006020828403121561042f57600080fd5b61043882610404565b9392505050565b80356001600160a01b038116811461041857600080fd5b600080828403604081121561046a57600080fd5b61047384610404565b92506020601f198201121561048757600080fd5b506040516020810181811067ffffffffffffffff821117156104b957634e487b7160e01b600052604160045260246000fd5b6040526104c86020850161043f565b8152809150509250929050565b6000602082840312156104e757600080fd5b6104388261043f56fea264697066735822122027c94ca590dd4b26cbc9e18ccb14aa31121402021219ef769d0d5e9a2a4601d964736f6c634300080c0033", + Bin: "0x608060405234801561001057600080fd5b5061001961001e565b6100de565b600054610100900460ff161561008a5760405162461bcd60e51b815260206004820152602760248201527f496e697469616c697a61626c653a20636f6e747261637420697320696e697469604482015266616c697a696e6760c81b606482015260840160405180910390fd5b60005460ff90811610156100dc576000805460ff191660ff9081179091556040519081527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b565b610526806100ed6000396000f3fe608060405234801561001057600080fd5b506004361061007d5760003560e01c80638da5cb5b1161005b5780638da5cb5b146101005780639a0f62a014610111578063c4d66de814610124578063f2fde38b1461013757600080fd5b806307d69fad146100825780631e0bf73c146100cd578063715018a6146100f6575b600080fd5b6100b161009036600461041d565b63ffffffff166000908152606560205260409020546001600160a01b031690565b6040516001600160a01b03909116815260200160405180910390f35b6100b16100db36600461041d565b6065602052600090815260409020546001600160a01b031681565b6100fe61014a565b005b6033546001600160a01b03166100b1565b6100fe61011f366004610456565b61015e565b6100fe6101323660046104d5565b6101c7565b6100fe6101453660046104d5565b6102df565b610152610358565b61015c60006103b2565b565b610166610358565b63ffffffff8216600081815260656020526040808220845181546001600160a01b0319166001600160a01b0390911690811790915590519092917f97fb4432fef273711f9ccc876095cf8e22b00f159658bbd807a8ea80a4c3c85991a35050565b600054610100900460ff16158080156101e75750600054600160ff909116105b806102015750303b158015610201575060005460ff166001145b6102695760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b60648201526084015b60405180910390fd5b6000805460ff19166001179055801561028c576000805461ff0019166101001790555b610295826103b2565b80156102db576000805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b5050565b6102e7610358565b6001600160a01b03811661034c5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610260565b610355816103b2565b50565b6033546001600160a01b0316331461015c5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610260565b603380546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b803563ffffffff8116811461041857600080fd5b919050565b60006020828403121561042f57600080fd5b61043882610404565b9392505050565b80356001600160a01b038116811461041857600080fd5b600080828403604081121561046a57600080fd5b61047384610404565b92506020601f198201121561048757600080fd5b506040516020810181811067ffffffffffffffff821117156104b957634e487b7160e01b600052604160045260246000fd5b6040526104c86020850161043f565b8152809150509250929050565b6000602082840312156104e757600080fd5b6104388261043f56fea2646970667358221220623e7490b0217b51c47e6fe6f68f74c206e50fdc345e475d468bfde5bba7f2a264736f6c634300080c0033", } // ContractEigenDADisperserRegistryABI is the input ABI used to generate the binding from. diff --git a/contracts/bindings/EigenDARelayRegistry/binding.go b/contracts/bindings/EigenDARelayRegistry/binding.go index 5ca11cec17..e68700f724 100644 --- a/contracts/bindings/EigenDARelayRegistry/binding.go +++ b/contracts/bindings/EigenDARelayRegistry/binding.go @@ -38,7 +38,7 @@ type RelayInfo struct { // ContractEigenDARelayRegistryMetaData contains all meta data concerning the ContractEigenDARelayRegistry contract. var ContractEigenDARelayRegistryMetaData = &bind.MetaData{ ABI: "[{\"type\":\"constructor\",\"inputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"addRelayInfo\",\"inputs\":[{\"name\":\"relayInfo\",\"type\":\"tuple\",\"internalType\":\"structRelayInfo\",\"components\":[{\"name\":\"relayAddress\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"relayURL\",\"type\":\"string\",\"internalType\":\"string\"}]}],\"outputs\":[{\"name\":\"\",\"type\":\"uint32\",\"internalType\":\"uint32\"}],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"initialize\",\"inputs\":[{\"name\":\"_initialOwner\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"nextRelayKey\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"uint32\",\"internalType\":\"uint32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"owner\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"relayKeyToAddress\",\"inputs\":[{\"name\":\"key\",\"type\":\"uint32\",\"internalType\":\"uint32\"}],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"relayKeyToInfo\",\"inputs\":[{\"name\":\"\",\"type\":\"uint32\",\"internalType\":\"uint32\"}],\"outputs\":[{\"name\":\"relayAddress\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"relayURL\",\"type\":\"string\",\"internalType\":\"string\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"relayKeyToUrl\",\"inputs\":[{\"name\":\"key\",\"type\":\"uint32\",\"internalType\":\"uint32\"}],\"outputs\":[{\"name\":\"\",\"type\":\"string\",\"internalType\":\"string\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"renounceOwnership\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"transferOwnership\",\"inputs\":[{\"name\":\"newOwner\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"event\",\"name\":\"Initialized\",\"inputs\":[{\"name\":\"version\",\"type\":\"uint8\",\"indexed\":false,\"internalType\":\"uint8\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"OwnershipTransferred\",\"inputs\":[{\"name\":\"previousOwner\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"newOwner\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"RelayAdded\",\"inputs\":[{\"name\":\"relay\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"key\",\"type\":\"uint32\",\"indexed\":true,\"internalType\":\"uint32\"},{\"name\":\"relayURL\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"}],\"anonymous\":false}]", - Bin: "0x608060405234801561001057600080fd5b5061001961001e565b6100de565b600054610100900460ff161561008a5760405162461bcd60e51b815260206004820152602760248201527f496e697469616c697a61626c653a20636f6e747261637420697320696e697469604482015266616c697a696e6760c81b606482015260840160405180910390fd5b60005460ff90811610156100dc576000805460ff191660ff9081179091556040519081527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b565b610998806100ed6000396000f3fe608060405234801561001057600080fd5b50600436106100935760003560e01c8063841f6a2e11610066578063841f6a2e146100ff5780638da5cb5b14610120578063b5a872da14610145578063c4d66de814610174578063f2fde38b1461018757600080fd5b806315ddaa5d146100985780632fc35013146100c2578063631eabb8146100d5578063715018a6146100f5575b600080fd5b6066546100a89063ffffffff1681565b60405163ffffffff90911681526020015b60405180910390f35b6100a86100d0366004610753565b61019a565b6100e86100e3366004610821565b610287565b6040516100b9919061089b565b6100fd610333565b005b61011261010d366004610821565b610347565b6040516100b99291906108ae565b6033546001600160a01b03165b6040516001600160a01b0390911681526020016100b9565b61012d610153366004610821565b63ffffffff166000908152606560205260409020546001600160a01b031690565b6100fd6101823660046108da565b6103f6565b6100fd6101953660046108da565b61050e565b60006101a4610587565b60665463ffffffff166000908152606560209081526040909120835181546001600160a01b0319166001600160a01b0390911617815583820151805185936101f3926001850192910190610633565b50506066548351602085015160405163ffffffff90931693506001600160a01b03909116917f01c289e409d41a712a615bf286126433da55c193bbe64fc8e77af5f1ff13db99916102439161089b565b60405180910390a36066805463ffffffff16906000610261836108f5565b91906101000a81548163ffffffff021916908363ffffffff16021790555090505b919050565b63ffffffff811660009081526065602052604090206001018054606091906102ae90610927565b80601f01602080910402602001604051908101604052809291908181526020018280546102da90610927565b80156103275780601f106102fc57610100808354040283529160200191610327565b820191906000526020600020905b81548152906001019060200180831161030a57829003601f168201915b50505050509050919050565b61033b610587565b61034560006105e1565b565b606560205260009081526040902080546001820180546001600160a01b03909216929161037390610927565b80601f016020809104026020016040519081016040528092919081815260200182805461039f90610927565b80156103ec5780601f106103c1576101008083540402835291602001916103ec565b820191906000526020600020905b8154815290600101906020018083116103cf57829003601f168201915b5050505050905082565b600054610100900460ff16158080156104165750600054600160ff909116105b806104305750303b158015610430575060005460ff166001145b6104985760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b60648201526084015b60405180910390fd5b6000805460ff1916600117905580156104bb576000805461ff0019166101001790555b6104c4826105e1565b801561050a576000805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b5050565b610516610587565b6001600160a01b03811661057b5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b606482015260840161048f565b610584816105e1565b50565b6033546001600160a01b031633146103455760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640161048f565b603380546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b82805461063f90610927565b90600052602060002090601f01602090048101928261066157600085556106a7565b82601f1061067a57805160ff19168380011785556106a7565b828001600101855582156106a7579182015b828111156106a757825182559160200191906001019061068c565b506106b39291506106b7565b5090565b5b808211156106b357600081556001016106b8565b634e487b7160e01b600052604160045260246000fd5b6040805190810167ffffffffffffffff81118282101715610705576107056106cc565b60405290565b604051601f8201601f1916810167ffffffffffffffff81118282101715610734576107346106cc565b604052919050565b80356001600160a01b038116811461028257600080fd5b6000602080838503121561076657600080fd5b823567ffffffffffffffff8082111561077e57600080fd5b908401906040828703121561079257600080fd5b61079a6106e2565b6107a38361073c565b815283830135828111156107b657600080fd5b80840193505086601f8401126107cb57600080fd5b8235828111156107dd576107dd6106cc565b6107ef601f8201601f1916860161070b565b9250808352878582860101111561080557600080fd5b8085850186850137600090830185015292830152509392505050565b60006020828403121561083357600080fd5b813563ffffffff8116811461084757600080fd5b9392505050565b6000815180845260005b8181101561087457602081850181015186830182015201610858565b81811115610886576000602083870101525b50601f01601f19169290920160200192915050565b602081526000610847602083018461084e565b6001600160a01b03831681526040602082018190526000906108d29083018461084e565b949350505050565b6000602082840312156108ec57600080fd5b6108478261073c565b600063ffffffff8083168181141561091d57634e487b7160e01b600052601160045260246000fd5b6001019392505050565b600181811c9082168061093b57607f821691505b6020821081141561095c57634e487b7160e01b600052602260045260246000fd5b5091905056fea2646970667358221220d00da6035f9a2a10475fb4241cf68859dc6a9b11b1088f47226f8573f99f4abf64736f6c634300080c0033", + Bin: "0x608060405234801561001057600080fd5b5061001961001e565b6100de565b600054610100900460ff161561008a5760405162461bcd60e51b815260206004820152602760248201527f496e697469616c697a61626c653a20636f6e747261637420697320696e697469604482015266616c697a696e6760c81b606482015260840160405180910390fd5b60005460ff90811610156100dc576000805460ff191660ff9081179091556040519081527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b565b610998806100ed6000396000f3fe608060405234801561001057600080fd5b50600436106100935760003560e01c8063841f6a2e11610066578063841f6a2e146100ff5780638da5cb5b14610120578063b5a872da14610145578063c4d66de814610174578063f2fde38b1461018757600080fd5b806315ddaa5d146100985780632fc35013146100c2578063631eabb8146100d5578063715018a6146100f5575b600080fd5b6066546100a89063ffffffff1681565b60405163ffffffff90911681526020015b60405180910390f35b6100a86100d0366004610753565b61019a565b6100e86100e3366004610821565b610287565b6040516100b9919061089b565b6100fd610333565b005b61011261010d366004610821565b610347565b6040516100b99291906108ae565b6033546001600160a01b03165b6040516001600160a01b0390911681526020016100b9565b61012d610153366004610821565b63ffffffff166000908152606560205260409020546001600160a01b031690565b6100fd6101823660046108da565b6103f6565b6100fd6101953660046108da565b61050e565b60006101a4610587565b60665463ffffffff166000908152606560209081526040909120835181546001600160a01b0319166001600160a01b0390911617815583820151805185936101f3926001850192910190610633565b50506066548351602085015160405163ffffffff90931693506001600160a01b03909116917f01c289e409d41a712a615bf286126433da55c193bbe64fc8e77af5f1ff13db99916102439161089b565b60405180910390a36066805463ffffffff16906000610261836108f5565b91906101000a81548163ffffffff021916908363ffffffff16021790555090505b919050565b63ffffffff811660009081526065602052604090206001018054606091906102ae90610927565b80601f01602080910402602001604051908101604052809291908181526020018280546102da90610927565b80156103275780601f106102fc57610100808354040283529160200191610327565b820191906000526020600020905b81548152906001019060200180831161030a57829003601f168201915b50505050509050919050565b61033b610587565b61034560006105e1565b565b606560205260009081526040902080546001820180546001600160a01b03909216929161037390610927565b80601f016020809104026020016040519081016040528092919081815260200182805461039f90610927565b80156103ec5780601f106103c1576101008083540402835291602001916103ec565b820191906000526020600020905b8154815290600101906020018083116103cf57829003601f168201915b5050505050905082565b600054610100900460ff16158080156104165750600054600160ff909116105b806104305750303b158015610430575060005460ff166001145b6104985760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b60648201526084015b60405180910390fd5b6000805460ff1916600117905580156104bb576000805461ff0019166101001790555b6104c4826105e1565b801561050a576000805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b5050565b610516610587565b6001600160a01b03811661057b5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b606482015260840161048f565b610584816105e1565b50565b6033546001600160a01b031633146103455760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640161048f565b603380546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b82805461063f90610927565b90600052602060002090601f01602090048101928261066157600085556106a7565b82601f1061067a57805160ff19168380011785556106a7565b828001600101855582156106a7579182015b828111156106a757825182559160200191906001019061068c565b506106b39291506106b7565b5090565b5b808211156106b357600081556001016106b8565b634e487b7160e01b600052604160045260246000fd5b6040805190810167ffffffffffffffff81118282101715610705576107056106cc565b60405290565b604051601f8201601f1916810167ffffffffffffffff81118282101715610734576107346106cc565b604052919050565b80356001600160a01b038116811461028257600080fd5b6000602080838503121561076657600080fd5b823567ffffffffffffffff8082111561077e57600080fd5b908401906040828703121561079257600080fd5b61079a6106e2565b6107a38361073c565b815283830135828111156107b657600080fd5b80840193505086601f8401126107cb57600080fd5b8235828111156107dd576107dd6106cc565b6107ef601f8201601f1916860161070b565b9250808352878582860101111561080557600080fd5b8085850186850137600090830185015292830152509392505050565b60006020828403121561083357600080fd5b813563ffffffff8116811461084757600080fd5b9392505050565b6000815180845260005b8181101561087457602081850181015186830182015201610858565b81811115610886576000602083870101525b50601f01601f19169290920160200192915050565b602081526000610847602083018461084e565b6001600160a01b03831681526040602082018190526000906108d29083018461084e565b949350505050565b6000602082840312156108ec57600080fd5b6108478261073c565b600063ffffffff8083168181141561091d57634e487b7160e01b600052601160045260246000fd5b6001019392505050565b600181811c9082168061093b57607f821691505b6020821081141561095c57634e487b7160e01b600052602260045260246000fd5b5091905056fea2646970667358221220cde6a4c96474655ed649d0e048e0c90b2adf4b58a2a568da025ffd9d5028c14064736f6c634300080c0033", } // ContractEigenDARelayRegistryABI is the input ABI used to generate the binding from. diff --git a/contracts/bindings/EigenDAServiceManager/binding.go b/contracts/bindings/EigenDAServiceManager/binding.go index 3d572669c6..d851e4cea4 100644 --- a/contracts/bindings/EigenDAServiceManager/binding.go +++ b/contracts/bindings/EigenDAServiceManager/binding.go @@ -121,7 +121,7 @@ type VersionedBlobParams struct { // ContractEigenDAServiceManagerMetaData contains all meta data concerning the ContractEigenDAServiceManager contract. var ContractEigenDAServiceManagerMetaData = &bind.MetaData{ ABI: "[{\"type\":\"constructor\",\"inputs\":[{\"name\":\"__avsDirectory\",\"type\":\"address\",\"internalType\":\"contractIAVSDirectory\"},{\"name\":\"__rewardsCoordinator\",\"type\":\"address\",\"internalType\":\"contractIRewardsCoordinator\"},{\"name\":\"__registryCoordinator\",\"type\":\"address\",\"internalType\":\"contractIRegistryCoordinator\"},{\"name\":\"__stakeRegistry\",\"type\":\"address\",\"internalType\":\"contractIStakeRegistry\"},{\"name\":\"__eigenDAThresholdRegistry\",\"type\":\"address\",\"internalType\":\"contractIEigenDAThresholdRegistry\"},{\"name\":\"__eigenDARelayRegistry\",\"type\":\"address\",\"internalType\":\"contractIEigenDARelayRegistry\"},{\"name\":\"__paymentVault\",\"type\":\"address\",\"internalType\":\"contractIPaymentVault\"},{\"name\":\"__eigenDADisperserRegistry\",\"type\":\"address\",\"internalType\":\"contractIEigenDADisperserRegistry\"}],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"BLOCK_STALE_MEASURE\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"uint32\",\"internalType\":\"uint32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"STORE_DURATION_BLOCKS\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"uint32\",\"internalType\":\"uint32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"THRESHOLD_DENOMINATOR\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"avsDirectory\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"batchId\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"uint32\",\"internalType\":\"uint32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"batchIdToBatchMetadataHash\",\"inputs\":[{\"name\":\"\",\"type\":\"uint32\",\"internalType\":\"uint32\"}],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"blsApkRegistry\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"contractIBLSApkRegistry\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"checkSignatures\",\"inputs\":[{\"name\":\"msgHash\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"quorumNumbers\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"referenceBlockNumber\",\"type\":\"uint32\",\"internalType\":\"uint32\"},{\"name\":\"params\",\"type\":\"tuple\",\"internalType\":\"structIBLSSignatureChecker.NonSignerStakesAndSignature\",\"components\":[{\"name\":\"nonSignerQuorumBitmapIndices\",\"type\":\"uint32[]\",\"internalType\":\"uint32[]\"},{\"name\":\"nonSignerPubkeys\",\"type\":\"tuple[]\",\"internalType\":\"structBN254.G1Point[]\",\"components\":[{\"name\":\"X\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"Y\",\"type\":\"uint256\",\"internalType\":\"uint256\"}]},{\"name\":\"quorumApks\",\"type\":\"tuple[]\",\"internalType\":\"structBN254.G1Point[]\",\"components\":[{\"name\":\"X\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"Y\",\"type\":\"uint256\",\"internalType\":\"uint256\"}]},{\"name\":\"apkG2\",\"type\":\"tuple\",\"internalType\":\"structBN254.G2Point\",\"components\":[{\"name\":\"X\",\"type\":\"uint256[2]\",\"internalType\":\"uint256[2]\"},{\"name\":\"Y\",\"type\":\"uint256[2]\",\"internalType\":\"uint256[2]\"}]},{\"name\":\"sigma\",\"type\":\"tuple\",\"internalType\":\"structBN254.G1Point\",\"components\":[{\"name\":\"X\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"Y\",\"type\":\"uint256\",\"internalType\":\"uint256\"}]},{\"name\":\"quorumApkIndices\",\"type\":\"uint32[]\",\"internalType\":\"uint32[]\"},{\"name\":\"totalStakeIndices\",\"type\":\"uint32[]\",\"internalType\":\"uint32[]\"},{\"name\":\"nonSignerStakeIndices\",\"type\":\"uint32[][]\",\"internalType\":\"uint32[][]\"}]}],\"outputs\":[{\"name\":\"\",\"type\":\"tuple\",\"internalType\":\"structIBLSSignatureChecker.QuorumStakeTotals\",\"components\":[{\"name\":\"signedStakeForQuorum\",\"type\":\"uint96[]\",\"internalType\":\"uint96[]\"},{\"name\":\"totalStakeForQuorum\",\"type\":\"uint96[]\",\"internalType\":\"uint96[]\"}]},{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"confirmBatch\",\"inputs\":[{\"name\":\"batchHeader\",\"type\":\"tuple\",\"internalType\":\"structBatchHeader\",\"components\":[{\"name\":\"blobHeadersRoot\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"quorumNumbers\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"signedStakeForQuorums\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"referenceBlockNumber\",\"type\":\"uint32\",\"internalType\":\"uint32\"}]},{\"name\":\"nonSignerStakesAndSignature\",\"type\":\"tuple\",\"internalType\":\"structIBLSSignatureChecker.NonSignerStakesAndSignature\",\"components\":[{\"name\":\"nonSignerQuorumBitmapIndices\",\"type\":\"uint32[]\",\"internalType\":\"uint32[]\"},{\"name\":\"nonSignerPubkeys\",\"type\":\"tuple[]\",\"internalType\":\"structBN254.G1Point[]\",\"components\":[{\"name\":\"X\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"Y\",\"type\":\"uint256\",\"internalType\":\"uint256\"}]},{\"name\":\"quorumApks\",\"type\":\"tuple[]\",\"internalType\":\"structBN254.G1Point[]\",\"components\":[{\"name\":\"X\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"Y\",\"type\":\"uint256\",\"internalType\":\"uint256\"}]},{\"name\":\"apkG2\",\"type\":\"tuple\",\"internalType\":\"structBN254.G2Point\",\"components\":[{\"name\":\"X\",\"type\":\"uint256[2]\",\"internalType\":\"uint256[2]\"},{\"name\":\"Y\",\"type\":\"uint256[2]\",\"internalType\":\"uint256[2]\"}]},{\"name\":\"sigma\",\"type\":\"tuple\",\"internalType\":\"structBN254.G1Point\",\"components\":[{\"name\":\"X\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"Y\",\"type\":\"uint256\",\"internalType\":\"uint256\"}]},{\"name\":\"quorumApkIndices\",\"type\":\"uint32[]\",\"internalType\":\"uint32[]\"},{\"name\":\"totalStakeIndices\",\"type\":\"uint32[]\",\"internalType\":\"uint32[]\"},{\"name\":\"nonSignerStakeIndices\",\"type\":\"uint32[][]\",\"internalType\":\"uint32[][]\"}]}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"createAVSRewardsSubmission\",\"inputs\":[{\"name\":\"rewardsSubmissions\",\"type\":\"tuple[]\",\"internalType\":\"structIRewardsCoordinator.RewardsSubmission[]\",\"components\":[{\"name\":\"strategiesAndMultipliers\",\"type\":\"tuple[]\",\"internalType\":\"structIRewardsCoordinator.StrategyAndMultiplier[]\",\"components\":[{\"name\":\"strategy\",\"type\":\"address\",\"internalType\":\"contractIStrategy\"},{\"name\":\"multiplier\",\"type\":\"uint96\",\"internalType\":\"uint96\"}]},{\"name\":\"token\",\"type\":\"address\",\"internalType\":\"contractIERC20\"},{\"name\":\"amount\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"startTimestamp\",\"type\":\"uint32\",\"internalType\":\"uint32\"},{\"name\":\"duration\",\"type\":\"uint32\",\"internalType\":\"uint32\"}]}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"createOperatorDirectedAVSRewardsSubmission\",\"inputs\":[{\"name\":\"operatorDirectedRewardsSubmissions\",\"type\":\"tuple[]\",\"internalType\":\"structIRewardsCoordinator.OperatorDirectedRewardsSubmission[]\",\"components\":[{\"name\":\"strategiesAndMultipliers\",\"type\":\"tuple[]\",\"internalType\":\"structIRewardsCoordinator.StrategyAndMultiplier[]\",\"components\":[{\"name\":\"strategy\",\"type\":\"address\",\"internalType\":\"contractIStrategy\"},{\"name\":\"multiplier\",\"type\":\"uint96\",\"internalType\":\"uint96\"}]},{\"name\":\"token\",\"type\":\"address\",\"internalType\":\"contractIERC20\"},{\"name\":\"operatorRewards\",\"type\":\"tuple[]\",\"internalType\":\"structIRewardsCoordinator.OperatorReward[]\",\"components\":[{\"name\":\"operator\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"internalType\":\"uint256\"}]},{\"name\":\"startTimestamp\",\"type\":\"uint32\",\"internalType\":\"uint32\"},{\"name\":\"duration\",\"type\":\"uint32\",\"internalType\":\"uint32\"},{\"name\":\"description\",\"type\":\"string\",\"internalType\":\"string\"}]}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"delegation\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"contractIDelegationManager\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"deregisterOperatorFromAVS\",\"inputs\":[{\"name\":\"operator\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"eigenDADisperserRegistry\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"contractIEigenDADisperserRegistry\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"eigenDARelayRegistry\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"contractIEigenDARelayRegistry\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"eigenDAThresholdRegistry\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"contractIEigenDAThresholdRegistry\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"getBlobParams\",\"inputs\":[{\"name\":\"version\",\"type\":\"uint16\",\"internalType\":\"uint16\"}],\"outputs\":[{\"name\":\"\",\"type\":\"tuple\",\"internalType\":\"structVersionedBlobParams\",\"components\":[{\"name\":\"maxNumOperators\",\"type\":\"uint32\",\"internalType\":\"uint32\"},{\"name\":\"numChunks\",\"type\":\"uint32\",\"internalType\":\"uint32\"},{\"name\":\"codingRate\",\"type\":\"uint8\",\"internalType\":\"uint8\"}]}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"getDefaultSecurityThresholdsV2\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"tuple\",\"internalType\":\"structSecurityThresholds\",\"components\":[{\"name\":\"confirmationThreshold\",\"type\":\"uint8\",\"internalType\":\"uint8\"},{\"name\":\"adversaryThreshold\",\"type\":\"uint8\",\"internalType\":\"uint8\"}]}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"getIsQuorumRequired\",\"inputs\":[{\"name\":\"quorumNumber\",\"type\":\"uint8\",\"internalType\":\"uint8\"}],\"outputs\":[{\"name\":\"\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"getOperatorRestakedStrategies\",\"inputs\":[{\"name\":\"operator\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[{\"name\":\"\",\"type\":\"address[]\",\"internalType\":\"address[]\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"getQuorumAdversaryThresholdPercentage\",\"inputs\":[{\"name\":\"quorumNumber\",\"type\":\"uint8\",\"internalType\":\"uint8\"}],\"outputs\":[{\"name\":\"\",\"type\":\"uint8\",\"internalType\":\"uint8\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"getQuorumConfirmationThresholdPercentage\",\"inputs\":[{\"name\":\"quorumNumber\",\"type\":\"uint8\",\"internalType\":\"uint8\"}],\"outputs\":[{\"name\":\"\",\"type\":\"uint8\",\"internalType\":\"uint8\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"getRestakeableStrategies\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address[]\",\"internalType\":\"address[]\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"initialize\",\"inputs\":[{\"name\":\"_pauserRegistry\",\"type\":\"address\",\"internalType\":\"contractIPauserRegistry\"},{\"name\":\"_initialPausedStatus\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"_initialOwner\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"_batchConfirmers\",\"type\":\"address[]\",\"internalType\":\"address[]\"},{\"name\":\"_rewardsInitiator\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"isBatchConfirmer\",\"inputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[{\"name\":\"\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"latestServeUntilBlock\",\"inputs\":[{\"name\":\"referenceBlockNumber\",\"type\":\"uint32\",\"internalType\":\"uint32\"}],\"outputs\":[{\"name\":\"\",\"type\":\"uint32\",\"internalType\":\"uint32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"owner\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"pause\",\"inputs\":[{\"name\":\"newPausedStatus\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"pauseAll\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"paused\",\"inputs\":[{\"name\":\"index\",\"type\":\"uint8\",\"internalType\":\"uint8\"}],\"outputs\":[{\"name\":\"\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"paused\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"pauserRegistry\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"contractIPauserRegistry\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"paymentVault\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"contractIPaymentVault\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"quorumAdversaryThresholdPercentages\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bytes\",\"internalType\":\"bytes\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"quorumConfirmationThresholdPercentages\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bytes\",\"internalType\":\"bytes\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"quorumNumbersRequired\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bytes\",\"internalType\":\"bytes\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"registerOperatorToAVS\",\"inputs\":[{\"name\":\"operator\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"operatorSignature\",\"type\":\"tuple\",\"internalType\":\"structISignatureUtils.SignatureWithSaltAndExpiry\",\"components\":[{\"name\":\"signature\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"salt\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"expiry\",\"type\":\"uint256\",\"internalType\":\"uint256\"}]}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"registryCoordinator\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"contractIRegistryCoordinator\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"renounceOwnership\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"rewardsInitiator\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"setBatchConfirmer\",\"inputs\":[{\"name\":\"_batchConfirmer\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"setClaimerFor\",\"inputs\":[{\"name\":\"claimer\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"setPauserRegistry\",\"inputs\":[{\"name\":\"newPauserRegistry\",\"type\":\"address\",\"internalType\":\"contractIPauserRegistry\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"setRewardsInitiator\",\"inputs\":[{\"name\":\"newRewardsInitiator\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"setStaleStakesForbidden\",\"inputs\":[{\"name\":\"value\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"stakeRegistry\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"contractIStakeRegistry\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"staleStakesForbidden\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"taskNumber\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"uint32\",\"internalType\":\"uint32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"transferOwnership\",\"inputs\":[{\"name\":\"newOwner\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"trySignatureAndApkVerification\",\"inputs\":[{\"name\":\"msgHash\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"apk\",\"type\":\"tuple\",\"internalType\":\"structBN254.G1Point\",\"components\":[{\"name\":\"X\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"Y\",\"type\":\"uint256\",\"internalType\":\"uint256\"}]},{\"name\":\"apkG2\",\"type\":\"tuple\",\"internalType\":\"structBN254.G2Point\",\"components\":[{\"name\":\"X\",\"type\":\"uint256[2]\",\"internalType\":\"uint256[2]\"},{\"name\":\"Y\",\"type\":\"uint256[2]\",\"internalType\":\"uint256[2]\"}]},{\"name\":\"sigma\",\"type\":\"tuple\",\"internalType\":\"structBN254.G1Point\",\"components\":[{\"name\":\"X\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"Y\",\"type\":\"uint256\",\"internalType\":\"uint256\"}]}],\"outputs\":[{\"name\":\"pairingSuccessful\",\"type\":\"bool\",\"internalType\":\"bool\"},{\"name\":\"siganatureIsValid\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"unpause\",\"inputs\":[{\"name\":\"newPausedStatus\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"updateAVSMetadataURI\",\"inputs\":[{\"name\":\"_metadataURI\",\"type\":\"string\",\"internalType\":\"string\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"event\",\"name\":\"BatchConfirmed\",\"inputs\":[{\"name\":\"batchHeaderHash\",\"type\":\"bytes32\",\"indexed\":true,\"internalType\":\"bytes32\"},{\"name\":\"batchId\",\"type\":\"uint32\",\"indexed\":false,\"internalType\":\"uint32\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"BatchConfirmerStatusChanged\",\"inputs\":[{\"name\":\"batchConfirmer\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"},{\"name\":\"status\",\"type\":\"bool\",\"indexed\":false,\"internalType\":\"bool\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"DefaultSecurityThresholdsV2Updated\",\"inputs\":[{\"name\":\"previousDefaultSecurityThresholdsV2\",\"type\":\"tuple\",\"indexed\":false,\"internalType\":\"structSecurityThresholds\",\"components\":[{\"name\":\"confirmationThreshold\",\"type\":\"uint8\",\"internalType\":\"uint8\"},{\"name\":\"adversaryThreshold\",\"type\":\"uint8\",\"internalType\":\"uint8\"}]},{\"name\":\"newDefaultSecurityThresholdsV2\",\"type\":\"tuple\",\"indexed\":false,\"internalType\":\"structSecurityThresholds\",\"components\":[{\"name\":\"confirmationThreshold\",\"type\":\"uint8\",\"internalType\":\"uint8\"},{\"name\":\"adversaryThreshold\",\"type\":\"uint8\",\"internalType\":\"uint8\"}]}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"Initialized\",\"inputs\":[{\"name\":\"version\",\"type\":\"uint8\",\"indexed\":false,\"internalType\":\"uint8\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"OwnershipTransferred\",\"inputs\":[{\"name\":\"previousOwner\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"newOwner\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"Paused\",\"inputs\":[{\"name\":\"account\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"newPausedStatus\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"PauserRegistrySet\",\"inputs\":[{\"name\":\"pauserRegistry\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"contractIPauserRegistry\"},{\"name\":\"newPauserRegistry\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"contractIPauserRegistry\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"QuorumAdversaryThresholdPercentagesUpdated\",\"inputs\":[{\"name\":\"previousQuorumAdversaryThresholdPercentages\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"},{\"name\":\"newQuorumAdversaryThresholdPercentages\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"QuorumConfirmationThresholdPercentagesUpdated\",\"inputs\":[{\"name\":\"previousQuorumConfirmationThresholdPercentages\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"},{\"name\":\"newQuorumConfirmationThresholdPercentages\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"QuorumNumbersRequiredUpdated\",\"inputs\":[{\"name\":\"previousQuorumNumbersRequired\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"},{\"name\":\"newQuorumNumbersRequired\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"RewardsInitiatorUpdated\",\"inputs\":[{\"name\":\"prevRewardsInitiator\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"},{\"name\":\"newRewardsInitiator\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"StaleStakesForbiddenUpdate\",\"inputs\":[{\"name\":\"value\",\"type\":\"bool\",\"indexed\":false,\"internalType\":\"bool\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"Unpaused\",\"inputs\":[{\"name\":\"account\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"newPausedStatus\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"VersionedBlobParamsAdded\",\"inputs\":[{\"name\":\"version\",\"type\":\"uint16\",\"indexed\":true,\"internalType\":\"uint16\"},{\"name\":\"versionedBlobParams\",\"type\":\"tuple\",\"indexed\":false,\"internalType\":\"structVersionedBlobParams\",\"components\":[{\"name\":\"maxNumOperators\",\"type\":\"uint32\",\"internalType\":\"uint32\"},{\"name\":\"numChunks\",\"type\":\"uint32\",\"internalType\":\"uint32\"},{\"name\":\"codingRate\",\"type\":\"uint8\",\"internalType\":\"uint8\"}]}],\"anonymous\":false}]", - Bin: "0x6102006040523480156200001257600080fd5b506040516200657038038062006570833981016040819052620000359162000305565b6001600160a01b0380851660805280841660a05280831660c05280821660e05280891661010052808816610120528087166101405285166101605285888882886200007f6200022a565b50505050806001600160a01b0316610180816001600160a01b031681525050806001600160a01b031663683048356040518163ffffffff1660e01b8152600401602060405180830381865afa158015620000dd573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620001039190620003c6565b6001600160a01b03166101a0816001600160a01b031681525050806001600160a01b0316635df459466040518163ffffffff1660e01b8152600401602060405180830381865afa1580156200015c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620001829190620003c6565b6001600160a01b03166101c0816001600160a01b0316815250506101a0516001600160a01b031663df5cf7236040518163ffffffff1660e01b8152600401602060405180830381865afa158015620001de573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620002049190620003c6565b6001600160a01b03166101e052506200021c6200022a565b5050505050505050620003ed565b603254610100900460ff1615620002975760405162461bcd60e51b815260206004820152602760248201527f496e697469616c697a61626c653a20636f6e747261637420697320696e697469604482015266616c697a696e6760c81b606482015260840160405180910390fd5b60325460ff9081161015620002ea576032805460ff191660ff9081179091556040519081527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b565b6001600160a01b03811681146200030257600080fd5b50565b600080600080600080600080610100898b0312156200032357600080fd5b88516200033081620002ec565b60208a01519098506200034381620002ec565b60408a01519097506200035681620002ec565b60608a01519096506200036981620002ec565b60808a01519095506200037c81620002ec565b60a08a01519094506200038f81620002ec565b60c08a0151909350620003a281620002ec565b60e08a0151909250620003b581620002ec565b809150509295985092959890939650565b600060208284031215620003d957600080fd5b8151620003e681620002ec565b9392505050565b60805160a05160c05160e05161010051610120516101405161016051610180516101a0516101c0516101e051615ff56200057b600039600081816106ba0152611b4a0152600081816104a00152611d2c0152600081816104f201528181611f0201526120c401526000818161053f0152818161126601528181611815015281816119ad0152611be7015260008181610f7e015281816110d9015281816111700152818161316b015281816132ee015261338d015260008181610da901528181610e3801528181610eb801528181612a4101528181612f04015281816130a90152613249015260008181612b2101528181612d4001528181612dfc01528181612ec00152818161389e0152818161395a0152613a4601526000818161051601528181612a9501528181612f600152612fae0152600061075e015260006107240152600061058f0152600081816107dc0152818161085201528181610ae101528181610d19015281816129ad01528181612fe701528181613047015281816134a301526134f00152615ff56000f3fe608060405234801561001057600080fd5b506004361061030c5760003560e01c8063886f11951161019d578063eaefd27d116100e9578063ef635529116100a2578063f8c668141161007c578063f8c66814146107d7578063fabc1cbc146107fe578063fc299dee14610811578063fce36c7d1461082457600080fd5b8063ef63552914610788578063f1220983146107b1578063f2fde38b146107c457600080fd5b8063eaefd27d146106ec578063eccbbfc9146106ff578063ed3916f71461071f578063ee6c3bcf14610746578063eeae17f614610759578063ef0244581461078057600080fd5b8063a5b7890a11610156578063bafa910711610130578063bafa9107146106ad578063df5cf723146106b5578063e15234ff146106dc578063e481af9d146106e457600080fd5b8063a5b7890a1461066a578063a98fb3551461068d578063b98d0908146106a057600080fd5b8063886f1195146105fa5780638da5cb5b1461060d5780639926ee7d1461061e578063a0169ddd14610631578063a20b99bf14610644578063a364f4da1461065757600080fd5b80635df459461161025c5780636efb46361161021557806372d18e8d116101ef57806372d18e8d146105b1578063775bbcb5146105bf5780637794965a146105d25780638687feae146105e557600080fd5b80636efb463614610561578063715018a614610582578063722764431461058a57600080fd5b80635df459461461049b5780635e033476146104da5780635e8b3f2d146104e457806368304835146104ed5780636b3aa72e146105145780636d14a9871461053a57600080fd5b806333cfb7b7116102c95780634972134a116102a35780634972134a14610439578063595c6a671461045e5780635ac86ab7146104665780635c975abb1461048957600080fd5b806333cfb7b7146103f35780633bc28c8c14610413578063416c7e5e1461042657600080fd5b8063048886d21461031157806310d67a2f14610339578063136439dd1461034e5780631429c7c214610361578063171f1d5b146103865780632ecfe72b146103b0575b600080fd5b61032461031f366004614a7d565b610837565b60405190151581526020015b60405180910390f35b61034c610347366004614aaf565b6108cb565b005b61034c61035c366004614acc565b610987565b61037461036f366004614a7d565b610ac6565b60405160ff9091168152602001610330565b610399610394366004614c36565b610b55565b604080519215158352901515602083015201610330565b6103c36103be366004614c87565b610cdf565b60408051825163ffffffff9081168252602080850151909116908201529181015160ff1690820152606001610330565b610406610401366004614aaf565b610d84565b6040516103309190614cb6565b61034c610421366004614aaf565b611253565b61034c610434366004614d11565b611264565b6000546104499063ffffffff1681565b60405163ffffffff9091168152602001610330565b61034c61139b565b610324610474366004614a7d565b60fc54600160ff9092169190911b9081161490565b60fc545b604051908152602001610330565b6104c27f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b039091168152602001610330565b610449620189c081565b61044961012c81565b6104c27f000000000000000000000000000000000000000000000000000000000000000081565b7f00000000000000000000000000000000000000000000000000000000000000006104c2565b6104c27f000000000000000000000000000000000000000000000000000000000000000081565b61057461056f366004614fef565b611462565b6040516103309291906150e2565b61034c612379565b6104c27f000000000000000000000000000000000000000000000000000000000000000081565b60005463ffffffff16610449565b61034c6105cd36600461512b565b61238d565b61034c6105e0366004615206565b6124f6565b6105ed6129a9565b60405161033091906152cd565b60fb546104c2906001600160a01b031681565b6065546001600160a01b03166104c2565b61034c61062c366004615360565b612a36565b61034c61063f366004614aaf565b612afa565b61034c610652366004615456565b612b81565b61034c610665366004614aaf565b612ef9565b610324610678366004614aaf565b60026020526000908152604090205460ff1681565b61034c61069b366004615497565b612f8f565b60c9546103249060ff1681565b6105ed612fe3565b6104c27f000000000000000000000000000000000000000000000000000000000000000081565b6105ed613043565b6104066130a3565b6104496106fa3660046154e7565b61346c565b61048d61070d3660046154e7565b60016020526000908152604090205481565b6104c27f000000000000000000000000000000000000000000000000000000000000000081565b610374610754366004614a7d565b613488565b6104c27f000000000000000000000000000000000000000000000000000000000000000081565b61048d606481565b6107906134da565b60408051825160ff9081168252602093840151169281019290925201610330565b61034c6107bf366004614aaf565b61356f565b61034c6107d2366004614aaf565b613580565b6104c27f000000000000000000000000000000000000000000000000000000000000000081565b61034c61080c366004614acc565b6135f6565b6097546104c2906001600160a01b031681565b61034c610832366004615456565b613752565b604051630244436960e11b815260ff821660048201526000907f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03169063048886d290602401602060405180830381865afa1580156108a1573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108c59190615504565b92915050565b60fb60009054906101000a90046001600160a01b03166001600160a01b031663eab66d7a6040518163ffffffff1660e01b8152600401602060405180830381865afa15801561091e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109429190615521565b6001600160a01b0316336001600160a01b03161461097b5760405162461bcd60e51b81526004016109729061553e565b60405180910390fd5b61098481613a7d565b50565b60fb5460405163237dfb4760e11b81523360048201526001600160a01b03909116906346fbf68e90602401602060405180830381865afa1580156109cf573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109f39190615504565b610a0f5760405162461bcd60e51b815260040161097290615588565b60fc5481811614610a885760405162461bcd60e51b815260206004820152603860248201527f5061757361626c652e70617573653a20696e76616c696420617474656d70742060448201527f746f20756e70617573652066756e6374696f6e616c69747900000000000000006064820152608401610972565b60fc81905560405181815233907fab40a374bc51de372200a8bc981af8c9ecdc08dfdaef0bb6e09f88f3c616ef3d906020015b60405180910390a250565b604051630a14e3e160e11b815260ff821660048201526000907f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031690631429c7c2906024015b602060405180830381865afa158015610b31573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108c591906155d0565b60008060007f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000187876000015188602001518860000151600060028110610b9d57610b9d6155ed565b60200201518951600160200201518a60200151600060028110610bc257610bc26155ed565b60200201518b60200151600160028110610bde57610bde6155ed565b602090810291909101518c518d830151604051610c3b9a99989796959401988952602089019790975260408801959095526060870193909352608086019190915260a085015260c084015260e08301526101008201526101200190565b6040516020818303038152906040528051906020012060001c610c5e9190615603565b9050610cd1610c77610c708884613b74565b8690613c0b565b610c7f613c9f565b610cc7610cb885610cb2604080518082018252600080825260209182015281518083019092526001825260029082015290565b90613b74565b610cc18c613d5f565b90613c0b565b886201d4c0613def565b909890975095505050505050565b60408051606081018252600080825260208201819052818301529051632ecfe72b60e01b815261ffff831660048201526001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001690632ecfe72b90602401606060405180830381865afa158015610d60573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108c59190615625565b6040516309aa152760e11b81526001600160a01b0382811660048301526060916000917f000000000000000000000000000000000000000000000000000000000000000016906313542a4e90602401602060405180830381865afa158015610df0573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e149190615696565b60405163871ef04960e01b8152600481018290529091506000906001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169063871ef04990602401602060405180830381865afa158015610e7f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ea391906156af565b90506001600160c01b0381161580610f3d57507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316639aa1653d6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610f14573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f3891906155d0565b60ff16155b15610f5957505060408051600081526020810190915292915050565b6000610f6d826001600160c01b0316614013565b90506000805b8251811015611043577f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316633ca5a5f5848381518110610fbd57610fbd6155ed565b01602001516040516001600160e01b031960e084901b16815260f89190911c6004820152602401602060405180830381865afa158015611001573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906110259190615696565b61102f90836156ee565b91508061103b81615706565b915050610f73565b506000816001600160401b0381111561105e5761105e614ae5565b604051908082528060200260200182016040528015611087578160200160208202803683370190505b5090506000805b84518110156112465760008582815181106110ab576110ab6155ed565b0160200151604051633ca5a5f560e01b815260f89190911c6004820181905291506000906001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001690633ca5a5f590602401602060405180830381865afa158015611120573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111449190615696565b905060005b81811015611230576040516356e4026d60e11b815260ff84166004820152602481018290527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03169063adc804da906044016040805180830381865afa1580156111be573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111e29190615736565b600001518686815181106111f8576111f86155ed565b6001600160a01b03909216602092830291909101909101528461121a81615706565b955050808061122890615706565b915050611149565b505050808061123e90615706565b91505061108e565b5090979650505050505050565b61125b6140d5565b6109848161412f565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316638da5cb5b6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156112c2573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112e69190615521565b6001600160a01b0316336001600160a01b0316146113925760405162461bcd60e51b815260206004820152605c60248201527f424c535369676e6174757265436865636b65722e6f6e6c79436f6f7264696e6160448201527f746f724f776e65723a2063616c6c6572206973206e6f7420746865206f776e6560648201527f72206f6620746865207265676973747279436f6f7264696e61746f7200000000608482015260a401610972565b61098481614198565b60fb5460405163237dfb4760e11b81523360048201526001600160a01b03909116906346fbf68e90602401602060405180830381865afa1580156113e3573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906114079190615504565b6114235760405162461bcd60e51b815260040161097290615588565b60001960fc81905560405190815233907fab40a374bc51de372200a8bc981af8c9ecdc08dfdaef0bb6e09f88f3c616ef3d9060200160405180910390a2565b60408051808201909152606080825260208201526000846114d95760405162461bcd60e51b81526020600482015260376024820152600080516020615fa083398151915260448201527f7265733a20656d7074792071756f72756d20696e7075740000000000000000006064820152608401610972565b604083015151851480156114f1575060a08301515185145b8015611501575060c08301515185145b8015611511575060e08301515185145b61157b5760405162461bcd60e51b81526020600482015260416024820152600080516020615fa083398151915260448201527f7265733a20696e7075742071756f72756d206c656e677468206d69736d6174636064820152600d60fb1b608482015260a401610972565b825151602084015151146115f35760405162461bcd60e51b815260206004820152604460248201819052600080516020615fa0833981519152908201527f7265733a20696e707574206e6f6e7369676e6572206c656e677468206d69736d6064820152630c2e8c6d60e31b608482015260a401610972565b4363ffffffff168463ffffffff16106116625760405162461bcd60e51b815260206004820152603c6024820152600080516020615fa083398151915260448201527f7265733a20696e76616c6964207265666572656e636520626c6f636b000000006064820152608401610972565b6040805180820182526000808252602080830191909152825180840190935260608084529083015290866001600160401b038111156116a3576116a3614ae5565b6040519080825280602002602001820160405280156116cc578160200160208202803683370190505b506020820152866001600160401b038111156116ea576116ea614ae5565b604051908082528060200260200182016040528015611713578160200160208202803683370190505b50815260408051808201909152606080825260208201528560200151516001600160401b0381111561174757611747614ae5565b604051908082528060200260200182016040528015611770578160200160208202803683370190505b5081526020860151516001600160401b0381111561179057611790614ae5565b6040519080825280602002602001820160405280156117b9578160200160208202803683370190505b508160200181905250600061188b8a8a8080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152505060408051639aa1653d60e01b815290516001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169350639aa1653d925060048083019260209291908290030181865afa158015611862573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061188691906155d0565b6141e0565b905060005b876020015151811015611b26576118d5886020015182815181106118b6576118b66155ed565b6020026020010151805160009081526020918201519091526040902090565b836020015182815181106118eb576118eb6155ed565b602090810291909101015280156119ab57602083015161190c600183615777565b8151811061191c5761191c6155ed565b602002602001015160001c8360200151828151811061193d5761193d6155ed565b602002602001015160001c116119ab576040805162461bcd60e51b8152602060048201526024810191909152600080516020615fa083398151915260448201527f7265733a206e6f6e5369676e65725075626b657973206e6f7420736f727465646064820152608401610972565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03166304ec6351846020015183815181106119f0576119f06155ed565b60200260200101518b8b600001518581518110611a0f57611a0f6155ed565b60200260200101516040518463ffffffff1660e01b8152600401611a4c9392919092835263ffffffff918216602084015216604082015260600190565b602060405180830381865afa158015611a69573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611a8d91906156af565b6001600160c01b031683600001518281518110611aac57611aac6155ed565b602002602001018181525050611b12610c70611ae68486600001518581518110611ad857611ad86155ed565b602002602001015116614271565b8a602001518481518110611afc57611afc6155ed565b602002602001015161429c90919063ffffffff16565b945080611b1e81615706565b915050611890565b5050611b3183614380565b60c95490935060ff16600081611b48576000611bca565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663c448feb86040518163ffffffff1660e01b8152600401602060405180830381865afa158015611ba6573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611bca9190615696565b905060005b8a811015612248578215611d2a578963ffffffff16827f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663249a0c428f8f86818110611c2657611c266155ed565b60405160e085901b6001600160e01b031916815292013560f81c600483015250602401602060405180830381865afa158015611c66573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611c8a9190615696565b611c9491906156ee565b11611d2a5760405162461bcd60e51b81526020600482015260666024820152600080516020615fa083398151915260448201527f7265733a205374616b6552656769737472792075706461746573206d7573742060648201527f62652077697468696e207769746864726177616c44656c6179426c6f636b732060848201526577696e646f7760d01b60a482015260c401610972565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03166368bccaac8d8d84818110611d6b57611d6b6155ed565b9050013560f81c60f81b60f81c8c8c60a001518581518110611d8f57611d8f6155ed565b60209081029190910101516040516001600160e01b031960e086901b16815260ff909316600484015263ffffffff9182166024840152166044820152606401602060405180830381865afa158015611deb573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611e0f919061578e565b6001600160401b031916611e328a6040015183815181106118b6576118b66155ed565b67ffffffffffffffff191614611ece5760405162461bcd60e51b81526020600482015260616024820152600080516020615fa083398151915260448201527f7265733a2071756f72756d41706b206861736820696e2073746f72616765206460648201527f6f6573206e6f74206d617463682070726f76696465642071756f72756d2061706084820152606b60f81b60a482015260c401610972565b611efe89604001518281518110611ee757611ee76155ed565b602002602001015187613c0b90919063ffffffff16565b95507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663c8294c568d8d84818110611f4157611f416155ed565b9050013560f81c60f81b60f81c8c8c60c001518581518110611f6557611f656155ed565b60209081029190910101516040516001600160e01b031960e086901b16815260ff909316600484015263ffffffff9182166024840152166044820152606401602060405180830381865afa158015611fc1573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611fe591906157b9565b85602001518281518110611ffb57611ffb6155ed565b6001600160601b03909216602092830291909101820152850151805182908110612027576120276155ed565b602002602001015185600001518281518110612045576120456155ed565b60200260200101906001600160601b031690816001600160601b0316815250506000805b8a6020015151811015612233576120bd8660000151828151811061208f5761208f6155ed565b60200260200101518f8f868181106120a9576120a96155ed565b600192013560f81c9290921c811614919050565b15612221577f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663f2be94ae8f8f86818110612103576121036155ed565b9050013560f81c60f81b60f81c8e89602001518581518110612127576121276155ed565b60200260200101518f60e001518881518110612145576121456155ed565b6020026020010151878151811061215e5761215e6155ed565b60209081029190910101516040516001600160e01b031960e087901b16815260ff909416600485015263ffffffff92831660248501526044840191909152166064820152608401602060405180830381865afa1580156121c2573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906121e691906157b9565b87518051859081106121fa576121fa6155ed565b6020026020010181815161220e91906157d6565b6001600160601b03169052506001909101905b8061222b81615706565b915050612069565b5050808061224090615706565b915050611bcf565b5050506000806122628c868a606001518b60800151610b55565b91509150816122d35760405162461bcd60e51b81526020600482015260436024820152600080516020615fa083398151915260448201527f7265733a2070616972696e6720707265636f6d70696c652063616c6c206661696064820152621b195960ea1b608482015260a401610972565b806123345760405162461bcd60e51b81526020600482015260396024820152600080516020615fa083398151915260448201527f7265733a207369676e617475726520697320696e76616c6964000000000000006064820152608401610972565b5050600087826020015160405160200161234f9291906157fe565b60408051808303601f190181529190528051602090910120929b929a509198505050505050505050565b6123816140d5565b61238b600061441b565b565b603254610100900460ff16158080156123ad5750603254600160ff909116105b806123c75750303b1580156123c7575060325460ff166001145b61242a5760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b6064820152608401610972565b6032805460ff19166001179055801561244d576032805461ff0019166101001790555b612457868661446d565b6124608461441b565b6124698261412f565b60005b83518110156124a75761249784828151811061248a5761248a6155ed565b6020026020010151614557565b6124a081615706565b905061246c565b5080156124ee576032805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b505050505050565b60fc546000906001908116141561254f5760405162461bcd60e51b815260206004820152601960248201527f5061757361626c653a20696e64657820697320706175736564000000000000006044820152606401610972565b3360009081526002602052604090205460ff1661256b57600080fd5b3233146125d05760405162461bcd60e51b815260206004820152602d60248201527f68656164657220616e64206e6f6e7369676e65722064617461206d757374206260448201526c6520696e2063616c6c6461746160981b6064820152608401610972565b436125e160808501606086016154e7565b63ffffffff16106126485760405162461bcd60e51b815260206004820152602b60248201527f737065636966696564207265666572656e6365426c6f636b4e756d626572206960448201526a7320696e2066757475726560a81b6064820152608401610972565b63ffffffff431661012c61266260808601606087016154e7565b61266c9190615846565b63ffffffff1610156126da5760405162461bcd60e51b815260206004820152603160248201527f737065636966696564207265666572656e6365426c6f636b4e756d62657220696044820152701cc81d1bdbc819985c881a5b881c185cdd607a1b6064820152608401610972565b6126e7604084018461586e565b90506126f6602085018561586e565b90501461276b5760405162461bcd60e51b815260206004820152603b60248201527f71756f72756d4e756d6265727320616e64207369676e65645374616b65466f7260448201527f51756f72756d73206d7573742062652073616d65206c656e67746800000000006064820152608401610972565b600061277e612779856158b4565b6145ba565b90506000806127aa83612794602089018961586e565b6127a460808b0160608c016154e7565b89611462565b9150915060005b6127be604088018861586e565b90508110156128de576127d4604088018861586e565b828181106127e4576127e46155ed565b9050013560f81c60f81b60f81c60ff168360200151828151811061280a5761280a6155ed565b602002602001015161281c9190615956565b6001600160601b031660648460000151838151811061283d5761283d6155ed565b60200260200101516001600160601b03166128589190615985565b10156128cc5760405162461bcd60e51b815260206004820152603760248201527f7369676e61746f7269657320646f206e6f74206f776e207468726573686f6c6460448201527f2070657263656e74616765206f6620612071756f72756d0000000000000000006064820152608401610972565b806128d681615706565b9150506127b1565b506000805463ffffffff16906128f388614635565b6040805160208082018490528183018790524360e01b6001600160e01b0319166060830152825160448184030181526064830180855281519183019190912063ffffffff881660008181526001909452928590205552905191925086917fc75557c4ad49697e231449688be13ef11cb6be8ed0d18819d8dde074a5a16f8a9181900360840190a2612985826001615846565b6000805463ffffffff191663ffffffff929092169190911790555050505050505050565b60607f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316638687feae6040518163ffffffff1660e01b8152600401600060405180830381865afa158015612a09573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052612a3191908101906159a4565b905090565b336001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614612a7e5760405162461bcd60e51b815260040161097290615a1a565b604051639926ee7d60e01b81526001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001690639926ee7d90612acc9085908590600401615a92565b600060405180830381600087803b158015612ae657600080fd5b505af11580156124ee573d6000803e3d6000fd5b612b026140d5565b60405163a0169ddd60e01b81526001600160a01b0382811660048301527f0000000000000000000000000000000000000000000000000000000000000000169063a0169ddd906024015b600060405180830381600087803b158015612b6657600080fd5b505af1158015612b7a573d6000803e3d6000fd5b5050505050565b612b89614648565b60005b81811015612ea8576000805b848484818110612baa57612baa6155ed565b9050602002810190612bbc9190615add565b612bca906040810190615afd565b9050811015612c3c57848484818110612be557612be56155ed565b9050602002810190612bf79190615add565b612c05906040810190615afd565b82818110612c1557612c156155ed565b9050604002016020013582612c2a91906156ee565b9150612c3581615706565b9050612b98565b50838383818110612c4f57612c4f6155ed565b9050602002810190612c619190615add565b612c72906040810190602001614aaf565b6040516323b872dd60e01b8152336004820152306024820152604481018390526001600160a01b0391909116906323b872dd906064016020604051808303816000875af1158015612cc7573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612ceb9190615504565b506000848484818110612d0057612d006155ed565b9050602002810190612d129190615add565b612d23906040810190602001614aaf565b604051636eb1769f60e11b81523060048201526001600160a01b037f000000000000000000000000000000000000000000000000000000000000000081166024830152919091169063dd62ed3e90604401602060405180830381865afa158015612d91573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612db59190615696565b9050848484818110612dc957612dc96155ed565b9050602002810190612ddb9190615add565b612dec906040810190602001614aaf565b6001600160a01b031663095ea7b37f0000000000000000000000000000000000000000000000000000000000000000612e2584866156ee565b6040516001600160e01b031960e085901b1681526001600160a01b03909216600483015260248201526044016020604051808303816000875af1158015612e70573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612e949190615504565b50505080612ea190615706565b9050612b8c565b50604051634e5cd2fd60e11b81526001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001690639cb9a5fa90612acc90309086908690600401615c57565b336001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614612f415760405162461bcd60e51b815260040161097290615a1a565b6040516351b27a6d60e11b81526001600160a01b0382811660048301527f0000000000000000000000000000000000000000000000000000000000000000169063a364f4da90602401612b4c565b612f976140d5565b60405163a98fb35560e01b81526001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169063a98fb35590612b4c9084906004016152cd565b60607f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663bafa91076040518163ffffffff1660e01b8152600401600060405180830381865afa158015612a09573d6000803e3d6000fd5b60607f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663e15234ff6040518163ffffffff1660e01b8152600401600060405180830381865afa158015612a09573d6000803e3d6000fd5b606060007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316639aa1653d6040518163ffffffff1660e01b8152600401602060405180830381865afa158015613105573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061312991906155d0565b60ff1690508061314757505060408051600081526020810190915290565b6000805b828110156131fc57604051633ca5a5f560e01b815260ff821660048201527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031690633ca5a5f590602401602060405180830381865afa1580156131ba573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906131de9190615696565b6131e890836156ee565b9150806131f481615706565b91505061314b565b506000816001600160401b0381111561321757613217614ae5565b604051908082528060200260200182016040528015613240578160200160208202803683370190505b5090506000805b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316639aa1653d6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156132a5573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906132c991906155d0565b60ff1681101561346257604051633ca5a5f560e01b815260ff821660048201526000907f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031690633ca5a5f590602401602060405180830381865afa15801561333d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906133619190615696565b905060005b8181101561344d576040516356e4026d60e11b815260ff84166004820152602481018290527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03169063adc804da906044016040805180830381865afa1580156133db573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906133ff9190615736565b60000151858581518110613415576134156155ed565b6001600160a01b03909216602092830291909101909101528361343781615706565b945050808061344590615706565b915050613366565b5050808061345a90615706565b915050613247565b5090949350505050565b600061012c61347e620189c084615846565b6108c59190615846565b60405163ee6c3bcf60e01b815260ff821660048201526000907f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03169063ee6c3bcf90602401610b14565b60408051808201909152600080825260208201527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663ef6355296040518163ffffffff1660e01b81526004016040805180830381865afa15801561354b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612a319190615db3565b6135776140d5565b61098481614557565b6135886140d5565b6001600160a01b0381166135ed5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610972565b6109848161441b565b60fb60009054906101000a90046001600160a01b03166001600160a01b031663eab66d7a6040518163ffffffff1660e01b8152600401602060405180830381865afa158015613649573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061366d9190615521565b6001600160a01b0316336001600160a01b03161461369d5760405162461bcd60e51b81526004016109729061553e565b60fc5419811960fc5419161461371b5760405162461bcd60e51b815260206004820152603860248201527f5061757361626c652e756e70617573653a20696e76616c696420617474656d7060448201527f7420746f2070617573652066756e6374696f6e616c69747900000000000000006064820152608401610972565b60fc81905560405181815233907f3582d1828e26bf56bd801502bc021ac0bc8afb57c826e4986b45593c8fad389c90602001610abb565b61375a614648565b60005b81811015613a2e57828282818110613777576137776155ed565b90506020028101906137899190615de8565b61379a906040810190602001614aaf565b6001600160a01b03166323b872dd33308686868181106137bc576137bc6155ed565b90506020028101906137ce9190615de8565b604080516001600160e01b031960e087901b1681526001600160a01b039485166004820152939092166024840152013560448201526064016020604051808303816000875af1158015613825573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906138499190615504565b50600083838381811061385e5761385e6155ed565b90506020028101906138709190615de8565b613881906040810190602001614aaf565b604051636eb1769f60e11b81523060048201526001600160a01b037f000000000000000000000000000000000000000000000000000000000000000081166024830152919091169063dd62ed3e90604401602060405180830381865afa1580156138ef573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906139139190615696565b9050838383818110613927576139276155ed565b90506020028101906139399190615de8565b61394a906040810190602001614aaf565b6001600160a01b031663095ea7b37f00000000000000000000000000000000000000000000000000000000000000008387878781811061398c5761398c6155ed565b905060200281019061399e9190615de8565b604001356139ac91906156ee565b6040516001600160e01b031960e085901b1681526001600160a01b03909216600483015260248201526044016020604051808303816000875af11580156139f7573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613a1b9190615504565b505080613a2790615706565b905061375d565b5060405163fce36c7d60e01b81526001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169063fce36c7d90612acc9085908590600401615dfe565b6001600160a01b038116613b0b5760405162461bcd60e51b815260206004820152604960248201527f5061757361626c652e5f73657450617573657252656769737472793a206e657760448201527f50617573657252656769737472792063616e6e6f7420626520746865207a65726064820152686f206164647265737360b81b608482015260a401610972565b60fb54604080516001600160a01b03928316815291831660208301527f6e9fcd539896fca60e8b0f01dd580233e48a6b0f7df013b89ba7f565869acdb6910160405180910390a160fb80546001600160a01b0319166001600160a01b0392909216919091179055565b6040805180820190915260008082526020820152613b90614994565b835181526020808501519082015260408082018490526000908360608460076107d05a03fa9050808015613bc357613bc5565bfe5b5080613c035760405162461bcd60e51b815260206004820152600d60248201526c1958cb5b5d5b0b59985a5b1959609a1b6044820152606401610972565b505092915050565b6040805180820190915260008082526020820152613c276149b2565b835181526020808501518183015283516040808401919091529084015160608301526000908360808460066107d05a03fa9050808015613bc3575080613c035760405162461bcd60e51b815260206004820152600d60248201526c1958cb5859190b59985a5b1959609a1b6044820152606401610972565b613ca76149d0565b50604080516080810182527f198e9393920d483a7260bfb731fb5d25f1aa493335a9e71297e485b7aef312c28183019081527f1800deef121f1e76426a00665e5c4479674322d4f75edadd46debd5cd992f6ed6060830152815281518083019092527f275dc4a288d1afb3cbb1ac09187524c7db36395df7be3b99e673b13a075a65ec82527f1d9befcd05a5323e6da4d435f3b617cdb3af83285c2df711ef39c01571827f9d60208381019190915281019190915290565b604080518082019091526000808252602082015260008080613d8f600080516020615f8083398151915286615603565b90505b613d9b816146dd565b9093509150600080516020615f80833981519152828309831415613dd5576040805180820190915290815260208101919091529392505050565b600080516020615f80833981519152600182089050613d92565b604080518082018252868152602080820186905282518084019093528683528201849052600091829190613e216149f5565b60005b6002811015613fe6576000613e3a826006615985565b9050848260028110613e4e57613e4e6155ed565b60200201515183613e608360006156ee565b600c8110613e7057613e706155ed565b6020020152848260028110613e8757613e876155ed565b60200201516020015183826001613e9e91906156ee565b600c8110613eae57613eae6155ed565b6020020152838260028110613ec557613ec56155ed565b6020020151515183613ed88360026156ee565b600c8110613ee857613ee86155ed565b6020020152838260028110613eff57613eff6155ed565b6020020151516001602002015183613f188360036156ee565b600c8110613f2857613f286155ed565b6020020152838260028110613f3f57613f3f6155ed565b602002015160200151600060028110613f5a57613f5a6155ed565b602002015183613f6b8360046156ee565b600c8110613f7b57613f7b6155ed565b6020020152838260028110613f9257613f926155ed565b602002015160200151600160028110613fad57613fad6155ed565b602002015183613fbe8360056156ee565b600c8110613fce57613fce6155ed565b60200201525080613fde81615706565b915050613e24565b50613fef614a14565b60006020826101808560088cfa9151919c9115159b50909950505050505050505050565b606060008061402184614271565b61ffff166001600160401b0381111561403c5761403c614ae5565b6040519080825280601f01601f191660200182016040528015614066576020820181803683370190505b5090506000805b82518210801561407e575061010081105b15613462576001811b9350858416156140c5578060f81b8383815181106140a7576140a76155ed565b60200101906001600160f81b031916908160001a9053508160010191505b6140ce81615706565b905061406d565b6065546001600160a01b0316331461238b5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610972565b609754604080516001600160a01b03928316815291831660208301527fe11cddf1816a43318ca175bbc52cd0185436e9cbead7c83acc54a73e461717e3910160405180910390a1609780546001600160a01b0319166001600160a01b0392909216919091179055565b60c9805460ff19168215159081179091556040519081527f40e4ed880a29e0f6ddce307457fb75cddf4feef7d3ecb0301bfdf4976a0e2dfc906020015b60405180910390a150565b6000806141ec8461475f565b9050808360ff166001901b1161426a5760405162461bcd60e51b815260206004820152603f60248201527f4269746d61705574696c732e6f72646572656442797465734172726179546f4260448201527f69746d61703a206269746d61702065786365656473206d61782076616c7565006064820152608401610972565b9392505050565b6000805b82156108c557614286600184615777565b909216918061429481615edf565b915050614275565b60408051808201909152600080825260208201526102008261ffff16106142f85760405162461bcd60e51b815260206004820152601060248201526f7363616c61722d746f6f2d6c6172676560801b6044820152606401610972565b8161ffff166001141561430c5750816108c5565b6040805180820190915260008082526020820181905284906001905b8161ffff168661ffff161061437557600161ffff871660ff83161c81161415614358576143558484613c0b565b93505b6143628384613c0b565b92506201fffe600192831b169101614328565b509195945050505050565b604080518082019091526000808252602082015281511580156143a557506020820151155b156143c3575050604080518082019091526000808252602082015290565b604051806040016040528083600001518152602001600080516020615f8083398151915284602001516143f69190615603565b61440e90600080516020615f80833981519152615777565b905292915050565b919050565b606580546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b60fb546001600160a01b031615801561448e57506001600160a01b03821615155b6145105760405162461bcd60e51b815260206004820152604760248201527f5061757361626c652e5f696e697469616c697a655061757365723a205f696e6960448201527f7469616c697a6550617573657228292063616e206f6e6c792062652063616c6c6064820152666564206f6e636560c81b608482015260a401610972565b60fc81905560405181815233907fab40a374bc51de372200a8bc981af8c9ecdc08dfdaef0bb6e09f88f3c616ef3d9060200160405180910390a261455382613a7d565b5050565b6001600160a01b038116600081815260026020908152604091829020805460ff8082161560ff1990921682179092558351948552161515908301527f5c3265f5fb462ef4930fe47beaa183647c97f19ba545b761f41bc8cd4621d41491016141d5565b60006145f782604080518082019091526000808252602082015250604080518082019091528151815260609091015163ffffffff16602082015290565b6040805182516020808301919091529092015163ffffffff16908201526060015b604051602081830303815290604052805190602001209050919050565b6000816040516020016146189190615f01565b6097546001600160a01b0316331461238b5760405162461bcd60e51b815260206004820152604c60248201527f536572766963654d616e61676572426173652e6f6e6c7952657761726473496e60448201527f69746961746f723a2063616c6c6572206973206e6f742074686520726577617260648201526b32399034b734ba34b0ba37b960a11b608482015260a401610972565b60008080600080516020615f808339815191526003600080516020615f8083398151915286600080516020615f80833981519152888909090890506000614753827f0c19139cb84c680a6e14116da060561765e05aa45a1c72a34f082305b61f3f52600080516020615f808339815191526148ec565b91959194509092505050565b6000610100825111156147e85760405162461bcd60e51b8152602060048201526044602482018190527f4269746d61705574696c732e6f72646572656442797465734172726179546f42908201527f69746d61703a206f7264657265644279746573417272617920697320746f6f206064820152636c6f6e6760e01b608482015260a401610972565b81516147f657506000919050565b6000808360008151811061480c5761480c6155ed565b0160200151600160f89190911c81901b92505b84518110156148e35784818151811061483a5761483a6155ed565b0160200151600160f89190911c1b91508282116148cf5760405162461bcd60e51b815260206004820152604760248201527f4269746d61705574696c732e6f72646572656442797465734172726179546f4260448201527f69746d61703a206f72646572656442797465734172726179206973206e6f74206064820152661bdc99195c995960ca1b608482015260a401610972565b918117916148dc81615706565b905061481f565b50909392505050565b6000806148f7614a14565b6148ff614a32565b602080825281810181905260408201819052606082018890526080820187905260a082018690528260c08360056107d05a03fa9250828015613bc35750826149895760405162461bcd60e51b815260206004820152601a60248201527f424e3235342e6578704d6f643a2063616c6c206661696c7572650000000000006044820152606401610972565b505195945050505050565b60405180606001604052806003906020820280368337509192915050565b60405180608001604052806004906020820280368337509192915050565b60405180604001604052806149e3614a50565b81526020016149f0614a50565b905290565b604051806101800160405280600c906020820280368337509192915050565b60405180602001604052806001906020820280368337509192915050565b6040518060c001604052806006906020820280368337509192915050565b60405180604001604052806002906020820280368337509192915050565b60ff8116811461098457600080fd5b600060208284031215614a8f57600080fd5b813561426a81614a6e565b6001600160a01b038116811461098457600080fd5b600060208284031215614ac157600080fd5b813561426a81614a9a565b600060208284031215614ade57600080fd5b5035919050565b634e487b7160e01b600052604160045260246000fd5b604080519081016001600160401b0381118282101715614b1d57614b1d614ae5565b60405290565b60405161010081016001600160401b0381118282101715614b1d57614b1d614ae5565b604051601f8201601f191681016001600160401b0381118282101715614b6e57614b6e614ae5565b604052919050565b600060408284031215614b8857600080fd5b614b90614afb565b9050813581526020820135602082015292915050565b600082601f830112614bb757600080fd5b614bbf614afb565b806040840185811115614bd157600080fd5b845b81811015614beb578035845260209384019301614bd3565b509095945050505050565b600060808284031215614c0857600080fd5b614c10614afb565b9050614c1c8383614ba6565b8152614c2b8360408401614ba6565b602082015292915050565b6000806000806101208587031215614c4d57600080fd5b84359350614c5e8660208701614b76565b9250614c6d8660608701614bf6565b9150614c7c8660e08701614b76565b905092959194509250565b600060208284031215614c9957600080fd5b813561ffff8116811461426a57600080fd5b803561441681614a9a565b6020808252825182820181905260009190848201906040850190845b81811015614cf75783516001600160a01b031683529284019291840191600101614cd2565b50909695505050505050565b801515811461098457600080fd5b600060208284031215614d2357600080fd5b813561426a81614d03565b63ffffffff8116811461098457600080fd5b803561441681614d2e565b60006001600160401b03821115614d6457614d64614ae5565b5060051b60200190565b600082601f830112614d7f57600080fd5b81356020614d94614d8f83614d4b565b614b46565b82815260059290921b84018101918181019086841115614db357600080fd5b8286015b84811015614dd7578035614dca81614d2e565b8352918301918301614db7565b509695505050505050565b600082601f830112614df357600080fd5b81356020614e03614d8f83614d4b565b82815260069290921b84018101918181019086841115614e2257600080fd5b8286015b84811015614dd757614e388882614b76565b835291830191604001614e26565b600082601f830112614e5757600080fd5b81356020614e67614d8f83614d4b565b82815260059290921b84018101918181019086841115614e8657600080fd5b8286015b84811015614dd75780356001600160401b03811115614ea95760008081fd5b614eb78986838b0101614d6e565b845250918301918301614e8a565b60006101808284031215614ed857600080fd5b614ee0614b23565b905081356001600160401b0380821115614ef957600080fd5b614f0585838601614d6e565b83526020840135915080821115614f1b57600080fd5b614f2785838601614de2565b60208401526040840135915080821115614f4057600080fd5b614f4c85838601614de2565b6040840152614f5e8560608601614bf6565b6060840152614f708560e08601614b76565b6080840152610120840135915080821115614f8a57600080fd5b614f9685838601614d6e565b60a0840152610140840135915080821115614fb057600080fd5b614fbc85838601614d6e565b60c0840152610160840135915080821115614fd657600080fd5b50614fe384828501614e46565b60e08301525092915050565b60008060008060006080868803121561500757600080fd5b8535945060208601356001600160401b038082111561502557600080fd5b818801915088601f83011261503957600080fd5b81358181111561504857600080fd5b89602082850101111561505a57600080fd5b602083019650945061506e60408901614d40565b9350606088013591508082111561508457600080fd5b5061509188828901614ec5565b9150509295509295909350565b600081518084526020808501945080840160005b838110156150d75781516001600160601b0316875295820195908201906001016150b2565b509495945050505050565b60408152600083516040808401526150fd608084018261509e565b90506020850151603f1984830301606085015261511a828261509e565b925050508260208301529392505050565b600080600080600060a0868803121561514357600080fd5b853561514e81614a9a565b94506020868101359450604087013561516681614a9a565b935060608701356001600160401b0381111561518157600080fd5b8701601f8101891361519257600080fd5b80356151a0614d8f82614d4b565b81815260059190911b8201830190838101908b8311156151bf57600080fd5b928401925b828410156151e65783356151d781614a9a565b825292840192908401906151c4565b80965050505050506151fa60808701614cab565b90509295509295909350565b6000806040838503121561521957600080fd5b82356001600160401b038082111561523057600080fd5b908401906080828703121561524457600080fd5b9092506020840135908082111561525a57600080fd5b5061526785828601614ec5565b9150509250929050565b60005b8381101561528c578181015183820152602001615274565b8381111561529b576000848401525b50505050565b600081518084526152b9816020860160208601615271565b601f01601f19169290920160200192915050565b60208152600061426a60208301846152a1565b60006001600160401b038211156152f9576152f9614ae5565b50601f01601f191660200190565b6000615315614d8f846152e0565b905082815283838301111561532957600080fd5b828260208301376000602084830101529392505050565b600082601f83011261535157600080fd5b61426a83833560208501615307565b6000806040838503121561537357600080fd5b823561537e81614a9a565b915060208301356001600160401b038082111561539a57600080fd5b90840190606082870312156153ae57600080fd5b6040516060810181811083821117156153c9576153c9614ae5565b6040528235828111156153db57600080fd5b6153e788828601615340565b82525060208301356020820152604083013560408201528093505050509250929050565b60008083601f84011261541d57600080fd5b5081356001600160401b0381111561543457600080fd5b6020830191508360208260051b850101111561544f57600080fd5b9250929050565b6000806020838503121561546957600080fd5b82356001600160401b0381111561547f57600080fd5b61548b8582860161540b565b90969095509350505050565b6000602082840312156154a957600080fd5b81356001600160401b038111156154bf57600080fd5b8201601f810184136154d057600080fd5b6154df84823560208401615307565b949350505050565b6000602082840312156154f957600080fd5b813561426a81614d2e565b60006020828403121561551657600080fd5b815161426a81614d03565b60006020828403121561553357600080fd5b815161426a81614a9a565b6020808252602a908201527f6d73672e73656e646572206973206e6f74207065726d697373696f6e6564206160408201526939903ab73830bab9b2b960b11b606082015260800190565b60208082526028908201527f6d73672e73656e646572206973206e6f74207065726d697373696f6e6564206160408201526739903830bab9b2b960c11b606082015260800190565b6000602082840312156155e257600080fd5b815161426a81614a6e565b634e487b7160e01b600052603260045260246000fd5b60008261562057634e487b7160e01b600052601260045260246000fd5b500690565b60006060828403121561563757600080fd5b604051606081018181106001600160401b038211171561565957615659614ae5565b604052825161566781614d2e565b8152602083015161567781614d2e565b6020820152604083015161568a81614a6e565b60408201529392505050565b6000602082840312156156a857600080fd5b5051919050565b6000602082840312156156c157600080fd5b81516001600160c01b038116811461426a57600080fd5b634e487b7160e01b600052601160045260246000fd5b60008219821115615701576157016156d8565b500190565b600060001982141561571a5761571a6156d8565b5060010190565b6001600160601b038116811461098457600080fd5b60006040828403121561574857600080fd5b615750614afb565b825161575b81614a9a565b8152602083015161576b81615721565b60208201529392505050565b600082821015615789576157896156d8565b500390565b6000602082840312156157a057600080fd5b815167ffffffffffffffff198116811461426a57600080fd5b6000602082840312156157cb57600080fd5b815161426a81615721565b60006001600160601b03838116908316818110156157f6576157f66156d8565b039392505050565b63ffffffff60e01b8360e01b1681526000600482018351602080860160005b838110156158395781518552938201939082019060010161581d565b5092979650505050505050565b600063ffffffff808316818516808303821115615865576158656156d8565b01949350505050565b6000808335601e1984360301811261588557600080fd5b8301803591506001600160401b0382111561589f57600080fd5b60200191503681900382131561544f57600080fd5b6000608082360312156158c657600080fd5b604051608081016001600160401b0382821081831117156158e9576158e9614ae5565b8160405284358352602085013591508082111561590557600080fd5b61591136838701615340565b6020840152604085013591508082111561592a57600080fd5b5061593736828601615340565b604083015250606083013561594b81614d2e565b606082015292915050565b60006001600160601b038083168185168183048111821515161561597c5761597c6156d8565b02949350505050565b600081600019048311821515161561599f5761599f6156d8565b500290565b6000602082840312156159b657600080fd5b81516001600160401b038111156159cc57600080fd5b8201601f810184136159dd57600080fd5b80516159eb614d8f826152e0565b818152856020838501011115615a0057600080fd5b615a11826020830160208601615271565b95945050505050565b60208082526052908201527f536572766963654d616e61676572426173652e6f6e6c7952656769737472794360408201527f6f6f7264696e61746f723a2063616c6c6572206973206e6f742074686520726560608201527133b4b9ba393c9031b7b7b93234b730ba37b960711b608082015260a00190565b60018060a01b0383168152604060208201526000825160606040840152615abc60a08401826152a1565b90506020840151606084015260408401516080840152809150509392505050565b6000823560be19833603018112615af357600080fd5b9190910192915050565b6000808335601e19843603018112615b1457600080fd5b8301803591506001600160401b03821115615b2e57600080fd5b6020019150600681901b360382131561544f57600080fd5b6000808335601e19843603018112615b5d57600080fd5b83016020810192503590506001600160401b03811115615b7c57600080fd5b8060061b360383131561544f57600080fd5b8183526000602080850194508260005b858110156150d7578135615bb181614a9a565b6001600160a01b0316875281830135615bc981615721565b6001600160601b0316878401526040968701969190910190600101615b9e565b6000808335601e19843603018112615c0057600080fd5b83016020810192503590506001600160401b03811115615c1f57600080fd5b80360383131561544f57600080fd5b81835281816020850137506000828201602090810191909152601f909101601f19169091010190565b6001600160a01b03848116825260406020808401829052838201859052600092606091828601600588901b8701840189875b8a811015615da257898303605f190184528135368d900360be19018112615caf57600080fd5b8c0160c0615cbd8280615b46565b828752615ccd8388018284615b8e565b9250505086820135615cde81614a9a565b881685880152615cf0828b0183615b46565b8683038c88015280835290916000919089015b81831015615d34578335615d1681614a9a565b8b168152838a01358a820152928c0192600192909201918c01615d03565b615d3f8c8601614d40565b63ffffffff168c89015260809350615d58858501614d40565b63ffffffff811689860152925060a09350615d7584860186615be9565b9550925087810384890152615d8b818685615c2e565b988a01989750505093870193505050600101615c89565b50909b9a5050505050505050505050565b600060408284031215615dc557600080fd5b615dcd614afb565b8251615dd881614a6e565b8152602083015161576b81614a6e565b60008235609e19833603018112615af357600080fd5b60208082528181018390526000906040808401600586901b850182018785805b89811015615ed057888403603f190185528235368c9003609e19018112615e43578283fd5b8b0160a0615e518280615b46565b828852615e618389018284615b8e565b9250505088820135615e7281614a9a565b6001600160a01b0316868a01528188013588870152606080830135615e9681614d2e565b63ffffffff808216838a015260809250828501359450615eb585614d2e565b93909316960195909552509386019391860191600101615e1e565b50919998505050505050505050565b600061ffff80831681811415615ef757615ef76156d8565b6001019392505050565b60208152813560208201526000615f1b6020840184615be9565b60806040850152615f3060a085018284615c2e565b915050615f406040850185615be9565b848303601f19016060860152615f57838284615c2e565b925050506060840135615f6981614d2e565b63ffffffff16608093909301929092525091905056fe30644e72e131a029b85045b68181585d97816a916871ca8d3c208c16d87cfd47424c535369676e6174757265436865636b65722e636865636b5369676e617475a26469706673582212201f2c122063ba2c5bc9c751da8ec851b8c9a575cceecb2ffa95988c44d5d8a1be64736f6c634300080c0033", + Bin: "0x6102006040523480156200001257600080fd5b506040516200657038038062006570833981016040819052620000359162000305565b6001600160a01b0380851660805280841660a05280831660c05280821660e05280891661010052808816610120528087166101405285166101605285888882886200007f6200022a565b50505050806001600160a01b0316610180816001600160a01b031681525050806001600160a01b031663683048356040518163ffffffff1660e01b8152600401602060405180830381865afa158015620000dd573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620001039190620003c6565b6001600160a01b03166101a0816001600160a01b031681525050806001600160a01b0316635df459466040518163ffffffff1660e01b8152600401602060405180830381865afa1580156200015c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620001829190620003c6565b6001600160a01b03166101c0816001600160a01b0316815250506101a0516001600160a01b031663df5cf7236040518163ffffffff1660e01b8152600401602060405180830381865afa158015620001de573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620002049190620003c6565b6001600160a01b03166101e052506200021c6200022a565b5050505050505050620003ed565b603254610100900460ff1615620002975760405162461bcd60e51b815260206004820152602760248201527f496e697469616c697a61626c653a20636f6e747261637420697320696e697469604482015266616c697a696e6760c81b606482015260840160405180910390fd5b60325460ff9081161015620002ea576032805460ff191660ff9081179091556040519081527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b565b6001600160a01b03811681146200030257600080fd5b50565b600080600080600080600080610100898b0312156200032357600080fd5b88516200033081620002ec565b60208a01519098506200034381620002ec565b60408a01519097506200035681620002ec565b60608a01519096506200036981620002ec565b60808a01519095506200037c81620002ec565b60a08a01519094506200038f81620002ec565b60c08a0151909350620003a281620002ec565b60e08a0151909250620003b581620002ec565b809150509295985092959890939650565b600060208284031215620003d957600080fd5b8151620003e681620002ec565b9392505050565b60805160a05160c05160e05161010051610120516101405161016051610180516101a0516101c0516101e051615ff56200057b600039600081816106ba0152611b4a0152600081816104a00152611d2c0152600081816104f201528181611f0201526120c401526000818161053f0152818161126601528181611815015281816119ad0152611be7015260008181610f7e015281816110d9015281816111700152818161316b015281816132ee015261338d015260008181610da901528181610e3801528181610eb801528181612a4101528181612f04015281816130a90152613249015260008181612b2101528181612d4001528181612dfc01528181612ec00152818161389e0152818161395a0152613a4601526000818161051601528181612a9501528181612f600152612fae0152600061075e015260006107240152600061058f0152600081816107dc0152818161085201528181610ae101528181610d19015281816129ad01528181612fe701528181613047015281816134a301526134f00152615ff56000f3fe608060405234801561001057600080fd5b506004361061030c5760003560e01c8063886f11951161019d578063eaefd27d116100e9578063ef635529116100a2578063f8c668141161007c578063f8c66814146107d7578063fabc1cbc146107fe578063fc299dee14610811578063fce36c7d1461082457600080fd5b8063ef63552914610788578063f1220983146107b1578063f2fde38b146107c457600080fd5b8063eaefd27d146106ec578063eccbbfc9146106ff578063ed3916f71461071f578063ee6c3bcf14610746578063eeae17f614610759578063ef0244581461078057600080fd5b8063a5b7890a11610156578063bafa910711610130578063bafa9107146106ad578063df5cf723146106b5578063e15234ff146106dc578063e481af9d146106e457600080fd5b8063a5b7890a1461066a578063a98fb3551461068d578063b98d0908146106a057600080fd5b8063886f1195146105fa5780638da5cb5b1461060d5780639926ee7d1461061e578063a0169ddd14610631578063a20b99bf14610644578063a364f4da1461065757600080fd5b80635df459461161025c5780636efb46361161021557806372d18e8d116101ef57806372d18e8d146105b1578063775bbcb5146105bf5780637794965a146105d25780638687feae146105e557600080fd5b80636efb463614610561578063715018a614610582578063722764431461058a57600080fd5b80635df459461461049b5780635e033476146104da5780635e8b3f2d146104e457806368304835146104ed5780636b3aa72e146105145780636d14a9871461053a57600080fd5b806333cfb7b7116102c95780634972134a116102a35780634972134a14610439578063595c6a671461045e5780635ac86ab7146104665780635c975abb1461048957600080fd5b806333cfb7b7146103f35780633bc28c8c14610413578063416c7e5e1461042657600080fd5b8063048886d21461031157806310d67a2f14610339578063136439dd1461034e5780631429c7c214610361578063171f1d5b146103865780632ecfe72b146103b0575b600080fd5b61032461031f366004614a7d565b610837565b60405190151581526020015b60405180910390f35b61034c610347366004614aaf565b6108cb565b005b61034c61035c366004614acc565b610987565b61037461036f366004614a7d565b610ac6565b60405160ff9091168152602001610330565b610399610394366004614c36565b610b55565b604080519215158352901515602083015201610330565b6103c36103be366004614c87565b610cdf565b60408051825163ffffffff9081168252602080850151909116908201529181015160ff1690820152606001610330565b610406610401366004614aaf565b610d84565b6040516103309190614cb6565b61034c610421366004614aaf565b611253565b61034c610434366004614d11565b611264565b6000546104499063ffffffff1681565b60405163ffffffff9091168152602001610330565b61034c61139b565b610324610474366004614a7d565b60fc54600160ff9092169190911b9081161490565b60fc545b604051908152602001610330565b6104c27f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b039091168152602001610330565b610449620189c081565b61044961012c81565b6104c27f000000000000000000000000000000000000000000000000000000000000000081565b7f00000000000000000000000000000000000000000000000000000000000000006104c2565b6104c27f000000000000000000000000000000000000000000000000000000000000000081565b61057461056f366004614fef565b611462565b6040516103309291906150e2565b61034c612379565b6104c27f000000000000000000000000000000000000000000000000000000000000000081565b60005463ffffffff16610449565b61034c6105cd36600461512b565b61238d565b61034c6105e0366004615206565b6124f6565b6105ed6129a9565b60405161033091906152cd565b60fb546104c2906001600160a01b031681565b6065546001600160a01b03166104c2565b61034c61062c366004615360565b612a36565b61034c61063f366004614aaf565b612afa565b61034c610652366004615456565b612b81565b61034c610665366004614aaf565b612ef9565b610324610678366004614aaf565b60026020526000908152604090205460ff1681565b61034c61069b366004615497565b612f8f565b60c9546103249060ff1681565b6105ed612fe3565b6104c27f000000000000000000000000000000000000000000000000000000000000000081565b6105ed613043565b6104066130a3565b6104496106fa3660046154e7565b61346c565b61048d61070d3660046154e7565b60016020526000908152604090205481565b6104c27f000000000000000000000000000000000000000000000000000000000000000081565b610374610754366004614a7d565b613488565b6104c27f000000000000000000000000000000000000000000000000000000000000000081565b61048d606481565b6107906134da565b60408051825160ff9081168252602093840151169281019290925201610330565b61034c6107bf366004614aaf565b61356f565b61034c6107d2366004614aaf565b613580565b6104c27f000000000000000000000000000000000000000000000000000000000000000081565b61034c61080c366004614acc565b6135f6565b6097546104c2906001600160a01b031681565b61034c610832366004615456565b613752565b604051630244436960e11b815260ff821660048201526000907f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03169063048886d290602401602060405180830381865afa1580156108a1573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108c59190615504565b92915050565b60fb60009054906101000a90046001600160a01b03166001600160a01b031663eab66d7a6040518163ffffffff1660e01b8152600401602060405180830381865afa15801561091e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109429190615521565b6001600160a01b0316336001600160a01b03161461097b5760405162461bcd60e51b81526004016109729061553e565b60405180910390fd5b61098481613a7d565b50565b60fb5460405163237dfb4760e11b81523360048201526001600160a01b03909116906346fbf68e90602401602060405180830381865afa1580156109cf573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109f39190615504565b610a0f5760405162461bcd60e51b815260040161097290615588565b60fc5481811614610a885760405162461bcd60e51b815260206004820152603860248201527f5061757361626c652e70617573653a20696e76616c696420617474656d70742060448201527f746f20756e70617573652066756e6374696f6e616c69747900000000000000006064820152608401610972565b60fc81905560405181815233907fab40a374bc51de372200a8bc981af8c9ecdc08dfdaef0bb6e09f88f3c616ef3d906020015b60405180910390a250565b604051630a14e3e160e11b815260ff821660048201526000907f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031690631429c7c2906024015b602060405180830381865afa158015610b31573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108c591906155d0565b60008060007f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000187876000015188602001518860000151600060028110610b9d57610b9d6155ed565b60200201518951600160200201518a60200151600060028110610bc257610bc26155ed565b60200201518b60200151600160028110610bde57610bde6155ed565b602090810291909101518c518d830151604051610c3b9a99989796959401988952602089019790975260408801959095526060870193909352608086019190915260a085015260c084015260e08301526101008201526101200190565b6040516020818303038152906040528051906020012060001c610c5e9190615603565b9050610cd1610c77610c708884613b74565b8690613c0b565b610c7f613c9f565b610cc7610cb885610cb2604080518082018252600080825260209182015281518083019092526001825260029082015290565b90613b74565b610cc18c613d5f565b90613c0b565b886201d4c0613def565b909890975095505050505050565b60408051606081018252600080825260208201819052818301529051632ecfe72b60e01b815261ffff831660048201526001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001690632ecfe72b90602401606060405180830381865afa158015610d60573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108c59190615625565b6040516309aa152760e11b81526001600160a01b0382811660048301526060916000917f000000000000000000000000000000000000000000000000000000000000000016906313542a4e90602401602060405180830381865afa158015610df0573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e149190615696565b60405163871ef04960e01b8152600481018290529091506000906001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169063871ef04990602401602060405180830381865afa158015610e7f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ea391906156af565b90506001600160c01b0381161580610f3d57507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316639aa1653d6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610f14573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f3891906155d0565b60ff16155b15610f5957505060408051600081526020810190915292915050565b6000610f6d826001600160c01b0316614013565b90506000805b8251811015611043577f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316633ca5a5f5848381518110610fbd57610fbd6155ed565b01602001516040516001600160e01b031960e084901b16815260f89190911c6004820152602401602060405180830381865afa158015611001573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906110259190615696565b61102f90836156ee565b91508061103b81615706565b915050610f73565b506000816001600160401b0381111561105e5761105e614ae5565b604051908082528060200260200182016040528015611087578160200160208202803683370190505b5090506000805b84518110156112465760008582815181106110ab576110ab6155ed565b0160200151604051633ca5a5f560e01b815260f89190911c6004820181905291506000906001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001690633ca5a5f590602401602060405180830381865afa158015611120573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111449190615696565b905060005b81811015611230576040516356e4026d60e11b815260ff84166004820152602481018290527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03169063adc804da906044016040805180830381865afa1580156111be573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111e29190615736565b600001518686815181106111f8576111f86155ed565b6001600160a01b03909216602092830291909101909101528461121a81615706565b955050808061122890615706565b915050611149565b505050808061123e90615706565b91505061108e565b5090979650505050505050565b61125b6140d5565b6109848161412f565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316638da5cb5b6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156112c2573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112e69190615521565b6001600160a01b0316336001600160a01b0316146113925760405162461bcd60e51b815260206004820152605c60248201527f424c535369676e6174757265436865636b65722e6f6e6c79436f6f7264696e6160448201527f746f724f776e65723a2063616c6c6572206973206e6f7420746865206f776e6560648201527f72206f6620746865207265676973747279436f6f7264696e61746f7200000000608482015260a401610972565b61098481614198565b60fb5460405163237dfb4760e11b81523360048201526001600160a01b03909116906346fbf68e90602401602060405180830381865afa1580156113e3573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906114079190615504565b6114235760405162461bcd60e51b815260040161097290615588565b60001960fc81905560405190815233907fab40a374bc51de372200a8bc981af8c9ecdc08dfdaef0bb6e09f88f3c616ef3d9060200160405180910390a2565b60408051808201909152606080825260208201526000846114d95760405162461bcd60e51b81526020600482015260376024820152600080516020615fa083398151915260448201527f7265733a20656d7074792071756f72756d20696e7075740000000000000000006064820152608401610972565b604083015151851480156114f1575060a08301515185145b8015611501575060c08301515185145b8015611511575060e08301515185145b61157b5760405162461bcd60e51b81526020600482015260416024820152600080516020615fa083398151915260448201527f7265733a20696e7075742071756f72756d206c656e677468206d69736d6174636064820152600d60fb1b608482015260a401610972565b825151602084015151146115f35760405162461bcd60e51b815260206004820152604460248201819052600080516020615fa0833981519152908201527f7265733a20696e707574206e6f6e7369676e6572206c656e677468206d69736d6064820152630c2e8c6d60e31b608482015260a401610972565b4363ffffffff168463ffffffff16106116625760405162461bcd60e51b815260206004820152603c6024820152600080516020615fa083398151915260448201527f7265733a20696e76616c6964207265666572656e636520626c6f636b000000006064820152608401610972565b6040805180820182526000808252602080830191909152825180840190935260608084529083015290866001600160401b038111156116a3576116a3614ae5565b6040519080825280602002602001820160405280156116cc578160200160208202803683370190505b506020820152866001600160401b038111156116ea576116ea614ae5565b604051908082528060200260200182016040528015611713578160200160208202803683370190505b50815260408051808201909152606080825260208201528560200151516001600160401b0381111561174757611747614ae5565b604051908082528060200260200182016040528015611770578160200160208202803683370190505b5081526020860151516001600160401b0381111561179057611790614ae5565b6040519080825280602002602001820160405280156117b9578160200160208202803683370190505b508160200181905250600061188b8a8a8080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152505060408051639aa1653d60e01b815290516001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169350639aa1653d925060048083019260209291908290030181865afa158015611862573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061188691906155d0565b6141e0565b905060005b876020015151811015611b26576118d5886020015182815181106118b6576118b66155ed565b6020026020010151805160009081526020918201519091526040902090565b836020015182815181106118eb576118eb6155ed565b602090810291909101015280156119ab57602083015161190c600183615777565b8151811061191c5761191c6155ed565b602002602001015160001c8360200151828151811061193d5761193d6155ed565b602002602001015160001c116119ab576040805162461bcd60e51b8152602060048201526024810191909152600080516020615fa083398151915260448201527f7265733a206e6f6e5369676e65725075626b657973206e6f7420736f727465646064820152608401610972565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03166304ec6351846020015183815181106119f0576119f06155ed565b60200260200101518b8b600001518581518110611a0f57611a0f6155ed565b60200260200101516040518463ffffffff1660e01b8152600401611a4c9392919092835263ffffffff918216602084015216604082015260600190565b602060405180830381865afa158015611a69573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611a8d91906156af565b6001600160c01b031683600001518281518110611aac57611aac6155ed565b602002602001018181525050611b12610c70611ae68486600001518581518110611ad857611ad86155ed565b602002602001015116614271565b8a602001518481518110611afc57611afc6155ed565b602002602001015161429c90919063ffffffff16565b945080611b1e81615706565b915050611890565b5050611b3183614380565b60c95490935060ff16600081611b48576000611bca565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663c448feb86040518163ffffffff1660e01b8152600401602060405180830381865afa158015611ba6573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611bca9190615696565b905060005b8a811015612248578215611d2a578963ffffffff16827f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663249a0c428f8f86818110611c2657611c266155ed565b60405160e085901b6001600160e01b031916815292013560f81c600483015250602401602060405180830381865afa158015611c66573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611c8a9190615696565b611c9491906156ee565b11611d2a5760405162461bcd60e51b81526020600482015260666024820152600080516020615fa083398151915260448201527f7265733a205374616b6552656769737472792075706461746573206d7573742060648201527f62652077697468696e207769746864726177616c44656c6179426c6f636b732060848201526577696e646f7760d01b60a482015260c401610972565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03166368bccaac8d8d84818110611d6b57611d6b6155ed565b9050013560f81c60f81b60f81c8c8c60a001518581518110611d8f57611d8f6155ed565b60209081029190910101516040516001600160e01b031960e086901b16815260ff909316600484015263ffffffff9182166024840152166044820152606401602060405180830381865afa158015611deb573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611e0f919061578e565b6001600160401b031916611e328a6040015183815181106118b6576118b66155ed565b67ffffffffffffffff191614611ece5760405162461bcd60e51b81526020600482015260616024820152600080516020615fa083398151915260448201527f7265733a2071756f72756d41706b206861736820696e2073746f72616765206460648201527f6f6573206e6f74206d617463682070726f76696465642071756f72756d2061706084820152606b60f81b60a482015260c401610972565b611efe89604001518281518110611ee757611ee76155ed565b602002602001015187613c0b90919063ffffffff16565b95507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663c8294c568d8d84818110611f4157611f416155ed565b9050013560f81c60f81b60f81c8c8c60c001518581518110611f6557611f656155ed565b60209081029190910101516040516001600160e01b031960e086901b16815260ff909316600484015263ffffffff9182166024840152166044820152606401602060405180830381865afa158015611fc1573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611fe591906157b9565b85602001518281518110611ffb57611ffb6155ed565b6001600160601b03909216602092830291909101820152850151805182908110612027576120276155ed565b602002602001015185600001518281518110612045576120456155ed565b60200260200101906001600160601b031690816001600160601b0316815250506000805b8a6020015151811015612233576120bd8660000151828151811061208f5761208f6155ed565b60200260200101518f8f868181106120a9576120a96155ed565b600192013560f81c9290921c811614919050565b15612221577f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663f2be94ae8f8f86818110612103576121036155ed565b9050013560f81c60f81b60f81c8e89602001518581518110612127576121276155ed565b60200260200101518f60e001518881518110612145576121456155ed565b6020026020010151878151811061215e5761215e6155ed565b60209081029190910101516040516001600160e01b031960e087901b16815260ff909416600485015263ffffffff92831660248501526044840191909152166064820152608401602060405180830381865afa1580156121c2573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906121e691906157b9565b87518051859081106121fa576121fa6155ed565b6020026020010181815161220e91906157d6565b6001600160601b03169052506001909101905b8061222b81615706565b915050612069565b5050808061224090615706565b915050611bcf565b5050506000806122628c868a606001518b60800151610b55565b91509150816122d35760405162461bcd60e51b81526020600482015260436024820152600080516020615fa083398151915260448201527f7265733a2070616972696e6720707265636f6d70696c652063616c6c206661696064820152621b195960ea1b608482015260a401610972565b806123345760405162461bcd60e51b81526020600482015260396024820152600080516020615fa083398151915260448201527f7265733a207369676e617475726520697320696e76616c6964000000000000006064820152608401610972565b5050600087826020015160405160200161234f9291906157fe565b60408051808303601f190181529190528051602090910120929b929a509198505050505050505050565b6123816140d5565b61238b600061441b565b565b603254610100900460ff16158080156123ad5750603254600160ff909116105b806123c75750303b1580156123c7575060325460ff166001145b61242a5760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b6064820152608401610972565b6032805460ff19166001179055801561244d576032805461ff0019166101001790555b612457868661446d565b6124608461441b565b6124698261412f565b60005b83518110156124a75761249784828151811061248a5761248a6155ed565b6020026020010151614557565b6124a081615706565b905061246c565b5080156124ee576032805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b505050505050565b60fc546000906001908116141561254f5760405162461bcd60e51b815260206004820152601960248201527f5061757361626c653a20696e64657820697320706175736564000000000000006044820152606401610972565b3360009081526002602052604090205460ff1661256b57600080fd5b3233146125d05760405162461bcd60e51b815260206004820152602d60248201527f68656164657220616e64206e6f6e7369676e65722064617461206d757374206260448201526c6520696e2063616c6c6461746160981b6064820152608401610972565b436125e160808501606086016154e7565b63ffffffff16106126485760405162461bcd60e51b815260206004820152602b60248201527f737065636966696564207265666572656e6365426c6f636b4e756d626572206960448201526a7320696e2066757475726560a81b6064820152608401610972565b63ffffffff431661012c61266260808601606087016154e7565b61266c9190615846565b63ffffffff1610156126da5760405162461bcd60e51b815260206004820152603160248201527f737065636966696564207265666572656e6365426c6f636b4e756d62657220696044820152701cc81d1bdbc819985c881a5b881c185cdd607a1b6064820152608401610972565b6126e7604084018461586e565b90506126f6602085018561586e565b90501461276b5760405162461bcd60e51b815260206004820152603b60248201527f71756f72756d4e756d6265727320616e64207369676e65645374616b65466f7260448201527f51756f72756d73206d7573742062652073616d65206c656e67746800000000006064820152608401610972565b600061277e612779856158b4565b6145ba565b90506000806127aa83612794602089018961586e565b6127a460808b0160608c016154e7565b89611462565b9150915060005b6127be604088018861586e565b90508110156128de576127d4604088018861586e565b828181106127e4576127e46155ed565b9050013560f81c60f81b60f81c60ff168360200151828151811061280a5761280a6155ed565b602002602001015161281c9190615956565b6001600160601b031660648460000151838151811061283d5761283d6155ed565b60200260200101516001600160601b03166128589190615985565b10156128cc5760405162461bcd60e51b815260206004820152603760248201527f7369676e61746f7269657320646f206e6f74206f776e207468726573686f6c6460448201527f2070657263656e74616765206f6620612071756f72756d0000000000000000006064820152608401610972565b806128d681615706565b9150506127b1565b506000805463ffffffff16906128f388614635565b6040805160208082018490528183018790524360e01b6001600160e01b0319166060830152825160448184030181526064830180855281519183019190912063ffffffff881660008181526001909452928590205552905191925086917fc75557c4ad49697e231449688be13ef11cb6be8ed0d18819d8dde074a5a16f8a9181900360840190a2612985826001615846565b6000805463ffffffff191663ffffffff929092169190911790555050505050505050565b60607f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316638687feae6040518163ffffffff1660e01b8152600401600060405180830381865afa158015612a09573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052612a3191908101906159a4565b905090565b336001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614612a7e5760405162461bcd60e51b815260040161097290615a1a565b604051639926ee7d60e01b81526001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001690639926ee7d90612acc9085908590600401615a92565b600060405180830381600087803b158015612ae657600080fd5b505af11580156124ee573d6000803e3d6000fd5b612b026140d5565b60405163a0169ddd60e01b81526001600160a01b0382811660048301527f0000000000000000000000000000000000000000000000000000000000000000169063a0169ddd906024015b600060405180830381600087803b158015612b6657600080fd5b505af1158015612b7a573d6000803e3d6000fd5b5050505050565b612b89614648565b60005b81811015612ea8576000805b848484818110612baa57612baa6155ed565b9050602002810190612bbc9190615add565b612bca906040810190615afd565b9050811015612c3c57848484818110612be557612be56155ed565b9050602002810190612bf79190615add565b612c05906040810190615afd565b82818110612c1557612c156155ed565b9050604002016020013582612c2a91906156ee565b9150612c3581615706565b9050612b98565b50838383818110612c4f57612c4f6155ed565b9050602002810190612c619190615add565b612c72906040810190602001614aaf565b6040516323b872dd60e01b8152336004820152306024820152604481018390526001600160a01b0391909116906323b872dd906064016020604051808303816000875af1158015612cc7573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612ceb9190615504565b506000848484818110612d0057612d006155ed565b9050602002810190612d129190615add565b612d23906040810190602001614aaf565b604051636eb1769f60e11b81523060048201526001600160a01b037f000000000000000000000000000000000000000000000000000000000000000081166024830152919091169063dd62ed3e90604401602060405180830381865afa158015612d91573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612db59190615696565b9050848484818110612dc957612dc96155ed565b9050602002810190612ddb9190615add565b612dec906040810190602001614aaf565b6001600160a01b031663095ea7b37f0000000000000000000000000000000000000000000000000000000000000000612e2584866156ee565b6040516001600160e01b031960e085901b1681526001600160a01b03909216600483015260248201526044016020604051808303816000875af1158015612e70573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612e949190615504565b50505080612ea190615706565b9050612b8c565b50604051634e5cd2fd60e11b81526001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001690639cb9a5fa90612acc90309086908690600401615c57565b336001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614612f415760405162461bcd60e51b815260040161097290615a1a565b6040516351b27a6d60e11b81526001600160a01b0382811660048301527f0000000000000000000000000000000000000000000000000000000000000000169063a364f4da90602401612b4c565b612f976140d5565b60405163a98fb35560e01b81526001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169063a98fb35590612b4c9084906004016152cd565b60607f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663bafa91076040518163ffffffff1660e01b8152600401600060405180830381865afa158015612a09573d6000803e3d6000fd5b60607f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663e15234ff6040518163ffffffff1660e01b8152600401600060405180830381865afa158015612a09573d6000803e3d6000fd5b606060007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316639aa1653d6040518163ffffffff1660e01b8152600401602060405180830381865afa158015613105573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061312991906155d0565b60ff1690508061314757505060408051600081526020810190915290565b6000805b828110156131fc57604051633ca5a5f560e01b815260ff821660048201527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031690633ca5a5f590602401602060405180830381865afa1580156131ba573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906131de9190615696565b6131e890836156ee565b9150806131f481615706565b91505061314b565b506000816001600160401b0381111561321757613217614ae5565b604051908082528060200260200182016040528015613240578160200160208202803683370190505b5090506000805b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316639aa1653d6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156132a5573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906132c991906155d0565b60ff1681101561346257604051633ca5a5f560e01b815260ff821660048201526000907f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031690633ca5a5f590602401602060405180830381865afa15801561333d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906133619190615696565b905060005b8181101561344d576040516356e4026d60e11b815260ff84166004820152602481018290527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03169063adc804da906044016040805180830381865afa1580156133db573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906133ff9190615736565b60000151858581518110613415576134156155ed565b6001600160a01b03909216602092830291909101909101528361343781615706565b945050808061344590615706565b915050613366565b5050808061345a90615706565b915050613247565b5090949350505050565b600061012c61347e620189c084615846565b6108c59190615846565b60405163ee6c3bcf60e01b815260ff821660048201526000907f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03169063ee6c3bcf90602401610b14565b60408051808201909152600080825260208201527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663ef6355296040518163ffffffff1660e01b81526004016040805180830381865afa15801561354b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612a319190615db3565b6135776140d5565b61098481614557565b6135886140d5565b6001600160a01b0381166135ed5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610972565b6109848161441b565b60fb60009054906101000a90046001600160a01b03166001600160a01b031663eab66d7a6040518163ffffffff1660e01b8152600401602060405180830381865afa158015613649573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061366d9190615521565b6001600160a01b0316336001600160a01b03161461369d5760405162461bcd60e51b81526004016109729061553e565b60fc5419811960fc5419161461371b5760405162461bcd60e51b815260206004820152603860248201527f5061757361626c652e756e70617573653a20696e76616c696420617474656d7060448201527f7420746f2070617573652066756e6374696f6e616c69747900000000000000006064820152608401610972565b60fc81905560405181815233907f3582d1828e26bf56bd801502bc021ac0bc8afb57c826e4986b45593c8fad389c90602001610abb565b61375a614648565b60005b81811015613a2e57828282818110613777576137776155ed565b90506020028101906137899190615de8565b61379a906040810190602001614aaf565b6001600160a01b03166323b872dd33308686868181106137bc576137bc6155ed565b90506020028101906137ce9190615de8565b604080516001600160e01b031960e087901b1681526001600160a01b039485166004820152939092166024840152013560448201526064016020604051808303816000875af1158015613825573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906138499190615504565b50600083838381811061385e5761385e6155ed565b90506020028101906138709190615de8565b613881906040810190602001614aaf565b604051636eb1769f60e11b81523060048201526001600160a01b037f000000000000000000000000000000000000000000000000000000000000000081166024830152919091169063dd62ed3e90604401602060405180830381865afa1580156138ef573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906139139190615696565b9050838383818110613927576139276155ed565b90506020028101906139399190615de8565b61394a906040810190602001614aaf565b6001600160a01b031663095ea7b37f00000000000000000000000000000000000000000000000000000000000000008387878781811061398c5761398c6155ed565b905060200281019061399e9190615de8565b604001356139ac91906156ee565b6040516001600160e01b031960e085901b1681526001600160a01b03909216600483015260248201526044016020604051808303816000875af11580156139f7573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613a1b9190615504565b505080613a2790615706565b905061375d565b5060405163fce36c7d60e01b81526001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169063fce36c7d90612acc9085908590600401615dfe565b6001600160a01b038116613b0b5760405162461bcd60e51b815260206004820152604960248201527f5061757361626c652e5f73657450617573657252656769737472793a206e657760448201527f50617573657252656769737472792063616e6e6f7420626520746865207a65726064820152686f206164647265737360b81b608482015260a401610972565b60fb54604080516001600160a01b03928316815291831660208301527f6e9fcd539896fca60e8b0f01dd580233e48a6b0f7df013b89ba7f565869acdb6910160405180910390a160fb80546001600160a01b0319166001600160a01b0392909216919091179055565b6040805180820190915260008082526020820152613b90614994565b835181526020808501519082015260408082018490526000908360608460076107d05a03fa9050808015613bc357613bc5565bfe5b5080613c035760405162461bcd60e51b815260206004820152600d60248201526c1958cb5b5d5b0b59985a5b1959609a1b6044820152606401610972565b505092915050565b6040805180820190915260008082526020820152613c276149b2565b835181526020808501518183015283516040808401919091529084015160608301526000908360808460066107d05a03fa9050808015613bc3575080613c035760405162461bcd60e51b815260206004820152600d60248201526c1958cb5859190b59985a5b1959609a1b6044820152606401610972565b613ca76149d0565b50604080516080810182527f198e9393920d483a7260bfb731fb5d25f1aa493335a9e71297e485b7aef312c28183019081527f1800deef121f1e76426a00665e5c4479674322d4f75edadd46debd5cd992f6ed6060830152815281518083019092527f275dc4a288d1afb3cbb1ac09187524c7db36395df7be3b99e673b13a075a65ec82527f1d9befcd05a5323e6da4d435f3b617cdb3af83285c2df711ef39c01571827f9d60208381019190915281019190915290565b604080518082019091526000808252602082015260008080613d8f600080516020615f8083398151915286615603565b90505b613d9b816146dd565b9093509150600080516020615f80833981519152828309831415613dd5576040805180820190915290815260208101919091529392505050565b600080516020615f80833981519152600182089050613d92565b604080518082018252868152602080820186905282518084019093528683528201849052600091829190613e216149f5565b60005b6002811015613fe6576000613e3a826006615985565b9050848260028110613e4e57613e4e6155ed565b60200201515183613e608360006156ee565b600c8110613e7057613e706155ed565b6020020152848260028110613e8757613e876155ed565b60200201516020015183826001613e9e91906156ee565b600c8110613eae57613eae6155ed565b6020020152838260028110613ec557613ec56155ed565b6020020151515183613ed88360026156ee565b600c8110613ee857613ee86155ed565b6020020152838260028110613eff57613eff6155ed565b6020020151516001602002015183613f188360036156ee565b600c8110613f2857613f286155ed565b6020020152838260028110613f3f57613f3f6155ed565b602002015160200151600060028110613f5a57613f5a6155ed565b602002015183613f6b8360046156ee565b600c8110613f7b57613f7b6155ed565b6020020152838260028110613f9257613f926155ed565b602002015160200151600160028110613fad57613fad6155ed565b602002015183613fbe8360056156ee565b600c8110613fce57613fce6155ed565b60200201525080613fde81615706565b915050613e24565b50613fef614a14565b60006020826101808560088cfa9151919c9115159b50909950505050505050505050565b606060008061402184614271565b61ffff166001600160401b0381111561403c5761403c614ae5565b6040519080825280601f01601f191660200182016040528015614066576020820181803683370190505b5090506000805b82518210801561407e575061010081105b15613462576001811b9350858416156140c5578060f81b8383815181106140a7576140a76155ed565b60200101906001600160f81b031916908160001a9053508160010191505b6140ce81615706565b905061406d565b6065546001600160a01b0316331461238b5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610972565b609754604080516001600160a01b03928316815291831660208301527fe11cddf1816a43318ca175bbc52cd0185436e9cbead7c83acc54a73e461717e3910160405180910390a1609780546001600160a01b0319166001600160a01b0392909216919091179055565b60c9805460ff19168215159081179091556040519081527f40e4ed880a29e0f6ddce307457fb75cddf4feef7d3ecb0301bfdf4976a0e2dfc906020015b60405180910390a150565b6000806141ec8461475f565b9050808360ff166001901b1161426a5760405162461bcd60e51b815260206004820152603f60248201527f4269746d61705574696c732e6f72646572656442797465734172726179546f4260448201527f69746d61703a206269746d61702065786365656473206d61782076616c7565006064820152608401610972565b9392505050565b6000805b82156108c557614286600184615777565b909216918061429481615edf565b915050614275565b60408051808201909152600080825260208201526102008261ffff16106142f85760405162461bcd60e51b815260206004820152601060248201526f7363616c61722d746f6f2d6c6172676560801b6044820152606401610972565b8161ffff166001141561430c5750816108c5565b6040805180820190915260008082526020820181905284906001905b8161ffff168661ffff161061437557600161ffff871660ff83161c81161415614358576143558484613c0b565b93505b6143628384613c0b565b92506201fffe600192831b169101614328565b509195945050505050565b604080518082019091526000808252602082015281511580156143a557506020820151155b156143c3575050604080518082019091526000808252602082015290565b604051806040016040528083600001518152602001600080516020615f8083398151915284602001516143f69190615603565b61440e90600080516020615f80833981519152615777565b905292915050565b919050565b606580546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b60fb546001600160a01b031615801561448e57506001600160a01b03821615155b6145105760405162461bcd60e51b815260206004820152604760248201527f5061757361626c652e5f696e697469616c697a655061757365723a205f696e6960448201527f7469616c697a6550617573657228292063616e206f6e6c792062652063616c6c6064820152666564206f6e636560c81b608482015260a401610972565b60fc81905560405181815233907fab40a374bc51de372200a8bc981af8c9ecdc08dfdaef0bb6e09f88f3c616ef3d9060200160405180910390a261455382613a7d565b5050565b6001600160a01b038116600081815260026020908152604091829020805460ff8082161560ff1990921682179092558351948552161515908301527f5c3265f5fb462ef4930fe47beaa183647c97f19ba545b761f41bc8cd4621d41491016141d5565b60006145f782604080518082019091526000808252602082015250604080518082019091528151815260609091015163ffffffff16602082015290565b6040805182516020808301919091529092015163ffffffff16908201526060015b604051602081830303815290604052805190602001209050919050565b6000816040516020016146189190615f01565b6097546001600160a01b0316331461238b5760405162461bcd60e51b815260206004820152604c60248201527f536572766963654d616e61676572426173652e6f6e6c7952657761726473496e60448201527f69746961746f723a2063616c6c6572206973206e6f742074686520726577617260648201526b32399034b734ba34b0ba37b960a11b608482015260a401610972565b60008080600080516020615f808339815191526003600080516020615f8083398151915286600080516020615f80833981519152888909090890506000614753827f0c19139cb84c680a6e14116da060561765e05aa45a1c72a34f082305b61f3f52600080516020615f808339815191526148ec565b91959194509092505050565b6000610100825111156147e85760405162461bcd60e51b8152602060048201526044602482018190527f4269746d61705574696c732e6f72646572656442797465734172726179546f42908201527f69746d61703a206f7264657265644279746573417272617920697320746f6f206064820152636c6f6e6760e01b608482015260a401610972565b81516147f657506000919050565b6000808360008151811061480c5761480c6155ed565b0160200151600160f89190911c81901b92505b84518110156148e35784818151811061483a5761483a6155ed565b0160200151600160f89190911c1b91508282116148cf5760405162461bcd60e51b815260206004820152604760248201527f4269746d61705574696c732e6f72646572656442797465734172726179546f4260448201527f69746d61703a206f72646572656442797465734172726179206973206e6f74206064820152661bdc99195c995960ca1b608482015260a401610972565b918117916148dc81615706565b905061481f565b50909392505050565b6000806148f7614a14565b6148ff614a32565b602080825281810181905260408201819052606082018890526080820187905260a082018690528260c08360056107d05a03fa9250828015613bc35750826149895760405162461bcd60e51b815260206004820152601a60248201527f424e3235342e6578704d6f643a2063616c6c206661696c7572650000000000006044820152606401610972565b505195945050505050565b60405180606001604052806003906020820280368337509192915050565b60405180608001604052806004906020820280368337509192915050565b60405180604001604052806149e3614a50565b81526020016149f0614a50565b905290565b604051806101800160405280600c906020820280368337509192915050565b60405180602001604052806001906020820280368337509192915050565b6040518060c001604052806006906020820280368337509192915050565b60405180604001604052806002906020820280368337509192915050565b60ff8116811461098457600080fd5b600060208284031215614a8f57600080fd5b813561426a81614a6e565b6001600160a01b038116811461098457600080fd5b600060208284031215614ac157600080fd5b813561426a81614a9a565b600060208284031215614ade57600080fd5b5035919050565b634e487b7160e01b600052604160045260246000fd5b604080519081016001600160401b0381118282101715614b1d57614b1d614ae5565b60405290565b60405161010081016001600160401b0381118282101715614b1d57614b1d614ae5565b604051601f8201601f191681016001600160401b0381118282101715614b6e57614b6e614ae5565b604052919050565b600060408284031215614b8857600080fd5b614b90614afb565b9050813581526020820135602082015292915050565b600082601f830112614bb757600080fd5b614bbf614afb565b806040840185811115614bd157600080fd5b845b81811015614beb578035845260209384019301614bd3565b509095945050505050565b600060808284031215614c0857600080fd5b614c10614afb565b9050614c1c8383614ba6565b8152614c2b8360408401614ba6565b602082015292915050565b6000806000806101208587031215614c4d57600080fd5b84359350614c5e8660208701614b76565b9250614c6d8660608701614bf6565b9150614c7c8660e08701614b76565b905092959194509250565b600060208284031215614c9957600080fd5b813561ffff8116811461426a57600080fd5b803561441681614a9a565b6020808252825182820181905260009190848201906040850190845b81811015614cf75783516001600160a01b031683529284019291840191600101614cd2565b50909695505050505050565b801515811461098457600080fd5b600060208284031215614d2357600080fd5b813561426a81614d03565b63ffffffff8116811461098457600080fd5b803561441681614d2e565b60006001600160401b03821115614d6457614d64614ae5565b5060051b60200190565b600082601f830112614d7f57600080fd5b81356020614d94614d8f83614d4b565b614b46565b82815260059290921b84018101918181019086841115614db357600080fd5b8286015b84811015614dd7578035614dca81614d2e565b8352918301918301614db7565b509695505050505050565b600082601f830112614df357600080fd5b81356020614e03614d8f83614d4b565b82815260069290921b84018101918181019086841115614e2257600080fd5b8286015b84811015614dd757614e388882614b76565b835291830191604001614e26565b600082601f830112614e5757600080fd5b81356020614e67614d8f83614d4b565b82815260059290921b84018101918181019086841115614e8657600080fd5b8286015b84811015614dd75780356001600160401b03811115614ea95760008081fd5b614eb78986838b0101614d6e565b845250918301918301614e8a565b60006101808284031215614ed857600080fd5b614ee0614b23565b905081356001600160401b0380821115614ef957600080fd5b614f0585838601614d6e565b83526020840135915080821115614f1b57600080fd5b614f2785838601614de2565b60208401526040840135915080821115614f4057600080fd5b614f4c85838601614de2565b6040840152614f5e8560608601614bf6565b6060840152614f708560e08601614b76565b6080840152610120840135915080821115614f8a57600080fd5b614f9685838601614d6e565b60a0840152610140840135915080821115614fb057600080fd5b614fbc85838601614d6e565b60c0840152610160840135915080821115614fd657600080fd5b50614fe384828501614e46565b60e08301525092915050565b60008060008060006080868803121561500757600080fd5b8535945060208601356001600160401b038082111561502557600080fd5b818801915088601f83011261503957600080fd5b81358181111561504857600080fd5b89602082850101111561505a57600080fd5b602083019650945061506e60408901614d40565b9350606088013591508082111561508457600080fd5b5061509188828901614ec5565b9150509295509295909350565b600081518084526020808501945080840160005b838110156150d75781516001600160601b0316875295820195908201906001016150b2565b509495945050505050565b60408152600083516040808401526150fd608084018261509e565b90506020850151603f1984830301606085015261511a828261509e565b925050508260208301529392505050565b600080600080600060a0868803121561514357600080fd5b853561514e81614a9a565b94506020868101359450604087013561516681614a9a565b935060608701356001600160401b0381111561518157600080fd5b8701601f8101891361519257600080fd5b80356151a0614d8f82614d4b565b81815260059190911b8201830190838101908b8311156151bf57600080fd5b928401925b828410156151e65783356151d781614a9a565b825292840192908401906151c4565b80965050505050506151fa60808701614cab565b90509295509295909350565b6000806040838503121561521957600080fd5b82356001600160401b038082111561523057600080fd5b908401906080828703121561524457600080fd5b9092506020840135908082111561525a57600080fd5b5061526785828601614ec5565b9150509250929050565b60005b8381101561528c578181015183820152602001615274565b8381111561529b576000848401525b50505050565b600081518084526152b9816020860160208601615271565b601f01601f19169290920160200192915050565b60208152600061426a60208301846152a1565b60006001600160401b038211156152f9576152f9614ae5565b50601f01601f191660200190565b6000615315614d8f846152e0565b905082815283838301111561532957600080fd5b828260208301376000602084830101529392505050565b600082601f83011261535157600080fd5b61426a83833560208501615307565b6000806040838503121561537357600080fd5b823561537e81614a9a565b915060208301356001600160401b038082111561539a57600080fd5b90840190606082870312156153ae57600080fd5b6040516060810181811083821117156153c9576153c9614ae5565b6040528235828111156153db57600080fd5b6153e788828601615340565b82525060208301356020820152604083013560408201528093505050509250929050565b60008083601f84011261541d57600080fd5b5081356001600160401b0381111561543457600080fd5b6020830191508360208260051b850101111561544f57600080fd5b9250929050565b6000806020838503121561546957600080fd5b82356001600160401b0381111561547f57600080fd5b61548b8582860161540b565b90969095509350505050565b6000602082840312156154a957600080fd5b81356001600160401b038111156154bf57600080fd5b8201601f810184136154d057600080fd5b6154df84823560208401615307565b949350505050565b6000602082840312156154f957600080fd5b813561426a81614d2e565b60006020828403121561551657600080fd5b815161426a81614d03565b60006020828403121561553357600080fd5b815161426a81614a9a565b6020808252602a908201527f6d73672e73656e646572206973206e6f74207065726d697373696f6e6564206160408201526939903ab73830bab9b2b960b11b606082015260800190565b60208082526028908201527f6d73672e73656e646572206973206e6f74207065726d697373696f6e6564206160408201526739903830bab9b2b960c11b606082015260800190565b6000602082840312156155e257600080fd5b815161426a81614a6e565b634e487b7160e01b600052603260045260246000fd5b60008261562057634e487b7160e01b600052601260045260246000fd5b500690565b60006060828403121561563757600080fd5b604051606081018181106001600160401b038211171561565957615659614ae5565b604052825161566781614d2e565b8152602083015161567781614d2e565b6020820152604083015161568a81614a6e565b60408201529392505050565b6000602082840312156156a857600080fd5b5051919050565b6000602082840312156156c157600080fd5b81516001600160c01b038116811461426a57600080fd5b634e487b7160e01b600052601160045260246000fd5b60008219821115615701576157016156d8565b500190565b600060001982141561571a5761571a6156d8565b5060010190565b6001600160601b038116811461098457600080fd5b60006040828403121561574857600080fd5b615750614afb565b825161575b81614a9a565b8152602083015161576b81615721565b60208201529392505050565b600082821015615789576157896156d8565b500390565b6000602082840312156157a057600080fd5b815167ffffffffffffffff198116811461426a57600080fd5b6000602082840312156157cb57600080fd5b815161426a81615721565b60006001600160601b03838116908316818110156157f6576157f66156d8565b039392505050565b63ffffffff60e01b8360e01b1681526000600482018351602080860160005b838110156158395781518552938201939082019060010161581d565b5092979650505050505050565b600063ffffffff808316818516808303821115615865576158656156d8565b01949350505050565b6000808335601e1984360301811261588557600080fd5b8301803591506001600160401b0382111561589f57600080fd5b60200191503681900382131561544f57600080fd5b6000608082360312156158c657600080fd5b604051608081016001600160401b0382821081831117156158e9576158e9614ae5565b8160405284358352602085013591508082111561590557600080fd5b61591136838701615340565b6020840152604085013591508082111561592a57600080fd5b5061593736828601615340565b604083015250606083013561594b81614d2e565b606082015292915050565b60006001600160601b038083168185168183048111821515161561597c5761597c6156d8565b02949350505050565b600081600019048311821515161561599f5761599f6156d8565b500290565b6000602082840312156159b657600080fd5b81516001600160401b038111156159cc57600080fd5b8201601f810184136159dd57600080fd5b80516159eb614d8f826152e0565b818152856020838501011115615a0057600080fd5b615a11826020830160208601615271565b95945050505050565b60208082526052908201527f536572766963654d616e61676572426173652e6f6e6c7952656769737472794360408201527f6f6f7264696e61746f723a2063616c6c6572206973206e6f742074686520726560608201527133b4b9ba393c9031b7b7b93234b730ba37b960711b608082015260a00190565b60018060a01b0383168152604060208201526000825160606040840152615abc60a08401826152a1565b90506020840151606084015260408401516080840152809150509392505050565b6000823560be19833603018112615af357600080fd5b9190910192915050565b6000808335601e19843603018112615b1457600080fd5b8301803591506001600160401b03821115615b2e57600080fd5b6020019150600681901b360382131561544f57600080fd5b6000808335601e19843603018112615b5d57600080fd5b83016020810192503590506001600160401b03811115615b7c57600080fd5b8060061b360383131561544f57600080fd5b8183526000602080850194508260005b858110156150d7578135615bb181614a9a565b6001600160a01b0316875281830135615bc981615721565b6001600160601b0316878401526040968701969190910190600101615b9e565b6000808335601e19843603018112615c0057600080fd5b83016020810192503590506001600160401b03811115615c1f57600080fd5b80360383131561544f57600080fd5b81835281816020850137506000828201602090810191909152601f909101601f19169091010190565b6001600160a01b03848116825260406020808401829052838201859052600092606091828601600588901b8701840189875b8a811015615da257898303605f190184528135368d900360be19018112615caf57600080fd5b8c0160c0615cbd8280615b46565b828752615ccd8388018284615b8e565b9250505086820135615cde81614a9a565b881685880152615cf0828b0183615b46565b8683038c88015280835290916000919089015b81831015615d34578335615d1681614a9a565b8b168152838a01358a820152928c0192600192909201918c01615d03565b615d3f8c8601614d40565b63ffffffff168c89015260809350615d58858501614d40565b63ffffffff811689860152925060a09350615d7584860186615be9565b9550925087810384890152615d8b818685615c2e565b988a01989750505093870193505050600101615c89565b50909b9a5050505050505050505050565b600060408284031215615dc557600080fd5b615dcd614afb565b8251615dd881614a6e565b8152602083015161576b81614a6e565b60008235609e19833603018112615af357600080fd5b60208082528181018390526000906040808401600586901b850182018785805b89811015615ed057888403603f190185528235368c9003609e19018112615e43578283fd5b8b0160a0615e518280615b46565b828852615e618389018284615b8e565b9250505088820135615e7281614a9a565b6001600160a01b0316868a01528188013588870152606080830135615e9681614d2e565b63ffffffff808216838a015260809250828501359450615eb585614d2e565b93909316960195909552509386019391860191600101615e1e565b50919998505050505050505050565b600061ffff80831681811415615ef757615ef76156d8565b6001019392505050565b60208152813560208201526000615f1b6020840184615be9565b60806040850152615f3060a085018284615c2e565b915050615f406040850185615be9565b848303601f19016060860152615f57838284615c2e565b925050506060840135615f6981614d2e565b63ffffffff16608093909301929092525091905056fe30644e72e131a029b85045b68181585d97816a916871ca8d3c208c16d87cfd47424c535369676e6174757265436865636b65722e636865636b5369676e617475a2646970667358221220663fbbad38197079fa88249ded5a19930d18568bc3f117b051aac8dc58e55e3d64736f6c634300080c0033", } // ContractEigenDAServiceManagerABI is the input ABI used to generate the binding from. diff --git a/contracts/bindings/EigenDAThresholdRegistry/binding.go b/contracts/bindings/EigenDAThresholdRegistry/binding.go index f07d02dacb..94729f0c55 100644 --- a/contracts/bindings/EigenDAThresholdRegistry/binding.go +++ b/contracts/bindings/EigenDAThresholdRegistry/binding.go @@ -45,7 +45,7 @@ type VersionedBlobParams struct { // ContractEigenDAThresholdRegistryMetaData contains all meta data concerning the ContractEigenDAThresholdRegistry contract. var ContractEigenDAThresholdRegistryMetaData = &bind.MetaData{ ABI: "[{\"type\":\"constructor\",\"inputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"addVersionedBlobParams\",\"inputs\":[{\"name\":\"_versionedBlobParams\",\"type\":\"tuple\",\"internalType\":\"structVersionedBlobParams\",\"components\":[{\"name\":\"maxNumOperators\",\"type\":\"uint32\",\"internalType\":\"uint32\"},{\"name\":\"numChunks\",\"type\":\"uint32\",\"internalType\":\"uint32\"},{\"name\":\"codingRate\",\"type\":\"uint8\",\"internalType\":\"uint8\"}]}],\"outputs\":[{\"name\":\"\",\"type\":\"uint16\",\"internalType\":\"uint16\"}],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"defaultSecurityThresholdsV2\",\"inputs\":[],\"outputs\":[{\"name\":\"confirmationThreshold\",\"type\":\"uint8\",\"internalType\":\"uint8\"},{\"name\":\"adversaryThreshold\",\"type\":\"uint8\",\"internalType\":\"uint8\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"getBlobParams\",\"inputs\":[{\"name\":\"version\",\"type\":\"uint16\",\"internalType\":\"uint16\"}],\"outputs\":[{\"name\":\"\",\"type\":\"tuple\",\"internalType\":\"structVersionedBlobParams\",\"components\":[{\"name\":\"maxNumOperators\",\"type\":\"uint32\",\"internalType\":\"uint32\"},{\"name\":\"numChunks\",\"type\":\"uint32\",\"internalType\":\"uint32\"},{\"name\":\"codingRate\",\"type\":\"uint8\",\"internalType\":\"uint8\"}]}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"getDefaultSecurityThresholdsV2\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"tuple\",\"internalType\":\"structSecurityThresholds\",\"components\":[{\"name\":\"confirmationThreshold\",\"type\":\"uint8\",\"internalType\":\"uint8\"},{\"name\":\"adversaryThreshold\",\"type\":\"uint8\",\"internalType\":\"uint8\"}]}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"getIsQuorumRequired\",\"inputs\":[{\"name\":\"quorumNumber\",\"type\":\"uint8\",\"internalType\":\"uint8\"}],\"outputs\":[{\"name\":\"\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"getQuorumAdversaryThresholdPercentage\",\"inputs\":[{\"name\":\"quorumNumber\",\"type\":\"uint8\",\"internalType\":\"uint8\"}],\"outputs\":[{\"name\":\"adversaryThresholdPercentage\",\"type\":\"uint8\",\"internalType\":\"uint8\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"getQuorumConfirmationThresholdPercentage\",\"inputs\":[{\"name\":\"quorumNumber\",\"type\":\"uint8\",\"internalType\":\"uint8\"}],\"outputs\":[{\"name\":\"confirmationThresholdPercentage\",\"type\":\"uint8\",\"internalType\":\"uint8\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"initialize\",\"inputs\":[{\"name\":\"_initialOwner\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"_quorumAdversaryThresholdPercentages\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"_quorumConfirmationThresholdPercentages\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"_quorumNumbersRequired\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"_versionedBlobParams\",\"type\":\"tuple[]\",\"internalType\":\"structVersionedBlobParams[]\",\"components\":[{\"name\":\"maxNumOperators\",\"type\":\"uint32\",\"internalType\":\"uint32\"},{\"name\":\"numChunks\",\"type\":\"uint32\",\"internalType\":\"uint32\"},{\"name\":\"codingRate\",\"type\":\"uint8\",\"internalType\":\"uint8\"}]},{\"name\":\"_defaultSecurityThresholdsV2\",\"type\":\"tuple\",\"internalType\":\"structSecurityThresholds\",\"components\":[{\"name\":\"confirmationThreshold\",\"type\":\"uint8\",\"internalType\":\"uint8\"},{\"name\":\"adversaryThreshold\",\"type\":\"uint8\",\"internalType\":\"uint8\"}]}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"nextBlobVersion\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"uint16\",\"internalType\":\"uint16\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"owner\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"quorumAdversaryThresholdPercentages\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bytes\",\"internalType\":\"bytes\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"quorumConfirmationThresholdPercentages\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bytes\",\"internalType\":\"bytes\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"quorumNumbersRequired\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bytes\",\"internalType\":\"bytes\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"renounceOwnership\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"transferOwnership\",\"inputs\":[{\"name\":\"newOwner\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"versionedBlobParams\",\"inputs\":[{\"name\":\"\",\"type\":\"uint16\",\"internalType\":\"uint16\"}],\"outputs\":[{\"name\":\"maxNumOperators\",\"type\":\"uint32\",\"internalType\":\"uint32\"},{\"name\":\"numChunks\",\"type\":\"uint32\",\"internalType\":\"uint32\"},{\"name\":\"codingRate\",\"type\":\"uint8\",\"internalType\":\"uint8\"}],\"stateMutability\":\"view\"},{\"type\":\"event\",\"name\":\"DefaultSecurityThresholdsV2Updated\",\"inputs\":[{\"name\":\"previousDefaultSecurityThresholdsV2\",\"type\":\"tuple\",\"indexed\":false,\"internalType\":\"structSecurityThresholds\",\"components\":[{\"name\":\"confirmationThreshold\",\"type\":\"uint8\",\"internalType\":\"uint8\"},{\"name\":\"adversaryThreshold\",\"type\":\"uint8\",\"internalType\":\"uint8\"}]},{\"name\":\"newDefaultSecurityThresholdsV2\",\"type\":\"tuple\",\"indexed\":false,\"internalType\":\"structSecurityThresholds\",\"components\":[{\"name\":\"confirmationThreshold\",\"type\":\"uint8\",\"internalType\":\"uint8\"},{\"name\":\"adversaryThreshold\",\"type\":\"uint8\",\"internalType\":\"uint8\"}]}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"Initialized\",\"inputs\":[{\"name\":\"version\",\"type\":\"uint8\",\"indexed\":false,\"internalType\":\"uint8\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"OwnershipTransferred\",\"inputs\":[{\"name\":\"previousOwner\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"newOwner\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"QuorumAdversaryThresholdPercentagesUpdated\",\"inputs\":[{\"name\":\"previousQuorumAdversaryThresholdPercentages\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"},{\"name\":\"newQuorumAdversaryThresholdPercentages\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"QuorumConfirmationThresholdPercentagesUpdated\",\"inputs\":[{\"name\":\"previousQuorumConfirmationThresholdPercentages\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"},{\"name\":\"newQuorumConfirmationThresholdPercentages\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"QuorumNumbersRequiredUpdated\",\"inputs\":[{\"name\":\"previousQuorumNumbersRequired\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"},{\"name\":\"newQuorumNumbersRequired\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"VersionedBlobParamsAdded\",\"inputs\":[{\"name\":\"version\",\"type\":\"uint16\",\"indexed\":true,\"internalType\":\"uint16\"},{\"name\":\"versionedBlobParams\",\"type\":\"tuple\",\"indexed\":false,\"internalType\":\"structVersionedBlobParams\",\"components\":[{\"name\":\"maxNumOperators\",\"type\":\"uint32\",\"internalType\":\"uint32\"},{\"name\":\"numChunks\",\"type\":\"uint32\",\"internalType\":\"uint32\"},{\"name\":\"codingRate\",\"type\":\"uint8\",\"internalType\":\"uint8\"}]}],\"anonymous\":false}]", - Bin: "0x608060405234801561001057600080fd5b5061001961001e565b6100de565b603254610100900460ff161561008a5760405162461bcd60e51b815260206004820152602760248201527f496e697469616c697a61626c653a20636f6e747261637420697320696e697469604482015266616c697a696e6760c81b606482015260840160405180910390fd5b60325460ff90811610156100dc576032805460ff191660ff9081179091556040519081527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b565b611061806100ed6000396000f3fe608060405234801561001057600080fd5b50600436106101005760003560e01c80638da5cb5b11610097578063ef63552911610066578063ef635529146102b3578063f2fde38b146102fe578063f74e363c14610311578063fb87355e1461037657600080fd5b80638da5cb5b14610275578063bafa910714610290578063e15234ff14610298578063ee6c3bcf146102a057600080fd5b806332430f14116100d357806332430f1414610222578063715018a6146102435780638687feae1461024d5780638a4769821461026257600080fd5b8063048886d2146101055780631429c7c21461012d5780631c3970fa146101525780632ecfe72b14610182575b600080fd5b610118610113366004610bae565b610389565b60405190151581526020015b60405180910390f35b61014061013b366004610bae565b610433565b60405160ff9091168152602001610124565b6005546101689060ff8082169161010090041682565b6040805160ff938416815292909116602083015201610124565b6101f2610190366004610bd0565b60408051606080820183526000808352602080840182905292840181905261ffff9490941684526004825292829020825193840183525463ffffffff808216855264010000000082041691840191909152600160401b900460ff169082015290565b60408051825163ffffffff9081168252602080850151909116908201529181015160ff1690820152606001610124565b6003546102309061ffff1681565b60405161ffff9091168152602001610124565b61024b6104a1565b005b6102556104b5565b6040516101249190610bf4565b610230610270366004610d13565b610543565b6065546040516001600160a01b039091168152602001610124565b61025561055c565b610255610569565b6101406102ae366004610bae565b610576565b60408051808201825260008082526020918201528151808301835260055460ff8082168084526101009092048116928401928352845191825291519091169181019190915201610124565b61024b61030c366004610d46565b6105a2565b61035061031f366004610bd0565b60046020526000908152604090205463ffffffff80821691640100000000810490911690600160401b900460ff1683565b6040805163ffffffff948516815293909216602084015260ff1690820152606001610124565b61024b610384366004610eb9565b610620565b600080600160ff84161b905080610429600280546103a690610f87565b80601f01602080910402602001604051908101604052809291908181526020018280546103d290610f87565b801561041f5780601f106103f45761010080835404028352916020019161041f565b820191906000526020600020905b81548152906001019060200180831161040257829003601f168201915b50505050506107db565b9091161492915050565b60008160ff166001805461044690610f87565b9050111561049c5760018260ff16815461045f90610f87565b811061046d5761046d610fc2565b81546001161561048c5790600052602060002090602091828204019190065b9054901a600160f81b0260f81c90505b919050565b6104a9610968565b6104b360006109c2565b565b600080546104c290610f87565b80601f01602080910402602001604051908101604052809291908181526020018280546104ee90610f87565b801561053b5780601f106105105761010080835404028352916020019161053b565b820191906000526020600020905b81548152906001019060200180831161051e57829003601f168201915b505050505081565b600061054d610968565b61055682610a14565b92915050565b600180546104c290610f87565b600280546104c290610f87565b60008160ff166000805461058990610f87565b9050111561049c5760008260ff16815461045f90610f87565b6105aa610968565b6001600160a01b0381166106145760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b60648201526084015b60405180910390fd5b61061d816109c2565b50565b603254610100900460ff16158080156106405750603254600160ff909116105b8061065a5750303b15801561065a575060325460ff166001145b6106bd5760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b606482015260840161060b565b6032805460ff1916600117905580156106e0576032805461ff0019166101001790555b6106e9876109c2565b85516106fc906000906020890190610b04565b508451610710906001906020880190610b04565b508351610724906002906020870190610b04565b50815160058054602085015160ff9081166101000261ffff1990921693169290921791909117905560005b835181101561078b5761077a84828151811061076d5761076d610fc2565b6020026020010151610a14565b5061078481610fee565b905061074f565b5080156107d2576032805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b50505050505050565b6000610100825111156108645760405162461bcd60e51b8152602060048201526044602482018190527f4269746d61705574696c732e6f72646572656442797465734172726179546f42908201527f69746d61703a206f7264657265644279746573417272617920697320746f6f206064820152636c6f6e6760e01b608482015260a40161060b565b815161087257506000919050565b6000808360008151811061088857610888610fc2565b0160200151600160f89190911c81901b92505b845181101561095f578481815181106108b6576108b6610fc2565b0160200151600160f89190911c1b915082821161094b5760405162461bcd60e51b815260206004820152604760248201527f4269746d61705574696c732e6f72646572656442797465734172726179546f4260448201527f69746d61703a206f72646572656442797465734172726179206973206e6f74206064820152661bdc99195c995960ca1b608482015260a40161060b565b9181179161095881610fee565b905061089b565b50909392505050565b6065546001600160a01b031633146104b35760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640161060b565b606580546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b6003805461ffff90811660009081526004602090815260408083208651815488850180518a8601805163ffffffff95861667ffffffffffffffff199095168517640100000000938716939093029290921768ff00000000000000001916600160401b60ff9384160217909555985485519283529051909216948101949094529051909516908201529092909116907fdbee9d337a6e5fde30966e157673aaeeb6a0134afaf774a4b6979b7c79d07da49060600160405180910390a26003805461ffff16906000610ae383611009565b91906101000a81548161ffff021916908361ffff1602179055509050919050565b828054610b1090610f87565b90600052602060002090601f016020900481019282610b325760008555610b78565b82601f10610b4b57805160ff1916838001178555610b78565b82800160010185558215610b78579182015b82811115610b78578251825591602001919060010190610b5d565b50610b84929150610b88565b5090565b5b80821115610b845760008155600101610b89565b803560ff8116811461049c57600080fd5b600060208284031215610bc057600080fd5b610bc982610b9d565b9392505050565b600060208284031215610be257600080fd5b813561ffff81168114610bc957600080fd5b600060208083528351808285015260005b81811015610c2157858101830151858201604001528201610c05565b81811115610c33576000604083870101525b50601f01601f1916929092016040019392505050565b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f1916810167ffffffffffffffff81118282101715610c8857610c88610c49565b604052919050565b803563ffffffff8116811461049c57600080fd5b600060608284031215610cb657600080fd5b6040516060810181811067ffffffffffffffff82111715610cd957610cd9610c49565b604052905080610ce883610c90565b8152610cf660208401610c90565b6020820152610d0760408401610b9d565b60408201525092915050565b600060608284031215610d2557600080fd5b610bc98383610ca4565b80356001600160a01b038116811461049c57600080fd5b600060208284031215610d5857600080fd5b610bc982610d2f565b600082601f830112610d7257600080fd5b813567ffffffffffffffff811115610d8c57610d8c610c49565b610d9f601f8201601f1916602001610c5f565b818152846020838601011115610db457600080fd5b816020850160208301376000918101602001919091529392505050565b600082601f830112610de257600080fd5b8135602067ffffffffffffffff821115610dfe57610dfe610c49565b610e0c818360051b01610c5f565b82815260609283028501820192828201919087851115610e2b57600080fd5b8387015b85811015610e4e57610e418982610ca4565b8452928401928101610e2f565b5090979650505050505050565b600060408284031215610e6d57600080fd5b6040516040810181811067ffffffffffffffff82111715610e9057610e90610c49565b604052905080610e9f83610b9d565b8152610ead60208401610b9d565b60208201525092915050565b60008060008060008060e08789031215610ed257600080fd5b610edb87610d2f565b9550602087013567ffffffffffffffff80821115610ef857600080fd5b610f048a838b01610d61565b96506040890135915080821115610f1a57600080fd5b610f268a838b01610d61565b95506060890135915080821115610f3c57600080fd5b610f488a838b01610d61565b94506080890135915080821115610f5e57600080fd5b50610f6b89828a01610dd1565b925050610f7b8860a08901610e5b565b90509295509295509295565b600181811c90821680610f9b57607f821691505b60208210811415610fbc57634e487b7160e01b600052602260045260246000fd5b50919050565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052601160045260246000fd5b600060001982141561100257611002610fd8565b5060010190565b600061ffff8083168181141561102157611021610fd8565b600101939250505056fea2646970667358221220219ac314cadf1418a2636ee38048e08adb87ac620c7ee73fd441a4328495707464736f6c634300080c0033", + Bin: "0x608060405234801561001057600080fd5b5061001961001e565b6100de565b603254610100900460ff161561008a5760405162461bcd60e51b815260206004820152602760248201527f496e697469616c697a61626c653a20636f6e747261637420697320696e697469604482015266616c697a696e6760c81b606482015260840160405180910390fd5b60325460ff90811610156100dc576032805460ff191660ff9081179091556040519081527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b565b611061806100ed6000396000f3fe608060405234801561001057600080fd5b50600436106101005760003560e01c80638da5cb5b11610097578063ef63552911610066578063ef635529146102b3578063f2fde38b146102fe578063f74e363c14610311578063fb87355e1461037657600080fd5b80638da5cb5b14610275578063bafa910714610290578063e15234ff14610298578063ee6c3bcf146102a057600080fd5b806332430f14116100d357806332430f1414610222578063715018a6146102435780638687feae1461024d5780638a4769821461026257600080fd5b8063048886d2146101055780631429c7c21461012d5780631c3970fa146101525780632ecfe72b14610182575b600080fd5b610118610113366004610bae565b610389565b60405190151581526020015b60405180910390f35b61014061013b366004610bae565b610433565b60405160ff9091168152602001610124565b6005546101689060ff8082169161010090041682565b6040805160ff938416815292909116602083015201610124565b6101f2610190366004610bd0565b60408051606080820183526000808352602080840182905292840181905261ffff9490941684526004825292829020825193840183525463ffffffff808216855264010000000082041691840191909152600160401b900460ff169082015290565b60408051825163ffffffff9081168252602080850151909116908201529181015160ff1690820152606001610124565b6003546102309061ffff1681565b60405161ffff9091168152602001610124565b61024b6104a1565b005b6102556104b5565b6040516101249190610bf4565b610230610270366004610d13565b610543565b6065546040516001600160a01b039091168152602001610124565b61025561055c565b610255610569565b6101406102ae366004610bae565b610576565b60408051808201825260008082526020918201528151808301835260055460ff8082168084526101009092048116928401928352845191825291519091169181019190915201610124565b61024b61030c366004610d46565b6105a2565b61035061031f366004610bd0565b60046020526000908152604090205463ffffffff80821691640100000000810490911690600160401b900460ff1683565b6040805163ffffffff948516815293909216602084015260ff1690820152606001610124565b61024b610384366004610eb9565b610620565b600080600160ff84161b905080610429600280546103a690610f87565b80601f01602080910402602001604051908101604052809291908181526020018280546103d290610f87565b801561041f5780601f106103f45761010080835404028352916020019161041f565b820191906000526020600020905b81548152906001019060200180831161040257829003601f168201915b50505050506107db565b9091161492915050565b60008160ff166001805461044690610f87565b9050111561049c5760018260ff16815461045f90610f87565b811061046d5761046d610fc2565b81546001161561048c5790600052602060002090602091828204019190065b9054901a600160f81b0260f81c90505b919050565b6104a9610968565b6104b360006109c2565b565b600080546104c290610f87565b80601f01602080910402602001604051908101604052809291908181526020018280546104ee90610f87565b801561053b5780601f106105105761010080835404028352916020019161053b565b820191906000526020600020905b81548152906001019060200180831161051e57829003601f168201915b505050505081565b600061054d610968565b61055682610a14565b92915050565b600180546104c290610f87565b600280546104c290610f87565b60008160ff166000805461058990610f87565b9050111561049c5760008260ff16815461045f90610f87565b6105aa610968565b6001600160a01b0381166106145760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b60648201526084015b60405180910390fd5b61061d816109c2565b50565b603254610100900460ff16158080156106405750603254600160ff909116105b8061065a5750303b15801561065a575060325460ff166001145b6106bd5760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b606482015260840161060b565b6032805460ff1916600117905580156106e0576032805461ff0019166101001790555b6106e9876109c2565b85516106fc906000906020890190610b04565b508451610710906001906020880190610b04565b508351610724906002906020870190610b04565b50815160058054602085015160ff9081166101000261ffff1990921693169290921791909117905560005b835181101561078b5761077a84828151811061076d5761076d610fc2565b6020026020010151610a14565b5061078481610fee565b905061074f565b5080156107d2576032805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b50505050505050565b6000610100825111156108645760405162461bcd60e51b8152602060048201526044602482018190527f4269746d61705574696c732e6f72646572656442797465734172726179546f42908201527f69746d61703a206f7264657265644279746573417272617920697320746f6f206064820152636c6f6e6760e01b608482015260a40161060b565b815161087257506000919050565b6000808360008151811061088857610888610fc2565b0160200151600160f89190911c81901b92505b845181101561095f578481815181106108b6576108b6610fc2565b0160200151600160f89190911c1b915082821161094b5760405162461bcd60e51b815260206004820152604760248201527f4269746d61705574696c732e6f72646572656442797465734172726179546f4260448201527f69746d61703a206f72646572656442797465734172726179206973206e6f74206064820152661bdc99195c995960ca1b608482015260a40161060b565b9181179161095881610fee565b905061089b565b50909392505050565b6065546001600160a01b031633146104b35760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640161060b565b606580546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b6003805461ffff90811660009081526004602090815260408083208651815488850180518a8601805163ffffffff95861667ffffffffffffffff199095168517640100000000938716939093029290921768ff00000000000000001916600160401b60ff9384160217909555985485519283529051909216948101949094529051909516908201529092909116907fdbee9d337a6e5fde30966e157673aaeeb6a0134afaf774a4b6979b7c79d07da49060600160405180910390a26003805461ffff16906000610ae383611009565b91906101000a81548161ffff021916908361ffff1602179055509050919050565b828054610b1090610f87565b90600052602060002090601f016020900481019282610b325760008555610b78565b82601f10610b4b57805160ff1916838001178555610b78565b82800160010185558215610b78579182015b82811115610b78578251825591602001919060010190610b5d565b50610b84929150610b88565b5090565b5b80821115610b845760008155600101610b89565b803560ff8116811461049c57600080fd5b600060208284031215610bc057600080fd5b610bc982610b9d565b9392505050565b600060208284031215610be257600080fd5b813561ffff81168114610bc957600080fd5b600060208083528351808285015260005b81811015610c2157858101830151858201604001528201610c05565b81811115610c33576000604083870101525b50601f01601f1916929092016040019392505050565b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f1916810167ffffffffffffffff81118282101715610c8857610c88610c49565b604052919050565b803563ffffffff8116811461049c57600080fd5b600060608284031215610cb657600080fd5b6040516060810181811067ffffffffffffffff82111715610cd957610cd9610c49565b604052905080610ce883610c90565b8152610cf660208401610c90565b6020820152610d0760408401610b9d565b60408201525092915050565b600060608284031215610d2557600080fd5b610bc98383610ca4565b80356001600160a01b038116811461049c57600080fd5b600060208284031215610d5857600080fd5b610bc982610d2f565b600082601f830112610d7257600080fd5b813567ffffffffffffffff811115610d8c57610d8c610c49565b610d9f601f8201601f1916602001610c5f565b818152846020838601011115610db457600080fd5b816020850160208301376000918101602001919091529392505050565b600082601f830112610de257600080fd5b8135602067ffffffffffffffff821115610dfe57610dfe610c49565b610e0c818360051b01610c5f565b82815260609283028501820192828201919087851115610e2b57600080fd5b8387015b85811015610e4e57610e418982610ca4565b8452928401928101610e2f565b5090979650505050505050565b600060408284031215610e6d57600080fd5b6040516040810181811067ffffffffffffffff82111715610e9057610e90610c49565b604052905080610e9f83610b9d565b8152610ead60208401610b9d565b60208201525092915050565b60008060008060008060e08789031215610ed257600080fd5b610edb87610d2f565b9550602087013567ffffffffffffffff80821115610ef857600080fd5b610f048a838b01610d61565b96506040890135915080821115610f1a57600080fd5b610f268a838b01610d61565b95506060890135915080821115610f3c57600080fd5b610f488a838b01610d61565b94506080890135915080821115610f5e57600080fd5b50610f6b89828a01610dd1565b925050610f7b8860a08901610e5b565b90509295509295509295565b600181811c90821680610f9b57607f821691505b60208210811415610fbc57634e487b7160e01b600052602260045260246000fd5b50919050565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052601160045260246000fd5b600060001982141561100257611002610fd8565b5060010190565b600061ffff8083168181141561102157611021610fd8565b600101939250505056fea2646970667358221220614736f842321306d867e194c1ccf72c8ca5262e87582b571aa615ab9e4c09ef64736f6c634300080c0033", } // ContractEigenDAThresholdRegistryABI is the input ABI used to generate the binding from. diff --git a/contracts/bindings/MockRollup/binding.go b/contracts/bindings/MockRollup/binding.go index 332f01f4c7..7727242333 100644 --- a/contracts/bindings/MockRollup/binding.go +++ b/contracts/bindings/MockRollup/binding.go @@ -83,7 +83,7 @@ type QuorumBlobParam struct { // ContractMockRollupMetaData contains all meta data concerning the ContractMockRollup contract. var ContractMockRollupMetaData = &bind.MetaData{ ABI: "[{\"type\":\"constructor\",\"inputs\":[{\"name\":\"_eigenDAServiceManager\",\"type\":\"address\",\"internalType\":\"contractIEigenDAServiceManager\"},{\"name\":\"_tau\",\"type\":\"tuple\",\"internalType\":\"structBN254.G1Point\",\"components\":[{\"name\":\"X\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"Y\",\"type\":\"uint256\",\"internalType\":\"uint256\"}]}],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"challengeCommitment\",\"inputs\":[{\"name\":\"timestamp\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"point\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"proof\",\"type\":\"tuple\",\"internalType\":\"structBN254.G2Point\",\"components\":[{\"name\":\"X\",\"type\":\"uint256[2]\",\"internalType\":\"uint256[2]\"},{\"name\":\"Y\",\"type\":\"uint256[2]\",\"internalType\":\"uint256[2]\"}]},{\"name\":\"challengeValue\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"outputs\":[{\"name\":\"\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"commitments\",\"inputs\":[{\"name\":\"\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"outputs\":[{\"name\":\"confirmer\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"dataLength\",\"type\":\"uint32\",\"internalType\":\"uint32\"},{\"name\":\"polynomialCommitment\",\"type\":\"tuple\",\"internalType\":\"structBN254.G1Point\",\"components\":[{\"name\":\"X\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"Y\",\"type\":\"uint256\",\"internalType\":\"uint256\"}]}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"eigenDAServiceManager\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"contractIEigenDAServiceManager\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"postCommitment\",\"inputs\":[{\"name\":\"blobHeader\",\"type\":\"tuple\",\"internalType\":\"structBlobHeader\",\"components\":[{\"name\":\"commitment\",\"type\":\"tuple\",\"internalType\":\"structBN254.G1Point\",\"components\":[{\"name\":\"X\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"Y\",\"type\":\"uint256\",\"internalType\":\"uint256\"}]},{\"name\":\"dataLength\",\"type\":\"uint32\",\"internalType\":\"uint32\"},{\"name\":\"quorumBlobParams\",\"type\":\"tuple[]\",\"internalType\":\"structQuorumBlobParam[]\",\"components\":[{\"name\":\"quorumNumber\",\"type\":\"uint8\",\"internalType\":\"uint8\"},{\"name\":\"adversaryThresholdPercentage\",\"type\":\"uint8\",\"internalType\":\"uint8\"},{\"name\":\"confirmationThresholdPercentage\",\"type\":\"uint8\",\"internalType\":\"uint8\"},{\"name\":\"chunkLength\",\"type\":\"uint32\",\"internalType\":\"uint32\"}]}]},{\"name\":\"blobVerificationProof\",\"type\":\"tuple\",\"internalType\":\"structBlobVerificationProof\",\"components\":[{\"name\":\"batchId\",\"type\":\"uint32\",\"internalType\":\"uint32\"},{\"name\":\"blobIndex\",\"type\":\"uint32\",\"internalType\":\"uint32\"},{\"name\":\"batchMetadata\",\"type\":\"tuple\",\"internalType\":\"structBatchMetadata\",\"components\":[{\"name\":\"batchHeader\",\"type\":\"tuple\",\"internalType\":\"structBatchHeader\",\"components\":[{\"name\":\"blobHeadersRoot\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"quorumNumbers\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"signedStakeForQuorums\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"referenceBlockNumber\",\"type\":\"uint32\",\"internalType\":\"uint32\"}]},{\"name\":\"signatoryRecordHash\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"confirmationBlockNumber\",\"type\":\"uint32\",\"internalType\":\"uint32\"}]},{\"name\":\"inclusionProof\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"quorumIndices\",\"type\":\"bytes\",\"internalType\":\"bytes\"}]}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"tau\",\"inputs\":[],\"outputs\":[{\"name\":\"X\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"Y\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"stateMutability\":\"view\"}]", - Bin: "0x60806040523480156200001157600080fd5b5060405162001e4938038062001e49833981016040819052620000349162000067565b600080546001600160a01b0319166001600160a01b039390931692909217909155805160015560200151600255620000f9565b60008082840360608112156200007c57600080fd5b83516001600160a01b03811681146200009457600080fd5b92506040601f1982011215620000a957600080fd5b50604080519081016001600160401b0381118282101715620000db57634e487b7160e01b600052604160045260246000fd5b60409081526020858101518352940151938101939093525092909150565b611d4080620001096000396000f3fe608060405234801561001057600080fd5b50600436106100575760003560e01c806349ce89971461005c578063b5144c73146100cf578063cfc4af55146100e4578063d2d16eb214610107578063fc30cad01461012a575b600080fd5b6100b761006a3660046114cb565b6003602090815260009182526040918290208054835180850190945260018201548452600290910154918301919091526001600160a01b03811691600160a01b90910463ffffffff169083565b6040516100c6939291906114e4565b60405180910390f35b6100e26100dd36600461181b565b610155565b005b6001546002546100f2919082565b604080519283526020830191909152016100c6565b61011a6101153660046119f8565b6101e8565b60405190151581526020016100c6565b60005461013d906001600160a01b031681565b6040516001600160a01b0390911681526020016100c6565b60005461016d9083906001600160a01b031683610375565b506040805160608101825233815260208381015163ffffffff90811682840190815294518385019081524260009081526003845294909420925183549551909116600160a01b026001600160c01b03199095166001600160a01b03919091161793909317815590518051600183015590910151600290910155565b6000848152600360209081526040808320815160608101835281546001600160a01b038082168352600160a01b90910463ffffffff16828601528351808501855260018401548152600290930154948301949094529182015280519091166102b55760405162461bcd60e51b815260206004820152603560248201527f4d6f636b526f6c6c75702e6368616c6c656e6765436f6d6d69746d656e743a2060448201527410dbdb5b5a5d1b595b9d081b9bdd081c1bdcdd1959605a1b60648201526084015b60405180910390fd5b806020015163ffffffff1685106103405760405162461bcd60e51b815260206004820152604360248201527f4d6f636b526f6c6c75702e6368616c6c656e6765436f6d6d69746d656e743a2060448201527f506f696e74206d757374206265206c657373207468616e2064617461206c656e6064820152620cee8d60eb1b608482015260a4016102ac565b604080518082018252600154815260025460208201529082015161036991879186919088610a35565b9150505b949350505050565b805160405163eccbbfc960e01b815263ffffffff90911660048201526001600160a01b0383169063eccbbfc990602401602060405180830381865afa1580156103c2573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906103e69190611a66565b6103f38260400151610ab2565b1461047a5760405162461bcd60e51b815260206004820152604b60248201527f456967656e4441526f6c6c75705574696c732e766572696679426c6f623a206260448201527f617463684d6574616461746120646f6573206e6f74206d617463682073746f7260648201526a6564206d6574616461746160a81b608482015260a4016102ac565b6060810151604082015151516104cc919061049486610b29565b6040516020016104a691815260200190565b60405160208183030381529060405280519060200120846020015163ffffffff16610b59565b61053e5760405162461bcd60e51b815260206004820152603960248201527f456967656e4441526f6c6c75705574696c732e766572696679426c6f623a206960448201527f6e636c7573696f6e2070726f6f6620697320696e76616c69640000000000000060648201526084016102ac565b6000805b84604001515181101561091e578460400151818151811061056557610565611a7f565b60200260200101516000015160ff16836040015160000151602001518460800151838151811061059757610597611a7f565b0160200151815160f89190911c9081106105b3576105b3611a7f565b016020015160f81c1461062e5760405162461bcd60e51b815260206004820152603a60248201527f456967656e4441526f6c6c75705574696c732e766572696679426c6f623a207160448201527f756f72756d4e756d62657220646f6573206e6f74206d6174636800000000000060648201526084016102ac565b8460400151818151811061064457610644611a7f565b60200260200101516040015160ff168560400151828151811061066957610669611a7f565b60200260200101516020015160ff16106106fc5760405162461bcd60e51b815260206004820152604860248201527f456967656e4441526f6c6c75705574696c732e766572696679426c6f623a206160448201527f64766572736172795468726573686f6c6450657263656e74616765206973206e6064820152671bdd081d985b1a5960c21b608482015260a4016102ac565b600061072c858760400151848151811061071857610718611a7f565b60200260200101516000015160ff16610b71565b905060ff8116156107e3578060ff168660400151838151811061075157610751611a7f565b60200260200101516020015160ff1610156107e35760405162461bcd60e51b815260206004820152604660248201527f456967656e4441526f6c6c75705574696c732e766572696679426c6f623a206160448201527f64766572736172795468726573686f6c6450657263656e74616765206973206e6064820152651bdd081b595d60d21b608482015260a4016102ac565b856040015182815181106107f9576107f9611a7f565b60200260200101516040015160ff16846040015160000151604001518560800151848151811061082b5761082b611a7f565b0160200151815160f89190911c90811061084757610847611a7f565b016020015160f81c10156108d55760405162461bcd60e51b815260206004820152604960248201527f456967656e4441526f6c6c75705574696c732e766572696679426c6f623a206360448201527f6f6e6669726d6174696f6e5468726573686f6c6450657263656e7461676520696064820152681cc81b9bdd081b595d60ba1b608482015260a4016102ac565b61090883876040015184815181106108ef576108ef611a7f565b602002602001015160000151600160ff919091161b1790565b925050808061091690611aab565b915050610542565b50610997610990846001600160a01b031663e15234ff6040518163ffffffff1660e01b8152600401600060405180830381865afa158015610963573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405261098b9190810190611af2565b610c68565b8281161490565b610a2f5760405162461bcd60e51b815260206004820152605960248201527f456967656e4441526f6c6c75705574696c732e766572696679426c6f623a207260448201527f657175697265642071756f72756d7320617265206e6f7420612073756273657460648201527f206f662074686520636f6e6669726d65642071756f72756d7300000000000000608482015260a4016102ac565b50505050565b600080610a6c610a67604080518082018252600080825260209182015281518083019092526001825260029082015290565b610df5565b9050610aa7610a85610a7e838a610eb4565b8790610f4b565b84610a9a610a93858b610eb4565b8890610f4b565b610aa2610fdf565b61109f565b979650505050505050565b6000610b238260000151604051602001610acc9190611b95565b60408051808303601f1901815282825280516020918201208682015187840151838601929092528484015260e01b6001600160e01b0319166060840152815160448185030181526064909301909152815191012090565b92915050565b600081604051602001610b3c9190611bf5565b604051602081830303815290604052805190602001209050919050565b600083610b6786858561130c565b1495945050505050565b600081836001600160a01b0316638687feae6040518163ffffffff1660e01b8152600401600060405180830381865afa158015610bb2573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052610bda9190810190611af2565b511115610b2357826001600160a01b0316638687feae6040518163ffffffff1660e01b8152600401600060405180830381865afa158015610c1f573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052610c479190810190611af2565b8281518110610c5857610c58611a7f565b016020015160f81c905092915050565b600061010082511115610cf15760405162461bcd60e51b8152602060048201526044602482018190527f4269746d61705574696c732e6f72646572656442797465734172726179546f42908201527f69746d61703a206f7264657265644279746573417272617920697320746f6f206064820152636c6f6e6760e01b608482015260a4016102ac565b8151610cff57506000919050565b60008083600081518110610d1557610d15611a7f565b0160200151600160f89190911c81901b92505b8451811015610dec57848181518110610d4357610d43611a7f565b0160200151600160f89190911c1b9150828211610dd85760405162461bcd60e51b815260206004820152604760248201527f4269746d61705574696c732e6f72646572656442797465734172726179546f4260448201527f69746d61703a206f72646572656442797465734172726179206973206e6f74206064820152661bdc99195c995960ca1b608482015260a4016102ac565b91811791610de581611aab565b9050610d28565b50909392505050565b60408051808201909152600080825260208201528151158015610e1a57506020820151155b15610e38575050604080518082019091526000808252602082015290565b6040518060400160405280836000015181526020017f30644e72e131a029b85045b68181585d97816a916871ca8d3c208c16d87cfd478460200151610e7d9190611c9a565b610ea7907f30644e72e131a029b85045b68181585d97816a916871ca8d3c208c16d87cfd47611cbc565b905292915050565b919050565b6040805180820190915260008082526020820152610ed061140f565b835181526020808501519082015260408082018490526000908360608460076107d05a03fa9050808015610f0357610f05565bfe5b5080610f435760405162461bcd60e51b815260206004820152600d60248201526c1958cb5b5d5b0b59985a5b1959609a1b60448201526064016102ac565b505092915050565b6040805180820190915260008082526020820152610f6761142d565b835181526020808501518183015283516040808401919091529084015160608301526000908360808460066107d05a03fa9050808015610f03575080610f435760405162461bcd60e51b815260206004820152600d60248201526c1958cb5859190b59985a5b1959609a1b60448201526064016102ac565b610fe761144b565b50604080516080810182527f198e9393920d483a7260bfb731fb5d25f1aa493335a9e71297e485b7aef312c28183019081527f1800deef121f1e76426a00665e5c4479674322d4f75edadd46debd5cd992f6ed6060830152815281518083019092527f275dc4a288d1afb3cbb1ac09187524c7db36395df7be3b99e673b13a075a65ec82527f1d9befcd05a5323e6da4d435f3b617cdb3af83285c2df711ef39c01571827f9d60208381019190915281019190915290565b6040805180820182528581526020808201859052825180840190935285835282018390526000916110ce611470565b60005b60028110156112935760006110e7826006611cd3565b90508482600281106110fb576110fb611a7f565b6020020151518361110d836000611cf2565b600c811061111d5761111d611a7f565b602002015284826002811061113457611134611a7f565b6020020151602001518382600161114b9190611cf2565b600c811061115b5761115b611a7f565b602002015283826002811061117257611172611a7f565b6020020151515183611185836002611cf2565b600c811061119557611195611a7f565b60200201528382600281106111ac576111ac611a7f565b60200201515160016020020151836111c5836003611cf2565b600c81106111d5576111d5611a7f565b60200201528382600281106111ec576111ec611a7f565b60200201516020015160006002811061120757611207611a7f565b602002015183611218836004611cf2565b600c811061122857611228611a7f565b602002015283826002811061123f5761123f611a7f565b60200201516020015160016002811061125a5761125a611a7f565b60200201518361126b836005611cf2565b600c811061127b5761127b611a7f565b6020020152508061128b81611aab565b9150506110d1565b5061129c61148f565b60006020826101808560086107d05a03fa9050808015610f035750806112fc5760405162461bcd60e51b81526020600482015260156024820152741c185a5c9a5b99cb5bdc18dbd9194b59985a5b1959605a1b60448201526064016102ac565b5051151598975050505050505050565b60006020845161131c9190611c9a565b156113a35760405162461bcd60e51b815260206004820152604b60248201527f4d65726b6c652e70726f63657373496e636c7573696f6e50726f6f664b65636360448201527f616b3a2070726f6f66206c656e6774682073686f756c642062652061206d756c60648201526a3a34b836329037b310199960a91b608482015260a4016102ac565b8260205b85518111611406576113ba600285611c9a565b6113db578160005280860151602052604060002091506002840493506113f4565b8086015160005281602052604060002091506002840493505b6113ff602082611cf2565b90506113a7565b50949350505050565b60405180606001604052806003906020820280368337509192915050565b60405180608001604052806004906020820280368337509192915050565b604051806040016040528061145e6114ad565b815260200161146b6114ad565b905290565b604051806101800160405280600c906020820280368337509192915050565b60405180602001604052806001906020820280368337509192915050565b60405180604001604052806002906020820280368337509192915050565b6000602082840312156114dd57600080fd5b5035919050565b6001600160a01b038416815263ffffffff831660208201526080810161036d604083018480518252602090810151910152565b634e487b7160e01b600052604160045260246000fd5b6040516060810167ffffffffffffffff8111828210171561155057611550611517565b60405290565b6040516080810167ffffffffffffffff8111828210171561155057611550611517565b60405160a0810167ffffffffffffffff8111828210171561155057611550611517565b6040805190810167ffffffffffffffff8111828210171561155057611550611517565b604051601f8201601f1916810167ffffffffffffffff811182821017156115e8576115e8611517565b604052919050565b803563ffffffff81168114610eaf57600080fd5b803560ff81168114610eaf57600080fd5b600067ffffffffffffffff82111561162f5761162f611517565b50601f01601f191660200190565b600082601f83011261164e57600080fd5b813561166161165c82611615565b6115bf565b81815284602083860101111561167657600080fd5b816020850160208301376000918101602001919091529392505050565b6000606082840312156116a557600080fd5b6116ad61152d565b9050813567ffffffffffffffff808211156116c757600080fd5b90830190608082860312156116db57600080fd5b6116e3611556565b823581526020830135828111156116f957600080fd5b6117058782860161163d565b60208301525060408301358281111561171d57600080fd5b6117298782860161163d565b60408301525061173b606084016115f0565b6060820152835250506020828101359082015261175a604083016115f0565b604082015292915050565b600060a0828403121561177757600080fd5b61177f611579565b905061178a826115f0565b8152611798602083016115f0565b6020820152604082013567ffffffffffffffff808211156117b857600080fd5b6117c485838601611693565b604084015260608401359150808211156117dd57600080fd5b6117e98583860161163d565b6060840152608084013591508082111561180257600080fd5b5061180f8482850161163d565b60808301525092915050565b600080604080848603121561182f57600080fd5b833567ffffffffffffffff8082111561184757600080fd5b9085019081870360808082121561185d57600080fd5b61186561152d565b8583121561187257600080fd5b61187a61159c565b925084358352602080860135818501528382526118988787016115f0565b818301526060935083860135858111156118b157600080fd5b8087019650508a601f8701126118c657600080fd5b8535858111156118d8576118d8611517565b6118e6828260051b016115bf565b81815260079190911b8701820190828101908d83111561190557600080fd5b978301975b828910156119715785898f0312156119225760008081fd5b61192a611556565b6119338a611604565b8152611940858b01611604565b8582015261194f8b8b01611604565b8b82015261195e888b016115f0565b818901528252978501979083019061190a565b9884019890985250909750880135945050508083111561199057600080fd5b505061199e85828601611765565b9150509250929050565b600082601f8301126119b957600080fd5b6119c161159c565b8060408401858111156119d357600080fd5b845b818110156119ed5780358452602093840193016119d5565b509095945050505050565b60008060008084860360e0811215611a0f57600080fd5b85359450602086013593506080603f1982011215611a2c57600080fd5b50611a3561159c565b611a4287604088016119a8565b8152611a5187608088016119a8565b60208201529396929550929360c00135925050565b600060208284031215611a7857600080fd5b5051919050565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052601160045260246000fd5b6000600019821415611abf57611abf611a95565b5060010190565b60005b83811015611ae1578181015183820152602001611ac9565b83811115610a2f5750506000910152565b600060208284031215611b0457600080fd5b815167ffffffffffffffff811115611b1b57600080fd5b8201601f81018413611b2c57600080fd5b8051611b3a61165c82611615565b818152856020838501011115611b4f57600080fd5b611b60826020830160208601611ac6565b95945050505050565b60008151808452611b81816020860160208601611ac6565b601f01601f19169290920160200192915050565b60208152815160208201526000602083015160806040840152611bbb60a0840182611b69565b90506040840151601f19848303016060850152611bd88282611b69565b91505063ffffffff60608501511660808401528091505092915050565b60208082528251805183830152810151604083015260009060a0830181850151606063ffffffff808316828801526040925082880151608080818a015285825180885260c08b0191508884019750600093505b80841015611c8b578751805160ff90811684528a82015181168b850152888201511688840152860151851686830152968801966001939093019290820190611c48565b509a9950505050505050505050565b600082611cb757634e487b7160e01b600052601260045260246000fd5b500690565b600082821015611cce57611cce611a95565b500390565b6000816000190483118215151615611ced57611ced611a95565b500290565b60008219821115611d0557611d05611a95565b50019056fea2646970667358221220adb398c50d8d34695ebc327192ce0ff3fbbdef7643b15a871631d73f8d89add964736f6c634300080c0033", + Bin: "0x60806040523480156200001157600080fd5b5060405162001e4938038062001e49833981016040819052620000349162000067565b600080546001600160a01b0319166001600160a01b039390931692909217909155805160015560200151600255620000f9565b60008082840360608112156200007c57600080fd5b83516001600160a01b03811681146200009457600080fd5b92506040601f1982011215620000a957600080fd5b50604080519081016001600160401b0381118282101715620000db57634e487b7160e01b600052604160045260246000fd5b60409081526020858101518352940151938101939093525092909150565b611d4080620001096000396000f3fe608060405234801561001057600080fd5b50600436106100575760003560e01c806349ce89971461005c578063b5144c73146100cf578063cfc4af55146100e4578063d2d16eb214610107578063fc30cad01461012a575b600080fd5b6100b761006a3660046114cb565b6003602090815260009182526040918290208054835180850190945260018201548452600290910154918301919091526001600160a01b03811691600160a01b90910463ffffffff169083565b6040516100c6939291906114e4565b60405180910390f35b6100e26100dd36600461181b565b610155565b005b6001546002546100f2919082565b604080519283526020830191909152016100c6565b61011a6101153660046119f8565b6101e8565b60405190151581526020016100c6565b60005461013d906001600160a01b031681565b6040516001600160a01b0390911681526020016100c6565b60005461016d9083906001600160a01b031683610375565b506040805160608101825233815260208381015163ffffffff90811682840190815294518385019081524260009081526003845294909420925183549551909116600160a01b026001600160c01b03199095166001600160a01b03919091161793909317815590518051600183015590910151600290910155565b6000848152600360209081526040808320815160608101835281546001600160a01b038082168352600160a01b90910463ffffffff16828601528351808501855260018401548152600290930154948301949094529182015280519091166102b55760405162461bcd60e51b815260206004820152603560248201527f4d6f636b526f6c6c75702e6368616c6c656e6765436f6d6d69746d656e743a2060448201527410dbdb5b5a5d1b595b9d081b9bdd081c1bdcdd1959605a1b60648201526084015b60405180910390fd5b806020015163ffffffff1685106103405760405162461bcd60e51b815260206004820152604360248201527f4d6f636b526f6c6c75702e6368616c6c656e6765436f6d6d69746d656e743a2060448201527f506f696e74206d757374206265206c657373207468616e2064617461206c656e6064820152620cee8d60eb1b608482015260a4016102ac565b604080518082018252600154815260025460208201529082015161036991879186919088610a35565b9150505b949350505050565b805160405163eccbbfc960e01b815263ffffffff90911660048201526001600160a01b0383169063eccbbfc990602401602060405180830381865afa1580156103c2573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906103e69190611a66565b6103f38260400151610ab2565b1461047a5760405162461bcd60e51b815260206004820152604b60248201527f456967656e4441526f6c6c75705574696c732e766572696679426c6f623a206260448201527f617463684d6574616461746120646f6573206e6f74206d617463682073746f7260648201526a6564206d6574616461746160a81b608482015260a4016102ac565b6060810151604082015151516104cc919061049486610b29565b6040516020016104a691815260200190565b60405160208183030381529060405280519060200120846020015163ffffffff16610b59565b61053e5760405162461bcd60e51b815260206004820152603960248201527f456967656e4441526f6c6c75705574696c732e766572696679426c6f623a206960448201527f6e636c7573696f6e2070726f6f6620697320696e76616c69640000000000000060648201526084016102ac565b6000805b84604001515181101561091e578460400151818151811061056557610565611a7f565b60200260200101516000015160ff16836040015160000151602001518460800151838151811061059757610597611a7f565b0160200151815160f89190911c9081106105b3576105b3611a7f565b016020015160f81c1461062e5760405162461bcd60e51b815260206004820152603a60248201527f456967656e4441526f6c6c75705574696c732e766572696679426c6f623a207160448201527f756f72756d4e756d62657220646f6573206e6f74206d6174636800000000000060648201526084016102ac565b8460400151818151811061064457610644611a7f565b60200260200101516040015160ff168560400151828151811061066957610669611a7f565b60200260200101516020015160ff16106106fc5760405162461bcd60e51b815260206004820152604860248201527f456967656e4441526f6c6c75705574696c732e766572696679426c6f623a206160448201527f64766572736172795468726573686f6c6450657263656e74616765206973206e6064820152671bdd081d985b1a5960c21b608482015260a4016102ac565b600061072c858760400151848151811061071857610718611a7f565b60200260200101516000015160ff16610b71565b905060ff8116156107e3578060ff168660400151838151811061075157610751611a7f565b60200260200101516020015160ff1610156107e35760405162461bcd60e51b815260206004820152604660248201527f456967656e4441526f6c6c75705574696c732e766572696679426c6f623a206160448201527f64766572736172795468726573686f6c6450657263656e74616765206973206e6064820152651bdd081b595d60d21b608482015260a4016102ac565b856040015182815181106107f9576107f9611a7f565b60200260200101516040015160ff16846040015160000151604001518560800151848151811061082b5761082b611a7f565b0160200151815160f89190911c90811061084757610847611a7f565b016020015160f81c10156108d55760405162461bcd60e51b815260206004820152604960248201527f456967656e4441526f6c6c75705574696c732e766572696679426c6f623a206360448201527f6f6e6669726d6174696f6e5468726573686f6c6450657263656e7461676520696064820152681cc81b9bdd081b595d60ba1b608482015260a4016102ac565b61090883876040015184815181106108ef576108ef611a7f565b602002602001015160000151600160ff919091161b1790565b925050808061091690611aab565b915050610542565b50610997610990846001600160a01b031663e15234ff6040518163ffffffff1660e01b8152600401600060405180830381865afa158015610963573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405261098b9190810190611af2565b610c68565b8281161490565b610a2f5760405162461bcd60e51b815260206004820152605960248201527f456967656e4441526f6c6c75705574696c732e766572696679426c6f623a207260448201527f657175697265642071756f72756d7320617265206e6f7420612073756273657460648201527f206f662074686520636f6e6669726d65642071756f72756d7300000000000000608482015260a4016102ac565b50505050565b600080610a6c610a67604080518082018252600080825260209182015281518083019092526001825260029082015290565b610df5565b9050610aa7610a85610a7e838a610eb4565b8790610f4b565b84610a9a610a93858b610eb4565b8890610f4b565b610aa2610fdf565b61109f565b979650505050505050565b6000610b238260000151604051602001610acc9190611b95565b60408051808303601f1901815282825280516020918201208682015187840151838601929092528484015260e01b6001600160e01b0319166060840152815160448185030181526064909301909152815191012090565b92915050565b600081604051602001610b3c9190611bf5565b604051602081830303815290604052805190602001209050919050565b600083610b6786858561130c565b1495945050505050565b600081836001600160a01b0316638687feae6040518163ffffffff1660e01b8152600401600060405180830381865afa158015610bb2573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052610bda9190810190611af2565b511115610b2357826001600160a01b0316638687feae6040518163ffffffff1660e01b8152600401600060405180830381865afa158015610c1f573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052610c479190810190611af2565b8281518110610c5857610c58611a7f565b016020015160f81c905092915050565b600061010082511115610cf15760405162461bcd60e51b8152602060048201526044602482018190527f4269746d61705574696c732e6f72646572656442797465734172726179546f42908201527f69746d61703a206f7264657265644279746573417272617920697320746f6f206064820152636c6f6e6760e01b608482015260a4016102ac565b8151610cff57506000919050565b60008083600081518110610d1557610d15611a7f565b0160200151600160f89190911c81901b92505b8451811015610dec57848181518110610d4357610d43611a7f565b0160200151600160f89190911c1b9150828211610dd85760405162461bcd60e51b815260206004820152604760248201527f4269746d61705574696c732e6f72646572656442797465734172726179546f4260448201527f69746d61703a206f72646572656442797465734172726179206973206e6f74206064820152661bdc99195c995960ca1b608482015260a4016102ac565b91811791610de581611aab565b9050610d28565b50909392505050565b60408051808201909152600080825260208201528151158015610e1a57506020820151155b15610e38575050604080518082019091526000808252602082015290565b6040518060400160405280836000015181526020017f30644e72e131a029b85045b68181585d97816a916871ca8d3c208c16d87cfd478460200151610e7d9190611c9a565b610ea7907f30644e72e131a029b85045b68181585d97816a916871ca8d3c208c16d87cfd47611cbc565b905292915050565b919050565b6040805180820190915260008082526020820152610ed061140f565b835181526020808501519082015260408082018490526000908360608460076107d05a03fa9050808015610f0357610f05565bfe5b5080610f435760405162461bcd60e51b815260206004820152600d60248201526c1958cb5b5d5b0b59985a5b1959609a1b60448201526064016102ac565b505092915050565b6040805180820190915260008082526020820152610f6761142d565b835181526020808501518183015283516040808401919091529084015160608301526000908360808460066107d05a03fa9050808015610f03575080610f435760405162461bcd60e51b815260206004820152600d60248201526c1958cb5859190b59985a5b1959609a1b60448201526064016102ac565b610fe761144b565b50604080516080810182527f198e9393920d483a7260bfb731fb5d25f1aa493335a9e71297e485b7aef312c28183019081527f1800deef121f1e76426a00665e5c4479674322d4f75edadd46debd5cd992f6ed6060830152815281518083019092527f275dc4a288d1afb3cbb1ac09187524c7db36395df7be3b99e673b13a075a65ec82527f1d9befcd05a5323e6da4d435f3b617cdb3af83285c2df711ef39c01571827f9d60208381019190915281019190915290565b6040805180820182528581526020808201859052825180840190935285835282018390526000916110ce611470565b60005b60028110156112935760006110e7826006611cd3565b90508482600281106110fb576110fb611a7f565b6020020151518361110d836000611cf2565b600c811061111d5761111d611a7f565b602002015284826002811061113457611134611a7f565b6020020151602001518382600161114b9190611cf2565b600c811061115b5761115b611a7f565b602002015283826002811061117257611172611a7f565b6020020151515183611185836002611cf2565b600c811061119557611195611a7f565b60200201528382600281106111ac576111ac611a7f565b60200201515160016020020151836111c5836003611cf2565b600c81106111d5576111d5611a7f565b60200201528382600281106111ec576111ec611a7f565b60200201516020015160006002811061120757611207611a7f565b602002015183611218836004611cf2565b600c811061122857611228611a7f565b602002015283826002811061123f5761123f611a7f565b60200201516020015160016002811061125a5761125a611a7f565b60200201518361126b836005611cf2565b600c811061127b5761127b611a7f565b6020020152508061128b81611aab565b9150506110d1565b5061129c61148f565b60006020826101808560086107d05a03fa9050808015610f035750806112fc5760405162461bcd60e51b81526020600482015260156024820152741c185a5c9a5b99cb5bdc18dbd9194b59985a5b1959605a1b60448201526064016102ac565b5051151598975050505050505050565b60006020845161131c9190611c9a565b156113a35760405162461bcd60e51b815260206004820152604b60248201527f4d65726b6c652e70726f63657373496e636c7573696f6e50726f6f664b65636360448201527f616b3a2070726f6f66206c656e6774682073686f756c642062652061206d756c60648201526a3a34b836329037b310199960a91b608482015260a4016102ac565b8260205b85518111611406576113ba600285611c9a565b6113db578160005280860151602052604060002091506002840493506113f4565b8086015160005281602052604060002091506002840493505b6113ff602082611cf2565b90506113a7565b50949350505050565b60405180606001604052806003906020820280368337509192915050565b60405180608001604052806004906020820280368337509192915050565b604051806040016040528061145e6114ad565b815260200161146b6114ad565b905290565b604051806101800160405280600c906020820280368337509192915050565b60405180602001604052806001906020820280368337509192915050565b60405180604001604052806002906020820280368337509192915050565b6000602082840312156114dd57600080fd5b5035919050565b6001600160a01b038416815263ffffffff831660208201526080810161036d604083018480518252602090810151910152565b634e487b7160e01b600052604160045260246000fd5b6040516060810167ffffffffffffffff8111828210171561155057611550611517565b60405290565b6040516080810167ffffffffffffffff8111828210171561155057611550611517565b60405160a0810167ffffffffffffffff8111828210171561155057611550611517565b6040805190810167ffffffffffffffff8111828210171561155057611550611517565b604051601f8201601f1916810167ffffffffffffffff811182821017156115e8576115e8611517565b604052919050565b803563ffffffff81168114610eaf57600080fd5b803560ff81168114610eaf57600080fd5b600067ffffffffffffffff82111561162f5761162f611517565b50601f01601f191660200190565b600082601f83011261164e57600080fd5b813561166161165c82611615565b6115bf565b81815284602083860101111561167657600080fd5b816020850160208301376000918101602001919091529392505050565b6000606082840312156116a557600080fd5b6116ad61152d565b9050813567ffffffffffffffff808211156116c757600080fd5b90830190608082860312156116db57600080fd5b6116e3611556565b823581526020830135828111156116f957600080fd5b6117058782860161163d565b60208301525060408301358281111561171d57600080fd5b6117298782860161163d565b60408301525061173b606084016115f0565b6060820152835250506020828101359082015261175a604083016115f0565b604082015292915050565b600060a0828403121561177757600080fd5b61177f611579565b905061178a826115f0565b8152611798602083016115f0565b6020820152604082013567ffffffffffffffff808211156117b857600080fd5b6117c485838601611693565b604084015260608401359150808211156117dd57600080fd5b6117e98583860161163d565b6060840152608084013591508082111561180257600080fd5b5061180f8482850161163d565b60808301525092915050565b600080604080848603121561182f57600080fd5b833567ffffffffffffffff8082111561184757600080fd5b9085019081870360808082121561185d57600080fd5b61186561152d565b8583121561187257600080fd5b61187a61159c565b925084358352602080860135818501528382526118988787016115f0565b818301526060935083860135858111156118b157600080fd5b8087019650508a601f8701126118c657600080fd5b8535858111156118d8576118d8611517565b6118e6828260051b016115bf565b81815260079190911b8701820190828101908d83111561190557600080fd5b978301975b828910156119715785898f0312156119225760008081fd5b61192a611556565b6119338a611604565b8152611940858b01611604565b8582015261194f8b8b01611604565b8b82015261195e888b016115f0565b818901528252978501979083019061190a565b9884019890985250909750880135945050508083111561199057600080fd5b505061199e85828601611765565b9150509250929050565b600082601f8301126119b957600080fd5b6119c161159c565b8060408401858111156119d357600080fd5b845b818110156119ed5780358452602093840193016119d5565b509095945050505050565b60008060008084860360e0811215611a0f57600080fd5b85359450602086013593506080603f1982011215611a2c57600080fd5b50611a3561159c565b611a4287604088016119a8565b8152611a5187608088016119a8565b60208201529396929550929360c00135925050565b600060208284031215611a7857600080fd5b5051919050565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052601160045260246000fd5b6000600019821415611abf57611abf611a95565b5060010190565b60005b83811015611ae1578181015183820152602001611ac9565b83811115610a2f5750506000910152565b600060208284031215611b0457600080fd5b815167ffffffffffffffff811115611b1b57600080fd5b8201601f81018413611b2c57600080fd5b8051611b3a61165c82611615565b818152856020838501011115611b4f57600080fd5b611b60826020830160208601611ac6565b95945050505050565b60008151808452611b81816020860160208601611ac6565b601f01601f19169290920160200192915050565b60208152815160208201526000602083015160806040840152611bbb60a0840182611b69565b90506040840151601f19848303016060850152611bd88282611b69565b91505063ffffffff60608501511660808401528091505092915050565b60208082528251805183830152810151604083015260009060a0830181850151606063ffffffff808316828801526040925082880151608080818a015285825180885260c08b0191508884019750600093505b80841015611c8b578751805160ff90811684528a82015181168b850152888201511688840152860151851686830152968801966001939093019290820190611c48565b509a9950505050505050505050565b600082611cb757634e487b7160e01b600052601260045260246000fd5b500690565b600082821015611cce57611cce611a95565b500390565b6000816000190483118215151615611ced57611ced611a95565b500290565b60008219821115611d0557611d05611a95565b50019056fea26469706673582212203a5ea0ef030bd14ccf461e25ec8a3e370a18df1f48ee49e846ff32f21b828bc064736f6c634300080c0033", } // ContractMockRollupABI is the input ABI used to generate the binding from. diff --git a/contracts/src/interfaces/IEigenDAStructs.sol b/contracts/src/interfaces/IEigenDAStructs.sol index 9cfeeff6b1..2edf2f0837 100644 --- a/contracts/src/interfaces/IEigenDAStructs.sol +++ b/contracts/src/interfaces/IEigenDAStructs.sol @@ -74,6 +74,7 @@ struct BlobVerificationProofV2 { struct BlobCertificate { BlobHeaderV2 blobHeader; + bytes signature; uint32[] relayKeys; } diff --git a/contracts/src/libraries/EigenDAHasher.sol b/contracts/src/libraries/EigenDAHasher.sol index 15875399b1..eee5f7730c 100644 --- a/contracts/src/libraries/EigenDAHasher.sol +++ b/contracts/src/libraries/EigenDAHasher.sol @@ -140,6 +140,7 @@ library EigenDAHasher { return keccak256( abi.encode( hashBlobHeaderV2(blobCertificate.blobHeader), + blobCertificate.signature, blobCertificate.relayKeys ) ); diff --git a/contracts/test/unit/EigenDABlobVerifierV2Unit.t.sol b/contracts/test/unit/EigenDABlobVerifierV2Unit.t.sol index bdfc7ae864..c82014f34a 100644 --- a/contracts/test/unit/EigenDABlobVerifierV2Unit.t.sol +++ b/contracts/test/unit/EigenDABlobVerifierV2Unit.t.sol @@ -114,11 +114,13 @@ contract EigenDABlobVerifierV2Unit is MockEigenDADeployer { BlobCertificate memory blobCertificate1 = BlobCertificate({ blobHeader: blobHeader1, + signature: hex"00", relayKeys: relayKeys }); BlobCertificate memory blobCertificate2 = BlobCertificate({ blobHeader: blobHeader2, + signature: hex"0001", relayKeys: relayKeys }); diff --git a/core/auth/v2/auth_test.go b/core/auth/v2/auth_test.go index 8893a24c9b..3d22b66c3f 100644 --- a/core/auth/v2/auth_test.go +++ b/core/auth/v2/auth_test.go @@ -30,9 +30,7 @@ func TestAuthentication(t *testing.T) { signature, err := signer.SignBlobRequest(header) assert.NoError(t, err) - header.Signature = signature - - err = authenticator.AuthenticateBlobRequest(header) + err = authenticator.AuthenticateBlobRequest(header, signature) assert.NoError(t, err) } @@ -53,9 +51,7 @@ func TestAuthenticationFail(t *testing.T) { signature, err := signer.SignBlobRequest(header) assert.NoError(t, err) - header.Signature = signature - - err = authenticator.AuthenticateBlobRequest(header) + err = authenticator.AuthenticateBlobRequest(header, signature) assert.Error(t, err) } @@ -113,7 +109,6 @@ func testHeader(t *testing.T, accountID string) *corev2.BlobHeader { ReservationPeriod: 5, CumulativePayment: big.NewInt(100), }, - Signature: []byte{}, } } diff --git a/core/auth/v2/authenticator.go b/core/auth/v2/authenticator.go index 4f507aec81..562208af17 100644 --- a/core/auth/v2/authenticator.go +++ b/core/auth/v2/authenticator.go @@ -18,12 +18,10 @@ func NewAuthenticator() *authenticator { var _ core.BlobRequestAuthenticator = &authenticator{} -func (*authenticator) AuthenticateBlobRequest(header *core.BlobHeader) error { - sig := header.Signature - +func (*authenticator) AuthenticateBlobRequest(header *core.BlobHeader, signature []byte) error { // Ensure the signature is 65 bytes (Recovery ID is the last byte) - if len(sig) != 65 { - return fmt.Errorf("signature length is unexpected: %d", len(sig)) + if len(signature) != 65 { + return fmt.Errorf("signature length is unexpected: %d", len(signature)) } blobKey, err := header.BlobKey() @@ -32,7 +30,7 @@ func (*authenticator) AuthenticateBlobRequest(header *core.BlobHeader) error { } // Recover public key from signature - sigPublicKeyECDSA, err := crypto.SigToPub(blobKey[:], sig) + sigPublicKeyECDSA, err := crypto.SigToPub(blobKey[:], signature) if err != nil { return fmt.Errorf("failed to recover public key from signature: %v", err) } diff --git a/core/v2/auth.go b/core/v2/auth.go index 555825f5e4..cf4a1dfa25 100644 --- a/core/v2/auth.go +++ b/core/v2/auth.go @@ -1,7 +1,7 @@ package v2 type BlobRequestAuthenticator interface { - AuthenticateBlobRequest(header *BlobHeader) error + AuthenticateBlobRequest(header *BlobHeader, signature []byte) error AuthenticatePaymentStateRequest(signature []byte, accountId string) error } diff --git a/core/v2/serialization.go b/core/v2/serialization.go index 1669041997..efaec90517 100644 --- a/core/v2/serialization.go +++ b/core/v2/serialization.go @@ -203,6 +203,11 @@ func (c *BlobCertificate) Hash() ([32]byte, error) { return [32]byte{}, err } + signatureType, err := abi.NewType("bytes", "", nil) + if err != nil { + return [32]byte{}, err + } + relayKeysType, err := abi.NewType("uint32[]", "", nil) if err != nil { return [32]byte{}, err @@ -212,6 +217,9 @@ func (c *BlobCertificate) Hash() ([32]byte, error) { { Type: blobKeyType, }, + { + Type: signatureType, + }, { Type: relayKeysType, }, @@ -222,7 +230,7 @@ func (c *BlobCertificate) Hash() ([32]byte, error) { return [32]byte{}, err } - bytes, err := arguments.Pack(blobKey, c.RelayKeys) + bytes, err := arguments.Pack(blobKey, c.Signature, c.RelayKeys) if err != nil { return [32]byte{}, err } diff --git a/core/v2/serialization_test.go b/core/v2/serialization_test.go index f2fd605e75..29f95057cc 100644 --- a/core/v2/serialization_test.go +++ b/core/v2/serialization_test.go @@ -48,8 +48,7 @@ func TestBlobKeyFromHeader(t *testing.T) { ReservationPeriod: 5, CumulativePayment: big.NewInt(100), }, - Signature: []byte{1, 2, 3}, - Salt: 42, + Salt: 42, } blobKey, err := bh.BlobKey() assert.NoError(t, err) @@ -103,16 +102,16 @@ func TestBlobCertHash(t *testing.T) { ReservationPeriod: 5, CumulativePayment: big.NewInt(100), }, - Signature: []byte{1, 2, 3}, - Salt: 42, + Salt: 42, }, + Signature: []byte{1, 2, 3}, RelayKeys: []v2.RelayKey{4, 5, 6}, } hash, err := blobCert.Hash() assert.NoError(t, err) - // 0x52126dcdab9cdbc69ccab962d2c77f535868528d116217c2540a125eec36fbb4 verified in solidity - assert.Equal(t, "52126dcdab9cdbc69ccab962d2c77f535868528d116217c2540a125eec36fbb4", hex.EncodeToString(hash[:])) + // 0x1db857aeead06422b8d727dc3972db6ceb04ceb87e194cb6c2389ac3015eda49 verified in solidity + assert.Equal(t, "1db857aeead06422b8d727dc3972db6ceb04ceb87e194cb6c2389ac3015eda49", hex.EncodeToString(hash[:])) } func TestBlobCertSerialization(t *testing.T) { @@ -132,9 +131,9 @@ func TestBlobCertSerialization(t *testing.T) { ReservationPeriod: 5, CumulativePayment: big.NewInt(100), }, - Signature: []byte{1, 2, 3}, - Salt: 42, + Salt: 42, }, + Signature: []byte{1, 2, 3}, RelayKeys: []v2.RelayKey{4, 5, 6}, } diff --git a/core/v2/types.go b/core/v2/types.go index 4036d76137..aaa5a9f2e7 100644 --- a/core/v2/types.go +++ b/core/v2/types.go @@ -72,10 +72,6 @@ type BlobHeader struct { // Salt is used to make blob intentionally unique when everything else is the same Salt uint32 - - // Signature is an ECDSA signature signed by the blob request signer's account ID over the BlobHeader's blobKey, - // which is a keccak hash of the serialized BlobHeader, and used to verify against blob dispersal request's account ID - Signature []byte } func BlobHeaderFromProtobuf(proto *commonpb.BlobHeader) (*BlobHeader, error) { @@ -127,7 +123,6 @@ func BlobHeaderFromProtobuf(proto *commonpb.BlobHeader) (*BlobHeader, error) { }, QuorumNumbers: quorumNumbers, PaymentMetadata: *paymentMetadata, - Signature: proto.GetSignature(), Salt: proto.GetSalt(), }, nil } @@ -148,7 +143,6 @@ func (b *BlobHeader) ToProtobuf() (*commonpb.BlobHeader, error) { QuorumNumbers: quorums, Commitment: commitments, PaymentHeader: b.PaymentMetadata.ToProtobuf(), - Signature: b.Signature, Salt: b.Salt, }, nil } @@ -170,6 +164,10 @@ type RelayKey = uint32 type BlobCertificate struct { BlobHeader *BlobHeader + // Signature is an ECDSA signature signed by the blob request signer's account ID over the BlobHeader's blobKey, + // which is a keccak hash of the serialized BlobHeader, and used to verify against blob dispersal request's account ID + Signature []byte + // RelayKeys RelayKeys []RelayKey } @@ -191,7 +189,8 @@ func (c *BlobCertificate) ToProtobuf() (*commonpb.BlobCertificate, error) { return &commonpb.BlobCertificate{ BlobHeader: blobHeader, - Relays: relays, + Signature: c.Signature, + RelayKeys: relays, }, nil } @@ -205,13 +204,14 @@ func BlobCertificateFromProtobuf(proto *commonpb.BlobCertificate) (*BlobCertific return nil, fmt.Errorf("failed to create blob header: %v", err) } - relayKeys := make([]RelayKey, len(proto.GetRelays())) - for i, r := range proto.GetRelays() { + relayKeys := make([]RelayKey, len(proto.GetRelayKeys())) + for i, r := range proto.GetRelayKeys() { relayKeys[i] = RelayKey(r) } return &BlobCertificate{ BlobHeader: blobHeader, + Signature: proto.GetSignature(), RelayKeys: relayKeys, }, nil } @@ -293,9 +293,10 @@ func BatchFromProtobuf(proto *commonpb.Batch) (*Batch, error) { blobCerts[i] = &BlobCertificate{ BlobHeader: blobHeader, - RelayKeys: make([]RelayKey, len(cert.GetRelays())), + Signature: cert.GetSignature(), + RelayKeys: make([]RelayKey, len(cert.GetRelayKeys())), } - for j, r := range cert.GetRelays() { + for j, r := range cert.GetRelayKeys() { blobCerts[i].RelayKeys[j] = RelayKey(r) } } @@ -360,7 +361,7 @@ func (a *Attestation) ToProtobuf() (*disperserpb.Attestation, error) { }, nil } -type BlobVerificationInfo struct { +type BlobInclusionInfo struct { *BatchHeader BlobKey @@ -368,12 +369,12 @@ type BlobVerificationInfo struct { InclusionProof []byte } -func (v *BlobVerificationInfo) ToProtobuf(blobCert *BlobCertificate) (*disperserpb.BlobVerificationInfo, error) { +func (v *BlobInclusionInfo) ToProtobuf(blobCert *BlobCertificate) (*disperserpb.BlobInclusionInfo, error) { blobCertProto, err := blobCert.ToProtobuf() if err != nil { return nil, err } - return &disperserpb.BlobVerificationInfo{ + return &disperserpb.BlobInclusionInfo{ BlobCertificate: blobCertProto, BlobIndex: v.BlobIndex, InclusionProof: v.InclusionProof, diff --git a/core/v2/types_test.go b/core/v2/types_test.go index 8647ae5b5c..d6fcd11cfa 100644 --- a/core/v2/types_test.go +++ b/core/v2/types_test.go @@ -26,7 +26,6 @@ func TestConvertBatchToFromProtobuf(t *testing.T) { ReservationPeriod: 5, CumulativePayment: big.NewInt(100), }, - Signature: []byte{1, 2, 3}, } bh1 := &v2.BlobHeader{ BlobVersion: 0, @@ -37,15 +36,16 @@ func TestConvertBatchToFromProtobuf(t *testing.T) { ReservationPeriod: 6, CumulativePayment: big.NewInt(200), }, - Signature: []byte{1, 2, 3}, } blobCert0 := &v2.BlobCertificate{ BlobHeader: bh0, + Signature: []byte{1, 2, 3}, RelayKeys: []v2.RelayKey{0, 1}, } blobCert1 := &v2.BlobCertificate{ BlobHeader: bh1, + Signature: []byte{1, 2, 3}, RelayKeys: []v2.RelayKey{2, 3}, } @@ -82,7 +82,6 @@ func TestConvertBlobHeaderToFromProtobuf(t *testing.T) { ReservationPeriod: 5, CumulativePayment: big.NewInt(100), }, - Signature: []byte{1, 2, 3}, } pb, err := bh.ToProtobuf() @@ -110,11 +109,11 @@ func TestConvertBlobCertToFromProtobuf(t *testing.T) { ReservationPeriod: 5, CumulativePayment: big.NewInt(100), }, - Signature: []byte{1, 2, 3}, } blobCert := &v2.BlobCertificate{ BlobHeader: bh, + Signature: []byte{1, 2, 3}, RelayKeys: []v2.RelayKey{0, 1}, } diff --git a/disperser/apiserver/disperse_blob_v2.go b/disperser/apiserver/disperse_blob_v2.go index d70b3b33da..a97b250d04 100644 --- a/disperser/apiserver/disperse_blob_v2.go +++ b/disperser/apiserver/disperse_blob_v2.go @@ -35,16 +35,16 @@ func (s *DispersalServerV2) DisperseBlob(ctx context.Context, req *pb.DisperseBl finishedValidation := time.Now() s.metrics.reportValidateDispersalRequestLatency(finishedValidation.Sub(start)) - s.metrics.reportDisperseBlobSize(len(req.GetData())) + s.metrics.reportDisperseBlobSize(len(req.GetBlob())) - data := req.GetData() + data := req.GetBlob() blobHeader, err := corev2.BlobHeaderFromProtobuf(req.GetBlobHeader()) if err != nil { return nil, api.NewErrorInternal(err.Error()) } s.logger.Debug("received a new blob dispersal request", "blobSizeBytes", len(data), "quorums", req.GetBlobHeader().GetQuorumNumbers()) - blobKey, err := s.StoreBlob(ctx, data, blobHeader, time.Now(), onchainState.TTL) + blobKey, err := s.StoreBlob(ctx, data, blobHeader, req.GetSignature(), time.Now(), onchainState.TTL) if err != nil { return nil, err } @@ -57,7 +57,7 @@ func (s *DispersalServerV2) DisperseBlob(ctx context.Context, req *pb.DisperseBl }, nil } -func (s *DispersalServerV2) StoreBlob(ctx context.Context, data []byte, blobHeader *corev2.BlobHeader, requestedAt time.Time, ttl time.Duration) (corev2.BlobKey, error) { +func (s *DispersalServerV2) StoreBlob(ctx context.Context, data []byte, blobHeader *corev2.BlobHeader, signature []byte, requestedAt time.Time, ttl time.Duration) (corev2.BlobKey, error) { blobKey, err := blobHeader.BlobKey() if err != nil { return corev2.BlobKey{}, api.NewErrorInvalidArg(fmt.Sprintf("failed to get blob key: %v", err)) @@ -74,6 +74,7 @@ func (s *DispersalServerV2) StoreBlob(ctx context.Context, data []byte, blobHead blobMetadata := &dispv2.BlobMetadata{ BlobHeader: blobHeader, + Signature: signature, BlobStatus: dispv2.Queued, Expiry: uint64(requestedAt.Add(ttl).Unix()), NumRetries: 0, @@ -94,7 +95,11 @@ func (s *DispersalServerV2) StoreBlob(ctx context.Context, data []byte, blobHead } func (s *DispersalServerV2) validateDispersalRequest(ctx context.Context, req *pb.DisperseBlobRequest, onchainState *OnchainState) error { - data := req.GetData() + signature := req.GetSignature() + if len(signature) != 65 { + return api.NewErrorInvalidArg(fmt.Sprintf("signature is expected to be 65 bytes, but got %d bytes", len(signature))) + } + data := req.GetBlob() blobSize := len(data) if blobSize == 0 { return api.NewErrorInvalidArg("blob size must be greater than 0") @@ -155,7 +160,7 @@ func (s *DispersalServerV2) validateDispersalRequest(ctx context.Context, req *p return api.NewErrorInvalidArg(fmt.Sprintf("invalid blob version %d; valid blob versions are: %v", blobHeaderProto.GetVersion(), onchainState.BlobVersionParameters.Keys())) } - if err = s.authenticator.AuthenticateBlobRequest(blobHeader); err != nil { + if err = s.authenticator.AuthenticateBlobRequest(blobHeader, signature); err != nil { return api.NewErrorInvalidArg(fmt.Sprintf("authentication failed: %s", err.Error())) } diff --git a/disperser/apiserver/get_blob_status_v2.go b/disperser/apiserver/get_blob_status_v2.go index dfb4942ad3..3aa77be8b5 100644 --- a/disperser/apiserver/get_blob_status_v2.go +++ b/disperser/apiserver/get_blob_status_v2.go @@ -49,25 +49,25 @@ func (s *DispersalServerV2) GetBlobStatus(ctx context.Context, req *pb.BlobStatu return nil, api.NewErrorInternal(fmt.Sprintf("failed to get blob certificate: %s", err.Error())) } - // For certified blobs, include signed batch and blob verification info - blobVerificationInfos, err := s.blobMetadataStore.GetBlobVerificationInfos(ctx, blobKey) + // For certified blobs, include signed batch and blob inclusion info + blobInclusionInfos, err := s.blobMetadataStore.GetBlobInclusionInfos(ctx, blobKey) if err != nil { - s.logger.Error("failed to get blob verification info", "err", err, "blobKey", blobKey.Hex()) - return nil, api.NewErrorInternal(fmt.Sprintf("failed to get blob verification info: %s", err.Error())) + s.logger.Error("failed to get blob inclusion info", "err", err, "blobKey", blobKey.Hex()) + return nil, api.NewErrorInternal(fmt.Sprintf("failed to get blob inclusion info: %s", err.Error())) } - if len(blobVerificationInfos) == 0 { - s.logger.Error("no verification info found for certified blob", "blobKey", blobKey.Hex()) - return nil, api.NewErrorInternal("no verification info found") + if len(blobInclusionInfos) == 0 { + s.logger.Error("no inclusion info found for certified blob", "blobKey", blobKey.Hex()) + return nil, api.NewErrorInternal("no inclusion info found") } - if len(blobVerificationInfos) > 1 { - s.logger.Warn("multiple verification info found for certified blob", "blobKey", blobKey.Hex()) + if len(blobInclusionInfos) > 1 { + s.logger.Warn("multiple inclusion info found for certified blob", "blobKey", blobKey.Hex()) } - for _, verificationInfo := range blobVerificationInfos { - // get the signed batch from this verification info - batchHeaderHash, err := verificationInfo.BatchHeader.Hash() + for _, inclusionInfo := range blobInclusionInfos { + // get the signed batch from this inclusion info + batchHeaderHash, err := inclusionInfo.BatchHeader.Hash() if err != nil { s.logger.Error("failed to get batch header hash", "err", err, "blobKey", blobKey.Hex()) continue @@ -78,9 +78,9 @@ func (s *DispersalServerV2) GetBlobStatus(ctx context.Context, req *pb.BlobStatu continue } - blobVerificationInfoProto, err := verificationInfo.ToProtobuf(cert) + blobInclusionInfoProto, err := inclusionInfo.ToProtobuf(cert) if err != nil { - s.logger.Error("failed to convert blob verification info to protobuf", "err", err, "blobKey", blobKey.Hex()) + s.logger.Error("failed to convert blob inclusion info to protobuf", "err", err, "blobKey", blobKey.Hex()) continue } @@ -97,7 +97,7 @@ func (s *DispersalServerV2) GetBlobStatus(ctx context.Context, req *pb.BlobStatu Header: batchHeader.ToProtobuf(), Attestation: attestationProto, }, - BlobVerificationInfo: blobVerificationInfoProto, + BlobInclusionInfo: blobInclusionInfoProto, }, nil } diff --git a/disperser/apiserver/server_v2.go b/disperser/apiserver/server_v2.go index 2a50ebc6db..91e61e7024 100644 --- a/disperser/apiserver/server_v2.go +++ b/disperser/apiserver/server_v2.go @@ -187,14 +187,14 @@ func (s *DispersalServerV2) GetBlobCommitment(ctx context.Context, req *pb.BlobC if s.prover == nil { return nil, api.NewErrorUnimplemented() } - blobSize := len(req.GetData()) + blobSize := len(req.GetBlob()) if blobSize == 0 { return nil, api.NewErrorInvalidArg("data is empty") } if uint64(blobSize) > s.maxNumSymbolsPerBlob*encoding.BYTES_PER_SYMBOL { return nil, api.NewErrorInvalidArg(fmt.Sprintf("blob size cannot exceed %v bytes", s.maxNumSymbolsPerBlob*encoding.BYTES_PER_SYMBOL)) } - c, err := s.prover.GetCommitmentsForPaddedLength(req.GetData()) + c, err := s.prover.GetCommitmentsForPaddedLength(req.GetBlob()) if err != nil { return nil, api.NewErrorInternal("failed to get commitments") } diff --git a/disperser/apiserver/server_v2_test.go b/disperser/apiserver/server_v2_test.go index ae5ebdacc4..8503e55cf8 100644 --- a/disperser/apiserver/server_v2_test.go +++ b/disperser/apiserver/server_v2_test.go @@ -75,12 +75,11 @@ func TestV2DisperseBlob(t *testing.T) { signer := auth.NewLocalBlobRequestSigner(privateKeyHex) sig, err := signer.SignBlobRequest(blobHeader) assert.NoError(t, err) - blobHeader.Signature = sig - blobHeaderProto.Signature = sig now := time.Now() reply, err := c.DispersalServerV2.DisperseBlob(ctx, &pbv2.DisperseBlobRequest{ - Data: data, + Blob: data, + Signature: sig, BlobHeader: blobHeaderProto, }) assert.NoError(t, err) @@ -109,7 +108,8 @@ func TestV2DisperseBlob(t *testing.T) { // Try dispersing the same blob; if payment is different, blob will be considered as a differernt blob // payment will cause failure before commitment check reply, err = c.DispersalServerV2.DisperseBlob(ctx, &pbv2.DisperseBlobRequest{ - Data: data, + Blob: data, + Signature: sig, BlobHeader: blobHeaderProto, }) assert.Nil(t, reply) @@ -138,7 +138,8 @@ func TestV2DisperseBlobRequestValidation(t *testing.T) { }, } _, err = c.DispersalServerV2.DisperseBlob(context.Background(), &pbv2.DisperseBlobRequest{ - Data: data, + Blob: data, + Signature: []byte{1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65}, BlobHeader: invalidReqProto, }) assert.ErrorContains(t, err, "blob header must contain commitments") @@ -157,7 +158,8 @@ func TestV2DisperseBlobRequestValidation(t *testing.T) { }, } _, err = c.DispersalServerV2.DisperseBlob(context.Background(), &pbv2.DisperseBlobRequest{ - Data: data, + Blob: data, + Signature: []byte{1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65}, BlobHeader: invalidReqProto, }) assert.ErrorContains(t, err, "too many quorum numbers specified") @@ -174,7 +176,8 @@ func TestV2DisperseBlobRequestValidation(t *testing.T) { }, } _, err = c.DispersalServerV2.DisperseBlob(context.Background(), &pbv2.DisperseBlobRequest{ - Data: data, + Blob: data, + Signature: []byte{1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65}, BlobHeader: invalidReqProto, }) assert.ErrorContains(t, err, "invalid quorum") @@ -191,12 +194,12 @@ func TestV2DisperseBlobRequestValidation(t *testing.T) { }, } _, err = c.DispersalServerV2.DisperseBlob(context.Background(), &pbv2.DisperseBlobRequest{ - Data: data, + Blob: data, + Signature: []byte{1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65}, BlobHeader: invalidReqProto, }) assert.ErrorContains(t, err, "invalid blob version 2") - // request with invalid signature invalidReqProto = &pbcommonv2.BlobHeader{ Version: 0, QuorumNumbers: []uint32{0, 1}, @@ -206,10 +209,11 @@ func TestV2DisperseBlobRequestValidation(t *testing.T) { ReservationPeriod: 5, CumulativePayment: big.NewInt(100).Bytes(), }, - Signature: []byte{1, 2, 3}, } + // request with invalid signature _, err = c.DispersalServerV2.DisperseBlob(context.Background(), &pbv2.DisperseBlobRequest{ - Data: data, + Blob: data, + Signature: []byte{1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65}, BlobHeader: invalidReqProto, }) assert.ErrorContains(t, err, "authentication failed") @@ -229,10 +233,10 @@ func TestV2DisperseBlobRequestValidation(t *testing.T) { assert.NoError(t, err) sig, err := signer.SignBlobRequest(blobHeader) assert.NoError(t, err) - invalidReqProto.Signature = sig _, err = c.DispersalServerV2.DisperseBlob(context.Background(), &pbv2.DisperseBlobRequest{ - Data: data, + Blob: data, + Signature: sig, BlobHeader: invalidReqProto, }) assert.ErrorContains(t, err, "invalid payment metadata") @@ -254,9 +258,9 @@ func TestV2DisperseBlobRequestValidation(t *testing.T) { assert.NoError(t, err) sig, err = signer.SignBlobRequest(blobHeader) assert.NoError(t, err) - invalidReqProto.Signature = sig _, err = c.DispersalServerV2.DisperseBlob(context.Background(), &pbv2.DisperseBlobRequest{ - Data: data, + Blob: data, + Signature: sig, BlobHeader: invalidReqProto, }) assert.ErrorContains(t, err, "invalid blob commitment") @@ -284,9 +288,9 @@ func TestV2DisperseBlobRequestValidation(t *testing.T) { assert.NoError(t, err) sig, err = signer.SignBlobRequest(blobHeader) assert.NoError(t, err) - validHeader.Signature = sig _, err = c.DispersalServerV2.DisperseBlob(context.Background(), &pbv2.DisperseBlobRequest{ - Data: data, + Blob: data, + Signature: sig, BlobHeader: validHeader, }) assert.ErrorContains(t, err, "blob size too big") @@ -348,13 +352,13 @@ func TestV2GetBlobStatus(t *testing.T) { } err = c.BlobMetadataStore.PutBatchHeader(ctx, batchHeader) require.NoError(t, err) - verificationInfo0 := &corev2.BlobVerificationInfo{ + inclusionInfo0 := &corev2.BlobInclusionInfo{ BatchHeader: batchHeader, BlobKey: blobKey, BlobIndex: 123, InclusionProof: []byte("inclusion proof"), } - err = c.BlobMetadataStore.PutBlobVerificationInfo(ctx, verificationInfo0) + err = c.BlobMetadataStore.PutBlobInclusionInfo(ctx, inclusionInfo0) require.NoError(t, err) attestation := &corev2.Attestation{ @@ -385,10 +389,10 @@ func TestV2GetBlobStatus(t *testing.T) { require.NoError(t, err) blobCertProto, err := blobCert.ToProtobuf() require.NoError(t, err) - require.Equal(t, blobHeaderProto, reply.GetBlobVerificationInfo().GetBlobCertificate().GetBlobHeader()) - require.Equal(t, blobCertProto.Relays, reply.GetBlobVerificationInfo().GetBlobCertificate().GetRelays()) - require.Equal(t, verificationInfo0.BlobIndex, reply.GetBlobVerificationInfo().GetBlobIndex()) - require.Equal(t, verificationInfo0.InclusionProof, reply.GetBlobVerificationInfo().GetInclusionProof()) + require.Equal(t, blobHeaderProto, reply.GetBlobInclusionInfo().GetBlobCertificate().GetBlobHeader()) + require.Equal(t, blobCertProto.RelayKeys, reply.GetBlobInclusionInfo().GetBlobCertificate().GetRelayKeys()) + require.Equal(t, inclusionInfo0.BlobIndex, reply.GetBlobInclusionInfo().GetBlobIndex()) + require.Equal(t, inclusionInfo0.InclusionProof, reply.GetBlobInclusionInfo().GetInclusionProof()) require.Equal(t, batchHeader.BatchRoot[:], reply.GetSignedBatch().GetHeader().BatchRoot) require.Equal(t, batchHeader.ReferenceBlockNumber, reply.GetSignedBatch().GetHeader().ReferenceBlockNumber) attestationProto, err := attestation.ToProtobuf() @@ -406,7 +410,7 @@ func TestV2GetBlobCommitment(t *testing.T) { commit, err := prover.GetCommitmentsForPaddedLength(data) require.NoError(t, err) reply, err := c.DispersalServerV2.GetBlobCommitment(context.Background(), &pbv2.BlobCommitmentRequest{ - Data: data, + Blob: data, }) require.NoError(t, err) commitment, err := new(encoding.G1Commitment).Deserialize(reply.BlobCommitment.Commitment) @@ -580,11 +584,10 @@ func TestInvalidLength(t *testing.T) { signer := auth.NewLocalBlobRequestSigner(privateKeyHex) sig, err := signer.SignBlobRequest(blobHeader) assert.NoError(t, err) - blobHeader.Signature = sig - blobHeaderProto.Signature = sig _, err = c.DispersalServerV2.DisperseBlob(ctx, &pbv2.DisperseBlobRequest{ - Data: data, + Blob: data, + Signature: sig, BlobHeader: blobHeaderProto, }) diff --git a/disperser/common/v2/blob.go b/disperser/common/v2/blob.go index fab63c3582..634eff650b 100644 --- a/disperser/common/v2/blob.go +++ b/disperser/common/v2/blob.go @@ -72,6 +72,7 @@ func BlobStatusFromProtobuf(s pb.BlobStatus) (BlobStatus, error) { // BlobMetadata is an internal representation of a blob's metadata. type BlobMetadata struct { BlobHeader *core.BlobHeader + Signature []byte // BlobStatus indicates the current status of the blob BlobStatus BlobStatus diff --git a/disperser/common/v2/blobstore/dynamo_metadata_store.go b/disperser/common/v2/blobstore/dynamo_metadata_store.go index 6438fc64d6..0841b8d02a 100644 --- a/disperser/common/v2/blobstore/dynamo_metadata_store.go +++ b/disperser/common/v2/blobstore/dynamo_metadata_store.go @@ -808,8 +808,8 @@ func (s *BlobMetadataStore) GetAttestation(ctx context.Context, batchHeaderHash return attestation, nil } -func (s *BlobMetadataStore) PutBlobVerificationInfo(ctx context.Context, verificationInfo *corev2.BlobVerificationInfo) error { - item, err := MarshalBlobVerificationInfo(verificationInfo) +func (s *BlobMetadataStore) PutBlobInclusionInfo(ctx context.Context, inclusionInfo *corev2.BlobInclusionInfo) error { + item, err := MarshalBlobInclusionInfo(inclusionInfo) if err != nil { return err } @@ -822,12 +822,12 @@ func (s *BlobMetadataStore) PutBlobVerificationInfo(ctx context.Context, verific return err } -// PutBlobVerificationInfos puts multiple verification infos into the store +// PutBlobInclusionInfos puts multiple inclusion infos into the store // It retries failed items up to 2 times -func (s *BlobMetadataStore) PutBlobVerificationInfos(ctx context.Context, verificationInfos []*corev2.BlobVerificationInfo) error { - items := make([]commondynamodb.Item, len(verificationInfos)) - for i, info := range verificationInfos { - item, err := MarshalBlobVerificationInfo(info) +func (s *BlobMetadataStore) PutBlobInclusionInfos(ctx context.Context, inclusionInfos []*corev2.BlobInclusionInfo) error { + items := make([]commondynamodb.Item, len(inclusionInfos)) + for i, info := range inclusionInfos { + item, err := MarshalBlobInclusionInfo(info) if err != nil { return err } @@ -842,7 +842,7 @@ func (s *BlobMetadataStore) PutBlobVerificationInfos(ctx context.Context, verifi } if len(failedItems) > 0 { - s.logger.Warnf("failed to put verification infos, retrying: %v", failedItems) + s.logger.Warnf("failed to put inclusion infos, retrying: %v", failedItems) items = failedItems time.Sleep(time.Duration(math.Pow(2, float64(i))) * time.Second) // Wait before retrying } else { @@ -853,7 +853,7 @@ func (s *BlobMetadataStore) PutBlobVerificationInfos(ctx context.Context, verifi return nil } -func (s *BlobMetadataStore) GetBlobVerificationInfo(ctx context.Context, blobKey corev2.BlobKey, batchHeaderHash [32]byte) (*corev2.BlobVerificationInfo, error) { +func (s *BlobMetadataStore) GetBlobInclusionInfo(ctx context.Context, blobKey corev2.BlobKey, batchHeaderHash [32]byte) (*corev2.BlobInclusionInfo, error) { bhh := hex.EncodeToString(batchHeaderHash[:]) item, err := s.dynamoDBClient.GetItem(ctx, s.tableName, map[string]types.AttributeValue{ "PK": &types.AttributeValueMemberS{ @@ -869,10 +869,10 @@ func (s *BlobMetadataStore) GetBlobVerificationInfo(ctx context.Context, blobKey } if item == nil { - return nil, fmt.Errorf("%w: verification info not found for key %s", common.ErrMetadataNotFound, blobKey.Hex()) + return nil, fmt.Errorf("%w: inclusion info not found for key %s", common.ErrMetadataNotFound, blobKey.Hex()) } - info, err := UnmarshalBlobVerificationInfo(item) + info, err := UnmarshalBlobInclusionInfo(item) if err != nil { return nil, err } @@ -880,7 +880,7 @@ func (s *BlobMetadataStore) GetBlobVerificationInfo(ctx context.Context, blobKey return info, nil } -func (s *BlobMetadataStore) GetBlobVerificationInfos(ctx context.Context, blobKey corev2.BlobKey) ([]*corev2.BlobVerificationInfo, error) { +func (s *BlobMetadataStore) GetBlobInclusionInfos(ctx context.Context, blobKey corev2.BlobKey) ([]*corev2.BlobInclusionInfo, error) { items, err := s.dynamoDBClient.Query(ctx, s.tableName, "PK = :pk AND begins_with(SK, :prefix)", commondynamodb.ExpressionValues{ ":pk": &types.AttributeValueMemberS{ Value: blobKeyPrefix + blobKey.Hex(), @@ -895,14 +895,14 @@ func (s *BlobMetadataStore) GetBlobVerificationInfos(ctx context.Context, blobKe } if len(items) == 0 { - return nil, fmt.Errorf("%w: verification info not found for key %s", common.ErrMetadataNotFound, blobKey.Hex()) + return nil, fmt.Errorf("%w: inclusion info not found for key %s", common.ErrMetadataNotFound, blobKey.Hex()) } - responses := make([]*corev2.BlobVerificationInfo, len(items)) + responses := make([]*corev2.BlobInclusionInfo, len(items)) for i, item := range items { - responses[i], err = UnmarshalBlobVerificationInfo(item) + responses[i], err = UnmarshalBlobInclusionInfo(item) if err != nil { - return nil, fmt.Errorf("failed to unmarshal verification info: %w", err) + return nil, fmt.Errorf("failed to unmarshal inclusion info: %w", err) } } @@ -1307,32 +1307,32 @@ func UnmarshalBatchHeader(item commondynamodb.Item) (*corev2.BatchHeader, error) return &header, nil } -func MarshalBlobVerificationInfo(verificationInfo *corev2.BlobVerificationInfo) (commondynamodb.Item, error) { - fields, err := attributevalue.MarshalMap(verificationInfo) +func MarshalBlobInclusionInfo(inclusionInfo *corev2.BlobInclusionInfo) (commondynamodb.Item, error) { + fields, err := attributevalue.MarshalMap(inclusionInfo) if err != nil { - return nil, fmt.Errorf("failed to marshal blob verification info: %w", err) + return nil, fmt.Errorf("failed to marshal blob inclusion info: %w", err) } - bhh, err := verificationInfo.BatchHeader.Hash() + bhh, err := inclusionInfo.BatchHeader.Hash() if err != nil { return nil, fmt.Errorf("failed to hash batch header: %w", err) } hashstr := hex.EncodeToString(bhh[:]) - fields["PK"] = &types.AttributeValueMemberS{Value: blobKeyPrefix + verificationInfo.BlobKey.Hex()} + fields["PK"] = &types.AttributeValueMemberS{Value: blobKeyPrefix + inclusionInfo.BlobKey.Hex()} fields["SK"] = &types.AttributeValueMemberS{Value: batchHeaderKeyPrefix + hashstr} return fields, nil } -func UnmarshalBlobVerificationInfo(item commondynamodb.Item) (*corev2.BlobVerificationInfo, error) { - verificationInfo := corev2.BlobVerificationInfo{} - err := attributevalue.UnmarshalMap(item, &verificationInfo) +func UnmarshalBlobInclusionInfo(item commondynamodb.Item) (*corev2.BlobInclusionInfo, error) { + inclusionInfo := corev2.BlobInclusionInfo{} + err := attributevalue.UnmarshalMap(item, &inclusionInfo) if err != nil { - return nil, fmt.Errorf("failed to unmarshal blob verification info: %w", err) + return nil, fmt.Errorf("failed to unmarshal blob inclusion info: %w", err) } - return &verificationInfo, nil + return &inclusionInfo, nil } func MarshalAttestation(attestation *corev2.Attestation) (commondynamodb.Item, error) { diff --git a/disperser/common/v2/blobstore/dynamo_metadata_store_test.go b/disperser/common/v2/blobstore/dynamo_metadata_store_test.go index b1c8418121..238b2b1e1c 100644 --- a/disperser/common/v2/blobstore/dynamo_metadata_store_test.go +++ b/disperser/common/v2/blobstore/dynamo_metadata_store_test.go @@ -184,6 +184,7 @@ func TestBlobMetadataStoreOperations(t *testing.T) { now := time.Now() metadata1 := &v2.BlobMetadata{ BlobHeader: blobHeader1, + Signature: []byte{1, 2, 3}, BlobStatus: v2.Queued, Expiry: uint64(now.Add(time.Hour).Unix()), NumRetries: 0, @@ -191,6 +192,7 @@ func TestBlobMetadataStoreOperations(t *testing.T) { } metadata2 := &v2.BlobMetadata{ BlobHeader: blobHeader2, + Signature: []byte{4, 5, 6}, BlobStatus: v2.Certified, Expiry: uint64(now.Add(time.Hour).Unix()), NumRetries: 0, @@ -258,6 +260,7 @@ func TestBlobMetadataStoreGetBlobMetadataByRequestedAtWithIdenticalTimestamp(t * } metadata := &v2.BlobMetadata{ BlobHeader: blobHeader, + Signature: []byte{1, 2, 3}, BlobStatus: v2.Encoded, Expiry: uint64(time.Now().Add(time.Hour).Unix()), NumRetries: 0, @@ -366,6 +369,7 @@ func TestBlobMetadataStoreGetBlobMetadataByRequestedAt(t *testing.T) { now := time.Now() metadata := &v2.BlobMetadata{ BlobHeader: blobHeader, + Signature: []byte{1, 2, 3}, BlobStatus: v2.Encoded, Expiry: uint64(now.Add(time.Hour).Unix()), NumRetries: 0, @@ -606,6 +610,7 @@ func TestBlobMetadataStoreCerts(t *testing.T) { blobKey, blobHeader := newBlob(t) blobCert := &corev2.BlobCertificate{ BlobHeader: blobHeader, + Signature: []byte("signature"), RelayKeys: []corev2.RelayKey{0, 2, 4}, } fragmentInfo := &encoding.FragmentInfo{ @@ -642,8 +647,8 @@ func TestBlobMetadataStoreCerts(t *testing.T) { ReservationPeriod: uint32(i), CumulativePayment: big.NewInt(321), }, - Signature: []byte("signature"), }, + Signature: []byte("signature"), RelayKeys: []corev2.RelayKey{0}, } blobKey, err := blobCert.BlobHeader.BlobKey() @@ -682,6 +687,7 @@ func TestBlobMetadataStoreUpdateBlobStatus(t *testing.T) { now := time.Now() metadata := &v2.BlobMetadata{ BlobHeader: blobHeader, + Signature: []byte("signature"), BlobStatus: v2.Queued, Expiry: uint64(now.Add(time.Hour).Unix()), NumRetries: 0, @@ -819,7 +825,7 @@ func TestBlobMetadataStoreDispersals(t *testing.T) { }) } -func TestBlobMetadataStoreVerificationInfo(t *testing.T) { +func TestBlobMetadataStoreInclusionInfo(t *testing.T) { ctx := context.Background() blobKey := corev2.BlobKey{1, 1, 1} batchHeader := &corev2.BatchHeader{ @@ -828,46 +834,46 @@ func TestBlobMetadataStoreVerificationInfo(t *testing.T) { } bhh, err := batchHeader.Hash() assert.NoError(t, err) - verificationInfo := &corev2.BlobVerificationInfo{ + inclusionInfo := &corev2.BlobInclusionInfo{ BatchHeader: batchHeader, BlobKey: blobKey, BlobIndex: 10, InclusionProof: []byte("proof"), } - err = blobMetadataStore.PutBlobVerificationInfo(ctx, verificationInfo) + err = blobMetadataStore.PutBlobInclusionInfo(ctx, inclusionInfo) assert.NoError(t, err) - fetchedInfo, err := blobMetadataStore.GetBlobVerificationInfo(ctx, blobKey, bhh) + fetchedInfo, err := blobMetadataStore.GetBlobInclusionInfo(ctx, blobKey, bhh) assert.NoError(t, err) - assert.Equal(t, verificationInfo, fetchedInfo) + assert.Equal(t, inclusionInfo, fetchedInfo) - // attempt to put verification info with the same key should fail - err = blobMetadataStore.PutBlobVerificationInfo(ctx, verificationInfo) + // attempt to put inclusion info with the same key should fail + err = blobMetadataStore.PutBlobInclusionInfo(ctx, inclusionInfo) assert.ErrorIs(t, err, common.ErrAlreadyExists) - // put multiple verification infos + // put multiple inclusion infos blobKey1 := corev2.BlobKey{2, 2, 2} - verificationInfo1 := &corev2.BlobVerificationInfo{ + inclusionInfo1 := &corev2.BlobInclusionInfo{ BatchHeader: batchHeader, BlobKey: blobKey1, BlobIndex: 12, InclusionProof: []byte("proof 1"), } blobKey2 := corev2.BlobKey{3, 3, 3} - verificationInfo2 := &corev2.BlobVerificationInfo{ + inclusionInfo2 := &corev2.BlobInclusionInfo{ BatchHeader: batchHeader, BlobKey: blobKey2, BlobIndex: 14, InclusionProof: []byte("proof 2"), } - err = blobMetadataStore.PutBlobVerificationInfos(ctx, []*corev2.BlobVerificationInfo{verificationInfo1, verificationInfo2}) + err = blobMetadataStore.PutBlobInclusionInfos(ctx, []*corev2.BlobInclusionInfo{inclusionInfo1, inclusionInfo2}) assert.NoError(t, err) // test retries nonTransientError := errors.New("non transient error") mockDynamoClient.On("PutItems", mock.Anything, mock.Anything, mock.Anything).Return(nil, nonTransientError).Once() - err = mockedBlobMetadataStore.PutBlobVerificationInfos(ctx, []*corev2.BlobVerificationInfo{verificationInfo1, verificationInfo2}) + err = mockedBlobMetadataStore.PutBlobInclusionInfos(ctx, []*corev2.BlobInclusionInfo{inclusionInfo1, inclusionInfo2}) assert.ErrorIs(t, err, nonTransientError) mockDynamoClient.On("PutItems", mock.Anything, mock.Anything, mock.Anything).Return([]dynamodb.Item{ @@ -886,7 +892,7 @@ func TestBlobMetadataStoreVerificationInfo(t *testing.T) { assert.Len(t, items, 1) }). Once() - err = mockedBlobMetadataStore.PutBlobVerificationInfos(ctx, []*corev2.BlobVerificationInfo{verificationInfo1, verificationInfo2}) + err = mockedBlobMetadataStore.PutBlobInclusionInfos(ctx, []*corev2.BlobInclusionInfo{inclusionInfo1, inclusionInfo2}) assert.NoError(t, err) mockDynamoClient.AssertNumberOfCalls(t, "PutItems", 3) } @@ -993,7 +999,6 @@ func newBlob(t *testing.T) (corev2.BlobKey, *corev2.BlobHeader) { ReservationPeriod: uint32(reservationPeriod.Int64()), CumulativePayment: cumulativePayment, }, - Signature: sig, } bk, err := bh.BlobKey() require.NoError(t, err) diff --git a/disperser/controller/controller_test.go b/disperser/controller/controller_test.go index 8c78408374..1444938d44 100644 --- a/disperser/controller/controller_test.go +++ b/disperser/controller/controller_test.go @@ -175,7 +175,6 @@ func newBlob(t *testing.T, quorumNumbers []core.QuorumID) (corev2.BlobKey, *core ReservationPeriod: uint32(reservationPeriod.Int64()), CumulativePayment: cumulativePayment, }, - Signature: sig, } bk, err := bh.BlobKey() require.NoError(t, err) diff --git a/disperser/controller/dispatcher.go b/disperser/controller/dispatcher.go index 4b46d9aec4..99ea68841b 100644 --- a/disperser/controller/dispatcher.go +++ b/disperser/controller/dispatcher.go @@ -137,7 +137,7 @@ func (d *Dispatcher) HandleBatch(ctx context.Context) (chan core.SigningMessage, referenceBlockNumber := uint64(currentBlockNumber) - d.FinalizationBlockDelay // Get a batch of blobs to dispatch - // This also writes a batch header and blob verification info for each blob in metadata store + // This also writes a batch header and blob inclusion info for each blob in metadata store batchData, err := d.NewBatch(ctx, referenceBlockNumber) if err != nil { return nil, nil, err @@ -438,9 +438,9 @@ func (d *Dispatcher) NewBatch(ctx context.Context, referenceBlockNumber uint64) return nil, fmt.Errorf("failed to put batch header: %w", err) } - // accumulate verification infos in a map to avoid duplicate entries + // accumulate inclusion infos in a map to avoid duplicate entries // batch write operation fails if there are duplicate entries - verificationInfoMap := make(map[corev2.BlobKey]*corev2.BlobVerificationInfo) + inclusionInfoMap := make(map[corev2.BlobKey]*corev2.BlobInclusionInfo) for i, cert := range certs { if cert == nil || cert.BlobHeader == nil { return nil, fmt.Errorf("invalid blob certificate") @@ -455,7 +455,7 @@ func (d *Dispatcher) NewBatch(ctx context.Context, referenceBlockNumber uint64) return nil, fmt.Errorf("failed to generate merkle proof: %w", err) } - verificationInfoMap[blobKey] = &corev2.BlobVerificationInfo{ + inclusionInfoMap[blobKey] = &corev2.BlobInclusionInfo{ BatchHeader: batchHeader, BlobKey: blobKey, BlobIndex: uint32(i), @@ -466,17 +466,17 @@ func (d *Dispatcher) NewBatch(ctx context.Context, referenceBlockNumber uint64) proofGenerationFinished := time.Now() d.metrics.reportProofLatency(proofGenerationFinished.Sub(putBatchHeaderFinished)) - verificationInfos := make([]*corev2.BlobVerificationInfo, len(verificationInfoMap)) + inclusionInfos := make([]*corev2.BlobInclusionInfo, len(inclusionInfoMap)) i := 0 - for _, v := range verificationInfoMap { - verificationInfos[i] = v + for _, v := range inclusionInfoMap { + inclusionInfos[i] = v i++ } - err = d.blobMetadataStore.PutBlobVerificationInfos(ctx, verificationInfos) - putBlobVerificationInfosFinished := time.Now() - d.metrics.reportPutVerificationInfosLatency(putBlobVerificationInfosFinished.Sub(proofGenerationFinished)) + err = d.blobMetadataStore.PutBlobInclusionInfos(ctx, inclusionInfos) + putBlobInclusionInfosFinished := time.Now() + d.metrics.reportPutInclusionInfosLatency(putBlobInclusionInfosFinished.Sub(proofGenerationFinished)) if err != nil { - return nil, fmt.Errorf("failed to put blob verification infos: %w", err) + return nil, fmt.Errorf("failed to put blob inclusion infos: %w", err) } if cursor != nil { diff --git a/disperser/controller/dispatcher_metrics.go b/disperser/controller/dispatcher_metrics.go index c63a500b23..1c6aaf34d5 100644 --- a/disperser/controller/dispatcher_metrics.go +++ b/disperser/controller/dispatcher_metrics.go @@ -23,7 +23,7 @@ type dispatcherMetrics struct { buildMerkleTreeLatency *prometheus.SummaryVec putBatchHeaderLatency *prometheus.SummaryVec proofLatency *prometheus.SummaryVec - putVerificationInfosLatency *prometheus.SummaryVec + putInclusionInfosLatency *prometheus.SummaryVec poolSubmissionLatency *prometheus.SummaryVec putDispersalRequestLatency *prometheus.SummaryVec sendChunksLatency *prometheus.SummaryVec @@ -132,11 +132,11 @@ func newDispatcherMetrics(registry *prometheus.Registry) *dispatcherMetrics { []string{}, ) - putVerificationInfosLatency := promauto.With(registry).NewSummaryVec( + putInclusionInfosLatency := promauto.With(registry).NewSummaryVec( prometheus.SummaryOpts{ Namespace: dispatcherNamespace, Name: "put_verification_infos_latency_ms", - Help: "The time required to put the verification infos (part of NewBatch()).", + Help: "The time required to put the inclusion infos (part of NewBatch()).", Objectives: objectives, }, []string{}, @@ -269,7 +269,7 @@ func newDispatcherMetrics(registry *prometheus.Registry) *dispatcherMetrics { buildMerkleTreeLatency: buildMerkleTreeLatency, putBatchHeaderLatency: putBatchHeaderLatency, proofLatency: proofLatency, - putVerificationInfosLatency: putVerificationInfosLatency, + putInclusionInfosLatency: putInclusionInfosLatency, poolSubmissionLatency: poolSubmissionLatency, putDispersalRequestLatency: putDispersalRequestLatency, sendChunksLatency: sendChunksLatency, @@ -318,8 +318,8 @@ func (m *dispatcherMetrics) reportProofLatency(duration time.Duration) { m.proofLatency.WithLabelValues().Observe(common.ToMilliseconds(duration)) } -func (m *dispatcherMetrics) reportPutVerificationInfosLatency(duration time.Duration) { - m.putVerificationInfosLatency.WithLabelValues().Observe(common.ToMilliseconds(duration)) +func (m *dispatcherMetrics) reportPutInclusionInfosLatency(duration time.Duration) { + m.putInclusionInfosLatency.WithLabelValues().Observe(common.ToMilliseconds(duration)) } func (m *dispatcherMetrics) reportPoolSubmissionLatency(duration time.Duration) { diff --git a/disperser/controller/dispatcher_test.go b/disperser/controller/dispatcher_test.go index 00c358cd95..4583cf9c49 100644 --- a/disperser/controller/dispatcher_test.go +++ b/disperser/controller/dispatcher_test.go @@ -104,7 +104,7 @@ func TestDispatcherHandleBatch(t *testing.T) { require.Equal(t, v2.Certified, bm1.BlobStatus) // Get batch header - vis, err := components.BlobMetadataStore.GetBlobVerificationInfos(ctx, objs.blobKeys[0]) + vis, err := components.BlobMetadataStore.GetBlobInclusionInfos(ctx, objs.blobKeys[0]) require.NoError(t, err) require.Len(t, vis, 1) bhh, err = vis[0].BatchHeader.Hash() @@ -182,7 +182,7 @@ func TestDispatcherInsufficientSignatures(t *testing.T) { } // Get batch header - vis, err := components.BlobMetadataStore.GetBlobVerificationInfos(ctx, failedObjs.blobKeys[0]) + vis, err := components.BlobMetadataStore.GetBlobInclusionInfos(ctx, failedObjs.blobKeys[0]) require.NoError(t, err) require.Len(t, vis, 1) bhh, err = vis[0].BatchHeader.Hash() @@ -254,7 +254,7 @@ func TestDispatcherInsufficientSignatures2(t *testing.T) { } // Get batch header - vis, err := components.BlobMetadataStore.GetBlobVerificationInfos(ctx, objsInBothQuorum.blobKeys[0]) + vis, err := components.BlobMetadataStore.GetBlobInclusionInfos(ctx, objsInBothQuorum.blobKeys[0]) require.NoError(t, err) require.Len(t, vis, 1) bhh, err := vis[0].BatchHeader.Hash() @@ -325,8 +325,8 @@ func TestDispatcherNewBatch(t *testing.T) { require.NotNil(t, bh) require.Equal(t, bh, batch.BatchHeader) - // Test that blob verification infos are written - vi0, err := components.BlobMetadataStore.GetBlobVerificationInfo(ctx, objs.blobKeys[0], bhh) + // Test that blob inclusion infos are written + vi0, err := components.BlobMetadataStore.GetBlobInclusionInfo(ctx, objs.blobKeys[0], bhh) require.NoError(t, err) require.NotNil(t, vi0) cert := batch.BlobCertificates[vi0.BlobIndex] @@ -360,8 +360,8 @@ func TestDispatcherBuildMerkleTree(t *testing.T) { ReservationPeriod: 0, CumulativePayment: big.NewInt(532), }, - Signature: []byte("signature"), }, + Signature: []byte("signature"), RelayKeys: []corev2.RelayKey{0}, }, { @@ -374,8 +374,8 @@ func TestDispatcherBuildMerkleTree(t *testing.T) { ReservationPeriod: 0, CumulativePayment: big.NewInt(532), }, - Signature: []byte("signature"), }, + Signature: []byte("signature"), RelayKeys: []corev2.RelayKey{0, 1, 2}, }, } diff --git a/disperser/controller/encoding_manager.go b/disperser/controller/encoding_manager.go index 85fc6d7f15..480d8b1adb 100644 --- a/disperser/controller/encoding_manager.go +++ b/disperser/controller/encoding_manager.go @@ -210,6 +210,7 @@ func (e *EncodingManager) HandleBatch(ctx context.Context) error { } cert := &corev2.BlobCertificate{ BlobHeader: blob.BlobHeader, + Signature: blob.Signature, RelayKeys: relayKeys, } diff --git a/disperser/dataapi/v2/server_v2.go b/disperser/dataapi/v2/server_v2.go index 62700f9899..bc10bef58c 100644 --- a/disperser/dataapi/v2/server_v2.go +++ b/disperser/dataapi/v2/server_v2.go @@ -67,8 +67,8 @@ type ( Certificate *corev2.BlobCertificate `json:"blob_certificate"` } - BlobVerificationInfoResponse struct { - VerificationInfo *corev2.BlobVerificationInfo `json:"blob_verification_info"` + BlobInclusionInfoResponse struct { + InclusionInfo *corev2.BlobInclusionInfo `json:"blob_inclusion_info"` } BlobFeedResponse struct { @@ -77,9 +77,9 @@ type ( } BatchResponse struct { - BatchHeaderHash string `json:"batch_header_hash"` - SignedBatch *SignedBatch `json:"signed_batch"` - BlobVerificationInfos []*corev2.BlobVerificationInfo `json:"blob_verification_infos"` + BatchHeaderHash string `json:"batch_header_hash"` + SignedBatch *SignedBatch `json:"signed_batch"` + BlobInclusionInfos []*corev2.BlobInclusionInfo `json:"blob_inclusion_infos"` } MetricSummary struct { @@ -193,7 +193,7 @@ func (s *ServerV2) Start() error { blob.GET("/blobs/feed", s.FetchBlobFeedHandler) blob.GET("/blobs/:blob_key", s.FetchBlobHandler) blob.GET("/blobs/:blob_key/certificate", s.FetchBlobCertificateHandler) - blob.GET("/blobs/:blob_key/verification-info", s.FetchBlobVerificationInfoHandler) + blob.GET("/blobs/:blob_key/inclusion-info", s.FetchBlobInclusionInfoHandler) } batch := v2.Group("/batch") { @@ -483,45 +483,45 @@ func (s *ServerV2) FetchBlobCertificateHandler(c *gin.Context) { c.JSON(http.StatusOK, response) } -// FetchBlobVerificationInfoHandler godoc +// FetchBlobInclusionInfoHandler godoc // -// @Summary Fetch blob verification info by blob key and batch header hash +// @Summary Fetch blob inclusion info by blob key and batch header hash // @Tags Blob // @Produce json // @Param blob_key path string true "Blob key in hex string" // @Param batch_header_hash path string true "Batch header hash in hex string" // -// @Success 200 {object} BlobVerificationInfoResponse +// @Success 200 {object} BlobInclusionInfoResponse // @Failure 400 {object} ErrorResponse "error: Bad request" // @Failure 404 {object} ErrorResponse "error: Not found" // @Failure 500 {object} ErrorResponse "error: Server error" -// @Router /blobs/{blob_key}/verification-info [get] -func (s *ServerV2) FetchBlobVerificationInfoHandler(c *gin.Context) { +// @Router /blobs/{blob_key}/inclusion-info [get] +func (s *ServerV2) FetchBlobInclusionInfoHandler(c *gin.Context) { start := time.Now() blobKey, err := corev2.HexToBlobKey(c.Param("blob_key")) if err != nil { - s.metrics.IncrementInvalidArgRequestNum("FetchBlobVerificationInfo") + s.metrics.IncrementInvalidArgRequestNum("FetchBlobInclusionInfo") errorResponse(c, err) return } batchHeaderHashHex := c.Query("batch_header_hash") batchHeaderHash, err := dataapi.ConvertHexadecimalToBytes([]byte(batchHeaderHashHex)) if err != nil { - s.metrics.IncrementInvalidArgRequestNum("FetchBlobVerificationInfo") + s.metrics.IncrementInvalidArgRequestNum("FetchBlobInclusionInfo") errorResponse(c, err) return } - bvi, err := s.blobMetadataStore.GetBlobVerificationInfo(c.Request.Context(), blobKey, batchHeaderHash) + bvi, err := s.blobMetadataStore.GetBlobInclusionInfo(c.Request.Context(), blobKey, batchHeaderHash) if err != nil { - s.metrics.IncrementFailedRequestNum("FetchBlobVerificationInfo") + s.metrics.IncrementFailedRequestNum("FetchBlobInclusionInfo") errorResponse(c, err) return } - response := &BlobVerificationInfoResponse{ - VerificationInfo: bvi, + response := &BlobInclusionInfoResponse{ + InclusionInfo: bvi, } - s.metrics.IncrementSuccessfulRequestNum("FetchBlobVerificationInfo") - s.metrics.ObserveLatency("FetchBlobVerificationInfo", float64(time.Since(start).Milliseconds())) + s.metrics.IncrementSuccessfulRequestNum("FetchBlobInclusionInfo") + s.metrics.ObserveLatency("FetchBlobInclusionInfo", float64(time.Since(start).Milliseconds())) c.Writer.Header().Set(cacheControlParam, fmt.Sprintf("max-age=%d", maxFeedBlobAge)) c.JSON(http.StatusOK, response) } @@ -556,7 +556,7 @@ func (s *ServerV2) FetchBatchHandler(c *gin.Context) { errorResponse(c, err) return } - // TODO: support fetch of blob verification info + // TODO: support fetch of blob inclusion info batchResponse := &BatchResponse{ BatchHeaderHash: batchHeaderHashHex, SignedBatch: &SignedBatch{ diff --git a/disperser/dataapi/v2/server_v2_test.go b/disperser/dataapi/v2/server_v2_test.go index 1e914b9c23..11d24e574a 100644 --- a/disperser/dataapi/v2/server_v2_test.go +++ b/disperser/dataapi/v2/server_v2_test.go @@ -253,8 +253,7 @@ func makeBlobHeaderV2(t *testing.T) *corev2.BlobHeader { ReservationPeriod: uint32(reservationPeriod.Int64()), CumulativePayment: cumulativePayment, }, - Signature: sig, - Salt: uint32(salt.Int64()), + Salt: uint32(salt.Int64()), } } @@ -320,7 +319,6 @@ func TestFetchBlobHandlerV2(t *testing.T) { assert.Equal(t, "Queued", response.Status) assert.Equal(t, uint16(0), response.BlobHeader.BlobVersion) - assert.Equal(t, blobHeader.Signature, response.BlobHeader.Signature) assert.Equal(t, blobHeader.PaymentMetadata.AccountID, response.BlobHeader.PaymentMetadata.AccountID) assert.Equal(t, blobHeader.PaymentMetadata.ReservationPeriod, response.BlobHeader.PaymentMetadata.ReservationPeriod) assert.Equal(t, blobHeader.PaymentMetadata.CumulativePayment, response.BlobHeader.PaymentMetadata.CumulativePayment) @@ -335,6 +333,7 @@ func TestFetchBlobCertificateHandler(t *testing.T) { require.NoError(t, err) blobCert := &corev2.BlobCertificate{ BlobHeader: blobHeader, + Signature: []byte{0, 1, 2, 3, 4}, RelayKeys: []corev2.RelayKey{0, 2, 4}, } fragmentInfo := &encoding.FragmentInfo{ @@ -351,7 +350,7 @@ func TestFetchBlobCertificateHandler(t *testing.T) { assert.Equal(t, blobCert.RelayKeys, response.Certificate.RelayKeys) assert.Equal(t, uint16(0), response.Certificate.BlobHeader.BlobVersion) - assert.Equal(t, blobHeader.Signature, response.Certificate.BlobHeader.Signature) + assert.Equal(t, blobCert.Signature, response.Certificate.Signature) } func TestFetchBlobFeedHandler(t *testing.T) { @@ -388,6 +387,7 @@ func TestFetchBlobFeedHandler(t *testing.T) { now := time.Now() metadata := &v2.BlobMetadata{ BlobHeader: blobHeader, + Signature: []byte{0, 1, 2, 3, 4}, BlobStatus: v2.Encoded, Expiry: uint64(now.Add(time.Hour).Unix()), NumRetries: 0, @@ -551,10 +551,10 @@ func TestFetchBlobFeedHandler(t *testing.T) { }) } -func TestFetchBlobVerificationInfoHandler(t *testing.T) { +func TestFetchBlobInclusionInfoHandler(t *testing.T) { r := setUpRouter() - // Set up blob verification info in metadata store + // Set up blob inclusion info in metadata store blobHeader := makeBlobHeaderV2(t) blobKey, err := blobHeader.BlobKey() require.NoError(t, err) @@ -569,22 +569,22 @@ func TestFetchBlobVerificationInfoHandler(t *testing.T) { ctx := context.Background() err = blobMetadataStore.PutBatchHeader(ctx, batchHeader) require.NoError(t, err) - verificationInfo := &corev2.BlobVerificationInfo{ + inclusionInfo := &corev2.BlobInclusionInfo{ BatchHeader: batchHeader, BlobKey: blobKey, BlobIndex: 123, InclusionProof: []byte("inclusion proof"), } - err = blobMetadataStore.PutBlobVerificationInfo(ctx, verificationInfo) + err = blobMetadataStore.PutBlobInclusionInfo(ctx, inclusionInfo) require.NoError(t, err) - r.GET("/v2/blobs/:blob_key/verification-info", testDataApiServerV2.FetchBlobVerificationInfoHandler) + r.GET("/v2/blobs/:blob_key/inclusion-info", testDataApiServerV2.FetchBlobInclusionInfoHandler) - reqStr := fmt.Sprintf("/v2/blobs/%s/verification-info?batch_header_hash=%s", blobKey.Hex(), hex.EncodeToString(batchHeaderHash[:])) + reqStr := fmt.Sprintf("/v2/blobs/%s/inclusion-info?batch_header_hash=%s", blobKey.Hex(), hex.EncodeToString(batchHeaderHash[:])) w := executeRequest(t, r, http.MethodGet, reqStr) - response := decodeResponseBody[serverv2.BlobVerificationInfoResponse](t, w) + response := decodeResponseBody[serverv2.BlobInclusionInfoResponse](t, w) - assert.Equal(t, verificationInfo.InclusionProof, response.VerificationInfo.InclusionProof) + assert.Equal(t, inclusionInfo.InclusionProof, response.InclusionInfo.InclusionProof) } func TestFetchBatchHandlerV2(t *testing.T) { diff --git a/inabox/tests/integration_v2_test.go b/inabox/tests/integration_v2_test.go index 8d2724364d..c32985446a 100644 --- a/inabox/tests/integration_v2_test.go +++ b/inabox/tests/integration_v2_test.go @@ -72,8 +72,8 @@ var _ = Describe("Inabox v2 Integration", func() { var batchHeader2 *commonpb.BatchHeader var signedBatch1 *disperserpb.SignedBatch var signedBatch2 *disperserpb.SignedBatch - var blobVerification1 *disperserpb.BlobVerificationInfo - var blobVerification2 *disperserpb.BlobVerificationInfo + var blobInclusion1 *disperserpb.BlobInclusionInfo + var blobInclusion2 *disperserpb.BlobInclusionInfo for loop := true; loop; { select { case <-ctx.Done(): @@ -107,13 +107,13 @@ var _ = Describe("Inabox v2 Integration", func() { Expect(attestation.ApkG2).To(Not(BeNil())) Expect(len(attestation.QuorumApks)).To(Equal(2)) Expect(attestation.QuorumSignedPercentages).To(Equal([]byte{100, 100})) - blobVerification1 = reply1.GetBlobVerificationInfo() - Expect(blobVerification1).To(Not(BeNil())) - Expect(blobVerification1.GetBlobCertificate()).To(Not(BeNil())) - blobCert1, err = corev2.BlobCertificateFromProtobuf(blobVerification1.GetBlobCertificate()) + blobInclusion1 = reply1.GetBlobInclusionInfo() + Expect(blobInclusion1).To(Not(BeNil())) + Expect(blobInclusion1.GetBlobCertificate()).To(Not(BeNil())) + blobCert1, err = corev2.BlobCertificateFromProtobuf(blobInclusion1.GetBlobCertificate()) Expect(err).To(BeNil()) - inclusionProofBytes := blobVerification1.GetInclusionProof() - blobIndex := blobVerification1.GetBlobIndex() + inclusionProofBytes := blobInclusion1.GetInclusionProof() + blobIndex := blobInclusion1.GetBlobIndex() proof, err := core.DeserializeMerkleProof(inclusionProofBytes, uint64(blobIndex)) Expect(err).To(BeNil()) certHash, err := blobCert1.Hash() @@ -123,6 +123,8 @@ var _ = Describe("Inabox v2 Integration", func() { verified, err := merkletree.VerifyProofUsing(certHash[:], false, proof, [][]byte{batchHeader1.BatchRoot}, keccak256.New()) Expect(err).To(BeNil()) Expect(verified).To(BeTrue()) + Expect(blobCert1.Signature).To(HaveLen(64)) + Expect(len(blobCert1.RelayKeys)).To((BeNumerically(">", 0))) signedBatch2 = reply2.GetSignedBatch() batchHeader2 = signedBatch2.GetHeader() @@ -140,13 +142,13 @@ var _ = Describe("Inabox v2 Integration", func() { Expect(len(attestation2.QuorumApks)).To(Equal(len(attestation.QuorumApks))) Expect(attestation2.QuorumSignedPercentages).To(Equal(attestation.QuorumSignedPercentages)) - blobVerification2 = reply2.GetBlobVerificationInfo() - Expect(blobVerification2).To(Not(BeNil())) - Expect(blobVerification2.GetBlobCertificate()).To(Not(BeNil())) - blobCert2, err = corev2.BlobCertificateFromProtobuf(blobVerification2.GetBlobCertificate()) + blobInclusion2 = reply2.GetBlobInclusionInfo() + Expect(blobInclusion2).To(Not(BeNil())) + Expect(blobInclusion2.GetBlobCertificate()).To(Not(BeNil())) + blobCert2, err = corev2.BlobCertificateFromProtobuf(blobInclusion2.GetBlobCertificate()) Expect(err).To(BeNil()) - inclusionProofBytes = blobVerification2.GetInclusionProof() - blobIndex = blobVerification2.GetBlobIndex() + inclusionProofBytes = blobInclusion2.GetInclusionProof() + blobIndex = blobInclusion2.GetBlobIndex() proof, err = core.DeserializeMerkleProof(inclusionProofBytes, uint64(blobIndex)) Expect(err).To(BeNil()) certHash, err = blobCert2.Hash() @@ -154,6 +156,8 @@ var _ = Describe("Inabox v2 Integration", func() { verified, err = merkletree.VerifyProofUsing(certHash[:], false, proof, [][]byte{batchHeader2.BatchRoot}, keccak256.New()) Expect(err).To(BeNil()) Expect(verified).To(BeTrue()) + Expect(blobCert2.Signature).To(HaveLen(64)) + Expect(len(blobCert2.RelayKeys)).To((BeNumerically(">", 0))) loop = false } } @@ -164,7 +168,7 @@ var _ = Describe("Inabox v2 Integration", func() { // test onchain verification attestation, err := convertAttestation(signedBatch1.GetAttestation()) Expect(err).To(BeNil()) - proof, err := convertBlobVerificationInfo(blobVerification1) + proof, err := convertBlobInclusionInfo(blobInclusion1) Expect(err).To(BeNil()) var batchRoot [32]byte @@ -185,7 +189,7 @@ var _ = Describe("Inabox v2 Integration", func() { attestation, err = convertAttestation(signedBatch2.GetAttestation()) Expect(err).To(BeNil()) - proof, err = convertBlobVerificationInfo(blobVerification2) + proof, err = convertBlobInclusionInfo(blobInclusion2) Expect(err).To(BeNil()) copy(batchRoot[:], batchHeader2.BatchRoot) err = verifierContract.VerifyBlobV2FromSignedBatch( @@ -253,8 +257,8 @@ var _ = Describe("Inabox v2 Integration", func() { }) }) -func convertBlobVerificationInfo(verificationInfo *disperserpb.BlobVerificationInfo) (*verifierbindings.BlobVerificationProofV2, error) { - blobCertificate, err := corev2.BlobCertificateFromProtobuf(verificationInfo.GetBlobCertificate()) +func convertBlobInclusionInfo(inclusionInfo *disperserpb.BlobInclusionInfo) (*verifierbindings.BlobVerificationProofV2, error) { + blobCertificate, err := corev2.BlobCertificateFromProtobuf(inclusionInfo.GetBlobCertificate()) if err != nil { return nil, err } @@ -263,8 +267,8 @@ func convertBlobVerificationInfo(verificationInfo *disperserpb.BlobVerificationI return nil, err } - inclusionProof := verificationInfo.GetInclusionProof() - blobIndex := verificationInfo.GetBlobIndex() + inclusionProof := inclusionInfo.GetInclusionProof() + blobIndex := inclusionInfo.GetBlobIndex() commitX := big.NewInt(0) blobCertificate.BlobHeader.BlobCommitments.Commitment.X.BigInt(commitX) @@ -309,6 +313,7 @@ func convertBlobVerificationInfo(verificationInfo *disperserpb.BlobVerificationI PaymentHeaderHash: paymentHeaderHash, Salt: blobCertificate.BlobHeader.Salt, }, + Signature: blobCertificate.Signature, RelayKeys: blobCertificate.RelayKeys, }, InclusionProof: inclusionProof, diff --git a/node/auth/request_signing_test.go b/node/auth/request_signing_test.go index 4f096db1c2..0244a20acf 100644 --- a/node/auth/request_signing_test.go +++ b/node/auth/request_signing_test.go @@ -37,22 +37,22 @@ func TestHashing(t *testing.T) { // within a blob cert, modify a relay rand.Reset() request = RandomStoreChunksRequest(rand) - request.Batch.BlobCertificates[0].Relays[0] = request.Batch.BlobCertificates[0].Relays[0] + 1 + request.Batch.BlobCertificates[0].RelayKeys[0] = request.Batch.BlobCertificates[0].RelayKeys[0] + 1 hash = hashing.HashStoreChunksRequest(request) require.NotEqual(t, originalRequestHash, hash) // within a blob cert, remove a relay rand.Reset() request = RandomStoreChunksRequest(rand) - request.Batch.BlobCertificates[0].Relays = - request.Batch.BlobCertificates[0].Relays[:len(request.Batch.BlobCertificates[0].Relays)-1] + request.Batch.BlobCertificates[0].RelayKeys = + request.Batch.BlobCertificates[0].RelayKeys[:len(request.Batch.BlobCertificates[0].RelayKeys)-1] hash = hashing.HashStoreChunksRequest(request) require.NotEqual(t, originalRequestHash, hash) // within a blob cert, add a relay rand.Reset() request = RandomStoreChunksRequest(rand) - request.Batch.BlobCertificates[0].Relays = append(request.Batch.BlobCertificates[0].Relays, rand.Uint32()) + request.Batch.BlobCertificates[0].RelayKeys = append(request.Batch.BlobCertificates[0].RelayKeys, rand.Uint32()) hash = hashing.HashStoreChunksRequest(request) require.NotEqual(t, originalRequestHash, hash) @@ -140,7 +140,7 @@ func TestHashing(t *testing.T) { // within a blob cert, modify the Signature rand.Reset() request = RandomStoreChunksRequest(rand) - request.Batch.BlobCertificates[0].BlobHeader.Signature = rand.Bytes(32) + request.Batch.BlobCertificates[0].Signature = rand.Bytes(32) hash = hashing.HashStoreChunksRequest(request) require.NotEqual(t, originalRequestHash, hash) } diff --git a/node/auth/request_signing_test_utils.go b/node/auth/request_signing_test_utils.go index de00b979a3..2886d732b2 100644 --- a/node/auth/request_signing_test_utils.go +++ b/node/auth/request_signing_test_utils.go @@ -39,10 +39,10 @@ func RandomStoreChunksRequest(rand *random.TestRandom) *grpc.StoreChunksRequest ReservationPeriod: rand.Uint32(), CumulativePayment: rand.Bytes(32), }, - Salt: rand.Uint32(), - Signature: rand.Bytes(32), + Salt: rand.Uint32(), }, - Relays: relays, + Signature: rand.Bytes(32), + RelayKeys: relays, } } diff --git a/node/mock/testdata.go b/node/mock/testdata.go index 859862782d..36d0067f6b 100644 --- a/node/mock/testdata.go +++ b/node/mock/testdata.go @@ -24,7 +24,6 @@ func MockBatch(t *testing.T) ([]v2.BlobKey, *v2.Batch, []map[core.QuorumID]core. ReservationPeriod: 5, CumulativePayment: big.NewInt(100), }, - Signature: []byte{1, 2, 3}, } bh1 := &v2.BlobHeader{ BlobVersion: 0, @@ -35,7 +34,6 @@ func MockBatch(t *testing.T) ([]v2.BlobKey, *v2.Batch, []map[core.QuorumID]core. ReservationPeriod: 6, CumulativePayment: big.NewInt(200), }, - Signature: []byte{1, 2, 3}, } bh2 := &v2.BlobHeader{ BlobVersion: 0, @@ -46,7 +44,6 @@ func MockBatch(t *testing.T) ([]v2.BlobKey, *v2.Batch, []map[core.QuorumID]core. ReservationPeriod: 7, CumulativePayment: big.NewInt(300), }, - Signature: []byte{1, 2, 3}, } blobKey0, err := bh0.BlobKey() require.NoError(t, err) @@ -59,14 +56,17 @@ func MockBatch(t *testing.T) ([]v2.BlobKey, *v2.Batch, []map[core.QuorumID]core. // blobCert 1 will be downloaded from relay 1 blobCert0 := &v2.BlobCertificate{ BlobHeader: bh0, + Signature: []byte{1, 2, 3}, RelayKeys: []v2.RelayKey{0}, } blobCert1 := &v2.BlobCertificate{ BlobHeader: bh1, + Signature: []byte{1, 2, 3}, RelayKeys: []v2.RelayKey{1}, } blobCert2 := &v2.BlobCertificate{ BlobHeader: bh2, + Signature: []byte{1, 2, 3}, RelayKeys: []v2.RelayKey{0}, }