์ง๋ฐ๋ฉ์ค(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 enics_sky@naver.com