Nodejsを通じてBitcoinを売買する.


前の章では、Exincoreを紹介しました.資産の時価売買は1秒でできます.価格を限定して販売したいなら、あるいはいくつかのexincoreがサポートしていない資産を売買したいなら、Oceanneが必要です.
方案二:注文Ocean.One取引所
Ocean.oneはMixin Networkに基づいて中心化取引所に行くので、その性能は一流です.OceanOneで任意の資産を取引してもいいです.お宅の貨幣をOceanOneに転送して、取引情報を取引のmemoに書いてください.OceanOneは市場に取引需要をリストします.取引が成功したら、目標貨幣をあなたのMixinNetworkに振り込みます.三つの特徴と利点があります.
  • Oceanneに登録する必要がない
  • は両替所
  • に預ける必要がありません.
  • は、すべてのMixin Networkで振替可能な資産、すべてのERC 20 EOSトークンをサポートします.
  • 予備知識:
    まずロボットを作る必要があります.
    依存パッケージのインストール
    私たちはmsgpack 5 and mixin-node-clientに頼る必要があります.第四章はすでに紹介しました.先にインストールしたはずです.
    Mixin Networkにチャージして、その残高を読み出します.
    ここでは、USDTでBTCを購入するか、またはBTCでUSDTを購入するかを実証する.取引前に財布の住所を確認してください.完全な手順は以下の通りです.
  • は、ビットコインまたはUSDTの残高、ウォレットアドレスをチェックする.そして財布の住所をメモします.
  • は第三者取引所またはあなたの冷たい財布の中から上記の財布の住所に貨幣を入れます.
  • もう一度お金の残高を確認して、お会計を見てもいいですか?(ビットコインの着帳時間は5ブロックの高さで、約100分)
  • ビットコインとUSDTのチャージアドレスは同じです.
    if ( args.type === TYPE_WALLET_ASSETS_INFO ) {
      const assetsInfo = await newUserClient.getUserAssets();
      console.log("-AssetID--Asset--Balance--public_key--");
      assetsInfo.forEach(function(element) {
         console.log(element.asset_id + "  " +
                     element.symbol + "  " +
                     element.balance + "  " +
                     element.public_key + " " +
                     element.account_name + "  " +
                     element.account_tag
                   );
       });
      // console.log(assetsInfo);
    }
    Ocean.oneの市場価格情報を取得します.
    Ocean.one市場の価格情報はどうやって調べられますか?まず、お宅の取引の基礎貨幣は何ですか?ビットコインを買いたいなら、USDTを売ってもいいです.基礎通貨はUSDTです.USDTを買いたいなら、ビットコインを売ると、基本通貨はビットコインです.
    if ( args.type === TYPE_OO_FETCH_BTC_USDT ) {
      FetchOceanOneMarketInfos(BTC_ASSET_ID, USDT_ASSET_ID);
    }
    function FetchOceanOneMarketInfos(asset_id, base_asset) {
      var instance = axios.create({
      baseURL: "https://events.ocean.one/markets/" + asset_id + "-" + base_asset + "/book",
      timeout: 3000,
      headers: {'X-Custom-Header': 'foobar'}
      });
      instance.get()
      .then(function(response) {
        console.log("--Price--Amount--Funds--Side")
        response.data.data.data.asks.forEach(function(element) {
           console.log(element.price + "     " +
                       element.amount + "     " +
                       element.funds + "     " +
                       element.side);
         });
         response.data.data.data.bids.forEach(function(element) {
            console.log(element.price + "     " +
                        element.amount + "     " +
                        element.funds + "     " +
                        element.side);
          });
        // console.log(response.data.data.data.asks);
      });
    }
    取引前に、Memoを作成します.
    第二章では、Mixin NetworkのNodejsビットコイン開発教程に基づいて、ロボットはビットコインを受け取って、すぐにユーザーに返却します.私達は振替を学んだことがあります.ここではOcean.oneにどうやって教えますか?
  • Side方向、「B」または「A」、「B」は購入、「A」は販売.
  • AsssetUuidターゲット仮想アセットのUUID.
  • Price価格は操作方向が「B」なら、価格はAsetUIDの価格です.操作方向が「B」であれば、価格はOcean.one貨幣に渡す価格です.
  • function GenerateOceanMemo(targetAsset,side,price) {
      const bytes = Buffer.from(
        targetAsset.replace(/-/g, ''),
        'hex'
      );
      const memo = msgpack
        .encode({
          S: side,
          A: bytes,
          P: price,
          T: "L",
        })
        .toString('base64');
      console.log(memo);
      return memo;
    }
    XINを購入するコードは以下の通りです.
    else if ( args.type === TYPE_OO_BUY_XIN_USDT ) {
      var prompts = [
        {
          name: 'price',
          type: 'input',
          message: "Input the price of XIN/USDT: ",
        },
      ];
      price = await inquirer.prompt(prompts);
      var prompts = [
        {
          name: 'amount',
          type: 'input',
          message: "Input the amount of USDT: ",
        },
      ];
      amount = await inquirer.prompt(prompts);
      console.log(price);
      console.log(amount);
      const memo = GenerateOceanMemo(XIN_ASSET_ID,"B",price.price);
      const assetInfo = await newUserClient.getUserAsset(USDT_ASSET_ID);
      console.log("The Wallet 's USDT balance is ", assetInfo.balance);
      if ( assetInfo.balance >= amount.amount && assetInfo.balance >= 1 ) {
        const Obj = {
          assetId: USDT_ASSET_ID,
          recipientId: OCEANONE_BOT,
            traceId: newUserClient.getUUID(),
            amount: amount.amount,
            memo: memo,
          }
          const transInfo = await newUserClient.transferFromBot(Obj);
          console.log(transInfo);
          console.log("The Order id is " + transInfo.trace_id + " It is needed to cancel the order!");
      } else {
        console.log("Not enough USDT!");
      }
    }
    XINの販売例
    転売予定のXINはOcean.oneに、あなたが戻ってくる目標の仮想資産のUUUIDをmemoに入れます.
    else if ( args.type === TYPE_OO_SELL_XIN_USDT ) {
      var prompts = [
        {
          name: 'price',
          type: 'input',
          message: "Input the price of XIN/USDT: ",
        },
      ];
      price = await inquirer.prompt(prompts);
      var prompts = [
        {
          name: 'amount',
          type: 'input',
          message: "Input the amount of XIN: ",
        },
      ];
      amount = await inquirer.prompt(prompts);
      console.log(price);
      console.log(amount);
      const memo = GenerateOceanMemo(XIN_ASSET_ID,"A",price.price);
      const assetInfo = await newUserClient.getUserAsset(BTC_ASSET_ID);
      console.log("The Wallet 's USDT balance is ", assetInfo.balance);
      if ( assetInfo.balance >= amount.amount ) {
        const Obj = {
          assetId: XIN_ASSET_ID,
          recipientId: OCEANONE_BOT,
            traceId: newUserClient.getUUID(),
            amount: amount.amount,
            memo: memo,
          }
          const transInfo = await newUserClient.transferFromBot(Obj);
          console.log(transInfo);
          console.log("The Order id is " + transInfo.trace_id + " It is needed to cancel the order!");
      } else {
        console.log("Not enough XIN!");
      }
    }
    成功した注文は以下の通りです.
    ? Input the price of XIN/USDT:  160
    ? Input the amount of USDT:  1
    { price: '160' }
    { amount: '1' }
    hKFToUKhQcQQgVsLGidkNzaPqkLWlPpiCqFQozE2MKFUoUw=
    The Wallet 's USDT balance is  1.995101
    {
      type: 'transfer',
      snapshot_id: '14f144e4-0bd5-43aa-a7d4-70e7d5c695b0',
      opponent_id: 'aaff5bef-42fb-4c9f-90e0-29f69176b7d4',
      asset_id: '815b0b1a-2764-3736-8faa-42d694fa620a',
      amount: '-1',
      trace_id: 'd34f881b-4460-42d3-af91-551f97b20f74',
      memo: 'hKFToUKhQcQQgVsLGidkNzaPqkLWlPpiCqFQozE2MKFUoUw=',
      created_at: '2019-05-10T07:18:21.130357698Z',
      counter_user_id: 'aaff5bef-42fb-4c9f-90e0-29f69176b7d4'
    }
    The Order id is d34f881b-4460-42d3-af91-551f97b20f74 It is needed to cancel the order!
    注文をキャンセルする
    Ocean.oneがトレイをidは注文書として、上の例のように、d 34 f 881 b-460-42 d 3-af 91-515 f 20 f 74は注文番号です.彼を使って注文をキャンセルします.
    else if ( args.type === TYPE_OO_CANCEL_ORDER ) {
      const prompts = [
        {
          name: 'order_id',
          type: 'input',
          message: "Input iso8601 datetime: ",
        },
      ];
      answers = await inquirer.prompt(prompts);
      const memo = GenerateOceanCancelMemo(answers.order_id);
      const assetInfo = await newUserClient.getUserAsset(CNB_ASSET_ID);
      console.log("The Wallet 's USDT balance is ", assetInfo.balance);
      if ( assetInfo.balance >= 0.00000001 ) {
        const Obj = {
          assetId: CNB_ASSET_ID,
          recipientId: OCEANONE_BOT,
            traceId: newUserClient.getUUID(),
            amount: "0.00000001",
            memo: memo,
          }
          const transInfo = await newUserClient.transferFromBot(Obj);
          console.log(transInfo);
      } else {
        console.log("Not enough CNB!");
      }
    }
    資産残高を読み取って、帳簿状況を確認します.
    const assetsInfo = await newUserClient.getUserAssets();
    console.log("-AssetID--Asset--Balance--public_key--");
    assetsInfo.forEach(function(element) {
       console.log(element.asset_id + "  " +
                   element.symbol + "  " +
                   element.balance + "  " +
                   element.public_key + " " +
                   element.account_name + "  " +
                   element.account_tag
                 );
     });
    ソースコードの実行
    コンパイル実行で取引が開始されます.
    ソースコードの実行
    コンパイル実行で取引が開始されます.
  • [x]node bitcoin-wallt-nodejs.js実行.
  • 本コード実行時のコマンドリスト:
    Make your chose(select the uuid for open the specified wallt):0 b 10717 b-1 aed-344-9 ed-5 ab 94756262761 You select the:0 b 10717 b-1 a-944 a-5 a 946262626276 ed-1366Make your chose(Use arrow keys)
  • ❯aw:Read Wallet All Assets Information
  • ab:Read Bot All Assets Information
  • --------OCean.One------------------
  • 19:Fetch BTC/USDT order book
  • 20:Fetch XIN/USDT order book
  • 21:Fetch ERC 20/USDT order book
  • :Sell BTC/USDT
  • :セルXIN/USDT
  • 24:Sell ERC 20/USDT
  • :Buy BTC/USDT
  • 26:Buy XIN/USDT
  • :Buy ERC 20/USDT
  • :Cacel the order
  • Exit
  • 完全コード