// Basic transaction fetch
do {
let transactions = try await portal.getTransactions(
"eip155:1",
limit: 10,
order: .DESC
)
for tx in transactions {
print("\nTransaction: \(tx.hash)")
print("Block: \(tx.blockNum)")
print("From: \(tx.from)")
print("To: \(tx.to)")
if let value = tx.value {
print("Value: \(value)")
}
if let asset = tx.asset {
print("Asset: \(asset)")
}
print("Time: \(tx.metadata.blockTimestamp)")
// Handle NFT transfers
if let erc721Id = tx.erc721TokenId {
print("NFT Token ID: \(erc721Id)")
}
if let erc1155Data = tx.erc1155Metadata {
print("ERC1155 Transfers:")
for metadata in erc1155Data {
if let tokenId = metadata?.tokenId,
let value = metadata?.value {
print("Token ID: \(tokenId), Amount: \(value)")
}
}
}
// Contract interaction details
if let contract = tx.rawContract {
print("\nContract Details:")
if let address = contract.address {
print("Contract Address: \(address)")
}
if let value = contract.value {
print("Contract Value: \(value)")
}
}
}
} catch {
print("Error fetching transactions: \(error)")
}
// Example with transaction analysis
do {
let transactions = try await portal.getTransactions("eip155:1")
// Group transactions by category
let groupedTxs = Dictionary(grouping: transactions) { $0.category }
for (category, txs) in groupedTxs {
print("\nCategory: \(category)")
print("Count: \(txs.count)")
// Calculate total value for the category
let totalValue = txs.compactMap { $0.value }.reduce(0, +)
print("Total Value: \(totalValue)")
// Count token transfers
let nftTransfers = txs.filter { $0.erc721TokenId != nil }.count
print("NFT Transfers: \(nftTransfers)")
let erc1155Transfers = txs.filter { $0.erc1155Metadata != nil }.count
print("ERC1155 Transfers: \(erc1155Transfers)")
}
} catch {
print("Error analyzing transactions: \(error)")
}
// Example with pagination and date filtering
func loadTransactions(fromDate: Date) async {
let dateFormatter = ISO8601DateFormatter()
var offset = 0
let pageSize = 20
var hasMore = true
while hasMore {
do {
let txs = try await portal.getTransactions(
"eip155:1",
limit: pageSize,
offset: offset,
order: .DESC
)
// Filter transactions by date
for tx in txs {
let txDate = dateFormatter.date(from: tx.metadata.blockTimestamp)
if let date = txDate, date >= fromDate {
print("Processing transaction: \(tx.hash)")
} else {
hasMore = false
break
}
}
if txs.count < pageSize {
hasMore = false
} else {
offset += pageSize
}
} catch {
print("Error loading transactions: \(error)")
hasMore = false
}
}
}