코드코코

[솔리디티] web3와 스마트컨트랙트 연결하여 가나슈로 테스트 하기 본문

블록체인/솔리디티

[솔리디티] web3와 스마트컨트랙트 연결하여 가나슈로 테스트 하기

코드코코 2022. 2. 17. 15:27

기본 틀 만들기

truffle init

 

contracts/Voting_test.sol 파일 작성 및 내용 작성

 

명령어로 컴파일하기

컴파일러 설치

npm i -g solc

 

만약 에러가 나는 경우,

npm i -g web3 : 버전문제로 실행이 안됨

npm r web3 지우고

npm i web3 다시 하면 버전 문제 해결되어 실행됨

컴파일하기

solcjs --abi --bin ./contracts/Voting_test.sol

 

컴파일되어도 아무것도 뜨지 않음

대신 파일리스트에 abi 와 bin 파일이 생김

abi : 방금 만들었던 솔리디티 파일에 대란 내용이 정리되어 있음

bin  : 바이트 코드의 모습을 확인 할 수 있음

참고 ) truffle-config.js :배포하거나 할때, 설정 파일

 

 

web3와 연결하기

루트 디렉토리에 deploy.js 파일 생성

node deploy.js 로 실행하여 확인

에러의 이유는 모듈설치를 안했기 때문이므로 npm i web3 로 설치

 

deploy.js 파일에 코드 추가

node deploy.js 로 실행하여 확인

 

추가 : 플러그인을 통해 컴파일하기

 

리믹스 플러그인

ctrl + shft + p 단축키 사용

solidity : compile contracts 검색

주의 : 해당 sol파일 활성화 한뒤 해야함, 활성화 된 파일에서 하지 않아서 안뜬 것.

처음하면 아래 경고창 뜸

한번 더 시도하면 잘 됨.

컴파일 되면 bin 폴더가 생기고 그 아래 마찬가지로 abi 와 bin 파일들이 생김.

web3와 가나슈와 연결하기

 

가나슈

- 이더리움 테스트 환경 제공

- 블록채굴시 시간이 걸리는 데, 가나슈에서는 테스트시 바로바로 블록을 생성시켜줌.

 

트러플

- 실제 프로젝트 개발시 사용

- 가나슈는 테스트 하기 위해, 로컬환경 에만 설치 되는 이더리움 생태계

 

가나슈 설치하고 실행

logs에 가면 로그 내용이 확인됨

rpc 서버의 주소가 deploy.js의 주소와 일치해야함

 

계정 연결 확인하기

 

deploy.js 코드 추가

노드 실행

계정 정보가 확인 됨

가나슈에서 확인되는 계정과 일치되는 것을 확인 할 수 있음.

 

 

계정 연결 코드를 수정하여 다르게 연결해봄

const Web3 = require('web3');
const fs = require('fs');

const ABI = JSON.parse(fs.readFileSync('./contracts_Voting_test_sol_Votingtest.abi').toString());
const BYTECODE = fs.readFileSync('./contracts_Voting_test_sol_Votingtest.bin').toString()

// console.log(ABI);
// console.log(BYTECODE);

// web3와 연결
const web3 = new Web3(Web3.givenProvider || 'http://localhost:8545');

// 계정 
const accounts = [];

async function init() {
  await web3.eth.getAccounts().then(data => {
    data.forEach(x => {
      accounts.push(x);
    })
  })
}

init().then(() => {
  console.log(accounts);
})

마찬가지로 가나슈에서 조회되는 것과 일치

 

스마트 컨트랙트 연결하기

deploy.js 코드 추가

트랜잭션 날리기

날리기전

날린 후 터미널 로그

날린 후 밸런스와 트랜잭션 수가 변한것을 확인할 수 있음.

 

블록이 생성된 것을 확인 할 수 있음

해당 블럭을 누르면 자세한 정보도 확인 가능

트랜잭션도 확인 가능

마찬가지로 상세내역 확인 가능

로그에서도 트랜잭션이 생성된 것이 확인 됨.