# Coding Task: Transaction mechanism In Livepeer we execute Ethereum transactions on the Ethereum network. This process follows two rules: 1. Send transactions one by one, never sent a transaction if the previous one has not completed (`nonce` field is the transaction's sequence number). 2. Do not send a transaction if the current Ethereum gas price is higher than `maxGasPrice` of your transaction. Implement a mechanism to **queue, send, and retry** sending transactions. ```golang type Ethereum interface { GetTransactionCount() (int, error) SuggestGasPrice() (int, error) SendTransaction(trans *Transaction) error } type Transaction struct { nonce int maxGasPrice int // Transaction data, not related to this task data []byte } func sendTransaction(trans *Transaction, eth Ethereum) error { // Naive implementation that sends each transaction, no matter of nonce or maxGasPrice return eth.SendTransaction(trans) } ```