2022-10-08 12:38:54 +03:00
|
|
|
from pydantic import BaseModel
|
|
|
|
import requests as r
|
2022-10-08 14:39:52 +03:00
|
|
|
import json
|
|
|
|
from time import sleep
|
|
|
|
from typing import List
|
2022-10-08 12:38:54 +03:00
|
|
|
|
|
|
|
URL = 'https://hackathon.lsp.team/hk'
|
|
|
|
|
2022-10-08 14:39:52 +03:00
|
|
|
base_headers = {
|
|
|
|
'Content-Type': 'application/json',
|
|
|
|
'Accept': 'application/json'
|
|
|
|
}
|
2022-10-08 12:38:54 +03:00
|
|
|
|
|
|
|
|
2022-10-08 14:39:52 +03:00
|
|
|
class Wallet(BaseModel):
|
2022-10-08 12:38:54 +03:00
|
|
|
publicKey: str
|
|
|
|
privateKey: str
|
|
|
|
|
|
|
|
|
2022-10-08 14:39:52 +03:00
|
|
|
class WalletBalance(BaseModel):
|
|
|
|
matic: float
|
|
|
|
coins: float
|
|
|
|
|
|
|
|
|
|
|
|
class TransHash(BaseModel):
|
|
|
|
transaction_hash: str
|
|
|
|
|
|
|
|
|
|
|
|
class NftInfo(BaseModel):
|
|
|
|
uri: str
|
|
|
|
tokens: List[int]
|
|
|
|
|
|
|
|
|
|
|
|
class TransactionHistory(BaseModel):
|
|
|
|
hash: str
|
|
|
|
timestamp: int
|
|
|
|
token_name: str
|
|
|
|
from_wallet: str
|
|
|
|
to_wallet: str
|
|
|
|
|
|
|
|
|
|
|
|
def create_wallet() -> Wallet:
|
2022-10-08 12:38:54 +03:00
|
|
|
response = r.post(URL+'/v1/wallets/new')
|
|
|
|
data = response.json()
|
2022-10-08 14:39:52 +03:00
|
|
|
return Wallet(publicKey=data['publicKey'], privateKey=data['privateKey'])
|
|
|
|
|
|
|
|
|
|
|
|
def check_transaction(trans_hash: str) -> str:
|
|
|
|
res = r.get(URL + '/v1/transfers/status/'+trans_hash, data=json.dumps({
|
|
|
|
'transactionHash': trans_hash
|
|
|
|
}),
|
|
|
|
headers=base_headers
|
|
|
|
)
|
|
|
|
return res.json()['status']
|
|
|
|
|
|
|
|
|
|
|
|
def transfer_rubbles(my_wallet_private_key, transfer_publick_key: str, amount: float) -> TransHash:
|
|
|
|
response = r.post(URL+'/v1/transfers/ruble', data=json.dumps({
|
|
|
|
"fromPrivateKey": my_wallet_private_key,
|
|
|
|
"toPublicKey": transfer_publick_key,
|
|
|
|
"amount": amount
|
|
|
|
}),
|
|
|
|
headers={
|
|
|
|
'Content-Type': 'application/json',
|
|
|
|
'Accept': 'application/json'
|
|
|
|
}
|
|
|
|
)
|
|
|
|
return TransHash(transaction_hash=response.json()['transaction'])
|
|
|
|
|
|
|
|
|
|
|
|
def create_nft(wallet_public_key: str, string_url: str) -> TransHash:
|
|
|
|
response = r.post(URL + '/v1/nft/generate', data=json.dumps(
|
|
|
|
{
|
|
|
|
"toPublicKey": wallet_public_key,
|
|
|
|
"uri": string_url,
|
|
|
|
"nftCount": 1
|
|
|
|
}
|
|
|
|
),
|
|
|
|
headers=base_headers
|
|
|
|
)
|
|
|
|
return TransHash(transaction_hash=response.json()['transaction_hash'])
|
|
|
|
|
|
|
|
|
|
|
|
def get_nfts(wallet_public_key: str) -> List[NftInfo]:
|
|
|
|
res = r.get(URL+f'/v1/wallets/{wallet_public_key}/nft/balance')
|
|
|
|
print(res.json())
|
|
|
|
return list(
|
|
|
|
map(
|
|
|
|
lambda res: NftInfo(
|
|
|
|
uri=res['uri'],
|
|
|
|
tokens=res['tokens']
|
|
|
|
),
|
|
|
|
res.json()['balance']
|
|
|
|
),
|
|
|
|
)
|
|
|
|
|
|
|
|
def get_history(wallet_public_key: str) -> List[TransactionHistory]:
|
|
|
|
res = r.post(URL+f'/v1/wallets/{wallet_public_key}/history', data=json.dumps({
|
|
|
|
"page": 0,
|
|
|
|
"offset": 100,
|
|
|
|
"sort": "asc"
|
|
|
|
|
|
|
|
}), headers=base_headers)
|
|
|
|
return list(
|
|
|
|
map(
|
|
|
|
lambda res: TransactionHistory(
|
|
|
|
hash=res['hash'],
|
|
|
|
timestamp=res['timeStamp'],
|
|
|
|
token_name=res['tokenName'],
|
|
|
|
from_wallet=res['from'],
|
|
|
|
to_wallet=res['to']
|
|
|
|
),
|
|
|
|
res.json()['history']
|
|
|
|
),
|
|
|
|
)
|
|
|
|
|
|
|
|
|
|
|
|
def transfer_nft(my_private_wallet_key: str, transfer_publick_key: str, token_id: int) -> TransHash:
|
|
|
|
res = r.post(URL+'/v1/transfers/nft', data=json.dumps(
|
|
|
|
{
|
|
|
|
"fromPrivateKey": my_private_wallet_key,
|
|
|
|
"toPublicKey": transfer_publick_key,
|
|
|
|
"tokenId": token_id
|
|
|
|
}
|
|
|
|
), headers=base_headers)
|
|
|
|
return TransHash(transaction_hash=res.json()['transaction_hash'])
|
|
|
|
|
|
|
|
def get_balance(my_public_wallet_key: str) -> WalletBalance:
|
|
|
|
res = r.get(URL+f'/v1/wallets/{my_public_wallet_key}/balance')
|
|
|
|
return WalletBalance(matic=res.json()['maticAmount'], coins=res.json()['coinsAmount'])
|