swiftCopy// Basic transaction evaluation
do {
let transaction = EvaluateTransactionParam(
to: "0x742d35Cc6634C0532925a3b844Bc454e4438f44e",
value: "1000000000000000000", // 1 ETH
data: nil,
maxFeePerGas: "30000000000",
maxPriorityFeePerGas: "1500000000",
gas: "21000",
gasPrice: nil
)
let evaluation = try await portal.evaluateTransaction(
chainId: "eip155:1",
transaction: transaction,
operationType: .all
)
// Check validation results
if let validation = evaluation.validation {
print("Security Status: \(validation.status)")
if validation.status != "VALIDATED" {
print("Warning: \(validation.description ?? "Unknown issue")")
// Print detected security features
validation.features.forEach { feature in
print("Security Feature: \(feature.type)")
print("Description: \(feature.description)")
}
}
}
// Check simulation results
if let simulation = evaluation.simulation {
print("Simulation Status: \(simulation.status)")
// Print asset changes
simulation.assetsDiffs.forEach { (token, diffs) in
print("\nToken: \(token)")
diffs.forEach { diff in
print("Incoming transfers:")
diff.in.forEach { transfer in
print(transfer)
}
print("Outgoing transfers:")
diff.out.forEach { transfer in
print(transfer)
}
}
}
}
} catch {
print("Evaluation failed: \(error)")
}
// Contract interaction evaluation
do {
let transaction = EvaluateTransactionParam(
to: "0x742d35Cc6634C0532925a3b844Bc454e4438f44e",
value: "0",
data: "0xa9059cbb000000000000000000000000742d35cc6634c0532925a3b844bc454e4438f44e0000000000000000000000000000000000000000000000000de0b6b3a7640000", // ERC20 transfer
maxFeePerGas: nil,
maxPriorityFeePerGas: nil,
gas: "65000",
gasPrice: "20000000000"
)
// Validate only
let validation = try await portal.evaluateTransaction(
chainId: "eip155:1",
transaction: transaction,
operationType: .validation
)
if let validationResult = validation.validation {
// Handle potential security issues
switch validationResult.status {
case "VALIDATED":
print("Transaction is safe")
case "WARNING":
print("Warning: \(validationResult.description ?? "Unknown warning")")
case "BLOCKED":
print("Blocked: \(validationResult.reason ?? "Unknown reason")")
default:
print("Unknown status: \(validationResult.status)")
}
}
} catch {
print("Validation failed: \(error)")
}