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

Commit 88ba647

Browse files
drwashoplacer14
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 <mikeg@ob1.io>
1 parent 96654fd commit 88ba647

File tree

22 files changed

+191
-142
lines changed

22 files changed

+191
-142
lines changed

core/images.go

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -168,8 +168,7 @@ func (n *OpenBazaarNode) FetchImage(peerID string, imageType string, size string
168168
func (n *OpenBazaarNode) GetBase64Image(url string) (base64ImageData, filename string, err error) {
169169
var client *http.Client
170170
if n.TorDialer != nil {
171-
dial := n.TorDialer.Dial
172-
tbTransport := &http.Transport{Dial: dial}
171+
tbTransport := &http.Transport{Dial: n.TorDialer.Dial}
173172
client = &http.Client{Transport: tbTransport, Timeout: time.Second * 30}
174173
} else {
175174
client = &http.Client{Timeout: time.Second * 30}

core/order.go

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -278,7 +278,7 @@ func prepareModeratedOrderContract(data *repo.PurchaseData, n *OpenBazaarNode, c
278278
fee := wal.GetFeePerByte(wallet.NORMAL)
279279
contract.BuyerOrder.BigRefundFee = fee.String()
280280

281-
err = wal.AddWatchedAddress(addr)
281+
err = wal.AddWatchedAddresses(addr)
282282
if err != nil {
283283
return nil, err
284284
}
@@ -315,7 +315,7 @@ func processOnlineDirectOrder(resp *pb.Message, n *OpenBazaarNode, wal wallet.Wa
315315
if err != nil {
316316
return "", "", *big.NewInt(0), false, err
317317
}
318-
err = wal.AddWatchedAddress(addr)
318+
err = wal.AddWatchedAddresses(addr)
319319
if err != nil {
320320
return "", "", *big.NewInt(0), false, err
321321
}
@@ -374,7 +374,7 @@ func processOfflineDirectOrder(n *OpenBazaarNode, wal wallet.Wallet, contract *p
374374
payment.RedeemScript = hex.EncodeToString(redeemScript)
375375
payment.Chaincode = hex.EncodeToString(chaincode)
376376

377-
err = wal.AddWatchedAddress(addr)
377+
err = wal.AddWatchedAddresses(addr)
378378
if err != nil {
379379
return "", "", *big.NewInt(0), err
380380
}

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: 8 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -414,17 +414,9 @@ func (service *OpenBazaarService) handleOrder(peer peer.ID, pmes *pb.Message, op
414414
if err != nil {
415415
return errorResponse(err.Error()), err
416416
}
417-
err = wal.AddWatchedAddress(addr)
418-
if err != nil {
419-
log.Error(err)
420-
}
421-
log.Debugf("added address to wallet to watch: %s", addr)
422-
log.Debugf("storing sales order %s in database", orderId)
423-
err = service.node.Datastore.Sales().Put(orderId, *contract, pb.OrderState_AWAITING_PAYMENT, false)
424-
if err != nil {
425-
log.Error(err)
426-
}
427-
log.Debugf("successfully processed direct ORDER message from %s", peer.Pretty())
417+
wal.AddWatchedAddresses(addr)
418+
service.node.Datastore.Sales().Put(orderId, *contract, pb.OrderState_AWAITING_PAYMENT, false)
419+
log.Debugf("Received direct ORDER message from %s", peer.Pretty())
428420
return nil, nil
429421
} else if order.Payment.Method == pb.Order_Payment_MODERATED && !offline {
430422
log.Debugf("processing moderated online order from %s", peer.Pretty())
@@ -451,7 +443,8 @@ func (service *OpenBazaarService) handleOrder(peer peer.ID, pmes *pb.Message, op
451443
if err != nil {
452444
return errorResponse(err.Error()), err
453445
}
454-
err = wal.AddWatchedAddress(addr)
446+
wal.AddWatchedAddresses(addr)
447+
contract, err = service.node.NewOrderConfirmation(contract, false, false)
455448
if err != nil {
456449
log.Error(err)
457450
}
@@ -492,16 +485,9 @@ func (service *OpenBazaarService) handleOrder(peer peer.ID, pmes *pb.Message, op
492485
log.Error(err)
493486
return errorResponse(err.Error()), err
494487
}
495-
err = wal.AddWatchedAddress(addr)
496-
if err != nil {
497-
log.Error(err)
498-
}
499-
log.Debugf("storing sales order %s in database", orderId)
500-
err = service.node.Datastore.Sales().Put(orderId, *contract, pb.OrderState_AWAITING_PAYMENT, false)
501-
if err != nil {
502-
log.Error(err)
503-
}
504-
log.Debugf("successfully processed offline moderated ORDER message from %s", peer.Pretty())
488+
wal.AddWatchedAddresses(addr)
489+
log.Debugf("Received offline moderated ORDER message from %s", peer.Pretty())
490+
service.node.Datastore.Sales().Put(orderId, *contract, pb.OrderState_AWAITING_PAYMENT, false)
505491
return nil, nil
506492
}
507493
log.Errorf("Unrecognized payment type on order (%s)", contract.VendorOrderConfirmation.OrderID)

repo/db/watched_scripts.go

Lines changed: 31 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,37 @@ func NewWatchedScriptStore(db *sql.DB, lock *sync.Mutex, coinType wallet.CoinTyp
1919
return &WatchedScriptsDB{modelStore{db, lock}, coinType}
2020
}
2121

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+
2253
func (w *WatchedScriptsDB) Put(scriptPubKey []byte) error {
2354
w.lock.Lock()
2455
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: 14 additions & 12 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: 15 additions & 13 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

0 commit comments

Comments
 (0)