This is the Python SDK for Tic Ton Oracle on TON blockchain, which is a pure decentralized oracle protocol that can provide latest price with high precision guraranteed by incentive mechanism.
Install the SDK using pip:
pip install ticton
The SDK requires several environment variables for its operation.You can set the environment variables using the export
command in your shell. Here are the variables you need to set:
TICTON_WALLET_MNEMONICS
: A space-separated list of mnemonics used for wallet authentication and operations.TICTON_WALLET_VERSION
: Specifies the wallet version. Supported values are "v2r1", "v2r2", "v3r1", "v3r2", "v4r1", "v4r2", "hv2". The default is "v4r2".TICTON_ORACLE_ADDRESS
: The address of the oracle smart contract on the TON blockchain.TICTON_TONCENTER_API_KEY
: An API key for accessing TON blockchain data. You can apply for an API key at @tonapibot.TICTON_THRESHOLD_PRICE
: A float value that sets a threshold price, with a default of 0.7.
export TICTON_WALLET_MNEMONICS="word1 word2 word3 ... wordN"
export TICTON_WALLET_VERSION="v4r2"
export TICTON_ORACLE_ADDRESS="your_oracle_address"
export TICTON_TONCENTER_API_KEY="your_api_key"
export TICTON_THRESHOLD_PRICE=0.7
If you have already set the environment variables by using the export
command, you can easily initialize the ticton client using the following code:
from ticton import TicTonAsyncClient
client = await TicTonAsyncClient.init()
Alternatively, if you prefer not to set global environment variables, you can pass these directly to the initialization function:
from ticton import TicTonAsyncClient
client = await TicTonAsyncClient.init(
wallet_mnemonics="word1 word2 word3 ... wordN",
wallet_version="v4r2",
oracle_address="your_oracle_address",
toncenter_api_key="your_api_key",
threshold_price=0.7
)
Use Case - Ticton Oracle Automation
tick will open a alarm with the given price and timeout, the total amount of baseAsset and quoteAsset will be calculated automatically.
price
: float- The price of the alarm quoteAsset/baseAsset
timeout
: int (optional, default=1000)- The timeout of the alarm in seconds
extra_ton
: float (optional, default=0.1)- The extra ton to be sent to the oracle
Assume the token pair is TON/USDT, the price is 2.5 USDT per TON
price = 2.5
result = await client.tick(price)
ring will close the alarm with the given alarm_id
alarm_id
: int- The alarm_id of the alarm to be closed
alarm_id = 1
result = await client.ring(alarm_id)
wind will arbitrage the alarm with the given alarm_id, buy_num and new_price
alarm_id
: int- The alarm_id of the alarm to be arbitrage
buy_num
: int- The number of tokens to be bought, at least 1.
new_price
: float- The new price of the alarm quoteAsset/baseAsset
Assume the token pair is TON/USDT, the price is 2.5 USDT per TON. The alarm is opened with 1 TON and 2.5 USDT with index 123. The new price is 5 USDT per TON, the buy_num is 1.
alarm_id = 123
buy_num = 1
new_price = 5
result = await client.wind(alarm_id, buy_num, new_price)
subscribe will subscribe the oracle's transactions, handle the transactions and call the given callbacks.
-
on_tick_success
: function- The callback function to be called when the tick transaction is successful, with the following parameters:
watchmaker
: strbase_asset_price
: floatnew_alarm_id
: intcreated_at
: int
- The callback function to be called when the tick transaction is successful, with the following parameters:
-
on_ring_success
: function- The callback function to be called when the ring transaction is successful, with the following parameters:
alarm_id
: intcreated_at
: intorigin
: strreceiver
: stramount
: int
- The callback function to be called when the ring transaction is successful, with the following parameters:
-
on_wind_success
: function- The callback function to be called when the wind transaction is successful, with the following parameters:
timekeeper
: stralarm_id
: intnew_base_asset_price
: floatremain_scale
: intnew_alarm_id
: intcreated_at
: int
- The callback function to be called when the wind transaction is successful, with the following parameters:
-
start_lt: int, "oldest", "latest" (optional, default="oldest")
- From when to yield transaction, default to replay the transaction from the oldest transaction
async def on_tick_success(params: OnTickSuccessParams):
print(f"Tick success", params.model_dump())
async def on_ring_success(params: OnRingSuccessParams):
print(f"Ring success", params.model_dump())
async def on_wind_success(params: OnWindSuccessParams):
print(f"Wind success", params.model_dump())
await client.subscribe(on_tick_success, on_ring_success, on_wind_success)
-
Make sure poetry installed on your machine.
you may need to set the
PATH
environment variable to include the Poetry binary directory, e.g.export PATH="$HOME/.local/bin:$PATH"
curl -sSL https://install.python-poetry.org | python3 -
-
Install plugin for poetry
poetry self add poetry-bumpversion poetry self add poetry-plugin-export
-
Install dependencies
make install
-
Start your virtual environment
poetry shell
-
Run tests
poetry run pytest