์นดํ…Œ๊ณ ๋ฆฌ ์—†์Œ

[1013] Truffle ํŠธ๋Ÿฌํ”Œ ๊ฐœ๋ฐœํ™˜๊ฒฝ์—์„œ ์ž‘์—…ํ•˜๊ธฐ - with. ganache & Meta mask & react

๋ฌธ์•ต 2021. 10. 13. 11:55

- 1๊ต์‹œ -

 

๐Ÿ”… ๋ฉ”ํƒ€๋งˆ์Šคํฌ๋ž€?

- ๊ฐœ์ธ์˜ ๊ณ„์ •์˜ ์ฃผ์†Œ๊ฐ’์„ ์ €์žฅํ•ด์„œ

  ์ด๋”๋ฆฌ์›€๊ณผ ์ด๋”๋ฆฌ์›€ ํ† ํฐ์„ ์‰ฝ๊ณ  ์•ˆ์ „ํ•˜๊ฒŒ ๋ณด๊ด€ํ•  ์ˆ˜ ์žˆ๊ฒŒ ํ•ด์ฃผ๋Š” ํ”„๋กœ๊ทธ๋žจ.

- ํ•ซ์›”๋ ›์ด๋ผ๊ณ ๋„ ํ•จ.

- ์‹œ๋“œํ‚ค๋ผ๋Š”๊ฒƒ์ด ์กด์žฌํ•จ. (๋น„๋ฒˆ ์žƒ์–ด๋ฒ„๋ ธ์„ ๋•Œ 2์ฐจ ๋น„๋ฒˆ๊ฐ™์€ ๋Š๋‚Œ. ๋ฐฑ์—…์šฉ)

- ํฌ๋กฌ์—์„œ ๋‹ค์šด๋ฐ›์„ ์ˆ˜ ์žˆ๋Š” ํ™•์žฅํ”„๋กœ๊ทธ๋žจ

 

 

โ• ์šฉ์–ด ์ •๋ฆฌ 

์ฃผ์†Œ
    - ๊ณต๊ฐœ(์ฃผ์†Œ)ํ‚ค : 20 ์ž๋ฆฌ๋กœ ํ‘œํ˜„๋˜๋Š” ํ‚ค๊ฐ’
    - ์•”ํ˜ธ(๊ฐœ์ธ)ํ‚ค

๊ณ„์ •
    - ๊ณต๊ฐœํ‚ค์™€ ์•”ํ˜ธํ‚ค ๋‘˜๋‹ค ๊ฐ€์ง€๊ณ  ์žˆ๋Š” ์ƒํƒœ
    - EOA / ์ปจํŠธ๋ž™ํŠธ ๊ณ„์ •์œผ๋กœ ๋‚˜๋‰œ๋‹ค.
      	EOA : ์ด๋” / ์Šค๋งˆํŠธ ์ปจํŠธ๋ž™ํŠธ ํŠธ๋žœ์žญ์…˜์„ ๋ณด๋‚ผ ์ˆ˜ ์žˆ๋Š” ๊ณ„์ •
        ์ปจํŠธ๋ž™ํŠธ ๊ณ„์ • : ์†”๋ฆฌ๋””ํ‹ฐ ์–ธ์–ด๋ฅผ ๋ฐฐํฌํ•œ ๊ณ„์ • (์šฐ๋ฆฌ๊ฐ€ ์ปจํŠธ๋ž™ํŠธ๋ฅผ ์ƒ์„ฑํ•ด์„œ ๋ณด๋ƒˆ๋˜ ์–˜)
        deploy.{
        }.send{
        	from: '1ox398f89423fd95'
        } -> ์š”๋Ÿฐ๊ฑฐ ๋“ค์–ด์žˆ์œผ๋ฉด ๊ทธ๊ฒŒ ์ปจํŠธ๋ž™ํŠธ ๊ณ„์ •

์ง€๊ฐ‘
    -๊ณ„์ •์„ ์ด๊ด„ํ•˜๋Š” ๊ณต๊ฐ„

 

 

 

 

์ด๋Ÿฐ ๋Š๋‚Œ

 

 

 

 

 


- 2๊ต์‹œ -

 

๋ฉ”ํƒ€๋งˆ์Šคํฌ ์„ค์น˜

https://metamask.io/

 

MetaMask - A crypto wallet & gateway to blockchain apps

A crypto wallet & gateway to blockchain apps

metamask.io

 

๊ฐ€๋‚˜์‰ฌ ์„ค์น˜

https://www.trufflesuite.com/ganache

 

Ganache | Truffle Suite

Deploy contracts, develop your decentralized applications (dapps), and run tests on smart contracts. Available as a desktop application & command-line tool.

trufflesuite.com

 

 

๐Ÿ”น๐Ÿ”น๐Ÿ”น

 

๋ฉ”ํƒ€๋งˆ์Šคํฌ๋ฅผ ์ฒ˜์Œ์— ์„ค์น˜ํ•˜๊ณ  ๋น„๋ฐ€๋ฒˆํ˜ธ๋ฅผ ์ƒ์„ฑํ•˜๋ฉด, ๊ธฐ๋ณธ์ ์œผ๋กœ account1์ด๋ผ๋Š” ๊ณ„์ •์ด ์กด์žฌํ•จ.

 

 

 

 

๊ณ„์ •์„ ๋ˆŒ๋Ÿฌ์„œ ๋„คํŠธ์›Œํฌ๋ฅผ ํ…Œ์ŠคํŠธ๋„ท์œผ๋กœ ๋ฐ”๊พผ ๋‹ค์Œ,

๊ฐ€์ƒ์˜ ์ด๋”๋ฆฌ์›€์„ ๋ฐ›์•„๋ณผ ์ˆ˜ ์žˆ์Œ.

 

๊ตฌ๋งค

๐Ÿ”ฝ

ํฌ์‹œํŠธ(์ˆ˜๋„๊ผญ์ง€) ํ…Œ์ŠคํŠธ

Ropsten์šฉ ํฌ์‹œํŠธ์—์„œ Ether ์–ป๊ธฐ

"Ether ์–ป๊ธฐ"ํด๋ฆญ

๐Ÿ”ฝ

request 1ether from faucet ํด๋ฆญ

๐Ÿ”ฝ

๋ฐ‘์— transaction์ด ์ƒ๊ธฐ๋ฉด ์„ฑ๊ณต

 

 

 

 

๐Ÿ”น ๋ณดํ†ต์˜ ๊ฐœ๋ฐœ ๋‹จ๊ณ„๋Š”

1. ๊ฐ€๋‚˜์‰ฌ๋กœ ์ฝ”๋“œ ์ž‘์„ฑ (๋กœ์ปฌ์—์„œ ๋Œ๋ ค๋ณด๊ณ )

2. ํ…Œ์ŠคํŠธ๋„ท์œผ๋กœ ํ…Œ์ŠคํŠธ

3. ๋ฉ”์ธ๋„ท์— ์˜ฌ๋ฆฌ๊ธฐ (์‹ค์ œ ์ด๋” ์†Œ์š”)

 

 

โ• ๊ฐ€๋‚˜์‰ฌ ์‹คํ–‰

๊ฐ€๋‚˜์‰ฌ๋ฅผ ์—ด๋ฉด 10๊ฐœ์˜ ๊ณ„์ •์ด ์ƒ์„ฑ๋จ.

๊ฐ๊ฐ์˜ ๊ณ„์ •์—๋Š” ๊ณต๊ฐœํ‚ค (์ฃผ์†Œ)๊ฐ€ ๋“ค์–ด์žˆ์Œ. ์˜†์— ์—ด์‡  ๋ˆ„๋ฅด๋ฉด ๋น„๋ฐ€ํ‚ค ๋‚˜์˜ด

 

 

* ๋ฉ”ํƒ€๋งˆ์Šคํฌ๋Š” ์–ด๋–ค๊ฐ’์„ ์š”๊ตฌํ• ๊นŒ์š”?

 

โœ… ๊ฐœ์ธํ‚ค๋ฅผ ๋„ฃ๊ฒŒ ๋˜์–ด์žˆ์Œ

why ๊ฐœ์ธํ‚ค๋งŒ ์š”๊ตฌ?

- ๊ฐœ์ธํ‚ค : keccak256()์„ ๊ฐ€์ง€๊ณ  ๊ฐœ์ธํ‚ค๋ฅผ ์ƒ์„ฑ / ๊ฐœ์ธํ‚ค๋ฅผ ๊ฐ€์ง€๊ณ  ๊ณต๊ฐœํ‚ค๋ฅผ ์ƒ์„ฑ.

  ์ฆ‰,  ๊ฐœ์ธํ‚ค๋งŒ ๊ฐ€์ง€๋ฉด ๊ณต๊ฐœํ‚ค๋ฅผ ์•Œ ์ˆ˜ ์žˆ์Œ 

 

 

โ• ๊ณ„์ • ์ƒ์„ฑํ•˜๊ธฐ

"๊ฐ€๋‚˜์‰ฌ" ๊ณ„์ •์ด ์ƒ์„ฑ๋จ!

 

๊ณ„์ •๋งŒ ๋งŒ๋“ค์–ด๋†“๊ณ  ์ฃผ์†Œ๊ฐ’์„ ๋„ฃ์ง€ ์•Š์€ ์ƒํƒœ!

์—ฌ๊ธฐ๋‹ค๊ฐ€ ์ฃผ์†Œ๊ฐ’์„ ๋„ฃ์–ด์ค˜์•ผ ์ด๋”๊ฐ€ ๋œฐ ๊ฒƒ์ž„~

 

1. ์ฃผ์†Œ๊ฐ’ ๋„ฃ๊ธฐ

2. ๋‚ด๊ฐ€ ๋„ฃ์€ ์ฃผ์†Œ๊ฐ€ ์–ด๋–ค ๋„คํŠธ์›Œํฌ์— ์žˆ๋Š” ์ฃผ์†Œ์ธ์ง€๋„ ๋ช…์‹œ๋ฅผ ํ•ด์ค˜์•ผ ํ•จ (= url ์ฃผ์†Œ ํ•„์š”)

์šฐ๋ฆฌ๋Š” localhost ์—์„œ ์ž‘์—…ํ•ด์•ผ ํ•˜๋ฏ€๋กœ "๋งž์ถคํ˜• rpc"๋ฅผ ๋ˆŒ๋Ÿฌ์„œ ๊ฐ€๋‚˜์‰ฌ url ์ฃผ์†Œ ๋„ฃ์–ด์ค˜์•ผ ํ•จ!

 

 

โ• ๋„คํŠธ์›Œํฌ ๋ช…์‹œํ•˜๊ธฐ

         

                     ๐Ÿ”ผ ๋งž์ถคํ˜• rpc ํด๋ฆญ                                                                 ๐Ÿ”ผ๋„คํŠธ์›Œํฌ ์ด๋ฆ„ ์•„๋ฌด๊ฑฐ๋‚˜ ์ ๊ณ ,

                                                                                                                    rpc url์€ ์šฐ๋ฆฌ๊ฐ€ ๊ฐ€๋‚˜์‰ฌ๋กœ ์ƒ์„ฑํ•œ url

                                                                                                                    ์ฒด์ธ id๋„ ์ ์–ด์ฃผ๊ธฐ (๊ทธ๋ƒฅ ๋ฉ”ํƒ€๋งˆ์Šคํฌ์—์„œ ์ ์œผ๋ผ๋Š”๋Œ€๋กœ ํ•˜๋ฉด๋จ)

 

 

 

โ• ์ฃผ์†Œ๊ฐ’ ๋„ฃ๊ธฐ

 

๊ณ„์ • ๊ฐ€์ ธ์˜ค๊ธฐ ๋ˆ„๋ฅด๋ฉด ๊ฐœ์ธํ‚ค๋ฅผ ์ž…๋ ฅํ•˜๋Š” ํ™”๋ฉด์ด ๋‚˜์˜ด! ๊ฑฐ๊ธฐ์— ๊ฐ€๋‚˜์‰ฌ์—์„œ ์ƒ์„ฑ๋œ ๊ฐœ์ธํ‚ค๋ฅผ ๋ณต์‚ฌํ•ด์„œ ๋„ฃ์–ด์ฃผ๋ฉด ๋จ~

๊ทธ๋Ÿฌ๋ฉด 100 ์ด๋”๊ฐ€ ์ƒ๊น€!!!

 

 

โœ…โœ… ๊ฐ€๋‚˜์‰ฌ๋ž‘ ๋ฉ”ํƒ€๋งˆ์Šคํฌ๊ฐ€ ์—ฐ๊ฒฐ๋œ ๊ฒƒ! โœ…โœ…

 

 


- 3๊ต์‹œ -

 

๐Ÿ”… truffle์ด๋ž€?

 

- Dapp์„ ๋งŒ๋“ค๊ธฐ ์œ„ํ•œ ํ”„๋ ˆ์ž„์›Œํฌ์ž…๋‹ˆ๋‹ค.

- ์•ฑ์„ ๋งŒ๋“ค ๋•Œ ๋ณต์žกํ•œ ์ค‘๊ฐ„๊ณผ์ •์„ ๋‚ ๋ ค์ค๋‹ˆ๋‹ค.

 

์–ด์ œ ๋งŒ๋“  ํˆฌํ‘œ์•ฑ์„ ์˜ˆ์‹œ๋กœ ์ƒ๊ฐํ•ด๋ณด๋ฉด,

1. ์†”๋ฆฌ๋””ํ‹ฐ๋กœ ์ฝ”๋”ฉํ•œ๋‹ค.

2. ์ฝ”๋”ฉํ•œ ๊ฒƒ์„ ์ปดํŒŒ์ผ ํ•œ๋‹ค.

3. ์ปดํŒŒ์ผํ•œ ๋‚ด์šฉ์„ ๋ฐฐํฌํ•œ๋‹ค. (deploy.js ์‹คํ–‰ -> transaction ๋ฐœ์ƒ๋œ address ๊ฐ€์ ธ์™€์„œ)

4. web3 ( ์—ฌ๊ธฐ์— transaction address ๋„ฃ์–ด์ฃผ๋Š”.. )๋ฅผ ํ™œ์šฉํ•˜์—ฌ ํ”„๋ก ํŠธ์•ค๋“œ๋ฅผ ๋งŒ๋“ ๋‹ค.

 

์ด๋Ÿฌํ•œ ์ž‘์—…์„ ๊ฐ„์†Œํ™”ํ•ด์ฃผ๋Š”๊ฒŒ truffle! 

 

 

๐Ÿ”… ํŠธ๋Ÿฌํ”Œ ์ž‘์—…ํ™˜๊ฒฝ ๋งŒ๋“ค๊ธฐ

npm install -g truffle

truffle init

 

โ• ํด๋” ์„ธ๊ฐœ๊ฐ€ ์ƒ์„ฑ๋จ! (+ truffle-config.js ํŒŒ์ผ)

1. contracts -> ์†”๋ฆฌ๋””ํ‹ฐ ์ฝ”๋“œ ์ž‘์„ฑํ•˜๋Š” ๊ณต๊ฐ„

2. migrations -> deploy ๋งค์„œ๋“œ๊ฐ€ ์‚ฌ์šฉ๋˜๋Š” ๊ณต๊ฐ„. ๋ฐ๋ชฌ์—๊ฒŒ ๋ฐฐํฌํ•˜๋Š” ํ–‰์œ„๋ฅผ ํ•˜๋Š” ๊ณต๊ฐ„

3. test -> TDD ์ฝ”๋“œ๋ฅผ ์ž‘์„ฑํ•˜๋Š” ๊ณต๊ฐ„

4. truffle-config.js -> truffle ๊ด€๋ จ๋œ ํ™˜๊ฒฝ์„ค์ • ํŒŒ์ผ. 
๊ตฌ๋™ํ• ๋•Œ ํ•„์š”ํ•œ ์„ธํŒ… ํ•ด์ค„ ์ˆ˜ ์žˆ์Œ. ์ฒ˜์Œ์—” ๋Œ€๋ถ€๋ถ„ ์ฃผ์„ ๋˜์–ด์žˆ์Œ

 

----------------------------์„ธํŒ… ์™„๋ฃŒ-----------------------------

 

 

๐Ÿ”… ๋ฐฐํฌํ•˜๊ธฐ

 

 

โ• ๊ฐ„๋‹จํ•œ solidity ์ฝ”๋“œ๋ฅผ ์ž‘์„ฑํ•ด๋ณด์ž

 

1.  ์ปจํŠธ๋ž™ํŠธ ํŒŒ์ผ ์ƒ์„ฑํ•˜๊ธฐ
 a. ์ง์ ‘ ์ž…๋ ฅ
 b. 
 > truffle create contract HelloToken : HelloToken.sol ํŒŒ์ผ ์ƒ์„ฑ๋จ
 	- ๋˜ํ•œ > truffle create [ํด๋”๋ช…] [ํŒŒ์ผ๋ช…] ํ•ด์ฃผ๋ฉด ํ•ด๋‹น ํด๋” ์•ˆ์— ํŒŒ์ผ ์ƒ์„ฑ๋จ!
    	ex) truffle create test HelloToken ํ•ด์ฃผ๋ฉด test > hello_token.js ์ƒ๊น€

๐Ÿ”ฝ ํ•ด์ฃผ๋ฉด

 

์š”๋ ‡๊ฒŒ ๊ธฐ๋ณธ ๊ตฌ์กฐ๊ฐ€ ์…‹ํŒ…๋œ ์ปจํŠธ๋ž™ํŠธ ํŒŒ์ผ์ด ์ƒ์„ฑ๋จ~

 

์ด ์ƒํƒœ์—์„œ ํ•จ์ˆ˜๋ฅผ ์ž…๋ ฅํ•ด์ฃผ๋ฉด ๋จ๋ฏธ๋‹น.

 

contracts > HelloToken.sol ์ฝ”๋“œ ์ž‘์„ฑ 

// ๊ฐ„๋‹จํžˆ helloworld ๋ฅผ ๋ฆฌํ„ดํ•ด์ฃผ๋Š” ํ•จ์ˆ˜๋ฅผ ์ž‘์„ฑํ•ด๋ด…๋‹ˆ๋‹ค

pragma solidity >=0.4.22 <0.9.0;

contract HelloToken {
  constructor() public {
  }
  
  function hello() public view returns(string memory){
    return "hello";
  }
}

 

ํ˜„์žฌ ์ƒํƒœ์—์„œ ๋ฐ๋ชฌ์— ๋ฐฐํฌ๋ฅผ ํ•ด์•ผ ํ•˜๋Š”๋ฐ,

์šฐ๋ฆฌ๊ฐ€ ์ด ์ฝ”๋“œ๋ฅผ ์–ด๋Š ์ฃผ์†Œ์— ๋ฐฐํฌํ•  ๊ฒƒ์ธ์ง€ ์ •ํ•ด์ฃผ์ง€ ์•Š์•˜์Œ.

๊ฐ€๋‚˜์‰ฌ์— ํ• ๊ฑด์ง€, ํ…Œ์ŠคํŠธ๋„ท์— ํ• ๊ฑด์ง€, ๋ฉ”์ธ๋„ท์— ํ• ๊ฑด์ง€ ์ขŒํ‘œ๋ฅผ ์ •ํ•ด์ค˜์•ผ ํ•จ.

 

 

โ• ๋„คํŠธ์›Œํฌ ํ™˜๊ฒฝ์„ค์ •ํ•˜๊ธฐ - truffle-config.js 

// ๋‚ด๊ฐ€ ์–ด๋Š ๋„คํŠธ์›Œํฌ๋ฅผ ์“ธ๊ฒƒ์ธ๊ฐ€๋Š” development ๋ถ€๋ถ„์— ์„ค์ •๋˜์–ด์žˆ์Œ

์ด๋ถ€๋ถ„ ์ฃผ์„ ํ’€์–ด์ฃผ๋ฉด ๋จ
โฌ‡
development: {
     host: "127.0.0.1",     // Localhost (default: none)
     port: 7545,            // Standard Ethereum port (default: none)
     network_id: "*",       // Any network (default: none)
    },
    
// ์šฐ๋ฆฌ๊ฐ€ ๊ฐ€๋‚˜์‰ฌ ์•ฑ์œผ๋กœ ์‹คํ–‰ํ•œ ํฌํŠธ๋ฒˆํ˜ธ๋กœ ๋ฐ”๊ฟ”์ค˜์•ผ ํ•จ = port: 7545

 

 

 

 

โ• ์ปดํŒŒ์ผ ํ•˜๊ธฐ

- ์ž‘์„ฑํ•œ ์ฝ”๋“œ๋ฅผ ์ปดํŒŒ์ผํ•ด์ค€๋‹ค

> truffle compile

-> build ํด๋”๊ฐ€ ์ƒ์„ฑ๋จ. ์ด ์•ˆ์—๋Š” abi ํด๋”๊ฐ€ ๋“ค์–ด๊ฐ€ ์žˆ์Œ
bin ํด๋”๋„ ์ƒ๊ธฐ์ง€๋งŒ ์–˜๋„ค๋Š” ๋‹ค๋ฅธ๋ฐ์— ๊ฝ๊ฝ ์ˆจ๊ฒจ์ ธ์žˆ์Œ

 

 

 

 

โ• ๋ฐฐํฌ ํ•˜๊ธฐ

- migrations ํด๋”์— ์–ด๋–ค ํŒŒ์ผ์„ ๋ฐฐํฌํ•  ๊ฒƒ์ธ์ง€ ์„ค์ •์„ ํ•ด์ค˜์•ผ ํ•จ.

- ํŒŒ์ผ ์ƒ์„ฑ : ์ž‘์„ฑ ๊ทœ์น™ โ–ถ [์ˆซ์ž]_[ํŒŒ์ผ๋ช…]  ex) 2_helloToken.js

- ์ฝ”๋“œ ์ž‘์„ฑ

// HelloToken.sole ํŒŒ์ผ์„ ๊ฐ€์ ธ์™€์„œ HelloToken ์ด๋ผ๋Š” ๋ณ€์ˆ˜์— ๋‹ด๊ฒ ๋‹ค.
const HelloToken = artifacts.require("HelloToken"); // .soleํ™•์žฅ์ž ์ƒ๋žต

module.exports = function (deployer) {
  deployer.deploy(HelloToken); //๊ฐ€์ ธ์˜จ ํŒŒ์ผ์„ ๋ฐฐํฌํ•œ๋‹ค๋Š” ๋œป
};

// ๊ทธ๋ƒฅ ๊ธฐ๋ณธ์œผ๋กœ ์ƒ์„ฑ๋˜์–ด์žˆ๋Š” initial_migration.js ํŒŒ์ผ ๊ทธ๋Œ€๋กœ ๋ณต๋ถ™ํ•ด์„œ
// ์ด๋ฆ„๋งŒ ๋ฐ”๊ฟ”์ฃผ๋ฉด ๋จ

- ๋ฐฐํฌ ๋ช…๋ น์–ด ์ž…๋ ฅ

> truffle migration

 

๋ฐฐํฌํ•˜์ž

๊ฐ€์Šค๊ฐ€๊ฒฉ์ด๋ž‘ ๋ธ”๋ก ๊ฐฏ์ˆ˜ ์ด๋Ÿฐ๊ฑฐ ๋œจ๊ณ  ์ด๋”๋„ ๋น ์ ธ์žˆ์Œ. ๊ฐ€๋‚˜์‰ฌ ๋กœ๊ทธ์—๋„ ๋ณด๋ฉด ๋ฐฐํฌ๋œ๊ฑฐ ์•Œ์ˆ˜์žˆ์Œ

 

 

 

๐Ÿ”… TDD ์ž‘์—…๋ฐฉ์‹ ์‹ค์Šตํ•ด๋ณด๊ธฐ

*TDD๋ž€?

๊ธฐํš -> ํ…Œ์ŠคํŠธ์ฝ”๋“œ ๋งŒ๋“ค๊ธฐ-> ๊ฐœ๋ฐœ์ฝ”๋“œ ๋งŒ๋“ค๊ธฐ ์˜ ์ž‘์—…๋ฐฉ์‹์„ ๋งํ•œ๋‹ค

 

โ• test ์ฝ”๋“œ ์ž…๋ ฅํ•ด๋ณด๊ธฐ

ํ„ฐ๋ฏธ๋„๋กœ ํŒŒ์ผ ์ƒ์„ฑ! > truffle create test HelloToken 

( ๊ทผ๋ฐ ๋ณด๋‹ˆ๊น test ํด๋”์•ˆ์—๋Š” ํŒŒ์ผ๋ช…์— ๋Œ€๋ฌธ์ž๋ฅผ ์“ธ ์ˆ˜ ์—†๋‚˜๋ณด๋‹ค.. ์ƒ์„ฑ๋œ ํŒŒ์ผ๋ช… ๋ณด๋‹ˆ๊นŒ hello_token.js ๋ผ๊ณ  ๋˜์–ด์žˆ์Œ)

์ด๋Ÿฐ ํŒŒ์ผ์ด ์ƒ์„ฑ๋จ! ๊ธฐ๋ณธ ๊ตฌ์กฐ๊ฐ€ ์ƒ์„ฑ๋˜์–ด์žˆ๋Š” ์ƒํƒœ~

์œ„ ์ฝ”๋“œ๋ฅผ ์ฃผ์„ํ•˜๊ณ  ์ƒˆ๋กœ ์ž‘์„ฑํ•ด๋ณด์ž

 

 

hello_token.js ์ฝ”๋“œ์ž‘์„ฑ >

const HelloToken = artifacts.require("HelloToken");

contract("HelloToken",()=>{
  it("Hello function call",async ()=>{ // it: ์‹คํ–‰ํ•ด๋ณผ๊ฒŒ, " ":์ด๋Ÿฐ ๋ฉ”์„ธ์ง€๋ฅผ ๋„์šฐ๊ณ ,()=>: ์š”ํ•จ์ˆ˜๋ฅผ
  // ๊ทผ๋ฐ ์ปจํŠธ๋ž™ํŠธ๋ฅผ ๊ฐ€์ ธ์˜ฌ๋•Œ ๋Œ€๋ถ€๋ถ„ ๋‹ค ํ”„๋กœ๋ฏธ์Šค ๊ฐ์ฒด๋กœ ๋ฐ˜ํ™˜์„ ๋ฐ›์•˜์Œ. ์ฆ‰ ๋น„๋™๊ธฐ๋กœ ๋ฐ›์€๊ฒƒ์ž„
  // ๋”ฐ๋ผ์„œ async await ๊ตฌ๋ฌธ ์ถ”๊ฐ€
  
    // web3์—์„œ abi , bytecode ์–˜๋„ค๋กœ ์จ์ค€ ์ฝ”๋“œ๋ฅผ ํ•œ์ค„๋กœ ํ•จ์ถ•ํ•œ๊ฒƒ์ž„
    let instance = await HelloToken.deployed() // ๋ฐฐํฌ๋œ ์–˜ (HelloToken)๋ฅผ instance ๋ณ€์ˆ˜์— ๋‹ด๊ณ 
    let result = instance.hello() //์œ„ ์ฝ”๋“œ๋กœ ์ ‘๊ทผ ๊ฐ€๋Šฅํ•ด์กŒ์œผ๋‹ˆ
    							//instance์•ˆ์—์„œ ๋ฐ”๋กœ ํ•จ์ˆ˜๋ช…์„ ์ถœ๋ ฅํ•ด์„œ ์“ฐ๋ฉด ๋จ.
    console.log(`์ด ์•„์ด๋Š” ์ฝ˜์†”๋กœ๊ทธ`, result)
    return result;
    //์›๋ž˜๋Š” ๊ทธ๋ƒฅ result = true; ๋˜์ ธ์ฃผ๋ฉด ๋œ๋‹ค๊ณ  ํ•จ.
  })
})

 

 

 

โ• ์‹คํ–‰ ๋ช…๋ น์–ด

truffle test

 

 

 

 

 


 

- 4๊ต์‹œ -

๐Ÿ”… truffle ์—์„œ react ์‚ฌ์šฉํ•˜๊ธฐ

 

โ• ์ƒˆ๋กœ์šด ํด๋” ๋งŒ๋“ค๊ธฐ ( root ํด๋”๋ฅผ ๋นˆํด๋”๋กœ ๋งŒ๋“ ๋‹ค๋Š” ๋œป )

- ๋ช…๋ น์–ด ์‹คํ–‰

> truffle unbox react

 

- ํ•ด์ฃผ๋ฉด client ํด๋”๊ฐ€ ์ƒˆ๋กœ ์ƒ์„ฑ๋จ! 

  client : react ํ”„๋ ˆ์ž„์›Œํฌ๊ฐ€ ์„ค์น˜๋œ ๊ณต๊ฐ„์ž„. (create-react-app: cra ๊ฐ€ ์„ค์น˜๋œ ๊ฒƒ๊ณผ ๊ฐ™์€ ๊ณต๊ฐ„์œผ๋กœ ๋ณด์ž„)

  web3๋„ ๊ตฌํ˜„๋˜์–ด์žˆ๋Š” ํ˜•ํƒœ! ( ๊ทผ๋ฐ ์ด๊ฒŒ ๋‹ค class ํ˜•์œผ๋กœ ๊ตฌํ˜„๋˜์–ด์žˆ์–ด์„œ ํ•จ์ˆ˜ํ˜•์œผ๋กœ ๋ฐ”๊ฟ”์„œ ์‚ฌ์šฉํ• ๊ฒƒ์ž„ )

 

โ• command

# Commands:

  Compile:              truffle compile
  Migrate:              truffle migrate
  Test contracts:       truffle test
  Test dapp:            cd client && npm test
  Run dev server:       cd client && npm run start
  Build for production: cd client && npm run build

 

โ• ์‹คํ–‰ํ•ด๋ณด๊ธฐ

> npm  run start

error๊ฐ€ ๋ฐœ์ƒํ• ๊ฒƒ์ž„!

Module not found: Can't resolve './contracts/SimpleStorage.json' 
in 'C:\Users\82102\OneDrive\1013_2\client\src

why? 

-> ํ˜„์žฌ ์ด ํŒŒ์ผ์—์„œ๋Š” ์†”๋ฆฌ๋””ํ‹ฐ ์ฝ”๋“œ ์ปดํŒŒ์ผ๊ณผ ๋ฐฐํฌ๊ฐ€ ์ง„ํ–‰๋˜์ง€ ์•Š์€ ์ƒํƒœ์ด๊ธฐ ๋•Œ๋ฌธ์ž„.

 

 

โ• ์„ค์ •ํ•ด์ฃผ๊ธฐ

 

1. ์–ด๋–ค ๋ฐ๋ชฌ์„ ๋Œ๋ฆด๊ฒƒ์ธ๊ฐ€? 

- ๋‚ด๊ฐ€ ์–ด๋Š ๊ณณ์—๋‹ค๊ฐ€ ์š”์ฒญ์„ ๋ณด๋‚ผ๊ฒƒ์ธ์ง€๋ฅผ ์ •ํ•ด์ค˜์•ผ ํ•จ

- truffle-config.json ์ฝ”๋“œ ์ˆ˜์ •

networks: {
    development: {
      host: "127.0.0.1",     // Localhost (default: none)
      port: 7545,            // Standard Ethereum port (default: none)
      network_id: "*",       // Any network (default: none)
     },
    develop: {
      port: 8545
    }
  }

 

 

 

2. solidity ํŒŒ์ผ ์ปดํŒŒ์ผ ํ•˜๊ธฐ

> truffle compile

(ํŒŒ์ผ ํ•˜๋‚˜๋“  ๋‘๊ฐœ๋“  ์„ธ๊ฐœ๋“  ํ•œ๋ฒˆ์— ๋‹ค ์ปดํŒŒ์ผ ํ•ด์คŒ)

์›๋ž˜๋Š” ์ปดํŒŒ์ผ ํ•˜๋ฉด build ๋ผ๋Š” ํด๋”๊ฐ€ ์ƒ๊ฒผ์—ˆ์Œ.

๊ทธ๋Ÿฐ๋ฐ ์—ฌ๊ธฐ์„œ๋Š” ์ปดํŒŒ์ผํ•ด๋„ build ํด๋”๊ฐ€ ์ƒ๊ธฐ์ง€ ์•Š๊ณ  

client > src > contracts ํด๋”๊ฐ€ ์ƒ๊ฒจ๋‚จ~ 

๊ฐ™์€๊ฑด๋ฐ ๊ทธ๋ƒฅ ๋””๋ ‰ํ† ๋ฆฌ๊ฐ€ ๋ฐ”๋€๊ฒƒ์ž„

 

 

 

3. ๋ฐ๋ชฌ์—๋‹ค๊ฐ€ ๋ฐฐํฌํ•˜๊ธฐ

> truffle migrate

๋ฐฐํฌ๊ฐ€ ์ง„ํ–‰๋˜๋ฉด ์ด๋”๊ฐ€ ์กฐ๊ธˆ ๋น ์งˆ๊ฒƒ์ž„ -> ์ด ๋ถ€๋ถ„ ํ™•์ธํ•˜๊ธฐ

 

 

 

4. ๋ฆฌ์•กํŠธ ์‹คํ–‰

> cd client && npm run start

 

---------------------------------

 

*** ํ™”๋ฉด์— the stored value is : 5 ๊ฐ€ ๋– ์•ผํ•จ 

 

 

 

 

 

** test ์ฝ”๋“œ ์‹คํ–‰ ๋ฐ˜๋ณต ์—ฐ์Šต ํ•ด๋ณผ๊ฒƒ **

๋ฐ˜์‘ํ˜•