Blockchain

hardhat network config 설정 (alchemy)

Sila 2023. 4. 1. 16:14

hardhat으로 컨트랙트를 배포할 때 네트워크 설정은 어떻게 하는가?

 

module.exports = {
  solidity: "0.8.18",
  networks: {
    goerli: {
      url: "<block chain에 RPC 요청을 보낼 url>",
      accounts: ["<private key>"]
    }
  }
};

 

당연히 요청을 보낼 네트워크에 관한 정보를 다음과 같이 networks에 적어주면 된다.

 

난 지금까지 컨트랙트를 배포하는 과정에서 대부분 private 네트워크를 사용해서 127.0.0.1을 사용했다.

 

 

문제는 직접 public 블록체인과 상호작용할 때는 어떻게 하냐, 즉, url엔 어떤 값을 써줘야 하는가이다.

 

지금 당장 내가 goerli public testnet에 컨트랙트를 배포를 하고 싶은데, 그러면 어떻게 해줘야 하나?

 

이에 대한 해답을 어제 우연히 옆 자리 친구를 도와주는 과정에서 나도 느닷없이

 

아, 그게 그런거였구나.. 하고 깨닫게 되었다.

 

 

이더리움 네트워크는 수많은 노드들로 구성되어 있다. 그리고 각각의 노드는 노드를 구동하는 사람들에 의해 통제되는데,

 

개인마다 어떤 방식으로 노드를 구동할지는 목적에 따라 다르다.

 

채굴자일수도 있고, 직접 터미널에 명령어를 넣어서 tx를 만들고 싶은 이상한 사람일수도 있고 등등..

 

이런 목적에 따라 어떤 기능은 끄고, 어떤 기능은 키는 등 세세한 구동의 조절을 geth에서는 제공하고 있다.

 

(ref : https://geth.ethereum.org/docs/fundamentals/command-line-options)

 

Command-line Options | go-ethereum

A list of commands for Geth

geth.ethereum.org

 

들어가보면 알겠지만 flag가 한 두개가 아니다.

 

 

우리가 외부 프로그램을 통해 노드와 통신을 하려면 RPC 통신을 요청해야 하고,

 

1. 이에 대한 가장 정석적인 방법은

 

geth를 구동해 네트워크와 동기화한뒤 거길 통해 rpc 요청을 보내는 건데, 너무 비효율적이다.

 

그걸 위해 geth를 설치해 구동하고, 테라바이트 단위의 데이터를 받은 다음,

 

실시간으로 동기화 하면서 계속 리소스를 소모해야 한다.

 

 

2. 그래서 일단 이건 싫으니, 다른 방법을 생각해보면 다른 사람 노드에 요청을 보내는 방법이 있지만,

 

이건 현실성이 없다. 누가 자기 노드에 그렇게 무방비하게 접근하게 해줄까.. 하물며 생판 모르는 사람을..

 

 

3. 그래서 절충적으로 나온 것들이 infura, alchemy와 같은 길을 뚫어주는 툴들이다.

 

예전에 alchemy를 썻을 땐 이게 private network를 만들어주는 건가 생각을 했는데 아니고,

 

원하는 블록체인 네트워크에 요청을 보낼 수 있도록 api를 열어주는 녀석이다.

 

직접 노드 구동은 싫고 남의 걸 빌리긴 해야하는데, 빌려줄 개인은 없으니,

 

이런 alchemy같은 툴? 인프라?를 이용해 퍼블릭 블록체인에 요청을 보낼 길을 내주는 것이다.

 

물론 지갑은 해당 네트워크에 맞는 본인이 가진 지갑의 키를 사용해야 한다.

 

1. alchemy

알케미에 가입하고 로그인하면 다음과 같은 대시보드로 이동한다.

 

 

나는 작년에 팀플을 할 때 만든 goerli network, optimism goerli 네트워크 api가 있다.

 

우상단의 create app을 누르고 요청 보내고 싶은 네트워크와 api 이름등을 설정해주면 app에 네트워크가 추가 된다.

 

거기서 view key 버튼을 누르면 api key를 볼 수 있다.

 

http 요청을 보내고 싶으면 https api key를 복사해온다.

 

2. hardhat config

// hardhat.config.js
 
module.exports = {
  solidity: "0.8.18",
  networks: {
    goerli: {
      accounts: ["<your private key>"]
    }
  }
};

이렇게 config를 추가하면 이제부터 해당 api를 통해 원하는 네트워크에 요청을 넣을 수 있다.

 

컨트랙트를 배포할 때는 터미널에 다음과 같이 네트워크를 함께 적어주면 된다.

 

npx hardhat run scripts/deploy.js --network goerli

 

networks 객체 안에 있는 key들 중 하나를 선택하면 된다.

 

예를 들어 sepolia network에 요청을 보내고 싶다면 goerli 밑에 sepolia를 key로, url과 account를 담은 객체를 value로 갖는

 

k-v쌍을 하나 더 추가하면 된다.

'Blockchain' 카테고리의 다른 글

ethersJS로 블록체인과 상호작용  (0) 2023.03.19
Hardhat  (1) 2022.11.02
#33 NFT minting dApp 만들기 ch3  (0) 2022.08.05
#32 NFT Minting dApp 만들기 ch2  (0) 2022.08.05
#31 NFT minting dApp 만들기 ch1  (0) 2022.08.04