공대생 정리노트

Truffle과 KAS 연동(클레이튼) 본문

블록체인/솔리디티

Truffle과 KAS 연동(클레이튼)

woojinger 2022. 2. 2. 20:07

Reference

https://ko.docs.klaytn.com/smart-contract/ide-and-tools/truffle

 


truffle을 클레이튼과 연동하기 위해서 truffle의 truffle-config.js의 provider을 작성해주어야 한다.

자신이 로컬 엔드포인트 노드를 실행해 연동할 수도 있지만 관리하기 쉽지 않으므로 KAS와 연동하였다.

 

KAS를 사용하려면 먼저 AccessKey ID와 Secret AccessKey를 발급받아야 한다.

이 과정은 어렵지 않으므로 패스하겠다.

 

Truffle을 사용해 스마트 컨트랙트를 배포할 것이므로 truffle을 설치한다.

$ sudo npm install -g truffle

현재 klaytn docs에서는 v5.0.26까지 지원한다고 하므로 해당 버전에 맞춰서 설치한다.

 

truffle을 설치하고 프로젝트 폴더에 init을 하면 여러 폴더들이 생긴다.

$ truffle init

...

$ ls
build             contracts         test
migrations        truffle-config.js

truffle-config.js는 사용할 provider를 결정한다.

KAS를 이용해 provider를 작성하려면 추가적인 라이브러리(truffle-hdwallet-provider-klaytn, caver-js)가 필요하다.

$ yarn install truffle-hdwallet-provider-klaytn@1.4.1
$ yarn install caver-js

이제 truffle-config.js를 작성하자

const {privateKey, accessKeyId, secretAccessKey } = require('./constants/index.js');
const Caver = require('caver-js');
const HDWalletProvider = require("truffle-hdwallet-provider-klaytn");

module.exports = {
  networks: {
    kasBaobab: {
      provider: () => {
        const option = {
          headers: [
            {
              name: "Authorization",
              value:
                "Basic " +
                Buffer.from(accessKeyId + ":" + secretAccessKey).toString(
                  "base64"
                ),
            },
            { name: "x-chain-id", value: "1001" },
          ],
          keepAlive: false,
        };
        return new HDWalletProvider(
          privateKey,
          new Caver.providers.HttpProvider(
            "https://node-api.klaytnapi.com/v1/klaytn",
            option
          )
        );
      },
      network_id: "1001", //Klaytn baobab testnet's network id
      gas: "8500000",
      gasPrice: "25000000000",
    },
    kasCypress: {
      provider: () => {
        const option = {
          headers: [
            {
              name: "Authorization",
              value:
                "Basic " +
                Buffer.from(accessKeyId + ":" + secretAccessKey).toString(
                  "base64"
                ),
            },
            { name: "x-chain-id", value: "8217" },
          ],
          keepAlive: false,
        };
        return new HDWalletProvider(
          privateKey,
          new Caver.providers.HttpProvider(
            "https://node-api.klaytnapi.com/v1/klaytn",
            option
          )
        );
      },
      network_id: "8217", //Klaytn baobab testnet's network id
      gas: "8500000",
      gasPrice: "25000000000",
    },
  },
};

kasBaobab과 kasCypress를 작성하였다. kasBaobab은 KAS를 이용해 baobab 테스트넷에 접속, kasCypress는 KAS를 이용해 Cypress 메인넷에 접속한다.

 

위 코드에서 privateKey, accessKeyId, secretAccessKey가 사용된다. 하드코딩하지 않고 별도의 파일에 저장하여 사용하였다.

privateKey는 배포를 하는 주소의 privateKey를 말한다. 스마트 컨트랙트를 배포할 때 수수료가 차감되므로 해당 계정에는 충분한 양의 클레이가 있어야 한다.

accessKeyId, secretAccessKey는 KAS에서 발급 받은 key이다. 

 

provider의 option을 보면 baobab은 value가 1001, cypress는 8217인데 체인 ID를 의미한다.

 

이제 스마트 컨트랙트를 작성하고 체인을 골라 배포할 수 있다.

// Cypress에 배포
$ truffle deploy --network kasCypress
// Baobab에 배포
$ truffle deploy --network kasBaobab

Cypress에 배포하는 경우 다음과 같이 터미널에 출력된다.

Compiling your contracts...
===========================
> Everything is up to date, there is nothing to compile.


Starting migrations...
======================
> Network name:    'kasCypress'
> Network id:      8217
> Block gas limit: 0x0


1_initial_migration.js
======================

   Deploying 'Migrations'
   ----------------------
   > transaction hash:    0x6e929ebeaea886d2612f90fe9af9e3d009c6fe453df652716e9960d494a87e37
   > Blocks: 0            Seconds: 0
   > contract address:    0x84500Ce85ec97F3Da6E81fba0E97776cF3AaAFb1
   > block number:        81949912
   > block timestamp:     1643799495
   > account:             0xba27e4f32Fdf885368e0C51801C26FF0852ab609
   > balance:             0.72001375
   > gas used:            219143
   > gas price:           25 gwei
   > value sent:          0 ETH
   > total cost:          0.005478575 ETH


   Deploying 'KlaytnGreeter'
   -------------------------
   > transaction hash:    0xa3fa0564d37a8822299b78ff52ef55dea88a1735659fd0192d7794349b98b8bd
   > Blocks: 0            Seconds: 0
   > contract address:    0x23168f59a877FA177Ea1c6Ae35D4bBB37e769685
   > block number:        81949916
   > block timestamp:     1643799499
   > account:             0xba27e4f32Fdf885368e0C51801C26FF0852ab609
   > balance:             0.71332875
   > gas used:            267400
   > gas price:           25 gwei
   > value sent:          0 ETH
   > total cost:          0.006685 ETH


   > Saving migration to chain.
   > Saving artifacts
   -------------------------------------
   > Total cost:         0.012163575 ETH


Summary
=======
> Total deployments:   2
> Final cost:          0.012163575 ETH

먼저 스마트 컨트랙트가 컴파일이 되는 것을 볼 수 있다.

그 이후 컴파일된 스마트 컨트랙트들이 배포가 되고 transaction hash 및 contract address가 출력된다.

배포하는데 사용된 cost도 확인할 수 있는데, Klay가 아닌 ETH로 표기되는 것을 볼 수 있다.

이는 truffle이 ETH를 배포하기 위해 사용되었기 때문에 표기만 그런 것으로 추측된다.

 

실제로 해당 트랜잭션 해시로 klaytn scope에 검색해보면 Klay로 표시된 것을 볼 수 있다.

Klaytn Scope

이로서 Klaytn IDE를 사용하지 않고 스마트 컨트랙트를 배포할 수 있게 되었다!

 

'블록체인 > 솔리디티' 카테고리의 다른 글

솔리디티로 간단한 컨트랙트 만들기  (0) 2021.12.26
Comments