|
|
|
@ -153,6 +153,7 @@ func (tx *Transaction) DecodeRLP(s *rlp.Stream) error { |
|
|
|
|
return err |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
// MarshalJSON encodes the web3 RPC transaction format.
|
|
|
|
|
func (tx *Transaction) MarshalJSON() ([]byte, error) { |
|
|
|
|
hash := tx.Hash() |
|
|
|
|
data := tx.data |
|
|
|
@ -168,8 +169,8 @@ func (tx *Transaction) UnmarshalJSON(input []byte) error { |
|
|
|
|
} |
|
|
|
|
var V byte |
|
|
|
|
if isProtectedV(dec.V) { |
|
|
|
|
chainId := deriveChainId(dec.V).Uint64() |
|
|
|
|
V = byte(dec.V.Uint64() - 35 - 2*chainId) |
|
|
|
|
chainID := deriveChainId(dec.V).Uint64() |
|
|
|
|
V = byte(dec.V.Uint64() - 35 - 2*chainID) |
|
|
|
|
} else { |
|
|
|
|
V = byte(dec.V.Uint64() - 27) |
|
|
|
|
} |
|
|
|
@ -192,10 +193,9 @@ func (tx *Transaction) CheckNonce() bool { return true } |
|
|
|
|
func (tx *Transaction) To() *common.Address { |
|
|
|
|
if tx.data.Recipient == nil { |
|
|
|
|
return nil |
|
|
|
|
} else { |
|
|
|
|
to := *tx.data.Recipient |
|
|
|
|
return &to |
|
|
|
|
} |
|
|
|
|
to := *tx.data.Recipient |
|
|
|
|
return &to |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
// Hash hashes the RLP encoding of tx.
|
|
|
|
@ -315,22 +315,22 @@ func (tx *Transaction) String() string { |
|
|
|
|
) |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
// Transaction slice type for basic sorting.
|
|
|
|
|
// Transactions is a Transaction slice type for basic sorting.
|
|
|
|
|
type Transactions []*Transaction |
|
|
|
|
|
|
|
|
|
// Len returns the length of s
|
|
|
|
|
// Len returns the length of s.
|
|
|
|
|
func (s Transactions) Len() int { return len(s) } |
|
|
|
|
|
|
|
|
|
// Swap swaps the i'th and the j'th element in s
|
|
|
|
|
// Swap swaps the i'th and the j'th element in s.
|
|
|
|
|
func (s Transactions) Swap(i, j int) { s[i], s[j] = s[j], s[i] } |
|
|
|
|
|
|
|
|
|
// GetRlp implements Rlpable and returns the i'th element of s in rlp
|
|
|
|
|
// GetRlp implements Rlpable and returns the i'th element of s in rlp.
|
|
|
|
|
func (s Transactions) GetRlp(i int) []byte { |
|
|
|
|
enc, _ := rlp.EncodeToBytes(s[i]) |
|
|
|
|
return enc |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
// Returns a new set t which is the difference between a to b
|
|
|
|
|
// TxDifference returns a new set t which is the difference between a to b.
|
|
|
|
|
func TxDifference(a, b Transactions) (keep Transactions) { |
|
|
|
|
keep = make(Transactions, 0, len(a)) |
|
|
|
|
|
|
|
|
@ -378,7 +378,7 @@ func (s *TxByPrice) Pop() interface{} { |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
// TransactionsByPriceAndNonce represents a set of transactions that can return
|
|
|
|
|
// transactions in a profit-maximising sorted order, while supporting removing
|
|
|
|
|
// transactions in a profit-maximizing sorted order, while supporting removing
|
|
|
|
|
// entire batches of transactions for non-executable accounts.
|
|
|
|
|
type TransactionsByPriceAndNonce struct { |
|
|
|
|
txs map[common.Address]Transactions // Per account nonce-sorted list of transactions
|
|
|
|
|