truffe - 2

_Block·2022년 5월 17일
0

Truffle

목록 보기
2/2
post-thumbnail

🐾 config.js

다음으로는 truffle에 대한 설정하는 법을 다루어 보겠습니다.

배포 하는 계정, network등등을 설정이 가능하며 이러한 부분은 모두 config.js라는 파일에서 다루게 됩니다.

좀더 상세한 설명이 필요하다면 init하였을떄 주석처리 되어 있는 부분을 참고하면 될 것 같습니다.

  • 저는 제가 작성한 부분 한에서만 적어 보겠습니다.
const HDWalletProvider =require("truffle-hdwallet-provider-klaytn");
const URL = "https://api.baobab.klaytn.net:8651";

module.exports = {
 
  networks: {
    develop : {
      host: "127.0.0.1",
      port: 7545,
      network_id : "*",
    },
    baobab: {
      provider: new HDWalletProvider ("", URL),
      network_id: 1001,
      gas: 20000000,
      gasPrice: 250000000000,
   	},

  },

  contracts_build_directory: "./data/abi",

  solc: {
    optimizer: {
      enabled: true,
      runs: 200
    }
  },

  
  mocha: {

  },

  
  compilers: {
    
  }

}

기본적으로 baobab을 사용하고 있고 아마 대부분 Klaytn을 활용하시는 분들 또한 baobab을 사용 할 것입니다.

하지만 test용 Klay에는 한계가 있고 Test코드를 여러번 돌리다 보면 금방 토큰이 부족하게 됩니다.

그러기 떄문에 따로 ganache를 활용하여 다루고자 develop라는 네트워크를 하나 만들어 놓고 사용 하고 있습니다.

  • ganache는 local네트워크 입니다.

baobab의 설정에 가시면 간단하게 gas비 정도를 작성해 두었지만

이 부분은 만약 과거라면 오류가 발생을 하여 배포가 안되는 상황이 발생을 하였습니다.

  • 현재에는 원활하게 작동 합니다.
과거 Klaytn측에서 반복적이고 악의 적인 공격을 막고자 gasPrice를 약 25배?? 정도 증가를 시켰습니다.


하지만 이로인해 가스비가 비싸지게 되고 많은 질타를 받게 되어 가스비를 다시 되돌려 놓은 것으로 알 고 있습니다.
- 궁금하시다면 medium에 있는 klaytn을 찾아가면 될 것 같습니다.

👆 contracts_build_directorycompile한 abi파일을 어디에 보관할지에 대한 내용으로 Truffle를 init한 경로에서 절대경로로 설정이 가능합니다.

👆optimizer부분은 말 그대로 최적화를 설정하는 부분으로 enabled가 true라면 컨트랙트를 여러번 반복해 최적화를 설정하는 부분 입니다.

  • 굳이 최적화를 하는 이유는 배포를 할떄에 기본적으로 제한되어 있는 byte코드 길이를 가지게 되는데
  • 실제 프로젝트에서는 컨트랙트를 많이 작성을 하고, 상속을 하고 사용하는 경우가 빈번하며 이로인해서 제한 코드 길이를 넘기게 됩니다.
  • 이러한 부분을 고려하여 최적화를 하는 옵션을 따로 두게 됩니다.
  • 최적화를 하면 배포할 떄에는 더 많은 가스비가 소비 되게 됩니다. 하지만 반대로 배포후에 트랜잭션을 처리할 때에는 더 적은 가스비가 소비 되는 것으로 알고 있습니다.

👆 이외에도 compiler를 통해서 EvmVersion등도 활용가능하니 알아보면 좋을 듯 싶습니다.

🐾 Time Traveler

블록체인은 시간과 굉장히 밀접한 관계가 있는 기술 입니다.

대표적으로 Staking기능을 활용할 때에는 얼마만큼의 금액이 얼마나 Staking되어있는지를 block.timestamp || now키워드를 활용하여 확인하기도 하며 이러한 시간을 다루는데에 있어서 많은 기획적인 부분이 들어갑니다.

저는 개발자로써 기획이 잘 되었는지, 토큰이 원하는 만큼 풀리는지에 대해서 테스트를 진행을 해야하며 이러한 과정에서는 블록의 시간을 마음대로 다룰수 있는 방법이 필요 했습니다.

초기에는 js파일에 option값을 설정해주는 변수를 활용을 하였습니다.

하지만 원하는 대로 작동이 되지 않았고, 부가적인 설정이 필요 하였기 떄문에 간단하게 npm설치를 통해서 모듈을 활용 하였습니다.

npm i ganache-time-traveler

해당 모듈을 통해서 저희는 시간 설정이 가능하며, 예시로는 이와 같습니다.

Mining하는 컨트랙트가 존재를 합니다.

한정된 시간에서, 한정된 자원이 주어지고 해당 조건에서 서로 경쟁하여 토큰을 실시간으로 가져 가게 됩니다.

이떄 snapShot부분도 활용을 해야 하지만 그냥 간단하게

A라는 사용자만 있다가 B라는 사용자가 유입된다는 가정을 하겠습니다.

초기에는 A라는 사용자가 토큰을 모두 가져가고 있지만 이후 B라는 사용자가 들어오면 해당 사용자가 토큰을 나눠 가지게 될 것입니다.

이때 A라는 사용자가 10초 유지된뒤에 B라는 사용자가 들어올때, 또는 5초 유지될떄 이러한 가정에서 A는 얼마만큼의 토큰을 가져 갈수 있는 가를 Test해야 합니다.

이러한 경우에 활용이 가능합니다.

Test코드에서 A라는 사용자의 토큰을 Staking하고, 이후 Timetraveler을 활용하여 원하는 시간만큼 앞으로 진행을 시켜 줍니다.

  • await timeMachine.advanceTime(10);

이와 같이 입력해 주면 10초가 test코드 에서 진행이 된 것입니다.

좀더 상세한 활용법은 링크를 활용하면 됩니다..

profile
Block_Chain 개발자 입니다. 해당 블로그는 네트워크에 관한 내용을 다루고 있습니다.

0개의 댓글