Spaces:
Paused
Paused
File size: 10,465 Bytes
0bead10 e859289 1355911 5b2006a 0bead10 6dc533b 0bead10 6394ab5 0bead10 6dc533b 0bead10 875b159 0bead10 a00890c 0bead10 6394ab5 0bead10 6394ab5 0bead10 cca8a6f 0bead10 cca8a6f 0bead10 f5b3458 0bead10 7a71ea9 0bead10 |
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 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 |
import pandas as pd
import requests
import streamlit as st
import streamlit_shadcn_ui as ui
import base64
import os
buy_data = [
{"数量(个)": "250,000", "单价(CKB)": "1.1"},
{"数量(个)": "200,000", "单价(CKB)": "1.05"},
{"数量(个)": "100,000", "单价(CKB)": "1"},
{"数量(个)": "60,000", "单价(CKB)": "0.5"},
{"数量(个)": "630,000", "单价(CKB)": "0.2"},
{"数量(个)": "1,100,000", "单价(CKB)": "0.1"},
{"数量(个)": "", "单价(CKB)": ""},
{"数量(个)": "", "单价(CKB)": ""},
{"数量(个)": "", "单价(CKB)": ""},
{"数量(个)": "", "单价(CKB)": ""}
]
sale_data = [
{"数量(个)": "100,000", "单价(CKB)": "4"},
{"数量(个)": "50,000", "单价(CKB)": "4.5"},
{"数量(个)": "100,000", "单价(CKB)": "5"},
{"数量(个)": "200,000", "单价(CKB)": "10"},
{"数量(个)": "", "单价(CKB)": ""},
{"数量(个)": "", "单价(CKB)": ""},
{"数量(个)": "", "单价(CKB)": ""},
{"数量(个)": "", "单价(CKB)": ""},
{"数量(个)": "", "单价(CKB)": ""},
{"数量(个)": "", "单价(CKB)": ""}
]
my_style = '''
<style>
.tag {
display: inline-block;
padding: 2px 6px;
background-color: #f2f2f2; /* 默认的背景颜色 */
border-radius: 5px; /* 圆角效果 */
margin: 0 2px;
transition: background-color 0.3s; /* 平滑的颜色过渡效果 */
}
.tag:hover {
background-color: #83F14C; /* 鼠标经过时的背景颜色 */
}
.tag:active {
background-color: #cffd51; /* 鼠标按下时的背景颜色 */
}
</style>
'''
# 图片Base64
def image_to_base64(img_path):
with open(img_path, "rb") as image_file:
return base64.b64encode(image_file.read()).decode()
def get_ckb_price():
params = {
'account_no': 'ckb',
}
headers = {
'authority': 'api.joy.id',
'accept': 'application/json, text/plain, */*',
'accept-language': 'zh-CN,zh;q=0.9,en;q=0.8',
'cache-control': 'no-cache',
'dnt': '1',
'origin': 'https://app.joy.id',
'pragma': 'no-cache',
'referer': 'https://app.joy.id/',
'sec-ch-ua': '"Not_A Brand";v="8", "Chromium";v="120", "Google Chrome";v="120"',
'sec-ch-ua-mobile': '?0',
'sec-ch-ua-platform': '"macOS"',
'sec-fetch-dest': 'empty',
'sec-fetch-mode': 'cors',
'sec-fetch-site': 'same-site',
'user-agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0.0.0 Safari/537.36',
}
try:
response = requests.get(
'https://api.joy.id/api/v1/wallet/accounts/ckb1qrgqep8saj8agswr30pls73hra28ry8jlnlc3ejzh3dl2ju7xxpjxqgqq878t5gcqw9gp3nf07lwz853ses6dxadhgef3vf0',
params=params, headers=headers,
)
response.raise_for_status()
print(response.json())
data = response.json()
if "accounts" in data and len(data["accounts"]) > 0 and "estimated_value" in data["accounts"][0]:
return data["accounts"][0]["estimated_value"]
else:
return 0
except requests.exceptions.RequestException as e:
return 0
def get_memes_info():
try:
response = requests.get('https://api.omiga.io/api/v1/ckb_inscriptions/launchpad')
if response.status_code != 200:
return ["Error", "Error"]
data = response.json()['data']['details']
rebase_supply = data['rebase_supply'] // 100000000
addresses_count = data['addresses_count']
return [rebase_supply, addresses_count]
except Exception as e:
print("Exception occurred: ", e)
return ["Error", "Error"]
st.set_page_config(page_title="Omiga - MEMES OTC", page_icon="👻", layout='centered', initial_sidebar_state='auto')
st.markdown(f'# <a href="https://ckb.meme" target="_self"><img src="data:image/jpeg;base64,{image_to_base64(os.path.join("img", "logo_ghost.png"))}" alt="Image" width="114px" height="36px" style="border-radius: 8px;"/></a> MEMES 场外交易', unsafe_allow_html=True)
st.subheader(' ', anchor=False, divider='gray')
st.markdown(f'{my_style}<span class="tag"><a href="https://omiga.io/" target="_blank" style="text-decoration: none;"><img src="data:image/jpeg;base64,{image_to_base64(os.path.join("img", "ghost.png"))}" alt="Image" width="20px" height="20px" style="border-radius: 3px;"/> Omiga</span></a> 是建立在 <span class="tag"><a href="https://nervos.org/" target="_blank" style="text-decoration: none;"><img src="data:image/jpeg;base64,{image_to_base64(os.path.join("img", "CKB.jpg"))}" alt="Image" width="20px" height="20px" style="border-radius: 3px;"/> Nervos CKB</span></a>(Common Knowledge Base)区块链上的一项创新性铭文协议。通过精心设计,旨在突破传统,为用户提供更公平、更高效的代币铸造和管理体验;<span class="tag"><a href="https://omiga.io/launchpad" target="_blank" style="text-decoration: none;"><img src="data:image/jpeg;base64,{image_to_base64(os.path.join("img", "memes.png"))}" alt="Image" width="20px" height="20px" style="border-radius: 3px;"/> MEMES</span></a> 是 CKB 链上 Omiga 协议第一个代币铭文。', unsafe_allow_html=True)
st.markdown(f'#### <img src="data:image/jpeg;base64,{image_to_base64(os.path.join("img", "memes.png"))}" alt="Image" width="32px" height="32px" style="border-radius: 8px;"/> $MEMES 基础信息', unsafe_allow_html=True)
data_info = get_memes_info()
ckb_price = get_ckb_price()
cols = st.columns(3)
with cols[0]:
ui.metric_card(title="总供应量", content="21,000,000", description="理论上的最大供应量", key="card1")
with cols[1]:
ui.metric_card(title="重铸进度", content=f"{data_info[0]:,}", description="当前重铸进度(流通量)", key="card2")
with cols[2]:
ui.metric_card(title="持币地址", content=f"{data_info[1]:,}", description="当前持币的地址数量", key="card3")
cols = st.columns(3)
with cols[0]:
ui.metric_card(title="最近成交价 (CKB)", content="4", description="场外交易最新价格", key="card4")
with cols[1]:
ui.metric_card(title="总交易量 (CKB)", content="1,181,000", description="场外交易的总交易量", key="card5")
with cols[2]:
ui.metric_card(title="预计市值 (USDT)", content=f"{(float(ckb_price) * int(data_info[0]) / 1000):,.0f}", description="当前预计的总市值", key="card6")
st.markdown("#### 订单信息")
orders = ui.tabs(options=['购买订单', '出售订单'], default_value='购买订单', key="orders")
if orders == "购买订单":
buy_df = pd.DataFrame(buy_data)
st.dataframe(buy_df, use_container_width=True, hide_index=True)
if orders == "出售订单":
sale_df = pd.DataFrame(sale_data)
st.dataframe(sale_df, use_container_width=True, hide_index=True)
chat = ui.tabs(options=['微信群聊', '电报私聊'], default_value='微信群聊', key="chat")
if chat == "微信群聊":
st.markdown(f'<a href="https://weixin.qq.com/g/AwYAADKAzCELuHOyjDcdH61fczkeht0RZC8xc_Q6F5gqpNfL6uTNIRtGaUh4HC-Y" target="_blank"><img src="data:image/jpeg;base64,{image_to_base64(os.path.join("img", "wechat_qr.png"))}" alt="Image" style="max-width: 100%; width: 50%; height: auto; border-radius: 10px; display: block; box-shadow: 5px 5px 15px rgba(0,0,0,0.3);"/></a>', unsafe_allow_html=True)
if chat == "电报私聊":
st.markdown(f'<a href="https://t.me/nervosckb" target="_blank"><img src="data:image/jpeg;base64,{image_to_base64(os.path.join("img", "telegram_qr.png"))}" alt="Image" style="max-width: 100%; width: 50%; height: auto; border-radius: 10px; display: block; box-shadow: 5px 5px 15px rgba(0,0,0,0.3);"/></a>', unsafe_allow_html=True)
st.markdown("#### OTC 流程")
st.markdown('''1. 交易双方协商并达成价格一致,交易在小群中进行;
2. 买家首先将相应的 CKB 转入担保账户;
3. 到账后,卖家将指定数量的 MEMES 转账给买家;
4. 最后,担保将买家的CKB支付给卖家,完成交易。
''')
st.markdown("#### OTC 费用")
st.markdown('''- 交易总额的 3% ,具体是买卖双方平分,所以每一方需支付 1.5%;
- 买家需承担 $MEMES 每次转账时附带的 144CKB 的费用。''')
st.markdown("#### 社交信息")
st.markdown(f'''<span class="tag"><a href="https://omiga.io" target="_blank" style="text-decoration: none;"><img src="data:image/jpeg;base64,{image_to_base64(os.path.join("img", "ghost.png"))}" alt="Image" width="20px" height="20px" style="border-radius: 3px;" /> omiga.io</span></a>
<span class="tag"><a href="https://x.com/OmigaHQ" target="_blank" style="text-decoration: none;"><img src="data:image/svg+xml;base64,{image_to_base64(os.path.join("img", "x.svg"))}" alt="Image" width="20px" height="20px" style="border-radius: 3px;" /> @OmigaHQ</span></a>
<span class="tag"><a href="https://t.me/omigackb" target="_blank" style="text-decoration: none;"><img src="data:image/svg+xml;base64,{image_to_base64(os.path.join("img", "telegram.svg"))}" alt="Image" width="20px" height="20px" style="border-radius: 3px;" /> @omigackb</span></a>
钱包推荐:<span class="tag"><a href="https://app.joy.id" target="_blank" style="text-decoration: none;"><img src="data:image/jpeg;base64,{image_to_base64(os.path.join("img", "joyid.jpg"))}" alt="Image" width="20px" height="20px" style="border-radius: 3px;" /> JoyID</span></a>
买入 $CKB 推荐:<span class="tag"><a href="https://binance.com" target="_blank" style="text-decoration: none;"><img src="data:image/jpeg;base64,{image_to_base64(os.path.join("img", "binance.jpg"))}" alt="Image" width="20px" height="20px" style="border-radius: 3px;" /> Binance</span></a> <span class="tag"><a href="https://htx.com" target="_blank" style="text-decoration: none;"><img src="data:image/jpeg;base64,{image_to_base64(os.path.join("img", "htx.jpg"))}" alt="Image" width="20px" height="20px" style="border-radius: 3px;" /> HTX</span></a> <span class="tag"><a href="https://kucoin.com" target="_blank" style="text-decoration: none;"><img src="data:image/jpeg;base64,{image_to_base64(os.path.join("img", "kucoin.jpg"))}" alt="Image" width="20px" height="20px" style="border-radius: 3px;" /> KuCoin</span></a>
''', unsafe_allow_html=True)
|