๐Ÿ‡ฐ๐Ÿ‡ท Gimbalabs ์‹œ๋ฆฌ์ฆˆ: ํ”Œ๋ฃจํˆฌ์Šค ์ปจํŠธ๋ž™ํŠธ๋ฅผ ํšจ๊ณผ์ ์œผ๋กœ ์ƒ์„ฑ, ๋ฐฐํฌ ๋ฐ ๊ด€๋ฆฌํ•˜๊ธฐ - 1๋ถ€

์ง๋ฐ”๋žฉ์Šค(Gimbalabs)์˜ ์ธ๊ธฐ ๊ฐ•์‚ฌ์ธ Mix ๊ต์ˆ˜(M. ์•Œ๋ฆฌ ๋ชจ๋””๋ฆฌ)๊ฐ€ ์ œ์ž‘ํ•˜๊ณ  ๊ฐ•์˜ํ•˜๋Š” ์ด ์ข…ํ•ฉ 3๋ถ€ ์‹œ๋ฆฌ์ฆˆ์—์„œ๋Š” ์ž์ฒด ํ”Œ๋ฃจํˆฌ์Šค ์ปจํŠธ๋ž™ํŠธ๋ฅผ ํšจ๊ณผ์ ์œผ๋กœ ์ƒ์„ฑ, ๋ฐฐํฌ ๋ฐ ๊ด€๋ฆฌํ•˜๋Š” ๋ฐฉ๋ฒ•์— ๋Œ€ํ•ด ๊นŠ์ด ์žˆ๊ฒŒ ์ดํ•ดํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

ํ•™์ƒ ํ•™์Šต ๋ชฉํ‘œ(SLT)

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

์ด ์‹œ๋ฆฌ์ฆˆ์˜ 1๋ถ€์—์„œ๋Š” ์ฒซ ๋ฒˆ์งธ SLT์— ์ดˆ์ ์„ ๋งž์ถœ ๊ฒƒ์ž…๋‹ˆ๋‹ค:

๋‚˜๋งŒ์˜ ํ”Œ๋ฃจํˆฌ์Šค ์ปจํŠธ๋ž™ํŠธ๋ฅผ ๊ณ„ํšํ•˜๊ณ  ๊ตฌํ˜„ํ•  ์ˆ˜ ์žˆ๋‹ค.

๊ทธ๋ฆผ 1. ์ง๋ฐ”๋žฉ์Šค ํ”Œ๋ฃจํˆฌ์Šค PBL ๋ชจ๋“ˆ 302: PPBL

ํ”Œ๋ฃจํˆฌ์Šค ์Šค๋งˆํŠธ ์ปจํŠธ๋ž™ํŠธ์˜ ๋ณต์žก์„ฑ์— ๋Œ€ํ•ด ์ž์„ธํžˆ ์•Œ์•„๋ณด๊ธฐ ์ „์—, ์„ธ์‹ฌํ•œ ๊ณ„ํš ์ˆ˜๋ฆฝ์ด ์–ผ๋งˆ๋‚˜ ์ค‘์š”ํ•œ์ง€ ์ดํ•ดํ•˜๋Š” ๊ฒƒ์ด ์ค‘์š”ํ•ฉ๋‹ˆ๋‹ค. ์Šค๋งˆํŠธ ์ปจํŠธ๋ž™ํŠธ๋ฅผ ๊ฑด๋ฌผ์˜ ์„ค๊ณ„๋„๋ผ๊ณ  ์ƒ์ƒํ•ด๋ณด๋ฉด, ์„ค๊ณ„๋„์˜ ํ’ˆ์งˆ์€ ๊ฑด๋ฌผ์˜ ๊ฒฌ๊ณ ํ•จ๊ณผ ์•ˆ์ •์„ฑ์— ์ง์ ‘์ ์ธ ์˜ํ–ฅ์„ ๋ฏธ์นฉ๋‹ˆ๋‹ค. ๋งˆ์ฐฌ๊ฐ€์ง€๋กœ ์Šค๋งˆํŠธ ์ปจํŠธ๋ž™ํŠธ์˜ ๊ณ„ํš ๋‹จ๊ณ„๋Š” ์‹ ๋ขฐ์„ฑ๊ณผ ์˜ˆ์ธก ๊ฐ€๋Šฅ์„ฑ์„ ์œ„ํ•œ ๊ธฐ๋ฐ˜์ด ๋ฉ๋‹ˆ๋‹ค.

๊ณ„ํš ์ˆ˜๋ฆฝ ์‹œ ์ฃผ์š” ๊ณ ๋ ค ์‚ฌํ•ญ

  • ๊ฒฐ์ •๋ก 
  • ์ž…๋ ฅ ๋งค๊ฐœ๋ณ€์ˆ˜
  • ๋กœ์ง ์„ค๊ณ„
  • ์ƒํƒœ ๊ด€๋ฆฌ
  • ์˜ค๋ฅ˜ ์ฒ˜๋ฆฌ
  • ๋ณด์•ˆ

ํ† ํฐ ์˜ˆ์น˜ ์ปจํŠธ๋ž™ํŠธ

๊ณ„ํš ๊ฐœ๋…์„ ์„ค๋ช…ํ•˜๊ธฐ ์œ„ํ•ด โ€˜ํ† ํฐ ์˜ˆ์น˜โ€™ ๋˜๋Š” โ€˜ํ† ํฐ ๋ฝ์—…โ€™ ์ปจํŠธ๋ž™ํŠธ๋ฅผ ๋Œ€ํ‘œ์ ์ธ ์˜ˆ๋กœ ์‚ฌ์šฉํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค. ์ด๋Ÿฌํ•œ ์ปจํŠธ๋ž™ํŠธ๋Š” ์•”ํ˜ธํ™”ํ์™€ ๋ธ”๋ก์ฒด์ธ ์˜์—ญ์—์„œ ์ค‘์ถ”์ ์ธ ์—ญํ• ์„ ํ•˜๋ฉฐ, ํŠนํžˆ ์ดˆ๊ธฐ ์ฝ”์ธ ๊ณต๊ฐœ(ICO) ๋˜๋Š” ํ† ํฐ ๋ฐฐํฌ ์ด๋ฒคํŠธ์—์„œ ์ค‘์š”ํ•œ ์—ญํ• ์„ ํ•ฉ๋‹ˆ๋‹ค.

๋‹ค์Œ๊ณผ ๊ฐ™์€ ์˜ˆ๋ฅผ ์ƒ๊ฐํ•ด ๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค: ์ƒˆ๋กœ์šด ์•”ํ˜ธํ™”ํ๋ฅผ ์ถœ์‹œํ•˜๊ณ  ์ดˆ๊ธฐ ํˆฌ์ž์ž์™€ ๊ฐœ๋ฐœํŒ€์—๊ฒŒ ํ† ํฐ์„ ๋ฐฐํฌํ•˜๋ ค๊ณ  ํ•ฉ๋‹ˆ๋‹ค. ๋ชจ๋“  ํ† ํฐ์„ ํ•œ๊บผ๋ฒˆ์— ๋ฐœํ–‰ํ•˜์—ฌ ์ง€๊ฐ‘์— ๋ณด๊ด€ํ–ˆ๋‹ค๊ฐ€ ํ•ด์ œํ•˜๋Š” ๋Œ€์‹  ํ† ํฐ ์˜ˆ์น˜ ์ปจํŠธ๋ž™ํŠธ๋ฅผ ์ƒ์„ฑํ•˜์—ฌ ์ผ์ • ๋น„์œจ์˜ ํ† ํฐ์„ ์ผ์ • ๊ฐ„๊ฒฉ์œผ๋กœ ์ž ๊ธˆ ํ•ด์ œํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๊ฒฐ์ •๋ก 

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

์ž…๋ ฅ ๋งค๊ฐœ๋ณ€์ˆ˜

ํ† ํฐ ์˜ˆ์น˜ ์ปจํŠธ๋ž™ํŠธ์—์„œ ์ค‘์š”ํ•œ ๋งค๊ฐœ๋ณ€์ˆ˜์—๋Š” ํˆฌ์ž์ž์˜ ์ฃผ์†Œ, ์˜ˆ์น˜ ๊ธฐ๊ฐ„ ์‹œ์ž‘์ผ, ์ด ํ† ํฐ ํ• ๋‹น๋Ÿ‰, ๋ฆด๋ฆฌ์Šค ์ผ์ •์ด ํฌํ•จ๋ฉ๋‹ˆ๋‹ค. ์ด๋Ÿฌํ•œ ๋งค๊ฐœ๋ณ€์ˆ˜๋Š” ๋ช…ํ™•ํ•˜๊ณ  ๊ฒฐ์ •์ ์œผ๋กœ ์ •์˜๋˜์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด, ์‹œ์ž‘ ๋‚ ์งœ๋ฅผ 'POSIXTimeโ€™์œผ๋กœ ์ง€์ •ํ•˜๋ฉด ์ปจํŠธ๋ž™ํŠธ์˜ ๋™์ž‘์ด ๊ฒฐ์ •๋ก ์  ๋ธ”๋ก์ฒด์ธ ์ด๋ฒคํŠธ์— ์ง์ ‘์ ์œผ๋กœ ์—ฐ๊ฒฐ๋˜๋ฏ€๋กœ ๊ด€๋ จ๋œ ๋ชจ๋“  ๋‹น์‚ฌ์ž๊ฐ€ ์˜ˆ์ธกํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๋กœ์ง ์„ค๊ณ„

ํ† ํฐ ์ง€๋ถ„ ์ฆ๋ช… ์ปจํŠธ๋ž™ํŠธ์˜ ๋กœ์ง์€ ์ •ํ™•ํ•˜๊ณ  ์™„์ „ํžˆ ๊ฒฐ์ •๋ก ์ ์ด์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด, ํˆฌ์ž์ž๊ฐ€ 6๊ฐœ์›” ํ›„์— ํ† ํฐ์„ ์ฒญ๊ตฌํ•  ์ˆ˜ ์žˆ๊ณ , ํ•œ ๋ฒˆ์— ์ „์ฒด ํ• ๋‹น์„ ์ฒญ๊ตฌํ•  ์ˆ˜ ์žˆ๋Š” ์‹œ๋‚˜๋ฆฌ์˜ค๋ฅผ ์ƒ๊ฐํ•ด ๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค. ์ปจํŠธ๋ž™ํŠธ์˜ ๋…ผ๋ฆฌ๋ฅผ ๋‹ค์Œ๊ณผ ๊ฐ™์ด ์ถ”์ƒํ™”ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค:

isTokenClaimPossible :: Bool
isTokenClaimPossible =
    if from claimingTime `contains` txInfoValidRange
        then do
            payToPubKey investor totalTokenAmount
        else traceError  "Tokens are locked until the vesting period ends."

์ƒํƒœ ๊ด€๋ฆฌ

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

์˜ค๋ฅ˜ ์ฒ˜๋ฆฌ

์˜ค๋ฅ˜ ์ฒ˜๋ฆฌ๋Š” ์˜ˆ๊ธฐ์น˜ ์•Š์€ ์ƒํ™ฉ์—์„œ๋„ ์ปจํŠธ๋ž™ํŠธ๊ฐ€ ์˜ˆ์ธก ๊ฐ€๋Šฅํ•˜๊ฒŒ ์ž‘๋™ํ•  ์ˆ˜ ์žˆ๋„๋ก ํ•˜๋Š” ๋ฐ ํ•„์ˆ˜์ ์ž…๋‹ˆ๋‹ค. ํˆฌ์ž์ž๊ฐ€ ์˜ˆ์น˜ ๊ธฐ๊ฐ„์ด ๋๋‚˜๊ธฐ ์ „์— ํ† ํฐ์„ ์ฒญ๊ตฌํ•˜๋ ค๊ณ  ์‹œ๋„ํ•œ๋‹ค๊ณ  ๊ฐ€์ •ํ•ด ๋ด…์‹œ๋‹ค. ์ด ๊ฒฝ์šฐ, ์ปจํŠธ๋ž™ํŠธ๋Š” ์˜ค๋ฅ˜ ์ฒ˜๋ฆฌ๋ฅผ ๊ตฌํ˜„ํ•˜์—ฌ ๊ฑฐ๋ž˜๋ฅผ ์ •์ƒ์ ์œผ๋กœ ๊ฑฐ๋ถ€ํ•˜๊ณ  ํ† ํฐ ๋ฆด๋ฆฌ์Šค ์กฐ๊ฑด์ด ์ถฉ์กฑ๋˜์ง€ ์•Š์•˜์Œ์„ ๋‚˜ํƒ€๋‚ด๋Š” ๊ฒฐ์ •์ ์ธ โ€˜Falseโ€™ ๊ฒฐ๊ณผ๋ฅผ ๋ฐ˜ํ™˜ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

๋ณด์•ˆ

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

์›๋ณธ ๊ฐ•์˜(๋™์˜์ƒ ๊ฐ•์˜ ํฌํ•จ)๋Š” PPBL ์—์„œ ํ™•์ธํ•˜์‹œ๊ธฐ ๋ฐ”๋ž๋‹ˆ๋‹ค.

Gimbalabs๋ฅผ ํŒ”๋กœ์šฐํ•˜์—ฌ ์ถ”๊ฐ€ ๊ณต์ง€๋ฅผ ๋ฐ›์•„๋ณด์„ธ์š”.


* Source: Gimbalabs series: Create, Deploy, and Manage your own Plutus contracts effectively - Part 1 | Essential Cardano
* Translation: Ilhun@CryptoVeri :twitter: enics_sky@naver.com