트러플로 메인넷에 컨트랙트 업로드하기

2022. 4. 22. 21:51개발 잡부/블록체인

728x90
 

Deploy Smart Contracts to the Ethereum Mainnet with Truffle

Stop manually deploying your smart contracts. Learn how you can safely deploy to the mainnet with Truffle.

medium.com


이더리움 메인넷에 올리기 위한 트러플 사전 설정

우리가 메인넷에 스마트 컨트랙트를 배포할 때,
가스비가 들기 때문에 이더를 좀 들고 있는 계정이 필요하다.

단 주의할 점은 private key이나 mnemonic
설정파일로 적어서는 안 될 일이다.
특히, 깃 레포지토리에 이런 정보가 담긴 내용을 올리면
개판이 날 것이다.

그래서 환경변수 (Environment variables)를 이용하는 것을 추천한다.
나는 dotenv 툴을 추천한다.

 

[Just Site] 11. node.js 서버 설정 숨기기 (feat. dotenv)

서버에서 제일 중요한건 역시 보안이 아닌가 싶다. 예를 들어보자. 이런 코드가 있다. const dbDatabase = "timer"; const dbPassword = "1q2w3e4r"; db.connect(dbDatabase, dbPassword); 쓸때는 참으로 편하다...

goldfishdiary.tistory.com


환경변수를 설정했다면,
truffle-config.js에 다음의 내용을 추가하자.

const getEnv = env => {
  const value = process.env[env];
  if (typeof value === 'undefined') {
    throw new Error(`${env} has not been set.`);
  }
  return value;
};

const mnemonic = getEnv('ETH_WALLET_MNEMONIC');

간단하게 설정값을 env로부터 불러오는 코드다.


Mnemonic, Network, Network Id

세가지 값이 사용되는데, 각각을 살펴보자.

Mnemonic: 지갑을 특정할 수 있는 단어들로 이루어진 복구문항
Network: 서버 주소
Network Id: 네트워크를 나타내는 숫자. 1: 메인넷 3: 랍스텐 등등...

truffle-config에서 라이브 네트워크 설정

우선 hdwallet provider를 설치하자.

npm i truffle-hdwallet-provider

truffle-config.js에 다음의 내용을 추가하자.

module.exports = {
  networks: {
    live: {
      provider: () => new HDWalletProvider(mnemonic, liveNetwork),
      network_id: liveNetworkId
    }
  }
}

이더리움 메인넷에 배포하기

다음의 커맨드로 배포할 수 있다.

truffle migrate --network live

가스 가격 설정하기

트러플의 기본 설정은 가스 가격이 굉장히 높게 잡혀있기 때문에,
불필요하게 비싸다.

그렇기 때문에 가스비용을 잘 설정하는 것이 중요하다.

const Web3 = require(“web3”);
const web3 = new Web3();

module.exports = {
  networks: {
    live: {
      provider: () => new HDWalletProvider(mnemonic, liveNetwork),
      network_id: liveNetworkId,
      gasPrice: web3.utils.toWei('10', 'gwei')
    }
  }
}

위의 예제는 10 gweiwei로 변환하여 설정한것이다.