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 }