[korean] 컨트랙트를 퍼블릭 네트워크로 배포하기 (Deploy your contracts to a public network)

컨트랙트를 퍼블릭 네트워크로 배포하기

이 가이드는 새로운 OpenZeppelin SDK 프로젝트를 만들고, 로컬 개발 네트워크에서 간단한 카운터 컨트랙트를 만든 첫 번째 자습서를 기반으로합니다. 이제 이 컨트랙트를 공용 네트워크에 배포하는 방법을 살펴 보겠습니다.

다른 공개 테스트 네트워크를 사용할 수도 있지만, 이 자습서에서는 Ropsten 공개 테스트 네트워크를 사용합니다.

NOTE: 이더리움의 테스트 네트워크:
Ropsten (Proof of Work, multi-client, ~ 15 second blocktimes); Rinkeby (Proof of Authority, geth client only, 15 second blocktimes); Kovan (Proof of Authority, parity client only, 4 second blocktimes); Goerli (Proof of Authority, multi-client, 15 second blocktimes)

설정

앞에서 만든 my-project 프로젝트 폴더를 사용합니다.

테스트 계정

우리는 https://github.com/itinance/mnemonics[니모닉]을 사용하여 12 단어 니모닉을 생성합니다. 테스트 목적으로 니모닉을 생성하려면 다음을 실행하십시오.

npx mnemonics

Infura 계정 생성

Infura를 사용하여 공개 Ethereum 노드와 상호 작용합니다 (자체 노드를 실행하지 않는 경우). Infura Core는 무료로 사용할 수 있습니다. Infura 웹 사이트의 지시 사항에 따라 새 프로젝트를 등록하고 작성 해 주세요.

dotenv 설치

https://github.com/motdotla/dotenv[dotenv]를 사용하여 Infura Project ID와 개발 니모닉을 저장합니다. 프로젝트 폴더에서 다음을 실행하여 개발 종속성으로 설치 해 주세요.

$ npm install --save-dev dotenv

.gitignore 구성

.gitignore는 .env (Infura Project ID 및 개발 니모닉)의 값이 실수로 소스 코드 저장소에 커밋되지 않도록 구성합니다. 다음 내용으로 프로젝트 폴더에 .gitignore 파일을 만듭니다.

# Dependency directory
node_modules

# local env variables
.env

# truffle build directory
build

.env 구성

테스트에 사용되는 Infura Project ID 및 개발 Mnemonic을 저장하도록 .env를 구성합니다. Infura Project ID 및 이전에 개발 한 Mnemonic을 사용하여 다음 내용으로 프로젝트 폴더에 .env 파일을 작성 해 주세요.

INFURA_PROJECT_ID="ENTER INFURA PROJECT ID"
DEV_MNEMONIC="ENTER 12 WORD SEED PHRASE"

HD Wallet Provider 설치

@truffle/hdwallet-provider를 사용하여 12 또는 24 단어 니모닉에서 파생 된 주소에 대한 거래에 서명합니다. 프로젝트 폴더에서 다음을 실행하여 개발 종속성으로 설치 해 주세요.

$ npm install --save-dev @truffle/hdwallet-provider

networks.js 구성

추가 네트워크가 연결되도록 구성하려면 network.js를 업데이트 해 주세요. dotenv@truffle/hdwallet-provider가 필요하며 Infura Project ID 및 개발 니모닉을 사용하여 네트워크의 제공자를 지정 해 주세요. network.js는 다음과 같아야합니다.

require('dotenv').config();

const HDWalletProvider = require('@truffle/hdwallet-provider');
const infuraProjectId = process.env.INFURA_PROJECT_ID;

module.exports = {
  networks: {
    development: {
      protocol: 'http',
      host: 'localhost',
      port: 8545,
      gas: 5000000,
      gasPrice: 5e9,
      networkId: '*',
    },
    ropsten: {
      provider: () => new HDWalletProvider(process.env.DEV_MNEMONIC, "https://ropsten.infura.io/v3/" + infuraProjectId),
      networkId: 3,       // Ropsten's id
    },
    rinkeby: {
      provider: () => new HDWalletProvider(process.env.DEV_MNEMONIC, "https://rinkeby.infura.io/v3/" + infuraProjectId),
      networkId: 4,       // Rinkeby's id
    },
    kovan: {
      provider: () => new HDWalletProvider(process.env.DEV_MNEMONIC, "https://kovan.infura.io/v3/" + infuraProjectId),
      networkId: 42,       // Kovan's id
    },
  },
};

NOTE: 니모닉에서 생성 된 첫 번째 계정 이외의 계정을 사용하려는 경우 계정 색인 (0부터 시작)을 HDWalletProvider에 세 번째 매개 변수로 제공 할 수 있습니다. 자세한 내용은 트러플 자습서를 참조 해 주세요 : https://www.trufflesuite.com/tutorials/using-infura-custom-provider

NOTE: config에서 동일한 니모닉 세트 num_addresses의 추가 주소를 노출합니다. 파생 경로를 변경하여 주소를 파생 시키려면 구성에서 wallet_hdpath를 설정 해 주세요. 자세한 내용은 @truffle/hdwallet-provider 저장소를 참조 해 주세요.

자금 테스트 계정

openzeppelin accounts 명령어를 사용하여 원하는 네트워크를 선택하여 해당 네트워크에 대해 구성된 계정을 봅니다.

$ npx openzeppelin accounts
? Pick a network ropsten
Accounts for ropsten:
Default: 0x581f96c12064e2dfb72E8B9722a18731D756Fe73
All:
- 0: 0x581f96c12064e2dfb72E8B9722a18731D756Fe73

사용하려는 계정에 테스트 Ether을 추가 해 주세요. 니모닉에서 파생 된 기본 / 첫 번째 계정에 퍼싯을 사용하여 자금을 추가 할 수 있습니다 (예 : https://faucet.ropsten.be). 배포하려고 시도 할 때 계정에 테스트 이더가 충분하지 않은 경우 deployment failed with error: insufficient funds for gas * price + value오류가 발생하여 배포에 실패하게됩니다.

12 단어 시드 문구를 MetaMask로 가져올 수 있으며 MetaMask 퍼싯에서 테스트 Ether을 요청할 수 있습니다. (https://faucet.metamask.io)

컨트랙트 배포

openzeppelin create를 실행하여 OpenZeppelin SDK 대화식 명령을 사용하여 계약을 배포합니다. 카운터 계약, ropsten 네트워크를 선택하고 인스턴스 생성 후 인스턴스에서 함수를 호출하지 않으려면 N을 누릅니다.

$ npx openzeppelin create
Nothing to compile, all contracts are up to date.
? Pick a contract to instantiate Counter
? Pick a network ropsten
✓ Contract Counter deployed
All contracts have been deployed
? Call a function to initialize the instance after creating it? No
✓ Setting everything up to create contract instances
✓ Instance created at 0x584Fcb424b17d3505B21c881d57EF9Bf1B18c4A7
0x584Fcb424b17d3505B21c881d57EF9Bf1B18c4A7

상호작용

openzeppelin send-tx를 실행하여 OpenZeppelin SDK 대화식 명령을 사용하여 계약에 트랜잭션을 보낼 수 있습니다. 카운터 계약, ropsten 네트워크, 사용할 기능 및 카운터 증가량을 선택 해 주세요. 예 : 23.

$ npx openzeppelin send-tx
? Pick a network ropsten
? Pick an instance Counter at 0x584Fcb424b17d3505B21c881d57EF9Bf1B18c4A7
? Select which function increase(amount: uint256)
? amount (uint256): 23
✓ Transaction successful. Transaction hash: 0x5f3449b06aee60146ccb3c63d4bdbc8f03bf9140ce9b23b51defe98e32b81a74

openzeppelin call을 실행하여 OpenZeppelin SDK 대화식 명령을 사용하여 계약에서 함수를 호출 할 수 있습니다. 카운터 계약, ropsten 네트워크 및 value()를 함수를 선택 해 주세요.

$ npx openzeppelin call
? Pick a network ropsten
? Pick an instance Counter at 0x584Fcb424b17d3505B21c881d57EF9Bf1B18c4A7
? Select which function value()
✓ Method 'value()' returned: 23
23

블록 체인 탐색기에서 트랜잭션을 볼 수 있습니다.

사용한 네트워크를 지원하는 블록 체인 탐색기에서 거래를 볼 수 있습니다. 예를 들어, Etherscan은 https://ropsten.etherscan.io/에서 Ropsten을 지원합니다.카운터 인스턴스의 계약 주소를 사용하여 Etherscan을 검색 할 수 있습니다. 계약 주소는 배포 중과 상호 작용할 때 표시됩니다 (0x에서 생성 된 인스턴스).

그게 다에요! 이제 OpenZeppelin SDK 계약을 공용 네트워크에 배포하고 OpenZeppelin SDK 대화식 명령을 사용하여 상호 작용하는 방법을 알았습니다.

1 Like