// Native ETH transfer
do {
let params = BuildTransactionParam(
to: "0x1234567890123456789012345678901234567890",
token: "ETH",
amount: "1000000000000000000" // 1 ETH
)
let response = try await portal.buildEip155Transaction(
chainId: "eip155:1",
params: params
)
print("Transaction details:")
print("From: \(response.transaction.from)")
print("To: \(response.transaction.to)")
print("Value: \(response.transaction.value ?? "0")")
print("\nMetadata:")
print("Amount: \(response.metadata.amount)")
print("Token Symbol: \(response.metadata.tokenSymbol ?? "ETH")")
if let error = response.error {
print("Warning: \(error)")
}
} catch {
print("Failed to build transaction: \(error)")
}
// ERC20 token transfer
do {
// Example: Transfer 100 USDC
let params = BuildTransactionParam(
to: "0x1234567890123456789012345678901234567890",
token: "0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48", // USDC contract address
amount: "100000000" // 100 USDC (6 decimals)
)
let response = try await portal.buildEip155Transaction(
chainId: "eip155:1",
params: params
)
// Verify the built transaction
print("Token Transfer Details:")
print("Contract Address: \(response.metadata.tokenAddress ?? "N/A")")
print("Amount: \(response.metadata.amount) \(response.metadata.tokenSymbol ?? "tokens")")
print("From: \(response.metadata.fromAddress)")
print("To: \(response.metadata.toAddress)")
print("Raw Amount: \(response.metadata.rawAmount)")
} catch {
print("Failed to build token transfer: \(error)")
}
// Example with transaction validation
func buildAndValidateTransaction(
to: String,
token: String,
amount: String
) async throws {
// Build the transaction
let params = BuildTransactionParam(
to: to,
token: token,
amount: amount
)
let response = try await portal.buildEip155Transaction(
chainId: "eip155:1",
params: params
)
// Validate the response
guard response.error == nil else {
throw TransactionError.buildFailed(response.error!)
}
// Validate addresses
guard response.metadata.fromAddress.starts(with: "0x"),
response.metadata.toAddress.starts(with: "0x") else {
throw TransactionError.invalidAddress
}
// Validate amount
guard let rawAmount = Double(response.metadata.rawAmount),
rawAmount > 0 else {
throw TransactionError.invalidAmount
}
print("Transaction validated successfully")
print("Ready to send: \(response.metadata.amount) \(response.metadata.tokenSymbol ?? "tokens")")
}