मुख्य सामग्री पर जाएं
यह गाइड Tenderly के API का उपयोग करके सरल और जटिल अलर्ट नियम स्थापित करने को कवर करती है। हम प्रत्येक expression प्रकार का पता लगाएंगे और फिर उन्हें परिष्कृत मॉनिटरिंग समाधानों में संयोजित करेंगे।

Alerting API reference

परिचय

Tenderly का Alert API आपको सरल और जटिल Alerts बनाने की अनुमति देता है। एक सरल अलर्ट में एक नियम होता है, उदाहरण के लिए method_call तब ट्रिगर होगा जब कोई transaction आपके public या external method को invoke करता है। एक जटिल अलर्ट में कई शर्तें हो सकती हैं, और जब वे सभी पूरी हो जाती हैं तो यह ट्रिगर होगा। उदाहरण के लिए, method_call और state_change के साथ एक अलर्ट तब ट्रिगर होगा जब कोई transaction दिए गए method को कॉल करता है और निर्दिष्ट storage slot को अपडेट करता है। API का उपयोग करके Alert को परिभाषित करते समय, आपको निम्नलिखित निर्दिष्ट करना होगा:
  • delivery channels जिन्हें alerting नियम ट्रिगर होने पर सूचित किया जाता है। Delivery Channels के बारे में अधिक देखें।
  • expressions array जो alert को ट्रिगर करेगा जब व्यक्तिगत expressions द्वारा दर्शाई गई सभी शर्तें पूरी हो जाती हैं।
आप delivery channels केवल Dashboard के माध्यम से बना सकते हैं, लेकिन आप उन्हें API का उपयोग करके प्राप्त कर सकते हैं।

Authentication

alerts बनाने से पहले, आपको authentication सेट अप करने और अपने प्रोजेक्ट की पहचान करने की आवश्यकता होगी:
const TENDERLY_API_KEY = 'your_api_key';
const PROJECT_SLUG = 'your_project_slug';
const ACCOUNT_ID = 'me';  // Use 'me' or your specific account ID

// Base configuration for axios
const baseConfig = {
  baseURL: 'https://api.tenderly.co/api/v1',
  headers: {
    'X-Access-Key': TENDERLY_API_KEY,
    'Content-Type': 'application/json'
  }
};

Expression प्रकार

आप Alerts के trigger नियम निर्दिष्ट करने के लिए विभिन्न expression प्रकारों का उपयोग कर सकते हैं।
Expression TypeMonitoringMain Use CaseRequired ArgumentsOptional Arguments
method_callcontracts में विशिष्ट function calls (direct या internal transactions लागू)जब महत्वपूर्ण functions कॉल होते हैं तो ट्रैक करें- line_number: वह line जहाँ function परिभाषित है; call_position: कॉल की स्थिति (“first”, “last”, “any”)कोई नहीं
whitelisted_caller_addressesविशिष्ट addresses से कॉल के लिएAllow-list आधारित access control- addresses: Ethereum addresses का Arrayकोई नहीं
blacklisted_caller_addressesब्लॉक किए गए addresses से कॉल के लिएBlock-list आधारित access control- addresses: Ethereum addresses का Arrayकोई नहीं
contract_addressविशिष्ट contract interactionscontract के साथ सभी interactions को ट्रैक करें- address: Contract address- transaction_type: “direct”, “source”, या “internal”
networkविशिष्ट networks पर eventsMulti-chain monitoring- network_id: Network/chain IDकोई नहीं
tagविशिष्ट tags वाले contractsGroup-आधारित monitoring- tag: Tag string- transaction_type: “direct”, “source”, या “internal”
tx_statusTransaction सफलता/विफलताविफल transactions को ट्रैक करेंकोई नहीं- transaction_success: boolean
function_paramsFunction parameter valuesविशिष्ट function inputs को ट्रैक करें- address: Contract address; function_line_number: Function परिभाषा line; parameter_conditions: शर्तों का Array- Parameter विशिष्ट विकल्प
tx_valueTransaction valueबड़े transfers को ट्रैक करें- transaction_value: wei में राशि; operator: Comparison operatorकोई नहीं
emitted_logContract eventsविशिष्ट events को ट्रैक करें- address: Contract address; event_name: Event name; event_id: Event signature- match_any: boolean; decode_events: boolean; parameter_conditions: शर्तों का Array
state_changeContract state changesstorage changes को ट्रैक करें- address: Contract address; parameter_conditions: शर्तों का Array- Comparison विकल्प (threshold, percentage)
view_functionRead-only function resultsगणना किए गए मान ट्रैक करें- address: Contract address; input: ABI encoded function data; network_id: Network ID- parameter_condition: Value comparison
eth_balanceETH balance changesbalance thresholds को ट्रैक करें- address: Contract address; threshold: wei में Balance; operator: Comparison operatorकोई नहीं
erc20_transfer_matcherERC20 transfer consistencytransfer mechanics को validate करें- address: Token address; log_name: Event name; balances: State variable nameकोई नहीं
tx_errortransaction errors के लिएअप्रत्याशित विफलताओं को ट्रैक करेंकोई नहीं- addresses_to_ignore: addresses का Array
tx_internal_errorinternal tx errors के लिएinternal call विफलताओं को ट्रैक करेंकोई नहीं- addresses_to_match: addresses का Array
no_actionनिष्क्रियता के लिएcontract निष्क्रियता को ट्रैक करें- check_after_seconds: Time threshold- no_log: Log शर्तें; no_transaction: Transaction शर्तें
sandwich_transactionsandwich attacks के लिएMEV गतिविधि को ट्रैक करें- address: Contract address- transaction_type: “direct”, “source”, या “internal”

नोट्स

  • comparison operators (operator) के लिए, मान्य मान हैं: >, >=, <, <=, ==, !=, contains, notContains
  • Parameter types (parameter_type) में शामिल हैं: uint, int, bool, address, string, byte
  • सभी addresses मान्य Ethereum addresses होने चाहिए (0x उपसर्ग वाले, 40 hex वर्ण)
  • Wei मान बड़ी संख्याओं को संभालने के लिए strings के रूप में पास किए जाने चाहिए
  • Network IDs लक्ष्य blockchain से मेल खाना चाहिए (जैसे, Ethereum mainnet के लिए “1”)
अधिक विवरण के लिए, Alerting API reference देखें।

सरल expressions के उदाहरण

सरल expression नियम स्थापित करने के उदाहरणों का अन्वेषण करें।

1. Method Call Monitoring

Use Case: अपने smart contract में विशिष्ट function calls की निगरानी करें।
const methodCallAlert = {
  name: "Critical Function Call Alert",
  description: "Monitors calls to critical functions",
  enabled: true,
  expressions: [{
    type: "method_call",
    expression: {
      line_number: 123, // Line where function is defined
      call_position: "any" // "first", "last", or "any"
    }
  },
  {
      "type": "contract_address",
      "expression": {
          "address": "0xe592427a0aece92de3edee1f18e0157c05861564"
      }
  }
  ],
  delivery_channels: [{
    id: "your_channel_id",
    enabled: true
  }]
};

await axios.post(
  `/account/${ACCOUNT_ID}/project/${PROJECT_SLUG}/alert`,
  methodCallAlert,
  baseConfig
);

2. State Change Monitoring

Use Case: contract state variables में परिवर्तनों की निगरानी करें, विशेष रूप से paused state या balance thresholds जैसे महत्वपूर्ण parameters को ट्रैक करने के लिए उपयोगी।
const stateChangeAlert = {
  name: "Critical State Change Alert",
  description: "Monitors important state changes",
  enabled: true,
  expressions: [{
    type: "state_change",
    expression: {
      address: "0x1234....",
      parameter_conditions: [
        {
          parameter_name: "pause",
          parameter_type: "bool",
          compare_change: true
        },
        {
          parameter_name: "totalSupply",
          parameter_type: "uint",
          compare_percentage: true,
          comparison_value: "5",
          operator: ">="
        }
      ]
    }
  }],
  delivery_channels: [{
    id: "your_channel_id",
    enabled: true
  }]
};

await axios.post(
  `/account/${ACCOUNT_ID}/project/${PROJECT_SLUG}/alert`,
  stateChangeAlert,
  baseConfig
);

3. Event Monitoring

Use Case: parameter filtering के साथ अपने contracts द्वारा emit किए गए विशिष्ट events की निगरानी करें।
const eventAlert = {
  name: "Large Transfer Event Alert",
  description: "Monitors large transfer events",
  enabled: true,
  expressions: [{
    type: "emitted_log",
    expression: {
      address: "0x1234....",
      event_name: "Transfer",
      event_id: "0x241ea03ca20251805084d27d4440371c34a0b85ff108f6bb5611248f73818b80",
      parameter_conditions: [
        {
          parameter_name: "amount",
          parameter_type: "uint",
          operator: ">=",
          comparison_value: "1000000000000000000" // 1 ETH
        }
      ],
      decode_events: true
    }
  }],
  delivery_channels: [{
    id: "your_channel_id",
    enabled: true
  }]
};

await axios.post(
  `/account/${ACCOUNT_ID}/project/${PROJECT_SLUG}/alert`,
  eventAlert,
  baseConfig
);

4. Native ETH Balance Monitoring

Use Case: alert तब जब किसी address का native ETH balance एक threshold से नीचे गिर जाए, उदाहरण के लिए एक relayer या operations wallet जिसे funded रहना चाहिए। alert को एक network और एक address तक सीमित करें, फिर native balance की तुलना threshold (wei में) से करें।
const balanceAlert = {
  name: "Low ETH balance alert",
  description: "Alerts when the native ETH balance falls below 0.1 ETH",
  enabled: true,
  expressions: [
    // Scope to a specific network
    {
      type: "network",
      expression: {
        network_id: "1" // Ethereum mainnet
      }
    },
    // Scope to the watched address
    {
      type: "contract_address",
      expression: {
        address: "0x3b8c2f1a9d7e4605c8a1b2d3e4f5061728394a5b"
      }
    },
    // Trigger when the native balance drops below the threshold
    {
      type: "eth_balance",
      expression: {
        address: "0x3b8c2f1a9d7e4605c8a1b2d3e4f5061728394a5b",
        threshold: "100000000000000000", // 0.1 ETH in wei
        operator: "<"
      }
    }
  ],
  delivery_channels: [{
    id: "your_channel_id",
    enabled: true
  }]
};

await axios.post(
  `/account/${ACCOUNT_ID}/project/${PROJECT_SLUG}/alert`,
  balanceAlert,
  baseConfig
);

जटिल Alert के उदाहरण

जटिल expression नियमों को दिखाने वाले उदाहरणों का अन्वेषण करें। जब expressions array में हर expression संतुष्ट होगा तो alert ट्रिगर होगा।

1. Security Monitoring System

Use Case: कई शर्तों को मिलाकर व्यापक security monitoring:
  • Admin function calls की निगरानी करें
  • बड़े value transfers को ट्रैक करें
  • blacklisted addresses पर नज़र रखें
  • महत्वपूर्ण parameters के state changes पर alert करें
const securityAlert = {
  name: "Security Monitoring System",
  description: "Comprehensive security monitoring for contract",
  enabled: true,
  expressions: [
    {
      "type": "contract_address",
      "expression": {
          "address": "0xe592427a0aece92de3edee1f18e0157c05861564"
      }
    },
    // Admin function monitoring
    {
      type: "method_call",
      expression: {
        line_number: 123,
        call_position: "any"
      }
    },
    // Blacklist checking
    {
      type: "blacklisted_caller_addresses",
      expression: {
        addresses: [
          "0xblacklisted1...",
          "0xblacklisted2..."
        ]
      }
    },
    // Large value transfers
    {
      type: "tx_value",
      expression: {
        transaction_value: "100000000000000000000", // 100 ETH
        operator: ">"
      }
    },
    // Critical state changes
    {
      type: "state_change",
      expression: {
        address: "0x1234....",
        parameter_conditions: [
          {
            parameter_name: "pause",
            parameter_type: "bool",
            compare_change: true
          },
          {
            parameter_name: "owner",
            parameter_type: "address",
            compare_change: true
          }
        ]
      }
    }
  ],
  delivery_channels: [{
    id: "your_channel_id",
    enabled: true
  }]
};

await axios.post(
  `/account/${ACCOUNT_ID}/project/${PROJECT_SLUG}/alert`,
  securityAlert,
  baseConfig
);

2. DeFi Protocol Monitor

Use Case: निम्नलिखित के लिए DeFi protocol की निगरानी करें:
  • बड़े trades/swaps
  • महत्वपूर्ण price प्रभाव
  • Liquidity परिवर्तन
  • विफल transactions
  • Sandwich attacks
const defiMonitor = {
  name: "DeFi Protocol Monitor",
  description: "Comprehensive DeFi protocol monitoring system",
  enabled: true,
  expressions: [
    // Monitor large swaps via events
    {
      type: "emitted_log",
      expression: {
        address: "0xpool_address",
        event_name: "Swap",
        event_id: "0x...", // Swap event signature
        parameter_conditions: [
          {
            parameter_name: "amountOut",
            parameter_type: "uint",
            operator: ">=",
            comparison_value: "1000000000000000000000" // 1000 tokens
          }
        ],
        decode_events: true
      }
    },
    // Monitor liquidity changes
    {
      type: "state_change",
      expression: {
        address: "0xpool_address",
        parameter_conditions: [
          {
            parameter_name: "reserve0",
            parameter_type: "uint",
            compare_percentage: true,
            comparison_value: "10",
            operator: ">="
          },
          {
            parameter_name: "reserve1",
            parameter_type: "uint",
            compare_percentage: true,
            comparison_value: "10",
            operator: ">="
          }
        ]
      }
    },
    // Monitor for sandwich attacks
    {
      type: "sandwich_transaction",
      expression: {
        address: "0xpool_address",
        transaction_type: "direct"
      }
    },
    // Monitor failed transactions
    {
      type: "tx_error",
      expression: {
        addresses_to_ignore: [] // Monitor all addresses
      }
    }
  ],
  delivery_channels: [{
    id: "your_channel_id",
    enabled: true
  }]
};

await axios.post(
  `/account/${ACCOUNT_ID}/project/${PROJECT_SLUG}/alert`,
  defiMonitor,
  baseConfig
);

3. निष्क्रियता Alerts के साथ ERC20 Token Monitor

Use Case: व्यापक token monitoring जिसमें शामिल है:
  • Transfer monitoring
  • Balance जांच
  • State consistency जांच
  • निष्क्रियता monitoring
const tokenMonitor = {
  name: "ERC20 Token Monitor",
  description: "Comprehensive ERC20 token monitoring with inactivity alerts",
  enabled: true,
  expressions: [
    // Monitor Transfer event consistency
    {
      type: "erc20_transfer_matcher",
      expression: {
        address: "0xtoken_address",
        log_name: "Transfer",
        balances: "balances"
      }
    },
    // Monitor large transfers
    {
      type: "emitted_log",
      expression: {
        address: "0xtoken_address",
        event_name: "Transfer",
        event_id: "0xddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef",
        parameter_conditions: [
          {
            parameter_name: "value",
            parameter_type: "uint",
            operator: ">=",
            comparison_value: "1000000000000000000000" // 1000 tokens
          }
        ]
      }
    },
    // Monitor total supply changes
    {
      type: "state_change",
      expression: {
        address: "0xtoken_address",
        parameter_conditions: [
          {
            parameter_name: "totalSupply",
            parameter_type: "uint",
            compare_percentage: true,
            comparison_value: "1",
            operator: ">="
          }
        ]
      }
    },
    // Monitor for inactivity
    {
      type: "no_action",
      expression: {
        no_log: {
          address: "0xtoken_address",
          event_name: "Transfer",
          event_id: "0xddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef"
        },
        check_after_seconds: 86400 // 24 hours
      }
    }
  ],
  delivery_channels: [{
    id: "your_channel_id",
    enabled: true
  }]
};

await axios.post(
  `/account/${ACCOUNT_ID}/project/${PROJECT_SLUG}/alert`,
  tokenMonitor,
  baseConfig
);