github.com/ethereum-optimism/optimism@v1.7.2/op-node/rollup/derive/deposits.go (about)

     1  package derive
     2  
     3  import (
     4  	"fmt"
     5  
     6  	"github.com/hashicorp/go-multierror"
     7  
     8  	"github.com/ethereum/go-ethereum/common"
     9  	"github.com/ethereum/go-ethereum/common/hexutil"
    10  	"github.com/ethereum/go-ethereum/core/types"
    11  )
    12  
    13  // UserDeposits transforms the L2 block-height and L1 receipts into the transaction inputs for a full L2 block
    14  func UserDeposits(receipts []*types.Receipt, depositContractAddr common.Address) ([]*types.DepositTx, error) {
    15  	var out []*types.DepositTx
    16  	var result error
    17  	for i, rec := range receipts {
    18  		if rec.Status != types.ReceiptStatusSuccessful {
    19  			continue
    20  		}
    21  		for j, log := range rec.Logs {
    22  			if log.Address == depositContractAddr && len(log.Topics) > 0 && log.Topics[0] == DepositEventABIHash {
    23  				dep, err := UnmarshalDepositLogEvent(log)
    24  				if err != nil {
    25  					result = multierror.Append(result, fmt.Errorf("malformatted L1 deposit log in receipt %d, log %d: %w", i, j, err))
    26  				} else {
    27  					out = append(out, dep)
    28  				}
    29  			}
    30  		}
    31  	}
    32  	return out, result
    33  }
    34  
    35  func DeriveDeposits(receipts []*types.Receipt, depositContractAddr common.Address) ([]hexutil.Bytes, error) {
    36  	var result error
    37  	userDeposits, err := UserDeposits(receipts, depositContractAddr)
    38  	if err != nil {
    39  		result = multierror.Append(result, err)
    40  	}
    41  	encodedTxs := make([]hexutil.Bytes, 0, len(userDeposits))
    42  	for i, tx := range userDeposits {
    43  		opaqueTx, err := types.NewTx(tx).MarshalBinary()
    44  		if err != nil {
    45  			result = multierror.Append(result, fmt.Errorf("failed to encode user tx %d", i))
    46  		} else {
    47  			encodedTxs = append(encodedTxs, opaqueTx)
    48  		}
    49  	}
    50  	return encodedTxs, result
    51  }