์ด๋๋ฆฌ์ ๋ธ๋ก์ฒด์ธ์ ํต์ฌ ๊ธฐ์ ์ธ ์ค๋งํธ ์ปจํธ๋ํธ(Smart Contract)์ ๋ํด์ ์์๋ณด์
์ค๋งํธ ์ปจํธ๋ํธ๋ ๊ณ์ฝ์ ๋ด์ฉ๊ณผ ์คํ ์กฐ๊ฑด์ ์ปดํจํฐ ์ฝ๋๋ฅผ ํตํด ์ฌ์ ์ ์ค์ ํ ํ ํด๋น ์กฐ๊ฑด์ด ์ถฉ์กฑ๋๋ฉด ๋ธ๋ก์ฒด์ธ ๋คํธ์ํฌ์์ ์๋์ ์ผ๋ก ๊ณ์ฝ์ ์งํํ๋ ๊ธฐ๋ฅ์ ์๋ฏธํ๋ค.
์ด๋ ์จ๋ผ์ธ ์์์ ๊ฑฐ๋ ์ค ์ค๊ฐ์ ์์ด๋ ์ปดํจํฐ ์ฝ๋๋ง์ผ๋ก ๋ฒ์ ํจ๋ ฅ์ ์ง๋ ๊ณ์ฝ ์งํ์ด ๊ฐ๋ฅํ๋ค๋ ์ด์ผ๊ธฐ์ด๋ค.
์ค๋งํธ ์ปจํธ๋ํธ๋ ํ์ฌ ์ด๋๋ฆฌ์ ๋ฟ๋ง ์๋๋ผ ๋ง์ ๋ธ๋ก์ฒด์ธ ํ๋ซํผ ์์์ ๊ตฌํ๋์ด ์๋ค.
์ค๋งํธ ์ปจํธ๋ํธ ๋์์ ์ํฉ ์์๋ก ์์๋ณธ๋ค.
A์ B๊ฐ ์๋์ฐจ ๊ณ์ฝ์ ํ๋ ์ํฉ์ ๊ฐ์ ํด๋ณธ๋ค. (A๊ฐ B๋ก๋ถํฐ ์๋์ฐจ ๊ตฌ๋งค)
B๊ฐ A์๊ฒ ๊ณ์ฝ๊ธ์ ์๊ตฌํ๋ ๋ฉ์ธ์ง๋ฅผ ๋ธ๋ก์ ํฌํจํ๋ค.
A๊ฐ ๋์๋ฅผ ํ๋ค๋ฉด, A๋ ์์ ์ด ๊ฐ์ง 1BTC๋ณด๋ด๋ฉด์ ์ค๊ณ ์ฐจ๊ฐ ์๋๋ผ๋ ํ์ง ๋ณด์ฆ์ ์๊ตฌํ๋ ๊ณ์ฝ ๋ด์ฉ์ ๋ค์ ๋ธ๋ก์ ํฌํจ์์ผ ๋ณด๋ธ๋ค.
๋นํธ์ฝ์ธ์ ์์ง์๋ง์ ๋ด๋ ๋นํธ์ฝ์ธ์ ํธ๋์ญ์ ์ ์๋ฏธ์๋ ๋ฌ๋ฆฌ ์ด๋๋ฆฌ์์์์ ํธ๋์ญ์ ์ ํํ์ ์ ์ก๊ณผ ๋๋ถ์ด ๊ณ์ฝ ๋ด์ฉ์ ๋ด์ ์ ์๋ค. ์์ ๊ฒฝ์ฐ, ๊ณ์ฝ๊ธ์ ์๊ตฌํ๊ฑฐ๋ ๊ณ์ฝ๊ธ์ ์ฃผ๋ฉด ๋ค๋ฅธ ์ฌ๋์๊ฒ ์ฐจ๋ฅผ ํ์ง ๋ชปํ๋ค ๋ฑ์ ๋ด์ฉ์ด๋ค.
๋ง์ฝ B๊ฐ A๊ฐ ๋ณด๋ธ ๊ณ์ฝ ๋ด์ฉ์ ๋์๋ฅผ ํ๋ค๋ฉด B๋ ํ์ง ๋ณด์ฆ์๋ฅผ ๋ณด๋ด๋ ํธ๋์ญ์ ์ ๋ค์ ๋ธ๋ก์ ํฌํจ์ํจ๋ค.
๊ทธ๋ฆฌ๊ณ A๊ฐ ๋ด์ฉ์ ๋ง์กฑํ๋ค๋ฉด ๋๋จธ์ง ์๊ธ 4BTC๋ฅผ ๋ณด๋ด๋ ํธ๋์ญ์ ์ ๋ง๋ค์ด ๋ธ๋ก์ ๋ด๋๋ค.
๊ทธ๋ฌ๋ฉด B๊ฐ 4BTC๋ฅผ ๋ฐ๊ณ A๋ ์๋์ฐจ๋ฅผ ๋ฐ์ ๊ณ์ฝ์ด ๋๋๋ค.
๋๋ถ๋ถ์ ์ค๋งํธ ์ปจํธ๋ํธ๋ ํ๋ก๊ทธ๋๋ฐ ์ธ์ด๋ฅผ ํ ๋๋ก ๋ง๋ค์ด ์ง๋ค. ์ด๋๋ฆฌ์์์ ์ค๋งํธ ์ปจํธ๋ํธ๋ Solidity, Vvper์ ๊ฐ์ ์ค๋งํธ ์ปจํธ๋ํธ๋ฅผ ๋ง๋๋ ์ ์ฉ ์ธ์ด๋ก ๋ ผ๋ฆฌ์ ์ธ ๊ณ์ฝ์ ์๋์ ๋ฐ์ดํธ ์ฝ๋๋ก ๋ณํํ์ฌ ๋ธ๋ก์ฒด์ธ์ ๋ฐฐํฌํ๊ฒ ๋๋ค.
์ค๋งํธ ์ปจํธ๋ํธ ์ฝ๋๋ฅผ ํตํด ๋์์ ์ดํด๋ณด์
(์ฝ๋ IDE๋ ์ฌ๊ธฐ์์)
์ฝ๋๋ฅผ ๊ธฐ๋ฅ๋ณ๋ก ๋ถ์ํด๋ณธ๋ค.
progma solidity ^0.4.8; //๋ฒ์ ํ๋ผ๊ทธ๋ง
์๋ฆฌ๋ํฐ ์ปดํ์ผ๋ฌ ํธํ์ฑ์ ์ํด pragma๋ผ๋ ์ง์์ด๋ฅผ ์ฌ์ฉํ์ฌ ์ฝ๋๋ฅผ ์ปดํ์ผํ๊ธฐ ์ํ ์ปดํ์ผ๋ฌ ๋ฒ์ ์ ์ ํํ๊ณ ์๋ค.
์ ์ฝ๋์์๋ ์๋ฆฌ๋ํฐ 0.4.8๋ฒ์ ์ด์์ ์ปดํ์ผ๋ฌ๊ฐ ํ์ํ๋ค๋ ์๋ฏธ์ด๋ค.
(0.4.8๋ฒ์ ์ ๊ฒฝ์ฐ 0.5.0์ด์์ ์ปดํ์ผ๋ฌ๋ ํธํ๋์ง ์๋๋ค.)
//๊ณ์ฝ ์ ์ธ
contract HelloWorld { }
์ด ๋ถ๋ถ์ ์ค๋งํธ ์ปจํธ๋ํธ ๊ณ์ฝ ์ ์ ๋ถ๋ถ์ด๋ค. ์ด ์ค๋งํธ ์ปจํธ๋ํธ์ ์ด๋ฆ์ HelloWorld์ด๋ค.
C++์ด๋ Java์ ํด๋์ค ๊ฐ๋ ๊ณผ ๋น์ทํ๊ฒ ํ๋์ ๋ ๋ฆฝ์ ์ธ ๊ฐ์ฒด๋ผ๊ณ ์๊ฐํ๋ค.
//์ํ ๋ณ์ ์ ์ธ
string public greeting;
์์์ ๋ง๋ HelloWorld์ ์ค๋งํธ ์ปจํธ๋ํธ์์ ๋ฌธ์์ด ๋ณ์ greeting์ ์ ์ธํ๋ค.
์๋ฆฌ๋ํฐ์ ํ๊ฐ์ง ํน์ดํ ์ ์ ๋ณ์์ ์ ๊ทผ๋(visibility)๋ฅผ ๋ํ๋ด๋ public์ด ๋ณ์ ํ์ ๊ณผ ๋ณ์ ์ด๋ฆ ์ฌ์ด์ ๋์ด๋ ์ ์ด๋ค.
public์ผ๋ก ์ ์ธ๋์๊ธฐ ๋๋ฌธ์, ๋๊ตฌ๋ ํด๋น ๋ณ์์ ์ ๊ทผํ ์ ์๋ค.
public ๋ณ์๊ฐ ์ ์ธ๋๋ฉด ๋ณ์์ ์ ๊ทผํ๊ธฐ ์ํ ๋ณ๋์ ํจ์(๋ํดํธ ํจ์)๊ฐ ์๋์ผ๋ก ์์ฑ๋๋ค.
๋ณ์๊ฐ public์ผ๋ก ์ ์ธ๋์ด ์์ด ๋๊ตฌ๋ ์ ๊ทผ ๊ฐ๋ฅํ์ง๋ง, ๋ณ์์ ์ง์ ์ ์ธ ๊ฐ ๋ณ๊ฒฝ์ ๋ถ๊ฐ๋ฅํ๋ค. ๋์ ๋ณ๋์ ํจ์๋ฅผ ์ด์ฉํ๋ฉด ๋ณ์ ๊ฐ์ ๋ณ๊ฒฝํ ์ ์๊ฒ ๋๋ค.
//์์ฑ์
function HelloWorld(string _greeting) public {
greeting = _greeting;
}
HelloWorld ํจ์๋ ์ค๋งํธ ์ปจํธ๋ํธ ์์ฑ์ ํจ์์ด๋ค. ์์ฑ์๋ ์ค๋งํธ ์ปจํธ๋ํธ๊ฐ ์ต์ด ๋ฐฐํฌ๋ ๋๋ง ์คํ๋๋ค. ์์ฑ์ ํจ์๋ ๋ณ๋๋ก ์ ์ง ์์๋ ์๋์ ์ผ๋ก ์์ฑ๋๋ ๋ํดํธ ํจ์์ด๋ค.
์ ๊ฒฝ์ฐ๋ ์์ฑ์์ ์ธ์(argument)๋ฅผ ์ ๋ ฅ๋ฐ๋๋ก ํ ๊ฒ์ด๋ค. ์ธ์๋ก ์ ๋ ฅ๋ฐ์ ๋ฌธ์์ด์ ์ค๋งํธ ์ปจํธ๋ํธ์ ๋ณ์์ ๋์ ํ๋ ๊ฐ๋จํ ์ฝ๋์ด๋ค.
function say() public constant returns (string) {
return greeting;
}
์ ํจ์๋ ํธ์ถ๋๋ฉด ๋จ์ํ ์ค๋งํธ ์ปจํธ๋ํธ ๋ณ์ ๊ฐ์ ๋ฆฌํดํ๋ ๊ธฐ๋ฅ์ ํ๋ค. ํจ์ ์ ์ธ๋ถ๋ฅผ ๋ณด๋ฉด public์ด ๋ถ์ด ์์ด์ ์ ๊ทผ๋๋ฅผ ๋ช ๊ธฐํ๊ณ , ๊ทธ ๋ค์์ผ๋ก constant๋ผ๋ ์ง์์ด๊ฐ ๋ํ๋๋ค. ์ด๊ฒ์ ํจ์ ๋ด๋ถ์์ ์ํ๋ณ์ ๊ฐ์ ๋ณ๊ฒฝ์์ง ์๊ฒ ๋ค๋ ์๋ฏธ์ด๋ค. ํจ์๊ฐ constant๋ก ์ ์ธ๋๋ฉด ํด๋น ํจ์๋ฅผ ํธ์ถํ ๋๋ ํธ๋์ญ์ ์ด ๋ฐ์ํ์ง ์๋๋ค.
์์ setGreeting ํจ์์ ๊ฒฝ์ฐ๋ constant๋ก ์ ์ธ๋์ด ์์ง ์์ผ๋ฏ๋ก ํธ์ถ๋๋ฉด ํธ๋์ญ์ ์ด ๋ฐ์ํ๋ค.
๋ง์ง๋ง ์ง์์ด๋ก returns (string)์ด๋ผ๊ณ ์ ์ธ๋์ด ์๋ค. ์ด๊ฒ์ ๋ฆฌํดํ๋ ๋ด์ฉ์ ๋ช ์ํ ๊ฒ์ด๋ค. ์ฌ๊ธฐ์๋ ์ํ ๋ณ์์ธ greeting์ ๋ฌธ์์ด ๋ฐ์ดํฐ๋ฅผ ๋ฆฌํดํ๋ค.
์์จ์ฑ - ์ค๋งํธ ์ปจํธ๋ํธ๋ ์ 3์ ์ค๊ฐ์์ ์งํ์ด ํ์ ์์ผ๋ฏ๋ก ๊ธฐ๋ณธ์ ์ผ๋ก ๊ณ์ฝ์ ๋ํ ์์ ํ ํต์ ๊ถ์ ๋ถ์ฌํ๋ค.
์ ๋ขฐ - ๋ฌธ์๋ ์ํธํ๋์ด ๋ณด์ ์ ์ง๊ฐ ์ด๋ฃจ์ด์ง๋ ๊ณต์ ์์ฅ์ ์์ ํ๊ฒ ์ ์ฅ๋๊ธฐ ๋๋ฌธ์ ๋ฌธ์๋ฅผ ํ์น๊ฑฐ๋ ์์ด๋ฒ๋ฆด ์ ์๋ค.
๋น์ฉ ์ ๊ฐ - ์ค๋งํธ ์ปจํธ๋ํธ๋ก ์ค๊ฐ์ธ(๋ถ๋์ฐ ์ค๊ฐ์ ์, ์กฐ์ธ์ ๋ฑ)์ด ํ์ ์์ด์ ธ์ ์์๋ฃ์ ๊ฐ์ ๋น์ฉ์ ์ ๊ฐํ ์ ์๋ค.
์์ ์ฑ - ์ฌ๋ฐ๋ฅด๊ฒ ๊ตฌํ๋ ์ค๋งํธ ์ปจํธ๋ํธ๋ ํดํน๋๊ธฐ ์ด๋ ต๋ค. ๋ํ ์ค๋งํธ ์ปจํธ๋ํธ๋ฅผ ์ํ ํ๊ฒฝ์ ๋ณต์กํ ์ํธํ๋ก ๋ณดํธ๋๋ฏ๋ก ์ฌ์ฉ์์ ๋ฌธ์๋ฅผ ์์ ํ๊ฒ ๋ณดํธํ๋ค.
์ด๊ธฐ ๊ณ์ฝ ์ค์ ์ด ์๋ชป๋๋ฉด ๋ฌธ์ ๊ฐ ๋ฐ์ํ ์ ์๋ค.
ํ๋ก๊ทธ๋๋ฐ ์ฝ๋๋ก ๋์ํ๊ธฐ์ ์์คํ ์ ๊ฒฐํจ์ ๋ฐ๋ผ ๋ฌธ์ ๊ฐ ๋ฐ์ํ ์ ์๋ค.
์กฐ๊ฑด์ด ๋ง์กฑํ๋ ๊ธฐ์ค๊ณผ ๊ทผ๊ฑฐ๊ฐ ๋ช ํํ์ง ์์ ๊ฒฝ์ฐ๊ฐ ์๋ค.
๋ธ๋ก์ฒด์ธ 12๊ฐ ๊ฒ์๊ธ ํ๋์ฉ ๋ค ์ดํด๋ณด๊ณ ์์ต๋๋ค.
์ข์์๊ฐ ์์ง ๋ง์ด ์๋๊ฑธ๋ณด๋
์ฌ์ ํ ์ด๊ธฐํฌ์ํ๊ธฐ ์ข์ ์์ ์ด ๋ง๋๊ฑฐ๊ฐ๋ค์ใ ใ