이전까지 DApp 개발을 위한 필요한 프로그램 설치였다면
이제 이 프로그램들을 연계해서 이더리움 블록체인을 체험해 보겠습니다.
Truffle - solidity 개발 환경
Ganache - 이더리움 블록체인 로컬 네트워크 환경
MetaMask - 이더리움 지갑(계정)
Truffle로 스마트 계약을 만들어 Ganache 블록체인에 배포해서
Metamask 지갑에 ether가 송금되는지 확인합니다.
하나씩 해보겠습니다.
■ Truffle과 Ganache 연동
트러플과 가나슈 연동을 위해 네트워크 설정을 맞춥니다.
ganache를 실행하면 아래처럼
Network ID와 RPC Server 정보가 설정되어 있어요.
가나슈를 기준으로 트러플을 설정하겠습니다.
● 우선 이더리움 사설 네트워크의 기본 NETWORK ID인 1337로 바꿔주세요.
ganache 오른쪽 끝부분에 설정 메뉴 클릭하세요.
SERVER 메뉴에서 NETWORK ID를 1337로 변경
오른쪽 RESTART 클릭하세요.
★ gaanche 이더리움 네트워크
▩ RPC SERVER → HTTP://127.0.0.1:7545
IP(host)가 127.0.01이고 port가 7545입니다.
▩ NETWORK ID → 1337
C:\pjdapp>dir C 드라이브의 볼륨에는 이름이 없습니다. 볼륨 일련 번호: A8FA-0147 C:\pjdapp 디렉터리 2021-12-21 오후 03:44 <DIR> . 2021-12-21 오후 03:44 <DIR> .. 2021-12-21 오후 03:44 <DIR> build 2021-12-21 오후 03:43 <DIR> contracts 2021-12-21 오후 03:43 <DIR> migrations 2021-12-21 오후 03:43 <DIR> test 2021-12-20 오후 10:59 4,901 truffle-config.js 1개 파일 4,901 바이트 6개 디렉터리 71,132,753,920 바이트 남음 |
● truffle-config.js 파일에서 트러플 네트워크를 설정합니다.
♣ truffle 이더리움 로컬 네트워크 설정 truffle-config.js 파일 열면 아래처럼 networks 밑으로 모두 // 주석처리되어 있어요. 네트워크 설정 부분만 주석을 풀어 사용해도 되지만 너무 지져분한거 같아 다 지우고 필요한것만 지정하도록 할게요. 어차피 다 주석이니 지워도 문제 될거 없어요.ㅋ ♣ truffle-config.js 기존 내용 networks: { // Useful for testing. The `development` name is special - truffle uses it by default // if it's defined here and no other network is specified at the command line. // You should run a client (like ganache-cli, geth or parity) in a separate terminal // tab if you use this network and you must also set the `host`, `port` and `network_id` // options below to some value. // // development: { // host: "127.0.0.1", // Localhost (default: none) // port: 8545, // Standard Ethereum port (default: none) // network_id: "*", // Any network (default: none) // }, // Another network with more advanced options... // advanced: { // port: 8777, // Custom port // network_id: 1342, // Custom network // gas: 8500000, // Gas sent with each transaction (default: ~6700000) // gasPrice: 20000000000, // 20 gwei (in wei) (default: 100 gwei) // from: <address>, // Account to send txs from (default: accounts[0]) // websocket: true // Enable EventEmitter interface for web3 (default: false) // }, // Useful for deploying to a public network. // NB: It's important to wrap the provider as a function. // ropsten: { // provider: () => new HDWalletProvider(mnemonic, `https://ropsten.infura.io/v3/YOUR-PROJECT-ID`), // network_id: 3, // Ropsten's id // gas: 5500000, // Ropsten has a lower block limit than mainnet // confirmations: 2, // # of confs to wait between deployments. (default: 0) // timeoutBlocks: 200, // # of blocks before a deployment times out (minimum/default: 50) // skipDryRun: true // Skip dry run before migrations? (default: false for public nets ) // }, // Useful for private networks // private: { // provider: () => new HDWalletProvider(mnemonic, `https://network.io`), // network_id: 2111, // This network is yours, in the cloud. // production: true // Treats this network as if it was a public net. (default: false) // } }, ♣ truffle-config.js 변경 내용 networks 부분만 변경하고 파일 내의 다른부분은 그대로 두세요. 위의 내용이 아래처럼 확 줄었습니다. networks: { localnw: { // 네트워크 이름 development -> localnw (local networld 줄임) host: "127.0.0.1", // ganache host port: 7545, // ganache port network_id: "1337", // ganache network id } }, |
■ 스마트 계약 배포해서 송금확인
지난번에 작성한 스마트 계약을 배포해서 테스트해볼 거예요.
● truffle migrate
truffle migrate 명령어로 스마트 계약을 간단하게 배포할 수 있네요.
migrate(배포)는 migrations 폴더에 배포용 자바스크립트(js)에 의해 진행됩니다.
그래서 배포용 js파일을 만들어줘야 됩니다.
♥ 배포용 JS 샘플 const Migrations = artifacts.require("Migrations"); module.exports = function (deployer) { deployer.deploy(Migrations); }; 샘플과 동일하게 만들고 contract 이름만 바꿔주면 되며 contract에 생성자에 인자값을 전달해야 된다면 아래처럼 기입해주시면 됩니다. deployer.deploy(Migrations,인자값...); 전에 만들어 둔 Hello.sol 을 그대로 사용할게요. ♥ Hello.sol의 배포 js파일 만들기 const Hello = artifacts.require("Hello"); module.exports = function (deployer) { deployer.deploy(Hello,"nice to meet you"); }; ♥ 배포 JS파일 명칭 migrations 폴더에 있는 배포 JS 파일이름 규칙이 있습니다. 숫자_파일.js 아래 보시면 1_initial_migration.js이 있어요. 1_ 라는 prefix가 있죠. C:\pjdapp\migrations 디렉터리 2021-12-21 오후 03:43 <DIR> . 2021-12-21 오후 03:43 <DIR> .. 2021-12-20 오후 10:57 126 1_initial_migration.js 1개 파일 126 바이트 2개 디렉터리 71,140,007,936 바이트 남음 저는 2_hello_contract.js로 만들었어요. prefix 숫자는 기존 다음 순번으로 2로 정했습니다. C:\pjdapp\migrations 디렉터리 2021-12-21 오후 09:24 <DIR> . 2021-12-21 오후 09:24 <DIR> .. 2021-12-20 오후 10:57 126 1_initial_migration.js 2021-12-21 오후 09:24 114 2_hello_contract.js |
● truffle 배포
배포 전의 ganache 상태를 볼게요.
▩ ACCOUNTS
지갑(계정) 10개(INDEX 0~9)와 각 지갑마다 100 ETH가 갖게 되네요.
▩ BLOCKS
블록 0으로 아무것도 없네요.
▩ TRANSACTIONS
트랜젝션 발생도 전혀 없는 상태예요.
배포 후에 어떤 변화가 있는지 볼게요.
★ truffle 배포(deployer) 명령어
truffle migrate --network [네트워크 이름]
네트워크 이름은 truffle-config.js에 지정한 localnw입니다.
♣ deployer (배포) 하기 C:\pjdapp>truffle migrate --network localnw Compiling your contracts... =========================== > Compiling .\contracts\Hello.sol > Compiling .\contracts\Migrations.sol > Artifacts written to C:\pjdapp\build\contracts > Compiled successfully using: - solc: 0.8.10+commit.fc410830.Emscripten.clang Starting migrations... ====================== > Network name: 'localnw' > Network id: 1337 > Block gas limit: 6721975 (0x6691b7) 1_initial_migration.js ====================== Replacing 'Migrations' ---------------------- > transaction hash: 0x4454004c657ec8de6a76c06f41de6f3988c56f5b7fb8fb0eb3c6fdf9029f9c67 > Blocks: 0 Seconds: 0 > contract address: 0x6dc277D2e071b8E6DF08da6Db95544cb49F1A26e > block number: 1 > block timestamp: 1640096411 > account: 0xf91A58a2853Ed340cE39962fd83d62CCe5f35061 > balance: 99.99502292 > gas used: 248854 (0x3cc16) > gas price: 20 gwei > value sent: 0 ETH > total cost: 0.00497708 ETH > Saving migration to chain. > Saving artifacts ------------------------------------- > Total cost: 0.00497708 ETH 2_hello_contract.js =================== Deploying 'Hello' ----------------- > transaction hash: 0x71af52be8e859ce42e520ea9f64fd7d3cd8bab057f40ee46516799e7620e2026 > Blocks: 0 Seconds: 0 > contract address: 0x58C117e2046cbE6Fe040Ee16bF93fD82D9f68838 > block number: 3 > block timestamp: 1640096414 > account: 0xf91A58a2853Ed340cE39962fd83d62CCe5f35061 > balance: 99.98649866 > gas used: 383700 (0x5dad4) > gas price: 20 gwei > value sent: 0 ETH > total cost: 0.007674 ETH > Saving migration to chain. > Saving artifacts ------------------------------------- > Total cost: 0.007674 ETH Summary ======= > Total deployments: 2 > Final cost: 0.01265108 ETH C:\pjdapp> ▶ 배포과정을 보니 compile를 먼저 하고 migrations 처리되네요. migrations 폴더안에 있는 배포 JS파일을 모두 배포대상으로 하며 1_initial_migration.js 2_hello_contract.js 각 배포 JS별로 트랜젝션 hash와 block number (블록 생성 개수) 그리고 gas 비용까지 잘 보여줍니다. 마지막에 Summary까지 Total 2개 배포했고 최종 비용 0.01265108 ETH 까지 굿입니다. |
배포 후에 ganache 상태를 볼게요.
▩ ACCOUNTS
첫번째 지갑(0xf91A58a2853Ed340cE39962fd83d62CCe5f35061)의 잔액이
100에서 99.99 ETH가 되었으며 TX COUNT (트랜젝션 개수)가 4로 바꿨어요.
수신 지갑을 정하지 않고 truffle 배포를 하면
ganache의 첫번째 지갑으로만 처리가 되네요.
▩ BLOCKS
블록이 4개 생겼네요.
▩ TRANSACTIONS
트랜젝션 hash (TX HASH)와 송신과 수신 지갑 주소까지 보여주며
각 트랜젝션별 Gas까지 표시되네요.
드디어 뭔가를 해낸 거 같네요.^^;;
'IT > 이더리움 Ethereum' 카테고리의 다른 글
이더리움 solidity 스마트 계약 truffle 이용해서 테스트 하기 . console test (0) | 2022.09.25 |
---|---|
이더리움 DApp 개발 . Ganache + MetaMask 연동 (0) | 2022.09.24 |
이더리움 DApp 개발을 위한 Truffle(트러플) 설치하기 . solidity 컴파일 (0) | 2022.09.23 |
이더리움 DApp 개발을 위한 Node.js 설치하기 (1) | 2022.09.23 |
이더리움 로컬 개발 플랫폼 Ganache 설치하기 (0) | 2022.09.22 |
댓글