diff --git a/api/src/main/java/io/bitsquare/api/BitsquareProxy.java b/api/src/main/java/io/bitsquare/api/BitsquareProxy.java index e7f9968b08..fce7705719 100644 --- a/api/src/main/java/io/bitsquare/api/BitsquareProxy.java +++ b/api/src/main/java/io/bitsquare/api/BitsquareProxy.java @@ -3,19 +3,26 @@ package io.bitsquare.api; import com.google.common.base.Strings; import com.google.inject.Inject; import io.bitsquare.api.api.*; +import io.bitsquare.api.api.Currency; import io.bitsquare.btc.WalletService; +import io.bitsquare.btc.pricefeed.PriceFeedService; +import io.bitsquare.common.crypto.KeyRing; import io.bitsquare.locale.CurrencyUtil; +import io.bitsquare.p2p.NodeAddress; +import io.bitsquare.p2p.P2PService; +import io.bitsquare.payment.CryptoCurrencyAccount; import io.bitsquare.trade.TradeManager; import io.bitsquare.trade.offer.Offer; import io.bitsquare.trade.offer.OfferBookService; import io.bitsquare.user.User; +import jersey.repackaged.com.google.common.collect.Lists; import lombok.extern.slf4j.Slf4j; import org.bitcoinj.core.Coin; +import org.bitcoinj.core.Transaction; import org.bitcoinj.core.Wallet; -import java.util.Collections; -import java.util.List; -import java.util.Optional; +import java.math.BigDecimal; +import java.util.*; import java.util.stream.Collectors; /** @@ -33,12 +40,21 @@ public class BitsquareProxy { private TradeManager tradeManager; @Inject private OfferBookService offerBookService; + @Inject + private P2PService p2PService; + @Inject + private KeyRing keyRing; + @Inject + private PriceFeedService priceFeedService; public BitsquareProxy(WalletService walletService, TradeManager tradeManager, OfferBookService offerBookService, - User user) { + P2PService p2PService, KeyRing keyRing, PriceFeedService priceFeedService, User user) { this.walletService = walletService; this.tradeManager = tradeManager; this.offerBookService = offerBookService; + this.p2PService = p2PService; + this.keyRing = keyRing; + this.priceFeedService = priceFeedService; this.user = user; } @@ -62,26 +78,6 @@ public class BitsquareProxy { return marketList; } - public WalletDetails getWalletDetails() { - Wallet wallet = walletService.getWallet(); - if (wallet == null) { - return null; - } - Coin availableBalance = wallet.getBalance(Wallet.BalanceType.AVAILABLE); - Coin reservedBalance = wallet.getBalance(Wallet.BalanceType.ESTIMATED_SPENDABLE); - return new WalletDetails(availableBalance.longValue(), reservedBalance.longValue()); - } - -// public WalletTransactions getWalletTransactions(long start, long end, long limit) { -// boolean includeDeadTransactions = false; -// Set transactions = walletService.getWallet().getTransactions(includeDeadTransactions); -// WalletTransactions walletTransactions = new WalletTransactions(); -// List transactionList = walletTransactions.getTransactions(); -// -// for (Transaction t : transactions) { -// transactionList.add(new io.bitsquare.api.api.WalletTransaction(t.getValue(walletService.getWallet().getTransactionsByTime()))) -// } -// } public AccountList getAccountList() { AccountList accountList = new AccountList(); @@ -99,7 +95,7 @@ public class BitsquareProxy { return false; } // do something more intelligent here, maybe block till handler is called. - offerBookService.removeOffer(offer.get(), () -> log.info("offer removed"), (err) -> log.error("Error removing offer" + err)); + offerBookService.removeOffer(offer.get(), () -> log.info("offer removed"), (err) -> log.error("Error removing offer: " + err)); return true; } @@ -119,8 +115,60 @@ public class BitsquareProxy { return offer; } - public void offerMake() { -// offerbookservice. public void addOffer(Offer offer, ResultHandler resultHandler, ErrorMessageHandler errorMessageHandler) { + public void offerMake(String market, String accountId, String direction, BigDecimal amount, BigDecimal minAmount, + String fixed, String price) { + // TODO: detect bad direction, bad market, no paymentaccount for user + + Offer offer = new Offer(UUID.randomUUID().toString(), + p2PService.getAddress(), + keyRing.getPubKeyRing(), + Offer.Direction.valueOf(direction), + Long.valueOf(price), + 1, //marketPriceMarginParam, + true, //useMarketBasedPrice.get(), + amount.longValueExact(), + minAmount.longValueExact(), + "MR", // currencycode + (ArrayList) user.getAcceptedArbitratorAddresses(), + getAccountList().getPaymentAccounts().stream().findAny().get().getPayment_method().toString(), //paymentAccount.getPaymentMethod().getId(), + getAccountList().getPaymentAccounts().stream().findAny().get().getAccount_id(), //paymentAccount.getId(), + null, //countryCode, + null, //acceptedCountryCodes, + null, //bankId, + null, // acceptedBanks, + priceFeedService); // priceFeedService); + + offerBookService.addOffer(offer, () -> log.info("offer removed"), (err) -> log.error("Error removing offer: " + err)); + } + + public WalletDetails getWalletDetails() { + Wallet wallet = walletService.getWallet(); + if (wallet == null) { + return null; + } + Coin availableBalance = wallet.getBalance(Wallet.BalanceType.AVAILABLE); + Coin reservedBalance = wallet.getBalance(Wallet.BalanceType.ESTIMATED_SPENDABLE); + return new WalletDetails(availableBalance.toPlainString(), reservedBalance.toPlainString()); + } + + public WalletTransactions getWalletTransactions(long start, long end, long limit) { + boolean includeDeadTransactions = false; + Set transactions = walletService.getWallet().getTransactions(includeDeadTransactions); + WalletTransactions walletTransactions = new WalletTransactions(); + List transactionList = walletTransactions.getTransactions(); + + for (Transaction t : transactions) { +// transactionList.add(new io.bitsquare.api.api.WalletTransaction(t.getValue(walletService.getWallet().getTransactionsByTime()))) + } + return null; + } + + public List getWalletAddresses() { + return user.getPaymentAccounts().stream() + .filter(paymentAccount -> paymentAccount instanceof CryptoCurrencyAccount) + .map(paymentAccount -> (CryptoCurrencyAccount) paymentAccount) + .map(paymentAccount -> new WalletAddress(((CryptoCurrencyAccount) paymentAccount).getId(), paymentAccount.getPaymentMethod().toString(), ((CryptoCurrencyAccount) paymentAccount).getAddress())) + .collect(Collectors.toList()); } } diff --git a/api/src/main/java/io/bitsquare/api/api/Account.java b/api/src/main/java/io/bitsquare/api/api/Account.java index 0111c3feb6..e0b6e57ca8 100644 --- a/api/src/main/java/io/bitsquare/api/api/Account.java +++ b/api/src/main/java/io/bitsquare/api/api/Account.java @@ -5,6 +5,7 @@ import com.fasterxml.jackson.annotation.JsonProperty; import io.bitsquare.locale.Country; import io.bitsquare.locale.TradeCurrency; import io.bitsquare.payment.PaymentAccount; +import lombok.Data; import org.springframework.util.CollectionUtils; import java.util.List; @@ -64,9 +65,10 @@ import java.util.stream.Collectors; * ] */ @JsonInclude(JsonInclude.Include.NON_EMPTY) +@Data public class Account { @JsonProperty - String account_id; + public String account_id; @JsonProperty long created; @JsonProperty diff --git a/api/src/main/java/io/bitsquare/api/api/WalletAddress.java b/api/src/main/java/io/bitsquare/api/api/WalletAddress.java new file mode 100644 index 0000000000..828e98ffe0 --- /dev/null +++ b/api/src/main/java/io/bitsquare/api/api/WalletAddress.java @@ -0,0 +1,14 @@ +package io.bitsquare.api.api; + +import com.fasterxml.jackson.annotation.JsonProperty; +import lombok.AllArgsConstructor; + +@AllArgsConstructor +public class WalletAddress { + @JsonProperty + private String id; + @JsonProperty + private String paymentMethod; + @JsonProperty + private String address; +} diff --git a/api/src/main/java/io/bitsquare/api/api/WalletDetails.java b/api/src/main/java/io/bitsquare/api/api/WalletDetails.java index 4fd422028d..13da4c2d86 100644 --- a/api/src/main/java/io/bitsquare/api/api/WalletDetails.java +++ b/api/src/main/java/io/bitsquare/api/api/WalletDetails.java @@ -7,9 +7,9 @@ import lombok.Setter; @AllArgsConstructor public class WalletDetails { @JsonProperty - private long available_balance; + private String available_balance; @JsonProperty - private long reserved_balance; + private String reserved_balance; // @JsonProperty // private long locked_balance; } diff --git a/api/src/main/java/io/bitsquare/api/app/Api.java b/api/src/main/java/io/bitsquare/api/app/Api.java index b5a9d946b6..b588c75585 100644 --- a/api/src/main/java/io/bitsquare/api/app/Api.java +++ b/api/src/main/java/io/bitsquare/api/app/Api.java @@ -38,8 +38,7 @@ public class Api { private final WalletService walletService; private final ApiModule apiModule; private final User user; - - private P2PService p2pService; + private final P2PService p2pService; public static void setEnvironment(Environment env) { Api.env = env; diff --git a/api/src/main/java/io/bitsquare/api/service/ApiResource.java b/api/src/main/java/io/bitsquare/api/service/ApiResource.java index 7dc91b587c..9a627b90b0 100644 --- a/api/src/main/java/io/bitsquare/api/service/ApiResource.java +++ b/api/src/main/java/io/bitsquare/api/service/ApiResource.java @@ -3,7 +3,6 @@ package io.bitsquare.api.service; import com.codahale.metrics.annotation.Timed; import io.bitsquare.api.BitsquareProxy; import io.bitsquare.api.api.*; -import io.bitsquare.trade.offer.OfferBookService; import javax.ws.rs.*; import javax.ws.rs.core.MediaType; @@ -22,7 +21,7 @@ public class ApiResource { private final MarketList marketList; private final BitsquareProxy bitsquareProxy; // "0x7fffffff"; - private static final String STRING_END_MAX_VALUE = "2147483647"; + private static final String STRING_END_INT_MAX_VALUE = "2147483647"; public ApiResource(String template, String defaultName, BitsquareProxy bitsquareProxy) { this.template = template; @@ -86,7 +85,7 @@ public class ApiResource { } - @GET + @DELETE @Timed @Path("/offer_detail") public OfferData offerDetail(@QueryParam("offer_id") String offerId) { @@ -140,7 +139,7 @@ public class ApiResource { @QueryParam("min_amount") BigDecimal minAmount, @DefaultValue("fixed") @QueryParam("price_type") String fixed, @DefaultValue("100") @QueryParam("price") String price) { - return; + bitsquareProxy.offerMake(market, accountId, direction, amount, minAmount, fixed, price); } /** @@ -187,6 +186,22 @@ public class ApiResource { return bitsquareProxy.getWalletDetails(); } + /** + * param type desc required values default + * status string filter by wether each address has a non-zero balance or not funded | unfunded | both both + * start int starting index, zero based 0 + * limit int max number of addresses to return. 100 + * @return + */ + @GET + @Timed + @Path("/wallet_addresses") + public List walletAddresses(@DefaultValue("BOTH") @QueryParam("status") String status, + @DefaultValue("0") @QueryParam("start") Integer start, + @DefaultValue("100") @QueryParam("limit") Integer limit) { + return bitsquareProxy.getWalletAddresses(); + } + /** * wallet_tx_list @@ -211,7 +226,7 @@ public class ApiResource { @Timed @Path("/wallet_tx_list") public WalletTransactions walletTransactionList(@DefaultValue("0") @QueryParam("start") Integer start, - @DefaultValue(STRING_END_MAX_VALUE) @QueryParam("end") Integer end, + @DefaultValue(STRING_END_INT_MAX_VALUE) @QueryParam("end") Integer end, @DefaultValue("100") @QueryParam("start") Integer limit ) { // return bitsquareProxy.getWalletTransactions(start, end, limit); diff --git a/api/src/main/java/io/bitsquare/api/service/DropwizardApplication.java b/api/src/main/java/io/bitsquare/api/service/DropwizardApplication.java index 585e58c774..ff209ea2bb 100644 --- a/api/src/main/java/io/bitsquare/api/service/DropwizardApplication.java +++ b/api/src/main/java/io/bitsquare/api/service/DropwizardApplication.java @@ -3,6 +3,9 @@ package io.bitsquare.api.service; import com.google.inject.Inject; import io.bitsquare.api.BitsquareProxy; import io.bitsquare.btc.WalletService; +import io.bitsquare.btc.pricefeed.PriceFeedService; +import io.bitsquare.common.crypto.KeyRing; +import io.bitsquare.p2p.P2PService; import io.bitsquare.trade.TradeManager; import io.bitsquare.trade.offer.OfferBookService; import io.bitsquare.user.User; @@ -21,6 +24,15 @@ public class DropwizardApplication extends Application { @Inject OfferBookService offerBookService; + @Inject + P2PService p2PService; + + @Inject + KeyRing keyRing; + + @Inject + PriceFeedService priceFeedService; + @Inject User user; @@ -43,7 +55,8 @@ public class DropwizardApplication extends Application { public void run(ApiConfiguration configuration, Environment environment) { // environment.getObjectMapper().configure(SerializationFeature.WRAP_ROOT_VALUE, false); - BitsquareProxy bitsquareProxy = new BitsquareProxy(walletService, tradeManager, offerBookService, user); + BitsquareProxy bitsquareProxy = new BitsquareProxy(walletService, tradeManager, offerBookService, + p2PService, keyRing, priceFeedService, user); final ApiResource resource = new ApiResource( configuration.getTemplate(), configuration.getDefaultName(), diff --git a/core/pom.xml b/core/pom.xml index 905f127e13..1394b27640 100755 --- a/core/pom.xml +++ b/core/pom.xml @@ -45,7 +45,6 @@ network ${project.parent.version} - net.sf.jopt-simple jopt-simple diff --git a/core/src/main/java/io/bitsquare/arbitration/ArbitratorManager.java b/core/src/main/java/io/bitsquare/arbitration/ArbitratorManager.java index bb0f24847e..2a5c901b0a 100644 --- a/core/src/main/java/io/bitsquare/arbitration/ArbitratorManager.java +++ b/core/src/main/java/io/bitsquare/arbitration/ArbitratorManager.java @@ -84,7 +84,8 @@ public class ArbitratorManager { "03df837a3a0f3d858e82f3356b71d1285327f101f7c10b404abed2abc1c94e7169", "0203a90fb2ab698e524a5286f317a183a84327b8f8c3f7fa4a98fec9e1cefd6b72", "023c99cc073b851c892d8c43329ca3beb5d2213ee87111af49884e3ce66cbd5ba5", - "0274f772a98d23e7a0251ab30d7121897b5aebd11a2f1e45ab654aa57503173245" + "0274f772a98d23e7a0251ab30d7121897b5aebd11a2f1e45ab654aa57503173245", + "027a381b5333a56e1cc3d90d3a7d07f26509adf7029ed06fc997c656621f8da1ee" )); diff --git a/gui/src/main/java/io/bitsquare/app/BitsquareApp.java b/gui/src/main/java/io/bitsquare/app/BitsquareApp.java index af3235d60a..a833de798a 100644 --- a/gui/src/main/java/io/bitsquare/app/BitsquareApp.java +++ b/gui/src/main/java/io/bitsquare/app/BitsquareApp.java @@ -148,7 +148,7 @@ public class BitsquareApp extends Application { bitsquareAppModule = new BitsquareAppModule(env, primaryStage); injector = Guice.createInjector(bitsquareAppModule); injector.getInstance(InjectorViewFactory.class).setInjector(injector); - injector.getInstance(DropwizardApplication.class).run("server", "bitsquare-api.yml"); +// injector.getInstance(DropwizardApplication.class).run("server", "bitsquare-api.yml"); Version.setBtcNetworkId(injector.getInstance(BitsquareEnvironment.class).getBitcoinNetwork().ordinal()); diff --git a/gui/src/main/java/io/bitsquare/app/BitsquareAppModule.java b/gui/src/main/java/io/bitsquare/app/BitsquareAppModule.java index 9cf1a4bce0..d0309d0199 100644 --- a/gui/src/main/java/io/bitsquare/app/BitsquareAppModule.java +++ b/gui/src/main/java/io/bitsquare/app/BitsquareAppModule.java @@ -83,7 +83,7 @@ class BitsquareAppModule extends AppModule { install(guiModule()); install(alertModule()); install(filterModule()); - install(apiModule()); +// install(apiModule()); } private TradeModule tradeModule() { diff --git a/pom.xml b/pom.xml index 0c49dd09a7..cce38037a2 100644 --- a/pom.xml +++ b/pom.xml @@ -155,14 +155,13 @@ org.projectlombok lombok 1.16.10 - provided org.slf4j slf4j-api - 1.7.12 + 1.7.21 ch.qos.logback