From 2c0d205eab04f9ba8970217c2f329a69a6b57fa5 Mon Sep 17 00:00:00 2001 From: afkbyte Date: Sat, 8 Jun 2024 04:10:15 -0400 Subject: [PATCH 01/38] start fresh --- arbitrator/prover/test-cases/go/main.go | 2 +- eigenda/eigenda.go | 377 ++++++++++++++++++++++++ eigenda/eigenda_proxy_client.go | 83 ++++++ 3 files changed, 461 insertions(+), 1 deletion(-) create mode 100644 eigenda/eigenda.go create mode 100644 eigenda/eigenda_proxy_client.go diff --git a/arbitrator/prover/test-cases/go/main.go b/arbitrator/prover/test-cases/go/main.go index cc6d954bd..8c14c8163 100644 --- a/arbitrator/prover/test-cases/go/main.go +++ b/arbitrator/prover/test-cases/go/main.go @@ -140,7 +140,7 @@ func main() { } } // EIGENDA COMMIT HASH - _, err = wavmio.ResolveTypedPreimage(arbutil.EigenDaPreimageType, common.HexToHash("011e229d75b13559dcb2d757ecae9b66fa579268e28e196789503322115c06e1")) + _, err = wavmio.ResolveTypedPreimage(arbutil.EigenDaPreimageType, common.HexToHash("011e229d75b13559dcb2d757ecae9b666fa579268e28e196789503322115c06e1")) if err != nil { panic(fmt.Sprintf("failed to resolve eigenda preimage: %v", err)) } diff --git a/eigenda/eigenda.go b/eigenda/eigenda.go new file mode 100644 index 000000000..07be3f950 --- /dev/null +++ b/eigenda/eigenda.go @@ -0,0 +1,377 @@ +package eigenda + +import ( + "context" + "crypto/sha256" + "encoding/hex" + "errors" + "fmt" + "math/big" + + "github.com/Layr-Labs/eigenda/api/grpc/disperser" + "github.com/ethereum/go-ethereum/common" + "github.com/ethereum/go-ethereum/log" + "github.com/ethereum/go-ethereum/rlp" + "github.com/offchainlabs/nitro/arbutil" +) + +// EigenDAMessageHeaderFlag indicated that the message is a EigenDABlobID which will be used to retrieve data from EigenDA +const EigenDAMessageHeaderFlag byte = 0xed + +func IsEigenDAMessageHeaderByte(header byte) bool { + return hasBits(EigenDAMessageHeaderFlag, header) +} + +// hasBits returns true if `checking` has all `bits` +func hasBits(checking byte, bits byte) bool { + return (checking & bits) == bits +} + +type EigenDAWriter interface { + Store(context.Context, []byte) (*EigenDABlobID, *EigenDABlobInfo, error) + Serialize(eigenDABlobID *EigenDABlobID) ([]byte, error) +} + +type EigenDAReader interface { + QueryBlob(ctx context.Context, id *EigenDABlobInfo, domainFilter string) ([]byte, error) +} + +type EigenDAConfig struct { + Enable bool `koanf:"enable"` + Rpc string `koanf:"rpc"` +} + +func (ec *EigenDAConfig) String() { + fmt.Println(ec.Enable) + fmt.Println(ec.Rpc) +} + +type EigenDABlobID struct { + BatchHeaderHash []byte + BlobIndex uint32 + ReferenceBlockNumber uint32 + QuorumIDs []uint32 +} + +type EigenDABlobInfo struct { + BlobHeader BlobHeader + BlobVerificationProof BlobVerificationProof +} + +type BlobHeader struct { + Commitment *G1Point + DataLength uint32 + QuorumBlobParams []*QuorumBlobParams +} + +type G1Point struct { + X *big.Int + Y *big.Int +} + +type QuorumBlobParams struct { + QuorumNumber uint8 + AdversaryThresholdPercentage uint8 + ConfirmationThresholdPercentage uint8 + ChunkLength uint32 +} + +type BlobVerificationProof struct { + BatchID uint32 + BlobIndex uint32 + BatchMetadata *BatchMetadata + InclusionProof []byte + QuorumIndices []byte +} + +type BatchMetadata struct { + BatchHeader *BatchHeader + SignatoryRecordHash [32]byte + ConfirmationBlockNumber uint32 +} + +type BatchHeader struct { + BlobHeadersRoot []byte + QuorumNumbers []byte + QuorumSignedPercentages []byte + ReferenceBlockNumber uint32 +} + +type EigenDA struct { + client *EigenDAProxyClient +} + +func NewEigenDA(proxyServerRpc string) (*EigenDA, error) { + client := NewEigenDAProxyClient(proxyServerRpc) + + return &EigenDA{ + client: client, + }, nil +} + +// TODO: There should probably be two types of query blob as the +func (e *EigenDA) QueryBlob(ctx context.Context, id *disperser.BlobInfo, domainFilter string) ([]byte, error) { + data, err := e.client.Get(id, domainFilter) + if err != nil { + return nil, err + } + + return data, nil +} + +func (e *EigenDA) Store(ctx context.Context, data []byte) (*EigenDABlobInfo, error) { + var blobInfo *EigenDABlobInfo + commitment, err := e.client.Put(data) + if err != nil { + return nil, err + } + + blobInfo.loadBlobInfo(commitment) + + return blobInfo, nil +} + +func (e *EigenDA) Serialize(blobInfo *EigenDABlobInfo) ([]byte, error) { + return rlp.EncodeToBytes(blobInfo) +} + +func (b *EigenDABlobInfo) loadBlobInfo(disperserBlobInfo *disperser.BlobInfo) { + b.BlobHeader.Commitment = &G1Point{ + X: new(big.Int).SetBytes(disperserBlobInfo.GetBlobHeader().GetCommitment().GetX()), + Y: new(big.Int).SetBytes(disperserBlobInfo.GetBlobHeader().GetCommitment().GetY()), + } + + b.BlobHeader.DataLength = disperserBlobInfo.GetBlobHeader().GetDataLength() + + for _, quorumBlobParam := range disperserBlobInfo.GetBlobHeader().GetBlobQuorumParams() { + b.BlobHeader.QuorumBlobParams = append(b.BlobHeader.QuorumBlobParams, &QuorumBlobParams{ + QuorumNumber: uint8(quorumBlobParam.QuorumNumber), + AdversaryThresholdPercentage: uint8(quorumBlobParam.AdversaryThresholdPercentage), + ConfirmationThresholdPercentage: uint8(quorumBlobParam.ConfirmationThresholdPercentage), + ChunkLength: quorumBlobParam.ChunkLength, + }) + } + + var signatoryRecordHash [32]byte + copy(signatoryRecordHash[:], disperserBlobInfo.GetBlobVerificationProof().GetBatchMetadata().GetSignatoryRecordHash()) + + b.BlobVerificationProof.BatchID = disperserBlobInfo.GetBlobVerificationProof().GetBatchId() + b.BlobVerificationProof.BlobIndex = disperserBlobInfo.GetBlobVerificationProof().GetBlobIndex() + b.BlobVerificationProof.BatchMetadata = &BatchMetadata{ + BatchHeader: &BatchHeader{}, + SignatoryRecordHash: signatoryRecordHash, + ConfirmationBlockNumber: disperserBlobInfo.GetBlobVerificationProof().GetBatchMetadata().GetConfirmationBlockNumber(), + } + + b.BlobVerificationProof.InclusionProof = disperserBlobInfo.GetBlobVerificationProof().GetInclusionProof() + b.BlobVerificationProof.QuorumIndices = disperserBlobInfo.GetBlobVerificationProof().GetQuorumIndexes() + + b.BlobVerificationProof.BatchMetadata.BatchHeader.BlobHeadersRoot = disperserBlobInfo.GetBlobVerificationProof().GetBatchMetadata().GetBatchHeader().GetBatchRoot() + b.BlobVerificationProof.BatchMetadata.BatchHeader.QuorumNumbers = disperserBlobInfo.GetBlobVerificationProof().GetBatchMetadata().GetBatchHeader().GetQuorumNumbers() + b.BlobVerificationProof.BatchMetadata.BatchHeader.QuorumSignedPercentages = disperserBlobInfo.GetBlobVerificationProof().GetBatchMetadata().GetBatchHeader().GetQuorumSignedPercentages() + b.BlobVerificationProof.BatchMetadata.BatchHeader.ReferenceBlockNumber = disperserBlobInfo.GetBlobVerificationProof().GetBatchMetadata().GetBatchHeader().GetReferenceBlockNumber() +} + +// new hash format is different now: +// ed + abi.encode + +// calldata layout of addSequencerL2BatchFromEigenDA looks like the following: +// 0-4 function signature +// 4-36 sequencer +func RecoverPayloadFromEigenDABatch(ctx context.Context, + sequencerMsg []byte, // this is literally the calldata of the transaction/ + daReader EigenDAReader, + preimages map[arbutil.PreimageType]map[common.Hash][]byte, +) ([]byte, error) { + log.Info("Start recovering payload from eigenda: ", "data", hex.EncodeToString(sequencerMsg)) + var eigenDAPreimages map[common.Hash][]byte + if preimages != nil { + if preimages[arbutil.EigenDaPreimageType] == nil { + preimages[arbutil.EigenDaPreimageType] = make(map[common.Hash][]byte) + } + eigenDAPreimages = preimages[arbutil.EigenDaPreimageType] + } + + blobInfo := ParseSequencerMsg(sequencerMsg) + + // default is binary and we want polynomial so we don't need to open 2 points cc @ethen + data, err := daReader.QueryBlob(ctx, blobInfo, "polynomial") + if err != nil { + log.Error("Failed to query data from EigenDA", "err", err) + return nil, err + } + + // record preimage data, + log.Info("Recording preimage data for EigenDA") + shaDataHash := sha256.New() + shaDataHash.Write(blobInfo.BlobHeader.Commitment.X.Bytes()) + shaDataHash.Write(blobInfo.BlobHeader.Commitment.Y.Bytes()) + dataHash := shaDataHash.Sum([]byte{}) + dataHash[0] = 1 + if eigenDAPreimages != nil { + eigenDAPreimages[common.BytesToHash(dataHash)] = data + } + return data, nil +} + +// calldata layout of sequencer msg +// [inclusive - exclusive] +// [0 - 4] Function Selector (4 bytes) +// [4 - 36] sequenceNumber (uint256) +// [36 - 68] Offset to BlobVerificationProof (dynamic, calculated based on starting point of the dynamic section) +// [68 - 100] Offset to BlobHeader (dynamic, calculated) +// [100 - 132] afterDelayedMessagesRead (uint256) +// [132 - 164] gasRefunder (address) +// [164 - 196] prevMessageCount (uint256) +// [196 - 228] newMessageCount (uint256) + +// BlobVerificationProof START +// [BVP offset - BVP offset + 32] BlobVerificationProof.batchId (uint32, padded) +// [BVP offset + 32 - BVP offset + 64] BlobVerificationProof.blobIndex (uint32, padded) +// [BVP offset + 64 - BVP offset + 96] Offset to BlobVerificationProof.BatchMetadata (from BlobVerificationProof start) +// [BVP offset + 96 - BVP offset + 128] Offset to BlobVerificationProof.inclusionProof (from BlobVerificationProof start) +// [BVP offset + 128 - BVP offset + 160] Offset to BlobVerificationProof.quorumIndices (from BlobVerificationProof start) + +// BatchMetadata START +// [BatchMeta offset - BatchMeta offset + 32] Offset to BatchMetadata.batchHeader (from BatchMeta start) +// [BatchMeta offset + 32 - BatchMeta offset + 64] BatchMetadata.signatoryRecordHash (bytes32) +// [BatchMeta offset + 64 - BatchMeta offset + 96] BatchMetadata.confirmationBlockNumber (uint32, padded) + +// BatchHeader START +// [BatchHeader offset - BatchHeader offset + 32] BatchHeader.blobHeadersRoot (bytes32) +// [BatchHeader offset + 32 - BatchHeader offset + 64] offset of BatchHeader.quorumNumbers +// [BatchHeader offset + 64 - BatchHeader offset + 96] offset of BatchHeader.signedStakeForQuorums +// [BatchHeader offset + 96 - BatchHeader offset + 128] BatchHeader.referenceBlockNumber (uint32, padded) + +// BlobHeader Start +// [BlobHeader offset - BlobHeader offset + 32] BlobHeader.commitment.X (uint256) +// [BlobHeader offset + 32 - BlobHeader offset + 64] BlobHeader.commitment.Y (uint256) +// [BlobHeader offset + 64 - BlobHeader offset + 96] BlobHeader.dataLength (uint32, padded) +// [BlobHeader offset + 96 - BlobHeader offset + 128] Offset to BlobHeader.quorumBlobParams (from BlobHeader start) + +// QuorumBlobParams Start +// Assuming `n` elements in quorumBlobParams +// [QBP Start - QBP Start + 32] Number of elements in quorumBlobParams +// we only need the first 32 bytes every 32*n bytes in this one + +// InclusionProof + +func ParseSequencerMsg(calldata []byte) *EigenDABlobInfo { + var blobVerificationProof *BlobVerificationProof + var blobHeader *BlobHeader + + // try decoding at the offsets + blobVerificationProofOffset, err := convertCalldataToInt(calldata[36:68]) + if err != nil { + // todo handle later + panic(err) + } + + blobVerificationProofOffset += 4 + + blobHeaderOffset, err := convertCalldataToInt(calldata[68:100]) + if err != nil { + // todo handle later + panic(err) + } + + rlp.DecodeBytes(calldata[blobVerificationProofOffset:blobHeaderOffset], blobVerificationProof) // see if this works??? + rlp.DecodeBytes(calldata[blobHeaderOffset:], blobHeader) + + // blobVerificationProofOffset, err := convertCalldataToInt(calldata[36:68]) + // if err != nil { + // panic(err) + // } + + // blobVerificationProofOffset += 4 + + // blobHeaderOffset, err := convertCalldataToInt(calldata[68:100]) + // if err != nil { + // panic(err) + // } + + // blobHeaderOffset += 4 + // blobIndex, err := convertCalldataToInt(calldata[blobVerificationProofOffset+32 : blobVerificationProofOffset+64]) + + // batchMetadataOffset, err := convertCalldataToInt(calldata[blobVerificationProofOffset+64 : blobVerificationProofOffset+96]) + // if err != nil { + // panic(err) + // } + + // batchMetadataOffset += blobVerificationProofOffset + + // batchHeaderOffset, err := convertCalldataToInt(calldata[batchMetadataOffset : batchMetadataOffset+32]) + // if err != nil { + // panic(err) + // } + + // batchHeaderOffset += batchMetadataOffset + // blobHeadersRoot := calldata[batchHeaderOffset : batchHeaderOffset+32] + // referenceBlockNumber, err := convertCalldataToInt(calldata[batchHeaderOffset+96 : batchHeaderOffset+128]) + + // quorumBlobParamsOffset, err := convertCalldataToInt(calldata[blobHeaderOffset+96 : blobHeaderOffset+128]) + // if err != nil { + // panic(err) + // } + // quorumBlobParamsOffset += blobHeaderOffset + + // numberOfQuorumBlobParams, err := convertCalldataToInt(calldata[quorumBlobParamsOffset : quorumBlobParamsOffset+32]) + // if err != nil { + // panic(err) + // } + + // quorumIDs := make([]uint32, numberOfQuorumBlobParams) + + // for i := 0; i < numberOfQuorumBlobParams; i++ { + // offset := quorumBlobParamsOffset + 32 + 32*4*i + // quorumID, err := convertCalldataToInt(calldata[offset : offset+32]) + // if err != nil { + // panic(err) + // } + + // quorumIDs[i] = uint32(quorumID) + // } + + // batchHeader := append(blobHeadersRoot, calldata[batchHeaderOffset+96:batchHeaderOffset+128]...) + // batchHeaderHash := crypto.Keccak256Hash(batchHeader).Bytes() + + // return &EigenDABlobInfo{ + // BlobHeader: &BlobHeader{ + // Commitment: &G1Point{}, + // DataLength: uint32(dataLength), + // QuorumBlobParams: quorumBlobParams, + // }, + // } + + return &EigenDABlobInfo{ + BlobVerificationProof: *blobVerificationProof, + BlobHeader: *blobHeader, + } + +} + +func convertCalldataToInt(calldata []byte) (int, error) { + num := new(big.Int).SetBytes(calldata) + + if num.IsInt64() { + return int(num.Uint64()), nil + } + + fmt.Println(num) + + return 0, errors.New("calldata is not a valid int") +} + +// func bytesToUint32Array(b []byte) ([]uint32, error) { +// if len(b)%4 != 0 { +// return nil, fmt.Errorf("the length of the byte slice must be a multiple of 4") +// } + +// numElements := len(b) / 4 +// result := make([]uint32, numElements) +// for i := 0; i < numElements; i++ { +// result[i] = binary.BigEndian.Uint32(b[i*4 : (i+1)*4]) +// } + +// return result, nil +// } diff --git a/eigenda/eigenda_proxy_client.go b/eigenda/eigenda_proxy_client.go new file mode 100644 index 000000000..74da3295a --- /dev/null +++ b/eigenda/eigenda_proxy_client.go @@ -0,0 +1,83 @@ +package eigenda + +import ( + "bytes" + "fmt" + "io/ioutil" + "net/http" + "net/url" + + "github.com/Layr-Labs/eigenda/api/grpc/disperser" + "github.com/ethereum/go-ethereum/rlp" +) + +type EigenDAProxyClient struct { + RPCUrl string +} + +func NewEigenDAProxyClient(RPCUrl string) *EigenDAProxyClient { + return &EigenDAProxyClient{RPCUrl: RPCUrl} +} + +// TODO: proper error types +func (c *EigenDAProxyClient) Put(data []byte) (*disperser.BlobInfo, error) { + var blobInfo *disperser.BlobInfo + + url := fmt.Sprintf("%s/put", c.RPCUrl) + resp, err := http.Post(url, "text/plain", bytes.NewBuffer([]byte(data))) + if err != nil { + return nil, fmt.Errorf("failed to store data: %w", err) + } + defer resp.Body.Close() + + if resp.StatusCode != http.StatusOK { + return nil, fmt.Errorf("failed to store data: %s", resp.Status) + } + + commitment, err := ioutil.ReadAll(resp.Body) + if err != nil { + return nil, fmt.Errorf("failed to read response: %w", err) + } + + cert := commitment[3:] + if err != nil { + return nil, fmt.Errorf("failed to decode commitment: %w", err) + } + + err = rlp.DecodeBytes(cert, blobInfo) + if err != nil { + return nil, fmt.Errorf("failed to decode blob info: %w", err) + } + + return blobInfo, nil +} + +func (c *EigenDAProxyClient) Get(blobInfo *disperser.BlobInfo, domainFilter string) ([]byte, error) { + commitment, err := rlp.EncodeToBytes(blobInfo) + if err != nil { + return nil, fmt.Errorf("failed to encode blob info: %w", err) + } + + rpcurl := fmt.Sprintf("%s/get/%s", c.RPCUrl, commitment) + + // if not nil put in the domain filter as a part of the query url + if domainFilter != "" { + rpcurl = fmt.Sprintf("%s?domain=%s", rpcurl, url.QueryEscape(domainFilter)) + } + resp, err := http.Get(rpcurl) + if err != nil { + return nil, fmt.Errorf("failed to retrieve data: %w", err) + } + defer resp.Body.Close() + + if resp.StatusCode != http.StatusOK { + return nil, fmt.Errorf("failed to retrieve data: %s", resp.Status) + } + + data, err := ioutil.ReadAll(resp.Body) + if err != nil { + return nil, fmt.Errorf("failed to read response: %w", err) + } + + return data, nil +} From 670432b767eb39f81a3208f6e221b760e33ed204 Mon Sep 17 00:00:00 2001 From: afkbyte Date: Sat, 8 Jun 2024 08:02:22 -0400 Subject: [PATCH 02/38] try to parse with abi --- eigenda/eigenda.go | 130 +++++++++++++++++++++++++++++++--------- eigenda/eigenda_test.go | 31 ++++++++++ 2 files changed, 134 insertions(+), 27 deletions(-) create mode 100644 eigenda/eigenda_test.go diff --git a/eigenda/eigenda.go b/eigenda/eigenda.go index 07be3f950..73e7224ed 100644 --- a/eigenda/eigenda.go +++ b/eigenda/eigenda.go @@ -7,8 +7,10 @@ import ( "errors" "fmt" "math/big" + "strings" "github.com/Layr-Labs/eigenda/api/grpc/disperser" + "github.com/ethereum/go-ethereum/accounts/abi" "github.com/ethereum/go-ethereum/common" "github.com/ethereum/go-ethereum/log" "github.com/ethereum/go-ethereum/rlp" @@ -27,6 +29,16 @@ func hasBits(checking byte, bits byte) bool { return (checking & bits) == bits } +type payload struct { + SequenceNumber *big.Int + BlobVerificationProof *BlobVerificationProof + BlobHeader *BlobHeader + AfterDelayedMessagesRead *big.Int + GasRefunder *common.Address + PrevMessageCount *big.Int + NewMessageCount *big.Int +} + type EigenDAWriter interface { Store(context.Context, []byte) (*EigenDABlobID, *EigenDABlobInfo, error) Serialize(eigenDABlobID *EigenDABlobID) ([]byte, error) @@ -77,24 +89,24 @@ type QuorumBlobParams struct { } type BlobVerificationProof struct { - BatchID uint32 - BlobIndex uint32 - BatchMetadata *BatchMetadata - InclusionProof []byte - QuorumIndices []byte + BatchID uint32 `json:"batchId"` + BlobIndex uint32 `json:"blobIndex"` + BatchMetadata BatchMetadata `json:"batchMetadata"` + InclusionProof []byte `json:"inclusionProof"` + QuorumIndices []byte `json:"quorumIndices"` } type BatchMetadata struct { - BatchHeader *BatchHeader - SignatoryRecordHash [32]byte - ConfirmationBlockNumber uint32 + BatchHeader BatchHeader `json:"batchHeader"` + SignatoryRecordHash [32]byte `json:"signatoryRecordHash"` + ConfirmationBlockNumber uint32 `json:"confirmationBlockNumber"` } type BatchHeader struct { - BlobHeadersRoot []byte - QuorumNumbers []byte - QuorumSignedPercentages []byte - ReferenceBlockNumber uint32 + BlobHeadersRoot [32]byte `json:"blobHeadersRoot"` + QuorumNumbers []byte `json:"quorumNumbers"` + SignedStakeForQuorums []byte `json:"signedStakeForQuorums"` + ReferenceBlockNumber uint32 `json:"referenceBlockNumber"` } type EigenDA struct { @@ -157,8 +169,8 @@ func (b *EigenDABlobInfo) loadBlobInfo(disperserBlobInfo *disperser.BlobInfo) { b.BlobVerificationProof.BatchID = disperserBlobInfo.GetBlobVerificationProof().GetBatchId() b.BlobVerificationProof.BlobIndex = disperserBlobInfo.GetBlobVerificationProof().GetBlobIndex() - b.BlobVerificationProof.BatchMetadata = &BatchMetadata{ - BatchHeader: &BatchHeader{}, + b.BlobVerificationProof.BatchMetadata = BatchMetadata{ + BatchHeader: BatchHeader{}, SignatoryRecordHash: signatoryRecordHash, ConfirmationBlockNumber: disperserBlobInfo.GetBlobVerificationProof().GetBatchMetadata().GetConfirmationBlockNumber(), } @@ -166,9 +178,9 @@ func (b *EigenDABlobInfo) loadBlobInfo(disperserBlobInfo *disperser.BlobInfo) { b.BlobVerificationProof.InclusionProof = disperserBlobInfo.GetBlobVerificationProof().GetInclusionProof() b.BlobVerificationProof.QuorumIndices = disperserBlobInfo.GetBlobVerificationProof().GetQuorumIndexes() - b.BlobVerificationProof.BatchMetadata.BatchHeader.BlobHeadersRoot = disperserBlobInfo.GetBlobVerificationProof().GetBatchMetadata().GetBatchHeader().GetBatchRoot() + //b.BlobVerificationProof.BatchMetadata.BatchHeader.BlobHeadersRoot = disperserBlobInfo.GetBlobVerificationProof().GetBatchMetadata().GetBatchHeader().GetBatchRoot() b.BlobVerificationProof.BatchMetadata.BatchHeader.QuorumNumbers = disperserBlobInfo.GetBlobVerificationProof().GetBatchMetadata().GetBatchHeader().GetQuorumNumbers() - b.BlobVerificationProof.BatchMetadata.BatchHeader.QuorumSignedPercentages = disperserBlobInfo.GetBlobVerificationProof().GetBatchMetadata().GetBatchHeader().GetQuorumSignedPercentages() + b.BlobVerificationProof.BatchMetadata.BatchHeader.SignedStakeForQuorums = disperserBlobInfo.GetBlobVerificationProof().GetBatchMetadata().GetBatchHeader().GetQuorumSignedPercentages() b.BlobVerificationProof.BatchMetadata.BatchHeader.ReferenceBlockNumber = disperserBlobInfo.GetBlobVerificationProof().GetBatchMetadata().GetBatchHeader().GetReferenceBlockNumber() } @@ -257,26 +269,46 @@ func RecoverPayloadFromEigenDABatch(ctx context.Context, // InclusionProof func ParseSequencerMsg(calldata []byte) *EigenDABlobInfo { - var blobVerificationProof *BlobVerificationProof - var blobHeader *BlobHeader + + // blobVerificationProof := &BlobVerificationProof{} + // blobHeader := &BlobHeader{} // try decoding at the offsets - blobVerificationProofOffset, err := convertCalldataToInt(calldata[36:68]) + // blobVerificationProofOffset, err := convertCalldataToInt(calldata[36:68]) + // if err != nil { + // // todo handle later + // panic(err) + // } + + // blobVerificationProofOffset += 4 + + // blobHeaderOffset, err := convertCalldataToInt(calldata[68:100]) + // if err != nil { + // // todo handle later + // panic(err) + // } + + sequencerInboxABI := `[ { "inputs": [ { "internalType": "uint256", "name": "_maxDataSize", "type": "uint256" }, { "internalType": "contract IReader4844", "name": "reader4844_", "type": "address" }, { "internalType": "contract IEigenDAServiceManager", "name": "eigenDAServiceManager_", "type": "address" }, { "internalType": "contract IRollupManager", "name": "eigenDARollupManager_", "type": "address" }, { "internalType": "bool", "name": "_isUsingFeeToken", "type": "bool" } ], "stateMutability": "nonpayable", "type": "constructor" }, { "inputs": [], "name": "AlreadyInit", "type": "error" }, { "inputs": [ { "internalType": "bytes32", "name": "", "type": "bytes32" } ], "name": "AlreadyValidDASKeyset", "type": "error" }, { "inputs": [], "name": "BadMaxTimeVariation", "type": "error" }, { "inputs": [], "name": "BadPostUpgradeInit", "type": "error" }, { "inputs": [ { "internalType": "uint256", "name": "stored", "type": "uint256" }, { "internalType": "uint256", "name": "received", "type": "uint256" } ], "name": "BadSequencerNumber", "type": "error" }, { "inputs": [], "name": "DataBlobsNotSupported", "type": "error" }, { "inputs": [ { "internalType": "uint256", "name": "dataLength", "type": "uint256" }, { "internalType": "uint256", "name": "maxDataLength", "type": "uint256" } ], "name": "DataTooLarge", "type": "error" }, { "inputs": [], "name": "DelayedBackwards", "type": "error" }, { "inputs": [], "name": "DelayedTooFar", "type": "error" }, { "inputs": [], "name": "Deprecated", "type": "error" }, { "inputs": [], "name": "ForceIncludeBlockTooSoon", "type": "error" }, { "inputs": [], "name": "ForceIncludeTimeTooSoon", "type": "error" }, { "inputs": [], "name": "HadZeroInit", "type": "error" }, { "inputs": [], "name": "IncorrectMessagePreimage", "type": "error" }, { "inputs": [ { "internalType": "string", "name": "name", "type": "string" } ], "name": "InitParamZero", "type": "error" }, { "inputs": [ { "internalType": "bytes1", "name": "", "type": "bytes1" } ], "name": "InvalidHeaderFlag", "type": "error" }, { "inputs": [], "name": "MissingDataHashes", "type": "error" }, { "inputs": [], "name": "NativeTokenMismatch", "type": "error" }, { "inputs": [ { "internalType": "bytes32", "name": "", "type": "bytes32" } ], "name": "NoSuchKeyset", "type": "error" }, { "inputs": [], "name": "NotBatchPoster", "type": "error" }, { "inputs": [ { "internalType": "address", "name": "", "type": "address" } ], "name": "NotBatchPosterManager", "type": "error" }, { "inputs": [], "name": "NotForked", "type": "error" }, { "inputs": [], "name": "NotOrigin", "type": "error" }, { "inputs": [ { "internalType": "address", "name": "sender", "type": "address" }, { "internalType": "address", "name": "owner", "type": "address" } ], "name": "NotOwner", "type": "error" }, { "inputs": [], "name": "RollupNotChanged", "type": "error" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "uint256", "name": "messageNum", "type": "uint256" }, { "indexed": false, "internalType": "bytes", "name": "data", "type": "bytes" } ], "name": "InboxMessageDelivered", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "uint256", "name": "messageNum", "type": "uint256" } ], "name": "InboxMessageDeliveredFromOrigin", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "bytes32", "name": "keysetHash", "type": "bytes32" } ], "name": "InvalidateKeyset", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "uint256", "name": "id", "type": "uint256" } ], "name": "OwnerFunctionCalled", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "uint256", "name": "batchSequenceNumber", "type": "uint256" }, { "indexed": false, "internalType": "bytes", "name": "data", "type": "bytes" } ], "name": "SequencerBatchData", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "uint256", "name": "batchSequenceNumber", "type": "uint256" }, { "indexed": true, "internalType": "bytes32", "name": "beforeAcc", "type": "bytes32" }, { "indexed": true, "internalType": "bytes32", "name": "afterAcc", "type": "bytes32" }, { "indexed": false, "internalType": "bytes32", "name": "delayedAcc", "type": "bytes32" }, { "indexed": false, "internalType": "uint256", "name": "afterDelayedMessagesRead", "type": "uint256" }, { "components": [ { "internalType": "uint64", "name": "minTimestamp", "type": "uint64" }, { "internalType": "uint64", "name": "maxTimestamp", "type": "uint64" }, { "internalType": "uint64", "name": "minBlockNumber", "type": "uint64" }, { "internalType": "uint64", "name": "maxBlockNumber", "type": "uint64" } ], "indexed": false, "internalType": "struct IBridge.TimeBounds", "name": "timeBounds", "type": "tuple" }, { "indexed": false, "internalType": "enum IBridge.BatchDataLocation", "name": "dataLocation", "type": "uint8" } ], "name": "SequencerBatchDelivered", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "bytes32", "name": "keysetHash", "type": "bytes32" }, { "indexed": false, "internalType": "bytes", "name": "keysetBytes", "type": "bytes" } ], "name": "SetValidKeyset", "type": "event" }, { "inputs": [], "name": "BROTLI_MESSAGE_HEADER_FLAG", "outputs": [ { "internalType": "bytes1", "name": "", "type": "bytes1" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "DAS_MESSAGE_HEADER_FLAG", "outputs": [ { "internalType": "bytes1", "name": "", "type": "bytes1" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "DATA_AUTHENTICATED_FLAG", "outputs": [ { "internalType": "bytes1", "name": "", "type": "bytes1" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "DATA_BLOB_HEADER_FLAG", "outputs": [ { "internalType": "bytes1", "name": "", "type": "bytes1" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "EIGENDA_MESSAGE_HEADER_FLAG", "outputs": [ { "internalType": "bytes1", "name": "", "type": "bytes1" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "HEADER_LENGTH", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "TREE_DAS_MESSAGE_HEADER_FLAG", "outputs": [ { "internalType": "bytes1", "name": "", "type": "bytes1" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "ZERO_HEAVY_MESSAGE_HEADER_FLAG", "outputs": [ { "internalType": "bytes1", "name": "", "type": "bytes1" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "sequenceNumber", "type": "uint256" }, { "internalType": "bytes", "name": "data", "type": "bytes" }, { "internalType": "uint256", "name": "afterDelayedMessagesRead", "type": "uint256" }, { "internalType": "contract IGasRefunder", "name": "gasRefunder", "type": "address" }, { "internalType": "uint256", "name": "prevMessageCount", "type": "uint256" }, { "internalType": "uint256", "name": "newMessageCount", "type": "uint256" } ], "name": "addSequencerL2Batch", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "sequenceNumber", "type": "uint256" }, { "internalType": "uint256", "name": "afterDelayedMessagesRead", "type": "uint256" }, { "internalType": "contract IGasRefunder", "name": "gasRefunder", "type": "address" }, { "internalType": "uint256", "name": "prevMessageCount", "type": "uint256" }, { "internalType": "uint256", "name": "newMessageCount", "type": "uint256" } ], "name": "addSequencerL2BatchFromBlobs", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "sequenceNumber", "type": "uint256" }, { "components": [ { "internalType": "uint32", "name": "batchId", "type": "uint32" }, { "internalType": "uint32", "name": "blobIndex", "type": "uint32" }, { "components": [ { "components": [ { "internalType": "bytes32", "name": "blobHeadersRoot", "type": "bytes32" }, { "internalType": "bytes", "name": "quorumNumbers", "type": "bytes" }, { "internalType": "bytes", "name": "signedStakeForQuorums", "type": "bytes" }, { "internalType": "uint32", "name": "referenceBlockNumber", "type": "uint32" } ], "internalType": "struct IEigenDAServiceManager.BatchHeader", "name": "batchHeader", "type": "tuple" }, { "internalType": "bytes32", "name": "signatoryRecordHash", "type": "bytes32" }, { "internalType": "uint32", "name": "confirmationBlockNumber", "type": "uint32" } ], "internalType": "struct IEigenDAServiceManager.BatchMetadata", "name": "batchMetadata", "type": "tuple" }, { "internalType": "bytes", "name": "inclusionProof", "type": "bytes" }, { "internalType": "bytes", "name": "quorumIndices", "type": "bytes" } ], "internalType": "struct EigenDARollupUtils.BlobVerificationProof", "name": "blobVerificationProof", "type": "tuple" }, { "components": [ { "components": [ { "internalType": "uint256", "name": "X", "type": "uint256" }, { "internalType": "uint256", "name": "Y", "type": "uint256" } ], "internalType": "struct BN254.G1Point", "name": "commitment", "type": "tuple" }, { "internalType": "uint32", "name": "dataLength", "type": "uint32" }, { "components": [ { "internalType": "uint8", "name": "quorumNumber", "type": "uint8" }, { "internalType": "uint8", "name": "adversaryThresholdPercentage", "type": "uint8" }, { "internalType": "uint8", "name": "confirmationThresholdPercentage", "type": "uint8" }, { "internalType": "uint32", "name": "chunkLength", "type": "uint32" } ], "internalType": "struct IEigenDAServiceManager.QuorumBlobParam[]", "name": "quorumBlobParams", "type": "tuple[]" } ], "internalType": "struct IEigenDAServiceManager.BlobHeader", "name": "blobHeader", "type": "tuple" }, { "internalType": "uint256", "name": "afterDelayedMessagesRead", "type": "uint256" }, { "internalType": "contract IGasRefunder", "name": "gasRefunder", "type": "address" }, { "internalType": "uint256", "name": "prevMessageCount", "type": "uint256" }, { "internalType": "uint256", "name": "newMessageCount", "type": "uint256" } ], "name": "addSequencerL2BatchFromEigenDA", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "", "type": "uint256" }, { "internalType": "bytes", "name": "", "type": "bytes" }, { "internalType": "uint256", "name": "", "type": "uint256" }, { "internalType": "contract IGasRefunder", "name": "", "type": "address" } ], "name": "addSequencerL2BatchFromOrigin", "outputs": [], "stateMutability": "pure", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "sequenceNumber", "type": "uint256" }, { "internalType": "bytes", "name": "data", "type": "bytes" }, { "internalType": "uint256", "name": "afterDelayedMessagesRead", "type": "uint256" }, { "internalType": "contract IGasRefunder", "name": "gasRefunder", "type": "address" }, { "internalType": "uint256", "name": "prevMessageCount", "type": "uint256" }, { "internalType": "uint256", "name": "newMessageCount", "type": "uint256" } ], "name": "addSequencerL2BatchFromOrigin", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [], "name": "batchCount", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "batchPosterManager", "outputs": [ { "internalType": "address", "name": "", "type": "address" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "bridge", "outputs": [ { "internalType": "contract IBridge", "name": "", "type": "address" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "bytes32", "name": "", "type": "bytes32" } ], "name": "dasKeySetInfo", "outputs": [ { "internalType": "bool", "name": "isValidKeyset", "type": "bool" }, { "internalType": "uint64", "name": "creationBlock", "type": "uint64" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "eigenDARollupManager", "outputs": [ { "internalType": "contract IRollupManager", "name": "", "type": "address" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "eigenDAServiceManager", "outputs": [ { "internalType": "contract IEigenDAServiceManager", "name": "", "type": "address" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "_totalDelayedMessagesRead", "type": "uint256" }, { "internalType": "uint8", "name": "kind", "type": "uint8" }, { "internalType": "uint64[2]", "name": "l1BlockAndTime", "type": "uint64[2]" }, { "internalType": "uint256", "name": "baseFeeL1", "type": "uint256" }, { "internalType": "address", "name": "sender", "type": "address" }, { "internalType": "bytes32", "name": "messageDataHash", "type": "bytes32" } ], "name": "forceInclusion", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "bytes32", "name": "ksHash", "type": "bytes32" } ], "name": "getKeysetCreationBlock", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "index", "type": "uint256" } ], "name": "inboxAccs", "outputs": [ { "internalType": "bytes32", "name": "", "type": "bytes32" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "contract IBridge", "name": "bridge_", "type": "address" }, { "components": [ { "internalType": "uint256", "name": "delayBlocks", "type": "uint256" }, { "internalType": "uint256", "name": "futureBlocks", "type": "uint256" }, { "internalType": "uint256", "name": "delaySeconds", "type": "uint256" }, { "internalType": "uint256", "name": "futureSeconds", "type": "uint256" } ], "internalType": "struct ISequencerInbox.MaxTimeVariation", "name": "maxTimeVariation_", "type": "tuple" } ], "name": "initialize", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "bytes32", "name": "ksHash", "type": "bytes32" } ], "name": "invalidateKeysetHash", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "", "type": "address" } ], "name": "isBatchPoster", "outputs": [ { "internalType": "bool", "name": "", "type": "bool" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "", "type": "address" } ], "name": "isSequencer", "outputs": [ { "internalType": "bool", "name": "", "type": "bool" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "isUsingFeeToken", "outputs": [ { "internalType": "bool", "name": "", "type": "bool" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "bytes32", "name": "ksHash", "type": "bytes32" } ], "name": "isValidKeysetHash", "outputs": [ { "internalType": "bool", "name": "", "type": "bool" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "maxDataSize", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "maxTimeVariation", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" }, { "internalType": "uint256", "name": "", "type": "uint256" }, { "internalType": "uint256", "name": "", "type": "uint256" }, { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "postUpgradeInit", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [], "name": "reader4844", "outputs": [ { "internalType": "contract IReader4844", "name": "", "type": "address" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "removeDelayAfterFork", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [], "name": "rollup", "outputs": [ { "internalType": "contract IOwnable", "name": "", "type": "address" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "newBatchPosterManager", "type": "address" } ], "name": "setBatchPosterManager", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "addr", "type": "address" }, { "internalType": "bool", "name": "isBatchPoster_", "type": "bool" } ], "name": "setIsBatchPoster", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "addr", "type": "address" }, { "internalType": "bool", "name": "isSequencer_", "type": "bool" } ], "name": "setIsSequencer", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "components": [ { "internalType": "uint256", "name": "delayBlocks", "type": "uint256" }, { "internalType": "uint256", "name": "futureBlocks", "type": "uint256" }, { "internalType": "uint256", "name": "delaySeconds", "type": "uint256" }, { "internalType": "uint256", "name": "futureSeconds", "type": "uint256" } ], "internalType": "struct ISequencerInbox.MaxTimeVariation", "name": "maxTimeVariation_", "type": "tuple" } ], "name": "setMaxTimeVariation", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "bytes", "name": "keysetBytes", "type": "bytes" } ], "name": "setValidKeyset", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [], "name": "totalDelayedMessagesRead", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "newEigenDAServiceManager", "type": "address" } ], "name": "updateEigenDAServiceManager", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [], "name": "updateRollupAddress", "outputs": [], "stateMutability": "nonpayable", "type": "function" } ]` + + abi, err := abi.JSON(strings.NewReader(sequencerInboxABI)) if err != nil { - // todo handle later panic(err) } - blobVerificationProofOffset += 4 + method, err := abi.MethodById(calldata[0:4]) + if err != nil { + panic(err) + } - blobHeaderOffset, err := convertCalldataToInt(calldata[68:100]) + p, err := method.Inputs.Unpack(calldata[4:]) if err != nil { - // todo handle later panic(err) } - rlp.DecodeBytes(calldata[blobVerificationProofOffset:blobHeaderOffset], blobVerificationProof) // see if this works??? - rlp.DecodeBytes(calldata[blobHeaderOffset:], blobHeader) + payload, err := convertToPayload(p) + if err != nil { + panic(err) + } // blobVerificationProofOffset, err := convertCalldataToInt(calldata[36:68]) // if err != nil { @@ -344,12 +376,56 @@ func ParseSequencerMsg(calldata []byte) *EigenDABlobInfo { // } return &EigenDABlobInfo{ - BlobVerificationProof: *blobVerificationProof, - BlobHeader: *blobHeader, + BlobVerificationProof: *payload.BlobVerificationProof, + BlobHeader: *payload.BlobHeader, } } +func convertToPayload(pa []interface{}) (payload, error) { + blobVerificationProof := pa[1].(struct { + BatchId uint32 + BlobIndex uint32 + BatchMetadata struct { + BatchHeader struct { + BlobHeadersRoot [32]uint8 + QuorumNumbers []uint8 + SignedStakeForQuorums []uint8 + ReferenceBlockNumber uint32 + } + SignatoryRecordHash [32]uint8 + ConfirmationBlockNumber uint32 + } + InclusionProof []uint8 + QuorumIndices []uint8 + }) + + return payload{ + SequenceNumber: pa[0].(*big.Int), + BlobVerificationProof: &BlobVerificationProof{ + BatchID: blobVerificationProof.BatchId, + BlobIndex: blobVerificationProof.BlobIndex, + BatchMetadata: BatchMetadata{ + BatchHeader: BatchHeader{ + BlobHeadersRoot: blobVerificationProof.BatchMetadata.BatchHeader.BlobHeadersRoot, + QuorumNumbers: blobVerificationProof.BatchMetadata.BatchHeader.QuorumNumbers, + SignedStakeForQuorums: blobVerificationProof.BatchMetadata.BatchHeader.SignedStakeForQuorums, + ReferenceBlockNumber: blobVerificationProof.BatchMetadata.BatchHeader.ReferenceBlockNumber, + }, + SignatoryRecordHash: blobVerificationProof.BatchMetadata.SignatoryRecordHash, + ConfirmationBlockNumber: blobVerificationProof.BatchMetadata.ConfirmationBlockNumber, + }, + InclusionProof: blobVerificationProof.InclusionProof, + QuorumIndices: blobVerificationProof.QuorumIndices, + }, + BlobHeader: pa[2].(*BlobHeader), + AfterDelayedMessagesRead: pa[3].(*big.Int), + GasRefunder: pa[4].(*common.Address), + PrevMessageCount: pa[5].(*big.Int), + NewMessageCount: pa[6].(*big.Int), + }, nil +} + func convertCalldataToInt(calldata []byte) (int, error) { num := new(big.Int).SetBytes(calldata) diff --git a/eigenda/eigenda_test.go b/eigenda/eigenda_test.go new file mode 100644 index 000000000..6dd4d8144 --- /dev/null +++ b/eigenda/eigenda_test.go @@ -0,0 +1,31 @@ +package eigenda + +import ( + "encoding/hex" + "testing" +) + +func TestParseSequencerMsg(t *testing.T) { + + calldataString := "6b4e9387000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e000000000000000000000000000000000000000000000000000000000000004a00000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000268d000000000000000000000000000000000000000000000000000000000000023a00000000000000000000000000000000000000000000000000000000000000a00000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000038000000000000000000000000000000000000000000000000000000000000000609c2295a45e69a5369008e65fa2afc40eccb8e8be2f453998207e9b0a8d3bc72b0000000000000000000000000000000000000000000000000000000000143b152f3d0afe00f1a3eccb2a77a053c9fa850d4809913ece2f6a5dcdc9ecb5347c8b000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000143aad0000000000000000000000000000000000000000000000000000000000000002000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000024d4f000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000016086d042bea74e8fc60ce55410490d2e8bf312ff03aca9d369296d8cb25cd622096d79ebf24023971807ca680bfeac081bca250544e65147ffc0f7fdd3f3f973b885c252331c8385b767138702b5ba6155ae518fd98ebb966c5d2dfc2364ee0d49c203f38ebd01f85755bd59903ad850ea040fb94611fd554deb03c35ce43453f616866b1248350c1f1af7f3ce0f9b1beb712de850ce4e9cdfee6073fd54b8bca69011c9eca7800d59e6831f055972ae7430b8b52423cf455c2e0a3b11343890c713b16d87b5458476d589dd0f2146b14b9380f69aa8b1b546c75de4bfe925167204dd92138a76c02a4854973ed7016c6c110d41563acbc8cafefbe5d2f0ff490a83cd05a84bdfdd1542ebbbf20ca8b8968407a993919ffe5e159faf5941a95ae878a69d797b170a7a375d88b92c000c70871ae9ed5042f481743a27e97cf8665e8ebdea8f3dc226cc4c9a1cf3863ab4e60900a600fbfe5381cc0912f7aab88686000000000000000000000000000000000000000000000000000000000000000200010000000000000000000000000000000000000000000000000000000000001a78ee576b0026de661b72106bf447f5bb70881f24a3fa8b1f312992c8e165970633b392b3d3f66407d912aafcc2f0231c31918f0485e8476975edc710fcb45200000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000080000000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000021000000000000000000000000000000000000000000000000000000000000003700000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002100000000000000000000000000000000000000000000000000000000000000370000000000000000000000000000000000000000000000000000000000000001" + + calldata, err := hex.DecodeString(calldataString) + + expected := &EigenDABlobID{ + // BatchHeader content for hashing + BlobIndex: 570, + ReferenceBlockNumber: 1325741, + QuorumIDs: []uint32{0, 1}, + } + + // Call the function with the mock calldata + result := ParseSequencerMsg(calldata) + if err != nil { + t.Fatalf("ParseSequencerMsg returned an error: %v", err) + } + + if result.BlobVerificationProof.BlobIndex != expected.BlobIndex { + t.Errorf("BlobIndex was incorrect, got: %v, want: %v", result.BlobVerificationProof.BlobIndex, expected.BlobIndex) + } + +} From cd78e919c9cf6b8d9af072f2894151c6c6d8ca6d Mon Sep 17 00:00:00 2001 From: afkbyte Date: Sat, 8 Jun 2024 12:51:51 -0400 Subject: [PATCH 03/38] parsing correctly with the abi decoder now! Bringing other changes back in to see what breaks the build --- eigenda/eigenda.go | 66 +++++++++++++++++++++++++++++++++++----------- 1 file changed, 51 insertions(+), 15 deletions(-) diff --git a/eigenda/eigenda.go b/eigenda/eigenda.go index 73e7224ed..69bbac255 100644 --- a/eigenda/eigenda.go +++ b/eigenda/eigenda.go @@ -34,7 +34,7 @@ type payload struct { BlobVerificationProof *BlobVerificationProof BlobHeader *BlobHeader AfterDelayedMessagesRead *big.Int - GasRefunder *common.Address + GasRefunder common.Address PrevMessageCount *big.Int NewMessageCount *big.Int } @@ -384,20 +384,34 @@ func ParseSequencerMsg(calldata []byte) *EigenDABlobInfo { func convertToPayload(pa []interface{}) (payload, error) { blobVerificationProof := pa[1].(struct { - BatchId uint32 - BlobIndex uint32 + BatchId uint32 `json:"batchId"` + BlobIndex uint32 `json:"blobIndex"` BatchMetadata struct { BatchHeader struct { - BlobHeadersRoot [32]uint8 - QuorumNumbers []uint8 - SignedStakeForQuorums []uint8 - ReferenceBlockNumber uint32 - } - SignatoryRecordHash [32]uint8 - ConfirmationBlockNumber uint32 - } - InclusionProof []uint8 - QuorumIndices []uint8 + BlobHeadersRoot [32]uint8 `json:"blobHeadersRoot"` + QuorumNumbers []uint8 `json:"quorumNumbers"` + SignedStakeForQuorums []uint8 `json:"signedStakeForQuorums"` + ReferenceBlockNumber uint32 `json:"referenceBlockNumber"` + } `json:"batchHeader"` + SignatoryRecordHash [32]uint8 `json:"signatoryRecordHash"` + ConfirmationBlockNumber uint32 `json:"confirmationBlockNumber"` + } `json:"batchMetadata"` + InclusionProof []uint8 `json:"inclusionProof"` + QuorumIndices []uint8 `json:"quorumIndices"` + }) + + blobHeader := pa[2].(struct { + Commitment struct { + X *big.Int `json:"X"` + Y *big.Int `json:"Y"` + } `json:"commitment"` + DataLength uint32 `json:"dataLength"` + QuorumBlobParams []struct { + QuorumNumber uint8 `json:"quorumNumber"` + AdversaryThresholdPercentage uint8 `json:"adversaryThresholdPercentage"` + ConfirmationThresholdPercentage uint8 `json:"confirmationThresholdPercentage"` + ChunkLength uint32 `json:"chunkLength"` + } `json:"quorumBlobParams"` }) return payload{ @@ -418,14 +432,36 @@ func convertToPayload(pa []interface{}) (payload, error) { InclusionProof: blobVerificationProof.InclusionProof, QuorumIndices: blobVerificationProof.QuorumIndices, }, - BlobHeader: pa[2].(*BlobHeader), + BlobHeader: &BlobHeader{ + Commitment: &G1Point{}, + DataLength: blobHeader.DataLength, + QuorumBlobParams: func() []*QuorumBlobParams { + params := make([]*QuorumBlobParams, len(blobHeader.QuorumBlobParams)) + for i, p := range blobHeader.QuorumBlobParams { + params[i] = &QuorumBlobParams{ + QuorumNumber: p.QuorumNumber, + AdversaryThresholdPercentage: p.AdversaryThresholdPercentage, + ConfirmationThresholdPercentage: p.ConfirmationThresholdPercentage, + ChunkLength: p.ChunkLength, + } + } + return params + }(), + }, AfterDelayedMessagesRead: pa[3].(*big.Int), - GasRefunder: pa[4].(*common.Address), + GasRefunder: pa[4].(common.Address), PrevMessageCount: pa[5].(*big.Int), NewMessageCount: pa[6].(*big.Int), }, nil } +// type QuorumBlobParams struct { +// QuorumNumber uint8 +// AdversaryThresholdPercentage uint8 +// ConfirmationThresholdPercentage uint8 +// ChunkLength uint32 +// } + func convertCalldataToInt(calldata []byte) (int, error) { num := new(big.Int).SetBytes(calldata) From 36711793147474a9988de03883144dfbcd206a75 Mon Sep 17 00:00:00 2001 From: afkbyte Date: Sat, 8 Jun 2024 12:53:34 -0400 Subject: [PATCH 04/38] remove commented out code --- eigenda/eigenda.go | 149 +-------------------------------------------- 1 file changed, 1 insertion(+), 148 deletions(-) diff --git a/eigenda/eigenda.go b/eigenda/eigenda.go index 69bbac255..8f697f1c1 100644 --- a/eigenda/eigenda.go +++ b/eigenda/eigenda.go @@ -226,68 +226,8 @@ func RecoverPayloadFromEigenDABatch(ctx context.Context, return data, nil } -// calldata layout of sequencer msg -// [inclusive - exclusive] -// [0 - 4] Function Selector (4 bytes) -// [4 - 36] sequenceNumber (uint256) -// [36 - 68] Offset to BlobVerificationProof (dynamic, calculated based on starting point of the dynamic section) -// [68 - 100] Offset to BlobHeader (dynamic, calculated) -// [100 - 132] afterDelayedMessagesRead (uint256) -// [132 - 164] gasRefunder (address) -// [164 - 196] prevMessageCount (uint256) -// [196 - 228] newMessageCount (uint256) - -// BlobVerificationProof START -// [BVP offset - BVP offset + 32] BlobVerificationProof.batchId (uint32, padded) -// [BVP offset + 32 - BVP offset + 64] BlobVerificationProof.blobIndex (uint32, padded) -// [BVP offset + 64 - BVP offset + 96] Offset to BlobVerificationProof.BatchMetadata (from BlobVerificationProof start) -// [BVP offset + 96 - BVP offset + 128] Offset to BlobVerificationProof.inclusionProof (from BlobVerificationProof start) -// [BVP offset + 128 - BVP offset + 160] Offset to BlobVerificationProof.quorumIndices (from BlobVerificationProof start) - -// BatchMetadata START -// [BatchMeta offset - BatchMeta offset + 32] Offset to BatchMetadata.batchHeader (from BatchMeta start) -// [BatchMeta offset + 32 - BatchMeta offset + 64] BatchMetadata.signatoryRecordHash (bytes32) -// [BatchMeta offset + 64 - BatchMeta offset + 96] BatchMetadata.confirmationBlockNumber (uint32, padded) - -// BatchHeader START -// [BatchHeader offset - BatchHeader offset + 32] BatchHeader.blobHeadersRoot (bytes32) -// [BatchHeader offset + 32 - BatchHeader offset + 64] offset of BatchHeader.quorumNumbers -// [BatchHeader offset + 64 - BatchHeader offset + 96] offset of BatchHeader.signedStakeForQuorums -// [BatchHeader offset + 96 - BatchHeader offset + 128] BatchHeader.referenceBlockNumber (uint32, padded) - -// BlobHeader Start -// [BlobHeader offset - BlobHeader offset + 32] BlobHeader.commitment.X (uint256) -// [BlobHeader offset + 32 - BlobHeader offset + 64] BlobHeader.commitment.Y (uint256) -// [BlobHeader offset + 64 - BlobHeader offset + 96] BlobHeader.dataLength (uint32, padded) -// [BlobHeader offset + 96 - BlobHeader offset + 128] Offset to BlobHeader.quorumBlobParams (from BlobHeader start) - -// QuorumBlobParams Start -// Assuming `n` elements in quorumBlobParams -// [QBP Start - QBP Start + 32] Number of elements in quorumBlobParams -// we only need the first 32 bytes every 32*n bytes in this one - -// InclusionProof - func ParseSequencerMsg(calldata []byte) *EigenDABlobInfo { - - // blobVerificationProof := &BlobVerificationProof{} - // blobHeader := &BlobHeader{} - - // try decoding at the offsets - // blobVerificationProofOffset, err := convertCalldataToInt(calldata[36:68]) - // if err != nil { - // // todo handle later - // panic(err) - // } - - // blobVerificationProofOffset += 4 - - // blobHeaderOffset, err := convertCalldataToInt(calldata[68:100]) - // if err != nil { - // // todo handle later - // panic(err) - // } - + // TODO: Import this via relative path sequencerInboxABI := `[ { "inputs": [ { "internalType": "uint256", "name": "_maxDataSize", "type": "uint256" }, { "internalType": "contract IReader4844", "name": "reader4844_", "type": "address" }, { "internalType": "contract IEigenDAServiceManager", "name": "eigenDAServiceManager_", "type": "address" }, { "internalType": "contract IRollupManager", "name": "eigenDARollupManager_", "type": "address" }, { "internalType": "bool", "name": "_isUsingFeeToken", "type": "bool" } ], "stateMutability": "nonpayable", "type": "constructor" }, { "inputs": [], "name": "AlreadyInit", "type": "error" }, { "inputs": [ { "internalType": "bytes32", "name": "", "type": "bytes32" } ], "name": "AlreadyValidDASKeyset", "type": "error" }, { "inputs": [], "name": "BadMaxTimeVariation", "type": "error" }, { "inputs": [], "name": "BadPostUpgradeInit", "type": "error" }, { "inputs": [ { "internalType": "uint256", "name": "stored", "type": "uint256" }, { "internalType": "uint256", "name": "received", "type": "uint256" } ], "name": "BadSequencerNumber", "type": "error" }, { "inputs": [], "name": "DataBlobsNotSupported", "type": "error" }, { "inputs": [ { "internalType": "uint256", "name": "dataLength", "type": "uint256" }, { "internalType": "uint256", "name": "maxDataLength", "type": "uint256" } ], "name": "DataTooLarge", "type": "error" }, { "inputs": [], "name": "DelayedBackwards", "type": "error" }, { "inputs": [], "name": "DelayedTooFar", "type": "error" }, { "inputs": [], "name": "Deprecated", "type": "error" }, { "inputs": [], "name": "ForceIncludeBlockTooSoon", "type": "error" }, { "inputs": [], "name": "ForceIncludeTimeTooSoon", "type": "error" }, { "inputs": [], "name": "HadZeroInit", "type": "error" }, { "inputs": [], "name": "IncorrectMessagePreimage", "type": "error" }, { "inputs": [ { "internalType": "string", "name": "name", "type": "string" } ], "name": "InitParamZero", "type": "error" }, { "inputs": [ { "internalType": "bytes1", "name": "", "type": "bytes1" } ], "name": "InvalidHeaderFlag", "type": "error" }, { "inputs": [], "name": "MissingDataHashes", "type": "error" }, { "inputs": [], "name": "NativeTokenMismatch", "type": "error" }, { "inputs": [ { "internalType": "bytes32", "name": "", "type": "bytes32" } ], "name": "NoSuchKeyset", "type": "error" }, { "inputs": [], "name": "NotBatchPoster", "type": "error" }, { "inputs": [ { "internalType": "address", "name": "", "type": "address" } ], "name": "NotBatchPosterManager", "type": "error" }, { "inputs": [], "name": "NotForked", "type": "error" }, { "inputs": [], "name": "NotOrigin", "type": "error" }, { "inputs": [ { "internalType": "address", "name": "sender", "type": "address" }, { "internalType": "address", "name": "owner", "type": "address" } ], "name": "NotOwner", "type": "error" }, { "inputs": [], "name": "RollupNotChanged", "type": "error" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "uint256", "name": "messageNum", "type": "uint256" }, { "indexed": false, "internalType": "bytes", "name": "data", "type": "bytes" } ], "name": "InboxMessageDelivered", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "uint256", "name": "messageNum", "type": "uint256" } ], "name": "InboxMessageDeliveredFromOrigin", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "bytes32", "name": "keysetHash", "type": "bytes32" } ], "name": "InvalidateKeyset", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "uint256", "name": "id", "type": "uint256" } ], "name": "OwnerFunctionCalled", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "uint256", "name": "batchSequenceNumber", "type": "uint256" }, { "indexed": false, "internalType": "bytes", "name": "data", "type": "bytes" } ], "name": "SequencerBatchData", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "uint256", "name": "batchSequenceNumber", "type": "uint256" }, { "indexed": true, "internalType": "bytes32", "name": "beforeAcc", "type": "bytes32" }, { "indexed": true, "internalType": "bytes32", "name": "afterAcc", "type": "bytes32" }, { "indexed": false, "internalType": "bytes32", "name": "delayedAcc", "type": "bytes32" }, { "indexed": false, "internalType": "uint256", "name": "afterDelayedMessagesRead", "type": "uint256" }, { "components": [ { "internalType": "uint64", "name": "minTimestamp", "type": "uint64" }, { "internalType": "uint64", "name": "maxTimestamp", "type": "uint64" }, { "internalType": "uint64", "name": "minBlockNumber", "type": "uint64" }, { "internalType": "uint64", "name": "maxBlockNumber", "type": "uint64" } ], "indexed": false, "internalType": "struct IBridge.TimeBounds", "name": "timeBounds", "type": "tuple" }, { "indexed": false, "internalType": "enum IBridge.BatchDataLocation", "name": "dataLocation", "type": "uint8" } ], "name": "SequencerBatchDelivered", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "bytes32", "name": "keysetHash", "type": "bytes32" }, { "indexed": false, "internalType": "bytes", "name": "keysetBytes", "type": "bytes" } ], "name": "SetValidKeyset", "type": "event" }, { "inputs": [], "name": "BROTLI_MESSAGE_HEADER_FLAG", "outputs": [ { "internalType": "bytes1", "name": "", "type": "bytes1" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "DAS_MESSAGE_HEADER_FLAG", "outputs": [ { "internalType": "bytes1", "name": "", "type": "bytes1" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "DATA_AUTHENTICATED_FLAG", "outputs": [ { "internalType": "bytes1", "name": "", "type": "bytes1" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "DATA_BLOB_HEADER_FLAG", "outputs": [ { "internalType": "bytes1", "name": "", "type": "bytes1" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "EIGENDA_MESSAGE_HEADER_FLAG", "outputs": [ { "internalType": "bytes1", "name": "", "type": "bytes1" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "HEADER_LENGTH", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "TREE_DAS_MESSAGE_HEADER_FLAG", "outputs": [ { "internalType": "bytes1", "name": "", "type": "bytes1" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "ZERO_HEAVY_MESSAGE_HEADER_FLAG", "outputs": [ { "internalType": "bytes1", "name": "", "type": "bytes1" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "sequenceNumber", "type": "uint256" }, { "internalType": "bytes", "name": "data", "type": "bytes" }, { "internalType": "uint256", "name": "afterDelayedMessagesRead", "type": "uint256" }, { "internalType": "contract IGasRefunder", "name": "gasRefunder", "type": "address" }, { "internalType": "uint256", "name": "prevMessageCount", "type": "uint256" }, { "internalType": "uint256", "name": "newMessageCount", "type": "uint256" } ], "name": "addSequencerL2Batch", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "sequenceNumber", "type": "uint256" }, { "internalType": "uint256", "name": "afterDelayedMessagesRead", "type": "uint256" }, { "internalType": "contract IGasRefunder", "name": "gasRefunder", "type": "address" }, { "internalType": "uint256", "name": "prevMessageCount", "type": "uint256" }, { "internalType": "uint256", "name": "newMessageCount", "type": "uint256" } ], "name": "addSequencerL2BatchFromBlobs", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "sequenceNumber", "type": "uint256" }, { "components": [ { "internalType": "uint32", "name": "batchId", "type": "uint32" }, { "internalType": "uint32", "name": "blobIndex", "type": "uint32" }, { "components": [ { "components": [ { "internalType": "bytes32", "name": "blobHeadersRoot", "type": "bytes32" }, { "internalType": "bytes", "name": "quorumNumbers", "type": "bytes" }, { "internalType": "bytes", "name": "signedStakeForQuorums", "type": "bytes" }, { "internalType": "uint32", "name": "referenceBlockNumber", "type": "uint32" } ], "internalType": "struct IEigenDAServiceManager.BatchHeader", "name": "batchHeader", "type": "tuple" }, { "internalType": "bytes32", "name": "signatoryRecordHash", "type": "bytes32" }, { "internalType": "uint32", "name": "confirmationBlockNumber", "type": "uint32" } ], "internalType": "struct IEigenDAServiceManager.BatchMetadata", "name": "batchMetadata", "type": "tuple" }, { "internalType": "bytes", "name": "inclusionProof", "type": "bytes" }, { "internalType": "bytes", "name": "quorumIndices", "type": "bytes" } ], "internalType": "struct EigenDARollupUtils.BlobVerificationProof", "name": "blobVerificationProof", "type": "tuple" }, { "components": [ { "components": [ { "internalType": "uint256", "name": "X", "type": "uint256" }, { "internalType": "uint256", "name": "Y", "type": "uint256" } ], "internalType": "struct BN254.G1Point", "name": "commitment", "type": "tuple" }, { "internalType": "uint32", "name": "dataLength", "type": "uint32" }, { "components": [ { "internalType": "uint8", "name": "quorumNumber", "type": "uint8" }, { "internalType": "uint8", "name": "adversaryThresholdPercentage", "type": "uint8" }, { "internalType": "uint8", "name": "confirmationThresholdPercentage", "type": "uint8" }, { "internalType": "uint32", "name": "chunkLength", "type": "uint32" } ], "internalType": "struct IEigenDAServiceManager.QuorumBlobParam[]", "name": "quorumBlobParams", "type": "tuple[]" } ], "internalType": "struct IEigenDAServiceManager.BlobHeader", "name": "blobHeader", "type": "tuple" }, { "internalType": "uint256", "name": "afterDelayedMessagesRead", "type": "uint256" }, { "internalType": "contract IGasRefunder", "name": "gasRefunder", "type": "address" }, { "internalType": "uint256", "name": "prevMessageCount", "type": "uint256" }, { "internalType": "uint256", "name": "newMessageCount", "type": "uint256" } ], "name": "addSequencerL2BatchFromEigenDA", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "", "type": "uint256" }, { "internalType": "bytes", "name": "", "type": "bytes" }, { "internalType": "uint256", "name": "", "type": "uint256" }, { "internalType": "contract IGasRefunder", "name": "", "type": "address" } ], "name": "addSequencerL2BatchFromOrigin", "outputs": [], "stateMutability": "pure", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "sequenceNumber", "type": "uint256" }, { "internalType": "bytes", "name": "data", "type": "bytes" }, { "internalType": "uint256", "name": "afterDelayedMessagesRead", "type": "uint256" }, { "internalType": "contract IGasRefunder", "name": "gasRefunder", "type": "address" }, { "internalType": "uint256", "name": "prevMessageCount", "type": "uint256" }, { "internalType": "uint256", "name": "newMessageCount", "type": "uint256" } ], "name": "addSequencerL2BatchFromOrigin", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [], "name": "batchCount", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "batchPosterManager", "outputs": [ { "internalType": "address", "name": "", "type": "address" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "bridge", "outputs": [ { "internalType": "contract IBridge", "name": "", "type": "address" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "bytes32", "name": "", "type": "bytes32" } ], "name": "dasKeySetInfo", "outputs": [ { "internalType": "bool", "name": "isValidKeyset", "type": "bool" }, { "internalType": "uint64", "name": "creationBlock", "type": "uint64" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "eigenDARollupManager", "outputs": [ { "internalType": "contract IRollupManager", "name": "", "type": "address" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "eigenDAServiceManager", "outputs": [ { "internalType": "contract IEigenDAServiceManager", "name": "", "type": "address" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "_totalDelayedMessagesRead", "type": "uint256" }, { "internalType": "uint8", "name": "kind", "type": "uint8" }, { "internalType": "uint64[2]", "name": "l1BlockAndTime", "type": "uint64[2]" }, { "internalType": "uint256", "name": "baseFeeL1", "type": "uint256" }, { "internalType": "address", "name": "sender", "type": "address" }, { "internalType": "bytes32", "name": "messageDataHash", "type": "bytes32" } ], "name": "forceInclusion", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "bytes32", "name": "ksHash", "type": "bytes32" } ], "name": "getKeysetCreationBlock", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "index", "type": "uint256" } ], "name": "inboxAccs", "outputs": [ { "internalType": "bytes32", "name": "", "type": "bytes32" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "contract IBridge", "name": "bridge_", "type": "address" }, { "components": [ { "internalType": "uint256", "name": "delayBlocks", "type": "uint256" }, { "internalType": "uint256", "name": "futureBlocks", "type": "uint256" }, { "internalType": "uint256", "name": "delaySeconds", "type": "uint256" }, { "internalType": "uint256", "name": "futureSeconds", "type": "uint256" } ], "internalType": "struct ISequencerInbox.MaxTimeVariation", "name": "maxTimeVariation_", "type": "tuple" } ], "name": "initialize", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "bytes32", "name": "ksHash", "type": "bytes32" } ], "name": "invalidateKeysetHash", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "", "type": "address" } ], "name": "isBatchPoster", "outputs": [ { "internalType": "bool", "name": "", "type": "bool" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "", "type": "address" } ], "name": "isSequencer", "outputs": [ { "internalType": "bool", "name": "", "type": "bool" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "isUsingFeeToken", "outputs": [ { "internalType": "bool", "name": "", "type": "bool" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "bytes32", "name": "ksHash", "type": "bytes32" } ], "name": "isValidKeysetHash", "outputs": [ { "internalType": "bool", "name": "", "type": "bool" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "maxDataSize", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "maxTimeVariation", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" }, { "internalType": "uint256", "name": "", "type": "uint256" }, { "internalType": "uint256", "name": "", "type": "uint256" }, { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "postUpgradeInit", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [], "name": "reader4844", "outputs": [ { "internalType": "contract IReader4844", "name": "", "type": "address" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "removeDelayAfterFork", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [], "name": "rollup", "outputs": [ { "internalType": "contract IOwnable", "name": "", "type": "address" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "newBatchPosterManager", "type": "address" } ], "name": "setBatchPosterManager", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "addr", "type": "address" }, { "internalType": "bool", "name": "isBatchPoster_", "type": "bool" } ], "name": "setIsBatchPoster", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "addr", "type": "address" }, { "internalType": "bool", "name": "isSequencer_", "type": "bool" } ], "name": "setIsSequencer", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "components": [ { "internalType": "uint256", "name": "delayBlocks", "type": "uint256" }, { "internalType": "uint256", "name": "futureBlocks", "type": "uint256" }, { "internalType": "uint256", "name": "delaySeconds", "type": "uint256" }, { "internalType": "uint256", "name": "futureSeconds", "type": "uint256" } ], "internalType": "struct ISequencerInbox.MaxTimeVariation", "name": "maxTimeVariation_", "type": "tuple" } ], "name": "setMaxTimeVariation", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "bytes", "name": "keysetBytes", "type": "bytes" } ], "name": "setValidKeyset", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [], "name": "totalDelayedMessagesRead", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "newEigenDAServiceManager", "type": "address" } ], "name": "updateEigenDAServiceManager", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [], "name": "updateRollupAddress", "outputs": [], "stateMutability": "nonpayable", "type": "function" } ]` abi, err := abi.JSON(strings.NewReader(sequencerInboxABI)) @@ -310,71 +250,6 @@ func ParseSequencerMsg(calldata []byte) *EigenDABlobInfo { panic(err) } - // blobVerificationProofOffset, err := convertCalldataToInt(calldata[36:68]) - // if err != nil { - // panic(err) - // } - - // blobVerificationProofOffset += 4 - - // blobHeaderOffset, err := convertCalldataToInt(calldata[68:100]) - // if err != nil { - // panic(err) - // } - - // blobHeaderOffset += 4 - // blobIndex, err := convertCalldataToInt(calldata[blobVerificationProofOffset+32 : blobVerificationProofOffset+64]) - - // batchMetadataOffset, err := convertCalldataToInt(calldata[blobVerificationProofOffset+64 : blobVerificationProofOffset+96]) - // if err != nil { - // panic(err) - // } - - // batchMetadataOffset += blobVerificationProofOffset - - // batchHeaderOffset, err := convertCalldataToInt(calldata[batchMetadataOffset : batchMetadataOffset+32]) - // if err != nil { - // panic(err) - // } - - // batchHeaderOffset += batchMetadataOffset - // blobHeadersRoot := calldata[batchHeaderOffset : batchHeaderOffset+32] - // referenceBlockNumber, err := convertCalldataToInt(calldata[batchHeaderOffset+96 : batchHeaderOffset+128]) - - // quorumBlobParamsOffset, err := convertCalldataToInt(calldata[blobHeaderOffset+96 : blobHeaderOffset+128]) - // if err != nil { - // panic(err) - // } - // quorumBlobParamsOffset += blobHeaderOffset - - // numberOfQuorumBlobParams, err := convertCalldataToInt(calldata[quorumBlobParamsOffset : quorumBlobParamsOffset+32]) - // if err != nil { - // panic(err) - // } - - // quorumIDs := make([]uint32, numberOfQuorumBlobParams) - - // for i := 0; i < numberOfQuorumBlobParams; i++ { - // offset := quorumBlobParamsOffset + 32 + 32*4*i - // quorumID, err := convertCalldataToInt(calldata[offset : offset+32]) - // if err != nil { - // panic(err) - // } - - // quorumIDs[i] = uint32(quorumID) - // } - - // batchHeader := append(blobHeadersRoot, calldata[batchHeaderOffset+96:batchHeaderOffset+128]...) - // batchHeaderHash := crypto.Keccak256Hash(batchHeader).Bytes() - - // return &EigenDABlobInfo{ - // BlobHeader: &BlobHeader{ - // Commitment: &G1Point{}, - // DataLength: uint32(dataLength), - // QuorumBlobParams: quorumBlobParams, - // }, - // } - return &EigenDABlobInfo{ BlobVerificationProof: *payload.BlobVerificationProof, BlobHeader: *payload.BlobHeader, @@ -454,14 +329,6 @@ func convertToPayload(pa []interface{}) (payload, error) { NewMessageCount: pa[6].(*big.Int), }, nil } - -// type QuorumBlobParams struct { -// QuorumNumber uint8 -// AdversaryThresholdPercentage uint8 -// ConfirmationThresholdPercentage uint8 -// ChunkLength uint32 -// } - func convertCalldataToInt(calldata []byte) (int, error) { num := new(big.Int).SetBytes(calldata) @@ -473,17 +340,3 @@ func convertCalldataToInt(calldata []byte) (int, error) { return 0, errors.New("calldata is not a valid int") } - -// func bytesToUint32Array(b []byte) ([]uint32, error) { -// if len(b)%4 != 0 { -// return nil, fmt.Errorf("the length of the byte slice must be a multiple of 4") -// } - -// numElements := len(b) / 4 -// result := make([]uint32, numElements) -// for i := 0; i < numElements; i++ { -// result[i] = binary.BigEndian.Uint32(b[i*4 : (i+1)*4]) -// } - -// return result, nil -// } From ddb75c40a48ba4bbc8a9318bf9cf9a08f8fa399f Mon Sep 17 00:00:00 2001 From: afk <84330705+afkbyte@users.noreply.github.com> Date: Sun, 9 Jun 2024 13:51:31 -0400 Subject: [PATCH 05/38] update typo in hash --- arbitrator/prover/test-cases/go/main.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/arbitrator/prover/test-cases/go/main.go b/arbitrator/prover/test-cases/go/main.go index 8c14c8163..cc6d954bd 100644 --- a/arbitrator/prover/test-cases/go/main.go +++ b/arbitrator/prover/test-cases/go/main.go @@ -140,7 +140,7 @@ func main() { } } // EIGENDA COMMIT HASH - _, err = wavmio.ResolveTypedPreimage(arbutil.EigenDaPreimageType, common.HexToHash("011e229d75b13559dcb2d757ecae9b666fa579268e28e196789503322115c06e1")) + _, err = wavmio.ResolveTypedPreimage(arbutil.EigenDaPreimageType, common.HexToHash("011e229d75b13559dcb2d757ecae9b66fa579268e28e196789503322115c06e1")) if err != nil { panic(fmt.Sprintf("failed to resolve eigenda preimage: %v", err)) } From 11b2f7fa8a91daf388048186d6d0018181e07eb1 Mon Sep 17 00:00:00 2001 From: afkbyte Date: Sun, 9 Jun 2024 16:35:40 -0400 Subject: [PATCH 06/38] brought in historical changes --- arbnode/batch_poster.go | 82 +++++++++-- arbnode/inbox_tracker.go | 5 +- arbnode/node.go | 2 +- arbstate/inbox.go | 58 +++++--- arbstate/inbox_fuzz_test.go | 2 +- cmd/replay/main.go | 2 +- das/eigenda/eigenda.go | 219 ---------------------------- eigenda/eigenda.go | 16 +- eigenda/eigenda_proxy_client.go | 2 +- eigenda/eigenda_test.go | 1 - staker/l1_validator.go | 2 +- staker/stateless_block_validator.go | 2 +- 12 files changed, 120 insertions(+), 273 deletions(-) delete mode 100644 das/eigenda/eigenda.go diff --git a/arbnode/batch_poster.go b/arbnode/batch_poster.go index ea96c11fd..b5bc03f4c 100644 --- a/arbnode/batch_poster.go +++ b/arbnode/batch_poster.go @@ -42,7 +42,7 @@ import ( "github.com/offchainlabs/nitro/cmd/chaininfo" "github.com/offchainlabs/nitro/cmd/genericconf" "github.com/offchainlabs/nitro/das" - "github.com/offchainlabs/nitro/das/eigenda" + "github.com/offchainlabs/nitro/eigenda" "github.com/offchainlabs/nitro/execution" "github.com/offchainlabs/nitro/solgen/go/bridgegen" "github.com/offchainlabs/nitro/util" @@ -64,8 +64,9 @@ var ( const ( batchPosterSimpleRedisLockKey = "node.batch-poster.redis-lock.simple-lock-key" - sequencerBatchPostMethodName = "addSequencerL2BatchFromOrigin0" - sequencerBatchPostWithBlobsMethodName = "addSequencerL2BatchFromBlobs" + sequencerBatchPostMethodName = "addSequencerL2BatchFromOrigin0" + sequencerBatchPostWithBlobsMethodName = "addSequencerL2BatchFromBlobs" + sequencerBatchPostWithEigendaMethodName = "addSequencerL2BatchFromEigenDA" ) type batchPosterPosition struct { @@ -143,6 +144,7 @@ type BatchPosterConfig struct { RedisLock redislock.SimpleCfg `koanf:"redis-lock" reload:"hot"` ExtraBatchGas uint64 `koanf:"extra-batch-gas" reload:"hot"` Post4844Blobs bool `koanf:"post-4844-blobs" reload:"hot"` + PostEigenDA bool `koanf:"post-eigen-da" reload:"hot"` IgnoreBlobPrice bool `koanf:"ignore-blob-price" reload:"hot"` ParentChainWallet genericconf.WalletConfig `koanf:"parent-chain-wallet"` L1BlockBound string `koanf:"l1-block-bound" reload:"hot"` @@ -194,6 +196,7 @@ func BatchPosterConfigAddOptions(prefix string, f *pflag.FlagSet) { f.String(prefix+".gas-refunder-address", DefaultBatchPosterConfig.GasRefunderAddress, "The gas refunder contract address (optional)") f.Uint64(prefix+".extra-batch-gas", DefaultBatchPosterConfig.ExtraBatchGas, "use this much more gas than estimation says is necessary to post batches") f.Bool(prefix+".post-4844-blobs", DefaultBatchPosterConfig.Post4844Blobs, "if the parent chain supports 4844 blobs and they're well priced, post EIP-4844 blobs") + f.Bool(prefix+".post-eigen-da", DefaultBatchPosterConfig.PostEigenDA, "Post data to EigenDA") f.Bool(prefix+".ignore-blob-price", DefaultBatchPosterConfig.IgnoreBlobPrice, "if the parent chain supports 4844 blobs and ignore-blob-price is true, post 4844 blobs even if it's not price efficient") f.String(prefix+".redis-url", DefaultBatchPosterConfig.RedisUrl, "if non-empty, the Redis URL to store queued transactions in") f.String(prefix+".l1-block-bound", DefaultBatchPosterConfig.L1BlockBound, "only post messages to batches when they're within the max future block/timestamp as of this L1 block tag (\"safe\", \"finalized\", \"latest\", or \"ignore\" to ignore this check)") @@ -221,6 +224,7 @@ var DefaultBatchPosterConfig = BatchPosterConfig{ GasRefunderAddress: "", ExtraBatchGas: 50_000, Post4844Blobs: false, + PostEigenDA: false, IgnoreBlobPrice: false, DataPoster: dataposter.DefaultDataPosterConfig, ParentChainWallet: DefaultBatchPosterL1WalletConfig, @@ -252,6 +256,30 @@ var TestBatchPosterConfig = BatchPosterConfig{ GasRefunderAddress: "", ExtraBatchGas: 10_000, Post4844Blobs: true, + PostEigenDA: false, + IgnoreBlobPrice: false, + DataPoster: dataposter.TestDataPosterConfig, + ParentChainWallet: DefaultBatchPosterL1WalletConfig, + L1BlockBound: "", + L1BlockBoundBypass: time.Hour, + UseAccessLists: true, + GasEstimateBaseFeeMultipleBips: arbmath.OneInBips * 3 / 2, +} + +var EigenDABatchPosterConfig = BatchPosterConfig{ + Enable: true, + MaxSize: 100000, + Max4844BatchSize: DefaultBatchPosterConfig.Max4844BatchSize, + PollInterval: time.Millisecond * 10, + ErrorDelay: time.Millisecond * 10, + MaxDelay: 0, + WaitForMaxDelay: false, + CompressionLevel: 2, + DASRetentionPeriod: time.Hour * 24 * 15, + GasRefunderAddress: "", + ExtraBatchGas: 10_000, + Post4844Blobs: false, + PostEigenDA: true, IgnoreBlobPrice: false, DataPoster: dataposter.TestDataPosterConfig, ParentChainWallet: DefaultBatchPosterL1WalletConfig, @@ -611,6 +639,7 @@ type buildingBatch struct { msgCount arbutil.MessageIndex haveUsefulMessage bool use4844 bool + useEigenDA bool } func newBatchSegments(firstDelayed uint64, config *BatchPosterConfig, backlog uint64, use4844 bool) *batchSegments { @@ -847,11 +876,16 @@ func (b *BatchPoster) encodeAddBatch( l2MessageData []byte, delayedMsg uint64, use4844 bool, + useEigenDA bool, + eigenDaBlobInfo *eigenda.EigenDABlobInfo, ) ([]byte, []kzg4844.Blob, error) { methodName := sequencerBatchPostMethodName if use4844 { methodName = sequencerBatchPostWithBlobsMethodName } + if useEigenDA { + methodName = sequencerBatchPostWithEigendaMethodName + } method, ok := b.seqInboxABI.Methods[methodName] if !ok { return nil, nil, errors.New("failed to find add batch method") @@ -872,6 +906,17 @@ func (b *BatchPoster) encodeAddBatch( new(big.Int).SetUint64(uint64(prevMsgNum)), new(big.Int).SetUint64(uint64(newMsgNum)), ) + } else if useEigenDA { + calldata, err = method.Inputs.Pack( + seqNum, + eigenDaBlobInfo.BlobVerificationProof, + eigenDaBlobInfo.BlobHeader, + new(big.Int).SetUint64(delayedMsg), + b.config().gasRefunder, + new(big.Int).SetUint64(uint64(prevMsgNum)), + new(big.Int).SetUint64(uint64(newMsgNum)), + ) + } else { calldata, err = method.Inputs.Pack( seqNum, @@ -907,7 +952,7 @@ func estimateGas(client rpc.ClientInterface, ctx context.Context, params estimat return uint64(gas), err } -func (b *BatchPoster) estimateGas(ctx context.Context, sequencerMessage []byte, delayedMessages uint64, realData []byte, realBlobs []kzg4844.Blob, realNonce uint64, realAccessList types.AccessList) (uint64, error) { +func (b *BatchPoster) estimateGas(ctx context.Context, sequencerMessage []byte, delayedMessages uint64, realData []byte, realBlobs []kzg4844.Blob, realNonce uint64, realAccessList types.AccessList, eigenDaBlobInfo *eigenda.EigenDABlobInfo) (uint64, error) { config := b.config() rpcClient := b.l1Reader.Client() rawRpcClient := rpcClient.Client() @@ -949,7 +994,7 @@ func (b *BatchPoster) estimateGas(ctx context.Context, sequencerMessage []byte, // However, we set nextMsgNum to 1 because it is necessary for a correct estimation for the final to be non-zero. // Because we're likely estimating against older state, this might not be the actual next message, // but the gas used should be the same. - data, kzgBlobs, err := b.encodeAddBatch(abi.MaxUint256, 0, 1, sequencerMessage, delayedMessages, len(realBlobs) > 0) + data, kzgBlobs, err := b.encodeAddBatch(abi.MaxUint256, 0, 1, sequencerMessage, delayedMessages, len(realBlobs) > 0, eigenDaBlobInfo != nil, eigenDaBlobInfo) if err != nil { return 0, err } @@ -1044,11 +1089,17 @@ func (b *BatchPoster) maybePostSequencerBatch(ctx context.Context) (bool, error) } } + var useEigenDA bool + if config.PostEigenDA && b.eigenDAWriter != nil { + useEigenDA = true + } + b.building = &buildingBatch{ segments: newBatchSegments(batchPosition.DelayedMessageCount, b.config(), b.GetBacklogEstimate(), use4844), msgCount: batchPosition.MessageCount, startMsgCount: batchPosition.MessageCount, use4844: use4844, + useEigenDA: useEigenDA, } } msgCount, err := b.streamer.GetMessageCount() @@ -1224,9 +1275,10 @@ func (b *BatchPoster) maybePostSequencerBatch(ctx context.Context) (bool, error) } } - if b.daWriter == nil && b.eigenDAWriter != nil { + var blobInfo *eigenda.EigenDABlobInfo + if b.daWriter == nil && b.eigenDAWriter != nil && config.PostEigenDA { log.Info("Start to write data to eigenda: ", "data", hex.EncodeToString(sequencerMsg)) - daRef, err := b.eigenDAWriter.Store(ctx, sequencerMsg) + blobInfo, err = b.eigenDAWriter.Store(ctx, sequencerMsg) if err != nil { if config.DisableEigenDAFallbackStoreDataOnChain { log.Warn("Falling back to storing data on chain", "err", err) @@ -1234,16 +1286,14 @@ func (b *BatchPoster) maybePostSequencerBatch(ctx context.Context) (bool, error) } } - pointer, err := b.eigenDAWriter.Serialize(daRef) - if err != nil { - log.Warn("DaRef serialization failed", "err", err) - return false, errors.New("DaRef serialization failed") - } - log.Info("EigenDA transaction receipt(data pointer): ", "hash", hex.EncodeToString(daRef.BatchHeaderHash), "index", daRef.BlobIndex) - sequencerMsg = pointer + //sequencerMsg, err = b.eigenDAWriter.Serialize(blobInfo) + // if err != nil { + // log.Warn("DaRef serialization failed", "err", err) + // return false, errors.New("DaRef serialization failed") + // } } - data, kzgBlobs, err := b.encodeAddBatch(new(big.Int).SetUint64(batchPosition.NextSeqNum), batchPosition.MessageCount, b.building.msgCount, sequencerMsg, b.building.segments.delayedMsg, b.building.use4844) + data, kzgBlobs, err := b.encodeAddBatch(new(big.Int).SetUint64(batchPosition.NextSeqNum), batchPosition.MessageCount, b.building.msgCount, sequencerMsg, b.building.segments.delayedMsg, b.building.use4844, b.building.useEigenDA, blobInfo) if err != nil { return false, err } @@ -1258,7 +1308,7 @@ func (b *BatchPoster) maybePostSequencerBatch(ctx context.Context) (bool, error) // In theory, this might reduce gas usage, but only by a factor that's already // accounted for in `config.ExtraBatchGas`, as that same factor can appear if a user // posts a new delayed message that we didn't see while gas estimating. - gasLimit, err := b.estimateGas(ctx, sequencerMsg, lastPotentialMsg.DelayedMessagesRead, data, kzgBlobs, nonce, accessList) + gasLimit, err := b.estimateGas(ctx, sequencerMsg, lastPotentialMsg.DelayedMessagesRead, data, kzgBlobs, nonce, accessList, blobInfo) if err != nil { return false, err } diff --git a/arbnode/inbox_tracker.go b/arbnode/inbox_tracker.go index 17ec55766..a614ad2af 100644 --- a/arbnode/inbox_tracker.go +++ b/arbnode/inbox_tracker.go @@ -23,7 +23,7 @@ import ( "github.com/offchainlabs/nitro/arbutil" "github.com/offchainlabs/nitro/broadcaster" m "github.com/offchainlabs/nitro/broadcaster/message" - "github.com/offchainlabs/nitro/das/eigenda" + "github.com/offchainlabs/nitro/eigenda" "github.com/offchainlabs/nitro/staker" "github.com/offchainlabs/nitro/util/containers" ) @@ -616,8 +616,9 @@ func (t *InboxTracker) AddSequencerBatches(ctx context.Context, client arbutil.L if t.blobReader != nil { daProviders = append(daProviders, arbstate.NewDAProviderBlobReader(t.blobReader)) } - multiplexer := arbstate.NewInboxMultiplexer(backend, prevbatchmeta.DelayedMessageCount, daProviders, t.eigenDA, arbstate.KeysetValidate) + multiplexer := arbstate.NewInboxMultiplexer(backend, prevbatchmeta.DelayedMessageCount, daProviders, arbstate.KeysetValidate) batchMessageCounts := make(map[uint64]arbutil.MessageIndex) + currentpos := prevbatchmeta.MessageCount + 1 for { if len(backend.batches) == 0 { diff --git a/arbnode/node.go b/arbnode/node.go index b2bf1a1a6..94d1df2b9 100644 --- a/arbnode/node.go +++ b/arbnode/node.go @@ -33,7 +33,7 @@ import ( "github.com/offchainlabs/nitro/broadcaster" "github.com/offchainlabs/nitro/cmd/chaininfo" "github.com/offchainlabs/nitro/das" - "github.com/offchainlabs/nitro/das/eigenda" + "github.com/offchainlabs/nitro/eigenda" "github.com/offchainlabs/nitro/execution" "github.com/offchainlabs/nitro/execution/gethexec" "github.com/offchainlabs/nitro/solgen/go/bridgegen" diff --git a/arbstate/inbox.go b/arbstate/inbox.go index 7d00273bb..4c6947c7d 100644 --- a/arbstate/inbox.go +++ b/arbstate/inbox.go @@ -25,7 +25,7 @@ import ( "github.com/offchainlabs/nitro/arbos/l1pricing" "github.com/offchainlabs/nitro/arbutil" "github.com/offchainlabs/nitro/das/dastree" - "github.com/offchainlabs/nitro/das/eigenda" + "github.com/offchainlabs/nitro/eigenda" "github.com/offchainlabs/nitro/util/blobs" "github.com/offchainlabs/nitro/zeroheavy" ) @@ -67,10 +67,11 @@ const MinLifetimeSecondsForDataAvailabilityCert = 7 * 24 * 60 * 60 // one week var ( ErrNoBlobReader = errors.New("blob batch payload was encountered but no BlobReader was configured") + ErrNoEigenDAReader = errors.New("eigenDA versioned batch payload was encountered but no instance of EigenDA was configured") ErrInvalidBlobDataFormat = errors.New("blob batch data is not a list of hashes as expected") ) -func parseSequencerMessage(ctx context.Context, batchNum uint64, batchBlockHash common.Hash, data []byte, daProviders []DataAvailabilityProvider, eigenDAReader eigenda.EigenDAReader, keysetValidationMode KeysetValidationMode) (*sequencerMessage, error) { +func parseSequencerMessage(ctx context.Context, batchNum uint64, batchBlockHash common.Hash, data []byte, daProviders []DataAvailabilityProvider, keysetValidationMode KeysetValidationMode) (*sequencerMessage, error) { if len(data) < 40 { return nil, errors.New("sequencer message missing L1 header") } @@ -101,23 +102,6 @@ func parseSequencerMessage(ctx context.Context, batchNum uint64, batchBlockHash foundDA := false var err error - // detect eigenda message from byte - if eigenda.IsEigenDAMessageHeaderByte(payload[0]) { - if eigenDAReader == nil { - log.Error("No EigenDA Reader configured, but sequencer message found with EigenDA header") - } else { - var err error - payload, err = eigenda.RecoverPayloadFromEigenDABatch(ctx, payload[1:], eigenDAReader, nil) - if err != nil { - return nil, err - } - if payload == nil { - return parsedMsg, nil - } - foundDA = true - } - } - for _, provider := range daProviders { if provider != nil && provider.IsValidHeaderByte(payload[0]) { payload, err = provider.RecoverPayloadFromBatch(ctx, batchNum, batchBlockHash, data, nil, keysetValidationMode) @@ -137,6 +121,8 @@ func parseSequencerMessage(ctx context.Context, batchNum uint64, batchBlockHash log.Error("No DAS Reader configured, but sequencer message found with DAS header") } else if IsBlobHashesHeaderByte(payload[0]) { return nil, ErrNoBlobReader + } else if eigenda.IsEigenDAMessageHeaderByte(payload[0]) { + return nil, ErrNoEigenDAReader } } } @@ -385,6 +371,34 @@ func (b *dAProviderForBlobReader) RecoverPayloadFromBatch( return payload, nil } +// NewDAProviderEigenDA is generally meant to be only used by nitro. +// DA Providers should implement methods in the DataAvailabilityProvider interface independently +func NewDAProviderEigenDA(eigenDAReader eigenda.EigenDAReader) *daProviderForEigenDA { + return &daProviderForEigenDA{ + eigenDAReader: eigenDAReader, + } +} + +type daProviderForEigenDA struct { + eigenDAReader eigenda.EigenDAReader +} + +func (e *daProviderForEigenDA) IsValidHeaderByte(headerByte byte) bool { + return eigenda.IsEigenDAMessageHeaderByte(headerByte) +} + +func (e *daProviderForEigenDA) RecoverPayloadFromBatch( + ctx context.Context, + batchNum uint64, + batchBlockHash common.Hash, + sequencerMsg []byte, + preimages map[arbutil.PreimageType]map[common.Hash][]byte, + keysetValidationMode KeysetValidationMode, +) ([]byte, error) { + // we start from the 41st byte of sequencerMsg because bytes 0 - 40 are the header, and 40 - 41 is the eigenDA header flag + return eigenda.RecoverPayloadFromEigenDABatch(ctx, sequencerMsg[41:], e.eigenDAReader, preimages) +} + type KeysetValidationMode uint8 const KeysetValidate KeysetValidationMode = 0 @@ -395,7 +409,6 @@ type inboxMultiplexer struct { backend InboxBackend delayedMessagesRead uint64 daProviders []DataAvailabilityProvider - eigenDAReader eigenda.EigenDAReader cachedSequencerMessage *sequencerMessage cachedSequencerMessageNum uint64 cachedSegmentNum uint64 @@ -405,12 +418,11 @@ type inboxMultiplexer struct { keysetValidationMode KeysetValidationMode } -func NewInboxMultiplexer(backend InboxBackend, delayedMessagesRead uint64, daProviders []DataAvailabilityProvider, eigenDAReader eigenda.EigenDAReader, keysetValidationMode KeysetValidationMode) arbostypes.InboxMultiplexer { +func NewInboxMultiplexer(backend InboxBackend, delayedMessagesRead uint64, daProviders []DataAvailabilityProvider, keysetValidationMode KeysetValidationMode) arbostypes.InboxMultiplexer { return &inboxMultiplexer{ backend: backend, delayedMessagesRead: delayedMessagesRead, daProviders: daProviders, - eigenDAReader: eigenDAReader, keysetValidationMode: keysetValidationMode, } } @@ -432,7 +444,7 @@ func (r *inboxMultiplexer) Pop(ctx context.Context) (*arbostypes.MessageWithMeta } r.cachedSequencerMessageNum = r.backend.GetSequencerInboxPosition() var err error - r.cachedSequencerMessage, err = parseSequencerMessage(ctx, r.cachedSequencerMessageNum, batchBlockHash, bytes, r.daProviders, r.eigenDAReader, r.keysetValidationMode) + r.cachedSequencerMessage, err = parseSequencerMessage(ctx, r.cachedSequencerMessageNum, batchBlockHash, bytes, r.daProviders, r.keysetValidationMode) if err != nil { return nil, err } diff --git a/arbstate/inbox_fuzz_test.go b/arbstate/inbox_fuzz_test.go index dcf43fd0d..b34c02534 100644 --- a/arbstate/inbox_fuzz_test.go +++ b/arbstate/inbox_fuzz_test.go @@ -67,7 +67,7 @@ func FuzzInboxMultiplexer(f *testing.F) { delayedMessage: delayedMsg, positionWithinMessage: 0, } - multiplexer := NewInboxMultiplexer(backend, 0, nil, nil, KeysetValidate) + multiplexer := NewInboxMultiplexer(backend, 0, nil, KeysetValidate) _, err := multiplexer.Pop(context.TODO()) if err != nil { panic(err) diff --git a/cmd/replay/main.go b/cmd/replay/main.go index f9c1a84a7..182a594b2 100644 --- a/cmd/replay/main.go +++ b/cmd/replay/main.go @@ -31,7 +31,7 @@ import ( "github.com/offchainlabs/nitro/arbutil" "github.com/offchainlabs/nitro/cmd/chaininfo" "github.com/offchainlabs/nitro/das/dastree" - "github.com/offchainlabs/nitro/das/eigenda" + "github.com/offchainlabs/nitro/eigenda" "github.com/offchainlabs/nitro/gethhook" "github.com/offchainlabs/nitro/wavmio" ) diff --git a/das/eigenda/eigenda.go b/das/eigenda/eigenda.go deleted file mode 100644 index 4e4fde501..000000000 --- a/das/eigenda/eigenda.go +++ /dev/null @@ -1,219 +0,0 @@ -// Copyright 2024-2024, Alt Research, Inc. -// For license information, see https://github.com/nitro/blob/master/LICENSE - -package eigenda - -import ( - "bytes" - "context" - "crypto/sha256" - "crypto/tls" - "encoding/binary" - "encoding/hex" - "errors" - "fmt" - "time" - - "github.com/Layr-Labs/eigenda/api/grpc/disperser" - "github.com/Layr-Labs/eigenda/encoding/utils/codec" - "github.com/ethereum/go-ethereum/common" - "github.com/ethereum/go-ethereum/log" - "github.com/offchainlabs/nitro/arbutil" - "google.golang.org/grpc" - "google.golang.org/grpc/credentials" -) - -// hasBits returns true if `checking` has all `bits` -func hasBits(checking byte, bits byte) bool { - return (checking & bits) == bits -} - -// EigenDAMessageHeaderFlag indicated that the message is a EigenDARef which will be used to retrieve data from EigenDA -const EigenDAMessageHeaderFlag byte = 0xed - -func IsEigenDAMessageHeaderByte(header byte) bool { - return hasBits(header, EigenDAMessageHeaderFlag) -} - -type EigenDAWriter interface { - Store(context.Context, []byte) (*EigenDARef, error) - Serialize(eigenDARef *EigenDARef) ([]byte, error) -} - -type EigenDAReader interface { - QueryBlob(ctx context.Context, ref *EigenDARef) ([]byte, error) -} - -type EigenDAConfig struct { - Enable bool `koanf:"enable"` - Rpc string `koanf:"rpc"` -} - -func (ec *EigenDAConfig) String() { - fmt.Println(ec.Enable) - fmt.Println(ec.Rpc) - // fmt.Sprintf("enable: %b, rpc: %s", ec.Enable, ec.Rpc) -} - -type EigenDARef struct { - BatchHeaderHash []byte - BlobIndex uint32 -} - -func (b *EigenDARef) Serialize() ([]byte, error) { - buf := new(bytes.Buffer) - err := binary.Write(buf, binary.BigEndian, b.BlobIndex) - if err != nil { - return nil, err - } - _, err = buf.Write(b.BatchHeaderHash) - if err != nil { - return nil, err - } - return buf.Bytes(), nil -} - -func (b *EigenDARef) Deserialize(data []byte) error { - buf := bytes.NewReader(data) - err := binary.Read(buf, binary.BigEndian, &b.BlobIndex) - if err != nil { - return err - } - // _, err = buf.Read(b.BatchHeaderHash) - err = binary.Read(buf, binary.BigEndian, &b.BatchHeaderHash) - if err != nil { - return err - } - return nil -} - -type EigenDA struct { - client disperser.DisperserClient -} - -func NewEigenDA(rpc string) (*EigenDA, error) { - // nolint:gosec - creds := credentials.NewTLS(&tls.Config{ - InsecureSkipVerify: true, - }) - conn, err := grpc.Dial(rpc, grpc.WithTransportCredentials(creds)) - if err != nil { - return nil, err - } - return &EigenDA{ - client: disperser.NewDisperserClient(conn), - }, nil -} - -func (e *EigenDA) QueryBlob(ctx context.Context, ref *EigenDARef) ([]byte, error) { - res, err := e.client.RetrieveBlob(ctx, &disperser.RetrieveBlobRequest{ - BatchHeaderHash: ref.BatchHeaderHash, - BlobIndex: ref.BlobIndex, - }) - if err != nil { - return nil, err - } - decodedData := codec.RemoveEmptyByteFromPaddedBytes(res.GetData()) - return decodedData, nil -} - -func (e *EigenDA) Store(ctx context.Context, data []byte) (*EigenDARef, error) { - encodedData := codec.ConvertByPaddingEmptyByte(data) - disperseBlobRequest := &disperser.DisperseBlobRequest{ - Data: encodedData, - } - - res, err := e.client.DisperseBlob(ctx, disperseBlobRequest) - if err != nil { - return nil, err - } - - ticker := time.NewTicker(time.Second * 5) - defer ticker.Stop() - - var ref *EigenDARef - for range ticker.C { - statusReply, err := e.GetBlobStatus(ctx, res.GetRequestId()) - if err != nil { - log.Error("[eigenda]: GetBlobStatus: ", "error", err.Error()) - continue - } - switch statusReply.GetStatus() { - case disperser.BlobStatus_CONFIRMED, disperser.BlobStatus_FINALIZED: - ref = &EigenDARef{ - BatchHeaderHash: statusReply.GetInfo().GetBlobVerificationProof().GetBatchMetadata().GetBatchHeaderHash(), - BlobIndex: statusReply.GetInfo().GetBlobVerificationProof().GetBlobIndex(), - } - return ref, nil - case disperser.BlobStatus_FAILED: - return nil, errors.New("disperser blob failed") - default: - continue - } - } - return nil, errors.New("disperser blob query status timeout") - -} - -func (e *EigenDA) GetBlobStatus(ctx context.Context, reqeustId []byte) (*disperser.BlobStatusReply, error) { - blockStatusRequest := &disperser.BlobStatusRequest{ - RequestId: reqeustId, - } - return e.client.GetBlobStatus(ctx, blockStatusRequest) -} - -// Serialize implements EigenDAWriter. -func (e *EigenDA) Serialize(eigenDARef *EigenDARef) ([]byte, error) { - eigenDARefData, err := eigenDARef.Serialize() - if err != nil { - log.Warn("eigenDARef serialize error", "err", err) - return nil, err - } - buf := new(bytes.Buffer) - err = binary.Write(buf, binary.BigEndian, EigenDAMessageHeaderFlag) - if err != nil { - log.Warn("batch type byte serialization failed", "err", err) - return nil, err - } - err = binary.Write(buf, binary.BigEndian, eigenDARefData) - - if err != nil { - log.Warn("data pointer serialization failed", "err", err) - return nil, err - } - serializedBlobPointerData := buf.Bytes() - return serializedBlobPointerData, nil -} - -func RecoverPayloadFromEigenDABatch(ctx context.Context, - sequencerMsg []byte, - daReader EigenDAReader, - preimages map[arbutil.PreimageType]map[common.Hash][]byte, -) ([]byte, error) { - log.Info("Start recovering payload from eigenda: ", "data", hex.EncodeToString(sequencerMsg)) - var shaPreimages map[common.Hash][]byte - if preimages != nil { - if preimages[arbutil.Sha2_256PreimageType] == nil { - preimages[arbutil.Sha2_256PreimageType] = make(map[common.Hash][]byte) - } - shaPreimages = preimages[arbutil.Sha2_256PreimageType] - } - var daRef EigenDARef - daRef.BlobIndex = binary.BigEndian.Uint32(sequencerMsg[:4]) - daRef.BatchHeaderHash = sequencerMsg[4:] - log.Info("Data pointer: ", "info", hex.EncodeToString(daRef.BatchHeaderHash), "index", daRef.BlobIndex) - data, err := daReader.QueryBlob(ctx, &daRef) - if err != nil { - log.Error("Failed to query data from EigenDA", "err", err) - return nil, err - } - // record preimage data - log.Info("Recording preimage data for EigenDA") - shaDataHash := sha256.New() - shaDataHash.Write(sequencerMsg) - dataHash := shaDataHash.Sum([]byte{}) - if shaPreimages != nil { - shaPreimages[common.BytesToHash(dataHash)] = data - } - return data, nil -} diff --git a/eigenda/eigenda.go b/eigenda/eigenda.go index 8f697f1c1..6056a971a 100644 --- a/eigenda/eigenda.go +++ b/eigenda/eigenda.go @@ -40,12 +40,12 @@ type payload struct { } type EigenDAWriter interface { - Store(context.Context, []byte) (*EigenDABlobID, *EigenDABlobInfo, error) - Serialize(eigenDABlobID *EigenDABlobID) ([]byte, error) + Store(context.Context, []byte) (*EigenDABlobInfo, error) + Serialize(eigenDABlobInfo *EigenDABlobInfo) ([]byte, error) } type EigenDAReader interface { - QueryBlob(ctx context.Context, id *EigenDABlobInfo, domainFilter string) ([]byte, error) + QueryBlob(ctx context.Context, cert *EigenDABlobInfo, domainFilter string) ([]byte, error) } type EigenDAConfig struct { @@ -122,8 +122,8 @@ func NewEigenDA(proxyServerRpc string) (*EigenDA, error) { } // TODO: There should probably be two types of query blob as the -func (e *EigenDA) QueryBlob(ctx context.Context, id *disperser.BlobInfo, domainFilter string) ([]byte, error) { - data, err := e.client.Get(id, domainFilter) +func (e *EigenDA) QueryBlob(ctx context.Context, cert *EigenDABlobInfo, domainFilter string) ([]byte, error) { + data, err := e.client.Get(cert, domainFilter) if err != nil { return nil, err } @@ -178,7 +178,11 @@ func (b *EigenDABlobInfo) loadBlobInfo(disperserBlobInfo *disperser.BlobInfo) { b.BlobVerificationProof.InclusionProof = disperserBlobInfo.GetBlobVerificationProof().GetInclusionProof() b.BlobVerificationProof.QuorumIndices = disperserBlobInfo.GetBlobVerificationProof().GetQuorumIndexes() - //b.BlobVerificationProof.BatchMetadata.BatchHeader.BlobHeadersRoot = disperserBlobInfo.GetBlobVerificationProof().GetBatchMetadata().GetBatchHeader().GetBatchRoot() + batchRootSlice := disperserBlobInfo.GetBlobVerificationProof().GetBatchMetadata().GetBatchHeader().GetBatchRoot() + var blobHeadersRoot [32]byte + copy(blobHeadersRoot[:], batchRootSlice) + b.BlobVerificationProof.BatchMetadata.BatchHeader.BlobHeadersRoot = blobHeadersRoot + b.BlobVerificationProof.BatchMetadata.BatchHeader.QuorumNumbers = disperserBlobInfo.GetBlobVerificationProof().GetBatchMetadata().GetBatchHeader().GetQuorumNumbers() b.BlobVerificationProof.BatchMetadata.BatchHeader.SignedStakeForQuorums = disperserBlobInfo.GetBlobVerificationProof().GetBatchMetadata().GetBatchHeader().GetQuorumSignedPercentages() b.BlobVerificationProof.BatchMetadata.BatchHeader.ReferenceBlockNumber = disperserBlobInfo.GetBlobVerificationProof().GetBatchMetadata().GetBatchHeader().GetReferenceBlockNumber() diff --git a/eigenda/eigenda_proxy_client.go b/eigenda/eigenda_proxy_client.go index 74da3295a..db8fa4efd 100644 --- a/eigenda/eigenda_proxy_client.go +++ b/eigenda/eigenda_proxy_client.go @@ -52,7 +52,7 @@ func (c *EigenDAProxyClient) Put(data []byte) (*disperser.BlobInfo, error) { return blobInfo, nil } -func (c *EigenDAProxyClient) Get(blobInfo *disperser.BlobInfo, domainFilter string) ([]byte, error) { +func (c *EigenDAProxyClient) Get(blobInfo *EigenDABlobInfo, domainFilter string) ([]byte, error) { commitment, err := rlp.EncodeToBytes(blobInfo) if err != nil { return nil, fmt.Errorf("failed to encode blob info: %w", err) diff --git a/eigenda/eigenda_test.go b/eigenda/eigenda_test.go index 6dd4d8144..e31061021 100644 --- a/eigenda/eigenda_test.go +++ b/eigenda/eigenda_test.go @@ -6,7 +6,6 @@ import ( ) func TestParseSequencerMsg(t *testing.T) { - calldataString := "6b4e9387000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e000000000000000000000000000000000000000000000000000000000000004a00000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000268d000000000000000000000000000000000000000000000000000000000000023a00000000000000000000000000000000000000000000000000000000000000a00000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000038000000000000000000000000000000000000000000000000000000000000000609c2295a45e69a5369008e65fa2afc40eccb8e8be2f453998207e9b0a8d3bc72b0000000000000000000000000000000000000000000000000000000000143b152f3d0afe00f1a3eccb2a77a053c9fa850d4809913ece2f6a5dcdc9ecb5347c8b000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000143aad0000000000000000000000000000000000000000000000000000000000000002000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000024d4f000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000016086d042bea74e8fc60ce55410490d2e8bf312ff03aca9d369296d8cb25cd622096d79ebf24023971807ca680bfeac081bca250544e65147ffc0f7fdd3f3f973b885c252331c8385b767138702b5ba6155ae518fd98ebb966c5d2dfc2364ee0d49c203f38ebd01f85755bd59903ad850ea040fb94611fd554deb03c35ce43453f616866b1248350c1f1af7f3ce0f9b1beb712de850ce4e9cdfee6073fd54b8bca69011c9eca7800d59e6831f055972ae7430b8b52423cf455c2e0a3b11343890c713b16d87b5458476d589dd0f2146b14b9380f69aa8b1b546c75de4bfe925167204dd92138a76c02a4854973ed7016c6c110d41563acbc8cafefbe5d2f0ff490a83cd05a84bdfdd1542ebbbf20ca8b8968407a993919ffe5e159faf5941a95ae878a69d797b170a7a375d88b92c000c70871ae9ed5042f481743a27e97cf8665e8ebdea8f3dc226cc4c9a1cf3863ab4e60900a600fbfe5381cc0912f7aab88686000000000000000000000000000000000000000000000000000000000000000200010000000000000000000000000000000000000000000000000000000000001a78ee576b0026de661b72106bf447f5bb70881f24a3fa8b1f312992c8e165970633b392b3d3f66407d912aafcc2f0231c31918f0485e8476975edc710fcb45200000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000080000000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000021000000000000000000000000000000000000000000000000000000000000003700000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002100000000000000000000000000000000000000000000000000000000000000370000000000000000000000000000000000000000000000000000000000000001" calldata, err := hex.DecodeString(calldataString) diff --git a/staker/l1_validator.go b/staker/l1_validator.go index 567cc15ca..87fd4a669 100644 --- a/staker/l1_validator.go +++ b/staker/l1_validator.go @@ -10,7 +10,7 @@ import ( "math/big" "time" - "github.com/offchainlabs/nitro/das/eigenda" + "github.com/offchainlabs/nitro/eigenda" "github.com/offchainlabs/nitro/staker/txbuilder" "github.com/offchainlabs/nitro/util/arbmath" "github.com/offchainlabs/nitro/validator" diff --git a/staker/stateless_block_validator.go b/staker/stateless_block_validator.go index 8d49d7f75..219ee0317 100644 --- a/staker/stateless_block_validator.go +++ b/staker/stateless_block_validator.go @@ -11,7 +11,7 @@ import ( "sync" "testing" - "github.com/offchainlabs/nitro/das/eigenda" + "github.com/offchainlabs/nitro/eigenda" "github.com/offchainlabs/nitro/execution" "github.com/offchainlabs/nitro/util/rpcclient" "github.com/offchainlabs/nitro/validator/server_api" From 7c7dcf5f2ee01b5fc3e8dd26679989f7bc205105 Mon Sep 17 00:00:00 2001 From: afkbyte Date: Sun, 9 Jun 2024 17:20:49 -0400 Subject: [PATCH 07/38] brought in replay script changes --- cmd/replay/main.go | 28 +++++++++++++++------------- 1 file changed, 15 insertions(+), 13 deletions(-) diff --git a/cmd/replay/main.go b/cmd/replay/main.go index 182a594b2..66abd594d 100644 --- a/cmd/replay/main.go +++ b/cmd/replay/main.go @@ -152,16 +152,17 @@ func (r *BlobPreimageReader) Initialize(ctx context.Context) error { // struct for recovering data from preimage, impl interface EigenDAReader -func (dasReader *PreimageEigenDAReader) QueryBlob(ctx context.Context, ref *eigenda.EigenDARef) ([]byte, error) { - dataPointer, err := ref.Serialize() +func (dasReader *PreimageEigenDAReader) QueryBlob(ctx context.Context, cert *eigenda.EigenDABlobInfo) ([]byte, error) { + dataPointer, err := cert.SerializeCommitment() if err != nil { return nil, err } shaDataHash := sha256.New() shaDataHash.Write(dataPointer) dataHash := shaDataHash.Sum([]byte{}) + dataHash[0] = 1 // check function eigenda.RecoverPayloadFromEigenDABatch, the data population and data reading should be matched. - return wavmio.ResolveTypedPreimage(arbutil.Sha2_256PreimageType, common.BytesToHash(dataHash)) + return wavmio.ResolveTypedPreimage(arbutil.EigenDaPreimageType, common.BytesToHash(dataHash)) } // To generate: @@ -213,18 +214,18 @@ func main() { panic(fmt.Sprintf("Error opening state db: %v", err.Error())) } - readMessage := func(dasEnabled bool) *arbostypes.MessageWithMetadata { + readMessage := func(dasEnabled bool, eigenDAEnabled bool) *arbostypes.MessageWithMetadata { var delayedMessagesRead uint64 if lastBlockHeader != nil { delayedMessagesRead = lastBlockHeader.Nonce.Uint64() } - // due to the lack of abstraction, we have to define our own Reader here. - // once we have a way to unify the interface between DataAvailabilityReader and EigenDAReader, we should be able to retain the old struct. - // todo make it compatible with dasReader - // var dasReader arbstate.DataAvailabilityReader + var dasReader *PreimageDASReader + var eigenDAReader *PreimageEigenDAReader if dasEnabled { dasReader = &PreimageDASReader{} + } else if eigenDAEnabled { + eigenDAReader = &PreimageEigenDAReader{} } backend := WavmInbox{} var keysetValidationMode = arbstate.KeysetPanicIfInvalid @@ -232,10 +233,13 @@ func main() { keysetValidationMode = arbstate.KeysetDontValidate } var daProviders []arbstate.DataAvailabilityProvider - // TODO: add dasReader of type eigenda.EigenDAReader when it conforms to interface + if dasReader != nil { daProviders = append(daProviders, arbstate.NewDAProviderDAS(dasReader)) } + if eigenDAReader != nil { + daProviders = append(daProviders, arbstate.NewDAProviderEigenDA(eigenDAReader)) + } daProviders = append(daProviders, arbstate.NewDAProviderBlobReader(&BlobPreimageReader{})) inboxMultiplexer := arbstate.NewInboxMultiplexer(backend, delayedMessagesRead, daProviders, nil, keysetValidationMode) ctx := context.Background() @@ -289,8 +293,7 @@ func main() { } } - // message := readMessage(chainConfig.ArbitrumChainParams.DataAvailabilityCommittee) - message := readMessage(true) + message := readMessage(chainConfig.ArbitrumChainParams.DataAvailabilityCommittee, false) chainContext := WavmChainContext{} batchFetcher := func(batchNum uint64) ([]byte, error) { @@ -303,8 +306,7 @@ func main() { } else { // Initialize ArbOS with this init message and create the genesis block. - - message := readMessage(false) + message := readMessage(false, false) initMessage, err := message.Message.ParseInitMessage() if err != nil { From 0b37bb8da75b363d2f125f52e11a4b2068b1bc6c Mon Sep 17 00:00:00 2001 From: afkbyte Date: Sun, 9 Jun 2024 18:05:57 -0400 Subject: [PATCH 08/38] bring in eigenDA ref to the replay script --- cmd/replay/main.go | 2 +- go-ethereum | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/cmd/replay/main.go b/cmd/replay/main.go index 66abd594d..3430c6aeb 100644 --- a/cmd/replay/main.go +++ b/cmd/replay/main.go @@ -293,7 +293,7 @@ func main() { } } - message := readMessage(chainConfig.ArbitrumChainParams.DataAvailabilityCommittee, false) + message := readMessage(chainConfig.ArbitrumChainParams.DataAvailabilityCommittee, chainConfig.ArbitrumChainParams.EigenDA) chainContext := WavmChainContext{} batchFetcher := func(batchNum uint64) ([]byte, error) { diff --git a/go-ethereum b/go-ethereum index 22399a74e..a8c6813c8 160000 --- a/go-ethereum +++ b/go-ethereum @@ -1 +1 @@ -Subproject commit 22399a74e2b413e99a4f0d06c65862ced0d021c7 +Subproject commit a8c6813c85488a23d2c527b1e20e398323d349d0 From 48faf734c30ac6bc7110b692a55ca64eb5c8b10d Mon Sep 17 00:00:00 2001 From: afkbyte Date: Sun, 9 Jun 2024 18:10:13 -0400 Subject: [PATCH 09/38] added all changes --- .gitmodules | 2 +- cmd/replay/main.go | 4 ++-- eigenda/eigenda.go | 11 +++++++++-- 3 files changed, 12 insertions(+), 5 deletions(-) diff --git a/.gitmodules b/.gitmodules index 6c84ae9c6..3421a1624 100644 --- a/.gitmodules +++ b/.gitmodules @@ -1,6 +1,6 @@ [submodule "go-ethereum"] path = go-ethereum - url = https://github.com/OffchainLabs/go-ethereum.git + url = git@github.com:Layr-Labs/nitro-go-ethereum-private.git [submodule "fastcache"] path = fastcache url = https://github.com/OffchainLabs/fastcache.git diff --git a/cmd/replay/main.go b/cmd/replay/main.go index 3430c6aeb..afa0cfcd5 100644 --- a/cmd/replay/main.go +++ b/cmd/replay/main.go @@ -152,7 +152,7 @@ func (r *BlobPreimageReader) Initialize(ctx context.Context) error { // struct for recovering data from preimage, impl interface EigenDAReader -func (dasReader *PreimageEigenDAReader) QueryBlob(ctx context.Context, cert *eigenda.EigenDABlobInfo) ([]byte, error) { +func (dasReader *PreimageEigenDAReader) QueryBlob(ctx context.Context, cert *eigenda.EigenDABlobInfo, domain string) ([]byte, error) { dataPointer, err := cert.SerializeCommitment() if err != nil { return nil, err @@ -241,7 +241,7 @@ func main() { daProviders = append(daProviders, arbstate.NewDAProviderEigenDA(eigenDAReader)) } daProviders = append(daProviders, arbstate.NewDAProviderBlobReader(&BlobPreimageReader{})) - inboxMultiplexer := arbstate.NewInboxMultiplexer(backend, delayedMessagesRead, daProviders, nil, keysetValidationMode) + inboxMultiplexer := arbstate.NewInboxMultiplexer(backend, delayedMessagesRead, daProviders, keysetValidationMode) ctx := context.Background() message, err := inboxMultiplexer.Pop(ctx) if err != nil { diff --git a/eigenda/eigenda.go b/eigenda/eigenda.go index 6056a971a..eb1bb4594 100644 --- a/eigenda/eigenda.go +++ b/eigenda/eigenda.go @@ -147,6 +147,10 @@ func (e *EigenDA) Serialize(blobInfo *EigenDABlobInfo) ([]byte, error) { return rlp.EncodeToBytes(blobInfo) } +func (e *EigenDABlobInfo) SerializeCommitment() ([]byte, error) { + return append(e.BlobHeader.Commitment.X.Bytes(), e.BlobHeader.Commitment.Y.Bytes()...), nil +} + func (b *EigenDABlobInfo) loadBlobInfo(disperserBlobInfo *disperser.BlobInfo) { b.BlobHeader.Commitment = &G1Point{ X: new(big.Int).SetBytes(disperserBlobInfo.GetBlobHeader().GetCommitment().GetX()), @@ -219,9 +223,12 @@ func RecoverPayloadFromEigenDABatch(ctx context.Context, // record preimage data, log.Info("Recording preimage data for EigenDA") + pointer, err := blobInfo.SerializeCommitment() + if err != nil { + return nil, err + } shaDataHash := sha256.New() - shaDataHash.Write(blobInfo.BlobHeader.Commitment.X.Bytes()) - shaDataHash.Write(blobInfo.BlobHeader.Commitment.Y.Bytes()) + shaDataHash.Write(pointer) dataHash := shaDataHash.Sum([]byte{}) dataHash[0] = 1 if eigenDAPreimages != nil { From f2a8af7a0b653fe302864e17e9bceabe65affd27 Mon Sep 17 00:00:00 2001 From: afkbyte Date: Sun, 9 Jun 2024 18:19:18 -0400 Subject: [PATCH 10/38] update inbox multiplexer --- system_tests/state_fuzz_test.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/system_tests/state_fuzz_test.go b/system_tests/state_fuzz_test.go index 6e5a825f5..2c1143548 100644 --- a/system_tests/state_fuzz_test.go +++ b/system_tests/state_fuzz_test.go @@ -41,7 +41,7 @@ func BuildBlock( if lastBlockHeader != nil { delayedMessagesRead = lastBlockHeader.Nonce.Uint64() } - inboxMultiplexer := arbstate.NewInboxMultiplexer(inbox, delayedMessagesRead, nil, nil, arbstate.KeysetValidate) + inboxMultiplexer := arbstate.NewInboxMultiplexer(inbox, delayedMessagesRead, nil, arbstate.KeysetValidate) ctx := context.Background() message, err := inboxMultiplexer.Pop(ctx) From 6e8489a93a19b0de4180b92d06fa5dce927c0948 Mon Sep 17 00:00:00 2001 From: afkbyte Date: Sun, 9 Jun 2024 21:57:45 -0400 Subject: [PATCH 11/38] modify eigenda file path --- Dockerfile | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Dockerfile b/Dockerfile index faa0bd6db..408a04cb5 100644 --- a/Dockerfile +++ b/Dockerfile @@ -68,7 +68,7 @@ COPY ./blsSignatures ./blsSignatures COPY ./cmd/chaininfo ./cmd/chaininfo COPY ./cmd/replay ./cmd/replay COPY ./das/dastree ./das/dastree -COPY ./das/eigenda ./das/eigenda +COPY ./eigenda ./eigenda COPY ./precompiles ./precompiles COPY ./statetransfer ./statetransfer COPY ./util ./util From fc12d81a9dd502422a29890e0afd0cc1b07a3e2b Mon Sep 17 00:00:00 2001 From: afkbyte Date: Sun, 9 Jun 2024 22:41:25 -0400 Subject: [PATCH 12/38] add more informative logs --- arbstate/inbox.go | 1 + 1 file changed, 1 insertion(+) diff --git a/arbstate/inbox.go b/arbstate/inbox.go index 4c6947c7d..e5733ff1e 100644 --- a/arbstate/inbox.go +++ b/arbstate/inbox.go @@ -85,6 +85,7 @@ func parseSequencerMessage(ctx context.Context, batchNum uint64, batchBlockHash } payload := data[40:] log.Info("Inbox parse sequencer message: ", "payload", hex.EncodeToString(payload)) + log.Info("Inbox parse header message: ", "header", hex.EncodeToString(data[:40])) // Stage 0: Check if our node is out of date and we don't understand this batch type // If the parent chain sequencer inbox smart contract authenticated this batch, From c1f70c275a6a2abb8e923832b304b25a01313f26 Mon Sep 17 00:00:00 2001 From: afkbyte Date: Sun, 9 Jun 2024 22:45:04 -0400 Subject: [PATCH 13/38] change no EigenDA configured to a log level error, follow same pattern as DAS reader --- arbstate/inbox.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/arbstate/inbox.go b/arbstate/inbox.go index e5733ff1e..8dbad71f4 100644 --- a/arbstate/inbox.go +++ b/arbstate/inbox.go @@ -123,7 +123,7 @@ func parseSequencerMessage(ctx context.Context, batchNum uint64, batchBlockHash } else if IsBlobHashesHeaderByte(payload[0]) { return nil, ErrNoBlobReader } else if eigenda.IsEigenDAMessageHeaderByte(payload[0]) { - return nil, ErrNoEigenDAReader + log.Error(ErrNoEigenDAReader) } } } From 616d94a675feb8ea7c30e8435028110b1d4d31a9 Mon Sep 17 00:00:00 2001 From: afkbyte Date: Sun, 9 Jun 2024 22:58:28 -0400 Subject: [PATCH 14/38] change to string --- arbstate/inbox.go | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/arbstate/inbox.go b/arbstate/inbox.go index 8dbad71f4..4ba73b6a5 100644 --- a/arbstate/inbox.go +++ b/arbstate/inbox.go @@ -67,7 +67,6 @@ const MinLifetimeSecondsForDataAvailabilityCert = 7 * 24 * 60 * 60 // one week var ( ErrNoBlobReader = errors.New("blob batch payload was encountered but no BlobReader was configured") - ErrNoEigenDAReader = errors.New("eigenDA versioned batch payload was encountered but no instance of EigenDA was configured") ErrInvalidBlobDataFormat = errors.New("blob batch data is not a list of hashes as expected") ) @@ -123,7 +122,7 @@ func parseSequencerMessage(ctx context.Context, batchNum uint64, batchBlockHash } else if IsBlobHashesHeaderByte(payload[0]) { return nil, ErrNoBlobReader } else if eigenda.IsEigenDAMessageHeaderByte(payload[0]) { - log.Error(ErrNoEigenDAReader) + log.Error("eigenDA versioned batch payload was encountered but no instance of EigenDA was configured") } } } From 77922bf97a49b6a8e20adfd55607cbdc47ebb07d Mon Sep 17 00:00:00 2001 From: afkbyte Date: Sun, 9 Jun 2024 23:34:24 -0400 Subject: [PATCH 15/38] differentiate between derivation pipeline and fraud proof preimages --- arbstate/inbox.go | 3 ++- eigenda/eigenda.go | 3 ++- staker/stateless_block_validator.go | 4 +++- 3 files changed, 7 insertions(+), 3 deletions(-) diff --git a/arbstate/inbox.go b/arbstate/inbox.go index 4ba73b6a5..976eaf8d6 100644 --- a/arbstate/inbox.go +++ b/arbstate/inbox.go @@ -396,7 +396,8 @@ func (e *daProviderForEigenDA) RecoverPayloadFromBatch( keysetValidationMode KeysetValidationMode, ) ([]byte, error) { // we start from the 41st byte of sequencerMsg because bytes 0 - 40 are the header, and 40 - 41 is the eigenDA header flag - return eigenda.RecoverPayloadFromEigenDABatch(ctx, sequencerMsg[41:], e.eigenDAReader, preimages) + // we use the binary domain here because this is what we use in the derivation pipeline + return eigenda.RecoverPayloadFromEigenDABatch(ctx, sequencerMsg[41:], e.eigenDAReader, preimages, "binary") } type KeysetValidationMode uint8 diff --git a/eigenda/eigenda.go b/eigenda/eigenda.go index eb1bb4594..dd1fa3371 100644 --- a/eigenda/eigenda.go +++ b/eigenda/eigenda.go @@ -202,6 +202,7 @@ func RecoverPayloadFromEigenDABatch(ctx context.Context, sequencerMsg []byte, // this is literally the calldata of the transaction/ daReader EigenDAReader, preimages map[arbutil.PreimageType]map[common.Hash][]byte, + domain string, ) ([]byte, error) { log.Info("Start recovering payload from eigenda: ", "data", hex.EncodeToString(sequencerMsg)) var eigenDAPreimages map[common.Hash][]byte @@ -215,7 +216,7 @@ func RecoverPayloadFromEigenDABatch(ctx context.Context, blobInfo := ParseSequencerMsg(sequencerMsg) // default is binary and we want polynomial so we don't need to open 2 points cc @ethen - data, err := daReader.QueryBlob(ctx, blobInfo, "polynomial") + data, err := daReader.QueryBlob(ctx, blobInfo, domain) if err != nil { log.Error("Failed to query data from EigenDA", "err", err) return nil, err diff --git a/staker/stateless_block_validator.go b/staker/stateless_block_validator.go index 219ee0317..3c7c3c9b4 100644 --- a/staker/stateless_block_validator.go +++ b/staker/stateless_block_validator.go @@ -343,7 +343,9 @@ func (v *StatelessBlockValidator) ValidationEntryRecord(ctx context.Context, e * if v.eigenDAService == nil { log.Warn("EigenDA not configured, but sequencer message found with EigenDA header") } else { - _, err := eigenda.RecoverPayloadFromEigenDABatch(ctx, batch.Data[41:], v.eigenDAService, e.Preimages) + + // we use the polynomial domain here because this is what we use in the fraud proof pipeline + _, err := eigenda.RecoverPayloadFromEigenDABatch(ctx, batch.Data[41:], v.eigenDAService, e.Preimages, "polynomial") if err != nil { return err } From acbfdec193137761929812a1d589f762f2338e9c Mon Sep 17 00:00:00 2001 From: afkbyte Date: Mon, 10 Jun 2024 07:18:41 -0400 Subject: [PATCH 16/38] bump nitro testnode commit --- nitro-testnode | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/nitro-testnode b/nitro-testnode index 019e15bc2..119571585 160000 --- a/nitro-testnode +++ b/nitro-testnode @@ -1 +1 @@ -Subproject commit 019e15bc21d1b3d9205afedb4d193e7102836631 +Subproject commit 11957158583d1bd8c54780cb8411933db41f81ed From 98231aff4781da0e819d3e6cc01ed19f9b096b6f Mon Sep 17 00:00:00 2001 From: afkbyte Date: Mon, 10 Jun 2024 10:40:30 -0400 Subject: [PATCH 17/38] modified put and get to be synchronus and blocking --- arbnode/batch_poster.go | 5 ++-- arbnode/inbox_tracker.go | 3 ++ arbnode/node.go | 2 ++ eigenda/eigenda.go | 7 +++-- eigenda/eigenda_proxy_client.go | 52 +++++++++++++++++++++++---------- 5 files changed, 49 insertions(+), 20 deletions(-) diff --git a/arbnode/batch_poster.go b/arbnode/batch_poster.go index b5bc03f4c..f3475df00 100644 --- a/arbnode/batch_poster.go +++ b/arbnode/batch_poster.go @@ -1090,7 +1090,7 @@ func (b *BatchPoster) maybePostSequencerBatch(ctx context.Context) (bool, error) } var useEigenDA bool - if config.PostEigenDA && b.eigenDAWriter != nil { + if b.eigenDAWriter != nil { useEigenDA = true } @@ -1276,7 +1276,7 @@ func (b *BatchPoster) maybePostSequencerBatch(ctx context.Context) (bool, error) } var blobInfo *eigenda.EigenDABlobInfo - if b.daWriter == nil && b.eigenDAWriter != nil && config.PostEigenDA { + if b.daWriter == nil && b.eigenDAWriter != nil { log.Info("Start to write data to eigenda: ", "data", hex.EncodeToString(sequencerMsg)) blobInfo, err = b.eigenDAWriter.Store(ctx, sequencerMsg) if err != nil { @@ -1336,6 +1336,7 @@ func (b *BatchPoster) maybePostSequencerBatch(ctx context.Context) (bool, error) } log.Info( "BatchPoster: batch sent", + "eigenDA", b.building.useEigenDA, "sequenceNumber", batchPosition.NextSeqNum, "from", batchPosition.MessageCount, "to", b.building.msgCount, diff --git a/arbnode/inbox_tracker.go b/arbnode/inbox_tracker.go index a614ad2af..1d2027941 100644 --- a/arbnode/inbox_tracker.go +++ b/arbnode/inbox_tracker.go @@ -616,6 +616,9 @@ func (t *InboxTracker) AddSequencerBatches(ctx context.Context, client arbutil.L if t.blobReader != nil { daProviders = append(daProviders, arbstate.NewDAProviderBlobReader(t.blobReader)) } + if t.eigenDA != nil { + daProviders = append(daProviders, arbstate.NewDAProviderEigenDA(t.eigenDA)) + } multiplexer := arbstate.NewInboxMultiplexer(backend, prevbatchmeta.DelayedMessageCount, daProviders, arbstate.KeysetValidate) batchMessageCounts := make(map[uint64]arbutil.MessageIndex) diff --git a/arbnode/node.go b/arbnode/node.go index 94d1df2b9..0cd3e99a1 100644 --- a/arbnode/node.go +++ b/arbnode/node.go @@ -546,6 +546,8 @@ func createNodeImpl( eigenDAWriter = eigenDAService } + log.Info("EigenDA reader", "reader", eigenDAReader) + inboxTracker, err := NewInboxTracker(arbDb, txStreamer, daReader, blobReader, eigenDAReader) if err != nil { return nil, err diff --git a/eigenda/eigenda.go b/eigenda/eigenda.go index dd1fa3371..aee900a6c 100644 --- a/eigenda/eigenda.go +++ b/eigenda/eigenda.go @@ -123,7 +123,7 @@ func NewEigenDA(proxyServerRpc string) (*EigenDA, error) { // TODO: There should probably be two types of query blob as the func (e *EigenDA) QueryBlob(ctx context.Context, cert *EigenDABlobInfo, domainFilter string) ([]byte, error) { - data, err := e.client.Get(cert, domainFilter) + data, err := e.client.Get(ctx, cert, domainFilter) if err != nil { return nil, err } @@ -132,12 +132,15 @@ func (e *EigenDA) QueryBlob(ctx context.Context, cert *EigenDABlobInfo, domainFi } func (e *EigenDA) Store(ctx context.Context, data []byte) (*EigenDABlobInfo, error) { + log.Info("Storing blob") var blobInfo *EigenDABlobInfo - commitment, err := e.client.Put(data) + commitment, err := e.client.Put(ctx, data) if err != nil { return nil, err } + log.Info("Stored blob", "commitment", hex.EncodeToString(commitment.GetBlobHeader().GetCommitment().GetX()), "y", hex.EncodeToString(commitment.GetBlobHeader().GetCommitment().GetY())) + blobInfo.loadBlobInfo(commitment) return blobInfo, nil diff --git a/eigenda/eigenda_proxy_client.go b/eigenda/eigenda_proxy_client.go index db8fa4efd..b208f06fc 100644 --- a/eigenda/eigenda_proxy_client.go +++ b/eigenda/eigenda_proxy_client.go @@ -2,12 +2,15 @@ package eigenda import ( "bytes" + "context" + "encoding/hex" "fmt" "io/ioutil" "net/http" "net/url" "github.com/Layr-Labs/eigenda/api/grpc/disperser" + "github.com/ethereum/go-ethereum/log" "github.com/ethereum/go-ethereum/rlp" ) @@ -20,13 +23,27 @@ func NewEigenDAProxyClient(RPCUrl string) *EigenDAProxyClient { } // TODO: proper error types -func (c *EigenDAProxyClient) Put(data []byte) (*disperser.BlobInfo, error) { - var blobInfo *disperser.BlobInfo +func (c *EigenDAProxyClient) Put(ctx context.Context, data []byte) (*disperser.BlobInfo, error) { + log.Info("Putting blob EIGENDAPROXYCLIENT", "data", hex.EncodeToString(data)) - url := fmt.Sprintf("%s/put", c.RPCUrl) - resp, err := http.Post(url, "text/plain", bytes.NewBuffer([]byte(data))) + body := bytes.NewReader(data) + + log.Info("Creating HTTP POST request", "body", body) + + url := fmt.Sprintf("%s/put/", c.RPCUrl) + log.Info("Creating HTTP POST request", "url", url) + req, err := http.NewRequestWithContext(ctx, http.MethodPost, url, body) + if err != nil { + return nil, fmt.Errorf("failed to create HTTP request: %w", err) + } + req.Header.Set("Content-Type", "application/octet-stream") + + log.Info("Sending HTTP POST request", "url", url) + log.Info("Sending HTTP POST request", "body", body) + log.Info("Sending HTTP POST request", "req", req) + resp, err := http.DefaultClient.Do(req) if err != nil { - return nil, fmt.Errorf("failed to store data: %w", err) + return nil, err } defer resp.Body.Close() @@ -39,20 +56,17 @@ func (c *EigenDAProxyClient) Put(data []byte) (*disperser.BlobInfo, error) { return nil, fmt.Errorf("failed to read response: %w", err) } + var blobInfo disperser.BlobInfo cert := commitment[3:] - if err != nil { - return nil, fmt.Errorf("failed to decode commitment: %w", err) - } - - err = rlp.DecodeBytes(cert, blobInfo) + err = rlp.DecodeBytes(cert, &blobInfo) if err != nil { return nil, fmt.Errorf("failed to decode blob info: %w", err) } - return blobInfo, nil + return &blobInfo, nil } -func (c *EigenDAProxyClient) Get(blobInfo *EigenDABlobInfo, domainFilter string) ([]byte, error) { +func (c *EigenDAProxyClient) Get(ctx context.Context, blobInfo *EigenDABlobInfo, domainFilter string) ([]byte, error) { commitment, err := rlp.EncodeToBytes(blobInfo) if err != nil { return nil, fmt.Errorf("failed to encode blob info: %w", err) @@ -60,13 +74,19 @@ func (c *EigenDAProxyClient) Get(blobInfo *EigenDABlobInfo, domainFilter string) rpcurl := fmt.Sprintf("%s/get/%s", c.RPCUrl, commitment) - // if not nil put in the domain filter as a part of the query url - if domainFilter != "" { + // if not nil or binary (default) put in the domain filter as a part of the query url + if domainFilter != "" && domainFilter != "binary" { rpcurl = fmt.Sprintf("%s?domain=%s", rpcurl, url.QueryEscape(domainFilter)) } - resp, err := http.Get(rpcurl) + + req, err := http.NewRequestWithContext(ctx, http.MethodGet, rpcurl, nil) + if err != nil { + return nil, fmt.Errorf("failed to create HTTP request: %w", err) + } + + resp, err := http.DefaultClient.Do(req) if err != nil { - return nil, fmt.Errorf("failed to retrieve data: %w", err) + return nil, err } defer resp.Body.Close() From db2f388e162671176958a348f9bbd8eeace7a18c Mon Sep 17 00:00:00 2001 From: Ethen Pociask Date: Wed, 26 Jun 2024 14:29:03 -0400 Subject: [PATCH 18/38] fix(batch_poster): Fix cert decoding --- arbnode/batch_poster.go | 117 +++++++++++++++++++++++++++++++++++++++- eigenda/eigenda.go | 47 ++++++++++------ eigenda/eigenda_test.go | 33 ++++++++++++ go.mod | 9 +++- go.sum | 16 ++++-- 5 files changed, 200 insertions(+), 22 deletions(-) diff --git a/arbnode/batch_poster.go b/arbnode/batch_poster.go index f3475df00..26e4ebf4c 100644 --- a/arbnode/batch_poster.go +++ b/arbnode/batch_poster.go @@ -885,6 +885,7 @@ func (b *BatchPoster) encodeAddBatch( } if useEigenDA { methodName = sequencerBatchPostWithEigendaMethodName + println("Using eigenDA") } method, ok := b.seqInboxABI.Methods[methodName] if !ok { @@ -907,10 +908,120 @@ func (b *BatchPoster) encodeAddBatch( new(big.Int).SetUint64(uint64(newMsgNum)), ) } else if useEigenDA { + + println("Using eigenDA and packing calldata inputs") + println(fmt.Sprintf("Blob verification proof: %+v", eigenDaBlobInfo.BlobVerificationProof)) + + // dump inputs + println(fmt.Sprintf("inputs: %+v", method.Inputs)) + + println(fmt.Sprintf("inputs @ index 1: %+v", method.Inputs[1])) + + // BlobVerificationProof ABI + blobVerificationProofType, err := abi.NewType("tuple", "", []abi.ArgumentMarshaling{ + { + Name: "batchID", + Type: "uint32", + }, + { + Name: "batchIndex", + Type: "uint32", + }, + { + Name: "batchMetadata", + Type: "tuple", + Components: []abi.ArgumentMarshaling{ + { + Name: "batchHeader", + Type: "tuple", + Components: []abi.ArgumentMarshaling{ + { + Name: "blobHeadersRoot", + Type: "bytes32", + }, + { + Name: "quorumNumbers", + Type: "bytes", + }, + { + Name: "signedStakeForQuorums", + Type: "bytes", + }, + { + Name: "referenceBlockNumber", + Type: "uint32", + }, + }, + }, + { + Name: "signatoryRecordHash", + Type: "bytes32", + }, + { + Name: "confirmationBlockNumber", + Type: "uint32", + }, + }, + }, + { + Name: "inclusionProof", + Type: "bytes", + }, + { + Name: "quroumIndices", + Type: "bytes", + }, + }) + + if err != nil { + return nil, nil, err + } + + blobHeaderType, err := abi.NewType("tuple", "", []abi.ArgumentMarshaling{ + {Name: "commitment", Type: "tuple", Components: []abi.ArgumentMarshaling{ + {Name: "X", Type: "uint256"}, + {Name: "Y", Type: "uint256"}, + }}, + {Name: "dataLength", Type: "uint32"}, + {Name: "quorumBlobParams", Type: "tuple[]", Components: []abi.ArgumentMarshaling{ + {Name: "quorumNumber", Type: "uint8"}, + {Name: "adversaryThresholdPercentage", Type: "uint8"}, + {Name: "confirmationThresholdPercentage", Type: "uint8"}, + {Name: "chunkLength", Type: "uint32"}, + }}, + }) + if err != nil { + return nil, nil, err + } + + // Create ABI arguments + arguments := abi.Arguments{ + {Type: blobVerificationProofType}, + } + + // pack arguments + // Pack the BlobHeader + bvpBytes, err := arguments.Pack(eigenDaBlobInfo.BlobVerificationProof) + if err != nil { + return nil, nil, err + } + + // Create ABI arguments + arguments = abi.Arguments{ + {Type: blobHeaderType}, + } + + // pack arguments + // Pack the BlobHeader + bhBytes, err := arguments.Pack(eigenDaBlobInfo.BlobHeader) + if err != nil { + return nil, nil, err + } + calldata, err = method.Inputs.Pack( seqNum, - eigenDaBlobInfo.BlobVerificationProof, - eigenDaBlobInfo.BlobHeader, + bvpBytes, + bhBytes, new(big.Int).SetUint64(delayedMsg), b.config().gasRefunder, new(big.Int).SetUint64(uint64(prevMsgNum)), @@ -1094,6 +1205,8 @@ func (b *BatchPoster) maybePostSequencerBatch(ctx context.Context) (bool, error) useEigenDA = true } + println("use4844", use4844, "useEigenDA", useEigenDA) + b.building = &buildingBatch{ segments: newBatchSegments(batchPosition.DelayedMessageCount, b.config(), b.GetBacklogEstimate(), use4844), msgCount: batchPosition.MessageCount, diff --git a/eigenda/eigenda.go b/eigenda/eigenda.go index aee900a6c..fb5896d19 100644 --- a/eigenda/eigenda.go +++ b/eigenda/eigenda.go @@ -89,24 +89,24 @@ type QuorumBlobParams struct { } type BlobVerificationProof struct { - BatchID uint32 `json:"batchId"` - BlobIndex uint32 `json:"blobIndex"` - BatchMetadata BatchMetadata `json:"batchMetadata"` - InclusionProof []byte `json:"inclusionProof"` - QuorumIndices []byte `json:"quorumIndices"` + BatchID uint32 + BlobIndex uint32 + BatchMetadata BatchMetadata + InclusionProof []byte + QuorumIndices []byte } type BatchMetadata struct { - BatchHeader BatchHeader `json:"batchHeader"` - SignatoryRecordHash [32]byte `json:"signatoryRecordHash"` - ConfirmationBlockNumber uint32 `json:"confirmationBlockNumber"` + BatchHeader BatchHeader + SignatoryRecordHash [32]byte + ConfirmationBlockNumber uint32 } type BatchHeader struct { - BlobHeadersRoot [32]byte `json:"blobHeadersRoot"` - QuorumNumbers []byte `json:"quorumNumbers"` - SignedStakeForQuorums []byte `json:"signedStakeForQuorums"` - ReferenceBlockNumber uint32 `json:"referenceBlockNumber"` + BlobHeadersRoot [32]byte + QuorumNumbers []byte + SignedStakeForQuorums []byte + ReferenceBlockNumber uint32 } type EigenDA struct { @@ -133,7 +133,7 @@ func (e *EigenDA) QueryBlob(ctx context.Context, cert *EigenDABlobInfo, domainFi func (e *EigenDA) Store(ctx context.Context, data []byte) (*EigenDABlobInfo, error) { log.Info("Storing blob") - var blobInfo *EigenDABlobInfo + var blobInfo = &EigenDABlobInfo{} commitment, err := e.client.Put(ctx, data) if err != nil { return nil, err @@ -155,9 +155,17 @@ func (e *EigenDABlobInfo) SerializeCommitment() ([]byte, error) { } func (b *EigenDABlobInfo) loadBlobInfo(disperserBlobInfo *disperser.BlobInfo) { + // dump blob info + println("BlobInfo: ", disperserBlobInfo.String()) + + x := disperserBlobInfo.GetBlobHeader().GetCommitment().GetX() + y := disperserBlobInfo.GetBlobHeader().GetCommitment().GetY() + + b.BlobHeader = BlobHeader{} + b.BlobHeader.Commitment = &G1Point{ - X: new(big.Int).SetBytes(disperserBlobInfo.GetBlobHeader().GetCommitment().GetX()), - Y: new(big.Int).SetBytes(disperserBlobInfo.GetBlobHeader().GetCommitment().GetY()), + X: new(big.Int).SetBytes(x), + Y: new(big.Int).SetBytes(y), } b.BlobHeader.DataLength = disperserBlobInfo.GetBlobHeader().GetDataLength() @@ -171,9 +179,11 @@ func (b *EigenDABlobInfo) loadBlobInfo(disperserBlobInfo *disperser.BlobInfo) { }) } + println("Set quorum blob params") var signatoryRecordHash [32]byte copy(signatoryRecordHash[:], disperserBlobInfo.GetBlobVerificationProof().GetBatchMetadata().GetSignatoryRecordHash()) + println("Set signatory record hash") b.BlobVerificationProof.BatchID = disperserBlobInfo.GetBlobVerificationProof().GetBatchId() b.BlobVerificationProof.BlobIndex = disperserBlobInfo.GetBlobVerificationProof().GetBlobIndex() b.BlobVerificationProof.BatchMetadata = BatchMetadata{ @@ -182,9 +192,16 @@ func (b *EigenDABlobInfo) loadBlobInfo(disperserBlobInfo *disperser.BlobInfo) { ConfirmationBlockNumber: disperserBlobInfo.GetBlobVerificationProof().GetBatchMetadata().GetConfirmationBlockNumber(), } + // dump fields + println("BatchID: ", b.BlobVerificationProof.BatchID) + println("BlobIndex: ", b.BlobVerificationProof.BlobIndex) + println("ConfirmationBlockNumber: ", b.BlobVerificationProof.BatchMetadata.ConfirmationBlockNumber) + b.BlobVerificationProof.InclusionProof = disperserBlobInfo.GetBlobVerificationProof().GetInclusionProof() b.BlobVerificationProof.QuorumIndices = disperserBlobInfo.GetBlobVerificationProof().GetQuorumIndexes() + println("Set inclusion proof and quorum indices") + batchRootSlice := disperserBlobInfo.GetBlobVerificationProof().GetBatchMetadata().GetBatchHeader().GetBatchRoot() var blobHeadersRoot [32]byte copy(blobHeadersRoot[:], batchRootSlice) diff --git a/eigenda/eigenda_test.go b/eigenda/eigenda_test.go index e31061021..60122d5c4 100644 --- a/eigenda/eigenda_test.go +++ b/eigenda/eigenda_test.go @@ -1,6 +1,10 @@ package eigenda import ( + common "github.com/Layr-Labs/eigenda/api/grpc/common" + "github.com/Layr-Labs/eigenda/api/grpc/disperser" + "github.com/ethereum/go-ethereum/common/hexutil" + "encoding/hex" "testing" ) @@ -28,3 +32,32 @@ func TestParseSequencerMsg(t *testing.T) { } } + +func TestLoadBlobInfo(t *testing.T) { + x, err := hexutil.Decode("0x007e2db2683cd5ec31b62b50b9a685140076b483f1f85b931f493480cbfd9eda") + if err != nil { + t.Fatalf("error decoding hex string: %v", err) + } + + y, err := hexutil.Decode("0x10a964fcc86dbace6cedd749b878523e8bdc8ad1c04104cdbf1482d79e3367b9") + if err != nil { + t.Fatalf("error decoding hex string: %v", err) + } + + dBlobInfo := &disperser.BlobInfo{ + BlobHeader: &disperser.BlobHeader{ + Commitment: &common.G1Commitment{ + X: x, + Y: y, + }, + }, + } + + var blobInfo = &EigenDABlobInfo{} + + blobInfo.loadBlobInfo(dBlobInfo) + + if blobInfo == nil { + t.Fatalf("loadBlobInfo returned nil") + } +} diff --git a/go.mod b/go.mod index 4bca21dc6..57210ec41 100644 --- a/go.mod +++ b/go.mod @@ -12,7 +12,6 @@ replace github.com/cockroachdb/pebble => github.com/cockroachdb/pebble v0.0.0-20 require ( github.com/Knetic/govaluate v3.0.1-0.20171022003610-9aa49832a739+incompatible - github.com/Layr-Labs/eigenda v0.6.1 github.com/Layr-Labs/eigenda/api v0.6.1 github.com/Shopify/toxiproxy v2.1.4+incompatible github.com/alicebob/miniredis/v2 v2.21.0 @@ -49,7 +48,6 @@ require ( golang.org/x/sys v0.16.0 golang.org/x/term v0.16.0 golang.org/x/tools v0.15.0 - google.golang.org/grpc v1.59.0 gopkg.in/natefinch/lumberjack.v2 v2.0.0 ) @@ -83,6 +81,7 @@ require ( github.com/blang/semver/v4 v4.0.0 // indirect github.com/btcsuite/btcd/btcec/v2 v2.2.0 // indirect github.com/btcsuite/btcd/chaincfg/chainhash v1.0.2 // indirect + github.com/bytedance/sonic v1.9.2 // indirect github.com/cenkalti/backoff v2.2.1+incompatible // indirect github.com/cenkalti/backoff/v4 v4.2.1 // indirect github.com/ceramicnetwork/go-dag-jose v0.1.0 // indirect @@ -117,8 +116,10 @@ require ( github.com/gammazero/deque v0.2.1 // indirect github.com/gdamore/encoding v1.0.0 // indirect github.com/getsentry/sentry-go v0.18.0 // indirect + github.com/gin-gonic/gin v1.9.1 // indirect github.com/go-logr/logr v1.2.4 // indirect github.com/go-logr/stdr v1.2.2 // indirect + github.com/go-playground/validator/v10 v10.14.1 // indirect github.com/go-sourcemap/sourcemap v2.1.3+incompatible // indirect github.com/go-stack/stack v1.8.1 // indirect github.com/go-task/slim-sprig v0.0.0-20230315185526-52ccab3ef572 // indirect @@ -191,6 +192,7 @@ require ( github.com/jbenet/go-temp-err-catcher v0.1.0 // indirect github.com/jbenet/goprocess v0.1.4 // indirect github.com/jmespath/go-jmespath v0.4.0 // indirect + github.com/joho/godotenv v1.5.1 // indirect github.com/juju/errors v0.0.0-20181118221551-089d3ea4e4d5 // indirect github.com/klauspost/compress v1.16.4 // indirect github.com/klauspost/cpuid/v2 v2.2.5 // indirect @@ -258,6 +260,7 @@ require ( github.com/russross/blackfriday/v2 v2.1.0 // indirect github.com/samber/lo v1.36.0 // indirect github.com/spaolacci/murmur3 v1.1.0 // indirect + github.com/stretchr/testify v1.9.0 // indirect github.com/supranational/blst v0.3.11 // indirect github.com/urfave/cli/v2 v2.27.1 // indirect github.com/vmihailenco/msgpack/v5 v5.3.5 // indirect @@ -287,6 +290,7 @@ require ( go.uber.org/multierr v1.11.0 // indirect go.uber.org/zap v1.27.0 // indirect go4.org v0.0.0-20200411211856-f5505b9728dd // indirect + golang.org/x/arch v0.4.0 // indirect golang.org/x/exp v0.0.0-20231110203233-9a3e6036ecaa // indirect golang.org/x/mod v0.16.0 // indirect golang.org/x/net v0.20.0 // indirect @@ -297,6 +301,7 @@ require ( google.golang.org/genproto v0.0.0-20231016165738-49dd2c1f3d0b // indirect google.golang.org/genproto/googleapis/api v0.0.0-20231012201019-e917dd12ba7a // indirect google.golang.org/genproto/googleapis/rpc v0.0.0-20231030173426-d783a09b4405 // indirect + google.golang.org/grpc v1.59.0 // indirect google.golang.org/protobuf v1.33.0 // indirect gopkg.in/square/go-jose.v2 v2.5.1 // indirect lukechampine.com/blake3 v1.1.7 // indirect diff --git a/go.sum b/go.sum index 7bbb99787..5acb27b81 100644 --- a/go.sum +++ b/go.sum @@ -55,8 +55,6 @@ github.com/Joker/hpp v1.0.0/go.mod h1:8x5n+M1Hp5hC0g8okX3sR3vFQwynaX/UgSOM9MeBKz github.com/Knetic/govaluate v3.0.1-0.20171022003610-9aa49832a739+incompatible h1:1G1pk05UrOh0NlF1oeaaix1x8XzrfjIDK47TY0Zehcw= github.com/Knetic/govaluate v3.0.1-0.20171022003610-9aa49832a739+incompatible/go.mod h1:r7JcOSlj0wfOMncg0iLm8Leh48TZaKVeNIfJntJ2wa0= github.com/Kubuxu/go-os-helper v0.0.1/go.mod h1:N8B+I7vPCT80IcP58r50u4+gEEcsZETFUpAzWW2ep1Y= -github.com/Layr-Labs/eigenda v0.6.1 h1:uU04t+dsR5oHsbr+A5XIeJdyZIfNW3YvG03dMTKLSK4= -github.com/Layr-Labs/eigenda v0.6.1/go.mod h1:XongI0xM6ks66DzxvTpF2yi4x2QH0X2RgEbKl/WFebY= github.com/Layr-Labs/eigenda/api v0.6.1 h1:TAstOttTmFZQoFlZtgu/rNktNOhx62TwRFMxGOhUx8M= github.com/Layr-Labs/eigenda/api v0.6.1/go.mod h1:kVXqWM13s/1hXyv9QdHweWAbKin9MeOBbS4i8c9rLbU= github.com/Microsoft/go-winio v0.6.1 h1:9/kr64B9VUZrLm5YYwbGtUJnMgqWVOdUAXu6Migciow= @@ -191,7 +189,9 @@ github.com/btcsuite/snappy-go v1.0.0/go.mod h1:8woku9dyThutzjeg+3xrA5iCpBRH8XEEg github.com/btcsuite/websocket v0.0.0-20150119174127-31079b680792/go.mod h1:ghJtEyQwv5/p4Mg4C0fgbePVuGr935/5ddU9Z3TmDRY= github.com/btcsuite/winsvc v1.0.0/go.mod h1:jsenWakMcC0zFBFurPLEAyrnc/teJEM1O46fmI40EZs= github.com/buger/jsonparser v0.0.0-20181115193947-bf1c66bbce23/go.mod h1:bbYlZJ7hK1yFx9hf58LP0zeX7UjIGs20ufpu3evjr+s= +github.com/bytedance/sonic v1.5.0/go.mod h1:ED5hyg4y6t3/9Ku1R6dU/4KyJ48DZ4jPhfY1O2AihPM= github.com/bytedance/sonic v1.9.2 h1:GDaNjuWSGu09guE9Oql0MSTNhNCLlWwO8y/xM5BzcbM= +github.com/bytedance/sonic v1.9.2/go.mod h1:i736AoUSYt75HyZLoJW9ERYxcy6eaN6h4BZXU064P/U= github.com/casbin/casbin/v2 v2.1.2/go.mod h1:YcPU1XXisHhLzuxH9coDNf2FbKpjGlbCg3n9yuLkIJQ= github.com/cavaliergopher/grab/v3 v3.0.1 h1:4z7TkBfmPjmLAAmkkAZNX/6QJ1nNFdv3SdIHXju0Fr4= github.com/cavaliergopher/grab/v3 v3.0.1/go.mod h1:1U/KNnD+Ft6JJiYoYBAimKH2XrYptb8Kl3DFGmsjpq4= @@ -210,7 +210,9 @@ github.com/cespare/xxhash/v2 v2.1.2/go.mod h1:VGX0DQ3Q6kWi7AoAeZDth3/j3BFtOZR5XL github.com/cespare/xxhash/v2 v2.2.0 h1:DC2CZ1Ep5Y4k3ZQ899DldepgrayRUGE6BBZ/cd9Cj44= github.com/cespare/xxhash/v2 v2.2.0/go.mod h1:VGX0DQ3Q6kWi7AoAeZDth3/j3BFtOZR5XLFGgcrjCOs= github.com/cheekybits/genny v1.0.0/go.mod h1:+tQajlRqAUrPI7DOSpB0XAqZYtQakVtB7wXkRAgjxjQ= +github.com/chenzhuoyu/base64x v0.0.0-20211019084208-fb5309c8db06/go.mod h1:DH46F32mSOjUmXrMHnKwZdA8wcEefY7UVqBKYGjpdQY= github.com/chenzhuoyu/base64x v0.0.0-20221115062448-fe3a3abad311 h1:qSGYFH7+jGhDF8vLC+iwCD4WpbV1EBDSzWkJODFLams= +github.com/chenzhuoyu/base64x v0.0.0-20221115062448-fe3a3abad311/go.mod h1:b583jCggY9gE99b6G5LEC39OIiVsWj+R97kbl5odCEk= github.com/chzyer/logex v1.1.10/go.mod h1:+Ywpsq7O8HXn0nuIou7OrIPyXbp3wmkHB+jjWRnGsAI= github.com/chzyer/logex v1.2.0/go.mod h1:9+9sk7u7pGNWYMkh0hdiL++6OeibzJccyQU4p4MedaY= github.com/chzyer/readline v0.0.0-20180603132655-2972be24d48e/go.mod h1:nSuG5e5PlCu98SY8svDHJxuZscDgtXS6KTTbou5AhLI= @@ -392,6 +394,7 @@ github.com/gin-contrib/sse v0.1.0/go.mod h1:RHrZQHXnP2xjPF+u1gW/2HnVO7nvIa9PG3Gm github.com/gin-gonic/gin v1.4.0/go.mod h1:OW2EZn3DO8Ln9oIKOvM++LBO+5UPHJJDH72/q/3rZdM= github.com/gin-gonic/gin v1.6.3/go.mod h1:75u5sXoLsGZoRN5Sgbi1eraJ4GU3++wFwWzhwvtwp4M= github.com/gin-gonic/gin v1.9.1 h1:4idEAncQnU5cB7BeOkPtxjfCSye0AAm1R0RVIqJ+Jmg= +github.com/gin-gonic/gin v1.9.1/go.mod h1:hPrL7YrpYKXt5YId3A/Tnip5kqbEAP+KLuI3SUcPTeU= github.com/gliderlabs/ssh v0.1.1/go.mod h1:U7qILu1NlMHj9FlMhZLlkCdDnU1DBEAqr0aevW3Awn0= github.com/go-check/check v0.0.0-20180628173108-788fd7840127/go.mod h1:9ES+weclKsC9YodN5RgxqK/VD9HM9JsCSh7rNhMZE98= github.com/go-errors/errors v1.0.1/go.mod h1:f4zRHt4oKfwPJE5k8C9vpYG+aDHdBFUsgrm6/TyX73Q= @@ -423,6 +426,7 @@ github.com/go-playground/universal-translator v0.17.0/go.mod h1:UkSxE5sNxxRwHyU+ github.com/go-playground/universal-translator v0.18.1 h1:Bcnm0ZwsGyWbCzImXv+pAJnYK9S473LQFuzCbDbfSFY= github.com/go-playground/validator/v10 v10.2.0/go.mod h1:uOYAAleCW8F/7oMFd6aG0GOhaH6EGOAJShg8Id5JGkI= github.com/go-playground/validator/v10 v10.14.1 h1:9c50NUPC30zyuKprjL3vNZ0m5oG+jU0zvx4AqHGnv4k= +github.com/go-playground/validator/v10 v10.14.1/go.mod h1:9iXMNT7sEkjXb0I+enO7QXmzG6QCsPWY4zveKFVRSyU= github.com/go-redis/redis/v8 v8.11.4 h1:kHoYkfZP6+pe04aFTnhDH6GDROa5yJdHJVNxV3F46Tg= github.com/go-redis/redis/v8 v8.11.4/go.mod h1:2Z2wHZXdQpCDXEGzqMockDpNyYvi2l4Pxt6RJr792+w= github.com/go-sourcemap/sourcemap v2.1.3+incompatible h1:W1iEw64niKVGogNgBN3ePyLFfuisuzeidWPMPWmECqU= @@ -894,6 +898,7 @@ github.com/jmespath/go-jmespath/internal/testify v1.5.1 h1:shLQSRRSCCPj3f2gpwzGw github.com/jmespath/go-jmespath/internal/testify v1.5.1/go.mod h1:L3OGu8Wl2/fWfCI6z80xFu9LTZmf1ZRjMHUOPmWr69U= github.com/joho/godotenv v1.3.0/go.mod h1:7hK45KPybAkOC6peb+G5yklZfMxEjkZhHbwpqxOKXbg= github.com/joho/godotenv v1.5.1 h1:7eLL/+HRGLY0ldzfGMeQkb7vMd0as4CfYvUVzLqw0N0= +github.com/joho/godotenv v1.5.1/go.mod h1:f4LDr5Voq0i2e/R5DDNOoa2zzDfwtkZa6DnEwAbqwq4= github.com/jonboulle/clockwork v0.1.0/go.mod h1:Ii8DK3G1RaLaWxj9trq07+26W01tbo22gdxWY5EU2bo= github.com/jpillora/backoff v1.0.0/go.mod h1:J/6gKK9jxlEcS3zixgDgUAsiuZ7yrSoa/FX5e0EB2j4= github.com/jrick/logrotate v1.0.0/go.mod h1:LNinyqDIJnpAur+b8yyulnQw/wDuN1+BYKlTRt3OuAQ= @@ -1602,6 +1607,7 @@ github.com/stretchr/testify v1.7.1/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/ github.com/stretchr/testify v1.8.0/go.mod h1:yNjHg4UonilssWZ8iaSj1OCr/vHnekPRkoO+kdMU+MU= github.com/stretchr/testify v1.8.1/go.mod h1:w2LPCIKwWwSfY2zedu0+kehJoqGctiVI29o6fzry7u4= github.com/stretchr/testify v1.9.0 h1:HtqpIVDClZ4nwg75+f6Lvsy/wHu+3BoSGCbBAcpTsTg= +github.com/stretchr/testify v1.9.0/go.mod h1:r2ic/lqez/lEtzL7wO/rwa5dbSLXVDPFyf8C91i36aY= github.com/supranational/blst v0.3.11 h1:LyU6FolezeWAhvQk0k6O/d49jqgO52MSDDfYgbeoEm4= github.com/supranational/blst v0.3.11/go.mod h1:jZJtfjgudtNl4en1tzwPIV3KjUnQUvG3/j+w+fVonLw= github.com/syndtr/goleveldb v1.0.0/go.mod h1:ZVVdQEZoIme9iO1Ch2Jdy24qqXrMMOU6lpPAyBWyWuQ= @@ -1617,6 +1623,7 @@ github.com/tmc/grpc-websocket-proxy v0.0.0-20170815181823-89b8d40f7ca8/go.mod h1 github.com/tv42/httpunix v0.0.0-20191220191345-2ba4b9c3382c h1:u6SKchux2yDvFQnDHS3lPnIRmfVJ5Sxy3ao2SIdysLQ= github.com/tv42/httpunix v0.0.0-20191220191345-2ba4b9c3382c/go.mod h1:hzIxponao9Kjc7aWznkXaL4U4TWaDSs8zcsY4Ka08nM= github.com/twitchyliquid64/golang-asm v0.15.1 h1:SU5vSMR7hnwNxj24w34ZyCi/FmDZTkS4MhqMhdFk5YI= +github.com/twitchyliquid64/golang-asm v0.15.1/go.mod h1:a1lVb/DtPvCB8fslRZhAngC2+aY1QWCk3Cedj/Gdt08= github.com/tyler-smith/go-bip39 v1.1.0 h1:5eUemwrMargf3BSLRRCalXT93Ns6pQJIjYQN2nyfOP8= github.com/tyler-smith/go-bip39 v1.1.0/go.mod h1:gUYDtqQw1JS3ZJ8UWVcGTGqqr6YIN3CWg+kkNaLt55U= github.com/ugorji/go v1.1.4/go.mod h1:uQMGLiO92mf5W77hV/PUCpI3pbzQx3CRekS0kk+RGrc= @@ -1766,7 +1773,9 @@ go.uber.org/zap v1.27.0/go.mod h1:GB2qFLM7cTU87MWRP2mPIjqfIDnGu+VIO4V/SdhGo2E= go4.org v0.0.0-20180809161055-417644f6feb5/go.mod h1:MkTOUMDaeVYJUOUsaDXIhWPZYa1yOyC1qaOBpL57BhE= go4.org v0.0.0-20200411211856-f5505b9728dd h1:BNJlw5kRTzdmyfh5U8F93HA2OwkP7ZGwA51eJ/0wKOU= go4.org v0.0.0-20200411211856-f5505b9728dd/go.mod h1:CIiUVy99QCPfoE13bO4EZaz5GZMZXMSBGhxRdsvzbkg= +golang.org/x/arch v0.0.0-20210923205945-b76863e36670/go.mod h1:5om86z9Hs0C8fWVUuoMHwpExlXzs5Tkyp9hOrfG7pp8= golang.org/x/arch v0.4.0 h1:A8WCeEWhLwPBKNbFi5Wv5UTCBx5zzubnXDlMOFAzFMc= +golang.org/x/arch v0.4.0/go.mod h1:5om86z9Hs0C8fWVUuoMHwpExlXzs5Tkyp9hOrfG7pp8= golang.org/x/build v0.0.0-20190111050920-041ab4dc3f9d/go.mod h1:OWs+y06UdEOHN4y+MfF/py+xQ/tYqIWW03b70/CG9Rw= golang.org/x/crypto v0.0.0-20170930174604-9419663f5a44/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4= golang.org/x/crypto v0.0.0-20180214000028-650f4a345ab4/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4= @@ -2306,6 +2315,7 @@ nhooyr.io/websocket v1.8.7/go.mod h1:B70DZP8IakI65RVQ51MsWP/8jndNma26DVA/nFSCgW0 pgregory.net/rapid v0.4.7 h1:MTNRktPuv5FNqOO151TM9mDTa+XHcX6ypYeISDVD14g= pgregory.net/rapid v0.4.7/go.mod h1:UYpPVyjFHzYBGHIxLFoupi8vwk6rXNzRY9OMvVxFIOU= rsc.io/binaryregexp v0.2.0/go.mod h1:qTv7/COck+e2FymRvadv62gMdZztPaShugOCi3I+8D8= +rsc.io/pdf v0.1.1/go.mod h1:n8OzWcQ6Sp37PL01nO98y4iUCRdTGarVfzxY20ICaU4= rsc.io/quote/v3 v3.1.0/go.mod h1:yEA65RcK8LyAZtP9Kv3t0HmxON59tX3rD+tICJqUlj0= rsc.io/sampler v1.3.0/go.mod h1:T1hPZKmBbMNahiBKFy5HrXp6adAjACjK9JXDnKaTXpA= rsc.io/tmplfunc v0.0.3 h1:53XFQh69AfOa8Tw0Jm7t+GV7KZhOi6jzsCzTtKbMvzU= @@ -2313,4 +2323,4 @@ rsc.io/tmplfunc v0.0.3/go.mod h1:AG3sTPzElb1Io3Yg4voV9AGZJuleGAwaVRxL9M49PhA= sigs.k8s.io/yaml v1.1.0/go.mod h1:UJmg0vDUVViEyp3mgSv9WPwZCDxu4rQW1olrI1uml+o= sourcegraph.com/sourcegraph/appdash v0.0.0-20190731080439-ebfcffb1b5c0/go.mod h1:hI742Nqp5OhwiqlzhgfbWU4mW4yO10fP+LoT9WOswdU= sourcegraph.com/sourcegraph/go-diff v0.5.0/go.mod h1:kuch7UrkMzY0X+p9CRK03kfuPQ2zzQcaEFbx8wA8rck= -sourcegraph.com/sqs/pbtypes v0.0.0-20180604144634-d3ebe8f20ae4/go.mod h1:ketZ/q3QxT9HOBeFhu6RdvsftgpsbFHBF5Cas6cDKZ0= \ No newline at end of file +sourcegraph.com/sqs/pbtypes v0.0.0-20180604144634-d3ebe8f20ae4/go.mod h1:ketZ/q3QxT9HOBeFhu6RdvsftgpsbFHBF5Cas6cDKZ0= From e7adb6877bfe8fc737c560fe7384c729ac8ce170 Mon Sep 17 00:00:00 2001 From: Ethen Pociask Date: Fri, 28 Jun 2024 13:40:07 -0400 Subject: [PATCH 19/38] fix(batch_poster): Fix cert decoding - update contracts and sequencer decoding --- arbnode/batch_poster.go | 149 +++++++++++++++++----------- deploy/deploy.go | 15 ++- eigenda/eigenda.go | 37 +++---- staker/stateless_block_validator.go | 1 + validator/server_jit/spawner.go | 1 + 5 files changed, 125 insertions(+), 78 deletions(-) diff --git a/arbnode/batch_poster.go b/arbnode/batch_poster.go index 26e4ebf4c..067341062 100644 --- a/arbnode/batch_poster.go +++ b/arbnode/batch_poster.go @@ -885,7 +885,6 @@ func (b *BatchPoster) encodeAddBatch( } if useEigenDA { methodName = sequencerBatchPostWithEigendaMethodName - println("Using eigenDA") } method, ok := b.seqInboxABI.Methods[methodName] if !ok { @@ -918,49 +917,67 @@ func (b *BatchPoster) encodeAddBatch( println(fmt.Sprintf("inputs @ index 1: %+v", method.Inputs[1])) // BlobVerificationProof ABI + /* + + "components": [ + {"name": "batchId", "type": "uint32"}, + {"name": "blobIndex", "type": "uint32"}, + {"components": [ + {"components": [ + {"name": "blobHeadersRoot", "type": "bytes32"}, + {"name": "quorumNumbers", "type": "bytes"}, + {"name": "signedStakeForQuorums", "type": "bytes"}, + {"name": "referenceBlockNumber", "type": "uint32"} + ], "name": "batchHeader", "type": "tuple"}, + {"name": "signatoryRecordHash", "type": "bytes32"}, + {"name": "confirmationBlockNumber", "type": "uint32"} + ], "name": "batchMetadata", "type": "tuple"}, + {"name": "inclusionProof", "type": "bytes"}, + {"name": "quorumIndices", "type": "bytes"} + ], + "name": "BlobVerificationProof", + "type": "tuple" + }] + */ + + /* + type BlobVerificationProof struct { + BatchID uint32 `json:"batchId"` + BlobIndex uint32 `json:"blobIndex"` + BatchMetadata BatchMetadata `json:"batchMetadata"` + InclusionProof []byte `json:"inclusionProof"` + QuorumIndices []byte `json:"quorumIndices"` + } + + type BatchMetadata struct { + BatchHeader BatchHeader `json:"batchHeader"` + SignatoryRecordHash [32]byte `json:"signatoryRecordHash"` + ConfirmationBlockNumber uint32 `json:"confirmationBlockNumber"` + } + + type BatchHeader struct { + BlobHeadersRoot [32]byte `json:"blobHeadersRoot"` + QuorumNumbers []byte `json:"quorumNumbers"` + SignedStakeForQuorums []byte `json:"signedStakeForQuorums"` + ReferenceBlockNumber uint32 `json:"referenceBlockNumber"` + } + + */ blobVerificationProofType, err := abi.NewType("tuple", "", []abi.ArgumentMarshaling{ - { - Name: "batchID", - Type: "uint32", - }, - { - Name: "batchIndex", - Type: "uint32", - }, - { - Name: "batchMetadata", - Type: "tuple", + {Name: "batchID", Type: "uint32"}, + {Name: "blobIndex", Type: "uint32"}, + {Name: "batchMetadata", Type: "tuple", Components: []abi.ArgumentMarshaling{ - { - Name: "batchHeader", - Type: "tuple", + {Name: "batchHeader", Type: "tuple", Components: []abi.ArgumentMarshaling{ - { - Name: "blobHeadersRoot", - Type: "bytes32", - }, - { - Name: "quorumNumbers", - Type: "bytes", - }, - { - Name: "signedStakeForQuorums", - Type: "bytes", - }, - { - Name: "referenceBlockNumber", - Type: "uint32", - }, + {Name: "blobHeadersRoot", Type: "bytes32"}, + {Name: "quorumNumbers", Type: "bytes"}, + {Name: "signedStakeForQuorums", Type: "bytes"}, + {Name: "referenceBlockNumber", Type: "uint32"}, }, }, - { - Name: "signatoryRecordHash", - Type: "bytes32", - }, - { - Name: "confirmationBlockNumber", - Type: "uint32", - }, + {Name: "signatoryRecordHash", Type: "bytes32"}, + {Name: "confirmationBlockNumber", Type: "uint32"}, }, }, { @@ -968,11 +985,12 @@ func (b *BatchPoster) encodeAddBatch( Type: "bytes", }, { - Name: "quroumIndices", + Name: "quorumIndices", Type: "bytes", }, }) + println(fmt.Sprintf("blobVerificationProofType: %+v", blobVerificationProofType)) if err != nil { return nil, nil, err } @@ -994,39 +1012,51 @@ func (b *BatchPoster) encodeAddBatch( return nil, nil, err } - // Create ABI arguments - arguments := abi.Arguments{ - {Type: blobVerificationProofType}, - } - - // pack arguments - // Pack the BlobHeader - bvpBytes, err := arguments.Pack(eigenDaBlobInfo.BlobVerificationProof) + u256Type, err := abi.NewType("uint256", "", nil) if err != nil { return nil, nil, err } // Create ABI arguments - arguments = abi.Arguments{ + arguments := abi.Arguments{ + {Type: u256Type}, + {Type: blobVerificationProofType}, {Type: blobHeaderType}, + {Type: u256Type}, + {Type: u256Type}, + {Type: u256Type}, } + println("Sequence number ", seqNum.String()) + // define values array + values := make([]interface{}, 6) + values[0] = seqNum + values[1] = eigenDaBlobInfo.BlobVerificationProof + values[2] = eigenDaBlobInfo.BlobHeader + values[3] = new(big.Int).SetUint64(delayedMsg) + values[4] = new(big.Int).SetUint64(uint64(prevMsgNum)) + values[5] = new(big.Int).SetUint64(uint64(newMsgNum)) + // pack arguments // Pack the BlobHeader - bhBytes, err := arguments.Pack(eigenDaBlobInfo.BlobHeader) + calldata, err = arguments.PackValues(values) + if err != nil { return nil, nil, err } - calldata, err = method.Inputs.Pack( - seqNum, - bvpBytes, - bhBytes, - new(big.Int).SetUint64(delayedMsg), - b.config().gasRefunder, - new(big.Int).SetUint64(uint64(prevMsgNum)), - new(big.Int).SetUint64(uint64(newMsgNum)), - ) + // data := make([]byte, 0) + + // calldata, err = method.Inputs.Pack( + // seqNum, + // bvpBytes, + // bhBytes, + // new(big.Int).SetUint64(delayedMsg), + // new(big.Int).SetUint64(uint64(prevMsgNum)), + // new(big.Int).SetUint64(uint64(newMsgNum)), + // ) + println(fmt.Sprintf("calldata: %s", hexutil.Encode(calldata))) + println(fmt.Sprintf("err: %e", err)) } else { calldata, err = method.Inputs.Pack( @@ -1043,6 +1073,7 @@ func (b *BatchPoster) encodeAddBatch( } fullCalldata := append([]byte{}, method.ID...) fullCalldata = append(fullCalldata, calldata...) + println("Full calldata: %s", hexutil.Encode(fullCalldata)) return fullCalldata, kzgBlobs, nil } diff --git a/deploy/deploy.go b/deploy/deploy.go index 33d64d161..cd1e83e5b 100644 --- a/deploy/deploy.go +++ b/deploy/deploy.go @@ -41,23 +41,34 @@ func deployBridgeCreator(ctx context.Context, l1Reader *headerreader.HeaderReade return common.Address{}, fmt.Errorf("bridge deploy error: %w", err) } - dummyManager, tx, _, err := bridgegen.DeployEigenDADummyManager(auth, client) + dummyRollupManager, tx, _, err := bridgegen.DeployEigenDADummyManager(auth, client) err = andTxSucceeded(ctx, l1Reader, tx, err) if err != nil { return common.Address{}, fmt.Errorf("dummy manager deploy error: %w", err) } + println("Dummy manager deployed at ", dummyRollupManager.String()) + + dummySvcManager, tx, _, err := bridgegen.DeployDummyServiceManager(auth, client) + err = andTxSucceeded(ctx, l1Reader, tx, err) + if err != nil { + return common.Address{}, fmt.Errorf("dummy svc manager deploy error: %w", err) + } + + println("Dummy service manager deployed at ", dummySvcManager.String()) reader4844, tx, _, err := yulgen.DeployReader4844(auth, client) err = andTxSucceeded(ctx, l1Reader, tx, err) if err != nil { return common.Address{}, fmt.Errorf("blob basefee reader deploy error: %w", err) } - seqInboxTemplate, tx, _, err := bridgegen.DeploySequencerInbox(auth, client, maxDataSize, reader4844, dummyManager, dummyManager, isUsingFeeToken) + seqInboxTemplate, tx, _, err := bridgegen.DeploySequencerInbox(auth, client, maxDataSize, reader4844, dummySvcManager, dummyRollupManager, isUsingFeeToken) err = andTxSucceeded(ctx, l1Reader, tx, err) if err != nil { return common.Address{}, fmt.Errorf("sequencer inbox deploy error: %w", err) } + println("Sequencer inbox deployed at ", seqInboxTemplate.String()) + inboxTemplate, tx, _, err := bridgegen.DeployInbox(auth, client, maxDataSize) err = andTxSucceeded(ctx, l1Reader, tx, err) if err != nil { diff --git a/eigenda/eigenda.go b/eigenda/eigenda.go index fb5896d19..19308801a 100644 --- a/eigenda/eigenda.go +++ b/eigenda/eigenda.go @@ -73,7 +73,7 @@ type EigenDABlobInfo struct { type BlobHeader struct { Commitment *G1Point DataLength uint32 - QuorumBlobParams []*QuorumBlobParams + QuorumBlobParams []QuorumBlobParams } type G1Point struct { @@ -88,25 +88,28 @@ type QuorumBlobParams struct { ChunkLength uint32 } +// (uint32,uint32,((bytes32,bytes,bytes,uint32),bytes32,uint32),bytes,bytes) +// +// x x x x x x x x x x type BlobVerificationProof struct { - BatchID uint32 - BlobIndex uint32 - BatchMetadata BatchMetadata - InclusionProof []byte - QuorumIndices []byte + BatchID uint32 `json:"batchId"` // uint32 + BlobIndex uint32 `json:"blobIndex"` // uint32 + BatchMetadata BatchMetadata `json:"batchMetadata"` // nest + InclusionProof []byte `json:"inclusionProof"` // bytes + QuorumIndices []byte `json:"quorumIndices"` // bytes } type BatchMetadata struct { - BatchHeader BatchHeader - SignatoryRecordHash [32]byte - ConfirmationBlockNumber uint32 + BatchHeader BatchHeader `json:"batchHeader"` + SignatoryRecordHash [32]byte `json:"signatoryRecordHash"` // bytes32 + ConfirmationBlockNumber uint32 `json:"confirmationBlockNumber"` // uint32 } type BatchHeader struct { - BlobHeadersRoot [32]byte - QuorumNumbers []byte - SignedStakeForQuorums []byte - ReferenceBlockNumber uint32 + BlobHeadersRoot [32]byte `json:"blobHeadersRoot"` + QuorumNumbers []byte `json:"quorumNumbers"` + SignedStakeForQuorums []byte `json:"signedStakeForQuorums"` + ReferenceBlockNumber uint32 `json:"referenceBlockNumber"` } type EigenDA struct { @@ -171,7 +174,7 @@ func (b *EigenDABlobInfo) loadBlobInfo(disperserBlobInfo *disperser.BlobInfo) { b.BlobHeader.DataLength = disperserBlobInfo.GetBlobHeader().GetDataLength() for _, quorumBlobParam := range disperserBlobInfo.GetBlobHeader().GetBlobQuorumParams() { - b.BlobHeader.QuorumBlobParams = append(b.BlobHeader.QuorumBlobParams, &QuorumBlobParams{ + b.BlobHeader.QuorumBlobParams = append(b.BlobHeader.QuorumBlobParams, QuorumBlobParams{ QuorumNumber: uint8(quorumBlobParam.QuorumNumber), AdversaryThresholdPercentage: uint8(quorumBlobParam.AdversaryThresholdPercentage), ConfirmationThresholdPercentage: uint8(quorumBlobParam.ConfirmationThresholdPercentage), @@ -342,10 +345,10 @@ func convertToPayload(pa []interface{}) (payload, error) { BlobHeader: &BlobHeader{ Commitment: &G1Point{}, DataLength: blobHeader.DataLength, - QuorumBlobParams: func() []*QuorumBlobParams { - params := make([]*QuorumBlobParams, len(blobHeader.QuorumBlobParams)) + QuorumBlobParams: func() []QuorumBlobParams { + params := make([]QuorumBlobParams, len(blobHeader.QuorumBlobParams)) for i, p := range blobHeader.QuorumBlobParams { - params[i] = &QuorumBlobParams{ + params[i] = QuorumBlobParams{ QuorumNumber: p.QuorumNumber, AdversaryThresholdPercentage: p.AdversaryThresholdPercentage, ConfirmationThresholdPercentage: p.ConfirmationThresholdPercentage, diff --git a/staker/stateless_block_validator.go b/staker/stateless_block_validator.go index 3c7c3c9b4..01084260a 100644 --- a/staker/stateless_block_validator.go +++ b/staker/stateless_block_validator.go @@ -344,6 +344,7 @@ func (v *StatelessBlockValidator) ValidationEntryRecord(ctx context.Context, e * log.Warn("EigenDA not configured, but sequencer message found with EigenDA header") } else { + println("RecoverPayloadFromEigenDABatch .... recovering payload for EigenDA batch") // we use the polynomial domain here because this is what we use in the fraud proof pipeline _, err := eigenda.RecoverPayloadFromEigenDABatch(ctx, batch.Data[41:], v.eigenDAService, e.Preimages, "polynomial") if err != nil { diff --git a/validator/server_jit/spawner.go b/validator/server_jit/spawner.go index 6489821b5..eae16a95b 100644 --- a/validator/server_jit/spawner.go +++ b/validator/server_jit/spawner.go @@ -75,6 +75,7 @@ func (v *JitSpawner) execute( return validator.GoGlobalState{}, fmt.Errorf("unabled to get WASM machine: %w", err) } + println("Proving execution from JIT spawner in validation server") state, err := machine.prove(ctx, entry) return state, err } From 2d3f0673120ca927e51ae42dcbf2bf1431e341d5 Mon Sep 17 00:00:00 2001 From: Ethen Pociask Date: Mon, 1 Jul 2024 12:47:37 -0400 Subject: [PATCH 20/38] fix(batch_poster): Fix cert decoding - fix sequencer inbox posting and decoding for cert --- arbnode/batch_poster.go | 70 - arbnode/dataposter/data_poster.go | 2 + arbnode/sequencer_inbox.go | 25 + arbstate/inbox.go | 7 + contracts | 2 +- eigenda/eigenda.go | 164 +- eigenda/eigenda_proxy_client.go | 13 +- eigenda/eigenda_test.go | 63 - go.sum | 28 + opcodes.txt | 9478 +++++++++++++++++++++++++++++ out.txt | 9414 ++++++++++++++++++++++++++++ staker/l1_validator.go | 1 + staker/staker.go | 1 + yarn.lock | 4 + 14 files changed, 19124 insertions(+), 148 deletions(-) delete mode 100644 eigenda/eigenda_test.go create mode 100644 opcodes.txt create mode 100644 out.txt create mode 100644 yarn.lock diff --git a/arbnode/batch_poster.go b/arbnode/batch_poster.go index 067341062..971f3090a 100644 --- a/arbnode/batch_poster.go +++ b/arbnode/batch_poster.go @@ -908,61 +908,6 @@ func (b *BatchPoster) encodeAddBatch( ) } else if useEigenDA { - println("Using eigenDA and packing calldata inputs") - println(fmt.Sprintf("Blob verification proof: %+v", eigenDaBlobInfo.BlobVerificationProof)) - - // dump inputs - println(fmt.Sprintf("inputs: %+v", method.Inputs)) - - println(fmt.Sprintf("inputs @ index 1: %+v", method.Inputs[1])) - - // BlobVerificationProof ABI - /* - - "components": [ - {"name": "batchId", "type": "uint32"}, - {"name": "blobIndex", "type": "uint32"}, - {"components": [ - {"components": [ - {"name": "blobHeadersRoot", "type": "bytes32"}, - {"name": "quorumNumbers", "type": "bytes"}, - {"name": "signedStakeForQuorums", "type": "bytes"}, - {"name": "referenceBlockNumber", "type": "uint32"} - ], "name": "batchHeader", "type": "tuple"}, - {"name": "signatoryRecordHash", "type": "bytes32"}, - {"name": "confirmationBlockNumber", "type": "uint32"} - ], "name": "batchMetadata", "type": "tuple"}, - {"name": "inclusionProof", "type": "bytes"}, - {"name": "quorumIndices", "type": "bytes"} - ], - "name": "BlobVerificationProof", - "type": "tuple" - }] - */ - - /* - type BlobVerificationProof struct { - BatchID uint32 `json:"batchId"` - BlobIndex uint32 `json:"blobIndex"` - BatchMetadata BatchMetadata `json:"batchMetadata"` - InclusionProof []byte `json:"inclusionProof"` - QuorumIndices []byte `json:"quorumIndices"` - } - - type BatchMetadata struct { - BatchHeader BatchHeader `json:"batchHeader"` - SignatoryRecordHash [32]byte `json:"signatoryRecordHash"` - ConfirmationBlockNumber uint32 `json:"confirmationBlockNumber"` - } - - type BatchHeader struct { - BlobHeadersRoot [32]byte `json:"blobHeadersRoot"` - QuorumNumbers []byte `json:"quorumNumbers"` - SignedStakeForQuorums []byte `json:"signedStakeForQuorums"` - ReferenceBlockNumber uint32 `json:"referenceBlockNumber"` - } - - */ blobVerificationProofType, err := abi.NewType("tuple", "", []abi.ArgumentMarshaling{ {Name: "batchID", Type: "uint32"}, {Name: "blobIndex", Type: "uint32"}, @@ -990,7 +935,6 @@ func (b *BatchPoster) encodeAddBatch( }, }) - println(fmt.Sprintf("blobVerificationProofType: %+v", blobVerificationProofType)) if err != nil { return nil, nil, err } @@ -1027,7 +971,6 @@ func (b *BatchPoster) encodeAddBatch( {Type: u256Type}, } - println("Sequence number ", seqNum.String()) // define values array values := make([]interface{}, 6) values[0] = seqNum @@ -1045,19 +988,6 @@ func (b *BatchPoster) encodeAddBatch( return nil, nil, err } - // data := make([]byte, 0) - - // calldata, err = method.Inputs.Pack( - // seqNum, - // bvpBytes, - // bhBytes, - // new(big.Int).SetUint64(delayedMsg), - // new(big.Int).SetUint64(uint64(prevMsgNum)), - // new(big.Int).SetUint64(uint64(newMsgNum)), - // ) - println(fmt.Sprintf("calldata: %s", hexutil.Encode(calldata))) - println(fmt.Sprintf("err: %e", err)) - } else { calldata, err = method.Inputs.Pack( seqNum, diff --git a/arbnode/dataposter/data_poster.go b/arbnode/dataposter/data_poster.go index 416ebf725..f2d67d71b 100644 --- a/arbnode/dataposter/data_poster.go +++ b/arbnode/dataposter/data_poster.go @@ -379,6 +379,7 @@ func (p *DataPoster) waitForL1Finality() bool { // Returns the next nonce, its metadata if stored, a bool indicating if the metadata is present, the cumulative weight, and an error if present. // Unlike GetNextNonceAndMeta, this does not call the metadataRetriever if the metadata is not stored in the queue. func (p *DataPoster) getNextNonceAndMaybeMeta(ctx context.Context, thisWeight uint64) (uint64, []byte, bool, uint64, error) { + println("getNextNonceAndMaybeMeta") // Ensure latest finalized block state is available. blockNum, err := p.client.BlockNumber(ctx) if err != nil { @@ -1026,6 +1027,7 @@ const minWait = time.Second * 10 func (p *DataPoster) Start(ctxIn context.Context) { p.StopWaiter.Start(ctxIn, p) p.CallIteratively(func(ctx context.Context) time.Duration { + println("Data poster CallIteratively") p.mutex.Lock() defer p.mutex.Unlock() err := p.updateBalance(ctx) diff --git a/arbnode/sequencer_inbox.go b/arbnode/sequencer_inbox.go index edda4e551..e66fba1d3 100644 --- a/arbnode/sequencer_inbox.go +++ b/arbnode/sequencer_inbox.go @@ -14,9 +14,11 @@ import ( "github.com/ethereum/go-ethereum/accounts/abi" "github.com/ethereum/go-ethereum/accounts/abi/bind" "github.com/ethereum/go-ethereum/common" + "github.com/ethereum/go-ethereum/common/hexutil" "github.com/ethereum/go-ethereum/core/types" "github.com/offchainlabs/nitro/arbstate" "github.com/offchainlabs/nitro/arbutil" + "github.com/offchainlabs/nitro/eigenda" "github.com/offchainlabs/nitro/solgen/go/bridgegen" ) @@ -35,6 +37,7 @@ const ( batchDataSeparateEvent batchDataNone batchDataBlobHashes + batchDataEigenDA ) func init() { @@ -118,6 +121,7 @@ func (m *SequencerInboxBatch) getSequencerData(ctx context.Context, client arbut if err != nil { return nil, err } + args := make(map[string]interface{}) err = addSequencerL2BatchFromOriginCallABI.Inputs.UnpackIntoMap(args, data[4:]) if err != nil { @@ -164,6 +168,27 @@ func (m *SequencerInboxBatch) getSequencerData(ctx context.Context, client arbut data = append(data, h[:]...) } return data, nil + + case batchDataEigenDA: + // get the transaction data from the log + tx, err := arbutil.GetLogTransaction(ctx, client, m.rawLog) + if err != nil { + return nil, err + } + // get the input data from the transaction + // TODO: decide on if you want to parse it here or parse it upstream, I've decided to parse it upstream and include all of the calldata in the batch + calldata := tx.Data() + println("appending EigenDA message header flag to calldata") + // append the eigenDA header flag to the front + data := []byte{eigenda.EigenDAMessageHeaderFlag} + data = append(data, calldata[:]...) + + println(fmt.Sprintf("Returning the following calldata: %s", hexutil.Encode(data))) + + // format of eigenDA data is + // [0 - 1] header flag + // [1 - len(data)] calldata + return data, nil default: return nil, fmt.Errorf("batch has invalid data location %v", m.dataLocation) } diff --git a/arbstate/inbox.go b/arbstate/inbox.go index 976eaf8d6..8c8001715 100644 --- a/arbstate/inbox.go +++ b/arbstate/inbox.go @@ -14,6 +14,7 @@ import ( "math/big" "github.com/ethereum/go-ethereum/common" + "github.com/ethereum/go-ethereum/common/hexutil" "github.com/ethereum/go-ethereum/crypto" "github.com/ethereum/go-ethereum/crypto/kzg4844" "github.com/ethereum/go-ethereum/log" @@ -82,9 +83,12 @@ func parseSequencerMessage(ctx context.Context, batchNum uint64, batchBlockHash afterDelayedMessages: binary.BigEndian.Uint64(data[32:40]), segments: [][]byte{}, } + + log.Info("Reading calldata payload from sequencer inbox", "calldata", hexutil.Encode(data)) payload := data[40:] log.Info("Inbox parse sequencer message: ", "payload", hex.EncodeToString(payload)) log.Info("Inbox parse header message: ", "header", hex.EncodeToString(data[:40])) + log.Info("Parsed header", "struct", fmt.Sprintf("%+v", parsedMsg)) // Stage 0: Check if our node is out of date and we don't understand this batch type // If the parent chain sequencer inbox smart contract authenticated this batch, @@ -99,10 +103,12 @@ func parseSequencerMessage(ctx context.Context, batchNum uint64, batchBlockHash // as these headers are validated by the sequencer inbox and not other DASs. // We try to extract payload from the first occuring valid DA provider in the daProviders list if len(payload) > 0 { + println("looking for DA provider") foundDA := false var err error for _, provider := range daProviders { + println(fmt.Sprintf("Reading message from provider: %v", provider)) if provider != nil && provider.IsValidHeaderByte(payload[0]) { payload, err = provider.RecoverPayloadFromBatch(ctx, batchNum, batchBlockHash, data, nil, keysetValidationMode) if err != nil { @@ -437,6 +443,7 @@ const BatchSegmentKindAdvanceL1BlockNumber uint8 = 4 // Pop returns the message from the top of the sequencer inbox and removes it from the queue. // Note: this does *not* return parse errors, those are transformed into invalid messages func (r *inboxMultiplexer) Pop(ctx context.Context) (*arbostypes.MessageWithMetadata, error) { + println("Popping message from sequencer inbox") if r.cachedSequencerMessage == nil { // Note: batchBlockHash will be zero in the replay binary, but that's fine bytes, batchBlockHash, realErr := r.backend.PeekSequencerInbox() diff --git a/contracts b/contracts index a6edf0994..f1a5caf79 160000 --- a/contracts +++ b/contracts @@ -1 +1 @@ -Subproject commit a6edf099466faa6b57f3369f0db57dfc2be7e270 +Subproject commit f1a5caf7999077086ebe68167f1d517b1b102f53 diff --git a/eigenda/eigenda.go b/eigenda/eigenda.go index 19308801a..0e5850898 100644 --- a/eigenda/eigenda.go +++ b/eigenda/eigenda.go @@ -12,11 +12,58 @@ import ( "github.com/Layr-Labs/eigenda/api/grpc/disperser" "github.com/ethereum/go-ethereum/accounts/abi" "github.com/ethereum/go-ethereum/common" + "github.com/ethereum/go-ethereum/common/hexutil" "github.com/ethereum/go-ethereum/log" "github.com/ethereum/go-ethereum/rlp" "github.com/offchainlabs/nitro/arbutil" ) +type DisperserBlobInfo struct { + BlobHeader DisperserBlobHeader `json:"blob_header,omitempty"` + BlobVerificationProof DisperserBlobVerificationProof `json:"blob_verification_proof,omitempty"` +} + +type DisperserBlobHeader struct { + Commitment G1Commitment `json:"commitment,omitempty"` + DataLength uint32 `json:"data_length,omitempty"` + BlobQuorumParams []BlobQuorumParam `json:"blob_quorum_params,omitempty"` +} + +type G1Commitment struct { + X []byte `json:"x,omitempty"` + Y []byte `json:"y,omitempty"` +} + +type BlobQuorumParam struct { + QuorumNumber uint32 `json:"quorum_number,omitempty"` + AdversaryThresholdPercentage uint32 `json:"adversary_threshold_percentage,omitempty"` + ConfirmationThresholdPercentage uint32 `json:"confirmation_threshold_percentage,omitempty"` + ChunkLength uint32 `json:"chunk_length,omitempty"` +} + +type DisperserBlobVerificationProof struct { + BatchId uint32 `json:"batch_id,omitempty"` + BlobIndex uint32 `json:"blob_index,omitempty"` + BatchMetadata DisperserBatchMetadata `json:"batch_metadata,omitempty"` + InclusionProof []byte `json:"inclusion_proof,omitempty"` + QuorumIndexes []byte `json:"quorum_indexes,omitempty"` +} + +type DisperserBatchMetadata struct { + Fee []byte `json:"fee"` // bytes + BatchHeaderHash []byte `json:"batchHeaderHash"` // bytes + BatchHeader DisperserBatchHeader `json:"batch_header,omitempty"` + SignatoryRecordHash []byte `json:"signatory_record_hash,omitempty"` + ConfirmationBlockNumber uint32 `json:"confirmation_block_number,omitempty"` +} + +type DisperserBatchHeader struct { + BatchRoot []byte `json:"batch_root,omitempty"` + QuorumNumbers []byte `json:"quorum_numbers,omitempty"` + QuorumSignedPercentages []byte `json:"quorum_signed_percentages,omitempty"` + ReferenceBlockNumber uint32 `json:"reference_block_number,omitempty"` +} + // EigenDAMessageHeaderFlag indicated that the message is a EigenDABlobID which will be used to retrieve data from EigenDA const EigenDAMessageHeaderFlag byte = 0xed @@ -66,14 +113,14 @@ type EigenDABlobID struct { } type EigenDABlobInfo struct { - BlobHeader BlobHeader - BlobVerificationProof BlobVerificationProof + BlobHeader BlobHeader `json:"blobHeader"` + BlobVerificationProof BlobVerificationProof `json:"blobVerificationProof"` } type BlobHeader struct { - Commitment *G1Point - DataLength uint32 - QuorumBlobParams []QuorumBlobParams + Commitment G1Point `json:"commitment"` + DataLength uint32 `json:"dataLength"` + QuorumBlobParams []QuorumBlobParams `json:"quorumBlobParams"` } type G1Point struct { @@ -99,10 +146,29 @@ type BlobVerificationProof struct { QuorumIndices []byte `json:"quorumIndices"` // bytes } +/* + BatchHeader *BatchHeader `protobuf:"bytes,1,opt,name=batch_header,json=batchHeader,proto3" json:"batch_header,omitempty"` + // The hash of all public keys of the operators that did not sign the batch. + SignatoryRecordHash []byte `protobuf:"bytes,2,opt,name=signatory_record_hash,json=signatoryRecordHash,proto3" json:"signatory_record_hash,omitempty"` + // The fee payment paid by users for dispersing this batch. It's the bytes + // representation of a big.Int value. + Fee []byte `protobuf:"bytes,3,opt,name=fee,proto3" json:"fee,omitempty"` + // The Ethereum block number at which the batch is confirmed onchain. + ConfirmationBlockNumber uint32 `protobuf:"varint,4,opt,name=confirmation_block_number,json=confirmationBlockNumber,proto3" json:"confirmation_block_number,omitempty"` + // This is the hash of the ReducedBatchHeader defined onchain, see: + // https://github.com/Layr-Labs/eigenda/blob/master/contracts/src/interfaces/IEigenDAServiceManager.sol#L43 + // The is the message that the operators will sign their signatures on. + BatchHeaderHash []byte `protobuf:"bytes,5,opt,name=batch_header_hash,json=batchHeaderHash,proto3" json:"batch_header_hash,omitempty"` + + +*/ + type BatchMetadata struct { BatchHeader BatchHeader `json:"batchHeader"` + Fee []byte `json:"fee"` // bytes SignatoryRecordHash [32]byte `json:"signatoryRecordHash"` // bytes32 ConfirmationBlockNumber uint32 `json:"confirmationBlockNumber"` // uint32 + BatchHeaderHash []byte `json:"batchHeaderHash"` // bytes } type BatchHeader struct { @@ -112,6 +178,65 @@ type BatchHeader struct { ReferenceBlockNumber uint32 `json:"referenceBlockNumber"` } +func ConvertEigenDABlobInfoToDisperserBlobInfo(eigenDA *EigenDABlobInfo) DisperserBlobInfo { + // Convert BlobHeader + var disperserBlobHeader DisperserBlobHeader + commitment := G1Commitment{ + X: eigenDA.BlobHeader.Commitment.X.Bytes(), + Y: eigenDA.BlobHeader.Commitment.Y.Bytes(), + } + quorumParams := make([]BlobQuorumParam, len(eigenDA.BlobHeader.QuorumBlobParams)) + for i, qp := range eigenDA.BlobHeader.QuorumBlobParams { + quorumParams[i] = BlobQuorumParam{ + QuorumNumber: uint32(qp.QuorumNumber), + AdversaryThresholdPercentage: uint32(qp.AdversaryThresholdPercentage), + ConfirmationThresholdPercentage: uint32(qp.ConfirmationThresholdPercentage), + ChunkLength: qp.ChunkLength, + } + } + disperserBlobHeader = DisperserBlobHeader{ + Commitment: commitment, + DataLength: eigenDA.BlobHeader.DataLength, + BlobQuorumParams: quorumParams, + } + + // Convert BlobVerificationProof + var disperserBlobVerificationProof DisperserBlobVerificationProof + if &eigenDA.BlobVerificationProof != nil { + var disperserBatchMetadata DisperserBatchMetadata + if &eigenDA.BlobVerificationProof.BatchMetadata != nil { + metadata := eigenDA.BlobVerificationProof.BatchMetadata + quorumNumbers := metadata.BatchHeader.QuorumNumbers + quorumSignedPercentages := metadata.BatchHeader.SignedStakeForQuorums + + disperserBatchMetadata = DisperserBatchMetadata{ + BatchHeader: DisperserBatchHeader{ + BatchRoot: metadata.BatchHeader.BlobHeadersRoot[:], + QuorumNumbers: quorumNumbers, + QuorumSignedPercentages: quorumSignedPercentages, + ReferenceBlockNumber: metadata.BatchHeader.ReferenceBlockNumber, + }, + BatchHeaderHash: metadata.BatchHeaderHash, + Fee: metadata.Fee, + SignatoryRecordHash: metadata.SignatoryRecordHash[:], + ConfirmationBlockNumber: metadata.ConfirmationBlockNumber, + } + } + disperserBlobVerificationProof = DisperserBlobVerificationProof{ + BatchId: eigenDA.BlobVerificationProof.BatchID, + BlobIndex: eigenDA.BlobVerificationProof.BlobIndex, + BatchMetadata: disperserBatchMetadata, + InclusionProof: eigenDA.BlobVerificationProof.InclusionProof, + QuorumIndexes: eigenDA.BlobVerificationProof.QuorumIndices, + } + } + + return DisperserBlobInfo{ + BlobHeader: disperserBlobHeader, + BlobVerificationProof: disperserBlobVerificationProof, + } +} + type EigenDA struct { client *EigenDAProxyClient } @@ -126,7 +251,9 @@ func NewEigenDA(proxyServerRpc string) (*EigenDA, error) { // TODO: There should probably be two types of query blob as the func (e *EigenDA) QueryBlob(ctx context.Context, cert *EigenDABlobInfo, domainFilter string) ([]byte, error) { - data, err := e.client.Get(ctx, cert, domainFilter) + blobInfo := ConvertEigenDABlobInfoToDisperserBlobInfo(cert) + + data, err := e.client.Get(ctx, &blobInfo, domainFilter) if err != nil { return nil, err } @@ -166,7 +293,7 @@ func (b *EigenDABlobInfo) loadBlobInfo(disperserBlobInfo *disperser.BlobInfo) { b.BlobHeader = BlobHeader{} - b.BlobHeader.Commitment = &G1Point{ + b.BlobHeader.Commitment = G1Point{ X: new(big.Int).SetBytes(x), Y: new(big.Int).SetBytes(y), } @@ -190,6 +317,8 @@ func (b *EigenDABlobInfo) loadBlobInfo(disperserBlobInfo *disperser.BlobInfo) { b.BlobVerificationProof.BatchID = disperserBlobInfo.GetBlobVerificationProof().GetBatchId() b.BlobVerificationProof.BlobIndex = disperserBlobInfo.GetBlobVerificationProof().GetBlobIndex() b.BlobVerificationProof.BatchMetadata = BatchMetadata{ + Fee: disperserBlobInfo.GetBlobVerificationProof().GetBatchMetadata().GetFee(), + BatchHeaderHash: disperserBlobInfo.GetBlobVerificationProof().GetBatchMetadata().GetBatchHeaderHash(), BatchHeader: BatchHeader{}, SignatoryRecordHash: signatoryRecordHash, ConfirmationBlockNumber: disperserBlobInfo.GetBlobVerificationProof().GetBatchMetadata().GetConfirmationBlockNumber(), @@ -262,9 +391,13 @@ func RecoverPayloadFromEigenDABatch(ctx context.Context, } func ParseSequencerMsg(calldata []byte) *EigenDABlobInfo { + println("ParseSequencerMsg") + println(fmt.Sprintf("Calldata %s", hexutil.Encode(calldata))) + // TODO: Import this via relative path - sequencerInboxABI := `[ { "inputs": [ { "internalType": "uint256", "name": "_maxDataSize", "type": "uint256" }, { "internalType": "contract IReader4844", "name": "reader4844_", "type": "address" }, { "internalType": "contract IEigenDAServiceManager", "name": "eigenDAServiceManager_", "type": "address" }, { "internalType": "contract IRollupManager", "name": "eigenDARollupManager_", "type": "address" }, { "internalType": "bool", "name": "_isUsingFeeToken", "type": "bool" } ], "stateMutability": "nonpayable", "type": "constructor" }, { "inputs": [], "name": "AlreadyInit", "type": "error" }, { "inputs": [ { "internalType": "bytes32", "name": "", "type": "bytes32" } ], "name": "AlreadyValidDASKeyset", "type": "error" }, { "inputs": [], "name": "BadMaxTimeVariation", "type": "error" }, { "inputs": [], "name": "BadPostUpgradeInit", "type": "error" }, { "inputs": [ { "internalType": "uint256", "name": "stored", "type": "uint256" }, { "internalType": "uint256", "name": "received", "type": "uint256" } ], "name": "BadSequencerNumber", "type": "error" }, { "inputs": [], "name": "DataBlobsNotSupported", "type": "error" }, { "inputs": [ { "internalType": "uint256", "name": "dataLength", "type": "uint256" }, { "internalType": "uint256", "name": "maxDataLength", "type": "uint256" } ], "name": "DataTooLarge", "type": "error" }, { "inputs": [], "name": "DelayedBackwards", "type": "error" }, { "inputs": [], "name": "DelayedTooFar", "type": "error" }, { "inputs": [], "name": "Deprecated", "type": "error" }, { "inputs": [], "name": "ForceIncludeBlockTooSoon", "type": "error" }, { "inputs": [], "name": "ForceIncludeTimeTooSoon", "type": "error" }, { "inputs": [], "name": "HadZeroInit", "type": "error" }, { "inputs": [], "name": "IncorrectMessagePreimage", "type": "error" }, { "inputs": [ { "internalType": "string", "name": "name", "type": "string" } ], "name": "InitParamZero", "type": "error" }, { "inputs": [ { "internalType": "bytes1", "name": "", "type": "bytes1" } ], "name": "InvalidHeaderFlag", "type": "error" }, { "inputs": [], "name": "MissingDataHashes", "type": "error" }, { "inputs": [], "name": "NativeTokenMismatch", "type": "error" }, { "inputs": [ { "internalType": "bytes32", "name": "", "type": "bytes32" } ], "name": "NoSuchKeyset", "type": "error" }, { "inputs": [], "name": "NotBatchPoster", "type": "error" }, { "inputs": [ { "internalType": "address", "name": "", "type": "address" } ], "name": "NotBatchPosterManager", "type": "error" }, { "inputs": [], "name": "NotForked", "type": "error" }, { "inputs": [], "name": "NotOrigin", "type": "error" }, { "inputs": [ { "internalType": "address", "name": "sender", "type": "address" }, { "internalType": "address", "name": "owner", "type": "address" } ], "name": "NotOwner", "type": "error" }, { "inputs": [], "name": "RollupNotChanged", "type": "error" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "uint256", "name": "messageNum", "type": "uint256" }, { "indexed": false, "internalType": "bytes", "name": "data", "type": "bytes" } ], "name": "InboxMessageDelivered", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "uint256", "name": "messageNum", "type": "uint256" } ], "name": "InboxMessageDeliveredFromOrigin", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "bytes32", "name": "keysetHash", "type": "bytes32" } ], "name": "InvalidateKeyset", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "uint256", "name": "id", "type": "uint256" } ], "name": "OwnerFunctionCalled", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "uint256", "name": "batchSequenceNumber", "type": "uint256" }, { "indexed": false, "internalType": "bytes", "name": "data", "type": "bytes" } ], "name": "SequencerBatchData", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "uint256", "name": "batchSequenceNumber", "type": "uint256" }, { "indexed": true, "internalType": "bytes32", "name": "beforeAcc", "type": "bytes32" }, { "indexed": true, "internalType": "bytes32", "name": "afterAcc", "type": "bytes32" }, { "indexed": false, "internalType": "bytes32", "name": "delayedAcc", "type": "bytes32" }, { "indexed": false, "internalType": "uint256", "name": "afterDelayedMessagesRead", "type": "uint256" }, { "components": [ { "internalType": "uint64", "name": "minTimestamp", "type": "uint64" }, { "internalType": "uint64", "name": "maxTimestamp", "type": "uint64" }, { "internalType": "uint64", "name": "minBlockNumber", "type": "uint64" }, { "internalType": "uint64", "name": "maxBlockNumber", "type": "uint64" } ], "indexed": false, "internalType": "struct IBridge.TimeBounds", "name": "timeBounds", "type": "tuple" }, { "indexed": false, "internalType": "enum IBridge.BatchDataLocation", "name": "dataLocation", "type": "uint8" } ], "name": "SequencerBatchDelivered", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "bytes32", "name": "keysetHash", "type": "bytes32" }, { "indexed": false, "internalType": "bytes", "name": "keysetBytes", "type": "bytes" } ], "name": "SetValidKeyset", "type": "event" }, { "inputs": [], "name": "BROTLI_MESSAGE_HEADER_FLAG", "outputs": [ { "internalType": "bytes1", "name": "", "type": "bytes1" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "DAS_MESSAGE_HEADER_FLAG", "outputs": [ { "internalType": "bytes1", "name": "", "type": "bytes1" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "DATA_AUTHENTICATED_FLAG", "outputs": [ { "internalType": "bytes1", "name": "", "type": "bytes1" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "DATA_BLOB_HEADER_FLAG", "outputs": [ { "internalType": "bytes1", "name": "", "type": "bytes1" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "EIGENDA_MESSAGE_HEADER_FLAG", "outputs": [ { "internalType": "bytes1", "name": "", "type": "bytes1" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "HEADER_LENGTH", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "TREE_DAS_MESSAGE_HEADER_FLAG", "outputs": [ { "internalType": "bytes1", "name": "", "type": "bytes1" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "ZERO_HEAVY_MESSAGE_HEADER_FLAG", "outputs": [ { "internalType": "bytes1", "name": "", "type": "bytes1" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "sequenceNumber", "type": "uint256" }, { "internalType": "bytes", "name": "data", "type": "bytes" }, { "internalType": "uint256", "name": "afterDelayedMessagesRead", "type": "uint256" }, { "internalType": "contract IGasRefunder", "name": "gasRefunder", "type": "address" }, { "internalType": "uint256", "name": "prevMessageCount", "type": "uint256" }, { "internalType": "uint256", "name": "newMessageCount", "type": "uint256" } ], "name": "addSequencerL2Batch", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "sequenceNumber", "type": "uint256" }, { "internalType": "uint256", "name": "afterDelayedMessagesRead", "type": "uint256" }, { "internalType": "contract IGasRefunder", "name": "gasRefunder", "type": "address" }, { "internalType": "uint256", "name": "prevMessageCount", "type": "uint256" }, { "internalType": "uint256", "name": "newMessageCount", "type": "uint256" } ], "name": "addSequencerL2BatchFromBlobs", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "sequenceNumber", "type": "uint256" }, { "components": [ { "internalType": "uint32", "name": "batchId", "type": "uint32" }, { "internalType": "uint32", "name": "blobIndex", "type": "uint32" }, { "components": [ { "components": [ { "internalType": "bytes32", "name": "blobHeadersRoot", "type": "bytes32" }, { "internalType": "bytes", "name": "quorumNumbers", "type": "bytes" }, { "internalType": "bytes", "name": "signedStakeForQuorums", "type": "bytes" }, { "internalType": "uint32", "name": "referenceBlockNumber", "type": "uint32" } ], "internalType": "struct IEigenDAServiceManager.BatchHeader", "name": "batchHeader", "type": "tuple" }, { "internalType": "bytes32", "name": "signatoryRecordHash", "type": "bytes32" }, { "internalType": "uint32", "name": "confirmationBlockNumber", "type": "uint32" } ], "internalType": "struct IEigenDAServiceManager.BatchMetadata", "name": "batchMetadata", "type": "tuple" }, { "internalType": "bytes", "name": "inclusionProof", "type": "bytes" }, { "internalType": "bytes", "name": "quorumIndices", "type": "bytes" } ], "internalType": "struct EigenDARollupUtils.BlobVerificationProof", "name": "blobVerificationProof", "type": "tuple" }, { "components": [ { "components": [ { "internalType": "uint256", "name": "X", "type": "uint256" }, { "internalType": "uint256", "name": "Y", "type": "uint256" } ], "internalType": "struct BN254.G1Point", "name": "commitment", "type": "tuple" }, { "internalType": "uint32", "name": "dataLength", "type": "uint32" }, { "components": [ { "internalType": "uint8", "name": "quorumNumber", "type": "uint8" }, { "internalType": "uint8", "name": "adversaryThresholdPercentage", "type": "uint8" }, { "internalType": "uint8", "name": "confirmationThresholdPercentage", "type": "uint8" }, { "internalType": "uint32", "name": "chunkLength", "type": "uint32" } ], "internalType": "struct IEigenDAServiceManager.QuorumBlobParam[]", "name": "quorumBlobParams", "type": "tuple[]" } ], "internalType": "struct IEigenDAServiceManager.BlobHeader", "name": "blobHeader", "type": "tuple" }, { "internalType": "uint256", "name": "afterDelayedMessagesRead", "type": "uint256" }, { "internalType": "contract IGasRefunder", "name": "gasRefunder", "type": "address" }, { "internalType": "uint256", "name": "prevMessageCount", "type": "uint256" }, { "internalType": "uint256", "name": "newMessageCount", "type": "uint256" } ], "name": "addSequencerL2BatchFromEigenDA", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "", "type": "uint256" }, { "internalType": "bytes", "name": "", "type": "bytes" }, { "internalType": "uint256", "name": "", "type": "uint256" }, { "internalType": "contract IGasRefunder", "name": "", "type": "address" } ], "name": "addSequencerL2BatchFromOrigin", "outputs": [], "stateMutability": "pure", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "sequenceNumber", "type": "uint256" }, { "internalType": "bytes", "name": "data", "type": "bytes" }, { "internalType": "uint256", "name": "afterDelayedMessagesRead", "type": "uint256" }, { "internalType": "contract IGasRefunder", "name": "gasRefunder", "type": "address" }, { "internalType": "uint256", "name": "prevMessageCount", "type": "uint256" }, { "internalType": "uint256", "name": "newMessageCount", "type": "uint256" } ], "name": "addSequencerL2BatchFromOrigin", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [], "name": "batchCount", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "batchPosterManager", "outputs": [ { "internalType": "address", "name": "", "type": "address" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "bridge", "outputs": [ { "internalType": "contract IBridge", "name": "", "type": "address" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "bytes32", "name": "", "type": "bytes32" } ], "name": "dasKeySetInfo", "outputs": [ { "internalType": "bool", "name": "isValidKeyset", "type": "bool" }, { "internalType": "uint64", "name": "creationBlock", "type": "uint64" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "eigenDARollupManager", "outputs": [ { "internalType": "contract IRollupManager", "name": "", "type": "address" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "eigenDAServiceManager", "outputs": [ { "internalType": "contract IEigenDAServiceManager", "name": "", "type": "address" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "_totalDelayedMessagesRead", "type": "uint256" }, { "internalType": "uint8", "name": "kind", "type": "uint8" }, { "internalType": "uint64[2]", "name": "l1BlockAndTime", "type": "uint64[2]" }, { "internalType": "uint256", "name": "baseFeeL1", "type": "uint256" }, { "internalType": "address", "name": "sender", "type": "address" }, { "internalType": "bytes32", "name": "messageDataHash", "type": "bytes32" } ], "name": "forceInclusion", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "bytes32", "name": "ksHash", "type": "bytes32" } ], "name": "getKeysetCreationBlock", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "index", "type": "uint256" } ], "name": "inboxAccs", "outputs": [ { "internalType": "bytes32", "name": "", "type": "bytes32" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "contract IBridge", "name": "bridge_", "type": "address" }, { "components": [ { "internalType": "uint256", "name": "delayBlocks", "type": "uint256" }, { "internalType": "uint256", "name": "futureBlocks", "type": "uint256" }, { "internalType": "uint256", "name": "delaySeconds", "type": "uint256" }, { "internalType": "uint256", "name": "futureSeconds", "type": "uint256" } ], "internalType": "struct ISequencerInbox.MaxTimeVariation", "name": "maxTimeVariation_", "type": "tuple" } ], "name": "initialize", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "bytes32", "name": "ksHash", "type": "bytes32" } ], "name": "invalidateKeysetHash", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "", "type": "address" } ], "name": "isBatchPoster", "outputs": [ { "internalType": "bool", "name": "", "type": "bool" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "", "type": "address" } ], "name": "isSequencer", "outputs": [ { "internalType": "bool", "name": "", "type": "bool" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "isUsingFeeToken", "outputs": [ { "internalType": "bool", "name": "", "type": "bool" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "bytes32", "name": "ksHash", "type": "bytes32" } ], "name": "isValidKeysetHash", "outputs": [ { "internalType": "bool", "name": "", "type": "bool" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "maxDataSize", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "maxTimeVariation", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" }, { "internalType": "uint256", "name": "", "type": "uint256" }, { "internalType": "uint256", "name": "", "type": "uint256" }, { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "postUpgradeInit", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [], "name": "reader4844", "outputs": [ { "internalType": "contract IReader4844", "name": "", "type": "address" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "removeDelayAfterFork", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [], "name": "rollup", "outputs": [ { "internalType": "contract IOwnable", "name": "", "type": "address" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "newBatchPosterManager", "type": "address" } ], "name": "setBatchPosterManager", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "addr", "type": "address" }, { "internalType": "bool", "name": "isBatchPoster_", "type": "bool" } ], "name": "setIsBatchPoster", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "addr", "type": "address" }, { "internalType": "bool", "name": "isSequencer_", "type": "bool" } ], "name": "setIsSequencer", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "components": [ { "internalType": "uint256", "name": "delayBlocks", "type": "uint256" }, { "internalType": "uint256", "name": "futureBlocks", "type": "uint256" }, { "internalType": "uint256", "name": "delaySeconds", "type": "uint256" }, { "internalType": "uint256", "name": "futureSeconds", "type": "uint256" } ], "internalType": "struct ISequencerInbox.MaxTimeVariation", "name": "maxTimeVariation_", "type": "tuple" } ], "name": "setMaxTimeVariation", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "bytes", "name": "keysetBytes", "type": "bytes" } ], "name": "setValidKeyset", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [], "name": "totalDelayedMessagesRead", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "newEigenDAServiceManager", "type": "address" } ], "name": "updateEigenDAServiceManager", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [], "name": "updateRollupAddress", "outputs": [], "stateMutability": "nonpayable", "type": "function" } ]` + sequencerInboxABI := `[{"type":"constructor","inputs":[{"name":"_maxDataSize","type":"uint256","internalType":"uint256"},{"name":"reader4844_","type":"address","internalType":"contract IReader4844"},{"name":"eigenDAServiceManager_","type":"address","internalType":"contract IEigenDAServiceManager"},{"name":"eigenDARollupManager_","type":"address","internalType":"contract IRollupManager"},{"name":"_isUsingFeeToken","type":"bool","internalType":"bool"}],"stateMutability":"nonpayable"},{"type":"function","name":"BROTLI_MESSAGE_HEADER_FLAG","inputs":[],"outputs":[{"name":"","type":"bytes1","internalType":"bytes1"}],"stateMutability":"view"},{"type":"function","name":"DAS_MESSAGE_HEADER_FLAG","inputs":[],"outputs":[{"name":"","type":"bytes1","internalType":"bytes1"}],"stateMutability":"view"},{"type":"function","name":"DATA_AUTHENTICATED_FLAG","inputs":[],"outputs":[{"name":"","type":"bytes1","internalType":"bytes1"}],"stateMutability":"view"},{"type":"function","name":"DATA_BLOB_HEADER_FLAG","inputs":[],"outputs":[{"name":"","type":"bytes1","internalType":"bytes1"}],"stateMutability":"view"},{"type":"function","name":"EIGENDA_MESSAGE_HEADER_FLAG","inputs":[],"outputs":[{"name":"","type":"bytes1","internalType":"bytes1"}],"stateMutability":"view"},{"type":"function","name":"HEADER_LENGTH","inputs":[],"outputs":[{"name":"","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"type":"function","name":"TREE_DAS_MESSAGE_HEADER_FLAG","inputs":[],"outputs":[{"name":"","type":"bytes1","internalType":"bytes1"}],"stateMutability":"view"},{"type":"function","name":"ZERO_HEAVY_MESSAGE_HEADER_FLAG","inputs":[],"outputs":[{"name":"","type":"bytes1","internalType":"bytes1"}],"stateMutability":"view"},{"type":"function","name":"addSequencerL2Batch","inputs":[{"name":"sequenceNumber","type":"uint256","internalType":"uint256"},{"name":"data","type":"bytes","internalType":"bytes"},{"name":"afterDelayedMessagesRead","type":"uint256","internalType":"uint256"},{"name":"gasRefunder","type":"address","internalType":"contract IGasRefunder"},{"name":"prevMessageCount","type":"uint256","internalType":"uint256"},{"name":"newMessageCount","type":"uint256","internalType":"uint256"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"addSequencerL2BatchFromBlobs","inputs":[{"name":"sequenceNumber","type":"uint256","internalType":"uint256"},{"name":"afterDelayedMessagesRead","type":"uint256","internalType":"uint256"},{"name":"gasRefunder","type":"address","internalType":"contract IGasRefunder"},{"name":"prevMessageCount","type":"uint256","internalType":"uint256"},{"name":"newMessageCount","type":"uint256","internalType":"uint256"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"addSequencerL2BatchFromEigenDA","inputs":[{"name":"sequenceNumber","type":"uint256","internalType":"uint256"},{"name":"blobVerificationProof","type":"tuple","internalType":"struct EigenDARollupUtils.BlobVerificationProof","components":[{"name":"batchId","type":"uint32","internalType":"uint32"},{"name":"blobIndex","type":"uint32","internalType":"uint32"},{"name":"batchMetadata","type":"tuple","internalType":"struct IEigenDAServiceManager.BatchMetadata","components":[{"name":"batchHeader","type":"tuple","internalType":"struct IEigenDAServiceManager.BatchHeader","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"}]},{"name":"blobHeader","type":"tuple","internalType":"struct IEigenDAServiceManager.BlobHeader","components":[{"name":"commitment","type":"tuple","internalType":"struct BN254.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":"struct IEigenDAServiceManager.QuorumBlobParam[]","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":"afterDelayedMessagesRead","type":"uint256","internalType":"uint256"},{"name":"prevMessageCount","type":"uint256","internalType":"uint256"},{"name":"newMessageCount","type":"uint256","internalType":"uint256"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"addSequencerL2BatchFromOrigin","inputs":[{"name":"","type":"uint256","internalType":"uint256"},{"name":"","type":"bytes","internalType":"bytes"},{"name":"","type":"uint256","internalType":"uint256"},{"name":"","type":"address","internalType":"contract IGasRefunder"}],"outputs":[],"stateMutability":"pure"},{"type":"function","name":"addSequencerL2BatchFromOrigin","inputs":[{"name":"sequenceNumber","type":"uint256","internalType":"uint256"},{"name":"data","type":"bytes","internalType":"bytes"},{"name":"afterDelayedMessagesRead","type":"uint256","internalType":"uint256"},{"name":"gasRefunder","type":"address","internalType":"contract IGasRefunder"},{"name":"prevMessageCount","type":"uint256","internalType":"uint256"},{"name":"newMessageCount","type":"uint256","internalType":"uint256"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"batchCount","inputs":[],"outputs":[{"name":"","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"type":"function","name":"batchPosterManager","inputs":[],"outputs":[{"name":"","type":"address","internalType":"address"}],"stateMutability":"view"},{"type":"function","name":"bridge","inputs":[],"outputs":[{"name":"","type":"address","internalType":"contract IBridge"}],"stateMutability":"view"},{"type":"function","name":"dasKeySetInfo","inputs":[{"name":"","type":"bytes32","internalType":"bytes32"}],"outputs":[{"name":"isValidKeyset","type":"bool","internalType":"bool"},{"name":"creationBlock","type":"uint64","internalType":"uint64"}],"stateMutability":"view"},{"type":"function","name":"eigenDARollupManager","inputs":[],"outputs":[{"name":"","type":"address","internalType":"contract IRollupManager"}],"stateMutability":"view"},{"type":"function","name":"eigenDAServiceManager","inputs":[],"outputs":[{"name":"","type":"address","internalType":"contract IEigenDAServiceManager"}],"stateMutability":"view"},{"type":"function","name":"forceInclusion","inputs":[{"name":"_totalDelayedMessagesRead","type":"uint256","internalType":"uint256"},{"name":"kind","type":"uint8","internalType":"uint8"},{"name":"l1BlockAndTime","type":"uint64[2]","internalType":"uint64[2]"},{"name":"baseFeeL1","type":"uint256","internalType":"uint256"},{"name":"sender","type":"address","internalType":"address"},{"name":"messageDataHash","type":"bytes32","internalType":"bytes32"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"getKeysetCreationBlock","inputs":[{"name":"ksHash","type":"bytes32","internalType":"bytes32"}],"outputs":[{"name":"","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"type":"function","name":"inboxAccs","inputs":[{"name":"index","type":"uint256","internalType":"uint256"}],"outputs":[{"name":"","type":"bytes32","internalType":"bytes32"}],"stateMutability":"view"},{"type":"function","name":"initialize","inputs":[{"name":"bridge_","type":"address","internalType":"contract IBridge"},{"name":"maxTimeVariation_","type":"tuple","internalType":"struct ISequencerInbox.MaxTimeVariation","components":[{"name":"delayBlocks","type":"uint256","internalType":"uint256"},{"name":"futureBlocks","type":"uint256","internalType":"uint256"},{"name":"delaySeconds","type":"uint256","internalType":"uint256"},{"name":"futureSeconds","type":"uint256","internalType":"uint256"}]}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"invalidateKeysetHash","inputs":[{"name":"ksHash","type":"bytes32","internalType":"bytes32"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"isBatchPoster","inputs":[{"name":"","type":"address","internalType":"address"}],"outputs":[{"name":"","type":"bool","internalType":"bool"}],"stateMutability":"view"},{"type":"function","name":"isSequencer","inputs":[{"name":"","type":"address","internalType":"address"}],"outputs":[{"name":"","type":"bool","internalType":"bool"}],"stateMutability":"view"},{"type":"function","name":"isUsingFeeToken","inputs":[],"outputs":[{"name":"","type":"bool","internalType":"bool"}],"stateMutability":"view"},{"type":"function","name":"isValidKeysetHash","inputs":[{"name":"ksHash","type":"bytes32","internalType":"bytes32"}],"outputs":[{"name":"","type":"bool","internalType":"bool"}],"stateMutability":"view"},{"type":"function","name":"maxDataSize","inputs":[],"outputs":[{"name":"","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"type":"function","name":"maxTimeVariation","inputs":[],"outputs":[{"name":"","type":"uint256","internalType":"uint256"},{"name":"","type":"uint256","internalType":"uint256"},{"name":"","type":"uint256","internalType":"uint256"},{"name":"","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"type":"function","name":"postUpgradeInit","inputs":[],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"reader4844","inputs":[],"outputs":[{"name":"","type":"address","internalType":"contract IReader4844"}],"stateMutability":"view"},{"type":"function","name":"removeDelayAfterFork","inputs":[],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"rollup","inputs":[],"outputs":[{"name":"","type":"address","internalType":"contract IOwnable"}],"stateMutability":"view"},{"type":"function","name":"setBatchPosterManager","inputs":[{"name":"newBatchPosterManager","type":"address","internalType":"address"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"setIsBatchPoster","inputs":[{"name":"addr","type":"address","internalType":"address"},{"name":"isBatchPoster_","type":"bool","internalType":"bool"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"setIsSequencer","inputs":[{"name":"addr","type":"address","internalType":"address"},{"name":"isSequencer_","type":"bool","internalType":"bool"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"setMaxTimeVariation","inputs":[{"name":"maxTimeVariation_","type":"tuple","internalType":"struct ISequencerInbox.MaxTimeVariation","components":[{"name":"delayBlocks","type":"uint256","internalType":"uint256"},{"name":"futureBlocks","type":"uint256","internalType":"uint256"},{"name":"delaySeconds","type":"uint256","internalType":"uint256"},{"name":"futureSeconds","type":"uint256","internalType":"uint256"}]}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"setValidKeyset","inputs":[{"name":"keysetBytes","type":"bytes","internalType":"bytes"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"totalDelayedMessagesRead","inputs":[],"outputs":[{"name":"","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"type":"event","name":"InboxMessageDelivered","inputs":[{"name":"messageNum","type":"uint256","indexed":true,"internalType":"uint256"},{"name":"data","type":"bytes","indexed":false,"internalType":"bytes"}],"anonymous":false},{"type":"event","name":"InboxMessageDeliveredFromOrigin","inputs":[{"name":"messageNum","type":"uint256","indexed":true,"internalType":"uint256"}],"anonymous":false},{"type":"event","name":"InvalidateKeyset","inputs":[{"name":"keysetHash","type":"bytes32","indexed":true,"internalType":"bytes32"}],"anonymous":false},{"type":"event","name":"OwnerFunctionCalled","inputs":[{"name":"id","type":"uint256","indexed":true,"internalType":"uint256"}],"anonymous":false},{"type":"event","name":"SequencerBatchData","inputs":[{"name":"batchSequenceNumber","type":"uint256","indexed":true,"internalType":"uint256"},{"name":"data","type":"bytes","indexed":false,"internalType":"bytes"}],"anonymous":false},{"type":"event","name":"SequencerBatchDelivered","inputs":[{"name":"batchSequenceNumber","type":"uint256","indexed":true,"internalType":"uint256"},{"name":"beforeAcc","type":"bytes32","indexed":true,"internalType":"bytes32"},{"name":"afterAcc","type":"bytes32","indexed":true,"internalType":"bytes32"},{"name":"delayedAcc","type":"bytes32","indexed":false,"internalType":"bytes32"},{"name":"afterDelayedMessagesRead","type":"uint256","indexed":false,"internalType":"uint256"},{"name":"timeBounds","type":"tuple","indexed":false,"internalType":"struct IBridge.TimeBounds","components":[{"name":"minTimestamp","type":"uint64","internalType":"uint64"},{"name":"maxTimestamp","type":"uint64","internalType":"uint64"},{"name":"minBlockNumber","type":"uint64","internalType":"uint64"},{"name":"maxBlockNumber","type":"uint64","internalType":"uint64"}]},{"name":"dataLocation","type":"uint8","indexed":false,"internalType":"enum IBridge.BatchDataLocation"}],"anonymous":false},{"type":"event","name":"SetValidKeyset","inputs":[{"name":"keysetHash","type":"bytes32","indexed":true,"internalType":"bytes32"},{"name":"keysetBytes","type":"bytes","indexed":false,"internalType":"bytes"}],"anonymous":false},{"type":"error","name":"AlreadyInit","inputs":[]},{"type":"error","name":"AlreadyValidDASKeyset","inputs":[{"name":"","type":"bytes32","internalType":"bytes32"}]},{"type":"error","name":"BadMaxTimeVariation","inputs":[]},{"type":"error","name":"BadPostUpgradeInit","inputs":[]},{"type":"error","name":"BadSequencerNumber","inputs":[{"name":"stored","type":"uint256","internalType":"uint256"},{"name":"received","type":"uint256","internalType":"uint256"}]},{"type":"error","name":"DataBlobsNotSupported","inputs":[]},{"type":"error","name":"DataTooLarge","inputs":[{"name":"dataLength","type":"uint256","internalType":"uint256"},{"name":"maxDataLength","type":"uint256","internalType":"uint256"}]},{"type":"error","name":"DelayedBackwards","inputs":[]},{"type":"error","name":"DelayedTooFar","inputs":[]},{"type":"error","name":"Deprecated","inputs":[]},{"type":"error","name":"ForceIncludeBlockTooSoon","inputs":[]},{"type":"error","name":"ForceIncludeTimeTooSoon","inputs":[]},{"type":"error","name":"HadZeroInit","inputs":[]},{"type":"error","name":"IncorrectMessagePreimage","inputs":[]},{"type":"error","name":"InitParamZero","inputs":[{"name":"name","type":"string","internalType":"string"}]},{"type":"error","name":"InvalidHeaderFlag","inputs":[{"name":"","type":"bytes1","internalType":"bytes1"}]},{"type":"error","name":"MissingDataHashes","inputs":[]},{"type":"error","name":"NativeTokenMismatch","inputs":[]},{"type":"error","name":"NoSuchKeyset","inputs":[{"name":"","type":"bytes32","internalType":"bytes32"}]},{"type":"error","name":"NotBatchPoster","inputs":[]},{"type":"error","name":"NotBatchPosterManager","inputs":[{"name":"","type":"address","internalType":"address"}]},{"type":"error","name":"NotForked","inputs":[]},{"type":"error","name":"NotOrigin","inputs":[]},{"type":"error","name":"NotOwner","inputs":[{"name":"sender","type":"address","internalType":"address"},{"name":"owner","type":"address","internalType":"address"}]}]` + // TODO - remove use of panics abi, err := abi.JSON(strings.NewReader(sequencerInboxABI)) if err != nil { panic(err) @@ -293,6 +426,8 @@ func ParseSequencerMsg(calldata []byte) *EigenDABlobInfo { } func convertToPayload(pa []interface{}) (payload, error) { + println("Converting to payload") + blobVerificationProof := pa[1].(struct { BatchId uint32 `json:"batchId"` BlobIndex uint32 `json:"blobIndex"` @@ -336,6 +471,9 @@ func convertToPayload(pa []interface{}) (payload, error) { SignedStakeForQuorums: blobVerificationProof.BatchMetadata.BatchHeader.SignedStakeForQuorums, ReferenceBlockNumber: blobVerificationProof.BatchMetadata.BatchHeader.ReferenceBlockNumber, }, + Fee: []byte{}, + BatchHeaderHash: []byte{}, + SignatoryRecordHash: blobVerificationProof.BatchMetadata.SignatoryRecordHash, ConfirmationBlockNumber: blobVerificationProof.BatchMetadata.ConfirmationBlockNumber, }, @@ -343,7 +481,10 @@ func convertToPayload(pa []interface{}) (payload, error) { QuorumIndices: blobVerificationProof.QuorumIndices, }, BlobHeader: &BlobHeader{ - Commitment: &G1Point{}, + Commitment: G1Point{ + X: blobHeader.Commitment.X, + Y: blobHeader.Commitment.Y, + }, DataLength: blobHeader.DataLength, QuorumBlobParams: func() []QuorumBlobParams { params := make([]QuorumBlobParams, len(blobHeader.QuorumBlobParams)) @@ -359,9 +500,8 @@ func convertToPayload(pa []interface{}) (payload, error) { }(), }, AfterDelayedMessagesRead: pa[3].(*big.Int), - GasRefunder: pa[4].(common.Address), - PrevMessageCount: pa[5].(*big.Int), - NewMessageCount: pa[6].(*big.Int), + PrevMessageCount: pa[4].(*big.Int), + NewMessageCount: pa[5].(*big.Int), }, nil } func convertCalldataToInt(calldata []byte) (int, error) { diff --git a/eigenda/eigenda_proxy_client.go b/eigenda/eigenda_proxy_client.go index b208f06fc..522ce5d15 100644 --- a/eigenda/eigenda_proxy_client.go +++ b/eigenda/eigenda_proxy_client.go @@ -10,10 +10,15 @@ import ( "net/url" "github.com/Layr-Labs/eigenda/api/grpc/disperser" + "github.com/ethereum/go-ethereum/common/hexutil" "github.com/ethereum/go-ethereum/log" "github.com/ethereum/go-ethereum/rlp" ) +func Encode(b []byte) []byte { + return append([]byte{byte(0x1), byte(0x0), byte(0x0)}, b...) +} + type EigenDAProxyClient struct { RPCUrl string } @@ -66,13 +71,17 @@ func (c *EigenDAProxyClient) Put(ctx context.Context, data []byte) (*disperser.B return &blobInfo, nil } -func (c *EigenDAProxyClient) Get(ctx context.Context, blobInfo *EigenDABlobInfo, domainFilter string) ([]byte, error) { +func (c *EigenDAProxyClient) Get(ctx context.Context, blobInfo *DisperserBlobInfo, domainFilter string) ([]byte, error) { + + println(fmt.Sprintf("Getting blob EIGENDAPROXYCLIENT %+v", blobInfo)) + println(fmt.Sprintf("Batch header %+v", blobInfo.BlobVerificationProof.BatchMetadata.BatchHeader)) + commitment, err := rlp.EncodeToBytes(blobInfo) if err != nil { return nil, fmt.Errorf("failed to encode blob info: %w", err) } - rpcurl := fmt.Sprintf("%s/get/%s", c.RPCUrl, commitment) + rpcurl := fmt.Sprintf("%s/get/%s", c.RPCUrl, hexutil.Encode((Encode(commitment)))) // if not nil or binary (default) put in the domain filter as a part of the query url if domainFilter != "" && domainFilter != "binary" { diff --git a/eigenda/eigenda_test.go b/eigenda/eigenda_test.go deleted file mode 100644 index 60122d5c4..000000000 --- a/eigenda/eigenda_test.go +++ /dev/null @@ -1,63 +0,0 @@ -package eigenda - -import ( - common "github.com/Layr-Labs/eigenda/api/grpc/common" - "github.com/Layr-Labs/eigenda/api/grpc/disperser" - "github.com/ethereum/go-ethereum/common/hexutil" - - "encoding/hex" - "testing" -) - -func TestParseSequencerMsg(t *testing.T) { - calldataString := "6b4e9387000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e000000000000000000000000000000000000000000000000000000000000004a00000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000268d000000000000000000000000000000000000000000000000000000000000023a00000000000000000000000000000000000000000000000000000000000000a00000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000038000000000000000000000000000000000000000000000000000000000000000609c2295a45e69a5369008e65fa2afc40eccb8e8be2f453998207e9b0a8d3bc72b0000000000000000000000000000000000000000000000000000000000143b152f3d0afe00f1a3eccb2a77a053c9fa850d4809913ece2f6a5dcdc9ecb5347c8b000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000143aad0000000000000000000000000000000000000000000000000000000000000002000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000024d4f000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000016086d042bea74e8fc60ce55410490d2e8bf312ff03aca9d369296d8cb25cd622096d79ebf24023971807ca680bfeac081bca250544e65147ffc0f7fdd3f3f973b885c252331c8385b767138702b5ba6155ae518fd98ebb966c5d2dfc2364ee0d49c203f38ebd01f85755bd59903ad850ea040fb94611fd554deb03c35ce43453f616866b1248350c1f1af7f3ce0f9b1beb712de850ce4e9cdfee6073fd54b8bca69011c9eca7800d59e6831f055972ae7430b8b52423cf455c2e0a3b11343890c713b16d87b5458476d589dd0f2146b14b9380f69aa8b1b546c75de4bfe925167204dd92138a76c02a4854973ed7016c6c110d41563acbc8cafefbe5d2f0ff490a83cd05a84bdfdd1542ebbbf20ca8b8968407a993919ffe5e159faf5941a95ae878a69d797b170a7a375d88b92c000c70871ae9ed5042f481743a27e97cf8665e8ebdea8f3dc226cc4c9a1cf3863ab4e60900a600fbfe5381cc0912f7aab88686000000000000000000000000000000000000000000000000000000000000000200010000000000000000000000000000000000000000000000000000000000001a78ee576b0026de661b72106bf447f5bb70881f24a3fa8b1f312992c8e165970633b392b3d3f66407d912aafcc2f0231c31918f0485e8476975edc710fcb45200000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000080000000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000021000000000000000000000000000000000000000000000000000000000000003700000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002100000000000000000000000000000000000000000000000000000000000000370000000000000000000000000000000000000000000000000000000000000001" - - calldata, err := hex.DecodeString(calldataString) - - expected := &EigenDABlobID{ - // BatchHeader content for hashing - BlobIndex: 570, - ReferenceBlockNumber: 1325741, - QuorumIDs: []uint32{0, 1}, - } - - // Call the function with the mock calldata - result := ParseSequencerMsg(calldata) - if err != nil { - t.Fatalf("ParseSequencerMsg returned an error: %v", err) - } - - if result.BlobVerificationProof.BlobIndex != expected.BlobIndex { - t.Errorf("BlobIndex was incorrect, got: %v, want: %v", result.BlobVerificationProof.BlobIndex, expected.BlobIndex) - } - -} - -func TestLoadBlobInfo(t *testing.T) { - x, err := hexutil.Decode("0x007e2db2683cd5ec31b62b50b9a685140076b483f1f85b931f493480cbfd9eda") - if err != nil { - t.Fatalf("error decoding hex string: %v", err) - } - - y, err := hexutil.Decode("0x10a964fcc86dbace6cedd749b878523e8bdc8ad1c04104cdbf1482d79e3367b9") - if err != nil { - t.Fatalf("error decoding hex string: %v", err) - } - - dBlobInfo := &disperser.BlobInfo{ - BlobHeader: &disperser.BlobHeader{ - Commitment: &common.G1Commitment{ - X: x, - Y: y, - }, - }, - } - - var blobInfo = &EigenDABlobInfo{} - - blobInfo.loadBlobInfo(dBlobInfo) - - if blobInfo == nil { - t.Fatalf("loadBlobInfo returned nil") - } -} diff --git a/go.sum b/go.sum index 5acb27b81..d6f8df342 100644 --- a/go.sum +++ b/go.sum @@ -46,6 +46,7 @@ github.com/AndreasBriese/bbloom v0.0.0-20190825152654-46b345b51c96 h1:cTp8I5+VIo github.com/AndreasBriese/bbloom v0.0.0-20190825152654-46b345b51c96/go.mod h1:bOvUY6CB00SOBii9/FifXqc0awNKxLFCL/+pkDPuyl8= github.com/BurntSushi/toml v0.3.1/go.mod h1:xHWCNGjB5oqiDr8zfno3MHue2Ht5sIBksp03qcyfWMU= github.com/BurntSushi/toml v1.3.2 h1:o7IhLm0Msx3BaB+n3Ag7L8EVlByGnpq14C4YWiu/gL8= +github.com/BurntSushi/toml v1.3.2/go.mod h1:CxXYINrC8qIiEnFrOxCa7Jy5BFHlXnUU2pbicEuybxQ= github.com/BurntSushi/xgb v0.0.0-20160522181843-27f122750802/go.mod h1:IVnqGOEym/WlBOVXweHU+Q+/VP0lqqI8lqeDx9IjBqo= github.com/CloudyKit/fastprinter v0.0.0-20200109182630-33d98a066a53/go.mod h1:+3IMCy2vIlbG1XG/0ggNQv0SvxCAIpPM5b1nCz56Xno= github.com/CloudyKit/jet/v3 v3.0.0/go.mod h1:HKQPgSJmdK8hdoAbKUUWajkHyHo4RaU5rMdUywE7VMo= @@ -204,6 +205,7 @@ github.com/census-instrumentation/opencensus-proto v0.2.1/go.mod h1:f6KPmirojxKA github.com/ceramicnetwork/go-dag-jose v0.1.0 h1:yJ/HVlfKpnD3LdYP03AHyTvbm3BpPiz2oZiOeReJRdU= github.com/ceramicnetwork/go-dag-jose v0.1.0/go.mod h1:qYA1nYt0X8u4XoMAVoOV3upUVKtrxy/I670Dg5F0wjI= github.com/cespare/cp v0.1.0 h1:SE+dxFebS7Iik5LK0tsi1k9ZCxEaFX4AjQmoyA+1dJk= +github.com/cespare/cp v0.1.0/go.mod h1:SOGHArjBr4JWaSDEVpWpo/hNg6RoKrls6Oh40hiwW+s= github.com/cespare/xxhash v1.1.0/go.mod h1:XrSqR1VqqWfGrhpAt58auRo0WTKS1nRRg3ghfAqPWnc= github.com/cespare/xxhash/v2 v2.1.1/go.mod h1:VGX0DQ3Q6kWi7AoAeZDth3/j3BFtOZR5XLFGgcrjCOs= github.com/cespare/xxhash/v2 v2.1.2/go.mod h1:VGX0DQ3Q6kWi7AoAeZDth3/j3BFtOZR5XLFGgcrjCOs= @@ -233,6 +235,7 @@ github.com/cncf/xds/go v0.0.0-20211011173535-cb28da3451f1/go.mod h1:eXthEFrGJvWH github.com/cockroachdb/datadriven v0.0.0-20190809214429-80d97fb3cbaa/go.mod h1:zn76sxSg3SzpJ0PPJaLDCu+Bu0Lg3sKTORVIj19EIF8= github.com/cockroachdb/datadriven v1.0.2/go.mod h1:a9RdTaap04u637JoCzcUoIcDmvwSUtcUFtT/C3kJlTU= github.com/cockroachdb/datadriven v1.0.3-0.20230413201302-be42291fc80f h1:otljaYPt5hWxV3MUfO5dFPFiOXg9CyG5/kCfayTqsJ4= +github.com/cockroachdb/datadriven v1.0.3-0.20230413201302-be42291fc80f/go.mod h1:a9RdTaap04u637JoCzcUoIcDmvwSUtcUFtT/C3kJlTU= github.com/cockroachdb/errors v1.9.1 h1:yFVvsI0VxmRShfawbt/laCIDy/mtTqqnvoNgiy5bEV8= github.com/cockroachdb/errors v1.9.1/go.mod h1:2sxOtL2WIc096WSZqZ5h8fa17rdDq9HZOZLBCor4mBk= github.com/cockroachdb/logtags v0.0.0-20211118104740-dabe8e521a4f/go.mod h1:Vz9DsVWQQhf3vs21MhPMZpMGSht7O/2vFW2xusFUVOs= @@ -289,6 +292,7 @@ github.com/davidlazar/go-crypto v0.0.0-20200604182044-b73af7476f6c/go.mod h1:6Uh github.com/deckarep/golang-set/v2 v2.1.0 h1:g47V4Or+DUdzbs8FxCCmgb6VYd+ptPAngjM6dtGktsI= github.com/deckarep/golang-set/v2 v2.1.0/go.mod h1:VAky9rY/yGXJOLEDv3OMci+7wtDpOF4IN+y82NBOac4= github.com/decred/dcrd/crypto/blake256 v1.0.0 h1:/8DMNYp9SGi5f0w7uCm6d6M4OU2rGFK09Y2A4Xv7EE0= +github.com/decred/dcrd/crypto/blake256 v1.0.0/go.mod h1:sQl2p6Y26YV+ZOcSTP6thNdn47hh8kt6rqSlvmrXFAc= github.com/decred/dcrd/dcrec/secp256k1/v4 v4.1.0 h1:HbphB4TFFXpv7MNrT52FGrrgVXF1owhMVTHFZIlnvd4= github.com/decred/dcrd/dcrec/secp256k1/v4 v4.1.0/go.mod h1:DZGJHZMqrU4JJqFAWUS2UO1+lbSKsdiOoYi9Zzey7Fc= github.com/decred/dcrd/lru v1.0.0/go.mod h1:mxKOwFd7lFjN2GZYsiz/ecgqR6kkYAl+0pz0tEMk218= @@ -370,11 +374,13 @@ github.com/franela/goreq v0.0.0-20171204163338-bcd34c9993f8/go.mod h1:ZhphrRTfi2 github.com/frankban/quicktest v1.11.3/go.mod h1:wRf/ReqHper53s+kmmSZizM8NamnL3IM0I9ntUbOk+k= github.com/frankban/quicktest v1.14.0/go.mod h1:NeW+ay9A/U67EYXNFA1nPE8e/tnQv/09mUdL/ijj8og= github.com/frankban/quicktest v1.14.3 h1:FJKSZTDHjyhriyC81FLQ0LY93eSai0ZyR/ZIkd3ZUKE= +github.com/frankban/quicktest v1.14.3/go.mod h1:mgiwOwqx65TmIk1wJ6Q7wvnVMocbUorkibMOrVTHZps= github.com/fsnotify/fsnotify v1.4.7/go.mod h1:jwhsz4b93w/PPRr/qN1Yymfu8t87LnFCMoQvtojpjFo= github.com/fsnotify/fsnotify v1.4.9/go.mod h1:znqG4EE+3YCdAaPaxE2ZRY/06pZUdp0tY4IgpuI1SZQ= github.com/fsnotify/fsnotify v1.6.0 h1:n+5WquG0fcWoWp6xPWfHdbskMCQaFnG6PfBrh1Ky4HY= github.com/fsnotify/fsnotify v1.6.0/go.mod h1:sl3t1tCWJFWoRz9R8WJCbQihKKwmorjAbSClcnxKAGw= github.com/gabriel-vasile/mimetype v1.4.2 h1:w5qFW6JKBz9Y393Y4q372O9A7cUSequkh1Q7OhCmWKU= +github.com/gabriel-vasile/mimetype v1.4.2/go.mod h1:zApsH/mKG4w07erKIaJPFiX0Tsq9BFQgN3qGY5GnNgA= github.com/gammazero/deque v0.2.1 h1:qSdsbG6pgp6nL7A0+K/B7s12mcCY/5l5SIUpMOl+dC0= github.com/gammazero/deque v0.2.1/go.mod h1:LFroj8x4cMYCukHJDbxFCkT+r9AndaJnFMuZDV34tuU= github.com/gavv/httpexpect v2.0.0+incompatible/go.mod h1:x+9tiU1YnrOvnB725RkpoLv1M62hOWzwo5OXotisrKc= @@ -399,6 +405,7 @@ github.com/gliderlabs/ssh v0.1.1/go.mod h1:U7qILu1NlMHj9FlMhZLlkCdDnU1DBEAqr0aev github.com/go-check/check v0.0.0-20180628173108-788fd7840127/go.mod h1:9ES+weclKsC9YodN5RgxqK/VD9HM9JsCSh7rNhMZE98= github.com/go-errors/errors v1.0.1/go.mod h1:f4zRHt4oKfwPJE5k8C9vpYG+aDHdBFUsgrm6/TyX73Q= github.com/go-errors/errors v1.4.2 h1:J6MZopCL4uSllY1OfXM374weqZFFItUbrImctkmUxIA= +github.com/go-errors/errors v1.4.2/go.mod h1:sIVyrIiJhuEF+Pj9Ebtd6P/rEYROXFi3BopGUQ5a5Og= github.com/go-gl/glfw v0.0.0-20190409004039-e6da0acd62b1/go.mod h1:vR7hzQXu2zJy9AVAgeJqvqgH9Q5CA+iKCZ2gyEVpxRU= github.com/go-gl/glfw/v3.3/glfw v0.0.0-20191125211704-12ad95a8df72/go.mod h1:tQ2UAYgL5IevRw8kRxooKSPJfGvJ9fJQFa0TUsXzTg8= github.com/go-gl/glfw/v3.3/glfw v0.0.0-20200222043503-6f7a984d4dc4/go.mod h1:tQ2UAYgL5IevRw8kRxooKSPJfGvJ9fJQFa0TUsXzTg8= @@ -422,8 +429,10 @@ github.com/go-ole/go-ole v1.3.0/go.mod h1:5LS6F96DhAwUc7C+1HLexzMXY1xGRSryjyPPKW github.com/go-playground/assert/v2 v2.0.1/go.mod h1:VDjEfimB/XKnb+ZQfWdccd7VUvScMdVu0Titje2rxJ4= github.com/go-playground/locales v0.13.0/go.mod h1:taPMhCMXrRLJO55olJkUXHZBHCxTMfnGwq/HNwmWNS8= github.com/go-playground/locales v0.14.1 h1:EWaQ/wswjilfKLTECiXz7Rh+3BjFhfDFKv/oXslEjJA= +github.com/go-playground/locales v0.14.1/go.mod h1:hxrqLVvrK65+Rwrd5Fc6F2O76J/NuW9t0sjnWqG1slY= github.com/go-playground/universal-translator v0.17.0/go.mod h1:UkSxE5sNxxRwHyU+Scu5vgOQjsIJAF8j9muTVoKLVtA= github.com/go-playground/universal-translator v0.18.1 h1:Bcnm0ZwsGyWbCzImXv+pAJnYK9S473LQFuzCbDbfSFY= +github.com/go-playground/universal-translator v0.18.1/go.mod h1:xekY+UJKNuX9WP91TpwSH2VMlDf28Uj24BCp08ZFTUY= github.com/go-playground/validator/v10 v10.2.0/go.mod h1:uOYAAleCW8F/7oMFd6aG0GOhaH6EGOAJShg8Id5JGkI= github.com/go-playground/validator/v10 v10.14.1 h1:9c50NUPC30zyuKprjL3vNZ0m5oG+jU0zvx4AqHGnv4k= github.com/go-playground/validator/v10 v10.14.1/go.mod h1:9iXMNT7sEkjXb0I+enO7QXmzG6QCsPWY4zveKFVRSyU= @@ -452,6 +461,7 @@ github.com/gobwas/ws v1.1.0/go.mod h1:nzvNcVha5eUziGrbxFCo6qFIojQHjJV5cLYIbezhfL github.com/gobwas/ws-examples v0.0.0-20190625122829-a9e8908d9484 h1:XC9N1eiAyO1zg62dpOU8bex8emB/zluUtKcbLNjJxGI= github.com/gobwas/ws-examples v0.0.0-20190625122829-a9e8908d9484/go.mod h1:5nDZF4afNA1S7ZKcBXCMvDo4nuCTp1931DND7/W4aXo= github.com/goccy/go-json v0.10.2 h1:CrxCmQqYDkv1z7lO7Wbh2HN93uovUHgrECaO5ZrCXAU= +github.com/goccy/go-json v0.10.2/go.mod h1:6MelG93GURQebXPDq3khkgXZkazVtN9CRI+MGFi0w8I= github.com/godbus/dbus/v5 v5.0.3/go.mod h1:xhWf0FNVPg57R7Z0UbKHbJfkEywrmjJnf7w5xrFpKfA= github.com/godbus/dbus/v5 v5.0.4/go.mod h1:xhWf0FNVPg57R7Z0UbKHbJfkEywrmjJnf7w5xrFpKfA= github.com/godbus/dbus/v5 v5.1.0 h1:4KLkAxT3aOY8Li4FRJe/KvhoNFFxo0m6fNuFUO8QJUk= @@ -674,6 +684,7 @@ github.com/ipfs/go-bitswap v0.1.2/go.mod h1:qxSWS4NXGs7jQ6zQvoPY3+NmOfHHG47mhkiL github.com/ipfs/go-bitswap v0.5.1/go.mod h1:P+ckC87ri1xFLvk74NlXdP0Kj9RmWAh4+H78sC6Qopo= github.com/ipfs/go-bitswap v0.6.0/go.mod h1:Hj3ZXdOC5wBJvENtdqsixmzzRukqd8EHLxZLZc3mzRA= github.com/ipfs/go-bitswap v0.11.0 h1:j1WVvhDX1yhG32NTC9xfxnqycqYIlhzEzLXG/cU1HyQ= +github.com/ipfs/go-bitswap v0.11.0/go.mod h1:05aE8H3XOU+LXpTedeAS0OZpcO1WFsj5niYQH9a1Tmk= github.com/ipfs/go-block-format v0.0.1/go.mod h1:DK/YYcsSUIVAFNwo/KZCdIIbpN0ROH/baNLgayt4pFc= github.com/ipfs/go-block-format v0.0.2/go.mod h1:AWR46JfpcObNfg3ok2JHDUfdiHRgWhJgCQF+KIgOPJY= github.com/ipfs/go-block-format v0.0.3/go.mod h1:4LmD4ZUw0mhO+JSKdpWwrzATiEfM7WWgQ8H5l6P8MVk= @@ -854,6 +865,7 @@ github.com/ipld/edelweiss v0.2.0 h1:KfAZBP8eeJtrLxLhi7r3N0cBCo7JmwSRhOJp3WSpNjk= github.com/ipld/edelweiss v0.2.0/go.mod h1:FJAzJRCep4iI8FOFlRriN9n0b7OuX3T/S9++NpBDmA4= github.com/ipld/go-car v0.5.0 h1:kcCEa3CvYMs0iE5BzD5sV7O2EwMiCIp3uF8tA6APQT8= github.com/ipld/go-car/v2 v2.5.1 h1:U2ux9JS23upEgrJScW8VQuxmE94560kYxj9CQUpcfmk= +github.com/ipld/go-car/v2 v2.5.1/go.mod h1:jKjGOqoCj5zn6KjnabD6JbnCsMntqU2hLiU6baZVO3E= github.com/ipld/go-codec-dagpb v1.3.0/go.mod h1:ga4JTU3abYApDC3pZ00BC2RSvC3qfBb9MSJkMLSwnhA= github.com/ipld/go-codec-dagpb v1.5.0 h1:RspDRdsJpLfgCI0ONhTAnbHdySGD4t+LHSPK4X1+R0k= github.com/ipld/go-codec-dagpb v1.5.0/go.mod h1:0yRIutEFD8o1DGVqw4RSHh+BUTlJA9XWldxaaWR/o4g= @@ -875,6 +887,7 @@ github.com/jbenet/go-cienv v0.0.0-20150120210510-1bb1476777ec/go.mod h1:rGaEvXB4 github.com/jbenet/go-cienv v0.1.0 h1:Vc/s0QbQtoxX8MwwSLWWh+xNNZvM3Lw7NsTcHrvvhMc= github.com/jbenet/go-cienv v0.1.0/go.mod h1:TqNnHUmJgXau0nCzC7kXWeotg3J9W34CUv5Djy1+FlA= github.com/jbenet/go-random v0.0.0-20190219211222-123a90aedc0c h1:uUx61FiAa1GI6ZmVd2wf2vULeQZIKG66eybjNXKYCz4= +github.com/jbenet/go-random v0.0.0-20190219211222-123a90aedc0c/go.mod h1:sdx1xVM9UuLw1tXnhJWN3piypTUO3vCIHYmG15KE/dU= github.com/jbenet/go-temp-err-catcher v0.0.0-20150120210811-aac704a3f4f2/go.mod h1:8GXXJV31xl8whumTzdZsTt3RnUIiPqzkyf7mxToRCMs= github.com/jbenet/go-temp-err-catcher v0.1.0 h1:zpb3ZH6wIE8Shj2sKS+khgRvf7T7RABoLk/+KKHggpk= github.com/jbenet/go-temp-err-catcher v0.1.0/go.mod h1:0kJRvmDZXNMIiJirNPEYfhpPwbGVtZVWC34vc5WLsDk= @@ -908,6 +921,7 @@ github.com/json-iterator/go v1.1.8/go.mod h1:KdQUCv79m/52Kvf8AW2vK1V8akMuk1QjK/u github.com/json-iterator/go v1.1.9/go.mod h1:KdQUCv79m/52Kvf8AW2vK1V8akMuk1QjK/uOdHXbAo4= github.com/json-iterator/go v1.1.10/go.mod h1:KdQUCv79m/52Kvf8AW2vK1V8akMuk1QjK/uOdHXbAo4= github.com/json-iterator/go v1.1.12 h1:PV8peI4a0ysnczrg+LtxykD8LfKY9ML6u2jnxaEnrnM= +github.com/json-iterator/go v1.1.12/go.mod h1:e30LSqwooZae/UwlEbR2852Gd8hjQvJoHmT4TnhNGBo= github.com/jstemmer/go-junit-report v0.0.0-20190106144839-af01ea7f8024/go.mod h1:6v2b51hI/fHJwM22ozAgKL4VKDeJcHhJFhtBdhmNjmU= github.com/jstemmer/go-junit-report v0.9.1/go.mod h1:Brl9GWCQeLvo8nXZwPNNblvFj/XSXhF0NWZEnDohbsk= github.com/jtolds/gls v4.2.1+incompatible/go.mod h1:QJZ7F/aHp+rZTRtaJ1ow/lLfFfVYBRgL+9YlvaHOwJU= @@ -970,11 +984,14 @@ github.com/kr/text v0.1.0/go.mod h1:4Jbv+DJW3UT/LiOwJeYQe1efqtUx/iVham/4vfdArNI= github.com/kr/text v0.2.0 h1:5Nx0Ya0ZqY2ygV366QzturHI13Jq95ApcVaJBhpS+AY= github.com/kr/text v0.2.0/go.mod h1:eLer722TekiGuMkidMxC/pM04lWEeraHUUmBw8l2grE= github.com/kylelemons/godebug v1.1.0 h1:RPNrshWIDI6G2gRW9EHilWtl7Z6Sb1BR0xunSBf0SNc= +github.com/kylelemons/godebug v1.1.0/go.mod h1:9/0rRGxNHcop5bhtWyNeEfOS8JIWk580+fNqagV/RAw= github.com/labstack/echo/v4 v4.5.0/go.mod h1:czIriw4a0C1dFun+ObrXp7ok03xON0N1awStJ6ArI7Y= github.com/labstack/gommon v0.3.0/go.mod h1:MULnywXg0yavhxWKc+lOruYdAhDwPK9wf0OL7NoOu+k= github.com/leanovate/gopter v0.2.9 h1:fQjYxZaynp97ozCzfOyOuAGOU4aU/z37zf/tOujFk7c= +github.com/leanovate/gopter v0.2.9/go.mod h1:U2L/78B+KVFIx2VmW6onHJQzXtFb+p5y3y2Sh+Jxxv8= github.com/leodido/go-urn v1.2.0/go.mod h1:+8+nEpDfqqsY+g338gtMEUOtuK+4dEMhiQEgxpxOKII= github.com/leodido/go-urn v1.2.4 h1:XlAE/cm/ms7TE/VMVoduSpNBoyc2dOxHs5MZSwAN63Q= +github.com/leodido/go-urn v1.2.4/go.mod h1:7ZrI8mTSeBSHl/UaRyKQW1qZeMgak41ANeCNaVckg+4= github.com/libp2p/go-addr-util v0.0.1/go.mod h1:4ac6O7n9rIAKB1dnd+s8IbbMXkt+oBpzX4/+RACcnlQ= github.com/libp2p/go-addr-util v0.0.2/go.mod h1:Ecd6Fb3yIuLzq4bD7VcywcVSBtefcAwnUISBM3WG15E= github.com/libp2p/go-buffer-pool v0.0.1/go.mod h1:xtyIz9PMobb13WaxR6Zo1Pd1zXJKYg0a8KiIvDp3TzQ= @@ -1101,6 +1118,7 @@ github.com/libp2p/go-libp2p-testing v0.1.2-0.20200422005655-8775583591d8/go.mod github.com/libp2p/go-libp2p-testing v0.3.0/go.mod h1:efZkql4UZ7OVsEfaxNHZPzIehtsBXMrXnCfJIgDti5g= github.com/libp2p/go-libp2p-testing v0.4.0/go.mod h1:Q+PFXYoiYFN5CAEG2w3gLPEzotlKsNSbKQ/lImlOWF0= github.com/libp2p/go-libp2p-testing v0.12.0 h1:EPvBb4kKMWO29qP4mZGyhVzUyR25dvfUIK5WDu6iPUA= +github.com/libp2p/go-libp2p-testing v0.12.0/go.mod h1:KcGDRXyN7sQCllucn1cOOS+Dmm7ujhfEyXQL5lvkcPg= github.com/libp2p/go-libp2p-tls v0.1.3/go.mod h1:wZfuewxOndz5RTnCAxFliGjvYSDA40sKitV4c50uI1M= github.com/libp2p/go-libp2p-transport-upgrader v0.1.1/go.mod h1:IEtA6or8JUbsV07qPW4r01GnTenLW4oi3lOPbUMGJJA= github.com/libp2p/go-libp2p-transport-upgrader v0.2.0/go.mod h1:mQcrHj4asu6ArfSoMuyojOdjx73Q47cYD7s5+gZOlns= @@ -1284,6 +1302,7 @@ github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd/go.mod h1:6dJ github.com/modern-go/reflect2 v0.0.0-20180701023420-4b7aa43c6742/go.mod h1:bx2lNnkwVCuqBIxFjflWJWanXIb3RllmbCylyMrvgv0= github.com/modern-go/reflect2 v1.0.1/go.mod h1:bx2lNnkwVCuqBIxFjflWJWanXIb3RllmbCylyMrvgv0= github.com/modern-go/reflect2 v1.0.2 h1:xBagoLtFs94CBntxluKeaWgTMpvLxC4ur3nMaC9Gz0M= +github.com/modern-go/reflect2 v1.0.2/go.mod h1:yWuevngMOJpCy52FWWMvUC8ws7m/LJsjYzDa0/r8luk= github.com/moul/http2curl v1.0.0/go.mod h1:8UbvGypXm98wA/IqH45anm5Y2Z6ep6O31QGOAZ3H0fQ= github.com/mr-tron/base58 v1.1.0/go.mod h1:xcD2VGqlgYjBdcBLw+TuYLr8afG+Hj8g2eTVqeSzSU8= github.com/mr-tron/base58 v1.1.1/go.mod h1:xcD2VGqlgYjBdcBLw+TuYLr8afG+Hj8g2eTVqeSzSU8= @@ -1397,6 +1416,7 @@ github.com/onsi/gomega v1.9.0/go.mod h1:Ho0h+IUsWyvy1OpqCwxlQ/21gkhVunqlU8fDGcoT github.com/onsi/gomega v1.10.1/go.mod h1:iN09h71vgCQne3DLsj+A5owkum+a2tYe+TOCB1ybHNo= github.com/onsi/gomega v1.16.0/go.mod h1:HnhC7FXeEQY45zxNK3PPoIUhzk/80Xly9PcubAlGdZY= github.com/onsi/gomega v1.27.8 h1:gegWiwZjBsf2DgiSbf5hpokZ98JVDMcWkUiigk6/KXc= +github.com/onsi/gomega v1.27.8/go.mod h1:2J8vzI/s+2shY9XHRApDkdgPo1TKT7P2u6fXeJKFnNQ= github.com/op/go-logging v0.0.0-20160315200505-970db520ece7/go.mod h1:HzydrMdWErDVzsI23lYNej1Htcns9BCg93Dk0bBINWk= github.com/opencontainers/runtime-spec v1.0.2 h1:UfAcuLBJB9Coz72x1hgl8O5RVzTdNiaglX6v2DM6FI0= github.com/opencontainers/runtime-spec v1.0.2/go.mod h1:jwyrGlmzljRJv/Fgzds9SsS/C5hL+LL3ko9hs6T5lQ0= @@ -1423,8 +1443,10 @@ github.com/pelletier/go-toml v1.2.0/go.mod h1:5z9KED0ma1S8pY6P1sdut58dfprrGBbd/9 github.com/pelletier/go-toml v1.7.0 h1:7utD74fnzVc/cpcyy8sjrlFr5vYpypUixARcHIMIGuI= github.com/pelletier/go-toml v1.7.0/go.mod h1:vwGMzjaWMwyfHwgIBhI2YUM4fB6nL6lVAvS1LBMMhTE= github.com/pelletier/go-toml/v2 v2.0.8 h1:0ctb6s9mE31h0/lhu+J6OPmVeDxJn+kYnJc2jZR9tGQ= +github.com/pelletier/go-toml/v2 v2.0.8/go.mod h1:vuYfssBdrU2XDZ9bYydBu6t+6a6PYNcZljzZR9VXg+4= github.com/performancecopilot/speed v3.0.0+incompatible/go.mod h1:/CLtqpZ5gBg1M9iaPbIdPPGyKcA8hKdoy6hAWba7Yac= github.com/petar/GoLLRB v0.0.0-20210522233825-ae3b015fd3e9 h1:1/WtZae0yGtPq+TI6+Tv1WTxkukpXeMlviSxvL7SRgk= +github.com/petar/GoLLRB v0.0.0-20210522233825-ae3b015fd3e9/go.mod h1:x3N5drFsm2uilKKuuYo6LdyD8vZAW55sH/9w+pbo1sw= github.com/pierrec/lz4 v1.0.2-0.20190131084431-473cd7ce01a1/go.mod h1:3/3N9NVKO0jef7pBehbT1qWhCMrIgbYNnFAZCqQ5LRc= github.com/pierrec/lz4 v2.0.5+incompatible/go.mod h1:pdkljMzZIN41W+lC3N2tnIh5sFi+IEE17M5jbnwPHcY= github.com/pierrec/lz4 v2.6.1+incompatible/go.mod h1:pdkljMzZIN41W+lC3N2tnIh5sFi+IEE17M5jbnwPHcY= @@ -1597,6 +1619,7 @@ github.com/stretchr/objx v0.1.1/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+ github.com/stretchr/objx v0.4.0/go.mod h1:YvHI0jy2hoMjB+UWwv71VJQ9isScKT/TqJzVSSt89Yw= github.com/stretchr/objx v0.5.0/go.mod h1:Yh+to48EsGEfYuaHDzXPcE3xhTkx73EhmCGUpEOglKo= github.com/stretchr/objx v0.5.2 h1:xuMeJ0Sdp5ZMRXx/aWO6RZxdr3beISkG5/G/aIRr3pY= +github.com/stretchr/objx v0.5.2/go.mod h1:FRsXN1f5AsAjCGJKqEizvkpNtU+EGNCLh3NxZ/8L+MA= github.com/stretchr/testify v1.2.2/go.mod h1:a8OnRcib4nhh0OaRAV+Yts87kKdq0PP7pXfy6kDkUVs= github.com/stretchr/testify v1.3.0/go.mod h1:M5WIy9Dh21IEIfnGCwXGc5bZfKNJtfHm1UVUgZn+9EI= github.com/stretchr/testify v1.4.0/go.mod h1:j7eGeouHqKxXV5pUuKE4zz7dFj8WfuZ+81PSLYec5m4= @@ -1615,6 +1638,7 @@ github.com/syndtr/goleveldb v1.0.1-0.20210819022825-2ae1ddf74ef7 h1:epCh84lMvA70 github.com/syndtr/goleveldb v1.0.1-0.20210819022825-2ae1ddf74ef7/go.mod h1:q4W45IWZaF22tdD+VEXcAWRA037jwmWEB5VWYORlTpc= github.com/tarm/serial v0.0.0-20180830185346-98f6abe2eb07/go.mod h1:kDXzergiv9cbyO7IOYJZWg1U88JhDg3PB6klq9Hg2pA= github.com/thoas/go-funk v0.9.1 h1:O549iLZqPpTUQ10ykd26sZhzD+rmR5pWhuElrhbC20M= +github.com/thoas/go-funk v0.9.1/go.mod h1:+IWnUfUmFO1+WVYQWQtIJHeRRdaIyyYglZN7xzUPe4Q= github.com/tklauser/go-sysconf v0.3.12 h1:0QaGUFOdQaIVdPgfITYzaTegZvdCjmYO52cSFAEVmqU= github.com/tklauser/go-sysconf v0.3.12/go.mod h1:Ho14jnntGE1fpdOqQEEaiKRpvIavV0hSfmBq8nJbHYI= github.com/tklauser/numcpus v0.6.1 h1:ng9scYS7az0Bk4OZLvrNXNSAO2Pxr1XXRAPyjhIx+Fk= @@ -1632,6 +1656,7 @@ github.com/ugorji/go v1.1.7/go.mod h1:kZn38zHttfInRq0xu/PH0az30d+z6vm202qpg1oXVM github.com/ugorji/go/codec v0.0.0-20181204163529-d75b2dcb6bc8/go.mod h1:VFNgLljTbGfSG7qAOspJ7OScBnGdDN/yBr0sguwnwf0= github.com/ugorji/go/codec v1.1.7/go.mod h1:Ax+UKWsSmolVDwsd+7N3ZtXu+yMGCf907BLYF3GoBXY= github.com/ugorji/go/codec v1.2.11 h1:BMaWp1Bb6fHwEtbplGBGJ498wD+LKlNSl25MjdZY4dU= +github.com/ugorji/go/codec v1.2.11/go.mod h1:UNopzCgEMSXjBc6AOMqYvWC1ktqTAfzJZUZgYf6w6lg= github.com/urfave/cli v1.20.0/go.mod h1:70zkFmudgCuE/ngEzBv17Jvp/497gISqfk5gWijbERA= github.com/urfave/cli v1.22.1/go.mod h1:Gos4lmkARVdJ6EkW0WaNv/tZAAMe9V7XWyB60NtXRu0= github.com/urfave/cli v1.22.2/go.mod h1:Gos4lmkARVdJ6EkW0WaNv/tZAAMe9V7XWyB60NtXRu0= @@ -1655,6 +1680,7 @@ github.com/wangjia184/sortedset v0.0.0-20160527075905-f5d03557ba30/go.mod h1:Yko github.com/warpfork/go-testmark v0.3.0/go.mod h1:jhEf8FVxd+F17juRubpmut64NEG6I2rgkUhlcqqXwE0= github.com/warpfork/go-testmark v0.9.0/go.mod h1:jhEf8FVxd+F17juRubpmut64NEG6I2rgkUhlcqqXwE0= github.com/warpfork/go-testmark v0.10.0 h1:E86YlUMYfwIacEsQGlnTvjk1IgYkyTGjPhF0RnwTCmw= +github.com/warpfork/go-testmark v0.10.0/go.mod h1:jhEf8FVxd+F17juRubpmut64NEG6I2rgkUhlcqqXwE0= github.com/warpfork/go-wish v0.0.0-20180510122957-5ad1f5abf436/go.mod h1:x6AKhvSSexNrVSrViXSHUEbICjmGXhtgABaHIySUSGw= github.com/warpfork/go-wish v0.0.0-20190328234359-8b3e70f8e830/go.mod h1:x6AKhvSSexNrVSrViXSHUEbICjmGXhtgABaHIySUSGw= github.com/warpfork/go-wish v0.0.0-20200122115046-b9ea61034e4a/go.mod h1:x6AKhvSSexNrVSrViXSHUEbICjmGXhtgABaHIySUSGw= @@ -1665,6 +1691,7 @@ github.com/wealdtech/go-merkletree v1.0.0/go.mod h1:cdil512d/8ZC7Kx3bfrDvGMQXB25 github.com/whyrusleeping/base32 v0.0.0-20170828182744-c30ac30633cc h1:BCPnHtcboadS0DvysUuJXZ4lWVv5Bh5i7+tbIyi+ck4= github.com/whyrusleeping/base32 v0.0.0-20170828182744-c30ac30633cc/go.mod h1:r45hJU7yEoA81k6MWNhpMj/kms0n14dkzkxYHoB96UM= github.com/whyrusleeping/cbor v0.0.0-20171005072247-63513f603b11 h1:5HZfQkwe0mIfyDmc1Em5GqlNRzcdtlv4HTNmdpt7XH0= +github.com/whyrusleeping/cbor v0.0.0-20171005072247-63513f603b11/go.mod h1:Wlo/SzPmxVp6vXpGt/zaXhHH0fn4IxgqZc82aKg6bpQ= github.com/whyrusleeping/cbor-gen v0.0.0-20200123233031-1cdf64d27158/go.mod h1:Xj/M2wWU+QdTdRbu/L/1dIZY8/Wb2K9pAhtroQuxJJI= github.com/whyrusleeping/cbor-gen v0.0.0-20230126041949-52956bd4c9aa h1:EyA027ZAkuaCLoxVX4r1TZMPy1d31fM6hbfQ4OU4I5o= github.com/whyrusleeping/cbor-gen v0.0.0-20230126041949-52956bd4c9aa/go.mod h1:fgkXqYy7bV2cFeIEOkVTZS/WjXARfBqSH6Q2qHL33hQ= @@ -1755,6 +1782,7 @@ go.uber.org/goleak v1.0.0/go.mod h1:8a7PlsEVH3e/a/GLqe5IIrQx6GzcnRmZEufDUTk4A7A= go.uber.org/goleak v1.1.11-0.20210813005559-691160354723/go.mod h1:cwTWslyiVhfpKIDGSZEM2HlOvcqm+tG4zioyIeLoqMQ= go.uber.org/goleak v1.1.12/go.mod h1:cwTWslyiVhfpKIDGSZEM2HlOvcqm+tG4zioyIeLoqMQ= go.uber.org/goleak v1.3.0 h1:2K3zAYmnTNqV73imy9J1T3WC+gmCePx2hEGkimedGto= +go.uber.org/goleak v1.3.0/go.mod h1:CoHD4mav9JJNrW/WLlf7HGZPjdw8EucARQHekz1X6bE= go.uber.org/multierr v1.1.0/go.mod h1:wR5kodmAFQ0UK8QlbwjlSNy0Z68gJhDJUG5sjR94q/0= go.uber.org/multierr v1.3.0/go.mod h1:VgVr7evmIr6uPjLBxg28wmKNXyqE9akIJ5XnfpiKl+4= go.uber.org/multierr v1.5.0/go.mod h1:FeouvMocqHpRaaGuG9EjoKcStLC43Zu/fmqdUMPcKYU= diff --git a/opcodes.txt b/opcodes.txt new file mode 100644 index 000000000..426694921 --- /dev/null +++ b/opcodes.txt @@ -0,0 +1,9478 @@ +[ + { + "pc": 0, + "op": "PUSH1", + "gas": 944080, + "gasCost": 3, + "depth": 1 + }, + { + "pc": 2, + "op": "PUSH1", + "gas": 944077, + "gasCost": 3, + "depth": 1 + }, + { + "pc": 4, + "op": "MSTORE", + "gas": 944074, + "gasCost": 12, + "depth": 1 + }, + { + "pc": 5, + "op": "PUSH1", + "gas": 944062, + "gasCost": 3, + "depth": 1 + }, + { + "pc": 7, + "op": "CALLDATASIZE", + "gas": 944059, + "gasCost": 2, + "depth": 1 + }, + { + "pc": 8, + "op": "LT", + "gas": 944057, + "gasCost": 3, + "depth": 1 + }, + { + "pc": 9, + "op": "PUSH2", + "gas": 944054, + "gasCost": 3, + "depth": 1 + }, + { + "pc": 12, + "op": "JUMPI", + "gas": 944051, + "gasCost": 10, + "depth": 1 + }, + { + "pc": 13, + "op": "PUSH1", + "gas": 944041, + "gasCost": 3, + "depth": 1 + }, + { + "pc": 15, + "op": "CALLDATALOAD", + "gas": 944038, + "gasCost": 3, + "depth": 1 + }, + { + "pc": 16, + "op": "PUSH1", + "gas": 944035, + "gasCost": 3, + "depth": 1 + }, + { + "pc": 18, + "op": "SHR", + "gas": 944032, + "gasCost": 3, + "depth": 1 + }, + { + "pc": 19, + "op": "DUP1", + "gas": 944029, + "gasCost": 3, + "depth": 1 + }, + { + "pc": 20, + "op": "PUSH4", + "gas": 944026, + "gasCost": 3, + "depth": 1 + }, + { + "pc": 25, + "op": "EQ", + "gas": 944023, + "gasCost": 3, + "depth": 1 + }, + { + "pc": 26, + "op": "PUSH2", + "gas": 944020, + "gasCost": 3, + "depth": 1 + }, + { + "pc": 29, + "op": "JUMPI", + "gas": 944017, + "gasCost": 10, + "depth": 1 + }, + { + "pc": 30, + "op": "DUP1", + "gas": 944007, + "gasCost": 3, + "depth": 1 + }, + { + "pc": 31, + "op": "PUSH4", + "gas": 944004, + "gasCost": 3, + "depth": 1 + }, + { + "pc": 36, + "op": "EQ", + "gas": 944001, + "gasCost": 3, + "depth": 1 + }, + { + "pc": 37, + "op": "PUSH2", + "gas": 943998, + "gasCost": 3, + "depth": 1 + }, + { + "pc": 40, + "op": "JUMPI", + "gas": 943995, + "gasCost": 10, + "depth": 1 + }, + { + "pc": 41, + "op": "DUP1", + "gas": 943985, + "gasCost": 3, + "depth": 1 + }, + { + "pc": 42, + "op": "PUSH4", + "gas": 943982, + "gasCost": 3, + "depth": 1 + }, + { + "pc": 47, + "op": "EQ", + "gas": 943979, + "gasCost": 3, + "depth": 1 + }, + { + "pc": 48, + "op": "PUSH2", + "gas": 943976, + "gasCost": 3, + "depth": 1 + }, + { + "pc": 51, + "op": "JUMPI", + "gas": 943973, + "gasCost": 10, + "depth": 1 + }, + { + "pc": 52, + "op": "DUP1", + "gas": 943963, + "gasCost": 3, + "depth": 1 + }, + { + "pc": 53, + "op": "PUSH4", + "gas": 943960, + "gasCost": 3, + "depth": 1 + }, + { + "pc": 58, + "op": "EQ", + "gas": 943957, + "gasCost": 3, + "depth": 1 + }, + { + "pc": 59, + "op": "PUSH2", + "gas": 943954, + "gasCost": 3, + "depth": 1 + }, + { + "pc": 62, + "op": "JUMPI", + "gas": 943951, + "gasCost": 10, + "depth": 1 + }, + { + "pc": 63, + "op": "DUP1", + "gas": 943941, + "gasCost": 3, + "depth": 1 + }, + { + "pc": 64, + "op": "PUSH4", + "gas": 943938, + "gasCost": 3, + "depth": 1 + }, + { + "pc": 69, + "op": "EQ", + "gas": 943935, + "gasCost": 3, + "depth": 1 + }, + { + "pc": 70, + "op": "PUSH2", + "gas": 943932, + "gasCost": 3, + "depth": 1 + }, + { + "pc": 73, + "op": "JUMPI", + "gas": 943929, + "gasCost": 10, + "depth": 1 + }, + { + "pc": 74, + "op": "PUSH2", + "gas": 943919, + "gasCost": 3, + "depth": 1 + }, + { + "pc": 77, + "op": "JUMP", + "gas": 943916, + "gasCost": 8, + "depth": 1 + }, + { + "pc": 93, + "op": "JUMPDEST", + "gas": 943908, + "gasCost": 1, + "depth": 1 + }, + { + "pc": 94, + "op": "PUSH2", + "gas": 943907, + "gasCost": 3, + "depth": 1 + }, + { + "pc": 97, + "op": "PUSH2", + "gas": 943904, + "gasCost": 3, + "depth": 1 + }, + { + "pc": 100, + "op": "JUMP", + "gas": 943901, + "gasCost": 8, + "depth": 1 + }, + { + "pc": 254, + "op": "JUMPDEST", + "gas": 943893, + "gasCost": 1, + "depth": 1 + }, + { + "pc": 255, + "op": "PUSH2", + "gas": 943892, + "gasCost": 3, + "depth": 1 + }, + { + "pc": 258, + "op": "PUSH2", + "gas": 943889, + "gasCost": 3, + "depth": 1 + }, + { + "pc": 261, + "op": "JUMP", + "gas": 943886, + "gasCost": 8, + "depth": 1 + }, + { + "pc": 667, + "op": "JUMPDEST", + "gas": 943878, + "gasCost": 1, + "depth": 1 + }, + { + "pc": 668, + "op": "PUSH2", + "gas": 943877, + "gasCost": 3, + "depth": 1 + }, + { + "pc": 671, + "op": "PUSH2", + "gas": 943874, + "gasCost": 3, + "depth": 1 + }, + { + "pc": 674, + "op": "JUMP", + "gas": 943871, + "gasCost": 8, + "depth": 1 + }, + { + "pc": 872, + "op": "JUMPDEST", + "gas": 943863, + "gasCost": 1, + "depth": 1 + }, + { + "pc": 873, + "op": "PUSH1", + "gas": 943862, + "gasCost": 3, + "depth": 1 + }, + { + "pc": 875, + "op": "PUSH32", + "gas": 943859, + "gasCost": 3, + "depth": 1 + }, + { + "pc": 908, + "op": "JUMPDEST", + "gas": 943856, + "gasCost": 1, + "depth": 1 + }, + { + "pc": 909, + "op": "SLOAD", + "gas": 943855, + "gasCost": 100, + "depth": 1, + "storage": { + "b53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103": "000000000000000000000000264aae078cc695f7d0b66260895aee9d4e83e730" + } + }, + { + "pc": 910, + "op": "PUSH1", + "gas": 943755, + "gasCost": 3, + "depth": 1 + }, + { + "pc": 912, + "op": "PUSH1", + "gas": 943752, + "gasCost": 3, + "depth": 1 + }, + { + "pc": 914, + "op": "PUSH1", + "gas": 943749, + "gasCost": 3, + "depth": 1 + }, + { + "pc": 916, + "op": "SHL", + "gas": 943746, + "gasCost": 3, + "depth": 1 + }, + { + "pc": 917, + "op": "SUB", + "gas": 943743, + "gasCost": 3, + "depth": 1 + }, + { + "pc": 918, + "op": "AND", + "gas": 943740, + "gasCost": 3, + "depth": 1 + }, + { + "pc": 919, + "op": "SWAP2", + "gas": 943737, + "gasCost": 3, + "depth": 1 + }, + { + "pc": 920, + "op": "SWAP1", + "gas": 943734, + "gasCost": 3, + "depth": 1 + }, + { + "pc": 921, + "op": "POP", + "gas": 943731, + "gasCost": 2, + "depth": 1 + }, + { + "pc": 922, + "op": "JUMP", + "gas": 943729, + "gasCost": 8, + "depth": 1 + }, + { + "pc": 675, + "op": "JUMPDEST", + "gas": 943721, + "gasCost": 1, + "depth": 1 + }, + { + "pc": 676, + "op": "PUSH1", + "gas": 943720, + "gasCost": 3, + "depth": 1 + }, + { + "pc": 678, + "op": "PUSH1", + "gas": 943717, + "gasCost": 3, + "depth": 1 + }, + { + "pc": 680, + "op": "PUSH1", + "gas": 943714, + "gasCost": 3, + "depth": 1 + }, + { + "pc": 682, + "op": "SHL", + "gas": 943711, + "gasCost": 3, + "depth": 1 + }, + { + "pc": 683, + "op": "SUB", + "gas": 943708, + "gasCost": 3, + "depth": 1 + }, + { + "pc": 684, + "op": "AND", + "gas": 943705, + "gasCost": 3, + "depth": 1 + }, + { + "pc": 685, + "op": "CALLER", + "gas": 943702, + "gasCost": 2, + "depth": 1 + }, + { + "pc": 686, + "op": "PUSH1", + "gas": 943700, + "gasCost": 3, + "depth": 1 + }, + { + "pc": 688, + "op": "PUSH1", + "gas": 943697, + "gasCost": 3, + "depth": 1 + }, + { + "pc": 690, + "op": "PUSH1", + "gas": 943694, + "gasCost": 3, + "depth": 1 + }, + { + "pc": 692, + "op": "SHL", + "gas": 943691, + "gasCost": 3, + "depth": 1 + }, + { + "pc": 693, + "op": "SUB", + "gas": 943688, + "gasCost": 3, + "depth": 1 + }, + { + "pc": 694, + "op": "AND", + "gas": 943685, + "gasCost": 3, + "depth": 1 + }, + { + "pc": 695, + "op": "EQ", + "gas": 943682, + "gasCost": 3, + "depth": 1 + }, + { + "pc": 696, + "op": "ISZERO", + "gas": 943679, + "gasCost": 3, + "depth": 1 + }, + { + "pc": 697, + "op": "PUSH2", + "gas": 943676, + "gasCost": 3, + "depth": 1 + }, + { + "pc": 700, + "op": "JUMPI", + "gas": 943673, + "gasCost": 10, + "depth": 1 + }, + { + "pc": 278, + "op": "JUMPDEST", + "gas": 943663, + "gasCost": 1, + "depth": 1 + }, + { + "pc": 279, + "op": "JUMP", + "gas": 943662, + "gasCost": 8, + "depth": 1 + }, + { + "pc": 262, + "op": "JUMPDEST", + "gas": 943654, + "gasCost": 1, + "depth": 1 + }, + { + "pc": 263, + "op": "PUSH2", + "gas": 943653, + "gasCost": 3, + "depth": 1 + }, + { + "pc": 266, + "op": "PUSH2", + "gas": 943650, + "gasCost": 3, + "depth": 1 + }, + { + "pc": 269, + "op": "PUSH2", + "gas": 943647, + "gasCost": 3, + "depth": 1 + }, + { + "pc": 272, + "op": "JUMP", + "gas": 943644, + "gasCost": 8, + "depth": 1 + }, + { + "pc": 826, + "op": "JUMPDEST", + "gas": 943636, + "gasCost": 1, + "depth": 1 + }, + { + "pc": 827, + "op": "PUSH1", + "gas": 943635, + "gasCost": 3, + "depth": 1 + }, + { + "pc": 829, + "op": "PUSH2", + "gas": 943632, + "gasCost": 3, + "depth": 1 + }, + { + "pc": 832, + "op": "PUSH2", + "gas": 943629, + "gasCost": 3, + "depth": 1 + }, + { + "pc": 835, + "op": "JUMP", + "gas": 943626, + "gasCost": 8, + "depth": 1 + }, + { + "pc": 1269, + "op": "JUMPDEST", + "gas": 943618, + "gasCost": 1, + "depth": 1 + }, + { + "pc": 1270, + "op": "PUSH1", + "gas": 943617, + "gasCost": 3, + "depth": 1 + }, + { + "pc": 1272, + "op": "PUSH32", + "gas": 943614, + "gasCost": 3, + "depth": 1 + }, + { + "pc": 1305, + "op": "PUSH2", + "gas": 943611, + "gasCost": 3, + "depth": 1 + }, + { + "pc": 1308, + "op": "JUMP", + "gas": 943608, + "gasCost": 8, + "depth": 1 + }, + { + "pc": 908, + "op": "JUMPDEST", + "gas": 943600, + "gasCost": 1, + "depth": 1 + }, + { + "pc": 909, + "op": "SLOAD", + "gas": 943599, + "gasCost": 100, + "depth": 1, + "storage": { + "360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc": "00000000000000000000000060571c8f4b52954a24a5e7306d435e951528d963", + "b53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103": "000000000000000000000000264aae078cc695f7d0b66260895aee9d4e83e730" + } + }, + { + "pc": 910, + "op": "PUSH1", + "gas": 943499, + "gasCost": 3, + "depth": 1 + }, + { + "pc": 912, + "op": "PUSH1", + "gas": 943496, + "gasCost": 3, + "depth": 1 + }, + { + "pc": 914, + "op": "PUSH1", + "gas": 943493, + "gasCost": 3, + "depth": 1 + }, + { + "pc": 916, + "op": "SHL", + "gas": 943490, + "gasCost": 3, + "depth": 1 + }, + { + "pc": 917, + "op": "SUB", + "gas": 943487, + "gasCost": 3, + "depth": 1 + }, + { + "pc": 918, + "op": "AND", + "gas": 943484, + "gasCost": 3, + "depth": 1 + }, + { + "pc": 919, + "op": "SWAP2", + "gas": 943481, + "gasCost": 3, + "depth": 1 + }, + { + "pc": 920, + "op": "SWAP1", + "gas": 943478, + "gasCost": 3, + "depth": 1 + }, + { + "pc": 921, + "op": "POP", + "gas": 943475, + "gasCost": 2, + "depth": 1 + }, + { + "pc": 922, + "op": "JUMP", + "gas": 943473, + "gasCost": 8, + "depth": 1 + }, + { + "pc": 507, + "op": "JUMPDEST", + "gas": 943465, + "gasCost": 1, + "depth": 1 + }, + { + "pc": 508, + "op": "SWAP1", + "gas": 943464, + "gasCost": 3, + "depth": 1 + }, + { + "pc": 509, + "op": "POP", + "gas": 943461, + "gasCost": 2, + "depth": 1 + }, + { + "pc": 510, + "op": "SWAP1", + "gas": 943459, + "gasCost": 3, + "depth": 1 + }, + { + "pc": 511, + "op": "JUMP", + "gas": 943456, + "gasCost": 8, + "depth": 1 + }, + { + "pc": 273, + "op": "JUMPDEST", + "gas": 943448, + "gasCost": 1, + "depth": 1 + }, + { + "pc": 274, + "op": "PUSH2", + "gas": 943447, + "gasCost": 3, + "depth": 1 + }, + { + "pc": 277, + "op": "JUMP", + "gas": 943444, + "gasCost": 8, + "depth": 1 + }, + { + "pc": 836, + "op": "JUMPDEST", + "gas": 943436, + "gasCost": 1, + "depth": 1 + }, + { + "pc": 837, + "op": "CALLDATASIZE", + "gas": 943435, + "gasCost": 2, + "depth": 1 + }, + { + "pc": 838, + "op": "PUSH1", + "gas": 943433, + "gasCost": 3, + "depth": 1 + }, + { + "pc": 840, + "op": "DUP1", + "gas": 943430, + "gasCost": 3, + "depth": 1 + }, + { + "pc": 841, + "op": "CALLDATACOPY", + "gas": 943427, + "gasCost": 212, + "depth": 1 + }, + { + "pc": 842, + "op": "PUSH1", + "gas": 943215, + "gasCost": 3, + "depth": 1 + }, + { + "pc": 844, + "op": "DUP1", + "gas": 943212, + "gasCost": 3, + "depth": 1 + }, + { + "pc": 845, + "op": "CALLDATASIZE", + "gas": 943209, + "gasCost": 2, + "depth": 1 + }, + { + "pc": 846, + "op": "PUSH1", + "gas": 943207, + "gasCost": 3, + "depth": 1 + }, + { + "pc": 848, + "op": "DUP5", + "gas": 943204, + "gasCost": 3, + "depth": 1 + }, + { + "pc": 849, + "op": "GAS", + "gas": 943201, + "gasCost": 2, + "depth": 1 + }, + { + "pc": 850, + "op": "DELEGATECALL", + "gas": 943199, + "gasCost": 928503, + "depth": 1 + }, + { + "pc": 0, + "op": "PUSH1", + "gas": 925903, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 2, + "op": "PUSH1", + "gas": 925900, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 4, + "op": "MSTORE", + "gas": 925897, + "gasCost": 12, + "depth": 2 + }, + { + "pc": 5, + "op": "CALLVALUE", + "gas": 925885, + "gasCost": 2, + "depth": 2 + }, + { + "pc": 6, + "op": "DUP1", + "gas": 925883, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 7, + "op": "ISZERO", + "gas": 925880, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 8, + "op": "PUSH2", + "gas": 925877, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 11, + "op": "JUMPI", + "gas": 925874, + "gasCost": 10, + "depth": 2 + }, + { + "pc": 16, + "op": "JUMPDEST", + "gas": 925864, + "gasCost": 1, + "depth": 2 + }, + { + "pc": 17, + "op": "POP", + "gas": 925863, + "gasCost": 2, + "depth": 2 + }, + { + "pc": 18, + "op": "PUSH1", + "gas": 925861, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 20, + "op": "CALLDATASIZE", + "gas": 925858, + "gasCost": 2, + "depth": 2 + }, + { + "pc": 21, + "op": "LT", + "gas": 925856, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 22, + "op": "PUSH2", + "gas": 925853, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 25, + "op": "JUMPI", + "gas": 925850, + "gasCost": 10, + "depth": 2 + }, + { + "pc": 26, + "op": "PUSH1", + "gas": 925840, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 28, + "op": "CALLDATALOAD", + "gas": 925837, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 29, + "op": "PUSH1", + "gas": 925834, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 31, + "op": "SHR", + "gas": 925831, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 32, + "op": "DUP1", + "gas": 925828, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 33, + "op": "PUSH4", + "gas": 925825, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 38, + "op": "GT", + "gas": 925822, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 39, + "op": "PUSH2", + "gas": 925819, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 42, + "op": "JUMPI", + "gas": 925816, + "gasCost": 10, + "depth": 2 + }, + { + "pc": 326, + "op": "JUMPDEST", + "gas": 925806, + "gasCost": 1, + "depth": 2 + }, + { + "pc": 327, + "op": "DUP1", + "gas": 925805, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 328, + "op": "PUSH4", + "gas": 925802, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 333, + "op": "GT", + "gas": 925799, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 334, + "op": "PUSH2", + "gas": 925796, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 337, + "op": "JUMPI", + "gas": 925793, + "gasCost": 10, + "depth": 2 + }, + { + "pc": 338, + "op": "DUP1", + "gas": 925783, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 339, + "op": "PUSH4", + "gas": 925780, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 344, + "op": "GT", + "gas": 925777, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 345, + "op": "PUSH2", + "gas": 925774, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 348, + "op": "JUMPI", + "gas": 925771, + "gasCost": 10, + "depth": 2 + }, + { + "pc": 419, + "op": "JUMPDEST", + "gas": 925761, + "gasCost": 1, + "depth": 2 + }, + { + "pc": 420, + "op": "DUP1", + "gas": 925760, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 421, + "op": "PUSH4", + "gas": 925757, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 426, + "op": "EQ", + "gas": 925754, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 427, + "op": "PUSH2", + "gas": 925751, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 430, + "op": "JUMPI", + "gas": 925748, + "gasCost": 10, + "depth": 2 + }, + { + "pc": 431, + "op": "DUP1", + "gas": 925738, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 432, + "op": "PUSH4", + "gas": 925735, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 437, + "op": "EQ", + "gas": 925732, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 438, + "op": "PUSH2", + "gas": 925729, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 441, + "op": "JUMPI", + "gas": 925726, + "gasCost": 10, + "depth": 2 + }, + { + "pc": 841, + "op": "JUMPDEST", + "gas": 925716, + "gasCost": 1, + "depth": 2 + }, + { + "pc": 842, + "op": "PUSH2", + "gas": 925715, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 845, + "op": "PUSH2", + "gas": 925712, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 848, + "op": "CALLDATASIZE", + "gas": 925709, + "gasCost": 2, + "depth": 2 + }, + { + "pc": 849, + "op": "PUSH1", + "gas": 925707, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 851, + "op": "PUSH2", + "gas": 925704, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 854, + "op": "JUMP", + "gas": 925701, + "gasCost": 8, + "depth": 2 + }, + { + "pc": 12874, + "op": "JUMPDEST", + "gas": 925693, + "gasCost": 1, + "depth": 2 + }, + { + "pc": 12875, + "op": "PUSH1", + "gas": 925692, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 12877, + "op": "DUP1", + "gas": 925689, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 12878, + "op": "PUSH1", + "gas": 925686, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 12880, + "op": "DUP1", + "gas": 925683, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 12881, + "op": "PUSH1", + "gas": 925680, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 12883, + "op": "DUP1", + "gas": 925677, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 12884, + "op": "PUSH1", + "gas": 925674, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 12886, + "op": "DUP8", + "gas": 925671, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 12887, + "op": "DUP10", + "gas": 925668, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 12888, + "op": "SUB", + "gas": 925665, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 12889, + "op": "SLT", + "gas": 925662, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 12890, + "op": "ISZERO", + "gas": 925659, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 12891, + "op": "PUSH2", + "gas": 925656, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 12894, + "op": "JUMPI", + "gas": 925653, + "gasCost": 10, + "depth": 2 + }, + { + "pc": 12899, + "op": "JUMPDEST", + "gas": 925643, + "gasCost": 1, + "depth": 2 + }, + { + "pc": 12900, + "op": "DUP7", + "gas": 925642, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 12901, + "op": "CALLDATALOAD", + "gas": 925639, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 12902, + "op": "SWAP6", + "gas": 925636, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 12903, + "op": "POP", + "gas": 925633, + "gasCost": 2, + "depth": 2 + }, + { + "pc": 12904, + "op": "PUSH1", + "gas": 925631, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 12906, + "op": "DUP8", + "gas": 925628, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 12907, + "op": "ADD", + "gas": 925625, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 12908, + "op": "CALLDATALOAD", + "gas": 925622, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 12909, + "op": "PUSH1", + "gas": 925619, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 12911, + "op": "PUSH1", + "gas": 925616, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 12913, + "op": "PUSH1", + "gas": 925613, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 12915, + "op": "SHL", + "gas": 925610, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 12916, + "op": "SUB", + "gas": 925607, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 12917, + "op": "DUP1", + "gas": 925604, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 12918, + "op": "DUP3", + "gas": 925601, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 12919, + "op": "GT", + "gas": 925598, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 12920, + "op": "ISZERO", + "gas": 925595, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 12921, + "op": "PUSH2", + "gas": 925592, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 12924, + "op": "JUMPI", + "gas": 925589, + "gasCost": 10, + "depth": 2 + }, + { + "pc": 12929, + "op": "JUMPDEST", + "gas": 925579, + "gasCost": 1, + "depth": 2 + }, + { + "pc": 12930, + "op": "SWAP1", + "gas": 925578, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 12931, + "op": "DUP9", + "gas": 925575, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 12932, + "op": "ADD", + "gas": 925572, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 12933, + "op": "SWAP1", + "gas": 925569, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 12934, + "op": "PUSH1", + "gas": 925566, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 12936, + "op": "DUP3", + "gas": 925563, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 12937, + "op": "DUP12", + "gas": 925560, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 12938, + "op": "SUB", + "gas": 925557, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 12939, + "op": "SLT", + "gas": 925554, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 12940, + "op": "ISZERO", + "gas": 925551, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 12941, + "op": "PUSH2", + "gas": 925548, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 12944, + "op": "JUMPI", + "gas": 925545, + "gasCost": 10, + "depth": 2 + }, + { + "pc": 12949, + "op": "JUMPDEST", + "gas": 925535, + "gasCost": 1, + "depth": 2 + }, + { + "pc": 12950, + "op": "SWAP1", + "gas": 925534, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 12951, + "op": "SWAP6", + "gas": 925531, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 12952, + "op": "POP", + "gas": 925528, + "gasCost": 2, + "depth": 2 + }, + { + "pc": 12953, + "op": "PUSH1", + "gas": 925526, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 12955, + "op": "DUP9", + "gas": 925523, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 12956, + "op": "ADD", + "gas": 925520, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 12957, + "op": "CALLDATALOAD", + "gas": 925517, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 12958, + "op": "SWAP1", + "gas": 925514, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 12959, + "op": "DUP1", + "gas": 925511, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 12960, + "op": "DUP3", + "gas": 925508, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 12961, + "op": "GT", + "gas": 925505, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 12962, + "op": "ISZERO", + "gas": 925502, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 12963, + "op": "PUSH2", + "gas": 925499, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 12966, + "op": "JUMPI", + "gas": 925496, + "gasCost": 10, + "depth": 2 + }, + { + "pc": 12971, + "op": "JUMPDEST", + "gas": 925486, + "gasCost": 1, + "depth": 2 + }, + { + "pc": 12972, + "op": "POP", + "gas": 925485, + "gasCost": 2, + "depth": 2 + }, + { + "pc": 12973, + "op": "PUSH2", + "gas": 925483, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 12976, + "op": "DUP10", + "gas": 925480, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 12977, + "op": "DUP3", + "gas": 925477, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 12978, + "op": "DUP11", + "gas": 925474, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 12979, + "op": "ADD", + "gas": 925471, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 12980, + "op": "PUSH2", + "gas": 925468, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 12983, + "op": "JUMP", + "gas": 925465, + "gasCost": 8, + "depth": 2 + }, + { + "pc": 12616, + "op": "JUMPDEST", + "gas": 925457, + "gasCost": 1, + "depth": 2 + }, + { + "pc": 12617, + "op": "PUSH1", + "gas": 925456, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 12619, + "op": "PUSH1", + "gas": 925453, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 12621, + "op": "DUP3", + "gas": 925450, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 12622, + "op": "DUP5", + "gas": 925447, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 12623, + "op": "SUB", + "gas": 925444, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 12624, + "op": "SLT", + "gas": 925441, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 12625, + "op": "ISZERO", + "gas": 925438, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 12626, + "op": "PUSH2", + "gas": 925435, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 12629, + "op": "JUMPI", + "gas": 925432, + "gasCost": 10, + "depth": 2 + }, + { + "pc": 12634, + "op": "JUMPDEST", + "gas": 925422, + "gasCost": 1, + "depth": 2 + }, + { + "pc": 12635, + "op": "POP", + "gas": 925421, + "gasCost": 2, + "depth": 2 + }, + { + "pc": 12636, + "op": "SWAP2", + "gas": 925419, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 12637, + "op": "SWAP1", + "gas": 925416, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 12638, + "op": "POP", + "gas": 925413, + "gasCost": 2, + "depth": 2 + }, + { + "pc": 12639, + "op": "JUMP", + "gas": 925411, + "gasCost": 8, + "depth": 2 + }, + { + "pc": 12984, + "op": "JUMPDEST", + "gas": 925403, + "gasCost": 1, + "depth": 2 + }, + { + "pc": 12985, + "op": "SWAP5", + "gas": 925402, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 12986, + "op": "POP", + "gas": 925399, + "gasCost": 2, + "depth": 2 + }, + { + "pc": 12987, + "op": "POP", + "gas": 925397, + "gasCost": 2, + "depth": 2 + }, + { + "pc": 12988, + "op": "PUSH1", + "gas": 925395, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 12990, + "op": "DUP8", + "gas": 925392, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 12991, + "op": "ADD", + "gas": 925389, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 12992, + "op": "CALLDATALOAD", + "gas": 925386, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 12993, + "op": "SWAP3", + "gas": 925383, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 12994, + "op": "POP", + "gas": 925380, + "gasCost": 2, + "depth": 2 + }, + { + "pc": 12995, + "op": "PUSH1", + "gas": 925378, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 12997, + "op": "DUP8", + "gas": 925375, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 12998, + "op": "ADD", + "gas": 925372, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 12999, + "op": "CALLDATALOAD", + "gas": 925369, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 13000, + "op": "SWAP2", + "gas": 925366, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 13001, + "op": "POP", + "gas": 925363, + "gasCost": 2, + "depth": 2 + }, + { + "pc": 13002, + "op": "PUSH1", + "gas": 925361, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 13004, + "op": "DUP8", + "gas": 925358, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 13005, + "op": "ADD", + "gas": 925355, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 13006, + "op": "CALLDATALOAD", + "gas": 925352, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 13007, + "op": "SWAP1", + "gas": 925349, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 13008, + "op": "POP", + "gas": 925346, + "gasCost": 2, + "depth": 2 + }, + { + "pc": 13009, + "op": "SWAP3", + "gas": 925344, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 13010, + "op": "SWAP6", + "gas": 925341, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 13011, + "op": "POP", + "gas": 925338, + "gasCost": 2, + "depth": 2 + }, + { + "pc": 13012, + "op": "SWAP3", + "gas": 925336, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 13013, + "op": "SWAP6", + "gas": 925333, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 13014, + "op": "POP", + "gas": 925330, + "gasCost": 2, + "depth": 2 + }, + { + "pc": 13015, + "op": "SWAP3", + "gas": 925328, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 13016, + "op": "SWAP6", + "gas": 925325, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 13017, + "op": "JUMP", + "gas": 925322, + "gasCost": 8, + "depth": 2 + }, + { + "pc": 855, + "op": "JUMPDEST", + "gas": 925314, + "gasCost": 1, + "depth": 2 + }, + { + "pc": 856, + "op": "PUSH2", + "gas": 925313, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 859, + "op": "JUMP", + "gas": 925310, + "gasCost": 8, + "depth": 2 + }, + { + "pc": 3844, + "op": "JUMPDEST", + "gas": 925302, + "gasCost": 1, + "depth": 2 + }, + { + "pc": 3845, + "op": "PUSH1", + "gas": 925301, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 3847, + "op": "MLOAD", + "gas": 925298, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 3848, + "op": "PUSH1", + "gas": 925295, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 3850, + "op": "SWAP1", + "gas": 925292, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 3851, + "op": "PUSH32", + "gas": 925289, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 3884, + "op": "SWAP1", + "gas": 925286, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 3885, + "op": "PUSH1", + "gas": 925283, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 3887, + "op": "SWAP1", + "gas": 925280, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 3888, + "op": "LOG2", + "gas": 925277, + "gasCost": 1125, + "depth": 2 + }, + { + "pc": 3889, + "op": "CALLER", + "gas": 924152, + "gasCost": 2, + "depth": 2 + }, + { + "pc": 3890, + "op": "PUSH1", + "gas": 924150, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 3892, + "op": "SWAP1", + "gas": 924147, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 3893, + "op": "DUP2", + "gas": 924144, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 3894, + "op": "MSTORE", + "gas": 924141, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 3895, + "op": "PUSH1", + "gas": 924138, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 3897, + "op": "PUSH1", + "gas": 924135, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 3899, + "op": "MSTORE", + "gas": 924132, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 3900, + "op": "PUSH1", + "gas": 924129, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 3902, + "op": "SWAP1", + "gas": 924126, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 3903, + "op": "KECCAK256", + "gas": 924123, + "gasCost": 42, + "depth": 2 + }, + { + "pc": 3904, + "op": "SLOAD", + "gas": 924081, + "gasCost": 2100, + "depth": 2, + "storage": { + "360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc": "00000000000000000000000060571c8f4b52954a24a5e7306d435e951528d963", + "b53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103": "000000000000000000000000264aae078cc695f7d0b66260895aee9d4e83e730", + "d343c84be1c85a440922a059e46ad21d2f412ae5bec5ee65c2c0d39dd877c54d": "0000000000000000000000000000000000000000000000000000000000000001" + } + }, + { + "pc": 3905, + "op": "PUSH1", + "gas": 921981, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 3907, + "op": "AND", + "gas": 921978, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 3908, + "op": "PUSH2", + "gas": 921975, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 3911, + "op": "JUMPI", + "gas": 921972, + "gasCost": 10, + "depth": 2 + }, + { + "pc": 3936, + "op": "JUMPDEST", + "gas": 921962, + "gasCost": 1, + "depth": 2 + }, + { + "pc": 3937, + "op": "PUSH1", + "gas": 921961, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 3939, + "op": "SLOAD", + "gas": 921958, + "gasCost": 2100, + "depth": 2, + "storage": { + "0000000000000000000000000000000000000000000000000000000000000003": "0000000000000000000000000000000000000000000000000000000000000000", + "360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc": "00000000000000000000000060571c8f4b52954a24a5e7306d435e951528d963", + "b53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103": "000000000000000000000000264aae078cc695f7d0b66260895aee9d4e83e730", + "d343c84be1c85a440922a059e46ad21d2f412ae5bec5ee65c2c0d39dd877c54d": "0000000000000000000000000000000000000000000000000000000000000001" + } + }, + { + "pc": 3940, + "op": "PUSH1", + "gas": 919858, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 3942, + "op": "SLOAD", + "gas": 919855, + "gasCost": 2100, + "depth": 2, + "storage": { + "0000000000000000000000000000000000000000000000000000000000000002": "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000003": "0000000000000000000000000000000000000000000000000000000000000000", + "360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc": "00000000000000000000000060571c8f4b52954a24a5e7306d435e951528d963", + "b53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103": "000000000000000000000000264aae078cc695f7d0b66260895aee9d4e83e730", + "d343c84be1c85a440922a059e46ad21d2f412ae5bec5ee65c2c0d39dd877c54d": "0000000000000000000000000000000000000000000000000000000000000001" + } + }, + { + "pc": 3943, + "op": "PUSH1", + "gas": 917755, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 3945, + "op": "MLOAD", + "gas": 917752, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 3946, + "op": "PUSH4", + "gas": 917749, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 3951, + "op": "PUSH1", + "gas": 917746, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 3953, + "op": "SHL", + "gas": 917743, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 3954, + "op": "DUP2", + "gas": 917740, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 3955, + "op": "MSTORE", + "gas": 917737, + "gasCost": 9, + "depth": 2 + }, + { + "pc": 3956, + "op": "PUSH1", + "gas": 917728, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 3958, + "op": "PUSH1", + "gas": 917725, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 3960, + "op": "PUSH1", + "gas": 917722, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 3962, + "op": "SHL", + "gas": 917719, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 3963, + "op": "SUB", + "gas": 917716, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 3964, + "op": "SWAP3", + "gas": 917713, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 3965, + "op": "DUP4", + "gas": 917710, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 3966, + "op": "AND", + "gas": 917707, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 3967, + "op": "SWAP3", + "gas": 917704, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 3968, + "op": "PUSH4", + "gas": 917701, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 3973, + "op": "SWAP3", + "gas": 917698, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 3974, + "op": "PUSH2", + "gas": 917695, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 3977, + "op": "SWAP3", + "gas": 917692, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 3978, + "op": "DUP10", + "gas": 917689, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 3979, + "op": "SWAP3", + "gas": 917686, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 3980, + "op": "SWAP1", + "gas": 917683, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 3981, + "op": "SWAP2", + "gas": 917680, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 3982, + "op": "AND", + "gas": 917677, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 3983, + "op": "SWAP1", + "gas": 917674, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 3984, + "op": "DUP11", + "gas": 917671, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 3985, + "op": "SWAP1", + "gas": 917668, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 3986, + "op": "PUSH1", + "gas": 917665, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 3988, + "op": "ADD", + "gas": 917662, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 3989, + "op": "PUSH2", + "gas": 917659, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 3992, + "op": "JUMP", + "gas": 917656, + "gasCost": 8, + "depth": 2 + }, + { + "pc": 15266, + "op": "JUMPDEST", + "gas": 917648, + "gasCost": 1, + "depth": 2 + }, + { + "pc": 15267, + "op": "PUSH1", + "gas": 917647, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 15269, + "op": "DUP2", + "gas": 917644, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 15270, + "op": "MSTORE", + "gas": 917641, + "gasCost": 6, + "depth": 2 + }, + { + "pc": 15271, + "op": "DUP4", + "gas": 917635, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 15272, + "op": "CALLDATALOAD", + "gas": 917632, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 15273, + "op": "PUSH1", + "gas": 917629, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 15275, + "op": "DUP3", + "gas": 917626, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 15276, + "op": "ADD", + "gas": 917623, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 15277, + "op": "MSTORE", + "gas": 917620, + "gasCost": 12, + "depth": 2 + }, + { + "pc": 15278, + "op": "PUSH1", + "gas": 917608, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 15280, + "op": "DUP5", + "gas": 917605, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 15281, + "op": "ADD", + "gas": 917602, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 15282, + "op": "CALLDATALOAD", + "gas": 917599, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 15283, + "op": "PUSH1", + "gas": 917596, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 15285, + "op": "DUP3", + "gas": 917593, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 15286, + "op": "ADD", + "gas": 917590, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 15287, + "op": "MSTORE", + "gas": 917587, + "gasCost": 6, + "depth": 2 + }, + { + "pc": 15288, + "op": "PUSH4", + "gas": 917581, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 15293, + "op": "PUSH2", + "gas": 917578, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 15296, + "op": "PUSH1", + "gas": 917575, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 15298, + "op": "DUP7", + "gas": 917572, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 15299, + "op": "ADD", + "gas": 917569, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 15300, + "op": "PUSH2", + "gas": 917566, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 15303, + "op": "JUMP", + "gas": 917563, + "gasCost": 8, + "depth": 2 + }, + { + "pc": 14679, + "op": "JUMPDEST", + "gas": 917555, + "gasCost": 1, + "depth": 2 + }, + { + "pc": 14680, + "op": "DUP1", + "gas": 917554, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 14681, + "op": "CALLDATALOAD", + "gas": 917551, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 14682, + "op": "PUSH4", + "gas": 917548, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 14687, + "op": "DUP2", + "gas": 917545, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 14688, + "op": "AND", + "gas": 917542, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 14689, + "op": "DUP2", + "gas": 917539, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 14690, + "op": "EQ", + "gas": 917536, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 14691, + "op": "PUSH2", + "gas": 917533, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 14694, + "op": "JUMPI", + "gas": 917530, + "gasCost": 10, + "depth": 2 + }, + { + "pc": 13701, + "op": "JUMPDEST", + "gas": 917520, + "gasCost": 1, + "depth": 2 + }, + { + "pc": 13702, + "op": "SWAP2", + "gas": 917519, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 13703, + "op": "SWAP1", + "gas": 917516, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 13704, + "op": "POP", + "gas": 917513, + "gasCost": 2, + "depth": 2 + }, + { + "pc": 13705, + "op": "JUMP", + "gas": 917511, + "gasCost": 8, + "depth": 2 + }, + { + "pc": 15304, + "op": "JUMPDEST", + "gas": 917503, + "gasCost": 1, + "depth": 2 + }, + { + "pc": 15305, + "op": "AND", + "gas": 917502, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 15306, + "op": "PUSH1", + "gas": 917499, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 15308, + "op": "DUP3", + "gas": 917496, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 15309, + "op": "ADD", + "gas": 917493, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 15310, + "op": "MSTORE", + "gas": 917490, + "gasCost": 6, + "depth": 2 + }, + { + "pc": 15311, + "op": "PUSH1", + "gas": 917484, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 15313, + "op": "PUSH1", + "gas": 917481, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 15315, + "op": "DUP6", + "gas": 917478, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 15316, + "op": "ADD", + "gas": 917475, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 15317, + "op": "CALLDATALOAD", + "gas": 917472, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 15318, + "op": "PUSH1", + "gas": 917469, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 15320, + "op": "NOT", + "gas": 917466, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 15321, + "op": "DUP7", + "gas": 917463, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 15322, + "op": "CALLDATASIZE", + "gas": 917460, + "gasCost": 2, + "depth": 2 + }, + { + "pc": 15323, + "op": "SUB", + "gas": 917458, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 15324, + "op": "ADD", + "gas": 917455, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 15325, + "op": "DUP2", + "gas": 917452, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 15326, + "op": "SLT", + "gas": 917449, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 15327, + "op": "PUSH2", + "gas": 917446, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 15330, + "op": "JUMPI", + "gas": 917443, + "gasCost": 10, + "depth": 2 + }, + { + "pc": 15335, + "op": "JUMPDEST", + "gas": 917433, + "gasCost": 1, + "depth": 2 + }, + { + "pc": 15336, + "op": "DUP6", + "gas": 917432, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 15337, + "op": "ADD", + "gas": 917429, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 15338, + "op": "DUP1", + "gas": 917426, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 15339, + "op": "CALLDATALOAD", + "gas": 917423, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 15340, + "op": "PUSH1", + "gas": 917420, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 15342, + "op": "PUSH1", + "gas": 917417, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 15344, + "op": "PUSH1", + "gas": 917414, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 15346, + "op": "SHL", + "gas": 917411, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 15347, + "op": "SUB", + "gas": 917408, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 15348, + "op": "DUP2", + "gas": 917405, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 15349, + "op": "GT", + "gas": 917402, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 15350, + "op": "ISZERO", + "gas": 917399, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 15351, + "op": "PUSH2", + "gas": 917396, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 15354, + "op": "JUMPI", + "gas": 917393, + "gasCost": 10, + "depth": 2 + }, + { + "pc": 15359, + "op": "JUMPDEST", + "gas": 917383, + "gasCost": 1, + "depth": 2 + }, + { + "pc": 15360, + "op": "DUP1", + "gas": 917382, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 15361, + "op": "PUSH1", + "gas": 917379, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 15363, + "op": "SHL", + "gas": 917376, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 15364, + "op": "CALLDATASIZE", + "gas": 917373, + "gasCost": 2, + "depth": 2 + }, + { + "pc": 15365, + "op": "SUB", + "gas": 917371, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 15366, + "op": "DUP8", + "gas": 917368, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 15367, + "op": "SGT", + "gas": 917365, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 15368, + "op": "ISZERO", + "gas": 917362, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 15369, + "op": "PUSH2", + "gas": 917359, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 15372, + "op": "JUMPI", + "gas": 917356, + "gasCost": 10, + "depth": 2 + }, + { + "pc": 15377, + "op": "JUMPDEST", + "gas": 917346, + "gasCost": 1, + "depth": 2 + }, + { + "pc": 15378, + "op": "PUSH1", + "gas": 917345, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 15380, + "op": "PUSH1", + "gas": 917342, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 15382, + "op": "DUP6", + "gas": 917339, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 15383, + "op": "ADD", + "gas": 917336, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 15384, + "op": "MSTORE", + "gas": 917333, + "gasCost": 6, + "depth": 2 + }, + { + "pc": 15385, + "op": "PUSH2", + "gas": 917327, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 15388, + "op": "PUSH1", + "gas": 917324, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 15390, + "op": "DUP6", + "gas": 917321, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 15391, + "op": "ADD", + "gas": 917318, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 15392, + "op": "DUP3", + "gas": 917315, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 15393, + "op": "PUSH1", + "gas": 917312, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 15395, + "op": "DUP6", + "gas": 917309, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 15396, + "op": "ADD", + "gas": 917306, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 15397, + "op": "PUSH2", + "gas": 917303, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 15400, + "op": "JUMP", + "gas": 917300, + "gasCost": 8, + "depth": 2 + }, + { + "pc": 14699, + "op": "JUMPDEST", + "gas": 917292, + "gasCost": 1, + "depth": 2 + }, + { + "pc": 14700, + "op": "DUP2", + "gas": 917291, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 14701, + "op": "DUP4", + "gas": 917288, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 14702, + "op": "MSTORE", + "gas": 917285, + "gasCost": 6, + "depth": 2 + }, + { + "pc": 14703, + "op": "PUSH1", + "gas": 917279, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 14705, + "op": "PUSH1", + "gas": 917276, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 14707, + "op": "DUP1", + "gas": 917273, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 14708, + "op": "DUP6", + "gas": 917270, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 14709, + "op": "ADD", + "gas": 917267, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 14710, + "op": "SWAP5", + "gas": 917264, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 14711, + "op": "POP", + "gas": 917261, + "gasCost": 2, + "depth": 2 + }, + { + "pc": 14712, + "op": "DUP3", + "gas": 917259, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 14713, + "op": "PUSH1", + "gas": 917256, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 14715, + "op": "JUMPDEST", + "gas": 917253, + "gasCost": 1, + "depth": 2 + }, + { + "pc": 14716, + "op": "DUP6", + "gas": 917252, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 14717, + "op": "DUP2", + "gas": 917249, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 14718, + "op": "LT", + "gas": 917246, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 14719, + "op": "ISZERO", + "gas": 917243, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 14720, + "op": "PUSH2", + "gas": 917240, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 14723, + "op": "JUMPI", + "gas": 917237, + "gasCost": 10, + "depth": 2 + }, + { + "pc": 14724, + "op": "PUSH1", + "gas": 917227, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 14726, + "op": "DUP1", + "gas": 917224, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 14727, + "op": "PUSH2", + "gas": 917221, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 14730, + "op": "DUP5", + "gas": 917218, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 14731, + "op": "PUSH2", + "gas": 917215, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 14734, + "op": "JUMP", + "gas": 917212, + "gasCost": 8, + "depth": 2 + }, + { + "pc": 13684, + "op": "JUMPDEST", + "gas": 917204, + "gasCost": 1, + "depth": 2 + }, + { + "pc": 13685, + "op": "DUP1", + "gas": 917203, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 13686, + "op": "CALLDATALOAD", + "gas": 917200, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 13687, + "op": "PUSH1", + "gas": 917197, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 13689, + "op": "DUP2", + "gas": 917194, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 13690, + "op": "AND", + "gas": 917191, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 13691, + "op": "DUP2", + "gas": 917188, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 13692, + "op": "EQ", + "gas": 917185, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 13693, + "op": "PUSH2", + "gas": 917182, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 13696, + "op": "JUMPI", + "gas": 917179, + "gasCost": 10, + "depth": 2 + }, + { + "pc": 13701, + "op": "JUMPDEST", + "gas": 917169, + "gasCost": 1, + "depth": 2 + }, + { + "pc": 13702, + "op": "SWAP2", + "gas": 917168, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 13703, + "op": "SWAP1", + "gas": 917165, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 13704, + "op": "POP", + "gas": 917162, + "gasCost": 2, + "depth": 2 + }, + { + "pc": 13705, + "op": "JUMP", + "gas": 917160, + "gasCost": 8, + "depth": 2 + }, + { + "pc": 14735, + "op": "JUMPDEST", + "gas": 917152, + "gasCost": 1, + "depth": 2 + }, + { + "pc": 14736, + "op": "AND", + "gas": 917151, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 14737, + "op": "DUP9", + "gas": 917148, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 14738, + "op": "MSTORE", + "gas": 917145, + "gasCost": 6, + "depth": 2 + }, + { + "pc": 14739, + "op": "DUP1", + "gas": 917139, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 14740, + "op": "PUSH2", + "gas": 917136, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 14743, + "op": "DUP6", + "gas": 917133, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 14744, + "op": "DUP6", + "gas": 917130, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 14745, + "op": "ADD", + "gas": 917127, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 14746, + "op": "PUSH2", + "gas": 917124, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 14749, + "op": "JUMP", + "gas": 917121, + "gasCost": 8, + "depth": 2 + }, + { + "pc": 13684, + "op": "JUMPDEST", + "gas": 917113, + "gasCost": 1, + "depth": 2 + }, + { + "pc": 13685, + "op": "DUP1", + "gas": 917112, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 13686, + "op": "CALLDATALOAD", + "gas": 917109, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 13687, + "op": "PUSH1", + "gas": 917106, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 13689, + "op": "DUP2", + "gas": 917103, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 13690, + "op": "AND", + "gas": 917100, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 13691, + "op": "DUP2", + "gas": 917097, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 13692, + "op": "EQ", + "gas": 917094, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 13693, + "op": "PUSH2", + "gas": 917091, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 13696, + "op": "JUMPI", + "gas": 917088, + "gasCost": 10, + "depth": 2 + }, + { + "pc": 13701, + "op": "JUMPDEST", + "gas": 917078, + "gasCost": 1, + "depth": 2 + }, + { + "pc": 13702, + "op": "SWAP2", + "gas": 917077, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 13703, + "op": "SWAP1", + "gas": 917074, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 13704, + "op": "POP", + "gas": 917071, + "gasCost": 2, + "depth": 2 + }, + { + "pc": 13705, + "op": "JUMP", + "gas": 917069, + "gasCost": 8, + "depth": 2 + }, + { + "pc": 14750, + "op": "JUMPDEST", + "gas": 917061, + "gasCost": 1, + "depth": 2 + }, + { + "pc": 14751, + "op": "AND", + "gas": 917060, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 14752, + "op": "DUP5", + "gas": 917057, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 14753, + "op": "DUP10", + "gas": 917054, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 14754, + "op": "ADD", + "gas": 917051, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 14755, + "op": "MSTORE", + "gas": 917048, + "gasCost": 6, + "depth": 2 + }, + { + "pc": 14756, + "op": "PUSH1", + "gas": 917042, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 14758, + "op": "DUP2", + "gas": 917039, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 14759, + "op": "PUSH2", + "gas": 917036, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 14762, + "op": "DUP3", + "gas": 917033, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 14763, + "op": "DUP7", + "gas": 917030, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 14764, + "op": "ADD", + "gas": 917027, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 14765, + "op": "PUSH2", + "gas": 917024, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 14768, + "op": "JUMP", + "gas": 917021, + "gasCost": 8, + "depth": 2 + }, + { + "pc": 13684, + "op": "JUMPDEST", + "gas": 917013, + "gasCost": 1, + "depth": 2 + }, + { + "pc": 13685, + "op": "DUP1", + "gas": 917012, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 13686, + "op": "CALLDATALOAD", + "gas": 917009, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 13687, + "op": "PUSH1", + "gas": 917006, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 13689, + "op": "DUP2", + "gas": 917003, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 13690, + "op": "AND", + "gas": 917000, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 13691, + "op": "DUP2", + "gas": 916997, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 13692, + "op": "EQ", + "gas": 916994, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 13693, + "op": "PUSH2", + "gas": 916991, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 13696, + "op": "JUMPI", + "gas": 916988, + "gasCost": 10, + "depth": 2 + }, + { + "pc": 13701, + "op": "JUMPDEST", + "gas": 916978, + "gasCost": 1, + "depth": 2 + }, + { + "pc": 13702, + "op": "SWAP2", + "gas": 916977, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 13703, + "op": "SWAP1", + "gas": 916974, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 13704, + "op": "POP", + "gas": 916971, + "gasCost": 2, + "depth": 2 + }, + { + "pc": 13705, + "op": "JUMP", + "gas": 916969, + "gasCost": 8, + "depth": 2 + }, + { + "pc": 14769, + "op": "JUMPDEST", + "gas": 916961, + "gasCost": 1, + "depth": 2 + }, + { + "pc": 14770, + "op": "AND", + "gas": 916960, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 14771, + "op": "SWAP1", + "gas": 916957, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 14772, + "op": "DUP10", + "gas": 916954, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 14773, + "op": "ADD", + "gas": 916951, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 14774, + "op": "MSTORE", + "gas": 916948, + "gasCost": 6, + "depth": 2 + }, + { + "pc": 14775, + "op": "POP", + "gas": 916942, + "gasCost": 2, + "depth": 2 + }, + { + "pc": 14776, + "op": "PUSH1", + "gas": 916940, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 14778, + "op": "PUSH4", + "gas": 916937, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 14783, + "op": "PUSH2", + "gas": 916934, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 14786, + "op": "DUP5", + "gas": 916931, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 14787, + "op": "DUP4", + "gas": 916928, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 14788, + "op": "ADD", + "gas": 916925, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 14789, + "op": "PUSH2", + "gas": 916922, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 14792, + "op": "JUMP", + "gas": 916919, + "gasCost": 8, + "depth": 2 + }, + { + "pc": 14679, + "op": "JUMPDEST", + "gas": 916911, + "gasCost": 1, + "depth": 2 + }, + { + "pc": 14680, + "op": "DUP1", + "gas": 916910, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 14681, + "op": "CALLDATALOAD", + "gas": 916907, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 14682, + "op": "PUSH4", + "gas": 916904, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 14687, + "op": "DUP2", + "gas": 916901, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 14688, + "op": "AND", + "gas": 916898, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 14689, + "op": "DUP2", + "gas": 916895, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 14690, + "op": "EQ", + "gas": 916892, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 14691, + "op": "PUSH2", + "gas": 916889, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 14694, + "op": "JUMPI", + "gas": 916886, + "gasCost": 10, + "depth": 2 + }, + { + "pc": 13701, + "op": "JUMPDEST", + "gas": 916876, + "gasCost": 1, + "depth": 2 + }, + { + "pc": 13702, + "op": "SWAP2", + "gas": 916875, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 13703, + "op": "SWAP1", + "gas": 916872, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 13704, + "op": "POP", + "gas": 916869, + "gasCost": 2, + "depth": 2 + }, + { + "pc": 13705, + "op": "JUMP", + "gas": 916867, + "gasCost": 8, + "depth": 2 + }, + { + "pc": 14793, + "op": "JUMPDEST", + "gas": 916859, + "gasCost": 1, + "depth": 2 + }, + { + "pc": 14794, + "op": "AND", + "gas": 916858, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 14795, + "op": "SWAP1", + "gas": 916855, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 14796, + "op": "DUP9", + "gas": 916852, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 14797, + "op": "ADD", + "gas": 916849, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 14798, + "op": "MSTORE", + "gas": 916846, + "gasCost": 6, + "depth": 2 + }, + { + "pc": 14799, + "op": "PUSH1", + "gas": 916840, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 14801, + "op": "SWAP7", + "gas": 916837, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 14802, + "op": "DUP8", + "gas": 916834, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 14803, + "op": "ADD", + "gas": 916831, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 14804, + "op": "SWAP7", + "gas": 916828, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 14805, + "op": "SWAP2", + "gas": 916825, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 14806, + "op": "SWAP1", + "gas": 916822, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 14807, + "op": "SWAP2", + "gas": 916819, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 14808, + "op": "ADD", + "gas": 916816, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 14809, + "op": "SWAP1", + "gas": 916813, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 14810, + "op": "PUSH1", + "gas": 916810, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 14812, + "op": "ADD", + "gas": 916807, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 14813, + "op": "PUSH2", + "gas": 916804, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 14816, + "op": "JUMP", + "gas": 916801, + "gasCost": 8, + "depth": 2 + }, + { + "pc": 14715, + "op": "JUMPDEST", + "gas": 916793, + "gasCost": 1, + "depth": 2 + }, + { + "pc": 14716, + "op": "DUP6", + "gas": 916792, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 14717, + "op": "DUP2", + "gas": 916789, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 14718, + "op": "LT", + "gas": 916786, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 14719, + "op": "ISZERO", + "gas": 916783, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 14720, + "op": "PUSH2", + "gas": 916780, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 14723, + "op": "JUMPI", + "gas": 916777, + "gasCost": 10, + "depth": 2 + }, + { + "pc": 14817, + "op": "JUMPDEST", + "gas": 916767, + "gasCost": 1, + "depth": 2 + }, + { + "pc": 14818, + "op": "POP", + "gas": 916766, + "gasCost": 2, + "depth": 2 + }, + { + "pc": 14819, + "op": "SWAP5", + "gas": 916764, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 14820, + "op": "SWAP6", + "gas": 916761, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 14821, + "op": "SWAP5", + "gas": 916758, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 14822, + "op": "POP", + "gas": 916755, + "gasCost": 2, + "depth": 2 + }, + { + "pc": 14823, + "op": "POP", + "gas": 916753, + "gasCost": 2, + "depth": 2 + }, + { + "pc": 14824, + "op": "POP", + "gas": 916751, + "gasCost": 2, + "depth": 2 + }, + { + "pc": 14825, + "op": "POP", + "gas": 916749, + "gasCost": 2, + "depth": 2 + }, + { + "pc": 14826, + "op": "POP", + "gas": 916747, + "gasCost": 2, + "depth": 2 + }, + { + "pc": 14827, + "op": "JUMP", + "gas": 916745, + "gasCost": 8, + "depth": 2 + }, + { + "pc": 15401, + "op": "JUMPDEST", + "gas": 916737, + "gasCost": 1, + "depth": 2 + }, + { + "pc": 15402, + "op": "SWAP2", + "gas": 916736, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 15403, + "op": "POP", + "gas": 916733, + "gasCost": 2, + "depth": 2 + }, + { + "pc": 15404, + "op": "POP", + "gas": 916731, + "gasCost": 2, + "depth": 2 + }, + { + "pc": 15405, + "op": "PUSH2", + "gas": 916729, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 15408, + "op": "PUSH1", + "gas": 916726, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 15410, + "op": "DUP5", + "gas": 916723, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 15411, + "op": "ADD", + "gas": 916720, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 15412, + "op": "DUP7", + "gas": 916717, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 15413, + "op": "PUSH1", + "gas": 916714, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 15415, + "op": "PUSH1", + "gas": 916711, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 15417, + "op": "PUSH1", + "gas": 916708, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 15419, + "op": "SHL", + "gas": 916705, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 15420, + "op": "SUB", + "gas": 916702, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 15421, + "op": "AND", + "gas": 916699, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 15422, + "op": "SWAP1", + "gas": 916696, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 15423, + "op": "MSTORE", + "gas": 916693, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 15424, + "op": "JUMP", + "gas": 916690, + "gasCost": 8, + "depth": 2 + }, + { + "pc": 15425, + "op": "JUMPDEST", + "gas": 916682, + "gasCost": 1, + "depth": 2 + }, + { + "pc": 15426, + "op": "DUP3", + "gas": 916681, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 15427, + "op": "DUP2", + "gas": 916678, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 15428, + "op": "SUB", + "gas": 916675, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 15429, + "op": "PUSH1", + "gas": 916672, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 15431, + "op": "DUP5", + "gas": 916669, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 15432, + "op": "ADD", + "gas": 916666, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 15433, + "op": "MSTORE", + "gas": 916663, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 15434, + "op": "PUSH2", + "gas": 916660, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 15437, + "op": "DUP2", + "gas": 916657, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 15438, + "op": "DUP6", + "gas": 916654, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 15439, + "op": "PUSH2", + "gas": 916651, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 15442, + "op": "JUMP", + "gas": 916648, + "gasCost": 8, + "depth": 2 + }, + { + "pc": 14938, + "op": "JUMPDEST", + "gas": 916640, + "gasCost": 1, + "depth": 2 + }, + { + "pc": 14939, + "op": "PUSH1", + "gas": 916639, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 14941, + "op": "PUSH4", + "gas": 916636, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 14946, + "op": "DUP1", + "gas": 916633, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 14947, + "op": "PUSH2", + "gas": 916630, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 14950, + "op": "DUP5", + "gas": 916627, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 14951, + "op": "PUSH2", + "gas": 916624, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 14954, + "op": "JUMP", + "gas": 916621, + "gasCost": 8, + "depth": 2 + }, + { + "pc": 14679, + "op": "JUMPDEST", + "gas": 916613, + "gasCost": 1, + "depth": 2 + }, + { + "pc": 14680, + "op": "DUP1", + "gas": 916612, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 14681, + "op": "CALLDATALOAD", + "gas": 916609, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 14682, + "op": "PUSH4", + "gas": 916606, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 14687, + "op": "DUP2", + "gas": 916603, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 14688, + "op": "AND", + "gas": 916600, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 14689, + "op": "DUP2", + "gas": 916597, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 14690, + "op": "EQ", + "gas": 916594, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 14691, + "op": "PUSH2", + "gas": 916591, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 14694, + "op": "JUMPI", + "gas": 916588, + "gasCost": 10, + "depth": 2 + }, + { + "pc": 13701, + "op": "JUMPDEST", + "gas": 916578, + "gasCost": 1, + "depth": 2 + }, + { + "pc": 13702, + "op": "SWAP2", + "gas": 916577, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 13703, + "op": "SWAP1", + "gas": 916574, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 13704, + "op": "POP", + "gas": 916571, + "gasCost": 2, + "depth": 2 + }, + { + "pc": 13705, + "op": "JUMP", + "gas": 916569, + "gasCost": 8, + "depth": 2 + }, + { + "pc": 14955, + "op": "JUMPDEST", + "gas": 916561, + "gasCost": 1, + "depth": 2 + }, + { + "pc": 14956, + "op": "AND", + "gas": 916560, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 14957, + "op": "DUP5", + "gas": 916557, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 14958, + "op": "MSTORE", + "gas": 916554, + "gasCost": 6, + "depth": 2 + }, + { + "pc": 14959, + "op": "DUP1", + "gas": 916548, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 14960, + "op": "PUSH2", + "gas": 916545, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 14963, + "op": "PUSH1", + "gas": 916542, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 14965, + "op": "DUP6", + "gas": 916539, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 14966, + "op": "ADD", + "gas": 916536, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 14967, + "op": "PUSH2", + "gas": 916533, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 14970, + "op": "JUMP", + "gas": 916530, + "gasCost": 8, + "depth": 2 + }, + { + "pc": 14679, + "op": "JUMPDEST", + "gas": 916522, + "gasCost": 1, + "depth": 2 + }, + { + "pc": 14680, + "op": "DUP1", + "gas": 916521, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 14681, + "op": "CALLDATALOAD", + "gas": 916518, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 14682, + "op": "PUSH4", + "gas": 916515, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 14687, + "op": "DUP2", + "gas": 916512, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 14688, + "op": "AND", + "gas": 916509, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 14689, + "op": "DUP2", + "gas": 916506, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 14690, + "op": "EQ", + "gas": 916503, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 14691, + "op": "PUSH2", + "gas": 916500, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 14694, + "op": "JUMPI", + "gas": 916497, + "gasCost": 10, + "depth": 2 + }, + { + "pc": 13701, + "op": "JUMPDEST", + "gas": 916487, + "gasCost": 1, + "depth": 2 + }, + { + "pc": 13702, + "op": "SWAP2", + "gas": 916486, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 13703, + "op": "SWAP1", + "gas": 916483, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 13704, + "op": "POP", + "gas": 916480, + "gasCost": 2, + "depth": 2 + }, + { + "pc": 13705, + "op": "JUMP", + "gas": 916478, + "gasCost": 8, + "depth": 2 + }, + { + "pc": 14971, + "op": "JUMPDEST", + "gas": 916470, + "gasCost": 1, + "depth": 2 + }, + { + "pc": 14972, + "op": "AND", + "gas": 916469, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 14973, + "op": "PUSH1", + "gas": 916466, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 14975, + "op": "DUP6", + "gas": 916463, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 14976, + "op": "ADD", + "gas": 916460, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 14977, + "op": "MSTORE", + "gas": 916457, + "gasCost": 6, + "depth": 2 + }, + { + "pc": 14978, + "op": "PUSH1", + "gas": 916451, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 14980, + "op": "DUP4", + "gas": 916448, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 14981, + "op": "ADD", + "gas": 916445, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 14982, + "op": "CALLDATALOAD", + "gas": 916442, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 14983, + "op": "PUSH1", + "gas": 916439, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 14985, + "op": "NOT", + "gas": 916436, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 14986, + "op": "DUP5", + "gas": 916433, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 14987, + "op": "CALLDATASIZE", + "gas": 916430, + "gasCost": 2, + "depth": 2 + }, + { + "pc": 14988, + "op": "SUB", + "gas": 916428, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 14989, + "op": "ADD", + "gas": 916425, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 14990, + "op": "DUP2", + "gas": 916422, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 14991, + "op": "SLT", + "gas": 916419, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 14992, + "op": "PUSH2", + "gas": 916416, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 14995, + "op": "JUMPI", + "gas": 916413, + "gasCost": 10, + "depth": 2 + }, + { + "pc": 15000, + "op": "JUMPDEST", + "gas": 916403, + "gasCost": 1, + "depth": 2 + }, + { + "pc": 15001, + "op": "PUSH1", + "gas": 916402, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 15003, + "op": "PUSH1", + "gas": 916399, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 15005, + "op": "DUP7", + "gas": 916396, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 15006, + "op": "ADD", + "gas": 916393, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 15007, + "op": "MSTORE", + "gas": 916390, + "gasCost": 6, + "depth": 2 + }, + { + "pc": 15008, + "op": "DUP4", + "gas": 916384, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 15009, + "op": "ADD", + "gas": 916381, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 15010, + "op": "DUP1", + "gas": 916378, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 15011, + "op": "CALLDATALOAD", + "gas": 916375, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 15012, + "op": "CALLDATASIZE", + "gas": 916372, + "gasCost": 2, + "depth": 2 + }, + { + "pc": 15013, + "op": "DUP3", + "gas": 916370, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 15014, + "op": "SWAP1", + "gas": 916367, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 15015, + "op": "SUB", + "gas": 916364, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 15016, + "op": "PUSH1", + "gas": 916361, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 15018, + "op": "NOT", + "gas": 916358, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 15019, + "op": "ADD", + "gas": 916355, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 15020, + "op": "DUP2", + "gas": 916352, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 15021, + "op": "SLT", + "gas": 916349, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 15022, + "op": "PUSH2", + "gas": 916346, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 15025, + "op": "JUMPI", + "gas": 916343, + "gasCost": 10, + "depth": 2 + }, + { + "pc": 15030, + "op": "JUMPDEST", + "gas": 916333, + "gasCost": 1, + "depth": 2 + }, + { + "pc": 15031, + "op": "PUSH1", + "gas": 916332, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 15033, + "op": "PUSH1", + "gas": 916329, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 15035, + "op": "DUP8", + "gas": 916326, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 15036, + "op": "ADD", + "gas": 916323, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 15037, + "op": "MSTORE", + "gas": 916320, + "gasCost": 13, + "depth": 2 + }, + { + "pc": 15038, + "op": "DUP2", + "gas": 916307, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 15039, + "op": "ADD", + "gas": 916304, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 15040, + "op": "DUP1", + "gas": 916301, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 15041, + "op": "CALLDATALOAD", + "gas": 916298, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 15042, + "op": "PUSH2", + "gas": 916295, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 15045, + "op": "DUP8", + "gas": 916292, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 15046, + "op": "ADD", + "gas": 916289, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 15047, + "op": "MSTORE", + "gas": 916286, + "gasCost": 12, + "depth": 2 + }, + { + "pc": 15048, + "op": "PUSH2", + "gas": 916274, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 15051, + "op": "PUSH1", + "gas": 916271, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 15053, + "op": "DUP3", + "gas": 916268, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 15054, + "op": "ADD", + "gas": 916265, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 15055, + "op": "DUP3", + "gas": 916262, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 15056, + "op": "PUSH2", + "gas": 916259, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 15059, + "op": "JUMP", + "gas": 916256, + "gasCost": 8, + "depth": 2 + }, + { + "pc": 14828, + "op": "JUMPDEST", + "gas": 916248, + "gasCost": 1, + "depth": 2 + }, + { + "pc": 14829, + "op": "PUSH1", + "gas": 916247, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 14831, + "op": "DUP1", + "gas": 916244, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 14832, + "op": "DUP4", + "gas": 916241, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 14833, + "op": "CALLDATALOAD", + "gas": 916238, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 14834, + "op": "PUSH1", + "gas": 916235, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 14836, + "op": "NOT", + "gas": 916232, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 14837, + "op": "DUP5", + "gas": 916229, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 14838, + "op": "CALLDATASIZE", + "gas": 916226, + "gasCost": 2, + "depth": 2 + }, + { + "pc": 14839, + "op": "SUB", + "gas": 916224, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 14840, + "op": "ADD", + "gas": 916221, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 14841, + "op": "DUP2", + "gas": 916218, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 14842, + "op": "SLT", + "gas": 916215, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 14843, + "op": "PUSH2", + "gas": 916212, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 14846, + "op": "JUMPI", + "gas": 916209, + "gasCost": 10, + "depth": 2 + }, + { + "pc": 14851, + "op": "JUMPDEST", + "gas": 916199, + "gasCost": 1, + "depth": 2 + }, + { + "pc": 14852, + "op": "DUP4", + "gas": 916198, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 14853, + "op": "ADD", + "gas": 916195, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 14854, + "op": "PUSH1", + "gas": 916192, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 14856, + "op": "DUP2", + "gas": 916189, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 14857, + "op": "ADD", + "gas": 916186, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 14858, + "op": "SWAP3", + "gas": 916183, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 14859, + "op": "POP", + "gas": 916180, + "gasCost": 2, + "depth": 2 + }, + { + "pc": 14860, + "op": "CALLDATALOAD", + "gas": 916178, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 14861, + "op": "SWAP1", + "gas": 916175, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 14862, + "op": "POP", + "gas": 916172, + "gasCost": 2, + "depth": 2 + }, + { + "pc": 14863, + "op": "PUSH1", + "gas": 916170, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 14865, + "op": "PUSH1", + "gas": 916167, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 14867, + "op": "PUSH1", + "gas": 916164, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 14869, + "op": "SHL", + "gas": 916161, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 14870, + "op": "SUB", + "gas": 916158, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 14871, + "op": "DUP2", + "gas": 916155, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 14872, + "op": "GT", + "gas": 916152, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 14873, + "op": "ISZERO", + "gas": 916149, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 14874, + "op": "PUSH2", + "gas": 916146, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 14877, + "op": "JUMPI", + "gas": 916143, + "gasCost": 10, + "depth": 2 + }, + { + "pc": 14882, + "op": "JUMPDEST", + "gas": 916133, + "gasCost": 1, + "depth": 2 + }, + { + "pc": 14883, + "op": "DUP1", + "gas": 916132, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 14884, + "op": "CALLDATASIZE", + "gas": 916129, + "gasCost": 2, + "depth": 2 + }, + { + "pc": 14885, + "op": "SUB", + "gas": 916127, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 14886, + "op": "DUP4", + "gas": 916124, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 14887, + "op": "SGT", + "gas": 916121, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 14888, + "op": "ISZERO", + "gas": 916118, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 14889, + "op": "PUSH2", + "gas": 916115, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 14892, + "op": "JUMPI", + "gas": 916112, + "gasCost": 10, + "depth": 2 + }, + { + "pc": 13083, + "op": "JUMPDEST", + "gas": 916102, + "gasCost": 1, + "depth": 2 + }, + { + "pc": 13084, + "op": "SWAP3", + "gas": 916101, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 13085, + "op": "POP", + "gas": 916098, + "gasCost": 2, + "depth": 2 + }, + { + "pc": 13086, + "op": "SWAP3", + "gas": 916096, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 13087, + "op": "SWAP1", + "gas": 916093, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 13088, + "op": "POP", + "gas": 916090, + "gasCost": 2, + "depth": 2 + }, + { + "pc": 13089, + "op": "JUMP", + "gas": 916088, + "gasCost": 8, + "depth": 2 + }, + { + "pc": 15060, + "op": "JUMPDEST", + "gas": 916080, + "gasCost": 1, + "depth": 2 + }, + { + "pc": 15061, + "op": "PUSH1", + "gas": 916079, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 15063, + "op": "PUSH2", + "gas": 916076, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 15066, + "op": "DUP10", + "gas": 916073, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 15067, + "op": "ADD", + "gas": 916070, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 15068, + "op": "MSTORE", + "gas": 916067, + "gasCost": 6, + "depth": 2 + }, + { + "pc": 15069, + "op": "PUSH2", + "gas": 916061, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 15072, + "op": "PUSH2", + "gas": 916058, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 15075, + "op": "DUP10", + "gas": 916055, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 15076, + "op": "ADD", + "gas": 916052, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 15077, + "op": "DUP3", + "gas": 916049, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 15078, + "op": "DUP5", + "gas": 916046, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 15079, + "op": "PUSH2", + "gas": 916043, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 15082, + "op": "JUMP", + "gas": 916040, + "gasCost": 8, + "depth": 2 + }, + { + "pc": 14897, + "op": "JUMPDEST", + "gas": 916032, + "gasCost": 1, + "depth": 2 + }, + { + "pc": 14898, + "op": "DUP2", + "gas": 916031, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 14899, + "op": "DUP4", + "gas": 916028, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 14900, + "op": "MSTORE", + "gas": 916025, + "gasCost": 12, + "depth": 2 + }, + { + "pc": 14901, + "op": "DUP2", + "gas": 916013, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 14902, + "op": "DUP2", + "gas": 916010, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 14903, + "op": "PUSH1", + "gas": 916007, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 14905, + "op": "DUP6", + "gas": 916004, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 14906, + "op": "ADD", + "gas": 916001, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 14907, + "op": "CALLDATACOPY", + "gas": 915998, + "gasCost": 6, + "depth": 2 + }, + { + "pc": 14908, + "op": "POP", + "gas": 915992, + "gasCost": 2, + "depth": 2 + }, + { + "pc": 14909, + "op": "PUSH1", + "gas": 915990, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 14911, + "op": "DUP3", + "gas": 915987, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 14912, + "op": "DUP3", + "gas": 915984, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 14913, + "op": "ADD", + "gas": 915981, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 14914, + "op": "PUSH1", + "gas": 915978, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 14916, + "op": "SWAP1", + "gas": 915975, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 14917, + "op": "DUP2", + "gas": 915972, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 14918, + "op": "ADD", + "gas": 915969, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 14919, + "op": "SWAP2", + "gas": 915966, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 14920, + "op": "SWAP1", + "gas": 915963, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 14921, + "op": "SWAP2", + "gas": 915960, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 14922, + "op": "MSTORE", + "gas": 915957, + "gasCost": 6, + "depth": 2 + }, + { + "pc": 14923, + "op": "PUSH1", + "gas": 915951, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 14925, + "op": "SWAP1", + "gas": 915948, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 14926, + "op": "SWAP2", + "gas": 915945, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 14927, + "op": "ADD", + "gas": 915942, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 14928, + "op": "PUSH1", + "gas": 915939, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 14930, + "op": "NOT", + "gas": 915936, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 14931, + "op": "AND", + "gas": 915933, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 14932, + "op": "SWAP1", + "gas": 915930, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 14933, + "op": "SWAP2", + "gas": 915927, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 14934, + "op": "ADD", + "gas": 915924, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 14935, + "op": "ADD", + "gas": 915921, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 14936, + "op": "SWAP1", + "gas": 915918, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 14937, + "op": "JUMP", + "gas": 915915, + "gasCost": 8, + "depth": 2 + }, + { + "pc": 15083, + "op": "JUMPDEST", + "gas": 915907, + "gasCost": 1, + "depth": 2 + }, + { + "pc": 15084, + "op": "SWAP2", + "gas": 915906, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 15085, + "op": "POP", + "gas": 915903, + "gasCost": 2, + "depth": 2 + }, + { + "pc": 15086, + "op": "POP", + "gas": 915901, + "gasCost": 2, + "depth": 2 + }, + { + "pc": 15087, + "op": "PUSH2", + "gas": 915899, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 15090, + "op": "PUSH1", + "gas": 915896, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 15092, + "op": "DUP4", + "gas": 915893, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 15093, + "op": "ADD", + "gas": 915890, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 15094, + "op": "DUP4", + "gas": 915887, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 15095, + "op": "PUSH2", + "gas": 915884, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 15098, + "op": "JUMP", + "gas": 915881, + "gasCost": 8, + "depth": 2 + }, + { + "pc": 14828, + "op": "JUMPDEST", + "gas": 915873, + "gasCost": 1, + "depth": 2 + }, + { + "pc": 14829, + "op": "PUSH1", + "gas": 915872, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 14831, + "op": "DUP1", + "gas": 915869, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 14832, + "op": "DUP4", + "gas": 915866, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 14833, + "op": "CALLDATALOAD", + "gas": 915863, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 14834, + "op": "PUSH1", + "gas": 915860, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 14836, + "op": "NOT", + "gas": 915857, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 14837, + "op": "DUP5", + "gas": 915854, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 14838, + "op": "CALLDATASIZE", + "gas": 915851, + "gasCost": 2, + "depth": 2 + }, + { + "pc": 14839, + "op": "SUB", + "gas": 915849, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 14840, + "op": "ADD", + "gas": 915846, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 14841, + "op": "DUP2", + "gas": 915843, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 14842, + "op": "SLT", + "gas": 915840, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 14843, + "op": "PUSH2", + "gas": 915837, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 14846, + "op": "JUMPI", + "gas": 915834, + "gasCost": 10, + "depth": 2 + }, + { + "pc": 14851, + "op": "JUMPDEST", + "gas": 915824, + "gasCost": 1, + "depth": 2 + }, + { + "pc": 14852, + "op": "DUP4", + "gas": 915823, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 14853, + "op": "ADD", + "gas": 915820, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 14854, + "op": "PUSH1", + "gas": 915817, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 14856, + "op": "DUP2", + "gas": 915814, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 14857, + "op": "ADD", + "gas": 915811, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 14858, + "op": "SWAP3", + "gas": 915808, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 14859, + "op": "POP", + "gas": 915805, + "gasCost": 2, + "depth": 2 + }, + { + "pc": 14860, + "op": "CALLDATALOAD", + "gas": 915803, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 14861, + "op": "SWAP1", + "gas": 915800, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 14862, + "op": "POP", + "gas": 915797, + "gasCost": 2, + "depth": 2 + }, + { + "pc": 14863, + "op": "PUSH1", + "gas": 915795, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 14865, + "op": "PUSH1", + "gas": 915792, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 14867, + "op": "PUSH1", + "gas": 915789, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 14869, + "op": "SHL", + "gas": 915786, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 14870, + "op": "SUB", + "gas": 915783, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 14871, + "op": "DUP2", + "gas": 915780, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 14872, + "op": "GT", + "gas": 915777, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 14873, + "op": "ISZERO", + "gas": 915774, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 14874, + "op": "PUSH2", + "gas": 915771, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 14877, + "op": "JUMPI", + "gas": 915768, + "gasCost": 10, + "depth": 2 + }, + { + "pc": 14882, + "op": "JUMPDEST", + "gas": 915758, + "gasCost": 1, + "depth": 2 + }, + { + "pc": 14883, + "op": "DUP1", + "gas": 915757, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 14884, + "op": "CALLDATASIZE", + "gas": 915754, + "gasCost": 2, + "depth": 2 + }, + { + "pc": 14885, + "op": "SUB", + "gas": 915752, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 14886, + "op": "DUP4", + "gas": 915749, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 14887, + "op": "SGT", + "gas": 915746, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 14888, + "op": "ISZERO", + "gas": 915743, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 14889, + "op": "PUSH2", + "gas": 915740, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 14892, + "op": "JUMPI", + "gas": 915737, + "gasCost": 10, + "depth": 2 + }, + { + "pc": 13083, + "op": "JUMPDEST", + "gas": 915727, + "gasCost": 1, + "depth": 2 + }, + { + "pc": 13084, + "op": "SWAP3", + "gas": 915726, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 13085, + "op": "POP", + "gas": 915723, + "gasCost": 2, + "depth": 2 + }, + { + "pc": 13086, + "op": "SWAP3", + "gas": 915721, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 13087, + "op": "SWAP1", + "gas": 915718, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 13088, + "op": "POP", + "gas": 915715, + "gasCost": 2, + "depth": 2 + }, + { + "pc": 13089, + "op": "JUMP", + "gas": 915713, + "gasCost": 8, + "depth": 2 + }, + { + "pc": 15099, + "op": "JUMPDEST", + "gas": 915705, + "gasCost": 1, + "depth": 2 + }, + { + "pc": 15100, + "op": "DUP9", + "gas": 915704, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 15101, + "op": "DUP4", + "gas": 915701, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 15102, + "op": "SUB", + "gas": 915698, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 15103, + "op": "PUSH1", + "gas": 915695, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 15105, + "op": "NOT", + "gas": 915692, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 15106, + "op": "ADD", + "gas": 915689, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 15107, + "op": "PUSH2", + "gas": 915686, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 15110, + "op": "DUP11", + "gas": 915683, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 15111, + "op": "ADD", + "gas": 915680, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 15112, + "op": "MSTORE", + "gas": 915677, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 15113, + "op": "PUSH2", + "gas": 915674, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 15116, + "op": "DUP4", + "gas": 915671, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 15117, + "op": "DUP3", + "gas": 915668, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 15118, + "op": "DUP5", + "gas": 915665, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 15119, + "op": "PUSH2", + "gas": 915662, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 15122, + "op": "JUMP", + "gas": 915659, + "gasCost": 8, + "depth": 2 + }, + { + "pc": 14897, + "op": "JUMPDEST", + "gas": 915651, + "gasCost": 1, + "depth": 2 + }, + { + "pc": 14898, + "op": "DUP2", + "gas": 915650, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 14899, + "op": "DUP4", + "gas": 915647, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 14900, + "op": "MSTORE", + "gas": 915644, + "gasCost": 7, + "depth": 2 + }, + { + "pc": 14901, + "op": "DUP2", + "gas": 915637, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 14902, + "op": "DUP2", + "gas": 915634, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 14903, + "op": "PUSH1", + "gas": 915631, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 14905, + "op": "DUP6", + "gas": 915628, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 14906, + "op": "ADD", + "gas": 915625, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 14907, + "op": "CALLDATACOPY", + "gas": 915622, + "gasCost": 6, + "depth": 2 + }, + { + "pc": 14908, + "op": "POP", + "gas": 915616, + "gasCost": 2, + "depth": 2 + }, + { + "pc": 14909, + "op": "PUSH1", + "gas": 915614, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 14911, + "op": "DUP3", + "gas": 915611, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 14912, + "op": "DUP3", + "gas": 915608, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 14913, + "op": "ADD", + "gas": 915605, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 14914, + "op": "PUSH1", + "gas": 915602, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 14916, + "op": "SWAP1", + "gas": 915599, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 14917, + "op": "DUP2", + "gas": 915596, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 14918, + "op": "ADD", + "gas": 915593, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 14919, + "op": "SWAP2", + "gas": 915590, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 14920, + "op": "SWAP1", + "gas": 915587, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 14921, + "op": "SWAP2", + "gas": 915584, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 14922, + "op": "MSTORE", + "gas": 915581, + "gasCost": 6, + "depth": 2 + }, + { + "pc": 14923, + "op": "PUSH1", + "gas": 915575, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 14925, + "op": "SWAP1", + "gas": 915572, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 14926, + "op": "SWAP2", + "gas": 915569, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 14927, + "op": "ADD", + "gas": 915566, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 14928, + "op": "PUSH1", + "gas": 915563, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 14930, + "op": "NOT", + "gas": 915560, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 14931, + "op": "AND", + "gas": 915557, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 14932, + "op": "SWAP1", + "gas": 915554, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 14933, + "op": "SWAP2", + "gas": 915551, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 14934, + "op": "ADD", + "gas": 915548, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 14935, + "op": "ADD", + "gas": 915545, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 14936, + "op": "SWAP1", + "gas": 915542, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 14937, + "op": "JUMP", + "gas": 915539, + "gasCost": 8, + "depth": 2 + }, + { + "pc": 15123, + "op": "JUMPDEST", + "gas": 915531, + "gasCost": 1, + "depth": 2 + }, + { + "pc": 15124, + "op": "SWAP3", + "gas": 915530, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 15125, + "op": "POP", + "gas": 915527, + "gasCost": 2, + "depth": 2 + }, + { + "pc": 15126, + "op": "POP", + "gas": 915525, + "gasCost": 2, + "depth": 2 + }, + { + "pc": 15127, + "op": "POP", + "gas": 915523, + "gasCost": 2, + "depth": 2 + }, + { + "pc": 15128, + "op": "DUP4", + "gas": 915521, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 15129, + "op": "PUSH2", + "gas": 915518, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 15132, + "op": "PUSH1", + "gas": 915515, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 15134, + "op": "DUP5", + "gas": 915512, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 15135, + "op": "ADD", + "gas": 915509, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 15136, + "op": "PUSH2", + "gas": 915506, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 15139, + "op": "JUMP", + "gas": 915503, + "gasCost": 8, + "depth": 2 + }, + { + "pc": 14679, + "op": "JUMPDEST", + "gas": 915495, + "gasCost": 1, + "depth": 2 + }, + { + "pc": 14680, + "op": "DUP1", + "gas": 915494, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 14681, + "op": "CALLDATALOAD", + "gas": 915491, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 14682, + "op": "PUSH4", + "gas": 915488, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 14687, + "op": "DUP2", + "gas": 915485, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 14688, + "op": "AND", + "gas": 915482, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 14689, + "op": "DUP2", + "gas": 915479, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 14690, + "op": "EQ", + "gas": 915476, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 14691, + "op": "PUSH2", + "gas": 915473, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 14694, + "op": "JUMPI", + "gas": 915470, + "gasCost": 10, + "depth": 2 + }, + { + "pc": 13701, + "op": "JUMPDEST", + "gas": 915460, + "gasCost": 1, + "depth": 2 + }, + { + "pc": 13702, + "op": "SWAP2", + "gas": 915459, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 13703, + "op": "SWAP1", + "gas": 915456, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 13704, + "op": "POP", + "gas": 915453, + "gasCost": 2, + "depth": 2 + }, + { + "pc": 13705, + "op": "JUMP", + "gas": 915451, + "gasCost": 8, + "depth": 2 + }, + { + "pc": 15140, + "op": "JUMPDEST", + "gas": 915443, + "gasCost": 1, + "depth": 2 + }, + { + "pc": 15141, + "op": "AND", + "gas": 915442, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 15142, + "op": "PUSH2", + "gas": 915439, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 15145, + "op": "DUP9", + "gas": 915436, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 15146, + "op": "ADD", + "gas": 915433, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 15147, + "op": "MSTORE", + "gas": 915430, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 15148, + "op": "PUSH1", + "gas": 915427, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 15150, + "op": "DUP4", + "gas": 915424, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 15151, + "op": "ADD", + "gas": 915421, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 15152, + "op": "CALLDATALOAD", + "gas": 915418, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 15153, + "op": "PUSH1", + "gas": 915415, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 15155, + "op": "DUP9", + "gas": 915412, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 15156, + "op": "ADD", + "gas": 915409, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 15157, + "op": "MSTORE", + "gas": 915406, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 15158, + "op": "PUSH2", + "gas": 915403, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 15161, + "op": "PUSH1", + "gas": 915400, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 15163, + "op": "DUP5", + "gas": 915397, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 15164, + "op": "ADD", + "gas": 915394, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 15165, + "op": "PUSH2", + "gas": 915391, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 15168, + "op": "JUMP", + "gas": 915388, + "gasCost": 8, + "depth": 2 + }, + { + "pc": 14679, + "op": "JUMPDEST", + "gas": 915380, + "gasCost": 1, + "depth": 2 + }, + { + "pc": 14680, + "op": "DUP1", + "gas": 915379, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 14681, + "op": "CALLDATALOAD", + "gas": 915376, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 14682, + "op": "PUSH4", + "gas": 915373, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 14687, + "op": "DUP2", + "gas": 915370, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 14688, + "op": "AND", + "gas": 915367, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 14689, + "op": "DUP2", + "gas": 915364, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 14690, + "op": "EQ", + "gas": 915361, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 14691, + "op": "PUSH2", + "gas": 915358, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 14694, + "op": "JUMPI", + "gas": 915355, + "gasCost": 10, + "depth": 2 + }, + { + "pc": 13701, + "op": "JUMPDEST", + "gas": 915345, + "gasCost": 1, + "depth": 2 + }, + { + "pc": 13702, + "op": "SWAP2", + "gas": 915344, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 13703, + "op": "SWAP1", + "gas": 915341, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 13704, + "op": "POP", + "gas": 915338, + "gasCost": 2, + "depth": 2 + }, + { + "pc": 13705, + "op": "JUMP", + "gas": 915336, + "gasCost": 8, + "depth": 2 + }, + { + "pc": 15169, + "op": "JUMPDEST", + "gas": 915328, + "gasCost": 1, + "depth": 2 + }, + { + "pc": 15170, + "op": "PUSH4", + "gas": 915327, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 15175, + "op": "DUP2", + "gas": 915324, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 15176, + "op": "AND", + "gas": 915321, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 15177, + "op": "PUSH1", + "gas": 915318, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 15179, + "op": "DUP10", + "gas": 915315, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 15180, + "op": "ADD", + "gas": 915312, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 15181, + "op": "MSTORE", + "gas": 915309, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 15182, + "op": "SWAP4", + "gas": 915306, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 15183, + "op": "POP", + "gas": 915303, + "gasCost": 2, + "depth": 2 + }, + { + "pc": 15184, + "op": "PUSH2", + "gas": 915301, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 15187, + "op": "PUSH1", + "gas": 915298, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 15189, + "op": "DUP8", + "gas": 915295, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 15190, + "op": "ADD", + "gas": 915292, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 15191, + "op": "DUP8", + "gas": 915289, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 15192, + "op": "PUSH2", + "gas": 915286, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 15195, + "op": "JUMP", + "gas": 915283, + "gasCost": 8, + "depth": 2 + }, + { + "pc": 14828, + "op": "JUMPDEST", + "gas": 915275, + "gasCost": 1, + "depth": 2 + }, + { + "pc": 14829, + "op": "PUSH1", + "gas": 915274, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 14831, + "op": "DUP1", + "gas": 915271, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 14832, + "op": "DUP4", + "gas": 915268, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 14833, + "op": "CALLDATALOAD", + "gas": 915265, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 14834, + "op": "PUSH1", + "gas": 915262, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 14836, + "op": "NOT", + "gas": 915259, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 14837, + "op": "DUP5", + "gas": 915256, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 14838, + "op": "CALLDATASIZE", + "gas": 915253, + "gasCost": 2, + "depth": 2 + }, + { + "pc": 14839, + "op": "SUB", + "gas": 915251, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 14840, + "op": "ADD", + "gas": 915248, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 14841, + "op": "DUP2", + "gas": 915245, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 14842, + "op": "SLT", + "gas": 915242, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 14843, + "op": "PUSH2", + "gas": 915239, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 14846, + "op": "JUMPI", + "gas": 915236, + "gasCost": 10, + "depth": 2 + }, + { + "pc": 14851, + "op": "JUMPDEST", + "gas": 915226, + "gasCost": 1, + "depth": 2 + }, + { + "pc": 14852, + "op": "DUP4", + "gas": 915225, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 14853, + "op": "ADD", + "gas": 915222, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 14854, + "op": "PUSH1", + "gas": 915219, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 14856, + "op": "DUP2", + "gas": 915216, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 14857, + "op": "ADD", + "gas": 915213, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 14858, + "op": "SWAP3", + "gas": 915210, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 14859, + "op": "POP", + "gas": 915207, + "gasCost": 2, + "depth": 2 + }, + { + "pc": 14860, + "op": "CALLDATALOAD", + "gas": 915205, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 14861, + "op": "SWAP1", + "gas": 915202, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 14862, + "op": "POP", + "gas": 915199, + "gasCost": 2, + "depth": 2 + }, + { + "pc": 14863, + "op": "PUSH1", + "gas": 915197, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 14865, + "op": "PUSH1", + "gas": 915194, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 14867, + "op": "PUSH1", + "gas": 915191, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 14869, + "op": "SHL", + "gas": 915188, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 14870, + "op": "SUB", + "gas": 915185, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 14871, + "op": "DUP2", + "gas": 915182, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 14872, + "op": "GT", + "gas": 915179, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 14873, + "op": "ISZERO", + "gas": 915176, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 14874, + "op": "PUSH2", + "gas": 915173, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 14877, + "op": "JUMPI", + "gas": 915170, + "gasCost": 10, + "depth": 2 + }, + { + "pc": 14882, + "op": "JUMPDEST", + "gas": 915160, + "gasCost": 1, + "depth": 2 + }, + { + "pc": 14883, + "op": "DUP1", + "gas": 915159, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 14884, + "op": "CALLDATASIZE", + "gas": 915156, + "gasCost": 2, + "depth": 2 + }, + { + "pc": 14885, + "op": "SUB", + "gas": 915154, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 14886, + "op": "DUP4", + "gas": 915151, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 14887, + "op": "SGT", + "gas": 915148, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 14888, + "op": "ISZERO", + "gas": 915145, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 14889, + "op": "PUSH2", + "gas": 915142, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 14892, + "op": "JUMPI", + "gas": 915139, + "gasCost": 10, + "depth": 2 + }, + { + "pc": 13083, + "op": "JUMPDEST", + "gas": 915129, + "gasCost": 1, + "depth": 2 + }, + { + "pc": 13084, + "op": "SWAP3", + "gas": 915128, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 13085, + "op": "POP", + "gas": 915125, + "gasCost": 2, + "depth": 2 + }, + { + "pc": 13086, + "op": "SWAP3", + "gas": 915123, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 13087, + "op": "SWAP1", + "gas": 915120, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 13088, + "op": "POP", + "gas": 915117, + "gasCost": 2, + "depth": 2 + }, + { + "pc": 13089, + "op": "JUMP", + "gas": 915115, + "gasCost": 8, + "depth": 2 + }, + { + "pc": 15196, + "op": "JUMPDEST", + "gas": 915107, + "gasCost": 1, + "depth": 2 + }, + { + "pc": 15197, + "op": "SWAP5", + "gas": 915106, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 15198, + "op": "POP", + "gas": 915103, + "gasCost": 2, + "depth": 2 + }, + { + "pc": 15199, + "op": "SWAP3", + "gas": 915101, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 15200, + "op": "POP", + "gas": 915098, + "gasCost": 2, + "depth": 2 + }, + { + "pc": 15201, + "op": "DUP7", + "gas": 915096, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 15202, + "op": "DUP2", + "gas": 915093, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 15203, + "op": "SUB", + "gas": 915090, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 15204, + "op": "PUSH1", + "gas": 915087, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 15206, + "op": "DUP9", + "gas": 915084, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 15207, + "op": "ADD", + "gas": 915081, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 15208, + "op": "MSTORE", + "gas": 915078, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 15209, + "op": "PUSH2", + "gas": 915075, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 15212, + "op": "DUP2", + "gas": 915072, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 15213, + "op": "DUP6", + "gas": 915069, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 15214, + "op": "DUP6", + "gas": 915066, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 15215, + "op": "PUSH2", + "gas": 915063, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 15218, + "op": "JUMP", + "gas": 915060, + "gasCost": 8, + "depth": 2 + }, + { + "pc": 14897, + "op": "JUMPDEST", + "gas": 915052, + "gasCost": 1, + "depth": 2 + }, + { + "pc": 14898, + "op": "DUP2", + "gas": 915051, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 14899, + "op": "DUP4", + "gas": 915048, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 14900, + "op": "MSTORE", + "gas": 915045, + "gasCost": 6, + "depth": 2 + }, + { + "pc": 14901, + "op": "DUP2", + "gas": 915039, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 14902, + "op": "DUP2", + "gas": 915036, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 14903, + "op": "PUSH1", + "gas": 915033, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 14905, + "op": "DUP6", + "gas": 915030, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 14906, + "op": "ADD", + "gas": 915027, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 14907, + "op": "CALLDATACOPY", + "gas": 915024, + "gasCost": 6, + "depth": 2 + }, + { + "pc": 14908, + "op": "POP", + "gas": 915018, + "gasCost": 2, + "depth": 2 + }, + { + "pc": 14909, + "op": "PUSH1", + "gas": 915016, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 14911, + "op": "DUP3", + "gas": 915013, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 14912, + "op": "DUP3", + "gas": 915010, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 14913, + "op": "ADD", + "gas": 915007, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 14914, + "op": "PUSH1", + "gas": 915004, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 14916, + "op": "SWAP1", + "gas": 915001, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 14917, + "op": "DUP2", + "gas": 914998, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 14918, + "op": "ADD", + "gas": 914995, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 14919, + "op": "SWAP2", + "gas": 914992, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 14920, + "op": "SWAP1", + "gas": 914989, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 14921, + "op": "SWAP2", + "gas": 914986, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 14922, + "op": "MSTORE", + "gas": 914983, + "gasCost": 6, + "depth": 2 + }, + { + "pc": 14923, + "op": "PUSH1", + "gas": 914977, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 14925, + "op": "SWAP1", + "gas": 914974, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 14926, + "op": "SWAP2", + "gas": 914971, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 14927, + "op": "ADD", + "gas": 914968, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 14928, + "op": "PUSH1", + "gas": 914965, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 14930, + "op": "NOT", + "gas": 914962, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 14931, + "op": "AND", + "gas": 914959, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 14932, + "op": "SWAP1", + "gas": 914956, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 14933, + "op": "SWAP2", + "gas": 914953, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 14934, + "op": "ADD", + "gas": 914950, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 14935, + "op": "ADD", + "gas": 914947, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 14936, + "op": "SWAP1", + "gas": 914944, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 14937, + "op": "JUMP", + "gas": 914941, + "gasCost": 8, + "depth": 2 + }, + { + "pc": 15219, + "op": "JUMPDEST", + "gas": 914933, + "gasCost": 1, + "depth": 2 + }, + { + "pc": 15220, + "op": "SWAP4", + "gas": 914932, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 15221, + "op": "POP", + "gas": 914929, + "gasCost": 2, + "depth": 2 + }, + { + "pc": 15222, + "op": "POP", + "gas": 914927, + "gasCost": 2, + "depth": 2 + }, + { + "pc": 15223, + "op": "POP", + "gas": 914925, + "gasCost": 2, + "depth": 2 + }, + { + "pc": 15224, + "op": "POP", + "gas": 914923, + "gasCost": 2, + "depth": 2 + }, + { + "pc": 15225, + "op": "PUSH2", + "gas": 914921, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 15228, + "op": "PUSH1", + "gas": 914918, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 15230, + "op": "DUP5", + "gas": 914915, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 15231, + "op": "ADD", + "gas": 914912, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 15232, + "op": "DUP5", + "gas": 914909, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 15233, + "op": "PUSH2", + "gas": 914906, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 15236, + "op": "JUMP", + "gas": 914903, + "gasCost": 8, + "depth": 2 + }, + { + "pc": 14828, + "op": "JUMPDEST", + "gas": 914895, + "gasCost": 1, + "depth": 2 + }, + { + "pc": 14829, + "op": "PUSH1", + "gas": 914894, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 14831, + "op": "DUP1", + "gas": 914891, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 14832, + "op": "DUP4", + "gas": 914888, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 14833, + "op": "CALLDATALOAD", + "gas": 914885, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 14834, + "op": "PUSH1", + "gas": 914882, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 14836, + "op": "NOT", + "gas": 914879, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 14837, + "op": "DUP5", + "gas": 914876, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 14838, + "op": "CALLDATASIZE", + "gas": 914873, + "gasCost": 2, + "depth": 2 + }, + { + "pc": 14839, + "op": "SUB", + "gas": 914871, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 14840, + "op": "ADD", + "gas": 914868, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 14841, + "op": "DUP2", + "gas": 914865, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 14842, + "op": "SLT", + "gas": 914862, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 14843, + "op": "PUSH2", + "gas": 914859, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 14846, + "op": "JUMPI", + "gas": 914856, + "gasCost": 10, + "depth": 2 + }, + { + "pc": 14851, + "op": "JUMPDEST", + "gas": 914846, + "gasCost": 1, + "depth": 2 + }, + { + "pc": 14852, + "op": "DUP4", + "gas": 914845, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 14853, + "op": "ADD", + "gas": 914842, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 14854, + "op": "PUSH1", + "gas": 914839, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 14856, + "op": "DUP2", + "gas": 914836, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 14857, + "op": "ADD", + "gas": 914833, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 14858, + "op": "SWAP3", + "gas": 914830, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 14859, + "op": "POP", + "gas": 914827, + "gasCost": 2, + "depth": 2 + }, + { + "pc": 14860, + "op": "CALLDATALOAD", + "gas": 914825, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 14861, + "op": "SWAP1", + "gas": 914822, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 14862, + "op": "POP", + "gas": 914819, + "gasCost": 2, + "depth": 2 + }, + { + "pc": 14863, + "op": "PUSH1", + "gas": 914817, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 14865, + "op": "PUSH1", + "gas": 914814, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 14867, + "op": "PUSH1", + "gas": 914811, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 14869, + "op": "SHL", + "gas": 914808, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 14870, + "op": "SUB", + "gas": 914805, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 14871, + "op": "DUP2", + "gas": 914802, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 14872, + "op": "GT", + "gas": 914799, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 14873, + "op": "ISZERO", + "gas": 914796, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 14874, + "op": "PUSH2", + "gas": 914793, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 14877, + "op": "JUMPI", + "gas": 914790, + "gasCost": 10, + "depth": 2 + }, + { + "pc": 14882, + "op": "JUMPDEST", + "gas": 914780, + "gasCost": 1, + "depth": 2 + }, + { + "pc": 14883, + "op": "DUP1", + "gas": 914779, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 14884, + "op": "CALLDATASIZE", + "gas": 914776, + "gasCost": 2, + "depth": 2 + }, + { + "pc": 14885, + "op": "SUB", + "gas": 914774, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 14886, + "op": "DUP4", + "gas": 914771, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 14887, + "op": "SGT", + "gas": 914768, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 14888, + "op": "ISZERO", + "gas": 914765, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 14889, + "op": "PUSH2", + "gas": 914762, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 14892, + "op": "JUMPI", + "gas": 914759, + "gasCost": 10, + "depth": 2 + }, + { + "pc": 13083, + "op": "JUMPDEST", + "gas": 914749, + "gasCost": 1, + "depth": 2 + }, + { + "pc": 13084, + "op": "SWAP3", + "gas": 914748, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 13085, + "op": "POP", + "gas": 914745, + "gasCost": 2, + "depth": 2 + }, + { + "pc": 13086, + "op": "SWAP3", + "gas": 914743, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 13087, + "op": "SWAP1", + "gas": 914740, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 13088, + "op": "POP", + "gas": 914737, + "gasCost": 2, + "depth": 2 + }, + { + "pc": 13089, + "op": "JUMP", + "gas": 914735, + "gasCost": 8, + "depth": 2 + }, + { + "pc": 15237, + "op": "JUMPDEST", + "gas": 914727, + "gasCost": 1, + "depth": 2 + }, + { + "pc": 15238, + "op": "DUP6", + "gas": 914726, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 15239, + "op": "DUP4", + "gas": 914723, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 15240, + "op": "SUB", + "gas": 914720, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 15241, + "op": "PUSH1", + "gas": 914717, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 15243, + "op": "DUP8", + "gas": 914714, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 15244, + "op": "ADD", + "gas": 914711, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 15245, + "op": "MSTORE", + "gas": 914708, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 15246, + "op": "PUSH2", + "gas": 914705, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 15249, + "op": "DUP4", + "gas": 914702, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 15250, + "op": "DUP3", + "gas": 914699, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 15251, + "op": "DUP5", + "gas": 914696, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 15252, + "op": "PUSH2", + "gas": 914693, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 15255, + "op": "JUMP", + "gas": 914690, + "gasCost": 8, + "depth": 2 + }, + { + "pc": 14897, + "op": "JUMPDEST", + "gas": 914682, + "gasCost": 1, + "depth": 2 + }, + { + "pc": 14898, + "op": "DUP2", + "gas": 914681, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 14899, + "op": "DUP4", + "gas": 914678, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 14900, + "op": "MSTORE", + "gas": 914675, + "gasCost": 6, + "depth": 2 + }, + { + "pc": 14901, + "op": "DUP2", + "gas": 914669, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 14902, + "op": "DUP2", + "gas": 914666, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 14903, + "op": "PUSH1", + "gas": 914663, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 14905, + "op": "DUP6", + "gas": 914660, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 14906, + "op": "ADD", + "gas": 914657, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 14907, + "op": "CALLDATACOPY", + "gas": 914654, + "gasCost": 6, + "depth": 2 + }, + { + "pc": 14908, + "op": "POP", + "gas": 914648, + "gasCost": 2, + "depth": 2 + }, + { + "pc": 14909, + "op": "PUSH1", + "gas": 914646, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 14911, + "op": "DUP3", + "gas": 914643, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 14912, + "op": "DUP3", + "gas": 914640, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 14913, + "op": "ADD", + "gas": 914637, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 14914, + "op": "PUSH1", + "gas": 914634, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 14916, + "op": "SWAP1", + "gas": 914631, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 14917, + "op": "DUP2", + "gas": 914628, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 14918, + "op": "ADD", + "gas": 914625, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 14919, + "op": "SWAP2", + "gas": 914622, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 14920, + "op": "SWAP1", + "gas": 914619, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 14921, + "op": "SWAP2", + "gas": 914616, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 14922, + "op": "MSTORE", + "gas": 914613, + "gasCost": 6, + "depth": 2 + }, + { + "pc": 14923, + "op": "PUSH1", + "gas": 914607, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 14925, + "op": "SWAP1", + "gas": 914604, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 14926, + "op": "SWAP2", + "gas": 914601, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 14927, + "op": "ADD", + "gas": 914598, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 14928, + "op": "PUSH1", + "gas": 914595, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 14930, + "op": "NOT", + "gas": 914592, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 14931, + "op": "AND", + "gas": 914589, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 14932, + "op": "SWAP1", + "gas": 914586, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 14933, + "op": "SWAP2", + "gas": 914583, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 14934, + "op": "ADD", + "gas": 914580, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 14935, + "op": "ADD", + "gas": 914577, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 14936, + "op": "SWAP1", + "gas": 914574, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 14937, + "op": "JUMP", + "gas": 914571, + "gasCost": 8, + "depth": 2 + }, + { + "pc": 15256, + "op": "JUMPDEST", + "gas": 914563, + "gasCost": 1, + "depth": 2 + }, + { + "pc": 15257, + "op": "SWAP7", + "gas": 914562, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 15258, + "op": "SWAP6", + "gas": 914559, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 15259, + "op": "POP", + "gas": 914556, + "gasCost": 2, + "depth": 2 + }, + { + "pc": 15260, + "op": "POP", + "gas": 914554, + "gasCost": 2, + "depth": 2 + }, + { + "pc": 15261, + "op": "POP", + "gas": 914552, + "gasCost": 2, + "depth": 2 + }, + { + "pc": 15262, + "op": "POP", + "gas": 914550, + "gasCost": 2, + "depth": 2 + }, + { + "pc": 15263, + "op": "POP", + "gas": 914548, + "gasCost": 2, + "depth": 2 + }, + { + "pc": 15264, + "op": "POP", + "gas": 914546, + "gasCost": 2, + "depth": 2 + }, + { + "pc": 15265, + "op": "JUMP", + "gas": 914544, + "gasCost": 8, + "depth": 2 + }, + { + "pc": 15256, + "op": "JUMPDEST", + "gas": 914536, + "gasCost": 1, + "depth": 2 + }, + { + "pc": 15257, + "op": "SWAP7", + "gas": 914535, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 15258, + "op": "SWAP6", + "gas": 914532, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 15259, + "op": "POP", + "gas": 914529, + "gasCost": 2, + "depth": 2 + }, + { + "pc": 15260, + "op": "POP", + "gas": 914527, + "gasCost": 2, + "depth": 2 + }, + { + "pc": 15261, + "op": "POP", + "gas": 914525, + "gasCost": 2, + "depth": 2 + }, + { + "pc": 15262, + "op": "POP", + "gas": 914523, + "gasCost": 2, + "depth": 2 + }, + { + "pc": 15263, + "op": "POP", + "gas": 914521, + "gasCost": 2, + "depth": 2 + }, + { + "pc": 15264, + "op": "POP", + "gas": 914519, + "gasCost": 2, + "depth": 2 + }, + { + "pc": 15265, + "op": "JUMP", + "gas": 914517, + "gasCost": 8, + "depth": 2 + }, + { + "pc": 3993, + "op": "JUMPDEST", + "gas": 914509, + "gasCost": 1, + "depth": 2 + }, + { + "pc": 3994, + "op": "PUSH1", + "gas": 914508, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 3996, + "op": "PUSH1", + "gas": 914505, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 3998, + "op": "MLOAD", + "gas": 914502, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 3999, + "op": "DUP1", + "gas": 914499, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 4000, + "op": "DUP4", + "gas": 914496, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 4001, + "op": "SUB", + "gas": 914493, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 4002, + "op": "DUP2", + "gas": 914490, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 4003, + "op": "DUP7", + "gas": 914487, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 4004, + "op": "DUP1", + "gas": 914484, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 4005, + "op": "EXTCODESIZE", + "gas": 914481, + "gasCost": 2600, + "depth": 2 + }, + { + "pc": 4006, + "op": "ISZERO", + "gas": 911881, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 4007, + "op": "DUP1", + "gas": 911878, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 4008, + "op": "ISZERO", + "gas": 911875, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 4009, + "op": "PUSH2", + "gas": 911872, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 4012, + "op": "JUMPI", + "gas": 911869, + "gasCost": 10, + "depth": 2 + }, + { + "pc": 4013, + "op": "PUSH1", + "gas": 911859, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 4015, + "op": "DUP1", + "gas": 911856, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 4016, + "op": "REVERT", + "gas": 911853, + "gasCost": 0, + "depth": 2 + }, + { + "pc": 851, + "op": "RETURNDATASIZE", + "gas": 926549, + "gasCost": 2, + "depth": 1 + }, + { + "pc": 852, + "op": "PUSH1", + "gas": 926547, + "gasCost": 3, + "depth": 1 + }, + { + "pc": 854, + "op": "DUP1", + "gas": 926544, + "gasCost": 3, + "depth": 1 + }, + { + "pc": 855, + "op": "RETURNDATACOPY", + "gas": 926541, + "gasCost": 3, + "depth": 1 + }, + { + "pc": 856, + "op": "DUP1", + "gas": 926538, + "gasCost": 3, + "depth": 1 + }, + { + "pc": 857, + "op": "DUP1", + "gas": 926535, + "gasCost": 3, + "depth": 1 + }, + { + "pc": 858, + "op": "ISZERO", + "gas": 926532, + "gasCost": 3, + "depth": 1 + }, + { + "pc": 859, + "op": "PUSH2", + "gas": 926529, + "gasCost": 3, + "depth": 1 + }, + { + "pc": 862, + "op": "JUMPI", + "gas": 926526, + "gasCost": 10, + "depth": 1 + }, + { + "pc": 867, + "op": "JUMPDEST", + "gas": 926516, + "gasCost": 1, + "depth": 1 + }, + { + "pc": 868, + "op": "RETURNDATASIZE", + "gas": 926515, + "gasCost": 2, + "depth": 1 + }, + { + "pc": 869, + "op": "PUSH1", + "gas": 926513, + "gasCost": 3, + "depth": 1 + }, + { + "pc": 871, + "op": "REVERT", + "gas": 926510, + "gasCost": 0, + "depth": 1 + } + ] + diff --git a/out.txt b/out.txt new file mode 100644 index 000000000..8a0d51cc2 --- /dev/null +++ b/out.txt @@ -0,0 +1,9414 @@ + { + "pc": 0, + "op": "PUSH1", + "gas": 9989080, + "gasCost": 3, + "depth": 1 + }, + { + "pc": 2, + "op": "PUSH1", + "gas": 9989077, + "gasCost": 3, + "depth": 1 + }, + { + "pc": 4, + "op": "MSTORE", + "gas": 9989074, + "gasCost": 12, + "depth": 1 + }, + { + "pc": 5, + "op": "PUSH1", + "gas": 9989062, + "gasCost": 3, + "depth": 1 + }, + { + "pc": 7, + "op": "CALLDATASIZE", + "gas": 9989059, + "gasCost": 2, + "depth": 1 + }, + { + "pc": 8, + "op": "LT", + "gas": 9989057, + "gasCost": 3, + "depth": 1 + }, + { + "pc": 9, + "op": "PUSH2", + "gas": 9989054, + "gasCost": 3, + "depth": 1 + }, + { + "pc": 12, + "op": "JUMPI", + "gas": 9989051, + "gasCost": 10, + "depth": 1 + }, + { + "pc": 13, + "op": "PUSH1", + "gas": 9989041, + "gasCost": 3, + "depth": 1 + }, + { + "pc": 15, + "op": "CALLDATALOAD", + "gas": 9989038, + "gasCost": 3, + "depth": 1 + }, + { + "pc": 16, + "op": "PUSH1", + "gas": 9989035, + "gasCost": 3, + "depth": 1 + }, + { + "pc": 18, + "op": "SHR", + "gas": 9989032, + "gasCost": 3, + "depth": 1 + }, + { + "pc": 19, + "op": "DUP1", + "gas": 9989029, + "gasCost": 3, + "depth": 1 + }, + { + "pc": 20, + "op": "PUSH4", + "gas": 9989026, + "gasCost": 3, + "depth": 1 + }, + { + "pc": 25, + "op": "EQ", + "gas": 9989023, + "gasCost": 3, + "depth": 1 + }, + { + "pc": 26, + "op": "PUSH2", + "gas": 9989020, + "gasCost": 3, + "depth": 1 + }, + { + "pc": 29, + "op": "JUMPI", + "gas": 9989017, + "gasCost": 10, + "depth": 1 + }, + { + "pc": 30, + "op": "DUP1", + "gas": 9989007, + "gasCost": 3, + "depth": 1 + }, + { + "pc": 31, + "op": "PUSH4", + "gas": 9989004, + "gasCost": 3, + "depth": 1 + }, + { + "pc": 36, + "op": "EQ", + "gas": 9989001, + "gasCost": 3, + "depth": 1 + }, + { + "pc": 37, + "op": "PUSH2", + "gas": 9988998, + "gasCost": 3, + "depth": 1 + }, + { + "pc": 40, + "op": "JUMPI", + "gas": 9988995, + "gasCost": 10, + "depth": 1 + }, + { + "pc": 41, + "op": "DUP1", + "gas": 9988985, + "gasCost": 3, + "depth": 1 + }, + { + "pc": 42, + "op": "PUSH4", + "gas": 9988982, + "gasCost": 3, + "depth": 1 + }, + { + "pc": 47, + "op": "EQ", + "gas": 9988979, + "gasCost": 3, + "depth": 1 + }, + { + "pc": 48, + "op": "PUSH2", + "gas": 9988976, + "gasCost": 3, + "depth": 1 + }, + { + "pc": 51, + "op": "JUMPI", + "gas": 9988973, + "gasCost": 10, + "depth": 1 + }, + { + "pc": 52, + "op": "DUP1", + "gas": 9988963, + "gasCost": 3, + "depth": 1 + }, + { + "pc": 53, + "op": "PUSH4", + "gas": 9988960, + "gasCost": 3, + "depth": 1 + }, + { + "pc": 58, + "op": "EQ", + "gas": 9988957, + "gasCost": 3, + "depth": 1 + }, + { + "pc": 59, + "op": "PUSH2", + "gas": 9988954, + "gasCost": 3, + "depth": 1 + }, + { + "pc": 62, + "op": "JUMPI", + "gas": 9988951, + "gasCost": 10, + "depth": 1 + }, + { + "pc": 63, + "op": "DUP1", + "gas": 9988941, + "gasCost": 3, + "depth": 1 + }, + { + "pc": 64, + "op": "PUSH4", + "gas": 9988938, + "gasCost": 3, + "depth": 1 + }, + { + "pc": 69, + "op": "EQ", + "gas": 9988935, + "gasCost": 3, + "depth": 1 + }, + { + "pc": 70, + "op": "PUSH2", + "gas": 9988932, + "gasCost": 3, + "depth": 1 + }, + { + "pc": 73, + "op": "JUMPI", + "gas": 9988929, + "gasCost": 10, + "depth": 1 + }, + { + "pc": 74, + "op": "PUSH2", + "gas": 9988919, + "gasCost": 3, + "depth": 1 + }, + { + "pc": 77, + "op": "JUMP", + "gas": 9988916, + "gasCost": 8, + "depth": 1 + }, + { + "pc": 93, + "op": "JUMPDEST", + "gas": 9988908, + "gasCost": 1, + "depth": 1 + }, + { + "pc": 94, + "op": "PUSH2", + "gas": 9988907, + "gasCost": 3, + "depth": 1 + }, + { + "pc": 97, + "op": "PUSH2", + "gas": 9988904, + "gasCost": 3, + "depth": 1 + }, + { + "pc": 100, + "op": "JUMP", + "gas": 9988901, + "gasCost": 8, + "depth": 1 + }, + { + "pc": 254, + "op": "JUMPDEST", + "gas": 9988893, + "gasCost": 1, + "depth": 1 + }, + { + "pc": 255, + "op": "PUSH2", + "gas": 9988892, + "gasCost": 3, + "depth": 1 + }, + { + "pc": 258, + "op": "PUSH2", + "gas": 9988889, + "gasCost": 3, + "depth": 1 + }, + { + "pc": 261, + "op": "JUMP", + "gas": 9988886, + "gasCost": 8, + "depth": 1 + }, + { + "pc": 667, + "op": "JUMPDEST", + "gas": 9988878, + "gasCost": 1, + "depth": 1 + }, + { + "pc": 668, + "op": "PUSH2", + "gas": 9988877, + "gasCost": 3, + "depth": 1 + }, + { + "pc": 671, + "op": "PUSH2", + "gas": 9988874, + "gasCost": 3, + "depth": 1 + }, + { + "pc": 674, + "op": "JUMP", + "gas": 9988871, + "gasCost": 8, + "depth": 1 + }, + { + "pc": 872, + "op": "JUMPDEST", + "gas": 9988863, + "gasCost": 1, + "depth": 1 + }, + { + "pc": 873, + "op": "PUSH1", + "gas": 9988862, + "gasCost": 3, + "depth": 1 + }, + { + "pc": 875, + "op": "PUSH32", + "gas": 9988859, + "gasCost": 3, + "depth": 1 + }, + { + "pc": 908, + "op": "JUMPDEST", + "gas": 9988856, + "gasCost": 1, + "depth": 1 + }, + { + "pc": 909, + "op": "SLOAD", + "gas": 9988855, + "gasCost": 100, + "depth": 1, + "storage": { + "b53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103": "000000000000000000000000264aae078cc695f7d0b66260895aee9d4e83e730" + } + }, + { + "pc": 910, + "op": "PUSH1", + "gas": 9988755, + "gasCost": 3, + "depth": 1 + }, + { + "pc": 912, + "op": "PUSH1", + "gas": 9988752, + "gasCost": 3, + "depth": 1 + }, + { + "pc": 914, + "op": "PUSH1", + "gas": 9988749, + "gasCost": 3, + "depth": 1 + }, + { + "pc": 916, + "op": "SHL", + "gas": 9988746, + "gasCost": 3, + "depth": 1 + }, + { + "pc": 917, + "op": "SUB", + "gas": 9988743, + "gasCost": 3, + "depth": 1 + }, + { + "pc": 918, + "op": "AND", + "gas": 9988740, + "gasCost": 3, + "depth": 1 + }, + { + "pc": 919, + "op": "SWAP2", + "gas": 9988737, + "gasCost": 3, + "depth": 1 + }, + { + "pc": 920, + "op": "SWAP1", + "gas": 9988734, + "gasCost": 3, + "depth": 1 + }, + { + "pc": 921, + "op": "POP", + "gas": 9988731, + "gasCost": 2, + "depth": 1 + }, + { + "pc": 922, + "op": "JUMP", + "gas": 9988729, + "gasCost": 8, + "depth": 1 + }, + { + "pc": 675, + "op": "JUMPDEST", + "gas": 9988721, + "gasCost": 1, + "depth": 1 + }, + { + "pc": 676, + "op": "PUSH1", + "gas": 9988720, + "gasCost": 3, + "depth": 1 + }, + { + "pc": 678, + "op": "PUSH1", + "gas": 9988717, + "gasCost": 3, + "depth": 1 + }, + { + "pc": 680, + "op": "PUSH1", + "gas": 9988714, + "gasCost": 3, + "depth": 1 + }, + { + "pc": 682, + "op": "SHL", + "gas": 9988711, + "gasCost": 3, + "depth": 1 + }, + { + "pc": 683, + "op": "SUB", + "gas": 9988708, + "gasCost": 3, + "depth": 1 + }, + { + "pc": 684, + "op": "AND", + "gas": 9988705, + "gasCost": 3, + "depth": 1 + }, + { + "pc": 685, + "op": "CALLER", + "gas": 9988702, + "gasCost": 2, + "depth": 1 + }, + { + "pc": 686, + "op": "PUSH1", + "gas": 9988700, + "gasCost": 3, + "depth": 1 + }, + { + "pc": 688, + "op": "PUSH1", + "gas": 9988697, + "gasCost": 3, + "depth": 1 + }, + { + "pc": 690, + "op": "PUSH1", + "gas": 9988694, + "gasCost": 3, + "depth": 1 + }, + { + "pc": 692, + "op": "SHL", + "gas": 9988691, + "gasCost": 3, + "depth": 1 + }, + { + "pc": 693, + "op": "SUB", + "gas": 9988688, + "gasCost": 3, + "depth": 1 + }, + { + "pc": 694, + "op": "AND", + "gas": 9988685, + "gasCost": 3, + "depth": 1 + }, + { + "pc": 695, + "op": "EQ", + "gas": 9988682, + "gasCost": 3, + "depth": 1 + }, + { + "pc": 696, + "op": "ISZERO", + "gas": 9988679, + "gasCost": 3, + "depth": 1 + }, + { + "pc": 697, + "op": "PUSH2", + "gas": 9988676, + "gasCost": 3, + "depth": 1 + }, + { + "pc": 700, + "op": "JUMPI", + "gas": 9988673, + "gasCost": 10, + "depth": 1 + }, + { + "pc": 278, + "op": "JUMPDEST", + "gas": 9988663, + "gasCost": 1, + "depth": 1 + }, + { + "pc": 279, + "op": "JUMP", + "gas": 9988662, + "gasCost": 8, + "depth": 1 + }, + { + "pc": 262, + "op": "JUMPDEST", + "gas": 9988654, + "gasCost": 1, + "depth": 1 + }, + { + "pc": 263, + "op": "PUSH2", + "gas": 9988653, + "gasCost": 3, + "depth": 1 + }, + { + "pc": 266, + "op": "PUSH2", + "gas": 9988650, + "gasCost": 3, + "depth": 1 + }, + { + "pc": 269, + "op": "PUSH2", + "gas": 9988647, + "gasCost": 3, + "depth": 1 + }, + { + "pc": 272, + "op": "JUMP", + "gas": 9988644, + "gasCost": 8, + "depth": 1 + }, + { + "pc": 826, + "op": "JUMPDEST", + "gas": 9988636, + "gasCost": 1, + "depth": 1 + }, + { + "pc": 827, + "op": "PUSH1", + "gas": 9988635, + "gasCost": 3, + "depth": 1 + }, + { + "pc": 829, + "op": "PUSH2", + "gas": 9988632, + "gasCost": 3, + "depth": 1 + }, + { + "pc": 832, + "op": "PUSH2", + "gas": 9988629, + "gasCost": 3, + "depth": 1 + }, + { + "pc": 835, + "op": "JUMP", + "gas": 9988626, + "gasCost": 8, + "depth": 1 + }, + { + "pc": 1269, + "op": "JUMPDEST", + "gas": 9988618, + "gasCost": 1, + "depth": 1 + }, + { + "pc": 1270, + "op": "PUSH1", + "gas": 9988617, + "gasCost": 3, + "depth": 1 + }, + { + "pc": 1272, + "op": "PUSH32", + "gas": 9988614, + "gasCost": 3, + "depth": 1 + }, + { + "pc": 1305, + "op": "PUSH2", + "gas": 9988611, + "gasCost": 3, + "depth": 1 + }, + { + "pc": 1308, + "op": "JUMP", + "gas": 9988608, + "gasCost": 8, + "depth": 1 + }, + { + "pc": 908, + "op": "JUMPDEST", + "gas": 9988600, + "gasCost": 1, + "depth": 1 + }, + { + "pc": 909, + "op": "SLOAD", + "gas": 9988599, + "gasCost": 100, + "depth": 1, + "storage": { + "360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc": "00000000000000000000000060571c8f4b52954a24a5e7306d435e951528d963", + "b53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103": "000000000000000000000000264aae078cc695f7d0b66260895aee9d4e83e730" + } + }, + { + "pc": 910, + "op": "PUSH1", + "gas": 9988499, + "gasCost": 3, + "depth": 1 + }, + { + "pc": 912, + "op": "PUSH1", + "gas": 9988496, + "gasCost": 3, + "depth": 1 + }, + { + "pc": 914, + "op": "PUSH1", + "gas": 9988493, + "gasCost": 3, + "depth": 1 + }, + { + "pc": 916, + "op": "SHL", + "gas": 9988490, + "gasCost": 3, + "depth": 1 + }, + { + "pc": 917, + "op": "SUB", + "gas": 9988487, + "gasCost": 3, + "depth": 1 + }, + { + "pc": 918, + "op": "AND", + "gas": 9988484, + "gasCost": 3, + "depth": 1 + }, + { + "pc": 919, + "op": "SWAP2", + "gas": 9988481, + "gasCost": 3, + "depth": 1 + }, + { + "pc": 920, + "op": "SWAP1", + "gas": 9988478, + "gasCost": 3, + "depth": 1 + }, + { + "pc": 921, + "op": "POP", + "gas": 9988475, + "gasCost": 2, + "depth": 1 + }, + { + "pc": 922, + "op": "JUMP", + "gas": 9988473, + "gasCost": 8, + "depth": 1 + }, + { + "pc": 507, + "op": "JUMPDEST", + "gas": 9988465, + "gasCost": 1, + "depth": 1 + }, + { + "pc": 508, + "op": "SWAP1", + "gas": 9988464, + "gasCost": 3, + "depth": 1 + }, + { + "pc": 509, + "op": "POP", + "gas": 9988461, + "gasCost": 2, + "depth": 1 + }, + { + "pc": 510, + "op": "SWAP1", + "gas": 9988459, + "gasCost": 3, + "depth": 1 + }, + { + "pc": 511, + "op": "JUMP", + "gas": 9988456, + "gasCost": 8, + "depth": 1 + }, + { + "pc": 273, + "op": "JUMPDEST", + "gas": 9988448, + "gasCost": 1, + "depth": 1 + }, + { + "pc": 274, + "op": "PUSH2", + "gas": 9988447, + "gasCost": 3, + "depth": 1 + }, + { + "pc": 277, + "op": "JUMP", + "gas": 9988444, + "gasCost": 8, + "depth": 1 + }, + { + "pc": 836, + "op": "JUMPDEST", + "gas": 9988436, + "gasCost": 1, + "depth": 1 + }, + { + "pc": 837, + "op": "CALLDATASIZE", + "gas": 9988435, + "gasCost": 2, + "depth": 1 + }, + { + "pc": 838, + "op": "PUSH1", + "gas": 9988433, + "gasCost": 3, + "depth": 1 + }, + { + "pc": 840, + "op": "DUP1", + "gas": 9988430, + "gasCost": 3, + "depth": 1 + }, + { + "pc": 841, + "op": "CALLDATACOPY", + "gas": 9988427, + "gasCost": 212, + "depth": 1 + }, + { + "pc": 842, + "op": "PUSH1", + "gas": 9988215, + "gasCost": 3, + "depth": 1 + }, + { + "pc": 844, + "op": "DUP1", + "gas": 9988212, + "gasCost": 3, + "depth": 1 + }, + { + "pc": 845, + "op": "CALLDATASIZE", + "gas": 9988209, + "gasCost": 2, + "depth": 1 + }, + { + "pc": 846, + "op": "PUSH1", + "gas": 9988207, + "gasCost": 3, + "depth": 1 + }, + { + "pc": 848, + "op": "DUP5", + "gas": 9988204, + "gasCost": 3, + "depth": 1 + }, + { + "pc": 849, + "op": "GAS", + "gas": 9988201, + "gasCost": 2, + "depth": 1 + }, + { + "pc": 850, + "op": "DELEGATECALL", + "gas": 9988199, + "gasCost": 9832175, + "depth": 1 + }, + { + "pc": 0, + "op": "PUSH1", + "gas": 9829575, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 2, + "op": "PUSH1", + "gas": 9829572, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 4, + "op": "MSTORE", + "gas": 9829569, + "gasCost": 12, + "depth": 2 + }, + { + "pc": 5, + "op": "CALLVALUE", + "gas": 9829557, + "gasCost": 2, + "depth": 2 + }, + { + "pc": 6, + "op": "DUP1", + "gas": 9829555, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 7, + "op": "ISZERO", + "gas": 9829552, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 8, + "op": "PUSH2", + "gas": 9829549, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 11, + "op": "JUMPI", + "gas": 9829546, + "gasCost": 10, + "depth": 2 + }, + { + "pc": 16, + "op": "JUMPDEST", + "gas": 9829536, + "gasCost": 1, + "depth": 2 + }, + { + "pc": 17, + "op": "POP", + "gas": 9829535, + "gasCost": 2, + "depth": 2 + }, + { + "pc": 18, + "op": "PUSH1", + "gas": 9829533, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 20, + "op": "CALLDATASIZE", + "gas": 9829530, + "gasCost": 2, + "depth": 2 + }, + { + "pc": 21, + "op": "LT", + "gas": 9829528, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 22, + "op": "PUSH2", + "gas": 9829525, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 25, + "op": "JUMPI", + "gas": 9829522, + "gasCost": 10, + "depth": 2 + }, + { + "pc": 26, + "op": "PUSH1", + "gas": 9829512, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 28, + "op": "CALLDATALOAD", + "gas": 9829509, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 29, + "op": "PUSH1", + "gas": 9829506, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 31, + "op": "SHR", + "gas": 9829503, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 32, + "op": "DUP1", + "gas": 9829500, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 33, + "op": "PUSH4", + "gas": 9829497, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 38, + "op": "GT", + "gas": 9829494, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 39, + "op": "PUSH2", + "gas": 9829491, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 42, + "op": "JUMPI", + "gas": 9829488, + "gasCost": 10, + "depth": 2 + }, + { + "pc": 326, + "op": "JUMPDEST", + "gas": 9829478, + "gasCost": 1, + "depth": 2 + }, + { + "pc": 327, + "op": "DUP1", + "gas": 9829477, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 328, + "op": "PUSH4", + "gas": 9829474, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 333, + "op": "GT", + "gas": 9829471, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 334, + "op": "PUSH2", + "gas": 9829468, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 337, + "op": "JUMPI", + "gas": 9829465, + "gasCost": 10, + "depth": 2 + }, + { + "pc": 338, + "op": "DUP1", + "gas": 9829455, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 339, + "op": "PUSH4", + "gas": 9829452, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 344, + "op": "GT", + "gas": 9829449, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 345, + "op": "PUSH2", + "gas": 9829446, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 348, + "op": "JUMPI", + "gas": 9829443, + "gasCost": 10, + "depth": 2 + }, + { + "pc": 419, + "op": "JUMPDEST", + "gas": 9829433, + "gasCost": 1, + "depth": 2 + }, + { + "pc": 420, + "op": "DUP1", + "gas": 9829432, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 421, + "op": "PUSH4", + "gas": 9829429, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 426, + "op": "EQ", + "gas": 9829426, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 427, + "op": "PUSH2", + "gas": 9829423, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 430, + "op": "JUMPI", + "gas": 9829420, + "gasCost": 10, + "depth": 2 + }, + { + "pc": 431, + "op": "DUP1", + "gas": 9829410, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 432, + "op": "PUSH4", + "gas": 9829407, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 437, + "op": "EQ", + "gas": 9829404, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 438, + "op": "PUSH2", + "gas": 9829401, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 441, + "op": "JUMPI", + "gas": 9829398, + "gasCost": 10, + "depth": 2 + }, + { + "pc": 841, + "op": "JUMPDEST", + "gas": 9829388, + "gasCost": 1, + "depth": 2 + }, + { + "pc": 842, + "op": "PUSH2", + "gas": 9829387, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 845, + "op": "PUSH2", + "gas": 9829384, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 848, + "op": "CALLDATASIZE", + "gas": 9829381, + "gasCost": 2, + "depth": 2 + }, + { + "pc": 849, + "op": "PUSH1", + "gas": 9829379, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 851, + "op": "PUSH2", + "gas": 9829376, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 854, + "op": "JUMP", + "gas": 9829373, + "gasCost": 8, + "depth": 2 + }, + { + "pc": 12830, + "op": "JUMPDEST", + "gas": 9829365, + "gasCost": 1, + "depth": 2 + }, + { + "pc": 12831, + "op": "PUSH1", + "gas": 9829364, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 12833, + "op": "DUP1", + "gas": 9829361, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 12834, + "op": "PUSH1", + "gas": 9829358, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 12836, + "op": "DUP1", + "gas": 9829355, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 12837, + "op": "PUSH1", + "gas": 9829352, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 12839, + "op": "DUP1", + "gas": 9829349, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 12840, + "op": "PUSH1", + "gas": 9829346, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 12842, + "op": "DUP8", + "gas": 9829343, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 12843, + "op": "DUP10", + "gas": 9829340, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 12844, + "op": "SUB", + "gas": 9829337, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 12845, + "op": "SLT", + "gas": 9829334, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 12846, + "op": "ISZERO", + "gas": 9829331, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 12847, + "op": "PUSH2", + "gas": 9829328, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 12850, + "op": "JUMPI", + "gas": 9829325, + "gasCost": 10, + "depth": 2 + }, + { + "pc": 12855, + "op": "JUMPDEST", + "gas": 9829315, + "gasCost": 1, + "depth": 2 + }, + { + "pc": 12856, + "op": "DUP7", + "gas": 9829314, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 12857, + "op": "CALLDATALOAD", + "gas": 9829311, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 12858, + "op": "SWAP6", + "gas": 9829308, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 12859, + "op": "POP", + "gas": 9829305, + "gasCost": 2, + "depth": 2 + }, + { + "pc": 12860, + "op": "PUSH1", + "gas": 9829303, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 12862, + "op": "DUP8", + "gas": 9829300, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 12863, + "op": "ADD", + "gas": 9829297, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 12864, + "op": "CALLDATALOAD", + "gas": 9829294, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 12865, + "op": "PUSH1", + "gas": 9829291, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 12867, + "op": "PUSH1", + "gas": 9829288, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 12869, + "op": "PUSH1", + "gas": 9829285, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 12871, + "op": "SHL", + "gas": 9829282, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 12872, + "op": "SUB", + "gas": 9829279, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 12873, + "op": "DUP1", + "gas": 9829276, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 12874, + "op": "DUP3", + "gas": 9829273, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 12875, + "op": "GT", + "gas": 9829270, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 12876, + "op": "ISZERO", + "gas": 9829267, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 12877, + "op": "PUSH2", + "gas": 9829264, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 12880, + "op": "JUMPI", + "gas": 9829261, + "gasCost": 10, + "depth": 2 + }, + { + "pc": 12885, + "op": "JUMPDEST", + "gas": 9829251, + "gasCost": 1, + "depth": 2 + }, + { + "pc": 12886, + "op": "SWAP1", + "gas": 9829250, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 12887, + "op": "DUP9", + "gas": 9829247, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 12888, + "op": "ADD", + "gas": 9829244, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 12889, + "op": "SWAP1", + "gas": 9829241, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 12890, + "op": "PUSH1", + "gas": 9829238, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 12892, + "op": "DUP3", + "gas": 9829235, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 12893, + "op": "DUP12", + "gas": 9829232, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 12894, + "op": "SUB", + "gas": 9829229, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 12895, + "op": "SLT", + "gas": 9829226, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 12896, + "op": "ISZERO", + "gas": 9829223, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 12897, + "op": "PUSH2", + "gas": 9829220, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 12900, + "op": "JUMPI", + "gas": 9829217, + "gasCost": 10, + "depth": 2 + }, + { + "pc": 12905, + "op": "JUMPDEST", + "gas": 9829207, + "gasCost": 1, + "depth": 2 + }, + { + "pc": 12906, + "op": "SWAP1", + "gas": 9829206, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 12907, + "op": "SWAP6", + "gas": 9829203, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 12908, + "op": "POP", + "gas": 9829200, + "gasCost": 2, + "depth": 2 + }, + { + "pc": 12909, + "op": "PUSH1", + "gas": 9829198, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 12911, + "op": "DUP9", + "gas": 9829195, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 12912, + "op": "ADD", + "gas": 9829192, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 12913, + "op": "CALLDATALOAD", + "gas": 9829189, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 12914, + "op": "SWAP1", + "gas": 9829186, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 12915, + "op": "DUP1", + "gas": 9829183, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 12916, + "op": "DUP3", + "gas": 9829180, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 12917, + "op": "GT", + "gas": 9829177, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 12918, + "op": "ISZERO", + "gas": 9829174, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 12919, + "op": "PUSH2", + "gas": 9829171, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 12922, + "op": "JUMPI", + "gas": 9829168, + "gasCost": 10, + "depth": 2 + }, + { + "pc": 12927, + "op": "JUMPDEST", + "gas": 9829158, + "gasCost": 1, + "depth": 2 + }, + { + "pc": 12928, + "op": "POP", + "gas": 9829157, + "gasCost": 2, + "depth": 2 + }, + { + "pc": 12929, + "op": "PUSH2", + "gas": 9829155, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 12932, + "op": "DUP10", + "gas": 9829152, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 12933, + "op": "DUP3", + "gas": 9829149, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 12934, + "op": "DUP11", + "gas": 9829146, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 12935, + "op": "ADD", + "gas": 9829143, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 12936, + "op": "PUSH2", + "gas": 9829140, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 12939, + "op": "JUMP", + "gas": 9829137, + "gasCost": 8, + "depth": 2 + }, + { + "pc": 12572, + "op": "JUMPDEST", + "gas": 9829129, + "gasCost": 1, + "depth": 2 + }, + { + "pc": 12573, + "op": "PUSH1", + "gas": 9829128, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 12575, + "op": "PUSH1", + "gas": 9829125, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 12577, + "op": "DUP3", + "gas": 9829122, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 12578, + "op": "DUP5", + "gas": 9829119, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 12579, + "op": "SUB", + "gas": 9829116, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 12580, + "op": "SLT", + "gas": 9829113, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 12581, + "op": "ISZERO", + "gas": 9829110, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 12582, + "op": "PUSH2", + "gas": 9829107, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 12585, + "op": "JUMPI", + "gas": 9829104, + "gasCost": 10, + "depth": 2 + }, + { + "pc": 12590, + "op": "JUMPDEST", + "gas": 9829094, + "gasCost": 1, + "depth": 2 + }, + { + "pc": 12591, + "op": "POP", + "gas": 9829093, + "gasCost": 2, + "depth": 2 + }, + { + "pc": 12592, + "op": "SWAP2", + "gas": 9829091, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 12593, + "op": "SWAP1", + "gas": 9829088, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 12594, + "op": "POP", + "gas": 9829085, + "gasCost": 2, + "depth": 2 + }, + { + "pc": 12595, + "op": "JUMP", + "gas": 9829083, + "gasCost": 8, + "depth": 2 + }, + { + "pc": 12940, + "op": "JUMPDEST", + "gas": 9829075, + "gasCost": 1, + "depth": 2 + }, + { + "pc": 12941, + "op": "SWAP5", + "gas": 9829074, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 12942, + "op": "POP", + "gas": 9829071, + "gasCost": 2, + "depth": 2 + }, + { + "pc": 12943, + "op": "POP", + "gas": 9829069, + "gasCost": 2, + "depth": 2 + }, + { + "pc": 12944, + "op": "PUSH1", + "gas": 9829067, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 12946, + "op": "DUP8", + "gas": 9829064, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 12947, + "op": "ADD", + "gas": 9829061, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 12948, + "op": "CALLDATALOAD", + "gas": 9829058, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 12949, + "op": "SWAP3", + "gas": 9829055, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 12950, + "op": "POP", + "gas": 9829052, + "gasCost": 2, + "depth": 2 + }, + { + "pc": 12951, + "op": "PUSH1", + "gas": 9829050, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 12953, + "op": "DUP8", + "gas": 9829047, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 12954, + "op": "ADD", + "gas": 9829044, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 12955, + "op": "CALLDATALOAD", + "gas": 9829041, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 12956, + "op": "SWAP2", + "gas": 9829038, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 12957, + "op": "POP", + "gas": 9829035, + "gasCost": 2, + "depth": 2 + }, + { + "pc": 12958, + "op": "PUSH1", + "gas": 9829033, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 12960, + "op": "DUP8", + "gas": 9829030, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 12961, + "op": "ADD", + "gas": 9829027, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 12962, + "op": "CALLDATALOAD", + "gas": 9829024, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 12963, + "op": "SWAP1", + "gas": 9829021, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 12964, + "op": "POP", + "gas": 9829018, + "gasCost": 2, + "depth": 2 + }, + { + "pc": 12965, + "op": "SWAP3", + "gas": 9829016, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 12966, + "op": "SWAP6", + "gas": 9829013, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 12967, + "op": "POP", + "gas": 9829010, + "gasCost": 2, + "depth": 2 + }, + { + "pc": 12968, + "op": "SWAP3", + "gas": 9829008, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 12969, + "op": "SWAP6", + "gas": 9829005, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 12970, + "op": "POP", + "gas": 9829002, + "gasCost": 2, + "depth": 2 + }, + { + "pc": 12971, + "op": "SWAP3", + "gas": 9829000, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 12972, + "op": "SWAP6", + "gas": 9828997, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 12973, + "op": "JUMP", + "gas": 9828994, + "gasCost": 8, + "depth": 2 + }, + { + "pc": 855, + "op": "JUMPDEST", + "gas": 9828986, + "gasCost": 1, + "depth": 2 + }, + { + "pc": 856, + "op": "PUSH2", + "gas": 9828985, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 859, + "op": "JUMP", + "gas": 9828982, + "gasCost": 8, + "depth": 2 + }, + { + "pc": 3844, + "op": "JUMPDEST", + "gas": 9828974, + "gasCost": 1, + "depth": 2 + }, + { + "pc": 3845, + "op": "CALLER", + "gas": 9828973, + "gasCost": 2, + "depth": 2 + }, + { + "pc": 3846, + "op": "PUSH1", + "gas": 9828971, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 3848, + "op": "SWAP1", + "gas": 9828968, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 3849, + "op": "DUP2", + "gas": 9828965, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 3850, + "op": "MSTORE", + "gas": 9828962, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 3851, + "op": "PUSH1", + "gas": 9828959, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 3853, + "op": "PUSH1", + "gas": 9828956, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 3855, + "op": "MSTORE", + "gas": 9828953, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 3856, + "op": "PUSH1", + "gas": 9828950, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 3858, + "op": "SWAP1", + "gas": 9828947, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 3859, + "op": "KECCAK256", + "gas": 9828944, + "gasCost": 42, + "depth": 2 + }, + { + "pc": 3860, + "op": "SLOAD", + "gas": 9828902, + "gasCost": 2100, + "depth": 2, + "storage": { + "360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc": "00000000000000000000000060571c8f4b52954a24a5e7306d435e951528d963", + "b53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103": "000000000000000000000000264aae078cc695f7d0b66260895aee9d4e83e730", + "d343c84be1c85a440922a059e46ad21d2f412ae5bec5ee65c2c0d39dd877c54d": "0000000000000000000000000000000000000000000000000000000000000001" + } + }, + { + "pc": 3861, + "op": "PUSH1", + "gas": 9826802, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 3863, + "op": "AND", + "gas": 9826799, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 3864, + "op": "PUSH2", + "gas": 9826796, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 3867, + "op": "JUMPI", + "gas": 9826793, + "gasCost": 10, + "depth": 2 + }, + { + "pc": 3892, + "op": "JUMPDEST", + "gas": 9826783, + "gasCost": 1, + "depth": 2 + }, + { + "pc": 3893, + "op": "PUSH1", + "gas": 9826782, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 3895, + "op": "SLOAD", + "gas": 9826779, + "gasCost": 2100, + "depth": 2, + "storage": { + "0000000000000000000000000000000000000000000000000000000000000003": "0000000000000000000000000000000000000000000000000000000000000000", + "360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc": "00000000000000000000000060571c8f4b52954a24a5e7306d435e951528d963", + "b53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103": "000000000000000000000000264aae078cc695f7d0b66260895aee9d4e83e730", + "d343c84be1c85a440922a059e46ad21d2f412ae5bec5ee65c2c0d39dd877c54d": "0000000000000000000000000000000000000000000000000000000000000001" + } + }, + { + "pc": 3896, + "op": "PUSH1", + "gas": 9824679, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 3898, + "op": "SLOAD", + "gas": 9824676, + "gasCost": 2100, + "depth": 2, + "storage": { + "0000000000000000000000000000000000000000000000000000000000000002": "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000003": "0000000000000000000000000000000000000000000000000000000000000000", + "360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc": "00000000000000000000000060571c8f4b52954a24a5e7306d435e951528d963", + "b53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103": "000000000000000000000000264aae078cc695f7d0b66260895aee9d4e83e730", + "d343c84be1c85a440922a059e46ad21d2f412ae5bec5ee65c2c0d39dd877c54d": "0000000000000000000000000000000000000000000000000000000000000001" + } + }, + { + "pc": 3899, + "op": "PUSH1", + "gas": 9822576, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 3901, + "op": "MLOAD", + "gas": 9822573, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 3902, + "op": "PUSH4", + "gas": 9822570, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 3907, + "op": "PUSH1", + "gas": 9822567, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 3909, + "op": "SHL", + "gas": 9822564, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 3910, + "op": "DUP2", + "gas": 9822561, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 3911, + "op": "MSTORE", + "gas": 9822558, + "gasCost": 9, + "depth": 2 + }, + { + "pc": 3912, + "op": "PUSH1", + "gas": 9822549, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 3914, + "op": "PUSH1", + "gas": 9822546, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 3916, + "op": "PUSH1", + "gas": 9822543, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 3918, + "op": "SHL", + "gas": 9822540, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 3919, + "op": "SUB", + "gas": 9822537, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 3920, + "op": "SWAP3", + "gas": 9822534, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 3921, + "op": "DUP4", + "gas": 9822531, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 3922, + "op": "AND", + "gas": 9822528, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 3923, + "op": "SWAP3", + "gas": 9822525, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 3924, + "op": "PUSH4", + "gas": 9822522, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 3929, + "op": "SWAP3", + "gas": 9822519, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 3930, + "op": "PUSH2", + "gas": 9822516, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 3933, + "op": "SWAP3", + "gas": 9822513, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 3934, + "op": "DUP10", + "gas": 9822510, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 3935, + "op": "SWAP3", + "gas": 9822507, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 3936, + "op": "SWAP1", + "gas": 9822504, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 3937, + "op": "SWAP2", + "gas": 9822501, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 3938, + "op": "AND", + "gas": 9822498, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 3939, + "op": "SWAP1", + "gas": 9822495, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 3940, + "op": "DUP11", + "gas": 9822492, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 3941, + "op": "SWAP1", + "gas": 9822489, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 3942, + "op": "PUSH1", + "gas": 9822486, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 3944, + "op": "ADD", + "gas": 9822483, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 3945, + "op": "PUSH2", + "gas": 9822480, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 3948, + "op": "JUMP", + "gas": 9822477, + "gasCost": 8, + "depth": 2 + }, + { + "pc": 15222, + "op": "JUMPDEST", + "gas": 9822469, + "gasCost": 1, + "depth": 2 + }, + { + "pc": 15223, + "op": "PUSH1", + "gas": 9822468, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 15225, + "op": "DUP2", + "gas": 9822465, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 15226, + "op": "MSTORE", + "gas": 9822462, + "gasCost": 6, + "depth": 2 + }, + { + "pc": 15227, + "op": "DUP4", + "gas": 9822456, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 15228, + "op": "CALLDATALOAD", + "gas": 9822453, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 15229, + "op": "PUSH1", + "gas": 9822450, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 15231, + "op": "DUP3", + "gas": 9822447, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 15232, + "op": "ADD", + "gas": 9822444, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 15233, + "op": "MSTORE", + "gas": 9822441, + "gasCost": 12, + "depth": 2 + }, + { + "pc": 15234, + "op": "PUSH1", + "gas": 9822429, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 15236, + "op": "DUP5", + "gas": 9822426, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 15237, + "op": "ADD", + "gas": 9822423, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 15238, + "op": "CALLDATALOAD", + "gas": 9822420, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 15239, + "op": "PUSH1", + "gas": 9822417, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 15241, + "op": "DUP3", + "gas": 9822414, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 15242, + "op": "ADD", + "gas": 9822411, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 15243, + "op": "MSTORE", + "gas": 9822408, + "gasCost": 6, + "depth": 2 + }, + { + "pc": 15244, + "op": "PUSH4", + "gas": 9822402, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 15249, + "op": "PUSH2", + "gas": 9822399, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 15252, + "op": "PUSH1", + "gas": 9822396, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 15254, + "op": "DUP7", + "gas": 9822393, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 15255, + "op": "ADD", + "gas": 9822390, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 15256, + "op": "PUSH2", + "gas": 9822387, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 15259, + "op": "JUMP", + "gas": 9822384, + "gasCost": 8, + "depth": 2 + }, + { + "pc": 14635, + "op": "JUMPDEST", + "gas": 9822376, + "gasCost": 1, + "depth": 2 + }, + { + "pc": 14636, + "op": "DUP1", + "gas": 9822375, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 14637, + "op": "CALLDATALOAD", + "gas": 9822372, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 14638, + "op": "PUSH4", + "gas": 9822369, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 14643, + "op": "DUP2", + "gas": 9822366, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 14644, + "op": "AND", + "gas": 9822363, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 14645, + "op": "DUP2", + "gas": 9822360, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 14646, + "op": "EQ", + "gas": 9822357, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 14647, + "op": "PUSH2", + "gas": 9822354, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 14650, + "op": "JUMPI", + "gas": 9822351, + "gasCost": 10, + "depth": 2 + }, + { + "pc": 13657, + "op": "JUMPDEST", + "gas": 9822341, + "gasCost": 1, + "depth": 2 + }, + { + "pc": 13658, + "op": "SWAP2", + "gas": 9822340, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 13659, + "op": "SWAP1", + "gas": 9822337, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 13660, + "op": "POP", + "gas": 9822334, + "gasCost": 2, + "depth": 2 + }, + { + "pc": 13661, + "op": "JUMP", + "gas": 9822332, + "gasCost": 8, + "depth": 2 + }, + { + "pc": 15260, + "op": "JUMPDEST", + "gas": 9822324, + "gasCost": 1, + "depth": 2 + }, + { + "pc": 15261, + "op": "AND", + "gas": 9822323, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 15262, + "op": "PUSH1", + "gas": 9822320, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 15264, + "op": "DUP3", + "gas": 9822317, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 15265, + "op": "ADD", + "gas": 9822314, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 15266, + "op": "MSTORE", + "gas": 9822311, + "gasCost": 6, + "depth": 2 + }, + { + "pc": 15267, + "op": "PUSH1", + "gas": 9822305, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 15269, + "op": "PUSH1", + "gas": 9822302, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 15271, + "op": "DUP6", + "gas": 9822299, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 15272, + "op": "ADD", + "gas": 9822296, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 15273, + "op": "CALLDATALOAD", + "gas": 9822293, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 15274, + "op": "PUSH1", + "gas": 9822290, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 15276, + "op": "NOT", + "gas": 9822287, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 15277, + "op": "DUP7", + "gas": 9822284, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 15278, + "op": "CALLDATASIZE", + "gas": 9822281, + "gasCost": 2, + "depth": 2 + }, + { + "pc": 15279, + "op": "SUB", + "gas": 9822279, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 15280, + "op": "ADD", + "gas": 9822276, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 15281, + "op": "DUP2", + "gas": 9822273, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 15282, + "op": "SLT", + "gas": 9822270, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 15283, + "op": "PUSH2", + "gas": 9822267, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 15286, + "op": "JUMPI", + "gas": 9822264, + "gasCost": 10, + "depth": 2 + }, + { + "pc": 15291, + "op": "JUMPDEST", + "gas": 9822254, + "gasCost": 1, + "depth": 2 + }, + { + "pc": 15292, + "op": "DUP6", + "gas": 9822253, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 15293, + "op": "ADD", + "gas": 9822250, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 15294, + "op": "DUP1", + "gas": 9822247, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 15295, + "op": "CALLDATALOAD", + "gas": 9822244, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 15296, + "op": "PUSH1", + "gas": 9822241, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 15298, + "op": "PUSH1", + "gas": 9822238, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 15300, + "op": "PUSH1", + "gas": 9822235, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 15302, + "op": "SHL", + "gas": 9822232, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 15303, + "op": "SUB", + "gas": 9822229, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 15304, + "op": "DUP2", + "gas": 9822226, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 15305, + "op": "GT", + "gas": 9822223, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 15306, + "op": "ISZERO", + "gas": 9822220, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 15307, + "op": "PUSH2", + "gas": 9822217, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 15310, + "op": "JUMPI", + "gas": 9822214, + "gasCost": 10, + "depth": 2 + }, + { + "pc": 15315, + "op": "JUMPDEST", + "gas": 9822204, + "gasCost": 1, + "depth": 2 + }, + { + "pc": 15316, + "op": "DUP1", + "gas": 9822203, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 15317, + "op": "PUSH1", + "gas": 9822200, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 15319, + "op": "SHL", + "gas": 9822197, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 15320, + "op": "CALLDATASIZE", + "gas": 9822194, + "gasCost": 2, + "depth": 2 + }, + { + "pc": 15321, + "op": "SUB", + "gas": 9822192, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 15322, + "op": "DUP8", + "gas": 9822189, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 15323, + "op": "SGT", + "gas": 9822186, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 15324, + "op": "ISZERO", + "gas": 9822183, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 15325, + "op": "PUSH2", + "gas": 9822180, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 15328, + "op": "JUMPI", + "gas": 9822177, + "gasCost": 10, + "depth": 2 + }, + { + "pc": 15333, + "op": "JUMPDEST", + "gas": 9822167, + "gasCost": 1, + "depth": 2 + }, + { + "pc": 15334, + "op": "PUSH1", + "gas": 9822166, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 15336, + "op": "PUSH1", + "gas": 9822163, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 15338, + "op": "DUP6", + "gas": 9822160, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 15339, + "op": "ADD", + "gas": 9822157, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 15340, + "op": "MSTORE", + "gas": 9822154, + "gasCost": 6, + "depth": 2 + }, + { + "pc": 15341, + "op": "PUSH2", + "gas": 9822148, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 15344, + "op": "PUSH1", + "gas": 9822145, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 15346, + "op": "DUP6", + "gas": 9822142, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 15347, + "op": "ADD", + "gas": 9822139, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 15348, + "op": "DUP3", + "gas": 9822136, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 15349, + "op": "PUSH1", + "gas": 9822133, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 15351, + "op": "DUP6", + "gas": 9822130, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 15352, + "op": "ADD", + "gas": 9822127, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 15353, + "op": "PUSH2", + "gas": 9822124, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 15356, + "op": "JUMP", + "gas": 9822121, + "gasCost": 8, + "depth": 2 + }, + { + "pc": 14655, + "op": "JUMPDEST", + "gas": 9822113, + "gasCost": 1, + "depth": 2 + }, + { + "pc": 14656, + "op": "DUP2", + "gas": 9822112, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 14657, + "op": "DUP4", + "gas": 9822109, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 14658, + "op": "MSTORE", + "gas": 9822106, + "gasCost": 6, + "depth": 2 + }, + { + "pc": 14659, + "op": "PUSH1", + "gas": 9822100, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 14661, + "op": "PUSH1", + "gas": 9822097, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 14663, + "op": "DUP1", + "gas": 9822094, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 14664, + "op": "DUP6", + "gas": 9822091, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 14665, + "op": "ADD", + "gas": 9822088, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 14666, + "op": "SWAP5", + "gas": 9822085, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 14667, + "op": "POP", + "gas": 9822082, + "gasCost": 2, + "depth": 2 + }, + { + "pc": 14668, + "op": "DUP3", + "gas": 9822080, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 14669, + "op": "PUSH1", + "gas": 9822077, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 14671, + "op": "JUMPDEST", + "gas": 9822074, + "gasCost": 1, + "depth": 2 + }, + { + "pc": 14672, + "op": "DUP6", + "gas": 9822073, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 14673, + "op": "DUP2", + "gas": 9822070, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 14674, + "op": "LT", + "gas": 9822067, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 14675, + "op": "ISZERO", + "gas": 9822064, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 14676, + "op": "PUSH2", + "gas": 9822061, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 14679, + "op": "JUMPI", + "gas": 9822058, + "gasCost": 10, + "depth": 2 + }, + { + "pc": 14680, + "op": "PUSH1", + "gas": 9822048, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 14682, + "op": "DUP1", + "gas": 9822045, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 14683, + "op": "PUSH2", + "gas": 9822042, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 14686, + "op": "DUP5", + "gas": 9822039, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 14687, + "op": "PUSH2", + "gas": 9822036, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 14690, + "op": "JUMP", + "gas": 9822033, + "gasCost": 8, + "depth": 2 + }, + { + "pc": 13640, + "op": "JUMPDEST", + "gas": 9822025, + "gasCost": 1, + "depth": 2 + }, + { + "pc": 13641, + "op": "DUP1", + "gas": 9822024, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 13642, + "op": "CALLDATALOAD", + "gas": 9822021, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 13643, + "op": "PUSH1", + "gas": 9822018, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 13645, + "op": "DUP2", + "gas": 9822015, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 13646, + "op": "AND", + "gas": 9822012, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 13647, + "op": "DUP2", + "gas": 9822009, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 13648, + "op": "EQ", + "gas": 9822006, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 13649, + "op": "PUSH2", + "gas": 9822003, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 13652, + "op": "JUMPI", + "gas": 9822000, + "gasCost": 10, + "depth": 2 + }, + { + "pc": 13657, + "op": "JUMPDEST", + "gas": 9821990, + "gasCost": 1, + "depth": 2 + }, + { + "pc": 13658, + "op": "SWAP2", + "gas": 9821989, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 13659, + "op": "SWAP1", + "gas": 9821986, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 13660, + "op": "POP", + "gas": 9821983, + "gasCost": 2, + "depth": 2 + }, + { + "pc": 13661, + "op": "JUMP", + "gas": 9821981, + "gasCost": 8, + "depth": 2 + }, + { + "pc": 14691, + "op": "JUMPDEST", + "gas": 9821973, + "gasCost": 1, + "depth": 2 + }, + { + "pc": 14692, + "op": "AND", + "gas": 9821972, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 14693, + "op": "DUP9", + "gas": 9821969, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 14694, + "op": "MSTORE", + "gas": 9821966, + "gasCost": 6, + "depth": 2 + }, + { + "pc": 14695, + "op": "DUP1", + "gas": 9821960, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 14696, + "op": "PUSH2", + "gas": 9821957, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 14699, + "op": "DUP6", + "gas": 9821954, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 14700, + "op": "DUP6", + "gas": 9821951, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 14701, + "op": "ADD", + "gas": 9821948, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 14702, + "op": "PUSH2", + "gas": 9821945, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 14705, + "op": "JUMP", + "gas": 9821942, + "gasCost": 8, + "depth": 2 + }, + { + "pc": 13640, + "op": "JUMPDEST", + "gas": 9821934, + "gasCost": 1, + "depth": 2 + }, + { + "pc": 13641, + "op": "DUP1", + "gas": 9821933, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 13642, + "op": "CALLDATALOAD", + "gas": 9821930, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 13643, + "op": "PUSH1", + "gas": 9821927, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 13645, + "op": "DUP2", + "gas": 9821924, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 13646, + "op": "AND", + "gas": 9821921, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 13647, + "op": "DUP2", + "gas": 9821918, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 13648, + "op": "EQ", + "gas": 9821915, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 13649, + "op": "PUSH2", + "gas": 9821912, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 13652, + "op": "JUMPI", + "gas": 9821909, + "gasCost": 10, + "depth": 2 + }, + { + "pc": 13657, + "op": "JUMPDEST", + "gas": 9821899, + "gasCost": 1, + "depth": 2 + }, + { + "pc": 13658, + "op": "SWAP2", + "gas": 9821898, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 13659, + "op": "SWAP1", + "gas": 9821895, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 13660, + "op": "POP", + "gas": 9821892, + "gasCost": 2, + "depth": 2 + }, + { + "pc": 13661, + "op": "JUMP", + "gas": 9821890, + "gasCost": 8, + "depth": 2 + }, + { + "pc": 14706, + "op": "JUMPDEST", + "gas": 9821882, + "gasCost": 1, + "depth": 2 + }, + { + "pc": 14707, + "op": "AND", + "gas": 9821881, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 14708, + "op": "DUP5", + "gas": 9821878, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 14709, + "op": "DUP10", + "gas": 9821875, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 14710, + "op": "ADD", + "gas": 9821872, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 14711, + "op": "MSTORE", + "gas": 9821869, + "gasCost": 6, + "depth": 2 + }, + { + "pc": 14712, + "op": "PUSH1", + "gas": 9821863, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 14714, + "op": "DUP2", + "gas": 9821860, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 14715, + "op": "PUSH2", + "gas": 9821857, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 14718, + "op": "DUP3", + "gas": 9821854, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 14719, + "op": "DUP7", + "gas": 9821851, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 14720, + "op": "ADD", + "gas": 9821848, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 14721, + "op": "PUSH2", + "gas": 9821845, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 14724, + "op": "JUMP", + "gas": 9821842, + "gasCost": 8, + "depth": 2 + }, + { + "pc": 13640, + "op": "JUMPDEST", + "gas": 9821834, + "gasCost": 1, + "depth": 2 + }, + { + "pc": 13641, + "op": "DUP1", + "gas": 9821833, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 13642, + "op": "CALLDATALOAD", + "gas": 9821830, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 13643, + "op": "PUSH1", + "gas": 9821827, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 13645, + "op": "DUP2", + "gas": 9821824, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 13646, + "op": "AND", + "gas": 9821821, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 13647, + "op": "DUP2", + "gas": 9821818, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 13648, + "op": "EQ", + "gas": 9821815, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 13649, + "op": "PUSH2", + "gas": 9821812, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 13652, + "op": "JUMPI", + "gas": 9821809, + "gasCost": 10, + "depth": 2 + }, + { + "pc": 13657, + "op": "JUMPDEST", + "gas": 9821799, + "gasCost": 1, + "depth": 2 + }, + { + "pc": 13658, + "op": "SWAP2", + "gas": 9821798, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 13659, + "op": "SWAP1", + "gas": 9821795, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 13660, + "op": "POP", + "gas": 9821792, + "gasCost": 2, + "depth": 2 + }, + { + "pc": 13661, + "op": "JUMP", + "gas": 9821790, + "gasCost": 8, + "depth": 2 + }, + { + "pc": 14725, + "op": "JUMPDEST", + "gas": 9821782, + "gasCost": 1, + "depth": 2 + }, + { + "pc": 14726, + "op": "AND", + "gas": 9821781, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 14727, + "op": "SWAP1", + "gas": 9821778, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 14728, + "op": "DUP10", + "gas": 9821775, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 14729, + "op": "ADD", + "gas": 9821772, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 14730, + "op": "MSTORE", + "gas": 9821769, + "gasCost": 6, + "depth": 2 + }, + { + "pc": 14731, + "op": "POP", + "gas": 9821763, + "gasCost": 2, + "depth": 2 + }, + { + "pc": 14732, + "op": "PUSH1", + "gas": 9821761, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 14734, + "op": "PUSH4", + "gas": 9821758, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 14739, + "op": "PUSH2", + "gas": 9821755, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 14742, + "op": "DUP5", + "gas": 9821752, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 14743, + "op": "DUP4", + "gas": 9821749, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 14744, + "op": "ADD", + "gas": 9821746, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 14745, + "op": "PUSH2", + "gas": 9821743, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 14748, + "op": "JUMP", + "gas": 9821740, + "gasCost": 8, + "depth": 2 + }, + { + "pc": 14635, + "op": "JUMPDEST", + "gas": 9821732, + "gasCost": 1, + "depth": 2 + }, + { + "pc": 14636, + "op": "DUP1", + "gas": 9821731, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 14637, + "op": "CALLDATALOAD", + "gas": 9821728, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 14638, + "op": "PUSH4", + "gas": 9821725, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 14643, + "op": "DUP2", + "gas": 9821722, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 14644, + "op": "AND", + "gas": 9821719, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 14645, + "op": "DUP2", + "gas": 9821716, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 14646, + "op": "EQ", + "gas": 9821713, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 14647, + "op": "PUSH2", + "gas": 9821710, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 14650, + "op": "JUMPI", + "gas": 9821707, + "gasCost": 10, + "depth": 2 + }, + { + "pc": 13657, + "op": "JUMPDEST", + "gas": 9821697, + "gasCost": 1, + "depth": 2 + }, + { + "pc": 13658, + "op": "SWAP2", + "gas": 9821696, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 13659, + "op": "SWAP1", + "gas": 9821693, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 13660, + "op": "POP", + "gas": 9821690, + "gasCost": 2, + "depth": 2 + }, + { + "pc": 13661, + "op": "JUMP", + "gas": 9821688, + "gasCost": 8, + "depth": 2 + }, + { + "pc": 14749, + "op": "JUMPDEST", + "gas": 9821680, + "gasCost": 1, + "depth": 2 + }, + { + "pc": 14750, + "op": "AND", + "gas": 9821679, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 14751, + "op": "SWAP1", + "gas": 9821676, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 14752, + "op": "DUP9", + "gas": 9821673, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 14753, + "op": "ADD", + "gas": 9821670, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 14754, + "op": "MSTORE", + "gas": 9821667, + "gasCost": 6, + "depth": 2 + }, + { + "pc": 14755, + "op": "PUSH1", + "gas": 9821661, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 14757, + "op": "SWAP7", + "gas": 9821658, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 14758, + "op": "DUP8", + "gas": 9821655, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 14759, + "op": "ADD", + "gas": 9821652, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 14760, + "op": "SWAP7", + "gas": 9821649, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 14761, + "op": "SWAP2", + "gas": 9821646, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 14762, + "op": "SWAP1", + "gas": 9821643, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 14763, + "op": "SWAP2", + "gas": 9821640, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 14764, + "op": "ADD", + "gas": 9821637, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 14765, + "op": "SWAP1", + "gas": 9821634, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 14766, + "op": "PUSH1", + "gas": 9821631, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 14768, + "op": "ADD", + "gas": 9821628, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 14769, + "op": "PUSH2", + "gas": 9821625, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 14772, + "op": "JUMP", + "gas": 9821622, + "gasCost": 8, + "depth": 2 + }, + { + "pc": 14671, + "op": "JUMPDEST", + "gas": 9821614, + "gasCost": 1, + "depth": 2 + }, + { + "pc": 14672, + "op": "DUP6", + "gas": 9821613, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 14673, + "op": "DUP2", + "gas": 9821610, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 14674, + "op": "LT", + "gas": 9821607, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 14675, + "op": "ISZERO", + "gas": 9821604, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 14676, + "op": "PUSH2", + "gas": 9821601, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 14679, + "op": "JUMPI", + "gas": 9821598, + "gasCost": 10, + "depth": 2 + }, + { + "pc": 14773, + "op": "JUMPDEST", + "gas": 9821588, + "gasCost": 1, + "depth": 2 + }, + { + "pc": 14774, + "op": "POP", + "gas": 9821587, + "gasCost": 2, + "depth": 2 + }, + { + "pc": 14775, + "op": "SWAP5", + "gas": 9821585, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 14776, + "op": "SWAP6", + "gas": 9821582, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 14777, + "op": "SWAP5", + "gas": 9821579, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 14778, + "op": "POP", + "gas": 9821576, + "gasCost": 2, + "depth": 2 + }, + { + "pc": 14779, + "op": "POP", + "gas": 9821574, + "gasCost": 2, + "depth": 2 + }, + { + "pc": 14780, + "op": "POP", + "gas": 9821572, + "gasCost": 2, + "depth": 2 + }, + { + "pc": 14781, + "op": "POP", + "gas": 9821570, + "gasCost": 2, + "depth": 2 + }, + { + "pc": 14782, + "op": "POP", + "gas": 9821568, + "gasCost": 2, + "depth": 2 + }, + { + "pc": 14783, + "op": "JUMP", + "gas": 9821566, + "gasCost": 8, + "depth": 2 + }, + { + "pc": 15357, + "op": "JUMPDEST", + "gas": 9821558, + "gasCost": 1, + "depth": 2 + }, + { + "pc": 15358, + "op": "SWAP2", + "gas": 9821557, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 15359, + "op": "POP", + "gas": 9821554, + "gasCost": 2, + "depth": 2 + }, + { + "pc": 15360, + "op": "POP", + "gas": 9821552, + "gasCost": 2, + "depth": 2 + }, + { + "pc": 15361, + "op": "PUSH2", + "gas": 9821550, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 15364, + "op": "PUSH1", + "gas": 9821547, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 15366, + "op": "DUP5", + "gas": 9821544, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 15367, + "op": "ADD", + "gas": 9821541, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 15368, + "op": "DUP7", + "gas": 9821538, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 15369, + "op": "PUSH1", + "gas": 9821535, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 15371, + "op": "PUSH1", + "gas": 9821532, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 15373, + "op": "PUSH1", + "gas": 9821529, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 15375, + "op": "SHL", + "gas": 9821526, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 15376, + "op": "SUB", + "gas": 9821523, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 15377, + "op": "AND", + "gas": 9821520, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 15378, + "op": "SWAP1", + "gas": 9821517, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 15379, + "op": "MSTORE", + "gas": 9821514, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 15380, + "op": "JUMP", + "gas": 9821511, + "gasCost": 8, + "depth": 2 + }, + { + "pc": 15381, + "op": "JUMPDEST", + "gas": 9821503, + "gasCost": 1, + "depth": 2 + }, + { + "pc": 15382, + "op": "DUP3", + "gas": 9821502, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 15383, + "op": "DUP2", + "gas": 9821499, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 15384, + "op": "SUB", + "gas": 9821496, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 15385, + "op": "PUSH1", + "gas": 9821493, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 15387, + "op": "DUP5", + "gas": 9821490, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 15388, + "op": "ADD", + "gas": 9821487, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 15389, + "op": "MSTORE", + "gas": 9821484, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 15390, + "op": "PUSH2", + "gas": 9821481, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 15393, + "op": "DUP2", + "gas": 9821478, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 15394, + "op": "DUP6", + "gas": 9821475, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 15395, + "op": "PUSH2", + "gas": 9821472, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 15398, + "op": "JUMP", + "gas": 9821469, + "gasCost": 8, + "depth": 2 + }, + { + "pc": 14894, + "op": "JUMPDEST", + "gas": 9821461, + "gasCost": 1, + "depth": 2 + }, + { + "pc": 14895, + "op": "PUSH1", + "gas": 9821460, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 14897, + "op": "PUSH4", + "gas": 9821457, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 14902, + "op": "DUP1", + "gas": 9821454, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 14903, + "op": "PUSH2", + "gas": 9821451, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 14906, + "op": "DUP5", + "gas": 9821448, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 14907, + "op": "PUSH2", + "gas": 9821445, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 14910, + "op": "JUMP", + "gas": 9821442, + "gasCost": 8, + "depth": 2 + }, + { + "pc": 14635, + "op": "JUMPDEST", + "gas": 9821434, + "gasCost": 1, + "depth": 2 + }, + { + "pc": 14636, + "op": "DUP1", + "gas": 9821433, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 14637, + "op": "CALLDATALOAD", + "gas": 9821430, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 14638, + "op": "PUSH4", + "gas": 9821427, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 14643, + "op": "DUP2", + "gas": 9821424, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 14644, + "op": "AND", + "gas": 9821421, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 14645, + "op": "DUP2", + "gas": 9821418, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 14646, + "op": "EQ", + "gas": 9821415, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 14647, + "op": "PUSH2", + "gas": 9821412, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 14650, + "op": "JUMPI", + "gas": 9821409, + "gasCost": 10, + "depth": 2 + }, + { + "pc": 13657, + "op": "JUMPDEST", + "gas": 9821399, + "gasCost": 1, + "depth": 2 + }, + { + "pc": 13658, + "op": "SWAP2", + "gas": 9821398, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 13659, + "op": "SWAP1", + "gas": 9821395, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 13660, + "op": "POP", + "gas": 9821392, + "gasCost": 2, + "depth": 2 + }, + { + "pc": 13661, + "op": "JUMP", + "gas": 9821390, + "gasCost": 8, + "depth": 2 + }, + { + "pc": 14911, + "op": "JUMPDEST", + "gas": 9821382, + "gasCost": 1, + "depth": 2 + }, + { + "pc": 14912, + "op": "AND", + "gas": 9821381, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 14913, + "op": "DUP5", + "gas": 9821378, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 14914, + "op": "MSTORE", + "gas": 9821375, + "gasCost": 6, + "depth": 2 + }, + { + "pc": 14915, + "op": "DUP1", + "gas": 9821369, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 14916, + "op": "PUSH2", + "gas": 9821366, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 14919, + "op": "PUSH1", + "gas": 9821363, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 14921, + "op": "DUP6", + "gas": 9821360, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 14922, + "op": "ADD", + "gas": 9821357, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 14923, + "op": "PUSH2", + "gas": 9821354, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 14926, + "op": "JUMP", + "gas": 9821351, + "gasCost": 8, + "depth": 2 + }, + { + "pc": 14635, + "op": "JUMPDEST", + "gas": 9821343, + "gasCost": 1, + "depth": 2 + }, + { + "pc": 14636, + "op": "DUP1", + "gas": 9821342, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 14637, + "op": "CALLDATALOAD", + "gas": 9821339, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 14638, + "op": "PUSH4", + "gas": 9821336, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 14643, + "op": "DUP2", + "gas": 9821333, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 14644, + "op": "AND", + "gas": 9821330, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 14645, + "op": "DUP2", + "gas": 9821327, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 14646, + "op": "EQ", + "gas": 9821324, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 14647, + "op": "PUSH2", + "gas": 9821321, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 14650, + "op": "JUMPI", + "gas": 9821318, + "gasCost": 10, + "depth": 2 + }, + { + "pc": 13657, + "op": "JUMPDEST", + "gas": 9821308, + "gasCost": 1, + "depth": 2 + }, + { + "pc": 13658, + "op": "SWAP2", + "gas": 9821307, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 13659, + "op": "SWAP1", + "gas": 9821304, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 13660, + "op": "POP", + "gas": 9821301, + "gasCost": 2, + "depth": 2 + }, + { + "pc": 13661, + "op": "JUMP", + "gas": 9821299, + "gasCost": 8, + "depth": 2 + }, + { + "pc": 14927, + "op": "JUMPDEST", + "gas": 9821291, + "gasCost": 1, + "depth": 2 + }, + { + "pc": 14928, + "op": "AND", + "gas": 9821290, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 14929, + "op": "PUSH1", + "gas": 9821287, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 14931, + "op": "DUP6", + "gas": 9821284, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 14932, + "op": "ADD", + "gas": 9821281, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 14933, + "op": "MSTORE", + "gas": 9821278, + "gasCost": 6, + "depth": 2 + }, + { + "pc": 14934, + "op": "PUSH1", + "gas": 9821272, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 14936, + "op": "DUP4", + "gas": 9821269, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 14937, + "op": "ADD", + "gas": 9821266, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 14938, + "op": "CALLDATALOAD", + "gas": 9821263, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 14939, + "op": "PUSH1", + "gas": 9821260, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 14941, + "op": "NOT", + "gas": 9821257, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 14942, + "op": "DUP5", + "gas": 9821254, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 14943, + "op": "CALLDATASIZE", + "gas": 9821251, + "gasCost": 2, + "depth": 2 + }, + { + "pc": 14944, + "op": "SUB", + "gas": 9821249, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 14945, + "op": "ADD", + "gas": 9821246, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 14946, + "op": "DUP2", + "gas": 9821243, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 14947, + "op": "SLT", + "gas": 9821240, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 14948, + "op": "PUSH2", + "gas": 9821237, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 14951, + "op": "JUMPI", + "gas": 9821234, + "gasCost": 10, + "depth": 2 + }, + { + "pc": 14956, + "op": "JUMPDEST", + "gas": 9821224, + "gasCost": 1, + "depth": 2 + }, + { + "pc": 14957, + "op": "PUSH1", + "gas": 9821223, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 14959, + "op": "PUSH1", + "gas": 9821220, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 14961, + "op": "DUP7", + "gas": 9821217, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 14962, + "op": "ADD", + "gas": 9821214, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 14963, + "op": "MSTORE", + "gas": 9821211, + "gasCost": 6, + "depth": 2 + }, + { + "pc": 14964, + "op": "DUP4", + "gas": 9821205, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 14965, + "op": "ADD", + "gas": 9821202, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 14966, + "op": "DUP1", + "gas": 9821199, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 14967, + "op": "CALLDATALOAD", + "gas": 9821196, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 14968, + "op": "CALLDATASIZE", + "gas": 9821193, + "gasCost": 2, + "depth": 2 + }, + { + "pc": 14969, + "op": "DUP3", + "gas": 9821191, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 14970, + "op": "SWAP1", + "gas": 9821188, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 14971, + "op": "SUB", + "gas": 9821185, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 14972, + "op": "PUSH1", + "gas": 9821182, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 14974, + "op": "NOT", + "gas": 9821179, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 14975, + "op": "ADD", + "gas": 9821176, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 14976, + "op": "DUP2", + "gas": 9821173, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 14977, + "op": "SLT", + "gas": 9821170, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 14978, + "op": "PUSH2", + "gas": 9821167, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 14981, + "op": "JUMPI", + "gas": 9821164, + "gasCost": 10, + "depth": 2 + }, + { + "pc": 14986, + "op": "JUMPDEST", + "gas": 9821154, + "gasCost": 1, + "depth": 2 + }, + { + "pc": 14987, + "op": "PUSH1", + "gas": 9821153, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 14989, + "op": "PUSH1", + "gas": 9821150, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 14991, + "op": "DUP8", + "gas": 9821147, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 14992, + "op": "ADD", + "gas": 9821144, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 14993, + "op": "MSTORE", + "gas": 9821141, + "gasCost": 13, + "depth": 2 + }, + { + "pc": 14994, + "op": "DUP2", + "gas": 9821128, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 14995, + "op": "ADD", + "gas": 9821125, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 14996, + "op": "DUP1", + "gas": 9821122, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 14997, + "op": "CALLDATALOAD", + "gas": 9821119, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 14998, + "op": "PUSH2", + "gas": 9821116, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 15001, + "op": "DUP8", + "gas": 9821113, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 15002, + "op": "ADD", + "gas": 9821110, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 15003, + "op": "MSTORE", + "gas": 9821107, + "gasCost": 12, + "depth": 2 + }, + { + "pc": 15004, + "op": "PUSH2", + "gas": 9821095, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 15007, + "op": "PUSH1", + "gas": 9821092, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 15009, + "op": "DUP3", + "gas": 9821089, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 15010, + "op": "ADD", + "gas": 9821086, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 15011, + "op": "DUP3", + "gas": 9821083, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 15012, + "op": "PUSH2", + "gas": 9821080, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 15015, + "op": "JUMP", + "gas": 9821077, + "gasCost": 8, + "depth": 2 + }, + { + "pc": 14784, + "op": "JUMPDEST", + "gas": 9821069, + "gasCost": 1, + "depth": 2 + }, + { + "pc": 14785, + "op": "PUSH1", + "gas": 9821068, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 14787, + "op": "DUP1", + "gas": 9821065, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 14788, + "op": "DUP4", + "gas": 9821062, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 14789, + "op": "CALLDATALOAD", + "gas": 9821059, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 14790, + "op": "PUSH1", + "gas": 9821056, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 14792, + "op": "NOT", + "gas": 9821053, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 14793, + "op": "DUP5", + "gas": 9821050, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 14794, + "op": "CALLDATASIZE", + "gas": 9821047, + "gasCost": 2, + "depth": 2 + }, + { + "pc": 14795, + "op": "SUB", + "gas": 9821045, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 14796, + "op": "ADD", + "gas": 9821042, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 14797, + "op": "DUP2", + "gas": 9821039, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 14798, + "op": "SLT", + "gas": 9821036, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 14799, + "op": "PUSH2", + "gas": 9821033, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 14802, + "op": "JUMPI", + "gas": 9821030, + "gasCost": 10, + "depth": 2 + }, + { + "pc": 14807, + "op": "JUMPDEST", + "gas": 9821020, + "gasCost": 1, + "depth": 2 + }, + { + "pc": 14808, + "op": "DUP4", + "gas": 9821019, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 14809, + "op": "ADD", + "gas": 9821016, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 14810, + "op": "PUSH1", + "gas": 9821013, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 14812, + "op": "DUP2", + "gas": 9821010, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 14813, + "op": "ADD", + "gas": 9821007, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 14814, + "op": "SWAP3", + "gas": 9821004, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 14815, + "op": "POP", + "gas": 9821001, + "gasCost": 2, + "depth": 2 + }, + { + "pc": 14816, + "op": "CALLDATALOAD", + "gas": 9820999, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 14817, + "op": "SWAP1", + "gas": 9820996, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 14818, + "op": "POP", + "gas": 9820993, + "gasCost": 2, + "depth": 2 + }, + { + "pc": 14819, + "op": "PUSH1", + "gas": 9820991, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 14821, + "op": "PUSH1", + "gas": 9820988, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 14823, + "op": "PUSH1", + "gas": 9820985, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 14825, + "op": "SHL", + "gas": 9820982, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 14826, + "op": "SUB", + "gas": 9820979, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 14827, + "op": "DUP2", + "gas": 9820976, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 14828, + "op": "GT", + "gas": 9820973, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 14829, + "op": "ISZERO", + "gas": 9820970, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 14830, + "op": "PUSH2", + "gas": 9820967, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 14833, + "op": "JUMPI", + "gas": 9820964, + "gasCost": 10, + "depth": 2 + }, + { + "pc": 14838, + "op": "JUMPDEST", + "gas": 9820954, + "gasCost": 1, + "depth": 2 + }, + { + "pc": 14839, + "op": "DUP1", + "gas": 9820953, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 14840, + "op": "CALLDATASIZE", + "gas": 9820950, + "gasCost": 2, + "depth": 2 + }, + { + "pc": 14841, + "op": "SUB", + "gas": 9820948, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 14842, + "op": "DUP4", + "gas": 9820945, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 14843, + "op": "SGT", + "gas": 9820942, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 14844, + "op": "ISZERO", + "gas": 9820939, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 14845, + "op": "PUSH2", + "gas": 9820936, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 14848, + "op": "JUMPI", + "gas": 9820933, + "gasCost": 10, + "depth": 2 + }, + { + "pc": 13039, + "op": "JUMPDEST", + "gas": 9820923, + "gasCost": 1, + "depth": 2 + }, + { + "pc": 13040, + "op": "SWAP3", + "gas": 9820922, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 13041, + "op": "POP", + "gas": 9820919, + "gasCost": 2, + "depth": 2 + }, + { + "pc": 13042, + "op": "SWAP3", + "gas": 9820917, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 13043, + "op": "SWAP1", + "gas": 9820914, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 13044, + "op": "POP", + "gas": 9820911, + "gasCost": 2, + "depth": 2 + }, + { + "pc": 13045, + "op": "JUMP", + "gas": 9820909, + "gasCost": 8, + "depth": 2 + }, + { + "pc": 15016, + "op": "JUMPDEST", + "gas": 9820901, + "gasCost": 1, + "depth": 2 + }, + { + "pc": 15017, + "op": "PUSH1", + "gas": 9820900, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 15019, + "op": "PUSH2", + "gas": 9820897, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 15022, + "op": "DUP10", + "gas": 9820894, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 15023, + "op": "ADD", + "gas": 9820891, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 15024, + "op": "MSTORE", + "gas": 9820888, + "gasCost": 6, + "depth": 2 + }, + { + "pc": 15025, + "op": "PUSH2", + "gas": 9820882, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 15028, + "op": "PUSH2", + "gas": 9820879, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 15031, + "op": "DUP10", + "gas": 9820876, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 15032, + "op": "ADD", + "gas": 9820873, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 15033, + "op": "DUP3", + "gas": 9820870, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 15034, + "op": "DUP5", + "gas": 9820867, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 15035, + "op": "PUSH2", + "gas": 9820864, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 15038, + "op": "JUMP", + "gas": 9820861, + "gasCost": 8, + "depth": 2 + }, + { + "pc": 14853, + "op": "JUMPDEST", + "gas": 9820853, + "gasCost": 1, + "depth": 2 + }, + { + "pc": 14854, + "op": "DUP2", + "gas": 9820852, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 14855, + "op": "DUP4", + "gas": 9820849, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 14856, + "op": "MSTORE", + "gas": 9820846, + "gasCost": 12, + "depth": 2 + }, + { + "pc": 14857, + "op": "DUP2", + "gas": 9820834, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 14858, + "op": "DUP2", + "gas": 9820831, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 14859, + "op": "PUSH1", + "gas": 9820828, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 14861, + "op": "DUP6", + "gas": 9820825, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 14862, + "op": "ADD", + "gas": 9820822, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 14863, + "op": "CALLDATACOPY", + "gas": 9820819, + "gasCost": 6, + "depth": 2 + }, + { + "pc": 14864, + "op": "POP", + "gas": 9820813, + "gasCost": 2, + "depth": 2 + }, + { + "pc": 14865, + "op": "PUSH1", + "gas": 9820811, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 14867, + "op": "DUP3", + "gas": 9820808, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 14868, + "op": "DUP3", + "gas": 9820805, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 14869, + "op": "ADD", + "gas": 9820802, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 14870, + "op": "PUSH1", + "gas": 9820799, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 14872, + "op": "SWAP1", + "gas": 9820796, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 14873, + "op": "DUP2", + "gas": 9820793, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 14874, + "op": "ADD", + "gas": 9820790, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 14875, + "op": "SWAP2", + "gas": 9820787, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 14876, + "op": "SWAP1", + "gas": 9820784, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 14877, + "op": "SWAP2", + "gas": 9820781, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 14878, + "op": "MSTORE", + "gas": 9820778, + "gasCost": 6, + "depth": 2 + }, + { + "pc": 14879, + "op": "PUSH1", + "gas": 9820772, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 14881, + "op": "SWAP1", + "gas": 9820769, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 14882, + "op": "SWAP2", + "gas": 9820766, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 14883, + "op": "ADD", + "gas": 9820763, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 14884, + "op": "PUSH1", + "gas": 9820760, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 14886, + "op": "NOT", + "gas": 9820757, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 14887, + "op": "AND", + "gas": 9820754, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 14888, + "op": "SWAP1", + "gas": 9820751, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 14889, + "op": "SWAP2", + "gas": 9820748, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 14890, + "op": "ADD", + "gas": 9820745, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 14891, + "op": "ADD", + "gas": 9820742, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 14892, + "op": "SWAP1", + "gas": 9820739, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 14893, + "op": "JUMP", + "gas": 9820736, + "gasCost": 8, + "depth": 2 + }, + { + "pc": 15039, + "op": "JUMPDEST", + "gas": 9820728, + "gasCost": 1, + "depth": 2 + }, + { + "pc": 15040, + "op": "SWAP2", + "gas": 9820727, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 15041, + "op": "POP", + "gas": 9820724, + "gasCost": 2, + "depth": 2 + }, + { + "pc": 15042, + "op": "POP", + "gas": 9820722, + "gasCost": 2, + "depth": 2 + }, + { + "pc": 15043, + "op": "PUSH2", + "gas": 9820720, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 15046, + "op": "PUSH1", + "gas": 9820717, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 15048, + "op": "DUP4", + "gas": 9820714, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 15049, + "op": "ADD", + "gas": 9820711, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 15050, + "op": "DUP4", + "gas": 9820708, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 15051, + "op": "PUSH2", + "gas": 9820705, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 15054, + "op": "JUMP", + "gas": 9820702, + "gasCost": 8, + "depth": 2 + }, + { + "pc": 14784, + "op": "JUMPDEST", + "gas": 9820694, + "gasCost": 1, + "depth": 2 + }, + { + "pc": 14785, + "op": "PUSH1", + "gas": 9820693, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 14787, + "op": "DUP1", + "gas": 9820690, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 14788, + "op": "DUP4", + "gas": 9820687, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 14789, + "op": "CALLDATALOAD", + "gas": 9820684, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 14790, + "op": "PUSH1", + "gas": 9820681, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 14792, + "op": "NOT", + "gas": 9820678, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 14793, + "op": "DUP5", + "gas": 9820675, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 14794, + "op": "CALLDATASIZE", + "gas": 9820672, + "gasCost": 2, + "depth": 2 + }, + { + "pc": 14795, + "op": "SUB", + "gas": 9820670, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 14796, + "op": "ADD", + "gas": 9820667, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 14797, + "op": "DUP2", + "gas": 9820664, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 14798, + "op": "SLT", + "gas": 9820661, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 14799, + "op": "PUSH2", + "gas": 9820658, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 14802, + "op": "JUMPI", + "gas": 9820655, + "gasCost": 10, + "depth": 2 + }, + { + "pc": 14807, + "op": "JUMPDEST", + "gas": 9820645, + "gasCost": 1, + "depth": 2 + }, + { + "pc": 14808, + "op": "DUP4", + "gas": 9820644, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 14809, + "op": "ADD", + "gas": 9820641, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 14810, + "op": "PUSH1", + "gas": 9820638, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 14812, + "op": "DUP2", + "gas": 9820635, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 14813, + "op": "ADD", + "gas": 9820632, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 14814, + "op": "SWAP3", + "gas": 9820629, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 14815, + "op": "POP", + "gas": 9820626, + "gasCost": 2, + "depth": 2 + }, + { + "pc": 14816, + "op": "CALLDATALOAD", + "gas": 9820624, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 14817, + "op": "SWAP1", + "gas": 9820621, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 14818, + "op": "POP", + "gas": 9820618, + "gasCost": 2, + "depth": 2 + }, + { + "pc": 14819, + "op": "PUSH1", + "gas": 9820616, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 14821, + "op": "PUSH1", + "gas": 9820613, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 14823, + "op": "PUSH1", + "gas": 9820610, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 14825, + "op": "SHL", + "gas": 9820607, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 14826, + "op": "SUB", + "gas": 9820604, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 14827, + "op": "DUP2", + "gas": 9820601, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 14828, + "op": "GT", + "gas": 9820598, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 14829, + "op": "ISZERO", + "gas": 9820595, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 14830, + "op": "PUSH2", + "gas": 9820592, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 14833, + "op": "JUMPI", + "gas": 9820589, + "gasCost": 10, + "depth": 2 + }, + { + "pc": 14838, + "op": "JUMPDEST", + "gas": 9820579, + "gasCost": 1, + "depth": 2 + }, + { + "pc": 14839, + "op": "DUP1", + "gas": 9820578, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 14840, + "op": "CALLDATASIZE", + "gas": 9820575, + "gasCost": 2, + "depth": 2 + }, + { + "pc": 14841, + "op": "SUB", + "gas": 9820573, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 14842, + "op": "DUP4", + "gas": 9820570, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 14843, + "op": "SGT", + "gas": 9820567, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 14844, + "op": "ISZERO", + "gas": 9820564, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 14845, + "op": "PUSH2", + "gas": 9820561, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 14848, + "op": "JUMPI", + "gas": 9820558, + "gasCost": 10, + "depth": 2 + }, + { + "pc": 13039, + "op": "JUMPDEST", + "gas": 9820548, + "gasCost": 1, + "depth": 2 + }, + { + "pc": 13040, + "op": "SWAP3", + "gas": 9820547, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 13041, + "op": "POP", + "gas": 9820544, + "gasCost": 2, + "depth": 2 + }, + { + "pc": 13042, + "op": "SWAP3", + "gas": 9820542, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 13043, + "op": "SWAP1", + "gas": 9820539, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 13044, + "op": "POP", + "gas": 9820536, + "gasCost": 2, + "depth": 2 + }, + { + "pc": 13045, + "op": "JUMP", + "gas": 9820534, + "gasCost": 8, + "depth": 2 + }, + { + "pc": 15055, + "op": "JUMPDEST", + "gas": 9820526, + "gasCost": 1, + "depth": 2 + }, + { + "pc": 15056, + "op": "DUP9", + "gas": 9820525, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 15057, + "op": "DUP4", + "gas": 9820522, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 15058, + "op": "SUB", + "gas": 9820519, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 15059, + "op": "PUSH1", + "gas": 9820516, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 15061, + "op": "NOT", + "gas": 9820513, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 15062, + "op": "ADD", + "gas": 9820510, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 15063, + "op": "PUSH2", + "gas": 9820507, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 15066, + "op": "DUP11", + "gas": 9820504, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 15067, + "op": "ADD", + "gas": 9820501, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 15068, + "op": "MSTORE", + "gas": 9820498, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 15069, + "op": "PUSH2", + "gas": 9820495, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 15072, + "op": "DUP4", + "gas": 9820492, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 15073, + "op": "DUP3", + "gas": 9820489, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 15074, + "op": "DUP5", + "gas": 9820486, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 15075, + "op": "PUSH2", + "gas": 9820483, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 15078, + "op": "JUMP", + "gas": 9820480, + "gasCost": 8, + "depth": 2 + }, + { + "pc": 14853, + "op": "JUMPDEST", + "gas": 9820472, + "gasCost": 1, + "depth": 2 + }, + { + "pc": 14854, + "op": "DUP2", + "gas": 9820471, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 14855, + "op": "DUP4", + "gas": 9820468, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 14856, + "op": "MSTORE", + "gas": 9820465, + "gasCost": 7, + "depth": 2 + }, + { + "pc": 14857, + "op": "DUP2", + "gas": 9820458, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 14858, + "op": "DUP2", + "gas": 9820455, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 14859, + "op": "PUSH1", + "gas": 9820452, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 14861, + "op": "DUP6", + "gas": 9820449, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 14862, + "op": "ADD", + "gas": 9820446, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 14863, + "op": "CALLDATACOPY", + "gas": 9820443, + "gasCost": 6, + "depth": 2 + }, + { + "pc": 14864, + "op": "POP", + "gas": 9820437, + "gasCost": 2, + "depth": 2 + }, + { + "pc": 14865, + "op": "PUSH1", + "gas": 9820435, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 14867, + "op": "DUP3", + "gas": 9820432, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 14868, + "op": "DUP3", + "gas": 9820429, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 14869, + "op": "ADD", + "gas": 9820426, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 14870, + "op": "PUSH1", + "gas": 9820423, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 14872, + "op": "SWAP1", + "gas": 9820420, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 14873, + "op": "DUP2", + "gas": 9820417, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 14874, + "op": "ADD", + "gas": 9820414, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 14875, + "op": "SWAP2", + "gas": 9820411, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 14876, + "op": "SWAP1", + "gas": 9820408, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 14877, + "op": "SWAP2", + "gas": 9820405, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 14878, + "op": "MSTORE", + "gas": 9820402, + "gasCost": 6, + "depth": 2 + }, + { + "pc": 14879, + "op": "PUSH1", + "gas": 9820396, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 14881, + "op": "SWAP1", + "gas": 9820393, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 14882, + "op": "SWAP2", + "gas": 9820390, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 14883, + "op": "ADD", + "gas": 9820387, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 14884, + "op": "PUSH1", + "gas": 9820384, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 14886, + "op": "NOT", + "gas": 9820381, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 14887, + "op": "AND", + "gas": 9820378, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 14888, + "op": "SWAP1", + "gas": 9820375, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 14889, + "op": "SWAP2", + "gas": 9820372, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 14890, + "op": "ADD", + "gas": 9820369, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 14891, + "op": "ADD", + "gas": 9820366, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 14892, + "op": "SWAP1", + "gas": 9820363, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 14893, + "op": "JUMP", + "gas": 9820360, + "gasCost": 8, + "depth": 2 + }, + { + "pc": 15079, + "op": "JUMPDEST", + "gas": 9820352, + "gasCost": 1, + "depth": 2 + }, + { + "pc": 15080, + "op": "SWAP3", + "gas": 9820351, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 15081, + "op": "POP", + "gas": 9820348, + "gasCost": 2, + "depth": 2 + }, + { + "pc": 15082, + "op": "POP", + "gas": 9820346, + "gasCost": 2, + "depth": 2 + }, + { + "pc": 15083, + "op": "POP", + "gas": 9820344, + "gasCost": 2, + "depth": 2 + }, + { + "pc": 15084, + "op": "DUP4", + "gas": 9820342, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 15085, + "op": "PUSH2", + "gas": 9820339, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 15088, + "op": "PUSH1", + "gas": 9820336, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 15090, + "op": "DUP5", + "gas": 9820333, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 15091, + "op": "ADD", + "gas": 9820330, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 15092, + "op": "PUSH2", + "gas": 9820327, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 15095, + "op": "JUMP", + "gas": 9820324, + "gasCost": 8, + "depth": 2 + }, + { + "pc": 14635, + "op": "JUMPDEST", + "gas": 9820316, + "gasCost": 1, + "depth": 2 + }, + { + "pc": 14636, + "op": "DUP1", + "gas": 9820315, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 14637, + "op": "CALLDATALOAD", + "gas": 9820312, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 14638, + "op": "PUSH4", + "gas": 9820309, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 14643, + "op": "DUP2", + "gas": 9820306, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 14644, + "op": "AND", + "gas": 9820303, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 14645, + "op": "DUP2", + "gas": 9820300, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 14646, + "op": "EQ", + "gas": 9820297, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 14647, + "op": "PUSH2", + "gas": 9820294, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 14650, + "op": "JUMPI", + "gas": 9820291, + "gasCost": 10, + "depth": 2 + }, + { + "pc": 13657, + "op": "JUMPDEST", + "gas": 9820281, + "gasCost": 1, + "depth": 2 + }, + { + "pc": 13658, + "op": "SWAP2", + "gas": 9820280, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 13659, + "op": "SWAP1", + "gas": 9820277, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 13660, + "op": "POP", + "gas": 9820274, + "gasCost": 2, + "depth": 2 + }, + { + "pc": 13661, + "op": "JUMP", + "gas": 9820272, + "gasCost": 8, + "depth": 2 + }, + { + "pc": 15096, + "op": "JUMPDEST", + "gas": 9820264, + "gasCost": 1, + "depth": 2 + }, + { + "pc": 15097, + "op": "AND", + "gas": 9820263, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 15098, + "op": "PUSH2", + "gas": 9820260, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 15101, + "op": "DUP9", + "gas": 9820257, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 15102, + "op": "ADD", + "gas": 9820254, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 15103, + "op": "MSTORE", + "gas": 9820251, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 15104, + "op": "PUSH1", + "gas": 9820248, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 15106, + "op": "DUP4", + "gas": 9820245, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 15107, + "op": "ADD", + "gas": 9820242, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 15108, + "op": "CALLDATALOAD", + "gas": 9820239, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 15109, + "op": "PUSH1", + "gas": 9820236, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 15111, + "op": "DUP9", + "gas": 9820233, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 15112, + "op": "ADD", + "gas": 9820230, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 15113, + "op": "MSTORE", + "gas": 9820227, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 15114, + "op": "PUSH2", + "gas": 9820224, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 15117, + "op": "PUSH1", + "gas": 9820221, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 15119, + "op": "DUP5", + "gas": 9820218, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 15120, + "op": "ADD", + "gas": 9820215, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 15121, + "op": "PUSH2", + "gas": 9820212, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 15124, + "op": "JUMP", + "gas": 9820209, + "gasCost": 8, + "depth": 2 + }, + { + "pc": 14635, + "op": "JUMPDEST", + "gas": 9820201, + "gasCost": 1, + "depth": 2 + }, + { + "pc": 14636, + "op": "DUP1", + "gas": 9820200, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 14637, + "op": "CALLDATALOAD", + "gas": 9820197, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 14638, + "op": "PUSH4", + "gas": 9820194, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 14643, + "op": "DUP2", + "gas": 9820191, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 14644, + "op": "AND", + "gas": 9820188, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 14645, + "op": "DUP2", + "gas": 9820185, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 14646, + "op": "EQ", + "gas": 9820182, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 14647, + "op": "PUSH2", + "gas": 9820179, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 14650, + "op": "JUMPI", + "gas": 9820176, + "gasCost": 10, + "depth": 2 + }, + { + "pc": 13657, + "op": "JUMPDEST", + "gas": 9820166, + "gasCost": 1, + "depth": 2 + }, + { + "pc": 13658, + "op": "SWAP2", + "gas": 9820165, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 13659, + "op": "SWAP1", + "gas": 9820162, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 13660, + "op": "POP", + "gas": 9820159, + "gasCost": 2, + "depth": 2 + }, + { + "pc": 13661, + "op": "JUMP", + "gas": 9820157, + "gasCost": 8, + "depth": 2 + }, + { + "pc": 15125, + "op": "JUMPDEST", + "gas": 9820149, + "gasCost": 1, + "depth": 2 + }, + { + "pc": 15126, + "op": "PUSH4", + "gas": 9820148, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 15131, + "op": "DUP2", + "gas": 9820145, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 15132, + "op": "AND", + "gas": 9820142, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 15133, + "op": "PUSH1", + "gas": 9820139, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 15135, + "op": "DUP10", + "gas": 9820136, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 15136, + "op": "ADD", + "gas": 9820133, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 15137, + "op": "MSTORE", + "gas": 9820130, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 15138, + "op": "SWAP4", + "gas": 9820127, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 15139, + "op": "POP", + "gas": 9820124, + "gasCost": 2, + "depth": 2 + }, + { + "pc": 15140, + "op": "PUSH2", + "gas": 9820122, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 15143, + "op": "PUSH1", + "gas": 9820119, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 15145, + "op": "DUP8", + "gas": 9820116, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 15146, + "op": "ADD", + "gas": 9820113, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 15147, + "op": "DUP8", + "gas": 9820110, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 15148, + "op": "PUSH2", + "gas": 9820107, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 15151, + "op": "JUMP", + "gas": 9820104, + "gasCost": 8, + "depth": 2 + }, + { + "pc": 14784, + "op": "JUMPDEST", + "gas": 9820096, + "gasCost": 1, + "depth": 2 + }, + { + "pc": 14785, + "op": "PUSH1", + "gas": 9820095, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 14787, + "op": "DUP1", + "gas": 9820092, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 14788, + "op": "DUP4", + "gas": 9820089, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 14789, + "op": "CALLDATALOAD", + "gas": 9820086, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 14790, + "op": "PUSH1", + "gas": 9820083, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 14792, + "op": "NOT", + "gas": 9820080, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 14793, + "op": "DUP5", + "gas": 9820077, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 14794, + "op": "CALLDATASIZE", + "gas": 9820074, + "gasCost": 2, + "depth": 2 + }, + { + "pc": 14795, + "op": "SUB", + "gas": 9820072, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 14796, + "op": "ADD", + "gas": 9820069, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 14797, + "op": "DUP2", + "gas": 9820066, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 14798, + "op": "SLT", + "gas": 9820063, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 14799, + "op": "PUSH2", + "gas": 9820060, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 14802, + "op": "JUMPI", + "gas": 9820057, + "gasCost": 10, + "depth": 2 + }, + { + "pc": 14807, + "op": "JUMPDEST", + "gas": 9820047, + "gasCost": 1, + "depth": 2 + }, + { + "pc": 14808, + "op": "DUP4", + "gas": 9820046, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 14809, + "op": "ADD", + "gas": 9820043, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 14810, + "op": "PUSH1", + "gas": 9820040, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 14812, + "op": "DUP2", + "gas": 9820037, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 14813, + "op": "ADD", + "gas": 9820034, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 14814, + "op": "SWAP3", + "gas": 9820031, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 14815, + "op": "POP", + "gas": 9820028, + "gasCost": 2, + "depth": 2 + }, + { + "pc": 14816, + "op": "CALLDATALOAD", + "gas": 9820026, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 14817, + "op": "SWAP1", + "gas": 9820023, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 14818, + "op": "POP", + "gas": 9820020, + "gasCost": 2, + "depth": 2 + }, + { + "pc": 14819, + "op": "PUSH1", + "gas": 9820018, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 14821, + "op": "PUSH1", + "gas": 9820015, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 14823, + "op": "PUSH1", + "gas": 9820012, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 14825, + "op": "SHL", + "gas": 9820009, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 14826, + "op": "SUB", + "gas": 9820006, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 14827, + "op": "DUP2", + "gas": 9820003, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 14828, + "op": "GT", + "gas": 9820000, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 14829, + "op": "ISZERO", + "gas": 9819997, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 14830, + "op": "PUSH2", + "gas": 9819994, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 14833, + "op": "JUMPI", + "gas": 9819991, + "gasCost": 10, + "depth": 2 + }, + { + "pc": 14838, + "op": "JUMPDEST", + "gas": 9819981, + "gasCost": 1, + "depth": 2 + }, + { + "pc": 14839, + "op": "DUP1", + "gas": 9819980, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 14840, + "op": "CALLDATASIZE", + "gas": 9819977, + "gasCost": 2, + "depth": 2 + }, + { + "pc": 14841, + "op": "SUB", + "gas": 9819975, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 14842, + "op": "DUP4", + "gas": 9819972, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 14843, + "op": "SGT", + "gas": 9819969, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 14844, + "op": "ISZERO", + "gas": 9819966, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 14845, + "op": "PUSH2", + "gas": 9819963, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 14848, + "op": "JUMPI", + "gas": 9819960, + "gasCost": 10, + "depth": 2 + }, + { + "pc": 13039, + "op": "JUMPDEST", + "gas": 9819950, + "gasCost": 1, + "depth": 2 + }, + { + "pc": 13040, + "op": "SWAP3", + "gas": 9819949, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 13041, + "op": "POP", + "gas": 9819946, + "gasCost": 2, + "depth": 2 + }, + { + "pc": 13042, + "op": "SWAP3", + "gas": 9819944, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 13043, + "op": "SWAP1", + "gas": 9819941, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 13044, + "op": "POP", + "gas": 9819938, + "gasCost": 2, + "depth": 2 + }, + { + "pc": 13045, + "op": "JUMP", + "gas": 9819936, + "gasCost": 8, + "depth": 2 + }, + { + "pc": 15152, + "op": "JUMPDEST", + "gas": 9819928, + "gasCost": 1, + "depth": 2 + }, + { + "pc": 15153, + "op": "SWAP5", + "gas": 9819927, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 15154, + "op": "POP", + "gas": 9819924, + "gasCost": 2, + "depth": 2 + }, + { + "pc": 15155, + "op": "SWAP3", + "gas": 9819922, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 15156, + "op": "POP", + "gas": 9819919, + "gasCost": 2, + "depth": 2 + }, + { + "pc": 15157, + "op": "DUP7", + "gas": 9819917, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 15158, + "op": "DUP2", + "gas": 9819914, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 15159, + "op": "SUB", + "gas": 9819911, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 15160, + "op": "PUSH1", + "gas": 9819908, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 15162, + "op": "DUP9", + "gas": 9819905, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 15163, + "op": "ADD", + "gas": 9819902, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 15164, + "op": "MSTORE", + "gas": 9819899, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 15165, + "op": "PUSH2", + "gas": 9819896, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 15168, + "op": "DUP2", + "gas": 9819893, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 15169, + "op": "DUP6", + "gas": 9819890, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 15170, + "op": "DUP6", + "gas": 9819887, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 15171, + "op": "PUSH2", + "gas": 9819884, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 15174, + "op": "JUMP", + "gas": 9819881, + "gasCost": 8, + "depth": 2 + }, + { + "pc": 14853, + "op": "JUMPDEST", + "gas": 9819873, + "gasCost": 1, + "depth": 2 + }, + { + "pc": 14854, + "op": "DUP2", + "gas": 9819872, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 14855, + "op": "DUP4", + "gas": 9819869, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 14856, + "op": "MSTORE", + "gas": 9819866, + "gasCost": 6, + "depth": 2 + }, + { + "pc": 14857, + "op": "DUP2", + "gas": 9819860, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 14858, + "op": "DUP2", + "gas": 9819857, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 14859, + "op": "PUSH1", + "gas": 9819854, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 14861, + "op": "DUP6", + "gas": 9819851, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 14862, + "op": "ADD", + "gas": 9819848, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 14863, + "op": "CALLDATACOPY", + "gas": 9819845, + "gasCost": 6, + "depth": 2 + }, + { + "pc": 14864, + "op": "POP", + "gas": 9819839, + "gasCost": 2, + "depth": 2 + }, + { + "pc": 14865, + "op": "PUSH1", + "gas": 9819837, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 14867, + "op": "DUP3", + "gas": 9819834, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 14868, + "op": "DUP3", + "gas": 9819831, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 14869, + "op": "ADD", + "gas": 9819828, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 14870, + "op": "PUSH1", + "gas": 9819825, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 14872, + "op": "SWAP1", + "gas": 9819822, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 14873, + "op": "DUP2", + "gas": 9819819, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 14874, + "op": "ADD", + "gas": 9819816, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 14875, + "op": "SWAP2", + "gas": 9819813, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 14876, + "op": "SWAP1", + "gas": 9819810, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 14877, + "op": "SWAP2", + "gas": 9819807, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 14878, + "op": "MSTORE", + "gas": 9819804, + "gasCost": 6, + "depth": 2 + }, + { + "pc": 14879, + "op": "PUSH1", + "gas": 9819798, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 14881, + "op": "SWAP1", + "gas": 9819795, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 14882, + "op": "SWAP2", + "gas": 9819792, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 14883, + "op": "ADD", + "gas": 9819789, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 14884, + "op": "PUSH1", + "gas": 9819786, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 14886, + "op": "NOT", + "gas": 9819783, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 14887, + "op": "AND", + "gas": 9819780, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 14888, + "op": "SWAP1", + "gas": 9819777, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 14889, + "op": "SWAP2", + "gas": 9819774, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 14890, + "op": "ADD", + "gas": 9819771, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 14891, + "op": "ADD", + "gas": 9819768, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 14892, + "op": "SWAP1", + "gas": 9819765, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 14893, + "op": "JUMP", + "gas": 9819762, + "gasCost": 8, + "depth": 2 + }, + { + "pc": 15175, + "op": "JUMPDEST", + "gas": 9819754, + "gasCost": 1, + "depth": 2 + }, + { + "pc": 15176, + "op": "SWAP4", + "gas": 9819753, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 15177, + "op": "POP", + "gas": 9819750, + "gasCost": 2, + "depth": 2 + }, + { + "pc": 15178, + "op": "POP", + "gas": 9819748, + "gasCost": 2, + "depth": 2 + }, + { + "pc": 15179, + "op": "POP", + "gas": 9819746, + "gasCost": 2, + "depth": 2 + }, + { + "pc": 15180, + "op": "POP", + "gas": 9819744, + "gasCost": 2, + "depth": 2 + }, + { + "pc": 15181, + "op": "PUSH2", + "gas": 9819742, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 15184, + "op": "PUSH1", + "gas": 9819739, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 15186, + "op": "DUP5", + "gas": 9819736, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 15187, + "op": "ADD", + "gas": 9819733, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 15188, + "op": "DUP5", + "gas": 9819730, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 15189, + "op": "PUSH2", + "gas": 9819727, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 15192, + "op": "JUMP", + "gas": 9819724, + "gasCost": 8, + "depth": 2 + }, + { + "pc": 14784, + "op": "JUMPDEST", + "gas": 9819716, + "gasCost": 1, + "depth": 2 + }, + { + "pc": 14785, + "op": "PUSH1", + "gas": 9819715, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 14787, + "op": "DUP1", + "gas": 9819712, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 14788, + "op": "DUP4", + "gas": 9819709, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 14789, + "op": "CALLDATALOAD", + "gas": 9819706, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 14790, + "op": "PUSH1", + "gas": 9819703, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 14792, + "op": "NOT", + "gas": 9819700, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 14793, + "op": "DUP5", + "gas": 9819697, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 14794, + "op": "CALLDATASIZE", + "gas": 9819694, + "gasCost": 2, + "depth": 2 + }, + { + "pc": 14795, + "op": "SUB", + "gas": 9819692, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 14796, + "op": "ADD", + "gas": 9819689, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 14797, + "op": "DUP2", + "gas": 9819686, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 14798, + "op": "SLT", + "gas": 9819683, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 14799, + "op": "PUSH2", + "gas": 9819680, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 14802, + "op": "JUMPI", + "gas": 9819677, + "gasCost": 10, + "depth": 2 + }, + { + "pc": 14807, + "op": "JUMPDEST", + "gas": 9819667, + "gasCost": 1, + "depth": 2 + }, + { + "pc": 14808, + "op": "DUP4", + "gas": 9819666, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 14809, + "op": "ADD", + "gas": 9819663, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 14810, + "op": "PUSH1", + "gas": 9819660, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 14812, + "op": "DUP2", + "gas": 9819657, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 14813, + "op": "ADD", + "gas": 9819654, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 14814, + "op": "SWAP3", + "gas": 9819651, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 14815, + "op": "POP", + "gas": 9819648, + "gasCost": 2, + "depth": 2 + }, + { + "pc": 14816, + "op": "CALLDATALOAD", + "gas": 9819646, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 14817, + "op": "SWAP1", + "gas": 9819643, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 14818, + "op": "POP", + "gas": 9819640, + "gasCost": 2, + "depth": 2 + }, + { + "pc": 14819, + "op": "PUSH1", + "gas": 9819638, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 14821, + "op": "PUSH1", + "gas": 9819635, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 14823, + "op": "PUSH1", + "gas": 9819632, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 14825, + "op": "SHL", + "gas": 9819629, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 14826, + "op": "SUB", + "gas": 9819626, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 14827, + "op": "DUP2", + "gas": 9819623, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 14828, + "op": "GT", + "gas": 9819620, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 14829, + "op": "ISZERO", + "gas": 9819617, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 14830, + "op": "PUSH2", + "gas": 9819614, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 14833, + "op": "JUMPI", + "gas": 9819611, + "gasCost": 10, + "depth": 2 + }, + { + "pc": 14838, + "op": "JUMPDEST", + "gas": 9819601, + "gasCost": 1, + "depth": 2 + }, + { + "pc": 14839, + "op": "DUP1", + "gas": 9819600, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 14840, + "op": "CALLDATASIZE", + "gas": 9819597, + "gasCost": 2, + "depth": 2 + }, + { + "pc": 14841, + "op": "SUB", + "gas": 9819595, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 14842, + "op": "DUP4", + "gas": 9819592, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 14843, + "op": "SGT", + "gas": 9819589, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 14844, + "op": "ISZERO", + "gas": 9819586, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 14845, + "op": "PUSH2", + "gas": 9819583, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 14848, + "op": "JUMPI", + "gas": 9819580, + "gasCost": 10, + "depth": 2 + }, + { + "pc": 13039, + "op": "JUMPDEST", + "gas": 9819570, + "gasCost": 1, + "depth": 2 + }, + { + "pc": 13040, + "op": "SWAP3", + "gas": 9819569, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 13041, + "op": "POP", + "gas": 9819566, + "gasCost": 2, + "depth": 2 + }, + { + "pc": 13042, + "op": "SWAP3", + "gas": 9819564, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 13043, + "op": "SWAP1", + "gas": 9819561, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 13044, + "op": "POP", + "gas": 9819558, + "gasCost": 2, + "depth": 2 + }, + { + "pc": 13045, + "op": "JUMP", + "gas": 9819556, + "gasCost": 8, + "depth": 2 + }, + { + "pc": 15193, + "op": "JUMPDEST", + "gas": 9819548, + "gasCost": 1, + "depth": 2 + }, + { + "pc": 15194, + "op": "DUP6", + "gas": 9819547, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 15195, + "op": "DUP4", + "gas": 9819544, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 15196, + "op": "SUB", + "gas": 9819541, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 15197, + "op": "PUSH1", + "gas": 9819538, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 15199, + "op": "DUP8", + "gas": 9819535, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 15200, + "op": "ADD", + "gas": 9819532, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 15201, + "op": "MSTORE", + "gas": 9819529, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 15202, + "op": "PUSH2", + "gas": 9819526, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 15205, + "op": "DUP4", + "gas": 9819523, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 15206, + "op": "DUP3", + "gas": 9819520, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 15207, + "op": "DUP5", + "gas": 9819517, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 15208, + "op": "PUSH2", + "gas": 9819514, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 15211, + "op": "JUMP", + "gas": 9819511, + "gasCost": 8, + "depth": 2 + }, + { + "pc": 14853, + "op": "JUMPDEST", + "gas": 9819503, + "gasCost": 1, + "depth": 2 + }, + { + "pc": 14854, + "op": "DUP2", + "gas": 9819502, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 14855, + "op": "DUP4", + "gas": 9819499, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 14856, + "op": "MSTORE", + "gas": 9819496, + "gasCost": 6, + "depth": 2 + }, + { + "pc": 14857, + "op": "DUP2", + "gas": 9819490, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 14858, + "op": "DUP2", + "gas": 9819487, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 14859, + "op": "PUSH1", + "gas": 9819484, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 14861, + "op": "DUP6", + "gas": 9819481, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 14862, + "op": "ADD", + "gas": 9819478, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 14863, + "op": "CALLDATACOPY", + "gas": 9819475, + "gasCost": 6, + "depth": 2 + }, + { + "pc": 14864, + "op": "POP", + "gas": 9819469, + "gasCost": 2, + "depth": 2 + }, + { + "pc": 14865, + "op": "PUSH1", + "gas": 9819467, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 14867, + "op": "DUP3", + "gas": 9819464, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 14868, + "op": "DUP3", + "gas": 9819461, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 14869, + "op": "ADD", + "gas": 9819458, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 14870, + "op": "PUSH1", + "gas": 9819455, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 14872, + "op": "SWAP1", + "gas": 9819452, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 14873, + "op": "DUP2", + "gas": 9819449, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 14874, + "op": "ADD", + "gas": 9819446, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 14875, + "op": "SWAP2", + "gas": 9819443, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 14876, + "op": "SWAP1", + "gas": 9819440, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 14877, + "op": "SWAP2", + "gas": 9819437, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 14878, + "op": "MSTORE", + "gas": 9819434, + "gasCost": 6, + "depth": 2 + }, + { + "pc": 14879, + "op": "PUSH1", + "gas": 9819428, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 14881, + "op": "SWAP1", + "gas": 9819425, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 14882, + "op": "SWAP2", + "gas": 9819422, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 14883, + "op": "ADD", + "gas": 9819419, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 14884, + "op": "PUSH1", + "gas": 9819416, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 14886, + "op": "NOT", + "gas": 9819413, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 14887, + "op": "AND", + "gas": 9819410, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 14888, + "op": "SWAP1", + "gas": 9819407, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 14889, + "op": "SWAP2", + "gas": 9819404, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 14890, + "op": "ADD", + "gas": 9819401, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 14891, + "op": "ADD", + "gas": 9819398, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 14892, + "op": "SWAP1", + "gas": 9819395, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 14893, + "op": "JUMP", + "gas": 9819392, + "gasCost": 8, + "depth": 2 + }, + { + "pc": 15212, + "op": "JUMPDEST", + "gas": 9819384, + "gasCost": 1, + "depth": 2 + }, + { + "pc": 15213, + "op": "SWAP7", + "gas": 9819383, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 15214, + "op": "SWAP6", + "gas": 9819380, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 15215, + "op": "POP", + "gas": 9819377, + "gasCost": 2, + "depth": 2 + }, + { + "pc": 15216, + "op": "POP", + "gas": 9819375, + "gasCost": 2, + "depth": 2 + }, + { + "pc": 15217, + "op": "POP", + "gas": 9819373, + "gasCost": 2, + "depth": 2 + }, + { + "pc": 15218, + "op": "POP", + "gas": 9819371, + "gasCost": 2, + "depth": 2 + }, + { + "pc": 15219, + "op": "POP", + "gas": 9819369, + "gasCost": 2, + "depth": 2 + }, + { + "pc": 15220, + "op": "POP", + "gas": 9819367, + "gasCost": 2, + "depth": 2 + }, + { + "pc": 15221, + "op": "JUMP", + "gas": 9819365, + "gasCost": 8, + "depth": 2 + }, + { + "pc": 15212, + "op": "JUMPDEST", + "gas": 9819357, + "gasCost": 1, + "depth": 2 + }, + { + "pc": 15213, + "op": "SWAP7", + "gas": 9819356, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 15214, + "op": "SWAP6", + "gas": 9819353, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 15215, + "op": "POP", + "gas": 9819350, + "gasCost": 2, + "depth": 2 + }, + { + "pc": 15216, + "op": "POP", + "gas": 9819348, + "gasCost": 2, + "depth": 2 + }, + { + "pc": 15217, + "op": "POP", + "gas": 9819346, + "gasCost": 2, + "depth": 2 + }, + { + "pc": 15218, + "op": "POP", + "gas": 9819344, + "gasCost": 2, + "depth": 2 + }, + { + "pc": 15219, + "op": "POP", + "gas": 9819342, + "gasCost": 2, + "depth": 2 + }, + { + "pc": 15220, + "op": "POP", + "gas": 9819340, + "gasCost": 2, + "depth": 2 + }, + { + "pc": 15221, + "op": "JUMP", + "gas": 9819338, + "gasCost": 8, + "depth": 2 + }, + { + "pc": 3949, + "op": "JUMPDEST", + "gas": 9819330, + "gasCost": 1, + "depth": 2 + }, + { + "pc": 3950, + "op": "PUSH1", + "gas": 9819329, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 3952, + "op": "PUSH1", + "gas": 9819326, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 3954, + "op": "MLOAD", + "gas": 9819323, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 3955, + "op": "DUP1", + "gas": 9819320, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 3956, + "op": "DUP4", + "gas": 9819317, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 3957, + "op": "SUB", + "gas": 9819314, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 3958, + "op": "DUP2", + "gas": 9819311, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 3959, + "op": "DUP7", + "gas": 9819308, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 3960, + "op": "DUP1", + "gas": 9819305, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 3961, + "op": "EXTCODESIZE", + "gas": 9819302, + "gasCost": 2600, + "depth": 2 + }, + { + "pc": 3962, + "op": "ISZERO", + "gas": 9816702, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 3963, + "op": "DUP1", + "gas": 9816699, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 3964, + "op": "ISZERO", + "gas": 9816696, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 3965, + "op": "PUSH2", + "gas": 9816693, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 3968, + "op": "JUMPI", + "gas": 9816690, + "gasCost": 10, + "depth": 2 + }, + { + "pc": 3969, + "op": "PUSH1", + "gas": 9816680, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 3971, + "op": "DUP1", + "gas": 9816677, + "gasCost": 3, + "depth": 2 + }, + { + "pc": 3972, + "op": "REVERT", + "gas": 9816674, + "gasCost": 0, + "depth": 2 + }, + { + "pc": 851, + "op": "RETURNDATASIZE", + "gas": 9972698, + "gasCost": 2, + "depth": 1 + }, + { + "pc": 852, + "op": "PUSH1", + "gas": 9972696, + "gasCost": 3, + "depth": 1 + }, + { + "pc": 854, + "op": "DUP1", + "gas": 9972693, + "gasCost": 3, + "depth": 1 + }, + { + "pc": 855, + "op": "RETURNDATACOPY", + "gas": 9972690, + "gasCost": 3, + "depth": 1 + }, + { + "pc": 856, + "op": "DUP1", + "gas": 9972687, + "gasCost": 3, + "depth": 1 + }, + { + "pc": 857, + "op": "DUP1", + "gas": 9972684, + "gasCost": 3, + "depth": 1 + }, + { + "pc": 858, + "op": "ISZERO", + "gas": 9972681, + "gasCost": 3, + "depth": 1 + }, + { + "pc": 859, + "op": "PUSH2", + "gas": 9972678, + "gasCost": 3, + "depth": 1 + }, + { + "pc": 862, + "op": "JUMPI", + "gas": 9972675, + "gasCost": 10, + "depth": 1 + }, + { + "pc": 867, + "op": "JUMPDEST", + "gas": 9972665, + "gasCost": 1, + "depth": 1 + }, + { + "pc": 868, + "op": "RETURNDATASIZE", + "gas": 9972664, + "gasCost": 2, + "depth": 1 + }, + { + "pc": 869, + "op": "PUSH1", + "gas": 9972662, + "gasCost": 3, + "depth": 1 + }, + { + "pc": 871, + "op": "REVERT", + "gas": 9972659, + "gasCost": 0, + "depth": 1 + } + ] + } \ No newline at end of file diff --git a/staker/l1_validator.go b/staker/l1_validator.go index 87fd4a669..6732daa43 100644 --- a/staker/l1_validator.go +++ b/staker/l1_validator.go @@ -473,6 +473,7 @@ func (v *L1Validator) createNewNodeAction( validatedGS validator.GoGlobalState, lastNodeHashIfExists *common.Hash, ) (nodeAction, error) { + println("Creating a new node") if !prevInboxMaxCount.IsUint64() { return nil, fmt.Errorf("inbox max count %v isn't a uint64", prevInboxMaxCount) } diff --git a/staker/staker.go b/staker/staker.go index f57ba3779..b397920ca 100644 --- a/staker/staker.go +++ b/staker/staker.go @@ -96,6 +96,7 @@ type L1ValidatorConfig struct { } func (c *L1ValidatorConfig) ParseStrategy() (StakerStrategy, error) { + println("Strategy", strings.ToLower(c.Strategy)) switch strings.ToLower(c.Strategy) { case "watchtower": return WatchtowerStrategy, nil diff --git a/yarn.lock b/yarn.lock new file mode 100644 index 000000000..fb57ccd13 --- /dev/null +++ b/yarn.lock @@ -0,0 +1,4 @@ +# THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY. +# yarn lockfile v1 + + From 42db7acfe9297296e6b318a1626dd55e3ad2dc23 Mon Sep 17 00:00:00 2001 From: Ethen Pociask Date: Mon, 1 Jul 2024 12:48:04 -0400 Subject: [PATCH 21/38] fix(batch_poster): Fix cert decoding - remove debug files --- opcodes.txt | 9478 --------------------------------------------------- out.txt | 9414 -------------------------------------------------- yarn.lock | 4 - 3 files changed, 18896 deletions(-) delete mode 100644 opcodes.txt delete mode 100644 out.txt delete mode 100644 yarn.lock diff --git a/opcodes.txt b/opcodes.txt deleted file mode 100644 index 426694921..000000000 --- a/opcodes.txt +++ /dev/null @@ -1,9478 +0,0 @@ -[ - { - "pc": 0, - "op": "PUSH1", - "gas": 944080, - "gasCost": 3, - "depth": 1 - }, - { - "pc": 2, - "op": "PUSH1", - "gas": 944077, - "gasCost": 3, - "depth": 1 - }, - { - "pc": 4, - "op": "MSTORE", - "gas": 944074, - "gasCost": 12, - "depth": 1 - }, - { - "pc": 5, - "op": "PUSH1", - "gas": 944062, - "gasCost": 3, - "depth": 1 - }, - { - "pc": 7, - "op": "CALLDATASIZE", - "gas": 944059, - "gasCost": 2, - "depth": 1 - }, - { - "pc": 8, - "op": "LT", - "gas": 944057, - "gasCost": 3, - "depth": 1 - }, - { - "pc": 9, - "op": "PUSH2", - "gas": 944054, - "gasCost": 3, - "depth": 1 - }, - { - "pc": 12, - "op": "JUMPI", - "gas": 944051, - "gasCost": 10, - "depth": 1 - }, - { - "pc": 13, - "op": "PUSH1", - "gas": 944041, - "gasCost": 3, - "depth": 1 - }, - { - "pc": 15, - "op": "CALLDATALOAD", - "gas": 944038, - "gasCost": 3, - "depth": 1 - }, - { - "pc": 16, - "op": "PUSH1", - "gas": 944035, - "gasCost": 3, - "depth": 1 - }, - { - "pc": 18, - "op": "SHR", - "gas": 944032, - "gasCost": 3, - "depth": 1 - }, - { - "pc": 19, - "op": "DUP1", - "gas": 944029, - "gasCost": 3, - "depth": 1 - }, - { - "pc": 20, - "op": "PUSH4", - "gas": 944026, - "gasCost": 3, - "depth": 1 - }, - { - "pc": 25, - "op": "EQ", - "gas": 944023, - "gasCost": 3, - "depth": 1 - }, - { - "pc": 26, - "op": "PUSH2", - "gas": 944020, - "gasCost": 3, - "depth": 1 - }, - { - "pc": 29, - "op": "JUMPI", - "gas": 944017, - "gasCost": 10, - "depth": 1 - }, - { - "pc": 30, - "op": "DUP1", - "gas": 944007, - "gasCost": 3, - "depth": 1 - }, - { - "pc": 31, - "op": "PUSH4", - "gas": 944004, - "gasCost": 3, - "depth": 1 - }, - { - "pc": 36, - "op": "EQ", - "gas": 944001, - "gasCost": 3, - "depth": 1 - }, - { - "pc": 37, - "op": "PUSH2", - "gas": 943998, - "gasCost": 3, - "depth": 1 - }, - { - "pc": 40, - "op": "JUMPI", - "gas": 943995, - "gasCost": 10, - "depth": 1 - }, - { - "pc": 41, - "op": "DUP1", - "gas": 943985, - "gasCost": 3, - "depth": 1 - }, - { - "pc": 42, - "op": "PUSH4", - "gas": 943982, - "gasCost": 3, - "depth": 1 - }, - { - "pc": 47, - "op": "EQ", - "gas": 943979, - "gasCost": 3, - "depth": 1 - }, - { - "pc": 48, - "op": "PUSH2", - "gas": 943976, - "gasCost": 3, - "depth": 1 - }, - { - "pc": 51, - "op": "JUMPI", - "gas": 943973, - "gasCost": 10, - "depth": 1 - }, - { - "pc": 52, - "op": "DUP1", - "gas": 943963, - "gasCost": 3, - "depth": 1 - }, - { - "pc": 53, - "op": "PUSH4", - "gas": 943960, - "gasCost": 3, - "depth": 1 - }, - { - "pc": 58, - "op": "EQ", - "gas": 943957, - "gasCost": 3, - "depth": 1 - }, - { - "pc": 59, - "op": "PUSH2", - "gas": 943954, - "gasCost": 3, - "depth": 1 - }, - { - "pc": 62, - "op": "JUMPI", - "gas": 943951, - "gasCost": 10, - "depth": 1 - }, - { - "pc": 63, - "op": "DUP1", - "gas": 943941, - "gasCost": 3, - "depth": 1 - }, - { - "pc": 64, - "op": "PUSH4", - "gas": 943938, - "gasCost": 3, - "depth": 1 - }, - { - "pc": 69, - "op": "EQ", - "gas": 943935, - "gasCost": 3, - "depth": 1 - }, - { - "pc": 70, - "op": "PUSH2", - "gas": 943932, - "gasCost": 3, - "depth": 1 - }, - { - "pc": 73, - "op": "JUMPI", - "gas": 943929, - "gasCost": 10, - "depth": 1 - }, - { - "pc": 74, - "op": "PUSH2", - "gas": 943919, - "gasCost": 3, - "depth": 1 - }, - { - "pc": 77, - "op": "JUMP", - "gas": 943916, - "gasCost": 8, - "depth": 1 - }, - { - "pc": 93, - "op": "JUMPDEST", - "gas": 943908, - "gasCost": 1, - "depth": 1 - }, - { - "pc": 94, - "op": "PUSH2", - "gas": 943907, - "gasCost": 3, - "depth": 1 - }, - { - "pc": 97, - "op": "PUSH2", - "gas": 943904, - "gasCost": 3, - "depth": 1 - }, - { - "pc": 100, - "op": "JUMP", - "gas": 943901, - "gasCost": 8, - "depth": 1 - }, - { - "pc": 254, - "op": "JUMPDEST", - "gas": 943893, - "gasCost": 1, - "depth": 1 - }, - { - "pc": 255, - "op": "PUSH2", - "gas": 943892, - "gasCost": 3, - "depth": 1 - }, - { - "pc": 258, - "op": "PUSH2", - "gas": 943889, - "gasCost": 3, - "depth": 1 - }, - { - "pc": 261, - "op": "JUMP", - "gas": 943886, - "gasCost": 8, - "depth": 1 - }, - { - "pc": 667, - "op": "JUMPDEST", - "gas": 943878, - "gasCost": 1, - "depth": 1 - }, - { - "pc": 668, - "op": "PUSH2", - "gas": 943877, - "gasCost": 3, - "depth": 1 - }, - { - "pc": 671, - "op": "PUSH2", - "gas": 943874, - "gasCost": 3, - "depth": 1 - }, - { - "pc": 674, - "op": "JUMP", - "gas": 943871, - "gasCost": 8, - "depth": 1 - }, - { - "pc": 872, - "op": "JUMPDEST", - "gas": 943863, - "gasCost": 1, - "depth": 1 - }, - { - "pc": 873, - "op": "PUSH1", - "gas": 943862, - "gasCost": 3, - "depth": 1 - }, - { - "pc": 875, - "op": "PUSH32", - "gas": 943859, - "gasCost": 3, - "depth": 1 - }, - { - "pc": 908, - "op": "JUMPDEST", - "gas": 943856, - "gasCost": 1, - "depth": 1 - }, - { - "pc": 909, - "op": "SLOAD", - "gas": 943855, - "gasCost": 100, - "depth": 1, - "storage": { - "b53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103": "000000000000000000000000264aae078cc695f7d0b66260895aee9d4e83e730" - } - }, - { - "pc": 910, - "op": "PUSH1", - "gas": 943755, - "gasCost": 3, - "depth": 1 - }, - { - "pc": 912, - "op": "PUSH1", - "gas": 943752, - "gasCost": 3, - "depth": 1 - }, - { - "pc": 914, - "op": "PUSH1", - "gas": 943749, - "gasCost": 3, - "depth": 1 - }, - { - "pc": 916, - "op": "SHL", - "gas": 943746, - "gasCost": 3, - "depth": 1 - }, - { - "pc": 917, - "op": "SUB", - "gas": 943743, - "gasCost": 3, - "depth": 1 - }, - { - "pc": 918, - "op": "AND", - "gas": 943740, - "gasCost": 3, - "depth": 1 - }, - { - "pc": 919, - "op": "SWAP2", - "gas": 943737, - "gasCost": 3, - "depth": 1 - }, - { - "pc": 920, - "op": "SWAP1", - "gas": 943734, - "gasCost": 3, - "depth": 1 - }, - { - "pc": 921, - "op": "POP", - "gas": 943731, - "gasCost": 2, - "depth": 1 - }, - { - "pc": 922, - "op": "JUMP", - "gas": 943729, - "gasCost": 8, - "depth": 1 - }, - { - "pc": 675, - "op": "JUMPDEST", - "gas": 943721, - "gasCost": 1, - "depth": 1 - }, - { - "pc": 676, - "op": "PUSH1", - "gas": 943720, - "gasCost": 3, - "depth": 1 - }, - { - "pc": 678, - "op": "PUSH1", - "gas": 943717, - "gasCost": 3, - "depth": 1 - }, - { - "pc": 680, - "op": "PUSH1", - "gas": 943714, - "gasCost": 3, - "depth": 1 - }, - { - "pc": 682, - "op": "SHL", - "gas": 943711, - "gasCost": 3, - "depth": 1 - }, - { - "pc": 683, - "op": "SUB", - "gas": 943708, - "gasCost": 3, - "depth": 1 - }, - { - "pc": 684, - "op": "AND", - "gas": 943705, - "gasCost": 3, - "depth": 1 - }, - { - "pc": 685, - "op": "CALLER", - "gas": 943702, - "gasCost": 2, - "depth": 1 - }, - { - "pc": 686, - "op": "PUSH1", - "gas": 943700, - "gasCost": 3, - "depth": 1 - }, - { - "pc": 688, - "op": "PUSH1", - "gas": 943697, - "gasCost": 3, - "depth": 1 - }, - { - "pc": 690, - "op": "PUSH1", - "gas": 943694, - "gasCost": 3, - "depth": 1 - }, - { - "pc": 692, - "op": "SHL", - "gas": 943691, - "gasCost": 3, - "depth": 1 - }, - { - "pc": 693, - "op": "SUB", - "gas": 943688, - "gasCost": 3, - "depth": 1 - }, - { - "pc": 694, - "op": "AND", - "gas": 943685, - "gasCost": 3, - "depth": 1 - }, - { - "pc": 695, - "op": "EQ", - "gas": 943682, - "gasCost": 3, - "depth": 1 - }, - { - "pc": 696, - "op": "ISZERO", - "gas": 943679, - "gasCost": 3, - "depth": 1 - }, - { - "pc": 697, - "op": "PUSH2", - "gas": 943676, - "gasCost": 3, - "depth": 1 - }, - { - "pc": 700, - "op": "JUMPI", - "gas": 943673, - "gasCost": 10, - "depth": 1 - }, - { - "pc": 278, - "op": "JUMPDEST", - "gas": 943663, - "gasCost": 1, - "depth": 1 - }, - { - "pc": 279, - "op": "JUMP", - "gas": 943662, - "gasCost": 8, - "depth": 1 - }, - { - "pc": 262, - "op": "JUMPDEST", - "gas": 943654, - "gasCost": 1, - "depth": 1 - }, - { - "pc": 263, - "op": "PUSH2", - "gas": 943653, - "gasCost": 3, - "depth": 1 - }, - { - "pc": 266, - "op": "PUSH2", - "gas": 943650, - "gasCost": 3, - "depth": 1 - }, - { - "pc": 269, - "op": "PUSH2", - "gas": 943647, - "gasCost": 3, - "depth": 1 - }, - { - "pc": 272, - "op": "JUMP", - "gas": 943644, - "gasCost": 8, - "depth": 1 - }, - { - "pc": 826, - "op": "JUMPDEST", - "gas": 943636, - "gasCost": 1, - "depth": 1 - }, - { - "pc": 827, - "op": "PUSH1", - "gas": 943635, - "gasCost": 3, - "depth": 1 - }, - { - "pc": 829, - "op": "PUSH2", - "gas": 943632, - "gasCost": 3, - "depth": 1 - }, - { - "pc": 832, - "op": "PUSH2", - "gas": 943629, - "gasCost": 3, - "depth": 1 - }, - { - "pc": 835, - "op": "JUMP", - "gas": 943626, - "gasCost": 8, - "depth": 1 - }, - { - "pc": 1269, - "op": "JUMPDEST", - "gas": 943618, - "gasCost": 1, - "depth": 1 - }, - { - "pc": 1270, - "op": "PUSH1", - "gas": 943617, - "gasCost": 3, - "depth": 1 - }, - { - "pc": 1272, - "op": "PUSH32", - "gas": 943614, - "gasCost": 3, - "depth": 1 - }, - { - "pc": 1305, - "op": "PUSH2", - "gas": 943611, - "gasCost": 3, - "depth": 1 - }, - { - "pc": 1308, - "op": "JUMP", - "gas": 943608, - "gasCost": 8, - "depth": 1 - }, - { - "pc": 908, - "op": "JUMPDEST", - "gas": 943600, - "gasCost": 1, - "depth": 1 - }, - { - "pc": 909, - "op": "SLOAD", - "gas": 943599, - "gasCost": 100, - "depth": 1, - "storage": { - "360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc": "00000000000000000000000060571c8f4b52954a24a5e7306d435e951528d963", - "b53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103": "000000000000000000000000264aae078cc695f7d0b66260895aee9d4e83e730" - } - }, - { - "pc": 910, - "op": "PUSH1", - "gas": 943499, - "gasCost": 3, - "depth": 1 - }, - { - "pc": 912, - "op": "PUSH1", - "gas": 943496, - "gasCost": 3, - "depth": 1 - }, - { - "pc": 914, - "op": "PUSH1", - "gas": 943493, - "gasCost": 3, - "depth": 1 - }, - { - "pc": 916, - "op": "SHL", - "gas": 943490, - "gasCost": 3, - "depth": 1 - }, - { - "pc": 917, - "op": "SUB", - "gas": 943487, - "gasCost": 3, - "depth": 1 - }, - { - "pc": 918, - "op": "AND", - "gas": 943484, - "gasCost": 3, - "depth": 1 - }, - { - "pc": 919, - "op": "SWAP2", - "gas": 943481, - "gasCost": 3, - "depth": 1 - }, - { - "pc": 920, - "op": "SWAP1", - "gas": 943478, - "gasCost": 3, - "depth": 1 - }, - { - "pc": 921, - "op": "POP", - "gas": 943475, - "gasCost": 2, - "depth": 1 - }, - { - "pc": 922, - "op": "JUMP", - "gas": 943473, - "gasCost": 8, - "depth": 1 - }, - { - "pc": 507, - "op": "JUMPDEST", - "gas": 943465, - "gasCost": 1, - "depth": 1 - }, - { - "pc": 508, - "op": "SWAP1", - "gas": 943464, - "gasCost": 3, - "depth": 1 - }, - { - "pc": 509, - "op": "POP", - "gas": 943461, - "gasCost": 2, - "depth": 1 - }, - { - "pc": 510, - "op": "SWAP1", - "gas": 943459, - "gasCost": 3, - "depth": 1 - }, - { - "pc": 511, - "op": "JUMP", - "gas": 943456, - "gasCost": 8, - "depth": 1 - }, - { - "pc": 273, - "op": "JUMPDEST", - "gas": 943448, - "gasCost": 1, - "depth": 1 - }, - { - "pc": 274, - "op": "PUSH2", - "gas": 943447, - "gasCost": 3, - "depth": 1 - }, - { - "pc": 277, - "op": "JUMP", - "gas": 943444, - "gasCost": 8, - "depth": 1 - }, - { - "pc": 836, - "op": "JUMPDEST", - "gas": 943436, - "gasCost": 1, - "depth": 1 - }, - { - "pc": 837, - "op": "CALLDATASIZE", - "gas": 943435, - "gasCost": 2, - "depth": 1 - }, - { - "pc": 838, - "op": "PUSH1", - "gas": 943433, - "gasCost": 3, - "depth": 1 - }, - { - "pc": 840, - "op": "DUP1", - "gas": 943430, - "gasCost": 3, - "depth": 1 - }, - { - "pc": 841, - "op": "CALLDATACOPY", - "gas": 943427, - "gasCost": 212, - "depth": 1 - }, - { - "pc": 842, - "op": "PUSH1", - "gas": 943215, - "gasCost": 3, - "depth": 1 - }, - { - "pc": 844, - "op": "DUP1", - "gas": 943212, - "gasCost": 3, - "depth": 1 - }, - { - "pc": 845, - "op": "CALLDATASIZE", - "gas": 943209, - "gasCost": 2, - "depth": 1 - }, - { - "pc": 846, - "op": "PUSH1", - "gas": 943207, - "gasCost": 3, - "depth": 1 - }, - { - "pc": 848, - "op": "DUP5", - "gas": 943204, - "gasCost": 3, - "depth": 1 - }, - { - "pc": 849, - "op": "GAS", - "gas": 943201, - "gasCost": 2, - "depth": 1 - }, - { - "pc": 850, - "op": "DELEGATECALL", - "gas": 943199, - "gasCost": 928503, - "depth": 1 - }, - { - "pc": 0, - "op": "PUSH1", - "gas": 925903, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 2, - "op": "PUSH1", - "gas": 925900, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 4, - "op": "MSTORE", - "gas": 925897, - "gasCost": 12, - "depth": 2 - }, - { - "pc": 5, - "op": "CALLVALUE", - "gas": 925885, - "gasCost": 2, - "depth": 2 - }, - { - "pc": 6, - "op": "DUP1", - "gas": 925883, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 7, - "op": "ISZERO", - "gas": 925880, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 8, - "op": "PUSH2", - "gas": 925877, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 11, - "op": "JUMPI", - "gas": 925874, - "gasCost": 10, - "depth": 2 - }, - { - "pc": 16, - "op": "JUMPDEST", - "gas": 925864, - "gasCost": 1, - "depth": 2 - }, - { - "pc": 17, - "op": "POP", - "gas": 925863, - "gasCost": 2, - "depth": 2 - }, - { - "pc": 18, - "op": "PUSH1", - "gas": 925861, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 20, - "op": "CALLDATASIZE", - "gas": 925858, - "gasCost": 2, - "depth": 2 - }, - { - "pc": 21, - "op": "LT", - "gas": 925856, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 22, - "op": "PUSH2", - "gas": 925853, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 25, - "op": "JUMPI", - "gas": 925850, - "gasCost": 10, - "depth": 2 - }, - { - "pc": 26, - "op": "PUSH1", - "gas": 925840, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 28, - "op": "CALLDATALOAD", - "gas": 925837, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 29, - "op": "PUSH1", - "gas": 925834, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 31, - "op": "SHR", - "gas": 925831, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 32, - "op": "DUP1", - "gas": 925828, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 33, - "op": "PUSH4", - "gas": 925825, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 38, - "op": "GT", - "gas": 925822, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 39, - "op": "PUSH2", - "gas": 925819, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 42, - "op": "JUMPI", - "gas": 925816, - "gasCost": 10, - "depth": 2 - }, - { - "pc": 326, - "op": "JUMPDEST", - "gas": 925806, - "gasCost": 1, - "depth": 2 - }, - { - "pc": 327, - "op": "DUP1", - "gas": 925805, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 328, - "op": "PUSH4", - "gas": 925802, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 333, - "op": "GT", - "gas": 925799, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 334, - "op": "PUSH2", - "gas": 925796, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 337, - "op": "JUMPI", - "gas": 925793, - "gasCost": 10, - "depth": 2 - }, - { - "pc": 338, - "op": "DUP1", - "gas": 925783, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 339, - "op": "PUSH4", - "gas": 925780, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 344, - "op": "GT", - "gas": 925777, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 345, - "op": "PUSH2", - "gas": 925774, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 348, - "op": "JUMPI", - "gas": 925771, - "gasCost": 10, - "depth": 2 - }, - { - "pc": 419, - "op": "JUMPDEST", - "gas": 925761, - "gasCost": 1, - "depth": 2 - }, - { - "pc": 420, - "op": "DUP1", - "gas": 925760, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 421, - "op": "PUSH4", - "gas": 925757, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 426, - "op": "EQ", - "gas": 925754, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 427, - "op": "PUSH2", - "gas": 925751, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 430, - "op": "JUMPI", - "gas": 925748, - "gasCost": 10, - "depth": 2 - }, - { - "pc": 431, - "op": "DUP1", - "gas": 925738, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 432, - "op": "PUSH4", - "gas": 925735, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 437, - "op": "EQ", - "gas": 925732, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 438, - "op": "PUSH2", - "gas": 925729, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 441, - "op": "JUMPI", - "gas": 925726, - "gasCost": 10, - "depth": 2 - }, - { - "pc": 841, - "op": "JUMPDEST", - "gas": 925716, - "gasCost": 1, - "depth": 2 - }, - { - "pc": 842, - "op": "PUSH2", - "gas": 925715, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 845, - "op": "PUSH2", - "gas": 925712, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 848, - "op": "CALLDATASIZE", - "gas": 925709, - "gasCost": 2, - "depth": 2 - }, - { - "pc": 849, - "op": "PUSH1", - "gas": 925707, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 851, - "op": "PUSH2", - "gas": 925704, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 854, - "op": "JUMP", - "gas": 925701, - "gasCost": 8, - "depth": 2 - }, - { - "pc": 12874, - "op": "JUMPDEST", - "gas": 925693, - "gasCost": 1, - "depth": 2 - }, - { - "pc": 12875, - "op": "PUSH1", - "gas": 925692, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 12877, - "op": "DUP1", - "gas": 925689, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 12878, - "op": "PUSH1", - "gas": 925686, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 12880, - "op": "DUP1", - "gas": 925683, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 12881, - "op": "PUSH1", - "gas": 925680, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 12883, - "op": "DUP1", - "gas": 925677, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 12884, - "op": "PUSH1", - "gas": 925674, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 12886, - "op": "DUP8", - "gas": 925671, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 12887, - "op": "DUP10", - "gas": 925668, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 12888, - "op": "SUB", - "gas": 925665, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 12889, - "op": "SLT", - "gas": 925662, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 12890, - "op": "ISZERO", - "gas": 925659, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 12891, - "op": "PUSH2", - "gas": 925656, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 12894, - "op": "JUMPI", - "gas": 925653, - "gasCost": 10, - "depth": 2 - }, - { - "pc": 12899, - "op": "JUMPDEST", - "gas": 925643, - "gasCost": 1, - "depth": 2 - }, - { - "pc": 12900, - "op": "DUP7", - "gas": 925642, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 12901, - "op": "CALLDATALOAD", - "gas": 925639, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 12902, - "op": "SWAP6", - "gas": 925636, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 12903, - "op": "POP", - "gas": 925633, - "gasCost": 2, - "depth": 2 - }, - { - "pc": 12904, - "op": "PUSH1", - "gas": 925631, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 12906, - "op": "DUP8", - "gas": 925628, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 12907, - "op": "ADD", - "gas": 925625, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 12908, - "op": "CALLDATALOAD", - "gas": 925622, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 12909, - "op": "PUSH1", - "gas": 925619, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 12911, - "op": "PUSH1", - "gas": 925616, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 12913, - "op": "PUSH1", - "gas": 925613, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 12915, - "op": "SHL", - "gas": 925610, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 12916, - "op": "SUB", - "gas": 925607, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 12917, - "op": "DUP1", - "gas": 925604, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 12918, - "op": "DUP3", - "gas": 925601, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 12919, - "op": "GT", - "gas": 925598, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 12920, - "op": "ISZERO", - "gas": 925595, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 12921, - "op": "PUSH2", - "gas": 925592, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 12924, - "op": "JUMPI", - "gas": 925589, - "gasCost": 10, - "depth": 2 - }, - { - "pc": 12929, - "op": "JUMPDEST", - "gas": 925579, - "gasCost": 1, - "depth": 2 - }, - { - "pc": 12930, - "op": "SWAP1", - "gas": 925578, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 12931, - "op": "DUP9", - "gas": 925575, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 12932, - "op": "ADD", - "gas": 925572, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 12933, - "op": "SWAP1", - "gas": 925569, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 12934, - "op": "PUSH1", - "gas": 925566, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 12936, - "op": "DUP3", - "gas": 925563, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 12937, - "op": "DUP12", - "gas": 925560, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 12938, - "op": "SUB", - "gas": 925557, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 12939, - "op": "SLT", - "gas": 925554, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 12940, - "op": "ISZERO", - "gas": 925551, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 12941, - "op": "PUSH2", - "gas": 925548, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 12944, - "op": "JUMPI", - "gas": 925545, - "gasCost": 10, - "depth": 2 - }, - { - "pc": 12949, - "op": "JUMPDEST", - "gas": 925535, - "gasCost": 1, - "depth": 2 - }, - { - "pc": 12950, - "op": "SWAP1", - "gas": 925534, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 12951, - "op": "SWAP6", - "gas": 925531, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 12952, - "op": "POP", - "gas": 925528, - "gasCost": 2, - "depth": 2 - }, - { - "pc": 12953, - "op": "PUSH1", - "gas": 925526, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 12955, - "op": "DUP9", - "gas": 925523, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 12956, - "op": "ADD", - "gas": 925520, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 12957, - "op": "CALLDATALOAD", - "gas": 925517, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 12958, - "op": "SWAP1", - "gas": 925514, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 12959, - "op": "DUP1", - "gas": 925511, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 12960, - "op": "DUP3", - "gas": 925508, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 12961, - "op": "GT", - "gas": 925505, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 12962, - "op": "ISZERO", - "gas": 925502, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 12963, - "op": "PUSH2", - "gas": 925499, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 12966, - "op": "JUMPI", - "gas": 925496, - "gasCost": 10, - "depth": 2 - }, - { - "pc": 12971, - "op": "JUMPDEST", - "gas": 925486, - "gasCost": 1, - "depth": 2 - }, - { - "pc": 12972, - "op": "POP", - "gas": 925485, - "gasCost": 2, - "depth": 2 - }, - { - "pc": 12973, - "op": "PUSH2", - "gas": 925483, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 12976, - "op": "DUP10", - "gas": 925480, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 12977, - "op": "DUP3", - "gas": 925477, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 12978, - "op": "DUP11", - "gas": 925474, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 12979, - "op": "ADD", - "gas": 925471, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 12980, - "op": "PUSH2", - "gas": 925468, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 12983, - "op": "JUMP", - "gas": 925465, - "gasCost": 8, - "depth": 2 - }, - { - "pc": 12616, - "op": "JUMPDEST", - "gas": 925457, - "gasCost": 1, - "depth": 2 - }, - { - "pc": 12617, - "op": "PUSH1", - "gas": 925456, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 12619, - "op": "PUSH1", - "gas": 925453, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 12621, - "op": "DUP3", - "gas": 925450, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 12622, - "op": "DUP5", - "gas": 925447, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 12623, - "op": "SUB", - "gas": 925444, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 12624, - "op": "SLT", - "gas": 925441, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 12625, - "op": "ISZERO", - "gas": 925438, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 12626, - "op": "PUSH2", - "gas": 925435, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 12629, - "op": "JUMPI", - "gas": 925432, - "gasCost": 10, - "depth": 2 - }, - { - "pc": 12634, - "op": "JUMPDEST", - "gas": 925422, - "gasCost": 1, - "depth": 2 - }, - { - "pc": 12635, - "op": "POP", - "gas": 925421, - "gasCost": 2, - "depth": 2 - }, - { - "pc": 12636, - "op": "SWAP2", - "gas": 925419, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 12637, - "op": "SWAP1", - "gas": 925416, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 12638, - "op": "POP", - "gas": 925413, - "gasCost": 2, - "depth": 2 - }, - { - "pc": 12639, - "op": "JUMP", - "gas": 925411, - "gasCost": 8, - "depth": 2 - }, - { - "pc": 12984, - "op": "JUMPDEST", - "gas": 925403, - "gasCost": 1, - "depth": 2 - }, - { - "pc": 12985, - "op": "SWAP5", - "gas": 925402, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 12986, - "op": "POP", - "gas": 925399, - "gasCost": 2, - "depth": 2 - }, - { - "pc": 12987, - "op": "POP", - "gas": 925397, - "gasCost": 2, - "depth": 2 - }, - { - "pc": 12988, - "op": "PUSH1", - "gas": 925395, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 12990, - "op": "DUP8", - "gas": 925392, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 12991, - "op": "ADD", - "gas": 925389, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 12992, - "op": "CALLDATALOAD", - "gas": 925386, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 12993, - "op": "SWAP3", - "gas": 925383, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 12994, - "op": "POP", - "gas": 925380, - "gasCost": 2, - "depth": 2 - }, - { - "pc": 12995, - "op": "PUSH1", - "gas": 925378, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 12997, - "op": "DUP8", - "gas": 925375, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 12998, - "op": "ADD", - "gas": 925372, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 12999, - "op": "CALLDATALOAD", - "gas": 925369, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 13000, - "op": "SWAP2", - "gas": 925366, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 13001, - "op": "POP", - "gas": 925363, - "gasCost": 2, - "depth": 2 - }, - { - "pc": 13002, - "op": "PUSH1", - "gas": 925361, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 13004, - "op": "DUP8", - "gas": 925358, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 13005, - "op": "ADD", - "gas": 925355, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 13006, - "op": "CALLDATALOAD", - "gas": 925352, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 13007, - "op": "SWAP1", - "gas": 925349, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 13008, - "op": "POP", - "gas": 925346, - "gasCost": 2, - "depth": 2 - }, - { - "pc": 13009, - "op": "SWAP3", - "gas": 925344, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 13010, - "op": "SWAP6", - "gas": 925341, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 13011, - "op": "POP", - "gas": 925338, - "gasCost": 2, - "depth": 2 - }, - { - "pc": 13012, - "op": "SWAP3", - "gas": 925336, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 13013, - "op": "SWAP6", - "gas": 925333, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 13014, - "op": "POP", - "gas": 925330, - "gasCost": 2, - "depth": 2 - }, - { - "pc": 13015, - "op": "SWAP3", - "gas": 925328, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 13016, - "op": "SWAP6", - "gas": 925325, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 13017, - "op": "JUMP", - "gas": 925322, - "gasCost": 8, - "depth": 2 - }, - { - "pc": 855, - "op": "JUMPDEST", - "gas": 925314, - "gasCost": 1, - "depth": 2 - }, - { - "pc": 856, - "op": "PUSH2", - "gas": 925313, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 859, - "op": "JUMP", - "gas": 925310, - "gasCost": 8, - "depth": 2 - }, - { - "pc": 3844, - "op": "JUMPDEST", - "gas": 925302, - "gasCost": 1, - "depth": 2 - }, - { - "pc": 3845, - "op": "PUSH1", - "gas": 925301, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 3847, - "op": "MLOAD", - "gas": 925298, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 3848, - "op": "PUSH1", - "gas": 925295, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 3850, - "op": "SWAP1", - "gas": 925292, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 3851, - "op": "PUSH32", - "gas": 925289, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 3884, - "op": "SWAP1", - "gas": 925286, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 3885, - "op": "PUSH1", - "gas": 925283, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 3887, - "op": "SWAP1", - "gas": 925280, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 3888, - "op": "LOG2", - "gas": 925277, - "gasCost": 1125, - "depth": 2 - }, - { - "pc": 3889, - "op": "CALLER", - "gas": 924152, - "gasCost": 2, - "depth": 2 - }, - { - "pc": 3890, - "op": "PUSH1", - "gas": 924150, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 3892, - "op": "SWAP1", - "gas": 924147, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 3893, - "op": "DUP2", - "gas": 924144, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 3894, - "op": "MSTORE", - "gas": 924141, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 3895, - "op": "PUSH1", - "gas": 924138, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 3897, - "op": "PUSH1", - "gas": 924135, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 3899, - "op": "MSTORE", - "gas": 924132, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 3900, - "op": "PUSH1", - "gas": 924129, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 3902, - "op": "SWAP1", - "gas": 924126, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 3903, - "op": "KECCAK256", - "gas": 924123, - "gasCost": 42, - "depth": 2 - }, - { - "pc": 3904, - "op": "SLOAD", - "gas": 924081, - "gasCost": 2100, - "depth": 2, - "storage": { - "360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc": "00000000000000000000000060571c8f4b52954a24a5e7306d435e951528d963", - "b53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103": "000000000000000000000000264aae078cc695f7d0b66260895aee9d4e83e730", - "d343c84be1c85a440922a059e46ad21d2f412ae5bec5ee65c2c0d39dd877c54d": "0000000000000000000000000000000000000000000000000000000000000001" - } - }, - { - "pc": 3905, - "op": "PUSH1", - "gas": 921981, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 3907, - "op": "AND", - "gas": 921978, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 3908, - "op": "PUSH2", - "gas": 921975, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 3911, - "op": "JUMPI", - "gas": 921972, - "gasCost": 10, - "depth": 2 - }, - { - "pc": 3936, - "op": "JUMPDEST", - "gas": 921962, - "gasCost": 1, - "depth": 2 - }, - { - "pc": 3937, - "op": "PUSH1", - "gas": 921961, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 3939, - "op": "SLOAD", - "gas": 921958, - "gasCost": 2100, - "depth": 2, - "storage": { - "0000000000000000000000000000000000000000000000000000000000000003": "0000000000000000000000000000000000000000000000000000000000000000", - "360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc": "00000000000000000000000060571c8f4b52954a24a5e7306d435e951528d963", - "b53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103": "000000000000000000000000264aae078cc695f7d0b66260895aee9d4e83e730", - "d343c84be1c85a440922a059e46ad21d2f412ae5bec5ee65c2c0d39dd877c54d": "0000000000000000000000000000000000000000000000000000000000000001" - } - }, - { - "pc": 3940, - "op": "PUSH1", - "gas": 919858, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 3942, - "op": "SLOAD", - "gas": 919855, - "gasCost": 2100, - "depth": 2, - "storage": { - "0000000000000000000000000000000000000000000000000000000000000002": "0000000000000000000000000000000000000000000000000000000000000000", - "0000000000000000000000000000000000000000000000000000000000000003": "0000000000000000000000000000000000000000000000000000000000000000", - "360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc": "00000000000000000000000060571c8f4b52954a24a5e7306d435e951528d963", - "b53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103": "000000000000000000000000264aae078cc695f7d0b66260895aee9d4e83e730", - "d343c84be1c85a440922a059e46ad21d2f412ae5bec5ee65c2c0d39dd877c54d": "0000000000000000000000000000000000000000000000000000000000000001" - } - }, - { - "pc": 3943, - "op": "PUSH1", - "gas": 917755, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 3945, - "op": "MLOAD", - "gas": 917752, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 3946, - "op": "PUSH4", - "gas": 917749, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 3951, - "op": "PUSH1", - "gas": 917746, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 3953, - "op": "SHL", - "gas": 917743, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 3954, - "op": "DUP2", - "gas": 917740, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 3955, - "op": "MSTORE", - "gas": 917737, - "gasCost": 9, - "depth": 2 - }, - { - "pc": 3956, - "op": "PUSH1", - "gas": 917728, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 3958, - "op": "PUSH1", - "gas": 917725, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 3960, - "op": "PUSH1", - "gas": 917722, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 3962, - "op": "SHL", - "gas": 917719, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 3963, - "op": "SUB", - "gas": 917716, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 3964, - "op": "SWAP3", - "gas": 917713, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 3965, - "op": "DUP4", - "gas": 917710, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 3966, - "op": "AND", - "gas": 917707, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 3967, - "op": "SWAP3", - "gas": 917704, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 3968, - "op": "PUSH4", - "gas": 917701, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 3973, - "op": "SWAP3", - "gas": 917698, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 3974, - "op": "PUSH2", - "gas": 917695, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 3977, - "op": "SWAP3", - "gas": 917692, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 3978, - "op": "DUP10", - "gas": 917689, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 3979, - "op": "SWAP3", - "gas": 917686, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 3980, - "op": "SWAP1", - "gas": 917683, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 3981, - "op": "SWAP2", - "gas": 917680, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 3982, - "op": "AND", - "gas": 917677, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 3983, - "op": "SWAP1", - "gas": 917674, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 3984, - "op": "DUP11", - "gas": 917671, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 3985, - "op": "SWAP1", - "gas": 917668, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 3986, - "op": "PUSH1", - "gas": 917665, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 3988, - "op": "ADD", - "gas": 917662, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 3989, - "op": "PUSH2", - "gas": 917659, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 3992, - "op": "JUMP", - "gas": 917656, - "gasCost": 8, - "depth": 2 - }, - { - "pc": 15266, - "op": "JUMPDEST", - "gas": 917648, - "gasCost": 1, - "depth": 2 - }, - { - "pc": 15267, - "op": "PUSH1", - "gas": 917647, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 15269, - "op": "DUP2", - "gas": 917644, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 15270, - "op": "MSTORE", - "gas": 917641, - "gasCost": 6, - "depth": 2 - }, - { - "pc": 15271, - "op": "DUP4", - "gas": 917635, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 15272, - "op": "CALLDATALOAD", - "gas": 917632, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 15273, - "op": "PUSH1", - "gas": 917629, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 15275, - "op": "DUP3", - "gas": 917626, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 15276, - "op": "ADD", - "gas": 917623, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 15277, - "op": "MSTORE", - "gas": 917620, - "gasCost": 12, - "depth": 2 - }, - { - "pc": 15278, - "op": "PUSH1", - "gas": 917608, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 15280, - "op": "DUP5", - "gas": 917605, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 15281, - "op": "ADD", - "gas": 917602, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 15282, - "op": "CALLDATALOAD", - "gas": 917599, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 15283, - "op": "PUSH1", - "gas": 917596, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 15285, - "op": "DUP3", - "gas": 917593, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 15286, - "op": "ADD", - "gas": 917590, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 15287, - "op": "MSTORE", - "gas": 917587, - "gasCost": 6, - "depth": 2 - }, - { - "pc": 15288, - "op": "PUSH4", - "gas": 917581, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 15293, - "op": "PUSH2", - "gas": 917578, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 15296, - "op": "PUSH1", - "gas": 917575, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 15298, - "op": "DUP7", - "gas": 917572, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 15299, - "op": "ADD", - "gas": 917569, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 15300, - "op": "PUSH2", - "gas": 917566, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 15303, - "op": "JUMP", - "gas": 917563, - "gasCost": 8, - "depth": 2 - }, - { - "pc": 14679, - "op": "JUMPDEST", - "gas": 917555, - "gasCost": 1, - "depth": 2 - }, - { - "pc": 14680, - "op": "DUP1", - "gas": 917554, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 14681, - "op": "CALLDATALOAD", - "gas": 917551, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 14682, - "op": "PUSH4", - "gas": 917548, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 14687, - "op": "DUP2", - "gas": 917545, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 14688, - "op": "AND", - "gas": 917542, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 14689, - "op": "DUP2", - "gas": 917539, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 14690, - "op": "EQ", - "gas": 917536, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 14691, - "op": "PUSH2", - "gas": 917533, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 14694, - "op": "JUMPI", - "gas": 917530, - "gasCost": 10, - "depth": 2 - }, - { - "pc": 13701, - "op": "JUMPDEST", - "gas": 917520, - "gasCost": 1, - "depth": 2 - }, - { - "pc": 13702, - "op": "SWAP2", - "gas": 917519, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 13703, - "op": "SWAP1", - "gas": 917516, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 13704, - "op": "POP", - "gas": 917513, - "gasCost": 2, - "depth": 2 - }, - { - "pc": 13705, - "op": "JUMP", - "gas": 917511, - "gasCost": 8, - "depth": 2 - }, - { - "pc": 15304, - "op": "JUMPDEST", - "gas": 917503, - "gasCost": 1, - "depth": 2 - }, - { - "pc": 15305, - "op": "AND", - "gas": 917502, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 15306, - "op": "PUSH1", - "gas": 917499, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 15308, - "op": "DUP3", - "gas": 917496, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 15309, - "op": "ADD", - "gas": 917493, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 15310, - "op": "MSTORE", - "gas": 917490, - "gasCost": 6, - "depth": 2 - }, - { - "pc": 15311, - "op": "PUSH1", - "gas": 917484, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 15313, - "op": "PUSH1", - "gas": 917481, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 15315, - "op": "DUP6", - "gas": 917478, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 15316, - "op": "ADD", - "gas": 917475, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 15317, - "op": "CALLDATALOAD", - "gas": 917472, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 15318, - "op": "PUSH1", - "gas": 917469, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 15320, - "op": "NOT", - "gas": 917466, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 15321, - "op": "DUP7", - "gas": 917463, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 15322, - "op": "CALLDATASIZE", - "gas": 917460, - "gasCost": 2, - "depth": 2 - }, - { - "pc": 15323, - "op": "SUB", - "gas": 917458, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 15324, - "op": "ADD", - "gas": 917455, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 15325, - "op": "DUP2", - "gas": 917452, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 15326, - "op": "SLT", - "gas": 917449, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 15327, - "op": "PUSH2", - "gas": 917446, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 15330, - "op": "JUMPI", - "gas": 917443, - "gasCost": 10, - "depth": 2 - }, - { - "pc": 15335, - "op": "JUMPDEST", - "gas": 917433, - "gasCost": 1, - "depth": 2 - }, - { - "pc": 15336, - "op": "DUP6", - "gas": 917432, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 15337, - "op": "ADD", - "gas": 917429, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 15338, - "op": "DUP1", - "gas": 917426, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 15339, - "op": "CALLDATALOAD", - "gas": 917423, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 15340, - "op": "PUSH1", - "gas": 917420, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 15342, - "op": "PUSH1", - "gas": 917417, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 15344, - "op": "PUSH1", - "gas": 917414, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 15346, - "op": "SHL", - "gas": 917411, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 15347, - "op": "SUB", - "gas": 917408, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 15348, - "op": "DUP2", - "gas": 917405, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 15349, - "op": "GT", - "gas": 917402, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 15350, - "op": "ISZERO", - "gas": 917399, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 15351, - "op": "PUSH2", - "gas": 917396, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 15354, - "op": "JUMPI", - "gas": 917393, - "gasCost": 10, - "depth": 2 - }, - { - "pc": 15359, - "op": "JUMPDEST", - "gas": 917383, - "gasCost": 1, - "depth": 2 - }, - { - "pc": 15360, - "op": "DUP1", - "gas": 917382, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 15361, - "op": "PUSH1", - "gas": 917379, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 15363, - "op": "SHL", - "gas": 917376, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 15364, - "op": "CALLDATASIZE", - "gas": 917373, - "gasCost": 2, - "depth": 2 - }, - { - "pc": 15365, - "op": "SUB", - "gas": 917371, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 15366, - "op": "DUP8", - "gas": 917368, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 15367, - "op": "SGT", - "gas": 917365, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 15368, - "op": "ISZERO", - "gas": 917362, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 15369, - "op": "PUSH2", - "gas": 917359, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 15372, - "op": "JUMPI", - "gas": 917356, - "gasCost": 10, - "depth": 2 - }, - { - "pc": 15377, - "op": "JUMPDEST", - "gas": 917346, - "gasCost": 1, - "depth": 2 - }, - { - "pc": 15378, - "op": "PUSH1", - "gas": 917345, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 15380, - "op": "PUSH1", - "gas": 917342, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 15382, - "op": "DUP6", - "gas": 917339, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 15383, - "op": "ADD", - "gas": 917336, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 15384, - "op": "MSTORE", - "gas": 917333, - "gasCost": 6, - "depth": 2 - }, - { - "pc": 15385, - "op": "PUSH2", - "gas": 917327, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 15388, - "op": "PUSH1", - "gas": 917324, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 15390, - "op": "DUP6", - "gas": 917321, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 15391, - "op": "ADD", - "gas": 917318, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 15392, - "op": "DUP3", - "gas": 917315, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 15393, - "op": "PUSH1", - "gas": 917312, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 15395, - "op": "DUP6", - "gas": 917309, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 15396, - "op": "ADD", - "gas": 917306, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 15397, - "op": "PUSH2", - "gas": 917303, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 15400, - "op": "JUMP", - "gas": 917300, - "gasCost": 8, - "depth": 2 - }, - { - "pc": 14699, - "op": "JUMPDEST", - "gas": 917292, - "gasCost": 1, - "depth": 2 - }, - { - "pc": 14700, - "op": "DUP2", - "gas": 917291, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 14701, - "op": "DUP4", - "gas": 917288, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 14702, - "op": "MSTORE", - "gas": 917285, - "gasCost": 6, - "depth": 2 - }, - { - "pc": 14703, - "op": "PUSH1", - "gas": 917279, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 14705, - "op": "PUSH1", - "gas": 917276, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 14707, - "op": "DUP1", - "gas": 917273, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 14708, - "op": "DUP6", - "gas": 917270, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 14709, - "op": "ADD", - "gas": 917267, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 14710, - "op": "SWAP5", - "gas": 917264, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 14711, - "op": "POP", - "gas": 917261, - "gasCost": 2, - "depth": 2 - }, - { - "pc": 14712, - "op": "DUP3", - "gas": 917259, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 14713, - "op": "PUSH1", - "gas": 917256, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 14715, - "op": "JUMPDEST", - "gas": 917253, - "gasCost": 1, - "depth": 2 - }, - { - "pc": 14716, - "op": "DUP6", - "gas": 917252, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 14717, - "op": "DUP2", - "gas": 917249, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 14718, - "op": "LT", - "gas": 917246, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 14719, - "op": "ISZERO", - "gas": 917243, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 14720, - "op": "PUSH2", - "gas": 917240, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 14723, - "op": "JUMPI", - "gas": 917237, - "gasCost": 10, - "depth": 2 - }, - { - "pc": 14724, - "op": "PUSH1", - "gas": 917227, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 14726, - "op": "DUP1", - "gas": 917224, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 14727, - "op": "PUSH2", - "gas": 917221, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 14730, - "op": "DUP5", - "gas": 917218, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 14731, - "op": "PUSH2", - "gas": 917215, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 14734, - "op": "JUMP", - "gas": 917212, - "gasCost": 8, - "depth": 2 - }, - { - "pc": 13684, - "op": "JUMPDEST", - "gas": 917204, - "gasCost": 1, - "depth": 2 - }, - { - "pc": 13685, - "op": "DUP1", - "gas": 917203, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 13686, - "op": "CALLDATALOAD", - "gas": 917200, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 13687, - "op": "PUSH1", - "gas": 917197, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 13689, - "op": "DUP2", - "gas": 917194, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 13690, - "op": "AND", - "gas": 917191, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 13691, - "op": "DUP2", - "gas": 917188, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 13692, - "op": "EQ", - "gas": 917185, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 13693, - "op": "PUSH2", - "gas": 917182, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 13696, - "op": "JUMPI", - "gas": 917179, - "gasCost": 10, - "depth": 2 - }, - { - "pc": 13701, - "op": "JUMPDEST", - "gas": 917169, - "gasCost": 1, - "depth": 2 - }, - { - "pc": 13702, - "op": "SWAP2", - "gas": 917168, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 13703, - "op": "SWAP1", - "gas": 917165, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 13704, - "op": "POP", - "gas": 917162, - "gasCost": 2, - "depth": 2 - }, - { - "pc": 13705, - "op": "JUMP", - "gas": 917160, - "gasCost": 8, - "depth": 2 - }, - { - "pc": 14735, - "op": "JUMPDEST", - "gas": 917152, - "gasCost": 1, - "depth": 2 - }, - { - "pc": 14736, - "op": "AND", - "gas": 917151, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 14737, - "op": "DUP9", - "gas": 917148, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 14738, - "op": "MSTORE", - "gas": 917145, - "gasCost": 6, - "depth": 2 - }, - { - "pc": 14739, - "op": "DUP1", - "gas": 917139, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 14740, - "op": "PUSH2", - "gas": 917136, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 14743, - "op": "DUP6", - "gas": 917133, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 14744, - "op": "DUP6", - "gas": 917130, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 14745, - "op": "ADD", - "gas": 917127, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 14746, - "op": "PUSH2", - "gas": 917124, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 14749, - "op": "JUMP", - "gas": 917121, - "gasCost": 8, - "depth": 2 - }, - { - "pc": 13684, - "op": "JUMPDEST", - "gas": 917113, - "gasCost": 1, - "depth": 2 - }, - { - "pc": 13685, - "op": "DUP1", - "gas": 917112, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 13686, - "op": "CALLDATALOAD", - "gas": 917109, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 13687, - "op": "PUSH1", - "gas": 917106, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 13689, - "op": "DUP2", - "gas": 917103, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 13690, - "op": "AND", - "gas": 917100, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 13691, - "op": "DUP2", - "gas": 917097, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 13692, - "op": "EQ", - "gas": 917094, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 13693, - "op": "PUSH2", - "gas": 917091, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 13696, - "op": "JUMPI", - "gas": 917088, - "gasCost": 10, - "depth": 2 - }, - { - "pc": 13701, - "op": "JUMPDEST", - "gas": 917078, - "gasCost": 1, - "depth": 2 - }, - { - "pc": 13702, - "op": "SWAP2", - "gas": 917077, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 13703, - "op": "SWAP1", - "gas": 917074, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 13704, - "op": "POP", - "gas": 917071, - "gasCost": 2, - "depth": 2 - }, - { - "pc": 13705, - "op": "JUMP", - "gas": 917069, - "gasCost": 8, - "depth": 2 - }, - { - "pc": 14750, - "op": "JUMPDEST", - "gas": 917061, - "gasCost": 1, - "depth": 2 - }, - { - "pc": 14751, - "op": "AND", - "gas": 917060, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 14752, - "op": "DUP5", - "gas": 917057, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 14753, - "op": "DUP10", - "gas": 917054, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 14754, - "op": "ADD", - "gas": 917051, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 14755, - "op": "MSTORE", - "gas": 917048, - "gasCost": 6, - "depth": 2 - }, - { - "pc": 14756, - "op": "PUSH1", - "gas": 917042, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 14758, - "op": "DUP2", - "gas": 917039, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 14759, - "op": "PUSH2", - "gas": 917036, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 14762, - "op": "DUP3", - "gas": 917033, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 14763, - "op": "DUP7", - "gas": 917030, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 14764, - "op": "ADD", - "gas": 917027, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 14765, - "op": "PUSH2", - "gas": 917024, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 14768, - "op": "JUMP", - "gas": 917021, - "gasCost": 8, - "depth": 2 - }, - { - "pc": 13684, - "op": "JUMPDEST", - "gas": 917013, - "gasCost": 1, - "depth": 2 - }, - { - "pc": 13685, - "op": "DUP1", - "gas": 917012, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 13686, - "op": "CALLDATALOAD", - "gas": 917009, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 13687, - "op": "PUSH1", - "gas": 917006, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 13689, - "op": "DUP2", - "gas": 917003, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 13690, - "op": "AND", - "gas": 917000, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 13691, - "op": "DUP2", - "gas": 916997, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 13692, - "op": "EQ", - "gas": 916994, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 13693, - "op": "PUSH2", - "gas": 916991, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 13696, - "op": "JUMPI", - "gas": 916988, - "gasCost": 10, - "depth": 2 - }, - { - "pc": 13701, - "op": "JUMPDEST", - "gas": 916978, - "gasCost": 1, - "depth": 2 - }, - { - "pc": 13702, - "op": "SWAP2", - "gas": 916977, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 13703, - "op": "SWAP1", - "gas": 916974, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 13704, - "op": "POP", - "gas": 916971, - "gasCost": 2, - "depth": 2 - }, - { - "pc": 13705, - "op": "JUMP", - "gas": 916969, - "gasCost": 8, - "depth": 2 - }, - { - "pc": 14769, - "op": "JUMPDEST", - "gas": 916961, - "gasCost": 1, - "depth": 2 - }, - { - "pc": 14770, - "op": "AND", - "gas": 916960, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 14771, - "op": "SWAP1", - "gas": 916957, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 14772, - "op": "DUP10", - "gas": 916954, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 14773, - "op": "ADD", - "gas": 916951, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 14774, - "op": "MSTORE", - "gas": 916948, - "gasCost": 6, - "depth": 2 - }, - { - "pc": 14775, - "op": "POP", - "gas": 916942, - "gasCost": 2, - "depth": 2 - }, - { - "pc": 14776, - "op": "PUSH1", - "gas": 916940, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 14778, - "op": "PUSH4", - "gas": 916937, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 14783, - "op": "PUSH2", - "gas": 916934, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 14786, - "op": "DUP5", - "gas": 916931, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 14787, - "op": "DUP4", - "gas": 916928, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 14788, - "op": "ADD", - "gas": 916925, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 14789, - "op": "PUSH2", - "gas": 916922, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 14792, - "op": "JUMP", - "gas": 916919, - "gasCost": 8, - "depth": 2 - }, - { - "pc": 14679, - "op": "JUMPDEST", - "gas": 916911, - "gasCost": 1, - "depth": 2 - }, - { - "pc": 14680, - "op": "DUP1", - "gas": 916910, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 14681, - "op": "CALLDATALOAD", - "gas": 916907, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 14682, - "op": "PUSH4", - "gas": 916904, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 14687, - "op": "DUP2", - "gas": 916901, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 14688, - "op": "AND", - "gas": 916898, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 14689, - "op": "DUP2", - "gas": 916895, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 14690, - "op": "EQ", - "gas": 916892, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 14691, - "op": "PUSH2", - "gas": 916889, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 14694, - "op": "JUMPI", - "gas": 916886, - "gasCost": 10, - "depth": 2 - }, - { - "pc": 13701, - "op": "JUMPDEST", - "gas": 916876, - "gasCost": 1, - "depth": 2 - }, - { - "pc": 13702, - "op": "SWAP2", - "gas": 916875, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 13703, - "op": "SWAP1", - "gas": 916872, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 13704, - "op": "POP", - "gas": 916869, - "gasCost": 2, - "depth": 2 - }, - { - "pc": 13705, - "op": "JUMP", - "gas": 916867, - "gasCost": 8, - "depth": 2 - }, - { - "pc": 14793, - "op": "JUMPDEST", - "gas": 916859, - "gasCost": 1, - "depth": 2 - }, - { - "pc": 14794, - "op": "AND", - "gas": 916858, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 14795, - "op": "SWAP1", - "gas": 916855, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 14796, - "op": "DUP9", - "gas": 916852, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 14797, - "op": "ADD", - "gas": 916849, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 14798, - "op": "MSTORE", - "gas": 916846, - "gasCost": 6, - "depth": 2 - }, - { - "pc": 14799, - "op": "PUSH1", - "gas": 916840, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 14801, - "op": "SWAP7", - "gas": 916837, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 14802, - "op": "DUP8", - "gas": 916834, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 14803, - "op": "ADD", - "gas": 916831, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 14804, - "op": "SWAP7", - "gas": 916828, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 14805, - "op": "SWAP2", - "gas": 916825, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 14806, - "op": "SWAP1", - "gas": 916822, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 14807, - "op": "SWAP2", - "gas": 916819, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 14808, - "op": "ADD", - "gas": 916816, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 14809, - "op": "SWAP1", - "gas": 916813, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 14810, - "op": "PUSH1", - "gas": 916810, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 14812, - "op": "ADD", - "gas": 916807, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 14813, - "op": "PUSH2", - "gas": 916804, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 14816, - "op": "JUMP", - "gas": 916801, - "gasCost": 8, - "depth": 2 - }, - { - "pc": 14715, - "op": "JUMPDEST", - "gas": 916793, - "gasCost": 1, - "depth": 2 - }, - { - "pc": 14716, - "op": "DUP6", - "gas": 916792, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 14717, - "op": "DUP2", - "gas": 916789, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 14718, - "op": "LT", - "gas": 916786, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 14719, - "op": "ISZERO", - "gas": 916783, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 14720, - "op": "PUSH2", - "gas": 916780, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 14723, - "op": "JUMPI", - "gas": 916777, - "gasCost": 10, - "depth": 2 - }, - { - "pc": 14817, - "op": "JUMPDEST", - "gas": 916767, - "gasCost": 1, - "depth": 2 - }, - { - "pc": 14818, - "op": "POP", - "gas": 916766, - "gasCost": 2, - "depth": 2 - }, - { - "pc": 14819, - "op": "SWAP5", - "gas": 916764, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 14820, - "op": "SWAP6", - "gas": 916761, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 14821, - "op": "SWAP5", - "gas": 916758, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 14822, - "op": "POP", - "gas": 916755, - "gasCost": 2, - "depth": 2 - }, - { - "pc": 14823, - "op": "POP", - "gas": 916753, - "gasCost": 2, - "depth": 2 - }, - { - "pc": 14824, - "op": "POP", - "gas": 916751, - "gasCost": 2, - "depth": 2 - }, - { - "pc": 14825, - "op": "POP", - "gas": 916749, - "gasCost": 2, - "depth": 2 - }, - { - "pc": 14826, - "op": "POP", - "gas": 916747, - "gasCost": 2, - "depth": 2 - }, - { - "pc": 14827, - "op": "JUMP", - "gas": 916745, - "gasCost": 8, - "depth": 2 - }, - { - "pc": 15401, - "op": "JUMPDEST", - "gas": 916737, - "gasCost": 1, - "depth": 2 - }, - { - "pc": 15402, - "op": "SWAP2", - "gas": 916736, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 15403, - "op": "POP", - "gas": 916733, - "gasCost": 2, - "depth": 2 - }, - { - "pc": 15404, - "op": "POP", - "gas": 916731, - "gasCost": 2, - "depth": 2 - }, - { - "pc": 15405, - "op": "PUSH2", - "gas": 916729, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 15408, - "op": "PUSH1", - "gas": 916726, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 15410, - "op": "DUP5", - "gas": 916723, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 15411, - "op": "ADD", - "gas": 916720, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 15412, - "op": "DUP7", - "gas": 916717, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 15413, - "op": "PUSH1", - "gas": 916714, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 15415, - "op": "PUSH1", - "gas": 916711, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 15417, - "op": "PUSH1", - "gas": 916708, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 15419, - "op": "SHL", - "gas": 916705, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 15420, - "op": "SUB", - "gas": 916702, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 15421, - "op": "AND", - "gas": 916699, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 15422, - "op": "SWAP1", - "gas": 916696, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 15423, - "op": "MSTORE", - "gas": 916693, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 15424, - "op": "JUMP", - "gas": 916690, - "gasCost": 8, - "depth": 2 - }, - { - "pc": 15425, - "op": "JUMPDEST", - "gas": 916682, - "gasCost": 1, - "depth": 2 - }, - { - "pc": 15426, - "op": "DUP3", - "gas": 916681, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 15427, - "op": "DUP2", - "gas": 916678, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 15428, - "op": "SUB", - "gas": 916675, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 15429, - "op": "PUSH1", - "gas": 916672, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 15431, - "op": "DUP5", - "gas": 916669, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 15432, - "op": "ADD", - "gas": 916666, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 15433, - "op": "MSTORE", - "gas": 916663, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 15434, - "op": "PUSH2", - "gas": 916660, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 15437, - "op": "DUP2", - "gas": 916657, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 15438, - "op": "DUP6", - "gas": 916654, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 15439, - "op": "PUSH2", - "gas": 916651, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 15442, - "op": "JUMP", - "gas": 916648, - "gasCost": 8, - "depth": 2 - }, - { - "pc": 14938, - "op": "JUMPDEST", - "gas": 916640, - "gasCost": 1, - "depth": 2 - }, - { - "pc": 14939, - "op": "PUSH1", - "gas": 916639, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 14941, - "op": "PUSH4", - "gas": 916636, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 14946, - "op": "DUP1", - "gas": 916633, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 14947, - "op": "PUSH2", - "gas": 916630, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 14950, - "op": "DUP5", - "gas": 916627, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 14951, - "op": "PUSH2", - "gas": 916624, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 14954, - "op": "JUMP", - "gas": 916621, - "gasCost": 8, - "depth": 2 - }, - { - "pc": 14679, - "op": "JUMPDEST", - "gas": 916613, - "gasCost": 1, - "depth": 2 - }, - { - "pc": 14680, - "op": "DUP1", - "gas": 916612, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 14681, - "op": "CALLDATALOAD", - "gas": 916609, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 14682, - "op": "PUSH4", - "gas": 916606, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 14687, - "op": "DUP2", - "gas": 916603, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 14688, - "op": "AND", - "gas": 916600, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 14689, - "op": "DUP2", - "gas": 916597, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 14690, - "op": "EQ", - "gas": 916594, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 14691, - "op": "PUSH2", - "gas": 916591, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 14694, - "op": "JUMPI", - "gas": 916588, - "gasCost": 10, - "depth": 2 - }, - { - "pc": 13701, - "op": "JUMPDEST", - "gas": 916578, - "gasCost": 1, - "depth": 2 - }, - { - "pc": 13702, - "op": "SWAP2", - "gas": 916577, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 13703, - "op": "SWAP1", - "gas": 916574, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 13704, - "op": "POP", - "gas": 916571, - "gasCost": 2, - "depth": 2 - }, - { - "pc": 13705, - "op": "JUMP", - "gas": 916569, - "gasCost": 8, - "depth": 2 - }, - { - "pc": 14955, - "op": "JUMPDEST", - "gas": 916561, - "gasCost": 1, - "depth": 2 - }, - { - "pc": 14956, - "op": "AND", - "gas": 916560, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 14957, - "op": "DUP5", - "gas": 916557, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 14958, - "op": "MSTORE", - "gas": 916554, - "gasCost": 6, - "depth": 2 - }, - { - "pc": 14959, - "op": "DUP1", - "gas": 916548, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 14960, - "op": "PUSH2", - "gas": 916545, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 14963, - "op": "PUSH1", - "gas": 916542, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 14965, - "op": "DUP6", - "gas": 916539, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 14966, - "op": "ADD", - "gas": 916536, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 14967, - "op": "PUSH2", - "gas": 916533, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 14970, - "op": "JUMP", - "gas": 916530, - "gasCost": 8, - "depth": 2 - }, - { - "pc": 14679, - "op": "JUMPDEST", - "gas": 916522, - "gasCost": 1, - "depth": 2 - }, - { - "pc": 14680, - "op": "DUP1", - "gas": 916521, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 14681, - "op": "CALLDATALOAD", - "gas": 916518, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 14682, - "op": "PUSH4", - "gas": 916515, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 14687, - "op": "DUP2", - "gas": 916512, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 14688, - "op": "AND", - "gas": 916509, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 14689, - "op": "DUP2", - "gas": 916506, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 14690, - "op": "EQ", - "gas": 916503, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 14691, - "op": "PUSH2", - "gas": 916500, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 14694, - "op": "JUMPI", - "gas": 916497, - "gasCost": 10, - "depth": 2 - }, - { - "pc": 13701, - "op": "JUMPDEST", - "gas": 916487, - "gasCost": 1, - "depth": 2 - }, - { - "pc": 13702, - "op": "SWAP2", - "gas": 916486, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 13703, - "op": "SWAP1", - "gas": 916483, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 13704, - "op": "POP", - "gas": 916480, - "gasCost": 2, - "depth": 2 - }, - { - "pc": 13705, - "op": "JUMP", - "gas": 916478, - "gasCost": 8, - "depth": 2 - }, - { - "pc": 14971, - "op": "JUMPDEST", - "gas": 916470, - "gasCost": 1, - "depth": 2 - }, - { - "pc": 14972, - "op": "AND", - "gas": 916469, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 14973, - "op": "PUSH1", - "gas": 916466, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 14975, - "op": "DUP6", - "gas": 916463, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 14976, - "op": "ADD", - "gas": 916460, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 14977, - "op": "MSTORE", - "gas": 916457, - "gasCost": 6, - "depth": 2 - }, - { - "pc": 14978, - "op": "PUSH1", - "gas": 916451, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 14980, - "op": "DUP4", - "gas": 916448, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 14981, - "op": "ADD", - "gas": 916445, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 14982, - "op": "CALLDATALOAD", - "gas": 916442, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 14983, - "op": "PUSH1", - "gas": 916439, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 14985, - "op": "NOT", - "gas": 916436, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 14986, - "op": "DUP5", - "gas": 916433, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 14987, - "op": "CALLDATASIZE", - "gas": 916430, - "gasCost": 2, - "depth": 2 - }, - { - "pc": 14988, - "op": "SUB", - "gas": 916428, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 14989, - "op": "ADD", - "gas": 916425, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 14990, - "op": "DUP2", - "gas": 916422, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 14991, - "op": "SLT", - "gas": 916419, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 14992, - "op": "PUSH2", - "gas": 916416, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 14995, - "op": "JUMPI", - "gas": 916413, - "gasCost": 10, - "depth": 2 - }, - { - "pc": 15000, - "op": "JUMPDEST", - "gas": 916403, - "gasCost": 1, - "depth": 2 - }, - { - "pc": 15001, - "op": "PUSH1", - "gas": 916402, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 15003, - "op": "PUSH1", - "gas": 916399, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 15005, - "op": "DUP7", - "gas": 916396, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 15006, - "op": "ADD", - "gas": 916393, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 15007, - "op": "MSTORE", - "gas": 916390, - "gasCost": 6, - "depth": 2 - }, - { - "pc": 15008, - "op": "DUP4", - "gas": 916384, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 15009, - "op": "ADD", - "gas": 916381, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 15010, - "op": "DUP1", - "gas": 916378, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 15011, - "op": "CALLDATALOAD", - "gas": 916375, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 15012, - "op": "CALLDATASIZE", - "gas": 916372, - "gasCost": 2, - "depth": 2 - }, - { - "pc": 15013, - "op": "DUP3", - "gas": 916370, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 15014, - "op": "SWAP1", - "gas": 916367, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 15015, - "op": "SUB", - "gas": 916364, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 15016, - "op": "PUSH1", - "gas": 916361, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 15018, - "op": "NOT", - "gas": 916358, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 15019, - "op": "ADD", - "gas": 916355, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 15020, - "op": "DUP2", - "gas": 916352, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 15021, - "op": "SLT", - "gas": 916349, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 15022, - "op": "PUSH2", - "gas": 916346, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 15025, - "op": "JUMPI", - "gas": 916343, - "gasCost": 10, - "depth": 2 - }, - { - "pc": 15030, - "op": "JUMPDEST", - "gas": 916333, - "gasCost": 1, - "depth": 2 - }, - { - "pc": 15031, - "op": "PUSH1", - "gas": 916332, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 15033, - "op": "PUSH1", - "gas": 916329, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 15035, - "op": "DUP8", - "gas": 916326, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 15036, - "op": "ADD", - "gas": 916323, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 15037, - "op": "MSTORE", - "gas": 916320, - "gasCost": 13, - "depth": 2 - }, - { - "pc": 15038, - "op": "DUP2", - "gas": 916307, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 15039, - "op": "ADD", - "gas": 916304, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 15040, - "op": "DUP1", - "gas": 916301, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 15041, - "op": "CALLDATALOAD", - "gas": 916298, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 15042, - "op": "PUSH2", - "gas": 916295, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 15045, - "op": "DUP8", - "gas": 916292, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 15046, - "op": "ADD", - "gas": 916289, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 15047, - "op": "MSTORE", - "gas": 916286, - "gasCost": 12, - "depth": 2 - }, - { - "pc": 15048, - "op": "PUSH2", - "gas": 916274, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 15051, - "op": "PUSH1", - "gas": 916271, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 15053, - "op": "DUP3", - "gas": 916268, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 15054, - "op": "ADD", - "gas": 916265, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 15055, - "op": "DUP3", - "gas": 916262, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 15056, - "op": "PUSH2", - "gas": 916259, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 15059, - "op": "JUMP", - "gas": 916256, - "gasCost": 8, - "depth": 2 - }, - { - "pc": 14828, - "op": "JUMPDEST", - "gas": 916248, - "gasCost": 1, - "depth": 2 - }, - { - "pc": 14829, - "op": "PUSH1", - "gas": 916247, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 14831, - "op": "DUP1", - "gas": 916244, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 14832, - "op": "DUP4", - "gas": 916241, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 14833, - "op": "CALLDATALOAD", - "gas": 916238, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 14834, - "op": "PUSH1", - "gas": 916235, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 14836, - "op": "NOT", - "gas": 916232, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 14837, - "op": "DUP5", - "gas": 916229, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 14838, - "op": "CALLDATASIZE", - "gas": 916226, - "gasCost": 2, - "depth": 2 - }, - { - "pc": 14839, - "op": "SUB", - "gas": 916224, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 14840, - "op": "ADD", - "gas": 916221, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 14841, - "op": "DUP2", - "gas": 916218, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 14842, - "op": "SLT", - "gas": 916215, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 14843, - "op": "PUSH2", - "gas": 916212, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 14846, - "op": "JUMPI", - "gas": 916209, - "gasCost": 10, - "depth": 2 - }, - { - "pc": 14851, - "op": "JUMPDEST", - "gas": 916199, - "gasCost": 1, - "depth": 2 - }, - { - "pc": 14852, - "op": "DUP4", - "gas": 916198, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 14853, - "op": "ADD", - "gas": 916195, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 14854, - "op": "PUSH1", - "gas": 916192, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 14856, - "op": "DUP2", - "gas": 916189, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 14857, - "op": "ADD", - "gas": 916186, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 14858, - "op": "SWAP3", - "gas": 916183, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 14859, - "op": "POP", - "gas": 916180, - "gasCost": 2, - "depth": 2 - }, - { - "pc": 14860, - "op": "CALLDATALOAD", - "gas": 916178, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 14861, - "op": "SWAP1", - "gas": 916175, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 14862, - "op": "POP", - "gas": 916172, - "gasCost": 2, - "depth": 2 - }, - { - "pc": 14863, - "op": "PUSH1", - "gas": 916170, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 14865, - "op": "PUSH1", - "gas": 916167, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 14867, - "op": "PUSH1", - "gas": 916164, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 14869, - "op": "SHL", - "gas": 916161, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 14870, - "op": "SUB", - "gas": 916158, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 14871, - "op": "DUP2", - "gas": 916155, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 14872, - "op": "GT", - "gas": 916152, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 14873, - "op": "ISZERO", - "gas": 916149, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 14874, - "op": "PUSH2", - "gas": 916146, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 14877, - "op": "JUMPI", - "gas": 916143, - "gasCost": 10, - "depth": 2 - }, - { - "pc": 14882, - "op": "JUMPDEST", - "gas": 916133, - "gasCost": 1, - "depth": 2 - }, - { - "pc": 14883, - "op": "DUP1", - "gas": 916132, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 14884, - "op": "CALLDATASIZE", - "gas": 916129, - "gasCost": 2, - "depth": 2 - }, - { - "pc": 14885, - "op": "SUB", - "gas": 916127, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 14886, - "op": "DUP4", - "gas": 916124, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 14887, - "op": "SGT", - "gas": 916121, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 14888, - "op": "ISZERO", - "gas": 916118, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 14889, - "op": "PUSH2", - "gas": 916115, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 14892, - "op": "JUMPI", - "gas": 916112, - "gasCost": 10, - "depth": 2 - }, - { - "pc": 13083, - "op": "JUMPDEST", - "gas": 916102, - "gasCost": 1, - "depth": 2 - }, - { - "pc": 13084, - "op": "SWAP3", - "gas": 916101, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 13085, - "op": "POP", - "gas": 916098, - "gasCost": 2, - "depth": 2 - }, - { - "pc": 13086, - "op": "SWAP3", - "gas": 916096, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 13087, - "op": "SWAP1", - "gas": 916093, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 13088, - "op": "POP", - "gas": 916090, - "gasCost": 2, - "depth": 2 - }, - { - "pc": 13089, - "op": "JUMP", - "gas": 916088, - "gasCost": 8, - "depth": 2 - }, - { - "pc": 15060, - "op": "JUMPDEST", - "gas": 916080, - "gasCost": 1, - "depth": 2 - }, - { - "pc": 15061, - "op": "PUSH1", - "gas": 916079, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 15063, - "op": "PUSH2", - "gas": 916076, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 15066, - "op": "DUP10", - "gas": 916073, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 15067, - "op": "ADD", - "gas": 916070, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 15068, - "op": "MSTORE", - "gas": 916067, - "gasCost": 6, - "depth": 2 - }, - { - "pc": 15069, - "op": "PUSH2", - "gas": 916061, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 15072, - "op": "PUSH2", - "gas": 916058, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 15075, - "op": "DUP10", - "gas": 916055, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 15076, - "op": "ADD", - "gas": 916052, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 15077, - "op": "DUP3", - "gas": 916049, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 15078, - "op": "DUP5", - "gas": 916046, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 15079, - "op": "PUSH2", - "gas": 916043, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 15082, - "op": "JUMP", - "gas": 916040, - "gasCost": 8, - "depth": 2 - }, - { - "pc": 14897, - "op": "JUMPDEST", - "gas": 916032, - "gasCost": 1, - "depth": 2 - }, - { - "pc": 14898, - "op": "DUP2", - "gas": 916031, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 14899, - "op": "DUP4", - "gas": 916028, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 14900, - "op": "MSTORE", - "gas": 916025, - "gasCost": 12, - "depth": 2 - }, - { - "pc": 14901, - "op": "DUP2", - "gas": 916013, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 14902, - "op": "DUP2", - "gas": 916010, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 14903, - "op": "PUSH1", - "gas": 916007, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 14905, - "op": "DUP6", - "gas": 916004, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 14906, - "op": "ADD", - "gas": 916001, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 14907, - "op": "CALLDATACOPY", - "gas": 915998, - "gasCost": 6, - "depth": 2 - }, - { - "pc": 14908, - "op": "POP", - "gas": 915992, - "gasCost": 2, - "depth": 2 - }, - { - "pc": 14909, - "op": "PUSH1", - "gas": 915990, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 14911, - "op": "DUP3", - "gas": 915987, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 14912, - "op": "DUP3", - "gas": 915984, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 14913, - "op": "ADD", - "gas": 915981, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 14914, - "op": "PUSH1", - "gas": 915978, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 14916, - "op": "SWAP1", - "gas": 915975, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 14917, - "op": "DUP2", - "gas": 915972, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 14918, - "op": "ADD", - "gas": 915969, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 14919, - "op": "SWAP2", - "gas": 915966, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 14920, - "op": "SWAP1", - "gas": 915963, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 14921, - "op": "SWAP2", - "gas": 915960, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 14922, - "op": "MSTORE", - "gas": 915957, - "gasCost": 6, - "depth": 2 - }, - { - "pc": 14923, - "op": "PUSH1", - "gas": 915951, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 14925, - "op": "SWAP1", - "gas": 915948, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 14926, - "op": "SWAP2", - "gas": 915945, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 14927, - "op": "ADD", - "gas": 915942, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 14928, - "op": "PUSH1", - "gas": 915939, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 14930, - "op": "NOT", - "gas": 915936, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 14931, - "op": "AND", - "gas": 915933, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 14932, - "op": "SWAP1", - "gas": 915930, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 14933, - "op": "SWAP2", - "gas": 915927, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 14934, - "op": "ADD", - "gas": 915924, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 14935, - "op": "ADD", - "gas": 915921, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 14936, - "op": "SWAP1", - "gas": 915918, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 14937, - "op": "JUMP", - "gas": 915915, - "gasCost": 8, - "depth": 2 - }, - { - "pc": 15083, - "op": "JUMPDEST", - "gas": 915907, - "gasCost": 1, - "depth": 2 - }, - { - "pc": 15084, - "op": "SWAP2", - "gas": 915906, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 15085, - "op": "POP", - "gas": 915903, - "gasCost": 2, - "depth": 2 - }, - { - "pc": 15086, - "op": "POP", - "gas": 915901, - "gasCost": 2, - "depth": 2 - }, - { - "pc": 15087, - "op": "PUSH2", - "gas": 915899, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 15090, - "op": "PUSH1", - "gas": 915896, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 15092, - "op": "DUP4", - "gas": 915893, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 15093, - "op": "ADD", - "gas": 915890, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 15094, - "op": "DUP4", - "gas": 915887, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 15095, - "op": "PUSH2", - "gas": 915884, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 15098, - "op": "JUMP", - "gas": 915881, - "gasCost": 8, - "depth": 2 - }, - { - "pc": 14828, - "op": "JUMPDEST", - "gas": 915873, - "gasCost": 1, - "depth": 2 - }, - { - "pc": 14829, - "op": "PUSH1", - "gas": 915872, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 14831, - "op": "DUP1", - "gas": 915869, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 14832, - "op": "DUP4", - "gas": 915866, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 14833, - "op": "CALLDATALOAD", - "gas": 915863, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 14834, - "op": "PUSH1", - "gas": 915860, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 14836, - "op": "NOT", - "gas": 915857, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 14837, - "op": "DUP5", - "gas": 915854, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 14838, - "op": "CALLDATASIZE", - "gas": 915851, - "gasCost": 2, - "depth": 2 - }, - { - "pc": 14839, - "op": "SUB", - "gas": 915849, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 14840, - "op": "ADD", - "gas": 915846, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 14841, - "op": "DUP2", - "gas": 915843, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 14842, - "op": "SLT", - "gas": 915840, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 14843, - "op": "PUSH2", - "gas": 915837, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 14846, - "op": "JUMPI", - "gas": 915834, - "gasCost": 10, - "depth": 2 - }, - { - "pc": 14851, - "op": "JUMPDEST", - "gas": 915824, - "gasCost": 1, - "depth": 2 - }, - { - "pc": 14852, - "op": "DUP4", - "gas": 915823, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 14853, - "op": "ADD", - "gas": 915820, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 14854, - "op": "PUSH1", - "gas": 915817, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 14856, - "op": "DUP2", - "gas": 915814, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 14857, - "op": "ADD", - "gas": 915811, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 14858, - "op": "SWAP3", - "gas": 915808, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 14859, - "op": "POP", - "gas": 915805, - "gasCost": 2, - "depth": 2 - }, - { - "pc": 14860, - "op": "CALLDATALOAD", - "gas": 915803, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 14861, - "op": "SWAP1", - "gas": 915800, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 14862, - "op": "POP", - "gas": 915797, - "gasCost": 2, - "depth": 2 - }, - { - "pc": 14863, - "op": "PUSH1", - "gas": 915795, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 14865, - "op": "PUSH1", - "gas": 915792, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 14867, - "op": "PUSH1", - "gas": 915789, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 14869, - "op": "SHL", - "gas": 915786, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 14870, - "op": "SUB", - "gas": 915783, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 14871, - "op": "DUP2", - "gas": 915780, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 14872, - "op": "GT", - "gas": 915777, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 14873, - "op": "ISZERO", - "gas": 915774, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 14874, - "op": "PUSH2", - "gas": 915771, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 14877, - "op": "JUMPI", - "gas": 915768, - "gasCost": 10, - "depth": 2 - }, - { - "pc": 14882, - "op": "JUMPDEST", - "gas": 915758, - "gasCost": 1, - "depth": 2 - }, - { - "pc": 14883, - "op": "DUP1", - "gas": 915757, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 14884, - "op": "CALLDATASIZE", - "gas": 915754, - "gasCost": 2, - "depth": 2 - }, - { - "pc": 14885, - "op": "SUB", - "gas": 915752, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 14886, - "op": "DUP4", - "gas": 915749, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 14887, - "op": "SGT", - "gas": 915746, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 14888, - "op": "ISZERO", - "gas": 915743, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 14889, - "op": "PUSH2", - "gas": 915740, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 14892, - "op": "JUMPI", - "gas": 915737, - "gasCost": 10, - "depth": 2 - }, - { - "pc": 13083, - "op": "JUMPDEST", - "gas": 915727, - "gasCost": 1, - "depth": 2 - }, - { - "pc": 13084, - "op": "SWAP3", - "gas": 915726, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 13085, - "op": "POP", - "gas": 915723, - "gasCost": 2, - "depth": 2 - }, - { - "pc": 13086, - "op": "SWAP3", - "gas": 915721, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 13087, - "op": "SWAP1", - "gas": 915718, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 13088, - "op": "POP", - "gas": 915715, - "gasCost": 2, - "depth": 2 - }, - { - "pc": 13089, - "op": "JUMP", - "gas": 915713, - "gasCost": 8, - "depth": 2 - }, - { - "pc": 15099, - "op": "JUMPDEST", - "gas": 915705, - "gasCost": 1, - "depth": 2 - }, - { - "pc": 15100, - "op": "DUP9", - "gas": 915704, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 15101, - "op": "DUP4", - "gas": 915701, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 15102, - "op": "SUB", - "gas": 915698, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 15103, - "op": "PUSH1", - "gas": 915695, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 15105, - "op": "NOT", - "gas": 915692, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 15106, - "op": "ADD", - "gas": 915689, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 15107, - "op": "PUSH2", - "gas": 915686, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 15110, - "op": "DUP11", - "gas": 915683, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 15111, - "op": "ADD", - "gas": 915680, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 15112, - "op": "MSTORE", - "gas": 915677, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 15113, - "op": "PUSH2", - "gas": 915674, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 15116, - "op": "DUP4", - "gas": 915671, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 15117, - "op": "DUP3", - "gas": 915668, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 15118, - "op": "DUP5", - "gas": 915665, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 15119, - "op": "PUSH2", - "gas": 915662, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 15122, - "op": "JUMP", - "gas": 915659, - "gasCost": 8, - "depth": 2 - }, - { - "pc": 14897, - "op": "JUMPDEST", - "gas": 915651, - "gasCost": 1, - "depth": 2 - }, - { - "pc": 14898, - "op": "DUP2", - "gas": 915650, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 14899, - "op": "DUP4", - "gas": 915647, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 14900, - "op": "MSTORE", - "gas": 915644, - "gasCost": 7, - "depth": 2 - }, - { - "pc": 14901, - "op": "DUP2", - "gas": 915637, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 14902, - "op": "DUP2", - "gas": 915634, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 14903, - "op": "PUSH1", - "gas": 915631, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 14905, - "op": "DUP6", - "gas": 915628, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 14906, - "op": "ADD", - "gas": 915625, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 14907, - "op": "CALLDATACOPY", - "gas": 915622, - "gasCost": 6, - "depth": 2 - }, - { - "pc": 14908, - "op": "POP", - "gas": 915616, - "gasCost": 2, - "depth": 2 - }, - { - "pc": 14909, - "op": "PUSH1", - "gas": 915614, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 14911, - "op": "DUP3", - "gas": 915611, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 14912, - "op": "DUP3", - "gas": 915608, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 14913, - "op": "ADD", - "gas": 915605, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 14914, - "op": "PUSH1", - "gas": 915602, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 14916, - "op": "SWAP1", - "gas": 915599, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 14917, - "op": "DUP2", - "gas": 915596, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 14918, - "op": "ADD", - "gas": 915593, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 14919, - "op": "SWAP2", - "gas": 915590, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 14920, - "op": "SWAP1", - "gas": 915587, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 14921, - "op": "SWAP2", - "gas": 915584, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 14922, - "op": "MSTORE", - "gas": 915581, - "gasCost": 6, - "depth": 2 - }, - { - "pc": 14923, - "op": "PUSH1", - "gas": 915575, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 14925, - "op": "SWAP1", - "gas": 915572, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 14926, - "op": "SWAP2", - "gas": 915569, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 14927, - "op": "ADD", - "gas": 915566, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 14928, - "op": "PUSH1", - "gas": 915563, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 14930, - "op": "NOT", - "gas": 915560, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 14931, - "op": "AND", - "gas": 915557, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 14932, - "op": "SWAP1", - "gas": 915554, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 14933, - "op": "SWAP2", - "gas": 915551, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 14934, - "op": "ADD", - "gas": 915548, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 14935, - "op": "ADD", - "gas": 915545, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 14936, - "op": "SWAP1", - "gas": 915542, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 14937, - "op": "JUMP", - "gas": 915539, - "gasCost": 8, - "depth": 2 - }, - { - "pc": 15123, - "op": "JUMPDEST", - "gas": 915531, - "gasCost": 1, - "depth": 2 - }, - { - "pc": 15124, - "op": "SWAP3", - "gas": 915530, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 15125, - "op": "POP", - "gas": 915527, - "gasCost": 2, - "depth": 2 - }, - { - "pc": 15126, - "op": "POP", - "gas": 915525, - "gasCost": 2, - "depth": 2 - }, - { - "pc": 15127, - "op": "POP", - "gas": 915523, - "gasCost": 2, - "depth": 2 - }, - { - "pc": 15128, - "op": "DUP4", - "gas": 915521, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 15129, - "op": "PUSH2", - "gas": 915518, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 15132, - "op": "PUSH1", - "gas": 915515, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 15134, - "op": "DUP5", - "gas": 915512, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 15135, - "op": "ADD", - "gas": 915509, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 15136, - "op": "PUSH2", - "gas": 915506, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 15139, - "op": "JUMP", - "gas": 915503, - "gasCost": 8, - "depth": 2 - }, - { - "pc": 14679, - "op": "JUMPDEST", - "gas": 915495, - "gasCost": 1, - "depth": 2 - }, - { - "pc": 14680, - "op": "DUP1", - "gas": 915494, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 14681, - "op": "CALLDATALOAD", - "gas": 915491, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 14682, - "op": "PUSH4", - "gas": 915488, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 14687, - "op": "DUP2", - "gas": 915485, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 14688, - "op": "AND", - "gas": 915482, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 14689, - "op": "DUP2", - "gas": 915479, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 14690, - "op": "EQ", - "gas": 915476, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 14691, - "op": "PUSH2", - "gas": 915473, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 14694, - "op": "JUMPI", - "gas": 915470, - "gasCost": 10, - "depth": 2 - }, - { - "pc": 13701, - "op": "JUMPDEST", - "gas": 915460, - "gasCost": 1, - "depth": 2 - }, - { - "pc": 13702, - "op": "SWAP2", - "gas": 915459, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 13703, - "op": "SWAP1", - "gas": 915456, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 13704, - "op": "POP", - "gas": 915453, - "gasCost": 2, - "depth": 2 - }, - { - "pc": 13705, - "op": "JUMP", - "gas": 915451, - "gasCost": 8, - "depth": 2 - }, - { - "pc": 15140, - "op": "JUMPDEST", - "gas": 915443, - "gasCost": 1, - "depth": 2 - }, - { - "pc": 15141, - "op": "AND", - "gas": 915442, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 15142, - "op": "PUSH2", - "gas": 915439, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 15145, - "op": "DUP9", - "gas": 915436, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 15146, - "op": "ADD", - "gas": 915433, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 15147, - "op": "MSTORE", - "gas": 915430, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 15148, - "op": "PUSH1", - "gas": 915427, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 15150, - "op": "DUP4", - "gas": 915424, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 15151, - "op": "ADD", - "gas": 915421, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 15152, - "op": "CALLDATALOAD", - "gas": 915418, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 15153, - "op": "PUSH1", - "gas": 915415, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 15155, - "op": "DUP9", - "gas": 915412, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 15156, - "op": "ADD", - "gas": 915409, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 15157, - "op": "MSTORE", - "gas": 915406, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 15158, - "op": "PUSH2", - "gas": 915403, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 15161, - "op": "PUSH1", - "gas": 915400, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 15163, - "op": "DUP5", - "gas": 915397, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 15164, - "op": "ADD", - "gas": 915394, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 15165, - "op": "PUSH2", - "gas": 915391, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 15168, - "op": "JUMP", - "gas": 915388, - "gasCost": 8, - "depth": 2 - }, - { - "pc": 14679, - "op": "JUMPDEST", - "gas": 915380, - "gasCost": 1, - "depth": 2 - }, - { - "pc": 14680, - "op": "DUP1", - "gas": 915379, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 14681, - "op": "CALLDATALOAD", - "gas": 915376, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 14682, - "op": "PUSH4", - "gas": 915373, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 14687, - "op": "DUP2", - "gas": 915370, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 14688, - "op": "AND", - "gas": 915367, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 14689, - "op": "DUP2", - "gas": 915364, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 14690, - "op": "EQ", - "gas": 915361, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 14691, - "op": "PUSH2", - "gas": 915358, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 14694, - "op": "JUMPI", - "gas": 915355, - "gasCost": 10, - "depth": 2 - }, - { - "pc": 13701, - "op": "JUMPDEST", - "gas": 915345, - "gasCost": 1, - "depth": 2 - }, - { - "pc": 13702, - "op": "SWAP2", - "gas": 915344, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 13703, - "op": "SWAP1", - "gas": 915341, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 13704, - "op": "POP", - "gas": 915338, - "gasCost": 2, - "depth": 2 - }, - { - "pc": 13705, - "op": "JUMP", - "gas": 915336, - "gasCost": 8, - "depth": 2 - }, - { - "pc": 15169, - "op": "JUMPDEST", - "gas": 915328, - "gasCost": 1, - "depth": 2 - }, - { - "pc": 15170, - "op": "PUSH4", - "gas": 915327, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 15175, - "op": "DUP2", - "gas": 915324, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 15176, - "op": "AND", - "gas": 915321, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 15177, - "op": "PUSH1", - "gas": 915318, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 15179, - "op": "DUP10", - "gas": 915315, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 15180, - "op": "ADD", - "gas": 915312, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 15181, - "op": "MSTORE", - "gas": 915309, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 15182, - "op": "SWAP4", - "gas": 915306, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 15183, - "op": "POP", - "gas": 915303, - "gasCost": 2, - "depth": 2 - }, - { - "pc": 15184, - "op": "PUSH2", - "gas": 915301, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 15187, - "op": "PUSH1", - "gas": 915298, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 15189, - "op": "DUP8", - "gas": 915295, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 15190, - "op": "ADD", - "gas": 915292, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 15191, - "op": "DUP8", - "gas": 915289, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 15192, - "op": "PUSH2", - "gas": 915286, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 15195, - "op": "JUMP", - "gas": 915283, - "gasCost": 8, - "depth": 2 - }, - { - "pc": 14828, - "op": "JUMPDEST", - "gas": 915275, - "gasCost": 1, - "depth": 2 - }, - { - "pc": 14829, - "op": "PUSH1", - "gas": 915274, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 14831, - "op": "DUP1", - "gas": 915271, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 14832, - "op": "DUP4", - "gas": 915268, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 14833, - "op": "CALLDATALOAD", - "gas": 915265, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 14834, - "op": "PUSH1", - "gas": 915262, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 14836, - "op": "NOT", - "gas": 915259, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 14837, - "op": "DUP5", - "gas": 915256, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 14838, - "op": "CALLDATASIZE", - "gas": 915253, - "gasCost": 2, - "depth": 2 - }, - { - "pc": 14839, - "op": "SUB", - "gas": 915251, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 14840, - "op": "ADD", - "gas": 915248, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 14841, - "op": "DUP2", - "gas": 915245, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 14842, - "op": "SLT", - "gas": 915242, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 14843, - "op": "PUSH2", - "gas": 915239, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 14846, - "op": "JUMPI", - "gas": 915236, - "gasCost": 10, - "depth": 2 - }, - { - "pc": 14851, - "op": "JUMPDEST", - "gas": 915226, - "gasCost": 1, - "depth": 2 - }, - { - "pc": 14852, - "op": "DUP4", - "gas": 915225, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 14853, - "op": "ADD", - "gas": 915222, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 14854, - "op": "PUSH1", - "gas": 915219, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 14856, - "op": "DUP2", - "gas": 915216, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 14857, - "op": "ADD", - "gas": 915213, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 14858, - "op": "SWAP3", - "gas": 915210, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 14859, - "op": "POP", - "gas": 915207, - "gasCost": 2, - "depth": 2 - }, - { - "pc": 14860, - "op": "CALLDATALOAD", - "gas": 915205, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 14861, - "op": "SWAP1", - "gas": 915202, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 14862, - "op": "POP", - "gas": 915199, - "gasCost": 2, - "depth": 2 - }, - { - "pc": 14863, - "op": "PUSH1", - "gas": 915197, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 14865, - "op": "PUSH1", - "gas": 915194, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 14867, - "op": "PUSH1", - "gas": 915191, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 14869, - "op": "SHL", - "gas": 915188, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 14870, - "op": "SUB", - "gas": 915185, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 14871, - "op": "DUP2", - "gas": 915182, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 14872, - "op": "GT", - "gas": 915179, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 14873, - "op": "ISZERO", - "gas": 915176, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 14874, - "op": "PUSH2", - "gas": 915173, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 14877, - "op": "JUMPI", - "gas": 915170, - "gasCost": 10, - "depth": 2 - }, - { - "pc": 14882, - "op": "JUMPDEST", - "gas": 915160, - "gasCost": 1, - "depth": 2 - }, - { - "pc": 14883, - "op": "DUP1", - "gas": 915159, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 14884, - "op": "CALLDATASIZE", - "gas": 915156, - "gasCost": 2, - "depth": 2 - }, - { - "pc": 14885, - "op": "SUB", - "gas": 915154, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 14886, - "op": "DUP4", - "gas": 915151, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 14887, - "op": "SGT", - "gas": 915148, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 14888, - "op": "ISZERO", - "gas": 915145, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 14889, - "op": "PUSH2", - "gas": 915142, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 14892, - "op": "JUMPI", - "gas": 915139, - "gasCost": 10, - "depth": 2 - }, - { - "pc": 13083, - "op": "JUMPDEST", - "gas": 915129, - "gasCost": 1, - "depth": 2 - }, - { - "pc": 13084, - "op": "SWAP3", - "gas": 915128, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 13085, - "op": "POP", - "gas": 915125, - "gasCost": 2, - "depth": 2 - }, - { - "pc": 13086, - "op": "SWAP3", - "gas": 915123, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 13087, - "op": "SWAP1", - "gas": 915120, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 13088, - "op": "POP", - "gas": 915117, - "gasCost": 2, - "depth": 2 - }, - { - "pc": 13089, - "op": "JUMP", - "gas": 915115, - "gasCost": 8, - "depth": 2 - }, - { - "pc": 15196, - "op": "JUMPDEST", - "gas": 915107, - "gasCost": 1, - "depth": 2 - }, - { - "pc": 15197, - "op": "SWAP5", - "gas": 915106, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 15198, - "op": "POP", - "gas": 915103, - "gasCost": 2, - "depth": 2 - }, - { - "pc": 15199, - "op": "SWAP3", - "gas": 915101, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 15200, - "op": "POP", - "gas": 915098, - "gasCost": 2, - "depth": 2 - }, - { - "pc": 15201, - "op": "DUP7", - "gas": 915096, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 15202, - "op": "DUP2", - "gas": 915093, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 15203, - "op": "SUB", - "gas": 915090, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 15204, - "op": "PUSH1", - "gas": 915087, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 15206, - "op": "DUP9", - "gas": 915084, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 15207, - "op": "ADD", - "gas": 915081, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 15208, - "op": "MSTORE", - "gas": 915078, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 15209, - "op": "PUSH2", - "gas": 915075, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 15212, - "op": "DUP2", - "gas": 915072, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 15213, - "op": "DUP6", - "gas": 915069, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 15214, - "op": "DUP6", - "gas": 915066, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 15215, - "op": "PUSH2", - "gas": 915063, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 15218, - "op": "JUMP", - "gas": 915060, - "gasCost": 8, - "depth": 2 - }, - { - "pc": 14897, - "op": "JUMPDEST", - "gas": 915052, - "gasCost": 1, - "depth": 2 - }, - { - "pc": 14898, - "op": "DUP2", - "gas": 915051, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 14899, - "op": "DUP4", - "gas": 915048, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 14900, - "op": "MSTORE", - "gas": 915045, - "gasCost": 6, - "depth": 2 - }, - { - "pc": 14901, - "op": "DUP2", - "gas": 915039, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 14902, - "op": "DUP2", - "gas": 915036, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 14903, - "op": "PUSH1", - "gas": 915033, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 14905, - "op": "DUP6", - "gas": 915030, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 14906, - "op": "ADD", - "gas": 915027, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 14907, - "op": "CALLDATACOPY", - "gas": 915024, - "gasCost": 6, - "depth": 2 - }, - { - "pc": 14908, - "op": "POP", - "gas": 915018, - "gasCost": 2, - "depth": 2 - }, - { - "pc": 14909, - "op": "PUSH1", - "gas": 915016, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 14911, - "op": "DUP3", - "gas": 915013, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 14912, - "op": "DUP3", - "gas": 915010, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 14913, - "op": "ADD", - "gas": 915007, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 14914, - "op": "PUSH1", - "gas": 915004, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 14916, - "op": "SWAP1", - "gas": 915001, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 14917, - "op": "DUP2", - "gas": 914998, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 14918, - "op": "ADD", - "gas": 914995, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 14919, - "op": "SWAP2", - "gas": 914992, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 14920, - "op": "SWAP1", - "gas": 914989, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 14921, - "op": "SWAP2", - "gas": 914986, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 14922, - "op": "MSTORE", - "gas": 914983, - "gasCost": 6, - "depth": 2 - }, - { - "pc": 14923, - "op": "PUSH1", - "gas": 914977, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 14925, - "op": "SWAP1", - "gas": 914974, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 14926, - "op": "SWAP2", - "gas": 914971, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 14927, - "op": "ADD", - "gas": 914968, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 14928, - "op": "PUSH1", - "gas": 914965, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 14930, - "op": "NOT", - "gas": 914962, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 14931, - "op": "AND", - "gas": 914959, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 14932, - "op": "SWAP1", - "gas": 914956, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 14933, - "op": "SWAP2", - "gas": 914953, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 14934, - "op": "ADD", - "gas": 914950, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 14935, - "op": "ADD", - "gas": 914947, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 14936, - "op": "SWAP1", - "gas": 914944, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 14937, - "op": "JUMP", - "gas": 914941, - "gasCost": 8, - "depth": 2 - }, - { - "pc": 15219, - "op": "JUMPDEST", - "gas": 914933, - "gasCost": 1, - "depth": 2 - }, - { - "pc": 15220, - "op": "SWAP4", - "gas": 914932, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 15221, - "op": "POP", - "gas": 914929, - "gasCost": 2, - "depth": 2 - }, - { - "pc": 15222, - "op": "POP", - "gas": 914927, - "gasCost": 2, - "depth": 2 - }, - { - "pc": 15223, - "op": "POP", - "gas": 914925, - "gasCost": 2, - "depth": 2 - }, - { - "pc": 15224, - "op": "POP", - "gas": 914923, - "gasCost": 2, - "depth": 2 - }, - { - "pc": 15225, - "op": "PUSH2", - "gas": 914921, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 15228, - "op": "PUSH1", - "gas": 914918, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 15230, - "op": "DUP5", - "gas": 914915, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 15231, - "op": "ADD", - "gas": 914912, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 15232, - "op": "DUP5", - "gas": 914909, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 15233, - "op": "PUSH2", - "gas": 914906, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 15236, - "op": "JUMP", - "gas": 914903, - "gasCost": 8, - "depth": 2 - }, - { - "pc": 14828, - "op": "JUMPDEST", - "gas": 914895, - "gasCost": 1, - "depth": 2 - }, - { - "pc": 14829, - "op": "PUSH1", - "gas": 914894, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 14831, - "op": "DUP1", - "gas": 914891, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 14832, - "op": "DUP4", - "gas": 914888, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 14833, - "op": "CALLDATALOAD", - "gas": 914885, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 14834, - "op": "PUSH1", - "gas": 914882, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 14836, - "op": "NOT", - "gas": 914879, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 14837, - "op": "DUP5", - "gas": 914876, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 14838, - "op": "CALLDATASIZE", - "gas": 914873, - "gasCost": 2, - "depth": 2 - }, - { - "pc": 14839, - "op": "SUB", - "gas": 914871, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 14840, - "op": "ADD", - "gas": 914868, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 14841, - "op": "DUP2", - "gas": 914865, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 14842, - "op": "SLT", - "gas": 914862, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 14843, - "op": "PUSH2", - "gas": 914859, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 14846, - "op": "JUMPI", - "gas": 914856, - "gasCost": 10, - "depth": 2 - }, - { - "pc": 14851, - "op": "JUMPDEST", - "gas": 914846, - "gasCost": 1, - "depth": 2 - }, - { - "pc": 14852, - "op": "DUP4", - "gas": 914845, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 14853, - "op": "ADD", - "gas": 914842, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 14854, - "op": "PUSH1", - "gas": 914839, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 14856, - "op": "DUP2", - "gas": 914836, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 14857, - "op": "ADD", - "gas": 914833, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 14858, - "op": "SWAP3", - "gas": 914830, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 14859, - "op": "POP", - "gas": 914827, - "gasCost": 2, - "depth": 2 - }, - { - "pc": 14860, - "op": "CALLDATALOAD", - "gas": 914825, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 14861, - "op": "SWAP1", - "gas": 914822, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 14862, - "op": "POP", - "gas": 914819, - "gasCost": 2, - "depth": 2 - }, - { - "pc": 14863, - "op": "PUSH1", - "gas": 914817, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 14865, - "op": "PUSH1", - "gas": 914814, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 14867, - "op": "PUSH1", - "gas": 914811, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 14869, - "op": "SHL", - "gas": 914808, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 14870, - "op": "SUB", - "gas": 914805, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 14871, - "op": "DUP2", - "gas": 914802, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 14872, - "op": "GT", - "gas": 914799, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 14873, - "op": "ISZERO", - "gas": 914796, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 14874, - "op": "PUSH2", - "gas": 914793, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 14877, - "op": "JUMPI", - "gas": 914790, - "gasCost": 10, - "depth": 2 - }, - { - "pc": 14882, - "op": "JUMPDEST", - "gas": 914780, - "gasCost": 1, - "depth": 2 - }, - { - "pc": 14883, - "op": "DUP1", - "gas": 914779, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 14884, - "op": "CALLDATASIZE", - "gas": 914776, - "gasCost": 2, - "depth": 2 - }, - { - "pc": 14885, - "op": "SUB", - "gas": 914774, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 14886, - "op": "DUP4", - "gas": 914771, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 14887, - "op": "SGT", - "gas": 914768, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 14888, - "op": "ISZERO", - "gas": 914765, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 14889, - "op": "PUSH2", - "gas": 914762, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 14892, - "op": "JUMPI", - "gas": 914759, - "gasCost": 10, - "depth": 2 - }, - { - "pc": 13083, - "op": "JUMPDEST", - "gas": 914749, - "gasCost": 1, - "depth": 2 - }, - { - "pc": 13084, - "op": "SWAP3", - "gas": 914748, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 13085, - "op": "POP", - "gas": 914745, - "gasCost": 2, - "depth": 2 - }, - { - "pc": 13086, - "op": "SWAP3", - "gas": 914743, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 13087, - "op": "SWAP1", - "gas": 914740, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 13088, - "op": "POP", - "gas": 914737, - "gasCost": 2, - "depth": 2 - }, - { - "pc": 13089, - "op": "JUMP", - "gas": 914735, - "gasCost": 8, - "depth": 2 - }, - { - "pc": 15237, - "op": "JUMPDEST", - "gas": 914727, - "gasCost": 1, - "depth": 2 - }, - { - "pc": 15238, - "op": "DUP6", - "gas": 914726, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 15239, - "op": "DUP4", - "gas": 914723, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 15240, - "op": "SUB", - "gas": 914720, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 15241, - "op": "PUSH1", - "gas": 914717, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 15243, - "op": "DUP8", - "gas": 914714, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 15244, - "op": "ADD", - "gas": 914711, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 15245, - "op": "MSTORE", - "gas": 914708, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 15246, - "op": "PUSH2", - "gas": 914705, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 15249, - "op": "DUP4", - "gas": 914702, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 15250, - "op": "DUP3", - "gas": 914699, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 15251, - "op": "DUP5", - "gas": 914696, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 15252, - "op": "PUSH2", - "gas": 914693, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 15255, - "op": "JUMP", - "gas": 914690, - "gasCost": 8, - "depth": 2 - }, - { - "pc": 14897, - "op": "JUMPDEST", - "gas": 914682, - "gasCost": 1, - "depth": 2 - }, - { - "pc": 14898, - "op": "DUP2", - "gas": 914681, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 14899, - "op": "DUP4", - "gas": 914678, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 14900, - "op": "MSTORE", - "gas": 914675, - "gasCost": 6, - "depth": 2 - }, - { - "pc": 14901, - "op": "DUP2", - "gas": 914669, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 14902, - "op": "DUP2", - "gas": 914666, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 14903, - "op": "PUSH1", - "gas": 914663, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 14905, - "op": "DUP6", - "gas": 914660, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 14906, - "op": "ADD", - "gas": 914657, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 14907, - "op": "CALLDATACOPY", - "gas": 914654, - "gasCost": 6, - "depth": 2 - }, - { - "pc": 14908, - "op": "POP", - "gas": 914648, - "gasCost": 2, - "depth": 2 - }, - { - "pc": 14909, - "op": "PUSH1", - "gas": 914646, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 14911, - "op": "DUP3", - "gas": 914643, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 14912, - "op": "DUP3", - "gas": 914640, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 14913, - "op": "ADD", - "gas": 914637, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 14914, - "op": "PUSH1", - "gas": 914634, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 14916, - "op": "SWAP1", - "gas": 914631, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 14917, - "op": "DUP2", - "gas": 914628, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 14918, - "op": "ADD", - "gas": 914625, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 14919, - "op": "SWAP2", - "gas": 914622, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 14920, - "op": "SWAP1", - "gas": 914619, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 14921, - "op": "SWAP2", - "gas": 914616, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 14922, - "op": "MSTORE", - "gas": 914613, - "gasCost": 6, - "depth": 2 - }, - { - "pc": 14923, - "op": "PUSH1", - "gas": 914607, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 14925, - "op": "SWAP1", - "gas": 914604, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 14926, - "op": "SWAP2", - "gas": 914601, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 14927, - "op": "ADD", - "gas": 914598, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 14928, - "op": "PUSH1", - "gas": 914595, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 14930, - "op": "NOT", - "gas": 914592, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 14931, - "op": "AND", - "gas": 914589, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 14932, - "op": "SWAP1", - "gas": 914586, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 14933, - "op": "SWAP2", - "gas": 914583, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 14934, - "op": "ADD", - "gas": 914580, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 14935, - "op": "ADD", - "gas": 914577, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 14936, - "op": "SWAP1", - "gas": 914574, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 14937, - "op": "JUMP", - "gas": 914571, - "gasCost": 8, - "depth": 2 - }, - { - "pc": 15256, - "op": "JUMPDEST", - "gas": 914563, - "gasCost": 1, - "depth": 2 - }, - { - "pc": 15257, - "op": "SWAP7", - "gas": 914562, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 15258, - "op": "SWAP6", - "gas": 914559, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 15259, - "op": "POP", - "gas": 914556, - "gasCost": 2, - "depth": 2 - }, - { - "pc": 15260, - "op": "POP", - "gas": 914554, - "gasCost": 2, - "depth": 2 - }, - { - "pc": 15261, - "op": "POP", - "gas": 914552, - "gasCost": 2, - "depth": 2 - }, - { - "pc": 15262, - "op": "POP", - "gas": 914550, - "gasCost": 2, - "depth": 2 - }, - { - "pc": 15263, - "op": "POP", - "gas": 914548, - "gasCost": 2, - "depth": 2 - }, - { - "pc": 15264, - "op": "POP", - "gas": 914546, - "gasCost": 2, - "depth": 2 - }, - { - "pc": 15265, - "op": "JUMP", - "gas": 914544, - "gasCost": 8, - "depth": 2 - }, - { - "pc": 15256, - "op": "JUMPDEST", - "gas": 914536, - "gasCost": 1, - "depth": 2 - }, - { - "pc": 15257, - "op": "SWAP7", - "gas": 914535, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 15258, - "op": "SWAP6", - "gas": 914532, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 15259, - "op": "POP", - "gas": 914529, - "gasCost": 2, - "depth": 2 - }, - { - "pc": 15260, - "op": "POP", - "gas": 914527, - "gasCost": 2, - "depth": 2 - }, - { - "pc": 15261, - "op": "POP", - "gas": 914525, - "gasCost": 2, - "depth": 2 - }, - { - "pc": 15262, - "op": "POP", - "gas": 914523, - "gasCost": 2, - "depth": 2 - }, - { - "pc": 15263, - "op": "POP", - "gas": 914521, - "gasCost": 2, - "depth": 2 - }, - { - "pc": 15264, - "op": "POP", - "gas": 914519, - "gasCost": 2, - "depth": 2 - }, - { - "pc": 15265, - "op": "JUMP", - "gas": 914517, - "gasCost": 8, - "depth": 2 - }, - { - "pc": 3993, - "op": "JUMPDEST", - "gas": 914509, - "gasCost": 1, - "depth": 2 - }, - { - "pc": 3994, - "op": "PUSH1", - "gas": 914508, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 3996, - "op": "PUSH1", - "gas": 914505, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 3998, - "op": "MLOAD", - "gas": 914502, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 3999, - "op": "DUP1", - "gas": 914499, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 4000, - "op": "DUP4", - "gas": 914496, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 4001, - "op": "SUB", - "gas": 914493, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 4002, - "op": "DUP2", - "gas": 914490, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 4003, - "op": "DUP7", - "gas": 914487, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 4004, - "op": "DUP1", - "gas": 914484, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 4005, - "op": "EXTCODESIZE", - "gas": 914481, - "gasCost": 2600, - "depth": 2 - }, - { - "pc": 4006, - "op": "ISZERO", - "gas": 911881, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 4007, - "op": "DUP1", - "gas": 911878, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 4008, - "op": "ISZERO", - "gas": 911875, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 4009, - "op": "PUSH2", - "gas": 911872, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 4012, - "op": "JUMPI", - "gas": 911869, - "gasCost": 10, - "depth": 2 - }, - { - "pc": 4013, - "op": "PUSH1", - "gas": 911859, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 4015, - "op": "DUP1", - "gas": 911856, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 4016, - "op": "REVERT", - "gas": 911853, - "gasCost": 0, - "depth": 2 - }, - { - "pc": 851, - "op": "RETURNDATASIZE", - "gas": 926549, - "gasCost": 2, - "depth": 1 - }, - { - "pc": 852, - "op": "PUSH1", - "gas": 926547, - "gasCost": 3, - "depth": 1 - }, - { - "pc": 854, - "op": "DUP1", - "gas": 926544, - "gasCost": 3, - "depth": 1 - }, - { - "pc": 855, - "op": "RETURNDATACOPY", - "gas": 926541, - "gasCost": 3, - "depth": 1 - }, - { - "pc": 856, - "op": "DUP1", - "gas": 926538, - "gasCost": 3, - "depth": 1 - }, - { - "pc": 857, - "op": "DUP1", - "gas": 926535, - "gasCost": 3, - "depth": 1 - }, - { - "pc": 858, - "op": "ISZERO", - "gas": 926532, - "gasCost": 3, - "depth": 1 - }, - { - "pc": 859, - "op": "PUSH2", - "gas": 926529, - "gasCost": 3, - "depth": 1 - }, - { - "pc": 862, - "op": "JUMPI", - "gas": 926526, - "gasCost": 10, - "depth": 1 - }, - { - "pc": 867, - "op": "JUMPDEST", - "gas": 926516, - "gasCost": 1, - "depth": 1 - }, - { - "pc": 868, - "op": "RETURNDATASIZE", - "gas": 926515, - "gasCost": 2, - "depth": 1 - }, - { - "pc": 869, - "op": "PUSH1", - "gas": 926513, - "gasCost": 3, - "depth": 1 - }, - { - "pc": 871, - "op": "REVERT", - "gas": 926510, - "gasCost": 0, - "depth": 1 - } - ] - diff --git a/out.txt b/out.txt deleted file mode 100644 index 8a0d51cc2..000000000 --- a/out.txt +++ /dev/null @@ -1,9414 +0,0 @@ - { - "pc": 0, - "op": "PUSH1", - "gas": 9989080, - "gasCost": 3, - "depth": 1 - }, - { - "pc": 2, - "op": "PUSH1", - "gas": 9989077, - "gasCost": 3, - "depth": 1 - }, - { - "pc": 4, - "op": "MSTORE", - "gas": 9989074, - "gasCost": 12, - "depth": 1 - }, - { - "pc": 5, - "op": "PUSH1", - "gas": 9989062, - "gasCost": 3, - "depth": 1 - }, - { - "pc": 7, - "op": "CALLDATASIZE", - "gas": 9989059, - "gasCost": 2, - "depth": 1 - }, - { - "pc": 8, - "op": "LT", - "gas": 9989057, - "gasCost": 3, - "depth": 1 - }, - { - "pc": 9, - "op": "PUSH2", - "gas": 9989054, - "gasCost": 3, - "depth": 1 - }, - { - "pc": 12, - "op": "JUMPI", - "gas": 9989051, - "gasCost": 10, - "depth": 1 - }, - { - "pc": 13, - "op": "PUSH1", - "gas": 9989041, - "gasCost": 3, - "depth": 1 - }, - { - "pc": 15, - "op": "CALLDATALOAD", - "gas": 9989038, - "gasCost": 3, - "depth": 1 - }, - { - "pc": 16, - "op": "PUSH1", - "gas": 9989035, - "gasCost": 3, - "depth": 1 - }, - { - "pc": 18, - "op": "SHR", - "gas": 9989032, - "gasCost": 3, - "depth": 1 - }, - { - "pc": 19, - "op": "DUP1", - "gas": 9989029, - "gasCost": 3, - "depth": 1 - }, - { - "pc": 20, - "op": "PUSH4", - "gas": 9989026, - "gasCost": 3, - "depth": 1 - }, - { - "pc": 25, - "op": "EQ", - "gas": 9989023, - "gasCost": 3, - "depth": 1 - }, - { - "pc": 26, - "op": "PUSH2", - "gas": 9989020, - "gasCost": 3, - "depth": 1 - }, - { - "pc": 29, - "op": "JUMPI", - "gas": 9989017, - "gasCost": 10, - "depth": 1 - }, - { - "pc": 30, - "op": "DUP1", - "gas": 9989007, - "gasCost": 3, - "depth": 1 - }, - { - "pc": 31, - "op": "PUSH4", - "gas": 9989004, - "gasCost": 3, - "depth": 1 - }, - { - "pc": 36, - "op": "EQ", - "gas": 9989001, - "gasCost": 3, - "depth": 1 - }, - { - "pc": 37, - "op": "PUSH2", - "gas": 9988998, - "gasCost": 3, - "depth": 1 - }, - { - "pc": 40, - "op": "JUMPI", - "gas": 9988995, - "gasCost": 10, - "depth": 1 - }, - { - "pc": 41, - "op": "DUP1", - "gas": 9988985, - "gasCost": 3, - "depth": 1 - }, - { - "pc": 42, - "op": "PUSH4", - "gas": 9988982, - "gasCost": 3, - "depth": 1 - }, - { - "pc": 47, - "op": "EQ", - "gas": 9988979, - "gasCost": 3, - "depth": 1 - }, - { - "pc": 48, - "op": "PUSH2", - "gas": 9988976, - "gasCost": 3, - "depth": 1 - }, - { - "pc": 51, - "op": "JUMPI", - "gas": 9988973, - "gasCost": 10, - "depth": 1 - }, - { - "pc": 52, - "op": "DUP1", - "gas": 9988963, - "gasCost": 3, - "depth": 1 - }, - { - "pc": 53, - "op": "PUSH4", - "gas": 9988960, - "gasCost": 3, - "depth": 1 - }, - { - "pc": 58, - "op": "EQ", - "gas": 9988957, - "gasCost": 3, - "depth": 1 - }, - { - "pc": 59, - "op": "PUSH2", - "gas": 9988954, - "gasCost": 3, - "depth": 1 - }, - { - "pc": 62, - "op": "JUMPI", - "gas": 9988951, - "gasCost": 10, - "depth": 1 - }, - { - "pc": 63, - "op": "DUP1", - "gas": 9988941, - "gasCost": 3, - "depth": 1 - }, - { - "pc": 64, - "op": "PUSH4", - "gas": 9988938, - "gasCost": 3, - "depth": 1 - }, - { - "pc": 69, - "op": "EQ", - "gas": 9988935, - "gasCost": 3, - "depth": 1 - }, - { - "pc": 70, - "op": "PUSH2", - "gas": 9988932, - "gasCost": 3, - "depth": 1 - }, - { - "pc": 73, - "op": "JUMPI", - "gas": 9988929, - "gasCost": 10, - "depth": 1 - }, - { - "pc": 74, - "op": "PUSH2", - "gas": 9988919, - "gasCost": 3, - "depth": 1 - }, - { - "pc": 77, - "op": "JUMP", - "gas": 9988916, - "gasCost": 8, - "depth": 1 - }, - { - "pc": 93, - "op": "JUMPDEST", - "gas": 9988908, - "gasCost": 1, - "depth": 1 - }, - { - "pc": 94, - "op": "PUSH2", - "gas": 9988907, - "gasCost": 3, - "depth": 1 - }, - { - "pc": 97, - "op": "PUSH2", - "gas": 9988904, - "gasCost": 3, - "depth": 1 - }, - { - "pc": 100, - "op": "JUMP", - "gas": 9988901, - "gasCost": 8, - "depth": 1 - }, - { - "pc": 254, - "op": "JUMPDEST", - "gas": 9988893, - "gasCost": 1, - "depth": 1 - }, - { - "pc": 255, - "op": "PUSH2", - "gas": 9988892, - "gasCost": 3, - "depth": 1 - }, - { - "pc": 258, - "op": "PUSH2", - "gas": 9988889, - "gasCost": 3, - "depth": 1 - }, - { - "pc": 261, - "op": "JUMP", - "gas": 9988886, - "gasCost": 8, - "depth": 1 - }, - { - "pc": 667, - "op": "JUMPDEST", - "gas": 9988878, - "gasCost": 1, - "depth": 1 - }, - { - "pc": 668, - "op": "PUSH2", - "gas": 9988877, - "gasCost": 3, - "depth": 1 - }, - { - "pc": 671, - "op": "PUSH2", - "gas": 9988874, - "gasCost": 3, - "depth": 1 - }, - { - "pc": 674, - "op": "JUMP", - "gas": 9988871, - "gasCost": 8, - "depth": 1 - }, - { - "pc": 872, - "op": "JUMPDEST", - "gas": 9988863, - "gasCost": 1, - "depth": 1 - }, - { - "pc": 873, - "op": "PUSH1", - "gas": 9988862, - "gasCost": 3, - "depth": 1 - }, - { - "pc": 875, - "op": "PUSH32", - "gas": 9988859, - "gasCost": 3, - "depth": 1 - }, - { - "pc": 908, - "op": "JUMPDEST", - "gas": 9988856, - "gasCost": 1, - "depth": 1 - }, - { - "pc": 909, - "op": "SLOAD", - "gas": 9988855, - "gasCost": 100, - "depth": 1, - "storage": { - "b53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103": "000000000000000000000000264aae078cc695f7d0b66260895aee9d4e83e730" - } - }, - { - "pc": 910, - "op": "PUSH1", - "gas": 9988755, - "gasCost": 3, - "depth": 1 - }, - { - "pc": 912, - "op": "PUSH1", - "gas": 9988752, - "gasCost": 3, - "depth": 1 - }, - { - "pc": 914, - "op": "PUSH1", - "gas": 9988749, - "gasCost": 3, - "depth": 1 - }, - { - "pc": 916, - "op": "SHL", - "gas": 9988746, - "gasCost": 3, - "depth": 1 - }, - { - "pc": 917, - "op": "SUB", - "gas": 9988743, - "gasCost": 3, - "depth": 1 - }, - { - "pc": 918, - "op": "AND", - "gas": 9988740, - "gasCost": 3, - "depth": 1 - }, - { - "pc": 919, - "op": "SWAP2", - "gas": 9988737, - "gasCost": 3, - "depth": 1 - }, - { - "pc": 920, - "op": "SWAP1", - "gas": 9988734, - "gasCost": 3, - "depth": 1 - }, - { - "pc": 921, - "op": "POP", - "gas": 9988731, - "gasCost": 2, - "depth": 1 - }, - { - "pc": 922, - "op": "JUMP", - "gas": 9988729, - "gasCost": 8, - "depth": 1 - }, - { - "pc": 675, - "op": "JUMPDEST", - "gas": 9988721, - "gasCost": 1, - "depth": 1 - }, - { - "pc": 676, - "op": "PUSH1", - "gas": 9988720, - "gasCost": 3, - "depth": 1 - }, - { - "pc": 678, - "op": "PUSH1", - "gas": 9988717, - "gasCost": 3, - "depth": 1 - }, - { - "pc": 680, - "op": "PUSH1", - "gas": 9988714, - "gasCost": 3, - "depth": 1 - }, - { - "pc": 682, - "op": "SHL", - "gas": 9988711, - "gasCost": 3, - "depth": 1 - }, - { - "pc": 683, - "op": "SUB", - "gas": 9988708, - "gasCost": 3, - "depth": 1 - }, - { - "pc": 684, - "op": "AND", - "gas": 9988705, - "gasCost": 3, - "depth": 1 - }, - { - "pc": 685, - "op": "CALLER", - "gas": 9988702, - "gasCost": 2, - "depth": 1 - }, - { - "pc": 686, - "op": "PUSH1", - "gas": 9988700, - "gasCost": 3, - "depth": 1 - }, - { - "pc": 688, - "op": "PUSH1", - "gas": 9988697, - "gasCost": 3, - "depth": 1 - }, - { - "pc": 690, - "op": "PUSH1", - "gas": 9988694, - "gasCost": 3, - "depth": 1 - }, - { - "pc": 692, - "op": "SHL", - "gas": 9988691, - "gasCost": 3, - "depth": 1 - }, - { - "pc": 693, - "op": "SUB", - "gas": 9988688, - "gasCost": 3, - "depth": 1 - }, - { - "pc": 694, - "op": "AND", - "gas": 9988685, - "gasCost": 3, - "depth": 1 - }, - { - "pc": 695, - "op": "EQ", - "gas": 9988682, - "gasCost": 3, - "depth": 1 - }, - { - "pc": 696, - "op": "ISZERO", - "gas": 9988679, - "gasCost": 3, - "depth": 1 - }, - { - "pc": 697, - "op": "PUSH2", - "gas": 9988676, - "gasCost": 3, - "depth": 1 - }, - { - "pc": 700, - "op": "JUMPI", - "gas": 9988673, - "gasCost": 10, - "depth": 1 - }, - { - "pc": 278, - "op": "JUMPDEST", - "gas": 9988663, - "gasCost": 1, - "depth": 1 - }, - { - "pc": 279, - "op": "JUMP", - "gas": 9988662, - "gasCost": 8, - "depth": 1 - }, - { - "pc": 262, - "op": "JUMPDEST", - "gas": 9988654, - "gasCost": 1, - "depth": 1 - }, - { - "pc": 263, - "op": "PUSH2", - "gas": 9988653, - "gasCost": 3, - "depth": 1 - }, - { - "pc": 266, - "op": "PUSH2", - "gas": 9988650, - "gasCost": 3, - "depth": 1 - }, - { - "pc": 269, - "op": "PUSH2", - "gas": 9988647, - "gasCost": 3, - "depth": 1 - }, - { - "pc": 272, - "op": "JUMP", - "gas": 9988644, - "gasCost": 8, - "depth": 1 - }, - { - "pc": 826, - "op": "JUMPDEST", - "gas": 9988636, - "gasCost": 1, - "depth": 1 - }, - { - "pc": 827, - "op": "PUSH1", - "gas": 9988635, - "gasCost": 3, - "depth": 1 - }, - { - "pc": 829, - "op": "PUSH2", - "gas": 9988632, - "gasCost": 3, - "depth": 1 - }, - { - "pc": 832, - "op": "PUSH2", - "gas": 9988629, - "gasCost": 3, - "depth": 1 - }, - { - "pc": 835, - "op": "JUMP", - "gas": 9988626, - "gasCost": 8, - "depth": 1 - }, - { - "pc": 1269, - "op": "JUMPDEST", - "gas": 9988618, - "gasCost": 1, - "depth": 1 - }, - { - "pc": 1270, - "op": "PUSH1", - "gas": 9988617, - "gasCost": 3, - "depth": 1 - }, - { - "pc": 1272, - "op": "PUSH32", - "gas": 9988614, - "gasCost": 3, - "depth": 1 - }, - { - "pc": 1305, - "op": "PUSH2", - "gas": 9988611, - "gasCost": 3, - "depth": 1 - }, - { - "pc": 1308, - "op": "JUMP", - "gas": 9988608, - "gasCost": 8, - "depth": 1 - }, - { - "pc": 908, - "op": "JUMPDEST", - "gas": 9988600, - "gasCost": 1, - "depth": 1 - }, - { - "pc": 909, - "op": "SLOAD", - "gas": 9988599, - "gasCost": 100, - "depth": 1, - "storage": { - "360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc": "00000000000000000000000060571c8f4b52954a24a5e7306d435e951528d963", - "b53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103": "000000000000000000000000264aae078cc695f7d0b66260895aee9d4e83e730" - } - }, - { - "pc": 910, - "op": "PUSH1", - "gas": 9988499, - "gasCost": 3, - "depth": 1 - }, - { - "pc": 912, - "op": "PUSH1", - "gas": 9988496, - "gasCost": 3, - "depth": 1 - }, - { - "pc": 914, - "op": "PUSH1", - "gas": 9988493, - "gasCost": 3, - "depth": 1 - }, - { - "pc": 916, - "op": "SHL", - "gas": 9988490, - "gasCost": 3, - "depth": 1 - }, - { - "pc": 917, - "op": "SUB", - "gas": 9988487, - "gasCost": 3, - "depth": 1 - }, - { - "pc": 918, - "op": "AND", - "gas": 9988484, - "gasCost": 3, - "depth": 1 - }, - { - "pc": 919, - "op": "SWAP2", - "gas": 9988481, - "gasCost": 3, - "depth": 1 - }, - { - "pc": 920, - "op": "SWAP1", - "gas": 9988478, - "gasCost": 3, - "depth": 1 - }, - { - "pc": 921, - "op": "POP", - "gas": 9988475, - "gasCost": 2, - "depth": 1 - }, - { - "pc": 922, - "op": "JUMP", - "gas": 9988473, - "gasCost": 8, - "depth": 1 - }, - { - "pc": 507, - "op": "JUMPDEST", - "gas": 9988465, - "gasCost": 1, - "depth": 1 - }, - { - "pc": 508, - "op": "SWAP1", - "gas": 9988464, - "gasCost": 3, - "depth": 1 - }, - { - "pc": 509, - "op": "POP", - "gas": 9988461, - "gasCost": 2, - "depth": 1 - }, - { - "pc": 510, - "op": "SWAP1", - "gas": 9988459, - "gasCost": 3, - "depth": 1 - }, - { - "pc": 511, - "op": "JUMP", - "gas": 9988456, - "gasCost": 8, - "depth": 1 - }, - { - "pc": 273, - "op": "JUMPDEST", - "gas": 9988448, - "gasCost": 1, - "depth": 1 - }, - { - "pc": 274, - "op": "PUSH2", - "gas": 9988447, - "gasCost": 3, - "depth": 1 - }, - { - "pc": 277, - "op": "JUMP", - "gas": 9988444, - "gasCost": 8, - "depth": 1 - }, - { - "pc": 836, - "op": "JUMPDEST", - "gas": 9988436, - "gasCost": 1, - "depth": 1 - }, - { - "pc": 837, - "op": "CALLDATASIZE", - "gas": 9988435, - "gasCost": 2, - "depth": 1 - }, - { - "pc": 838, - "op": "PUSH1", - "gas": 9988433, - "gasCost": 3, - "depth": 1 - }, - { - "pc": 840, - "op": "DUP1", - "gas": 9988430, - "gasCost": 3, - "depth": 1 - }, - { - "pc": 841, - "op": "CALLDATACOPY", - "gas": 9988427, - "gasCost": 212, - "depth": 1 - }, - { - "pc": 842, - "op": "PUSH1", - "gas": 9988215, - "gasCost": 3, - "depth": 1 - }, - { - "pc": 844, - "op": "DUP1", - "gas": 9988212, - "gasCost": 3, - "depth": 1 - }, - { - "pc": 845, - "op": "CALLDATASIZE", - "gas": 9988209, - "gasCost": 2, - "depth": 1 - }, - { - "pc": 846, - "op": "PUSH1", - "gas": 9988207, - "gasCost": 3, - "depth": 1 - }, - { - "pc": 848, - "op": "DUP5", - "gas": 9988204, - "gasCost": 3, - "depth": 1 - }, - { - "pc": 849, - "op": "GAS", - "gas": 9988201, - "gasCost": 2, - "depth": 1 - }, - { - "pc": 850, - "op": "DELEGATECALL", - "gas": 9988199, - "gasCost": 9832175, - "depth": 1 - }, - { - "pc": 0, - "op": "PUSH1", - "gas": 9829575, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 2, - "op": "PUSH1", - "gas": 9829572, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 4, - "op": "MSTORE", - "gas": 9829569, - "gasCost": 12, - "depth": 2 - }, - { - "pc": 5, - "op": "CALLVALUE", - "gas": 9829557, - "gasCost": 2, - "depth": 2 - }, - { - "pc": 6, - "op": "DUP1", - "gas": 9829555, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 7, - "op": "ISZERO", - "gas": 9829552, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 8, - "op": "PUSH2", - "gas": 9829549, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 11, - "op": "JUMPI", - "gas": 9829546, - "gasCost": 10, - "depth": 2 - }, - { - "pc": 16, - "op": "JUMPDEST", - "gas": 9829536, - "gasCost": 1, - "depth": 2 - }, - { - "pc": 17, - "op": "POP", - "gas": 9829535, - "gasCost": 2, - "depth": 2 - }, - { - "pc": 18, - "op": "PUSH1", - "gas": 9829533, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 20, - "op": "CALLDATASIZE", - "gas": 9829530, - "gasCost": 2, - "depth": 2 - }, - { - "pc": 21, - "op": "LT", - "gas": 9829528, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 22, - "op": "PUSH2", - "gas": 9829525, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 25, - "op": "JUMPI", - "gas": 9829522, - "gasCost": 10, - "depth": 2 - }, - { - "pc": 26, - "op": "PUSH1", - "gas": 9829512, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 28, - "op": "CALLDATALOAD", - "gas": 9829509, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 29, - "op": "PUSH1", - "gas": 9829506, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 31, - "op": "SHR", - "gas": 9829503, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 32, - "op": "DUP1", - "gas": 9829500, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 33, - "op": "PUSH4", - "gas": 9829497, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 38, - "op": "GT", - "gas": 9829494, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 39, - "op": "PUSH2", - "gas": 9829491, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 42, - "op": "JUMPI", - "gas": 9829488, - "gasCost": 10, - "depth": 2 - }, - { - "pc": 326, - "op": "JUMPDEST", - "gas": 9829478, - "gasCost": 1, - "depth": 2 - }, - { - "pc": 327, - "op": "DUP1", - "gas": 9829477, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 328, - "op": "PUSH4", - "gas": 9829474, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 333, - "op": "GT", - "gas": 9829471, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 334, - "op": "PUSH2", - "gas": 9829468, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 337, - "op": "JUMPI", - "gas": 9829465, - "gasCost": 10, - "depth": 2 - }, - { - "pc": 338, - "op": "DUP1", - "gas": 9829455, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 339, - "op": "PUSH4", - "gas": 9829452, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 344, - "op": "GT", - "gas": 9829449, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 345, - "op": "PUSH2", - "gas": 9829446, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 348, - "op": "JUMPI", - "gas": 9829443, - "gasCost": 10, - "depth": 2 - }, - { - "pc": 419, - "op": "JUMPDEST", - "gas": 9829433, - "gasCost": 1, - "depth": 2 - }, - { - "pc": 420, - "op": "DUP1", - "gas": 9829432, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 421, - "op": "PUSH4", - "gas": 9829429, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 426, - "op": "EQ", - "gas": 9829426, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 427, - "op": "PUSH2", - "gas": 9829423, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 430, - "op": "JUMPI", - "gas": 9829420, - "gasCost": 10, - "depth": 2 - }, - { - "pc": 431, - "op": "DUP1", - "gas": 9829410, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 432, - "op": "PUSH4", - "gas": 9829407, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 437, - "op": "EQ", - "gas": 9829404, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 438, - "op": "PUSH2", - "gas": 9829401, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 441, - "op": "JUMPI", - "gas": 9829398, - "gasCost": 10, - "depth": 2 - }, - { - "pc": 841, - "op": "JUMPDEST", - "gas": 9829388, - "gasCost": 1, - "depth": 2 - }, - { - "pc": 842, - "op": "PUSH2", - "gas": 9829387, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 845, - "op": "PUSH2", - "gas": 9829384, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 848, - "op": "CALLDATASIZE", - "gas": 9829381, - "gasCost": 2, - "depth": 2 - }, - { - "pc": 849, - "op": "PUSH1", - "gas": 9829379, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 851, - "op": "PUSH2", - "gas": 9829376, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 854, - "op": "JUMP", - "gas": 9829373, - "gasCost": 8, - "depth": 2 - }, - { - "pc": 12830, - "op": "JUMPDEST", - "gas": 9829365, - "gasCost": 1, - "depth": 2 - }, - { - "pc": 12831, - "op": "PUSH1", - "gas": 9829364, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 12833, - "op": "DUP1", - "gas": 9829361, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 12834, - "op": "PUSH1", - "gas": 9829358, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 12836, - "op": "DUP1", - "gas": 9829355, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 12837, - "op": "PUSH1", - "gas": 9829352, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 12839, - "op": "DUP1", - "gas": 9829349, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 12840, - "op": "PUSH1", - "gas": 9829346, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 12842, - "op": "DUP8", - "gas": 9829343, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 12843, - "op": "DUP10", - "gas": 9829340, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 12844, - "op": "SUB", - "gas": 9829337, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 12845, - "op": "SLT", - "gas": 9829334, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 12846, - "op": "ISZERO", - "gas": 9829331, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 12847, - "op": "PUSH2", - "gas": 9829328, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 12850, - "op": "JUMPI", - "gas": 9829325, - "gasCost": 10, - "depth": 2 - }, - { - "pc": 12855, - "op": "JUMPDEST", - "gas": 9829315, - "gasCost": 1, - "depth": 2 - }, - { - "pc": 12856, - "op": "DUP7", - "gas": 9829314, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 12857, - "op": "CALLDATALOAD", - "gas": 9829311, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 12858, - "op": "SWAP6", - "gas": 9829308, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 12859, - "op": "POP", - "gas": 9829305, - "gasCost": 2, - "depth": 2 - }, - { - "pc": 12860, - "op": "PUSH1", - "gas": 9829303, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 12862, - "op": "DUP8", - "gas": 9829300, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 12863, - "op": "ADD", - "gas": 9829297, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 12864, - "op": "CALLDATALOAD", - "gas": 9829294, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 12865, - "op": "PUSH1", - "gas": 9829291, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 12867, - "op": "PUSH1", - "gas": 9829288, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 12869, - "op": "PUSH1", - "gas": 9829285, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 12871, - "op": "SHL", - "gas": 9829282, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 12872, - "op": "SUB", - "gas": 9829279, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 12873, - "op": "DUP1", - "gas": 9829276, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 12874, - "op": "DUP3", - "gas": 9829273, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 12875, - "op": "GT", - "gas": 9829270, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 12876, - "op": "ISZERO", - "gas": 9829267, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 12877, - "op": "PUSH2", - "gas": 9829264, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 12880, - "op": "JUMPI", - "gas": 9829261, - "gasCost": 10, - "depth": 2 - }, - { - "pc": 12885, - "op": "JUMPDEST", - "gas": 9829251, - "gasCost": 1, - "depth": 2 - }, - { - "pc": 12886, - "op": "SWAP1", - "gas": 9829250, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 12887, - "op": "DUP9", - "gas": 9829247, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 12888, - "op": "ADD", - "gas": 9829244, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 12889, - "op": "SWAP1", - "gas": 9829241, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 12890, - "op": "PUSH1", - "gas": 9829238, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 12892, - "op": "DUP3", - "gas": 9829235, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 12893, - "op": "DUP12", - "gas": 9829232, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 12894, - "op": "SUB", - "gas": 9829229, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 12895, - "op": "SLT", - "gas": 9829226, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 12896, - "op": "ISZERO", - "gas": 9829223, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 12897, - "op": "PUSH2", - "gas": 9829220, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 12900, - "op": "JUMPI", - "gas": 9829217, - "gasCost": 10, - "depth": 2 - }, - { - "pc": 12905, - "op": "JUMPDEST", - "gas": 9829207, - "gasCost": 1, - "depth": 2 - }, - { - "pc": 12906, - "op": "SWAP1", - "gas": 9829206, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 12907, - "op": "SWAP6", - "gas": 9829203, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 12908, - "op": "POP", - "gas": 9829200, - "gasCost": 2, - "depth": 2 - }, - { - "pc": 12909, - "op": "PUSH1", - "gas": 9829198, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 12911, - "op": "DUP9", - "gas": 9829195, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 12912, - "op": "ADD", - "gas": 9829192, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 12913, - "op": "CALLDATALOAD", - "gas": 9829189, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 12914, - "op": "SWAP1", - "gas": 9829186, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 12915, - "op": "DUP1", - "gas": 9829183, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 12916, - "op": "DUP3", - "gas": 9829180, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 12917, - "op": "GT", - "gas": 9829177, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 12918, - "op": "ISZERO", - "gas": 9829174, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 12919, - "op": "PUSH2", - "gas": 9829171, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 12922, - "op": "JUMPI", - "gas": 9829168, - "gasCost": 10, - "depth": 2 - }, - { - "pc": 12927, - "op": "JUMPDEST", - "gas": 9829158, - "gasCost": 1, - "depth": 2 - }, - { - "pc": 12928, - "op": "POP", - "gas": 9829157, - "gasCost": 2, - "depth": 2 - }, - { - "pc": 12929, - "op": "PUSH2", - "gas": 9829155, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 12932, - "op": "DUP10", - "gas": 9829152, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 12933, - "op": "DUP3", - "gas": 9829149, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 12934, - "op": "DUP11", - "gas": 9829146, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 12935, - "op": "ADD", - "gas": 9829143, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 12936, - "op": "PUSH2", - "gas": 9829140, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 12939, - "op": "JUMP", - "gas": 9829137, - "gasCost": 8, - "depth": 2 - }, - { - "pc": 12572, - "op": "JUMPDEST", - "gas": 9829129, - "gasCost": 1, - "depth": 2 - }, - { - "pc": 12573, - "op": "PUSH1", - "gas": 9829128, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 12575, - "op": "PUSH1", - "gas": 9829125, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 12577, - "op": "DUP3", - "gas": 9829122, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 12578, - "op": "DUP5", - "gas": 9829119, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 12579, - "op": "SUB", - "gas": 9829116, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 12580, - "op": "SLT", - "gas": 9829113, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 12581, - "op": "ISZERO", - "gas": 9829110, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 12582, - "op": "PUSH2", - "gas": 9829107, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 12585, - "op": "JUMPI", - "gas": 9829104, - "gasCost": 10, - "depth": 2 - }, - { - "pc": 12590, - "op": "JUMPDEST", - "gas": 9829094, - "gasCost": 1, - "depth": 2 - }, - { - "pc": 12591, - "op": "POP", - "gas": 9829093, - "gasCost": 2, - "depth": 2 - }, - { - "pc": 12592, - "op": "SWAP2", - "gas": 9829091, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 12593, - "op": "SWAP1", - "gas": 9829088, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 12594, - "op": "POP", - "gas": 9829085, - "gasCost": 2, - "depth": 2 - }, - { - "pc": 12595, - "op": "JUMP", - "gas": 9829083, - "gasCost": 8, - "depth": 2 - }, - { - "pc": 12940, - "op": "JUMPDEST", - "gas": 9829075, - "gasCost": 1, - "depth": 2 - }, - { - "pc": 12941, - "op": "SWAP5", - "gas": 9829074, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 12942, - "op": "POP", - "gas": 9829071, - "gasCost": 2, - "depth": 2 - }, - { - "pc": 12943, - "op": "POP", - "gas": 9829069, - "gasCost": 2, - "depth": 2 - }, - { - "pc": 12944, - "op": "PUSH1", - "gas": 9829067, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 12946, - "op": "DUP8", - "gas": 9829064, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 12947, - "op": "ADD", - "gas": 9829061, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 12948, - "op": "CALLDATALOAD", - "gas": 9829058, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 12949, - "op": "SWAP3", - "gas": 9829055, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 12950, - "op": "POP", - "gas": 9829052, - "gasCost": 2, - "depth": 2 - }, - { - "pc": 12951, - "op": "PUSH1", - "gas": 9829050, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 12953, - "op": "DUP8", - "gas": 9829047, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 12954, - "op": "ADD", - "gas": 9829044, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 12955, - "op": "CALLDATALOAD", - "gas": 9829041, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 12956, - "op": "SWAP2", - "gas": 9829038, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 12957, - "op": "POP", - "gas": 9829035, - "gasCost": 2, - "depth": 2 - }, - { - "pc": 12958, - "op": "PUSH1", - "gas": 9829033, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 12960, - "op": "DUP8", - "gas": 9829030, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 12961, - "op": "ADD", - "gas": 9829027, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 12962, - "op": "CALLDATALOAD", - "gas": 9829024, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 12963, - "op": "SWAP1", - "gas": 9829021, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 12964, - "op": "POP", - "gas": 9829018, - "gasCost": 2, - "depth": 2 - }, - { - "pc": 12965, - "op": "SWAP3", - "gas": 9829016, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 12966, - "op": "SWAP6", - "gas": 9829013, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 12967, - "op": "POP", - "gas": 9829010, - "gasCost": 2, - "depth": 2 - }, - { - "pc": 12968, - "op": "SWAP3", - "gas": 9829008, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 12969, - "op": "SWAP6", - "gas": 9829005, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 12970, - "op": "POP", - "gas": 9829002, - "gasCost": 2, - "depth": 2 - }, - { - "pc": 12971, - "op": "SWAP3", - "gas": 9829000, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 12972, - "op": "SWAP6", - "gas": 9828997, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 12973, - "op": "JUMP", - "gas": 9828994, - "gasCost": 8, - "depth": 2 - }, - { - "pc": 855, - "op": "JUMPDEST", - "gas": 9828986, - "gasCost": 1, - "depth": 2 - }, - { - "pc": 856, - "op": "PUSH2", - "gas": 9828985, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 859, - "op": "JUMP", - "gas": 9828982, - "gasCost": 8, - "depth": 2 - }, - { - "pc": 3844, - "op": "JUMPDEST", - "gas": 9828974, - "gasCost": 1, - "depth": 2 - }, - { - "pc": 3845, - "op": "CALLER", - "gas": 9828973, - "gasCost": 2, - "depth": 2 - }, - { - "pc": 3846, - "op": "PUSH1", - "gas": 9828971, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 3848, - "op": "SWAP1", - "gas": 9828968, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 3849, - "op": "DUP2", - "gas": 9828965, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 3850, - "op": "MSTORE", - "gas": 9828962, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 3851, - "op": "PUSH1", - "gas": 9828959, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 3853, - "op": "PUSH1", - "gas": 9828956, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 3855, - "op": "MSTORE", - "gas": 9828953, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 3856, - "op": "PUSH1", - "gas": 9828950, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 3858, - "op": "SWAP1", - "gas": 9828947, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 3859, - "op": "KECCAK256", - "gas": 9828944, - "gasCost": 42, - "depth": 2 - }, - { - "pc": 3860, - "op": "SLOAD", - "gas": 9828902, - "gasCost": 2100, - "depth": 2, - "storage": { - "360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc": "00000000000000000000000060571c8f4b52954a24a5e7306d435e951528d963", - "b53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103": "000000000000000000000000264aae078cc695f7d0b66260895aee9d4e83e730", - "d343c84be1c85a440922a059e46ad21d2f412ae5bec5ee65c2c0d39dd877c54d": "0000000000000000000000000000000000000000000000000000000000000001" - } - }, - { - "pc": 3861, - "op": "PUSH1", - "gas": 9826802, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 3863, - "op": "AND", - "gas": 9826799, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 3864, - "op": "PUSH2", - "gas": 9826796, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 3867, - "op": "JUMPI", - "gas": 9826793, - "gasCost": 10, - "depth": 2 - }, - { - "pc": 3892, - "op": "JUMPDEST", - "gas": 9826783, - "gasCost": 1, - "depth": 2 - }, - { - "pc": 3893, - "op": "PUSH1", - "gas": 9826782, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 3895, - "op": "SLOAD", - "gas": 9826779, - "gasCost": 2100, - "depth": 2, - "storage": { - "0000000000000000000000000000000000000000000000000000000000000003": "0000000000000000000000000000000000000000000000000000000000000000", - "360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc": "00000000000000000000000060571c8f4b52954a24a5e7306d435e951528d963", - "b53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103": "000000000000000000000000264aae078cc695f7d0b66260895aee9d4e83e730", - "d343c84be1c85a440922a059e46ad21d2f412ae5bec5ee65c2c0d39dd877c54d": "0000000000000000000000000000000000000000000000000000000000000001" - } - }, - { - "pc": 3896, - "op": "PUSH1", - "gas": 9824679, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 3898, - "op": "SLOAD", - "gas": 9824676, - "gasCost": 2100, - "depth": 2, - "storage": { - "0000000000000000000000000000000000000000000000000000000000000002": "0000000000000000000000000000000000000000000000000000000000000000", - "0000000000000000000000000000000000000000000000000000000000000003": "0000000000000000000000000000000000000000000000000000000000000000", - "360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc": "00000000000000000000000060571c8f4b52954a24a5e7306d435e951528d963", - "b53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103": "000000000000000000000000264aae078cc695f7d0b66260895aee9d4e83e730", - "d343c84be1c85a440922a059e46ad21d2f412ae5bec5ee65c2c0d39dd877c54d": "0000000000000000000000000000000000000000000000000000000000000001" - } - }, - { - "pc": 3899, - "op": "PUSH1", - "gas": 9822576, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 3901, - "op": "MLOAD", - "gas": 9822573, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 3902, - "op": "PUSH4", - "gas": 9822570, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 3907, - "op": "PUSH1", - "gas": 9822567, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 3909, - "op": "SHL", - "gas": 9822564, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 3910, - "op": "DUP2", - "gas": 9822561, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 3911, - "op": "MSTORE", - "gas": 9822558, - "gasCost": 9, - "depth": 2 - }, - { - "pc": 3912, - "op": "PUSH1", - "gas": 9822549, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 3914, - "op": "PUSH1", - "gas": 9822546, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 3916, - "op": "PUSH1", - "gas": 9822543, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 3918, - "op": "SHL", - "gas": 9822540, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 3919, - "op": "SUB", - "gas": 9822537, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 3920, - "op": "SWAP3", - "gas": 9822534, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 3921, - "op": "DUP4", - "gas": 9822531, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 3922, - "op": "AND", - "gas": 9822528, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 3923, - "op": "SWAP3", - "gas": 9822525, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 3924, - "op": "PUSH4", - "gas": 9822522, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 3929, - "op": "SWAP3", - "gas": 9822519, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 3930, - "op": "PUSH2", - "gas": 9822516, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 3933, - "op": "SWAP3", - "gas": 9822513, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 3934, - "op": "DUP10", - "gas": 9822510, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 3935, - "op": "SWAP3", - "gas": 9822507, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 3936, - "op": "SWAP1", - "gas": 9822504, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 3937, - "op": "SWAP2", - "gas": 9822501, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 3938, - "op": "AND", - "gas": 9822498, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 3939, - "op": "SWAP1", - "gas": 9822495, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 3940, - "op": "DUP11", - "gas": 9822492, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 3941, - "op": "SWAP1", - "gas": 9822489, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 3942, - "op": "PUSH1", - "gas": 9822486, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 3944, - "op": "ADD", - "gas": 9822483, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 3945, - "op": "PUSH2", - "gas": 9822480, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 3948, - "op": "JUMP", - "gas": 9822477, - "gasCost": 8, - "depth": 2 - }, - { - "pc": 15222, - "op": "JUMPDEST", - "gas": 9822469, - "gasCost": 1, - "depth": 2 - }, - { - "pc": 15223, - "op": "PUSH1", - "gas": 9822468, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 15225, - "op": "DUP2", - "gas": 9822465, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 15226, - "op": "MSTORE", - "gas": 9822462, - "gasCost": 6, - "depth": 2 - }, - { - "pc": 15227, - "op": "DUP4", - "gas": 9822456, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 15228, - "op": "CALLDATALOAD", - "gas": 9822453, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 15229, - "op": "PUSH1", - "gas": 9822450, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 15231, - "op": "DUP3", - "gas": 9822447, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 15232, - "op": "ADD", - "gas": 9822444, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 15233, - "op": "MSTORE", - "gas": 9822441, - "gasCost": 12, - "depth": 2 - }, - { - "pc": 15234, - "op": "PUSH1", - "gas": 9822429, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 15236, - "op": "DUP5", - "gas": 9822426, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 15237, - "op": "ADD", - "gas": 9822423, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 15238, - "op": "CALLDATALOAD", - "gas": 9822420, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 15239, - "op": "PUSH1", - "gas": 9822417, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 15241, - "op": "DUP3", - "gas": 9822414, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 15242, - "op": "ADD", - "gas": 9822411, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 15243, - "op": "MSTORE", - "gas": 9822408, - "gasCost": 6, - "depth": 2 - }, - { - "pc": 15244, - "op": "PUSH4", - "gas": 9822402, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 15249, - "op": "PUSH2", - "gas": 9822399, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 15252, - "op": "PUSH1", - "gas": 9822396, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 15254, - "op": "DUP7", - "gas": 9822393, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 15255, - "op": "ADD", - "gas": 9822390, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 15256, - "op": "PUSH2", - "gas": 9822387, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 15259, - "op": "JUMP", - "gas": 9822384, - "gasCost": 8, - "depth": 2 - }, - { - "pc": 14635, - "op": "JUMPDEST", - "gas": 9822376, - "gasCost": 1, - "depth": 2 - }, - { - "pc": 14636, - "op": "DUP1", - "gas": 9822375, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 14637, - "op": "CALLDATALOAD", - "gas": 9822372, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 14638, - "op": "PUSH4", - "gas": 9822369, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 14643, - "op": "DUP2", - "gas": 9822366, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 14644, - "op": "AND", - "gas": 9822363, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 14645, - "op": "DUP2", - "gas": 9822360, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 14646, - "op": "EQ", - "gas": 9822357, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 14647, - "op": "PUSH2", - "gas": 9822354, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 14650, - "op": "JUMPI", - "gas": 9822351, - "gasCost": 10, - "depth": 2 - }, - { - "pc": 13657, - "op": "JUMPDEST", - "gas": 9822341, - "gasCost": 1, - "depth": 2 - }, - { - "pc": 13658, - "op": "SWAP2", - "gas": 9822340, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 13659, - "op": "SWAP1", - "gas": 9822337, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 13660, - "op": "POP", - "gas": 9822334, - "gasCost": 2, - "depth": 2 - }, - { - "pc": 13661, - "op": "JUMP", - "gas": 9822332, - "gasCost": 8, - "depth": 2 - }, - { - "pc": 15260, - "op": "JUMPDEST", - "gas": 9822324, - "gasCost": 1, - "depth": 2 - }, - { - "pc": 15261, - "op": "AND", - "gas": 9822323, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 15262, - "op": "PUSH1", - "gas": 9822320, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 15264, - "op": "DUP3", - "gas": 9822317, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 15265, - "op": "ADD", - "gas": 9822314, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 15266, - "op": "MSTORE", - "gas": 9822311, - "gasCost": 6, - "depth": 2 - }, - { - "pc": 15267, - "op": "PUSH1", - "gas": 9822305, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 15269, - "op": "PUSH1", - "gas": 9822302, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 15271, - "op": "DUP6", - "gas": 9822299, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 15272, - "op": "ADD", - "gas": 9822296, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 15273, - "op": "CALLDATALOAD", - "gas": 9822293, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 15274, - "op": "PUSH1", - "gas": 9822290, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 15276, - "op": "NOT", - "gas": 9822287, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 15277, - "op": "DUP7", - "gas": 9822284, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 15278, - "op": "CALLDATASIZE", - "gas": 9822281, - "gasCost": 2, - "depth": 2 - }, - { - "pc": 15279, - "op": "SUB", - "gas": 9822279, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 15280, - "op": "ADD", - "gas": 9822276, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 15281, - "op": "DUP2", - "gas": 9822273, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 15282, - "op": "SLT", - "gas": 9822270, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 15283, - "op": "PUSH2", - "gas": 9822267, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 15286, - "op": "JUMPI", - "gas": 9822264, - "gasCost": 10, - "depth": 2 - }, - { - "pc": 15291, - "op": "JUMPDEST", - "gas": 9822254, - "gasCost": 1, - "depth": 2 - }, - { - "pc": 15292, - "op": "DUP6", - "gas": 9822253, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 15293, - "op": "ADD", - "gas": 9822250, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 15294, - "op": "DUP1", - "gas": 9822247, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 15295, - "op": "CALLDATALOAD", - "gas": 9822244, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 15296, - "op": "PUSH1", - "gas": 9822241, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 15298, - "op": "PUSH1", - "gas": 9822238, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 15300, - "op": "PUSH1", - "gas": 9822235, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 15302, - "op": "SHL", - "gas": 9822232, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 15303, - "op": "SUB", - "gas": 9822229, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 15304, - "op": "DUP2", - "gas": 9822226, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 15305, - "op": "GT", - "gas": 9822223, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 15306, - "op": "ISZERO", - "gas": 9822220, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 15307, - "op": "PUSH2", - "gas": 9822217, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 15310, - "op": "JUMPI", - "gas": 9822214, - "gasCost": 10, - "depth": 2 - }, - { - "pc": 15315, - "op": "JUMPDEST", - "gas": 9822204, - "gasCost": 1, - "depth": 2 - }, - { - "pc": 15316, - "op": "DUP1", - "gas": 9822203, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 15317, - "op": "PUSH1", - "gas": 9822200, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 15319, - "op": "SHL", - "gas": 9822197, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 15320, - "op": "CALLDATASIZE", - "gas": 9822194, - "gasCost": 2, - "depth": 2 - }, - { - "pc": 15321, - "op": "SUB", - "gas": 9822192, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 15322, - "op": "DUP8", - "gas": 9822189, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 15323, - "op": "SGT", - "gas": 9822186, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 15324, - "op": "ISZERO", - "gas": 9822183, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 15325, - "op": "PUSH2", - "gas": 9822180, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 15328, - "op": "JUMPI", - "gas": 9822177, - "gasCost": 10, - "depth": 2 - }, - { - "pc": 15333, - "op": "JUMPDEST", - "gas": 9822167, - "gasCost": 1, - "depth": 2 - }, - { - "pc": 15334, - "op": "PUSH1", - "gas": 9822166, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 15336, - "op": "PUSH1", - "gas": 9822163, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 15338, - "op": "DUP6", - "gas": 9822160, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 15339, - "op": "ADD", - "gas": 9822157, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 15340, - "op": "MSTORE", - "gas": 9822154, - "gasCost": 6, - "depth": 2 - }, - { - "pc": 15341, - "op": "PUSH2", - "gas": 9822148, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 15344, - "op": "PUSH1", - "gas": 9822145, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 15346, - "op": "DUP6", - "gas": 9822142, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 15347, - "op": "ADD", - "gas": 9822139, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 15348, - "op": "DUP3", - "gas": 9822136, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 15349, - "op": "PUSH1", - "gas": 9822133, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 15351, - "op": "DUP6", - "gas": 9822130, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 15352, - "op": "ADD", - "gas": 9822127, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 15353, - "op": "PUSH2", - "gas": 9822124, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 15356, - "op": "JUMP", - "gas": 9822121, - "gasCost": 8, - "depth": 2 - }, - { - "pc": 14655, - "op": "JUMPDEST", - "gas": 9822113, - "gasCost": 1, - "depth": 2 - }, - { - "pc": 14656, - "op": "DUP2", - "gas": 9822112, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 14657, - "op": "DUP4", - "gas": 9822109, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 14658, - "op": "MSTORE", - "gas": 9822106, - "gasCost": 6, - "depth": 2 - }, - { - "pc": 14659, - "op": "PUSH1", - "gas": 9822100, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 14661, - "op": "PUSH1", - "gas": 9822097, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 14663, - "op": "DUP1", - "gas": 9822094, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 14664, - "op": "DUP6", - "gas": 9822091, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 14665, - "op": "ADD", - "gas": 9822088, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 14666, - "op": "SWAP5", - "gas": 9822085, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 14667, - "op": "POP", - "gas": 9822082, - "gasCost": 2, - "depth": 2 - }, - { - "pc": 14668, - "op": "DUP3", - "gas": 9822080, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 14669, - "op": "PUSH1", - "gas": 9822077, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 14671, - "op": "JUMPDEST", - "gas": 9822074, - "gasCost": 1, - "depth": 2 - }, - { - "pc": 14672, - "op": "DUP6", - "gas": 9822073, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 14673, - "op": "DUP2", - "gas": 9822070, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 14674, - "op": "LT", - "gas": 9822067, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 14675, - "op": "ISZERO", - "gas": 9822064, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 14676, - "op": "PUSH2", - "gas": 9822061, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 14679, - "op": "JUMPI", - "gas": 9822058, - "gasCost": 10, - "depth": 2 - }, - { - "pc": 14680, - "op": "PUSH1", - "gas": 9822048, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 14682, - "op": "DUP1", - "gas": 9822045, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 14683, - "op": "PUSH2", - "gas": 9822042, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 14686, - "op": "DUP5", - "gas": 9822039, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 14687, - "op": "PUSH2", - "gas": 9822036, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 14690, - "op": "JUMP", - "gas": 9822033, - "gasCost": 8, - "depth": 2 - }, - { - "pc": 13640, - "op": "JUMPDEST", - "gas": 9822025, - "gasCost": 1, - "depth": 2 - }, - { - "pc": 13641, - "op": "DUP1", - "gas": 9822024, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 13642, - "op": "CALLDATALOAD", - "gas": 9822021, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 13643, - "op": "PUSH1", - "gas": 9822018, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 13645, - "op": "DUP2", - "gas": 9822015, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 13646, - "op": "AND", - "gas": 9822012, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 13647, - "op": "DUP2", - "gas": 9822009, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 13648, - "op": "EQ", - "gas": 9822006, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 13649, - "op": "PUSH2", - "gas": 9822003, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 13652, - "op": "JUMPI", - "gas": 9822000, - "gasCost": 10, - "depth": 2 - }, - { - "pc": 13657, - "op": "JUMPDEST", - "gas": 9821990, - "gasCost": 1, - "depth": 2 - }, - { - "pc": 13658, - "op": "SWAP2", - "gas": 9821989, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 13659, - "op": "SWAP1", - "gas": 9821986, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 13660, - "op": "POP", - "gas": 9821983, - "gasCost": 2, - "depth": 2 - }, - { - "pc": 13661, - "op": "JUMP", - "gas": 9821981, - "gasCost": 8, - "depth": 2 - }, - { - "pc": 14691, - "op": "JUMPDEST", - "gas": 9821973, - "gasCost": 1, - "depth": 2 - }, - { - "pc": 14692, - "op": "AND", - "gas": 9821972, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 14693, - "op": "DUP9", - "gas": 9821969, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 14694, - "op": "MSTORE", - "gas": 9821966, - "gasCost": 6, - "depth": 2 - }, - { - "pc": 14695, - "op": "DUP1", - "gas": 9821960, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 14696, - "op": "PUSH2", - "gas": 9821957, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 14699, - "op": "DUP6", - "gas": 9821954, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 14700, - "op": "DUP6", - "gas": 9821951, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 14701, - "op": "ADD", - "gas": 9821948, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 14702, - "op": "PUSH2", - "gas": 9821945, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 14705, - "op": "JUMP", - "gas": 9821942, - "gasCost": 8, - "depth": 2 - }, - { - "pc": 13640, - "op": "JUMPDEST", - "gas": 9821934, - "gasCost": 1, - "depth": 2 - }, - { - "pc": 13641, - "op": "DUP1", - "gas": 9821933, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 13642, - "op": "CALLDATALOAD", - "gas": 9821930, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 13643, - "op": "PUSH1", - "gas": 9821927, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 13645, - "op": "DUP2", - "gas": 9821924, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 13646, - "op": "AND", - "gas": 9821921, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 13647, - "op": "DUP2", - "gas": 9821918, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 13648, - "op": "EQ", - "gas": 9821915, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 13649, - "op": "PUSH2", - "gas": 9821912, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 13652, - "op": "JUMPI", - "gas": 9821909, - "gasCost": 10, - "depth": 2 - }, - { - "pc": 13657, - "op": "JUMPDEST", - "gas": 9821899, - "gasCost": 1, - "depth": 2 - }, - { - "pc": 13658, - "op": "SWAP2", - "gas": 9821898, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 13659, - "op": "SWAP1", - "gas": 9821895, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 13660, - "op": "POP", - "gas": 9821892, - "gasCost": 2, - "depth": 2 - }, - { - "pc": 13661, - "op": "JUMP", - "gas": 9821890, - "gasCost": 8, - "depth": 2 - }, - { - "pc": 14706, - "op": "JUMPDEST", - "gas": 9821882, - "gasCost": 1, - "depth": 2 - }, - { - "pc": 14707, - "op": "AND", - "gas": 9821881, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 14708, - "op": "DUP5", - "gas": 9821878, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 14709, - "op": "DUP10", - "gas": 9821875, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 14710, - "op": "ADD", - "gas": 9821872, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 14711, - "op": "MSTORE", - "gas": 9821869, - "gasCost": 6, - "depth": 2 - }, - { - "pc": 14712, - "op": "PUSH1", - "gas": 9821863, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 14714, - "op": "DUP2", - "gas": 9821860, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 14715, - "op": "PUSH2", - "gas": 9821857, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 14718, - "op": "DUP3", - "gas": 9821854, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 14719, - "op": "DUP7", - "gas": 9821851, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 14720, - "op": "ADD", - "gas": 9821848, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 14721, - "op": "PUSH2", - "gas": 9821845, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 14724, - "op": "JUMP", - "gas": 9821842, - "gasCost": 8, - "depth": 2 - }, - { - "pc": 13640, - "op": "JUMPDEST", - "gas": 9821834, - "gasCost": 1, - "depth": 2 - }, - { - "pc": 13641, - "op": "DUP1", - "gas": 9821833, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 13642, - "op": "CALLDATALOAD", - "gas": 9821830, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 13643, - "op": "PUSH1", - "gas": 9821827, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 13645, - "op": "DUP2", - "gas": 9821824, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 13646, - "op": "AND", - "gas": 9821821, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 13647, - "op": "DUP2", - "gas": 9821818, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 13648, - "op": "EQ", - "gas": 9821815, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 13649, - "op": "PUSH2", - "gas": 9821812, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 13652, - "op": "JUMPI", - "gas": 9821809, - "gasCost": 10, - "depth": 2 - }, - { - "pc": 13657, - "op": "JUMPDEST", - "gas": 9821799, - "gasCost": 1, - "depth": 2 - }, - { - "pc": 13658, - "op": "SWAP2", - "gas": 9821798, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 13659, - "op": "SWAP1", - "gas": 9821795, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 13660, - "op": "POP", - "gas": 9821792, - "gasCost": 2, - "depth": 2 - }, - { - "pc": 13661, - "op": "JUMP", - "gas": 9821790, - "gasCost": 8, - "depth": 2 - }, - { - "pc": 14725, - "op": "JUMPDEST", - "gas": 9821782, - "gasCost": 1, - "depth": 2 - }, - { - "pc": 14726, - "op": "AND", - "gas": 9821781, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 14727, - "op": "SWAP1", - "gas": 9821778, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 14728, - "op": "DUP10", - "gas": 9821775, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 14729, - "op": "ADD", - "gas": 9821772, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 14730, - "op": "MSTORE", - "gas": 9821769, - "gasCost": 6, - "depth": 2 - }, - { - "pc": 14731, - "op": "POP", - "gas": 9821763, - "gasCost": 2, - "depth": 2 - }, - { - "pc": 14732, - "op": "PUSH1", - "gas": 9821761, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 14734, - "op": "PUSH4", - "gas": 9821758, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 14739, - "op": "PUSH2", - "gas": 9821755, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 14742, - "op": "DUP5", - "gas": 9821752, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 14743, - "op": "DUP4", - "gas": 9821749, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 14744, - "op": "ADD", - "gas": 9821746, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 14745, - "op": "PUSH2", - "gas": 9821743, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 14748, - "op": "JUMP", - "gas": 9821740, - "gasCost": 8, - "depth": 2 - }, - { - "pc": 14635, - "op": "JUMPDEST", - "gas": 9821732, - "gasCost": 1, - "depth": 2 - }, - { - "pc": 14636, - "op": "DUP1", - "gas": 9821731, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 14637, - "op": "CALLDATALOAD", - "gas": 9821728, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 14638, - "op": "PUSH4", - "gas": 9821725, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 14643, - "op": "DUP2", - "gas": 9821722, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 14644, - "op": "AND", - "gas": 9821719, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 14645, - "op": "DUP2", - "gas": 9821716, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 14646, - "op": "EQ", - "gas": 9821713, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 14647, - "op": "PUSH2", - "gas": 9821710, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 14650, - "op": "JUMPI", - "gas": 9821707, - "gasCost": 10, - "depth": 2 - }, - { - "pc": 13657, - "op": "JUMPDEST", - "gas": 9821697, - "gasCost": 1, - "depth": 2 - }, - { - "pc": 13658, - "op": "SWAP2", - "gas": 9821696, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 13659, - "op": "SWAP1", - "gas": 9821693, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 13660, - "op": "POP", - "gas": 9821690, - "gasCost": 2, - "depth": 2 - }, - { - "pc": 13661, - "op": "JUMP", - "gas": 9821688, - "gasCost": 8, - "depth": 2 - }, - { - "pc": 14749, - "op": "JUMPDEST", - "gas": 9821680, - "gasCost": 1, - "depth": 2 - }, - { - "pc": 14750, - "op": "AND", - "gas": 9821679, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 14751, - "op": "SWAP1", - "gas": 9821676, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 14752, - "op": "DUP9", - "gas": 9821673, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 14753, - "op": "ADD", - "gas": 9821670, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 14754, - "op": "MSTORE", - "gas": 9821667, - "gasCost": 6, - "depth": 2 - }, - { - "pc": 14755, - "op": "PUSH1", - "gas": 9821661, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 14757, - "op": "SWAP7", - "gas": 9821658, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 14758, - "op": "DUP8", - "gas": 9821655, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 14759, - "op": "ADD", - "gas": 9821652, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 14760, - "op": "SWAP7", - "gas": 9821649, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 14761, - "op": "SWAP2", - "gas": 9821646, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 14762, - "op": "SWAP1", - "gas": 9821643, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 14763, - "op": "SWAP2", - "gas": 9821640, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 14764, - "op": "ADD", - "gas": 9821637, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 14765, - "op": "SWAP1", - "gas": 9821634, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 14766, - "op": "PUSH1", - "gas": 9821631, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 14768, - "op": "ADD", - "gas": 9821628, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 14769, - "op": "PUSH2", - "gas": 9821625, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 14772, - "op": "JUMP", - "gas": 9821622, - "gasCost": 8, - "depth": 2 - }, - { - "pc": 14671, - "op": "JUMPDEST", - "gas": 9821614, - "gasCost": 1, - "depth": 2 - }, - { - "pc": 14672, - "op": "DUP6", - "gas": 9821613, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 14673, - "op": "DUP2", - "gas": 9821610, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 14674, - "op": "LT", - "gas": 9821607, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 14675, - "op": "ISZERO", - "gas": 9821604, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 14676, - "op": "PUSH2", - "gas": 9821601, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 14679, - "op": "JUMPI", - "gas": 9821598, - "gasCost": 10, - "depth": 2 - }, - { - "pc": 14773, - "op": "JUMPDEST", - "gas": 9821588, - "gasCost": 1, - "depth": 2 - }, - { - "pc": 14774, - "op": "POP", - "gas": 9821587, - "gasCost": 2, - "depth": 2 - }, - { - "pc": 14775, - "op": "SWAP5", - "gas": 9821585, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 14776, - "op": "SWAP6", - "gas": 9821582, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 14777, - "op": "SWAP5", - "gas": 9821579, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 14778, - "op": "POP", - "gas": 9821576, - "gasCost": 2, - "depth": 2 - }, - { - "pc": 14779, - "op": "POP", - "gas": 9821574, - "gasCost": 2, - "depth": 2 - }, - { - "pc": 14780, - "op": "POP", - "gas": 9821572, - "gasCost": 2, - "depth": 2 - }, - { - "pc": 14781, - "op": "POP", - "gas": 9821570, - "gasCost": 2, - "depth": 2 - }, - { - "pc": 14782, - "op": "POP", - "gas": 9821568, - "gasCost": 2, - "depth": 2 - }, - { - "pc": 14783, - "op": "JUMP", - "gas": 9821566, - "gasCost": 8, - "depth": 2 - }, - { - "pc": 15357, - "op": "JUMPDEST", - "gas": 9821558, - "gasCost": 1, - "depth": 2 - }, - { - "pc": 15358, - "op": "SWAP2", - "gas": 9821557, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 15359, - "op": "POP", - "gas": 9821554, - "gasCost": 2, - "depth": 2 - }, - { - "pc": 15360, - "op": "POP", - "gas": 9821552, - "gasCost": 2, - "depth": 2 - }, - { - "pc": 15361, - "op": "PUSH2", - "gas": 9821550, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 15364, - "op": "PUSH1", - "gas": 9821547, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 15366, - "op": "DUP5", - "gas": 9821544, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 15367, - "op": "ADD", - "gas": 9821541, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 15368, - "op": "DUP7", - "gas": 9821538, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 15369, - "op": "PUSH1", - "gas": 9821535, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 15371, - "op": "PUSH1", - "gas": 9821532, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 15373, - "op": "PUSH1", - "gas": 9821529, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 15375, - "op": "SHL", - "gas": 9821526, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 15376, - "op": "SUB", - "gas": 9821523, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 15377, - "op": "AND", - "gas": 9821520, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 15378, - "op": "SWAP1", - "gas": 9821517, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 15379, - "op": "MSTORE", - "gas": 9821514, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 15380, - "op": "JUMP", - "gas": 9821511, - "gasCost": 8, - "depth": 2 - }, - { - "pc": 15381, - "op": "JUMPDEST", - "gas": 9821503, - "gasCost": 1, - "depth": 2 - }, - { - "pc": 15382, - "op": "DUP3", - "gas": 9821502, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 15383, - "op": "DUP2", - "gas": 9821499, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 15384, - "op": "SUB", - "gas": 9821496, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 15385, - "op": "PUSH1", - "gas": 9821493, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 15387, - "op": "DUP5", - "gas": 9821490, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 15388, - "op": "ADD", - "gas": 9821487, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 15389, - "op": "MSTORE", - "gas": 9821484, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 15390, - "op": "PUSH2", - "gas": 9821481, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 15393, - "op": "DUP2", - "gas": 9821478, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 15394, - "op": "DUP6", - "gas": 9821475, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 15395, - "op": "PUSH2", - "gas": 9821472, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 15398, - "op": "JUMP", - "gas": 9821469, - "gasCost": 8, - "depth": 2 - }, - { - "pc": 14894, - "op": "JUMPDEST", - "gas": 9821461, - "gasCost": 1, - "depth": 2 - }, - { - "pc": 14895, - "op": "PUSH1", - "gas": 9821460, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 14897, - "op": "PUSH4", - "gas": 9821457, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 14902, - "op": "DUP1", - "gas": 9821454, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 14903, - "op": "PUSH2", - "gas": 9821451, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 14906, - "op": "DUP5", - "gas": 9821448, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 14907, - "op": "PUSH2", - "gas": 9821445, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 14910, - "op": "JUMP", - "gas": 9821442, - "gasCost": 8, - "depth": 2 - }, - { - "pc": 14635, - "op": "JUMPDEST", - "gas": 9821434, - "gasCost": 1, - "depth": 2 - }, - { - "pc": 14636, - "op": "DUP1", - "gas": 9821433, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 14637, - "op": "CALLDATALOAD", - "gas": 9821430, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 14638, - "op": "PUSH4", - "gas": 9821427, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 14643, - "op": "DUP2", - "gas": 9821424, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 14644, - "op": "AND", - "gas": 9821421, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 14645, - "op": "DUP2", - "gas": 9821418, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 14646, - "op": "EQ", - "gas": 9821415, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 14647, - "op": "PUSH2", - "gas": 9821412, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 14650, - "op": "JUMPI", - "gas": 9821409, - "gasCost": 10, - "depth": 2 - }, - { - "pc": 13657, - "op": "JUMPDEST", - "gas": 9821399, - "gasCost": 1, - "depth": 2 - }, - { - "pc": 13658, - "op": "SWAP2", - "gas": 9821398, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 13659, - "op": "SWAP1", - "gas": 9821395, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 13660, - "op": "POP", - "gas": 9821392, - "gasCost": 2, - "depth": 2 - }, - { - "pc": 13661, - "op": "JUMP", - "gas": 9821390, - "gasCost": 8, - "depth": 2 - }, - { - "pc": 14911, - "op": "JUMPDEST", - "gas": 9821382, - "gasCost": 1, - "depth": 2 - }, - { - "pc": 14912, - "op": "AND", - "gas": 9821381, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 14913, - "op": "DUP5", - "gas": 9821378, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 14914, - "op": "MSTORE", - "gas": 9821375, - "gasCost": 6, - "depth": 2 - }, - { - "pc": 14915, - "op": "DUP1", - "gas": 9821369, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 14916, - "op": "PUSH2", - "gas": 9821366, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 14919, - "op": "PUSH1", - "gas": 9821363, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 14921, - "op": "DUP6", - "gas": 9821360, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 14922, - "op": "ADD", - "gas": 9821357, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 14923, - "op": "PUSH2", - "gas": 9821354, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 14926, - "op": "JUMP", - "gas": 9821351, - "gasCost": 8, - "depth": 2 - }, - { - "pc": 14635, - "op": "JUMPDEST", - "gas": 9821343, - "gasCost": 1, - "depth": 2 - }, - { - "pc": 14636, - "op": "DUP1", - "gas": 9821342, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 14637, - "op": "CALLDATALOAD", - "gas": 9821339, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 14638, - "op": "PUSH4", - "gas": 9821336, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 14643, - "op": "DUP2", - "gas": 9821333, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 14644, - "op": "AND", - "gas": 9821330, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 14645, - "op": "DUP2", - "gas": 9821327, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 14646, - "op": "EQ", - "gas": 9821324, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 14647, - "op": "PUSH2", - "gas": 9821321, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 14650, - "op": "JUMPI", - "gas": 9821318, - "gasCost": 10, - "depth": 2 - }, - { - "pc": 13657, - "op": "JUMPDEST", - "gas": 9821308, - "gasCost": 1, - "depth": 2 - }, - { - "pc": 13658, - "op": "SWAP2", - "gas": 9821307, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 13659, - "op": "SWAP1", - "gas": 9821304, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 13660, - "op": "POP", - "gas": 9821301, - "gasCost": 2, - "depth": 2 - }, - { - "pc": 13661, - "op": "JUMP", - "gas": 9821299, - "gasCost": 8, - "depth": 2 - }, - { - "pc": 14927, - "op": "JUMPDEST", - "gas": 9821291, - "gasCost": 1, - "depth": 2 - }, - { - "pc": 14928, - "op": "AND", - "gas": 9821290, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 14929, - "op": "PUSH1", - "gas": 9821287, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 14931, - "op": "DUP6", - "gas": 9821284, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 14932, - "op": "ADD", - "gas": 9821281, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 14933, - "op": "MSTORE", - "gas": 9821278, - "gasCost": 6, - "depth": 2 - }, - { - "pc": 14934, - "op": "PUSH1", - "gas": 9821272, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 14936, - "op": "DUP4", - "gas": 9821269, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 14937, - "op": "ADD", - "gas": 9821266, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 14938, - "op": "CALLDATALOAD", - "gas": 9821263, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 14939, - "op": "PUSH1", - "gas": 9821260, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 14941, - "op": "NOT", - "gas": 9821257, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 14942, - "op": "DUP5", - "gas": 9821254, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 14943, - "op": "CALLDATASIZE", - "gas": 9821251, - "gasCost": 2, - "depth": 2 - }, - { - "pc": 14944, - "op": "SUB", - "gas": 9821249, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 14945, - "op": "ADD", - "gas": 9821246, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 14946, - "op": "DUP2", - "gas": 9821243, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 14947, - "op": "SLT", - "gas": 9821240, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 14948, - "op": "PUSH2", - "gas": 9821237, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 14951, - "op": "JUMPI", - "gas": 9821234, - "gasCost": 10, - "depth": 2 - }, - { - "pc": 14956, - "op": "JUMPDEST", - "gas": 9821224, - "gasCost": 1, - "depth": 2 - }, - { - "pc": 14957, - "op": "PUSH1", - "gas": 9821223, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 14959, - "op": "PUSH1", - "gas": 9821220, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 14961, - "op": "DUP7", - "gas": 9821217, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 14962, - "op": "ADD", - "gas": 9821214, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 14963, - "op": "MSTORE", - "gas": 9821211, - "gasCost": 6, - "depth": 2 - }, - { - "pc": 14964, - "op": "DUP4", - "gas": 9821205, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 14965, - "op": "ADD", - "gas": 9821202, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 14966, - "op": "DUP1", - "gas": 9821199, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 14967, - "op": "CALLDATALOAD", - "gas": 9821196, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 14968, - "op": "CALLDATASIZE", - "gas": 9821193, - "gasCost": 2, - "depth": 2 - }, - { - "pc": 14969, - "op": "DUP3", - "gas": 9821191, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 14970, - "op": "SWAP1", - "gas": 9821188, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 14971, - "op": "SUB", - "gas": 9821185, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 14972, - "op": "PUSH1", - "gas": 9821182, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 14974, - "op": "NOT", - "gas": 9821179, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 14975, - "op": "ADD", - "gas": 9821176, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 14976, - "op": "DUP2", - "gas": 9821173, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 14977, - "op": "SLT", - "gas": 9821170, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 14978, - "op": "PUSH2", - "gas": 9821167, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 14981, - "op": "JUMPI", - "gas": 9821164, - "gasCost": 10, - "depth": 2 - }, - { - "pc": 14986, - "op": "JUMPDEST", - "gas": 9821154, - "gasCost": 1, - "depth": 2 - }, - { - "pc": 14987, - "op": "PUSH1", - "gas": 9821153, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 14989, - "op": "PUSH1", - "gas": 9821150, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 14991, - "op": "DUP8", - "gas": 9821147, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 14992, - "op": "ADD", - "gas": 9821144, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 14993, - "op": "MSTORE", - "gas": 9821141, - "gasCost": 13, - "depth": 2 - }, - { - "pc": 14994, - "op": "DUP2", - "gas": 9821128, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 14995, - "op": "ADD", - "gas": 9821125, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 14996, - "op": "DUP1", - "gas": 9821122, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 14997, - "op": "CALLDATALOAD", - "gas": 9821119, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 14998, - "op": "PUSH2", - "gas": 9821116, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 15001, - "op": "DUP8", - "gas": 9821113, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 15002, - "op": "ADD", - "gas": 9821110, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 15003, - "op": "MSTORE", - "gas": 9821107, - "gasCost": 12, - "depth": 2 - }, - { - "pc": 15004, - "op": "PUSH2", - "gas": 9821095, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 15007, - "op": "PUSH1", - "gas": 9821092, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 15009, - "op": "DUP3", - "gas": 9821089, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 15010, - "op": "ADD", - "gas": 9821086, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 15011, - "op": "DUP3", - "gas": 9821083, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 15012, - "op": "PUSH2", - "gas": 9821080, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 15015, - "op": "JUMP", - "gas": 9821077, - "gasCost": 8, - "depth": 2 - }, - { - "pc": 14784, - "op": "JUMPDEST", - "gas": 9821069, - "gasCost": 1, - "depth": 2 - }, - { - "pc": 14785, - "op": "PUSH1", - "gas": 9821068, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 14787, - "op": "DUP1", - "gas": 9821065, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 14788, - "op": "DUP4", - "gas": 9821062, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 14789, - "op": "CALLDATALOAD", - "gas": 9821059, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 14790, - "op": "PUSH1", - "gas": 9821056, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 14792, - "op": "NOT", - "gas": 9821053, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 14793, - "op": "DUP5", - "gas": 9821050, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 14794, - "op": "CALLDATASIZE", - "gas": 9821047, - "gasCost": 2, - "depth": 2 - }, - { - "pc": 14795, - "op": "SUB", - "gas": 9821045, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 14796, - "op": "ADD", - "gas": 9821042, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 14797, - "op": "DUP2", - "gas": 9821039, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 14798, - "op": "SLT", - "gas": 9821036, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 14799, - "op": "PUSH2", - "gas": 9821033, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 14802, - "op": "JUMPI", - "gas": 9821030, - "gasCost": 10, - "depth": 2 - }, - { - "pc": 14807, - "op": "JUMPDEST", - "gas": 9821020, - "gasCost": 1, - "depth": 2 - }, - { - "pc": 14808, - "op": "DUP4", - "gas": 9821019, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 14809, - "op": "ADD", - "gas": 9821016, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 14810, - "op": "PUSH1", - "gas": 9821013, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 14812, - "op": "DUP2", - "gas": 9821010, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 14813, - "op": "ADD", - "gas": 9821007, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 14814, - "op": "SWAP3", - "gas": 9821004, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 14815, - "op": "POP", - "gas": 9821001, - "gasCost": 2, - "depth": 2 - }, - { - "pc": 14816, - "op": "CALLDATALOAD", - "gas": 9820999, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 14817, - "op": "SWAP1", - "gas": 9820996, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 14818, - "op": "POP", - "gas": 9820993, - "gasCost": 2, - "depth": 2 - }, - { - "pc": 14819, - "op": "PUSH1", - "gas": 9820991, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 14821, - "op": "PUSH1", - "gas": 9820988, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 14823, - "op": "PUSH1", - "gas": 9820985, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 14825, - "op": "SHL", - "gas": 9820982, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 14826, - "op": "SUB", - "gas": 9820979, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 14827, - "op": "DUP2", - "gas": 9820976, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 14828, - "op": "GT", - "gas": 9820973, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 14829, - "op": "ISZERO", - "gas": 9820970, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 14830, - "op": "PUSH2", - "gas": 9820967, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 14833, - "op": "JUMPI", - "gas": 9820964, - "gasCost": 10, - "depth": 2 - }, - { - "pc": 14838, - "op": "JUMPDEST", - "gas": 9820954, - "gasCost": 1, - "depth": 2 - }, - { - "pc": 14839, - "op": "DUP1", - "gas": 9820953, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 14840, - "op": "CALLDATASIZE", - "gas": 9820950, - "gasCost": 2, - "depth": 2 - }, - { - "pc": 14841, - "op": "SUB", - "gas": 9820948, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 14842, - "op": "DUP4", - "gas": 9820945, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 14843, - "op": "SGT", - "gas": 9820942, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 14844, - "op": "ISZERO", - "gas": 9820939, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 14845, - "op": "PUSH2", - "gas": 9820936, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 14848, - "op": "JUMPI", - "gas": 9820933, - "gasCost": 10, - "depth": 2 - }, - { - "pc": 13039, - "op": "JUMPDEST", - "gas": 9820923, - "gasCost": 1, - "depth": 2 - }, - { - "pc": 13040, - "op": "SWAP3", - "gas": 9820922, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 13041, - "op": "POP", - "gas": 9820919, - "gasCost": 2, - "depth": 2 - }, - { - "pc": 13042, - "op": "SWAP3", - "gas": 9820917, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 13043, - "op": "SWAP1", - "gas": 9820914, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 13044, - "op": "POP", - "gas": 9820911, - "gasCost": 2, - "depth": 2 - }, - { - "pc": 13045, - "op": "JUMP", - "gas": 9820909, - "gasCost": 8, - "depth": 2 - }, - { - "pc": 15016, - "op": "JUMPDEST", - "gas": 9820901, - "gasCost": 1, - "depth": 2 - }, - { - "pc": 15017, - "op": "PUSH1", - "gas": 9820900, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 15019, - "op": "PUSH2", - "gas": 9820897, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 15022, - "op": "DUP10", - "gas": 9820894, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 15023, - "op": "ADD", - "gas": 9820891, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 15024, - "op": "MSTORE", - "gas": 9820888, - "gasCost": 6, - "depth": 2 - }, - { - "pc": 15025, - "op": "PUSH2", - "gas": 9820882, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 15028, - "op": "PUSH2", - "gas": 9820879, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 15031, - "op": "DUP10", - "gas": 9820876, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 15032, - "op": "ADD", - "gas": 9820873, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 15033, - "op": "DUP3", - "gas": 9820870, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 15034, - "op": "DUP5", - "gas": 9820867, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 15035, - "op": "PUSH2", - "gas": 9820864, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 15038, - "op": "JUMP", - "gas": 9820861, - "gasCost": 8, - "depth": 2 - }, - { - "pc": 14853, - "op": "JUMPDEST", - "gas": 9820853, - "gasCost": 1, - "depth": 2 - }, - { - "pc": 14854, - "op": "DUP2", - "gas": 9820852, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 14855, - "op": "DUP4", - "gas": 9820849, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 14856, - "op": "MSTORE", - "gas": 9820846, - "gasCost": 12, - "depth": 2 - }, - { - "pc": 14857, - "op": "DUP2", - "gas": 9820834, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 14858, - "op": "DUP2", - "gas": 9820831, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 14859, - "op": "PUSH1", - "gas": 9820828, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 14861, - "op": "DUP6", - "gas": 9820825, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 14862, - "op": "ADD", - "gas": 9820822, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 14863, - "op": "CALLDATACOPY", - "gas": 9820819, - "gasCost": 6, - "depth": 2 - }, - { - "pc": 14864, - "op": "POP", - "gas": 9820813, - "gasCost": 2, - "depth": 2 - }, - { - "pc": 14865, - "op": "PUSH1", - "gas": 9820811, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 14867, - "op": "DUP3", - "gas": 9820808, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 14868, - "op": "DUP3", - "gas": 9820805, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 14869, - "op": "ADD", - "gas": 9820802, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 14870, - "op": "PUSH1", - "gas": 9820799, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 14872, - "op": "SWAP1", - "gas": 9820796, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 14873, - "op": "DUP2", - "gas": 9820793, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 14874, - "op": "ADD", - "gas": 9820790, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 14875, - "op": "SWAP2", - "gas": 9820787, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 14876, - "op": "SWAP1", - "gas": 9820784, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 14877, - "op": "SWAP2", - "gas": 9820781, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 14878, - "op": "MSTORE", - "gas": 9820778, - "gasCost": 6, - "depth": 2 - }, - { - "pc": 14879, - "op": "PUSH1", - "gas": 9820772, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 14881, - "op": "SWAP1", - "gas": 9820769, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 14882, - "op": "SWAP2", - "gas": 9820766, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 14883, - "op": "ADD", - "gas": 9820763, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 14884, - "op": "PUSH1", - "gas": 9820760, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 14886, - "op": "NOT", - "gas": 9820757, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 14887, - "op": "AND", - "gas": 9820754, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 14888, - "op": "SWAP1", - "gas": 9820751, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 14889, - "op": "SWAP2", - "gas": 9820748, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 14890, - "op": "ADD", - "gas": 9820745, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 14891, - "op": "ADD", - "gas": 9820742, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 14892, - "op": "SWAP1", - "gas": 9820739, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 14893, - "op": "JUMP", - "gas": 9820736, - "gasCost": 8, - "depth": 2 - }, - { - "pc": 15039, - "op": "JUMPDEST", - "gas": 9820728, - "gasCost": 1, - "depth": 2 - }, - { - "pc": 15040, - "op": "SWAP2", - "gas": 9820727, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 15041, - "op": "POP", - "gas": 9820724, - "gasCost": 2, - "depth": 2 - }, - { - "pc": 15042, - "op": "POP", - "gas": 9820722, - "gasCost": 2, - "depth": 2 - }, - { - "pc": 15043, - "op": "PUSH2", - "gas": 9820720, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 15046, - "op": "PUSH1", - "gas": 9820717, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 15048, - "op": "DUP4", - "gas": 9820714, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 15049, - "op": "ADD", - "gas": 9820711, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 15050, - "op": "DUP4", - "gas": 9820708, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 15051, - "op": "PUSH2", - "gas": 9820705, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 15054, - "op": "JUMP", - "gas": 9820702, - "gasCost": 8, - "depth": 2 - }, - { - "pc": 14784, - "op": "JUMPDEST", - "gas": 9820694, - "gasCost": 1, - "depth": 2 - }, - { - "pc": 14785, - "op": "PUSH1", - "gas": 9820693, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 14787, - "op": "DUP1", - "gas": 9820690, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 14788, - "op": "DUP4", - "gas": 9820687, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 14789, - "op": "CALLDATALOAD", - "gas": 9820684, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 14790, - "op": "PUSH1", - "gas": 9820681, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 14792, - "op": "NOT", - "gas": 9820678, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 14793, - "op": "DUP5", - "gas": 9820675, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 14794, - "op": "CALLDATASIZE", - "gas": 9820672, - "gasCost": 2, - "depth": 2 - }, - { - "pc": 14795, - "op": "SUB", - "gas": 9820670, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 14796, - "op": "ADD", - "gas": 9820667, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 14797, - "op": "DUP2", - "gas": 9820664, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 14798, - "op": "SLT", - "gas": 9820661, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 14799, - "op": "PUSH2", - "gas": 9820658, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 14802, - "op": "JUMPI", - "gas": 9820655, - "gasCost": 10, - "depth": 2 - }, - { - "pc": 14807, - "op": "JUMPDEST", - "gas": 9820645, - "gasCost": 1, - "depth": 2 - }, - { - "pc": 14808, - "op": "DUP4", - "gas": 9820644, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 14809, - "op": "ADD", - "gas": 9820641, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 14810, - "op": "PUSH1", - "gas": 9820638, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 14812, - "op": "DUP2", - "gas": 9820635, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 14813, - "op": "ADD", - "gas": 9820632, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 14814, - "op": "SWAP3", - "gas": 9820629, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 14815, - "op": "POP", - "gas": 9820626, - "gasCost": 2, - "depth": 2 - }, - { - "pc": 14816, - "op": "CALLDATALOAD", - "gas": 9820624, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 14817, - "op": "SWAP1", - "gas": 9820621, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 14818, - "op": "POP", - "gas": 9820618, - "gasCost": 2, - "depth": 2 - }, - { - "pc": 14819, - "op": "PUSH1", - "gas": 9820616, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 14821, - "op": "PUSH1", - "gas": 9820613, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 14823, - "op": "PUSH1", - "gas": 9820610, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 14825, - "op": "SHL", - "gas": 9820607, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 14826, - "op": "SUB", - "gas": 9820604, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 14827, - "op": "DUP2", - "gas": 9820601, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 14828, - "op": "GT", - "gas": 9820598, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 14829, - "op": "ISZERO", - "gas": 9820595, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 14830, - "op": "PUSH2", - "gas": 9820592, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 14833, - "op": "JUMPI", - "gas": 9820589, - "gasCost": 10, - "depth": 2 - }, - { - "pc": 14838, - "op": "JUMPDEST", - "gas": 9820579, - "gasCost": 1, - "depth": 2 - }, - { - "pc": 14839, - "op": "DUP1", - "gas": 9820578, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 14840, - "op": "CALLDATASIZE", - "gas": 9820575, - "gasCost": 2, - "depth": 2 - }, - { - "pc": 14841, - "op": "SUB", - "gas": 9820573, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 14842, - "op": "DUP4", - "gas": 9820570, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 14843, - "op": "SGT", - "gas": 9820567, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 14844, - "op": "ISZERO", - "gas": 9820564, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 14845, - "op": "PUSH2", - "gas": 9820561, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 14848, - "op": "JUMPI", - "gas": 9820558, - "gasCost": 10, - "depth": 2 - }, - { - "pc": 13039, - "op": "JUMPDEST", - "gas": 9820548, - "gasCost": 1, - "depth": 2 - }, - { - "pc": 13040, - "op": "SWAP3", - "gas": 9820547, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 13041, - "op": "POP", - "gas": 9820544, - "gasCost": 2, - "depth": 2 - }, - { - "pc": 13042, - "op": "SWAP3", - "gas": 9820542, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 13043, - "op": "SWAP1", - "gas": 9820539, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 13044, - "op": "POP", - "gas": 9820536, - "gasCost": 2, - "depth": 2 - }, - { - "pc": 13045, - "op": "JUMP", - "gas": 9820534, - "gasCost": 8, - "depth": 2 - }, - { - "pc": 15055, - "op": "JUMPDEST", - "gas": 9820526, - "gasCost": 1, - "depth": 2 - }, - { - "pc": 15056, - "op": "DUP9", - "gas": 9820525, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 15057, - "op": "DUP4", - "gas": 9820522, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 15058, - "op": "SUB", - "gas": 9820519, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 15059, - "op": "PUSH1", - "gas": 9820516, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 15061, - "op": "NOT", - "gas": 9820513, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 15062, - "op": "ADD", - "gas": 9820510, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 15063, - "op": "PUSH2", - "gas": 9820507, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 15066, - "op": "DUP11", - "gas": 9820504, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 15067, - "op": "ADD", - "gas": 9820501, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 15068, - "op": "MSTORE", - "gas": 9820498, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 15069, - "op": "PUSH2", - "gas": 9820495, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 15072, - "op": "DUP4", - "gas": 9820492, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 15073, - "op": "DUP3", - "gas": 9820489, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 15074, - "op": "DUP5", - "gas": 9820486, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 15075, - "op": "PUSH2", - "gas": 9820483, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 15078, - "op": "JUMP", - "gas": 9820480, - "gasCost": 8, - "depth": 2 - }, - { - "pc": 14853, - "op": "JUMPDEST", - "gas": 9820472, - "gasCost": 1, - "depth": 2 - }, - { - "pc": 14854, - "op": "DUP2", - "gas": 9820471, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 14855, - "op": "DUP4", - "gas": 9820468, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 14856, - "op": "MSTORE", - "gas": 9820465, - "gasCost": 7, - "depth": 2 - }, - { - "pc": 14857, - "op": "DUP2", - "gas": 9820458, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 14858, - "op": "DUP2", - "gas": 9820455, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 14859, - "op": "PUSH1", - "gas": 9820452, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 14861, - "op": "DUP6", - "gas": 9820449, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 14862, - "op": "ADD", - "gas": 9820446, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 14863, - "op": "CALLDATACOPY", - "gas": 9820443, - "gasCost": 6, - "depth": 2 - }, - { - "pc": 14864, - "op": "POP", - "gas": 9820437, - "gasCost": 2, - "depth": 2 - }, - { - "pc": 14865, - "op": "PUSH1", - "gas": 9820435, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 14867, - "op": "DUP3", - "gas": 9820432, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 14868, - "op": "DUP3", - "gas": 9820429, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 14869, - "op": "ADD", - "gas": 9820426, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 14870, - "op": "PUSH1", - "gas": 9820423, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 14872, - "op": "SWAP1", - "gas": 9820420, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 14873, - "op": "DUP2", - "gas": 9820417, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 14874, - "op": "ADD", - "gas": 9820414, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 14875, - "op": "SWAP2", - "gas": 9820411, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 14876, - "op": "SWAP1", - "gas": 9820408, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 14877, - "op": "SWAP2", - "gas": 9820405, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 14878, - "op": "MSTORE", - "gas": 9820402, - "gasCost": 6, - "depth": 2 - }, - { - "pc": 14879, - "op": "PUSH1", - "gas": 9820396, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 14881, - "op": "SWAP1", - "gas": 9820393, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 14882, - "op": "SWAP2", - "gas": 9820390, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 14883, - "op": "ADD", - "gas": 9820387, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 14884, - "op": "PUSH1", - "gas": 9820384, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 14886, - "op": "NOT", - "gas": 9820381, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 14887, - "op": "AND", - "gas": 9820378, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 14888, - "op": "SWAP1", - "gas": 9820375, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 14889, - "op": "SWAP2", - "gas": 9820372, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 14890, - "op": "ADD", - "gas": 9820369, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 14891, - "op": "ADD", - "gas": 9820366, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 14892, - "op": "SWAP1", - "gas": 9820363, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 14893, - "op": "JUMP", - "gas": 9820360, - "gasCost": 8, - "depth": 2 - }, - { - "pc": 15079, - "op": "JUMPDEST", - "gas": 9820352, - "gasCost": 1, - "depth": 2 - }, - { - "pc": 15080, - "op": "SWAP3", - "gas": 9820351, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 15081, - "op": "POP", - "gas": 9820348, - "gasCost": 2, - "depth": 2 - }, - { - "pc": 15082, - "op": "POP", - "gas": 9820346, - "gasCost": 2, - "depth": 2 - }, - { - "pc": 15083, - "op": "POP", - "gas": 9820344, - "gasCost": 2, - "depth": 2 - }, - { - "pc": 15084, - "op": "DUP4", - "gas": 9820342, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 15085, - "op": "PUSH2", - "gas": 9820339, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 15088, - "op": "PUSH1", - "gas": 9820336, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 15090, - "op": "DUP5", - "gas": 9820333, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 15091, - "op": "ADD", - "gas": 9820330, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 15092, - "op": "PUSH2", - "gas": 9820327, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 15095, - "op": "JUMP", - "gas": 9820324, - "gasCost": 8, - "depth": 2 - }, - { - "pc": 14635, - "op": "JUMPDEST", - "gas": 9820316, - "gasCost": 1, - "depth": 2 - }, - { - "pc": 14636, - "op": "DUP1", - "gas": 9820315, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 14637, - "op": "CALLDATALOAD", - "gas": 9820312, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 14638, - "op": "PUSH4", - "gas": 9820309, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 14643, - "op": "DUP2", - "gas": 9820306, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 14644, - "op": "AND", - "gas": 9820303, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 14645, - "op": "DUP2", - "gas": 9820300, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 14646, - "op": "EQ", - "gas": 9820297, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 14647, - "op": "PUSH2", - "gas": 9820294, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 14650, - "op": "JUMPI", - "gas": 9820291, - "gasCost": 10, - "depth": 2 - }, - { - "pc": 13657, - "op": "JUMPDEST", - "gas": 9820281, - "gasCost": 1, - "depth": 2 - }, - { - "pc": 13658, - "op": "SWAP2", - "gas": 9820280, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 13659, - "op": "SWAP1", - "gas": 9820277, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 13660, - "op": "POP", - "gas": 9820274, - "gasCost": 2, - "depth": 2 - }, - { - "pc": 13661, - "op": "JUMP", - "gas": 9820272, - "gasCost": 8, - "depth": 2 - }, - { - "pc": 15096, - "op": "JUMPDEST", - "gas": 9820264, - "gasCost": 1, - "depth": 2 - }, - { - "pc": 15097, - "op": "AND", - "gas": 9820263, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 15098, - "op": "PUSH2", - "gas": 9820260, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 15101, - "op": "DUP9", - "gas": 9820257, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 15102, - "op": "ADD", - "gas": 9820254, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 15103, - "op": "MSTORE", - "gas": 9820251, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 15104, - "op": "PUSH1", - "gas": 9820248, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 15106, - "op": "DUP4", - "gas": 9820245, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 15107, - "op": "ADD", - "gas": 9820242, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 15108, - "op": "CALLDATALOAD", - "gas": 9820239, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 15109, - "op": "PUSH1", - "gas": 9820236, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 15111, - "op": "DUP9", - "gas": 9820233, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 15112, - "op": "ADD", - "gas": 9820230, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 15113, - "op": "MSTORE", - "gas": 9820227, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 15114, - "op": "PUSH2", - "gas": 9820224, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 15117, - "op": "PUSH1", - "gas": 9820221, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 15119, - "op": "DUP5", - "gas": 9820218, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 15120, - "op": "ADD", - "gas": 9820215, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 15121, - "op": "PUSH2", - "gas": 9820212, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 15124, - "op": "JUMP", - "gas": 9820209, - "gasCost": 8, - "depth": 2 - }, - { - "pc": 14635, - "op": "JUMPDEST", - "gas": 9820201, - "gasCost": 1, - "depth": 2 - }, - { - "pc": 14636, - "op": "DUP1", - "gas": 9820200, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 14637, - "op": "CALLDATALOAD", - "gas": 9820197, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 14638, - "op": "PUSH4", - "gas": 9820194, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 14643, - "op": "DUP2", - "gas": 9820191, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 14644, - "op": "AND", - "gas": 9820188, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 14645, - "op": "DUP2", - "gas": 9820185, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 14646, - "op": "EQ", - "gas": 9820182, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 14647, - "op": "PUSH2", - "gas": 9820179, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 14650, - "op": "JUMPI", - "gas": 9820176, - "gasCost": 10, - "depth": 2 - }, - { - "pc": 13657, - "op": "JUMPDEST", - "gas": 9820166, - "gasCost": 1, - "depth": 2 - }, - { - "pc": 13658, - "op": "SWAP2", - "gas": 9820165, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 13659, - "op": "SWAP1", - "gas": 9820162, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 13660, - "op": "POP", - "gas": 9820159, - "gasCost": 2, - "depth": 2 - }, - { - "pc": 13661, - "op": "JUMP", - "gas": 9820157, - "gasCost": 8, - "depth": 2 - }, - { - "pc": 15125, - "op": "JUMPDEST", - "gas": 9820149, - "gasCost": 1, - "depth": 2 - }, - { - "pc": 15126, - "op": "PUSH4", - "gas": 9820148, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 15131, - "op": "DUP2", - "gas": 9820145, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 15132, - "op": "AND", - "gas": 9820142, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 15133, - "op": "PUSH1", - "gas": 9820139, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 15135, - "op": "DUP10", - "gas": 9820136, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 15136, - "op": "ADD", - "gas": 9820133, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 15137, - "op": "MSTORE", - "gas": 9820130, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 15138, - "op": "SWAP4", - "gas": 9820127, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 15139, - "op": "POP", - "gas": 9820124, - "gasCost": 2, - "depth": 2 - }, - { - "pc": 15140, - "op": "PUSH2", - "gas": 9820122, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 15143, - "op": "PUSH1", - "gas": 9820119, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 15145, - "op": "DUP8", - "gas": 9820116, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 15146, - "op": "ADD", - "gas": 9820113, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 15147, - "op": "DUP8", - "gas": 9820110, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 15148, - "op": "PUSH2", - "gas": 9820107, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 15151, - "op": "JUMP", - "gas": 9820104, - "gasCost": 8, - "depth": 2 - }, - { - "pc": 14784, - "op": "JUMPDEST", - "gas": 9820096, - "gasCost": 1, - "depth": 2 - }, - { - "pc": 14785, - "op": "PUSH1", - "gas": 9820095, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 14787, - "op": "DUP1", - "gas": 9820092, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 14788, - "op": "DUP4", - "gas": 9820089, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 14789, - "op": "CALLDATALOAD", - "gas": 9820086, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 14790, - "op": "PUSH1", - "gas": 9820083, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 14792, - "op": "NOT", - "gas": 9820080, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 14793, - "op": "DUP5", - "gas": 9820077, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 14794, - "op": "CALLDATASIZE", - "gas": 9820074, - "gasCost": 2, - "depth": 2 - }, - { - "pc": 14795, - "op": "SUB", - "gas": 9820072, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 14796, - "op": "ADD", - "gas": 9820069, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 14797, - "op": "DUP2", - "gas": 9820066, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 14798, - "op": "SLT", - "gas": 9820063, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 14799, - "op": "PUSH2", - "gas": 9820060, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 14802, - "op": "JUMPI", - "gas": 9820057, - "gasCost": 10, - "depth": 2 - }, - { - "pc": 14807, - "op": "JUMPDEST", - "gas": 9820047, - "gasCost": 1, - "depth": 2 - }, - { - "pc": 14808, - "op": "DUP4", - "gas": 9820046, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 14809, - "op": "ADD", - "gas": 9820043, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 14810, - "op": "PUSH1", - "gas": 9820040, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 14812, - "op": "DUP2", - "gas": 9820037, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 14813, - "op": "ADD", - "gas": 9820034, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 14814, - "op": "SWAP3", - "gas": 9820031, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 14815, - "op": "POP", - "gas": 9820028, - "gasCost": 2, - "depth": 2 - }, - { - "pc": 14816, - "op": "CALLDATALOAD", - "gas": 9820026, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 14817, - "op": "SWAP1", - "gas": 9820023, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 14818, - "op": "POP", - "gas": 9820020, - "gasCost": 2, - "depth": 2 - }, - { - "pc": 14819, - "op": "PUSH1", - "gas": 9820018, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 14821, - "op": "PUSH1", - "gas": 9820015, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 14823, - "op": "PUSH1", - "gas": 9820012, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 14825, - "op": "SHL", - "gas": 9820009, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 14826, - "op": "SUB", - "gas": 9820006, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 14827, - "op": "DUP2", - "gas": 9820003, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 14828, - "op": "GT", - "gas": 9820000, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 14829, - "op": "ISZERO", - "gas": 9819997, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 14830, - "op": "PUSH2", - "gas": 9819994, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 14833, - "op": "JUMPI", - "gas": 9819991, - "gasCost": 10, - "depth": 2 - }, - { - "pc": 14838, - "op": "JUMPDEST", - "gas": 9819981, - "gasCost": 1, - "depth": 2 - }, - { - "pc": 14839, - "op": "DUP1", - "gas": 9819980, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 14840, - "op": "CALLDATASIZE", - "gas": 9819977, - "gasCost": 2, - "depth": 2 - }, - { - "pc": 14841, - "op": "SUB", - "gas": 9819975, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 14842, - "op": "DUP4", - "gas": 9819972, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 14843, - "op": "SGT", - "gas": 9819969, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 14844, - "op": "ISZERO", - "gas": 9819966, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 14845, - "op": "PUSH2", - "gas": 9819963, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 14848, - "op": "JUMPI", - "gas": 9819960, - "gasCost": 10, - "depth": 2 - }, - { - "pc": 13039, - "op": "JUMPDEST", - "gas": 9819950, - "gasCost": 1, - "depth": 2 - }, - { - "pc": 13040, - "op": "SWAP3", - "gas": 9819949, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 13041, - "op": "POP", - "gas": 9819946, - "gasCost": 2, - "depth": 2 - }, - { - "pc": 13042, - "op": "SWAP3", - "gas": 9819944, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 13043, - "op": "SWAP1", - "gas": 9819941, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 13044, - "op": "POP", - "gas": 9819938, - "gasCost": 2, - "depth": 2 - }, - { - "pc": 13045, - "op": "JUMP", - "gas": 9819936, - "gasCost": 8, - "depth": 2 - }, - { - "pc": 15152, - "op": "JUMPDEST", - "gas": 9819928, - "gasCost": 1, - "depth": 2 - }, - { - "pc": 15153, - "op": "SWAP5", - "gas": 9819927, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 15154, - "op": "POP", - "gas": 9819924, - "gasCost": 2, - "depth": 2 - }, - { - "pc": 15155, - "op": "SWAP3", - "gas": 9819922, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 15156, - "op": "POP", - "gas": 9819919, - "gasCost": 2, - "depth": 2 - }, - { - "pc": 15157, - "op": "DUP7", - "gas": 9819917, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 15158, - "op": "DUP2", - "gas": 9819914, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 15159, - "op": "SUB", - "gas": 9819911, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 15160, - "op": "PUSH1", - "gas": 9819908, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 15162, - "op": "DUP9", - "gas": 9819905, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 15163, - "op": "ADD", - "gas": 9819902, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 15164, - "op": "MSTORE", - "gas": 9819899, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 15165, - "op": "PUSH2", - "gas": 9819896, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 15168, - "op": "DUP2", - "gas": 9819893, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 15169, - "op": "DUP6", - "gas": 9819890, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 15170, - "op": "DUP6", - "gas": 9819887, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 15171, - "op": "PUSH2", - "gas": 9819884, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 15174, - "op": "JUMP", - "gas": 9819881, - "gasCost": 8, - "depth": 2 - }, - { - "pc": 14853, - "op": "JUMPDEST", - "gas": 9819873, - "gasCost": 1, - "depth": 2 - }, - { - "pc": 14854, - "op": "DUP2", - "gas": 9819872, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 14855, - "op": "DUP4", - "gas": 9819869, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 14856, - "op": "MSTORE", - "gas": 9819866, - "gasCost": 6, - "depth": 2 - }, - { - "pc": 14857, - "op": "DUP2", - "gas": 9819860, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 14858, - "op": "DUP2", - "gas": 9819857, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 14859, - "op": "PUSH1", - "gas": 9819854, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 14861, - "op": "DUP6", - "gas": 9819851, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 14862, - "op": "ADD", - "gas": 9819848, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 14863, - "op": "CALLDATACOPY", - "gas": 9819845, - "gasCost": 6, - "depth": 2 - }, - { - "pc": 14864, - "op": "POP", - "gas": 9819839, - "gasCost": 2, - "depth": 2 - }, - { - "pc": 14865, - "op": "PUSH1", - "gas": 9819837, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 14867, - "op": "DUP3", - "gas": 9819834, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 14868, - "op": "DUP3", - "gas": 9819831, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 14869, - "op": "ADD", - "gas": 9819828, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 14870, - "op": "PUSH1", - "gas": 9819825, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 14872, - "op": "SWAP1", - "gas": 9819822, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 14873, - "op": "DUP2", - "gas": 9819819, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 14874, - "op": "ADD", - "gas": 9819816, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 14875, - "op": "SWAP2", - "gas": 9819813, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 14876, - "op": "SWAP1", - "gas": 9819810, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 14877, - "op": "SWAP2", - "gas": 9819807, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 14878, - "op": "MSTORE", - "gas": 9819804, - "gasCost": 6, - "depth": 2 - }, - { - "pc": 14879, - "op": "PUSH1", - "gas": 9819798, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 14881, - "op": "SWAP1", - "gas": 9819795, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 14882, - "op": "SWAP2", - "gas": 9819792, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 14883, - "op": "ADD", - "gas": 9819789, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 14884, - "op": "PUSH1", - "gas": 9819786, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 14886, - "op": "NOT", - "gas": 9819783, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 14887, - "op": "AND", - "gas": 9819780, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 14888, - "op": "SWAP1", - "gas": 9819777, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 14889, - "op": "SWAP2", - "gas": 9819774, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 14890, - "op": "ADD", - "gas": 9819771, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 14891, - "op": "ADD", - "gas": 9819768, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 14892, - "op": "SWAP1", - "gas": 9819765, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 14893, - "op": "JUMP", - "gas": 9819762, - "gasCost": 8, - "depth": 2 - }, - { - "pc": 15175, - "op": "JUMPDEST", - "gas": 9819754, - "gasCost": 1, - "depth": 2 - }, - { - "pc": 15176, - "op": "SWAP4", - "gas": 9819753, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 15177, - "op": "POP", - "gas": 9819750, - "gasCost": 2, - "depth": 2 - }, - { - "pc": 15178, - "op": "POP", - "gas": 9819748, - "gasCost": 2, - "depth": 2 - }, - { - "pc": 15179, - "op": "POP", - "gas": 9819746, - "gasCost": 2, - "depth": 2 - }, - { - "pc": 15180, - "op": "POP", - "gas": 9819744, - "gasCost": 2, - "depth": 2 - }, - { - "pc": 15181, - "op": "PUSH2", - "gas": 9819742, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 15184, - "op": "PUSH1", - "gas": 9819739, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 15186, - "op": "DUP5", - "gas": 9819736, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 15187, - "op": "ADD", - "gas": 9819733, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 15188, - "op": "DUP5", - "gas": 9819730, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 15189, - "op": "PUSH2", - "gas": 9819727, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 15192, - "op": "JUMP", - "gas": 9819724, - "gasCost": 8, - "depth": 2 - }, - { - "pc": 14784, - "op": "JUMPDEST", - "gas": 9819716, - "gasCost": 1, - "depth": 2 - }, - { - "pc": 14785, - "op": "PUSH1", - "gas": 9819715, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 14787, - "op": "DUP1", - "gas": 9819712, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 14788, - "op": "DUP4", - "gas": 9819709, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 14789, - "op": "CALLDATALOAD", - "gas": 9819706, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 14790, - "op": "PUSH1", - "gas": 9819703, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 14792, - "op": "NOT", - "gas": 9819700, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 14793, - "op": "DUP5", - "gas": 9819697, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 14794, - "op": "CALLDATASIZE", - "gas": 9819694, - "gasCost": 2, - "depth": 2 - }, - { - "pc": 14795, - "op": "SUB", - "gas": 9819692, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 14796, - "op": "ADD", - "gas": 9819689, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 14797, - "op": "DUP2", - "gas": 9819686, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 14798, - "op": "SLT", - "gas": 9819683, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 14799, - "op": "PUSH2", - "gas": 9819680, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 14802, - "op": "JUMPI", - "gas": 9819677, - "gasCost": 10, - "depth": 2 - }, - { - "pc": 14807, - "op": "JUMPDEST", - "gas": 9819667, - "gasCost": 1, - "depth": 2 - }, - { - "pc": 14808, - "op": "DUP4", - "gas": 9819666, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 14809, - "op": "ADD", - "gas": 9819663, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 14810, - "op": "PUSH1", - "gas": 9819660, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 14812, - "op": "DUP2", - "gas": 9819657, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 14813, - "op": "ADD", - "gas": 9819654, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 14814, - "op": "SWAP3", - "gas": 9819651, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 14815, - "op": "POP", - "gas": 9819648, - "gasCost": 2, - "depth": 2 - }, - { - "pc": 14816, - "op": "CALLDATALOAD", - "gas": 9819646, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 14817, - "op": "SWAP1", - "gas": 9819643, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 14818, - "op": "POP", - "gas": 9819640, - "gasCost": 2, - "depth": 2 - }, - { - "pc": 14819, - "op": "PUSH1", - "gas": 9819638, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 14821, - "op": "PUSH1", - "gas": 9819635, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 14823, - "op": "PUSH1", - "gas": 9819632, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 14825, - "op": "SHL", - "gas": 9819629, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 14826, - "op": "SUB", - "gas": 9819626, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 14827, - "op": "DUP2", - "gas": 9819623, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 14828, - "op": "GT", - "gas": 9819620, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 14829, - "op": "ISZERO", - "gas": 9819617, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 14830, - "op": "PUSH2", - "gas": 9819614, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 14833, - "op": "JUMPI", - "gas": 9819611, - "gasCost": 10, - "depth": 2 - }, - { - "pc": 14838, - "op": "JUMPDEST", - "gas": 9819601, - "gasCost": 1, - "depth": 2 - }, - { - "pc": 14839, - "op": "DUP1", - "gas": 9819600, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 14840, - "op": "CALLDATASIZE", - "gas": 9819597, - "gasCost": 2, - "depth": 2 - }, - { - "pc": 14841, - "op": "SUB", - "gas": 9819595, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 14842, - "op": "DUP4", - "gas": 9819592, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 14843, - "op": "SGT", - "gas": 9819589, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 14844, - "op": "ISZERO", - "gas": 9819586, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 14845, - "op": "PUSH2", - "gas": 9819583, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 14848, - "op": "JUMPI", - "gas": 9819580, - "gasCost": 10, - "depth": 2 - }, - { - "pc": 13039, - "op": "JUMPDEST", - "gas": 9819570, - "gasCost": 1, - "depth": 2 - }, - { - "pc": 13040, - "op": "SWAP3", - "gas": 9819569, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 13041, - "op": "POP", - "gas": 9819566, - "gasCost": 2, - "depth": 2 - }, - { - "pc": 13042, - "op": "SWAP3", - "gas": 9819564, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 13043, - "op": "SWAP1", - "gas": 9819561, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 13044, - "op": "POP", - "gas": 9819558, - "gasCost": 2, - "depth": 2 - }, - { - "pc": 13045, - "op": "JUMP", - "gas": 9819556, - "gasCost": 8, - "depth": 2 - }, - { - "pc": 15193, - "op": "JUMPDEST", - "gas": 9819548, - "gasCost": 1, - "depth": 2 - }, - { - "pc": 15194, - "op": "DUP6", - "gas": 9819547, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 15195, - "op": "DUP4", - "gas": 9819544, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 15196, - "op": "SUB", - "gas": 9819541, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 15197, - "op": "PUSH1", - "gas": 9819538, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 15199, - "op": "DUP8", - "gas": 9819535, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 15200, - "op": "ADD", - "gas": 9819532, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 15201, - "op": "MSTORE", - "gas": 9819529, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 15202, - "op": "PUSH2", - "gas": 9819526, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 15205, - "op": "DUP4", - "gas": 9819523, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 15206, - "op": "DUP3", - "gas": 9819520, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 15207, - "op": "DUP5", - "gas": 9819517, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 15208, - "op": "PUSH2", - "gas": 9819514, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 15211, - "op": "JUMP", - "gas": 9819511, - "gasCost": 8, - "depth": 2 - }, - { - "pc": 14853, - "op": "JUMPDEST", - "gas": 9819503, - "gasCost": 1, - "depth": 2 - }, - { - "pc": 14854, - "op": "DUP2", - "gas": 9819502, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 14855, - "op": "DUP4", - "gas": 9819499, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 14856, - "op": "MSTORE", - "gas": 9819496, - "gasCost": 6, - "depth": 2 - }, - { - "pc": 14857, - "op": "DUP2", - "gas": 9819490, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 14858, - "op": "DUP2", - "gas": 9819487, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 14859, - "op": "PUSH1", - "gas": 9819484, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 14861, - "op": "DUP6", - "gas": 9819481, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 14862, - "op": "ADD", - "gas": 9819478, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 14863, - "op": "CALLDATACOPY", - "gas": 9819475, - "gasCost": 6, - "depth": 2 - }, - { - "pc": 14864, - "op": "POP", - "gas": 9819469, - "gasCost": 2, - "depth": 2 - }, - { - "pc": 14865, - "op": "PUSH1", - "gas": 9819467, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 14867, - "op": "DUP3", - "gas": 9819464, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 14868, - "op": "DUP3", - "gas": 9819461, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 14869, - "op": "ADD", - "gas": 9819458, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 14870, - "op": "PUSH1", - "gas": 9819455, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 14872, - "op": "SWAP1", - "gas": 9819452, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 14873, - "op": "DUP2", - "gas": 9819449, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 14874, - "op": "ADD", - "gas": 9819446, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 14875, - "op": "SWAP2", - "gas": 9819443, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 14876, - "op": "SWAP1", - "gas": 9819440, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 14877, - "op": "SWAP2", - "gas": 9819437, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 14878, - "op": "MSTORE", - "gas": 9819434, - "gasCost": 6, - "depth": 2 - }, - { - "pc": 14879, - "op": "PUSH1", - "gas": 9819428, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 14881, - "op": "SWAP1", - "gas": 9819425, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 14882, - "op": "SWAP2", - "gas": 9819422, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 14883, - "op": "ADD", - "gas": 9819419, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 14884, - "op": "PUSH1", - "gas": 9819416, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 14886, - "op": "NOT", - "gas": 9819413, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 14887, - "op": "AND", - "gas": 9819410, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 14888, - "op": "SWAP1", - "gas": 9819407, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 14889, - "op": "SWAP2", - "gas": 9819404, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 14890, - "op": "ADD", - "gas": 9819401, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 14891, - "op": "ADD", - "gas": 9819398, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 14892, - "op": "SWAP1", - "gas": 9819395, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 14893, - "op": "JUMP", - "gas": 9819392, - "gasCost": 8, - "depth": 2 - }, - { - "pc": 15212, - "op": "JUMPDEST", - "gas": 9819384, - "gasCost": 1, - "depth": 2 - }, - { - "pc": 15213, - "op": "SWAP7", - "gas": 9819383, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 15214, - "op": "SWAP6", - "gas": 9819380, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 15215, - "op": "POP", - "gas": 9819377, - "gasCost": 2, - "depth": 2 - }, - { - "pc": 15216, - "op": "POP", - "gas": 9819375, - "gasCost": 2, - "depth": 2 - }, - { - "pc": 15217, - "op": "POP", - "gas": 9819373, - "gasCost": 2, - "depth": 2 - }, - { - "pc": 15218, - "op": "POP", - "gas": 9819371, - "gasCost": 2, - "depth": 2 - }, - { - "pc": 15219, - "op": "POP", - "gas": 9819369, - "gasCost": 2, - "depth": 2 - }, - { - "pc": 15220, - "op": "POP", - "gas": 9819367, - "gasCost": 2, - "depth": 2 - }, - { - "pc": 15221, - "op": "JUMP", - "gas": 9819365, - "gasCost": 8, - "depth": 2 - }, - { - "pc": 15212, - "op": "JUMPDEST", - "gas": 9819357, - "gasCost": 1, - "depth": 2 - }, - { - "pc": 15213, - "op": "SWAP7", - "gas": 9819356, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 15214, - "op": "SWAP6", - "gas": 9819353, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 15215, - "op": "POP", - "gas": 9819350, - "gasCost": 2, - "depth": 2 - }, - { - "pc": 15216, - "op": "POP", - "gas": 9819348, - "gasCost": 2, - "depth": 2 - }, - { - "pc": 15217, - "op": "POP", - "gas": 9819346, - "gasCost": 2, - "depth": 2 - }, - { - "pc": 15218, - "op": "POP", - "gas": 9819344, - "gasCost": 2, - "depth": 2 - }, - { - "pc": 15219, - "op": "POP", - "gas": 9819342, - "gasCost": 2, - "depth": 2 - }, - { - "pc": 15220, - "op": "POP", - "gas": 9819340, - "gasCost": 2, - "depth": 2 - }, - { - "pc": 15221, - "op": "JUMP", - "gas": 9819338, - "gasCost": 8, - "depth": 2 - }, - { - "pc": 3949, - "op": "JUMPDEST", - "gas": 9819330, - "gasCost": 1, - "depth": 2 - }, - { - "pc": 3950, - "op": "PUSH1", - "gas": 9819329, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 3952, - "op": "PUSH1", - "gas": 9819326, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 3954, - "op": "MLOAD", - "gas": 9819323, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 3955, - "op": "DUP1", - "gas": 9819320, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 3956, - "op": "DUP4", - "gas": 9819317, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 3957, - "op": "SUB", - "gas": 9819314, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 3958, - "op": "DUP2", - "gas": 9819311, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 3959, - "op": "DUP7", - "gas": 9819308, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 3960, - "op": "DUP1", - "gas": 9819305, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 3961, - "op": "EXTCODESIZE", - "gas": 9819302, - "gasCost": 2600, - "depth": 2 - }, - { - "pc": 3962, - "op": "ISZERO", - "gas": 9816702, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 3963, - "op": "DUP1", - "gas": 9816699, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 3964, - "op": "ISZERO", - "gas": 9816696, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 3965, - "op": "PUSH2", - "gas": 9816693, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 3968, - "op": "JUMPI", - "gas": 9816690, - "gasCost": 10, - "depth": 2 - }, - { - "pc": 3969, - "op": "PUSH1", - "gas": 9816680, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 3971, - "op": "DUP1", - "gas": 9816677, - "gasCost": 3, - "depth": 2 - }, - { - "pc": 3972, - "op": "REVERT", - "gas": 9816674, - "gasCost": 0, - "depth": 2 - }, - { - "pc": 851, - "op": "RETURNDATASIZE", - "gas": 9972698, - "gasCost": 2, - "depth": 1 - }, - { - "pc": 852, - "op": "PUSH1", - "gas": 9972696, - "gasCost": 3, - "depth": 1 - }, - { - "pc": 854, - "op": "DUP1", - "gas": 9972693, - "gasCost": 3, - "depth": 1 - }, - { - "pc": 855, - "op": "RETURNDATACOPY", - "gas": 9972690, - "gasCost": 3, - "depth": 1 - }, - { - "pc": 856, - "op": "DUP1", - "gas": 9972687, - "gasCost": 3, - "depth": 1 - }, - { - "pc": 857, - "op": "DUP1", - "gas": 9972684, - "gasCost": 3, - "depth": 1 - }, - { - "pc": 858, - "op": "ISZERO", - "gas": 9972681, - "gasCost": 3, - "depth": 1 - }, - { - "pc": 859, - "op": "PUSH2", - "gas": 9972678, - "gasCost": 3, - "depth": 1 - }, - { - "pc": 862, - "op": "JUMPI", - "gas": 9972675, - "gasCost": 10, - "depth": 1 - }, - { - "pc": 867, - "op": "JUMPDEST", - "gas": 9972665, - "gasCost": 1, - "depth": 1 - }, - { - "pc": 868, - "op": "RETURNDATASIZE", - "gas": 9972664, - "gasCost": 2, - "depth": 1 - }, - { - "pc": 869, - "op": "PUSH1", - "gas": 9972662, - "gasCost": 3, - "depth": 1 - }, - { - "pc": 871, - "op": "REVERT", - "gas": 9972659, - "gasCost": 0, - "depth": 1 - } - ] - } \ No newline at end of file diff --git a/yarn.lock b/yarn.lock deleted file mode 100644 index fb57ccd13..000000000 --- a/yarn.lock +++ /dev/null @@ -1,4 +0,0 @@ -# THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY. -# yarn lockfile v1 - - From 96e0f747640dd22338c5c98300ddfc9c68078073 Mon Sep 17 00:00:00 2001 From: Ethen Pociask Date: Tue, 2 Jul 2024 11:59:22 -0400 Subject: [PATCH 22/38] fix: Updated contracts to better align with nitro deploy tooling and fixed replay bugs --- arbnode/dataposter/data_poster.go | 1 - cmd/deploy/deploy.go | 9 + cmd/replay/main.go | 12 +- deploy/deploy.go | 48 +- eigenda/eigenda.go | 425 ++---------------- eigenda/eigenda_test.go | 34 ++ eigenda/{eigenda_proxy_client.go => proxy.go} | 0 eigenda/types.go | 327 ++++++++++++++ staker/stateless_block_validator.go | 5 +- 9 files changed, 449 insertions(+), 412 deletions(-) create mode 100644 eigenda/eigenda_test.go rename eigenda/{eigenda_proxy_client.go => proxy.go} (100%) create mode 100644 eigenda/types.go diff --git a/arbnode/dataposter/data_poster.go b/arbnode/dataposter/data_poster.go index f2d67d71b..3214e2fb2 100644 --- a/arbnode/dataposter/data_poster.go +++ b/arbnode/dataposter/data_poster.go @@ -379,7 +379,6 @@ func (p *DataPoster) waitForL1Finality() bool { // Returns the next nonce, its metadata if stored, a bool indicating if the metadata is present, the cumulative weight, and an error if present. // Unlike GetNextNonceAndMeta, this does not call the metadataRetriever if the metadata is not stored in the queue. func (p *DataPoster) getNextNonceAndMaybeMeta(ctx context.Context, thisWeight uint64) (uint64, []byte, bool, uint64, error) { - println("getNextNonceAndMaybeMeta") // Ensure latest finalized block state is available. blockNum, err := p.client.BlockNumber(ctx) if err != nil { diff --git a/cmd/deploy/deploy.go b/cmd/deploy/deploy.go index 1c8b85810..7f822eff6 100644 --- a/cmd/deploy/deploy.go +++ b/cmd/deploy/deploy.go @@ -37,6 +37,10 @@ func main() { ctx := context.Background() + /* EigenDA dependency contracts */ + svcManagerString := flag.String("svcManager", "0x0000000000000000000000000000000000000000", "the address of the eigenda service manager contract") + daRollupManagerString := flag.String("daRollupManager", "0x0000000000000000000000000000000000000000", "the address of the eigenda rollup manager contract") + l1conn := flag.String("l1conn", "", "l1 connection") l1keystore := flag.String("l1keystore", "", "l1 private key store") deployAccount := flag.String("l1DeployAccount", "", "l1 seq account to use (default is first account in keystore)") @@ -178,6 +182,9 @@ func main() { defer l1Reader.StopAndWait() nativeToken := common.HexToAddress(*nativeTokenAddressString) + eigenDASvcManager := common.HexToAddress(*svcManagerString) + eigenDARollupManager := common.HexToAddress(*daRollupManagerString) + deployedAddresses, err := deploycode.DeployOnL1( ctx, l1Reader, @@ -189,6 +196,8 @@ func main() { nativeToken, maxDataSize, *isUsingFeeToken, + eigenDASvcManager, + eigenDARollupManager, ) if err != nil { flag.Usage() diff --git a/cmd/replay/main.go b/cmd/replay/main.go index afa0cfcd5..89bfb7124 100644 --- a/cmd/replay/main.go +++ b/cmd/replay/main.go @@ -153,16 +153,20 @@ func (r *BlobPreimageReader) Initialize(ctx context.Context) error { // struct for recovering data from preimage, impl interface EigenDAReader func (dasReader *PreimageEigenDAReader) QueryBlob(ctx context.Context, cert *eigenda.EigenDABlobInfo, domain string) ([]byte, error) { - dataPointer, err := cert.SerializeCommitment() + kzgCommit, err := cert.SerializeCommitment() if err != nil { return nil, err } shaDataHash := sha256.New() - shaDataHash.Write(dataPointer) + shaDataHash.Write(kzgCommit) dataHash := shaDataHash.Sum([]byte{}) dataHash[0] = 1 - // check function eigenda.RecoverPayloadFromEigenDABatch, the data population and data reading should be matched. - return wavmio.ResolveTypedPreimage(arbutil.EigenDaPreimageType, common.BytesToHash(dataHash)) + preimage, err := wavmio.ResolveTypedPreimage(arbutil.EigenDaPreimageType, common.BytesToHash(dataHash)) + if err != nil { + return nil, err + } + + return preimage, nil } // To generate: diff --git a/deploy/deploy.go b/deploy/deploy.go index cd1e83e5b..080c0ce2c 100644 --- a/deploy/deploy.go +++ b/deploy/deploy.go @@ -10,6 +10,7 @@ import ( "github.com/ethereum/go-ethereum/common" "github.com/ethereum/go-ethereum/core/types" "github.com/ethereum/go-ethereum/crypto" + "github.com/ethereum/go-ethereum/log" "github.com/offchainlabs/nitro/cmd/chaininfo" "github.com/offchainlabs/nitro/solgen/go/bridgegen" "github.com/offchainlabs/nitro/solgen/go/challengegen" @@ -41,27 +42,12 @@ func deployBridgeCreator(ctx context.Context, l1Reader *headerreader.HeaderReade return common.Address{}, fmt.Errorf("bridge deploy error: %w", err) } - dummyRollupManager, tx, _, err := bridgegen.DeployEigenDADummyManager(auth, client) - err = andTxSucceeded(ctx, l1Reader, tx, err) - if err != nil { - return common.Address{}, fmt.Errorf("dummy manager deploy error: %w", err) - } - - println("Dummy manager deployed at ", dummyRollupManager.String()) - - dummySvcManager, tx, _, err := bridgegen.DeployDummyServiceManager(auth, client) - err = andTxSucceeded(ctx, l1Reader, tx, err) - if err != nil { - return common.Address{}, fmt.Errorf("dummy svc manager deploy error: %w", err) - } - - println("Dummy service manager deployed at ", dummySvcManager.String()) reader4844, tx, _, err := yulgen.DeployReader4844(auth, client) err = andTxSucceeded(ctx, l1Reader, tx, err) if err != nil { return common.Address{}, fmt.Errorf("blob basefee reader deploy error: %w", err) } - seqInboxTemplate, tx, _, err := bridgegen.DeploySequencerInbox(auth, client, maxDataSize, reader4844, dummySvcManager, dummyRollupManager, isUsingFeeToken) + seqInboxTemplate, tx, _, err := bridgegen.DeploySequencerInbox(auth, client, maxDataSize, reader4844, isUsingFeeToken) err = andTxSucceeded(ctx, l1Reader, tx, err) if err != nil { return common.Address{}, fmt.Errorf("sequencer inbox deploy error: %w", err) @@ -251,11 +237,37 @@ func deployRollupCreator(ctx context.Context, l1Reader *headerreader.HeaderReade return rollupCreator, rollupCreatorAddress, validatorUtils, validatorWalletCreator, nil } -func DeployOnL1(ctx context.Context, parentChainReader *headerreader.HeaderReader, deployAuth *bind.TransactOpts, batchPosters []common.Address, batchPosterManager common.Address, authorizeValidators uint64, config rollupgen.Config, nativeToken common.Address, maxDataSize *big.Int, isUsingFeeToken bool) (*chaininfo.RollupAddresses, error) { +func DeployOnL1(ctx context.Context, parentChainReader *headerreader.HeaderReader, deployAuth *bind.TransactOpts, batchPosters []common.Address, batchPosterManager common.Address, authorizeValidators uint64, config rollupgen.Config, nativeToken common.Address, maxDataSize *big.Int, isUsingFeeToken bool, eigenDASvcManager common.Address, eigenDARollupManager common.Address) (*chaininfo.RollupAddresses, error) { if config.WasmModuleRoot == (common.Hash{}) { return nil, errors.New("no machine specified") } + if eigenDARollupManager == (common.Address{0x0}) { + log.Warn("No EigenDA Rollup Manager contract address specified, deploying dummy rollup manager instead") + + dummyRollupManager, tx, _, err := bridgegen.DeployEigenDADummyManager(deployAuth, parentChainReader.Client()) + err = andTxSucceeded(ctx, parentChainReader, tx, err) + if err != nil { + return nil, fmt.Errorf("dummy manager deploy error: %w", err) + } + + log.Info("Dummy manager deployed at ", dummyRollupManager.String()) + eigenDARollupManager = dummyRollupManager + } + + if eigenDASvcManager == (common.Address{0x0}) { + log.Warn("No EigenDA Service Manager contract address specified, deploying dummy service manager instead") + + dummySvcManager, tx, _, err := bridgegen.DeployDummyServiceManager(deployAuth, parentChainReader.Client()) + err = andTxSucceeded(ctx, parentChainReader, tx, err) + if err != nil { + return nil, fmt.Errorf("dummy svc manager deploy error: %w", err) + } + + log.Info("Dummy service manager deployed at ", dummySvcManager.String()) + eigenDASvcManager = dummySvcManager + + } rollupCreator, _, validatorUtils, validatorWalletCreator, err := deployRollupCreator(ctx, parentChainReader, deployAuth, maxDataSize, isUsingFeeToken) if err != nil { return nil, fmt.Errorf("error deploying rollup creator: %w", err) @@ -275,6 +287,8 @@ func DeployOnL1(ctx context.Context, parentChainReader *headerreader.HeaderReade MaxFeePerGasForRetryables: big.NewInt(0), // needed when utility factories are deployed BatchPosters: batchPosters, BatchPosterManager: batchPosterManager, + EigenDAServiceManager: eigenDASvcManager, + EigenDARollupManager: eigenDARollupManager, } tx, err := rollupCreator.CreateRollup( diff --git a/eigenda/eigenda.go b/eigenda/eigenda.go index 0e5850898..2a3ae8b95 100644 --- a/eigenda/eigenda.go +++ b/eigenda/eigenda.go @@ -5,66 +5,22 @@ import ( "crypto/sha256" "encoding/hex" "errors" - "fmt" - "math/big" "strings" - "github.com/Layr-Labs/eigenda/api/grpc/disperser" "github.com/ethereum/go-ethereum/accounts/abi" "github.com/ethereum/go-ethereum/common" - "github.com/ethereum/go-ethereum/common/hexutil" "github.com/ethereum/go-ethereum/log" "github.com/ethereum/go-ethereum/rlp" "github.com/offchainlabs/nitro/arbutil" ) -type DisperserBlobInfo struct { - BlobHeader DisperserBlobHeader `json:"blob_header,omitempty"` - BlobVerificationProof DisperserBlobVerificationProof `json:"blob_verification_proof,omitempty"` -} - -type DisperserBlobHeader struct { - Commitment G1Commitment `json:"commitment,omitempty"` - DataLength uint32 `json:"data_length,omitempty"` - BlobQuorumParams []BlobQuorumParam `json:"blob_quorum_params,omitempty"` -} - -type G1Commitment struct { - X []byte `json:"x,omitempty"` - Y []byte `json:"y,omitempty"` -} - -type BlobQuorumParam struct { - QuorumNumber uint32 `json:"quorum_number,omitempty"` - AdversaryThresholdPercentage uint32 `json:"adversary_threshold_percentage,omitempty"` - ConfirmationThresholdPercentage uint32 `json:"confirmation_threshold_percentage,omitempty"` - ChunkLength uint32 `json:"chunk_length,omitempty"` -} - -type DisperserBlobVerificationProof struct { - BatchId uint32 `json:"batch_id,omitempty"` - BlobIndex uint32 `json:"blob_index,omitempty"` - BatchMetadata DisperserBatchMetadata `json:"batch_metadata,omitempty"` - InclusionProof []byte `json:"inclusion_proof,omitempty"` - QuorumIndexes []byte `json:"quorum_indexes,omitempty"` -} - -type DisperserBatchMetadata struct { - Fee []byte `json:"fee"` // bytes - BatchHeaderHash []byte `json:"batchHeaderHash"` // bytes - BatchHeader DisperserBatchHeader `json:"batch_header,omitempty"` - SignatoryRecordHash []byte `json:"signatory_record_hash,omitempty"` - ConfirmationBlockNumber uint32 `json:"confirmation_block_number,omitempty"` -} - -type DisperserBatchHeader struct { - BatchRoot []byte `json:"batch_root,omitempty"` - QuorumNumbers []byte `json:"quorum_numbers,omitempty"` - QuorumSignedPercentages []byte `json:"quorum_signed_percentages,omitempty"` - ReferenceBlockNumber uint32 `json:"reference_block_number,omitempty"` -} +const ( + // NOTE - this will need to be updated everytime there are changes to the Inbox interface + // TODO - consoldiate ABI to only include `addSequencerBatchFromEigenDA` method signature or add ingestion of ABI file upon initialization of an arbitrum node + sequencerInboxABI = `[{"type":"constructor","inputs":[{"name":"_maxDataSize","type":"uint256","internalType":"uint256"},{"name":"reader4844_","type":"address","internalType":"contract IReader4844"},{"name":"eigenDAServiceManager_","type":"address","internalType":"contract IEigenDAServiceManager"},{"name":"eigenDARollupManager_","type":"address","internalType":"contract IRollupManager"},{"name":"_isUsingFeeToken","type":"bool","internalType":"bool"}],"stateMutability":"nonpayable"},{"type":"function","name":"BROTLI_MESSAGE_HEADER_FLAG","inputs":[],"outputs":[{"name":"","type":"bytes1","internalType":"bytes1"}],"stateMutability":"view"},{"type":"function","name":"DAS_MESSAGE_HEADER_FLAG","inputs":[],"outputs":[{"name":"","type":"bytes1","internalType":"bytes1"}],"stateMutability":"view"},{"type":"function","name":"DATA_AUTHENTICATED_FLAG","inputs":[],"outputs":[{"name":"","type":"bytes1","internalType":"bytes1"}],"stateMutability":"view"},{"type":"function","name":"DATA_BLOB_HEADER_FLAG","inputs":[],"outputs":[{"name":"","type":"bytes1","internalType":"bytes1"}],"stateMutability":"view"},{"type":"function","name":"EIGENDA_MESSAGE_HEADER_FLAG","inputs":[],"outputs":[{"name":"","type":"bytes1","internalType":"bytes1"}],"stateMutability":"view"},{"type":"function","name":"HEADER_LENGTH","inputs":[],"outputs":[{"name":"","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"type":"function","name":"TREE_DAS_MESSAGE_HEADER_FLAG","inputs":[],"outputs":[{"name":"","type":"bytes1","internalType":"bytes1"}],"stateMutability":"view"},{"type":"function","name":"ZERO_HEAVY_MESSAGE_HEADER_FLAG","inputs":[],"outputs":[{"name":"","type":"bytes1","internalType":"bytes1"}],"stateMutability":"view"},{"type":"function","name":"addSequencerL2Batch","inputs":[{"name":"sequenceNumber","type":"uint256","internalType":"uint256"},{"name":"data","type":"bytes","internalType":"bytes"},{"name":"afterDelayedMessagesRead","type":"uint256","internalType":"uint256"},{"name":"gasRefunder","type":"address","internalType":"contract IGasRefunder"},{"name":"prevMessageCount","type":"uint256","internalType":"uint256"},{"name":"newMessageCount","type":"uint256","internalType":"uint256"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"addSequencerL2BatchFromBlobs","inputs":[{"name":"sequenceNumber","type":"uint256","internalType":"uint256"},{"name":"afterDelayedMessagesRead","type":"uint256","internalType":"uint256"},{"name":"gasRefunder","type":"address","internalType":"contract IGasRefunder"},{"name":"prevMessageCount","type":"uint256","internalType":"uint256"},{"name":"newMessageCount","type":"uint256","internalType":"uint256"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"addSequencerL2BatchFromEigenDA","inputs":[{"name":"sequenceNumber","type":"uint256","internalType":"uint256"},{"name":"blobVerificationProof","type":"tuple","internalType":"struct EigenDARollupUtils.BlobVerificationProof","components":[{"name":"batchId","type":"uint32","internalType":"uint32"},{"name":"blobIndex","type":"uint32","internalType":"uint32"},{"name":"batchMetadata","type":"tuple","internalType":"struct IEigenDAServiceManager.BatchMetadata","components":[{"name":"batchHeader","type":"tuple","internalType":"struct IEigenDAServiceManager.BatchHeader","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"}]},{"name":"blobHeader","type":"tuple","internalType":"struct IEigenDAServiceManager.BlobHeader","components":[{"name":"commitment","type":"tuple","internalType":"struct BN254.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":"struct IEigenDAServiceManager.QuorumBlobParam[]","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":"afterDelayedMessagesRead","type":"uint256","internalType":"uint256"},{"name":"prevMessageCount","type":"uint256","internalType":"uint256"},{"name":"newMessageCount","type":"uint256","internalType":"uint256"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"addSequencerL2BatchFromOrigin","inputs":[{"name":"","type":"uint256","internalType":"uint256"},{"name":"","type":"bytes","internalType":"bytes"},{"name":"","type":"uint256","internalType":"uint256"},{"name":"","type":"address","internalType":"contract IGasRefunder"}],"outputs":[],"stateMutability":"pure"},{"type":"function","name":"addSequencerL2BatchFromOrigin","inputs":[{"name":"sequenceNumber","type":"uint256","internalType":"uint256"},{"name":"data","type":"bytes","internalType":"bytes"},{"name":"afterDelayedMessagesRead","type":"uint256","internalType":"uint256"},{"name":"gasRefunder","type":"address","internalType":"contract IGasRefunder"},{"name":"prevMessageCount","type":"uint256","internalType":"uint256"},{"name":"newMessageCount","type":"uint256","internalType":"uint256"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"batchCount","inputs":[],"outputs":[{"name":"","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"type":"function","name":"batchPosterManager","inputs":[],"outputs":[{"name":"","type":"address","internalType":"address"}],"stateMutability":"view"},{"type":"function","name":"bridge","inputs":[],"outputs":[{"name":"","type":"address","internalType":"contract IBridge"}],"stateMutability":"view"},{"type":"function","name":"dasKeySetInfo","inputs":[{"name":"","type":"bytes32","internalType":"bytes32"}],"outputs":[{"name":"isValidKeyset","type":"bool","internalType":"bool"},{"name":"creationBlock","type":"uint64","internalType":"uint64"}],"stateMutability":"view"},{"type":"function","name":"eigenDARollupManager","inputs":[],"outputs":[{"name":"","type":"address","internalType":"contract IRollupManager"}],"stateMutability":"view"},{"type":"function","name":"eigenDAServiceManager","inputs":[],"outputs":[{"name":"","type":"address","internalType":"contract IEigenDAServiceManager"}],"stateMutability":"view"},{"type":"function","name":"forceInclusion","inputs":[{"name":"_totalDelayedMessagesRead","type":"uint256","internalType":"uint256"},{"name":"kind","type":"uint8","internalType":"uint8"},{"name":"l1BlockAndTime","type":"uint64[2]","internalType":"uint64[2]"},{"name":"baseFeeL1","type":"uint256","internalType":"uint256"},{"name":"sender","type":"address","internalType":"address"},{"name":"messageDataHash","type":"bytes32","internalType":"bytes32"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"getKeysetCreationBlock","inputs":[{"name":"ksHash","type":"bytes32","internalType":"bytes32"}],"outputs":[{"name":"","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"type":"function","name":"inboxAccs","inputs":[{"name":"index","type":"uint256","internalType":"uint256"}],"outputs":[{"name":"","type":"bytes32","internalType":"bytes32"}],"stateMutability":"view"},{"type":"function","name":"initialize","inputs":[{"name":"bridge_","type":"address","internalType":"contract IBridge"},{"name":"maxTimeVariation_","type":"tuple","internalType":"struct ISequencerInbox.MaxTimeVariation","components":[{"name":"delayBlocks","type":"uint256","internalType":"uint256"},{"name":"futureBlocks","type":"uint256","internalType":"uint256"},{"name":"delaySeconds","type":"uint256","internalType":"uint256"},{"name":"futureSeconds","type":"uint256","internalType":"uint256"}]}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"invalidateKeysetHash","inputs":[{"name":"ksHash","type":"bytes32","internalType":"bytes32"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"isBatchPoster","inputs":[{"name":"","type":"address","internalType":"address"}],"outputs":[{"name":"","type":"bool","internalType":"bool"}],"stateMutability":"view"},{"type":"function","name":"isSequencer","inputs":[{"name":"","type":"address","internalType":"address"}],"outputs":[{"name":"","type":"bool","internalType":"bool"}],"stateMutability":"view"},{"type":"function","name":"isUsingFeeToken","inputs":[],"outputs":[{"name":"","type":"bool","internalType":"bool"}],"stateMutability":"view"},{"type":"function","name":"isValidKeysetHash","inputs":[{"name":"ksHash","type":"bytes32","internalType":"bytes32"}],"outputs":[{"name":"","type":"bool","internalType":"bool"}],"stateMutability":"view"},{"type":"function","name":"maxDataSize","inputs":[],"outputs":[{"name":"","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"type":"function","name":"maxTimeVariation","inputs":[],"outputs":[{"name":"","type":"uint256","internalType":"uint256"},{"name":"","type":"uint256","internalType":"uint256"},{"name":"","type":"uint256","internalType":"uint256"},{"name":"","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"type":"function","name":"postUpgradeInit","inputs":[],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"reader4844","inputs":[],"outputs":[{"name":"","type":"address","internalType":"contract IReader4844"}],"stateMutability":"view"},{"type":"function","name":"removeDelayAfterFork","inputs":[],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"rollup","inputs":[],"outputs":[{"name":"","type":"address","internalType":"contract IOwnable"}],"stateMutability":"view"},{"type":"function","name":"setBatchPosterManager","inputs":[{"name":"newBatchPosterManager","type":"address","internalType":"address"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"setIsBatchPoster","inputs":[{"name":"addr","type":"address","internalType":"address"},{"name":"isBatchPoster_","type":"bool","internalType":"bool"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"setIsSequencer","inputs":[{"name":"addr","type":"address","internalType":"address"},{"name":"isSequencer_","type":"bool","internalType":"bool"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"setMaxTimeVariation","inputs":[{"name":"maxTimeVariation_","type":"tuple","internalType":"struct ISequencerInbox.MaxTimeVariation","components":[{"name":"delayBlocks","type":"uint256","internalType":"uint256"},{"name":"futureBlocks","type":"uint256","internalType":"uint256"},{"name":"delaySeconds","type":"uint256","internalType":"uint256"},{"name":"futureSeconds","type":"uint256","internalType":"uint256"}]}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"setValidKeyset","inputs":[{"name":"keysetBytes","type":"bytes","internalType":"bytes"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"totalDelayedMessagesRead","inputs":[],"outputs":[{"name":"","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"type":"event","name":"InboxMessageDelivered","inputs":[{"name":"messageNum","type":"uint256","indexed":true,"internalType":"uint256"},{"name":"data","type":"bytes","indexed":false,"internalType":"bytes"}],"anonymous":false},{"type":"event","name":"InboxMessageDeliveredFromOrigin","inputs":[{"name":"messageNum","type":"uint256","indexed":true,"internalType":"uint256"}],"anonymous":false},{"type":"event","name":"InvalidateKeyset","inputs":[{"name":"keysetHash","type":"bytes32","indexed":true,"internalType":"bytes32"}],"anonymous":false},{"type":"event","name":"OwnerFunctionCalled","inputs":[{"name":"id","type":"uint256","indexed":true,"internalType":"uint256"}],"anonymous":false},{"type":"event","name":"SequencerBatchData","inputs":[{"name":"batchSequenceNumber","type":"uint256","indexed":true,"internalType":"uint256"},{"name":"data","type":"bytes","indexed":false,"internalType":"bytes"}],"anonymous":false},{"type":"event","name":"SequencerBatchDelivered","inputs":[{"name":"batchSequenceNumber","type":"uint256","indexed":true,"internalType":"uint256"},{"name":"beforeAcc","type":"bytes32","indexed":true,"internalType":"bytes32"},{"name":"afterAcc","type":"bytes32","indexed":true,"internalType":"bytes32"},{"name":"delayedAcc","type":"bytes32","indexed":false,"internalType":"bytes32"},{"name":"afterDelayedMessagesRead","type":"uint256","indexed":false,"internalType":"uint256"},{"name":"timeBounds","type":"tuple","indexed":false,"internalType":"struct IBridge.TimeBounds","components":[{"name":"minTimestamp","type":"uint64","internalType":"uint64"},{"name":"maxTimestamp","type":"uint64","internalType":"uint64"},{"name":"minBlockNumber","type":"uint64","internalType":"uint64"},{"name":"maxBlockNumber","type":"uint64","internalType":"uint64"}]},{"name":"dataLocation","type":"uint8","indexed":false,"internalType":"enum IBridge.BatchDataLocation"}],"anonymous":false},{"type":"event","name":"SetValidKeyset","inputs":[{"name":"keysetHash","type":"bytes32","indexed":true,"internalType":"bytes32"},{"name":"keysetBytes","type":"bytes","indexed":false,"internalType":"bytes"}],"anonymous":false},{"type":"error","name":"AlreadyInit","inputs":[]},{"type":"error","name":"AlreadyValidDASKeyset","inputs":[{"name":"","type":"bytes32","internalType":"bytes32"}]},{"type":"error","name":"BadMaxTimeVariation","inputs":[]},{"type":"error","name":"BadPostUpgradeInit","inputs":[]},{"type":"error","name":"BadSequencerNumber","inputs":[{"name":"stored","type":"uint256","internalType":"uint256"},{"name":"received","type":"uint256","internalType":"uint256"}]},{"type":"error","name":"DataBlobsNotSupported","inputs":[]},{"type":"error","name":"DataTooLarge","inputs":[{"name":"dataLength","type":"uint256","internalType":"uint256"},{"name":"maxDataLength","type":"uint256","internalType":"uint256"}]},{"type":"error","name":"DelayedBackwards","inputs":[]},{"type":"error","name":"DelayedTooFar","inputs":[]},{"type":"error","name":"Deprecated","inputs":[]},{"type":"error","name":"ForceIncludeBlockTooSoon","inputs":[]},{"type":"error","name":"ForceIncludeTimeTooSoon","inputs":[]},{"type":"error","name":"HadZeroInit","inputs":[]},{"type":"error","name":"IncorrectMessagePreimage","inputs":[]},{"type":"error","name":"InitParamZero","inputs":[{"name":"name","type":"string","internalType":"string"}]},{"type":"error","name":"InvalidHeaderFlag","inputs":[{"name":"","type":"bytes1","internalType":"bytes1"}]},{"type":"error","name":"MissingDataHashes","inputs":[]},{"type":"error","name":"NativeTokenMismatch","inputs":[]},{"type":"error","name":"NoSuchKeyset","inputs":[{"name":"","type":"bytes32","internalType":"bytes32"}]},{"type":"error","name":"NotBatchPoster","inputs":[]},{"type":"error","name":"NotBatchPosterManager","inputs":[{"name":"","type":"address","internalType":"address"}]},{"type":"error","name":"NotForked","inputs":[]},{"type":"error","name":"NotOrigin","inputs":[]},{"type":"error","name":"NotOwner","inputs":[{"name":"sender","type":"address","internalType":"address"},{"name":"owner","type":"address","internalType":"address"}]}]` +) -// EigenDAMessageHeaderFlag indicated that the message is a EigenDABlobID which will be used to retrieve data from EigenDA +// EigenDAMessageHeaderFlag indicates the message is an EigenDA message const EigenDAMessageHeaderFlag byte = 0xed func IsEigenDAMessageHeaderByte(header byte) bool { @@ -76,16 +32,6 @@ func hasBits(checking byte, bits byte) bool { return (checking & bits) == bits } -type payload struct { - SequenceNumber *big.Int - BlobVerificationProof *BlobVerificationProof - BlobHeader *BlobHeader - AfterDelayedMessagesRead *big.Int - GasRefunder common.Address - PrevMessageCount *big.Int - NewMessageCount *big.Int -} - type EigenDAWriter interface { Store(context.Context, []byte) (*EigenDABlobInfo, error) Serialize(eigenDABlobInfo *EigenDABlobInfo) ([]byte, error) @@ -100,143 +46,6 @@ type EigenDAConfig struct { Rpc string `koanf:"rpc"` } -func (ec *EigenDAConfig) String() { - fmt.Println(ec.Enable) - fmt.Println(ec.Rpc) -} - -type EigenDABlobID struct { - BatchHeaderHash []byte - BlobIndex uint32 - ReferenceBlockNumber uint32 - QuorumIDs []uint32 -} - -type EigenDABlobInfo struct { - BlobHeader BlobHeader `json:"blobHeader"` - BlobVerificationProof BlobVerificationProof `json:"blobVerificationProof"` -} - -type BlobHeader struct { - Commitment G1Point `json:"commitment"` - DataLength uint32 `json:"dataLength"` - QuorumBlobParams []QuorumBlobParams `json:"quorumBlobParams"` -} - -type G1Point struct { - X *big.Int - Y *big.Int -} - -type QuorumBlobParams struct { - QuorumNumber uint8 - AdversaryThresholdPercentage uint8 - ConfirmationThresholdPercentage uint8 - ChunkLength uint32 -} - -// (uint32,uint32,((bytes32,bytes,bytes,uint32),bytes32,uint32),bytes,bytes) -// -// x x x x x x x x x x -type BlobVerificationProof struct { - BatchID uint32 `json:"batchId"` // uint32 - BlobIndex uint32 `json:"blobIndex"` // uint32 - BatchMetadata BatchMetadata `json:"batchMetadata"` // nest - InclusionProof []byte `json:"inclusionProof"` // bytes - QuorumIndices []byte `json:"quorumIndices"` // bytes -} - -/* - BatchHeader *BatchHeader `protobuf:"bytes,1,opt,name=batch_header,json=batchHeader,proto3" json:"batch_header,omitempty"` - // The hash of all public keys of the operators that did not sign the batch. - SignatoryRecordHash []byte `protobuf:"bytes,2,opt,name=signatory_record_hash,json=signatoryRecordHash,proto3" json:"signatory_record_hash,omitempty"` - // The fee payment paid by users for dispersing this batch. It's the bytes - // representation of a big.Int value. - Fee []byte `protobuf:"bytes,3,opt,name=fee,proto3" json:"fee,omitempty"` - // The Ethereum block number at which the batch is confirmed onchain. - ConfirmationBlockNumber uint32 `protobuf:"varint,4,opt,name=confirmation_block_number,json=confirmationBlockNumber,proto3" json:"confirmation_block_number,omitempty"` - // This is the hash of the ReducedBatchHeader defined onchain, see: - // https://github.com/Layr-Labs/eigenda/blob/master/contracts/src/interfaces/IEigenDAServiceManager.sol#L43 - // The is the message that the operators will sign their signatures on. - BatchHeaderHash []byte `protobuf:"bytes,5,opt,name=batch_header_hash,json=batchHeaderHash,proto3" json:"batch_header_hash,omitempty"` - - -*/ - -type BatchMetadata struct { - BatchHeader BatchHeader `json:"batchHeader"` - Fee []byte `json:"fee"` // bytes - SignatoryRecordHash [32]byte `json:"signatoryRecordHash"` // bytes32 - ConfirmationBlockNumber uint32 `json:"confirmationBlockNumber"` // uint32 - BatchHeaderHash []byte `json:"batchHeaderHash"` // bytes -} - -type BatchHeader struct { - BlobHeadersRoot [32]byte `json:"blobHeadersRoot"` - QuorumNumbers []byte `json:"quorumNumbers"` - SignedStakeForQuorums []byte `json:"signedStakeForQuorums"` - ReferenceBlockNumber uint32 `json:"referenceBlockNumber"` -} - -func ConvertEigenDABlobInfoToDisperserBlobInfo(eigenDA *EigenDABlobInfo) DisperserBlobInfo { - // Convert BlobHeader - var disperserBlobHeader DisperserBlobHeader - commitment := G1Commitment{ - X: eigenDA.BlobHeader.Commitment.X.Bytes(), - Y: eigenDA.BlobHeader.Commitment.Y.Bytes(), - } - quorumParams := make([]BlobQuorumParam, len(eigenDA.BlobHeader.QuorumBlobParams)) - for i, qp := range eigenDA.BlobHeader.QuorumBlobParams { - quorumParams[i] = BlobQuorumParam{ - QuorumNumber: uint32(qp.QuorumNumber), - AdversaryThresholdPercentage: uint32(qp.AdversaryThresholdPercentage), - ConfirmationThresholdPercentage: uint32(qp.ConfirmationThresholdPercentage), - ChunkLength: qp.ChunkLength, - } - } - disperserBlobHeader = DisperserBlobHeader{ - Commitment: commitment, - DataLength: eigenDA.BlobHeader.DataLength, - BlobQuorumParams: quorumParams, - } - - // Convert BlobVerificationProof - var disperserBlobVerificationProof DisperserBlobVerificationProof - if &eigenDA.BlobVerificationProof != nil { - var disperserBatchMetadata DisperserBatchMetadata - if &eigenDA.BlobVerificationProof.BatchMetadata != nil { - metadata := eigenDA.BlobVerificationProof.BatchMetadata - quorumNumbers := metadata.BatchHeader.QuorumNumbers - quorumSignedPercentages := metadata.BatchHeader.SignedStakeForQuorums - - disperserBatchMetadata = DisperserBatchMetadata{ - BatchHeader: DisperserBatchHeader{ - BatchRoot: metadata.BatchHeader.BlobHeadersRoot[:], - QuorumNumbers: quorumNumbers, - QuorumSignedPercentages: quorumSignedPercentages, - ReferenceBlockNumber: metadata.BatchHeader.ReferenceBlockNumber, - }, - BatchHeaderHash: metadata.BatchHeaderHash, - Fee: metadata.Fee, - SignatoryRecordHash: metadata.SignatoryRecordHash[:], - ConfirmationBlockNumber: metadata.ConfirmationBlockNumber, - } - } - disperserBlobVerificationProof = DisperserBlobVerificationProof{ - BatchId: eigenDA.BlobVerificationProof.BatchID, - BlobIndex: eigenDA.BlobVerificationProof.BlobIndex, - BatchMetadata: disperserBatchMetadata, - InclusionProof: eigenDA.BlobVerificationProof.InclusionProof, - QuorumIndexes: eigenDA.BlobVerificationProof.QuorumIndices, - } - } - - return DisperserBlobInfo{ - BlobHeader: disperserBlobHeader, - BlobVerificationProof: disperserBlobVerificationProof, - } -} - type EigenDA struct { client *EigenDAProxyClient } @@ -249,11 +58,10 @@ func NewEigenDA(proxyServerRpc string) (*EigenDA, error) { }, nil } -// TODO: There should probably be two types of query blob as the func (e *EigenDA) QueryBlob(ctx context.Context, cert *EigenDABlobInfo, domainFilter string) ([]byte, error) { - blobInfo := ConvertEigenDABlobInfoToDisperserBlobInfo(cert) + log.Info("Querying blob from EigenDA") - data, err := e.client.Get(ctx, &blobInfo, domainFilter) + data, err := e.client.Get(ctx, cert.ToDisperserBlobInfo(), domainFilter) if err != nil { return nil, err } @@ -261,17 +69,16 @@ func (e *EigenDA) QueryBlob(ctx context.Context, cert *EigenDABlobInfo, domainFi return data, nil } +// Store disperses a blob to EigenDA and returns the appropriate EigenDABlobInfo or certificate values func (e *EigenDA) Store(ctx context.Context, data []byte) (*EigenDABlobInfo, error) { - log.Info("Storing blob") + log.Info("Dispersing blob to EigenDA") var blobInfo = &EigenDABlobInfo{} - commitment, err := e.client.Put(ctx, data) + cert, err := e.client.Put(ctx, data) if err != nil { return nil, err } - log.Info("Stored blob", "commitment", hex.EncodeToString(commitment.GetBlobHeader().GetCommitment().GetX()), "y", hex.EncodeToString(commitment.GetBlobHeader().GetCommitment().GetY())) - - blobInfo.loadBlobInfo(commitment) + blobInfo.LoadBlobInfo(cert) return blobInfo, nil } @@ -280,78 +87,8 @@ func (e *EigenDA) Serialize(blobInfo *EigenDABlobInfo) ([]byte, error) { return rlp.EncodeToBytes(blobInfo) } -func (e *EigenDABlobInfo) SerializeCommitment() ([]byte, error) { - return append(e.BlobHeader.Commitment.X.Bytes(), e.BlobHeader.Commitment.Y.Bytes()...), nil -} - -func (b *EigenDABlobInfo) loadBlobInfo(disperserBlobInfo *disperser.BlobInfo) { - // dump blob info - println("BlobInfo: ", disperserBlobInfo.String()) - - x := disperserBlobInfo.GetBlobHeader().GetCommitment().GetX() - y := disperserBlobInfo.GetBlobHeader().GetCommitment().GetY() - - b.BlobHeader = BlobHeader{} - - b.BlobHeader.Commitment = G1Point{ - X: new(big.Int).SetBytes(x), - Y: new(big.Int).SetBytes(y), - } - - b.BlobHeader.DataLength = disperserBlobInfo.GetBlobHeader().GetDataLength() - - for _, quorumBlobParam := range disperserBlobInfo.GetBlobHeader().GetBlobQuorumParams() { - b.BlobHeader.QuorumBlobParams = append(b.BlobHeader.QuorumBlobParams, QuorumBlobParams{ - QuorumNumber: uint8(quorumBlobParam.QuorumNumber), - AdversaryThresholdPercentage: uint8(quorumBlobParam.AdversaryThresholdPercentage), - ConfirmationThresholdPercentage: uint8(quorumBlobParam.ConfirmationThresholdPercentage), - ChunkLength: quorumBlobParam.ChunkLength, - }) - } - - println("Set quorum blob params") - var signatoryRecordHash [32]byte - copy(signatoryRecordHash[:], disperserBlobInfo.GetBlobVerificationProof().GetBatchMetadata().GetSignatoryRecordHash()) - - println("Set signatory record hash") - b.BlobVerificationProof.BatchID = disperserBlobInfo.GetBlobVerificationProof().GetBatchId() - b.BlobVerificationProof.BlobIndex = disperserBlobInfo.GetBlobVerificationProof().GetBlobIndex() - b.BlobVerificationProof.BatchMetadata = BatchMetadata{ - Fee: disperserBlobInfo.GetBlobVerificationProof().GetBatchMetadata().GetFee(), - BatchHeaderHash: disperserBlobInfo.GetBlobVerificationProof().GetBatchMetadata().GetBatchHeaderHash(), - BatchHeader: BatchHeader{}, - SignatoryRecordHash: signatoryRecordHash, - ConfirmationBlockNumber: disperserBlobInfo.GetBlobVerificationProof().GetBatchMetadata().GetConfirmationBlockNumber(), - } - - // dump fields - println("BatchID: ", b.BlobVerificationProof.BatchID) - println("BlobIndex: ", b.BlobVerificationProof.BlobIndex) - println("ConfirmationBlockNumber: ", b.BlobVerificationProof.BatchMetadata.ConfirmationBlockNumber) - - b.BlobVerificationProof.InclusionProof = disperserBlobInfo.GetBlobVerificationProof().GetInclusionProof() - b.BlobVerificationProof.QuorumIndices = disperserBlobInfo.GetBlobVerificationProof().GetQuorumIndexes() - - println("Set inclusion proof and quorum indices") - - batchRootSlice := disperserBlobInfo.GetBlobVerificationProof().GetBatchMetadata().GetBatchHeader().GetBatchRoot() - var blobHeadersRoot [32]byte - copy(blobHeadersRoot[:], batchRootSlice) - b.BlobVerificationProof.BatchMetadata.BatchHeader.BlobHeadersRoot = blobHeadersRoot - - b.BlobVerificationProof.BatchMetadata.BatchHeader.QuorumNumbers = disperserBlobInfo.GetBlobVerificationProof().GetBatchMetadata().GetBatchHeader().GetQuorumNumbers() - b.BlobVerificationProof.BatchMetadata.BatchHeader.SignedStakeForQuorums = disperserBlobInfo.GetBlobVerificationProof().GetBatchMetadata().GetBatchHeader().GetQuorumSignedPercentages() - b.BlobVerificationProof.BatchMetadata.BatchHeader.ReferenceBlockNumber = disperserBlobInfo.GetBlobVerificationProof().GetBatchMetadata().GetBatchHeader().GetReferenceBlockNumber() -} - -// new hash format is different now: -// ed + abi.encode - -// calldata layout of addSequencerL2BatchFromEigenDA looks like the following: -// 0-4 function signature -// 4-36 sequencer func RecoverPayloadFromEigenDABatch(ctx context.Context, - sequencerMsg []byte, // this is literally the calldata of the transaction/ + sequencerMsg []byte, daReader EigenDAReader, preimages map[arbutil.PreimageType]map[common.Hash][]byte, domain string, @@ -365,23 +102,26 @@ func RecoverPayloadFromEigenDABatch(ctx context.Context, eigenDAPreimages = preimages[arbutil.EigenDaPreimageType] } - blobInfo := ParseSequencerMsg(sequencerMsg) + blobInfo, err := ParseSequencerMsg(sequencerMsg) + if err != nil { + log.Error("Failed to parse sequencer message", "err", err) + return nil, err + } - // default is binary and we want polynomial so we don't need to open 2 points cc @ethen data, err := daReader.QueryBlob(ctx, blobInfo, domain) if err != nil { log.Error("Failed to query data from EigenDA", "err", err) return nil, err } - // record preimage data, - log.Info("Recording preimage data for EigenDA") - pointer, err := blobInfo.SerializeCommitment() + // record preimage data for EigenDA using the hash of the commitment + // for lookups in the replay script + kzgCommit, err := blobInfo.SerializeCommitment() if err != nil { return nil, err } shaDataHash := sha256.New() - shaDataHash.Write(pointer) + shaDataHash.Write(kzgCommit) dataHash := shaDataHash.Sum([]byte{}) dataHash[0] = 1 if eigenDAPreimages != nil { @@ -390,128 +130,39 @@ func RecoverPayloadFromEigenDABatch(ctx context.Context, return data, nil } -func ParseSequencerMsg(calldata []byte) *EigenDABlobInfo { - println("ParseSequencerMsg") - println(fmt.Sprintf("Calldata %s", hexutil.Encode(calldata))) +// ParseSequencerMsg parses the inbox tx calldata into a structured EigenDABlobInfo +func ParseSequencerMsg(calldata []byte) (*EigenDABlobInfo, error) { - // TODO: Import this via relative path - sequencerInboxABI := `[{"type":"constructor","inputs":[{"name":"_maxDataSize","type":"uint256","internalType":"uint256"},{"name":"reader4844_","type":"address","internalType":"contract IReader4844"},{"name":"eigenDAServiceManager_","type":"address","internalType":"contract IEigenDAServiceManager"},{"name":"eigenDARollupManager_","type":"address","internalType":"contract IRollupManager"},{"name":"_isUsingFeeToken","type":"bool","internalType":"bool"}],"stateMutability":"nonpayable"},{"type":"function","name":"BROTLI_MESSAGE_HEADER_FLAG","inputs":[],"outputs":[{"name":"","type":"bytes1","internalType":"bytes1"}],"stateMutability":"view"},{"type":"function","name":"DAS_MESSAGE_HEADER_FLAG","inputs":[],"outputs":[{"name":"","type":"bytes1","internalType":"bytes1"}],"stateMutability":"view"},{"type":"function","name":"DATA_AUTHENTICATED_FLAG","inputs":[],"outputs":[{"name":"","type":"bytes1","internalType":"bytes1"}],"stateMutability":"view"},{"type":"function","name":"DATA_BLOB_HEADER_FLAG","inputs":[],"outputs":[{"name":"","type":"bytes1","internalType":"bytes1"}],"stateMutability":"view"},{"type":"function","name":"EIGENDA_MESSAGE_HEADER_FLAG","inputs":[],"outputs":[{"name":"","type":"bytes1","internalType":"bytes1"}],"stateMutability":"view"},{"type":"function","name":"HEADER_LENGTH","inputs":[],"outputs":[{"name":"","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"type":"function","name":"TREE_DAS_MESSAGE_HEADER_FLAG","inputs":[],"outputs":[{"name":"","type":"bytes1","internalType":"bytes1"}],"stateMutability":"view"},{"type":"function","name":"ZERO_HEAVY_MESSAGE_HEADER_FLAG","inputs":[],"outputs":[{"name":"","type":"bytes1","internalType":"bytes1"}],"stateMutability":"view"},{"type":"function","name":"addSequencerL2Batch","inputs":[{"name":"sequenceNumber","type":"uint256","internalType":"uint256"},{"name":"data","type":"bytes","internalType":"bytes"},{"name":"afterDelayedMessagesRead","type":"uint256","internalType":"uint256"},{"name":"gasRefunder","type":"address","internalType":"contract IGasRefunder"},{"name":"prevMessageCount","type":"uint256","internalType":"uint256"},{"name":"newMessageCount","type":"uint256","internalType":"uint256"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"addSequencerL2BatchFromBlobs","inputs":[{"name":"sequenceNumber","type":"uint256","internalType":"uint256"},{"name":"afterDelayedMessagesRead","type":"uint256","internalType":"uint256"},{"name":"gasRefunder","type":"address","internalType":"contract IGasRefunder"},{"name":"prevMessageCount","type":"uint256","internalType":"uint256"},{"name":"newMessageCount","type":"uint256","internalType":"uint256"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"addSequencerL2BatchFromEigenDA","inputs":[{"name":"sequenceNumber","type":"uint256","internalType":"uint256"},{"name":"blobVerificationProof","type":"tuple","internalType":"struct EigenDARollupUtils.BlobVerificationProof","components":[{"name":"batchId","type":"uint32","internalType":"uint32"},{"name":"blobIndex","type":"uint32","internalType":"uint32"},{"name":"batchMetadata","type":"tuple","internalType":"struct IEigenDAServiceManager.BatchMetadata","components":[{"name":"batchHeader","type":"tuple","internalType":"struct IEigenDAServiceManager.BatchHeader","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"}]},{"name":"blobHeader","type":"tuple","internalType":"struct IEigenDAServiceManager.BlobHeader","components":[{"name":"commitment","type":"tuple","internalType":"struct BN254.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":"struct IEigenDAServiceManager.QuorumBlobParam[]","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":"afterDelayedMessagesRead","type":"uint256","internalType":"uint256"},{"name":"prevMessageCount","type":"uint256","internalType":"uint256"},{"name":"newMessageCount","type":"uint256","internalType":"uint256"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"addSequencerL2BatchFromOrigin","inputs":[{"name":"","type":"uint256","internalType":"uint256"},{"name":"","type":"bytes","internalType":"bytes"},{"name":"","type":"uint256","internalType":"uint256"},{"name":"","type":"address","internalType":"contract IGasRefunder"}],"outputs":[],"stateMutability":"pure"},{"type":"function","name":"addSequencerL2BatchFromOrigin","inputs":[{"name":"sequenceNumber","type":"uint256","internalType":"uint256"},{"name":"data","type":"bytes","internalType":"bytes"},{"name":"afterDelayedMessagesRead","type":"uint256","internalType":"uint256"},{"name":"gasRefunder","type":"address","internalType":"contract IGasRefunder"},{"name":"prevMessageCount","type":"uint256","internalType":"uint256"},{"name":"newMessageCount","type":"uint256","internalType":"uint256"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"batchCount","inputs":[],"outputs":[{"name":"","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"type":"function","name":"batchPosterManager","inputs":[],"outputs":[{"name":"","type":"address","internalType":"address"}],"stateMutability":"view"},{"type":"function","name":"bridge","inputs":[],"outputs":[{"name":"","type":"address","internalType":"contract IBridge"}],"stateMutability":"view"},{"type":"function","name":"dasKeySetInfo","inputs":[{"name":"","type":"bytes32","internalType":"bytes32"}],"outputs":[{"name":"isValidKeyset","type":"bool","internalType":"bool"},{"name":"creationBlock","type":"uint64","internalType":"uint64"}],"stateMutability":"view"},{"type":"function","name":"eigenDARollupManager","inputs":[],"outputs":[{"name":"","type":"address","internalType":"contract IRollupManager"}],"stateMutability":"view"},{"type":"function","name":"eigenDAServiceManager","inputs":[],"outputs":[{"name":"","type":"address","internalType":"contract IEigenDAServiceManager"}],"stateMutability":"view"},{"type":"function","name":"forceInclusion","inputs":[{"name":"_totalDelayedMessagesRead","type":"uint256","internalType":"uint256"},{"name":"kind","type":"uint8","internalType":"uint8"},{"name":"l1BlockAndTime","type":"uint64[2]","internalType":"uint64[2]"},{"name":"baseFeeL1","type":"uint256","internalType":"uint256"},{"name":"sender","type":"address","internalType":"address"},{"name":"messageDataHash","type":"bytes32","internalType":"bytes32"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"getKeysetCreationBlock","inputs":[{"name":"ksHash","type":"bytes32","internalType":"bytes32"}],"outputs":[{"name":"","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"type":"function","name":"inboxAccs","inputs":[{"name":"index","type":"uint256","internalType":"uint256"}],"outputs":[{"name":"","type":"bytes32","internalType":"bytes32"}],"stateMutability":"view"},{"type":"function","name":"initialize","inputs":[{"name":"bridge_","type":"address","internalType":"contract IBridge"},{"name":"maxTimeVariation_","type":"tuple","internalType":"struct ISequencerInbox.MaxTimeVariation","components":[{"name":"delayBlocks","type":"uint256","internalType":"uint256"},{"name":"futureBlocks","type":"uint256","internalType":"uint256"},{"name":"delaySeconds","type":"uint256","internalType":"uint256"},{"name":"futureSeconds","type":"uint256","internalType":"uint256"}]}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"invalidateKeysetHash","inputs":[{"name":"ksHash","type":"bytes32","internalType":"bytes32"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"isBatchPoster","inputs":[{"name":"","type":"address","internalType":"address"}],"outputs":[{"name":"","type":"bool","internalType":"bool"}],"stateMutability":"view"},{"type":"function","name":"isSequencer","inputs":[{"name":"","type":"address","internalType":"address"}],"outputs":[{"name":"","type":"bool","internalType":"bool"}],"stateMutability":"view"},{"type":"function","name":"isUsingFeeToken","inputs":[],"outputs":[{"name":"","type":"bool","internalType":"bool"}],"stateMutability":"view"},{"type":"function","name":"isValidKeysetHash","inputs":[{"name":"ksHash","type":"bytes32","internalType":"bytes32"}],"outputs":[{"name":"","type":"bool","internalType":"bool"}],"stateMutability":"view"},{"type":"function","name":"maxDataSize","inputs":[],"outputs":[{"name":"","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"type":"function","name":"maxTimeVariation","inputs":[],"outputs":[{"name":"","type":"uint256","internalType":"uint256"},{"name":"","type":"uint256","internalType":"uint256"},{"name":"","type":"uint256","internalType":"uint256"},{"name":"","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"type":"function","name":"postUpgradeInit","inputs":[],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"reader4844","inputs":[],"outputs":[{"name":"","type":"address","internalType":"contract IReader4844"}],"stateMutability":"view"},{"type":"function","name":"removeDelayAfterFork","inputs":[],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"rollup","inputs":[],"outputs":[{"name":"","type":"address","internalType":"contract IOwnable"}],"stateMutability":"view"},{"type":"function","name":"setBatchPosterManager","inputs":[{"name":"newBatchPosterManager","type":"address","internalType":"address"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"setIsBatchPoster","inputs":[{"name":"addr","type":"address","internalType":"address"},{"name":"isBatchPoster_","type":"bool","internalType":"bool"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"setIsSequencer","inputs":[{"name":"addr","type":"address","internalType":"address"},{"name":"isSequencer_","type":"bool","internalType":"bool"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"setMaxTimeVariation","inputs":[{"name":"maxTimeVariation_","type":"tuple","internalType":"struct ISequencerInbox.MaxTimeVariation","components":[{"name":"delayBlocks","type":"uint256","internalType":"uint256"},{"name":"futureBlocks","type":"uint256","internalType":"uint256"},{"name":"delaySeconds","type":"uint256","internalType":"uint256"},{"name":"futureSeconds","type":"uint256","internalType":"uint256"}]}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"setValidKeyset","inputs":[{"name":"keysetBytes","type":"bytes","internalType":"bytes"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"totalDelayedMessagesRead","inputs":[],"outputs":[{"name":"","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"type":"event","name":"InboxMessageDelivered","inputs":[{"name":"messageNum","type":"uint256","indexed":true,"internalType":"uint256"},{"name":"data","type":"bytes","indexed":false,"internalType":"bytes"}],"anonymous":false},{"type":"event","name":"InboxMessageDeliveredFromOrigin","inputs":[{"name":"messageNum","type":"uint256","indexed":true,"internalType":"uint256"}],"anonymous":false},{"type":"event","name":"InvalidateKeyset","inputs":[{"name":"keysetHash","type":"bytes32","indexed":true,"internalType":"bytes32"}],"anonymous":false},{"type":"event","name":"OwnerFunctionCalled","inputs":[{"name":"id","type":"uint256","indexed":true,"internalType":"uint256"}],"anonymous":false},{"type":"event","name":"SequencerBatchData","inputs":[{"name":"batchSequenceNumber","type":"uint256","indexed":true,"internalType":"uint256"},{"name":"data","type":"bytes","indexed":false,"internalType":"bytes"}],"anonymous":false},{"type":"event","name":"SequencerBatchDelivered","inputs":[{"name":"batchSequenceNumber","type":"uint256","indexed":true,"internalType":"uint256"},{"name":"beforeAcc","type":"bytes32","indexed":true,"internalType":"bytes32"},{"name":"afterAcc","type":"bytes32","indexed":true,"internalType":"bytes32"},{"name":"delayedAcc","type":"bytes32","indexed":false,"internalType":"bytes32"},{"name":"afterDelayedMessagesRead","type":"uint256","indexed":false,"internalType":"uint256"},{"name":"timeBounds","type":"tuple","indexed":false,"internalType":"struct IBridge.TimeBounds","components":[{"name":"minTimestamp","type":"uint64","internalType":"uint64"},{"name":"maxTimestamp","type":"uint64","internalType":"uint64"},{"name":"minBlockNumber","type":"uint64","internalType":"uint64"},{"name":"maxBlockNumber","type":"uint64","internalType":"uint64"}]},{"name":"dataLocation","type":"uint8","indexed":false,"internalType":"enum IBridge.BatchDataLocation"}],"anonymous":false},{"type":"event","name":"SetValidKeyset","inputs":[{"name":"keysetHash","type":"bytes32","indexed":true,"internalType":"bytes32"},{"name":"keysetBytes","type":"bytes","indexed":false,"internalType":"bytes"}],"anonymous":false},{"type":"error","name":"AlreadyInit","inputs":[]},{"type":"error","name":"AlreadyValidDASKeyset","inputs":[{"name":"","type":"bytes32","internalType":"bytes32"}]},{"type":"error","name":"BadMaxTimeVariation","inputs":[]},{"type":"error","name":"BadPostUpgradeInit","inputs":[]},{"type":"error","name":"BadSequencerNumber","inputs":[{"name":"stored","type":"uint256","internalType":"uint256"},{"name":"received","type":"uint256","internalType":"uint256"}]},{"type":"error","name":"DataBlobsNotSupported","inputs":[]},{"type":"error","name":"DataTooLarge","inputs":[{"name":"dataLength","type":"uint256","internalType":"uint256"},{"name":"maxDataLength","type":"uint256","internalType":"uint256"}]},{"type":"error","name":"DelayedBackwards","inputs":[]},{"type":"error","name":"DelayedTooFar","inputs":[]},{"type":"error","name":"Deprecated","inputs":[]},{"type":"error","name":"ForceIncludeBlockTooSoon","inputs":[]},{"type":"error","name":"ForceIncludeTimeTooSoon","inputs":[]},{"type":"error","name":"HadZeroInit","inputs":[]},{"type":"error","name":"IncorrectMessagePreimage","inputs":[]},{"type":"error","name":"InitParamZero","inputs":[{"name":"name","type":"string","internalType":"string"}]},{"type":"error","name":"InvalidHeaderFlag","inputs":[{"name":"","type":"bytes1","internalType":"bytes1"}]},{"type":"error","name":"MissingDataHashes","inputs":[]},{"type":"error","name":"NativeTokenMismatch","inputs":[]},{"type":"error","name":"NoSuchKeyset","inputs":[{"name":"","type":"bytes32","internalType":"bytes32"}]},{"type":"error","name":"NotBatchPoster","inputs":[]},{"type":"error","name":"NotBatchPosterManager","inputs":[{"name":"","type":"address","internalType":"address"}]},{"type":"error","name":"NotForked","inputs":[]},{"type":"error","name":"NotOrigin","inputs":[]},{"type":"error","name":"NotOwner","inputs":[{"name":"sender","type":"address","internalType":"address"},{"name":"owner","type":"address","internalType":"address"}]}]` + if len(calldata) < 4 { + return nil, errors.New("calldata is shorter than expected method signature length") + } - // TODO - remove use of panics + // TODO: Construct the ABI struct at node initialization abi, err := abi.JSON(strings.NewReader(sequencerInboxABI)) if err != nil { - panic(err) + return nil, err } method, err := abi.MethodById(calldata[0:4]) if err != nil { - panic(err) + return nil, err } - p, err := method.Inputs.Unpack(calldata[4:]) + callDataValues, err := method.Inputs.Unpack(calldata[4:]) if err != nil { - panic(err) + return nil, err } - payload, err := convertToPayload(p) + inboxPayload := &InboxPayload{} + + err = inboxPayload.Load(callDataValues) if err != nil { - panic(err) + return nil, err } return &EigenDABlobInfo{ - BlobVerificationProof: *payload.BlobVerificationProof, - BlobHeader: *payload.BlobHeader, - } - -} - -func convertToPayload(pa []interface{}) (payload, error) { - println("Converting to payload") - - blobVerificationProof := pa[1].(struct { - BatchId uint32 `json:"batchId"` - BlobIndex uint32 `json:"blobIndex"` - BatchMetadata struct { - BatchHeader struct { - BlobHeadersRoot [32]uint8 `json:"blobHeadersRoot"` - QuorumNumbers []uint8 `json:"quorumNumbers"` - SignedStakeForQuorums []uint8 `json:"signedStakeForQuorums"` - ReferenceBlockNumber uint32 `json:"referenceBlockNumber"` - } `json:"batchHeader"` - SignatoryRecordHash [32]uint8 `json:"signatoryRecordHash"` - ConfirmationBlockNumber uint32 `json:"confirmationBlockNumber"` - } `json:"batchMetadata"` - InclusionProof []uint8 `json:"inclusionProof"` - QuorumIndices []uint8 `json:"quorumIndices"` - }) - - blobHeader := pa[2].(struct { - Commitment struct { - X *big.Int `json:"X"` - Y *big.Int `json:"Y"` - } `json:"commitment"` - DataLength uint32 `json:"dataLength"` - QuorumBlobParams []struct { - QuorumNumber uint8 `json:"quorumNumber"` - AdversaryThresholdPercentage uint8 `json:"adversaryThresholdPercentage"` - ConfirmationThresholdPercentage uint8 `json:"confirmationThresholdPercentage"` - ChunkLength uint32 `json:"chunkLength"` - } `json:"quorumBlobParams"` - }) - - return payload{ - SequenceNumber: pa[0].(*big.Int), - BlobVerificationProof: &BlobVerificationProof{ - BatchID: blobVerificationProof.BatchId, - BlobIndex: blobVerificationProof.BlobIndex, - BatchMetadata: BatchMetadata{ - BatchHeader: BatchHeader{ - BlobHeadersRoot: blobVerificationProof.BatchMetadata.BatchHeader.BlobHeadersRoot, - QuorumNumbers: blobVerificationProof.BatchMetadata.BatchHeader.QuorumNumbers, - SignedStakeForQuorums: blobVerificationProof.BatchMetadata.BatchHeader.SignedStakeForQuorums, - ReferenceBlockNumber: blobVerificationProof.BatchMetadata.BatchHeader.ReferenceBlockNumber, - }, - Fee: []byte{}, - BatchHeaderHash: []byte{}, - - SignatoryRecordHash: blobVerificationProof.BatchMetadata.SignatoryRecordHash, - ConfirmationBlockNumber: blobVerificationProof.BatchMetadata.ConfirmationBlockNumber, - }, - InclusionProof: blobVerificationProof.InclusionProof, - QuorumIndices: blobVerificationProof.QuorumIndices, - }, - BlobHeader: &BlobHeader{ - Commitment: G1Point{ - X: blobHeader.Commitment.X, - Y: blobHeader.Commitment.Y, - }, - DataLength: blobHeader.DataLength, - QuorumBlobParams: func() []QuorumBlobParams { - params := make([]QuorumBlobParams, len(blobHeader.QuorumBlobParams)) - for i, p := range blobHeader.QuorumBlobParams { - params[i] = QuorumBlobParams{ - QuorumNumber: p.QuorumNumber, - AdversaryThresholdPercentage: p.AdversaryThresholdPercentage, - ConfirmationThresholdPercentage: p.ConfirmationThresholdPercentage, - ChunkLength: p.ChunkLength, - } - } - return params - }(), - }, - AfterDelayedMessagesRead: pa[3].(*big.Int), - PrevMessageCount: pa[4].(*big.Int), - NewMessageCount: pa[5].(*big.Int), + BlobVerificationProof: inboxPayload.BlobVerificationProof, + BlobHeader: inboxPayload.BlobHeader, }, nil -} -func convertCalldataToInt(calldata []byte) (int, error) { - num := new(big.Int).SetBytes(calldata) - - if num.IsInt64() { - return int(num.Uint64()), nil - } - - fmt.Println(num) - return 0, errors.New("calldata is not a valid int") } diff --git a/eigenda/eigenda_test.go b/eigenda/eigenda_test.go new file mode 100644 index 000000000..844e85c07 --- /dev/null +++ b/eigenda/eigenda_test.go @@ -0,0 +1,34 @@ +package eigenda + +import ( + "encoding/hex" + "testing" +) + +func TestParseSequencerMsg(t *testing.T) { + calldataString := "43a85289000000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000340000000000000000000000000000000000000000000000000000000000000000300000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000004500000000000000000000000000000000000000000000000000000000000001a400000000000000000000000000000000000000000000000000000000000000a00000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000024000000000000000000000000000000000000000000000000000000000000000603110cdec4dda50a1465d571f980c07db659331ffc7b376d5eef7fe298ded2f3f00000000000000000000000000000000000000000000000000000000000000043110cdec4dda50a1465d571f980c07db659331ffc7b376d5eef7fe298ded2f3f000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000c000000000000000000000000000000000000000000000000000000000000000040000000000000000000000000000000000000000000000000000000000000002010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000026090000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a54baeff59fa897b3360d0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000020100000000000000000000000000000000000000000000000000000000000000007e2db2683cd5ec31b62b50b9a685140076b483f1f85b931f493480cbfd9eda10a964fcc86dbace6cedd749b878523e8bdc8ad1c04104cdbf1482d79e3367b90000000000000000000000000000000000000000000000000000000000000040000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000001d000000000000000000000000000000000000000000000000000000000000001e000000000000000000000000000000000000000000000000000000000000012c" + + calldata, err := hex.DecodeString(calldataString) + if err != nil { + t.Fatalf("Failed to decode calldata: %v", err) + } + + expected := &EigenDABlobInfo{ + // BatchHeader content for hashing + BlobVerificationProof: BlobVerificationProof{ + BatchID: 69, + }, + } + + // Call the function with the mock calldata + result, err := ParseSequencerMsg(calldata) + if err != nil { + t.Fatalf("ParseSequencerMsg returned an error: %v", err) + } + + // TODO: Extend the test to cover all fields + if result.BlobVerificationProof.BatchID != expected.BlobVerificationProof.BatchID { + t.Errorf("BlobIndex was incorrect, got: %v, want: %v", result.BlobVerificationProof.BatchID, expected.BlobVerificationProof.BatchID) + } + +} diff --git a/eigenda/eigenda_proxy_client.go b/eigenda/proxy.go similarity index 100% rename from eigenda/eigenda_proxy_client.go rename to eigenda/proxy.go diff --git a/eigenda/types.go b/eigenda/types.go new file mode 100644 index 000000000..22d2c89bf --- /dev/null +++ b/eigenda/types.go @@ -0,0 +1,327 @@ +package eigenda + +import ( + "errors" + "math/big" + + "github.com/Layr-Labs/eigenda/api/grpc/disperser" +) + +/* + Two rather redundant implementations of the same data structure exist: + - EigenDABlobInfo: represents the EigenDABlobInfo struct which is encoded in the calldata of the sequencer message for on-chain cert verification + - DisperserBlobInfo: represents the disperser.BlobInfo struct generated by the grpc disperser protobuf +*/ + +type EigenDABlobInfo struct { + BlobHeader BlobHeader `json:"blobHeader"` + BlobVerificationProof BlobVerificationProof `json:"blobVerificationProof"` +} + +type BlobHeader struct { + Commitment G1Point `json:"commitment"` + DataLength uint32 `json:"dataLength"` + QuorumBlobParams []QuorumBlobParams `json:"quorumBlobParams"` +} + +type G1Point struct { + X *big.Int + Y *big.Int +} + +type QuorumBlobParams struct { + QuorumNumber uint8 + AdversaryThresholdPercentage uint8 + ConfirmationThresholdPercentage uint8 + ChunkLength uint32 +} + +type BlobVerificationProof struct { + BatchID uint32 `json:"batchId"` + BlobIndex uint32 `json:"blobIndex"` + BatchMetadata BatchMetadata `json:"batchMetadata"` + InclusionProof []byte `json:"inclusionProof"` + QuorumIndices []byte `json:"quorumIndices"` +} + +type BatchMetadata struct { + BatchHeader BatchHeader `json:"batchHeader"` + Fee []byte `json:"fee"` + SignatoryRecordHash [32]byte `json:"signatoryRecordHash"` + ConfirmationBlockNumber uint32 `json:"confirmationBlockNumber"` + BatchHeaderHash []byte `json:"batchHeaderHash"` +} + +type BatchHeader struct { + BlobHeadersRoot [32]byte `json:"blobHeadersRoot"` + QuorumNumbers []byte `json:"quorumNumbers"` + SignedStakeForQuorums []byte `json:"signedStakeForQuorums"` + ReferenceBlockNumber uint32 `json:"referenceBlockNumber"` +} + +// SerializeCommitment serializes the kzg commitment points to a byte slice +func (e *EigenDABlobInfo) SerializeCommitment() ([]byte, error) { + return append(e.BlobHeader.Commitment.X.Bytes(), e.BlobHeader.Commitment.Y.Bytes()...), nil +} + +// loadBlobInfo loads the disperser.BlobInfo struct into the EigenDABlobInfo struct +func (b *EigenDABlobInfo) LoadBlobInfo(disperserBlobInfo *disperser.BlobInfo) { + + x := disperserBlobInfo.GetBlobHeader().GetCommitment().GetX() + y := disperserBlobInfo.GetBlobHeader().GetCommitment().GetY() + + b.BlobHeader = BlobHeader{} + + b.BlobHeader.Commitment = G1Point{ + X: new(big.Int).SetBytes(x), + Y: new(big.Int).SetBytes(y), + } + + b.BlobHeader.DataLength = disperserBlobInfo.GetBlobHeader().GetDataLength() + + for _, quorumBlobParam := range disperserBlobInfo.GetBlobHeader().GetBlobQuorumParams() { + b.BlobHeader.QuorumBlobParams = append(b.BlobHeader.QuorumBlobParams, QuorumBlobParams{ + QuorumNumber: uint8(quorumBlobParam.QuorumNumber), + AdversaryThresholdPercentage: uint8(quorumBlobParam.AdversaryThresholdPercentage), + ConfirmationThresholdPercentage: uint8(quorumBlobParam.ConfirmationThresholdPercentage), + ChunkLength: quorumBlobParam.ChunkLength, + }) + } + + var signatoryRecordHash [32]byte + copy(signatoryRecordHash[:], disperserBlobInfo.GetBlobVerificationProof().GetBatchMetadata().GetSignatoryRecordHash()) + + b.BlobVerificationProof.BatchID = disperserBlobInfo.GetBlobVerificationProof().GetBatchId() + b.BlobVerificationProof.BlobIndex = disperserBlobInfo.GetBlobVerificationProof().GetBlobIndex() + b.BlobVerificationProof.BatchMetadata = BatchMetadata{ + Fee: disperserBlobInfo.GetBlobVerificationProof().GetBatchMetadata().GetFee(), + BatchHeaderHash: disperserBlobInfo.GetBlobVerificationProof().GetBatchMetadata().GetBatchHeaderHash(), + BatchHeader: BatchHeader{}, + SignatoryRecordHash: signatoryRecordHash, + ConfirmationBlockNumber: disperserBlobInfo.GetBlobVerificationProof().GetBatchMetadata().GetConfirmationBlockNumber(), + } + + b.BlobVerificationProof.InclusionProof = disperserBlobInfo.GetBlobVerificationProof().GetInclusionProof() + b.BlobVerificationProof.QuorumIndices = disperserBlobInfo.GetBlobVerificationProof().GetQuorumIndexes() + + batchRootSlice := disperserBlobInfo.GetBlobVerificationProof().GetBatchMetadata().GetBatchHeader().GetBatchRoot() + var blobHeadersRoot [32]byte + copy(blobHeadersRoot[:], batchRootSlice) + b.BlobVerificationProof.BatchMetadata.BatchHeader.BlobHeadersRoot = blobHeadersRoot + + b.BlobVerificationProof.BatchMetadata.BatchHeader.QuorumNumbers = disperserBlobInfo.GetBlobVerificationProof().GetBatchMetadata().GetBatchHeader().GetQuorumNumbers() + b.BlobVerificationProof.BatchMetadata.BatchHeader.SignedStakeForQuorums = disperserBlobInfo.GetBlobVerificationProof().GetBatchMetadata().GetBatchHeader().GetQuorumSignedPercentages() + b.BlobVerificationProof.BatchMetadata.BatchHeader.ReferenceBlockNumber = disperserBlobInfo.GetBlobVerificationProof().GetBatchMetadata().GetBatchHeader().GetReferenceBlockNumber() +} + +/* +DisperserBlobInfo is a Go struct that represents the disperser.BlobInfo struct +without requiring the overhead of importing the disperser package from core eigenda: + - https://github.com/Layr-Labs/eigenda/blob/master/api/grpc/disperser/disperser.pb.go +*/ + +type DisperserBlobInfo struct { + BlobHeader DisperserBlobHeader `json:"blob_header,omitempty"` + BlobVerificationProof DisperserBlobVerificationProof `json:"blob_verification_proof,omitempty"` +} + +type DisperserBlobHeader struct { + Commitment G1Commitment `json:"commitment,omitempty"` + DataLength uint32 `json:"data_length,omitempty"` + BlobQuorumParams []BlobQuorumParam `json:"blob_quorum_params,omitempty"` +} + +type G1Commitment struct { + X []byte `json:"x,omitempty"` + Y []byte `json:"y,omitempty"` +} + +type BlobQuorumParam struct { + QuorumNumber uint32 `json:"quorum_number,omitempty"` + AdversaryThresholdPercentage uint32 `json:"adversary_threshold_percentage,omitempty"` + ConfirmationThresholdPercentage uint32 `json:"confirmation_threshold_percentage,omitempty"` + ChunkLength uint32 `json:"chunk_length,omitempty"` +} + +type DisperserBlobVerificationProof struct { + BatchId uint32 `json:"batch_id,omitempty"` + BlobIndex uint32 `json:"blob_index,omitempty"` + BatchMetadata DisperserBatchMetadata `json:"batch_metadata,omitempty"` + InclusionProof []byte `json:"inclusion_proof,omitempty"` + QuorumIndexes []byte `json:"quorum_indexes,omitempty"` +} + +type DisperserBatchMetadata struct { + BatchHeader DisperserBatchHeader `json:"batch_header,omitempty"` + SignatoryRecordHash []byte `json:"signatory_record_hash,omitempty"` + Fee []byte `json:"fee"` + ConfirmationBlockNumber uint32 `json:"confirmation_block_number,omitempty"` + BatchHeaderHash []byte `json:"batchHeaderHash"` +} + +type DisperserBatchHeader struct { + BatchRoot []byte `json:"batch_root,omitempty"` + QuorumNumbers []byte `json:"quorum_numbers,omitempty"` + QuorumSignedPercentages []byte `json:"quorum_signed_percentages,omitempty"` + ReferenceBlockNumber uint32 `json:"reference_block_number,omitempty"` +} + +/* +Convert EigenDABlobInfo to DisperserBlobInfo struct for compatibility with proxy server expected type +*/ +func (e *EigenDABlobInfo) ToDisperserBlobInfo() *DisperserBlobInfo { + // Convert BlobHeader + var disperserBlobHeader DisperserBlobHeader + commitment := G1Commitment{ + X: e.BlobHeader.Commitment.X.Bytes(), + Y: e.BlobHeader.Commitment.Y.Bytes(), + } + quorumParams := make([]BlobQuorumParam, len(e.BlobHeader.QuorumBlobParams)) + for i, qp := range e.BlobHeader.QuorumBlobParams { + quorumParams[i] = BlobQuorumParam{ + QuorumNumber: uint32(qp.QuorumNumber), + AdversaryThresholdPercentage: uint32(qp.AdversaryThresholdPercentage), + ConfirmationThresholdPercentage: uint32(qp.ConfirmationThresholdPercentage), + ChunkLength: qp.ChunkLength, + } + } + disperserBlobHeader = DisperserBlobHeader{ + Commitment: commitment, + DataLength: e.BlobHeader.DataLength, + BlobQuorumParams: quorumParams, + } + + // Convert BlobVerificationProof + var disperserBlobVerificationProof DisperserBlobVerificationProof + if &e.BlobVerificationProof != nil { + var disperserBatchMetadata DisperserBatchMetadata + if &e.BlobVerificationProof.BatchMetadata != nil { + metadata := e.BlobVerificationProof.BatchMetadata + quorumNumbers := metadata.BatchHeader.QuorumNumbers + quorumSignedPercentages := metadata.BatchHeader.SignedStakeForQuorums + + disperserBatchMetadata = DisperserBatchMetadata{ + BatchHeader: DisperserBatchHeader{ + BatchRoot: metadata.BatchHeader.BlobHeadersRoot[:], + QuorumNumbers: quorumNumbers, + QuorumSignedPercentages: quorumSignedPercentages, + ReferenceBlockNumber: metadata.BatchHeader.ReferenceBlockNumber, + }, + BatchHeaderHash: metadata.BatchHeaderHash, + Fee: metadata.Fee, + SignatoryRecordHash: metadata.SignatoryRecordHash[:], + ConfirmationBlockNumber: metadata.ConfirmationBlockNumber, + } + } + disperserBlobVerificationProof = DisperserBlobVerificationProof{ + BatchId: e.BlobVerificationProof.BatchID, + BlobIndex: e.BlobVerificationProof.BlobIndex, + BatchMetadata: disperserBatchMetadata, + InclusionProof: e.BlobVerificationProof.InclusionProof, + QuorumIndexes: e.BlobVerificationProof.QuorumIndices, + } + } + + return &DisperserBlobInfo{ + BlobHeader: disperserBlobHeader, + BlobVerificationProof: disperserBlobVerificationProof, + } +} + +// InboxPayload is a structured representation of the calldata used for the EigenDA `addSequencerL2BatchFromEigenDA` method call +// for persisting certificates into the inbox sequence +type InboxPayload struct { + BlobVerificationProof BlobVerificationProof + BlobHeader BlobHeader +} + +// Load ingest loads calldata to a payload struct which explicitly defines the parsed +// calldata fields +func (ip *InboxPayload) Load(callDataValues []interface{}) error { + if len(callDataValues) != 6 { + return errors.New("calldata does not have the expected number of parameters") + } + + blobVerificationProof, passed := callDataValues[1].(struct { + BatchId uint32 `json:"batchId"` + BlobIndex uint32 `json:"blobIndex"` + BatchMetadata struct { + BatchHeader struct { + BlobHeadersRoot [32]uint8 `json:"blobHeadersRoot"` + QuorumNumbers []uint8 `json:"quorumNumbers"` + SignedStakeForQuorums []uint8 `json:"signedStakeForQuorums"` + ReferenceBlockNumber uint32 `json:"referenceBlockNumber"` + } `json:"batchHeader"` + SignatoryRecordHash [32]uint8 `json:"signatoryRecordHash"` + ConfirmationBlockNumber uint32 `json:"confirmationBlockNumber"` + } `json:"batchMetadata"` + InclusionProof []uint8 `json:"inclusionProof"` + QuorumIndices []uint8 `json:"quorumIndices"` + }) + + if !passed { + return errors.New("failed to parse blob verification proof") + } + + blobHeader, passed := callDataValues[2].(struct { + Commitment struct { + X *big.Int `json:"X"` + Y *big.Int `json:"Y"` + } `json:"commitment"` + DataLength uint32 `json:"dataLength"` + QuorumBlobParams []struct { + QuorumNumber uint8 `json:"quorumNumber"` + AdversaryThresholdPercentage uint8 `json:"adversaryThresholdPercentage"` + ConfirmationThresholdPercentage uint8 `json:"confirmationThresholdPercentage"` + ChunkLength uint32 `json:"chunkLength"` + } `json:"quorumBlobParams"` + }) + + if !passed { + return errors.New("failed to parse blob header") + } + + payload := InboxPayload{ + BlobVerificationProof: BlobVerificationProof{ + BatchID: blobVerificationProof.BatchId, + BlobIndex: blobVerificationProof.BlobIndex, + BatchMetadata: BatchMetadata{ + BatchHeader: BatchHeader{ + BlobHeadersRoot: blobVerificationProof.BatchMetadata.BatchHeader.BlobHeadersRoot, + QuorumNumbers: blobVerificationProof.BatchMetadata.BatchHeader.QuorumNumbers, + SignedStakeForQuorums: blobVerificationProof.BatchMetadata.BatchHeader.SignedStakeForQuorums, + ReferenceBlockNumber: blobVerificationProof.BatchMetadata.BatchHeader.ReferenceBlockNumber, + }, + Fee: []byte{}, + BatchHeaderHash: []byte{}, + + SignatoryRecordHash: blobVerificationProof.BatchMetadata.SignatoryRecordHash, + ConfirmationBlockNumber: blobVerificationProof.BatchMetadata.ConfirmationBlockNumber, + }, + InclusionProof: blobVerificationProof.InclusionProof, + QuorumIndices: blobVerificationProof.QuorumIndices, + }, + BlobHeader: BlobHeader{ + Commitment: G1Point{ + X: blobHeader.Commitment.X, + Y: blobHeader.Commitment.Y, + }, + DataLength: blobHeader.DataLength, + QuorumBlobParams: func() []QuorumBlobParams { + params := make([]QuorumBlobParams, len(blobHeader.QuorumBlobParams)) + for i, p := range blobHeader.QuorumBlobParams { + params[i] = QuorumBlobParams{ + QuorumNumber: p.QuorumNumber, + AdversaryThresholdPercentage: p.AdversaryThresholdPercentage, + ConfirmationThresholdPercentage: p.ConfirmationThresholdPercentage, + ChunkLength: p.ChunkLength, + } + } + return params + }(), + }, + } + + *ip = payload + return nil +} diff --git a/staker/stateless_block_validator.go b/staker/stateless_block_validator.go index 01084260a..637cb2d06 100644 --- a/staker/stateless_block_validator.go +++ b/staker/stateless_block_validator.go @@ -343,13 +343,12 @@ func (v *StatelessBlockValidator) ValidationEntryRecord(ctx context.Context, e * if v.eigenDAService == nil { log.Warn("EigenDA not configured, but sequencer message found with EigenDA header") } else { - - println("RecoverPayloadFromEigenDABatch .... recovering payload for EigenDA batch") // we use the polynomial domain here because this is what we use in the fraud proof pipeline - _, err := eigenda.RecoverPayloadFromEigenDABatch(ctx, batch.Data[41:], v.eigenDAService, e.Preimages, "polynomial") + _, err := eigenda.RecoverPayloadFromEigenDABatch(ctx, batch.Data[41:], v.eigenDAService, e.Preimages, "binary") if err != nil { return err } + log.Info("Recovered polynomial from EigenDA batch", "batch", batch.Number) } } } From 6d2a016596d3a6394ecb812b561444f444ee242a Mon Sep 17 00:00:00 2001 From: Ethen Pociask Date: Wed, 3 Jul 2024 04:35:47 -0400 Subject: [PATCH 23/38] refactors and minor tweaks --- arbnode/batch_poster.go | 11 +- cmd/replay/main.go | 13 +- deploy/deploy.go | 4 +- eigenda/decoding.go | 93 ++++++++++++++ eigenda/eigenda.go | 11 +- eigenda/proxy.go | 183 ++++++++++++++++++++-------- eigenda/types.go | 90 +++++++++++++- staker/stateless_block_validator.go | 8 +- 8 files changed, 340 insertions(+), 73 deletions(-) create mode 100644 eigenda/decoding.go diff --git a/arbnode/batch_poster.go b/arbnode/batch_poster.go index 971f3090a..3ed816415 100644 --- a/arbnode/batch_poster.go +++ b/arbnode/batch_poster.go @@ -1354,17 +1354,8 @@ func (b *BatchPoster) maybePostSequencerBatch(ctx context.Context) (bool, error) log.Info("Start to write data to eigenda: ", "data", hex.EncodeToString(sequencerMsg)) blobInfo, err = b.eigenDAWriter.Store(ctx, sequencerMsg) if err != nil { - if config.DisableEigenDAFallbackStoreDataOnChain { - log.Warn("Falling back to storing data on chain", "err", err) - return false, errors.New("unable to post batch to EigenDA and fallback storing data on chain is disabled") - } + return false, err } - - //sequencerMsg, err = b.eigenDAWriter.Serialize(blobInfo) - // if err != nil { - // log.Warn("DaRef serialization failed", "err", err) - // return false, errors.New("DaRef serialization failed") - // } } data, kzgBlobs, err := b.encodeAddBatch(new(big.Int).SetUint64(batchPosition.NextSeqNum), batchPosition.MessageCount, b.building.msgCount, sequencerMsg, b.building.segments.delayedMsg, b.building.use4844, b.building.useEigenDA, blobInfo) diff --git a/cmd/replay/main.go b/cmd/replay/main.go index 89bfb7124..12fd92190 100644 --- a/cmd/replay/main.go +++ b/cmd/replay/main.go @@ -150,8 +150,8 @@ func (r *BlobPreimageReader) Initialize(ctx context.Context) error { return nil } -// struct for recovering data from preimage, impl interface EigenDAReader - +// QueryBlob returns the blob for the given cert from the preimage oracle using the hash of the +// certificate kzg commitment for identifying the preimage. func (dasReader *PreimageEigenDAReader) QueryBlob(ctx context.Context, cert *eigenda.EigenDABlobInfo, domain string) ([]byte, error) { kzgCommit, err := cert.SerializeCommitment() if err != nil { @@ -166,7 +166,14 @@ func (dasReader *PreimageEigenDAReader) QueryBlob(ctx context.Context, cert *eig return nil, err } - return preimage, nil + // since the preimage is in encoded co-efficient form, we need to decode it to get the actual blob + // i.e,polynomial -> FFT -> length decode -> inverse onec -> blob + decodedBlob, err := eigenda.DecodeiFFTBlob(preimage) + if err != nil { + println("Error decoding blob: ", err) + return nil, err + } + return decodedBlob, nil } // To generate: diff --git a/deploy/deploy.go b/deploy/deploy.go index 080c0ce2c..f856740c5 100644 --- a/deploy/deploy.go +++ b/deploy/deploy.go @@ -251,7 +251,7 @@ func DeployOnL1(ctx context.Context, parentChainReader *headerreader.HeaderReade return nil, fmt.Errorf("dummy manager deploy error: %w", err) } - log.Info("Dummy manager deployed at ", dummyRollupManager.String()) + log.Info("Dummy eigenda rollup manager deployed", "address", dummyRollupManager.String()) eigenDARollupManager = dummyRollupManager } @@ -264,7 +264,7 @@ func DeployOnL1(ctx context.Context, parentChainReader *headerreader.HeaderReade return nil, fmt.Errorf("dummy svc manager deploy error: %w", err) } - log.Info("Dummy service manager deployed at ", dummySvcManager.String()) + log.Info("Dummy eigenda service manager", "address", dummySvcManager.String()) eigenDASvcManager = dummySvcManager } diff --git a/eigenda/decoding.go b/eigenda/decoding.go new file mode 100644 index 000000000..c509c4bfc --- /dev/null +++ b/eigenda/decoding.go @@ -0,0 +1,93 @@ +package eigenda + +import ( + "bytes" + "encoding/binary" + "fmt" + "math" + + "github.com/Layr-Labs/eigenda/encoding" + "github.com/Layr-Labs/eigenda/encoding/fft" + "github.com/Layr-Labs/eigenda/encoding/rs" + "github.com/Layr-Labs/eigenda/encoding/utils/codec" +) + +/* + These decodings are translated directly from core EigenDA client codec: + - https://github.com/Layr-Labs/eigenda/blob/44569ec461c9a1dd1191e7999a72e63bd1e7aba9/api/clients/codecs/ifft_codec.go#L27-L38 +*/ + +func FFT(data []byte) ([]byte, error) { + dataFr, err := rs.ToFrArray(data) + if err != nil { + return nil, fmt.Errorf("error converting data to fr.Element: %w", err) + } + dataFrLen := uint64(len(dataFr)) + dataFrLenPow2 := encoding.NextPowerOf2(dataFrLen) + + if dataFrLenPow2 != dataFrLen { + return nil, fmt.Errorf("data length %d is not a power of 2", dataFrLen) + } + + maxScale := uint8(math.Log2(float64(dataFrLenPow2))) + + fs := fft.NewFFTSettings(maxScale) + + dataFFTFr, err := fs.FFT(dataFr, false) + if err != nil { + return nil, fmt.Errorf("failed to perform FFT: %w", err) + } + + return rs.ToByteArray(dataFFTFr, dataFrLenPow2*encoding.BYTES_PER_SYMBOL), nil +} + +func DecodeiFFTBlob(data []byte) ([]byte, error) { + if len(data) == 0 { + return nil, fmt.Errorf("blob has length 0, meaning it is malformed") + } + var err error + data, err = FFT(data) + if err != nil { + return nil, fmt.Errorf("error FFTing data: %w", err) + } + + return GenericDecodeBlob(data) +} + +func GenericDecodeBlob(data []byte) ([]byte, error) { + if len(data) <= 32 { + return nil, fmt.Errorf("data is not of length greater than 32 bytes: %d", len(data)) + } + + data, err := DecodeBlob(data) + if err != nil { + return nil, err + } + + return data, nil +} + +func DecodeBlob(data []byte) ([]byte, error) { + if len(data) < 32 { + return nil, fmt.Errorf("blob does not contain 32 header bytes, meaning it is malformed") + } + + length := binary.BigEndian.Uint32(data[2:6]) + + // decode raw data modulo bn254 + decodedData := codec.RemoveEmptyByteFromPaddedBytes(data[32:]) + + // get non blob header data + reader := bytes.NewReader(decodedData) + rawData := make([]byte, length) + n, err := reader.Read(rawData) + if err != nil { + return nil, fmt.Errorf("failed to copy unpadded data into final buffer, length: %d, bytes read: %d", length, n) + } + if uint32(n) != length { + return nil, fmt.Errorf("data length does not match length prefix") + } + + return rawData, nil + +} diff --git a/eigenda/eigenda.go b/eigenda/eigenda.go index 2a3ae8b95..27c27e8fc 100644 --- a/eigenda/eigenda.go +++ b/eigenda/eigenda.go @@ -61,7 +61,12 @@ func NewEigenDA(proxyServerRpc string) (*EigenDA, error) { func (e *EigenDA) QueryBlob(ctx context.Context, cert *EigenDABlobInfo, domainFilter string) ([]byte, error) { log.Info("Querying blob from EigenDA") - data, err := e.client.Get(ctx, cert.ToDisperserBlobInfo(), domainFilter) + info, err := cert.ToDisperserBlobInfo() + if err != nil { + return nil, err + } + + data, err := e.client.Get(ctx, info, domainFilter) if err != nil { return nil, err } @@ -71,13 +76,15 @@ func (e *EigenDA) QueryBlob(ctx context.Context, cert *EigenDABlobInfo, domainFi // Store disperses a blob to EigenDA and returns the appropriate EigenDABlobInfo or certificate values func (e *EigenDA) Store(ctx context.Context, data []byte) (*EigenDABlobInfo, error) { - log.Info("Dispersing blob to EigenDA") + log.Info("Dispersing blob to EigenDA", "data", hex.EncodeToString(data)) var blobInfo = &EigenDABlobInfo{} cert, err := e.client.Put(ctx, data) if err != nil { return nil, err } + log.Info("Received the following batch header from EigenDA", "batchHeader", cert.BlobVerificationProof.BatchMetadata) + blobInfo.LoadBlobInfo(cert) return blobInfo, nil diff --git a/eigenda/proxy.go b/eigenda/proxy.go index 522ce5d15..e5942974b 100644 --- a/eigenda/proxy.go +++ b/eigenda/proxy.go @@ -3,110 +3,191 @@ package eigenda import ( "bytes" "context" - "encoding/hex" "fmt" - "io/ioutil" + "io" "net/http" - "net/url" "github.com/Layr-Labs/eigenda/api/grpc/disperser" - "github.com/ethereum/go-ethereum/common/hexutil" - "github.com/ethereum/go-ethereum/log" "github.com/ethereum/go-ethereum/rlp" ) -func Encode(b []byte) []byte { - return append([]byte{byte(0x1), byte(0x0), byte(0x0)}, b...) -} - type EigenDAProxyClient struct { - RPCUrl string + client ProxyClient } func NewEigenDAProxyClient(RPCUrl string) *EigenDAProxyClient { - return &EigenDAProxyClient{RPCUrl: RPCUrl} + + c := New(&Config{ + URL: RPCUrl, + }) + return &EigenDAProxyClient{client: c} } -// TODO: proper error types func (c *EigenDAProxyClient) Put(ctx context.Context, data []byte) (*disperser.BlobInfo, error) { - log.Info("Putting blob EIGENDAPROXYCLIENT", "data", hex.EncodeToString(data)) + cert, err := c.client.SetData(ctx, data) + if err != nil { + return nil, fmt.Errorf("failed to set data: %w", err) + } - body := bytes.NewReader(data) + var blobInfo disperser.BlobInfo + err = rlp.DecodeBytes(cert[1:], &blobInfo) + if err != nil { + return nil, fmt.Errorf("failed to decode blob info: %w", err) + } - log.Info("Creating HTTP POST request", "body", body) + return &blobInfo, nil +} - url := fmt.Sprintf("%s/put/", c.RPCUrl) - log.Info("Creating HTTP POST request", "url", url) - req, err := http.NewRequestWithContext(ctx, http.MethodPost, url, body) +func (c *EigenDAProxyClient) Get(ctx context.Context, blobInfo *DisperserBlobInfo, domainFilter string) ([]byte, error) { + commitment, err := rlp.EncodeToBytes(blobInfo) if err != nil { - return nil, fmt.Errorf("failed to create HTTP request: %w", err) + return nil, fmt.Errorf("failed to encode blob info: %w", err) } - req.Header.Set("Content-Type", "application/octet-stream") - log.Info("Sending HTTP POST request", "url", url) - log.Info("Sending HTTP POST request", "body", body) - log.Info("Sending HTTP POST request", "req", req) - resp, err := http.DefaultClient.Do(req) + commitWithVersion := append([]byte{0x0}, commitment...) + + data, err := c.client.GetData(ctx, commitWithVersion, StrToDomainType(domainFilter)) if err != nil { - return nil, err + return nil, fmt.Errorf("failed to get data: %w", err) } - defer resp.Body.Close() - if resp.StatusCode != http.StatusOK { - return nil, fmt.Errorf("failed to store data: %s", resp.Status) + return data, nil +} + +// DomainType is a enumeration type for the different data domains for which a +// blob can exist between +type DomainType uint8 + +const ( + BinaryDomain DomainType = iota + PolyDomain + UnknownDomain +) + +func (d DomainType) String() string { + switch d { + case BinaryDomain: + return "binary" + case PolyDomain: + return "polynomial" + default: + return "unknown" + } +} + +func StrToDomainType(s string) DomainType { + switch s { + case "binary": + return BinaryDomain + case "polynomial": + return PolyDomain + default: + return UnknownDomain } +} + +// TODO: Add support for custom http client option +type Config struct { + Actor string + URL string +} - commitment, err := ioutil.ReadAll(resp.Body) +// ProxyClient is an interface for communicating with the EigenDA proxy server +type ProxyClient interface { + Health() error + GetData(ctx context.Context, cert []byte, domain DomainType) ([]byte, error) + SetData(ctx context.Context, b []byte) ([]byte, error) +} + +// client is the implementation of ProxyClient +type client struct { + cfg *Config + httpClient *http.Client +} + +var _ ProxyClient = (*client)(nil) + +func New(cfg *Config) ProxyClient { + return &client{ + cfg, + http.DefaultClient, + } +} + +// Health indicates if the server is operational; useful for event based awaits +// when integration testing +func (c *client) Health() error { + url := c.cfg.URL + "/health" + req, err := http.NewRequest(http.MethodGet, url, nil) if err != nil { - return nil, fmt.Errorf("failed to read response: %w", err) + return err } - var blobInfo disperser.BlobInfo - cert := commitment[3:] - err = rlp.DecodeBytes(cert, &blobInfo) + resp, err := c.httpClient.Do(req) if err != nil { - return nil, fmt.Errorf("failed to decode blob info: %w", err) + return err } - return &blobInfo, nil + if resp.StatusCode != http.StatusOK { + return fmt.Errorf("received bad status code: %d", resp.StatusCode) + } + + return nil } -func (c *EigenDAProxyClient) Get(ctx context.Context, blobInfo *DisperserBlobInfo, domainFilter string) ([]byte, error) { +// GetData fetches blob data associated with a DA certificate +func (c *client) GetData(ctx context.Context, comm []byte, domain DomainType) ([]byte, error) { + url := fmt.Sprintf("%s/get/0x%x?domain=%s&commitment_mode=simple", c.cfg.URL, comm, domain.String()) - println(fmt.Sprintf("Getting blob EIGENDAPROXYCLIENT %+v", blobInfo)) - println(fmt.Sprintf("Batch header %+v", blobInfo.BlobVerificationProof.BatchMetadata.BatchHeader)) + if c.cfg.Actor != "" { + url = fmt.Sprintf("%s&actor=%s", url, c.cfg.Actor) + } - commitment, err := rlp.EncodeToBytes(blobInfo) + req, err := http.NewRequestWithContext(ctx, http.MethodGet, url, nil) if err != nil { - return nil, fmt.Errorf("failed to encode blob info: %w", err) + return nil, fmt.Errorf("failed to construct http request: %e", err) } - rpcurl := fmt.Sprintf("%s/get/%s", c.RPCUrl, hexutil.Encode((Encode(commitment)))) + req.Header.Set("Content-Type", "application/octet-stream") + resp, err := c.httpClient.Do(req) + if err != nil { + return nil, err + } - // if not nil or binary (default) put in the domain filter as a part of the query url - if domainFilter != "" && domainFilter != "binary" { - rpcurl = fmt.Sprintf("%s?domain=%s", rpcurl, url.QueryEscape(domainFilter)) + defer resp.Body.Close() + + if resp.StatusCode != http.StatusOK { + return nil, fmt.Errorf("received unexpected response code: %d", resp.StatusCode) } - req, err := http.NewRequestWithContext(ctx, http.MethodGet, rpcurl, nil) + return io.ReadAll(resp.Body) +} + +// SetData writes raw byte data to DA and returns the respective certificate +func (c *client) SetData(ctx context.Context, b []byte) ([]byte, error) { + url := fmt.Sprintf("%s/put/?commitment_mode=simple", c.cfg.URL) + req, err := http.NewRequestWithContext(ctx, http.MethodPost, url, bytes.NewReader(b)) if err != nil { return nil, fmt.Errorf("failed to create HTTP request: %w", err) } - + req.Header.Set("Content-Type", "application/octet-stream") resp, err := http.DefaultClient.Do(req) if err != nil { return nil, err } defer resp.Body.Close() - if resp.StatusCode != http.StatusOK { - return nil, fmt.Errorf("failed to retrieve data: %s", resp.Status) + return nil, fmt.Errorf("failed to store data: %v", resp.StatusCode) } - data, err := ioutil.ReadAll(resp.Body) + b, err = io.ReadAll(resp.Body) if err != nil { - return nil, fmt.Errorf("failed to read response: %w", err) + return nil, err } - return data, nil + if len(b) == 0 { + return nil, fmt.Errorf("read certificate is empty") + } + + return b, err } diff --git a/eigenda/types.go b/eigenda/types.go index 22d2c89bf..fdee5626c 100644 --- a/eigenda/types.go +++ b/eigenda/types.go @@ -2,9 +2,14 @@ package eigenda import ( "errors" + "fmt" "math/big" "github.com/Layr-Labs/eigenda/api/grpc/disperser" + "github.com/ethereum/go-ethereum/accounts/abi" + "github.com/ethereum/go-ethereum/common/hexutil" + "github.com/ethereum/go-ethereum/log" + "golang.org/x/crypto/sha3" ) /* @@ -52,6 +57,14 @@ type BatchMetadata struct { BatchHeaderHash []byte `json:"batchHeaderHash"` } +/* + BlobHeadersRoot [32]byte + QuorumNumbers []byte + SignedStakeForQuorums []byte + ReferenceBlockNumber uint32 + +*/ + type BatchHeader struct { BlobHeadersRoot [32]byte `json:"blobHeadersRoot"` QuorumNumbers []byte `json:"quorumNumbers"` @@ -59,6 +72,70 @@ type BatchHeader struct { ReferenceBlockNumber uint32 `json:"referenceBlockNumber"` } +func HashBatchHeader(batchHeader BatchHeader) ([32]byte, error) { + + log.Info("Computing batch header hash for EigenDA", "batchHeader", batchHeader) + + // The order here has to match the field ordering of BatchHeader defined in IEigenDAServiceManager.sol + batchHeaderType, err := abi.NewType("tuple", "", []abi.ArgumentMarshaling{ + { + Name: "batchRoot", + Type: "bytes32", + }, + { + Name: "quorumNumbers", + Type: "bytes", + }, + { + Name: "confirmationThresholdPercentages", + Type: "bytes", + }, + { + Name: "referenceBlockNumber", + Type: "uint32", + }, + }) + if err != nil { + return [32]byte{}, err + } + + arguments := abi.Arguments{ + { + Type: batchHeaderType, + }, + } + + s := struct { + BatchRoot [32]byte + QuorumNumbers []byte + ConfirmationThresholdPercentages []byte + ReferenceBlockNumber uint32 + }{ + BatchRoot: batchHeader.BlobHeadersRoot, + QuorumNumbers: batchHeader.QuorumNumbers, + ConfirmationThresholdPercentages: batchHeader.SignedStakeForQuorums, + ReferenceBlockNumber: uint32(batchHeader.ReferenceBlockNumber), + } + + bytes, err := arguments.Pack(s) + if err != nil { + return [32]byte{}, err + } + + var headerHash [32]byte + hasher := sha3.NewLegacyKeccak256() + hasher.Write(bytes) + + hash := hasher.Sum(nil) + copy(headerHash[:], hash[:32]) + + // dump header hash to dynamic byte array + + log.Info("Computed batch header hash for EigenDA", "hash", fmt.Sprintf("%s", hexutil.Encode(hash))) + + return headerHash, nil +} + // SerializeCommitment serializes the kzg commitment points to a byte slice func (e *EigenDABlobInfo) SerializeCommitment() ([]byte, error) { return append(e.BlobHeader.Commitment.X.Bytes(), e.BlobHeader.Commitment.Y.Bytes()...), nil @@ -169,7 +246,7 @@ type DisperserBatchHeader struct { /* Convert EigenDABlobInfo to DisperserBlobInfo struct for compatibility with proxy server expected type */ -func (e *EigenDABlobInfo) ToDisperserBlobInfo() *DisperserBlobInfo { +func (e *EigenDABlobInfo) ToDisperserBlobInfo() (*DisperserBlobInfo, error) { // Convert BlobHeader var disperserBlobHeader DisperserBlobHeader commitment := G1Commitment{ @@ -222,10 +299,19 @@ func (e *EigenDABlobInfo) ToDisperserBlobInfo() *DisperserBlobInfo { } } + // set batchHeaderHash if not set + + batchHeaderHash, err := HashBatchHeader(e.BlobVerificationProof.BatchMetadata.BatchHeader) + if err != nil { + return nil, err + } + + disperserBlobVerificationProof.BatchMetadata.BatchHeaderHash = batchHeaderHash[:] + return &DisperserBlobInfo{ BlobHeader: disperserBlobHeader, BlobVerificationProof: disperserBlobVerificationProof, - } + }, nil } // InboxPayload is a structured representation of the calldata used for the EigenDA `addSequencerL2BatchFromEigenDA` method call diff --git a/staker/stateless_block_validator.go b/staker/stateless_block_validator.go index 637cb2d06..470d2b070 100644 --- a/staker/stateless_block_validator.go +++ b/staker/stateless_block_validator.go @@ -343,12 +343,14 @@ func (v *StatelessBlockValidator) ValidationEntryRecord(ctx context.Context, e * if v.eigenDAService == nil { log.Warn("EigenDA not configured, but sequencer message found with EigenDA header") } else { - // we use the polynomial domain here because this is what we use in the fraud proof pipeline - _, err := eigenda.RecoverPayloadFromEigenDABatch(ctx, batch.Data[41:], v.eigenDAService, e.Preimages, "binary") + // we fetch the polynomial representation of the blob since its in coefficient form and compatible for + // generating witness proofs and kzg commitments within the arbitrator when constructing machine state proofs + // for EigenDA preimage types + _, err := eigenda.RecoverPayloadFromEigenDABatch(ctx, batch.Data[41:], v.eigenDAService, e.Preimages, "polynomial") if err != nil { return err } - log.Info("Recovered polynomial from EigenDA batch", "batch", batch.Number) + log.Info("Recovered blob coefficient from EigenDA batch", "batch", batch.Number) } } } From ebac5bc29db3df5c03685a0a79758c59630658bd Mon Sep 17 00:00:00 2001 From: Ethen Pociask Date: Wed, 3 Jul 2024 04:36:30 -0400 Subject: [PATCH 24/38] update go.mod and submodules --- contracts | 2 +- go.mod | 7 +------ go.sum | 42 ++---------------------------------------- 3 files changed, 4 insertions(+), 47 deletions(-) diff --git a/contracts b/contracts index f1a5caf79..24f58bbb1 160000 --- a/contracts +++ b/contracts @@ -1 +1 @@ -Subproject commit f1a5caf7999077086ebe68167f1d517b1b102f53 +Subproject commit 24f58bbb172aabdedca235515af679d61aaefcb0 diff --git a/go.mod b/go.mod index 57210ec41..649f147ac 100644 --- a/go.mod +++ b/go.mod @@ -12,6 +12,7 @@ replace github.com/cockroachdb/pebble => github.com/cockroachdb/pebble v0.0.0-20 require ( github.com/Knetic/govaluate v3.0.1-0.20171022003610-9aa49832a739+incompatible + github.com/Layr-Labs/eigenda v0.6.1 github.com/Layr-Labs/eigenda/api v0.6.1 github.com/Shopify/toxiproxy v2.1.4+incompatible github.com/alicebob/miniredis/v2 v2.21.0 @@ -81,7 +82,6 @@ require ( github.com/blang/semver/v4 v4.0.0 // indirect github.com/btcsuite/btcd/btcec/v2 v2.2.0 // indirect github.com/btcsuite/btcd/chaincfg/chainhash v1.0.2 // indirect - github.com/bytedance/sonic v1.9.2 // indirect github.com/cenkalti/backoff v2.2.1+incompatible // indirect github.com/cenkalti/backoff/v4 v4.2.1 // indirect github.com/ceramicnetwork/go-dag-jose v0.1.0 // indirect @@ -116,10 +116,8 @@ require ( github.com/gammazero/deque v0.2.1 // indirect github.com/gdamore/encoding v1.0.0 // indirect github.com/getsentry/sentry-go v0.18.0 // indirect - github.com/gin-gonic/gin v1.9.1 // indirect github.com/go-logr/logr v1.2.4 // indirect github.com/go-logr/stdr v1.2.2 // indirect - github.com/go-playground/validator/v10 v10.14.1 // indirect github.com/go-sourcemap/sourcemap v2.1.3+incompatible // indirect github.com/go-stack/stack v1.8.1 // indirect github.com/go-task/slim-sprig v0.0.0-20230315185526-52ccab3ef572 // indirect @@ -192,7 +190,6 @@ require ( github.com/jbenet/go-temp-err-catcher v0.1.0 // indirect github.com/jbenet/goprocess v0.1.4 // indirect github.com/jmespath/go-jmespath v0.4.0 // indirect - github.com/joho/godotenv v1.5.1 // indirect github.com/juju/errors v0.0.0-20181118221551-089d3ea4e4d5 // indirect github.com/klauspost/compress v1.16.4 // indirect github.com/klauspost/cpuid/v2 v2.2.5 // indirect @@ -260,7 +257,6 @@ require ( github.com/russross/blackfriday/v2 v2.1.0 // indirect github.com/samber/lo v1.36.0 // indirect github.com/spaolacci/murmur3 v1.1.0 // indirect - github.com/stretchr/testify v1.9.0 // indirect github.com/supranational/blst v0.3.11 // indirect github.com/urfave/cli/v2 v2.27.1 // indirect github.com/vmihailenco/msgpack/v5 v5.3.5 // indirect @@ -290,7 +286,6 @@ require ( go.uber.org/multierr v1.11.0 // indirect go.uber.org/zap v1.27.0 // indirect go4.org v0.0.0-20200411211856-f5505b9728dd // indirect - golang.org/x/arch v0.4.0 // indirect golang.org/x/exp v0.0.0-20231110203233-9a3e6036ecaa // indirect golang.org/x/mod v0.16.0 // indirect golang.org/x/net v0.20.0 // indirect diff --git a/go.sum b/go.sum index d6f8df342..05f581be0 100644 --- a/go.sum +++ b/go.sum @@ -46,7 +46,6 @@ github.com/AndreasBriese/bbloom v0.0.0-20190825152654-46b345b51c96 h1:cTp8I5+VIo github.com/AndreasBriese/bbloom v0.0.0-20190825152654-46b345b51c96/go.mod h1:bOvUY6CB00SOBii9/FifXqc0awNKxLFCL/+pkDPuyl8= github.com/BurntSushi/toml v0.3.1/go.mod h1:xHWCNGjB5oqiDr8zfno3MHue2Ht5sIBksp03qcyfWMU= github.com/BurntSushi/toml v1.3.2 h1:o7IhLm0Msx3BaB+n3Ag7L8EVlByGnpq14C4YWiu/gL8= -github.com/BurntSushi/toml v1.3.2/go.mod h1:CxXYINrC8qIiEnFrOxCa7Jy5BFHlXnUU2pbicEuybxQ= github.com/BurntSushi/xgb v0.0.0-20160522181843-27f122750802/go.mod h1:IVnqGOEym/WlBOVXweHU+Q+/VP0lqqI8lqeDx9IjBqo= github.com/CloudyKit/fastprinter v0.0.0-20200109182630-33d98a066a53/go.mod h1:+3IMCy2vIlbG1XG/0ggNQv0SvxCAIpPM5b1nCz56Xno= github.com/CloudyKit/jet/v3 v3.0.0/go.mod h1:HKQPgSJmdK8hdoAbKUUWajkHyHo4RaU5rMdUywE7VMo= @@ -56,6 +55,8 @@ github.com/Joker/hpp v1.0.0/go.mod h1:8x5n+M1Hp5hC0g8okX3sR3vFQwynaX/UgSOM9MeBKz github.com/Knetic/govaluate v3.0.1-0.20171022003610-9aa49832a739+incompatible h1:1G1pk05UrOh0NlF1oeaaix1x8XzrfjIDK47TY0Zehcw= github.com/Knetic/govaluate v3.0.1-0.20171022003610-9aa49832a739+incompatible/go.mod h1:r7JcOSlj0wfOMncg0iLm8Leh48TZaKVeNIfJntJ2wa0= github.com/Kubuxu/go-os-helper v0.0.1/go.mod h1:N8B+I7vPCT80IcP58r50u4+gEEcsZETFUpAzWW2ep1Y= +github.com/Layr-Labs/eigenda v0.6.1 h1:uU04t+dsR5oHsbr+A5XIeJdyZIfNW3YvG03dMTKLSK4= +github.com/Layr-Labs/eigenda v0.6.1/go.mod h1:XongI0xM6ks66DzxvTpF2yi4x2QH0X2RgEbKl/WFebY= github.com/Layr-Labs/eigenda/api v0.6.1 h1:TAstOttTmFZQoFlZtgu/rNktNOhx62TwRFMxGOhUx8M= github.com/Layr-Labs/eigenda/api v0.6.1/go.mod h1:kVXqWM13s/1hXyv9QdHweWAbKin9MeOBbS4i8c9rLbU= github.com/Microsoft/go-winio v0.6.1 h1:9/kr64B9VUZrLm5YYwbGtUJnMgqWVOdUAXu6Migciow= @@ -190,9 +191,7 @@ github.com/btcsuite/snappy-go v1.0.0/go.mod h1:8woku9dyThutzjeg+3xrA5iCpBRH8XEEg github.com/btcsuite/websocket v0.0.0-20150119174127-31079b680792/go.mod h1:ghJtEyQwv5/p4Mg4C0fgbePVuGr935/5ddU9Z3TmDRY= github.com/btcsuite/winsvc v1.0.0/go.mod h1:jsenWakMcC0zFBFurPLEAyrnc/teJEM1O46fmI40EZs= github.com/buger/jsonparser v0.0.0-20181115193947-bf1c66bbce23/go.mod h1:bbYlZJ7hK1yFx9hf58LP0zeX7UjIGs20ufpu3evjr+s= -github.com/bytedance/sonic v1.5.0/go.mod h1:ED5hyg4y6t3/9Ku1R6dU/4KyJ48DZ4jPhfY1O2AihPM= github.com/bytedance/sonic v1.9.2 h1:GDaNjuWSGu09guE9Oql0MSTNhNCLlWwO8y/xM5BzcbM= -github.com/bytedance/sonic v1.9.2/go.mod h1:i736AoUSYt75HyZLoJW9ERYxcy6eaN6h4BZXU064P/U= github.com/casbin/casbin/v2 v2.1.2/go.mod h1:YcPU1XXisHhLzuxH9coDNf2FbKpjGlbCg3n9yuLkIJQ= github.com/cavaliergopher/grab/v3 v3.0.1 h1:4z7TkBfmPjmLAAmkkAZNX/6QJ1nNFdv3SdIHXju0Fr4= github.com/cavaliergopher/grab/v3 v3.0.1/go.mod h1:1U/KNnD+Ft6JJiYoYBAimKH2XrYptb8Kl3DFGmsjpq4= @@ -205,16 +204,13 @@ github.com/census-instrumentation/opencensus-proto v0.2.1/go.mod h1:f6KPmirojxKA github.com/ceramicnetwork/go-dag-jose v0.1.0 h1:yJ/HVlfKpnD3LdYP03AHyTvbm3BpPiz2oZiOeReJRdU= github.com/ceramicnetwork/go-dag-jose v0.1.0/go.mod h1:qYA1nYt0X8u4XoMAVoOV3upUVKtrxy/I670Dg5F0wjI= github.com/cespare/cp v0.1.0 h1:SE+dxFebS7Iik5LK0tsi1k9ZCxEaFX4AjQmoyA+1dJk= -github.com/cespare/cp v0.1.0/go.mod h1:SOGHArjBr4JWaSDEVpWpo/hNg6RoKrls6Oh40hiwW+s= github.com/cespare/xxhash v1.1.0/go.mod h1:XrSqR1VqqWfGrhpAt58auRo0WTKS1nRRg3ghfAqPWnc= github.com/cespare/xxhash/v2 v2.1.1/go.mod h1:VGX0DQ3Q6kWi7AoAeZDth3/j3BFtOZR5XLFGgcrjCOs= github.com/cespare/xxhash/v2 v2.1.2/go.mod h1:VGX0DQ3Q6kWi7AoAeZDth3/j3BFtOZR5XLFGgcrjCOs= github.com/cespare/xxhash/v2 v2.2.0 h1:DC2CZ1Ep5Y4k3ZQ899DldepgrayRUGE6BBZ/cd9Cj44= github.com/cespare/xxhash/v2 v2.2.0/go.mod h1:VGX0DQ3Q6kWi7AoAeZDth3/j3BFtOZR5XLFGgcrjCOs= github.com/cheekybits/genny v1.0.0/go.mod h1:+tQajlRqAUrPI7DOSpB0XAqZYtQakVtB7wXkRAgjxjQ= -github.com/chenzhuoyu/base64x v0.0.0-20211019084208-fb5309c8db06/go.mod h1:DH46F32mSOjUmXrMHnKwZdA8wcEefY7UVqBKYGjpdQY= github.com/chenzhuoyu/base64x v0.0.0-20221115062448-fe3a3abad311 h1:qSGYFH7+jGhDF8vLC+iwCD4WpbV1EBDSzWkJODFLams= -github.com/chenzhuoyu/base64x v0.0.0-20221115062448-fe3a3abad311/go.mod h1:b583jCggY9gE99b6G5LEC39OIiVsWj+R97kbl5odCEk= github.com/chzyer/logex v1.1.10/go.mod h1:+Ywpsq7O8HXn0nuIou7OrIPyXbp3wmkHB+jjWRnGsAI= github.com/chzyer/logex v1.2.0/go.mod h1:9+9sk7u7pGNWYMkh0hdiL++6OeibzJccyQU4p4MedaY= github.com/chzyer/readline v0.0.0-20180603132655-2972be24d48e/go.mod h1:nSuG5e5PlCu98SY8svDHJxuZscDgtXS6KTTbou5AhLI= @@ -235,7 +231,6 @@ github.com/cncf/xds/go v0.0.0-20211011173535-cb28da3451f1/go.mod h1:eXthEFrGJvWH github.com/cockroachdb/datadriven v0.0.0-20190809214429-80d97fb3cbaa/go.mod h1:zn76sxSg3SzpJ0PPJaLDCu+Bu0Lg3sKTORVIj19EIF8= github.com/cockroachdb/datadriven v1.0.2/go.mod h1:a9RdTaap04u637JoCzcUoIcDmvwSUtcUFtT/C3kJlTU= github.com/cockroachdb/datadriven v1.0.3-0.20230413201302-be42291fc80f h1:otljaYPt5hWxV3MUfO5dFPFiOXg9CyG5/kCfayTqsJ4= -github.com/cockroachdb/datadriven v1.0.3-0.20230413201302-be42291fc80f/go.mod h1:a9RdTaap04u637JoCzcUoIcDmvwSUtcUFtT/C3kJlTU= github.com/cockroachdb/errors v1.9.1 h1:yFVvsI0VxmRShfawbt/laCIDy/mtTqqnvoNgiy5bEV8= github.com/cockroachdb/errors v1.9.1/go.mod h1:2sxOtL2WIc096WSZqZ5h8fa17rdDq9HZOZLBCor4mBk= github.com/cockroachdb/logtags v0.0.0-20211118104740-dabe8e521a4f/go.mod h1:Vz9DsVWQQhf3vs21MhPMZpMGSht7O/2vFW2xusFUVOs= @@ -292,7 +287,6 @@ github.com/davidlazar/go-crypto v0.0.0-20200604182044-b73af7476f6c/go.mod h1:6Uh github.com/deckarep/golang-set/v2 v2.1.0 h1:g47V4Or+DUdzbs8FxCCmgb6VYd+ptPAngjM6dtGktsI= github.com/deckarep/golang-set/v2 v2.1.0/go.mod h1:VAky9rY/yGXJOLEDv3OMci+7wtDpOF4IN+y82NBOac4= github.com/decred/dcrd/crypto/blake256 v1.0.0 h1:/8DMNYp9SGi5f0w7uCm6d6M4OU2rGFK09Y2A4Xv7EE0= -github.com/decred/dcrd/crypto/blake256 v1.0.0/go.mod h1:sQl2p6Y26YV+ZOcSTP6thNdn47hh8kt6rqSlvmrXFAc= github.com/decred/dcrd/dcrec/secp256k1/v4 v4.1.0 h1:HbphB4TFFXpv7MNrT52FGrrgVXF1owhMVTHFZIlnvd4= github.com/decred/dcrd/dcrec/secp256k1/v4 v4.1.0/go.mod h1:DZGJHZMqrU4JJqFAWUS2UO1+lbSKsdiOoYi9Zzey7Fc= github.com/decred/dcrd/lru v1.0.0/go.mod h1:mxKOwFd7lFjN2GZYsiz/ecgqR6kkYAl+0pz0tEMk218= @@ -374,13 +368,11 @@ github.com/franela/goreq v0.0.0-20171204163338-bcd34c9993f8/go.mod h1:ZhphrRTfi2 github.com/frankban/quicktest v1.11.3/go.mod h1:wRf/ReqHper53s+kmmSZizM8NamnL3IM0I9ntUbOk+k= github.com/frankban/quicktest v1.14.0/go.mod h1:NeW+ay9A/U67EYXNFA1nPE8e/tnQv/09mUdL/ijj8og= github.com/frankban/quicktest v1.14.3 h1:FJKSZTDHjyhriyC81FLQ0LY93eSai0ZyR/ZIkd3ZUKE= -github.com/frankban/quicktest v1.14.3/go.mod h1:mgiwOwqx65TmIk1wJ6Q7wvnVMocbUorkibMOrVTHZps= github.com/fsnotify/fsnotify v1.4.7/go.mod h1:jwhsz4b93w/PPRr/qN1Yymfu8t87LnFCMoQvtojpjFo= github.com/fsnotify/fsnotify v1.4.9/go.mod h1:znqG4EE+3YCdAaPaxE2ZRY/06pZUdp0tY4IgpuI1SZQ= github.com/fsnotify/fsnotify v1.6.0 h1:n+5WquG0fcWoWp6xPWfHdbskMCQaFnG6PfBrh1Ky4HY= github.com/fsnotify/fsnotify v1.6.0/go.mod h1:sl3t1tCWJFWoRz9R8WJCbQihKKwmorjAbSClcnxKAGw= github.com/gabriel-vasile/mimetype v1.4.2 h1:w5qFW6JKBz9Y393Y4q372O9A7cUSequkh1Q7OhCmWKU= -github.com/gabriel-vasile/mimetype v1.4.2/go.mod h1:zApsH/mKG4w07erKIaJPFiX0Tsq9BFQgN3qGY5GnNgA= github.com/gammazero/deque v0.2.1 h1:qSdsbG6pgp6nL7A0+K/B7s12mcCY/5l5SIUpMOl+dC0= github.com/gammazero/deque v0.2.1/go.mod h1:LFroj8x4cMYCukHJDbxFCkT+r9AndaJnFMuZDV34tuU= github.com/gavv/httpexpect v2.0.0+incompatible/go.mod h1:x+9tiU1YnrOvnB725RkpoLv1M62hOWzwo5OXotisrKc= @@ -400,12 +392,10 @@ github.com/gin-contrib/sse v0.1.0/go.mod h1:RHrZQHXnP2xjPF+u1gW/2HnVO7nvIa9PG3Gm github.com/gin-gonic/gin v1.4.0/go.mod h1:OW2EZn3DO8Ln9oIKOvM++LBO+5UPHJJDH72/q/3rZdM= github.com/gin-gonic/gin v1.6.3/go.mod h1:75u5sXoLsGZoRN5Sgbi1eraJ4GU3++wFwWzhwvtwp4M= github.com/gin-gonic/gin v1.9.1 h1:4idEAncQnU5cB7BeOkPtxjfCSye0AAm1R0RVIqJ+Jmg= -github.com/gin-gonic/gin v1.9.1/go.mod h1:hPrL7YrpYKXt5YId3A/Tnip5kqbEAP+KLuI3SUcPTeU= github.com/gliderlabs/ssh v0.1.1/go.mod h1:U7qILu1NlMHj9FlMhZLlkCdDnU1DBEAqr0aevW3Awn0= github.com/go-check/check v0.0.0-20180628173108-788fd7840127/go.mod h1:9ES+weclKsC9YodN5RgxqK/VD9HM9JsCSh7rNhMZE98= github.com/go-errors/errors v1.0.1/go.mod h1:f4zRHt4oKfwPJE5k8C9vpYG+aDHdBFUsgrm6/TyX73Q= github.com/go-errors/errors v1.4.2 h1:J6MZopCL4uSllY1OfXM374weqZFFItUbrImctkmUxIA= -github.com/go-errors/errors v1.4.2/go.mod h1:sIVyrIiJhuEF+Pj9Ebtd6P/rEYROXFi3BopGUQ5a5Og= github.com/go-gl/glfw v0.0.0-20190409004039-e6da0acd62b1/go.mod h1:vR7hzQXu2zJy9AVAgeJqvqgH9Q5CA+iKCZ2gyEVpxRU= github.com/go-gl/glfw/v3.3/glfw v0.0.0-20191125211704-12ad95a8df72/go.mod h1:tQ2UAYgL5IevRw8kRxooKSPJfGvJ9fJQFa0TUsXzTg8= github.com/go-gl/glfw/v3.3/glfw v0.0.0-20200222043503-6f7a984d4dc4/go.mod h1:tQ2UAYgL5IevRw8kRxooKSPJfGvJ9fJQFa0TUsXzTg8= @@ -429,13 +419,10 @@ github.com/go-ole/go-ole v1.3.0/go.mod h1:5LS6F96DhAwUc7C+1HLexzMXY1xGRSryjyPPKW github.com/go-playground/assert/v2 v2.0.1/go.mod h1:VDjEfimB/XKnb+ZQfWdccd7VUvScMdVu0Titje2rxJ4= github.com/go-playground/locales v0.13.0/go.mod h1:taPMhCMXrRLJO55olJkUXHZBHCxTMfnGwq/HNwmWNS8= github.com/go-playground/locales v0.14.1 h1:EWaQ/wswjilfKLTECiXz7Rh+3BjFhfDFKv/oXslEjJA= -github.com/go-playground/locales v0.14.1/go.mod h1:hxrqLVvrK65+Rwrd5Fc6F2O76J/NuW9t0sjnWqG1slY= github.com/go-playground/universal-translator v0.17.0/go.mod h1:UkSxE5sNxxRwHyU+Scu5vgOQjsIJAF8j9muTVoKLVtA= github.com/go-playground/universal-translator v0.18.1 h1:Bcnm0ZwsGyWbCzImXv+pAJnYK9S473LQFuzCbDbfSFY= -github.com/go-playground/universal-translator v0.18.1/go.mod h1:xekY+UJKNuX9WP91TpwSH2VMlDf28Uj24BCp08ZFTUY= github.com/go-playground/validator/v10 v10.2.0/go.mod h1:uOYAAleCW8F/7oMFd6aG0GOhaH6EGOAJShg8Id5JGkI= github.com/go-playground/validator/v10 v10.14.1 h1:9c50NUPC30zyuKprjL3vNZ0m5oG+jU0zvx4AqHGnv4k= -github.com/go-playground/validator/v10 v10.14.1/go.mod h1:9iXMNT7sEkjXb0I+enO7QXmzG6QCsPWY4zveKFVRSyU= github.com/go-redis/redis/v8 v8.11.4 h1:kHoYkfZP6+pe04aFTnhDH6GDROa5yJdHJVNxV3F46Tg= github.com/go-redis/redis/v8 v8.11.4/go.mod h1:2Z2wHZXdQpCDXEGzqMockDpNyYvi2l4Pxt6RJr792+w= github.com/go-sourcemap/sourcemap v2.1.3+incompatible h1:W1iEw64niKVGogNgBN3ePyLFfuisuzeidWPMPWmECqU= @@ -461,7 +448,6 @@ github.com/gobwas/ws v1.1.0/go.mod h1:nzvNcVha5eUziGrbxFCo6qFIojQHjJV5cLYIbezhfL github.com/gobwas/ws-examples v0.0.0-20190625122829-a9e8908d9484 h1:XC9N1eiAyO1zg62dpOU8bex8emB/zluUtKcbLNjJxGI= github.com/gobwas/ws-examples v0.0.0-20190625122829-a9e8908d9484/go.mod h1:5nDZF4afNA1S7ZKcBXCMvDo4nuCTp1931DND7/W4aXo= github.com/goccy/go-json v0.10.2 h1:CrxCmQqYDkv1z7lO7Wbh2HN93uovUHgrECaO5ZrCXAU= -github.com/goccy/go-json v0.10.2/go.mod h1:6MelG93GURQebXPDq3khkgXZkazVtN9CRI+MGFi0w8I= github.com/godbus/dbus/v5 v5.0.3/go.mod h1:xhWf0FNVPg57R7Z0UbKHbJfkEywrmjJnf7w5xrFpKfA= github.com/godbus/dbus/v5 v5.0.4/go.mod h1:xhWf0FNVPg57R7Z0UbKHbJfkEywrmjJnf7w5xrFpKfA= github.com/godbus/dbus/v5 v5.1.0 h1:4KLkAxT3aOY8Li4FRJe/KvhoNFFxo0m6fNuFUO8QJUk= @@ -684,7 +670,6 @@ github.com/ipfs/go-bitswap v0.1.2/go.mod h1:qxSWS4NXGs7jQ6zQvoPY3+NmOfHHG47mhkiL github.com/ipfs/go-bitswap v0.5.1/go.mod h1:P+ckC87ri1xFLvk74NlXdP0Kj9RmWAh4+H78sC6Qopo= github.com/ipfs/go-bitswap v0.6.0/go.mod h1:Hj3ZXdOC5wBJvENtdqsixmzzRukqd8EHLxZLZc3mzRA= github.com/ipfs/go-bitswap v0.11.0 h1:j1WVvhDX1yhG32NTC9xfxnqycqYIlhzEzLXG/cU1HyQ= -github.com/ipfs/go-bitswap v0.11.0/go.mod h1:05aE8H3XOU+LXpTedeAS0OZpcO1WFsj5niYQH9a1Tmk= github.com/ipfs/go-block-format v0.0.1/go.mod h1:DK/YYcsSUIVAFNwo/KZCdIIbpN0ROH/baNLgayt4pFc= github.com/ipfs/go-block-format v0.0.2/go.mod h1:AWR46JfpcObNfg3ok2JHDUfdiHRgWhJgCQF+KIgOPJY= github.com/ipfs/go-block-format v0.0.3/go.mod h1:4LmD4ZUw0mhO+JSKdpWwrzATiEfM7WWgQ8H5l6P8MVk= @@ -865,7 +850,6 @@ github.com/ipld/edelweiss v0.2.0 h1:KfAZBP8eeJtrLxLhi7r3N0cBCo7JmwSRhOJp3WSpNjk= github.com/ipld/edelweiss v0.2.0/go.mod h1:FJAzJRCep4iI8FOFlRriN9n0b7OuX3T/S9++NpBDmA4= github.com/ipld/go-car v0.5.0 h1:kcCEa3CvYMs0iE5BzD5sV7O2EwMiCIp3uF8tA6APQT8= github.com/ipld/go-car/v2 v2.5.1 h1:U2ux9JS23upEgrJScW8VQuxmE94560kYxj9CQUpcfmk= -github.com/ipld/go-car/v2 v2.5.1/go.mod h1:jKjGOqoCj5zn6KjnabD6JbnCsMntqU2hLiU6baZVO3E= github.com/ipld/go-codec-dagpb v1.3.0/go.mod h1:ga4JTU3abYApDC3pZ00BC2RSvC3qfBb9MSJkMLSwnhA= github.com/ipld/go-codec-dagpb v1.5.0 h1:RspDRdsJpLfgCI0ONhTAnbHdySGD4t+LHSPK4X1+R0k= github.com/ipld/go-codec-dagpb v1.5.0/go.mod h1:0yRIutEFD8o1DGVqw4RSHh+BUTlJA9XWldxaaWR/o4g= @@ -887,7 +871,6 @@ github.com/jbenet/go-cienv v0.0.0-20150120210510-1bb1476777ec/go.mod h1:rGaEvXB4 github.com/jbenet/go-cienv v0.1.0 h1:Vc/s0QbQtoxX8MwwSLWWh+xNNZvM3Lw7NsTcHrvvhMc= github.com/jbenet/go-cienv v0.1.0/go.mod h1:TqNnHUmJgXau0nCzC7kXWeotg3J9W34CUv5Djy1+FlA= github.com/jbenet/go-random v0.0.0-20190219211222-123a90aedc0c h1:uUx61FiAa1GI6ZmVd2wf2vULeQZIKG66eybjNXKYCz4= -github.com/jbenet/go-random v0.0.0-20190219211222-123a90aedc0c/go.mod h1:sdx1xVM9UuLw1tXnhJWN3piypTUO3vCIHYmG15KE/dU= github.com/jbenet/go-temp-err-catcher v0.0.0-20150120210811-aac704a3f4f2/go.mod h1:8GXXJV31xl8whumTzdZsTt3RnUIiPqzkyf7mxToRCMs= github.com/jbenet/go-temp-err-catcher v0.1.0 h1:zpb3ZH6wIE8Shj2sKS+khgRvf7T7RABoLk/+KKHggpk= github.com/jbenet/go-temp-err-catcher v0.1.0/go.mod h1:0kJRvmDZXNMIiJirNPEYfhpPwbGVtZVWC34vc5WLsDk= @@ -911,7 +894,6 @@ github.com/jmespath/go-jmespath/internal/testify v1.5.1 h1:shLQSRRSCCPj3f2gpwzGw github.com/jmespath/go-jmespath/internal/testify v1.5.1/go.mod h1:L3OGu8Wl2/fWfCI6z80xFu9LTZmf1ZRjMHUOPmWr69U= github.com/joho/godotenv v1.3.0/go.mod h1:7hK45KPybAkOC6peb+G5yklZfMxEjkZhHbwpqxOKXbg= github.com/joho/godotenv v1.5.1 h1:7eLL/+HRGLY0ldzfGMeQkb7vMd0as4CfYvUVzLqw0N0= -github.com/joho/godotenv v1.5.1/go.mod h1:f4LDr5Voq0i2e/R5DDNOoa2zzDfwtkZa6DnEwAbqwq4= github.com/jonboulle/clockwork v0.1.0/go.mod h1:Ii8DK3G1RaLaWxj9trq07+26W01tbo22gdxWY5EU2bo= github.com/jpillora/backoff v1.0.0/go.mod h1:J/6gKK9jxlEcS3zixgDgUAsiuZ7yrSoa/FX5e0EB2j4= github.com/jrick/logrotate v1.0.0/go.mod h1:LNinyqDIJnpAur+b8yyulnQw/wDuN1+BYKlTRt3OuAQ= @@ -921,7 +903,6 @@ github.com/json-iterator/go v1.1.8/go.mod h1:KdQUCv79m/52Kvf8AW2vK1V8akMuk1QjK/u github.com/json-iterator/go v1.1.9/go.mod h1:KdQUCv79m/52Kvf8AW2vK1V8akMuk1QjK/uOdHXbAo4= github.com/json-iterator/go v1.1.10/go.mod h1:KdQUCv79m/52Kvf8AW2vK1V8akMuk1QjK/uOdHXbAo4= github.com/json-iterator/go v1.1.12 h1:PV8peI4a0ysnczrg+LtxykD8LfKY9ML6u2jnxaEnrnM= -github.com/json-iterator/go v1.1.12/go.mod h1:e30LSqwooZae/UwlEbR2852Gd8hjQvJoHmT4TnhNGBo= github.com/jstemmer/go-junit-report v0.0.0-20190106144839-af01ea7f8024/go.mod h1:6v2b51hI/fHJwM22ozAgKL4VKDeJcHhJFhtBdhmNjmU= github.com/jstemmer/go-junit-report v0.9.1/go.mod h1:Brl9GWCQeLvo8nXZwPNNblvFj/XSXhF0NWZEnDohbsk= github.com/jtolds/gls v4.2.1+incompatible/go.mod h1:QJZ7F/aHp+rZTRtaJ1ow/lLfFfVYBRgL+9YlvaHOwJU= @@ -984,14 +965,11 @@ github.com/kr/text v0.1.0/go.mod h1:4Jbv+DJW3UT/LiOwJeYQe1efqtUx/iVham/4vfdArNI= github.com/kr/text v0.2.0 h1:5Nx0Ya0ZqY2ygV366QzturHI13Jq95ApcVaJBhpS+AY= github.com/kr/text v0.2.0/go.mod h1:eLer722TekiGuMkidMxC/pM04lWEeraHUUmBw8l2grE= github.com/kylelemons/godebug v1.1.0 h1:RPNrshWIDI6G2gRW9EHilWtl7Z6Sb1BR0xunSBf0SNc= -github.com/kylelemons/godebug v1.1.0/go.mod h1:9/0rRGxNHcop5bhtWyNeEfOS8JIWk580+fNqagV/RAw= github.com/labstack/echo/v4 v4.5.0/go.mod h1:czIriw4a0C1dFun+ObrXp7ok03xON0N1awStJ6ArI7Y= github.com/labstack/gommon v0.3.0/go.mod h1:MULnywXg0yavhxWKc+lOruYdAhDwPK9wf0OL7NoOu+k= github.com/leanovate/gopter v0.2.9 h1:fQjYxZaynp97ozCzfOyOuAGOU4aU/z37zf/tOujFk7c= -github.com/leanovate/gopter v0.2.9/go.mod h1:U2L/78B+KVFIx2VmW6onHJQzXtFb+p5y3y2Sh+Jxxv8= github.com/leodido/go-urn v1.2.0/go.mod h1:+8+nEpDfqqsY+g338gtMEUOtuK+4dEMhiQEgxpxOKII= github.com/leodido/go-urn v1.2.4 h1:XlAE/cm/ms7TE/VMVoduSpNBoyc2dOxHs5MZSwAN63Q= -github.com/leodido/go-urn v1.2.4/go.mod h1:7ZrI8mTSeBSHl/UaRyKQW1qZeMgak41ANeCNaVckg+4= github.com/libp2p/go-addr-util v0.0.1/go.mod h1:4ac6O7n9rIAKB1dnd+s8IbbMXkt+oBpzX4/+RACcnlQ= github.com/libp2p/go-addr-util v0.0.2/go.mod h1:Ecd6Fb3yIuLzq4bD7VcywcVSBtefcAwnUISBM3WG15E= github.com/libp2p/go-buffer-pool v0.0.1/go.mod h1:xtyIz9PMobb13WaxR6Zo1Pd1zXJKYg0a8KiIvDp3TzQ= @@ -1118,7 +1096,6 @@ github.com/libp2p/go-libp2p-testing v0.1.2-0.20200422005655-8775583591d8/go.mod github.com/libp2p/go-libp2p-testing v0.3.0/go.mod h1:efZkql4UZ7OVsEfaxNHZPzIehtsBXMrXnCfJIgDti5g= github.com/libp2p/go-libp2p-testing v0.4.0/go.mod h1:Q+PFXYoiYFN5CAEG2w3gLPEzotlKsNSbKQ/lImlOWF0= github.com/libp2p/go-libp2p-testing v0.12.0 h1:EPvBb4kKMWO29qP4mZGyhVzUyR25dvfUIK5WDu6iPUA= -github.com/libp2p/go-libp2p-testing v0.12.0/go.mod h1:KcGDRXyN7sQCllucn1cOOS+Dmm7ujhfEyXQL5lvkcPg= github.com/libp2p/go-libp2p-tls v0.1.3/go.mod h1:wZfuewxOndz5RTnCAxFliGjvYSDA40sKitV4c50uI1M= github.com/libp2p/go-libp2p-transport-upgrader v0.1.1/go.mod h1:IEtA6or8JUbsV07qPW4r01GnTenLW4oi3lOPbUMGJJA= github.com/libp2p/go-libp2p-transport-upgrader v0.2.0/go.mod h1:mQcrHj4asu6ArfSoMuyojOdjx73Q47cYD7s5+gZOlns= @@ -1302,7 +1279,6 @@ github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd/go.mod h1:6dJ github.com/modern-go/reflect2 v0.0.0-20180701023420-4b7aa43c6742/go.mod h1:bx2lNnkwVCuqBIxFjflWJWanXIb3RllmbCylyMrvgv0= github.com/modern-go/reflect2 v1.0.1/go.mod h1:bx2lNnkwVCuqBIxFjflWJWanXIb3RllmbCylyMrvgv0= github.com/modern-go/reflect2 v1.0.2 h1:xBagoLtFs94CBntxluKeaWgTMpvLxC4ur3nMaC9Gz0M= -github.com/modern-go/reflect2 v1.0.2/go.mod h1:yWuevngMOJpCy52FWWMvUC8ws7m/LJsjYzDa0/r8luk= github.com/moul/http2curl v1.0.0/go.mod h1:8UbvGypXm98wA/IqH45anm5Y2Z6ep6O31QGOAZ3H0fQ= github.com/mr-tron/base58 v1.1.0/go.mod h1:xcD2VGqlgYjBdcBLw+TuYLr8afG+Hj8g2eTVqeSzSU8= github.com/mr-tron/base58 v1.1.1/go.mod h1:xcD2VGqlgYjBdcBLw+TuYLr8afG+Hj8g2eTVqeSzSU8= @@ -1416,7 +1392,6 @@ github.com/onsi/gomega v1.9.0/go.mod h1:Ho0h+IUsWyvy1OpqCwxlQ/21gkhVunqlU8fDGcoT github.com/onsi/gomega v1.10.1/go.mod h1:iN09h71vgCQne3DLsj+A5owkum+a2tYe+TOCB1ybHNo= github.com/onsi/gomega v1.16.0/go.mod h1:HnhC7FXeEQY45zxNK3PPoIUhzk/80Xly9PcubAlGdZY= github.com/onsi/gomega v1.27.8 h1:gegWiwZjBsf2DgiSbf5hpokZ98JVDMcWkUiigk6/KXc= -github.com/onsi/gomega v1.27.8/go.mod h1:2J8vzI/s+2shY9XHRApDkdgPo1TKT7P2u6fXeJKFnNQ= github.com/op/go-logging v0.0.0-20160315200505-970db520ece7/go.mod h1:HzydrMdWErDVzsI23lYNej1Htcns9BCg93Dk0bBINWk= github.com/opencontainers/runtime-spec v1.0.2 h1:UfAcuLBJB9Coz72x1hgl8O5RVzTdNiaglX6v2DM6FI0= github.com/opencontainers/runtime-spec v1.0.2/go.mod h1:jwyrGlmzljRJv/Fgzds9SsS/C5hL+LL3ko9hs6T5lQ0= @@ -1443,10 +1418,8 @@ github.com/pelletier/go-toml v1.2.0/go.mod h1:5z9KED0ma1S8pY6P1sdut58dfprrGBbd/9 github.com/pelletier/go-toml v1.7.0 h1:7utD74fnzVc/cpcyy8sjrlFr5vYpypUixARcHIMIGuI= github.com/pelletier/go-toml v1.7.0/go.mod h1:vwGMzjaWMwyfHwgIBhI2YUM4fB6nL6lVAvS1LBMMhTE= github.com/pelletier/go-toml/v2 v2.0.8 h1:0ctb6s9mE31h0/lhu+J6OPmVeDxJn+kYnJc2jZR9tGQ= -github.com/pelletier/go-toml/v2 v2.0.8/go.mod h1:vuYfssBdrU2XDZ9bYydBu6t+6a6PYNcZljzZR9VXg+4= github.com/performancecopilot/speed v3.0.0+incompatible/go.mod h1:/CLtqpZ5gBg1M9iaPbIdPPGyKcA8hKdoy6hAWba7Yac= github.com/petar/GoLLRB v0.0.0-20210522233825-ae3b015fd3e9 h1:1/WtZae0yGtPq+TI6+Tv1WTxkukpXeMlviSxvL7SRgk= -github.com/petar/GoLLRB v0.0.0-20210522233825-ae3b015fd3e9/go.mod h1:x3N5drFsm2uilKKuuYo6LdyD8vZAW55sH/9w+pbo1sw= github.com/pierrec/lz4 v1.0.2-0.20190131084431-473cd7ce01a1/go.mod h1:3/3N9NVKO0jef7pBehbT1qWhCMrIgbYNnFAZCqQ5LRc= github.com/pierrec/lz4 v2.0.5+incompatible/go.mod h1:pdkljMzZIN41W+lC3N2tnIh5sFi+IEE17M5jbnwPHcY= github.com/pierrec/lz4 v2.6.1+incompatible/go.mod h1:pdkljMzZIN41W+lC3N2tnIh5sFi+IEE17M5jbnwPHcY= @@ -1619,7 +1592,6 @@ github.com/stretchr/objx v0.1.1/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+ github.com/stretchr/objx v0.4.0/go.mod h1:YvHI0jy2hoMjB+UWwv71VJQ9isScKT/TqJzVSSt89Yw= github.com/stretchr/objx v0.5.0/go.mod h1:Yh+to48EsGEfYuaHDzXPcE3xhTkx73EhmCGUpEOglKo= github.com/stretchr/objx v0.5.2 h1:xuMeJ0Sdp5ZMRXx/aWO6RZxdr3beISkG5/G/aIRr3pY= -github.com/stretchr/objx v0.5.2/go.mod h1:FRsXN1f5AsAjCGJKqEizvkpNtU+EGNCLh3NxZ/8L+MA= github.com/stretchr/testify v1.2.2/go.mod h1:a8OnRcib4nhh0OaRAV+Yts87kKdq0PP7pXfy6kDkUVs= github.com/stretchr/testify v1.3.0/go.mod h1:M5WIy9Dh21IEIfnGCwXGc5bZfKNJtfHm1UVUgZn+9EI= github.com/stretchr/testify v1.4.0/go.mod h1:j7eGeouHqKxXV5pUuKE4zz7dFj8WfuZ+81PSLYec5m4= @@ -1630,7 +1602,6 @@ github.com/stretchr/testify v1.7.1/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/ github.com/stretchr/testify v1.8.0/go.mod h1:yNjHg4UonilssWZ8iaSj1OCr/vHnekPRkoO+kdMU+MU= github.com/stretchr/testify v1.8.1/go.mod h1:w2LPCIKwWwSfY2zedu0+kehJoqGctiVI29o6fzry7u4= github.com/stretchr/testify v1.9.0 h1:HtqpIVDClZ4nwg75+f6Lvsy/wHu+3BoSGCbBAcpTsTg= -github.com/stretchr/testify v1.9.0/go.mod h1:r2ic/lqez/lEtzL7wO/rwa5dbSLXVDPFyf8C91i36aY= github.com/supranational/blst v0.3.11 h1:LyU6FolezeWAhvQk0k6O/d49jqgO52MSDDfYgbeoEm4= github.com/supranational/blst v0.3.11/go.mod h1:jZJtfjgudtNl4en1tzwPIV3KjUnQUvG3/j+w+fVonLw= github.com/syndtr/goleveldb v1.0.0/go.mod h1:ZVVdQEZoIme9iO1Ch2Jdy24qqXrMMOU6lpPAyBWyWuQ= @@ -1638,7 +1609,6 @@ github.com/syndtr/goleveldb v1.0.1-0.20210819022825-2ae1ddf74ef7 h1:epCh84lMvA70 github.com/syndtr/goleveldb v1.0.1-0.20210819022825-2ae1ddf74ef7/go.mod h1:q4W45IWZaF22tdD+VEXcAWRA037jwmWEB5VWYORlTpc= github.com/tarm/serial v0.0.0-20180830185346-98f6abe2eb07/go.mod h1:kDXzergiv9cbyO7IOYJZWg1U88JhDg3PB6klq9Hg2pA= github.com/thoas/go-funk v0.9.1 h1:O549iLZqPpTUQ10ykd26sZhzD+rmR5pWhuElrhbC20M= -github.com/thoas/go-funk v0.9.1/go.mod h1:+IWnUfUmFO1+WVYQWQtIJHeRRdaIyyYglZN7xzUPe4Q= github.com/tklauser/go-sysconf v0.3.12 h1:0QaGUFOdQaIVdPgfITYzaTegZvdCjmYO52cSFAEVmqU= github.com/tklauser/go-sysconf v0.3.12/go.mod h1:Ho14jnntGE1fpdOqQEEaiKRpvIavV0hSfmBq8nJbHYI= github.com/tklauser/numcpus v0.6.1 h1:ng9scYS7az0Bk4OZLvrNXNSAO2Pxr1XXRAPyjhIx+Fk= @@ -1647,7 +1617,6 @@ github.com/tmc/grpc-websocket-proxy v0.0.0-20170815181823-89b8d40f7ca8/go.mod h1 github.com/tv42/httpunix v0.0.0-20191220191345-2ba4b9c3382c h1:u6SKchux2yDvFQnDHS3lPnIRmfVJ5Sxy3ao2SIdysLQ= github.com/tv42/httpunix v0.0.0-20191220191345-2ba4b9c3382c/go.mod h1:hzIxponao9Kjc7aWznkXaL4U4TWaDSs8zcsY4Ka08nM= github.com/twitchyliquid64/golang-asm v0.15.1 h1:SU5vSMR7hnwNxj24w34ZyCi/FmDZTkS4MhqMhdFk5YI= -github.com/twitchyliquid64/golang-asm v0.15.1/go.mod h1:a1lVb/DtPvCB8fslRZhAngC2+aY1QWCk3Cedj/Gdt08= github.com/tyler-smith/go-bip39 v1.1.0 h1:5eUemwrMargf3BSLRRCalXT93Ns6pQJIjYQN2nyfOP8= github.com/tyler-smith/go-bip39 v1.1.0/go.mod h1:gUYDtqQw1JS3ZJ8UWVcGTGqqr6YIN3CWg+kkNaLt55U= github.com/ugorji/go v1.1.4/go.mod h1:uQMGLiO92mf5W77hV/PUCpI3pbzQx3CRekS0kk+RGrc= @@ -1656,7 +1625,6 @@ github.com/ugorji/go v1.1.7/go.mod h1:kZn38zHttfInRq0xu/PH0az30d+z6vm202qpg1oXVM github.com/ugorji/go/codec v0.0.0-20181204163529-d75b2dcb6bc8/go.mod h1:VFNgLljTbGfSG7qAOspJ7OScBnGdDN/yBr0sguwnwf0= github.com/ugorji/go/codec v1.1.7/go.mod h1:Ax+UKWsSmolVDwsd+7N3ZtXu+yMGCf907BLYF3GoBXY= github.com/ugorji/go/codec v1.2.11 h1:BMaWp1Bb6fHwEtbplGBGJ498wD+LKlNSl25MjdZY4dU= -github.com/ugorji/go/codec v1.2.11/go.mod h1:UNopzCgEMSXjBc6AOMqYvWC1ktqTAfzJZUZgYf6w6lg= github.com/urfave/cli v1.20.0/go.mod h1:70zkFmudgCuE/ngEzBv17Jvp/497gISqfk5gWijbERA= github.com/urfave/cli v1.22.1/go.mod h1:Gos4lmkARVdJ6EkW0WaNv/tZAAMe9V7XWyB60NtXRu0= github.com/urfave/cli v1.22.2/go.mod h1:Gos4lmkARVdJ6EkW0WaNv/tZAAMe9V7XWyB60NtXRu0= @@ -1680,7 +1648,6 @@ github.com/wangjia184/sortedset v0.0.0-20160527075905-f5d03557ba30/go.mod h1:Yko github.com/warpfork/go-testmark v0.3.0/go.mod h1:jhEf8FVxd+F17juRubpmut64NEG6I2rgkUhlcqqXwE0= github.com/warpfork/go-testmark v0.9.0/go.mod h1:jhEf8FVxd+F17juRubpmut64NEG6I2rgkUhlcqqXwE0= github.com/warpfork/go-testmark v0.10.0 h1:E86YlUMYfwIacEsQGlnTvjk1IgYkyTGjPhF0RnwTCmw= -github.com/warpfork/go-testmark v0.10.0/go.mod h1:jhEf8FVxd+F17juRubpmut64NEG6I2rgkUhlcqqXwE0= github.com/warpfork/go-wish v0.0.0-20180510122957-5ad1f5abf436/go.mod h1:x6AKhvSSexNrVSrViXSHUEbICjmGXhtgABaHIySUSGw= github.com/warpfork/go-wish v0.0.0-20190328234359-8b3e70f8e830/go.mod h1:x6AKhvSSexNrVSrViXSHUEbICjmGXhtgABaHIySUSGw= github.com/warpfork/go-wish v0.0.0-20200122115046-b9ea61034e4a/go.mod h1:x6AKhvSSexNrVSrViXSHUEbICjmGXhtgABaHIySUSGw= @@ -1691,7 +1658,6 @@ github.com/wealdtech/go-merkletree v1.0.0/go.mod h1:cdil512d/8ZC7Kx3bfrDvGMQXB25 github.com/whyrusleeping/base32 v0.0.0-20170828182744-c30ac30633cc h1:BCPnHtcboadS0DvysUuJXZ4lWVv5Bh5i7+tbIyi+ck4= github.com/whyrusleeping/base32 v0.0.0-20170828182744-c30ac30633cc/go.mod h1:r45hJU7yEoA81k6MWNhpMj/kms0n14dkzkxYHoB96UM= github.com/whyrusleeping/cbor v0.0.0-20171005072247-63513f603b11 h1:5HZfQkwe0mIfyDmc1Em5GqlNRzcdtlv4HTNmdpt7XH0= -github.com/whyrusleeping/cbor v0.0.0-20171005072247-63513f603b11/go.mod h1:Wlo/SzPmxVp6vXpGt/zaXhHH0fn4IxgqZc82aKg6bpQ= github.com/whyrusleeping/cbor-gen v0.0.0-20200123233031-1cdf64d27158/go.mod h1:Xj/M2wWU+QdTdRbu/L/1dIZY8/Wb2K9pAhtroQuxJJI= github.com/whyrusleeping/cbor-gen v0.0.0-20230126041949-52956bd4c9aa h1:EyA027ZAkuaCLoxVX4r1TZMPy1d31fM6hbfQ4OU4I5o= github.com/whyrusleeping/cbor-gen v0.0.0-20230126041949-52956bd4c9aa/go.mod h1:fgkXqYy7bV2cFeIEOkVTZS/WjXARfBqSH6Q2qHL33hQ= @@ -1782,7 +1748,6 @@ go.uber.org/goleak v1.0.0/go.mod h1:8a7PlsEVH3e/a/GLqe5IIrQx6GzcnRmZEufDUTk4A7A= go.uber.org/goleak v1.1.11-0.20210813005559-691160354723/go.mod h1:cwTWslyiVhfpKIDGSZEM2HlOvcqm+tG4zioyIeLoqMQ= go.uber.org/goleak v1.1.12/go.mod h1:cwTWslyiVhfpKIDGSZEM2HlOvcqm+tG4zioyIeLoqMQ= go.uber.org/goleak v1.3.0 h1:2K3zAYmnTNqV73imy9J1T3WC+gmCePx2hEGkimedGto= -go.uber.org/goleak v1.3.0/go.mod h1:CoHD4mav9JJNrW/WLlf7HGZPjdw8EucARQHekz1X6bE= go.uber.org/multierr v1.1.0/go.mod h1:wR5kodmAFQ0UK8QlbwjlSNy0Z68gJhDJUG5sjR94q/0= go.uber.org/multierr v1.3.0/go.mod h1:VgVr7evmIr6uPjLBxg28wmKNXyqE9akIJ5XnfpiKl+4= go.uber.org/multierr v1.5.0/go.mod h1:FeouvMocqHpRaaGuG9EjoKcStLC43Zu/fmqdUMPcKYU= @@ -1801,9 +1766,7 @@ go.uber.org/zap v1.27.0/go.mod h1:GB2qFLM7cTU87MWRP2mPIjqfIDnGu+VIO4V/SdhGo2E= go4.org v0.0.0-20180809161055-417644f6feb5/go.mod h1:MkTOUMDaeVYJUOUsaDXIhWPZYa1yOyC1qaOBpL57BhE= go4.org v0.0.0-20200411211856-f5505b9728dd h1:BNJlw5kRTzdmyfh5U8F93HA2OwkP7ZGwA51eJ/0wKOU= go4.org v0.0.0-20200411211856-f5505b9728dd/go.mod h1:CIiUVy99QCPfoE13bO4EZaz5GZMZXMSBGhxRdsvzbkg= -golang.org/x/arch v0.0.0-20210923205945-b76863e36670/go.mod h1:5om86z9Hs0C8fWVUuoMHwpExlXzs5Tkyp9hOrfG7pp8= golang.org/x/arch v0.4.0 h1:A8WCeEWhLwPBKNbFi5Wv5UTCBx5zzubnXDlMOFAzFMc= -golang.org/x/arch v0.4.0/go.mod h1:5om86z9Hs0C8fWVUuoMHwpExlXzs5Tkyp9hOrfG7pp8= golang.org/x/build v0.0.0-20190111050920-041ab4dc3f9d/go.mod h1:OWs+y06UdEOHN4y+MfF/py+xQ/tYqIWW03b70/CG9Rw= golang.org/x/crypto v0.0.0-20170930174604-9419663f5a44/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4= golang.org/x/crypto v0.0.0-20180214000028-650f4a345ab4/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4= @@ -2343,7 +2306,6 @@ nhooyr.io/websocket v1.8.7/go.mod h1:B70DZP8IakI65RVQ51MsWP/8jndNma26DVA/nFSCgW0 pgregory.net/rapid v0.4.7 h1:MTNRktPuv5FNqOO151TM9mDTa+XHcX6ypYeISDVD14g= pgregory.net/rapid v0.4.7/go.mod h1:UYpPVyjFHzYBGHIxLFoupi8vwk6rXNzRY9OMvVxFIOU= rsc.io/binaryregexp v0.2.0/go.mod h1:qTv7/COck+e2FymRvadv62gMdZztPaShugOCi3I+8D8= -rsc.io/pdf v0.1.1/go.mod h1:n8OzWcQ6Sp37PL01nO98y4iUCRdTGarVfzxY20ICaU4= rsc.io/quote/v3 v3.1.0/go.mod h1:yEA65RcK8LyAZtP9Kv3t0HmxON59tX3rD+tICJqUlj0= rsc.io/sampler v1.3.0/go.mod h1:T1hPZKmBbMNahiBKFy5HrXp6adAjACjK9JXDnKaTXpA= rsc.io/tmplfunc v0.0.3 h1:53XFQh69AfOa8Tw0Jm7t+GV7KZhOi6jzsCzTtKbMvzU= From 3ab6f9b3ce66514654cc02b01dd1b1510b6e552a Mon Sep 17 00:00:00 2001 From: Ethen Pociask Date: Wed, 3 Jul 2024 04:37:28 -0400 Subject: [PATCH 25/38] update go.mod and submodules --- nitro-testnode | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/nitro-testnode b/nitro-testnode index 119571585..8302b1148 160000 --- a/nitro-testnode +++ b/nitro-testnode @@ -1 +1 @@ -Subproject commit 11957158583d1bd8c54780cb8411933db41f81ed +Subproject commit 8302b1148d19d96300171ad2dfd0f7a686674abe From 363ec7e0c3740ca6b66a1f287454c3e986c5a7b6 Mon Sep 17 00:00:00 2001 From: Ethen Pociask Date: Wed, 3 Jul 2024 16:28:46 -0400 Subject: [PATCH 26/38] fix batch header hash calculation bug --- eigenda/eigenda.go | 2 -- eigenda/types.go | 70 ++++++++++++++++++---------------------------- 2 files changed, 27 insertions(+), 45 deletions(-) diff --git a/eigenda/eigenda.go b/eigenda/eigenda.go index 27c27e8fc..534e9eb81 100644 --- a/eigenda/eigenda.go +++ b/eigenda/eigenda.go @@ -83,8 +83,6 @@ func (e *EigenDA) Store(ctx context.Context, data []byte) (*EigenDABlobInfo, err return nil, err } - log.Info("Received the following batch header from EigenDA", "batchHeader", cert.BlobVerificationProof.BatchMetadata) - blobInfo.LoadBlobInfo(cert) return blobInfo, nil diff --git a/eigenda/types.go b/eigenda/types.go index fdee5626c..daaa214cb 100644 --- a/eigenda/types.go +++ b/eigenda/types.go @@ -2,13 +2,10 @@ package eigenda import ( "errors" - "fmt" "math/big" "github.com/Layr-Labs/eigenda/api/grpc/disperser" "github.com/ethereum/go-ethereum/accounts/abi" - "github.com/ethereum/go-ethereum/common/hexutil" - "github.com/ethereum/go-ethereum/log" "golang.org/x/crypto/sha3" ) @@ -57,14 +54,6 @@ type BatchMetadata struct { BatchHeaderHash []byte `json:"batchHeaderHash"` } -/* - BlobHeadersRoot [32]byte - QuorumNumbers []byte - SignedStakeForQuorums []byte - ReferenceBlockNumber uint32 - -*/ - type BatchHeader struct { BlobHeadersRoot [32]byte `json:"blobHeadersRoot"` QuorumNumbers []byte `json:"quorumNumbers"` @@ -72,31 +61,21 @@ type BatchHeader struct { ReferenceBlockNumber uint32 `json:"referenceBlockNumber"` } -func HashBatchHeader(batchHeader BatchHeader) ([32]byte, error) { - - log.Info("Computing batch header hash for EigenDA", "batchHeader", batchHeader) - - // The order here has to match the field ordering of BatchHeader defined in IEigenDAServiceManager.sol +func (h *DisperserBatchHeader) Encode() ([]byte, error) { + // The order here has to match the field ordering of ReducedBatchHeader defined in IEigenDAServiceManager.sol + // ref: https://github.com/Layr-Labs/eigenda/blob/master/contracts/src/interfaces/IEigenDAServiceManager.sol#L43 batchHeaderType, err := abi.NewType("tuple", "", []abi.ArgumentMarshaling{ { - Name: "batchRoot", + Name: "blobHeadersRoot", Type: "bytes32", }, - { - Name: "quorumNumbers", - Type: "bytes", - }, - { - Name: "confirmationThresholdPercentages", - Type: "bytes", - }, { Name: "referenceBlockNumber", Type: "uint32", }, }) if err != nil { - return [32]byte{}, err + return nil, err } arguments := abi.Arguments{ @@ -105,33 +84,38 @@ func HashBatchHeader(batchHeader BatchHeader) ([32]byte, error) { }, } + bytes32BatchRoot := [32]byte(h.BatchRoot) + + // cast batch root to bytes32 + s := struct { - BatchRoot [32]byte - QuorumNumbers []byte - ConfirmationThresholdPercentages []byte - ReferenceBlockNumber uint32 + BlobHeadersRoot [32]byte + ReferenceBlockNumber uint32 }{ - BatchRoot: batchHeader.BlobHeadersRoot, - QuorumNumbers: batchHeader.QuorumNumbers, - ConfirmationThresholdPercentages: batchHeader.SignedStakeForQuorums, - ReferenceBlockNumber: uint32(batchHeader.ReferenceBlockNumber), + BlobHeadersRoot: bytes32BatchRoot, + ReferenceBlockNumber: uint32(h.ReferenceBlockNumber), } bytes, err := arguments.Pack(s) + if err != nil { + return nil, err + } + + return bytes, nil +} + +// GetBatchHeaderHash returns the hash of the reduced BatchHeader that is used to sign the Batch +// ref: https://github.com/Layr-Labs/eigenda/blob/master/contracts/src/libraries/EigenDAHasher.sol#L65 +func (h DisperserBatchHeader) GetBatchHeaderHash() ([32]byte, error) { + headerByte, err := h.Encode() if err != nil { return [32]byte{}, err } var headerHash [32]byte hasher := sha3.NewLegacyKeccak256() - hasher.Write(bytes) - - hash := hasher.Sum(nil) - copy(headerHash[:], hash[:32]) - - // dump header hash to dynamic byte array - - log.Info("Computed batch header hash for EigenDA", "hash", fmt.Sprintf("%s", hexutil.Encode(hash))) + hasher.Write(headerByte) + copy(headerHash[:], hasher.Sum(nil)[:32]) return headerHash, nil } @@ -301,7 +285,7 @@ func (e *EigenDABlobInfo) ToDisperserBlobInfo() (*DisperserBlobInfo, error) { // set batchHeaderHash if not set - batchHeaderHash, err := HashBatchHeader(e.BlobVerificationProof.BatchMetadata.BatchHeader) + batchHeaderHash, err := disperserBlobVerificationProof.BatchMetadata.BatchHeader.GetBatchHeaderHash() if err != nil { return nil, err } From 2c02a8aa8473e1c091bfa9113e00c230ecd7dbab Mon Sep 17 00:00:00 2001 From: Ethen Pociask Date: Wed, 3 Jul 2024 16:42:29 -0400 Subject: [PATCH 27/38] remove dbug stmts && update system tests --- staker/l1_validator.go | 1 - staker/staker.go | 1 - system_tests/common_test.go | 2 ++ validator/server_jit/spawner.go | 1 - 4 files changed, 2 insertions(+), 3 deletions(-) diff --git a/staker/l1_validator.go b/staker/l1_validator.go index 6732daa43..87fd4a669 100644 --- a/staker/l1_validator.go +++ b/staker/l1_validator.go @@ -473,7 +473,6 @@ func (v *L1Validator) createNewNodeAction( validatedGS validator.GoGlobalState, lastNodeHashIfExists *common.Hash, ) (nodeAction, error) { - println("Creating a new node") if !prevInboxMaxCount.IsUint64() { return nil, fmt.Errorf("inbox max count %v isn't a uint64", prevInboxMaxCount) } diff --git a/staker/staker.go b/staker/staker.go index b397920ca..f57ba3779 100644 --- a/staker/staker.go +++ b/staker/staker.go @@ -96,7 +96,6 @@ type L1ValidatorConfig struct { } func (c *L1ValidatorConfig) ParseStrategy() (StakerStrategy, error) { - println("Strategy", strings.ToLower(c.Strategy)) switch strings.ToLower(c.Strategy) { case "watchtower": return WatchtowerStrategy, nil diff --git a/system_tests/common_test.go b/system_tests/common_test.go index c37eb1db3..8e8abd44b 100644 --- a/system_tests/common_test.go +++ b/system_tests/common_test.go @@ -688,6 +688,8 @@ func DeployOnTestL1( nativeToken, maxDataSize, false, + common.HexToAddress(0x0), + common.HexToAddress(0x0), ) Require(t, err) l1info.SetContract("Bridge", addresses.Bridge) diff --git a/validator/server_jit/spawner.go b/validator/server_jit/spawner.go index eae16a95b..6489821b5 100644 --- a/validator/server_jit/spawner.go +++ b/validator/server_jit/spawner.go @@ -75,7 +75,6 @@ func (v *JitSpawner) execute( return validator.GoGlobalState{}, fmt.Errorf("unabled to get WASM machine: %w", err) } - println("Proving execution from JIT spawner in validation server") state, err := machine.prove(ctx, entry) return state, err } From 35b2caefe882f48f9c5732f6c7aecdabcb503989 Mon Sep 17 00:00:00 2001 From: Ethen Pociask Date: Wed, 3 Jul 2024 16:52:21 -0400 Subject: [PATCH 28/38] fix challenge test construction --- system_tests/full_challenge_impl_test.go | 2 -- 1 file changed, 2 deletions(-) diff --git a/system_tests/full_challenge_impl_test.go b/system_tests/full_challenge_impl_test.go index 77114a16a..8a6a73e02 100644 --- a/system_tests/full_challenge_impl_test.go +++ b/system_tests/full_challenge_impl_test.go @@ -232,8 +232,6 @@ func setupSequencerInboxStub(ctx context.Context, t *testing.T, l1Info *Blockcha timeBounds, big.NewInt(117964), reader4844, - rollupMngr, - rollupMngr, false, ) Require(t, err) From 104aea9c955012f974e13a89fc52cd9524da4b50 Mon Sep 17 00:00:00 2001 From: Ethen Pociask Date: Wed, 3 Jul 2024 17:04:53 -0400 Subject: [PATCH 29/38] fix challenge test construction --- system_tests/common_test.go | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/system_tests/common_test.go b/system_tests/common_test.go index 8e8abd44b..fb1a7f701 100644 --- a/system_tests/common_test.go +++ b/system_tests/common_test.go @@ -688,8 +688,8 @@ func DeployOnTestL1( nativeToken, maxDataSize, false, - common.HexToAddress(0x0), - common.HexToAddress(0x0), + common.HexToAddress("0x0"), + common.HexToAddress("0x0"), ) Require(t, err) l1info.SetContract("Bridge", addresses.Bridge) From fce0728bb5727ecc32558f3175b1a4854a9b9562 Mon Sep 17 00:00:00 2001 From: Ethen Pociask Date: Wed, 3 Jul 2024 17:27:47 -0400 Subject: [PATCH 30/38] remove rollup manager dep --- system_tests/full_challenge_impl_test.go | 5 ----- 1 file changed, 5 deletions(-) diff --git a/system_tests/full_challenge_impl_test.go b/system_tests/full_challenge_impl_test.go index 8a6a73e02..2a9b51fe6 100644 --- a/system_tests/full_challenge_impl_test.go +++ b/system_tests/full_challenge_impl_test.go @@ -32,7 +32,6 @@ import ( "github.com/offchainlabs/nitro/arbstate" "github.com/offchainlabs/nitro/arbutil" "github.com/offchainlabs/nitro/execution/gethexec" - "github.com/offchainlabs/nitro/solgen/go/bridgegen" "github.com/offchainlabs/nitro/solgen/go/challengegen" "github.com/offchainlabs/nitro/solgen/go/mocksgen" @@ -214,10 +213,6 @@ func setupSequencerInboxStub(ctx context.Context, t *testing.T, l1Info *Blockcha FutureSeconds: big.NewInt(10000), } - rollupMngr, tx, _, err := bridgegen.DeployEigenDADummyManager(&txOpts, l1Client) - Require(t, err) - _, err = EnsureTxSucceeded(ctx, l1Client, tx) - // Require(t, err) // _, err = EnsureTxSucceeded(ctx, l1Client, tx) From c6ec1efb5fdc15ae3937f7846a7f704d7b3ce745 Mon Sep 17 00:00:00 2001 From: Ethen Pociask Date: Wed, 3 Jul 2024 17:44:52 -0400 Subject: [PATCH 31/38] patch CI bug --- arbitrator/jit/src/syscall.rs | 1 + 1 file changed, 1 insertion(+) diff --git a/arbitrator/jit/src/syscall.rs b/arbitrator/jit/src/syscall.rs index 4f657eeef..0746f5ebf 100644 --- a/arbitrator/jit/src/syscall.rs +++ b/arbitrator/jit/src/syscall.rs @@ -82,6 +82,7 @@ enum DynamicObject { #[derive(Clone, Debug)] pub struct PendingEvent { pub id: JsValue, + #[allow(dead_code)] pub this: JsValue, pub args: Vec, } From a1cc5d6c67b2cf8162efdca63ee8d94dcaa5cafe Mon Sep 17 00:00:00 2001 From: Ethen Pociask Date: Wed, 3 Jul 2024 18:16:02 -0400 Subject: [PATCH 32/38] update contracts submodule --- contracts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/contracts b/contracts index 24f58bbb1..7d788fdf7 160000 --- a/contracts +++ b/contracts @@ -1 +1 @@ -Subproject commit 24f58bbb172aabdedca235515af679d61aaefcb0 +Subproject commit 7d788fdf7191ddf23ee24bd7b5c3134c73c1b3de From 385781b6d507e377f8056ce4cf3fd56a07d30249 Mon Sep 17 00:00:00 2001 From: Ethen Pociask Date: Wed, 3 Jul 2024 18:46:03 -0400 Subject: [PATCH 33/38] update contracts submodule --- contracts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/contracts b/contracts index 7d788fdf7..2946c01a9 160000 --- a/contracts +++ b/contracts @@ -1 +1 @@ -Subproject commit 7d788fdf7191ddf23ee24bd7b5c3134c73c1b3de +Subproject commit 2946c01a9032be24b2436f6ab7c3e985fd705dc0 From a5ef13cff51a525a6e18af579653ef80b4ceb852 Mon Sep 17 00:00:00 2001 From: Ethen Pociask Date: Wed, 3 Jul 2024 18:56:15 -0400 Subject: [PATCH 34/38] update gen.go to dump files being read for yul binding generation --- solgen/gen.go | 1 + 1 file changed, 1 insertion(+) diff --git a/solgen/gen.go b/solgen/gen.go index 770fa0857..3664f96e1 100644 --- a/solgen/gen.go +++ b/solgen/gen.go @@ -118,6 +118,7 @@ func main() { _, file := filepath.Split(path) name := file[:len(file)-5] + log.Print("reading", path, "for contract", name) data, err := os.ReadFile(path) if err != nil { log.Fatal("could not read", path, "for contract", name, err) From 81b1755f08e4dcb8c2f271d742e62f330bf8ce77 Mon Sep 17 00:00:00 2001 From: Ethen Pociask Date: Wed, 3 Jul 2024 18:56:21 -0400 Subject: [PATCH 35/38] update gen.go to dump files being read for yul binding generation --- solgen/gen.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/solgen/gen.go b/solgen/gen.go index 3664f96e1..211a83e9b 100644 --- a/solgen/gen.go +++ b/solgen/gen.go @@ -118,7 +118,7 @@ func main() { _, file := filepath.Split(path) name := file[:len(file)-5] - log.Print("reading", path, "for contract", name) + log.Printf("Processing %s", name) data, err := os.ReadFile(path) if err != nil { log.Fatal("could not read", path, "for contract", name, err) From d609a90f93aa92cbd0858cc33963dd1a97ffa618 Mon Sep 17 00:00:00 2001 From: Ethen Pociask Date: Wed, 3 Jul 2024 19:08:14 -0400 Subject: [PATCH 36/38] only generate yul artifacts for 4844 reader --- solgen/gen.go | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/solgen/gen.go b/solgen/gen.go index 211a83e9b..9c08e167c 100644 --- a/solgen/gen.go +++ b/solgen/gen.go @@ -118,6 +118,10 @@ func main() { _, file := filepath.Split(path) name := file[:len(file)-5] + if name != "Reader4844" { + continue + } + log.Printf("Processing %s", name) data, err := os.ReadFile(path) if err != nil { From a818fc9dade47575f5b8d851d1e8091bdb7f9280 Mon Sep 17 00:00:00 2001 From: Ethen Pociask Date: Thu, 4 Jul 2024 16:11:30 -0400 Subject: [PATCH 37/38] update contracts submodule --- contracts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/contracts b/contracts index 2946c01a9..657a0885e 160000 --- a/contracts +++ b/contracts @@ -1 +1 @@ -Subproject commit 2946c01a9032be24b2436f6ab7c3e985fd705dc0 +Subproject commit 657a0885e9a171df902b60737aaf573a30b221cf From 21651dc0eb0b44f481f0bcaa40142e21f7e676e0 Mon Sep 17 00:00:00 2001 From: Ethen Pociask Date: Thu, 4 Jul 2024 16:40:14 -0400 Subject: [PATCH 38/38] update contracts submodule --- contracts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/contracts b/contracts index 657a0885e..2a561f885 160000 --- a/contracts +++ b/contracts @@ -1 +1 @@ -Subproject commit 657a0885e9a171df902b60737aaf573a30b221cf +Subproject commit 2a561f88513b1473bd333dbc88f9b11c21df35be