aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--ethclient/ethclient.go13
-rw-r--r--ethclient/ethclient_test.go18
2 files changed, 25 insertions, 6 deletions
diff --git a/ethclient/ethclient.go b/ethclient/ethclient.go
index f3163e19b..aedf2814a 100644
--- a/ethclient/ethclient.go
+++ b/ethclient/ethclient.go
@@ -241,12 +241,13 @@ func (ec *Client) TransactionCount(ctx context.Context, blockHash common.Hash) (
func (ec *Client) TransactionInBlock(ctx context.Context, blockHash common.Hash, index uint) (*types.Transaction, error) {
var json *rpcTransaction
err := ec.c.CallContext(ctx, &json, "eth_getTransactionByBlockHashAndIndex", blockHash, hexutil.Uint64(index))
- if err == nil {
- if json == nil {
- return nil, ethereum.NotFound
- } else if _, r, _ := json.tx.RawSignatureValues(); r == nil {
- return nil, fmt.Errorf("server returned transaction without signature")
- }
+ if err != nil {
+ return nil, err
+ }
+ if json == nil {
+ return nil, ethereum.NotFound
+ } else if _, r, _ := json.tx.RawSignatureValues(); r == nil {
+ return nil, fmt.Errorf("server returned transaction without signature")
}
if json.From != nil && json.BlockHash != nil {
setSenderFromServer(json.tx, *json.From, *json.BlockHash)
diff --git a/ethclient/ethclient_test.go b/ethclient/ethclient_test.go
index 74711bd39..2e464cd42 100644
--- a/ethclient/ethclient_test.go
+++ b/ethclient/ethclient_test.go
@@ -301,3 +301,21 @@ func TestBalanceAt(t *testing.T) {
})
}
}
+
+func TestTransactionInBlockInterrupted(t *testing.T) {
+ backend, _ := newTestBackend(t)
+ client, _ := backend.Attach()
+ defer backend.Stop()
+ defer client.Close()
+
+ ec := NewClient(client)
+ ctx, cancel := context.WithCancel(context.Background())
+ cancel()
+ tx, err := ec.TransactionInBlock(ctx, common.Hash{1}, 1)
+ if tx != nil {
+ t.Fatal("transaction should be nil")
+ }
+ if err == nil {
+ t.Fatal("error should not be nil")
+ }
+}