Data Access Patterns

Accessing function parameters, event fields, and transaction metadata

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)"
  ]
}
Concept: Function parameter access

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
  }
}
Concept: Function parameter access with literal placeholder

Accesses transferFrom amount parameter and compares to configurable threshold

Event Field Access

watchRule:

{
  "expressions": [
    "system.addressCompare(tx1.UniswapV2Pair.E.Swap.to, ==, 0x67bcc2443971070599265b34cf63dF57eAbA5940)"
  ]
}
Concept: Event field access

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"
  }
}
Concept: Event field access with literal placeholder

Accesses user address from Aave Deposit event and compares to configurable address

Transaction Metadata Fields

watchRule:

{
  "expressions": [
    "system.addressCompare(tx1.WETH.from, ==, 0x67bcc2443971070599265b34cf63dF57eAbA5940)"
  ]
}
Concept: Transaction metadata fields

Accesses transaction sender address from WETH transaction

Transaction Metadata with Literal Placeholder

watchRule:

{
  "expressions": [
    "system.addressCompare(tx1.CompoundCToken.to, ==, ${targetContract})"
  ]
}

options:

{
  "literalDefs": {
    "targetContract": "0x67bcc2443971070599265b34cf63dF57eAbA5940"
  }
}
Concept: Transaction metadata with literal placeholder

Accesses transaction recipient address and compares to configurable target

Direct Transaction Field Access

watchRule:

{
  "expressions": [
    "system.addressCompare(tx1.LendingPool.from, !=, 0x0000000000000000000000000000000000000000)"
  ]
}
Concept: Direct transaction field access

Accesses transaction sender directly without function/event context

Object Property Access

watchRule:

{
  "expressions": [
    "system.uintCompare(tx1.Router.F.smartSwapByOrderId.orders[0].makerAmount, >, 1000000000000000000000000000)"
  ]
}
Concept: Object property access

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
  }
}
Concept: Object property access with literal placeholder

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)"
  ]
}
Concept: Complex nested array access

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"
  }
}
Concept: Complex nested array access with literal placeholder

Accesses nested swap calldata and compares to configurable expected value

Internal Transaction Metadata

watchRule:

{
  "expressions": [
    "system.addressCompare(tx1.itx1.USDC.internal_from, ==, 0x67bcc2443971070599265b34cf63dF57eAbA5940)"
  ]
}
Concept: Internal transaction metadata

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"
  }
}
Concept: Internal transaction metadata with literal placeholder

Accesses internal transaction recipient address and compares to configurable trusted address