Relayer를 통해 스마트 계약을 배포하는 방법

3903 단어
이 가이드는 OpenZeppelin DefenderRelayer API을 사용하여 개인 키 노출 위험 없이 스마트 계약을 배포하는 방법을 보여줍니다. What is a relayer ?

Defender 팀 API 키 및 암호 복사



Defender 에서 오른쪽 상단의 햄버거 메뉴를 선택한 다음 Team API Keys를 선택합니다. 여기에서 기존 API 키와 이를 사용하여 수행할 수 있는 작업을 볼 수 있습니다. 이 대시보드에서 마우스를 가져간 후 오른쪽에서 휴지통을 선택하여 API 키를 삭제할 수도 있습니다.

팀 API 키 생성을 선택한 다음 이 API 키를 사용하여 수행할 수 있는 권한을 제한하지 않으려면 모든 항목을 선택된 상태로 둡니다. 저장을 누르십시오. API 키와 시크릿을 복사하라는 메시지가 표시됩니다. 안전한 장소에 보관하십시오. 다시 표시되지 않습니다.

키를 복사했음을 나타내는 확인 표시를 선택하고 저장을 선택합니다.

Defender에서 팀 API 키와 암호를 복사합니다.

릴레이어 만들기



먼저 필요한 패키지를 설치합니다.
$ npm install defender-relay-client
.env 파일에 Defender API 키와 비밀을 제공하고 변수 이름을 적절하게 조정하여 다음과 같은 스크립트를 만듭니다.

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;
});



참고: API를 사용하여 Relayer를 통해 직접 거래를 보내려면 키와 비밀(위 코드에서 .env 파일에 추가됨)이 필요합니다. 그러나 Autotask를 통해 트랜잭션을 보내려는 경우 필요한 유일한 자격 증명은 relayerId와 함께 팀 API 키 및 비밀입니다(위 단계에서 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를 통해 계약을 성공적으로 배포한 것을 축하합니다!

좋은 웹페이지 즐겨찾기