lottery Dapp개발 따라하기 1단계

YU YU·2021년 10월 26일
0

https://www.youtube.com/playlist?list=PLlYCl1UOH8dheHS4vHOpPoHwq4Qi0R7WM
위 영상을 따라 만든 내용입니다.

1. 개발 환경 세팅

$ npx truffle init
하면 다음과 같이 3가지 폴더와 truffle-config.js가 생긴다.

1-1.Truffle 프로젝트 설정

솔리디티 자체 랭귀지, js 써서 외부에서 쓰는 테스트를 쓴다.
-contracts에 'Lottery.sol'파일을 만들어주고 그 안에 다음과 같이 적는다.

pragma solidity >=0.4.21 < 0.6.0;


contract Lottery{

}

그런데 이와 다르게 npx truffle create contract lottery해도 된다.

그러면 위와 같이 내용이 채워진 solidity 파일이 생성이 된다.
npx truffle compile
그러면 build폴더가 생긴다.

그리고 배포하기 전에 truffle-config.js를 수정해준다.

나는 가나슈가 7545포트를 쓰기에 수정해 주었다.

또한 회사에서 쓰는 버전이 0.6.0이어서 수정해주었다.

$ npx truffle migrate

만약 다시 배포해야할 때면
$ npx truffle migrate --reset을 해주면 된다. 그러면 다시 1번부터 한다. --reset을 안하면 이미 migrate된 파일들은 건들지 않기 때문이다.

contracts의 Migrations.sol은 버전관리를 해주는 역할을 한다.

여기서 setCompleted에 있는 요소가 결국 completed된 번호를 저장하는데 이게 결국은

Migrations의 파일들의 앞의 숫자와 매핑이 된다고 보면 된다.

1-2.Truffle을 활용한 스마트 컨트랙트 상호 작용

  • contracts> Lottery.sol
pragma solidity ^0.6.0;

contract Lottery {

  address public owner;

  constructor() public {
    owner = msg.sender;
  }

  function getSomeValue() public pure returns (uint value){
    return 5;
  }
}

address public owner;owner를 public으로 만들어주면 자동적으로 getter를 만들어준다.
constructor은 배포될 때 가장 먼저 실행되는 함수이다.
함수 안에서 다른 함수를 사용하지 않으면 pure을 써준다.

web3에서 기본적으로 제공해주는 함수

eth의 함수


truffle은 자기가 가진 주소 중 가장 첫번째 것을 migration에 사용하게 된다.
-test > lottery.test.js

const Lottery = artifacts.require("Lottery");

contract('Lottery',function ([deployer,user1,user2]){
    let lottery;
    beforeEach(async()=>{
        console.log('Before each');
        lottery = await Lottery.new();//배포해 줄 수 있다. 
    })
    it ('Basic test',async()=>{
        console.log('Basic test');
        let owner = await lottery.owner();
        let value = await lottery.getSomeValue();
        console.log(`owner ${owner}`);
        console.log(`value ${value}`);
        assert.equal(value,5);
    })
})

$ npx truffle test test/lottery.test.js

owner의 주소가 ganache-cli의 첫번째 주소와 같음을 알 수 있다.

deploy script는 사실 test하는데 사용되지 않는다. test코드에서 사용하기에는 파일에서 배포해서 lottery = await Lottery.new();와 같이 배포해서 사용하는게 좋다. 연계할 수도 있지만 그렇게 하지 않는것이 좋다.

profile
코딩 재밌어요!

0개의 댓글