6. Deploy Contract
Truffle 환경 설정
Deploy setup
Deploy
1) Truffle 환경 설정
truffle-config.js
는 컨트랙트 코드를 배포하는 것에 대한 파일입니다. truffle-config.js에서 다음 항목들을 설정할 수 있습니다.
1) 컨트랙트 배포 주체 (컨트랙트 배포 Klaytn 계정) **2) 컨트랙트 배포할 네트워크 ** **3) 컨트랙트 배포를 위해 지불할 가스의 양 **
컨트랙트를 배포하는 데에는 개인키
를 이용하는 방법과 잠금 해제된 계정
을 이용하는 방법 두 가지가 있습니다.
배포 방법 1: 개인키
경고: 개인키를 노출하면 안 됩니다. 만약 노출할 경우 계정이 해킹될 수도 있습니다.
개인키를 사용하여 컨트랙트를 배포하려면 provider
옵션이 필요합니다.
1) 개인키를 new HDWalletProvider()의 첫 번째 인자로 전달하세요.<code> 2\) Klaytn 노드의 URL을
new HDWalletProvider()의 두 번째 인자로 전달하세요.
예시)
위의 코드에서 networks
속성을 봐주세요. 이 속성에는 baobab
키가 있는데, 이 키에는 또 다시 provider
, network_id
, gas
, gasPrice
등 4개의 속성이 있습니다.
provider: new HDWalletProvider(PRIVATE_KEY, URL)
행은 컨트랙트를 배포하는 계정과 배포 대상 네트워크의 노드 URL을 받아옵니다.
network_id: NETWORK_ID
행은 Klaytn에서의 네트워크 ID를 지정합니다. Baobab 네트워크(testnet)는 1001
입니다.
gas: GASLIMIT
행은 컨트랙트를 배포하는 데에 얼마까지 가스를 지불할 것인지 한도를 지정합니다.
gasPrice: null
행은 1 가스당 지불할 금액을 트러플에 전달합니다. 현재 Klaytn에서는 가격이 25000000000
으로 고정되어 있습니다. 이 부분을 null
로 설정하면 트러플에서 자동적으로 고정 가스 가격으로 설정합니다.
DEPLOY METHOD 2: By unlocked account (difficult)
To deploy a contract by unlocked account, you should have your Klaytn full node.
Access your Klaytn node console by typing $ klay attach http://localhost:8551
If you don't have a Klaytn account in the node, generate it by typing personal.newAccount()
on the console.
If you already have one, unlock your account through personal.unlockAccount()
.
After ensuring account is unlocked,
you should set the properties, host
, port
, network_id
, and from
. 1) Which network to deploy (host
, port
, network_id
)
2) Who will deploy (from
) 3) How much gas will you endure to deploy your contract (gas
)
Put your unlocked account address on from
. If you're running your own Klaytn full node, set the node's host to host
and node's port to port
.
example)
2) Deploy setup (Which contract do you want to deploy?)
migrations/2_deploy_contracts.js
:
You can specify which contract code will you deploy in your contracts/
directory.
First, you should import your contract file (Count.sol
) in this file through const Count = artifacts.require('./Count.sol')
And use deployer
to deploy your contract, through deployer.deploy(Count)
.
If you want to run some logic after deploying your contract, use .then()
.
We want to store the contract ABI and the deployed address in files. fs
node.js module is used to do it. (fs.writeFile(filename, content, callback)
)
Through this post-process, we save our contract address and ABI as deployedABI
and deployedAddress
in the directory.
For further information about artifacts.
, visit truffle document site, https://trufflesuite.com/docs/truffle/getting-started/running-migrations#artifacts-require-
3) Deploy
You need KLAY to deploy a contract. You can receive testnet KLAY on faucet.
On Klaytn wallet https://baobab.wallet.klaytn.foundation/faucet, there is a faucet providing 150 KLAY per 86400 blocks in Klaytn Baobab testnet. After creating your Klaytn account, run faucet to receive 150 KLAY.
Type $ truffle deploy --network baobab
.
It will deploy your contract according to the configurations defined in truffle-config.js
and migrations/2_deploy_contracts.js
.
cf) --reset
option
After deploying your contract, if you type $ truffle deploy --network baobab
again, nothing will happen.
Because truffle deploys a contract only when there are changes in the contract, otherwise truffle will not do anything.\ If you want to re-deploy your contract anyway, there is an option --reset
.
If you provide this option, truffle will deploy your contract even the content of contract hasn't changed.\ ex) $ truffle deploy --reset --network baobab
To recap, truffle-config.js
configures the target network
, deployer account
, and the gas limit
. migrations/2_deploy_contracts.js
configures the contract
to deploy.
target network
: We deploy our contract to the node https://public-en-baobab.klaytn.net
.
deployer account
: '0xd0122fc8df283027b6285cc889f5aa624eac1d23' will deploy this contract.
gas limit
: We can endure up to '20000000' gas for deploying our contract.
contract
: We will deploy the Count contract.
From the terminal output, you can see if the deployment has been succeeded and find the deployed address.
Last updated