DAG Token Network¶
Inject REST client
Get Network Info¶
from pypergraph import DagTokenNetwork
network = DagTokenNetwork()
network_info_dict = await network.get_network()
Lifecycle
def get_network(self) -> Dict:
return self.connected_network.__dict__
Get Address Balance¶
from pypergraph import DagTokenNetwork
network = DagTokenNetwork()
balance = await network.get_address_balance("DAG1...")
Lifecycle
async def get_address_balance(self, address: str) -> Balance:
return await self.l0_api.get_address_balance(address)
Get Last Accepted Transaction Reference per Address¶
When building a new transaction a hash reference to the previous transaction made by the account is used to chain the transactions together.
from pypergraph import DagTokenNetwork
network = DagTokenNetwork()
last_ref = await network.get_address_last_accepted_transaction_ref("DAG1...")
tx_hash = last_ref.hash
ordinal = last_ref.ordinal
Lifecycle
async def get_address_last_accepted_transaction_ref(self, address: str) -> TransactionReference:
return await self.cl1_api.get_last_reference(address)
Get Pending Transaction¶
Check if a transaction is pending. Returns None and logs result, if transaction is not pending.
import asyncio
from pypergraph import DagTokenNetwork
network = DagTokenNetwork()
for _ in range(0, 5):
pending_tx = await network.get_pending_transaction("f123...") # Transaction hash
if pending_tx:
break
await asyncio.sleep(10)
Lifecycle
async def get_pending_transaction(self, hash: str) -> PendingTransaction:
try:
return await self.cl1_api.get_pending_transaction(hash)
except NetworkError as e:
# NOOP for 404 or other exceptions
if e.status == 404:
logger.debug("No transaction pending.")
else:
logger.error(f"{e}")
raise e
Get Transactions for Address¶
Get all transaction by address (supports pagination). Returns None and logs result, if no transactions are found.
from pypergraph import DagTokenNetwork
network = DagTokenNetwork()
txs = await get_transactions_by_address("DAG1...", 10)
Lifecycle
async def get_transactions_by_address(
self,
address: str,
limit: Optional[int] = None, # Results per page
search_after: Optional[str] = None, # Timestamp
) -> List[Transaction]:
try:
return await self.be_api.get_transactions_by_address(address, limit, search_after)
except Exception:
# NOOP for 404 or other exceptions
logger.info(f"No transactions found for {address}.")
Get Accepted Transaction¶
Returns None and logs the result, if no transaction is found.
from pypergraph import DagTokenNetwork
network = DagTokenNetwork()
tx = await network.get_transaction("f123...")
Lifecycle
async def get_transaction(self, hash: str) -> Transaction:
try:
return await self.be_api.get_transaction(hash)
except Exception:
# NOOP for 404 or other exceptions
logger.info("DagTokenNetwork :: No transaction found.")
Get Snapshot¶
from pypergraph import DagTokenNetwork
network = DagTokenNetwork()
snapshot = await network.get_latest_snapshot()
Lifecycle
async def get_latest_snapshot(self) -> Snapshot:
response = await self.be_api.get_latest_snapshot()
return response
Post Signed Transaction¶
from pypergraph import DagTokenNetwork
network = DagTokenNetwork()
tx_hash = await network.post_transaction(tx)
Lifecycle
async def post_transaction(self, tx: SignedTransaction) -> str:
"""
Post a signed transaction to layer 1.
:param tx: Signed transaction.
:return: Transaction hash.
"""
response = await self.cl1_api.post_transaction(tx)
# Support both data/meta format and object return format
return response.get("data", {}).get("hash") or response.get("hash")