> ## 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.

# Managing Contracts

> Tenderly SDK का उपयोग करके smart contracts को जोड़ने, अपडेट करने, हटाने, और वेरिफ़ाई करने के लिए इन कोड स्निपेट उदाहरणों का उपयोग करें।

[Tenderly SDK](/platform/sdk/introduction) आपके Tenderly project से जुड़े contracts का प्रबंधन करने के लिए एक `ContractRepository` क्लास प्रदान करता है। `ContractRepository` आपको contracts जोड़ने, अपडेट करने, और हटाने के साथ-साथ उन्हें वेरिफ़ाई करने की अनुमति देता है।

Tenderly SDK इनिशियलाइज़ होने के साथ, आप **`ContractRepository`** इंस्टेंस को एक्सेस करने के लिए **`contracts`** namespace का उपयोग कर सकते हैं। उसी project में wallets का प्रबंधन करने के लिए, [Managing Wallets](/platform/sdk/managing-wallets) देखें।

### एक contract जोड़ना

एक नया contract जोड़ने के लिए, **`contracts`** namespace की `add` मेथड का उपयोग करें:

```jsx title="example.jsx" showLineNumbers theme={"theme":{"light":"catppuccin-latte","dark":"catppuccin-mocha"}}
try {
  const contractAddress = '0x742d35Cc6634C0532925a3b844Bc454e4438f44e';
  const contract = await tenderly.contracts.add(contractAddress, {
    displayName: 'MyContract',
  });

  console.log('Added contract:', addedContract);
} catch (error) {
  console.error('Error adding contract:', error);
}
```

### एक contract अपडेट करना

एक मौजूदा contract को अपडेट करने के लिए, **`contracts`** namespace की **`update`** मेथड का उपयोग करें:

```jsx title="example.jsx" showLineNumbers theme={"theme":{"light":"catppuccin-latte","dark":"catppuccin-mocha"}}
try {
  const contractAddress = '0x742d35Cc6634C0532925a3b844Bc454e4438f44e';
  const contract = await tenderly.contracts.update(contractAddress, {
    displayName: 'My Contract',
  });
  console.log('Updated contract:', contract);
} catch (error) {
  console.error('Error updating contract:', error);
}
```

### एक contract हटाना

एक contract हटाने के लिए, **`contracts`** namespace की `remove` मेथड का उपयोग करें:

```jsx title="example.jsx" showLineNumbers theme={"theme":{"light":"catppuccin-latte","dark":"catppuccin-mocha"}}
try {
  const contractAddress = '0x742d35Cc6634C0532925a3b844Bc454e4438f44e';
  await tenderly.contracts.remove(contractAddress);
  console.log('Contract removed successfully');
} catch (error) {
  console.error('Error removing contract:', error);
}
```

### एक contract वेरिफ़ाई करना

एक contract वेरिफ़ाई करने के लिए, आप **`contracts`** namespace की **`verify`** मेथड का उपयोग कर सकते हैं।

तीन उदाहरण हैं जो `tenderly.contracts.verify` मेथड के उपयोग को दिखाते हैं:

* पहला उदाहरण बिना किसी निर्भरता के एक साधारण `Counter` contract के सत्यापन को दिखाता है।
* दूसरा उदाहरण एक `MyToken` contract के सत्यापन को दिखाता है जिसमें कई निर्भरताएं हैं जो अन्य contracts हैं।
* तीसरा उदाहरण एक `LibraryToken` contract के सत्यापन को दिखाता है जिसमें एक लाइब्रेरी निर्भरता है।

आप इन उदाहरणों को हमारे `tenderly-sdk` repo के [examples folder](https://github.com/Tenderly/tenderly-sdk/tree/master/examples/contractVerification) में उन्हें शुरू करने के निर्देशों के साथ पा सकते हैं। यहां केवल कुछ निर्भरताओं वाला `MyToken` contract दिखाया जाएगा ताकि आप देख सकें कि उन्हें कैसे आयात करना है:

```javascript title="example.js" showLineNumbers theme={"theme":{"light":"catppuccin-latte","dark":"catppuccin-mocha"}}
const myTokenAddress = `0x1a273A64C89CC45aBa798B1bC31B416A199Be3b3`.toLowerCase() as Web3Address;
const ROOT_FOLDER = `examples/contractVerification/withDependencies/contracts`;

const tenderly = new Tenderly({
  accessKey: process.env.TENDERLY_ACCESS_KEY || ``,
  accountName: process.env.TENDERLY_ACCOUNT_NAME || ``,
  projectName: process.env.TENDERLY_PROJECT_NAME || ``,
  network: Network.SEPOLIA,
});

const result = await tenderly.contracts.verify(myTokenAddress, {
  config: {
    mode: `public`,
  },
  contractToVerify: `${ROOT_FOLDER}/MyToken.sol:MyToken`,
  solc: {
    version: `v0.8.19`,
    sources: {
      [`${ROOT_FOLDER}/MyToken.sol`]: {
        content: readFileSync(`${ROOT_FOLDER}/MyToken.sol`, `utf8`),
      },
      [`@openzeppelin/contracts/token/ERC20/ERC20.sol`]: {
        content: readFileSync(`${ROOT_FOLDER}/ERC20.sol`, `utf8`),
      },
      [`@openzeppelin/contracts/token/ERC20/IERC20.sol`]: {
        content: readFileSync(`${ROOT_FOLDER}/IERC20.sol`, `utf8`),
      },
      [`@openzeppelin/contracts/token/ERC20/extensions/IERC20Metadata.sol`]: {
        content: readFileSync(`${ROOT_FOLDER}/IERC20Metadata.sol`, `utf8`),
      },
      [`@openzeppelin/contracts/utils/Context.sol`]: {
        content: readFileSync(`${ROOT_FOLDER}/Context.sol`, `utf8`),
      },
    },
    settings: {
      optimizer: {
        enabled: true,
        runs: 200,
      },
    },
  },
});

console.log(`Result:`, result);
```
