Mist์์ ๋ฐฐํฌํ๊ณ Mist์ ๊ฒ์ค ์ฝ์์์ ์๋์ํค๊ธฐ
์ ๋ฒ ํฌ์คํ ์์ ๋ค๋ฃฌ 1ํธ์ ์ด์ ์ค์ ์ปดํ์ผ๊ณผ ๋ฐฐํฌ๋ฅผ ํด๋ณด๋ 2ํธ
์ค์ตํ๊ฒฝ : Mist (private-net) & geth console
๋ฏธ์คํธ๋ฅผ ์ฒ์ ๋ค๋ฃฌ๋ค๋ฉด ์ค์ตํ๊ฒฝ์ ๊ตฌ์ถํ๋ ๊ฒ์ด ์ด๋ ค์ธ์์๋ค. ์๋ ๋งํฌ์ ์ด๋๋ฆฌ์ ๊ฐ๋ฐํ๊ฒฝ ๊ตฌ์ถ์ ๋ํ ์ค๋ช
์ด ์ ๋์์์ผ๋ ์ฐธ๊ณ !
https://steemit.com/ethereum/@dlgusdn616/ethereum01-01
์ก์ ์ฒ(from)โโโโ์ค๋ ๊ณ์ โ์ ํ์ธํ๊ณ ์๋จ์ ํ๋ฉด ์ฒ๋ผ ์์ค์ฝ๋๋ฅผ ๋ฃ๋ ๋ถ๋ถ์ 1ํธ์์์ SmartController.sol์ ๋ฃ๋๋ค. ์ฌ์ง ์ค๋ฅธ์ชฝ์ ๋ณด์ด๋ ์ปจํธ๋ํธ์ ์์ฑ์, IoT์ฅ์น์ ์ฃผ์๋ฅผ ์์ฑ์์ ๋งค๊ฐ๋ณ์๋ก ๊ฐ์ผ๋ฏ๋ก IoT ๋๋ฐ์ด์ค ๊ณ์ ์ ํด๋น๋๋ ์ฃผ์ ๊ฐ์ ๋ฃ๋๋ค.
์ฝ๋์ ์ฃผ์๋ฅผ ์ ๊ธฐ์
ํ๊ณ ๋๋ฉด ํ๋จ์ ์ค์น(deploy)๋ฅผ ํ๋ฉด ์ ์ฌ์ง๊ณผ ๊ฐ์ ํ๋ฉด์ด ๋์ค๊ณ ํด๋น ๊ณ์ (์ค๋๊ณ์ )์ ๋น๋ฐ๋ฒํธ๋ฅผ ๊ธฐ์
ํ๊ณ ํธ๋์ญ์
์ ๋ฐ์์ํจ๋ค. ์ด๋, private-net ํ๊ฒฝ๋ด์์ ์ฑ๊ตด์ ์งํํ๊ณ ์์ด์ผ ๋ธ๋ก์ด ์์ฑ๋๊ณ ์ค๋งํธ ์ปจํธ๋ํธ๊ฐ ์๊ธฐ๋ ์๋ ์ฌ์ง ์ฒ๋ผ ์ฝ์์ฐฝ์์ ์ฑ๊ตด๋ช
๋ น์ผ๋ก ์ฑ๊ตด์ ํ์!
์ค๋ ๊ณ์ ์ ๋ฐฉ๊ธ ์์ฑํ ์ปจํธ๋ํธ๊ฐ ํ์๋ ํ๋ฉด (red box click!)
์ค๋ฅธ์ชฝ ํ๋จ์ ์์นํ โ์ธํฐํ์ด์ค ๋ณด๊ธฐโ๋ฅผ ํด๋ฆญํ๋ฉด ์ปจํธ๋ํธ์ ABI๊ฐ ๋์ค๋๋ฐ ๋ณต์ฌํด๋์!
๊ฒ์ค ์ฝ์์์ ๋ช
๋ น์ ์คํ ํ๋ ค๋ฉด ์์ฑ๋ ๊ณ์ฝ์ ์ ๋ณด๊ฐ ํ์ํ๋ค. ์ฝ์ ์ฐฝ์์ ๊ณ์ฝ์ ์ฌ์ฉํ๊ธฐ ์ํด ์๋ ์ฌ์ง ์ฒ๋ผ ๊ณ์ฝ์ ์ ์ ํ๋ค.
var name = eth.contract(ABI).at(โ์์ฑ๋ ์ปจํธ๋ํธ์ ์ฃผ์โ)
๊ณ์ฝ์ ์ ์ํ๊ณ undefined๊ฐ ๋์ค๋ฉด ๋ณ์ ๋ช
์ ์
๋ ฅํ์ฌ ์ ์์ฑ ๋์๋์ง ํ์ธํด๋ณด์!
์ฌ๊ธฐ๊น์ง, ์ค๋งํธ์ปจํธ๋ํธ๋ฅผ ๋ฐฐํฌํ๊ณ ๊ฒ์ค ์ฝ์์์ ์ฌ์ฉํ๊ธฐ ์ํ ์ ํ๊ณผ์ ์ ๋ชจ๋ ๋๋๋ค. ์ด์ , ๊ฒ์ค ์ฝ์์์ ์ง์ ํธ๋์ญ์ ์ ๋ฐ์์์ผ๋ณด๊ณ ์๋ํ๋ ์ค๋งํธ ์ปจํธ๋ํธ๋ฅผ ํ์ธํด๋ณด์!
๋จผ์ , ํด๋ผ์ด์ธํธ ๊ณ์ข์ ๋น๋ฐ๋ฒํธ๋ฅผ ํ์ด์ค๋ค! ํ์์ ๊ฒฝ์ฐ ํด๋ผ์ด์ธํธ์ ํด๋นํ๋ ๊ณ์ข๊ฐ eth.accounts[2]์์ง๋ง, ๋ณธ์ธ ํ๊ฒฝ์ ๋ง๊ฒ []์์ ์๋ ์ซ์๋ฅผ ์กฐ์ ํ์!
sc.payToController.sendTransaction({from:eth.accounts[2], gas:3000000, value: web3.toWei(1, โetherโ)})
์ ๋ช ๋ น์ด๋ฅผ ํตํด ํด๋ผ์ด์ธํธ๊ฐ payToControllerํจ์๋ฅผ ํธ์ถํ์ฌ ํด๋ผ์ด์ธํธ ๊ณ์ข๋ก ๋ถํฐ 1์ด๋๋ฅผ ์ก๊ธํ๋ค.
๊ฒ์ค ์ฝ์์์ ์คํํ ๋ช
๋ น์ด๋ Mist ๋ด๋ถ์ GUIํ๊ฒฝ์์๋ ์์๊ฐ์ด ์คํ๊ฐ๋ฅํ๋ค. ์ ์ฌ์ง์ ๋ช
๋ น์ด๋ก pay๋ฅผ ํ๊ณ GUI๋ก pay๋ฅผ ํ์ฌ ์ด 2ETH๊ฐ ๋ค์ด์์๊ณ , numPaid๋ 2๊ฐ ๋์๋ค.
์ก๊ธ ํ, ์ด์ฉ ๋ฑ๋ก ํํฉ์ ํ์ธ ํ๊ธฐ ์ํด์ controllers ๋งคํ์ ํค 0์ ๋ฑ๋ก๋ ์ ๋ณด๋ฅผ ํ์ธ ํ ์ ์๋ค. true ์ํ์ผ ๋, ์ด์ฉ์๋ IoT์ฅ๋น๋ฅผ ์ฌ์ฉ ํ ์ ์๋ค.
๋ง์ฝ์, ํด๋ผ์ด์ธํธ๊ฐ ์ด๋๋ฅผ ๋ ์ง๋ถํ๋ฉด ์ปจํธ๋กค๋ฌ์ ์ธ๋ฑ์ค ๋ฒํธ๊ฐ ์ฌ๋ผ๊ฐ๊ณ sc.controllers(1)๋ก ์กฐํ๊ฐ ๊ฐ๋ฅํ๋ค.
sc.numPaid()
ํ์ฌ๊น์ง, ์ฝ์์์ 1๋ฒ + GUI์์ 1๋ฒ ์งํํ๋ค.
์ด์ , IoT ๋๋ฐ์ด์ค์์ updateStatusํจ์๋ฅผ ํธ์ถ ํ์ฌ ์ํ๋ฅผ ๋ณ๊ฒฝํด๋ณด์!
sc.updateStatus.sendTransaction(0, {from:eth.accounts[1], gas: 3000000});
์ ๋ช
๋ น์ด๋ก ์ํ๋ฅผ ๋ณ๊ฒฝํ๊ณ ๋ค์ ์ธ๋ฑ์ค0์ ์ปจํธ๋กค๋ฌ๋ฅผ ์กฐํํ๋ฉด false๊ฐ์ผ๋ก ๋ณ๊ฒฝ๋์๋ค. ๋ง์ฝ ๋๋ฒ์งธ ๋ง๋ ์ปจํธ๋กค๋ฌ์ ์ํ๋ฅผ ๋ณ๊ฒฝํ๊ณ ์ถ๋ค๋ฉด, 0๋์ 1์ ๋ฃ์ด์ฃผ์!
์ด๋๋ฅผ ์๋ฉํ ๋๋ ์ค๋๊ณ์ ์์ ์ํํด์ผ ํ๋ฏ๋ก accounts[0]์ด ๋๋ค. ์ฐจ๋ก๋ก ๊ณ์ ์ lock์ ํ๊ณ withdrawFundsํจ์๋ฅผ ํธ์ถํ๋ฉด ์๋ ์ฌ์ง๊ณผ ๊ฐ์ด GUIํ๋ฉด์์๋ ์ฝ์์ฐฝ์์๋ ์์์๋ CA์ฃผ์์๋ ๋จ์ ์๋ ์ด๋๊ฐ ์๋ค.
๋! ์ง์ ๋ช ๋ น์ด๋ฅผ ์ณ๋ณด๋ฉด์ ์ค๋/ํด๋ผ์ด์ธํธ/IoT์ฅ์น ๊ฐ์ EOA์ฃผ์ ๋ฐ CA์ฃผ์๋ค ์ฌ์ด์ ์ํธ๊ด๊ณ๋ฅผ ์๊ฐํด๋ณด๋ฉด์ ์ค์ตํด๋ณด์!!