@@ -91,9 +91,8 @@ func NewNode(config *Config) (*RPCNode, error) {
91
91
92
92
func ParseError (err error ) error {
93
93
parts := strings .Split (err .Error (), ":" )
94
-
95
- if len (parts ) != 2 {
96
- return err
94
+ if len (parts ) == 0 {
95
+ return err // return original error
97
96
}
98
97
99
98
value , intErr := strconv .Atoi (strings .TrimSpace (parts [0 ]))
@@ -103,13 +102,14 @@ func ParseError(err error) error {
103
102
104
103
switch value {
105
104
case - 5 :
106
- return ErrNotSeen
105
+ return errors . Wrap ( ErrNotSeen , err . Error ())
107
106
case - 25 :
108
- return ErrMissingInputs
107
+ return errors . Wrap ( ErrMissingInputs , err . Error ())
109
108
case - 26 : // txn-mempool-conflict or too-long-mempool-chain
110
- return ErrTransactionConflict
109
+ // -26: 258: txn-mempool-conflict
110
+ return errors .Wrap (ErrTransactionConflict , err .Error ())
111
111
case - 27 : // Transaction already in the mempool
112
- return ErrTransactionInMempool
112
+ return errors . Wrap ( ErrTransactionInMempool , err . Error ())
113
113
}
114
114
115
115
return err
@@ -130,15 +130,13 @@ func ConvertError(err error) error {
130
130
131
131
switch jsonErr .ErrorCode {
132
132
case - 5 :
133
- return ErrNotSeen
133
+ return errors . Wrap ( ErrNotSeen , err . Error ())
134
134
case - 25 :
135
- return ErrMissingInputs
135
+ return errors . Wrap ( ErrMissingInputs , err . Error ())
136
136
case - 26 : // txn-mempool-conflict or too-long-mempool-chain
137
- return ErrTransactionConflict
137
+ return errors . Wrap ( ErrTransactionConflict , err . Error ())
138
138
case - 27 : // Transaction already in the mempool
139
- return ErrTransactionInMempool
140
- default :
141
- return err
139
+ return errors .Wrap (ErrTransactionInMempool , err .Error ())
142
140
}
143
141
144
142
return err
@@ -153,22 +151,22 @@ func (r *RPCNode) SendTx(ctx context.Context, tx *wire.MsgTx) error {
153
151
}
154
152
155
153
// GetTX requests a tx from the remote server.
156
- func (r * RPCNode ) GetTX (ctx context.Context , id * bitcoin.Hash32 ) (* wire.MsgTx , error ) {
154
+ func (r * RPCNode ) GetTX (ctx context.Context , txid * bitcoin.Hash32 ) (* wire.MsgTx , error ) {
157
155
ctx = logger .ContextWithLogSubSystem (ctx , SubSystem )
158
156
defer logger .Elapsed (ctx , time .Now (), "GetTX" )
159
157
160
158
r .lock .Lock ()
161
- msg , ok := r .txCache [* id ]
159
+ msg , ok := r .txCache [* txid ]
162
160
if ok {
163
- logger .Verbose (ctx , "Using tx from RPC cache : %s\n " , id .String ())
164
- delete (r .txCache , * id )
161
+ logger .Verbose (ctx , "Using tx from RPC cache : %s\n " , txid .String ())
162
+ delete (r .txCache , * txid )
165
163
r .lock .Unlock ()
166
164
return msg , nil
167
165
}
168
166
r .lock .Unlock ()
169
167
170
- logger .Verbose (ctx , "Requesting tx from RPC : %s\n " , id .String ())
171
- ch , _ := chainhash .NewHash (id [:])
168
+ logger .Verbose (ctx , "Requesting tx from RPC : %s\n " , txid .String ())
169
+ ch , _ := chainhash .NewHash (txid [:])
172
170
var err error
173
171
var raw * btcjson.TxRawResult
174
172
for i := 0 ; i <= r .Config .MaxRetries ; i ++ {
@@ -177,18 +175,18 @@ func (r *RPCNode) GetTX(ctx context.Context, id *bitcoin.Hash32) (*wire.MsgTx, e
177
175
break
178
176
}
179
177
180
- err = errors .Wrap (ConvertError (err ), id .String ())
178
+ err = errors .Wrap (ConvertError (err ), txid .String ())
181
179
if errors .Cause (err ) == ErrNotSeen {
182
- logger .Error (ctx , "RPCTxNotSeenYet GetTxs receive tx %s : %v" , id . String () , err )
180
+ logger .Error (ctx , "RPCTxNotSeenYet GetTxs receive tx %s : %v" , txid , err )
183
181
} else {
184
- logger .Error (ctx , "RPCCallFailed GetTx %s : %v" , id . String () , err )
182
+ logger .Error (ctx , "RPCCallFailed GetTx %s : %v" , txid , err )
185
183
}
186
184
time .Sleep (time .Duration (r .Config .RetryDelay ) * time .Millisecond )
187
185
}
188
186
189
187
if err != nil {
190
- logger .Error (ctx , "RPCCallAborted GetTx %s : %v" , id . String () , err )
191
- return nil , errors . Wrap ( err , fmt . Sprintf ( "Failed to GetTx %v" , id . String ()))
188
+ logger .Error (ctx , "RPCCallAborted GetTx %s : %v" , txid , err )
189
+ return nil , err
192
190
}
193
191
194
192
b , err := hex .DecodeString (raw .Hex )
@@ -234,7 +232,7 @@ func (r *RPCNode) GetTXs(ctx context.Context, txids []*bitcoin.Hash32) ([]*wire.
234
232
235
233
for i , txid := range txids {
236
234
if results [i ] == nil {
237
- logger .Verbose (ctx , "Requesting tx from RPC : %s\n " , txid . String () )
235
+ logger .Verbose (ctx , "Requesting tx from RPC : %s\n " , txid )
238
236
ch , _ := chainhash .NewHash (txid [:])
239
237
request := r .client .GetRawTransactionVerboseAsync (ch )
240
238
requests [i ] = & request
@@ -262,7 +260,7 @@ func (r *RPCNode) GetTXs(ctx context.Context, txids []*bitcoin.Hash32) ([]*wire.
262
260
b , err := hex .DecodeString (rawTx .Hex )
263
261
if err != nil {
264
262
lastError = err
265
- logger .Error (ctx , "RPCCallFailed GetTxs decode tx hex %s : %v" , txids [i ]. String () , err )
263
+ logger .Error (ctx , "RPCCallFailed GetTxs decode tx hex %s : %v" , txids [i ], err )
266
264
continue
267
265
}
268
266
@@ -271,7 +269,7 @@ func (r *RPCNode) GetTXs(ctx context.Context, txids []*bitcoin.Hash32) ([]*wire.
271
269
272
270
if err := tx .Deserialize (buf ); err != nil {
273
271
lastError = err
274
- logger .Error (ctx , "RPCCallFailed GetTxs deserialize tx %s : %v" , txids [i ]. String () , err )
272
+ logger .Error (ctx , "RPCCallFailed GetTxs deserialize tx %s : %v" , txids [i ], err )
275
273
continue
276
274
}
277
275
@@ -301,7 +299,7 @@ func (r *RPCNode) GetOutputs(ctx context.Context, outpoints []wire.OutPoint) ([]
301
299
for i , outpoint := range outpoints {
302
300
tx , ok := r .txCache [outpoint .Hash ]
303
301
if ok && len (tx .TxOut ) > int (outpoint .Index ) {
304
- logger .Verbose (ctx , "Using tx from RPC cache : %s\n " , outpoint .Hash . String () )
302
+ logger .Verbose (ctx , "Using tx from RPC cache : %s\n " , outpoint .Hash )
305
303
delete (r .txCache , outpoint .Hash )
306
304
results [i ] = bitcoin.UTXO {
307
305
Hash : outpoint .Hash ,
@@ -324,7 +322,7 @@ func (r *RPCNode) GetOutputs(ctx context.Context, outpoints []wire.OutPoint) ([]
324
322
325
323
for i , outpoint := range outpoints {
326
324
if ! filled [i ] {
327
- logger .Verbose (ctx , "Requesting tx from RPC : %s\n " , outpoint .Hash . String () )
325
+ logger .Verbose (ctx , "Requesting tx from RPC : %s\n " , outpoint .Hash )
328
326
ch , _ := chainhash .NewHash (outpoint .Hash [:])
329
327
request := r .client .GetRawTransactionVerboseAsync (ch )
330
328
requests [i ] = & request
@@ -352,7 +350,7 @@ func (r *RPCNode) GetOutputs(ctx context.Context, outpoints []wire.OutPoint) ([]
352
350
b , err := hex .DecodeString (rawTx .Hex )
353
351
if err != nil {
354
352
lastError = err
355
- logger .Error (ctx , "RPCCallFailed GetRawTx decode tx hex %s : %v " ,
353
+ logger .Error (ctx , "RPCCallFailed GetRawTx decode tx hex %s : %s " ,
356
354
outpoints [i ].Hash .String (), err )
357
355
continue
358
356
}
@@ -362,16 +360,16 @@ func (r *RPCNode) GetOutputs(ctx context.Context, outpoints []wire.OutPoint) ([]
362
360
363
361
if err := tx .Deserialize (buf ); err != nil {
364
362
lastError = err
365
- logger .Error (ctx , "RPCCallFailed GetRawTx deserialize tx %s : %v " ,
366
- outpoints [i ].Hash . String () , err )
363
+ logger .Error (ctx , "RPCCallFailed GetRawTx deserialize tx %s : %s " ,
364
+ outpoints [i ].Hash , err )
367
365
continue
368
366
}
369
367
370
368
outpoint := outpoints [i ]
371
369
372
370
if int (outpoint .Index ) >= len (tx .TxOut ) {
373
371
return results , fmt .Errorf ("Invalid output index for txid %d/%d : %s" ,
374
- outpoint .Index , len (tx .TxOut ), outpoint .Hash . String () )
372
+ outpoint .Index , len (tx .TxOut ), outpoint .Hash )
375
373
}
376
374
377
375
results [i ] = bitcoin.UTXO {
@@ -536,8 +534,7 @@ func (r *RPCNode) SendRawTransaction(ctx context.Context, tx *wire.MsgTx) error
536
534
537
535
switch errors .Cause (err ) {
538
536
case ErrMissingInputs , ErrTransactionConflict :
539
- logger .Error (ctx , "RPCCallFailed SendRawTransaction : %s" ,
540
- err )
537
+ logger .Error (ctx , "RPCCallFailed SendRawTransaction : %s" , err )
541
538
return errors .Wrap (err , tx .TxHash ().String ())
542
539
543
540
case ErrTransactionInMempool :
0 commit comments