Truffle은 컨트랙트 코드를 작성하고 배포하기 위한 프레임워크 입니다.
컨트랙트를 배포하기 전 테스팅은 필수이므로, Truffle에서 테스트 기능을 적극 활용해야 합니다.
Truffle 프로젝트 시작
우선 프로젝트를 시작하고 네트워크 설정을 해줘야 합니다. Truffle에서 컨트랙트를 배포하고 테스팅을 진행할 네트워크 입니다.
1. 프로젝트 초기화
$ truffle init
프로젝트를 초기화 하면, contracts / migrations / test / truffle-config.js 파일이 담긴 디렉토리가 완성됩니다.
2. 초기 컨트랙트 작성
pragma solidity ^0.8.7;
contract SampleContract {
uint public val;
string public name;
constructor(){
name = "Noonoo";
}
function set(uint x) public {
val = x;
}
function get() public returns(uint){
uint _val = val;
return _val;
}
}
3. migrations/1_deploy.js 파일 작성
작성된 컨트랙트 코드를 배포해주는 코드 입니다.
const SampleContract = artifacts.require("SampleContract");
module.exports = function(deployer){
deployer.deploy(SampleContract);
}
4. 배포 진행
컴파일만 진행해도 되고, 아래 명령어로 전체 컨트랙트 파일 컴파일 + 배포 까지 진행할 수 있습니다.
$ truffle compile
$ truffle migrate --compile-all
특정 네트워크를 지정해줄 수도 있습니다. 다만 외부 네트워크를 지정하기 위해서는 truffle-config.js에서 네트워크 설정을 따로 해줘야 합니다.
$ truffle migarte --compile-all network <NETWORK>
네트워크는 ropsten 테스트 넷이나 메인넷 혹은 로컬 네트워크에서 배포를 해볼 수 있습니다. 물론 truffle 자체에서도 lccalhost:9545 포트를 사용한 네트워크를 따로 제공하기도 합니다.
truffle 자체 네트워크
아래 명령어로 Truffle 자체 네트워크를 실행합니다. 10개의 임시계정이 주어지고 9545 포트로 연결됩니다. 또한 truffle console 창이 바로 열려 해당 네트워크에서 interactive하게 명령어를 사용할 수 있습니다.
$ truffle develop
➜ sample truffle develop
Truffle Develop started at http://127.0.0.1:9545/
Accounts:
(0) 0x7c21d996e69207a08a581911b7bb4df2870144d0
(1) 0xe4d2f38f58e34f6a0990491281fc1ba858289141
(2) 0x7d4319324e5a2e81ecd76e08fa0a180739de7f38
(3) 0x4632fc6f990fdebd63b61b18cdcd46314414a31f
(4) 0x780a75460f4eec3df35642420053a2c462ca0eb8
(5) 0xec44a30707bd60df81432924c6f7d76104b78d64
(6) 0x49c667c33b5d310bb3492c330ad1c9ef8c971528
(7) 0x879eb2c9156fb514c4415b10c1d4e588b69d733d
(8) 0x8e45cdbcd513b520c611b9ec55983b59c34ec2cf
(9) 0x0892a362c4767945fb8f3c486612b4e90d0d0daa
Private Keys:
(0) 2144a6bbda660667fd703c96424bbf0b7475b57d9944225a382750eeb98a1b12
(1) 30024471ed3ccf78957a5baed6e72cab7b7d8416ead21be4ca860c905fa424c4
(2) 86516d48e1ec7fd44db0528300040b6c4b6ea52964737f1ebf818ea3b95babba
(3) c273b56234fd8ed1bd6ff7ff9eccdb30d47ee5f7962f765d5fb628a6089c24ce
(4) f6a3c090a6a86c3760cacc4e725b7dc42eb53f347a020b113fde0dbddd448600
(5) b905d8d4e338d41fd1cf7a5829387c78b0b6672015a24d9d6f6b672ac78979c4
(6) b0332eab7c07e760c28923a4ba3d62483d0a9339099a53eeaa647204633c63f7
(7) f94011001096af21f4fb5e44758777f57bcbe1cbbd25780254abe3afd49e35e0
(8) 5158099b8d7f192e0ab3f10861b573097a3244bb22d9951b00d2b9e57d515e34
(9) 4c75a71928957fd02f051fbebed7c772756344cdd3186f1e5ccb9c40e87416e8
Mnemonic: aisle taxi happy tattoo ten tail behind pluck universe tongue group olive
⚠️ Important ⚠️ : This mnemonic was created for you by Truffle. It is not secure.
Ensure you do not use it on production blockchains, or else you risk losing funds.
truffle(develop)>
Truffle Console은 기본적으로 web3 객체를 내장하고 있습니다.
확인을 위해 아래 버전을 확인합니다.
➜ sample truffle version
Truffle v5.5.27 (core: 5.5.27)
Ganache v7.4.0
Solidity - 0.8.16 (solc-js)
Node v16.15.0
Web3.js v1.7.4
Truffle 자체에 Ganache, Solidity, Node, Web3.js 모듈을 내장하고 있습니다. 따라서 Web3 모듈을 사용해 계정정보와 컨트랙트들을 가져올 수 있습니다.
계정 정보 확인
web3.eth.getAccount() 함수를 사용합니다.
truffle(develop)> let acc = await web3.eth.getAccounts()
undefined
truffle(develop)> acc
[
'0x7C21d996E69207a08A581911B7BB4DF2870144d0',
'0xe4d2f38F58e34F6a0990491281FC1BA858289141',
'0x7D4319324e5A2E81Ecd76E08fa0A180739DE7f38',
'0x4632FC6f990FdEBd63b61b18CDcD46314414A31F',
'0x780A75460f4eec3Df35642420053A2c462cA0EB8',
'0xeC44A30707Bd60df81432924c6f7D76104b78d64',
'0x49c667C33B5d310bb3492C330AD1C9EF8C971528',
'0x879eB2c9156fB514c4415B10C1d4E588B69d733D',
'0x8E45CDBcd513b520C611b9Ec55983B59C34ec2Cf',
'0x0892A362C4767945fb8F3C486612B4e90d0D0DaA'
]
계정 잔액 확인
web3.eth.getBalance() 함수를 사용합니다.
truffle(develop)> let bal1 = await web3.eth.getBalance(acc[0])
undefined
truffle(develop)> bal1
'100000000000000000000'
'Blockchain' 카테고리의 다른 글
[Solved] Error: truffle-plugin-verify listed as a plugin, but not found in global or local node modules! (1) | 2022.08.22 |
---|---|
Truffle Testing 방법 (Mocha, chai 사용) (1) | 2022.08.20 |
Truffle Ropsten Deploy config migrate Testnet에 컨트랙트 배포 + verify 방법 (0) | 2022.08.12 |
[회고록] 첫번째 프로젝트(Opensea) 시작 (0) | 2022.08.08 |
[Blockchain] 이더스캔 서비스 구축하기 (0) | 2022.08.04 |
댓글