๐Ÿค์Šค๋งˆํŠธ ์ปจํŠธ๋ž™ํŠธ

dojun527ยท2020๋…„ 12์›” 3์ผ
1

๋ธ”๋ก์ฒด์ธ

๋ชฉ๋ก ๋ณด๊ธฐ
9/13

์ด๋”๋ฆฌ์›€ ๋ธ”๋ก์ฒด์ธ์˜ ํ•ต์‹ฌ ๊ธฐ์ˆ ์ธ ์Šค๋งˆํŠธ ์ปจํŠธ๋ž™ํŠธ(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์ž ์ค‘๊ฐœ์ž์˜ ์ง„ํ–‰์ด ํ•„์š” ์—†์œผ๋ฏ€๋กœ ๊ธฐ๋ณธ์ ์œผ๋กœ ๊ณ„์•ฝ์— ๋Œ€ํ•œ ์™„์ „ํ•œ ํ†ต์ œ๊ถŒ์„ ๋ถ€์—ฌํ•œ๋‹ค.

  • ์‹ ๋ขฐ - ๋ฌธ์„œ๋Š” ์•”ํ˜ธํ™”๋˜์–ด ๋ณด์•ˆ ์œ ์ง€๊ฐ€ ์ด๋ฃจ์–ด์ง€๋Š” ๊ณต์œ  ์›์žฅ์— ์•ˆ์ „ํ•˜๊ฒŒ ์ €์žฅ๋˜๊ธฐ ๋•Œ๋ฌธ์— ๋ฌธ์„œ๋ฅผ ํ›”์น˜๊ฑฐ๋‚˜ ์žƒ์–ด๋ฒ„๋ฆด ์ˆ˜ ์—†๋‹ค.

  • ๋น„์šฉ ์ ˆ๊ฐ - ์Šค๋งˆํŠธ ์ปจํŠธ๋ž™ํŠธ๋กœ ์ค‘๊ฐœ์ธ(๋ถ€๋™์‚ฐ ์ค‘๊ฐœ์—…์ž, ์กฐ์–ธ์ž ๋“ฑ)์ด ํ•„์š” ์—†์–ด์ ธ์„œ ์ˆ˜์ˆ˜๋ฃŒ์™€ ๊ฐ™์€ ๋น„์šฉ์„ ์ ˆ๊ฐํ•  ์ˆ˜ ์žˆ๋‹ค.

  • ์•ˆ์ „์„ฑ - ์˜ฌ๋ฐ”๋ฅด๊ฒŒ ๊ตฌํ˜„๋œ ์Šค๋งˆํŠธ ์ปจํŠธ๋ž™ํŠธ๋Š” ํ•ดํ‚น๋˜๊ธฐ ์–ด๋ ต๋‹ค. ๋˜ํ•œ ์Šค๋งˆํŠธ ์ปจํŠธ๋ž™ํŠธ๋ฅผ ์œ„ํ•œ ํ™˜๊ฒฝ์€ ๋ณต์žกํ•œ ์•”ํ˜ธํ™”๋กœ ๋ณดํ˜ธ๋˜๋ฏ€๋กœ ์‚ฌ์šฉ์ž์˜ ๋ฌธ์„œ๋ฅผ ์•ˆ์ „ํ•˜๊ฒŒ ๋ณดํ˜ธํ•œ๋‹ค.


๋‹จ์ 

  • ์ดˆ๊ธฐ ๊ณ„์•ฝ ์„ค์ •์ด ์ž˜๋ชป๋˜๋ฉด ๋ฌธ์ œ๊ฐ€ ๋ฐœ์ƒํ•  ์ˆ˜ ์žˆ๋‹ค.

  • ํ”„๋กœ๊ทธ๋ž˜๋ฐ ์ฝ”๋“œ๋กœ ๋™์ž‘ํ•˜๊ธฐ์— ์‹œ์Šคํ…œ์˜ ๊ฒฐํ•จ์— ๋”ฐ๋ผ ๋ฌธ์ œ๊ฐ€ ๋ฐœ์ƒํ•  ์ˆ˜ ์žˆ๋‹ค.

  • ์กฐ๊ฑด์ด ๋งŒ์กฑํ•˜๋Š” ๊ธฐ์ค€๊ณผ ๊ทผ๊ฑฐ๊ฐ€ ๋ช…ํ™•ํ•˜์ง€ ์•Š์„ ๊ฒฝ์šฐ๊ฐ€ ์žˆ๋‹ค.

profile
Better late than never

0๊ฐœ์˜ ๋Œ“๊ธ€