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

Commit fc67377

Browse files
committed
Fix: Save DisputeAcceptance to the contract even if state has not progressed
Also automatically progress an order contract's state to RESOLVED when a DISPUTE_CLOSE message is found and DisputeAcceptance data is already present on the contract. This is another fix aimed at fully resolving #1651
1 parent 467aecf commit fc67377

File tree

2 files changed

+27
-7
lines changed

2 files changed

+27
-7
lines changed

net/service/handlers.go

Lines changed: 11 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1520,11 +1520,19 @@ func (service *OpenBazaarService) handleDisputeClose(p peer.ID, pmes *pb.Message
15201520
return nil, err
15211521
}
15221522

1523+
// If DisputeAcceptance is already set then move the state directly to RESOLVED
15231524
if isPurchase {
1524-
// Set message state to complete
1525-
err = service.datastore.Purchases().Put(rc.DisputeResolution.OrderId, *contract, pb.OrderState_DECIDED, false)
1525+
if contract.DisputeAcceptance != nil {
1526+
err = service.datastore.Purchases().Put(rc.DisputeResolution.OrderId, *contract, pb.OrderState_RESOLVED, false)
1527+
} else {
1528+
err = service.datastore.Purchases().Put(rc.DisputeResolution.OrderId, *contract, pb.OrderState_DECIDED, false)
1529+
}
15261530
} else {
1527-
err = service.datastore.Sales().Put(rc.DisputeResolution.OrderId, *contract, pb.OrderState_DECIDED, false)
1531+
if contract.DisputeAcceptance != nil {
1532+
err = service.datastore.Sales().Put(rc.DisputeResolution.OrderId, *contract, pb.OrderState_RESOLVED, false)
1533+
} else {
1534+
err = service.datastore.Sales().Put(rc.DisputeResolution.OrderId, *contract, pb.OrderState_DECIDED, false)
1535+
}
15281536
}
15291537
if err != nil {
15301538
return nil, err

wallet/listeners/transaction_listener.go

Lines changed: 16 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -154,8 +154,14 @@ func (l *TransactionListener) OnTransactionReceived(cb wallet.TransactionCallbac
154154
log.Errorf("persist dispute acceptance notification for order (%s): %s", orderId, err)
155155
}
156156
}
157-
if err := l.db.Sales().Put(orderId, *contract, pb.OrderState_RESOLVED, false); err != nil {
158-
log.Errorf("failed updating order (%s) to RESOLVED: %s", orderId, err.Error())
157+
if state == pb.OrderState_DECIDED {
158+
if err := l.db.Sales().Put(orderId, *contract, pb.OrderState_RESOLVED, false); err != nil {
159+
log.Errorf("failed updating order (%s) to RESOLVED: %s", orderId, err.Error())
160+
}
161+
} else {
162+
if err := l.db.Sales().Put(orderId, *contract, state, false); err != nil {
163+
log.Errorf("failed updating order (%s) with DisputeAcceptance: %s", orderId, err.Error())
164+
}
159165
}
160166
}
161167
} else {
@@ -192,8 +198,14 @@ func (l *TransactionListener) OnTransactionReceived(cb wallet.TransactionCallbac
192198
log.Errorf("persist dispute acceptance notification for order (%s): %s", orderId, err)
193199
}
194200
}
195-
if err := l.db.Purchases().Put(orderId, *contract, pb.OrderState_RESOLVED, false); err != nil {
196-
log.Errorf("failed updating order (%s) to RESOLVED: %s", orderId, err.Error())
201+
if state == pb.OrderState_DECIDED {
202+
if err := l.db.Purchases().Put(orderId, *contract, pb.OrderState_RESOLVED, false); err != nil {
203+
log.Errorf("failed updating order (%s) to RESOLVED: %s", orderId, err.Error())
204+
}
205+
} else {
206+
if err := l.db.Purchases().Put(orderId, *contract, state, false); err != nil {
207+
log.Errorf("failed updating order (%s) with DisputeAcceptance: %s", orderId, err.Error())
208+
}
197209
}
198210
}
199211
}

0 commit comments

Comments
 (0)