Видеоинструкция
Это руководство показывает, как развертывать смарт-контракты без риска раскрытия закрытого ключа с помощью 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!