Data Access Patterns
Learning Objective
Master the dot notation syntax for accessing nested data structures
Function Parameter Access
watchRule:
{
"expressions": [
"system.uintCompare(tx1.USDC.F.transfer.amount, >, 1000000000000000000000000000)"
]
}
Accesses transfer amount parameter from USDC transfer function
Function Parameter Access with Literal Placeholder
watchRule:
{
"expressions": [
"system.uintCompare(tx1.DAI.F.transferFrom.amount, >, ${largeAmount})"
]
}
options:
{
"literalDefs": {
"largeAmount": 1e+27
}
}
Accesses transferFrom amount parameter and compares to configurable threshold
Event Field Access
watchRule:
{
"expressions": [
"system.addressCompare(tx1.UniswapV2Pair.E.Swap.to, ==, 0x67bcc2443971070599265b34cf63dF57eAbA5940)"
]
}
Accesses recipient address from Uniswap Swap event
Event Field Access with Literal Placeholder
watchRule:
{
"expressions": [
"system.addressCompare(tx1.AavePool.E.Deposit.user, ==, ${suspiciousUser})"
]
}
options:
{
"literalDefs": {
"suspiciousUser": "0x67bcc2443971070599265b34cf63dF57eAbA5940"
}
}
Accesses user address from Aave Deposit event and compares to configurable address
Transaction Metadata Fields
watchRule:
{
"expressions": [
"system.addressCompare(tx1.WETH.from, ==, 0x67bcc2443971070599265b34cf63dF57eAbA5940)"
]
}
Accesses transaction sender address from WETH transaction
Transaction Metadata with Literal Placeholder
watchRule:
{
"expressions": [
"system.addressCompare(tx1.CompoundCToken.to, ==, ${targetContract})"
]
}
options:
{
"literalDefs": {
"targetContract": "0x67bcc2443971070599265b34cf63dF57eAbA5940"
}
}
Accesses transaction recipient address and compares to configurable target
Direct Transaction Field Access
watchRule:
{
"expressions": [
"system.addressCompare(tx1.LendingPool.from, !=, 0x0000000000000000000000000000000000000000)"
]
}
Accesses transaction sender directly without function/event context
Object Property Access
watchRule:
{
"expressions": [
"system.uintCompare(tx1.Router.F.smartSwapByOrderId.orders[0].makerAmount, >, 1000000000000000000000000000)"
]
}
Accesses nested object property within function parameter
Object Property Access with Literal Placeholder
watchRule:
{
"expressions": [
"system.uintCompare(tx1.MultisigWallet.F.executeTransaction.proposal.amount, >, ${significantAmount})"
]
}
options:
{
"literalDefs": {
"significantAmount": 1e+27
}
}
Accesses nested proposal amount and compares to configurable threshold
Complex Nested Array Access
watchRule:
{
"expressions": [
"system.stringCompare(tx1.Router.F.smartSwapByOrderId.batches[0][1].extraData[0], ==, 0x01)"
]
}
Accesses deeply nested array element within batch data structure
Complex Nested Array Access with Literal Placeholder
watchRule:
{
"expressions": [
"system.stringCompare(tx1.DEXAggregator.F.multiSwap.swaps[0][1].callData[0], ==, ${expectedCalldata})"
]
}
options:
{
"literalDefs": {
"expectedCalldata": "0x01"
}
}
Accesses nested swap calldata and compares to configurable expected value
Internal Transaction Metadata
watchRule:
{
"expressions": [
"system.addressCompare(tx1.itx1.USDC.internal_from, ==, 0x67bcc2443971070599265b34cf63dF57eAbA5940)"
]
}
Accesses internal transaction sender address
Internal Transaction Metadata with Literal Placeholder
watchRule:
{
"expressions": [
"system.addressCompare(tx1.itx2.DAI.to_address, ==, ${trustedRecipient})"
]
}
options:
{
"literalDefs": {
"trustedRecipient": "0x67bcc2443971070599265b34cf63dF57eAbA5940"
}
}
Accesses internal transaction recipient address and compares to configurable trusted address