75 lines
2.5 KiB
Python
75 lines
2.5 KiB
Python
from tonsdk.boc import begin_cell
|
|
from app.core.logger import make_log
|
|
from app.core._config import MY_FUND_ADDRESS
|
|
from app.core.storage import db_session
|
|
from app.core._secrets import service_wallet
|
|
from app.core._blockchain.ton.toncenter import toncenter
|
|
from app.core._utils.send_status import send_status
|
|
|
|
import asyncio
|
|
import os, sys
|
|
|
|
|
|
async def get_sw_seqno():
|
|
sw_seqno_result = await toncenter.run_get_method(service_wallet.address.to_string(1, 1, 1), 'seqno')
|
|
if sw_seqno_result.get('exit_code', -1) != 0:
|
|
sw_seqno_value = 0
|
|
else:
|
|
sw_seqno_value = int(sw_seqno_result.get('stack', [['num', '0x0']])[0][1].replace('0x', ''), 16)
|
|
|
|
return sw_seqno_value
|
|
|
|
|
|
async def main_fn():
|
|
make_log("TON", f"Service started, SW = {service_wallet.address.to_string(1, 1, 1)}", level="info")
|
|
sw_seqno_value = await get_sw_seqno()
|
|
make_log("TON", f"Service wallet run seqno method: {sw_seqno_value}", level="info")
|
|
if sw_seqno_value == 0:
|
|
make_log("TON", "Service wallet is not deployed, deploying...", level="info")
|
|
await toncenter.send_boc(
|
|
service_wallet.create_transfer_message(
|
|
[{
|
|
'address': service_wallet.address.to_string(1, 1, 1),
|
|
'amount': 1,
|
|
'send_mode': 1,
|
|
'payload': begin_cell().store_uint(0, 32).store_bytes(b"Init MY Node").end_cell()
|
|
}], 0
|
|
)['message'].to_boc(False)
|
|
)
|
|
await asyncio.sleep(5)
|
|
return await main()
|
|
|
|
if os.getenv("TON_BEGIN_COMMAND_WITHDRAW"):
|
|
await toncenter.send_boc(
|
|
service_wallet.create_transfer_message(
|
|
[{
|
|
'address': MY_FUND_ADDRESS,
|
|
'amount': 1,
|
|
'send_mode': 128,
|
|
'payload': begin_cell().end_cell()
|
|
}], sw_seqno_value
|
|
)['message'].to_boc(False)
|
|
)
|
|
make_log("TON", "Withdraw command sent", level="info")
|
|
await asyncio.sleep(10)
|
|
|
|
while True:
|
|
sw_seqno_value = await get_sw_seqno()
|
|
make_log("TON", f"Service running ({sw_seqno_value})", level="debug")
|
|
# with db_session() as session:
|
|
# for stored_content in session.query(StoredContent).filter(StoredContent.uploaded == False).all():
|
|
# pass
|
|
|
|
await asyncio.sleep(5)
|
|
await send_status("ton", f"working (seqno={sw_seqno_value})")
|
|
|
|
|
|
# if __name__ == '__main__':
|
|
# loop = asyncio.get_event_loop()
|
|
# loop.run_until_complete(main())
|
|
# loop.close()
|
|
|
|
|
|
|
|
|