FB Pixel
ํ”„๋กœ๊ทธ๋ž˜๋ฐ์ด ๊ฐ€๋Šฅํ•œ ๋ธ”๋ก์ฒด์ธ์— ๋Œ€ํ•œ ์ดˆ๋ณด์ž ๊ฐ€์ด๋“œ

์ด๋”๋ฆฌ์›€์€ ํ”„๋กœ๊ทธ๋ž˜๋ฐ์ด ๊ฐ€๋Šฅํ•œ ์ƒˆ๋กœ์šด ํ†ตํ™”์ž…๋‹ˆ๋‹ค.

์ด ๊ธ€์„ ๋‹ค ์ฝ์œผ์‹œ๋ฉด, Remix-Solidity IDE๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๊ฐ„๋‹จํ•œ ์ด๋”๋ฆฌ์›€ ์Šค๋งˆํŠธ ๊ณ„์•ฝ์„ ์ž‘์„ฑํ•˜๋Š” ๋ฐฉ๋ฒ•์„ ์•Œ๊ฒŒ ๋  ๊ฒƒ์ž…๋‹ˆ๋‹ค.

์ด๋”๋ฆฌ์›€์ด๋ž€ ๋ฌด์—‡์ธ๊ฐ€?

2009๋…„, ๋ˆ„๊ตฐ๊ฐ€ ์‚ฌํ† ์‹œ ๋‚˜์นด๋ชจํ† ๋ผ๋Š” ์˜ˆ๋ช…์œผ๋กœ ๋น„ํŠธ์ฝ”์ธ์˜ ๊ฐœ๋…์„ ๋„์ž…ํ–ˆ์Šต๋‹ˆ๋‹ค. ๋น„ํŠธ์ฝ”์ธ์€ ํ˜„์žฌ๊นŒ์ง€ ๊ฐ€์žฅ ์„ฑ๊ณต์ ์ธ ๋””์ง€ํ„ธ ํ†ตํ™”์ž…๋‹ˆ๋‹ค. ๋น„ํŠธ์ฝ”์ธ์€ ๋ธ”๋ก์ฒด์ธ์— ๋ชจ๋“  ๊ฑฐ๋ž˜๊ฐ€ ๋ณด๊ด€๋˜๋Š” ์™„๋ฒฝํ•˜๊ฒŒ ํƒˆ์ค‘์•™ํ™”๋œ ํ™”ํ ์‹œ์Šคํ…œ์˜ ๊ฐœ๋…์„ ๋Œ€์ค‘ํ™”์‹œ์ผฐ์Šต๋‹ˆ๋‹ค. ์ด๋”๋ฆฌ์›€์€ ํƒˆ์ค‘์•™์‹ ๊ฑฐ๋ž˜์˜ ํž˜๊ณผ ํŠœ๋ง ์™„์ „(turing-complete) ํ”„๋กœ๊ทธ๋ž˜๋ฐ ์–ธ์–ด(๋ณธ์งˆ์ ์œผ๋กœ ๋ชจ๋“ ํ•ฉ๋ฆฌ์  ๊ณ„์‚ฐ ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•˜๋Š” ํ”„๋กœ๊ทธ๋žจ์„ ์ž‘์„ฑํ•  ์ˆ˜ ์žˆ์Œ์„ ์˜๋ฏธ)๋ฅผ ๊ฒฐํ•ฉํ•˜์—ฌ ๋” ๋งŽ์€ ๊ฒƒ์„ ์‹œ๋„ํ•˜๊ณ ์ž ํ•ฉ๋‹ˆ๋‹ค.

์ฒ˜์Œ์œผ๋กœ ์Šค๋งˆํŠธ ๊ณ„์•ฝ์„ ์ง์ ‘ ์ž‘์„ฑํ•ด๋ณด๊ณ  ์‹ถ๋‹ค๋ฉด, ํ˜„์žฌ ๊ฐ€์žฅ ๋Œ€์ค‘ํ™”๋œ ์–ธ์–ด์ธ ์†”๋ฆฌ๋””ํ‹ฐ(Solidity)๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์ด ์ข‹์Šต๋‹ˆ๋‹ค. ๋ณธ ๊ฐ€์ด๋“œ๋Š” ์ด๋”๋ฆฌ์›€ ์Šค๋งˆํŠธ ๊ณ„์•ฝ์„œ๋ฅผ ์ž‘์„ฑํ•จ์œผ๋กœ์จ ์†”๋ฆฌ๋””ํ‹ฐ์˜ ๋‹จ๊ณ„๋ณ„ ํ•™์Šต์„ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค.

์—ฌ๋Ÿฌ๋ถ„์˜ ์ฒซ ๋ฒˆ์งธ ์Šค๋งˆํŠธ ๊ณ„์•ฝ

์šฐ์„ , ์šฐ๋ฆฌ๋Š” ํˆฌํ‘œ ์Šค๋งˆํŠธ ๊ณ„์•ฝ์„œ๋ฅผ ์ž‘์„ฑํ•  ๊ฒƒ์ž…๋‹ˆ๋‹ค. ์ดย ์Šค๋งˆํŠธ ๊ณ„์•ฝ์„ ํ†ตํ•ด ์‚ฌ์šฉ์ž๋“ค์€ ์ƒˆ๋กœ์šด ์ œ์•ˆ์„œ๋ฅผ ์ œ์•ˆํ•  ์ˆ˜์žˆ์Šต๋‹ˆ๋‹ค. ์ฆ‰, ๊ธฐ์กด์˜ ์ œ์•ˆ์— ๋Œ€ํ•ด ์ฐฌ์„ฑ ํ˜น์€ ๋ฐ˜๋Œ€ํˆฌํ‘œ๋ฅผ ํ•˜์—ฌ ๋” ๋งŽ์€ ํˆฌํ‘œ๋ฅผ ๋ฐ›์€ ์ œ์•ˆ์„ ์‹ ์†ํžˆ ์งˆ์˜ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ด๋Ÿฌํ•œ ์•„์ด๋””์–ด๋Š”ย CarbonVote์—์„œ ์˜๊ฐ์„ ๋ฐ›์€ ๊ฒƒ์ž…๋‹ˆ๋‹ค. CarbonVote๋Š” ํˆฌํ‘œ์ž๋“ค์˜ ์ง€๊ฐ‘์—์„œ ์ฝ”์ธ์„ ์š”๊ตฌํ•˜์ง€์•Š๋Š” ํˆฌํ‘œ ๊ธฐ๋Šฅ์„ ๊ฐ€์ง„ ์›น ํŽ˜์ด์ง€์ž…๋‹ˆ๋‹ค. ํˆฌํ‘œ๋Š” ์˜ˆ ํ˜น์€ ์•„๋‹ˆ์˜ค๋ฅผ ๋‚˜ํƒ€๋‚ด๋Š” ๊ฐ ์ฃผ์†Œ์˜ย ETH ๊ธˆ์•ก์„ ๋ณด๊ณ  ์–ธ์ œ๋“ ์ง€ ๊ณ„์‚ฐ ๊ฐ€๋Šฅํ•ฉ๋‹ˆ๋‹ค. ์ œ์•ˆ์ž๋Š” ์ œ์•ˆ์„œ๋ฅผ ๋’ท๋ฐ›์นจํ•  ETH๋ฅผ ์ง€๋ถˆํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค (์˜ˆ๋ฅผ ๋“ค์–ด 5 ETH). ๊ทธ๋ฆฌ๊ณ  ์ด ๊ธˆ์•ก์€ ์ œ์•ˆ์„œ๋ฅผ์ทจ์†Œ/์ข…๋ฃŒํ•  ๋•Œ ๋‹ค์‹œ ๋ฐ›์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

Remix๋กœ ์‹œ์ž‘ํ•˜๊ธฐ

์ด๋”๋ฆฌ์›€์„ ๊ฐœ๋ฐœํ•˜๋Š” ๊ฒƒ์ด ์ฒ˜์Œ์ด๋ผ๋ฉด, ์ด๋Š” ๊ต‰์žฅํžˆ ์–ด๋ ค์šด ๊ณผ์ œ์ฒ˜๋Ÿผ ๋А๊ปด์งˆ ์ˆ˜๋„ ์žˆ์Šต๋‹ˆ๋‹ค. ๋”์šฑ ์‰ฌ์šด ์ดํ•ด๋ฅผ ์œ„ํ•ด, ๋ณธ ๊ธ€์€ ๊ฐ€๋Šฅํ•œ ํ•œ ๊ฐ„๋‹จํ•˜๊ฒŒ ์“ฐ๊ฒ ์Šต๋‹ˆ๋‹ค. ๊ฐ™์€ ๋ชฉ์ ์œผ๋กœ, zero install ์ธ๋ธŒ๋ผ์šฐ์ € IDEย The Remix Solidity Editor๋ฅผ ์‚ฌ์šฉํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค.

์™ผ์ชฝ ์ƒ๋‹จ์˜ (+) ๋ฒ„ํŠผ์„ ๋ˆŒ๋Ÿฌ ์ƒˆ๋กœ์šด ํŒŒ์ผ์„ ๋งŒ๋“ค์–ดย Voting.sol๋กœ ํŒŒ์ผ๋ช…์„ ์ €์žฅํ•ฉ๋‹ˆ๋‹ค.

์ฝ”๋“œ ์Šค์ผˆ๋ ˆํ†ค(Code skeleton)

์†”๋ฆฌ๋””ํ‹ฐ ๋ฒ„์ „

์šฐ์„  ์šฐ๋ฆฌ๊ฐ€ ์ง€์›ํ•˜๋Š” ์†”๋ฆฌ๋””ํ‹ฐ ๋ฒ„์ „์„ ์„ ์–ธํ•˜๊ณ  ๊ณ„์•ฝ์„œ ์ž‘์„ฑ์„ ์‹œ์ž‘ํ•ฉ๋‹ˆ๋‹ค:

๊ณ„์•ฝ์€ ์†”๋ฆฌ๋””ํ‹ฐ ์ปดํŒŒ์ผ๋Ÿฌ ๋ฒ„์ „ 0.4.15 ์ดํ›„์˜ ๋ฒ„์ „์„ ์ง€์›ํ•˜์ง€๋งŒ 0.5.0 ์ดํ›„์˜ ๋ฒ„์ „์€ ์ง€์›ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. (๋‘๋ฒˆ์งธ ์กฐ๊ฑด์€ ^๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์ถ”๊ฐ€๋ฉ๋‹ˆ๋‹ค)

๋ฐ์ดํ„ฐ ๊ตฌ์กฐ(Structs)

๊ณ„์•ฝ์˜ 2๊ฐ€์ง€ ๋ฐ์ดํ„ฐ ๊ตฌ์กฐ

๋ณธ ๊ณ„์•ฝ์—์„œ๋Š” 2๊ฐœ์˜ ๋ฐ์ดํ„ฐ ๊ตฌ์กฐ๋ฅผ ๋งŒ๋“ค์—ˆ์Šต๋‹ˆ๋‹ค: ํˆฌํ‘œ์ž์™€ ์ œ์•ˆ์„œ์ž…๋‹ˆ๋‹ค. ํˆฌํ‘œ์ž ๋ฐ์ดํ„ฐ ๊ตฌ์กฐ์—๋Š” ์‚ฌ์ „์ด ํฌํ•จ๋ฉ๋‹ˆ๋‹ค. ์ด ์‚ฌ์ „์€ ์ œ์•ˆ์„œ์˜ ์ƒ‰์ธ์„ ์ฐธ/๊ฑฐ์ง“์œผ๋กœ ๋งคํ•‘ํ•˜์—ฌ ํˆฌํ‘œ์ž๊ฐ€ ์ด๋ฏธ $index ์ œ์•ˆ์„œ์— ํˆฌํ‘œํ–ˆ๋Š”์ง€ ๋ณด์—ฌ์ค๋‹ˆ๋‹ค. ๊ฐ๊ฐ์˜ ์ œ์•ˆ์„œ๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์€ ์ •๋ณด๋ฅผ ๊ฐ€์ง€๊ฒŒ ๋ฉ๋‹ˆ๋‹ค: ์ œ์•ˆ์„œ์˜ ๋‚ด์šฉ, ์ฐฌ์„ฑ/๋ฐ˜๋Œ€ ํˆฌํ‘œ์ˆ˜, ์ œ์•ˆ์„œ๊ฐ€ ์ œ์•ˆ๋œ ๋ธ”๋ก ์ˆซ์ž, ์ œ์•ˆ์„œ์˜ ์ฃผ์†Œ ๊ทธ๋ฆฌ๊ณ  ์ทจ์†Œ๋œ ์ƒํƒœ(์ œ์•ˆ์ž๊ฐ€ ์ทจ์†Œํ–ˆ๋‹ค๋ฉด ์ฐธ, ๊ทธ๋ ‡์ง€ ์•Š์€ ๊ฒฝ์šฐ ๊ฑฐ์ง“).

์‚ฌ๊ฑด(Events)

๊ณ„์•ฝ์„œ๋Š” ์ œ์•ˆ์„œ์— ๋Œ€ํ•œ ์ฐฌ์„ฑ ํ˜น์€ ๋ฐ˜๋Œ€ํˆฌํ‘œ(VoteFor/VoteAgainst), ์ƒˆ๋กœ์šด ์ œ์•ˆ์„œ๋ฅผ ์ถ”๊ฐ€ ํ˜น์€ ์ทจ์†Œ(ProposalAdded/ProposalCanceled)๊ทธ๋ฆฌ๊ณ  ์ œ์•ˆ์ž์—๊ฒŒ ์ด๋”(Ether)๋ฅผ ๋‹ค์‹œ ํ™˜๋ถˆ(Refund) ๋  ๋•Œ ์‚ฌ๊ฑด์„ ๋‚ด๋ณด๋ƒ…๋‹ˆ๋‹ค. ๊ฐ๊ฐ์˜ ์‚ฌ๊ฑด์—๋Š” ํˆฌํ‘œ๊ฐ€ ์ˆ˜ํ–‰๋  ๋•Œ ์ผ์–ด๋‚˜๋Š” ์ผ์„ ์ถ”์ ํ•˜๋Š”๋ฐ ํ•„์š”ํ•œ ์ •๋ณด๊ฐ€ ๋“ค์–ด์žˆ์Šต๋‹ˆ๋‹ค.

์ˆ˜์‹์ž(Modifiers)

์†”๋ฆฌ๋””ํ‹ฐ ๋ฌธ์„œ์—์„œ, ์ˆ˜์‹์ž๋Š”:

๊ธฐ๋Šฅ์„ ์‹คํ–‰ํ•˜๊ธฐ ์ „์— ์ž๋™์œผ๋กœ ์กฐ๊ฑด์„ ํ™•์ธํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ˆ˜์‹์ž๋Š” ๊ณ„์•ฝ์˜ ์ƒ์† ๊ฐ€๋Šฅํ•œ ์†์„ฑ์ด๋ฉฐ, ํŒŒ์ƒ๋œ ๊ณ„์•ฝ์— ์˜ํ•ด ๋ฌด์‹œ๋  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๋ณธ ๊ณ„์•ฝ์—์„œ๋Š”, ํˆฌํ‘œ๊ฐ€ ๊ณ„์† ์‹คํ–‰ ์ค‘์ธ์ง€ ํ™•์ธํ•˜๊ธฐ ์œ„ํ•ดnotEndedย ์ˆ˜์‹์ž๋ฅผ ์‚ฌ์šฉํ–ˆ์Šต๋‹ˆ๋‹ค.ย checkValueย ์ˆ˜์‹์ž๋Š” ์ œ์•ˆ์ž๋“ค์ด ๊ฐ๊ฐ์˜ ์ œ์•ˆ์„œ์— ๋Œ€ํ•œ ์ถฉ๋ถ„ํ•œ ์ด๋”๋ฅผ ์ง€๋ถˆํ–ˆ๋Š”์ง€ ํ™•์ธํ•˜๊ณ  ์ดˆ๊ณผ๋ถ„์„ ํ™˜๋ถˆํ•˜๋Š” ๊ธฐ๋Šฅ์„ ํ•ฉ๋‹ˆ๋‹ค.

์ƒ์„ฑ(Constructions)

๊ณ„์•ฝ์„ ๋ฐฐํฌํ•˜๋ฉด ์ƒ์„ฑ์ž๊ฐ€ ํ˜ธ์ถœ๋ฉ๋‹ˆ๋‹ค. ์ด ์ƒ์„ฑ์ž๋Š” ๋‹จ ํ•œ ๋ฒˆ๋งŒ ํ˜ธ์ถœ๋˜๋ฉฐ ๋‹ค์‹œ๋Š” ํ˜ธ์ถœ๋  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค. ์ƒ์„ฑ์ž๋Š” ์ดˆ๊ธฐ์ œ์•ˆ ๊ฑด์ˆ˜ ๋ฐ ํˆฌํ‘œ ์ƒํƒœ๋ฅผ ์ดˆ๊ธฐํ™”ํ•ฉ๋‹ˆ๋‹ค.

์ œ์•ˆ์„œ ์ œ์•ˆํ•˜๊ธฐ

์‚ฌ์šฉ์ž๊ฐ€ ์ƒˆ๋กœ์šด ์ œ์•ˆ์„œ๋ฅผ ์ œ์•ˆํ•  ๋•Œ๋งˆ๋‹ค, ์‚ฌ๊ฑด์ด ๊ธฐ๋ก๋œย proposalsย ๋ฐฐ์—ด์— ์ถ”๊ฐ€๋ฉ๋‹ˆ๋‹ค. ์ œ์•ˆ์„œ์˜ ์ˆ˜์™€ ์ œ์•ˆ์ž๊ฐ€ ์ง€๋ถˆํ•œ ์ด๋”์˜ ๊ธˆ์•ก ๋˜ํ•œ ์ ์ฐจ ์ปค์ง‘๋‹ˆ๋‹ค.

์ฃผ์˜:ย ํ•œ ๊ธฐ๋Šฅ์— ๋‹ค์ˆ˜์˜ ์ˆ˜์‹์ž๋ฅผ ์ ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ด๋Š” ๊ธฐ๋Šฅ ๋จธ๋ฆฌ๊ธ€์˜ ๊ณต๋ฐฑ์œผ๋กœ ๊ตฌ๋ถ„๋œ ๋ชฉ๋ก์— ์ˆ˜์‹์ž๋ฅผ ์ถ”๊ฐ€ํ•จ์œผ๋กœ์จ ๊ฐ€๋Šฅํ•ฉ๋‹ˆ๋‹ค. ์ˆ˜์‹์ž๋Š” ์ œ์‹œ๋œ ์ˆœ์„œ๋Œ€๋กœ ํ‰๊ฐ€๋ฉ๋‹ˆ๋‹ค. ์œ„ ์ฝ”๋“œ ์กฐ๊ฐ์—์„œ ์šฐ๋ฆฌ๋Š” ์—ฌ์ „ํžˆ ํˆฌํ‘œ๊ฐ€ ์ง„ํ–‰ ์ค‘์ธ์ง€ ํ™•์ธํ•˜๊ณ  ์ œ์•ˆ์ž๊ฐ€ ๊ณ„์•ฝ์— ์ ๋‹น๋Ÿ‰์˜ ์ด๋”๋ฅผ ์ „์†กํ–ˆ๋Š”์ง€ ํ™•์ธํ•˜๊ธฐ ์œ„ํ•ดย notEndedย ๊ทธ๋ฆฌ๊ณ ย checkValue, 2๊ฐœ์˜ ์ˆ˜์‹์ž๋ฅผ ์ถ”๊ฐ€ํ–ˆ์Šต๋‹ˆ๋‹ค.

์ œ์•ˆ์„œ ์ทจ์†Œ ๋ฐ ํ™˜๋ถˆ

์ œ์•ˆ์„œ๊ฐ€ ๋ณธ ์ œ์•ˆ์ž์— ์˜ํ•ด ์ทจ์†Œ๋˜๋Š” ๊ฒฝ์šฐ ์ทจ์†Œ๋˜์—ˆ๋‹ค๊ณ  ํ‘œ์‹œ๋˜๋ฉฐ ์ง€๋ถˆ๋œ ์ด๋”๋Š” ๋‹ค์‹œ ํ™˜๋ถˆ๋ฉ๋‹ˆ๋‹ค.ย Sendย ๋ฐฉ์‹์€ ์ง€์ •๋œ ์ด๋”์˜ ๊ธˆ์•ก์„ ๋‹ค์‹œ ์ œ์•ˆ์ž์—๊ฒŒ ์ „์†กํ•ฉ๋‹ˆ๋‹ค. ํ™˜๋ถˆ์ด ์„ฑ๊ณต์ ์œผ๋กœ ์ด๋ค„์กŒ๋Š”์ง€๋ฅผ ๋‚˜ํƒ€๋‚ด๋Š” ์ฐธ/๊ฑฐ์ง“์„ ๋ฐ˜ํ™˜ํ•˜๊ฒŒ ๋ฉ๋‹ˆ๋‹ค.

๊ฒฝ๊ณ :ย ์žฌ์ง„์ž… ์ฐฉ์ทจ(reentrancy exploit)๋ฅผ ์˜ˆ๋ฐฉํ•˜๊ธฐ ์œ„ํ•ด์„œ๋Š” ํ•ญ์ƒย send๋ฅผ ํ˜ธ์ถœํ•˜๊ธฐ ์ด์ „์— ์ž”์•ก์„ ์ฐจ๊ฐํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ๊ณต๊ฒฉ์ž๋Š”ย refundย ๊ธฐ๋Šฅ์„ ์ŠคํŒธํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.ย Sendย ๋ฐฉ์‹์€ ๊ณต๊ฒฉ์ž๊ฐ€ ๋˜ ๋‹ค๋ฅธ refund๋ฅผ ํ˜ธ์ถœํ•˜๊ธฐ ์ด์ „์— ์™„๋ฃŒ๋˜์ง€ ์•Š์•„, ๊ฒฐ๊ตญ ์—ฌ๋Ÿฌ ๋ฒˆ์˜ย send๋ฅผ ํ˜ธ์ถœํ•˜์—ฌ ์ œ์•ˆ์ž์˜ ์ž”์•ก์„ ์•ฝํƒˆํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

ํˆฌํ‘œ

์‚ฌ์šฉ์ž๊ฐ€ ํˆฌํ‘œํ•  ๋•Œ, ์ œ์•ˆ์„œ์— ์ฐฌ์„ฑํ•˜๊ฑฐ๋‚˜ ๋ฐ˜๋Œ€ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์šฐ๋ฆฌ๋Š” ์ œ์•ˆ์„œ ์ƒ‰์ธ์ด ์œ ํšจํ•œ์ง€ ๊ทธ๋ฆฌ๊ณ  ํˆฌํ‘œ๊ฐ€ ์ง„ํ–‰๋˜๊ธฐ ์ด์ „์— ์ทจ์†Œ๋˜์ง€๋Š” ์•Š์•˜๋Š”์ง€ ํ™•์ธํ•˜๊ณ  ์‹ถ์Šต๋‹ˆ๋‹ค. ๋˜ํ•œ, ์‚ฌ์šฉ์ž๊ฐ€ ๊ฐ™์€ ์ œ์•ˆ์„œ์— ์ค‘๋ณต์œผ๋กœ ํˆฌํ‘œํ•˜๋Š” ๊ฒƒ์„ ์˜ˆ๋ฐฉํ•˜๊ณ ์ž ํ•ฉ๋‹ˆ๋‹ค. ์ด๋Š” ๊ฐ ํˆฌํ‘œ์ž์˜ย votedProposals์„ ์‚ฌ์ „์—์„œ ํ™•์ธํ•จ์œผ๋กœ์จ ํ•ด๊ฒฐํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๊ทธ๋Ÿฐ ๋‹ค์Œ, ์ œ์•ˆ์„œ์— ๋Œ€ํ•œ ํˆฌํ‘œ์ž์˜ ์ด๋” ๊ธˆ์•ก(wei ๋‹จ์œ„)์„ ๊ฐ€์ง€๊ณ  ํˆฌํ‘œ ์ˆ˜๋ฅผ ์ฆ๊ฐ€์‹œํ‚ต๋‹ˆ๋‹ค. ํˆฌํ‘œ๋ฅผ ํ‘œ์‹œํ•˜๊ธฐ ์œ„ํ•œ ์‚ฌ๊ฑด๋„ ๊ธฐ๋ก๋ฉ๋‹ˆ๋‹ค.

์ œ์•ˆ์„œ์˜ ๋ชจ๋“  ์ •๋ณด ์งˆ์˜

์ ์ ˆํ•œ ์ƒ‰์ธ์œผ๋กœ ์ด ๊ธฐ๋Šฅ์„ ํ˜ธ์ถœํ•˜๋ฉด ์ œ์•ˆ์„œ์™€ ๊ด€๋ จํ•˜์—ฌ ํ•„์š”ํ•œ ๋ชจ๋“  ์ •๋ณด(๋‚ด์šฉ, ์ฐฌ์„ฑ ๋ฐ ๋ฐ˜๋Œ€ํˆฌํ‘œ ์ˆ˜, ์ œ์•ˆ์ž ์ฃผ์†Œ, ์ œ์•ˆ๋œ ๋ธ”๋ก ๋ฒˆํ˜ธ)๋ฅผ ์–ป์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ด ๊ธฐ๋Šฅ์€ ํˆฌํ‘œ ๊ฐ’์„ ๋Œ๋ ค์ฃผ๋Š”๋ฐ, ์ด ๊ฐ’์€ ์ถ”ํ›„์— ์›น ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ํ†ตํ•ด ์ถ”์ถœํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์šฐ์Šน ์ œ์•ˆ ์งˆ์˜

์ด ๊ธฐ๋Šฅ์ด ํ˜ธ์ถœ๋˜๋ฉด, ๊ฐ€์žฅ ๋†’์€ (์ฐฌ์„ฑ ํ˜น์€ ๋ฐ˜๋Œ€) ํˆฌํ‘œ๋ฅผ ๋ฐ›์€ ์ œ์•ˆ์„œ ์ƒ‰์ธ์„ ๋Œ๋ ค์ค๋‹ˆ๋‹ค.

๋ฐฐ์น˜ ๋ฐ ํ…Œ์ŠคํŠธ

Deploy the contract

๋ฐฐ์น˜

์šฐ์ธก ํŒจ๋„์—, ์•„๋ž˜๋Œ€๋กœ ์„ค์ •ํ•˜์‹ญ์‹œ์˜ค:

ยท ํ™˜๊ฒฝ(Environment): Javascript VM

ยท ๊ฐ€์Šค ํ•œ๊ณ„(Gas Limit): 300000

ยท ๊ฐ€์Šค ๊ฐ€๊ฒฉ(Gas Price): 0

ยท ๊ฐ’(Value): 0

ยท ๋งŒ๋“ค๊ธฐ(Create): <๊ณต๋ฐฑ(keep blank)>

๋‹ค์Œ์œผ๋กœย Create๋ฅผ ํด๋ฆญํ•ฉ๋‹ˆ๋‹ค. ๊ณ„์•ฝ์ด ํ…Œ์ŠคํŠธ ๋ธ”๋ก์ฒด์ธ์— ๋ฐฐ์น˜๋ฉ๋‹ˆ๋‹ค.

Yay! It worked.

๊ณ„์•ฝ๊ณผ ์ƒํ˜ธ ์ž‘์šฉ

addNewProposalย ๋ฐ•์Šค์— ์›ํ•˜๋Š” ์ œ์•ˆ์„œ๋ฅผ ์ถ”๊ฐ€ํ•˜๊ณ , ๊ฐ’ ๋ฐ•์Šค์— ๊ณ„์•ฝ์— ๋ณด๋‚ด๊ณ  ์‹ถ์€ ๊ฐ’์„ ์ž…๋ ฅํ•˜๋ฉด ๋ฉ๋‹ˆ๋‹ค. ์šฐ๋ฆฌ์˜ ์˜ˆ์‹œ์—์„œ๋Š”, 30 ETH์™€ โ€œBuild a voting contractโ€ ์ œ์•ˆ์„œ๋ฅผย addNewProposalย ๊ธฐ๋Šฅ์— ๋ณด๋ƒˆ์Šต๋‹ˆ๋‹ค.

์ œ์•ˆ์„œ์™€ ํ•จ๊ป˜ 30 ETH๋ฅผ ์ „์†กํ–ˆ์ง€๋งŒ, 5 ETH๋งŒ ์ฐจ๊ฐ๋œ ๊ฒƒ์„ ๋ณด์‹ค ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ด๋Š”ย checkValue()์ˆ˜์‹์ž๊ฐ€ ์ดˆ๊ณผ ๊ธˆ์•ก์„ ํ™•์ธํ•˜์—ฌ ๋ถˆํ•„์š”ํ•œ ๊ธˆ์•ก์„ ๋ฐ˜ํ™˜ํ–ˆ๊ธฐ ๋•Œ๋ฌธ์ž…๋‹ˆ๋‹ค.

์ƒ‰์ธ(์˜ˆ์‹œ์˜ ๊ฒฝ์šฐ 0)์„ ์ด์šฉํ•˜์—ฌ ์ œ์•ˆ์„œ๋ฅผ ์งˆ์˜ํ•˜๋ฉด ์ œ์•ˆ์„œ์˜ ๋ชจ๋“  ์ •๋ณด๊ฐ€ ํ‘œ์‹œ๋ฉ๋‹ˆ๋‹ค. (๋‚ด์šฉ, ์ฐฌ์„ฑ ๋ฐ ๋ฐ˜๋Œ€ ํˆฌํ‘œ์ˆ˜, ์ „์†ก์ž ๋ฐ ๋ธ”๋ก ๋ฒˆํ˜ธ)

๋” ๋งŽ์€ ์ œ์•ˆ์„œ๋ฅผ ์ถ”๊ฐ€ํ•˜๊ณ , ์—ฌ๋Ÿฌ ๊ณ„์ •์„ ์ „ํ™˜ํ•˜๊ณ , ์ œ์•ˆ์„œ์— ์ฐฌ๋ฐ˜ ํˆฌํ‘œ๋ฅผ ํ•˜๊ณ , ์šฐ์Šน ์ œ์•ˆ์„œ์— ์งˆ์˜ํ•จ์œผ๋กœ์จ ๊ณ„์•ฝ๊ณผ๋” ๋งŽ์€ ์ƒํ˜ธ ์ž‘์šฉ์„ ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๊ทธ ๋‹ค์Œ์€?

๊ธ€์„ ๋‹ค ์ฝ์—ˆ๋‹ค๋ฉด ์ด์ œ ๋ฌด์—‡์„ ํ•  ์ˆ˜ ์žˆ์„๊นŒ์š”?

์ด๋”๋ฆฌ์›€ ํ…Œ์ŠคํŠธ๋„ท์ด ์œ„ ์ฝ”๋“œ๋ฅผ ํ…Œ์ŠคํŠธํ•ด๋ณด๊ฑฐ๋‚˜, ์‚ฌ์šฉ์ž๋“ค์ด ํˆฌํ‘œ ๊ณ„์•ฝ๊ณผ ์ƒํ˜ธ์ž‘์šฉํ•  ์ˆ˜ ์žˆ๋Š” ์›น ์‘์šฉ ํ”„๋กœ๊ทธ๋žจ์„ ๋งŒ๋“ค ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์†”๋ฆฌ๋””ํ‹ฐ ํŠœํ† ๋ฆฌ์–ผ์€ ๋งค์šฐ ๋งŽ์ง€๋งŒ, ์•„๋ž˜๋Š” ๊ฐ€์žฅ ๋„์›€์ด ๋  ๋ฒ•ํ•œ ์ž๋ฃŒ๋“ค์ž…๋‹ˆ๋‹ค:

ยทย The Solidity Docs Site.

ยทย Learning Solidityย series byย Karl Floersch.

ยทย Getting Started as an Ethereum Web Developerย byย Alex Miller.

ยทย The Solidity Docs Site

ยทย Karl Floerschย ์˜ย Learning Solidityย ์‹œ๋ฆฌ์ฆˆ

ยทย Alex Miller์˜ย Getting Started as an Ethereum Web Developer

์ด๋Š” ์†”๋ฆฌ๋””ํ‹ฐ์™€ ์ด๋”๋ฆฌ์›€ ์Šค๋งˆํŠธ ๊ณ„์•ฝ์„ ๋ฐฐ์šฐ๋Š” ๊ฐ€์žฅ ์ฒซ ๋ฒˆ์งธ ๋‹จ๊ณ„์ž…๋‹ˆ๋‹ค. ์—ฌ๋Ÿฌ๋ถ„๋“ค์ด ์•ž์œผ๋กœ ์–ด๋–ค ์ฝ”๋”ฉ์„ ํ• ์ง€ ๊ต‰์žฅํžˆ ๊ธฐ๋Œ€๋ฉ๋‹ˆ๋‹ค.

Author

Kambria is the first decentralized open innovation platform for Deep Tech (AI, Robotics, Blockchain, VR/ARโ€ฆ). Using our platform, anyone can collaborate in researching, developing and commercializing innovative ideas and get rewarded fairly for their contributions. Through partnerships with government agencies, top universities and leading companies, Kambria is dedicated to building a sustainable open innovation ecosystem to change the way we innovate and to accelerate advanced technology development and industry adoption. Together, letโ€™s shape the future of technology where technology is open and contributes more to society.