Перейти к основному содержанию
Tenderly SDK предоставляет класс ContractRepository для управления контрактами, связанными с вашим проектом Tenderly. ContractRepository позволяет добавлять, обновлять и удалять контракты, а также верифицировать их. После инициализации Tenderly SDK вы можете использовать пространство имён contracts для доступа к экземпляру ContractRepository. Для управления кошельками в том же проекте см. Управление кошельками.

Добавление контракта

Чтобы добавить новый контракт, используйте метод add пространства имён contracts:
example.jsx
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);
}

Обновление контракта

Чтобы обновить существующий контракт, используйте метод update пространства имён contracts:
example.jsx
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);
}

Удаление контракта

Чтобы удалить контракт, используйте метод remove пространства имён contracts:
example.jsx
try {
  const contractAddress = '0x742d35Cc6634C0532925a3b844Bc454e4438f44e';
  await tenderly.contracts.remove(contractAddress);
  console.log('Contract removed successfully');
} catch (error) {
  console.error('Error removing contract:', error);
}

Верификация контракта

Чтобы верифицировать контракт, вы можете использовать метод verify пространства имён contracts. Есть три примера, демонстрирующих использование метода tenderly.contracts.verify:
  • Первый пример показывает верификацию простого контракта Counter без зависимостей.
  • Второй пример показывает верификацию контракта MyToken, у которого несколько зависимостей — других контрактов.
  • Третий пример показывает верификацию контракта LibraryToken с зависимостью в виде библиотеки.
Эти примеры можно найти в папке examples нашего репозитория tenderly-sdk вместе с инструкциями по их запуску. Здесь будет показан только контракт MyToken с несколькими зависимостями, чтобы вы увидели, как их импортировать:
example.js
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);