Truffle
์ ๋ธ๋ก์ฒด์ธ ๋คํธ์ํฌ์์์ฑํ contract๋ฅผ ๋ฐฐํฌํด์ฃผ๋ ๋๊ตฌ
๋ผ๊ณ ์๊ฐํ๋ฉด ๋๋ค.๋ฌผ๋ก
remix
๋ฅผ ํตํด์๋ ๋ฐฐํฌํ ์ ์๋ค. ์ด๋ฐ ๊ฒฝ์ฐtruffle
์ ํ์๊ฐ ์๋ค.
ํ์ง๋ง ๋ฐฐํฌํ contract๊ฐ ๋ง์ ๊ฒฝ์ฐ, ํ ๋ฒ์ ๋ฐฐํฌ ๊ฐ๋ฅํ truffle์ด ๋ ํธํ๋ค.
Truffle ํ๋ก์ ํธ ์์ฑ(truffle์ด npm์ผ๋ก ์ค์น๋์ด์๋ค๊ณ ๊ฐ์ ํ๋ค.)
๋ค์ ๋ช
๋ น์ด๋ฅผ ํตํด Truffle Sample Project๋ฅผ ๋ง๋ค์ด๋ณด์.
$ mkdir sample
$ cd sample
$ truffle init
contracts
migrations
test
์ฐ์ , local
์์ ethereum blockchain network
๋ฅผ ์คํ์์ผ์ผ ํ๋ค.
Ganache
์์ ์๋ฒ๋ฅผ ์คํ์ํค๋ ๊ฒ๊ณผ ๊ฐ์ ์ญํ ์ ํ๋ค.
$ truffle develop
์ ๋ช
๋ น์ด๋ฅผ ํ๋ก์ ํธ ๋ฃจํธ ํด๋(sample ํด๋)์์ ์คํํ๋ฉด 10๊ฐ์ Accounts์ Private Keys
๊ฐ ๋ฆฌ์คํธ์
๋๋ฉด์ truffle(develop)> ํ๋กฌํํธ๊ฐ ๋ํ๋๊ฒ ๋๋ค.
์์ console์์ ๋์ค๋ http://127.0.0.1:9545/์ฃผ์๋ฅผ ํตํด
Metamask
์ ์ฐ๊ฒฐํ ์ ์๋ค.
ํน์ ๋ณธ์ธ ๋คํธ์ํฌ์ networkID
์ chainID
๋ฅผ ๋ชจ๋ฅด๊ฒ ๋ค๋ฉด truffle console
์ ์๋์ ๊ฐ์ด ์
๋ ฅํด๋ณด์
await web3.eth.net.getId();
await web3.eth.getChainId();
contracts/Sample.sol ์์น์ ๋ค์๊ณผ ๊ฐ์ ์ด๋ฆ์ผ๋ก ํ์ผ์ ์์ฑ
// SPDX-License-Identifier: GPL-3.0
pragma solidity ^0.8.10;
contract SimpleStorage {
uint val;
function set(uint x) public {
val = x;
}
function get() public view returns (uint) {
return val;
}
}
migrations/1_deploy_sample.js ์์น์ ๋ค์๊ณผ ๊ฐ์ ์ด๋ฆ์ผ๋ก ํ์ผ์ ์์ฑ
var SimpleStorage = artifacts.require("SimpleStorage");
module.exports = function(deployer) {
deployer.deploy(SimpleStorage);
};
์ปจํธ๋ํธ๋ฅผ ํธ์ถํ ๋๋ ํ์ผ๋ช ์ด ์๋ ์ปจํธ๋ํธ๋ช ์ผ๋ก ๋ถ๋ฌ์จ๋ค.(์์์๋ SimpleStorage)
๋ฐฐํฌํ์ผ์ ํ์ธํ๋ฉด ํ์ผ๋ช ์์ ์ซ์๊ฐ ๋ถ์ด ์๋ค.
migrations ํด๋ ์๋์ ํฌํจ๋ ๋ชจ๋ ํ์ผ์ ์คํํ๋ฏ๋ก ๋ฐฐํฌ ์ ์ฐ์ ์์๋ฅผ ์ฃผ๊ธฐ ์ํด ์์ ์ซ์๋ฅผ ๋ถ์ฌ ์ค๋ค.
test/TestSimpleStorage.sol ์์น์ ๋ค์๊ณผ ๊ฐ์ ์ด๋ฆ์ผ๋ก ํ์ผ์ ์์ฑ
// SPDX-License-Identifier: GPL-3.0
pragma solidity ^0.8.10;
import "truffle/Assert.sol";
import "truffle/DeployedAddresses.sol";
import "../contracts/Sample.sol";
contract TestSimpleStorage {
function testSimpleStorage() public {
SimpleStorage ss = new SimpleStorage();
uint expected = 4;
ss.set(expected);
Assert.equal(ss.get(), expected, "value equal test");
}
}
์ด์ ์ปดํ์ผ ํ Ethereum Client(Truffle Develop)์ ๋ฐฐํฌํ๊ณ ํ ์คํธ๊น์ง ํด๋ณด์.
truffle(develop)> compile
์ ๋ช ๋ น์ด ์คํ ์ ํ๋ก์ ํธ ๋ฃจํธ ํด๋(์ฌ๊ธฐ์๋ sample์ด๋ผ๋ ์ด๋ฆ)์ /build ํด๋๊ฐ ์์ฑ๋๋ฉฐ contracts ํด๋ ์๋์ ์๋ solidity ํ์ผ์ด json ํํ๋ก ๋ณ๊ฒฝ๋์ด ์์ฑ๋๋ค.
truffle(develop)> migrate
์ ๋ช ๋ น์ด ์คํ ์ /build ํด๋์ ์์ฑ๋ ํ์ผ(compile๋ ํ์ผ๋ค)์ ์๋ฒ์ ๋ฐฐํฌ๊ฐ ๋๋ค.
truffle(develop)> test
test๊ฐ ์ ์๋ฃ๋๋ฉด passing์ ๋ณผ ์ ์๋ค.
truffle sample
ํด๋์truffle-config.js
์ ๊ฐ๋จํ๊ฒ ์์ ํ์ฌGanache
๋ก์ปฌ ๋คํธ์ํฌ์ ์ฐ๋ํ ์ ์๋ค.
truffle
์์ ์์ฑํcontract
๋ฅผGanache
๋คํธ์ํฌ์ ๋ฐฐํฌํ๋ค๊ณ ์๊ฐํ๋ฉด ๋๋ค.
truffle-config.js์ ํด๋น๋ถ๋ถ์ ์๋์ ๊ฐ์ด ์์ ํด์ค๋ค.
module.exports = {
networks: {
development: {
host: "127.0.0.1",
port: 7545,
network_id: "5777,
},
},
}
์์ ํ truffle networks์ ์ด์ค์ผ๋ก์จ network_id๊ฐ ์ฐ๋์ด ์๋์๋์ง ํ์ธํ๋ค.
์์ด๋๊ฐ ์์์ ์ค์ ํ 5777์ด ๋์ค๋ฉด ์ ์์ด๋ค.
truffle(develop)> truffle networks
๋คํธ์ํฌ๋ฅผ ์์ ํ์ผ๋ ๋ค์ ๋ฐฐํฌํ๋ค
truffle(develop)> truffle migrate
ํธ๋์ญ์ ์ด ์ฌ๋ผ๊ฐ ๊ฒ์ Ganache์์ ํ์ธํ ์ ์๋ค
โ ๏ธ
๊ธฐ๋ง.. ์ฃฝ์ด๊ฐ๋ค..