Metadata-Version: 2.1
Name: binance-dex
Version: 0.1.3
Summary: Python Library for Binance DEX, including API, Websocket, JSONRPC and Crypto
Home-page: https://github.com/wally-yu/binance-dex
Author: Wally Yu
License: MIT License
Platform: UNKNOWN
Description-Content-Type: text/markdown
Requires-Dist: requests (==2.11.1)
Requires-Dist: websocket-client-py3 (==0.15.0)
Requires-Dist: mnemonic (==0.18)
Requires-Dist: rlp (==1.1.0)
Requires-Dist: eth-utils (==1.4.1)
Requires-Dist: two1 (==3.10.9)
Requires-Dist: pycrypto (==2.6.1)
Requires-Dist: pycryptodome (==3.8.0)
Requires-Dist: base58 (==0.2.2)
Requires-Dist: protobuf (==3.6.1)

## Binance DEX / Binance Chain Python Package
<img src="https://github.com/wally-yu/binance-dex/blob/master/binance-chain-python.jpg" width=375px height=108.75px>


## Introudction:
This Python package develop based on [Binance Chain official doc](https://docs.binance.org/) and tested all functionalities on test-net as well as main-net.

#### Dex Links:
 - Test-net: https://testnet.binance.org/
 - Main-net: https://www.binance.org

According to official doc, ways to connect to Binance DEX are:
 - REST API
 - CLI
 - Web Socket
 - Node RPC

This python package will provide all methods available as from binance official document except cli:
- [x] REST API
- [ ] CLI
- [x] WebSocket
- [x] Node NRPC

## Environment:
Due to time limitation, we didn't test different python version + os environment combinations, below are what we tested so far:
- [x] Python3.5 + MacOs
- [x] Python3.5 + Windows10

we are not sure if there would be any compatibility issues for python2.7, let us know if you encounter any issue.

BTW, we do suggest to use Virtual Environment.

## Python SDK Sample Usage:

#### Install package:

```
pip install binance-dex
```
 - Notes: If you are working on Windows platform, compiling tools `Microsoft Visual C++ 14.0` is required.

#### Full Code Example
Find full Sample Usage from [code_examples.py](https://github.com/wally-yu/binance-dex/blob/master/sample.py)

---

#### Code Examples Sector by Sector

#### - API Sample Usage
```
from binance_dex.api import BinanceChainClient

# create API Client instance
api_client = BinanceChainClient(is_test_net=True)

# call corresponding methods
print(api_client.get_block_time())

```
Sample return:

```
{'status': True, 'result': {'ap_time': '2019-04-06T04:43:48Z', 'block_time': '2019-04-06T04:43:47Z'}}
```
[++Find more API information by clicking this link++](https://github.com/wally-yu/binance-dex/blob/master/README_API.md)


---


####  - Crypto Sample Usage

```
from binance_dex.crypto import BinanceChainCrypto

# Create crypto instance
crypto_instance = BinanceChainCrypto(is_test_net=True)

# Generate Mnemonic words
mnemonic_words = crypto_instance.generate_mnemonic()
print("Generating Mnemonic Words: ")
print(mnemonic_words)

# Generate Private Key, Public Address and mnemonic
key = crypto_instance.generate_key()
print('Generating Private Key / Public Key / Mnemonic words: ')
print(key)
```
Sample return:

```
Generating Mnemonic Words: 
early solid bronze civil version orange prize curve glory cricket ticket already weekend home early buyer zebra olive melody enrich park jeans apart tower

Generating Private Key / Public Key / Mnemonic words: 
{'private_key': '65dba225a6965020ff7aae6efc8b9494cbf52bea36e44341d471a7b4b8207e1a', 'public_address': 'tbnb1uvjsrw2pstxqwk45n8k6ke53yw8fsegjery2en', 'mnemonic': 'allow adult frown ivory coffee inhale calm assist galaxy indoor credit oyster tower exclude popular veteran first hint flag boost right zone clown flower'}

```
[++Find more Crypto information by clicking this link++](https://github.com/wally-yu/binance-dex/blob/master/README_Crypto.md)


---

####  - Socket Sample Usage

```
from binance_dex.sockets import BinanceChainSocket

# --- Notice: Need to provide customized Call Back function to handle socket return data ---

# Sample of Customized Callback function to handle received data
def customized_call_back(ws, received_message):
    ''' Simply print out '''
    print('----- Customized handler -----')
    print(str(received_message))


# Create Socket Instance
socket_instance = BinanceChainSocket(IS_TEST_NET)

# 24hr Ticker statistics for a single symbol, push every second
socket_instance.fetch_ticker_streams(trading_pair='100K-9BC_BNB',
                                     is_full_data=True,
                                     one_off=False, # long lived connection
                                     callback_function=customized_call_back)
```
Sample return:

```
----- Customized handler -----
{"stream":"ticker","data":{"e":"24hrTicker","E":1555687041,"s":"100K-9BC_BNB","p":"0.00000000","P":"0.00000000","w":"49999.00000000","x":"49999.00000000","c":"49999.00000000","Q":"0.00009820","b":"0.00000000","B":"0.00000000","a":"4700.00000000","A":"0.13197840","o":"49999.00000000","h":"49999.00000000","l":"49999.00000000","v":"0.00000000","q":"0.00000000","O":1555600601881,"C":1555687001881,"F":"8274485-0","L":"8274485-0","n":0}}

----- Customized handler -----
{"stream":"ticker","data":{"e":"24hrTicker","E":1555687042,"s":"100K-9BC_BNB","p":"0.00000000","P":"0.00000000","w":"49999.00000000","x":"49999.00000000","c":"49999.00000000","Q":"0.00009820","b":"0.00000000","B":"0.00000000","a":"4700.00000000","A":"0.13197840","o":"49999.00000000","h":"49999.00000000","l":"49999.00000000","v":"0.00000000","q":"0.00000000","O":1555600601881,"C":1555687001881,"F":"8274485-0","L":"8274485-0","n":0}}

----- Customized handler -----
{"stream":"ticker","data":{"e":"24hrTicker","E":1555687043,"s":"100K-9BC_BNB","p":"0.00000000","P":"0.00000000","w":"49999.00000000","x":"49999.00000000","c":"49999.00000000","Q":"0.00009820","b":"0.00000000","B":"0.00000000","a":"4700.00000000","A":"0.13197840","o":"49999.00000000","h":"49999.00000000","l":"49999.00000000","v":"0.00000000","q":"0.00000000","O":1555600601881,"C":1555687001881,"F":"8274485-0","L":"8274485-0","n":0}}
```
[++Find more Web Socket Doc by clicking this link++](https://github.com/wally-yu/binance-dex/blob/master/README_WebSockets.md)


---
####  - Node RPC Sample Usage

```
from binance_dex.node_rpc import BinanceChainNodeRPC

# Create Instance

# OPTION 1: using existing RPC node
node_rpc_instance = BinanceChainNodeRPC(is_test_net=True,
                                        node_rpc_url=None)

# OPTION 2: using your own node
# node_rpc_instance = BinanceChainNodeRPC(node_rpc_url='https://seed-pre-s3.binance.org')

# Get number of unconfirmed transactions
print(node_rpc_instance.num_unconfirmed_txs())                                        
```
Sample return

```
Using Existing RPC server, trying to find a healthy node server...

Request URL: https://seed-pre-s3.binance.org:443/health ... ...

Successfully found healthy node RPC server: https://seed-pre-s3.binance.org:443

Request URL: https://seed-pre-s3.binance.org:443/num_unconfirmed_txs ... ...
{'status': True, 'result': {'jsonrpc': '2.0', 'id': '', 'result': {'n_txs': '0', 'txs': None}}}
```
[++Find more Node RPC Doc by clicking this link++](https://github.com/wally-yu/binance-dex/blob/master/README_NodeRPC.md)



## SDK Overview
As you might noticed from above code sample, this SDK is composed with 4 parts:
- API
- WebSockets
- Node RPC
- Crypto

#### Description
- **API:** HTTP API provides access to a Binance Chain node deployment and market data services [DETAILED API DOC](https://github.com/wally-yu/binance-dex/blob/master/README_API.md)

- **Web Sockets:** The DEX exposes several data streams over standard WebSocket connections, which can be consumed by modern web browsers and server-side WebSocket libraries [DETAILED SOCKET DOC](https://github.com/wally-yu/binance-dex/blob/master/README_WebSockets.md)

- **Node RPC:** May be used to interact with a node directly over HTTP or websockets. Using RPC, you may perform low-level operations like executing ABCI queries, viewing network/consensus state or broadcasting a transaction [DETAILED NODE DOC](https://github.com/wally-yu/binance-dex/blob/master/README_NodeRPC.md)

- **Crypto:** Crypto related functions (such as key managment) [DETAILED CRYPTO DOC](https://github.com/wally-yu/binance-dex/blob/master/README_Crypto.md)

#### Availability:

<html>
<table>
    <thead>
        <tr>
            <th></th>
            <th></th>
            <th>API</th>
            <th>WebSockets</th>
            <th>Node RPC</th>
            <th>Crypto</th>
        </tr>
    </thead>
        <tr>
            <td rowspan=3>Key</td>
            <td>generate mnemonic</td>
            <td></td>
            <td></td>
            <td></td>
            <td>&radic;</td>
        </tr>
        <tr>
            <td>generate key</td>
            <td></td>
            <td></td>
            <td></td>
            <td>&radic;</td>
        </tr>
        <tr>
            <td>generate keys</td>
            <td></td>
            <td></td>
            <td></td>
            <td>&radic;</td>
        </tr>
        <tr>
            <td rowspan=6>Chain</td>
            <td>get block height</td>
            <td>&radic;</td>
            <td>&radic;</td>
            <td></td>
            <td>&radic;</td>
        </tr>
        <tr>
            <td>get block info</td>
            <td></td>
            <td></td>
            <td>&radic;</td>
            <td></td>
        </tr>
        <tr>
            <td>get consensue info</td>
            <td></td>
            <td></td>
            <td>&radic;</td>
            <td></td>
        </tr>
        <tr>
            <td>get network info</td>
            <td></td>
            <td></td>
            <td>&radic;</td>
            <td></td>
        </tr>
        <tr>
            <td>get unconfirmed tx</td>
            <td></td>
            <td></td>
            <td>&radic;</td>
            <td></td>
        </tr>
        <tr>
            <td>get Tendermint status</td>
            <td></td>
            <td></td>
            <td>&radic;</td>
            <td></td>
        </tr>
        <tr>
            <td rowspan=6>Node</td>
            <td>get block time</td>
            <td>&radic;</td>
            <td></td>
            <td></td>
            <td></td>
        </tr>
        <tr>
            <td>get node info</td>
            <td>&radic;</td>
            <td></td>
            <td></td>
            <td></td>
        </tr>
        <tr>
            <td>get validators</td>
            <td>&radic;</td>
            <td></td>
            <td>&radic;</td>
            <td></td>
        </tr>
        <tr>
            <td>get peers</td>
            <td>&radic;</td>
            <td></td>
            <td></td>
            <td></td>
        </tr>
        <tr>
            <td>get end points</td>
            <td></td>
            <td></td>
            <td>&radic;</td>
            <td></td>
        </tr>
        <tr>
            <td>get abci info</td>
            <td></td>
            <td></td>
            <td>&radic;</td>
            <td></td>
        </tr>
        <tr>
            <td rowspan=5>Market</td>
            <td>get listing tokens</td>
            <td>&radic;</td>
            <td></td>
            <td></td>
            <td></td>
        </tr>
        <tr>
            <td>get trading pairs</td>
            <td>&radic;</td>
            <td>&radic;</td>
            <td></td>
            <td></td>
        </tr>
        <tr>
            <td>get depth</td>
            <td>&radic;</td>
            <td>&radic;</td>
            <td></td>
            <td></td>
        </tr>
        <tr>
            <td>get klines</td>
            <td>&radic;</td>
            <td>&radic;</td>
            <td></td>
            <td></td>
        </tr>
        <tr>
            <td>get updated ticker statistics</td>
            <td>&radic;</td>
            <td>&radic;</td>
            <td></td>
            <td></td>
        </tr>
        <tr>
            <td rowspan=3>Account</td>
            <td>get account balance</td>
            <td>&radic;</td>
            <td>&radic;</td>
            <td></td>
            <td></td>
        </tr>
        <tr>
            <td>get account sequence</td>
            <td>&radic;</td>
            <td></td>
            <td></td>
            <td></td>
        </tr>
        <tr>
            <td>get account orders</td>
            <td></td>
            <td>&radic;</td>
            <td></td>
            <td></td>
        </tr>
        <tr>
            <td rowspan=2>Transaction</td>
            <td>get transaction info</td>
            <td>&radic;</td>
            <td></td>
            <td>&radic;</td>
            <td></td>
        </tr>
        <tr>
            <td>broadcast transaction</td>
            <td>&radic;</td>
            <td></td>
            <td>&radic;</td>
            <td></td>
        </tr>
        <tr>
            <td rowspan=2>Others</td>
            <td>view chain fees</td>
            <td>&radic;</td>
            <td></td>
            <td></td>
            <td></td>
        </tr>
</table>
</html>


#### Network requirement:

|               |API        |WebSockets |JSONRPC    |Crypto     |
|:---:          |:---:      |:---:      |:---:      |:---:      |
|Requir Network |&radic;    |&radic;    |&radic;    |    X      |


## Join us:
You are always welcomed to join us! Leave your suggestions / or submit your codes

## License:
We promise will stick to MIT license permanently.


