Skip to content
This repository was archived by the owner on Mar 28, 2023. It is now read-only.

Commit edb5cc6

Browse files
hoffmabcplacer14
andcommitted
(#1919) Migrate to AddWatchedAddresses (#1920)
* Migrate to AddWatchedAddresses * Use variadic parameters * Vendored fixes * Re-watch addresses on socket restart * Convert Mutex to RWMutex * Protect with listenLock * Update to use bulk call * Eliminate redundant conversion * Move statements into the socketclient section * Remove duplicate lock * Refactored to be closer to it’s usage * DB Transaction for Putting PubKeys * Fix linter errors * Migrate to PutAll for watched scripts * Fix missing initialization of err * Interface check for implemented wallets * Handle errors from transaction; Report Rollback failures * Append to BlockBookClient.listenAddrs instead of replace * Fix race bug and remove redundant replay handling in c/b/client.go Co-authored-by: Mike Greenberg <[email protected]>
1 parent 85332fc commit edb5cc6

File tree

22 files changed

+191
-99
lines changed

22 files changed

+191
-99
lines changed

core/images.go

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -165,8 +165,7 @@ func (n *OpenBazaarNode) FetchImage(peerID string, imageType string, size string
165165
func (n *OpenBazaarNode) GetBase64Image(url string) (base64ImageData, filename string, err error) {
166166
var client *http.Client
167167
if n.TorDialer != nil {
168-
dial := n.TorDialer.Dial
169-
tbTransport := &http.Transport{Dial: dial}
168+
tbTransport := &http.Transport{Dial: n.TorDialer.Dial}
170169
client = &http.Client{Transport: tbTransport, Timeout: time.Second * 30}
171170
} else {
172171
client = &http.Client{Timeout: time.Second * 30}

core/order.go

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -271,7 +271,7 @@ func prepareModeratedOrderContract(data *PurchaseData, n *OpenBazaarNode, contra
271271
payment.Chaincode = hex.EncodeToString(chaincode)
272272
contract.BuyerOrder.RefundFee = wal.GetFeePerByte(wallet.NORMAL)
273273

274-
err = wal.AddWatchedAddress(addr)
274+
err = wal.AddWatchedAddresses(addr)
275275
if err != nil {
276276
return nil, err
277277
}
@@ -308,7 +308,7 @@ func processOnlineDirectOrder(resp *pb.Message, n *OpenBazaarNode, wal wallet.Wa
308308
if err != nil {
309309
return "", "", 0, false, err
310310
}
311-
err = wal.AddWatchedAddress(addr)
311+
err = wal.AddWatchedAddresses(addr)
312312
if err != nil {
313313
return "", "", 0, false, err
314314
}
@@ -356,7 +356,7 @@ func processOfflineDirectOrder(n *OpenBazaarNode, wal wallet.Wallet, contract *p
356356
payment.RedeemScript = hex.EncodeToString(redeemScript)
357357
payment.Chaincode = hex.EncodeToString(chaincode)
358358

359-
err = wal.AddWatchedAddress(addr)
359+
err = wal.AddWatchedAddresses(addr)
360360
if err != nil {
361361
return "", "", 0, false, err
362362
}

net/retriever/retriever.go

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -69,8 +69,7 @@ type offlineMessage struct {
6969
func NewMessageRetriever(cfg MRConfig) *MessageRetriever {
7070
var client *http.Client
7171
if cfg.Dialer != nil {
72-
dial := cfg.Dialer.Dial
73-
tbTransport := &http.Transport{Dial: dial}
72+
tbTransport := &http.Transport{Dial: cfg.Dialer.Dial}
7473
client = &http.Client{Transport: tbTransport, Timeout: time.Second * 30}
7574
} else {
7675
client = &http.Client{Timeout: time.Second * 30}

net/service/handlers.go

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -371,7 +371,7 @@ func (service *OpenBazaarService) handleOrder(peer peer.ID, pmes *pb.Message, op
371371
if err != nil {
372372
return errorResponse(err.Error()), err
373373
}
374-
wal.AddWatchedAddress(addr)
374+
wal.AddWatchedAddresses(addr)
375375
service.node.Datastore.Sales().Put(orderId, *contract, pb.OrderState_AWAITING_PAYMENT, false)
376376
log.Debugf("Received direct ORDER message from %s", peer.Pretty())
377377
return nil, nil
@@ -395,7 +395,7 @@ func (service *OpenBazaarService) handleOrder(peer peer.ID, pmes *pb.Message, op
395395
if err != nil {
396396
return errorResponse(err.Error()), err
397397
}
398-
wal.AddWatchedAddress(addr)
398+
wal.AddWatchedAddresses(addr)
399399
contract, err = service.node.NewOrderConfirmation(contract, false, false)
400400
if err != nil {
401401
return errorResponse("Error building order confirmation"), errors.New("error building order confirmation")
@@ -427,7 +427,7 @@ func (service *OpenBazaarService) handleOrder(peer peer.ID, pmes *pb.Message, op
427427
log.Error(err)
428428
return errorResponse(err.Error()), err
429429
}
430-
wal.AddWatchedAddress(addr)
430+
wal.AddWatchedAddresses(addr)
431431
log.Debugf("Received offline moderated ORDER message from %s", peer.Pretty())
432432
service.node.Datastore.Sales().Put(orderId, *contract, pb.OrderState_AWAITING_PAYMENT, false)
433433
return nil, nil

repo/db/watched_scripts.go

Lines changed: 32 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@ package db
33
import (
44
"database/sql"
55
"encoding/hex"
6+
"fmt"
67
"sync"
78

89
"github.com/OpenBazaar/openbazaar-go/repo"
@@ -18,6 +19,37 @@ func NewWatchedScriptStore(db *sql.DB, lock *sync.Mutex, coinType wallet.CoinTyp
1819
return &WatchedScriptsDB{modelStore{db, lock}, coinType}
1920
}
2021

22+
func (w *WatchedScriptsDB) PutAll(scriptPubKeys [][]byte) error {
23+
w.lock.Lock()
24+
defer w.lock.Unlock()
25+
26+
tx, err := w.db.Begin()
27+
if err != nil {
28+
return err
29+
}
30+
31+
stmt, err := tx.Prepare("insert or replace into watchedscripts(coin, scriptPubKey) values(?,?)")
32+
if err != nil {
33+
if rErr := tx.Rollback(); rErr != nil {
34+
return fmt.Errorf("put AND rollback failed: %s (rollback error: %s)", err.Error(), rErr.Error())
35+
}
36+
return err
37+
}
38+
defer stmt.Close()
39+
40+
for _, scriptPubKey := range scriptPubKeys {
41+
_, err = stmt.Exec(w.coinType.CurrencyCode(), hex.EncodeToString(scriptPubKey))
42+
if err != nil {
43+
if rErr := tx.Rollback(); rErr != nil {
44+
return fmt.Errorf("put AND rollback failed: %s (rollback error: %s)", err.Error(), rErr.Error())
45+
}
46+
return err
47+
}
48+
}
49+
50+
return tx.Commit()
51+
}
52+
2153
func (w *WatchedScriptsDB) Put(scriptPubKey []byte) error {
2254
w.lock.Lock()
2355
defer w.lock.Unlock()

vendor/github.com/OpenBazaar/bitcoind-wallet/wallet.go

Lines changed: 0 additions & 10 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

vendor/github.com/OpenBazaar/go-ethwallet/wallet/erc20_wallet.go

Lines changed: 0 additions & 5 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

vendor/github.com/OpenBazaar/go-ethwallet/wallet/wallet.go

Lines changed: 4 additions & 2 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

vendor/github.com/OpenBazaar/multiwallet/bitcoin/wallet.go

Lines changed: 15 additions & 6 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

vendor/github.com/OpenBazaar/multiwallet/bitcoincash/wallet.go

Lines changed: 16 additions & 7 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

0 commit comments

Comments
 (0)