> ## Documentation Index
> Fetch the complete documentation index at: https://docs.tenderly.co/llms.txt
> Use this file to discover all available pages before exploring further.

# Prefill the Simulator with a draft link

> एक base64url-encoded URL बनाएँ जो CI या tooling से simulations साझा करने के लिए, पूर्व-भरे transaction form के साथ Tenderly Simulator खोलता है।

एक draft link [Tenderly Simulator](/simulator-ui/overview) को पूर्व-भरे form के साथ खोलता है। कुछ भी तब तक नहीं चलता जब तक प्राप्तकर्ता **Simulate** पर क्लिक नहीं करता, इसलिए link को test reports, pull requests, या alerts में साझा करना सुरक्षित है।

एक draft एक **एकल simulation** को पूर्व-भरता है, [bundle](/simulator-ui/simulation-bundles) नहीं। यह एक 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 हटाया गया।

<Tip>
  एक बार साझा करने के लिए आपको स्क्रिप्ट की आवश्यकता नहीं है। Simulator में form भरें और पेज header में **Copy draft link** पर क्लिक करें (bundle में एक ही simulation होने पर दिखाया जाता है)। इस पेज का बाकी हिस्सा CI, test reports, या अन्य tooling से programmatically links उत्पन्न करने के लिए है।
</Tip>

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

एक न्यूनतम raw-calldata draft वह सब है जो अधिकांश CI scripts को चाहिए। `to` address `contractAddress` में जाता है, और calldata `rawFunctionInput` में जाता है:

```json theme={"theme":{"light":"catppuccin-latte","dark":"catppuccin-mocha"}}
{
  "v": 1,
  "network": { "id": "1" },
  "row": {
    "contractAddress": "0xdac17f958d2ee523a2206206994597c13d831ec7",
    "from": "0xab5801a7d398351b8be11c439e05c5b3259aec9b",
    "inputDataType": "raw",
    "rawFunctionInput": "0xa9059cbb…"
  }
}
```

उस payload को encode करें और इसे URL में जोड़ें:

```python theme={"theme":{"light":"catppuccin-latte","dark":"catppuccin-mocha"}}
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}"
```

```javascript theme={"theme":{"light":"catppuccin-latte","dark":"catppuccin-mocha"}}
// 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}`;
```

```bash theme={"theme":{"light":"catppuccin-latte","dark":"catppuccin-mocha"}}
# 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

| Field     | Type                         | आवश्यक | विवरण                                                                                                                                                                                                                                                                                                                                                                                                                  |
| --------- | ---------------------------- | ------ | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| `v`       | number                       | हाँ    | 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](/platform/supported-networks) देखें। |
| `row`     | object                       | हाँ    | form fields। नीचे [`row` fields](#row-fields) देखें।                                                                                                                                                                                                                                                                                                                                                                   |

## `row` fields

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

### Contract और function

| Field               | Type                   | विवरण                                                                                                                                                                                                                                                                                                                                                                                                       |
| ------------------- | ---------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| `contractAddress`   | string                 | **आवश्यक।** "to" address। link खुलने पर contract और इसका ABI प्राप्तकर्ता की तरफ लाया जाता है।                                                                                                                                                                                                                                                                                                              |
| `inputDataType`     | `"decoded"` या `"raw"` | function-input mode चुनता है। `rawFunctionInput` के साथ `"raw"` का उपयोग करें, या `contractFunction` और `functionInputs` के साथ `"decoded"` का।                                                                                                                                                                                                                                                             |
| `rawFunctionInput`  | string                 | raw mode के लिए Hex calldata (`0x…`)। कोई ABI आवश्यक नहीं है, जो इसे scripts के लिए सबसे मजबूत विकल्प बनाता है।                                                                                                                                                                                                                                                                                             |
| `contractFunction`  | object या `null`       | Decoded-mode function reference: `{ "name": string, "selector"?: string, "signature"?: string }`। object के अंदर `name` आवश्यक है। `selector` (4-byte hex, उदा., `"0xa9059cbb"`) वैकल्पिक है लेकिन प्राथमिकता है: इसे पहले मिलाया जाता है और overloaded functions के लिए सटीक है। इसके बिना, matching `name` पर वापस आ जाती है और गलत overload चुन सकती है। `signature` केवल सूचनात्मक है।                  |
| `functionInputs`    | array या object        | Decoded-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 बटन उत्पन्न करता है)। |
| `contractAbiImport` | string                 | in-app "Edit ABI" field को पूर्व-भरता है। खुलने पर Function matching केवल **fetched** ABI का उपयोग करता है, इसलिए यह field unverified contracts के लिए decoded mode को काम नहीं कराता है। उनके लिए raw calldata का उपयोग करें।                                                                                                                                                                              |

### Transaction parameters

| Field      | Type             | विवरण                         |
| ---------- | ---------------- | ----------------------------- |
| `from`     | string           | Sender address।               |
| `gas`      | string या number | Gas limit, उदा., `"8000000"`। |
| `gasPrice` | string या number | wei में Gas price।            |
| `value`    | string या number | wei में Native-token value।   |

### Block selection

| Field             | Type                      | विवरण                                                                                                     |
| ----------------- | ------------------------- | --------------------------------------------------------------------------------------------------------- |
| `block`           | string या number          | जिस block पर simulate करना है। chain head के लिए छोड़ें।                                                  |
| `blockIndex`      | string, number, या `null` | block के अंदर transaction position। `null` या छोड़ा गया block की शुरुआत को दर्शाता है।                    |
| `endOfBlock`      | boolean                   | `true` block में हर transaction के बाद simulated transaction चलाता है (`blockIndex` को override करता है)। |
| `usePendingBlock` | boolean                   | `true` एक निश्चित संख्या के बजाय pending block पर simulate करता है।                                       |

UI में block selection और transaction index कैसे व्यवहार करते हैं, इसके लिए [Simulation Parameters](/simulator-ui/parameters#pending-vs-historical-block) देखें।

### L2 parameters

ये fields केवल OP-stack और Boba networks पर लागू होते हैं।

| Field             | Type    | विवरण                                           |
| ----------------- | ------- | ----------------------------------------------- |
| `depositTx`       | boolean | L2 deposit transaction के रूप में चिह्नित करें। |
| `systemTx`        | boolean | L2 system transaction के रूप में चिह्नित करें।  |
| `mint`            | string  | Deposit mint राशि।                              |
| `l1BlockNumber`   | string  | Originating L1 block number।                    |
| `l1Timestamp`     | string  | Originating L1 timestamp।                       |
| `l1MessageSender` | string  | L1 message sender address।                      |
| `l1Turing`        | string  | Boba Turing डेटा।                               |

### Overrides

| Field                  | Type   | विवरण                                                                                                                                                                                                                                                                                                                                                                   |
| ---------------------- | ------ | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| `blockHeaderOverrides` | object | `{ "number"?: …, "timestamp"?: … }`, प्रत्येक एक string, number, या `null`। simulated block header को override करता है।                                                                                                                                                                                                                                                 |
| `stateOverrides`       | array  | Per-contract [state overrides](/simulator-ui/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 हैं। |
| `accessList`           | array  | [EIP-2930](https://eips.ethereum.org/EIPS/eip-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](/simulator-ui/parameters) देखें। एक one-shot simulation के बजाय एक persistent environment के रूप में संशोधित state रखने के लिए, [Virtual Environments](/virtual-environments/overview) का उपयोग करें।
