evaluateTransaction
Evaluates a transaction for security and risk assessment, providing both validation and simulation results.
Function Signature
public func evaluateTransaction(
chainId: String,
transaction: EvaluateTransactionParam,
operationType: EvaluateTransactionOperationType? = nil
) async throws -> BlockaidValidateTrxRes
Parameters
chainId
: The chain identifier in CAIP-2 format (e.g., "eip155:1" for Ethereum mainnet)transaction
: AnEvaluateTransactionParam
object containing:to
: (Required) Destination addressvalue
: (Optional) Transaction value in weidata
: (Optional) Transaction data for contract interactionsmaxFeePerGas
: (Optional) Maximum total fee per gas unitmaxPriorityFeePerGas
: (Optional) Maximum priority fee per gas unitgas
: (Optional) Gas limitgasPrice
: (Optional) Gas price for legacy transactions
operationType
: OptionalEvaluateTransactionOperationType
with values:.validation
: Perform security validation only.simulation
: Perform transaction simulation only.all
: Perform both validation and simulation
Returns
A BlockaidValidateTrxRes
containing:
validation
: Security validation results including:classification
: Type of potential security issuedescription
: Detailed description of the validation resultsfeatures
: Array of detected security features, each containing:type
: Feature typefeatureId
: Unique identifierdescription
: Feature descriptionaddress
: Related address if applicable
reason
: Explanation of the validation resultresultType
: Type of resultstatus
: Validation status
simulation
: Transaction simulation results including:accountAddress
: Address being analyzedaccountSummary
: Summary of account state changesaddressDetails
: Detailed information about involved addressesassetsDiffs
: Asset balance changes, containing:asset
: Asset informationin
: Incoming transfersout
: Outgoing transfers
exposures
: Risk exposure analysisstatus
: Simulation statustotalUsdDiff
: Total USD value changetotalUsdExposure
: Total USD value at risk
block
: Block number used for evaluationchain
: Chain identifier
Example Usage
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)")
}
Implementation Notes
Always evaluate transactions involving large amounts or contract interactions
Consider both validation and simulation results for comprehensive security
Handle different validation statuses appropriately in your UI
Gas parameters should be adjusted based on current network conditions
For contract interactions, carefully validate the data field
Last updated
Was this helpful?