मुख्य सामग्री पर जाएं
एक draft link Tenderly Simulator को पूर्व-भरे form के साथ खोलता है। कुछ भी तब तक नहीं चलता जब तक प्राप्तकर्ता Simulate पर क्लिक नहीं करता, इसलिए link को test reports, pull requests, या alerts में साझा करना सुरक्षित है। एक draft एक एकल simulation को पूर्व-भरता है, bundle नहीं। यह एक transaction form (एक row) को populate करता है; यह multi-step bundle का पुनर्निर्माण नहीं करता।

URL प्रारूप

link draft query parameter के साथ Simulator का नया-simulation route है: https://dashboard.tenderly.co/<org>/<project>/simulator/new?draft=<value> <value> draft JSON payload है, UTF-8 encoded, फिर base64url: standard base64 जिसमें + को - से बदला गया, / को _ से बदला गया, और = padding हटाया गया।
एक बार साझा करने के लिए आपको स्क्रिप्ट की आवश्यकता नहीं है। Simulator में form भरें और पेज header में Copy draft link पर क्लिक करें (bundle में एक ही simulation होने पर दिखाया जाता है)। इस पेज का बाकी हिस्सा CI, test reports, या अन्य tooling से programmatically links उत्पन्न करने के लिए है।

त्वरित शुरुआत

एक न्यूनतम raw-calldata draft वह सब है जो अधिकांश CI scripts को चाहिए। to address contractAddress में जाता है, और calldata rawFunctionInput में जाता है:
{
  "v": 1,
  "network": { "id": "1" },
  "row": {
    "contractAddress": "0xdac17f958d2ee523a2206206994597c13d831ec7",
    "from": "0xab5801a7d398351b8be11c439e05c5b3259aec9b",
    "inputDataType": "raw",
    "rawFunctionInput": "0xa9059cbb…"
  }
}
उस payload को encode करें और इसे URL में जोड़ें:
import base64, json

payload = {
    "v": 1,
    "network": {"id": "1"},
    "row": {
        "contractAddress": "0xdac17f958d2ee523a2206206994597c13d831ec7",
        "from": "0xab5801a7d398351b8be11c439e05c5b3259aec9b",
        "inputDataType": "raw",
        "rawFunctionInput": "0xa9059cbb…",
    },
}

draft = base64.urlsafe_b64encode(json.dumps(payload).encode()).decode().rstrip("=")
url = f"https://dashboard.tenderly.co/<org>/<project>/simulator/new?draft={draft}"
// Node.js
const payload = {
  v: 1,
  network: { id: "1" },
  row: {
    contractAddress: "0xdac17f958d2ee523a2206206994597c13d831ec7",
    from: "0xab5801a7d398351b8be11c439e05c5b3259aec9b",
    inputDataType: "raw",
    rawFunctionInput: "0xa9059cbb…",
  },
};

const draft = Buffer.from(JSON.stringify(payload)).toString("base64url");
const url = `https://dashboard.tenderly.co/<org>/<project>/simulator/new?draft=${draft}`;
# Shell, reading the payload from payload.json (GNU coreutils)
DRAFT=$(jq -c . payload.json | basenc --base64url -w0 | tr -d '=')
# macOS fallback:
DRAFT=$(jq -c . payload.json | base64 | tr '+/' '-_' | tr -d '=\n')

शीर्ष-स्तरीय payload

FieldTypeआवश्यकविवरण
vnumberहाँSchema version। 1 होना चाहिए।
network{ "id": string } या nullहाँstring के रूप में Chain id ("1" Mainnet है, "56" BNB Chain है, और इसी तरह)। यह प्राप्तकर्ता के project पर सक्षम एक network होना चाहिए, अन्यथा उन्हें “network not available” error और एक खाली form मिलता है। हमेशा इसे सेट करें। null स्वीकार्य है लेकिन contract lookup को छोड़ देता है और form को अधिकतर अनुपयोगी छोड़ देता है। Chain ids के लिए Supported Networks देखें।
rowobjectहाँform fields। नीचे row fields देखें।

row fields

केवल contractAddress आवश्यक है। जो आपको आवश्यक नहीं है उसे छोड़ दें। छोड़े गए fields form के defaults रखते हैं, और अज्ञात अतिरिक्त fields अनदेखे किए जाते हैं।

Contract और function

FieldTypeविवरण
contractAddressstringआवश्यक। “to” address। link खुलने पर contract और इसका ABI प्राप्तकर्ता की तरफ लाया जाता है।
inputDataType"decoded" या "raw"function-input mode चुनता है। rawFunctionInput के साथ "raw" का उपयोग करें, या contractFunction और functionInputs के साथ "decoded" का।
rawFunctionInputstringraw mode के लिए Hex calldata (0x…)। कोई ABI आवश्यक नहीं है, जो इसे scripts के लिए सबसे मजबूत विकल्प बनाता है।
contractFunctionobject या nullDecoded-mode function reference: { "name": string, "selector"?: string, "signature"?: string }। object के अंदर name आवश्यक है। selector (4-byte hex, उदा., "0xa9059cbb") वैकल्पिक है लेकिन प्राथमिकता है: इसे पहले मिलाया जाता है और overloaded functions के लिए सटीक है। इसके बिना, matching name पर वापस आ जाती है और गलत overload चुन सकती है। signature केवल सूचनात्मक है।
functionInputsarray या objectDecoded-mode argument values। प्राथमिकता: ABI क्रम में एक positional array, उदाहरण के लिए ["0xabc…", "1000000", ["0xa…", "0xb…"]]। Values strings, numbers, या booleans हैं। Array और tuple arguments को nested arrays या objects के रूप में natively पास किया जा सकता है, बिना पहले से stringifying किए। keyed form { "input_0": … } भी स्वीकार्य है (यह वह है जो UI का Copy बटन उत्पन्न करता है)।
contractAbiImportstringin-app “Edit ABI” field को पूर्व-भरता है। खुलने पर Function matching केवल fetched ABI का उपयोग करता है, इसलिए यह field unverified contracts के लिए decoded mode को काम नहीं कराता है। उनके लिए raw calldata का उपयोग करें।

Transaction parameters

FieldTypeविवरण
fromstringSender address।
gasstring या numberGas limit, उदा., "8000000"
gasPricestring या numberwei में Gas price।
valuestring या numberwei में Native-token value।

Block selection

FieldTypeविवरण
blockstring या numberजिस block पर simulate करना है। chain head के लिए छोड़ें।
blockIndexstring, number, या nullblock के अंदर transaction position। null या छोड़ा गया block की शुरुआत को दर्शाता है।
endOfBlockbooleantrue block में हर transaction के बाद simulated transaction चलाता है (blockIndex को override करता है)।
usePendingBlockbooleantrue एक निश्चित संख्या के बजाय pending block पर simulate करता है।
UI में block selection और transaction index कैसे व्यवहार करते हैं, इसके लिए Simulation Parameters देखें।

L2 parameters

ये fields केवल OP-stack और Boba networks पर लागू होते हैं।
FieldTypeविवरण
depositTxbooleanL2 deposit transaction के रूप में चिह्नित करें।
systemTxbooleanL2 system transaction के रूप में चिह्नित करें।
mintstringDeposit mint राशि।
l1BlockNumberstringOriginating L1 block number।
l1TimestampstringOriginating L1 timestamp।
l1MessageSenderstringL1 message sender address।
l1TuringstringBoba Turing डेटा।

Overrides

FieldTypeविवरण
blockHeaderOverridesobject{ "number"?: …, "timestamp"?: … }, प्रत्येक एक string, number, या null। simulated block header को override करता है।
stateOverridesarrayPer-contract state overrides: { "id"?: string, "contractAddress": string, "balance": string, "storage"?: [{ "key": string, "value": string }], "code"?: string }id वैकल्पिक है और अनुपस्थित होने पर उत्पन्न होता है। balance wei में है ("" का अर्थ है कोई balance override नहीं)। storage keys और values 32-byte hex हैं।
accessListarrayEIP-2930 access list: { "address": string, "storageKeys": string[] }
दो override प्रकार केवल UI हैं और एक draft में सेट नहीं किए जा सकते। link खोलने के बाद उन्हें app में कॉन्फ़िगर करें: fund-address ERC-20 overrides और custom Solidity sources (in-app “Edit source” सुविधा)।

Validation

Draft hydration सब-कुछ-या-कुछ-नहीं है। एक गुम आवश्यक field, गलत v, या कोई भी गलत-typed field पूरे payload को अस्वीकार करता है: प्राप्तकर्ता “This draft link is invalid or corrupted” और एक खाली form देखता है। कोई partial hydration नहीं है, इसलिए एक टूटी हुई स्क्रिप्ट half-working के बजाय दृश्यमान रूप से विफल हो जाती है।

सीमाएँ और सुझाव

  • अंतिम URL को 2000 characters से कम रखें। app लंबे links को copy करने से मना करता है, और browsers और proxies उन्हें truncate कर सकते हैं। कई inputs वाले Decoded calls ~1900 के आसपास आते हैं।
  • Payload shapes की खोज: Simulator UI में form भरें, Copy draft link पर क्लिक करें, और draft value को base64url-decode करें। परिणाम आपके सटीक उपयोग-मामले के लिए एक known-good payload है, और advanced shapes (stateOverrides, accessList) को सही पाने का यह सबसे अच्छा तरीका है।
  • link खुलने पर contract ABI लाया जाता है। यदि इसे हल नहीं किया जा सकता (एक unverified contract), decoded-mode drafts address भरे हुए लेकिन कोई function चयनित न होने के साथ खुलते हैं। Raw mode इससे मुक्त है।
एक draft जो form fields populate करता है, उसके लिए Simulation Parameters देखें। एक one-shot simulation के बजाय एक persistent environment के रूप में संशोधित state रखने के लिए, Virtual Environments का उपयोग करें।