Solidity - YooByWk/YooByWk.github.io GitHub Wiki

Solidity

Solidity๋Š” ์ด๋”๋ฆฌ์›€ ๋ธ”๋ก์ฒด์ธ์˜ EVM ์—์„œ ์‹คํ–‰๋˜๋Š” ์Šค๋งˆํŠธ ์ปจํŠธ๋ž™ํŠธ๋ฅผ ์ž‘์„ฑํ•˜๊ธฐ ์œ„ํ•œ ์ •์  ํƒ€์ž… ํ”„๋กœ๊ทธ๋ž˜๋ฐ ์–ธ์–ด.

Solidity๋Š” ์•ˆ์ •์„ฑ, Gas ํšจ์œจ์„ฑ, ๋ณด์•ˆ์„ฑ์„ ์ตœ์šฐ์„ ์œผ๋กœ ์„ค๊ณ„๋๋‹ค.

ํŠน์ง•

์ •์  ํƒ€์ž… ์‹œ์Šคํ…œ

  • ์ •์  ํƒ€์ž… : ๋ชจ๋“  ๋ณ€์ˆ˜์˜ ํƒ€์ž…์ด ์ปดํŒŒ์ผ ์‹œ์ ์— ์ •์˜๋˜์–ด ๋Ÿฐํƒ€์ž„ ์˜ค๋ฅ˜์˜ ๊ฐ€๋Šฅ์„ฑ์ด ๋‚ฎ๋‹ค. ๋”ฐ๋ผ์„œ ์Šค๋งˆํŠธ ์ปจํŠธ๋ž™ํŠธ์˜ ์•ˆ์ •์„ฑ์„ ๋†’์ธ๋‹ค (uint256, address, bytes32 ๅค–)
  • Gas ๋น„์šฉ ๊ณ ๋ ค : ๊ธฐ๋ณธ ์ •์ˆ˜ ํƒ€์ž…(uint, int)์€ ๋น„ํŠธ ์ˆ˜๋ฅผ ๋ช…์‹œํ•  ์ˆ˜ ์žˆ๋‹ค. ์ž‘์€ ํƒ€์ž…์„ ์‚ฌ์šฉํ•ด Gas๋น„์šฉ์„ ์ ˆ์•ฝํ•  ์ˆ˜ ์žˆ๋‹ค.

๊ฐ์ฒด ์ง€ํ–ฅ ์š”์†Œ

์™„๋ฒฝํ•œ OOP ์–ธ์–ด๋Š” ์•„๋‹ˆ๋”๋ผ๋„, ๋ชจ๋“ˆํ™”์™€ ์žฌ์‚ฌ์šฉ์„ฑ์„ ์œ„ํ•ด ๋‹ค์Œ๊ณผ ๊ฐ™์€ ๊ฐœ๋…์ด ์กด์žฌํ•œ๋‹ค.

  • ์ปจํŠธ๋ž™ํŠธ(Contract) : OOP์˜ ํด๋ž˜์Šค์™€ ์œ ์‚ฌํ•˜๋‹ค. ์ƒํƒœ๋ณ€์ˆ˜ + ํ•จ์ˆ˜๋ฅผ ํฌํ•จ
  • ์ƒ์† : is ํ‚ค์›Œ๋“œ๋ฅผ ํ†ตํ•ด ๋‹ค๋ฅธ ์ปจํŠธ๋ž™ํŠธ์˜ ํ•จ์ˆ˜์™€ ์ƒํƒœ ๋ณ€์ˆ˜๋ฅผ ์ƒ์†๋ฐ›๋Š”๋‹ค (๋‹ค์ค‘ ์ƒ์† ๋˜ํ•œ ์ง€์›ํ•œ๋‹ค.)
  • ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ : delegatecall ์„ํ†ตํ•ด ์‹คํ–‰. ์žฌ์‚ฌ์šฉ ๊ฐ€๋Šฅํ•œ ์ฝ”๋“œ๋ฅผ ๋‹ด๋Š” ์ปจํŠธ๋ž™ํŠธ.

๋ฉ”๋ชจ๋ฆฌ ๊ด€๋ฆฌ

์ €์žฅ์†Œ ๊ด€๋ฆฌ

๋ฐ์ดํ„ฐ ์ €์žฅ ์œ„์น˜์— ๋”ฐ๋ผ Gas์˜ ๋น„์šฉ์ด ๋‹ฌ๋ผ์ง„๋‹ค.

  1. storage : ๋ธ”๋ก์ฒด์ธ์— ์˜๊ตฌ์ ์œผ๋กœ ์ €์žฅ๋  ์ƒํƒœ. ๊ฐ€์žฅ ๋น„์‹ผ Gas ๋น„์šฉ
  2. memory : ํ•จ์ˆ˜ ํ˜ธ์ถœ ๋™์•ˆ ์‚ฌ์šฉ๋˜๋Š” ๋ณ€์ˆ˜. ๋ณต์žกํ•œ ๋ฐฐ์—ด/๊ตฌ์กฐ์ฒด ๋กœ์ง์— ์ฃผ๋กœ ์‚ฌ์šฉ๋˜๋ฉฐ, ํ•จ์ˆ˜ ์ข…๋ฃŒ์‹œ ์†Œ๋ฉธ๋จ
  3. calldata : ์™ธ๋ถ€ ํ•จ์ˆ˜ ํ˜ธ์ถœ์˜ Arguments๋ฅผ ์ €์žฅํ•˜๋Š” ์ฝ๊ธฐ ์ „์šฉ ์˜์—ญ. ๊ฐ€์žฅ ํšจ์œจ์ด ์ข‹๋‹ค.

Gas?

Gas๋Š” EVM์—์„œ ์—ฐ์‚ฐ์„ ์‹คํ–‰ํ•˜๋Š” ๋น„์šฉ. ์ž์› ๋‚ญ๋น„๋ฅผ ๋ฐฉ์ง€ํ•˜๊ธฐ ์œ„ํ•จ.

์ฒ˜๋ฆฌ๋น„์šฉ : ๋ˆ

๊ฐ€์Šค๋ฅผ ์ ˆ์•ฝํ•˜๊ธฐ ์œ„ํ•ด์„œ๋Š” ๋ฃจํ”„ ์ตœ์†Œํ™”์™€, ์งง์€ ์ •์ˆ˜ ํƒ€์ž…(๊ฐ€๋Šฅํ•œ ๋ฒ”์œ„ ๋‚ด)๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์ด ์ข‹๋‹ค.

ํŠนํžˆ storage์˜ ๊ฐ’์„ ์ž์ฃผ ์—…๋ฐ์ดํŠธ (์—„๋ฐ€ํžˆ ๋งํ•˜๋ฉด ์“ฐ๋Š” ํ–‰๋™) ํ•˜์ง€ ์•Š๋Š”๊ฒŒ ์ข‹์Œ.

๋ณด์•ˆ

์Šค๋งˆํŠธ ์ปจํŠธ๋ž™ํŠธ์˜ ํŠน์„ฑ (๋ถˆ๋ณ€์„ฑ)์œผ๋กœ ์ธํ•ด ๋ณด์•ˆ ์ทจ์•ฝ์  ๋ฐœ๊ฒฌ ์‹œ ๋งค์šฐ ์น˜๋ช…์ 

๋”ฐ๋ผ์„œ ์ ‘๊ทผ ์ œ์–ด, SafeMath (์˜ค๋ฒ„ํ”Œ๋กœ์šฐ/์–ธ๋”ํ”Œ๋กœ์šฐ ๋ฐฉ์ง€), ์žฌ์ง„์ž… ๊ณต๊ฒฉ ๋ฐฉ์ง€์— ๋Œ€ํ•ด ๋Œ€์ฑ…์„ ์ž˜ ์„ธ์›Œ์•ผ ํ•จ.

์—ฌ๋‹ด

C + JavaScript ๋น„์Šทํ•œ ๋ง›.

Rust๋ž‘๋„ ๋น„์Šทํ•œ ๋ง›.

RemixIDE์—์„œ ์›น ์ƒ์œผ๋กœ ๊ฐ€์ƒ ๋ฐฐํฌ ๋ฐ ๊ฐ„๋‹จํ•œ ์ปจํŠธ๋ž™ํŠธ๋ฅผ ์ž‘์„ฑ, ์‹คํ–‰ํ•ด๋ณผ์ˆ˜๋„ ์žˆ๋‹ค..