github.com/status-im/status-go@v1.1.0/services/wallet/transfer/transaction_manager_internal.go (about)

     1  package transfer
     2  
     3  import (
     4  	"math/big"
     5  
     6  	"github.com/ethereum/go-ethereum/common"
     7  	ethTypes "github.com/ethereum/go-ethereum/core/types"
     8  	"github.com/status-im/status-go/services/wallet/router/pathprocessor"
     9  )
    10  
    11  func (tm *TransactionManager) buildTransactions(pathProcessors map[string]pathprocessor.PathProcessor) ([]string, error) {
    12  	tm.transactionsForKeycardSigning = make(map[common.Hash]*TransactionDescription)
    13  	var hashes []string
    14  	usedNonces := make(map[uint64]int64)
    15  	for _, bridgeTx := range tm.multipathTransactionsData {
    16  
    17  		lastUsedNonce := int64(-1)
    18  		if nonce, ok := usedNonces[bridgeTx.ChainID]; ok {
    19  			lastUsedNonce = nonce
    20  		}
    21  
    22  		builtTx, usedNonce, err := pathProcessors[bridgeTx.Name].BuildTransaction(bridgeTx, lastUsedNonce)
    23  		if err != nil {
    24  			return hashes, err
    25  		}
    26  
    27  		signer := ethTypes.NewLondonSigner(big.NewInt(int64(bridgeTx.ChainID)))
    28  		txHash := signer.Hash(builtTx)
    29  
    30  		tm.transactionsForKeycardSigning[txHash] = &TransactionDescription{
    31  			from:    common.Address(bridgeTx.From()),
    32  			chainID: bridgeTx.ChainID,
    33  			builtTx: builtTx,
    34  		}
    35  
    36  		usedNonces[bridgeTx.ChainID] = int64(usedNonce)
    37  
    38  		hashes = append(hashes, txHash.String())
    39  	}
    40  
    41  	return hashes, nil
    42  }