[TIL] Part2 - DAY53 Solidity - Truffle & Ganache 실습, 이론공부

박동우·2023년 6월 8일

블록체인 스쿨 3기

목록 보기
50/72

[TIL] 2023-06-08 DAY53


Solidity

GIT 주소 : https://github.com/dowoo303/SOLIDITY


오늘 배운것들

  1. Truffle & Ganache 실습
    1) Truffle을 이용해서 스마트 컨트랙트를 개발하고, Ganache에서 확인
    2) 컨트랙트의 이름이 같은 경우 어떻게 되는지 확인
  2. 이론공부

각종 팁

  1. 컨트랙트 명이랑 파일 명이랑 똑같이 하는게 좋다.
  2. truffle-config.js 파일안에 들어가면 네트워크(goerli, private 등등)을 설정할 수 있으며, 컴파일러 버전 관리가 가능하다.
    (28(니모닉코드), 44(dotenv), 67(Localhost), 85(goerli), 107(compilers)번째 줄 사용예정)
  3. 다른 파일이더라도 같은 컨트랙트 이름이 존재하면 가장 마지막에 컴파일 된 컨트랙트만이 살아남는다.(migrate랑은 상관이 없음. 무조건 컴파일과 관련) -> 애초에 같은 컨트랙트 이름을 안 만드는 것이 좋다.

회고

  1. 리믹스는 좀 더 간편하고 직관적이지만 Truffle & Ganache는 약간 복잡한 대신 활용도와 자유도가 높다.



💻 Solidity 코딩

✅ Truffle & Ganache 실습

이때까지는 remix에서 soildity 코딩을 해왔는데 이제 Truffle을 이용하여 터미널에서도 코딩이 가능해졌다.
순서: 코딩 -> 컴파일 -> 마이그레이션 -> 디플로이
vs code에서 진행가능

  1. truffle create contract ADD: ADD라는 이름의 sol파일 contracts폴더에 생성 및 코딩

  2. truffle compile: 컴파일 진행 명령어

  3. Ganache의 서버포트와 truffle-config의 69번째줄 포트를 똑같이 맞춰준다. -> 마이그레이션폴더는 숫자로 구분하기 떄문에 1, 2 .. 등등 파일명 시작부분에 언더바 꼭 붙여서 생성하기 -> truffle migrate 명령어를 통해서 리믹스에서 deploy하듯 실행하면 Ganache에서 블록과 트랜잭션 확인이 가능하다.

  4. Ganache에서 컨트랙트 활성화


  • 위는 실행될때마다 블록을 생성하고 있지만, 블록을 자동으로 마이닝 가능하도록 설정도 가능하다.

  • truffle console 명령어를 통해 개발자모드 진입
    컨트랙트 이름 검색 or 컨트랙트이름.abi 하면 관련 정보 열람가능
    let 변수명 = await Contract이름.deployed()을 입력하여 변수화 시키고 변수명.함수이름()으로 터미널에서 컨트랙트를 작동시킬 수 있다.

  • truffle compile .\contracts\파일명.sol : 특정 파일만 컴파일 -> 경로추가해줘야함

  • truffle migrate --f 2 : 2번부터 migrate진행하라는 뜻
    truffle migrate --f 2 --to 2 : 2번부터 2번까지 진행(2번만 진행하라는 뜻)

  • 반복 실행시켜보기(truffle console에서)
    let timer = setInterval(()=>add.setA(a+=1), 2000);
    setTimeout(()=>{clearInterval(timer)}, 40000)

🟥 실습

cd web3
npm init // 계속 엔터치기
ls // package.json 생성 확인
npm install web3

node
// node 환경으로 이동
var {Web3} = require('web3')
var web3 = new Web3('https://cloudflare-eth.com')

web3 // 다양한 기능 확인해보기
web3.provider // 위의 cloudflare 잘 나오는지 확인

// 밑의 것 둘 중 하나
web3.eth.getBlockNumber().then(console.log)
await web3.eth.getBlockNumber()

web3.eth.getBlock(100000).then(console.log)

web3.eth.getBalance('지갑주소').then(console.log)
web3.eth.getTransaction('거래 해시값').then(console.log)

web3.eth.accounts.create()

web3.eth.accounts.privateKeyToAccount('0x1111111111111111111111111111111111111111111111111111111111111111')

async function getBalances() {
	var a = web3.eth.accounts.privateKeyToAccount('0x1111111111111111111111111111111111111111111111111111111111111111'); 
	var balance = await web3.eth.getBalance(a.address);
	console.log(balance)
}

web3.eth.getBlockTransactionCount(1000000).then(console.log)
web3.eth.getTransactionFromBlock('BLOCK NUMBER', 'INDEX').then(console.log)

📕 이더리움의 블록구조

이더리움의 블록구조 역시 헤더와 바디로 이루어져있다.

복잡한 정보를 한번에 관리하는 방법에 대해 고민
-> 비트코인 - 위변조가 일어나지 않았음을 증명하고 싶어함.(검증)
-> 이더리움 - 지갑의 잔액이 얼마 있는지를 알고 싶어함.(key-value 탐색)
그래서 비트코인은 이진트리 모양이지만, 이더리움의 경우 머클 패트리시아 트리를 사용한다.(목적성이 다르기 때문)

profile
HELLO!

0개의 댓글