当前位置: 首页 > 软件库 > Web3 > 开源货币/比特币 >

binance

授权协议 MIT License
开发语言 Python
所属分类 Web3、 开源货币/比特币
软件类型 开源软件
地区 不详
投 递 者 东方旭东
操作系统 跨平台
开源组织
适用人群 未知
 软件概览

binance

Node.js connector for the Binance APIs and WebSockets, with TypeScript & browser support.

  • Heavy integration testing with real API calls to support implementation stability.
  • Support REST APIs for Binance Spot, Margin, Isolated Margin & USDM Futures.
    • Automatically manage latency related authentication issues.
    • Strongly typed on most requests and responses.
  • Support Websockets for Binance Spot, Margin, Isolated Margin & USDM Futures.
    • Event driven messaging.
    • Smart websocket persistence
      • Automatically handle silent websocket disconnections through timed heartbeats, including the scheduled 24hr disconnect.
      • Automatically handle listenKey persistence and expiration/refresh.
      • Emit reconnected event when dropped connection is restored.
    • Strongly typed on most websocket events.
    • Optional:
      • Automatic beautification of websocket events (from one-letter keys to descriptive words, and strings with floats to numbers).
      • Automatic beautification of REST responses (parsing numbers in strings to numbers).
  • Proxy support via axios integration.

Installation

npm install binance --save

Examples

Refer to the examples folder for implementation demos.

Issues & Discussion

Documentation

Most methods accept JS objects. These can be populated using parameters specified by Binance's API documentation.

Structure

This project uses typescript. Resources are stored in 3 key structures:

  • src - the whole connector written in typescript
  • lib - the javascript version of the project (compiled from typescript). This should not be edited directly, as it will be overwritten with each release.
  • dist - the packed bundle of the project for use in browser environments.

Usage

Create API credentials at Binance

REST API Clients

There are several REST API modules as there are some differences in each API group.

  1. MainClient for most APIs, including: spot, margin, isolated margin, mining, BLVT, BSwap, Fiat & sub-account management.
  2. USDMClient for USD-M futures APIs.

COIN-M and Vanilla Options connectors are not yet available, though contributions are welcome!

REST Spot/Margin/etc

Start by importing the spot client. API credentials are optiona, though an error is thrown when attempting any private API calls without credentials.

const { MainClient } = require('binance');

const API_KEY = 'xxx';
const API_SECRET = 'yyy';

const client = new MainClient({
  api_key: API_KEY,
  api_secret: API_SECRET,
});

client.getAccountTradeList({ symbol: 'BTCUSDT' })
  .then(result => {
    console.log("getAccountTradeList result: ", result);
  })
  .catch(err => {
    console.error("getAccountTradeList error: ", err);
  });

client.getExchangeInfo()
  .then(result => {
    console.log("getExchangeInfo inverse result: ", result);
  })
  .catch(err => {
    console.error("getExchangeInfo inverse error: ", err);
  });

See spot-client.ts for further information.

REST USD-M Futures

Start by importing the spot client. API credentials are optiona, though an error is thrown when attempting any private API calls without credentials.

const { USDMClient } = require('binance');

const API_KEY = 'xxx';
const API_SECRET = 'yyy';

const client = new USDMClient({
  api_key: API_KEY,
  api_secret: API_SECRET,
});

client.getBalance()
  .then(result => {
    console.log("getBalance result: ", result);
  })
  .catch(err => {
    console.error("getBalance error: ", err);
  });

client.get24hrChangeStatististics()
  .then(result => {
    console.log("get24hrChangeStatististics inverse futures result: ", result);
  })
  .catch(err => {
    console.error("get24hrChangeStatististics inverse futures error: ", err);
  });

See usdm-client.ts for further information.

WebSockets

All websockets are accessible via the shared WebsocketClient. As before, API credentials are optional unless the user data stream is required.

const { WebsocketClient } = require('binance');

const API_KEY = 'xxx';
const API_SECRET = 'yyy';

// optionally override the logger
const logger = {
  ...DefaultLogger,
  silly: (...params) => {},
};

const wsClient = new WebsocketClient({
  api_key: key,
  api_secret: secret,
  beautify: true,
}, logger);

// receive raw events
wsClient.on('message', (data) => {
  console.log('raw message received ', JSON.stringify(data, null, 2));
});

// notification when a connection is opened
wsClient.on('open', (data) => {
  console.log('connection opened open:', data.wsKey, data.ws.target.url);
});

// receive formatted events with beautified keys. Any "known" floats stored in strings as parsed as floats.
wsClient.on('formattedMessage', (data) => {
  console.log('formattedMessage: ', data);
});

// read response to command sent via WS stream (e.g LIST_SUBSCRIPTIONS)
wsClient.on('reply', (data) => {
  console.log('log reply: ', JSON.stringify(data, null, 2));
});

// receive notification when a ws connection is reconnecting automatically
wsClient.on('reconnecting', (data) => {
  console.log('ws automatically reconnecting.... ', data?.wsKey );
});

// receive notification that a reconnection completed successfully (e.g use REST to check for missing data)
wsClient.on('reconnected', (data) => {
  console.log('ws has reconnected ', data?.wsKey );
});

// Call methods to subcribe to as many websockets as you want.
// Each method spawns a new connection, unless a websocket already exists for that particular request topic.
// wsClient.subscribeSpotAggregateTrades(market);
// wsClient.subscribeSpotTrades(market);
// wsClient.subscribeSpotKline(market, interval);
// wsClient.subscribeSpotSymbolMini24hrTicker(market);
// wsClient.subscribeSpotAllMini24hrTickers();
// wsClient.subscribeSpotSymbol24hrTicker(market);
// wsClient.subscribeSpotAll24hrTickers();
// wsClient.subscribeSpotSymbolBookTicker(market);
// wsClient.subscribeSpotAllBookTickers();
// wsClient.subscribeSpotPartialBookDepth(market, 5);
// wsClient.subscribeSpotDiffBookDepth(market);

wsClient.subscribeSpotUserDataStream();
wsClient.subscribeMarginUserDataStream();
wsClient.subscribeIsolatedMarginUserDataStream('BTCUSDT');
wsClient.subscribeUsdFuturesUserDataStream();

// each method also restores the WebSocket object, which can be interacted with for more control
// const ws1 = wsClient.subscribeSpotSymbolBookTicker(market);
// const ws2 = wsClient.subscribeSpotAllBookTickers();
// const ws3 = wsClient.subscribeSpotUserDataStream(listenKey);

// optionally directly open a connection to a URL. Not recommended for production use.
// const ws4 = wsClient.connectToWsUrl(`wss://stream.binance.com:9443/ws/${listenKey}`, 'customDirectWsConnection1');

See websocket-client.ts for further information.


Customise Logging

Pass a custom logger which supports the log methods silly, debug, notice, info, warning and error, or override methods from the default logger as desired.

const { WebsocketClient, DefaultLogger } = require('binance');

// Disable all logging on the silly level
DefaultLogger.silly = () => {};

const ws = new WebsocketClient(
  { key: 'xxx', secret: 'yyy' },
  DefaultLogger
);

Browser Usage

Build a bundle using webpack:

  • npm install
  • npm build
  • npm pack

The bundle can be found in dist/. Altough usage should be largely consistent, smaller differences will exist. Documentation is still TODO.

However, note that browser usage will lead to CORS errors due to Binance.


Contributions & Thanks

Donations

tiagosiebler

If you found this project interesting or useful, do consider sponsoring me on github or registering with my referral link. Thank you!

Or buy me a coffee using any of these:

  • BTC: 1C6GWZL1XW3jrjpPTS863XtZiXL1aTK7Jk
  • ETH (ERC20): 0xd773d8e6a50758e1ada699bb6c4f98bb4abf82da

Contributions & Pull Requests

Contributions are encouraged, I will review any incoming pull requests. See the issues tab for todo items.

  • 近日,有关Binance和FTX的“针锋相对”引起了加密市场的担忧和讨论。起因是Alameda Research 被曝出资产负债表混乱——充满了由FTX发行的FTT代币,从而引发了对FTX的担忧。根据CoinDesk 对Alameda财务分析指出,Alameda资产负债表,其最大的单一资产、大量的抵押品均为 FTX 的平台币 FTT。Alameda Research是 Sam Bankman-Fr

  • 期限套利策略,要能够稳定获得各币种期货和现货的报价,计算各币种的基差数据,然后当基差突破阈值时触发交易。以下代码可以得到稳定报价,计算基差数据,然后当突破阈值时收到提示邮件(还没写好交易模块)。 这里记录一下,开发过程遇到的主要问题,以及如何解决的,如果不感兴趣,可以跳过,直接看代码。 问题一:websocket报价数据不更新 简单的ws.run_forever,通常在运行两三天后,会出现报价卡在

  • define('BIND_MODULE','api/Worker/start');服务启动文件,启动start方法 public function start() { $this->getMarkPrice(); Worker::runAll(); } getMarkPrice()方法内访问外部wss端口websocket服务 方法内new

 相关资料
  • 我是区块链的新手,我开始开发一种新的代币,我已经看到许多地方讲述了这两个区块链之间的相似之处。我读到BSC与EVM(以太坊虚拟机)兼容,我的问题是,这是否意味着如果我按照教程学习在以太坊区块链上部署智能合约(以Solidity编写)。同样的合同在Binance智能链中也会起作用吗?如果没有,那么在为其中一个和另一个写合同时,主要的区别是什么?非常感谢。

  • 我对区块链开发和在binance智能链上开发DApp是新手。我将网络从默认以太坊web提供程序更改为binance测试网络提供程序。DApp工作正常,但我想确认我的事务正在binance测试网络上进行。是否有办法检查交易是否发生在binance智能链网络或以太坊网络上?非常感谢

  • 我有一个关于加密市场Binance的问题。他们有公共api,我想我可以用它来创建交易应用程序。 但是我有一些麻烦。使用chrome中的链接,我得到json结果。https://api.binance.com/api/v1/exchangeInfo 但使用角4 http pClient: 我有错误:跨原点请求被阻止:相同原点策略不允许读取远程资源在api.binance.com/api/v1/exc

  • 我已经下载了用于Java的binance API,并且我正在试图弄清楚如何制作一个新的限价单。我进入了类,添加了一个接受stop price参数的构造函数和一个用于创建止损限价卖出订单的方法。 这是用来创建限价单的代码行 出现以下错误: 线程“main”com.binance.api.client.Exception.BinanceApiException中出现异常:强制参数“price”未发送、

  • 我想请你帮忙。我试图通过api将python代码从发送限价/市价指令改为OCO指令。我可以做限价单,市价单,止损限价单。我不知道怎么下OCO订单... 当我使用limit order时,我发送order_type=order_type_limit,然后我使用order=client.create_order(),它正在工作。当我想发送市场订单时,我使用了order_type=order_type_

  • Binance to Google Sheets! A lightweight Google Spreadsheets Add-On to GET data directly from Binance API without any intermediaries! This add-on is basically an API client specially hand-crafted to wo

相关阅读

相关文章

相关问答

相关文档