Skip to content

Commit

Permalink
use settleAmount (#768)
Browse files Browse the repository at this point in the history
  • Loading branch information
m2049r authored May 21, 2021
1 parent 2c2a531 commit c4958f6
Show file tree
Hide file tree
Showing 6 changed files with 26 additions and 51 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -349,7 +349,7 @@ private boolean checkAddressNoError() {

private boolean checkAddress() {
boolean ok = checkAddressNoError();
if (!ok) {
if (possibleCryptos.isEmpty()) {
etAddress.setError(getString(R.string.send_address_invalid));
} else {
etAddress.setError(null);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -90,7 +90,6 @@ public View onCreateView(LayoutInflater inflater, ViewGroup container,
return view;
}


@Override
public boolean onValidateFields() {
Timber.i(maxBtc + "/" + minBtc);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -359,40 +359,22 @@ SendFragment.Listener getActivityCallback() {
}

private RequestQuote xmrtoQuote = null;
private int stageARetries = 0;
private final int RETRIES = 3;
private double stageAPrice = 0;

private void processStageA(final RequestQuote requestQuote) {
Timber.d("processCreateOrder %s", requestQuote.getId());
TxDataBtc txDataBtc = (TxDataBtc) sendListener.getTxData();
// verify the BTC amount is correct (price can change and we can only specify XMR amount)
// verify the BTC amount is correct
if (requestQuote.getBtcAmount() != txDataBtc.getBtcAmount()) {
if (--stageARetries <= 0) {
Timber.d("Failed to get quote");
getView().post(() ->
showStageError(ShiftError.Error.SERVICE.toString(),
getString(R.string.shift_noquote),
getString(R.string.shift_checkamount)));
return; // just stop for now
}
if (stageAPrice == requestQuote.getPrice()) {
// same price but different BTC amount - something else is wrong (e.g. too many decimals)
Timber.d("Price unchanged");
getView().post(() ->
showStageError(ShiftError.Error.SERVICE.toString(),
getString(R.string.shift_noquote),
getString(R.string.shift_checkamount)));
return; // just stop for now
}
stageAPrice = requestQuote.getPrice();
// recalc XMR and try again
txDataBtc.setAmount(txDataBtc.getBtcAmount() / requestQuote.getPrice());
getView().post(this::stageAOneShot);
return; // stageA will run in the main thread
Timber.d("Failed to get quote");
getView().post(() -> showStageError(ShiftError.Error.SERVICE.toString(),
getString(R.string.shift_noquote),
getString(R.string.shift_checkamount)));
return; // just stop for now
}
xmrtoQuote = requestQuote;
txDataBtc.setAmount(xmrtoQuote.getXmrAmount());
getView().post(() -> {
// show data from the actual quote as that is what is used to
NumberFormat df = NumberFormat.getInstance(Locale.US);
df.setMaximumFractionDigits(12);
final String btcAmount = df.format(xmrtoQuote.getBtcAmount());
Expand Down Expand Up @@ -438,18 +420,12 @@ private void processStageAError(final Exception ex) {
}

private void stageA() {
stageARetries = RETRIES;
stageAOneShot();
}

private void stageAOneShot() {
if (!isResumed) return;
Timber.d("Request Quote");
xmrtoQuote = null;
xmrtoOrder = null;
showProgress(1, getString(R.string.label_send_progress_xmrto_create));
TxDataBtc txDataBtc = (TxDataBtc) sendListener.getTxData();
stageAPrice = 0;

ShiftCallback<RequestQuote> callback = new ShiftCallback<RequestQuote>() {
@Override
Expand All @@ -473,7 +449,7 @@ public void onError(Exception ex) {
}
};

getXmrToApi().requestQuote(txDataBtc.getAmountAsDouble(), callback);
getXmrToApi().requestQuote(txDataBtc.getBtcAmount(), callback);
}

private CreateOrder xmrtoOrder = null;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -74,10 +74,10 @@ class RequestQuoteImpl implements RequestQuote {
price = jsonObject.getDouble("rate");
}

public static void call(@NonNull final ShiftApiCall api, final double xmrAmount,
public static void call(@NonNull final ShiftApiCall api, final double btcAmount,
@NonNull final ShiftCallback<RequestQuote> callback) {
try {
final JSONObject request = createRequest(xmrAmount);
final JSONObject request = createRequest(btcAmount);
api.call("quotes", request, new NetworkCallback() {
@Override
public void onSuccess(JSONObject jsonObject) {
Expand All @@ -104,13 +104,13 @@ public void onError(Exception ex) {
* @param xmrAmount how much XMR to shift to BTC
*/

static JSONObject createRequest(final double xmrAmount) throws JSONException {
static JSONObject createRequest(final double btcAmount) throws JSONException {
final JSONObject jsonObject = new JSONObject();
jsonObject.put("depositMethod", "xmr");
jsonObject.put("settleMethod", ServiceHelper.ASSET);
// #sideshift is silly and likes numbers as strings
String amount = AmountFormatter.format(xmrAmount);
jsonObject.put("depositAmount", amount);
String amount = AmountFormatter.format(btcAmount);
jsonObject.put("settleAmount", amount);
return jsonObject;
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -64,8 +64,8 @@ public void queryOrderParameters(@NonNull final ShiftCallback<QueryOrderParamete
}

@Override
public void requestQuote(final double xmrAmount, @NonNull final ShiftCallback<RequestQuote> callback) {
RequestQuoteImpl.call(this, xmrAmount, callback);
public void requestQuote(final double btcAmount, @NonNull final ShiftCallback<RequestQuote> callback) {
RequestQuoteImpl.call(this, btcAmount, callback);
}

@Override
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -95,7 +95,7 @@ public void requestQuote_shouldBeContentTypeJson()
@Test
public void requestQuote_shouldContainValidBody() throws InterruptedException {

final String validBody = "{\"depositAmount\":\"1.01\",\"settleMethod\":\"btc\",\"depositMethod\":\"xmr\"}";
final String validBody = "{\"settleAmount\":\"1.01\",\"settleMethod\":\"btc\",\"depositMethod\":\"xmr\"}";
xmrToApi.requestQuote(1.01, mockXmrToCallback);

RecordedRequest request = mockWebServer.takeRequest();
Expand All @@ -106,18 +106,18 @@ public void requestQuote_shouldContainValidBody() throws InterruptedException {
@Test
public void requestQuote_wasSuccessfulShouldRespondWithQuote()
throws TimeoutException {
final double xmrAmount = 1.01;
final double btcAmount = 1.01;
final double rate = 0.00397838;
final String uuid = "66fc0749-f320-4361-b0fb-7873576cba67";
MockResponse jsonMockResponse = new MockResponse().setBody(
createMockRequestQuoteResponse(xmrAmount, rate, uuid));
createMockRequestQuoteResponse(btcAmount, rate, uuid));
mockWebServer.enqueue(jsonMockResponse);

xmrToApi.requestQuote(xmrAmount, new ShiftCallback<RequestQuote>() {
xmrToApi.requestQuote(btcAmount, new ShiftCallback<RequestQuote>() {
@Override
public void onSuccess(final RequestQuote quote) {
waiter.assertEquals(quote.getBtcAmount(), xmrAmount * rate);
waiter.assertEquals(quote.getXmrAmount(), xmrAmount);
waiter.assertEquals(quote.getXmrAmount(), btcAmount / rate);
waiter.assertEquals(quote.getBtcAmount(), btcAmount);
waiter.assertEquals(quote.getId(), uuid);
waiter.resume();
}
Expand Down Expand Up @@ -181,17 +181,17 @@ public void onError(final Exception e) {
waiter.await();
}

private String createMockRequestQuoteResponse(final double xmrAmount, final double rate,
private String createMockRequestQuoteResponse(final double btcAmount, final double rate,
final String uuid) {

return "{\n" +
"\"createdAt\":\"2021-02-04T13:09:14.484Z\",\n" +
"\"depositAmount\":\"" + xmrAmount + "\",\n" +
"\"settleAmount\":\"" + btcAmount + "\",\n" +
"\"depositMethod\":\"xmr\",\n" +
"\"expiresAt\":\"2021-02-04T13:24:14.484Z\",\n" +
"\"id\":\"" + uuid + "\",\n" +
"\"rate\":\"" + rate + "\",\n" +
"\"settleAmount\":\"" + (xmrAmount * rate) + "\",\n" +
"\"depositAmount\":\"" + (btcAmount / rate) + "\",\n" +
"\"settleMethod\":\"btc\"\n" +
"}";
}
Expand Down

0 comments on commit c4958f6

Please sign in to comment.