Skip to content

Instantly share code, notes, and snippets.

@jejuro
Last active June 6, 2018 03:35
Show Gist options
  • Save jejuro/413e797d65c78227bb10285fd3ff727f to your computer and use it in GitHub Desktop.
Save jejuro/413e797d65c78227bb10285fd3ff727f to your computer and use it in GitHub Desktop.

์ž‘์„ฑ ์ค‘์˜ ๊ธ€์ž…๋‹ˆ๋‹ค. ์ดˆ๊ณ  ๋งˆ๊ฐ ์˜ˆ์ •์ผ 2018-02-25, ์ž‘์„ฑ์ž:ย ํŒ€ ์ฃผํ”ผํ„ฐ

ํ‘œ์ค€ํ™”ํ๋Š” ์ฃผ์š”ํ•˜๊ฒŒ 2013๋…„ 1์›” ์˜คํ”ˆ์†Œ์Šค๋กœ ๊ณต๊ฐœํ•œ ์„ธ ๊ธฐ์ˆ ์— ๊ทผ๊ฑฐํ•ฉ๋‹ˆ๋‹ค.

  • ๊ณต๊ฐ„ ์›น ๊ธฐ๋ฐ˜์˜ ํ™”ํ ์‹œ์Šคํ…œ(SYSTEM AND METHOD FOR MONEY USING THE SPACE WEB)*,
  • ๊ณต๊ฐ„ ์›น ๊ธฐ๋ฐ˜์˜ ์‹œ์žฅ ์‹œ์Šคํ…œ(MARKET SYSTEM BASED ON THE SPACE WEB)
  • ๊ณต๊ฐ„ ์›น ๊ธฐ๋ฐ˜์˜ ํšŒ๊ณ„ ๋ฐฉ๋ฒ• ๋ฐ ์‹œ์Šคํ…œ(SYSTEM AND METHOD FOR ACCOUNTING BASED ON THE SPACE WEB)

ํŠนํ—ˆ์ฒญ ํŠนํ—ˆ๊ฒ€์ƒ‰, ํŠนํ—ˆ์‹ค์šฉ์‹ ์•ˆ ๋ถ€๋ฌธ ๊ฒ€์ƒ‰์–ด ๊ณต๊ฐ„์›น*AP=[120120589655].


ํ‘œ์ค€์•”ํ˜ธํ†ตํ™” ๋ฐ ๊ธ€๋กœ๋ฒŒ ๋ฌด์ธ ์€ํ–‰ Whitepaper and Basecode

์ด ํŽ˜์ด์ง€๋Š” Openhash ํ”Œ๋žซํผ ๊ธฐ๋ฐ˜์˜ ํ‘œ์ค€์•”ํ˜ธํ™”ํ(์ดํ•˜, ํ‘œ์ค€ํ™”ํ)์˜ ํ•ต์‹ฌ ์‚ฌ์ƒ๊ณผ API๋ฅผ ๊ธฐ์ˆ ํ•œ๋‹ค.

์˜คํ”ˆํ•ด์‹œ ์•”ํ˜ธํ™”ํ์˜ ๊ณต์‹ ๋ช…์นญ์€ ํ‘œ์ค€์•”ํ˜ธํ™”ํ Standard Cryptocurrency์ด๋ฉฐ, ์•ฝ์นญ์€ ํ‘œ์ค€ํ™”ํ, ๋ณ„์นญ์€ ํ‘œ์ค€์•”ํ˜ธํ†ตํ™”, ํ‘œ์ค€ํ™”ํ์ด๋‹ค.

cycle.js framework๋Š” ๋‘ ๊ฐ€์ง€ ์ธก๋ฉด์—์„œ ์‚ฌ์šฉ๋œ๋‹ค.

  • ํ‘œ์ค€ํ™”ํ ํ”Œ๋žซํผ ์ž์ฒด๊ฐ€ cycle.js framework๋กœ ์ž‘์„ฑ๋œ๋‹ค.
  • ๊ฐ ๊ตญ๊ฐ€๋Š” ๋ฐฐ์ •๋ฐ›์€ ํ‘œ์ค€ํ™”ํ์˜ ์ž๊ตญ ๋‚ด ์‚ฌ์šฉ๊ณผ ๊ด€๋ จํ•˜์—ฌ, ์ž๊ตญ์˜ ๊ด€๊ณ„ ๋ฒ•๋ น์„ Smart Contracts์˜ ํ˜•ํƒœ๋กœ ์ ์šฉํ•  ์ˆ˜ ์žˆ์œผ๋ฉฐ, Smart Contracts๋Š” Cycle.js API๋กœ ์ž‘์„ฑํ•˜์—ฌ์•ผ ํ•œ๋‹ค. ์ด๋Š” ๊ตญ๊ฐ€ ๊ฐ„ Smart Contracts ๋ชจ๋“ˆ์˜ ํ˜ธํ™˜์„ฑ์„ ๋†’์ด๊ณ , ๋ฌธ๋ฒ•์„ ํ†ต์ผํ•œ๋‹ค.
  • ๋ณธ ๋ฐฑ์„œ์— ๊ธฐ์ˆ ๋œ ์ฝ”๋“œ๋Š” Functional Reactive Programming์˜ ๋ฌธ๋ฒ•์œผ๋กœ ์ž‘์„ฑ๋œ Pseudo Code์ด๋‹ค. Cycle.js๋Š” Frontend Framework๋กœ ๊ณ ์•ˆ๋˜์—ˆ์ง€๋งŒ, ์˜คํ”ˆํ•ด์‹œ ํ”Œ๋žซํผ์€ ์ด๋ฅผ Backend Framework๋กœ ํ™•์žฅํ•œ๋‹ค.
  • ๋ชจ๋“  ํ†ต์‹ ๊ณผ ๊ธฐ๋ก์€ HTTPS encryption๋ฅผ ์ „์ œํ•œ๋‹ค.
  • DB๋Š” ์ค‘์•™์˜ ๋ฐฑ์—… ์„œ๋ฒ„(Google Cloud Platform, Firestore)์™€ ํ† ๋ ŒํŠธ ๋ฐฉ์‹์˜ Peer-to-Peer ๋ถ„์‚ฐ ์„œ๋ฒ„๊ฐ€ ์Œ์œผ๋กœ ์šด์˜๋œ๋‹ค.
  • ํ•œ๊ตญ์„ ์˜ˆ๋กœ์จ, ํ‘œ์ค€ํ™”ํ๊ฐ€ ์ ์šฉ๋˜๋Š” ๊ณผ์ •์„ ๊ธฐ์ˆ ํ•œ๋‹ค.

ํ”Œ๋žซํผ ์ดˆ๊ธฐํ™”

main()์„ ํ˜ธ์ถœํ•˜์—ฌ ์ผ์ •๋Ÿ‰์˜ ํ‘œ์ค€ํ™”ํ(Yip)๋ฅผ ์ƒ์„ฑํ•˜๊ณ , ๊ฐ๊ตญ์˜ GDP ๊ทœ๋ชจ์— ๋น„๋ก€ํ•˜์—ฌ ๊ฐ๊ตญ์— ๋ฐฐ์ •ํ•œ ๋’ค, ํ‘œ์ค€ํ™”ํ ํ”Œ๋žซํผ์„ ์ดˆ๊ธฐํ™”ํ•œ๋‹ค.

main() {
 //Issue 20 trillion Yip.
 const baseMoney: Number = 2e+12;
 const baseYip = issueYip(baseMoney);
 
 //allocate Standard Cryptocurrency among 193 nations registered to UN according to the GDP of each nation.
 allocateYip(baseYip);

 //Initialize One Onnuri Server.
 initOnnuri();

 //Initialize 193 Supul Servers for 193 nations.
 initSupul();
 
 //Initialize 65,536 hierarchical Gruturki Servers per 1 Supul Server of each nation.
 initGruturki();
}

์ดํ•˜, ์ง€๋ถˆ์ž๋ฅผ Payer, ์ˆ˜์ทจ์ž๋ฅผ Receiver, ์ถœ๊ธˆ ๊ณ„์ขŒ๋ฅผ Input, ์ž…๊ธˆ ๊ณ„์ขŒ๋ฅผ Output์ด๋ผ ํ‘œํ˜„ํ•œ๋‹ค.

Openhash Core Openhash Core๋Š” Open source(MIT)์ด๋ฉฐ, 2020๋…„๊นŒ์ง€ SCC - Standard Cryptocurrency Committee๊ฐ€ ์†Œ์Šค์ฝ”๋“œ๋ฅผ ์ œ์–ดํ•œ๋‹ค. 2021๋…„๋ถ€ํ„ฐ, ๊ด€๋ฆฌ๊ทธ๋ฃน ์—†์ด ์Šค์Šค๋กœ ์†Œ์Šค์ฝ”๋“œ๋ฅผ ๊ฐฑ์‹ ํ•˜๋Š” ์•Œ๊ณ ๋ฆฌ์ฆ˜์ด ์ ์šฉ๋œ๋‹ค.

API๋Š” Cycle.js ํ”„๋ ˆ์ž„์›Œํฌ๋ฅผ ํ† ๋Œ€๋กœ ์ž‘์„ฑ๋˜์—ˆ์œผ๋ฉฐ, ๋Œ€๋ถ€๋ถ„์˜ ํ”„๋กœ๊ทธ๋ž˜๋จธ์—๊ฒŒ ์ต์ˆ™ํ•œ OOP(Object Oriented Programming) ๋ฐฉ์‹์ด ์•„๋‹ˆ๋ผ, FRP(Functional Reactive Programming) ๋ฐฉ์‹์œผ๋กœ ์ž‘์„ฑ๋˜๊ณ  ์žˆ๋‹ค. OSCR - Openhash Standard Cryptocurrency Repository์—์„œ ๋‹ค์šด๋ฐ›์„ ์ˆ˜ ์žˆ๋‹ค.

1. ํ‘œ์ค€ํ™”ํ์™€ ์ฐธ์—ฌ์ž

ํ‘œ์ค€ํ™”ํ๋Š” SCC - Standard Crytocurrency Committee ๊ธ€๋กœ๋ฒŒ ํ‘œ์ค€ํ™”ํ์œ„์›ํšŒ๊ฐ€ ๊ทœ์ •ํ•˜๊ณ , ๊ฐ๊ตญ ์ •๋ถ€ NCC - National Cryptocurrency Committee ๊ตญ๊ฐ€ ํ‘œ์ค€ํ™”ํ์œ„์›ํšŒ๊ฐ€ ์ œ์ž‘ ๋ฐ ๋ฐฐํฌํ•œ๋‹ค.

ํ‘œ์ค€ํ™”ํ์˜ ๋‹จ์œ„๋Š” 1, 10, 100, 1000, 10,000, 100,000 โ€ฆ ๋“ฑ์ด๋ฉฐ, ๊ฐ๊ฐ์˜ ์ˆ˜๋Ÿ‰์€ ๋ณ„๋„๋กœ ์ •ํ•œ๋‹ค.

1.1 ํ‘œ์ค€ํ™”ํ

๋น„ํŠธ์ฝ”์ธ ๋“ฑ ์•”ํ˜ธ์ฆํ‘œ์™€ ๋‹ฌ๋ฆฌ, ํ‘œ์ค€ํ™”ํ๋Š” ์žฅ๋ถ€๊ฐ€ ์•„๋‹ˆ๋ผ, IP ์ฃผ์†Œ๋ฅผ ๊ฐ–๋Š” ๋””์ง€ํ„ธ ํ™”ํ์ด๋‹ค.

ํ‘œ์ค€ํ™”ํ์˜ IP ์ฃผ์†Œ

IPv6 ์ฃผ์†Œ๋ฅผ ์˜ˆ๋กœ์จ, 16๋น„ํŠธ์˜ Subnet ID ์ค‘ 4๋น„ํŠธ(16)์— ํ™”ํ ๋‹จ์œ„๋ฅผ ํ• ๋‹นํ•˜๊ณ , ๋ฐœํ–‰๋œ ํ™”ํ ๋””์ง€ํ„ธ ์ง€ํ ๊ฐ๊ฐ์˜ ๊ณ ์œ ํ•œ ID๋ฅผ Interface ID 64๋น„ํŠธ์— ํ• ๋‹นํ•œ๋‹ค. ๊ฐ€๋ น, ํ™”ํ๋‹จ์œ„ 1์€ 0001, 10์€ 0010, 100์€ 0011 ๋“ฑ์ด๋‹ค. ๋”ฐ๋ผ์„œ, ํ™”ํ๋‹จ์œ„๋Š” 1~10,000,000,000,000,000๋กœ ํ‘œํ˜„ํ•  ์ˆ˜ ์žˆ๋‹ค.

์–ด๋Š ํ•œ ํ™”ํ์˜ ์†Œ์œ ๊ถŒ์€ ํ›„์ˆ ํ•˜๋Š” ์ฐธ์—ฌ์ž๋“ค ๊ฐ„์— ์ด์ „๋  ์ˆ˜ ์žˆ์œผ๋ฉฐ, ํ™”ํ ๋ฐœํ–‰ ์ด๋Ÿ‰์ด ์‹ค์‹œ๊ฐ„ ์ธก์ •๋˜๋ฏ€๋กœ, ์œ„๋ณ€์กฐ๊ฐ€ ๋ฐœ์ƒํ•  ๊ฒฝ์šฐ ์ฆ‰๊ฐ ํƒ์ง€๋œ๋‹ค.

ํ™”ํ์˜ ์†Œ์œ ๊ถŒ ์ด์ „ ๊ณผ์ •์€ ํ›„์ˆ ํ•˜๋Š” Smart Contract์— ์˜ํ•ด ์ œ์–ด๋œ๋‹ค.

// Describe the features of monetary units.
type MoneyUnit = {

}

money(){
const moneyUnit: MoneyUnit;
const address: IPv6Address;
let ownerKey: Key;
let receiverKey: Key;
let smartContract:SmartContract;
}

//Describe the properties of owner object.
type Owner = {
}

ํ‘œ์ค€ํ™”ํ์˜ ๊ฒฝ์šฐ, ์ข…๋ž˜์˜ ์•”ํ˜ธ์ฆํ‘œ์— ์ ์šฉ๋˜๋˜ ๊ฑฐ๋ž˜ ์ˆ˜์ˆ˜๋ฃŒ๊ฐ€ ์—†๋‹ค.

1.2 ๊ธฐ๋ก

ํ‘œ์ค€ํ™”ํ๋Š” ๋ธ”๋ก์ด ์—†๋‹ค. ๊ฐ๊ฐ์˜ ๊ฑฐ๋ž˜๋Š” ํ™”ํ ๊ทธ ์ž์ฒด์™€ ๊ฑฐ๋ž˜์ž์˜ ํ†ต์žฅ์— ๊ธฐ๋ก๋œ๋‹ค.

1.2.1 ํ†ต์žฅ์˜ ๊ธฐ๋ก

์•„๋ž˜ ๊ทธ๋ฆผ์„ ์ฐธ์กฐํ•˜์—ฌ, ์ข…์ „์˜ ๋ธ”๋ก์ฒด์ธ์—์„œ, Alice์™€ Bob ๊ฐ„์— ๊ฑฐ๋ž˜๋Š” ํ•˜๋‚˜์˜ Transaction ๋ฐ์ดํ„ฐ๋กœ ๋‹ค์Œ ๋ฒˆ ๋ธ”๋ก์— ๊ธฐ๋ก๋œ๋‹ค.

์•„๋ž˜ ๊ทธ๋ฆผ์„ ์ฐธ์กฐํ•˜์—ฌ, ํ‘œ์ค€ํ™”ํ์˜ ๊ฒฝ์šฐ, Alice์™€ Bob ๊ฐ๊ฐ์˜ ํ†ต์žฅ์€ ์ œ๊ฐ๊ธฐ ํ†ต์žฅ์ฃผ์˜ ๊ฑฐ๋ž˜๋งŒ ๊ธฐ๋กํ•˜๋Š” ์ดˆ์†Œํ˜• ๋ธ”๋ก์ฒด์ธ์„ ๊ตฌ์„ฑํ•œ๋‹ค. ์‹œ์žฅ ์ฐธ์—ฌ์ž๊ฐ€ 1์–ต๋ช…์ด๋ผ๋ฉด, 1์–ต๊ฐœ์˜ ์ดˆ์†Œํ˜• ๋ธ”๋ก์ฒด์ธ์ด ๊ตฌ์„ฑ๋œ๋‹ค. ์ฃผ๋ชฉํ•  ์ ์€ ๊ฑฐ๋ž˜ ๋‹น์‚ฌ์ž ๊ฐ๊ฐ์˜ ํ†ต์žฅ์— ๊ธฐ๋ก๋œ ์ตœ์ข… Hash๊ฐ€ ์ƒˆ๋กœ์šด Hash์— ๋ฐ˜์˜๋˜๋Š” ์ ์ด๋‹ค.

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

1.2.2 ํ™”ํ์˜ ๊ธฐ๋ก

ํ‘œ์ค€ํ™”ํ์˜ ์†ก๊ธˆ ๋˜๋Š” ์†Œ์œ ๊ถŒ ์ด์ „์€ ๊ฑฐ๋ž˜ ๋ฐœ์ƒ ์‹œ์ ์— ์ตœ์†Œํ•œ ์„ธ ๊ณณ์— ๊ธฐ๋ก๋œ๋‹ค. ๋ณด๋‚ด๋Š” ์ด์˜ ์ „์ž์ง€๊ฐ‘ Gaji, ๋ฐ›๋Š” ์ด์˜ ์ „์ž์ง€๊ฐ‘ Gaji, ํ›„์ˆ ํ•˜๋Š” ๊ฐ ๊ณ„์ธต๋ณ„ ์„œ๋ฒ„, ๊ทธ๋ฆฌ๊ณ  ์ด์ „๋˜๋Š” ํ™”ํ์˜ IP ์ฃผ์†Œ์— ํ• ๋‹น๋œ ์›นํŽ˜์ด์ง€์ด๋‹ค.

๊ทธ ์ค‘, IP ์ฃผ์†Œ์— ๊ธฐ๋ก๋˜๋Š” ๋‚ด์šฉ์„ ์ƒ์„ธํžˆ ๊ธฐ์ˆ ํ•œ๋‹ค.

๋””์ง€ํ„ธ ์ง€ํ์™€ ์ฃผํ™”๋ฅผ ํฌํ•จํ•˜๋Š” ๋ชจ๋“  ํ™”ํ๋Š” ์˜ˆ์‹œํ•œ IPv6 ์ฃผ์†Œ์™€ ๊ฐ™์€ ๊ณ ์œ ํ•œ IP ์ฃผ์†Œ๋ฅผ ๊ฐ€์ง€๋ฉฐ, ํ•ด๋‹น ์ฃผ์†Œ์— ํ• ๋‹น๋œ ์›นํŽ˜์ด์ง€๋Š” ํ•ด๋‹น ํ™”ํ์˜ ๋‹จ์œ„, ๋ฐœํ–‰๊ตญ๊ฐ€, ํ˜„์žฌ ์†Œ์œ ์ž, ๊ณผ๊ฑฐ ์†Œ์œ ์ž ์ด๋ ฅ, ๊ฑฐ๋ž˜์— ์‚ฌ์šฉ๋œ ์ด๋ ฅ ๋“ฑ์„ ๊ธฐ๋กํ•œ๋‹ค. ๊ฐ€๋ น, ํ•œ๊ตญ ์ •๋ถ€๊ฐ€ 10Yip์งœ๋ฆฌ ํ‘œ์ค€ํ™”ํ๋ฅผ 100,000๊ฐœ ๋ฐœํ–‰ํ•œ๋‹ค๋ฉด, ์ด๋“ค ํ™”ํ๋Š” ์ œ๊ฐ๊ธฐ ์ž์‹ ์˜ ์›นํŽ˜์ด์ง€์— ์†Œ์œ ๊ถŒ ์ด์ „ ์ด๋ ฅ ๋“ฑ์˜ ์ •๋ณด๋ฅผ ๊ธฐ๋กํ•œ๋‹ค.

moneyHistory(ipAddress){
}

๋˜ํ•œ, ์ฃผ๋ชฉํ•  ๋ฐ”๋Š” ๊ธฐ๋ก๋  ๋ฐ์ดํ„ฐ์˜ ์–‘์ด๋‹ค. ๋ธ”๋ก์ฒด์ธ์˜ ๊ฒฝ์šฐ, ๊ฑฐ๋ž˜๋งˆ๋‹ค ๊ธฐ๋ก๋˜๋Š” ๋ฐ์ดํ„ฐ์˜ ์–‘์ด ์ƒ์ดํ•˜๊ณ , ์–‘์— ๋น„๋ก€ํ•˜์—ฌ, ๊ธฐ๋ก ์ˆ˜์ˆ˜๋ฃŒ๊ฐ€ ์ฐจ๋“ฑ์ ์œผ๋กœ ๋ถ€๊ณผ๋œ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜, ํ‘œ์ค€ํ™”ํ๋Š” ๊ธฐ๋ก์ˆ˜์ˆ˜๋ฃŒ๊ฐ€ ์—†์œผ๋ฉฐ, Openhash ํ”Œ๋žซํผ์˜ ๊ฐ ๊ณ„์ธต๋ณ„ ์„œ๋ฒ„๋‚˜ Neighbor Nodes์— ๊ธฐ๋ก๋  ๋ฐ์ดํ„ฐ์˜ ์–‘๋„ ์–ด๋–ค ๊ฑฐ๋ž˜๋‚˜ ๋™์ผํ•˜๋‹ค. ๊ธฐ๋ก๋  ๋ฐ์ดํ„ฐ๋Š” ๋‘˜ ํ˜น์€ ๊ทธ ์ด์ƒ์˜ ๊ฑฐ๋ž˜ ๋‹น์‚ฌ์ž๋“ค์˜ ์ž”์•ก, ๊ฑฐ๋ž˜ ์ด๋ฒคํŠธ์— ํ• ๋‹น๋œ Hash, ๋ฐ Timestamp์ด๋‹ค.

recordTxn(transanction){
const amount: Number;
const timestamp: Timestamp;
transaction.payer.balance: Number;
transaction.receiver.balance: Number;
}

ํ™”ํ์— ๊ธฐ๋ก๋˜๋Š” ์†Œ์œ ๊ถŒ ์ด์ „ ์ •๋ณด๋Š” ํ•ด๋‹น ํ™”ํ์˜ ์ƒˆ๋กœ์šด ์†Œ์œ ์ฃผ์˜ ํ†ต์žฅ์— ๊ธฐ๋ก๋œ Hash ์ •๋ณด์™€ ํ•จ๊ป˜ ๊ธฐ๋ก๋œ๋‹ค. ๊ฐ€๋ น, Alice๊ฐ€ Bob์— 10 Yip์„ ์ง€๋ถˆํ•˜๊ณ , ์›์žฌ๋ฃŒ๋ฅผ ๊ตฌ๋งคํ•œ ๊ฑฐ๋ž˜์˜ ๊ฒฝ์šฐ, ํ™”ํ ์ˆ˜์ทจ์ž๋Š” Bob์ด๋‹ค.

ํ‘œ์ค€ํ™”ํ์˜ ๊ฒฝ์šฐ, ๋ฐœํ–‰๋œ ํ™”ํ(๋””์ง€ํ„ธ ์ง€ํ์™€ ์ฃผํ™”) ๊ฐ๊ฐ์ด ๊ณ ์œ ํ•œ IP์ฃผ์†Œ๋ฅผ ๊ฐ€์ง€๊ณ , ํŠน์ • ํ™”ํ์˜ IP ์ฃผ์†Œ์— ํ˜„์žฌ ์†Œ์œ ์ž ์ •๋ณด๊ฐ€ ํ‘œ์‹œ๋˜๋ฉฐ, ํŠน์ • ์‹œ์žฅ ์ฐธ์—ฌ์ž์˜ ํ†ต์žฅ์€ ๋ณด์œ  ํ™”ํ๋“ค์„ ํ–ฅํ•œ ํฌ์ธํ„ฐ(pointer)๋“ค์„ ๊ธฐ๋กํ•œ๋‹ค.

์•„๋ž˜ ๊ทธ๋ฆผ์„ ์ฐธ์กฐํ•˜์—ฌ, Alice๊ฐ€ ์ง€๋ถˆํ•œ 10 Yip์˜ IP ์ฃผ์†Œ๊ฐ€ 2001:0db8:85a3:0000:0000:8a2e:0370:7334, Bob์˜ ํ†ต์žฅ์—์„œ ์ƒ๊ธฐ ๊ฑฐ๋ž˜์˜ Hash๊ฐ€ 13CCt137Pd1q2TzSoVs2jLrSj2L545ercx๋ผ๋ฉด, ์ด IP ์ฃผ์†Œ์— ํ• ๋‹น๋œ ์›นํŽ˜์ด์ง€์— ์†Œ์œ ์ž๊ฐ€ ๋ฐ”๋€” ๋•Œ๋งˆ๋‹ค ์ƒˆ๋กœ์šด Hash ๊ฐ’์ด ์—ฐ์†์ ์œผ๋กœ ๊ธฐ๋ก๋œ๋‹ค. ๋”ฐ๋ผ์„œ, ํ™”ํ์˜ ์œ„๋ณ€์กฐ๋Š” ์‹œ์žฅ ์ฐธ์—ฌ์ž ๊ฐ๊ฐ์˜ ํ†ต์žฅ์„ ์œ„๋ณ€์กฐํ•ด์•ผ ํ•˜๊ณ , ์ „์„ธ๊ณ„ ๊ตญ๊ฐ€ ์ค‘ ์ ˆ๋ฐ˜ ์ด์ƒ์ด ๋‹ดํ•ฉํ•˜์ง€ ์•Š์œผ๋ฉด ๋ถˆ๊ฐ€๋Šฅํ•˜๋‹ค.

์ฃผ์†Œ

1.3 ๊ธฐ๋ก์ž์˜ ๊ณ„์ธต ๊ตฌ์กฐ

ํ‘œ์ค€ํ™”ํ์˜ ๊ฒฝ์šฐ, ๊ฑฐ๋ž˜๋Š” Gruturki ๋“ฑ์˜ ์žฅ๋ถ€ ๊ธฐ๋ก์ž์— ์˜ํ•ด ์‹ค์‹œ๊ฐ„์œผ๋กœ ๋ธ”๋ก์— ๋ฐ˜์˜๋˜๋ฉฐ, ์žฅ๋ถ€๋Š” ๊ณ„์ธต ๊ตฌ์กฐ๋กœ ์šด์˜๋œ๋‹ค.

  • ์ตœํ•˜๋‹จ ๋ธ”๋ก์ฒด์ธ์€ ์‹œ์žฅ ์ฐธ์—ฌ์ž ๊ฐ๊ฐ์˜ ํ†ต์žฅ์ด๋‹ค.
  • ๊ทธ ์œ„์— ๊ทธ๋ฃจํ„ฐ๊ธฐ ๋ธ”๋ก์ฒด์ธ์ด ์šด์˜๋œ๋‹ค.
  • ๊ทธ ์œ„์— ์ˆ˜ํ’€ ๋ธ”๋ก์ฒด์ธ์ด ์šด์˜๋œ๋‹ค.
  • ๊ทธ ์œ„์— ์˜จ๋ˆ„๋ฆฌ ๋ธ”๋ก์ฒด์ธ์ด ์šด์˜๋œ๋‹ค.

๋น„ํŠธ์ฝ”์ธ ๋“ฑ ์•”ํ˜ธ์ฆํ‘œ์˜ ๊ฒฝ์šฐ, UTXO ๋ฉ”์ปค๋‹ˆ์ฆ˜์„ ํ†ตํ•ด ์•„๋ž˜ ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•œ๋‹ค.

  • ์ง€๋ถˆ์ž๊ฐ€ ์ง€๋ถˆ ํ†ต์žฅ Bank book์„ ์†Œ์œ ํ•˜๊ณ  ์žˆ๋‹ค๋Š” ์ฆ๊ฑฐ.
  • ์ง€๋ถˆ์ž Bank book์— ๊ธฐ๋ก๋œ ํ™”ํ๋“ค ์ค‘ ์–ด๋–ค ๊ฒƒ์„ ์ง€์ถœํ•  ์ง€ ๊ฒฐ์ •ํ•˜๋Š” ๊ณผ์ •.
  • ์ˆ˜์ทจ์ž, ๋˜๋Š” ์†Œ์œ ๊ถŒ์„ ์ด์ „๋ฐ›์€ ์ƒˆ๋กœ์šด ์†Œ์œ ์ž๊ฐ€ ์ƒˆ๋กœ์šด ์†Œ์œ ๊ถŒ์„ ์ฃผ์žฅํ•  ๊ทผ๊ฑฐ.

ํ‘œ์ค€ํ™”ํ์˜ ํ•ด๊ฒฐ์ฑ…์€ ๋ธ”๋ก์ฒด์ธ ๊ณ„์ธต๊ตฌ์กฐ์ด๋‹ค.

  • ๊ฑฐ๋ž˜์— ์ฐธ์—ฌํ•˜๋Š” ๋‹น์‚ฌ์ž ๊ฐ๊ฐ์˜ ์ตœ์ข… Hash๊ฐ€ ํฌํ•จ๋œ ๊ฑฐ๋ž˜ ๋ช…์„ธ์„œ๋ฅผ ์ž‘์„ฑํ•œ๋‹ค.
  • ๋‹น์‚ฌ์ž ๋ชจ๋‘๊ฐ€ ์„œ๋ช…ํ•œ ๋’ค, ๊ทธ Hash๋ฅผ ๊ทธ๋ฃจํ„ฐ๊ธฐ ์„œ๋ฒ„ ๋˜๋Š” ์ƒ์œ„ ์„œ๋ฒ„์— ์ „๋‹ฌ๋œ๋‹ค.
  • ์„œ๋ฒ„๋Š” ์ „๋‹ฌ๋ฐ›์€ Hash๋ฅผ Openhash์— ์ถ”๊ฐ€ํ•œ๋‹ค.
  • ๊ฑฐ๋ž˜์— ์ฐธ์—ฌํ•œ ๋ชจ๋‘๊ฐ€ ๊ฐ์ž์˜ Ledger๋ฅผ ํ›„์ˆ ํ•˜๋Š” Neighbor Node์™€ ๊ฐ ๊ณ„์ธต๋ณ„ ์„œ๋ฒ„๋กœ ์ „์†กํ•จ์œผ๋กœ์จ, ๊ฑฐ๋ž˜๊ฐ€ ๊ธฐ๋ก๋œ๋‹ค.
  • Gossip Protocol๊ณผ ๊ณ„์ธต๋ณ„ ์„œ๋ฒ„ ์•Œ๊ณ ๋ฆฌ์ฆ˜์œผ๋กœ ํ‘œ์ค€ํ™”ํ์˜ ์œ„๋ณ€์กฐ๋ฅผ ๋ฐฉ์ง€ํ•œ๋‹ค.
money(){
const moneyUnit: MoneyUnit;
const address: IPv6Address;
let ownerKey: Key;
let receiverKey: Key;
let smartContract:SmartContract;
}

Digital key์™€ Digital Signature๋Š” ์ดํ•˜ 13. Digital keys, Yip addresses, and digital signatures ์—์„œ ์ž์„ธํžˆ ๋‹ค๋ฃฌ๋‹ค.

1.4 ๊ฑฐ๋ž˜ ์ˆ˜์ˆ˜๋ฃŒ

๋น„ํŠธ์ฝ”์ธ์˜ ๊ฑฐ๋ž˜ ์ˆ˜์ˆ˜๋ฃŒ(Transaction Fees)๋Š” Sybil Attack์„ ๋ฐฉ์ง€ํ•˜๋Š” ์ˆœ๊ธฐ๋Šฅ์ด ์žˆ์ง€๋งŒ, ํ‘œ์ค€ํ™”ํ๋Š” ๊ฑฐ๋ž˜ ์ˆ˜์ˆ˜๋ฃŒ๊ฐ€ ์—†๋‹ค. ๋Œ€์‹ , ๊ฐ๊ตญ์˜ ์„ธ๋ฒ•์— ์˜ํ•œ ์„ธ๊ธˆ์ด ๊ฑฐ๋ž˜ ์ˆ˜์ˆ˜๋ฃŒ๋ฅผ ๋Œ€์‹ ํ•œ๋‹ค. ๊ฐ€๋ น, ๊ฑฐ๋ž˜ ๊ธˆ์•ก์— 10%์˜ ๋ถ€๊ฐ€์„ธ๊ฐ€ ํฌํ•จ๋  ์ˆ˜ ์žˆ๋‹ค.

1.5 Locktime And Sequence Number

๋น„ํŠธ์ฝ”์ธ ๊ฑฐ๋ž˜๋Š” ๋น„๊ฐ€์—ญ์ (irreversible)์ด๋ฏ€๋กœ, ๊ฑฐ๋ž˜๋ฅผ ํ™•์ •ํ•  ๋•Œ๊นŒ์ง€ ์‹œ๊ฐ„์  ์—ฌ์œ ๋ฅผ ๋‘˜ ํ•„์š”๊ฐ€ ์žˆ๋‹ค. Locktime And Sequence Number์€ ์‹œ๊ฐ„์  ์—ฌ์œ ๋ฅผ ์ œ๊ณตํ•œ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜, ํ‘œ์ค€ํ™”ํ๋Š” ์ข…๋ž˜์˜ ์ƒ๊ฑฐ๋ž˜์™€ ๋™์ผํ•œ ๋ฉ”์ปค๋‹ˆ์ฆ˜์œผ๋กœ ํ™˜๋ถˆ ๊ทœ์ •๊ณผ ๋ถ„์Ÿ์ค‘์žฌ์œ„์›ํšŒ๋ฅผ ์šด์šฉํ•˜๊ณ , ๊ฑฐ๋ž˜ ๋‹น์‚ฌ์ž๊ฐ€ ๋น„๊ฐ€์—ญ์  ๊ฑฐ๋ž˜์™€ ๊ฐ€์—ญ์ (reversible) ๊ฑฐ๋ž˜๋ฅผ ์„ ํƒํ•  ์ˆ˜ ์žˆ์œผ๋ฏ€๋กœ, ๊ตณ์ด ๊ฑฐ๋ž˜์˜ ํ™•์ • ์‹œ์ ์„ ์œ ์˜ˆํ•  ํ•„์š”๊ฐ€ ์—†๋‹ค.

1.6 Locking Script and Unlocking Script

๋น„ํŠธ์ฝ”์ธ์˜ Script๋Š” ๋งค์šฐ ๊ฐ„๋‹จํ•œ ์Šคํฌ๋ฆฝํŠธ ์–ธ์–ด์ด๋‹ค(Forth-like reverse-polish notation stack-based execution language). ํ‘œ์ค€ํ™”ํ์˜ Script๋Š” JavaScript ๋ฐ ๊ทธ ํŒŒ์ƒ ์–ธ์–ด(TypeScript, Elm,CoffeeScript etc.)์ด๋‹ค.

ํ‘œ์ค€ํ™”ํ์— ๋ถ€์ฐฉ๋˜๋Š” Locking ๋ฐ Unlocking Script๋Š” ์ด์ „ ๋ธ”๋ก์ฒด์ธ๊ณผ ๋™์ผํ•˜๋‹ค. ํ—ˆ๊ฐ€๋˜์ง€ ์•Š์€ ํ™”ํ ์‚ฌ์šฉ์„ ์ œ์•ฝํ•˜๋Š” Locking Script๋Š” scriptPubKey( ๋˜๋Š” pubkey script ๋˜๋Š” witness script ๋˜๋Š” cryptographic puzzle)๋ผ ๋ถˆ๋ฆฌ๋ฉฐ, output์— ๋ถ€์ฐฉ๋œ๋‹ค. ์ดํ›„, ์ด output์„ ์ˆ˜์ทจํ•œ ์ƒˆ๋กœ์šด ํ™”ํ ์†Œ์œ ์ž๊ฐ€ ํ•ด๋‹น ํ™”ํ๋ฅผ ์ง€์ถœํ•˜๋ ค๋ฉด, ์ด์ „ ์†Œ์œ ์ž๊ฐ€ ํ•ด๋‹น ํ™”ํ์— ๋ถ€์ฐฉํ•œ cryptographic puzzle์„ ํ’€์–ด์•ผ ํ•œ๋‹ค. ํผ์ฆ์„ ํ’€๋ฉด, ํ•ด๋‹น ํ™”ํ๋Š” ์ง€์ถœ ๊ฐ€๋Šฅํ•œ ์ƒํƒœ๋กœ ์ „ํ™˜ํ•œ๋‹ค. Unlocking Script(๋˜๋Š” Signature scripts ๋˜๋Š” scriptSig ๋˜๋Š” witness)๋Š” ํผ์ฆ์„ ํ‘ธ๋Š” ์ž‘์—…์„ ์ˆ˜ํ–‰ํ•œ๋‹ค.

์ด์ „ ๋ธ”๋ก์ฒด์ธ๊ณผ ๋‹ฌ๋ฆฌ, ํ‘œ์ค€ํ™”ํ๋กœ ๊ตฌ๋งคํ•˜๋Š” ์ž์‚ฐ์—๋„ ๋™์ผํ•œ Locking ๋ฐ Unlocking ์•Œ๊ณ ๋ฆฌ์ฆ˜์ด ์ ์šฉ๋œ๋‹ค. ๊ฐ€๋ น, ํ‘œ์ค€ํ™”ํ 100 Yip์œผ๋กœ ์ œ์ฃผ๋„ ํ•œ๊ฒฝ๋ฉด์— ์†Œ์žฌํ•œ ์ž„์•ผ 100 ํ‰๋ฐฉ๋ฏธํ„ฐ๋ฅผ ๊ตฌ๋งคํ–ˆ๋‹ค๋ฉด, ํ•ด๋‹น ์ž„์•ผ์˜ ์†Œ์œ ์ž ๋ณ€๊ฒฝ ๊ณผ์ •๋„ Locking ๋ฐ Unlocking ์•Œ๊ณ ๋ฆฌ์ฆ˜์— ์˜ํ•œ๋‹ค. ๋”ฐ๋ผ์„œ, ๋ณ„๋„์˜ ๋“ฑ๊ธฐ๋ถ€๋“ฑ๋ณธ์ด๋‚˜ ๋ฒ•์› ๋“ฑ๊ธฐ ์ ˆ์ฐจ๊ฐ€ ํ•„์š”ํ•˜์ง€ ์•Š๋‹ค.

1.7 m-of-n pubkey script

์ด์ „ ๋ธ”๋ก์ฒด์ธ๊ณผ ๋งˆ์ฐฌ๊ฐ€์ง€๋กœ, n๊ฐœ์˜ pubkey๋“ค ์ค‘์—์„œ m๊ฐœ์˜ ๋™์˜๊ฐ€ ์žˆ์„ ๋•Œ, ์ง€์ถœํ•  ์ˆ˜ ์žˆ๋„๋ก ์ œํ•œ์„ ๊ฐ€ํ•˜๋Š” Output ๋ฐฉ์‹์ด๋‹ค.

์ด์ „ ๋ธ”๋ก์ฒด์ธ๊ณผ ๋‹ฌ๋ฆฌ, ํ‘œ์ค€ํ™”ํ๋ฅผ ๊ฒฐ์ œ ์ˆ˜๋‹จ์œผ๋กœํ•˜๋Š” ๋ชจ๋“  ๊ฑฐ๋ž˜๋Š” m-of-n ๊ฑฐ๋ž˜์ด๋ฉฐ, ๋ชจ๋“  ๊ฑฐ๋ž˜ ๋‹น์‚ฌ์ž์˜ ์„œ๋ช…์„ ์š”๊ตฌํ•œ๋‹ค. ์„œ๋ช…์€ ํ™”ํ ๋ฟ ์•„๋‹ˆ๋ผ, ํ™”ํ์™€ ๊ตํ™˜๋˜๋Š” ์žฌํ™”์™€ ์„œ๋น„์Šค์˜ ์ƒˆ๋กœ์šด ์†Œ์œ ์ž๊ฐ€ ๊ทธ ์†Œ์œ ๊ถŒ์„ ์ฃผ์žฅํ•  ๊ฐ๊ด€์  ๊ทผ๊ฑฐ์ด๋‹ค.

multiSig(){
}

1.8 Escrow And Arbitration

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

safeTx(){ }

1.9 ๊ฑฐ๋ž˜์˜ ์ต๋ช…์„ฑ

์˜› ๋ธ”๋ก์ฒด์ธ์˜ ๊ฒฝ์šฐ, ๋ชจ๋“  ๊ฑฐ๋ž˜๋Š” ์•”ํ˜ธํ™”๋˜์ง€ ์•Š์€ ์ƒํƒœ๋กœ ๋ธ”๋ก์— ๊ธฐ๋ก๋˜๋ฉฐ, CoinJoin ๋ฉ”์ปค๋‹ˆ์ฆ˜์œผ๋กœ ์ต๋ช… ๊ฑฐ๋ž˜๋ฅผ ๋„๋ชจํ•œ๋‹ค. ํ‘œ์ค€ํ™”ํ์˜ ๊ฒฝ์šฐ, ๋ชจ๋“  ๊ฑฐ๋ž˜๊ฐ€ ์•”ํ˜ธํ™”๋˜๋ฏ€๋กœ, ๊ฐœ์ธ ์ •๋ณด๋ฅผ ๋…ธ์ถœํ•˜์ง€ ์•Š๊ธฐ ์œ„ํ•œ ๋ณ„๋„์˜ ๋ฉ”์ปค๋‹ˆ์ฆ˜์ด ํ•„์š”ํ•˜์ง€ ์•Š๋‹ค.

์•”ํ˜ธํ™”๋œ ๊ฑฐ๋ž˜ ์ •๋ณด๋Š” ๋ฒ•๊ณผ ๊ทœ์น™์— ๋”ฐ๋ฅธ ๊ถŒํ•œ์žˆ๋Š” ๊ธฐ๊ด€ ๋˜๋Š” ๊ฐœ์ธ์—๊ฒŒ ์ œ๊ณต๋œ๋‹ค. ๋ฒ•๊ณผ ๊ทœ์น™์€ ์‹œ๋ฏผ์˜ ์ง‘๋‹จ์  ์˜์‚ฌ์— ์˜ํ•œ๋‹ค. ์‹œ๋ฏผ์˜ ์˜์‚ฌ๋ฅผ ์ฒด๊ณ„์ ์œผ๋กœ ์ˆ˜์ง‘ํ•˜๋Š” ์•Œ๊ณ ๋ฆฌ์ฆ˜์€ ๋ฏผ์ฃผ์ฃผ์˜์ด๋‹ค.

ํŠน์ • ๊ธฐ๊ด€์ด๋‚˜ ๊ฐœ์ธ์ด ํŠน์ • ์ •๋ณด๋ฅผ ์—ด๋žŒํ•  ๋ฒ•์  ๊ถŒํ•œ์ด ์žˆ๋Š” ์ง€ ์—ฌ๋ถ€๋Š” ๋ฒ•์› ๋˜๋Š” AI ๋ชจ๋“ˆ์— ์˜ํ•˜๋ฉด, ์ƒ์„ธํ•œ ๊ณผ์ •๊ณผ ์ ˆ์ฐจ๋Š” AI ํ•ญ๋ชฉ์—์„œ ๊ธฐ์ˆ ํ•œ๋‹ค.

1.10 ์ „์ž ์ง€๊ฐ‘ Wallets

์˜› ๋ธ”๋ก์ฒด์ธ์˜ ๊ฒฝ์šฐ, Public Key๋ฅผ ๋ณ€์กฐํ•œ Coin Address๋กœ ๋ˆ์„ ๋ฐ›์œผ๋ฉฐ, Public-private key์˜ ์กฐํ•ฉ์œผ๋กœ ์ง€์ถœ์„ ์Šน์ธํ•œ๋‹ค. ํ‘œ์ค€ํ™”ํ์˜ ์ „์ž์ง€๊ฐ‘์€ ์€ํ–‰ ํ†ต์žฅ๊ณผ ๋™์ผํ•˜๋ฉฐ, ๊ณ ์œ ํ•œ IP ์ฃผ์†Œ๋ฅผ ๊ฐ–๋Š”๋‹ค. ๊ฐœ์ธ ์ •๋ณด์˜ ๋…ธ์ถœ์„ ํ”ผํ•˜๊ธฐ ์œ„ํ•ด, IP ์ฃผ์†Œ๋ฅผ ์‚ฌ์ „(dictionary)์˜ ๋‹จ์–ด๋กœ ์น˜ํ™˜ํ•˜์—ฌ, ์ž…๊ธˆ์ž ๋˜๋Š” ๊ฒฐ์ œ์ž์—๊ฒŒ ์ œ์‹œํ•  ์ˆ˜ ์žˆ๋‹ค.

ํ†ต์žฅ์€ ๋ณด์œ  ํ™”ํ ๊ฐ๊ฐ์— ๋Œ€ํ•œ ํฌ์ธํ„ฐ ๋ณ€์ˆ˜(pointers)๋ฅผ ๊ธฐ๋กํ•œ๋‹ค. ํŠน์ • ๋””์ง€ํ„ธ ํ™”ํ๋ฅผ ์ง€์ถœํ•˜๋ฉด, ํ•ด๋‹น ํ™”ํ๋ฅผ ๊ฐ€๋ฆฌํ‚ค๋Š” ํฌ์ธํ„ฐ๊ฐ€ ์‚ญ์ œ๋œ๋‹ค. ์–ด๋Š ํ•œ ํ†ต์žฅ์—์„œ ์–ด๋Š ํ•œ ๋””์ง€ํ„ธ ํ™”ํ๋ฅผ ํ–ฅํ•œ ํฌ์ธํ„ฐ๊ฐ€ ์‚ญ์ œ๋  ๋•Œ, ๋ฐ˜๋“œ์‹œ ํ•ด๋‹น ํ™”ํ์— ๋Œ€ํ•œ ํฌ์ธํ„ฐ๋ฅผ ๊ธฐ๋กํ•œ ์ƒˆ๋กœ์šด ํ†ต์žฅ์ด ๋‚˜ํƒ€๋‚œ๋‹ค. ๋””์ง€ํ„ธ ํ™”ํ ๊ฐ๊ฐ์€ ๊ณ ์œ ํ•œ IP ์ฃผ์†Œ๋ฅผ ๊ฐ€์ง€๋ฉฐ, ํ•ด๋‹น ์ฃผ์†Œ์— ํ• ๋‹น๋œ ์›น ํŽ˜์ด์ง€ ํ˜น์€ ์›น DB๋Š” ํ•ด๋‹น ํ™”ํ์˜ ํ˜„์žฌ ์†Œ์œ ์ž๋ฅผ ๊ฐ€๋ฆฌํ‚ค๋Š” ํฌ์ธํ„ฐ๊ฐ€ ๊ธฐ๋ก๋œ๋‹ค.

bankBook(){
}

1.11 Private Key

๋ธ”๋ก์ฒด์ธ 1~3์„ธ๋Œ€๋Š” Random์œผ๋กœ ์ˆซ์ž๋ฅผ ์ƒ์„ฑํ•˜์—ฌ Private Key๋ฅผ ๊ตฌ์„ฑํ•œ๋‹ค.

full service wallet

ํ‘œ์ค€ํ™”ํ ํ”Œ๋žซํผ์—์„œ Private Key๋Š” ์•„๋ž˜ ๋‹ค์„ฏ ๋ฐฉ๋ฒ•์˜ ์กฐํ•ฉ์œผ๋กœ ์ƒ์„ฑํ•  ์ˆ˜ ์žˆ๋‹ค.

  • ์ง€๋ฌธ
  • ํ™์ฑ„
  • ๋ชฉ์†Œ๋ฆฌ
  • ํ•„๊ธฐ์ฒด ์„œ๋ช…
  • ์•„์ด๋””์™€ ๋น„๋ฐ€๋ฒˆํ˜ธ

๋”ฐ๋ผ์„œ, ์•”ํ˜ธ์ฆํ‘œ์™€ ๋‹ฌ๋ฆฌ, ํ‘œ์ค€ํ™”ํ๋Š” ๋ถ„์‹ค๊ณผ ๋„๋‚œ์ด ์—†๋‹ค.

์ข…๋ž˜์˜ ์€ํ–‰ ์‹œ์Šคํ…œ๊ณผ ๋‹ฌ๋ฆฌ, ์‹œ์žฅ ์ฐธ์—ฌ์ž ๊ฐ๊ฐ์˜ Private Key๋ฅผ ์ €์žฅํ•œ ์„œ๋ฒ„๊ฐ€ ์—†๋‹ค๋Š” ์ ์— ์ฃผ๋ชฉํ•  ํ•„์š”๊ฐ€ ์žˆ๋‹ค. ํ‘œ์ค€ํ™”ํ ์‹œ์Šค์ณ„์—์„œ Private Key์˜ ์ง„์œ„ ์—ฌ๋ถ€๋Š” ์ข…๋ž˜์˜ ๋ธ”๋ก์ฒด์ธ๊ณผ ๋™์ผํ•œ ์•Œ๊ณ ๋ฆฌ์ฆ˜์ด ์ ์šฉ๋œ๋‹ค.

generatePrivateKey(){
}

1.12 ์ง€๋ถˆ Payment ๋ณด๋‹ค๋Š” ๊ตํ™˜ Exchange

์˜› ๋ธ”๋ก์ฒด์ธ๊ณผ ๋งˆ์ฐฌ๊ฐ€์ง€๋กœ, Transaction Protocol๊ณผ ๊ด€๋ จํ•˜์—ฌ, X.509 certificates๊ณผ SSL encryption์„ ์ด์šฉํ•œ๋‹ค. ํ‘œ์ค€ํ™”ํ์˜ ํŠน์ง•์€ QR ์ฝ”๋“œ ๋Œ€์‹ ์— ์ƒ‰์ƒ ์ฝ”๋“œ๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ์ ์ด๋‹ค(### 8. ์ธ์ฆ ํ•ญ๋ชฉ์—์„œ ์ž์„ธํžˆ ์„ค๋ช…ํ•œ๋‹ค).

์˜› ๋ธ”๋ก์ฒด์ธ๊ณผ ๋‹ฌ๋ฆฌ, ํ‘œ์ค€ํ™”ํ ํ”Œ๋žซํผ์€ ํ™”ํ์˜ ํ๋ฆ„ ๋ฟ ์•„๋‹ˆ๋ผ, ์žฌํ™”์™€ ์„œ๋น„์Šค์˜ ํ๋ฆ„๋„ ๊ฐ™์€ ๋น„์ค‘์œผ๋กœ ๊ธฐ๋กํ•˜๋Š” ์ ์— ์ฃผ๋ชฉํ•ด์•ผ ํ•œ๋‹ค. ๋”ฐ๋ผ์„œ, ์ง€๋ถˆ ๋งค์ปค๋‹ˆ์ฆ˜์ด ์•„๋‹ˆ๋ผ, ๊ตํ™˜ ๋ฉ”์ปค๋‹ˆ์ฆ˜์ด๋‹ค. ์˜› ๋ธ”๋ก์ฒด์ธ์˜ Payment๋ณด๋‹ค CoinJoin ๋ฉ”์ปค๋‹ˆ์ฆ˜์ด ํ‘œ์ค€ํ™”ํ์˜ ๊ฑฐ๋ž˜์— ๋” ๊ฐ€๊น๋‹ค.

๊ฑฐ๋ž˜(transaction)๊ฐ€ ๋ฐœ์ƒํ•˜๋ฉด, ์•„๋ž˜ ์ •๋ณด๊ฐ€ ํฌํ•จ๋œ ๋ช…์„ธ์„œ์™€ ๋‹น์‚ฌ์ž๋“ค์˜ ์„œ๋ช…, ๊ทธ๋ฆฌ๊ณ  ๊ฐ ๋‹น์‚ฌ์ž์˜ ํ†ต์žฅ์— ๊ธฐ๋ก๋œ ์ตœ์ข… Hash๋ฅผ ํ•˜๋‚˜์˜ ๋ฐ์ดํ„ฐ ๋ญ‰์น˜๋กœ ํ•˜์—ฌ, ๊ทธ๋กœ๋ถ€ํ„ฐ ์ƒˆ๋กœ์šด Hash๋ฅผ ๋„์ถœํ•œ๋‹ค. ์ƒˆ๋กœ์šด Hash๋Š” ๋‹น์‚ฌ์ž ๊ฐ๊ฐ์˜ ์ตœ์ข… Hash๋กœ ์ƒˆ๋กœ์ด ๊ธฐ๋ก๋˜๋ฉฐ, ๋˜ํ•œ Book keeper๋ฅผ ํฌํ•จํ•˜๋Š” peer-to-peer node๋“ค๋กœ ์ „ํŒŒ๋œ๋‹ค(Gossip Protocol).

๋ฐ์ดํ„ฐ ๋ญ‰์น˜๋Š” ๋‹ค์Œ ์ •๋ณด๋ฅผ ํฌํ•จํ•œ๋‹ค.

  • ๊ฑฐ๋ž˜์— ์ฐธ์—ฌํ•˜๋Š” ๋‹น์‚ฌ์ž๋“ค ๊ฐ๊ฐ์˜ ๊ณ ์œ ํ•œ ID
  • ๊ฐ ๋‹น์‚ฌ์ž๋“ค์ด ์ œ๊ณตํ•˜๋Š” ๊ฐ€์น˜(์žฌํ™”, ์„œ๋น„์Šค, ๊ตญ์ ํ™”ํ, ํ‘œ์ค€ํ™”ํ ๋“ฑ)
  • ๊ฐ€์น˜์˜ ๋ถ„ํ•  ๋˜๋Š” ๊ท€์† ๋Œ€์ƒ
  • ๋‹น์‚ฌ์ž ๊ฐ๊ฐ์˜ ์„œ๋ช…
  • ๋‹น์‚ฌ์ž ๊ฐ๊ฐ์˜ ํ†ต์žฅ์— ๊ธฐ๋ก๋œ ์ตœ์ข… Hash

1.12.1 ํ™”ํ์™€ ํ™”ํ์˜ ๊ตํ™˜

ํ‘œ์ค€ํ™”ํ์™€ ๊ตญ์ ํ†ตํ™”(Fiat)์˜ ๊ตํ™˜์ด ๋Œ€ํ‘œ์ ์ด๋‹ค.

currencyExhange(){
}

1.12.2 ํ™”ํ์™€ ์ƒํ’ˆ์˜ ๊ตํ™˜

ํ†ต์ƒ์ ์ธ ์ƒ๊ฑฐ๋ž˜์ด๋‹ค.

eCommerce(){
}

1.12.3 ์ƒํ’ˆ๊ณผ ์ƒํ’ˆ์˜ ๊ตํ™˜

๋ฌผ๋ฌผ๊ตํ™˜์ด๋‹ค.

barter(){
}

1.13 Forex Risk

์•”ํ˜ธ์ฆํ‘œ์˜ ๊ฒฝ์šฐ, ์ฝ”์ธ ๊ฐ€๊ฒฉ ํ•˜๋ฝ์ด ์˜ˆ์ƒ๋˜๋ฉด, ์ฝ”์ธ ๋ณด์œ ์ž๋Š” ์‹ ์†ํžˆ ์ฝ”์ธ์„ ์“ฐ๋ ค ํ•  ๊ฒƒ์ด๊ณ , ์ƒํ’ˆ ํŒ๋งค์ž๋Š” ์ฝ”์ธ ๊ฒฐ์ œ๋ฅผ ๊บผ๋ คํ•  ๊ฒƒ์ด๋‹ค. ๋ฐ˜๋Œ€๋กœ, ๊ฐ€๊ฒฉ ์ƒ์Šน์ด ์˜ˆ์ƒ๋˜๋ฉด, ์ฝ”์ธ ๋ณด์œ ์ž๋Š” ์•ˆ์“ธ ๊ฒƒ์ด๋‹ค. ์–ด๋–ค ๊ฒฝ์šฐ์—๋„, ์ฝ”์ธ์€ ๊ฒฐ์ œ ์ˆ˜๋‹จ์œผ๋กœ์จ ์—ญํ• ํ•˜์ง€ ๋ชปํ•œ๋‹ค.

๊ทธ ์™ธ์—๋„ ์˜› ๋ธ”๋ก์ฒด์ธ์€ ์„ค๊ณ„ ์ƒ์˜ ๋‹จ์ ์ด ์žˆ๋‹ค. ๊ฑฐ๋ž˜ ์ƒ๋Œ€๋ฐฉ์˜ ์ž๊ธˆ ํ๋ฆ„์„ ์ถ”์ ํ•  ์ˆ˜ ์žˆ๊ณ , Double Spending์˜ ์œ„ํ—˜๋„ ๊ทธ ์ค‘ ํ•˜๋‚˜์ด๋‹ค. ๋ฌผ๋ก , ๊ทธ์— ๋Œ€ํ•œ ๋‚˜๋ฆ„์˜ ์ฒ˜๋ฐฉ๋„ ์žˆ๋‹ค.

  • Merge Avoidance: ์ž๊ธˆ ์ถ”์ ์„ ํ”ผํ•˜๋Š” ๋ฐฉ๋ฒ•
  • Last In, First Out (LIFO): Double Spending์˜ ์œ„ํ—˜์„ ํƒ€์ธ์—๊ฒŒ ์ „๊ฐ€
  • First In, First Out (FIFO): Double Spending์˜ ์œ„ํ—˜์„ ๋ณธ์ธ์ด ๊ฐ์ˆ˜

ํ‘œ์ค€ํ™”ํ๋Š” ๊ทธ ๊ฐ€์น˜๊ฐ€ ๊ฐ๊ตญ์˜ ๊ตญ์  ํ†ตํ™”์— ์—ฐ๋™๋˜๋ฏ€๋กœ, ์‹ ์†ํžˆ ์†Œ๋น„ํ•  ์ด์œ ๋„, ์“ฐ์ง€ ์•Š์„ ์ด์œ ๋„ ์—†๋‹ค. ๊ทธ๋Ÿฌ๋‚˜, ๊ตญ์  ํ†ตํ™”๋“ค ๊ฐ„์˜ ๊ตํ™˜๋น„ ๋ณ€๋™ ์œ„ํ—˜, ํ˜น์€ ํ™˜ ์œ„ํ—˜(Forex Risk)์ด ์ƒˆ๋กœ์ด ์ด์Šˆ๊ฐ€ ๋  ์ˆ˜ ์žˆ๋‹ค. ๊ฐ€๋ น, ํ•œ๊ตญ ์›ํ™”์™€ ํ‘œ์ค€ํ†ตํ™” ๊ฐ„์˜ ๊ตํ™˜๋น„๊ฐ€ 1,000:1๋กœ ๊ณ ์ •๋œ ์ƒํƒœ๋ฅผ ๊ฐ€์ •ํ•˜์ž. ์™ธํ™˜ ์‹œ์žฅ์—์„œ ์›ํ™”์˜ ๊ฐ€์น˜๊ฐ€ ์ƒ์Šนํ•˜๊ฑฐ๋‚˜ ํ•˜๋ฝํ•  ๋•Œ, ํ‘œ์ค€ํ†ตํ™”๊ฐ€ ๊ณผ๋Œ€ ํ‰๊ฐ€(Over estimate)๋˜๊ฑฐ๋‚˜ ๊ณผ์†Œ ํ‰๊ฐ€(Under estimate)๋œ๋‹ค. ๋”ฐ๋ผ์„œ, ๊ฐ ๊ตญ์  ํ†ตํ™”์™€ ํ‘œ์ค€ํ™”ํ ๊ฐ„์˜ ๊ตํ™˜๋น„๋Š” ๊ณ ์ •๋  ์ˆ˜ ์—†๋‹ค.

๊ตญ์  ํ†ตํ™”์™€ ํ‘œ์ค€ํ†ตํ™” ๊ฐ„์˜ ๊ตํ™˜๋น„๊ฐ€ ๋ณ€๋™ํ•œ๋‹ค๋ฉด, ๊ฐ ์ฃผ๊ถŒ ๊ตญ๊ฐ€์˜ ํ†ตํ™” ์ •์ฑ…(Monetary Policy)์ด ๋ฌด์˜๋ฏธํ•ด์ง€๋Š” ๋ฌธ์ œ๊ฐ€ ๋ฐœ์ƒํ•œ๋‹ค. ํ‘œ์ค€ํ†ตํ™”์™€ ๊ตญ์ ํ†ตํ™” ๊ฐ„์˜ ๊ตํ™˜๋น„๋ฅผ ๊ณ ์ •ํ•œ๋‹ค. ๋”ฐ๋ผ์„œ, ํ‘œ์ค€ํ†ตํ™” ์—ญ์‹œ ๋ฐœํ–‰๊ตญ๊ฐ€์˜ ๊ตญ์ ์„ ๊ฐ€์ง„๋‹ค. ๋ฐœํ–‰๊ตญ๊ฐ€ ์™ธ์˜ ๊ตญ๊ฐ€์—์„œ ํ‘œ์ค€ํ†ตํ™”๋ฅผ ์‚ฌ์šฉํ•  ๋•Œ๋Š” ๋ฐœํ–‰๊ตญ๊ฐ€์™€ ์‚ฌ์šฉ๊ตญ๊ฐ€ ๊ฐ„์˜ ํ™˜์œจ์— ์‚ฌ์šฉ๊ตญ๊ฐ€์˜ ํ‘œ์ค€ํ†ตํ™”๋ฅผ ๊ตฌ๋งคํ•˜์—ฌ ์‚ฌ์šฉํ•˜๋Š” ๋ฐฉ์‹์ด ์ ์šฉ๋œ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜, ํ™˜์ „์ด๋‚˜ ์†ก๊ธˆ ์ˆ˜์ˆ˜๋ฃŒ๊ฐ€ ์—†๋‹ค๋Š” ์ ์ด ๊ธฐ์กด์˜ ๊ตญ์  ํ™”ํ ๋ฐ ์€ํ–‰ ์‹œ์Šคํ…œ๊ณผ ๋‹ค๋ฅด๋‹ค.

ํŠน์ • ๊ตญ๊ฐ€์˜ ๊ตญ์ ํ†ตํ™”์— ์—ฐ๋™๋˜์ง€ ์•Š๋Š” ํ‘œ์ค€ํ†ตํ™”๋Š” ํ›„์ˆ ํ•˜๋Š” **์—ด๋งค(Yeolmae)**๋กœ ์ œ๊ณต๋œ๋‹ค. ์—ด๋งค๋Š” ๋‹ค๊ตญ์  ๊ธฐ์—…์˜ ์ฃผ๊ฐ€์™€ ๋งˆ์ฐฌ๊ฐ€์ง€๋กœ, (1) ๊ทธ ๊ฐ€์น˜๊ฐ€ ํŠน์ • ๊ตญ๊ฐ€์˜ ๊ตญ์ ํ†ตํ™”์— ์—ฐ๋™๋˜์ง€ ์•Š๊ณ , (2) ๊ฐ€์น˜ ๋ณ€ํ™” ๋˜๋Š” ๊ฐ€๊ฒฉ ๋ณ€๋™์ด ์ƒ๋Œ€์ ์œผ๋กœ ํฌ๋‹ค. ์—ด๋งค๋Š” 12ํ•ญ์—์„œ ์ž์„ธํžˆ ๋‹ค๋ฃฌ๋‹ค.

1.14 Operating Modes

Simplified Payment Verification (SPV)

1.15 ์ „ํŒŒ Propagation

์ƒˆ๋กœ์šด ์ฐธ์—ฌ์ž์˜ ์กด์žฌ๋ฅผ peer-to-peer ๋„คํŠธ์›Œํฌ์˜ ์—ฌํƒ€ ์ฐธ์—ฌ์ž๋“ค์—๊ฒŒ ์ „ํŒŒํ•˜๋Š” ๋ฐฉ๋ฒ•์œผ๋กœ ๋ธ”๋ก์ฒด์ธ์€ ์—ฐ๊ฒฐ๋œ ๋…ธ๋“œ node๋“ค ๊ฐ„์— ์ƒˆ๋กœ์šด ์ •๋ณด๋ฅผ ์ „๋‹ฌํ•˜๋Š” flooding ๋ฉ”์ปค๋‹ˆ์ฆ˜์„ ์ด์šฉํ•œ๋‹ค. ์ด๋ก ์ ์œผ๋กœ๋Š” ์ˆ˜ ์ดˆ ์ด๋‚ด์— ์–ด๋Š ํ•œ ๋…ธ๋“œ์˜ ์ •๋ณด๊ฐ€ ๋„คํŠธ์›Œํฌ์— ์ฐธ์—ฌํ•˜๋Š” ๋ชจ๋“  ๋…ธ๋“œ๋กœ ์ „ํŒŒ๋˜์–ด์•ผ ํ•˜๋‚˜, ํ˜„์‹ค์ ์œผ๋กœ๋Š” ๋ถˆ๊ฐ€๋Šฅํ•˜๋‹ค. ๊ฐ€๋ น, ์„ธ๊ณ„ ์ธ๊ตฌ์˜ ์ ˆ๋ฐ˜์ด peer-to-peer ๋„คํŠธ์›Œํฌ์— ์ฐธ์—ฌํ•˜๋Š” ๊ฒฝ์šฐ๋ฅผ ์ƒ์ •ํ•˜์—ฌ, ์–ด๋Š ํ•œ ๋…ธ๋“œ์˜ ๊ฑฐ๋ž˜ ์ •๋ณด๊ฐ€ ์ˆ˜ ์ดˆ ๋‚ด์— ๋ชจ๋“  ๋…ธ๋“œ์— ์ „ํŒŒ๋˜๋ ค๋ฉด, ๋ชจ๋“  ๋…ธ๋“œ๊ฐ€ ๋ชจ๋“  ๋…ธ๋“œ์— ๋Œ€ํ•œ ์ •๋ณด๋ฅผ ํš๋“ํ•ด์•ผ ํ•˜๋ฉฐ, ๊ทธ๋Ÿฌ๊ธฐ ์œ„ํ•ด์„œ๋Š” ๋ชจ๋“  ์ฐธ์—ฌ์ž์˜ ์Šค๋งˆํŠธํฐ๊ณผ PC์˜ ์šฉ๋Ÿ‰์ด ์ˆ˜๋ฐฑ ํ…Œ๋ผ๋ฐ”์ดํŠธ์ด๊ณ (Full-node clients), ๋ชจ๋“  ๋…ธ๋“œ๊ฐ€ ์ดˆ๋‹น ์ˆ˜๋ฐฑ ๊ธฐ๊ฐ€ ๋ฐ”์ดํŠธ์˜ ์ธํ„ฐ๋„ท ๋Œ€์—ญํญ์„ ๊ฐ€์ ธ์•ผ ํ•˜๋ฉฐ, ํ‰๊ท  ํฌ๊ธฐ์˜ ์›์ž๋ ฅ ๋ฐœ์ „์†Œ 1,000๊ฐœ ์ด์ƒ์˜ ์ „๋ ฅ์„ ์†Œ๋น„ํ•ด์•ผ ํ•œ๋‹ค.

ํ‘œ์ค€ํ™”ํ ํ”Œ๋žซํผ์€ ํ›„์ˆ ํ•˜๋Š” ๊ณ„์ธต์  ์„œ๋ฒ„ ์•Œ๊ณ ๋ฆฌ์ฆ˜์„ ์ œ์‹œํ•˜๋Š”๋ฐ, ์–ด๋Š ํ•œ ๋…ธ๋“œ๋Š” ์ž์‹ ์ด ์†Œ์†๋œ ์ง€์—ญ์˜ ์„œ๋ฒ„์™€ ํ•ด๋‹น ์ง€์—ญ์˜ neighbor nodes์— ๊ฑฐ๋ž˜ ์ •๋ณด๋ฅผ ์ „์†กํ•˜๋Š” ๊ฒƒ์œผ๋กœ ์ „ํŒŒ ๊ณผ์ •์ด ์ข…๊ฒฐ๋œ๋‹ค. ์ „์ž๋Š” IPv6 ํ”„๋กœํ† ์ฝœ, ํ›„์ž๋Š” Gossip Protocol์— ์˜ํ•œ๋‹ค.

propogateTxn(txn: Transaction){
// Inform Gruturki server of the transaction.
Const gruturkiServer: IPv6Address;
httpRequest(gruturkiServer, txn);

// Gossip the transaction.
gossip(txn);
}

1. 16 ์ฐธ์—ฌ์ž

ํ™”ํ๋ฅผ ์†Œ์œ ํ•˜๊ฑฐ๋‚˜, ๊ทธ ์†Œ์œ ๊ถŒ์„ ์ด์ „ํ•  ๊ถŒํ•œ์„ ๊ฐ–๋Š” ์ž์—ฐ์ธ๊ณผ ๋ฒ•์ธ์ด๋‹ค.

์ง€ํ‘œ๋ฉด ์ƒ์˜ ์–ด๋Š ํ•œ ์ง€์ ์€ ํ•˜๋‚˜์˜, ๊ผญ ํ•˜๋‚˜์˜ ๊ทธ๋ฃจํ„ฐ๊ธฐ์— ์†ํ•˜๋ฉฐ, ์–ด๋Š ํ•œ ์ฐธ์—ฌ์ž๋Š” ํ•˜๋‚˜์˜, ๊ผญ ํ•˜๋‚˜์˜ ์ฃผ์†Œ์ง€ ์„œ๋ฒ„์— ๋“ฑ๋ก๋˜๊ณ , ์ฃผ์†Œ์ง€ ์„œ๋ฒ„๋Š” ํ•˜๋‚˜์˜, ๊ผญ ํ•˜๋‚˜์˜ ๊ทธ๋ฃจํ„ฐ๊ธฐ๋ฅผ ๋Œ€ํ‘œํ•œ๋‹ค.

์ž์—ฐ์ธ ๋˜๋Š” ๋ฒ•์ธ์€ ์›น์„ ํ†ตํ•ด ํ‘œ์ค€ํ™”ํ ํ”Œ๋žซํผ SCP - Standard Cryptocurrency Platform์— ๊ฐ€์ž…ํ•œ๋‹ค. ํ”Œ๋žซํผ์€ ๊ทธ/๊ทธ๋…€์˜ ๋™์˜๋ฅผ ์–ป์€ ํ›„, ์ด๋ฆ„, ์ฃผ์†Œ, ํœด๋Œ€ํฐ ๋ฒˆํ˜ธ๋ฅผ ํฌํ•จํ•˜๋Š” ๊ฐœ์ธ์ •๋ณด๋ฅผ ํš๋“ํ•œ๋‹ค. ์ฐธ์—ฌ์ž์˜ PC ๋˜๋Š” ์Šค๋งˆํŠธํฐ์— ์„ค์น˜๋˜๊ฑฐ๋‚˜, WebApp์˜ ํ˜•์‹์œผ๋กœ ์ œ๊ณต๋˜๋Š” ์ „์ž์ง€๊ฐ‘ ๊ฐ€์ง€ Gaji๋ฅผ ์ดˆ๊ธฐํ™”ํ•œ๋‹ค.

  • ๊ฐœ์ธ ์ •๋ณด๋ฅผ ์ธ์ถœํ•œ ๋’ค, ์•”ํ˜ธํ™”ํ•˜์—ฌ,
  • ์ฃผ์†Œ์ง€ ์„œ๋ฒ„๋ฅผ ๊ฒฐ์ •ํ•˜๊ณ , ํ•ด๋‹น ์„œ๋ฒ„์˜ DB์— ์ฐธ์—ฌ์ž๋ฅผ ๋“ฑ๋กํ•œ๋‹ค.
// Connect to the SCP website via a smartphone**.
// When a user touches Register Button

register() {
 //Obtain user permission
 const permission: Permission = askPermission();
 
 // Store personalData
 const personalData: PersonalData = obtainPersonalData(permission);
 
 // Register to Address Server DB and User DB
 register(personalData);
 
 // init Wallet, Gaji.
 const userGaji = initGaji(personalData)
 
 // install Gaji into the user smartphone or PC
 installGaji(userGaji)
}

๊ฑฐ๋ž˜๊ฐ€ ๋ฐœ์ƒํ•˜๋ฉด, ๋‘ ๊ฑฐ๋ž˜ ๋‹น์‚ฌ์ž์˜ ์ฃผ์†Œ์ง€ ๊ทธ๋ฃจํ„ฐ๊ธฐ๊ฐ€ ์ผ์น˜ํ•  ๊ฒฝ์šฐ, ํ•ด๋‹น ๊ทธ๋ฃจํ„ฐ๊ธฐ๋กœ ๊ฑฐ๋ž˜ ์ •๋ณด๋ฅผ ์ „์†กํ•œ๋‹ค. ์•„๋‹ˆ๋ผ๋ฉด, ์ˆ˜ํ’€๋กœ ์ „์†กํ•œ๋‹ค. ์—ญ์‹œ ์•„๋‹ˆ๋ผ๋ฉด, ์˜จ๋ˆ„๋ฆฌ๋กœ ํ•ด๋‹น ์ •๋ณด๋ฅผ ์ „์†กํ•œ๋‹ค.

// Send transaction data to Gruturky | Supul | Onnuri.
sendTxData(){
 
}

1.17 ์ฐธ์—ฌ์ž ๋ฆฌ์ŠคํŠธ

ํ‘œ์ค€ํ™”ํ ํ”Œ๋žซํผ์€ ๊ตญ๊ฐ€๊ฐ€ ๊ด€๋ฆฌํ•˜๋ฉฐ, ๊ตญ๊ฐ€๋Š” ์‹œ๋ฏผ์ด ์ œ์–ดํ•œ๋‹ค. ์ด ํ”Œ๋žซํผ์˜ ์•ˆ์ •์„ฑ์€ ๋ฏผ์ฃผ์ฃผ์˜์— ๊ธฐ์ดˆํ•˜๋ฉฐ, ๋ฏผ์ฃผ์ฃผ์˜๋Š” ์‹œ๋ฏผ์˜ ์ง‘ํ•ฉ์  ์˜์‚ฌ ๊ฒฐ์ •์ด๋‹ค.

๋˜ํ•œ, ํ‘œ์ค€ํ™”ํ ํ”Œ๋žซํผ์€ ๊ณ„์ธต์  ์„œ๋ฒ„์™€ ๋ถ„์‚ฐ ์„œ๋ฒ„์— ํ‘œ์ค€ํ™”ํ ๋„คํŠธ์›Œํฌ(์ดํ•˜, โ€˜๋„คํŠธ์›Œํฌโ€™) ์ฐธ์—ฌ์ž์˜ ๋ฆฌ์ŠคํŠธ๋ฅผ ๋ณด์œ ํ•˜๋Š” ์ ์—์„œ Private ๋„คํŠธ์›Œํฌ์ด๋ฉฐ, ๋ˆ„๊ตฌ๋‚˜ ๊ฐ€์ž…ํ•  ์ˆ˜ ์žˆ๋‹ค๋Š” ์ ์—์„œ Public ๋„คํŠธ์›Œํฌ์ด๋‹ค.

์ฐธ์—ฌ์ž ์ค‘ ์ž์—ฐ์ธ์˜ ์ •์ฒด์„ฑ์€ ์–ผ๊ตด, ์ง€๋ฌธ, ์„ฑ๋ฌธ, ํ™์ฑ„, ํ•„์ฒด, ์†Œ์† ๊ตญ๊ฐ€์— ๋“ฑ๋ก๋œ ์„ฑ๋ช…, ๊ทธ ์‹ ์›์ด ํ™•์ธ๋œ ํœด๋Œ€ํฐ, ์ธํ„ฐ๋„ท ์ „ํ™” ๋˜๋Š” ์œ ์„  ์ „ํ™” ๋ฒˆํ˜ธ, ๊ทธ๋ฆฌ๊ณ  XMPP ๋ฉ”์‹ ์ € ์•„์ด๋””๋กœ ํ‘œํ˜„๋œ๋‹ค. ๋ฒ•์ธ์˜ ๊ฒฝ์šฐ, ๊ณต์ธ๋œ ๋ฒ•์ธ ๋“ฑ๋ก๋ฒˆํ˜ธ, ์‚ฌ์—…์ฒด ๋ช…์นญ๊ณผ ๋ฒ•์ธ ์ฃผ์†Œ์ง€ ๋“ฑ์œผ๋กœ ๊ทธ ์ •์ฒด์„ฑ์„ ํ‘œํ˜„ํ•œ๋‹ค.

  • ๋ฒ ํƒ€ ํ…Œ์ŠคํŠธ ๊ธฐ๊ฐ„ ๋™์•ˆ, ์Šค๋งˆํŠธํฐ ๋ฒˆํ˜ธ๋กœ ๋„คํŠธ์›Œํฌ์— ๊ฐ€์ž…ํ•  ์ˆ˜ ์žˆ๋‹ค.
  • ํ•œ๊ตญ ๊ตญ์ ์˜ ํ™๊ธธ๋™์€ ์Šค๋งˆํŠธํฐ ๋ฒˆํ˜ธ 010-1234-5678์„ ๊ณ ์œ ํ•œ ์‚ฌ์šฉ์ž ID(82-10-1234-5678)๋กœ ํ•  ์ˆ˜ ์žˆ๋‹ค.
  • ๊ฐ€์ž… ์‹œ์ ์˜ ํ™๊ธธ๋™ ์ฃผ์†Œ์ง€์— ํ• ๋‹น๋œ ๊ทธ๋ฃจํ„ฐ๊ธฐ ์„œ๋ฒ„๊ฐ€ ํ™๊ธธ๋™์˜ ์ฃผ์†Œ์ง€ ์„œ๋ฒ„๊ฐ€ ๋œ๋‹ค.
registerNetwork(){
// Obtain the phone number and generate peculiar user id.
generateID();

// Obtain personal information.
obtainPersonalInfo();

// Determine Address server and register user id.
initAddressServer();
} 

2. ์˜จ๋ˆ„๋ฆฌ(Onnuri)

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

๊ฐœ๊ฐœ์ธ์˜ ๊ธˆ์œต ์ •๋ณด๋Š” ๊ฐ€์ง€(= ์ „์ž ์ง€๊ฐ‘ Wallets)์— ๊ธฐ๋ก๋˜๋ฉฐ, ๊ฐ€์ง€๋Š” ๊ทธ ์ค‘ ์ผ๋ถ€ ์ •๋ณด๋ฅผ ๋‚˜๋ฌด, ๊ทธ๋ฃจํ„ฐ๊ธฐ, ์ˆ˜ํ’€ ๋ฐ ์˜จ๋ˆ„๋ฆฌ์— ์ „๋‹ฌํ•œ๋‹ค. ์ƒ์œ„ ๊ณ„์ธต์˜ ์„œ๋ฒ„๊ฐ€ ํ•˜์œ„ ๊ณ„์ธต ์„œ๋ฒ„ ๋˜๋Š” ์ „์ž์ง€๊ฐ‘ ๋‚ด๋ถ€์˜ ์ •๋ณด์— ๋Œ€ํ•ด ์ ‘๊ทผํ•  ์ˆ˜ ์žˆ๋Š” ์ •๋„ ๋˜๋Š” ๊ถŒํ•œ์€ ํ‘œ์ค€ํ™”ํ ํ”Œ๋žซํผ์„ ์šด์˜ํ•˜๋Š” ๊ฐœ๋ณ„ ์ฃผ๊ถŒ ๊ตญ๊ฐ€์˜ ๋ฒ•๊ทœ์— ์˜ํ•œ๋‹ค.

๊ฐœ๋ณ„ ๊ตญ๊ฐ€๋งˆ๋‹ค ํ•˜๋‚˜์”ฉ ํ• ๋‹น๋œ ์˜จ๋ˆ„๋ฆฌ ์„œ๋ฒ„๋Š” ๋ธ”๋ก์ฒด์ธ์˜ Miner์™€ ๊ฐ™์€ ์žฅ๋ถ€๊ธฐ๋ก์ž์ด๋‹ค. 193๊ฐœ์˜ ์ˆ˜ํ’€ ์„œ๋ฒ„๋ฅผ ์ƒ์„ฑํ•˜๊ณ , ๊ฐ๊ตญ์— ํ•˜๋‚˜์”ฉ ํ• ๋‹นํ•œ๋‹ค.

 // Generate 193 Supul servers and store them in Onnuri DB.
initOnnuri() {
 const supuls: List[] = generateSupuls();
 const onnuriDb = supuls;
}

 //Generate Supul Server on Google Cloud Platform
generateSupuls() {
}

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

  • ์˜จ๋ˆ„๋ฆฌ ์„œ๋ฒ„๋Š” ๊ตญ๊ฐ€๋ณ„๋กœ ํ•˜๋‚˜์”ฉ ํ• ๋‹น๋˜๊ณ , ์ƒํ˜ธ ๋™๊ธฐํ™”(Synchronization)ํ•œ๋‹ค.
  • ์˜จ๋ˆ„๋ฆฌ ์„œ๋ฒ„์˜ ๋ฐ์ดํ„ฐ๋ฅผ ์œ„๋ณ€์กฐํ•˜๋ ค๋ฉด, 87๊ฐœ ๊ตญ๊ฐ€ ์ด์ƒ์ด ๋‹ดํ•ฉํ•ด์•ผ ํ•œ๋‹ค.
  • ์˜จ๋ˆ„๋ฆฌ ์„œ๋ฒ„๋Š” 193๊ฐœ ๊ตญ๊ฐ€๋“ค ๊ฐ„์˜ ๊ฑฐ๋ž˜๋ฅผ ๊ธฐ๋กํ•œ๋‹ค.
  • ์–ด๋Š ํ•œ ๊ตญ๊ฐ€๋ฅผ ๋Œ€ํ‘œํ•˜๋Š” ์ˆ˜ํ’€์˜ ์ง€์ถœ์€ ๋‹ค๋ฅธ ํ•œ ๊ตญ๊ฐ€๋ฅผ ๋Œ€ํ‘œํ•˜๋Š” ์ˆ˜ํ’€์˜ ์ˆ˜์ž…์ด๋ฏ€๋กœ, ์˜จ๋ˆ„๋ฆฌ์˜ ๋Œ€์ฐจ๋ณ€์€ ํ•ญ์ƒ ๊ท ํ˜•์ด๋‹ค.
  • Onnuri DB๋Š” UN ๊ฐ€์ž… 193๊ฐœ๊ตญ ๊ฐ๊ฐ์ด ๋…์ž์ ์œผ๋กœ ๊ธฐ๋กํ•˜๋ฉฐ, ์ •๊ธฐ์ ์œผ๋กœ ์ƒํ˜ธ ๋น„๊ตํ•œ๋‹ค.
// call if any part of a transaction belongs to another Supul.
onnuri(transaction) {
 // Balance of Onnuri **shall not** be changed.
 static onnuriBalance: double;
 
 const payer = transaction.payer;
 const receiver = transaction.receiver;
 const amount = transaction.amount;
 
 // Adjust the balances of Supuls which each traders belong to.
 payer.onnuri.credit -= transaction.amount;
 receiver.onnuri.debit += transaction.amount;
 
 // Check balance.
  checkBalance();
}

// Initialize Onnuri Finantial Statement
initOnnuriFS() {

};

3. ์ˆ˜ํ’€(Supul)

ํ•˜๋‚˜์˜ ๊ตญ๊ฐ€ ๋˜๋Š” ์ฃผ๋ฅผ ๋‹ด๋‹นํ•˜๋Š” ์ˆ˜ํ’€ ์„œ๋ฒ„๋Š” ํ›„์ˆ ํ•˜๋Š” ์„œ๋กœ ๋‹ค๋ฅธ ๋‘ ๊ทธ๋ฃจํ„ฐ๊ธฐ๊ฐ€ ๊ด€์—ฌํ•˜๋Š” ๊ฑฐ๋ž˜๋ฅผ ๊ธฐ๋กํ•˜๋ฉฐ, ๋Œ€์ฐจ๋ณ€์€ ํ•ญ์ƒ ๊ท ํ˜• ์ƒํƒœ๋ฅผ ์œ ์ง€ํ•œ๋‹ค. ์–ด๋Š ํ•œ ์ˆ˜ํ’€์—์„œ ๋‹ค๋ฅธ ํ•œ ์ˆ˜ํ’€๋กœ ์ž๊ธˆ์ด ์ด์ „๋˜๋Š” ๊ฑฐ๋ž˜๋Š” ์˜จ๋ˆ„๋ฆฌ ๋ชจ๋“ˆ์ด ์ฒ˜๋ฆฌํ•˜๋“ฏ, ๋‘ ๊ทธ๋ฃจํ„ฐ๊ธฐ ๊ฐ„์˜ ๊ฑฐ๋ž˜๋Š” ์ˆ˜ํ’€ ์„œ๋ฒ„๊ฐ€ ๊ธฐ๋กํ•œ๋‹ค.

์–ด๋Š ํ•œ ์ˆ˜ํ’€์— ์†Œ์†๋œ ์ฐธ์—ฌ์ž์˜ ๊ณ„์ขŒ์—์„œ ๋‹ค๋ฅธ ์ˆ˜ํ’€์— ์†Œ์†๋œ ์ฐธ์—ฌ์ž์˜ ๊ณ„์ขŒ๋กœ ์†ก๊ธˆ๋˜๋ฏ€๋กœ, ์˜จ๋ˆ„๋ฆฌ ์„œ๋ฒ„์™€ ๋‹ฌ๋ฆฌ, ์ˆ˜ํ’€ ์„œ๋ฒ„์˜ Balance๋Š” ๋Š์ž„์—†์ด ๋ณ€๋™ํ•œ๋‹ค. ๋งˆ์ด๋„ˆ์Šค๋ฅผ ๊ธฐ๋กํ•œ ์ˆ˜ํ’€์€ ํ•ด๋‹น ๊ตญ๊ฐ€์˜ ์ž๋ณธ์ˆ˜์ง€ ์ ์ž๋ฅผ, ํ”Œ๋Ÿฌ์Šค๋ฅผ ๊ธฐ๋กํ•œ ์ˆ˜ํ’€์€ ํ‘์ž๋ฅผ ์˜๋ฏธํ•œ๋‹ค.

// call if any part of a transaction belongs to another Gruturki.

supul(){
 // Balance of Supul **shall be** changed.
 static supulBalance: double;
 
 const payer = transaction.payer;
 const receiver = transaction.receiver;
 const amount = transaction.amount;
 
 // Adjust the balances of Supuls which each traders belong to.
 payer.supul.credit -= transaction.amount;
 receiver.supul.debit += transaction.amount;
 
 // Confirm debit of Supul are same to credit of Supul.
 checkBalance();

};

// Initialize Supul Financial Statement
initSupulFS() {
};

์–ด๋Š ํ•œ ์ˆ˜ํ’€ ์„œ๋ฒ„๋Š” 65,536๊ฐœ ์ดํ•˜์˜ Gruturki ์„œ๋ฒ„๋ฅผ ์ƒ์„ฑํ•˜์—ฌ, ์‹œ๊ตฐ๊ตฌ ๋˜๋Š” ์๋ฉด๋™์— ํ•˜๋‚˜์”ฉ ํ• ๋‹นํ•œ๋‹ค.

// Generate less than 65,536 Gruturki Servers for the designated Supul.
generateGruturgi(nationalCode){
}

์ˆ˜ํ’€ ์„œ๋ฒ„๋Š” ๊ทธ๋ฃจํ„ฐ๊ธฐ ์„œ๋ฒ„๋“ค์˜ ๋Œ€์ฐจ๋ณ€ ํ•ฉ๊ณ„๋ฅผ ์ง‘์‚ฐํ•˜๋ฉฐ, ์–ด๋Š ํ•œ ๊ทธ๋ฃจํ„ฐ๊ธฐ์˜ ํ‘์ž๋Š” ๋‹ค๋ฅธ ํ•œ ๊ทธ๋ฃจํ„ฐ๊ธฐ์˜ ์ ์ž์ด๋ฏ€๋กœ, ์ˆ˜ํ’€ ์„œ๋ฒ„์˜ ๋Œ€์ฐจ๋ณ€ ํ•ฉ๊ณ„๋Š” ํ•ญ์ƒ ๊ท ํ˜•์„ ์ด๋ฃฌ๋‹ค.

// Check the balance of supul server.
supulBalance(gruturkiList);

4. ๊ทธ๋ฃจํ„ฐ๊ธฐ(Grutorki)

ํ•˜๋‚˜์˜ ์ˆ˜ํ’€์€ ์ตœ๋Œ€ 65,536๊ฐœ์˜ ๊ทธ๋ฃจํ„ฐ๊ธฐ ์„œ๋ฒ„๋ฅผ ๊ด€๋ฆฌํ•˜๋ฉฐ, ์ผ๋ฐ˜์ ์œผ๋กœ ํ•˜๋‚˜์˜ ๊ทธ๋ฃจํ„ฐ๊ธฐ๋Š” ํŠน์ • ์ˆ˜ํ’€์ด ๊ด€ํ• ํ•˜๋Š” ์‹œ๊ตฐ๊ตฌ ๋˜๋Š” ์๋ฉด๋™์— ํ• ๋‹น๋œ๋‹ค. ๊ทธ๋ฃจํ„ฐ๊ธฐ ์„œ๋ฒ„๋Š” ํŠน์ • ๊ทธ๋ฃจํ„ฐ๊ธฐ์— ์†ํ•˜๋Š” ๋‘ ์ฐธ์—ฌ์ž(Namu) ๊ฐ„์˜ ๊ฑฐ๋ž˜๋ฅผ ๊ธฐ๋กํ•˜๊ณ , ๋‘˜ ์ด์ƒ์˜ ๊ทธ๋ฃจํ„ฐ๊ธฐ๊ฐ€ ๊ด€์—ฌํ•˜๋Š” ๊ฑฐ๋ž˜๋Š” ์ƒ์œ„ ๊ณ„์ธต์ธ ์ˆ˜ํ’€ ์„œ๋ฒ„๋กœ ๊ฑฐ๋ž˜์˜ ๊ธฐ๋ก์„ ์œ„์ž„ํ•œ๋‹ค.

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

// call if any part of a transaction belongs to another Namu.

gruturki(){
 // Balance of Gruturki **shall be** changed.
 static gruturkiBalance: double;
 
 const payer = transaction.payer;
 const receiver = transaction.receiver;
 const amount = transaction.amount;
 
 // Adjust the balances of Gruturki which each traders belong to.
 payer.gruturki.credit -= transaction.amount;
 receiver.gruturki.debit += transaction.amount;
 
 // Confirm debit of Gruturki are same to credit of Gruturki.
 checkBalance();

}

์‹œ๊ตฐ๊ตฌ ๋˜๋Š” ์๋ฉด๋™ ๊ฐ๊ฐ์— ํ• ๋‹น๋˜๋Š” ๊ทธ๋ฃจํ„ฐ๊ธฐ๋Š” ํ•ด๋‹น ๊ทธ๋ฃจํ„ฐ๊ธฐ์— ์†ํ•˜๋Š” ์ฐธ์—ฌ์ž๋“ค ๊ฐ„์˜ ๊ฑฐ๋ž˜๋ฅผ ๊ธฐ๋กํ•˜๊ณ , ๋˜ํ•œ, XMPP ๋ฉ”์‹ ์ € ์„œ๋ฒ„ ๊ธฐ๋Šฅ์„ ๊ฒธํ•œ๋‹ค.

// Initialize Gruturki server.
initGruturki() {
}

// Initialize Gruturki B/S
initGruturkiBS() {
};

๊ทธ๋ฃจํ„ฐ๊ธฐ ์„œ๋ฒ„๋Š” ์˜จ๋ˆ„๋ฆฌ ์„œ๋ฒ„๋‚˜ ์ˆ˜ํ’€ ์„œ๋ฒ„๋ณด๋‹ค ๋งŽ์€ ์–‘์˜ ์ •๋ณด๋ฅผ ์ €์žฅํ•˜๋ฉฐ, ์ •๋ณด์˜ ์ข…๋ฅ˜๋Š” ํฌ๊ฒŒ ๋‘ ์ข…๋ฅ˜์ด๋‹ค.

  • ์ฑ„ํŒ…
  • ๊ฑฐ๋ž˜ ์ •๋ณด

๋‘ ์ข…๋ฅ˜์˜ ์ •๋ณด๋Š” ๊ฐ๊ธฐ ๋‹ค๋ฅธ ์„œ๋ฒ„์— ์ €์žฅ๋œ๋‹ค.

// Initialize Chat Server using Google Cloud Plaform, Firestore.
initChatServer(){
};

// Initialize Transaction Server using Google Cloud Plaform, Firestore.
initTxServer(){
};

5. ๋‚˜๋ฌด(Namu)

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

namu(){ 
 const payer = transaction.payer;
 const receiver = transaction.receiver;
 const amount = transaction.amount;
 
 // Adjust the balances of Namu which each traders belong to.
 payer.namu.credit -= transaction.amount;
 receiver.namu.debit += transaction.amount;
 
 // Confirm debit of Namu are same to credit of Namu.
 checkBalance();

}

6. ๊ฐ€์ง€(Gaji)

ํ•˜๋‚˜์˜ ๋‚˜๋ฌด๋Š” ํ•˜๋‚˜ ์ด์ƒ์˜ ๊ฐ€์ง€๋กœ ๊ตฌ์„ฑ๋˜๋ฉฐ, ๊ฐ€์ง€๋Š” ๋ธ”๋ก์ฒด์ธ์˜ ์ „์ž์ง€๊ฐ‘(Wallet)์— ๋Œ€์‘ํ•œ๋‹ค. ๊ฐœ๋ณ„ ์ฐธ์—ฌ์ž์˜ ๊ธˆ์œต ์ •๋ณด๋Š” Gaji์— ๊ธฐ๋ก๋˜๋ฉฐ, ๊ทธ ์ค‘ ์ผ๋ถ€ ์ •๋ณด๊ฐ€ ๋‚˜๋ฌด, ๊ทธ๋ฃจํ„ฐ๊ธฐ, ์ˆ˜ํ’€ ๋ฐ ์˜จ๋ˆ„๋ฆฌ์— ์ „๋‹ฌ๋œ๋‹ค.

  • ๋‚˜๋ฌด๋Š” ๋‘˜ ์ด์ƒ์˜ ๊ฐ€์ง€ Gaji๋“ค ๊ฐ„์˜ ๊ฑฐ๋ž˜๋ฅผ ๊ธฐ๋กํ•œ๋‹ค. ์–ด๋Š ํ•œ ๋‚˜๋ฌด์— ์†Œ์†๋œ ๊ฐ€์ง€๊ฐ€ ํ•˜๋‚˜๋ผ๋ฉด, ๋‚˜๋ฌด๊ฐ€ ๊ธฐ๋กํ•  ๋ฐ”๋Š” ์—†๋‹ค.
  • ๊ทธ๋ฃจํ„ฐ๊ธฐ๋Š” ๋‘ ๋‚˜๋ฌด ๊ฐ„์˜ ๊ฑฐ๋ž˜๋ฅผ ๊ธฐ๋กํ•œ๋‹ค.
  • ์ˆ˜ํ’€์€ ๋‘ ๊ทธ๋ฃจํ„ฐ๊ธฐ ๊ฐ„์˜ ๊ฑฐ๋ž˜๋ฅผ ๊ธฐ๋กํ•œ๋‹ค.
  • ์˜จ๋ˆ„๋ฆฌ๋Š” ๋‘ ์ˆ˜ํ’€ ๊ฐ„์˜ ๊ฑฐ๋ž˜๋ฅผ ๊ธฐ๋กํ•œ๋‹ค.
txn(contract: Contract){ 
 
 // Adjust the balances of Namu which each traders belong to.
 payer.gaji.credit -= contract.amount;
 receiver.gaji.debit += contract.amount;
 
 // Confirm debit of Gaji are same to credit of Gaji.
 checkBalance();
}

7. ์žฌ๋ฌด์ œํ‘œ

๋ชจ๋“  ๊ฐ€์ง€, ๋‚˜๋ฌด, ๊ทธ๋ฃจํ„ฐ๊ธฐ, ์ˆ˜ํ’€, ๋ฐ ์˜จ๋ˆ„๋ฆฌ๋Š” ๊ทธ ์ž์ฒด๊ฐ€ ์žฌ๋ฌด์ œํ‘œ์ด๋‹ค. ๋ฐœ์ƒํ•œ ๊ฑฐ๋ž˜๋Š” Ledger, Income Statement, Balance Sheet, Cash Flow Statement, Retained Earnings Statement ๋“ฑ์— ์ˆœ์ฐจ์ ์œผ๋กœ ๊ธฐ๋ก๋œ๋‹ค.

ledger.incomeStatement.balanceSheet.cashFlow.retainedEarnings.subscribe();

ledger(contract: Contract){
}

incomeStatement(){
}

balanceSheet(){
}

cashFlow(){
}

retainedEarnings(){
}


type Contract = {
 const date: Date;
 const location: Location;
 const payer: Payer;
 const receiver: Receiver;
 const amount: Number;
 const product: Product;
 const delivery: Delivery;
 const txnCode: SmartContract;
}

ํ•œ ํŽธ, ํ‘œ์ค€ํ™”ํ ํ”Œ๋žซํผ์˜ ํšŒ๊ณ„ ์‹œ์Šคํ…œ์€ ์ข…๋ž˜์˜ ๋ณต์‹๋ถ€๊ธฐ์— ๋ธ”๋ก์ฒด์ธ ๋ฉ”์ปค๋‹ˆ์ฆ˜์„ ์ ์šฉํ•œ ๊ฒƒ์ด๋‹ค.

7.1 Ledger

๋ชจ๋“  ๊ฑฐ๋ž˜์— ์žˆ์–ด์„œ, ๋ฐœ์ƒ ์‹œ์ ์˜ ๊ธฐ๋ก์€ ์ค‘๋ฆฝ์ ์ด๋‹ค. ๊ฐ€๋ น, A๊ฐ€ B์—๊ฒŒ 100 Y์„ ์ง€๋ถˆํ•˜๊ณ , ์›์ž์žฌ๋ฅผ ๊ตฌ๋งคํ•œ๋‹ค๋ฉด, A์™€ B ๊ฐ๊ฐ์˜ ์žฅ๋ถ€๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์ด ๊ธฐ๋ก๋  ๊ฒƒ์ด๋‹ค.

A์˜ ๋ถ„๊ฐœ์žฅ ย  ย  ย  ย  ย  ย  ย  ย  ย  ย  ย  B์˜ ๋ถ„๊ฐœ์žฅย  ย  ย  ย  ย  ย  ย 
์›์ž์žฌ 100 ํ˜„๊ธˆ 100 ํ˜„๊ธˆ 100 ์›์ž์žฌ 100 ย  ย 

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

B์˜ URI | A์˜ URI

์ด๋Ÿฌํ•œ ํ‘œ๊ธฐ๋ฒ•์˜ ๊ฐ€์žฅ ํฐ ์žฅ์ ์€ ๋‘ ํšŒ๊ณ„ ์ฃผ์ฒด A์™€ B๊ฐ€ ๋™์ผํ•œ ๊ธฐ๋ก ๋‚ด์šฉ์„ ๊ณต์œ ํ•  ์ˆ˜ ์žˆ๋Š” ์ ์ด๋‹ค. ๋‹ฌ๋ฆฌ ํ‘œํ˜„ํ•˜๋ฉด, A์™€ B์˜ ๋ถ„๊ฐœ์žฅ์€ ๊ฐ™์€ ๊ฑฐ๋ž˜์— ๋Œ€ํ•ด ๊ฐ™์€ ๋‚ด์šฉ์„ ๊ธฐ๋กํ•˜๊ณ , ๊ทธ์— ์ด์ „ Hash๋ฅผ ์ถ”๊ฐ€ํ•˜์—ฌ, ๋ฐ์ดํ„ฐ ๋ญ‰์น˜๋ฅผ ๋งŒ๋“ค๊ณ , ๊ทธ๋กœ๋ถ€ํ„ฐ ์ƒˆ๋กœ์šด Hash๋ฅผ ์ถ”์ถœํ•  ์ˆ˜ ์žˆ๋‹ค.

์ด์ „ Hash + B์˜ URI | A์˜ URI => ์ƒˆ๋กœ์šด Hash

์ฆ‰, ๊ฐ์ž์˜ ์žฅ๋ถ€๋Š” ์ž‘์€ ๋ธ”๋ก์ฒด์ธ์„ ๊ตฌ์„ฑํ•˜๋ฉฐ, ๊ฑฐ๋ž˜ ๋‹น์‚ฌ์ž๋“ค์˜ ์žฅ๋ถ€๊ฐ€ ์ƒํ˜ธ ์—ฐ๋™๋˜๋ฏ€๋กœ, ๊ทธ ๋ˆ„๊ตฌ์˜ ์žฅ๋ถ€๋„ ์œ„๋ณ€์กฐ๊ฐ€ ๋ถˆ๊ฐ€๋Šฅํ•ด ์ง„๋‹ค.

// Record Transaction onto the books of all participants.
recordTx(participants: Participant[]);

7.2 ์žฌ๋ฌด์ œํ‘œ

์ฐธ์—ฌ์ž๋“ค์ด ์ƒํ˜ธ ๊ณต์œ ํ•˜๋Š” ๊ธฐ๋ก์„ ํ† ๋Œ€๋กœ, ๊ฐ์ž๋Š” ๊ฐ์ž์˜ ์žฌ๋ฌด์ œํ‘œ๋ฅผ ์ƒ์„ฑํ•  ์ˆ˜ ์žˆ๋‹ค.

8. ์žŽ(Yip)

Yip์€ ๊ตญ์ ํ†ตํ™”์˜ ๊ฐ€์น˜์™€ ์—ฐ๋™๋œ๋‹ค. ๋ชจ๋“  ์ฃผ๊ถŒ ๊ตญ๊ฐ€๋Š” ์ƒํ˜ธ ๋…๋ฆฝ์ ์œผ๋กœ Yip์„ ๋ฐœํ–‰ํ•˜๊ณ , ํ†ตํ™” ์ •์ฑ…์„ ์‹œํ–‰ํ•œ๋‹ค. ์–ด๋Š ํ•œ ๊ตญ๊ฐ€๊ฐ€ ๋ฐœํ–‰ํ•˜๋Š” ํ‘œ์ค€ํ™”ํ์˜ ๋‹จ์œ„๋Š” ํ•ด๋‹น ๊ตญ๊ฐ€์˜ ๊ตญ์ ํ†ตํ™”์˜ ๋‹จ์œ„์™€ ๋™์ผํ•˜๊ณ , ๊ตํ™˜๋น„๋Š” 1:1์ด๋‹ค.

ํ‘œ์ค€ํ™”ํ์˜ ํ‘œ๊ธฐ๋Š” ์ „ํ†ต์ ์ธ ๊ตญ์ ํ†ตํ™” ํ‘œ๊ธฐ์— ์†Œ๋ฌธ์ž d(= digital)๋ฅผ ์ถ”๊ฐ€ํ•œ๋‹ค. ๊ฐ€๋ น, ํ•œํ™”(KRW)์˜ ํ‘œ์ค€ํ™”ํ๋Š” dKRW์ด๋‹ค.

8.1 ์žŽ(Yip)์˜ ๋ฐœํ–‰

์žŽ์˜ ๋ฐœํ–‰ ์ฃผ์ฒด๋Š” SCC(Standard Cryptocurrency Committee)์ด๋ฉฐ, ๋ฐฐํฌ ์ฃผ์ฒด๋Š” ๊ฐ๊ตญ์˜ ์ค‘์•™์€ํ–‰์ด๋‹ค. ์ค‘์•™์€ํ–‰์€ 1:1 ๋น„์œจ๋กœ ๊ตญ๊ฐ€๊ฐ€ ๋ฐœํ–‰ํ•œ ๊ตญ์  ํ™”ํ(Fiat Money)์™€ Yip์„ ๊ตํ™˜ํ•œ๋‹ค.

์žŽ์˜ ๋ฐœํ–‰์—์„œ, ๊ฑฐ๋ž˜ ์ฃผ์ฒด๋Š” ์ค‘์•™์€ํ–‰๊ณผ ์‹œ์žฅ ์ฐธ๊ฐ€์ž์ด๋‹ค.

// The amount of Yip given by SCC to the designated nation let balanceOfYip;

yip(fiatMoney){ // Exchange Rate between Yip and Fiat Money const yipToFiatRate: Number;

exchangedYip = fiatMoney/yipToFiatRate;

// Record transaction txn(contract: Contract);

balanceOfYip -= exchangedYip; }

7.2 ์žŽ(Yip)์˜ ์‚ฌ์šฉ

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

์„œ๋ช…์€ Private Key๋กœ๋ถ€ํ„ฐ ์ƒ์„ฑ๋˜๋ฉฐ, ์„œ๋ช…๋œ ๊ฑฐ๋ž˜๋Š” ๊ฑฐ๋ž˜ ๋‹น์‚ฌ์ž๋“ค ๊ฐ๊ฐ์˜ ์žฅ๋ถ€์— ๊ธฐ๋ก๋œ๋‹ค.

์„œ๋ช…๋œ ๊ฑฐ๋ž˜ ๋ฐ์ดํ„ฐ๋กœ๋ถ€ํ„ฐ ๋„์ถœํ•œ ๊ณ ์œ ํ•œ Hash ๊ฐ’์€ ์•„๋ž˜ ์žฅ์†Œ์— ๊ธฐ๋ก๋œ๋‹ค.

  • ํ•ด๋‹น ๊ฑฐ๋ž˜์—์„œ ๊ตํ™˜๋œ ์žฌ๋ฌผ๊ณผ ํ™”ํ ๊ฐ๊ฐ์˜ ๊ณ ์œ ํ•œ IP ์ฃผ์†Œ์— ๊ธฐ๋ก๋œ๋‹ค. ๊ฐ€๋ น, A๊ฐ€ B์—๊ฒŒ 100 Yip์„ ์ง€๋ถˆํ–ˆ๋‹ค๋ฉด, ๊ทธ๋Ÿฌํ•œ ๊ฑฐ๋ž˜ ์ •๋ณด๋ฅผ ํฌํ•จํ•˜๋Š” ๋ฐ์ดํ„ฐ ๋ญ‰์น˜๋กœ๋ถ€ํ„ฐ ์œ ๋„๋œ Hash ๊ฐ’์ด ๊ฑฐ๋ž˜์— ์‚ฌ์šฉ๋œ 100 Yip์˜ ๊ณ ์œ ํ•œ IP ์ฃผ์†Œ์— ๊ธฐ๋ก๋œ๋‹ค.
  • ํ•ด๋‹น ๊ฑฐ๋ž˜์— ์ฐธ์—ฌํ•œ ๊ฑฐ๋ž˜ ๋‹น์‚ฌ์ž ๊ฐ๊ฐ์˜ ํ†ต์žฅ์— ๊ธฐ๋ก๋œ๋‹ค.

๊ฑฐ๋ž˜์— ์‚ฌ์šฉ๋œ ํ™”ํ์˜ ๊ณ ์œ ํ•œ IP ์ฃผ์†Œ์— ์ƒˆ๋กœ์šด ์†Œ์œ ์ž์˜ ๊ณ ์œ ํ•œ IP ์ฃผ์†Œ๊ฐ€ ๊ธฐ๋ก๋œ๋‹ค. ๊ฐ€๋ น, ์•ž์˜ ์˜ˆ์—์„œ, ์ƒˆ๋กœ์šด ์†Œ์œ ์ž์ธ B์˜ ๊ณ ์œ ํ•œ IP ์ฃผ์†Œ๋Š” ์ด์ „ ์†Œ์œ ์ž์ธ A์˜ ๊ณ ์œ ํ•œ IP ์ฃผ์†Œ์— ์ด์–ด์„œ ํ•ด๋‹น ํ™”ํ์˜ ๊ณ ์œ ํ•œ IP ์ฃผ์†Œ์— ๊ธฐ๋ก๋œ๋‹ค. ๋”ฐ๋ผ์„œ, ํŠน์ • ํ™”ํ๋Š” ๋ฐœ์ƒ ์‹œ์ ๋ถ€ํ„ฐ ํ˜„์žฌ ์‹œ์ ๊นŒ์ง€ ํ•ด๋‹น ํ™”ํ๋ฅผ ์†Œ์œ ํ–ˆ์—ˆ๋˜ ๋ชจ๋“  ์†Œ์œ ์ž์— ๋Œ€ํ•œ ์ •๋ณด๋ฅผ ๋ณด์œ ํ•œ๋‹ค.

8. Private Key, ์‹ ์› ์ธ์ฆ๊ณผ ๊ฑฐ๋ž˜ ๋ฐฉ์‹

ํ‘œ์ค€ํ™”ํ ํ”Œ๋žซํผ์—์„œ ๊ฐœ๋ณ„ ์ฐธ์—ฌ์ž์˜ Private Key๋Š” ๋‹ค์–‘ํ•œ ๋ฐฉ์‹์œผ๋กœ ์ƒ์„ฑ๋  ์ˆ˜ ์žˆ๋‹ค.

8.1 ์•„์ด๋””์™€ ๋น„๋ฐ€๋ฒˆํ˜ธ(p/w)

ํ‘œ์ค€ํ™”ํ ํ”Œ๋žซํผ์˜ ๊ฒฝ์šฐ, ์Šค๋งˆํŠธํฐ๊ณผ PC๊ฐ€ ์ผ๋ฐ˜์ ์ธ ์€ํ–‰์˜ ์ข…์ด ํ†ต์žฅ์„ ๋Œ€์‹ ํ•˜๋ฏ€๋กœ, ์ „์ž์ง€๊ฐ‘์ธ Gaji๋ฅผ ์—ด๊ธฐ ์œ„ํ•ด์„œ๋Š” ํ•˜๋“œ์›จ์–ด ๋กœ๊ทธ์ธ์ด ํ•„์š”ํ•˜๋‹ค. ๋‹ค์–‘ํ•œ ์Šค๋งˆํŠธํฐ ์ œ์กฐ์‚ฌ๋“ค์ด ํŒจํ„ด, ์•„์ด๋””์™€ ๋น„๋ฐ€๋ฒˆํ˜ธ(P/W), ์ง€๋ฌธ, ํ™์ฑ„๋ฌธ ๋“ฑ์˜ ๋กœ๊ทธ์ธ ๋ฐฉ๋ฒ•์„ ์ œ๊ณตํ•˜๋ฉฐ, ๊ฐœ๋ณ„ ์ฐธ์—ฌ์ž์˜ ๋‹จ๋ง๊ธฐ์— ์„ค์น˜๋œ Gaji์˜ ๋ณด์•ˆ ์ˆ˜์ค€์€ ํ•ด๋‹น ์ฐธ์—ฌ์ž๊ฐ€ ์‚ฌ์šฉํ•˜๋Š” ํ•˜๋“œ์›จ์–ด ์ž์›์˜ ์ œ์กฐ์‚ฌ์— ์˜ํ–ฅ๋ฐ›๊ฒŒ ๋œ๋‹ค.

๋”ฐ๋ผ์„œ, SCC๋Š” ํ•˜๋“œ์›จ์–ด ์žฅ์น˜์˜ ์ œ์•ฝ์—์„œ ๋ฒ—์–ด๋‚œ ๋ณดํŽธ์ ์ธ ์‹ ์› ์ธ์ฆ๊ณผ ์ „์ž ์„œ๋ช… ๋ฉ”์ปค๋‹ˆ์ฆ˜์„ ์ œ์‹œํ•œ๋‹ค.

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

๋ชฉ์†Œ๋ฆฌ(Voice)

์‚ฌ์ „์— ์ฐธ์—ฌ์ž๊ฐ€ ๋ช‡ ๊ฐœ์˜ ํžŒํŠธ ๋‹จ์–ด์™€ ๊ทธ ๊ฐ๊ฐ์— ๋Œ€์‘ํ•˜๋Š” ํ•ด๋‹ต ๋‹จ์–ด๋ฅผ ์ž…๋ ฅํ•ด ๋‘์–ด์•ผ ํ•œ๋‹ค. ์ดํ›„, ์ธ์ฆ์ด ํ•„์š”ํ•  ๋•Œ, Gaji๋Š” ์ฐธ์—ฌ์ž์—๊ฒŒ ํžŒํŠธ ๋˜๋Š” ์งˆ๋ฌธ ๋‹จ์–ด๋ฅผ ์ œ์‹œํ•œ ๋’ค, ํ•ด๋‹ต ๋‹จ์–ด๋ฅผ ์ฐธ์—ฌ์ž์˜ ๋ชฉ์†Œ๋ฆฌ๋กœ ์ž…๋ ฅ๋ฐ›์•„, ์ •๋‹ต ์—ฌ๋ถ€์™€ ์„ฑ๋ฌธ(Voice-print)์œผ๋กœ ๊ทธ ์‹ ์›์„ ์ธ์ฆํ•œ๋‹ค.


voiceLock() {
 //Show hint or question word to user
 showHintWord();
 
 //Obtain answer via mike.
 voiceAnswer();
}

8.2 ์„œ๋ช…(Signature)

ํŽœ์„ ๋‚ด์žฅํ•œ ์Šค๋งˆํŠธํฐ์ด๋‚˜ PC์— ํ•œํ•˜์—ฌ, ์„œ๋ช…์œผ๋กœ ์‹ ์›์„ ์ธ์ฆํ•˜๋Š” ๋ฐฉ๋ฒ•์ด๋‹ค. ๋งˆ์ฐฌ๊ฐ€์ง€๋กœ, ์‚ฌ์ „์— ์ฐธ์—ฌ์ž๊ฐ€ ๋ช‡ ๊ฐœ์˜ ํžŒํŠธ ๋‹จ์–ด์™€ ๊ทธ ๊ฐ๊ฐ์— ๋Œ€์‘ํ•˜๋Š” ํ•ด๋‹ต ๋‹จ์–ด๋ฅผ ์ž…๋ ฅํ•ด ๋‘์–ด์•ผ ํ•œ๋‹ค.


voiceLock() {
 //Show hint or question word to user
 showHintWord();
 
 //Obtain answer via touch panel of smartphone or other device.
 penAnswer();
}

8.3 ์ƒ‰์ƒ ์นด๋“œ

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

colorCode(){
//obtain alphabets from string.
obtainChar();

//obtain color from character.
obtainColor();

//obtain hash from color codes
hashFromColor();

}

8.4 ํ™์ฑ„ Iris

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

// Read iris patterns of a user and authorize it.
authIris();

8.5 ์ง€๋ฌธ Fingerprint

์„œ๋ช… ์ธ์ฆ๊ณผ ์ „์žํŽœ์˜ ์ด์ค‘ ์ง€๋ฌธ ์ธ์‹ ๋ฉ”์ปค๋‹ˆ์ฆ˜์„ ๊ฒฐํ•ฉํ•˜์—ฌ ๋ณด์•ˆ์„ ๋”์šฑ ๊ฐ•ํ™”ํ•  ์ˆ˜ ์žˆ๋‹ค. ์ž์„ธํ•œ ๊ธฐ์ˆ ์  ๋‚ด์šฉ์€ ์ „์žํŽœ์„ ์ด์šฉํ•œ ์ง€๋ฌธ ์ธ์‹ ๋ฐฉ๋ฒ•์„ ์ฐธ์กฐ.

// Read fingerprints and authorize it.
authFingerprint();

9. ์‹œ์žฅ(Sijang)

์ฐธ์—ฌ์ž๋Š” ๋ˆ„๊ตฌ๋‚˜ ํŒ๋งค์ž ์ง€์œ„๋ฅผ ๊ฐ€์ง€๋ฉฐ, ํŒ๋งคํ•˜๋ ค๋Š” ์ƒํ’ˆ์„ ์‹œ์žฅ์— ๋“ฑ๋กํ•  ์ˆ˜ ์žˆ๋‹ค. ์ƒํ’ˆ๋ช…์„ ์ž…๋ ฅํ•œ ๋’ค, ๊ฐ™์€ ๋ช…์นญ์œผ๋กœ ์ž…๋ ฅ๋œ ์ด์ „์˜ ์ƒํ’ˆ์ด ์žˆ๋Š” ์ง€๋ฅผ ์‚ฌ์ „์—์„œ ๊ฒ€์ƒ‰ํ•˜๊ณ , ์žˆ๋‹ค๋ฉด ํ•ด๋‹น ๋ช…์นญ์˜ ์ƒํ’ˆ๋“ค๋กœ๋ถ€ํ„ฐ ์ถ”์ถœ๋œ ๊ฐ€์žฅ ๋ณดํŽธ์ ์ธ ์†์„ฑ(standard property set)๋“ค๋กœ ์˜ค๋ธŒ์ ํŠธ๋ฅผ ๊ตฌ์„ฑํ•œ๋‹ค. ๊ฐ€๋ น, โ€˜๋ƒ‰์žฅ๊ณ '๋ฅผ ํŒ๋งคํ•˜๋ ค๊ณ  ํ•œ๋‹ค๋ฉด, ์‚ฌ์ „์—์„œ โ€˜๋ƒ‰์žฅ๊ณ '๋ฅผ ๊ฒ€์ƒ‰ํ•˜์—ฌ, ๊ทธ ์†์„ฑ์„ ๋„์ถœํ•  ์ˆ˜ ์žˆ๋‹ค.

| ์ œ์กฐ์‚ฌ | ์ œ์กฐ์ผ์ž | ์šฉ๋Ÿ‰ | ์ „๋ ฅ์†Œ๋น„๋Ÿ‰ | ๋””์ž์ธ | ๋ฐฐ์†ก ๋ฐฉ์‹ |

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

sell(){
 //obtain product name
 productName();

 //search product name
 searchProduct();

 //search standard property set
 searchStdProperties();

//Add or remove properties();
composeProduct();

//List product.
listProduct();

}

์‹œ์žฅ์— ๋“ฑ๋ก๋œ ์ƒํ’ˆ์˜ ๊ตฌ๋งค, ๊ฒฐ์ œ, ๋ฐฐ์†ก์™€ ์„ธ๋ฌด ๋“ฑ์€ ๋‹จ ํ•œ ๋ฒˆ์˜ ํ„ฐ์น˜๋กœ ์™„๋ฃŒ๋œ๋‹ค.

9.1 ๊ฐ€์—ญ์„ฑ

์ข…๋ž˜์˜ ๋ธ”๋ก์ฒด์ธ ๊ธฐ๋ฐ˜ ์•”ํ˜ธ์ฆํ‘œ์™€ ๋‹ฌ๋ฆฌ, ํ‘œ์ค€ํ™”ํ์˜ ๊ฑฐ๋ž˜๋Š” ๊ฐ€์—ญ์ (reversible)์ด๋ฉฐ, ์ˆ˜ํ’€์˜ ์šด์˜์ž์ธ ๊ตญ๊ฐ€๋‚˜ ์ฃผ๋Š” ๊ฑฐ๋ž˜๋ฅผ ์ทจ์†Œํ•  ์ˆ˜ ์žˆ๋‹ค. ๊ฑฐ๋ž˜์˜ ์ทจ์†Œ๋Š” ๊ตฌ๋งค์ž์™€ ํŒ๋งค์ž๊ฐ€ ์Šค์™‘๋œ ์—ญ๊ฑฐ๋ž˜(Reversed Transaction)์˜ ํ˜•ํƒœ๋กœ ์ง„ํ–‰๋˜๋ฉฐ, ์ทจ์†Œ ์—ฌ๋ถ€๋Š” ๊ฐ๊ตญ ๋˜๋Š” ๊ฐ ์ฃผ๊ฐ€ ์šด์˜ํ•˜๋Š” ๊ฑฐ๋ž˜์ค‘์žฌ์œ„์›ํšŒ์— ์˜ํ•œ๋‹ค.

9.2 ๊ณ ์œ  ID์™€ ์ž„์‹œ ID

์ฐธ์—ฌ์ž ๊ฐ๊ฐ์€ ๋‘ ์ข…๋ฅ˜์˜ ๊ณ ์œ ํ•œ ์•„์ด๋””๋ฅผ ๊ฐ–๋Š”๋‹ค.

์ฒซ์งธ๋Š” ๊ตญ๊ฐ€๋ฒˆํ˜ธ์™€ ์ง€์—ญ๋ฒˆํ˜ธ(๋˜๋Š” ์ด๋™ํ†ต์‹ ์‚ฌ์—…์ž ๋ฒˆํ˜ธ)๋ฅผ ํฌํ•จํ•˜๋Š” ์ „ํ™”๋ฒˆํ˜ธ์ด๋‹ค. ๊ฐ€๋ น, ํ•œ๊ตญ์ธ ํ™ ๊ธธ๋™์˜ ํœด๋Œ€ํฐ ๋ฒˆํ˜ธ๊ฐ€ 010-1234-5678์ด๋ผ๋ฉด, ๊ทธ์˜ ๊ณ ์œ ํ•œ ์•„์ด๋””๋Š” 82-10-1234-5678์ด๋ฉฐ, ์„ธ๊ณ„ ์ „์—ญ์—์„œ ๊ฒฐ์ฝ” ๊ณ ์œ ํ•œ ์•„์ด๋””๊ฐ€ ๊ฒน์น  ์ˆ˜ ์—†๋‹ค.

๋‘˜์งธ๋Š” XMPP ๋ฉ”์‹ ์ €์˜ ์ฐธ์—ฌ์ž ์•„์ด๋””์ด๋ฉฐ, ์—ญ์‹œ ์„ธ๊ณ„ ์ „์—ญ์—์„œ ๋‘ ์ฐธ์—ฌ์ž๊ฐ€ ๊ฐ™์€ ์•„์ด๋””๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜๋Š” ์—†๋‹ค.

์ „ํ™”๋ฒˆํ˜ธ๋‚˜ ๋ฉ”์‹ ์ € ์•„์ด๋””๋ฅผ ๋…ธ์ถœํ•˜๋Š” ๊ฒƒ์€ ๋ฐ”๋žŒ์งํ•˜์ง€ ์•Š์œผ๋ฏ€๋กœ, ๋ฌด์ธ์€ํ–‰์€ ์ž…์ถœ๊ธˆ๊ณผ ๊ฑฐ๋ž˜๋ฅผ ์œ„ํ•œ ๋ณ„๋„์˜ ๊ฐ€๋ณ€์  ์ž„์‹œ ID๋ฅผ ์ œ๊ณตํ•œ๋‹ค.

์ž„์‹œ ID๊ฐ€ ์ž‘๋™ํ•˜๋Š” ๋ฉ”์ปค๋‹ˆ์ฆ˜์€ ๋‹ค์Œ๊ณผ ๊ฐ™๋‹ค. ํŠน์ • ๊ตญ๊ฐ€์˜ ์–ดํœ˜๊ฐ€ ์ˆ˜๋ก๋œ ์‚ฌ์ „(Dictionary)์„ ์ค€๋น„ํ•œ๋‹ค. ํŒ๋งค์ž ๋˜๋Š” ์ž๊ธˆ ์ˆ˜์ทจ์ž(Receiver)์˜ ํ‘œ์ค€ํ™”ํ ์ˆ˜์ทจ ์ฃผ์†Œ๋ฅผ ์‚ฌ์ „์—์„œ ๋ฌด์ž‘์œ„๋กœ ์ธ์ถœํ•œ ํŠน์ • ๋‹จ์–ด์— ๋งคํ•‘ํ•œ๋‹ค. ์ธ์ถœ๋œ ๋‹จ์–ด๋Š” ์žฌ์ฐจ ์ธ์ถœ์ด ๋ถˆ๊ฐ€ํ•œ ์ž ๊ธˆ ์ƒํƒœ๋กœ ์ „ํ™˜ํ•œ๋‹ค. ํ•ด๋‹น ๋‹จ์–ด๋ฅผ ๊ตฌ๋งค์ž ๋˜๋Š” ์ž๊ธˆ ์ง€๋ถˆ์ž(Payer)์˜ ์ปดํ“จํ„ฐ ์žฅ์น˜๋กœ ์ „์†กํ•œ๋‹ค. ์ž…์ถœ๊ธˆ ๊ฑฐ๋ž˜๊ฐ€ ์™„๋ฃŒ๋˜๋ฉด, ํ•ด๋‹น ๋‹จ์–ด๋ฅผ ์ž ๊ธˆ ํ•ด์ง€ํ•œ๋‹ค.

9.3 ์‹ค์‹œ๊ฐ„ ๊ฑฐ๋ž˜ ๊ธฐ๋ก

์ž์‹ ์˜ ๊ฑฐ๋ž˜๊ฐ€ Publish๋  ๋•Œ๋ฅผ ๊ธฐ๋‹ค๋ฆฌ๋Š” ๋ธ”๋ก์ฒด์ธ๊ณผ ๋‹ฌ๋ฆฌ, Openhash ํ”Œ๋žซํผ์—์„œ ๊ฑฐ๋ž˜๋Š” ์ฆ‰๊ฐ ๊ธฐ๋ก๋˜๋ฉฐ, ์‹ค์‹œ๊ฐ„์œผ๋กœ ์ข…๊ฒฐ(Settlement)๋œ๋‹ค.

๊ฐ€๋ น, Alice๊ฐ€ Pizzahut์—์„œ ํ”ผ์ž๋ฅผ ์ฃผ๋ฌธํ•  ๋•Œ,

  • Alice๋Š” ์ž์‹ ์˜ ์ตœ์ข… ๊ฑฐ๋ž˜์˜ Hash๊ฐ€ ํฌํ•จ๋œ ๋””์ง€ํ„ธ ์ฃผ๋ฌธ์„œ๋ฅผ ์ „๋‹ฌํ•œ๋‹ค.
  • Pizzahut์€ Alice์˜ ์ตœ์ข… ๊ฑฐ๋ž˜ ์ •๋ณด๋ฅผ ์ฐธ์กฐํ•˜์—ฌ, ์ƒˆ๋กœ์šด ๊ฑฐ๋ž˜ ๋ช…์„ธ์„œ๋ฅผ ์ž‘์„ฑํ•œ๋‹ค.
  • Pizzahut์€ ๋ช…์„ธ์„œ์˜ Hash๋ฅผ Alice์—๊ฒŒ ์ „๋‹ฌํ•œ๋‹ค.
  • ์–‘์ธก์€ ๊ฐ์ž์˜ Ledger์— ์ด ๊ฑฐ๋ž˜๋ฅผ ๊ธฐ๋กํ•˜๊ณ , Hash of this transaction๋ฅผ ๋ถ€์ฐฉํ•œ๋‹ค.
  • Alice๋Š” ๋ช…์‹œ๋œ Amount๋ฅผ Receipt Address๋กœ ์†ก๊ธˆํ•œ๋‹ค.
  • ์–‘์ธก์€ ์ด ๊ฑฐ๋ž˜๋ฅผ ์ „ํŒŒํ•œ๋‹ค(Gossip Protocol).

Components of the payment URL Hash of this transaction: "KzpHBzqzX2dK9UA9JFP3Di4oQAweBwqgm" Product: "Pizza" Amount: "15" Recipient: "Pizzahut" Receipt Address: "OADi4wdK9UzpH9JFP3BzqmoQAzX2eBwqg" Payer: "Alice", โ€ฆ Hash of Aliceโ€™s prior transaction: "HHBJFP3zqzX2A9Di4wedK9UzpBwqgQAmo" Hash of Pizzahutโ€™s prior transaction: "MdK9UzpHBzqzX2BwqgmoQAA9JFP3Di4we"

9.4 ์ฆ‰๊ฐ์  ๊ฐ€์น˜ ์‹คํ˜„ Instant Realization

์ข…๋ž˜์˜ ์‹œ์žฅ ๋ฉ”์ปค๋‹ˆ์ฆ˜์— ์˜ํ•˜๋ฉด, ํŒ๋งค์ž๊ฐ€ ์ƒํ’ˆ์ด ํŒ๋งค๋˜๋Š” ์‹œ์ ์— ๊ทธ ๊ฐ€์น˜๊ฐ€ ์‹คํ˜„๋œ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜, ํ‘œ์ค€ํ™”ํ ํ”Œ๋žซํผ์€ ๊ฐ€์น˜์˜ ์ฆ‰๊ฐ ์‹คํ˜„ ๋ฉ”์ปค๋‹ˆ์ฆ˜์„ ์ œ๊ณตํ•œ๋‹ค.

์‹œ์žฅ ๋ชจ๋“ˆ์€ ํŒ๋งค๋  ์ƒํ’ˆ์˜ ๊ฐ€์น˜๋ฅผ ์ถ”์ •ํ•œ ๋’ค, ์ถ”์ • ๊ฐ€์น˜์˜ ์ผ๋ถ€๋ฅผ ์ฆ‰์‹œ ํŒ๋งค์ž์˜ ๊ณ„์ขŒ๋กœ ์ž…๊ธˆํ•œ๋‹ค. ์ถ”ํ›„, ์‹ค์ œ๋กœ ํŒ๋งค๊ฐ€ ์™„์„ฑ๋˜๋Š” ์‹œ์ ์— ์„ ์ž…๊ธˆํ•œ ๊ธˆ์•ก๊ณผ ์‹คํ˜„๋œ ๊ธˆ์•ก ๊ฐ„์˜ ์ฐจ์•ก์„ ์ •์‚ฐํ•œ๋‹ค. ๊ธฐ์ˆ ์  ์ƒ์„ธ๋Š” ๊ณต๊ฐ„์›น ๊ธฐ๋ฐ˜์˜ ์‹œ์žฅ ์‹œ์Šคํ…œ์„ ์ฐธ์กฐํ•  ๊ฒƒ.

  • ํŒ๋งค ์ƒํ’ˆ์˜ ๊ฐ€์น˜๋ฅผ ์ถ”์ •ํ•˜๋Š” ๋ชจ๋“ˆ์€ DNN(Deep Neural Network)์˜ ํ˜•ํƒœ๋กœ ์ž‘์„ฑ๋œ๋‹ค.
  • ๋ชจ๋“  ์ƒํ’ˆ์€ ๋จผ์ € ํ”Œ๋žซํผ๊ณผ ํŒ๋งค์ž ๊ฐ„์— ์ด๋ค„์ง€๊ณ , ์ด์–ด์„œ ํ”Œ๋žซํผ๊ณผ ๊ตฌ๋งค์ž ๊ฐ„์— ์ด๋ค„์ง€๋ฉฐ, ์ตœ์ข…์ ์œผ๋กœ ๋‘ ๊ฑฐ๋ž˜์˜ ์ฐจ์•ก์„ ์ •์‚ฐํ•œ๋‹ค.
  • ์ด ๊ณผ์ •์€ DNN์— ์˜ํ•ด ์ง€์†์ ์œผ๋กœ ํ•™์Šต๋˜๊ณ , ๋”ฐ๋ผ์„œ, ์ถ”์ •์˜ ์ •ํ™•๋„๊ฐ€ ํ–ฅ์ƒ๋œ๋‹ค.

10. ๋ณด์•ˆ

๋ธ”๋ก์ฒด์ธ์˜ ๊ฐ•์ ์€ ๊ฑฐ๋ž˜ ๊ธฐ๋ก์˜ ์œ„๋ณ€์กฐ๊ฐ€ ๊ทนํžˆ ์–ด๋ ค์šด ์ ์ด๋ฉฐ, 4์„ธ๋Œ€ ๋ธ”๋ก์ฒด์ธ Openhash๋Š” ์ด์ „์˜ ๋ธ”๋ก์ฒด์ธ ๊ธฐ์ˆ ๋ณด๋‹ค ํ˜„์ €ํžˆ ๊ฐ•๋ ฅํ•œ ๋ณด์•ˆ ์‹œ์Šคํ…œ์„ ์ œ์‹œํ•œ๋‹ค. ์ด ๋ณด์•ˆ ์‹œ์Šคํ…œ์˜ ํŠน์ง•์€ ์•„๋ž˜๋ฅผ ํฌํ•จํ•œ๋‹ค.

10.1 ํ˜‘์ • ์„ธ๊ณ„์‹œ(Coordinated Universal Time) ๋˜๋Š” ์„ธ๊ณ„ ์›์ž์‹œ

๊ตญ๊ฐ€ ๋˜๋Š” ์ฃผ์— ํ• ๋‹น๋œ ์˜จ๋ˆ„๋ฆฌ ์„œ๋ฒ„๋Š” ์›์ž ์‹œ๊ณ„๋ฅผ ์šด์šฉํ•˜๋Š” ๊ตญ๊ฐ€๋“ค ์ค‘์—์„œ ๋ฌด์ž‘์œ„๋กœ ์ผ์ • ์ˆ˜์˜ ๊ตญ๊ฐ€๋ฅผ ์„ ์ •ํ•˜์—ฌ, ์ž์‹ ์˜ ์ „์ž ์‹œ๊ณ„์™€ ๋™๊ธฐํ™”ํ•˜๊ณ , ์ˆ˜ํ’€ ์„œ๋ฒ„๋Š” ์˜จ๋ˆ„๋ฆฌ ์„œ๋ฒ„์—, ๊ทธ๋ฃจํ„ฐ๊ธฐ ์„œ๋ฒ„๋Š” ์ˆ˜ํ’€ ์„œ๋ฒ„์—, ๋‚˜๋ฌด์™€ ๊ฐ€์ง€๋Š” ๊ทธ๋ฃจํ„ฐ๊ธฐ ์„œ๋ฒ„์— ๋™๊ธฐํ™”ํ•˜๋Š” ๋ฐฉ๋ฒ•์œผ๋กœ ์‹œ์นจ์„ ํ†ต์ผํ•œ๋‹ค.

 onnuriSync.supulSync.gruturkiSynk.namuSync.gajiSync.subscribe();

10.2 ๊ฒฐํ•ฉ ์žฌ๋ฌด์ œํ‘œ

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

ledger.cashFlowStatement.incomeStatement.balanceSheet.retainedEarning.subscribe()

ledger(contract:Contract){
 return ledgerItem;
}

cashFlow(ledgerItem) {
}

incomeStatement(ledgerItem: LedgerItem) {
 return incomeStatementItem;
}

balanceSheet() {
Return balanceSheetItem;
}


10.3 Proof of Credit

๊ทธ๋ฃจํ„ฐ๊ธฐ ์„œ๋ฒ„๊ฐ€ ํ†ตํ•ฉํ•˜๋Š” ๋‚˜๋ฌด๋“ค์˜ ์ ˆ๋ฐ˜์ด ๋‹ดํ•ฉํ•˜๋”๋ผ๋„, ์˜คํ”ˆํ•ด์‹œ ํ”Œ๋žซํผ ์ƒ์˜ ์žฅ๋ถ€ ์œ„๋ณ€์กฐ๋Š” Proof of Credit๋กœ ์ธํ•ด ๋ถˆ๊ฐ€๋Šฅํ•˜๋‹ค.

๋งŒ์•ฝ ๋‘ ์ฐธ์—ฌ์ž๊ฐ€ ๋™์ผํ•œ ๊ฑฐ๋ž˜๋ฅผ ๋‹ฌ๋ฆฌ ๊ธฐ๋กํ•˜๋ฉด, ๋‘˜ ์ค‘ ํฌ๋ ˆ๋””ํŠธ ๋ ˆ๋ฒจ์ด ๋†’์€ ์ชฝ์˜ ๊ธฐ๋ก์ด ์šฐ์„ ํ•œ๋‹ค. ๊ฐ๊ฐ์˜ ๊ฐ€์ง€, ๋‚˜๋ฌด, ๊ทธ๋ฃจํ„ฐ๊ธฐ ๋ฐ ์ˆ˜ํ’€์€ ๊ณ ์œ ํ•œ Credit ๋ ˆ๋ฒจ์ด ๊ฐ€์ง€๋ฉฐ, ๋ ˆ๋ฒจ ๊ณ„์‚ฐ์€ ๋ณด์œ ๊ธˆ์•ก, ๊ฑฐ๋ž˜๋Ÿ‰๊ณผ ๋นˆ๋„ ์™ธ์—๋„, Credit Chain์— ์˜ํ•ด ๊ฒฐ์ •๋œ๋‹ค. ๊ฐ€๋ น, A๊ฐ€ B๋กœ๋ถ€ํ„ฐ ๊ตฌ๋งคํ•˜๊ณ , B๊ฐ€ C๋กœ๋ถ€ํ„ฐ ๊ตฌ๋งคํ•œ ๊ฒฝ์šฐ, A์˜ Credit Level๋Š” B์˜ ๊ทธ๊ฒƒ์— ์˜ํ–ฅ์„ ๋ฏธ์น˜๊ณ , B์˜ ๊ทธ๊ฒƒ์€ C์˜ ๋ ˆ๋ฒจ์— ์˜ํ–ฅ์„ ๋ฏธ์นœ๋‹ค. Credit Level์€ ์ฃผ๊ธฐ์ ์œผ๋กœ ๊ณ„์‚ฐ๋œ๋‹ค. ์ผ์ • ๊ธฐ๊ฐ„ ๋™์•ˆ A์˜ ๋ ˆ๋ฒจ ๋ณ€๋™์€ A๊ฐ€ ์ƒํ’ˆ์„ ๊ตฌ๋งคํ•œ ํŒ๋งค์ž๋“ค ๊ฐ๊ฐ์˜ Credit ๋ ˆ๋ฒจ์— ๊ฐ€์ค‘์น˜๋ฅผ ๋ถ€๊ฐ€ํ•œ๋‹ค. ๊ฐ„๋‹จํžˆ ํ‘œํ˜„ํ•˜๋ฉด, ๋‚˜์—๊ฒŒ์„œ ์ƒํ’ˆ์„ ์‚ฌ๊ฐ„ ์ด๋“ค์ด ๋ฒˆ์ฐฝํ•˜๋ฉด, ๊ทธ ์ด์ต์ด ๋‚˜์—๊ฒŒ ๋Œ์•„์˜จ๋‹ค.

๋”ฐ๋ผ์„œ, ๋ณด๋‹ค ๋งŽ์€ Yip์„ ๋ณด์œ ํ•˜๊ณ , ๋ณด๋‹ค ์ž์ฃผ ๊ฑฐ๋ž˜ํ•˜๋ฉฐ, ๋ณด๋‹ค ์‹ ์šฉ๋„๊ฐ€ ๋†’์€ ์ด๋“ค๊ณผ ๊ฑฐ๋ž˜ํ•œ ๋ฉค๋ฒ„๋“ค์˜ Credit์ด ๊ทธ๋ ‡์ง€ ์•Š์€ ๋ฉค๋ฒ„๋“ค์˜ ๊ทธ๊ฒƒ๋ณด๋‹ค ๋†’๊ฒŒ ๊ฒฐ์ •๋œ๋‹ค.

Proof of Credits์€ ์ฐจ๋“ฑ์  ๋ฏผ์ฃผ์ฃผ์˜์™€ ์œ ์‚ฌํ•˜๋‹ค. ํ†ต์ƒ์˜ ๋ฏผ์ฃผ์ฃผ์˜๊ฐ€ 1์ธ 1ํ‘œ ์›์น™์— ์˜๊ฑฐํ•œ๋‹ค๋ฉด, Proof of Credits์ด ์ ์šฉ๋œ ํ‘œ์ค€ํ™”ํ ํ”Œ๋žซํผ์€ ์‚ฌํšŒ์  ์‹ ๋ง์ด ๋†’์€ ์ด๋“ค์ด ๊ทธ๋ ‡์ง€ ์•Š์€ ์ด๋“ค๋ณด๋‹ค ํฐ ์˜๊ฒฐ๊ถŒ์„ ๊ฐ–๋Š” ๊ฒƒ์ด๋‹ค.


credit(member: Member) {
 // determine weights of average Yip balance and of transactions.
 static amountWeight;
 static txnWeight;

 //determine moving average balance of Yip.
 averageYip();

 //determing moving average transaction amount and frequency.
 averageTxn();

 //obtain the change of credit levels of all members who bought products from this member.
 creditChangeOfBuyers();

 //calculate the credit level of this member.
 calculateCredit();

}

10.4 Free-In-Forced-Out

์‹ค๋ช…์ด ํ™•์ธ๋œ ์Šค๋งˆํŠธํฐ ๋˜๋Š” ์ผ๋ฐ˜ ์ „ํ™”์˜ ์ด์šฉ์ž๋Š” ๋ˆ„๊ตฌ๋‚˜ ๋ฉค๋ฒ„๊ฐ€ ๋  ์ˆ˜ ์žˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜, ๊ทœ์น™์„ ์œ„๋ฐ˜ํ•œ ๋ฉค๋ฒ„๋Š” ํ”Œ๋žซํผ์—์„œ ํ‡ด์ถœ๋œ๋‹ค.

๊ทœ์น™์˜ ์œ„๋ฐ˜ ์ •๋„๋Š” Penalty Score๋กœ ๊ธฐ๋ก๋œ๋‹ค.

penalty(member, reason){
	// Add penalty of reason to the penalty score of the member
	member.penaltyScore = reason.penalty;	
}

11. ์€ํ–‰

์ด์ „ ์„ธ๋Œ€์˜ ๋ธ”๋ก์ฒด์ธ์ด ์ค‘์•™ ์€ํ–‰์˜ ๊ธฐ๋Šฅ์„ ๋‹ด์€ ๋ฐ ๋ฐ˜ํ•ด, ํ‘œ์ค€ํ™”ํ๋Š” ์‹œ์ค‘ ์€ํ–‰์—์„œ ์ธ์  ๋ฌผ์  ์ž์›์„ ์ œ์™ธํ•œ **๋ฌด์ธ ์€ํ–‰(Autonomous Bank)**์œผ๋กœ ๊ธฐ๋Šฅํ•œ๋‹ค.

11.1 ์˜ˆ๊ธˆ

Yip์˜ ๋ณด์œ  ๊ธฐ๊ฐ„๊ณผ ์•ก์ˆ˜์— ๋น„๋ก€ํ•˜์—ฌ ์ง€๊ธ‰๋  ์ด์ž๋Š” 3ํ•ญ์˜ ์ž์‚ฐ ์šด์šฉ์—์„œ ๋‚˜์˜จ๋‹ค. ์ฐธ์—ฌ์ž๋Š” ์ž์‹ ์˜ ๋ณด์œ  Yip์„ ํˆฌ์ž์™€ ์˜ˆ๊ธˆ์œผ๋กœ ๋ถ„ํ• ํ•˜์—ฌ ์ง€์ •ํ•˜๊ณ , ํˆฌ์ž๋ฅผ ์ž๊ธฐ ํˆฌ์ž๊ณผ ์œ„ํƒ ํˆฌ์ž๋กœ, ์œ„ํƒ ํˆฌ์ž๋Š” ๊ทธ๋ฃจํ„ฐ๊ธฐ ์œ„ํƒ ํˆฌ์ž๊ณผ ์ˆ˜ํ’€ ์œ„ํƒ ํˆฌ์ž, ๊ทธ๋ฆฌ๊ณ  ์˜จ๋ˆ„๋ฆฌ ์œ„ํƒ ํˆฌ์ž๋กœ ๋ถ„ํ•  ์ง€์ •ํ•œ๋‹ค.

๋”ฐ๋ผ์„œ, ์ž์‚ฐ ์šด์šฉ์˜ ์ฃผ์ฒด๋Š” ์ž๊ธฐ, ๊ทธํˆฌํ„ฐ๊ธฐ, ์ˆ˜ํ’€ ๋ฐ ์˜จ๋ˆ„๋ฆฌ์ด๋‹ค.

// Divide oneโ€™s Yip balance into three categories.
divideInvestBalance(member.balance) {

};

11.2 ๋Œ€์ถœ ๋ฐ ์‹ ์šฉ์นด๋“œ

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

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

dividePayBalance() {

}

11.3 ์ž์‚ฐ ์šด์šฉ

์ˆ˜ํ’€๊ณผ ๊ทธ๋ฃจํ„ฐ๊ธฐ์˜ ์ž์‚ฐ ์šด์šฉ์€ ์ •์ฑ…์ ์ด๋ฉฐ, ์˜จ๋ˆ„๋ฆฌ์˜ ๊ทธ๊ฒƒ์€ ์‹œ์žฅ์ ์ด๋‹ค.

๊ตญ๊ฐ€ ๊ถŒ๋ ฅ์„ ๋Œ€๋ณ€ํ•˜๋Š” ์ˆ˜ํ’€์€ ์ž๊ตญ๋ฏผ์ด ๊ทธ๋ฃจํ„ฐ๊ธฐ์™€ ์˜จ๋ˆ„๋ฆฌ์— ์œ„ํƒ ํˆฌ์žํ•  ๊ธˆ์•ก์— ์ผ์ •ํ•œ ํ•œ๋„๋ฅผ ๊ฐ•์ œํ•  ์ˆ˜ ์žˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜, ์–ด๋Š ํ•œ ๊ตญ๊ฐ€๊ฐ€ ์ž๊ตญ๋ฏผ์˜ ํˆฌ์ž ํ™œ๋™์— ๊ณผ๋„ํ•œ ์ œํ•œ์„ ๊ฐ€ํ•  ๊ฒฝ์šฐ, ๊ตญ๊ฐ€ ์‹ ๋ขฐ๋„ ์†์ƒ์ด ๋ถˆ๊ฐ€ํ”ผํ•˜๋ฏ€๋กœ, ์ž์—ฐ์Šค๋ ˆ ๊ตญ๊ฐ€ ๊ถŒ๋ ฅ์˜ ํ–‰์‚ฌ ์ •๋„๊ฐ€ ์ œ์–ด๋  ์ˆ˜ ์žˆ๋‹ค.

// Supul can limit the investing decisions made by her people
limitInvest() {
}

ํ•œํŽธ, ํˆฌ์ž๋ฅผ ์œ„ํƒ๋ฐ›๋Š” ๊ทธ๋ฃจํ„ฐ๊ธฐ๋Š” ์ผ๋ฐ˜์ ์œผ๋กœ ์ฃผ์†Œ์ง€ ๊ทธ๋ฃจํ„ฐ๊ธฐ์ด๋ฉฐ, ์ฃผ์†Œ์ง€ ๊ทธ๋ฃจํ„ฐ๊ธฐ ์ด์™ธ์— ํŠน์ • ๊ทธ๋ฃจํ„ฐ๊ธฐ์— ํˆฌ์žํ•˜๋Š” ๊ฒƒ์€ ์ž๊ธฐ ํˆฌ์ž์— ์˜ํ•œ๋‹ค.

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

// Gather democratic decisions
democracy(){

Return democracy;
};


gruturkiInvest(democracy: Democracy){

}

12. ์—ด๋งค(Yeolmea)์™€ ์ฆ๊ถŒ

์˜จ๋ˆ„๋ฆฌ์— ์œ„ํƒ๋œ ํˆฌ์ž ์ž์‚ฐ์€ ์ฃผ์‹๊ณผ ์ฑ„๊ถŒ์„ ํฌํ•จํ•˜๋Š” ์ฆ๊ถŒ์— ์ง€์ถœ๋˜๋ฉฐ, ๊ทธ ์ˆ˜์ต์˜ ๋ถ„๋ฐฐ๊ถŒ์„ ๊ฐ–๋Š”๋‹ค. ๋ถ„๋ฐฐ๊ถŒ์€ ์—ด๋งค์˜ ํ˜•์‹์œผ๋กœ ์ง€๊ธ‰๋˜๋ฉฐ, ์—ด๋งค์˜ ์ด๋Ÿ‰์€ ์˜จ๋ˆ„๋ฆฌ์— ์œ„ํƒ๋œ ํˆฌ์ž ์ž์‚ฐ์˜ ์ด์•ก๊ณผ ๊ฐ™๋‹ค.

์—ด๋งค์˜ ๋ฐœํ–‰ ์ด๋Ÿ‰์€ ์œ„ํƒ ์ž์‚ฐ์˜ ์–‘์— ๋น„๋ก€ํ•˜์—ฌ, ์ฆ๊ฐ€ํ•˜๊ฑฐ๋‚˜ ๊ฐ์†Œํ•œ๋‹ค. ์—ด๋งค์˜ ๊ฑฐ๋ž˜ ์ˆ˜๋‹จ์€ Yip์ด๋ฉฐ, ๊ฐ€๊ฒฉ์€ ๋ฏธ๋ž˜์˜ ํ˜„๊ธˆ ํ๋ฆ„์„ ํ˜„๊ฐ€ ์ƒ๊ฐํ•œ ๊ธˆ์•ก์„ ๊ธฐ์ค€์œผ๋กœ ์ˆ˜์š”์™€ ๊ณต๊ธ‰์— ์˜ํ•ด ์กฐ์ •๋œ๋‹ค.

tradeYeolmae(invest){

buy();

sell();
}

ํˆฌ์ž ๋ชจ๋“ˆ์€ ์–ธ์ œ ์–ด๋–ค ์ฆ๊ถŒ์„ ๊ตฌ๋งคํ•  ์ง€ ๊ฒฐ์ •ํ•˜๋ฉฐ, ์ „ํ˜•์ ์ธ Deep Neural Network๋กœ ๊ตฌํ˜„๋œ๋‹ค.

onnuriInvest(){
}

12.1 ์ฆ๊ถŒ ํ‰๊ฐ€

์˜จ๋ˆ„๋ฆฌ ํŽ€๋“œ๊ฐ€ ๊ตฌ๋งคํ•˜๋Š” ์ฆ๊ถŒ์˜ ์ถ”์ • ๊ฐ€๊ฒฉ์€ ์ฃผ์š”ํ•˜๊ฒŒ ํ•ด๋‹น ์ฆ๊ถŒ์„ ๋ฐœํ–‰ํ•œ ์ž์˜ Credit Level์— ์˜ํ•ด ๊ฒฐ์ •๋œ๋‹ค. Credit Level์€ ๊ตญ๊ฐ€ ์œ„ํ—˜, ์‚ฐ์—… ์œ„ํ—˜, ๊ธฐ์—… ์œ„ํ—˜์„ ์ ์ • ๋น„์œจ๋กœ ๊ฐ€์ค‘ํ•œ ๊ฐ’์ด๋ฉฐ, ๊ทธ๋Ÿฌํ•œ ์ ์ • ๋น„์œจ์€ DNN์œผ๋กœ ๊ตฌํ˜„๋œ๋‹ค.

evaluateSecurity(){
}

12.2 ์ฆ๊ถŒ ๊ฑฐ๋ž˜

์‹œ์žฅ์—์„œ ์ƒํ’ˆ์„ ํŒ๋งคํ•˜๋Š” ๋ชจ๋“  ๊ธฐ์—…์€ ์ž์‹ ์„ ๋Œ€ํ‘œํ•˜๋Š” ์ฃผ์‹๊ณผ ์ฑ„๊ถŒ์„ ํŒ๋งคํ•  ์ˆ˜ ์žˆ๋‹ค. ๊ตฌ๋งค์ž๋Š” ์˜จ๋ˆ„๋ฆฌ, ์ˆ˜ํ’€, ๊ทธ๋ฃจํ„ฐ๊ธฐ, ๋˜๋Š” ๊ฐ€์ง€์ด๋ฉฐ, ์—ฌํƒ€ ์ƒํ’ˆ๊ณผ ๋™์ผํ•œ ๊ฑฐ๋ž˜ ๊ทœ์น™์ด ์ ์šฉ๋œ๋‹ค.

13. ๋””์ง€ํ„ธ ํ‚ค, ์žŽ ์ฃผ์†Œ, ๋ฐ ๋””์ง€ํ„ธ ์„œ๋ช…, Yip addresses, and digital signatures

๋ธ”๋ก์ฒด์ธ์˜ ๊ฒฝ์šฐ, ๋””์ง€ํ„ธ ํ‚ค(Digital keys) ๋“ฑ์€ ๋ธ”๋ก์ฒด์ธ๊ณผ ๋ฌด๊ด€ํ•œ ๋ณ„๋„์˜ ์ฃผ์ œ์ด๋ฉฐ, Wallet ๊ธฐ์ˆ ๊ณผ ๊ด€๋ จ์žˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜, ํ‘œ์ค€ํ™”ํ์™€ ๋””์ง€ํ„ธ ํ‚ค๋Š” ๋ถˆ๊ฐ€๋ถ„์ด๋ฉฐ, ์ง€๊ฐ‘(Wallet)์ด๋ผ๋Š” ์šฉ์–ด ๋Œ€์‹  ํ†ต์žฅ(Bank Book)์ด๋ผ ๋ถ€๋ฅธ๋‹ค. Elliptic curve multiplication, Hash algorithm๊ณผ Base58Check์€ ๋ธ”๋ก์ฒด์ธ๊ณผ ํ‘œ์ค€ํ™”ํ๊ฐ€ ๋™์ผํ•˜๋‹ค.

๊ตญ๊ฐ€๋กœ๋ถ€ํ„ฐ ํ‘œ์ค€ํ™”ํ๋ฅผ ๊ตฌ๋งคํ•˜๋Š” ์ฐธ์—ฌ์ž๋Š” Random์œผ๋กœ ๊ตฌ์„ฑํ•œ (256๋น„ํŠธ ๋˜๋Š” 64 hexadecimal digits) Private key์— Elliptic curve multiplication์„ ์ ์šฉํ•˜์—ฌ, Public key๋ฅผ ๋งŒ๋“ค๊ณ , ์ด์–ด์„œ hash algorithm๊ณผ Base58Check์œผ๋กœ Bank Book Address๋ฅผ ๋งŒ๋“ ๋‹ค. Private key์˜ ํฌ๋งท์€ Hes, WIF, WIF-compressed ๋“ฑ์ด๋ฉฐ, ๋ธ”๋ก์ฒด์ธ๊ณผ ๋™์ผํ•˜๋‹ค.

๋น„ํŠธ์ฝ”์ธ Vanity Address์™€ ๋‹ฌ๋ฆฌ, ํ‘œ์ค€ํ™”ํ๋Š” ๋ฏธ๋ฆฌ ์ค€๋น„๋œ ์–ดํœ˜ ์‚ฌ์ „์—์„œ ๋ฌด์ž‘์œ„๋กœ ์ธ์ถœํ•œ ์–ดํœ˜(Locked Vocabulary)์— ์ƒ์„ฑ๋œ Bank Book Address๋ฅผ ๋งคํ•‘ํ•˜๊ณ , ์ž…์ถœ๊ธˆ ๊ฑฐ๋ž˜๊ฐ€ ์ข…๋ฃŒ๋˜๋ฉด, ํ•ด๋‹น ์–ดํœ˜๋ฅผ ์žฌ์ฐจ ์‚ฌ์ „ ์†์— ์ธ์ž…ํ•œ๋‹ค(Unlocked Vocabulary). ๋”ฐ๋ผ์„œ, ์ˆ˜์‹ ์ž์˜ ๊ณ„์ขŒ ๋ฒˆํ˜ธ๋Š” ์†Œ๋‚˜๋ฌด, ํŒŒ๋ž‘์ƒˆ์™€ ๊ฐ™์€ ์นœ๊ทผํ•œ ์–ดํœ˜๋กœ ํ‘œํ˜„๋œ๋‹ค.

generateBankBookAddress(){
}

Bitcoin Address์™€ ๋‹ฌ๋ฆฌ, ์€ํ–‰ ํ†ต์žฅ๊ณผ ๋™์ผํ•œ ๊ธฐ๋Šฅ์„ ๊ฐ–๋Š” Bank Book์„ ์‚ฌ์šฉํ•˜๋Š” ํ‘œ์ค€ํ™”ํ์˜ ๊ณ„์ขŒ๋ฅผ Bitcoin์˜ ๊ฒฝ์šฐ์™€ ๋งˆ์ฐฌ๊ฐ€์ง€๋กœ, ๋งค ๊ฑฐ๋ž˜๋งˆ๋‹ค ๋ฐ”๊ฟ” ์‚ฌ์šฉํ•˜๋Š” ์ด์œ ๋ฅผ ๊ถ๊ธˆํ•ดํ•  ์ˆ˜ ์žˆ๋‹ค. ๊ฐœ์ธ ์ •๋ณด ๋ณด์•ˆ ๋•Œ๋ฌธ์ด๋‹ค. ํ•ญ์ƒ ๋™์ผํ•œ ๊ณ„์ขŒ ๋ฒˆํ˜ธ๋ฅผ ์ด์šฉํ•œ๋‹ค๋ฉด, ๋งŒ์•ฝ, ๊ทธ๋ฃจํ„ฐ๊ธฐ ์„œ๋ฒ„์˜ DB๊ฐ€ ํ•ดํ‚น๋  ๊ฒฝ์šฐ, ํ•ด๋‹น ๊ทธ๋ฃจํ„ฐ๊ธฐ๋ฅผ ์ฃผ์†Œ์ง€๋กœ ํ•˜๋Š” ๋ชจ๋“  ์ฐธ์—ฌ์ž๋“ค์˜ ๊ธˆ์œต ๊ฑฐ๋ž˜ ๋‚ด์—ญ์ด ์™„์ „ํžˆ ๋ˆ„์ถœ๋œ๋‹ค.

13.1 Private Key์˜ ๋ณด๊ด€

๋ธ”๋ก์ฒด์ธ์˜ ๊ฒฝ์šฐ, Private Key๋ฅผ ๋ถ„์‹คํ•˜๋ฉด, ์ž์‹ ์˜ ์•”ํ˜ธ์ฆํ‘œ๋ฅผ ์˜๊ตฌํžˆ ์ƒ์‹คํ•œ๋‹ค. ๊ฒŒ๋‹ค๊ฐ€ ์ฐธ์—ฌ์ž๊ฐ€ ๊ฐ๊ธฐ ์ž์‹ ์˜ Private Key๋ฅผ ์™ธ์šธ ์ˆ˜ ์žˆ๊ฒŒ ํ•  ๋ฌ˜์•ˆ์€ ์—†๋‹ค.

ํ‘œ์ค€ํ™”ํ์˜ ๊ฒฝ์šฐ, ์ฐธ์—ฌ์ž ๊ฐ๊ฐ์˜ Private Key๋ฅผ ๊ตญ๊ฐ€๊ฐ€ ๋ณด๊ด€ํ•˜๋ฉฐ, ๊ทธ ํš๋“ ๋ฐฉ๋ฒ•๊ณผ ์ ˆ์ฐจ๋Š” ์˜ค์ง ์ฐธ์—ฌ์ž๋“ค์˜ ๋ฏผ์ฃผ์  ์˜์‚ฌ ๊ฒฐ์ •์— ์˜ํ•œ๋‹ค. ์ฆ‰, ํ‘œ์ค€ํ™”ํ๋Š” ๋ฏผ์ฃผ์ฃผ์˜์— ์˜ํ•ด ์ง€ํƒฑ๋˜๋Š” ๊ธˆ์œต ์ฒด๊ณ„์ด๋ฉฐ, ํ•œ ํŽธ์œผ๋กœ๋Š”, ๋ฏผ์ฃผ์ฃผ์˜๋ฅผ ๊ตฌํ˜„ํ•  ๊ธฐ์ˆ ์  ๋ฐฉ์•ˆ์ด๋‹ค.

privateKeyRules(){
};

getPrivateKey() {
};

updatePrivateKey(){
};

setPrivateKey(){
};

deletePrivateKey(){
};

14. Smart Contracts

Coded Korea


Copyright (C) <2017> <์ฃผํ”ผํ„ฐ> This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, version 3.0. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see http://www.gnu.org/licenses/

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment