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 }