-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathapi.py
65 lines (48 loc) · 1.62 KB
/
api.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
import os
import uvicorn
from evmoswallet.converter import eth_to_evmos
from evmoswallet.converter import evmos_to_eth
from fastapi import FastAPI
from fastapi.middleware.cors import CORSMiddleware
from pydantic import BaseModel
import db
MY_HOST = os.getenv('ALLOWED_HOST', '*')
# Config
ALLOWED_HOSTS = [MY_HOST]
app = FastAPI(docs_url=None, redoc_url=None)
app.add_middleware(
CORSMiddleware,
allow_origins=ALLOWED_HOSTS,
allow_credentials=True,
allow_methods=['*'],
allow_headers=['*'],
)
class Address(BaseModel):
address: str
class ClaimResponse(BaseModel):
address: str
claimable: str
error: str
def verify_address(address):
try:
if address.startswith('evmos'):
return eth_to_evmos(evmos_to_eth(address)) == address
if address.startswith('0x'):
return evmos_to_eth(eth_to_evmos(address)).lower() == address.lower()
except Exception as e:
return False
return False
@app.post('/getclaimable', response_model=ClaimResponse)
def get_claimable(address: Address):
if not verify_address(address.address):
return {'address': None, "claimable": None, 'error': 'Invalid Address'}
addr = address.address
if address.address.startswith('0x'):
addr = eth_to_evmos(address.address)
claimable = db.get_claimable(addr)
if claimable is None:
return {'address': addr, 'claimable': "0", 'error': "Not found"}
claimable = claimable.decode('utf-8')
return {'address': addr, 'claimable': claimable, 'error': ""}
if __name__ == '__main__':
uvicorn.run(app, host='127.0.0.1', port=9999, log_level='info')