blockchain

[Klaytn] 스마트 컨트랙트 배포

chanchand 2023. 2. 9. 03:12
반응형

- 트러플 구성

truffle-config.js 파일은 컨트랙트를 배포하는 방법을 설명한다.

어떤 Klaytn 계정이 컨트랙트를 배포할 것인지, 어떤 네트워크에 배포할 것인지, 가스를 얼마 지불할 것인지 항목을 구성한다.

 

- 스마트 컨트랙트 배포

계약 배포 방법은 두가지가 존재한다.

 

1. private key 이용

개인키를 사용하여 컨트랙트를 배포하려면 provider 옵션이 필요하다.

 

new HDWalletProvider()의 첫번째 인수로 개인키를, 두번째 인수로 Klaytn노드의 URL을 전달한다.

{
    ...,
    provider:new HDWalletProvider(
        'PRIVATE_KEY',
        'https://api.baobab.klaytn.net:8651',
    ),
    ...
}

 

baobab 네트워크에는 4가지 속성이 있다.

provider, network_id, gas, gasPrice

- provider : 배포자 계정과 네트워크 노드 URL을 알려준다.

- network_id : Klaytn network ID 지정, Baobab네트워크(테스트넷) : 1001

- gas : 컨트랙트 배포를 위한 가스 한도

- gasPrice : 가스 단위 당 지불할 가격으로, 25000000000으로 고정되어 있다. null 지정 시, 자동으로 고정된 가격으로 설정한다.

const HDWalletProvider = require("truffle-hdwallet-provider-klaytn")

const NETWORK_ID = '1001'
const URL = 'https://api.baobab.klaytn.net:8651'
const GASLIMIT = '8500000'

/*
  개인키를 노출하면 안된다.
*/
const PRIVATE_KEY = process.env.PK 

module.exports = {
  networks: {
    baobab: {
      provider: () => new HDWalletProvider(PRIVATE_KEY, URL),
      network_id: NETWORK_ID,
      gas: GASLIMIT,
      gasPrice: null,
    },
  },
}

 

2. unlocked account

unlocked account로 배포하기 위해서는 Klaytn 풀 노드가 있어야 한다.

아래와 같이 입력하여 Klaytn 노드 콘솔에 접근한다.

$ klay attach http://localhost:8551

 

Klaytn 계정이 없으면 콘솔에서 계정을 생성하고 (personal.newAccount()),

계정이 있는 경우에는 잠금을 해제한다. (personal.unlockAccount())

{
  host: 'localhost',
  port: 8551,
  from: '',
  network_id: NETWORK_ID,
  gas: GASLIMIT,
  gasPrice: null,
}

 

 


 

 

- 배포 설정

contracts/migrations

- 2_deploy_contracts.js

const Count = artifacts.require('./Count.sol')
const fs = require('fs')

// 계약 ABI와 배포된 주소 파일에 저장
module.exports = function (deployer) {
  deployer.deploy(Count)
    .then(() => {
    if (Count._json) {
      // deployedABI에 abi 파일 저장
      fs.writeFile(
        'deployedABI',
        JSON.stringify(Count._json.abi, 2),
        (err) => {
          if (err) throw err
          console.log(`The abi of ${Count._json.contractName} is recorded on deployedABI file`)
        })
    }
    // deployedAddress 파일에 최근에 배포된 컨트랙트 주소 기록
    fs.writeFile(
      'deployedAddress',
      Count.address,
      (err) => {
        if (err) throw err
        console.log(`The deployed contract address * ${Count.address} * is recorded on deployedAddress file`)
    })
  })
}

 

 

 


 

- 배포

컨트랙트를 배포하려면 KLAY가 필요하다.

Klaytn Baobab 테스트넷에서 faucet을 실행하면 150 KLAY를 받을 수 있다.

 

Klaytn Wallet

 

baobab.wallet.klaytn.foundation

 

$ truffle deploy --network baobab

 

truffle-config.js와 migrations/2_deploy_contracts.js에 정의된 구성에 따라 컨트랙트를 배포한다.

컨트랙트 배포 후 컨트랙트에 변경사항이 있을 때만 재배포 되고, 그렇지 않으면 아무 작업도 수행하지 않는다.

--reset 옵션을 사용하면 컨트랙트 내용이 변경되지 않아도 배포한다.

$ truffle deploy --reset --network baobab

 

터미널 출력에서 배포가 성공되었는지 확인할 수 있고, 배포된 주소를 볼 수 있다.

deployedABI와 deployedAddress가 생성된 것을 볼 수 있다.

반응형

'blockchain' 카테고리의 다른 글

IPFS  (0) 2023.03.03
스마트 컨트랙트 배포(Truffle)  (0) 2023.02.12
[Klaytn] EN  (0) 2023.02.09
[Klaytn] CountBApp  (0) 2023.02.05
caver-js  (0) 2023.02.03