# PyGenphi
Standard Datasource of DeFi research
## create a new Python project using PyGenphi
```python
mkdir PyGenphiDemo
cd PyGenphiDemo
git init
pipenv install --dev
# activate venv
pipenv shell
# install PyGenphi
pipenv install PyGenphi==0.10.0
```
Note: run command `pipenv install PyGenphi==0.10.0` within existing `PyGenphiDemo` directory with lower version of PyGenphi will auto upgrade PyGenphi to v0.10.0
### IMPORTANT NOTE FOR IPython(Jupter/anaconda3) users:
You may get an error report like:
```python
~/opt/anaconda3/lib/python3.7/asyncio/base_events.py in run_forever(self)
519 self._check_closed()
520 if self.is_running():
--> 521 raise RuntimeError('This event loop is already running')
522 if events._get_running_loop() is not None:
523 raise RuntimeError(
RuntimeError: This event loop is already running
```
To fix this error, you may need install library `nest_asyncio` with command:
```python
pipenv install nest_asyncio
```
Then use it before PyGenphi lib:
```python
import nest_asyncio
from PyGenphi import *
nest_asyncio.apply()
if __name__ == '__main__':
data = Client().get(
Locator.BINANCE, # Data location
Category.KLINE_1Min, # Data category
"ETHUSDT", # symbol or token, default value="ALL"
"2020-12-01", # start date of data, default value="ALL"
"2020-12-10", # end date of data, default value="ALL"
"1" # request id used to generate cache file, default value is a random uuid
)
```
## Example code:
### Candlestick chart data fetch
```python
from PyGenphi import *
import uuid
if __name__ == '__main__':
data = Client().get(
Locator.BINANCE, # Data location
Category.KLINE_1Min, # Data category
"ETHUSDT", # symbol or token, default value="ALL"
"2020-12-01", # start date of data, default value="ALL"
"2020-12-10", # end date of data, default value="ALL"
"1" # request id used to generate cache file, default value is a random uuid
)
for line in data:
print(line)
```
symbol list for Candlestick chart supported:
- AAVEUSDT
- ADAUSDT
- ATOMUSDT
- BCHUSDT
- BNBUSDT
- BTCUSDT
- DASHUSDT
- DOGEUSDT
- DOTUSDT
- EOSUSDT
- ETCUSDT
- ETHUSDT
- FILUSDT
- LINKUSDT
- LTCUSDT
- MATICUSDT
- NEOUSDT
- ONEUSDT
- QTUMUSDT
- SHIBUSDT
- SNXUSDT
- SOLUSDT
- SUSHIUSDT
- TRXUSDT
- UNIUSDT
- VETUSDT
- XLMUSDT
- XRPUSDT
- YFIUSDT
- ZECUSDT
### Cross-chain bridge transfer data fetch
```python
from PyGenphi import *
if __name__ == '__main__':
data = Client().get(
Locator.ANYSWAP,
Category.CROSSCHAIN_TRANSFER,
"ALL",
"2020-12-01",
"2020-12-02"
)
for line in data:
print(line)
```
- location supported: Locator.ANYSWAP
- data span: 2020-08-17 ~ 2021-06-23 (maybe change anytime)
## dataservice APIs
Note: constructor of class `Client` now support optional parameters `scheme` `host` `port` `api_key`, `Client()` will connect to URL with prefix `http://127.0.0.1:80/`, and `Client(scheme='https', host='192.168.1.1', port=8081, api_key='<your_api_key>')` will connect to URL with prefix `https://192.168.1.1:8081/` with HTTP header `APIKey` for authentication
IMPORTANT NOTE: for PyGenphi 0.8.0+, value of all **amount** related field no long parsed from type `str` to `Decimal` by PyGenphi, please do this with `Decimal(<amount>)` if needed(import library `decimal` with code `from decimal import *`).
### common request parameters
#### Enum `Locator`
- `Locator.BSC`
- `Locator.ANYSWAP`
- `Locator.BINANCE`
#### Enum `ArbitrageType`
- `ArbitrageType.ALL_ARBITRAGE`
- `ArbitrageType.TWIN_ARBITRAGE`
- `ArbitrageType.TRIANGLE_ARBITRAGE`
- `ArbitrageType.MULTIPLE_ARBITRAGE`
- `ArbitrageType.NO_ARBITRAGE`
- `ArbitrageType.UNKNOWN`
### common response data structure
#### transaction
| field | type | meaning | note |
|----------------------------|------|-------------------------------------------------------------------|-------------------|
| `locator` | str | blockchain network | |
| `transactionHash` | str | transaction hash | |
| `transactionIndex` | int | transaction index(in block) | |
| `nonce` | int | the number of transactions made by the sender prior to this one | |
| `transactionReceiptStatus` | bool | transaction receipt status, `True` for success, `False` for faild | |
| `errCode` | str | error code when transaction faild | NOT implement yet |
| `blockNumber` | int | block number | |
| `blockHash` | str | block hash | |
| `blockTimestamp` | int | Unix time(in second) | |
| `fromAddress` | str | from address | |
| `toAddress` | str | to address | |
| `transactionValue` | str | transaction value(amount) | |
| `gasUsed` | int | gas used | |
| `gasPrice` | int | gas price | |
| `input` | str | input parameters | |
| `logs` | list | logs of transaction receipt | |
| `logs[n]` | dict | log of transaction receipt | see `event log` |
| `labels` | list | labels of current transaction | NOT implement yet |
| `labels[n]` | str | label of current transaction | NOT implement yet |
#### event log
| field | type | meaning | note |
|--------------------|------|-------------------------------------------------------------------------|------------------------|
| `locator` | str | blockchain network | |
| `transactionHash` | str | transaction hash | |
| `transactionIndex` | int | transaction index(in block) | |
| `blockNumber` | int | block number | |
| `blockHash` | str | block hash | |
| `blockTimestamp` | int | Unix time(in second) | |
| `logIndex` | int | log index(in block) | |
| `address` | str | address that generate current log | |
| `topic0` | str | method signature of current log | |
| `topic1` | str | indexed param 1 of current log | |
| `topic2` | str | indexed param 2 of current log | |
| `topic3` | str | indexed param 3 of current log | |
| `data` | str | more param data | |
| `dataParsed` | dict | topics and data parsed by method signature | see `event log parsed` |
| `category` | str | method name if parsed else same to topic0 | |
| `removed` | bool | `True`: log valid, `False`: log was removed due to chain reorganization | |
##### event log parsed
###### transfer
| field | type | meaning | note |
|-------------------|------|-----------------------|-------------------|
| `category` | str | value is `"transfer"` | |
| `tokenAddress` | str | address of token | |
| `token` | dict | token info | see `token` below |
| `senderAddress` | str | address of sender | |
| `receiverAddress` | str | address of receiver | |
| `tokenAmount` | str | transfer amount | |
###### swap
| field | type | meaning | note |
|---------------|------|---------------------------------|-------------------|
| `category` | str | value is `"swap"` | |
| `lpAddress` | str | address of liquid pair contract | |
| `lp` | dict | liquid pair info | see `lp` below |
| `token0` | dict | token0 info | see `token` below |
| `token1` | dict | token1 info | see `token` below |
| `fromAddress` | str | address of sender | |
| `toAddress` | str | address of receiver | |
| `amount0In` | str | input amount of token0 | |
| `amount1In` | str | input amount of token1 | |
| `amount0Out` | str | output amount of token0 | |
| `amount1Out` | str | output amount of token1 | |
###### sync
| field | type | meaning | note |
|-------------|------|---------------------------------|-------------------|
| `category` | str | value is `"sync"` | |
| `lpAddress` | str | address of liquid pair contract | |
| `lp` | dict | liquid pair info | see `lp` below |
| `token0` | dict | token0 info | see `token` below |
| `token1` | dict | token1 info | see `token` below |
| `reserve0` | str | reserve of token0 | |
| `reserve1` | str | reserve of token1 | |
##### lp
| field | type | meaning | note |
|----------------|------|-----------------------------------|------|
| `address` | str | address of liquid pair | |
| `minLiquidity` | str | min liquidity of liquid pair | |
| `decimals` | int | decimal of liquid pair | |
| `factory` | str | address of factory of liquid pair | |
| `name` | str | name of liquid pair | |
| `symbol` | str | symbol of liquid pair | |
| `token0` | str | address of token0 of liquid pair | |
| `token1` | str | address of token1 of liquid pair | |
##### token
| field | type | example | meaning | note |
|------------|------|------------------------------------------------|-------------------|------|
| `address` | str | `"0xe9e7cea3dedca5984780bafc599bd69add087d56"` | "0x..." | |
| `symbol` | str | `"BUSD"` | symbol of token | |
| `decimals` | int | `18` | decimals of token | |
| `name` | str | `"BUSD Token "` | name of token | |
### `client.get_transaction_by_hash`
#### demo
```python
from PyGenphi import *
if __name__ == '__main__':
client = Client()
result = client.get_transaction_by_hash(tx_hash="0x97896e5b40b4ef51ec0c328a47388334e5818d2bd004bbd751da35d6b22a410e")
print(result)
```
#### params
| param | type | required | default | note |
|-------------|-----------|----------|---------------|------------------|
| `client_id` | `str` | × | `_` | |
| `locator` | `Locator` | × | `Locator.BSC` | block chain |
| `tx_hash` | `str` | √ | | transaction hash |
#### result
response body is a JSON string, more details:
| field | type | meaning | note |
|----------|------|----------------------------------------------|---------------------------------------------------------|
| `domain` | str | URI of current API | |
| `id` | str | client ID | |
| `result` | dict | transaction, `None` if transaction NOT exist | see `transaction` in [common response data structure][] |
### `client.get_transactions_by_address`
#### demo
```python
from PyGenphi import *
if __name__ == '__main__':
client = Client()
result = client.get_transactions_by_address(address="0x6d4851eaf458d0fdae1599b1241915f878c0f539")
print(result)
```
#### params
| param | type | required | default | note |
|-------------------------|---------------|----------|-------------------|----------------------------------------------------|
| `client_id` | `str` | × | `_` | |
| `locator` | `Locator` | × | `Locator.BSC` | block chain |
| `address` | `str` | √ | | |
| `mode` | `AddressMode` | × | `AddressMode.ALL` | other values: `AddressMode.FROM`, `AddressMode.TO` |
| `first` | `bool` | × | `False` | |
| `last` | `bool` | × | `False` | |
| `block_number_start` | `int` | × | `None` | |
| `block_number_end` | `int` | × | `None` | |
| `block_timestamp_start` | `int` | × | `None` | |
| `block_timestamp_end` | `int` | × | `None` | |
#### result
| field | type | meaning | note |
|-------------|------|--------------------|---------------------------------------------------------|
| `domain` | str | URI of current API | |
| `id` | str | client ID | |
| `result` | list | transaction list | |
| `result[n]` | dict | transaction | see `transaction` in [common response data structure][] |
### `client.get_transactions_by_block_number`
#### demo
```python
from PyGenphi import *
if __name__ == '__main__':
client = Client()
result = client.get_transactions_by_block_number(block_number=9000000)
print(result)
```
#### params
| param | type | required | default | note |
|----------------|-----------|----------|---------------|-------------|
| `client_id` | `str` | × | `_` | |
| `locator` | `Locator` | × | `Locator.BSC` | block chain |
| `block_number` | `int` | √ | | |
#### result
| field | type | meaning | note |
|-------------|------|--------------------|---------------------------------------------------------|
| `domain` | str | URI of current API | |
| `id` | str | client ID | |
| `result` | list | transaction list | |
| `result[n]` | dict | transaction | see `transaction` in [common response data structure][] |
### `client.get_token_transfers_by_address`
#### demo
```python
from PyGenphi import *
if __name__ == '__main__':
client = Client()
result = client.get_token_transfers_by_address(address="0x06dbc4fe79e2541b03fe4731b2579c0b7f46f099", last=True)
print(result)
```
#### params
| param | type | required | default | note |
|-------------------------|---------------|----------|-------------------|----------------------------------------------------|
| `client_id` | `str` | × | `_` | |
| `locator` | `Locator` | × | `Locator.BSC` | block chain |
| `address` | `str` | √ | | |
| `mode` | `AddressMode` | × | `AddressMode.ALL` | other values: `AddressMode.FROM`, `AddressMode.TO` |
| `first` | `bool` | × | `False` | |
| `last` | `bool` | × | `False` | |
| `block_number_start` | `int` | × | `None` | |
| `block_number_end` | `int` | × | `None` | |
| `block_timestamp_start` | `int` | × | `None` | |
| `block_timestamp_end` | `int` | × | `None` | |
#### result
| field | type | meaning | note |
|-------------|------|--------------------|-------------------------------------------------------|
| `domain` | str | URI of current API | |
| `id` | str | client ID | |
| `result` | list | event log list | |
| `result[n]` | dict | event log | see `event log` in [common response data structure][] |
### `client.get_transfer`
Note: parameter `api_key` of `Client` is required for this API
#### demon
```python
from PyGenphi import *
if __name__ == '__main__':
client = Client(api_key="<your-api-key>")
result = client.get_transfer(token_address="0xe9e7cea3dedca5984780bafc599bd69add087d56", first=True)
print(result)
```
#### params
### query parameters
| param | type | required | default | note |
|-------------------------|---------------|----------|-------------------|----------------------------------------------------|
| `client_id` | `str` | × | `_` | |
| `locator` | `Locator` | × | `Locator.BSC` | block chain |
| `token_address` | `str` | √ | | |
| `from_or_to_address` | `str` | √ | | |
| `mode` | `AddressMode` | × | `AddressMode.ALL` | other values: `AddressMode.FROM`, `AddressMode.TO` |
| `first` | `bool` | × | `False` | |
| `block_number_start` | `int` | × | `None` | |
| `block_number_end` | `int` | × | `None` | |
| `block_timestamp_start` | `int` | × | `None` | |
| `block_timestamp_end` | `int` | × | `None` | |
| `page` | `int` | × | `0` | |
| `page_size` | `int` | × | `1000` | range: [1, 1000] |
#### result
| field | type | meaning | note |
|------------------------------|--------|---------------------------------------------------|------|
| `domain` | `str` | URI of current API | |
| `id` | `str` | client ID | |
| `result` | `list` | transfer event log list | |
| `result[n]` | `dict` | transfer event log | |
| `result[n].category` | `str` | | |
| `result[n].chain` | `str` | | |
| `result[n].transactionHash` | `str` | | |
| `result[n].transactionIndex` | `int` | | |
| `result[n].blockNumber` | `int` | | |
| `result[n].blockHash` | `str` | | |
| `result[n].blockTimestamp` | `int` | | |
| `result[n].logIndex` | `int` | | |
| `result[n].tokenAddress` | `str` | | |
| `result[n].token` | `dict` | see `token` in [common response data structure][] | |
| `result[n].senderAddress` | `str` | | |
| `result[n].receiverAddress` | `str` | | |
| `result[n].tokenAmount` | `str` | | |
### `client.get_swap`
Note: parameter `api_key` of `Client` is required for this API
#### demon
```python
from PyGenphi import *
if __name__ == '__main__':
client = Client(api_key="<your-api-key>")
result = client.get_swap(lp_address="0x7d3343bb04d897e928856eb287d2e8e1410ee333", block_number_start=10282384, block_number_end=10282384)
print(result)
```
#### params
### query parameters
| param | type | required | default | note |
|-------------------------|---------------|----------|-------------------|----------------------------------------------------|
| `client_id` | `str` | × | `_` | |
| `locator` | `Locator` | × | `Locator.BSC` | block chain |
| `lp_address` | `str` | √ | | |
| `block_number_start` | `int` | × | `None` | |
| `block_number_end` | `int` | × | `None` | |
| `block_timestamp_start` | `int` | × | `None` | |
| `block_timestamp_end` | `int` | × | `None` | |
| `page` | `int` | × | `0` | |
| `page_size` | `int` | × | `1000` | range: [1, 1000] |
#### result
| field | type | meaning | note |
|------------------------------|--------|---------------------------------------------------|------|
| `domain` | str | URI of current API | |
| `id` | str | client ID | |
| `result` | list | swap event log list | |
| `result[n]` | dict | swap event log | |
| `result[n].category` | str | | |
| `result[n].chain` | str | | |
| `result[n].transactionHash` | str | | |
| `result[n].transactionIndex` | int | | |
| `result[n].blockNumber` | int | | |
| `result[n].blockHash` | str | | |
| `result[n].blockTimestamp` | int | | |
| `result[n].logIndex` | int | | |
| `result[n].lpAddress` | str | | |
| `result[n].lp` | object | see `lp` in [common response data structure][] | |
| `result[n].token0` | object | see `token` in [common response data structure][] | |
| `result[n].token1` | object | see `token` in [common response data structure][] | |
| `result[n].fromAddress` | str | | |
| `result[n].toAddress` | str | | |
| `result[n].amount0In` | str | input amount of token0 | |
| `result[n].amount1In` | str | input amount of token1 | |
| `result[n].amount0Out` | str | output amount of token0 | |
| `result[n].amount1Out` | str | output amount of token1 | |
### `client.get_tick`
#### demo
```python
from PyGenphi import *
if __name__ == '__main__':
client = Client()
result = client.get_tick()
print(result)
```
#### params
| param | type | required | default | note |
|-------------------------|-----------|----------|---------------|------------------------------|
| `client_id` | `str` | × | `_` | |
| `locator` | `Locator` | × | `Locator.BSC` | block chain |
| `lp_addrs` | `str` | × | `None` | multi address split with `,` |
| `block_number_start` | `int` | × | `None` | |
| `block_number_end` | `int` | × | `None` | |
| `block_timestamp_start` | `int` | × | `None` | |
| `block_timestamp_end` | `int` | × | `None` | |
| `page` | `int` | × | `0` | |
| `page_size` | `int` | × | `100` | range: [1, 100] |
#### result
| field | type | meaning | note |
|--------------------------------|------|--------------------|------|
| `domain` | str | URI of current API | |
| `id` | str | client ID | |
| `result` | list | tick list | |
| `result[n]` | dict | tick | |
| `result[n].blockNumber` | int | | |
| `result[n].logIndex` | int | | |
| `result[n].transactionIndex` | int | | |
| `result[n].transactionHash` | str | | |
| `result[n].blockTimestamp` | int | | |
| `result[n].localTimestamp` | int | | |
| `result[n].lp` | dict | | |
| `result[n].lp.address` | str | | |
| `result[n].lp.minLiquidity` | str | | |
| `result[n].lp.decimals` | int | | |
| `result[n].lp.factory` | str | | |
| `result[n].lp.name` | str | | |
| `result[n].lp.symbol` | str | | |
| `result[n].lp.totalSupply` | str | | |
| `result[n].token0` | dict | | |
| `result[n].token0.address` | str | | |
| `result[n].token0.symbol` | str | | |
| `result[n].token0.decimals` | int | | |
| `result[n].token0.name` | str | | |
| `result[n].token0.totalSupply` | str | | |
| `result[n].token1` | dict | | |
| `result[n].token1.address` | str | | |
| `result[n].token1.symbol` | str | | |
| `result[n].token1.decimals` | int | | |
| `result[n].token1.name` | str | | |
| `result[n].token1.totalSupply` | str | | |
| `result[n].reserve0` | str | | |
| `result[n].reserve1` | str | | |
| `result[n].lpAddress` | str | | |
### `client.get_previoustick`
Note: parameter `api_key` of `Client` is required for this API
#### demo
```python
from PyGenphi import *
if __name__ == '__main__':
client = Client(api_key="<your-api-key>")
result = client.get_previoustick(lp_addr="<lp_addr>", block_number_end=7900000, log_index=297)
print(result)
```
#### params
| param | type | required | default | note |
|-------------------------|-----------|----------|---------------|-------------|
| `client_id` | `str` | × | `_` | |
| `locator` | `Locator` | × | `Locator.BSC` | block chain |
| `lp_addr` | `str` | √ | | |
| `block_number_end` | `int` | √ | | |
| `block_number_start` | `int` | × | `None` | |
| `log_index` | `int` | √ | | |
| `block_timestamp_start` | `int` | × | `None` | |
| `block_timestamp_end` | `int` | × | `None` | |
#### result
| field | type | meaning | note |
|---------------------------|------|--------------------|------|
| `domain` | str | URI of current API | |
| `id` | str | client ID | |
| `result` | dict | tick | |
| `result.blockNumber` | int | | |
| `result.logIndex` | int | | |
| `result.transactionIndex` | int | | |
| `result.transactionHash` | str | | |
| `result.blockTimestamp` | int | | |
| `result.taggedMillis` | int | | |
| `result.lp` | dict | | |
| `result.lp.address` | str | | |
| `result.lp.minLiquidity` | str | | |
| `result.lp.decimals` | int | | |
| `result.lp.factory` | str | | |
| `result.lp.name` | str | | |
| `result.lp.symbol` | str | | |
| `result.token0` | dict | | |
| `result.token0.address` | str | | |
| `result.token0.symbol` | str | | |
| `result.token0.decimals` | int | | |
| `result.token0.name` | str | | |
| `result.token1` | dict | | |
| `result.token1.address` | str | | |
| `result.token1.symbol` | str | | |
| `result.token1.decimals` | int | | |
| `result.token1.name` | str | | |
| `result.reserve0` | str | | |
| `result.reserve1` | str | | |
| `result.lpAddress` | str | | |
### `client.get_factory`
```python
from PyGenphi import *
if __name__ == '__main__':
client = Client()
result = client.get_factory()
print(result)
```
#### params
| param | type | required | default | note |
|-----------------|-----------|----------|---------------|------------------|
| `client_id` | `str` | × | `_` | |
| `locator` | `Locator` | × | `Locator.BSC` | block chain |
| `exchange_name` | `str` | × | | |
| `page` | `int` | × | `0` | |
| `page_size` | `int` | × | `1000` | range: [1, 1000] |
#### result
| field | type | meaning | note |
|----------------------------|------|---------------------------------------|------|
| `domain` | str | URI of current API | |
| `id` | str | client ID | |
| `result` | list | factory list | |
| `result[n]` | dict | factory info | |
| `result[n].chain` | str | | |
| `result[n].exchangeName` | str | | |
| `result[n].factoryAddress` | str | | |
| `result[n].startDate` | int | start Unix time(in second) of factory | |
| `result[n].endDate` | int | end Unix time(in second) of factory | |
| `result[n].isOpenSourced` | bool | | |
### `client.get_tag_lp`
Note: parameter `api_key` of `Client` is required for this API
#### demo
```python
from PyGenphi import *
if __name__ == '__main__':
client = Client(api_key="<your-api-key>")
result = client.get_tag_lp()
print(result)
```
#### params
| param | type | required | default | note |
|--------------|-----------|----------|---------------|------------------------|
| `client_id` | `str` | × | `_` | |
| `locator` | `Locator` | × | `Locator.BSC` | block chain |
| `lp_address` | `str` | × | | |
| `is_secure` | `bool` | × | | |
| `start_time` | `int` | × | | LP used time in millis |
| `end_time` | `int` | × | | LP used time in millis |
| `page` | `int` | × | `0` | |
| `page_size` | `int` | × | `100` | range: [1, 100] |
#### result
| field | type | meaning | note |
|--------------------------------|------|---------------------------------------------|------|
| `domain` | str | URI of current API | |
| `id` | str | client ID | |
| `result` | list | tag LP info list | |
| `result[n]` | dict | tag LP info | |
| `result[n].chain` | str | block chain of tag LP | |
| `result[n].name` | str | tag LP name | |
| `result[n].symbol` | str | tag LP symbol | |
| `result[n].decimals` | int | | |
| `result[n].token0Address` | str | | |
| `result[n].token1Address` | str | | |
| `result[n].minLiquidity` | str | | |
| `result[n].isSecure` | bool | | |
| `result[n].flashLoanSupported` | bool | whether support FlashLoan | |
| `result[n].isOpenSourced` | bool | whether current contract open source or NOT | |
| `result[n].callee` | str | callee of FlashLoan | |
| `result[n].feeRate` | str | | |
| `result[n].totalSupply` | str | | |
| `result[n].token0` | dict | | |
| `result[n].token0.address` | str | | |
| `result[n].token0.name` | str | | |
| `result[n].token0.symbol` | str | | |
| `result[n].token0.decimals` | int | | |
| `result[n].token0.totalSupply` | str | | |
| `result[n].token1` | dict | | |
| `result[n].token1.address` | str | | |
| `result[n].token1.name` | str | | |
| `result[n].token1.symbol` | str | | |
| `result[n].token1.decimals` | int | | |
| `result[n].token1.totalSupply` | str | | |
| `result[n].lpAddress` | str | | |
| `result[n].factory` | str | | |
Note: `result[n].feeRate` might be `None` if fee rate is NOT caculated yet.
### `client.get_tag_lp_pairs`
Note: parameter `api_key` of `Client` is required for this API
#### demo
```python
from PyGenphi import *
if __name__ == '__main__':
client = Client(api_key="<your-api-key>")
result = client.get_tag_lp_pairs()
print(result)
```
#### params
| param | type | required | default | note |
|------------------|-----------------|----------|---------------|-----------------------------------------------------------|
| `client_id` | `str` | × | `_` | |
| `locator` | `Locator` | × | `Locator.BSC` | block chain |
| `org_id` | `str` | × | | |
| `arbitrage_type` | `ArbitrageType` | × | `None` | see Enum `ArbitrageType` in [common request parameters][] |
| `start_time` | `int` | × | | LP Pairs used time in millis |
| `end_time` | `int` | × | | LP Pairs used time in millis |
| `page` | `int` | × | `0` | |
| `page_size` | `int` | × | `100` | range: [1, 100] |
#### result
| field | type | meaning | note |
|---------------------------|------|-----------------------|------|
| `domain` | str | URI of current API | |
| `id` | str | client ID | |
| `result` | list | tag LP Pair info list | |
| `result[n]` | dict | tag LP Pair info | |
| `result[n].chain` | str | block chain of tag LP | |
| `result[n].orgID` | str | | |
| `result[n].facotryCombo` | str | | |
| `result[n].decimals` | int | | |
| `result[n].arbitrageType` | str | | |
| `result[n].createTime` | int | | |
| `result[n].updateTime` | int | | |
| `result[n].lpCombo` | str | | |
### `client.get_tag_transaction`
Note: parameter `api_key` of `Client` is required for this API
#### demo
```python
from PyGenphi import *
if __name__ == '__main__':
client = Client(api_key="<your-api-key>")
result = client.get_tag_transaction()
print(result)
```
#### params
| param | type | required | default | note |
|-------------------------|-----------------|----------|---------------|-----------------------------------------------------------|
| `client_id` | `str` | × | `_` | |
| `locator` | `Locator` | × | `Locator.BSC` | block chain |
| `from_address` | `str` | × | `None` | |
| `to_address` | `str` | × | `None` | |
| `arbitrage_type` | `ArbitrageType` | × | `None` | see Enum `ArbitrageType` in [common request parameters][] |
| `taxed` | `bool` | × | `None` | |
| `block_number_start` | `int` | × | `None` | |
| `block_number_end` | `int` | × | `None` | |
| `block_timestamp_start` | `int` | × | `None` | |
| `block_timestamp_end` | `int` | × | `None` | |
| `page` | `int` | × | `0` | |
| `page_size` | `int` | × | `100` | range: [1, 100] |
#### result
| field | type | meaning | note |
|-------------|------|--------------------|---------------------------------------------------------|
| `domain` | str | URI of current API | |
| `id` | str | client ID | |
| `result` | list | transaction list | |
| `result[n]` | dict | transaction | see `transaction` in [common response data structure][] |