Adjust bsq-swap-offer related gRPC daemon services

- Add GetOfferCategory service so CLI can determine what kind of takeoffer service is to be used.
- Adjust to removal of BsqSwapOfferInfo proto.
- Call new coreApi.getRole(BsqSwapTrade) before building BsqSwapTradeInfo proto.
This commit is contained in:
ghubstan 2021-11-11 12:56:34 -03:00
parent 5924312e64
commit c6aceb0458
No known key found for this signature in database
GPG key ID: E35592D6800A861E
2 changed files with 63 additions and 26 deletions

View file

@ -18,7 +18,6 @@
package bisq.daemon.grpc; package bisq.daemon.grpc;
import bisq.core.api.CoreApi; import bisq.core.api.CoreApi;
import bisq.core.api.model.BsqSwapOfferInfo;
import bisq.core.api.model.OfferInfo; import bisq.core.api.model.OfferInfo;
import bisq.core.offer.Offer; import bisq.core.offer.Offer;
import bisq.core.offer.OpenOffer; import bisq.core.offer.OpenOffer;
@ -33,12 +32,15 @@ import bisq.proto.grpc.EditOfferReply;
import bisq.proto.grpc.EditOfferRequest; import bisq.proto.grpc.EditOfferRequest;
import bisq.proto.grpc.GetBsqSwapOfferReply; import bisq.proto.grpc.GetBsqSwapOfferReply;
import bisq.proto.grpc.GetBsqSwapOffersReply; import bisq.proto.grpc.GetBsqSwapOffersReply;
import bisq.proto.grpc.GetBsqSwapOffersRequest;
import bisq.proto.grpc.GetMyBsqSwapOfferReply; import bisq.proto.grpc.GetMyBsqSwapOfferReply;
import bisq.proto.grpc.GetMyBsqSwapOffersReply; import bisq.proto.grpc.GetMyBsqSwapOffersReply;
import bisq.proto.grpc.GetMyOfferReply; import bisq.proto.grpc.GetMyOfferReply;
import bisq.proto.grpc.GetMyOfferRequest; import bisq.proto.grpc.GetMyOfferRequest;
import bisq.proto.grpc.GetMyOffersReply; import bisq.proto.grpc.GetMyOffersReply;
import bisq.proto.grpc.GetMyOffersRequest; import bisq.proto.grpc.GetMyOffersRequest;
import bisq.proto.grpc.GetOfferCategoryReply;
import bisq.proto.grpc.GetOfferCategoryRequest;
import bisq.proto.grpc.GetOfferReply; import bisq.proto.grpc.GetOfferReply;
import bisq.proto.grpc.GetOfferRequest; import bisq.proto.grpc.GetOfferRequest;
import bisq.proto.grpc.GetOffersReply; import bisq.proto.grpc.GetOffersReply;
@ -56,10 +58,15 @@ import java.util.stream.Collectors;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
import static bisq.core.api.model.BsqSwapOfferInfo.toBsqSwapOfferInfo; import static bisq.core.api.model.OfferInfo.toMyPendingOfferInfo;
import static bisq.core.api.model.OfferInfo.toOfferInfo; import static bisq.core.api.model.OfferInfo.toOfferInfo;
import static bisq.core.api.model.OfferInfo.toPendingOfferInfo;
import static bisq.daemon.grpc.interceptor.GrpcServiceRateMeteringConfig.getCustomRateMeteringInterceptor; import static bisq.daemon.grpc.interceptor.GrpcServiceRateMeteringConfig.getCustomRateMeteringInterceptor;
import static bisq.proto.grpc.GetOfferCategoryReply.OfferCategory;
import static bisq.proto.grpc.GetOfferCategoryReply.OfferCategory.ALTCOIN;
import static bisq.proto.grpc.GetOfferCategoryReply.OfferCategory.BSQ_SWAP;
import static bisq.proto.grpc.GetOfferCategoryReply.OfferCategory.FIAT;
import static bisq.proto.grpc.GetOfferCategoryReply.OfferCategory.UNKNOWN;
import static bisq.proto.grpc.GetOfferCategoryReply.newBuilder;
import static bisq.proto.grpc.OffersGrpc.*; import static bisq.proto.grpc.OffersGrpc.*;
import static java.util.concurrent.TimeUnit.MINUTES; import static java.util.concurrent.TimeUnit.MINUTES;
import static java.util.concurrent.TimeUnit.SECONDS; import static java.util.concurrent.TimeUnit.SECONDS;
@ -81,13 +88,28 @@ class GrpcOffersService extends OffersImplBase {
this.exceptionHandler = exceptionHandler; this.exceptionHandler = exceptionHandler;
} }
@Override
public void getOfferCategory(GetOfferCategoryRequest req,
StreamObserver<GetOfferCategoryReply> responseObserver) {
try {
OfferCategory category = getAvailableOfferCategory(req.getId());
var reply = newBuilder()
.setOfferCategory(category)
.build();
responseObserver.onNext(reply);
responseObserver.onCompleted();
} catch (Throwable cause) {
exceptionHandler.handleException(log, cause, responseObserver);
}
}
@Override @Override
public void getBsqSwapOffer(GetOfferRequest req, public void getBsqSwapOffer(GetOfferRequest req,
StreamObserver<GetBsqSwapOfferReply> responseObserver) { StreamObserver<GetBsqSwapOfferReply> responseObserver) {
try { try {
Offer offer = coreApi.getOffer(req.getId()); Offer offer = coreApi.getOffer(req.getId());
var reply = GetBsqSwapOfferReply.newBuilder() var reply = GetBsqSwapOfferReply.newBuilder()
.setBsqSwapOffer(toBsqSwapOfferInfo(offer).toProtoMessage()) .setBsqSwapOffer(toOfferInfo(offer).toProtoMessage())
.build(); .build();
responseObserver.onNext(reply); responseObserver.onNext(reply);
responseObserver.onCompleted(); responseObserver.onCompleted();
@ -117,7 +139,7 @@ class GrpcOffersService extends OffersImplBase {
try { try {
Offer offer = coreApi.getMyBsqSwapOffer(req.getId()); Offer offer = coreApi.getMyBsqSwapOffer(req.getId());
var reply = GetMyBsqSwapOfferReply.newBuilder() var reply = GetMyBsqSwapOfferReply.newBuilder()
.setBsqSwapOffer(toBsqSwapOfferInfo(offer /* TODO support triggerPrice */).toProtoMessage()) .setBsqSwapOffer(toOfferInfo(offer /* TODO support triggerPrice */).toProtoMessage())
.build(); .build();
responseObserver.onNext(reply); responseObserver.onNext(reply);
responseObserver.onCompleted(); responseObserver.onCompleted();
@ -132,7 +154,7 @@ class GrpcOffersService extends OffersImplBase {
try { try {
OpenOffer openOffer = coreApi.getMyOffer(req.getId()); OpenOffer openOffer = coreApi.getMyOffer(req.getId());
var reply = GetMyOfferReply.newBuilder() var reply = GetMyOfferReply.newBuilder()
.setOffer(toOfferInfo(openOffer).toProtoMessage()) .setOffer(OfferInfo.toMyOfferInfo(openOffer).toProtoMessage())
.build(); .build();
responseObserver.onNext(reply); responseObserver.onNext(reply);
responseObserver.onCompleted(); responseObserver.onCompleted();
@ -142,15 +164,15 @@ class GrpcOffersService extends OffersImplBase {
} }
@Override @Override
public void getBsqSwapOffers(GetOffersRequest req, public void getBsqSwapOffers(GetBsqSwapOffersRequest req,
StreamObserver<GetBsqSwapOffersReply> responseObserver) { StreamObserver<GetBsqSwapOffersReply> responseObserver) {
try { try {
List<BsqSwapOfferInfo> result = coreApi.getBsqSwapOffers(req.getDirection()) List<OfferInfo> result = coreApi.getBsqSwapOffers(req.getDirection())
.stream().map(BsqSwapOfferInfo::toBsqSwapOfferInfo) .stream().map(OfferInfo::toOfferInfo)
.collect(Collectors.toList()); .collect(Collectors.toList());
var reply = GetBsqSwapOffersReply.newBuilder() var reply = GetBsqSwapOffersReply.newBuilder()
.addAllBsqSwapOffers(result.stream() .addAllBsqSwapOffers(result.stream()
.map(BsqSwapOfferInfo::toProtoMessage) .map(OfferInfo::toProtoMessage)
.collect(Collectors.toList())) .collect(Collectors.toList()))
.build(); .build();
responseObserver.onNext(reply); responseObserver.onNext(reply);
@ -180,15 +202,15 @@ class GrpcOffersService extends OffersImplBase {
} }
@Override @Override
public void getMyBsqSwapOffers(GetMyOffersRequest req, public void getMyBsqSwapOffers(GetBsqSwapOffersRequest req,
StreamObserver<GetMyBsqSwapOffersReply> responseObserver) { StreamObserver<GetMyBsqSwapOffersReply> responseObserver) {
try { try {
List<BsqSwapOfferInfo> result = coreApi.getMyBsqSwapOffers(req.getDirection()) List<OfferInfo> result = coreApi.getMyBsqSwapOffers(req.getDirection())
.stream().map(BsqSwapOfferInfo::toBsqSwapOfferInfo) .stream().map(OfferInfo::toOfferInfo)
.collect(Collectors.toList()); .collect(Collectors.toList());
var reply = GetMyBsqSwapOffersReply.newBuilder() var reply = GetMyBsqSwapOffersReply.newBuilder()
.addAllBsqSwapOffers(result.stream() .addAllBsqSwapOffers(result.stream()
.map(BsqSwapOfferInfo::toProtoMessage) .map(OfferInfo::toProtoMessage)
.collect(Collectors.toList())) .collect(Collectors.toList()))
.build(); .build();
responseObserver.onNext(reply); responseObserver.onNext(reply);
@ -204,7 +226,7 @@ class GrpcOffersService extends OffersImplBase {
try { try {
List<OfferInfo> result = coreApi.getMyOffers(req.getDirection(), req.getCurrencyCode()) List<OfferInfo> result = coreApi.getMyOffers(req.getDirection(), req.getCurrencyCode())
.stream() .stream()
.map(OfferInfo::toOfferInfo) .map(OfferInfo::toMyOfferInfo)
.collect(Collectors.toList()); .collect(Collectors.toList());
var reply = GetMyOffersReply.newBuilder() var reply = GetMyOffersReply.newBuilder()
.addAllOffers(result.stream() .addAllOffers(result.stream()
@ -222,17 +244,15 @@ class GrpcOffersService extends OffersImplBase {
public void createBsqSwapOffer(CreateBsqSwapOfferRequest req, public void createBsqSwapOffer(CreateBsqSwapOfferRequest req,
StreamObserver<CreateBsqSwapOfferReply> responseObserver) { StreamObserver<CreateBsqSwapOfferReply> responseObserver) {
try { try {
//todo PaymentAccount for bsq swap not needed as its just a dummy account
coreApi.createAndPlaceBsqSwapOffer( coreApi.createAndPlaceBsqSwapOffer(
req.getDirection(), req.getDirection(),
req.getAmount(), req.getAmount(),
req.getMinAmount(), req.getMinAmount(),
req.getPrice(), req.getPrice(),
/* req.getPaymentAccountId(),*/
offer -> { offer -> {
BsqSwapOfferInfo bsqSwapOfferInfo = toBsqSwapOfferInfo(offer); OfferInfo offerInfo = toMyPendingOfferInfo(offer);
CreateBsqSwapOfferReply reply = CreateBsqSwapOfferReply.newBuilder() CreateBsqSwapOfferReply reply = CreateBsqSwapOfferReply.newBuilder()
.setBsqSwapOffer(bsqSwapOfferInfo.toProtoMessage()) .setBsqSwapOffer(offerInfo.toProtoMessage())
.build(); .build();
responseObserver.onNext(reply); responseObserver.onNext(reply);
responseObserver.onCompleted(); responseObserver.onCompleted();
@ -261,7 +281,7 @@ class GrpcOffersService extends OffersImplBase {
offer -> { offer -> {
// This result handling consumer's accept operation will return // This result handling consumer's accept operation will return
// the new offer to the gRPC client after async placement is done. // the new offer to the gRPC client after async placement is done.
OfferInfo offerInfo = toPendingOfferInfo(offer); OfferInfo offerInfo = toMyPendingOfferInfo(offer);
CreateOfferReply reply = CreateOfferReply.newBuilder() CreateOfferReply reply = CreateOfferReply.newBuilder()
.setOffer(offerInfo.toProtoMessage()) .setOffer(offerInfo.toProtoMessage())
.build(); .build();
@ -325,4 +345,15 @@ class GrpcOffersService extends OffersImplBase {
}} }}
))); )));
} }
private OfferCategory getAvailableOfferCategory(String offerId) {
if (coreApi.isAvailableAltcoinOffer(offerId))
return ALTCOIN;
else if (coreApi.isAvailableFiatOffer(offerId))
return FIAT;
else if (coreApi.isAvailableBsqSwapOffer(offerId))
return BSQ_SWAP;
else
return UNKNOWN;
}
} }

View file

@ -78,9 +78,10 @@ class GrpcTradesService extends TradesImplBase {
StreamObserver<GetBsqSwapTradeReply> responseObserver) { StreamObserver<GetBsqSwapTradeReply> responseObserver) {
try { try {
var bsqSwapTrade = coreApi.getBsqSwapTrade(req.getTradeId()); var bsqSwapTrade = coreApi.getBsqSwapTrade(req.getTradeId());
// String role = coreApi.getBsqSwapTradeRole(req.getTradeId()); boolean wasMyOffer = coreApi.isMyOffer(bsqSwapTrade.getOffer().getId());
String role = coreApi.getBsqSwapTradeRole(req.getTradeId());
var reply = GetBsqSwapTradeReply.newBuilder() var reply = GetBsqSwapTradeReply.newBuilder()
.setBsqSwapTrade(toBsqSwapTradeInfo(bsqSwapTrade).toProtoMessage()) .setBsqSwapTrade(toBsqSwapTradeInfo(bsqSwapTrade, role, wasMyOffer).toProtoMessage())
.build(); .build();
responseObserver.onNext(reply); responseObserver.onNext(reply);
responseObserver.onCompleted(); responseObserver.onCompleted();
@ -97,7 +98,7 @@ class GrpcTradesService extends TradesImplBase {
public void takeBsqSwapOffer(TakeBsqSwapOfferRequest req, public void takeBsqSwapOffer(TakeBsqSwapOfferRequest req,
StreamObserver<TakeBsqSwapOfferReply> responseObserver) { StreamObserver<TakeBsqSwapOfferReply> responseObserver) {
GrpcErrorMessageHandler errorMessageHandler = GrpcErrorMessageHandler errorMessageHandler =
new GrpcErrorMessageHandler(getTakeOfferMethod().getFullMethodName(), new GrpcErrorMessageHandler(getTakeBsqSwapOfferMethod().getFullMethodName(),
responseObserver, responseObserver,
exceptionHandler, exceptionHandler,
log); log);
@ -105,7 +106,10 @@ class GrpcTradesService extends TradesImplBase {
req.getPaymentAccountId(), req.getPaymentAccountId(),
req.getTakerFeeCurrencyCode(), req.getTakerFeeCurrencyCode(),
bsqSwapTrade -> { bsqSwapTrade -> {
BsqSwapTradeInfo bsqSwapTradeInfo = toBsqSwapTradeInfo(bsqSwapTrade); String role = coreApi.getBsqSwapTradeRole(bsqSwapTrade);
BsqSwapTradeInfo bsqSwapTradeInfo = toBsqSwapTradeInfo(bsqSwapTrade,
role,
false);
var reply = TakeBsqSwapOfferReply.newBuilder() var reply = TakeBsqSwapOfferReply.newBuilder()
.setBsqSwapTrade(bsqSwapTradeInfo.toProtoMessage()) .setBsqSwapTrade(bsqSwapTradeInfo.toProtoMessage())
.build(); .build();
@ -123,10 +127,10 @@ class GrpcTradesService extends TradesImplBase {
StreamObserver<GetTradeReply> responseObserver) { StreamObserver<GetTradeReply> responseObserver) {
try { try {
Trade trade = coreApi.getTrade(req.getTradeId()); Trade trade = coreApi.getTrade(req.getTradeId());
boolean isMyOffer = coreApi.isMyOffer(trade.getOffer().getId()); boolean wasMyOffer = coreApi.isMyOffer(trade.getOffer().getId());
String role = coreApi.getTradeRole(req.getTradeId()); String role = coreApi.getTradeRole(req.getTradeId());
var reply = GetTradeReply.newBuilder() var reply = GetTradeReply.newBuilder()
.setTrade(toTradeInfo(trade, role, isMyOffer).toProtoMessage()) .setTrade(toTradeInfo(trade, role, wasMyOffer).toProtoMessage())
.build(); .build();
responseObserver.onNext(reply); responseObserver.onNext(reply);
responseObserver.onCompleted(); responseObserver.onCompleted();
@ -227,7 +231,9 @@ class GrpcTradesService extends TradesImplBase {
.or(() -> Optional.of(CallRateMeteringInterceptor.valueOf( .or(() -> Optional.of(CallRateMeteringInterceptor.valueOf(
new HashMap<>() {{ new HashMap<>() {{
put(getGetTradeMethod().getFullMethodName(), new GrpcCallRateMeter(1, SECONDS)); put(getGetTradeMethod().getFullMethodName(), new GrpcCallRateMeter(1, SECONDS));
put(getGetBsqSwapTradeMethod().getFullMethodName(), new GrpcCallRateMeter(1, SECONDS));
put(getTakeOfferMethod().getFullMethodName(), new GrpcCallRateMeter(1, MINUTES)); put(getTakeOfferMethod().getFullMethodName(), new GrpcCallRateMeter(1, MINUTES));
put(getTakeBsqSwapOfferMethod().getFullMethodName(), new GrpcCallRateMeter(1, MINUTES));
put(getConfirmPaymentStartedMethod().getFullMethodName(), new GrpcCallRateMeter(1, MINUTES)); put(getConfirmPaymentStartedMethod().getFullMethodName(), new GrpcCallRateMeter(1, MINUTES));
put(getConfirmPaymentReceivedMethod().getFullMethodName(), new GrpcCallRateMeter(1, MINUTES)); put(getConfirmPaymentReceivedMethod().getFullMethodName(), new GrpcCallRateMeter(1, MINUTES));
put(getKeepFundsMethod().getFullMethodName(), new GrpcCallRateMeter(1, MINUTES)); put(getKeepFundsMethod().getFullMethodName(), new GrpcCallRateMeter(1, MINUTES));