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

Commit 1827535

Browse files
committed
Handle legacy contracts
1 parent 86ec0be commit 1827535

File tree

3 files changed

+47
-29
lines changed

3 files changed

+47
-29
lines changed

api/jsonapi.go

Lines changed: 19 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -1621,14 +1621,18 @@ func (i *jsonAPIHandler) POSTOrderConfirmation(w http.ResponseWriter, r *http.Re
16211621
ErrorResponse(w, http.StatusBadRequest, err.Error())
16221622
return
16231623
}
1624+
1625+
order, _ := i.node.GetOrder(conf.OrderID)
1626+
v5contract := order.Contract
1627+
16241628
contract, state, funded, records, _, _, err := i.node.Datastore.Sales().GetByOrderId(conf.OrderID)
16251629
if err != nil {
16261630
ErrorResponse(w, http.StatusNotFound, err.Error())
16271631
return
16281632
}
16291633

16301634
// TODO: Remove once broken contracts are migrated
1631-
lookupCoin := contract.BuyerOrder.Payment.AmountCurrency.Code
1635+
lookupCoin := v5contract.BuyerOrder.Payment.AmountCurrency.Code
16321636
_, err = i.node.LookupCurrency(lookupCoin)
16331637
if err != nil {
16341638
log.Warningf("invalid BuyerOrder.Payment.Coin (%s) on order (%s)", lookupCoin, conf.OrderID)
@@ -1776,7 +1780,7 @@ func (i *jsonAPIHandler) POSTRefund(w http.ResponseWriter, r *http.Request) {
17761780
ErrorResponse(w, http.StatusBadRequest, err.Error())
17771781
return
17781782
}
1779-
contract, state, _, records, _, _, err := i.node.Datastore.Sales().GetByOrderId(can.OrderID)
1783+
_, state, _, records, _, _, err := i.node.Datastore.Sales().GetByOrderId(can.OrderID)
17801784
if err != nil {
17811785
ErrorResponse(w, http.StatusNotFound, "order not found")
17821786
return
@@ -1787,14 +1791,17 @@ func (i *jsonAPIHandler) POSTRefund(w http.ResponseWriter, r *http.Request) {
17871791
}
17881792

17891793
// TODO: Remove once broken contracts are migrated
1790-
lookupCoin := contract.BuyerOrder.Payment.AmountCurrency.Code
1794+
order, _ := i.node.GetOrder(can.OrderID)
1795+
v5contract := order.Contract
1796+
1797+
lookupCoin := v5contract.BuyerOrder.Payment.AmountCurrency.Code
17911798
_, err = i.node.LookupCurrency(lookupCoin)
17921799
if err != nil {
17931800
log.Warningf("invalid BuyerOrder.Payment.Coin (%s) on order (%s)", lookupCoin, can.OrderID)
17941801
//contract.BuyerOrder.Payment.Coin = paymentCoin.String()
17951802
}
17961803

1797-
err = i.node.RefundOrder(contract, records)
1804+
err = i.node.RefundOrder(v5contract, records)
17981805
if err != nil {
17991806
ErrorResponse(w, http.StatusInternalServerError, err.Error())
18001807
return
@@ -1980,14 +1987,17 @@ func (i *jsonAPIHandler) POSTOrderFulfill(w http.ResponseWriter, r *http.Request
19801987
ErrorResponse(w, http.StatusBadRequest, err.Error())
19811988
return
19821989
}
1983-
contract, state, _, records, _, _, err := i.node.Datastore.Sales().GetByOrderId(fulfill.OrderId)
1990+
_, state, _, records, _, _, err := i.node.Datastore.Sales().GetByOrderId(fulfill.OrderId)
19841991
if err != nil {
19851992
ErrorResponse(w, http.StatusNotFound, "order not found")
19861993
return
19871994
}
19881995

19891996
// TODO: Remove once broken contracts are migrated
1990-
lookupCoin := contract.BuyerOrder.Payment.AmountCurrency.Code
1997+
order, _ := i.node.GetOrder(fulfill.OrderId)
1998+
v5contract := order.Contract
1999+
2000+
lookupCoin := v5contract.BuyerOrder.Payment.AmountCurrency.Code
19912001
_, err = i.node.LookupCurrency(lookupCoin)
19922002
if err != nil {
19932003
log.Warningf("invalid BuyerOrder.Payment.Coin (%s) on order (%s)", lookupCoin, fulfill.OrderId)
@@ -1998,7 +2008,7 @@ func (i *jsonAPIHandler) POSTOrderFulfill(w http.ResponseWriter, r *http.Request
19982008
ErrorResponse(w, http.StatusBadRequest, "order must be in state AWAITING_FULFILLMENT or PARTIALLY_FULFILLED to fulfill")
19992009
return
20002010
}
2001-
err = i.node.FulfillOrder(&fulfill, contract, records)
2011+
err = i.node.FulfillOrder(&fulfill, v5contract, records)
20022012
if err != nil {
20032013
ErrorResponse(w, http.StatusInternalServerError, err.Error())
20042014
return
@@ -2326,7 +2336,8 @@ func (i *jsonAPIHandler) POSTReleaseEscrow(w http.ResponseWriter, r *http.Reques
23262336
}
23272337

23282338
// TODO: Remove once broken contracts are migrated
2329-
lookupCoin := contract.BuyerOrder.Payment.AmountCurrency.Code
2339+
order, _ := i.node.GetOrder(rel.OrderID)
2340+
lookupCoin := order.Contract.BuyerOrder.Payment.AmountCurrency.Code
23302341
_, err = i.node.LookupCurrency(lookupCoin)
23312342
if err != nil {
23322343
log.Warningf("invalid BuyerOrder.Payment.Coin (%s) on order (%s)", lookupCoin, rel.OrderID)

core/confirmation.go

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -5,11 +5,12 @@ import (
55
"encoding/hex"
66
"errors"
77
"fmt"
8-
"github.com/OpenBazaar/openbazaar-go/repo"
98
"math/big"
109
"strings"
1110
"time"
1211

12+
"github.com/OpenBazaar/openbazaar-go/repo"
13+
1314
crypto "gx/ipfs/QmTW4SdgBWq9GjsBsHeUx8WuGxzhgzAf88UMH2w62PC8yK/go-libp2p-crypto"
1415

1516
"github.com/OpenBazaar/wallet-interface"
@@ -103,7 +104,9 @@ func (n *OpenBazaarNode) ConfirmOfflineOrder(oldState pb.OrderState, contract *p
103104
if err != nil {
104105
return err
105106
}
106-
wal, err := n.Multiwallet.WalletForCurrencyCode(confirmedContract.BuyerOrder.Payment.AmountCurrency.Code)
107+
108+
order, err := repo.ToV5Order(contract.BuyerOrder, n.LookupCurrency)
109+
wal, err := n.Multiwallet.WalletForCurrencyCode(order.Payment.AmountCurrency.Code)
107110
if err != nil {
108111
return err
109112
}

core/order.go

Lines changed: 23 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -62,32 +62,36 @@ func (n *OpenBazaarNode) GetOrder(orderID string) (*pb.OrderRespApi, error) {
6262
isSale = true
6363
}
6464

65-
for i, l := range contract.VendorListings {
66-
repoListing, err := repo.NewListingFromProtobuf(l)
67-
if err != nil {
68-
log.Errorf("failed getting contract listing: %s", err.Error())
69-
return nil, err
70-
}
71-
normalizedListing, err := repoListing.Normalize()
72-
if err != nil {
73-
log.Errorf("failed converting contract listing to v5 schema: %s", err.Error())
74-
return nil, err
75-
}
76-
contract.VendorListings[i] = normalizedListing.GetProtobuf()
77-
}
78-
7965
resp := new(pb.OrderRespApi)
8066
resp.Contract = contract
8167
resp.Funded = funded
8268
resp.Read = read
8369
resp.State = state
8470

85-
v5Order, err := repo.ToV5Order(contract.BuyerOrder, n.LookupCurrency)
86-
if err != nil {
87-
log.Errorf("failed converting contract buyer order to v5 schema: %s", err.Error())
88-
return nil, err
71+
if contract.BuyerOrder.Payment.AmountCurrency != nil {
72+
resp.Contract.BuyerOrder = contract.BuyerOrder
73+
} else {
74+
for i, l := range contract.VendorListings {
75+
repoListing, err := repo.NewListingFromProtobuf(l)
76+
if err != nil {
77+
log.Errorf("failed getting contract listing: %s", err.Error())
78+
return nil, err
79+
}
80+
normalizedListing, err := repoListing.Normalize()
81+
if err != nil {
82+
log.Errorf("failed converting contract listing to v5 schema: %s", err.Error())
83+
return nil, err
84+
}
85+
contract.VendorListings[i] = normalizedListing.GetProtobuf()
86+
}
87+
88+
v5Order, err := repo.ToV5Order(contract.BuyerOrder, n.LookupCurrency)
89+
if err != nil {
90+
log.Errorf("failed converting contract buyer order to v5 schema: %s", err.Error())
91+
return nil, err
92+
}
93+
resp.Contract.BuyerOrder = v5Order
8994
}
90-
resp.Contract.BuyerOrder = v5Order
9195

9296
paymentTxs, refundTx, err := n.BuildTransactionRecords(contract, records, state)
9397
if err != nil {

0 commit comments

Comments
 (0)