Как развернуть смарт-контракты через Relayer

Видеоинструкция

Это руководство показывает, как развертывать смарт-контракты без риска раскрытия закрытого ключа с помощью Relayer API OpenZeppelin Defender. Что такое ретранслятор?

Скопируйте ключ и секрет API команды Defender

В Defender выберите меню гамбургера в правом верхнем углу, а затем Team API Keys. Здесь вы увидите все существующие API-ключи, а также то, что с ними можно сделать. С этой панели вы также можете удалить API-ключи, наведя на них курсор и выбрав мусорную корзину справа.

Выберите Create Team API Key, затем оставьте все галочки, если вы не хотите ограничить права на то, что можно делать с помощью этого API-ключа. Нажмите кнопку Сохранить. Вам будет предложено скопировать ключ и секрет API. Сохраните их в надежном месте. Они больше не будут отображаться.

Установите флажок, чтобы указать, что вы скопировали ключи, и выберите Сохранить.

Скопируйте API-ключ и секрет команды из Defender.

Создание ретранслятора

Сначала установите необходимый пакет:

$ npm install defender-relay-client

Создайте сценарий, подобный следующему, указав ключ API и секрет Defender в файле .env и изменив имена переменных по мере необходимости.

const { RelayClient } = require('defender-relay-client');
const { appendFileSync, writeFileSync} = require('fs');

async function run() {
  require('dotenv').config();
  const { DEFENDER_API_KEY: apiKey, DEFENDER_API_SECRET: apiSecret } = process.env;
  const relayClient = new RelayClient({ apiKey, apiSecret });

  // create relay using defender client
  const requestParams = {
    name: 'MyRelayer',
    network: 'goerli',
    minBalance: BigInt(1e17).toString(),
  };
  const relayer = await relayClient.create(requestParams);

  // store relayer info in file (optional)
  writeFileSync('relay.json', JSON.stringify({
    relayer
  }, null, 2));
  console.log('Relayer ID: ', relayer);

  // create and save the api key to .env - needed for sending tx
  const {apiKey: relayerKey, secretKey: relayerSecret} = await relayClient.createKey(relayer.relayerId);
  appendFileSync('.env', `nRELAYER_KEY=${relayerKey}nRELAYER_SECRET=${relayerSecret}`);
}

run().catch((error) => {
  console.error(error);
  process.exitCode = 1;
});

Войти в полноэкранный режим Выйти из полноэкранного режима

Примечание: Чтобы отправить транзакцию непосредственно через Relayer с помощью API, вам нужны ключ и секрет (которые были добавлены в приведенном выше коде в ваш файл .env). Если же вы хотите отправить транзакцию с помощью автозадачи, вам понадобятся только командный API-ключ и секрет, а также relayerId (который в приведенном выше шаге был сохранен в файле relay.json).

Компиляция и развертывание контракта

Запустите npx hardhat compile (или эквивалент, если используется другой компилятор), чтобы подготовить смарт-контракт к развертыванию.

Используйте следующий скрипт для развертывания контракта:

const { DefenderRelayProvider, DefenderRelaySigner } = require('defender-relay-client/lib/ethers');
const { ethers } = require('hardhat');
const {writeFileSync} = require('fs');

async function main() {
  require('dotenv').config();
  const credentials = {apiKey: process.env.RELAYER_KEY, apiSecret: process.env.RELAYER_SECRET};
  const provider = new DefenderRelayProvider(credentials);
  const relaySigner = new DefenderRelaySigner(credentials, provider, { speed: 'fast' });

  const MyContract = await ethers.getContractFactory("SimpleRegistry");
  const myContract = await MyContract.connect(relaySigner).deploy().then(f => f.deployed());

  writeFileSync('deploy.json', JSON.stringify({
    MyContract: myContract.address,
  }, null, 2));

  console.log(`MyContract: ${myContract.address}n`);
}

if (require.main === module) {
  main().then(() => process.exit(0))
    .catch(error => { console.error(error); process.exit(1); });
}

Войдите в полноэкранный режим Выйти из полноэкранного режима

Этот код извлекает учетные данные Relayer из локального файла вместе с артефактами для контракта и использует ethers.js для развертывания. Соответствующий адрес контракта сохраняется в локальном файле deploy.json.

Поздравляем с успешным развертыванием вашего контракта через Relayer!

Оцените статью
devanswers.ru
Добавить комментарий