资讯专栏INFORMATION COLUMN

用Java在去中心化交易所OceanOne上挂单买卖任意ERC20 token

honmaple / 659人阅读

摘要:在上一课中,我们介绍了如何在交易比特币。支持交易任何上的,包括所有的和,不需要任何手续和费用,直接挂单即可。下面介绍如何将将一个挂上交易此处我们用一个叫做的为例。

在上一课中,我们介绍了如何在OceanOne交易比特币。OceanOne支持交易任何Mixin Network上的token,包括所有的ERC20和EOS token,不需要任何手续和费用,直接挂单即可。下面介绍如何将将一个ERC20 token挂上OceanOne交易!

此处我们用一个叫做Benz的ERC20 token为例。这个token已经被充值进Mixin Network,你可以在区块链浏览器看到这个token在Mixin Network内部的总数和交易

预备知识:

先将Ben币存入你的钱包,然后使用getAssets API读取它的UUID.

取得该币的UUID

调用 getAssets API 会返回json数据, 如:

asset_id 币的UUID.

public_key 该币的当前钱包的地址.

symbol 币的名称. 如: Benz.

</>复制代码

  1. if ( input.equals("aw") ) {
  2. MixinAPI mixinApiUser = generateAPI_FromCSV();
  3. JsonArray assets = mixinApiUser.getAssets();
  4. System.out.println("------------------------All Assets Information---------------------------");
  5. System.out.println(assets);
  6. assets.forEach((element) -> {
  7. JsonObject jsonObj = element.getAsJsonObject();
  8. System.out.println(jsonObj.get("asset_id").getAsString() + " " +
  9. jsonObj.get("symbol").getAsString() + " " +
  10. jsonObj.get("public_key").getAsString() + " " +
  11. jsonObj.get("balance").getAsString() );
  12. });
  13. System.out.println("-----------------------------------------------------------------------");
  14. }

调用 getAssets API的完整输出如下:

</>复制代码

  1. Make your choose(eg: q for Exit!): aw
  2. aw
  3. ------------------------All Assets Information---------------------------
  4. [{"type":"asset","asset_id":"2b9c216c-ef60-398d-a42a-eba1b298581d","chain_id":"43d61dcd-e413-450d-80b8-101d5e903357","symbol":"Benz","name":"Benz coin","icon_url":"https://images.mixin.one/yH_I5b0GiV2zDmvrXRyr3bK5xusjfy5q7FX3lw3mM2Ryx4Dfuj6Xcw8SHNRnDKm7ZVE3_LvpKlLdcLrlFQUBhds=s128",
  5. "balance":"1000","public_key":"0x62F20013472a72b8Fe3f9a99f36e5802E6e93c15","account_name":"",
  6. "account_tag":"","price_btc":"0","price_usd":"0","change_btc":"0","change_usd":"0",
  7. "asset_key":"0xc409b5696c5f9612e194a582e14c8cd41ecdbc67","confirmations":100,
  8. "capitalization":0},{"type":"asset","asset_id":"6cfe566e-4aad-470b-8c9a-2fd35b49c68d",
  9. "chain_id":"6cfe566e-4aad-470b-8c9a-2fd35b49c68d","symbol":"EOS","name":"EOS",
  10. "icon_url":"https://images.mixin.one/a5dtG-IAg2IO0Zm4HxqJoQjfz-5nf1HWZ0teCyOnReMd3pmB8oEdSAXWvFHt2AJkJj5YgfyceTACjGmXnI-VyRo=s128","balance":"0","public_key":"","account_name":"eoswithmixin","account_tag":"889ed66a1059bc3dab60e2ee44d0f993",
  11. "price_btc":"0.0008953","price_usd":"4.73591781","change_btc":"-0.004161988128557199","change_usd":"0.00012182287348895748",
  12. "asset_key":"eosio.token:EOS","confirmations":64,"capitalization":0},
  13. {"type":"asset","asset_id":"965e5c6e-434c-3fa9-b780-c50f43cd955c","chain_id":"43d61dcd-e413-450d-80b8-101d5e903357","symbol":"CNB","name":"Chui Niu Bi",
  14. "icon_url":"https://images.mixin.one/0sQY63dDMkWTURkJVjowWY6Le4ICjAFuu3ANVyZA4uI3UdkbuOT5fjJUT82ArNYmZvVcxDXyNjxoOv0TAYbQTNKS=s128",
  15. "balance":"0.99984","public_key":"0x62F20013472a72b8Fe3f9a99f36e5802E6e93c15","account_name":"",
  16. "account_tag":"","price_btc":"0","price_usd":"0","change_btc":"0","change_usd":"0",
  17. "asset_key":"0xec2a0550a2e4da2a027b3fc06f70ba15a94a6dac","confirmations":100,
  18. "capitalization":0},{"type":"asset","asset_id":"c6d0c728-2624-429b-8e0d-d9d19b6592fa",
  19. "chain_id":"c6d0c728-2624-429b-8e0d-d9d19b6592fa","symbol":"BTC","name":"Bitcoin",
  20. "icon_url":"https://images.mixin.one/HvYGJsV5TGeZ-X9Ek3FEQohQZ3fE9LBEBGcOcn4c4BNHovP4fW4YB97Dg5LcXoQ1hUjMEgjbl1DPlKg1TW7kK6XP=s128","balance":"0",
  21. "public_key":"15RNBb5GzoXWRoEMT5MJL3pqzSjdPoXf6J","account_name":"","account_tag":"",
  22. "price_btc":"1","price_usd":"5289.7409549","change_btc":"0","change_usd":"0.004160319338628907",
  23. "asset_key":"c6d0c728-2624-429b-8e0d-d9d19b6592fa","confirmations":6,"capitalization":0}]
  24. 2b9c216c-ef60-398d-a42a-eba1b298581d Benz 0x62F20013472a72b8Fe3f9a99f36e5802E6e93c15 1000
  25. 6cfe566e-4aad-470b-8c9a-2fd35b49c68d EOS 0
  26. 965e5c6e-434c-3fa9-b780-c50f43cd955c CNB 0x62F20013472a72b8Fe3f9a99f36e5802E6e93c15 0.99984
  27. c6d0c728-2624-429b-8e0d-d9d19b6592fa BTC 15RNBb5GzoXWRoEMT5MJL3pqzSjdPoXf6J 0
限价挂单

挂限价买单 低于或者等于市场价的单.

挂限价卖单 高于或者是等于市场价的单.

OceanOne支持三种基类价格: USDT, XIN, BTC, 即: Benz/USDT, Benz/XIN, Benz/BTC, 这儿示范Benz/USDT.

限价挂卖单.

新币挂单后,需要等一分钟左右,等OceanOne来初始化新币的相关数据.

</>复制代码

  1. if ( subinput.equals("x2") ) {
  2. MakeTheSellOrder(ERC20_BENZ,USDT_ASSET_ID);
  3. }
  4. public static void MakeTheSellOrder(String AssetID, String BaseAssetID) {
  5. System.out.print(String.format("Please input the %s price of %s: ",AssetID,BaseAssetID));
  6. String pinput = System.console().readLine();
  7. System.out.println(pinput);
  8. System.out.print(String.format("Please input the %s amount: ",AssetID));
  9. String aminput = System.console().readLine();
  10. System.out.println(aminput);
  11. float amountf = Float.valueOf(aminput.trim()).floatValue();
  12. String OrderMemo = GenerateOrderMemo("A",BaseAssetID,pinput);
  13. MixinAPI mixinApiUser = generateAPI_FromCSV();
  14. // UUID usdtUUID = UUID.fromString(USDT_ASSET_ID);
  15. // String memoTarget = encodeUUID(usdtUUID);
  16. System.out.println("------------------Ocean.one-EXCHANGE----------------------------");
  17. System.out.println(OrderMemo);
  18. JsonObject asset = mixinApiUser.getAsset(AssetID);
  19. System.out.println(asset);
  20. System.out.println(asset.get("balance").getAsFloat());
  21. if ( asset.get("balance").getAsFloat() > 0 && asset.get("balance").getAsFloat() >= amountf ) {
  22. JsonObject transInfo = mixinApiUser.transfer(AssetID, OCEANONE_BOT,
  23. aminput,
  24. OrderMemo);
  25. System.out.println(String.format("--------------%s Transfer To EXCHANGE Information---------",AssetID));
  26. System.out.println(transInfo);
  27. System.out.println(String.format("---Order is %s: ------",transInfo.get("trace_id").getAsString()));
  28. } else System.out.println(String.format("----------------Not enough %s--------------------------",AssetID));
  29. }
限价挂买单.

新币挂单后,需要等一分钟左右,等OceanOne来初始化新币的相关数据.

</>复制代码

  1. if ( subinput.equals("x1") ) {
  2. MakeTheBuyOrder(ERC20_BENZ,USDT_ASSET_ID);
  3. }
  4. public static void MakeTheBuyOrder(String AssetID, String BaseAssetID) {
  5. System.out.print(String.format("Please input the %s price of %s: ",AssetID,BaseAssetID));
  6. String pinput = System.console().readLine();
  7. System.out.println(pinput);
  8. System.out.print(String.format("Please input the %s amount: ",BaseAssetID));
  9. String aminput = System.console().readLine();
  10. System.out.println(aminput);
  11. float amountf = Float.valueOf(aminput.trim()).floatValue();
  12. String OrderMemo = GenerateOrderMemo("B",AssetID,pinput);
  13. MixinAPI mixinApiUser = generateAPI_FromCSV();
  14. // UUID usdtUUID = UUID.fromString(USDT_ASSET_ID);
  15. // String memoTarget = encodeUUID(usdtUUID);
  16. System.out.println("------------------Ocean.one--EXCHANGE----------------------------");
  17. System.out.println(OrderMemo);
  18. JsonObject asset = mixinApiUser.getAsset(BaseAssetID);
  19. System.out.println(asset);
  20. System.out.println(asset.get("balance").getAsFloat());
  21. if ( asset.get("balance").getAsFloat() > 0 && asset.get("balance").getAsFloat() >= amountf ) {
  22. JsonObject transInfo = mixinApiUser.transfer(BaseAssetID, OCEANONE_BOT,
  23. aminput,
  24. OrderMemo);
  25. System.out.println(String.format("--------------%s Transfer To EXCHANGE Information---------",BaseAssetID));
  26. System.out.println(transInfo);
  27. System.out.println(String.format("---Order is %s: ------",transInfo.get("trace_id").getAsString()));
  28. } else System.out.println(String.format("----------------Not enough %s--------------------------",BaseAssetID));
  29. }
读取币的价格列表

读取币的价格列表,来确认挂单是否成功!

</>复制代码

  1. if ( subinput.equals("x") ) {
  2. FetchOceanMarketInfos(ERC20_BENZ,XIN_ASSET_ID);
  3. }
  4. private static void FetchOceanMarketInfos(String targetAssetID, String baseAssetID) {
  5. OkHttpClient client = new OkHttpClient();
  6. String baseUrl = "https://events.ocean.one/markets/%s-%s/book ";
  7. String fullUrl = String.format(baseUrl,targetAssetID,baseAssetID);
  8. // String fullUrl = baseUrl + url;
  9. System.out.println(fullUrl);
  10. Request request = new Request.Builder()
  11. .url(fullUrl)
  12. .build();
  13. try {
  14. Response response = client.newCall(request).execute();
  15. if (!response.isSuccessful()) {
  16. throw new IOException("Unexpected code " + response);
  17. }
  18. String res = response.body().string();
  19. // System.out.println(res);
  20. JsonParser parser = new JsonParser();
  21. JsonElement jsonTree = parser.parse(res);
  22. JsonObject orders;
  23. orders = jsonTree.getAsJsonObject();
  24. JsonArray asksOrders = orders.get("data").getAsJsonObject().
  25. get("data").getAsJsonObject().
  26. get("asks").getAsJsonArray();
  27. JsonArray bidsOrders = orders.get("data").getAsJsonObject().
  28. get("data").getAsJsonObject().
  29. get("bids").getAsJsonArray();
  30. // System.out.println(orders.get("data").getAsJsonObject().get("data").getAsJsonObject().get("bids").getAsJsonArray());
  31. System.out.println("--Side--Price--Amount--Funds---");
  32. asksOrders.forEach((element) -> {
  33. JsonObject jsonObj = element.getAsJsonObject();
  34. System.out.println(jsonObj.get("side").getAsString() + " " +
  35. jsonObj.get("price").getAsString() + " " +
  36. jsonObj.get("amount").getAsString() + " " +
  37. jsonObj.get("funds").getAsString() );
  38. });
  39. bidsOrders.forEach((element) -> {
  40. JsonObject jsonObj = element.getAsJsonObject();
  41. System.out.println(jsonObj.get("side").getAsString() + " " +
  42. jsonObj.get("price").getAsString() + " " +
  43. jsonObj.get("amount").getAsString() + " " +
  44. jsonObj.get("funds").getAsString() );
  45. });
  46. System.out.println("----endo--of--btc/usdt----");
  47. return;
  48. } catch(Exception e) { e.printStackTrace(); }
  49. return;
  50. }
ERC20相关的操作指令

Commands list of this source code:

trb:Transfer ERC20 from Bot to Wallet

trm:Transfer ERC20 from Wallet to Master

o: Ocean.One Exchange

Make your choose(eg: q for Exit!):

x: Orders-Book of ERC20/USDT

x1: Buy ERC20 pay USDT

x2: Sell ERC20 get USDT

c: Cancel the order

q: Exit

完整的代码

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/24669.html

相关文章

  • Ruby在去中心交易OceanOne挂单买卖任意ERC20 token

    摘要:在上一课中,我们介绍了如何在交易比特币。支持交易任何上的,包括所有的和,不需要任何手续和费用,直接挂单即可。下面介绍如何将将一个挂上交易在掌握了之后,就可以把任何在上买卖。此处我们用一个叫做的为例。 showImg(https://segmentfault.com/img/remote/1460000019329775?w=1201&h=660); 在上一课中,我们介绍了如何在Ocea...

    用户83 评论0 收藏0
  • PHP在去中心交易OceanOne挂单买卖任意ERC20 token

    摘要:在上一课中,我们介绍了如何在交易比特币。支持交易任何上的,包括所有的和,不需要任何手续和费用,直接挂单即可。下面介绍如何将将一个挂上交易此处我们用一个叫做的为例。 showImg(https://segmentfault.com/img/remote/1460000018419614?w=1200&h=659); 在上一课中,我们介绍了如何在OceanOne交易比特币。OceanOne...

    DevWiki 评论0 收藏0
  • PHP在去中心交易OceanOne挂单买卖任意ERC20 token

    摘要:在上一课中,我们介绍了如何在交易比特币。支持交易任何上的,包括所有的和,不需要任何手续和费用,直接挂单即可。下面介绍如何将将一个挂上交易此处我们用一个叫做的为例。 showImg(https://segmentfault.com/img/remote/1460000018419614?w=1200&h=659); 在上一课中,我们介绍了如何在OceanOne交易比特币。OceanOne...

    luckyw 评论0 收藏0
  • 通过 Go 在去中心交易OceanOne挂单买卖任意ERC20 token

    摘要:在上一课中,我们介绍了如何在交易比特币。支持交易任何上的,包括所有的和,不需要任何手续和费用,直接挂单即可。下面介绍如何将将一个挂上交易在掌握了之后,就可以把任何在上买卖。 showImg(https://segmentfault.com/img/remote/1460000018378805?w=1200&h=659); 在上一课中,我们介绍了如何在OceanOne交易比特币。Oce...

    ivydom 评论0 收藏0
  • PHP比特币开发教程:在去中心交易OceanOne挂单买卖比特币

    摘要:方案二挂单交易所是基于的去中心化交易所,它性能一流。完整的步骤如下检查比特币或的余额,钱包地址。比特币的到帐时间是个区块的高度,约分钟。 showImg(https://segmentfault.com/img/remote/1460000018419614?w=1200&h=659);上一章介绍了Exincore,你可以1秒完成资产的市价买卖。如果你想限定价格买卖,或者买卖一些exi...

    only_do 评论0 收藏0

发表评论

0条评论

最新活动
阅读需要支付1元查看
<