Standard Datasource of DeFi research
create a new Python project using PyGenphi
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:
~ / 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:
pipenv install nest_asyncio
Then use it before PyGenphi lib:
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
)
Candlestick chart data fetch
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
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)
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
Locator.BSC
Locator.ANYSWAP
Locator.BINANCE
ArbitrageType.ALL_ARBITRAGE
ArbitrageType.TWIN_ARBITRAGE
ArbitrageType.TRIANGLE_ARBITRAGE
ArbitrageType.MULTIPLE_ARBITRAGE
ArbitrageType.NO_ARBITRAGE
ArbitrageType.UNKNOWN
common response data structure
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
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
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
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
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
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
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
from PyGenphi import *
if __name__ == '__main__' :
client = Client ()
result = client .get_transaction_by_hash (tx_hash = "0x97896e5b40b4ef51ec0c328a47388334e5818d2bd004bbd751da35d6b22a410e" )
print (result )
param
type
required
default
note
client_id
str
×
_
locator
Locator
×
Locator.BSC
block chain
tx_hash
str
√
transaction hash
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
from PyGenphi import *
if __name__ == '__main__' :
client = Client ()
result = client .get_transactions_by_address (address = "0x6d4851eaf458d0fdae1599b1241915f878c0f539" )
print (result )
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
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
from PyGenphi import *
if __name__ == '__main__' :
client = Client ()
result = client .get_transactions_by_block_number (block_number = 9000000 )
print (result )
param
type
required
default
note
client_id
str
×
_
locator
Locator
×
Locator.BSC
block chain
block_number
int
√
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
from PyGenphi import *
if __name__ == '__main__' :
client = Client ()
result = client .get_token_transfers_by_address (address = "0x06dbc4fe79e2541b03fe4731b2579c0b7f46f099" , last = True )
print (result )
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
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][]
Note: parameter api_key
of Client
is required for this API
from PyGenphi import *
if __name__ == '__main__' :
client = Client (api_key = "<your-api-key>" )
result = client .get_transfer (token_address = "0xe9e7cea3dedca5984780bafc599bd69add087d56" , first = True )
print (result )
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]
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
Note: parameter api_key
of Client
is required for this API
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 )
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]
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
from PyGenphi import *
if __name__ == '__main__' :
client = Client ()
result = client .get_tick ()
print (result )
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]
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
Note: parameter api_key
of Client
is required for this API
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 )
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
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
from PyGenphi import *
if __name__ == '__main__' :
client = Client ()
result = client .get_factory ()
print (result )
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]
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
result[n].endDate
int
result[n].isOpenSourced
bool
Note: parameter api_key
of Client
is required for this API
from PyGenphi import *
if __name__ == '__main__' :
client = Client (api_key = "<your-api-key>" )
result = client .get_tag_lp ()
print (result )
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]
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].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: parameter api_key
of Client
is required for this API
from PyGenphi import *
if __name__ == '__main__' :
client = Client (api_key = "<your-api-key>" )
result = client .get_tag_lp_pairs ()
print (result )
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]
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
from PyGenphi import *
if __name__ == '__main__' :
client = Client (api_key = "<your-api-key>" )
result = client .get_tag_transaction ()
print (result )
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]
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][]