Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
99 commits
Select commit Hold shift + click to select a range
baab3c3
Update handlers.py
Rakni1988 Oct 4, 2023
0fc7b50
Update pool-stats.html
Rakni1988 Oct 4, 2023
8685dad
Update config.py
Rakni1988 Oct 4, 2023
c762921
Update miningpoolpayout.py
Rakni1988 Oct 4, 2023
f13a0e6
Update pool.py
Rakni1988 Oct 4, 2023
38e2b25
Update health.py
Rakni1988 Oct 4, 2023
fc6f85d
Update health.py
Rakni1988 Oct 4, 2023
bb4b2fd
Update pool-stats.html
Rakni1988 Oct 12, 2023
f520436
Update pool.py
Rakni1988 Oct 13, 2023
9626461
Update node.py
Rakni1988 Oct 18, 2023
dab7258
Merge branch 'pdxwebdev:master' into YadaPool
Rakni1988 Nov 4, 2023
4b062d4
yadapool v2
Rakni1988 Nov 4, 2023
3a361d2
pool pages
Rakni1988 Nov 4, 2023
2e34245
cleaning, chart
Rakni1988 Nov 5, 2023
b926cfe
cleaning
Rakni1988 Nov 5, 2023
3b03ff4
target
Rakni1988 Nov 5, 2023
58d44df
fix
Rakni1988 Nov 5, 2023
649bd65
logging
Rakni1988 Nov 5, 2023
64d5b26
logging-fix
Rakni1988 Nov 5, 2023
5058174
fixing duplicate consensus from another partner and overwriting the s…
Rakni1988 Nov 9, 2023
f1299f2
fixing target
Rakni1988 Nov 9, 2023
cde8f11
fixing miners/workers
Rakni1988 Nov 9, 2023
b8ae323
upgrade
Rakni1988 Nov 18, 2023
63fedc1
fix
Rakni1988 Nov 18, 2023
16b7c9d
disable log
Rakni1988 Nov 18, 2023
9e860c7
custom diff
Rakni1988 Nov 19, 2023
113a217
New payout system, txn filtering
Rakni1988 Dec 4, 2023
a0ed883
pool_info cleaner
Rakni1988 Dec 4, 2023
d423c80
logging
Rakni1988 Dec 13, 2023
9cf7270
process nonce
Rakni1988 Dec 14, 2023
1a4552b
effort fix
Rakni1988 Dec 15, 2023
31737df
SRB Fix
Rakni1988 Dec 17, 2023
184b1a3
Merge branch 'YadaPool' of https://github.com/Rakni1988/yadacoin into…
Rakni1988 Dec 17, 2023
5f291a8
test - async nonce queue
Rakni1988 Dec 18, 2023
7981cb9
new masternode
Rakni1988 Dec 19, 2023
f66a3d2
fix:pool payout
Rakni1988 Dec 19, 2023
3289870
test: xmrig proxy
Rakni1988 Dec 21, 2023
21492cb
test: little sleep
Rakni1988 Dec 21, 2023
82917e5
changing address_only to peer_id in the dictionary
Rakni1988 Dec 27, 2023
dc0691b
fix: keepalive
Rakni1988 Dec 27, 2023
177b90d
fix: double write in inbound
Rakni1988 Dec 29, 2023
728fa67
disabling logging
Rakni1988 Dec 30, 2023
e6bc2bf
test: xmrig fix
Rakni1988 Jan 2, 2024
da3eb74
test: send job
Rakni1988 Jan 5, 2024
8b2c70f
try: asyncio.gather
Rakni1988 Jan 5, 2024
f5833f0
try: block checker move
Rakni1988 Jan 5, 2024
c682b9c
block checker busy
Rakni1988 Jan 5, 2024
b9515d3
test
Rakni1988 Jan 6, 2024
4d2f190
fix: low diff share support
Rakni1988 Jan 7, 2024
6728bde
update dashboard
Rakni1988 Jan 13, 2024
d216566
update blocks
Rakni1988 Jan 13, 2024
0ac5e47
disable txn tracker
Rakni1988 Jan 17, 2024
ad6a77b
Update nodes.py
Rakni1988 Jan 17, 2024
d1590ad
test: asynchronous nonce queue, dynamic difficulty, banning system
Rakni1988 Jan 22, 2024
323eba8
Committing local changes before pulling
Rakni1988 Jan 22, 2024
7366788
Merge branch 'YadaPool' of https://github.com/Rakni1988/yadacoin into…
Rakni1988 Jan 22, 2024
f9b2173
add: 'invalid share' logging
Rakni1988 Jan 22, 2024
6371418
optimization: miners statistics
Rakni1988 Jan 27, 2024
a757967
optimization: miners statistics v2
Rakni1988 Jan 27, 2024
efc11de
Update nodes.py
Rakni1988 Feb 14, 2024
53d3f3e
Update nodes.py
Rakni1988 Feb 14, 2024
293c227
UI upgrade
Rakni1988 Feb 20, 2024
cc27b2e
fix: missing UI img
Rakni1988 Feb 20, 2024
5f63af8
Update nodes.py
Rakni1988 Feb 21, 2024
a3e684e
explorer
Rakni1988 Mar 2, 2024
b27aa83
Merge branch 'YadaPool' of https://github.com/Rakni1988/yadacoin into…
Rakni1988 Mar 2, 2024
7466ace
update explorer links
Rakni1988 Mar 3, 2024
0ae12a1
fix encrypted message
Rakni1988 Mar 3, 2024
4656a7b
Update nodes.py
Rakni1988 Mar 6, 2024
fbb7978
explorer v2
Rakni1988 Mar 9, 2024
ad78d12
Merge branch 'YadaPool' of https://github.com/Rakni1988/yadacoin into…
Rakni1988 Mar 9, 2024
025200a
add pagination to explorer
Rakni1988 Mar 10, 2024
2f9823d
test: scan missed txn
Rakni1988 Mar 10, 2024
9ec18e7
test: add start index to scan missed txn
Rakni1988 Mar 10, 2024
bdf2551
test: missing txn v2
Rakni1988 Mar 11, 2024
530ebc8
fix: transfer transaction
Rakni1988 Mar 29, 2024
af7bbb6
add: manual combine oldest transactions
Rakni1988 Mar 30, 2024
25e4197
unique extra nonce
Rakni1988 Apr 9, 2024
43ef731
change extra nonce to hex
Rakni1988 Apr 9, 2024
ccce18f
add getblocktemplate and submitblock
Rakni1988 Aug 29, 2024
c025e45
add getblocktemplate function in latestblock
Rakni1988 Aug 29, 2024
7a801cd
Update nodes.py
Rakni1988 Sep 4, 2024
4c25950
add masternode fee to generate coinbase
Rakni1988 Sep 16, 2024
502f793
add masternode fee to verify reaward
Rakni1988 Sep 17, 2024
6f2b15c
add fork point
Rakni1988 Sep 17, 2024
891f9e2
add masternode support
Rakni1988 Sep 17, 2024
c5b1a3c
add masternode support
Rakni1988 Sep 17, 2024
4977e6c
add masternode fee config
Rakni1988 Sep 17, 2024
24bcac2
add masternode support
Rakni1988 Sep 17, 2024
ea933c1
add masternode support
Rakni1988 Sep 17, 2024
6ed0dd2
add masternode support
Rakni1988 Sep 17, 2024
b8f3a9b
add masternode fee support
Rakni1988 Sep 17, 2024
80cf61f
Update block.py
Rakni1988 Sep 17, 2024
aa1349c
Update block.py
Rakni1988 Sep 17, 2024
85e6bfa
Update transaction.py
Rakni1988 Sep 17, 2024
e5583b3
fix
Rakni1988 Sep 17, 2024
cb9b3ff
more time for small miners
Rakni1988 Sep 17, 2024
e50f5a7
add: mongo indexing, queries for explorer
Rakni1988 Sep 23, 2024
d7d31a9
upgrade blocks page
Rakni1988 Sep 23, 2024
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
182 changes: 101 additions & 81 deletions plugins/yadacoinpool/handlers.py
Original file line number Diff line number Diff line change
Expand Up @@ -30,30 +30,77 @@ async def get(self):
)


class PoolInfoHandler(BaseWebHandler):
cache = {"market_data": None}
last_refresh = time.time()


class MarketInfoHandler(BaseWebHandler):
async def get(self):
def get_ticker():
market_data = cache.get("market_data")

if market_data is None or time.time() - last_refresh > 3600:
market_data = await self.fetch_market_data()
cache["market_data"] = market_data

self.render_as_json(market_data)

async def fetch_market_data(self):
symbols = ["YDA_USDT", "YDA_BTC"]
market_data = {}

for symbol in symbols:
url = f"https://api.xeggex.com/api/v2/market/getbysymbol/{symbol}"
headers = {
"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/111.0.0.0 Safari/537.36"
}
return requests.get(
"https://safe.trade/api/v2/peatio/public/markets/tickers",
headers=headers,
)

try:
if not hasattr(self.config, "ticker"):
self.config.ticker = get_ticker()
self.config.last_update = time.time()
if (time.time() - self.config.last_update) > (600 * 6):
self.config.ticker = get_ticker()
self.config.last_update = time.time()
last_btc = float(self.config.ticker.json()["ydabtc"]["ticker"]["last"])
last_usdt = float(self.config.ticker.json()["ydausdt"]["ticker"]["last"])
except:
last_btc = 0
last_usdt = 0
response = requests.get(url, headers=headers)

if response.status_code == 200:
market_data[symbol.lower()] = {
"last_btc": float(response.json()["lastPrice"]) if symbol == "YDA_BTC" else 0,
"last_usdt": float(response.json()["lastPrice"]) if symbol == "YDA_USDT" else 0
}
else:
market_data[symbol.lower()] = {
"last_btc": 0,
"last_usdt": 0
}

formatted_data = {
"last_btc": market_data["yda_btc"]["last_btc"],
"last_usdt": market_data["yda_usdt"]["last_usdt"]
}

return formatted_data

class PoolInfoHandler(BaseWebHandler):
async def get(self):
await self.config.LatestBlock.block_checker()
latest_pool_info = await self.config.mongo.async_db.pool_info.find_one(
filter={},
sort=[("time", -1)]
)

pool_hash_rate = latest_pool_info.get("pool_hash_rate", 0)
network_hash_rate = latest_pool_info.get("network_hash_rate", 0)
avg_network_hash_rate = latest_pool_info.get("avg_network_hash_rate", 0)
net_difficulty = latest_pool_info.get("net_difficulty", 0)

twenty_four_hours_ago = time.time() - 24 * 60 * 60

history_query = {
"time": {"$gte": twenty_four_hours_ago},
"pool_hash_rate": {"$exists": True}
}

cursor = self.config.mongo.async_db.pool_info.find(
history_query,
{"_id": 0, "time": 1, "pool_hash_rate": 1}
).sort([("time", -1)])

hashrate_history = await cursor.to_list(None)

pool_public_key = (
self.config.pool_public_key
if hasattr(self.config, "pool_public_key")
Expand All @@ -62,66 +109,16 @@ def get_ticker():
total_blocks_found = await self.config.mongo.async_db.blocks.count_documents(
{"public_key": pool_public_key}
)
pool_blocks_found_list = (
await self.config.mongo.async_db.blocks.find(
{
"public_key": pool_public_key,
},
{"_id": 0},
)
.sort([("index", -1)])
.to_list(100)
)
expected_blocks = 144
mining_time_interval = 600
shares_count = await self.config.mongo.async_db.shares.count_documents(
{"time": {"$gte": time.time() - mining_time_interval}}
)
if shares_count > 0:
pool_hash_rate = (
shares_count * self.config.pool_diff
) / mining_time_interval
else:
pool_hash_rate = 0
pool_blocks_found_list = await self.config.mongo.async_db.pool_blocks.find(
{},
{"_id": 0, "index": 1, "found_time": 1, "time": 1}
).sort([("index", -1)]).to_list(5)

expected_blocks = 144
daily_blocks_found = await self.config.mongo.async_db.blocks.count_documents(
{"time": {"$gte": time.time() - (600 * 144)}}
)
if daily_blocks_found > 0:
net_target = self.config.LatestBlock.block.target
avg_blocks_found = self.config.mongo.async_db.blocks.find(
{"time": {"$gte": time.time() - (600 * 36)}}
)
avg_blocks_found = await avg_blocks_found.to_list(length=52)
avg_block_time = daily_blocks_found / expected_blocks * 600
if len(avg_blocks_found) > 0:
avg_net_target = 0
for block in avg_blocks_found:
avg_net_target += int(block["target"], 16)
avg_net_target = avg_net_target / len(avg_blocks_found)
avg_net_difficulty = (
0x0000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
/ avg_net_target
)
net_difficulty = (
0x0000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
/ net_target
)
avg_network_hash_rate = (
len(avg_blocks_found)
/ 36
* avg_net_difficulty
* 2**16
/ avg_block_time
)
network_hash_rate = net_difficulty * 2**16 / 600
else:
avg_network_hash_rate = 1
net_difficulty = (
0x0000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
/ 0x0000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
)
network_hash_rate = 0

try:
pool_perecentage = pool_hash_rate / network_hash_rate * 100
Expand Down Expand Up @@ -154,39 +151,61 @@ def get_ticker():
payouts = (
await self.config.mongo.async_db.share_payout.find({}, {"_id": 0})
.sort([("index", -1)])
.to_list(100)
.to_list(50)
)

pipeline = [
{
"$unwind": "$txn.outputs"
},
{
"$match": {
"txn.outputs.to": {"$ne": self.config.address}
}
},
{
"$group": {
"_id": None,
"total_payments": {"$sum": "$txn.outputs.value"}
}
}
]

result = await self.config.mongo.async_db.share_payout.aggregate(pipeline).to_list(1)

total_payments = result[0]["total_payments"] if result else 0

self.render_as_json(
{
"node": {
"latest_block": self.config.LatestBlock.block.to_dict(),
"health": self.config.health.to_dict(),
"version": ".".join([str(x) for x in version]),
},
"pool": {
"pool_diff": self.config.pool_diff,
"hashes_per_second": pool_hash_rate,
"miner_count": miner_count_pool_stat["value"],
"worker_count": worker_count_pool_stat["value"],
"payout_scheme": "PPLNS",
"payout_scheme": self.config.payout_scheme,
"pool_fee": self.config.pool_take,
"pool_address": self.config.address,
"min_payout": 0,
"total_payments": total_payments,
"url": getattr(
self.config,
"pool_url",
f"{self.config.peer_host}:{self.config.stratum_pool_port}",
),
"last_five_blocks": [
{"timestamp": x["time"], "height": x["index"]}
{"timestamp": x["found_time"], "height": x["index"]}
for x in pool_blocks_found_list[:5]
],
"blocks_found": total_blocks_found,
"fee": self.config.pool_take,
"payout_frequency": self.config.payout_frequency,
"payout_frequency": self.config.pool_payer_wait,
"payouts": payouts,
"blocks": pool_blocks_found_list[:100],
"pool_perecentage": pool_perecentage,
"avg_block_time": avg_time,
"hashrate_history": hashrate_history,
},
"network": {
"height": self.config.LatestBlock.block.index,
Expand All @@ -198,7 +217,6 @@ def get_ticker():
"current_hashes_per_second": network_hash_rate,
"difficulty": net_difficulty,
},
"market": {"last_btc": last_btc, "last_usdt": last_usdt},
"coin": {
"algo": "randomx YDA",
"circulating": CHAIN.get_circulating_supply(
Expand All @@ -210,7 +228,9 @@ def get_ticker():
)



HANDLERS = [
(r"/market-info", MarketInfoHandler),
(r"/pool-info", PoolInfoHandler),
(r"/", PoolStatsInterfaceHandler),
(
Expand Down
Loading