- 트러플 구성
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,
}
- 배포 설정
- 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를 받을 수 있다.
$ 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 |