튜토리얼

1. 사전조건

MetaMask를 통해서 지갑 연결을 하고 가입을 하세요.

Web3OJ의 블록체인 네트워크는 Goerli 테스트 네트워크를 사용하고 있습니다.

이더리움이 존재하지 않는다면 Faucets을 받으세요. Alchemy, Goerli PoW Faucet , All That Node

  • 2022년 9월 12일 기준 Alchemy 회원가입하고 faucet받으면 0.5 Goerli ETH를 받을수 있습니다(기본 0.25 Goerli ETH)
  • Alchemy 회원가입 <- 이 링크는 Referal Link이며 이 링크로 가입했을 시 $100 Alchemy credit을 받으실수 있습니다.

 

2. 개발환경 구축

로컬에 개발환경을 구축하여 문제를 풀어야 합니다.

Truffle 또는 Hardhat 프레임워크을 통해 개발환경을 구축하세요.

node version

  • hardhat에서 노드 버전은 >= 12.0 을 지원하지만, 16 버전을 추천드립니다.

 

web3oj-sol repo를 사용하여 개발환경 구축하기

$ git clone https://github.com/web3oj/web3oj-sol.git

 

Hardhat 개발환경 직접 구축하기

$ mkdir web3oj-sol $ cd web3oj-sol $ npx hardhat 888 888 888 888 888 888 888 888 888 888 888 888 888 888 888 8888888888 8888b. 888d888 .d88888 88888b. 8888b. 888888 888 888 "88b 888P" d88" 888 888 "88b "88b 888 888 888 .d888888 888 888 888 888 888 .d888888 888 888 888 888 888 888 Y88b 888 888 888 888 888 Y88b. 888 888 "Y888888 888 "Y88888 888 888 "Y888888 "Y888 👷 Welcome to Hardhat v2.9.2 👷‍ ? What do you want to do? … Create a basic sample project ❯ Create an advanced sample project Create an advanced sample project that uses TypeScript Create an empty hardhat.config.js Quit

 

hardhat.config.jsgoerli 네트워크 추가

  • Alchemy에 회원가입하고 프로젝트를 생성하여 Goerli API URL을 받으세요
// hardhat.config.js ... module.exports = { solidity: "0.8.4", networks: { // goerli 추가 goerli: { url: process.env.GOERLI_URL || "https://eth-goerli.g.alchemy.com/v2/...", // 이곳에 URL을 수정하세요 accounts: process.env.PRIVATE_KEY !== undefined ? [process.env.PRIVATE_KEY] : [], }, }, gasReporter: { enabled: process.env.REPORT_GAS !== undefined, currency: "USD", }, etherscan: { apiKey: process.env.ETHERSCAN_API_KEY, }, };
  • 루트에 .env 파일을 생성하여 아래와 같이 넣으면 process.env.PRIVATE_KEY 를 설정할수 있습니다

    PRIVATE_KEY=0x1234567890asdfghjklqwertyuiop12345678....

 

openzepplin library 설치

$ npm i @openzeppelin/contracts

 

예) 덧셈 문제풀기

  1. 문제 > 덧셈 > 문제풀기 클릭하세요.

  2. 문제 영역을 복사하여 contracts/PlusCalculator.sol 로 저장, Sample 영역을 복사하여 contracts/MyPlusCalculator.sol 로 저장하세요.

  3. MyPlusCalculator.sol에 plus함수를 완성 시킨뒤 실행시켜주세요.

  4. scripts/plusCalculatorSol.js 를 생성 및 실행하세요.

    생성

    // scripts/plusCalculatorSol.js const hre = require("hardhat"); let web3OJ; async function calculatorSol() { const [addr1] = await ethers.getSigners(); const MyPlusCalculator = await ethers.getContractFactory("MyPlusCalculator"); const myPlusCalculator = await MyPlusCalculator.connect(addr1).deploy(); await myPlusCalculator.deployed(); const instance = "0x000...000"; // 이곳에 문제 Contract 주소를 넣어주세요 const PlusCalculatorProblem = await ethers.getContractFactory("PlusCalculatorProblem"); const plusCalculatorProblem = await PlusCalculatorProblem.attach(instance); await plusCalculatorProblem.setPlusCalculator(myPlusCalculator.address); } async function main() { calculatorSol(); } main().catch((error) => { console.error(error); process.exitCode = 1; });

    실행

    $ npx hardhat --network goerli run scripts/plusCalculatorSol.js
  5. 제출하기 클릭으로 문제풀이를 마무리하세요.

 

문의

  • web3oj@gmail.com