23 lines
1018 B
Python
23 lines
1018 B
Python
from sqlalchemy.ext.asyncio import AsyncSession
|
|||
|
|
|
||
|
|
from app.db.models import User
|
||
|
|
from app.wallet.hd import derive_pool_address, derive_user_address
|
||
|
|
|
||
|
|
|
||
|
|
async def own_address_for(session: AsyncSession, kind: str, user_id: int | None) -> str:
|
||
|
|
"""The address that owns every input of a PendingTransaction of this kind —
|
||
|
|
a user's own address for a bet/withdrawal, the pool address for a payout.
|
||
|
|
All our builders only ever spend one address's UTXOs per tx (see
|
||
|
|
tx/broadcast.py:_signing_context, which derives the same address alongside
|
||
|
|
the signing key it also needs).
|
||
|
|
|
||
|
|
Shared by tx/confirmation.py and tx/reconcile.py (B-41): both now check
|
||
|
|
blockchain.scripthash.get_history for this address instead of asking
|
||
|
|
blockchain.transaction.get for a verbose reply, so the two can't derive
|
||
|
|
different addresses for the same row.
|
||
|
|
"""
|
||
|
|
if kind == "payout":
|
||
|
|
return derive_pool_address()
|
||
|
|
user = await session.get(User, user_id)
|
||
|
|
return derive_user_address(user.derivation_index)
|