λ³Έλ¬Έ λ°”λ‘œκ°€κΈ°
πŸ’‘ work work work/blockchain

[크립토 μ’€λΉ„] Lesson3. κ³ κΈ‰ 솔리디티 κ°œλ… - Chapter4~11 : κ°€μŠ€, μ‹œκ°„ λ‹¨μœ„, Public ν•¨μˆ˜, ν•¨μˆ˜ μ œμ–΄μžμ˜ λ‹€λ₯Έ νŠΉμ§•, κ°€μŠ€ μ ˆμ•½ν•˜κΈ°

by hanwitjus 2022. 7. 4.

Chapter 4. κ°€μŠ€ (Gas)

  • κ°€μŠ€ - 이더리움 DApp이 μ‚¬μš©ν•˜λŠ” μ—°λ£Œ

DApp의 ν•¨μˆ˜λ₯Ό μ‹€ν–‰ν•  λ•Œλ§ˆλ‹€ κ°€μŠ€λ₯Ό μ§€λΆˆν•΄μ•Ό ν•œλ‹€.

ν•¨μˆ˜λ₯Ό μ‹€ν–‰ν•˜λŠ” 데에 μ–Όλ§ˆλ‚˜ λ§Žμ€ κ°€μŠ€κ°€ ν•„μš”ν•œμ§€λŠ” κ·Έ ν•¨μˆ˜μ˜ 둜직이 μ–Όλ§ˆλ‚˜ λ³΅μž‘ν•œμ§€μ— 따라 달라짐.

 

각각의 연산은 μ†Œλͺ¨λ˜λŠ” κ°€μŠ€ λΉ„μš©(gas cost)κ°€ 있고, κ·Έ 연산을 μˆ˜ν–‰ν•˜λŠ” 데에 μ†Œλͺ¨λ˜λŠ” μ»΄ν“¨νŒ… μžμ›μ˜ 양이 이 λΉ„μš©μ„ κ²°μ •ν•œλ‹€.

 

ν•¨μˆ˜λ₯Ό μ‹€ν–‰ν•˜λŠ” 것은 μ‚¬μš©μžλ“€μ΄ μ‹€μ œ λˆμ„ μ¨μ•Όν•˜κΈ° λ•Œλ¬Έμ—, 

μ΄λ”λ¦¬μ›€μ—μ„œ μ½”λ“œ μ΅œμ ν™”λŠ” λ‹€λ₯Έ ν”„λ‘œκ·Έλž˜λ° 언어듀에 λΉ„ν•΄ 훨씬 μ€‘μš”ν•˜λ‹€.

 

 

κ°€μŠ€λŠ” μ™œ ν•„μš”ν•œκ°€?

 λˆ„κ΅°κ°€κ°€ λ¬΄ν•œ λ°˜λ³΅λ¬Έμ„ μ¨μ„œ λ„€νŠΈμ›Œν¬λ₯Ό λ°©ν•΄ν•˜κ±°λ‚˜, μžμ› μ†Œλͺ¨κ°€ 큰 연산을 μ¨μ„œ λ„€νŠΈμ›Œν¬ μžμ›μ„ λͺ¨λ‘ μ‚¬μš©ν•˜μ§€ λͺ»ν•˜λ„둝 ν•˜κΈ° μœ„ν•΄

μ—°μ‚° μ²˜λ¦¬μ— λΉ„μš©μ΄ 듀도둝 λ§Œλ“€μ—ˆκ³ , λ”°λΌμ„œ μ‚¬μš©μžλ“€μ€ μ €μž₯곡간 뿐만 μ•„λ‹ˆλΌ μ—°μ‚° μ‚¬μš© μ‹œκ°„μ— λ”°λΌμ„œλ„ λΉ„μš©μ„ μ§€λΆˆν•΄μ•Ό ν•œλ‹€.

 

 

κ°€μŠ€λ₯Ό 아끼기 μœ„ν•œ ꡬ쑰체 μ••μΆ•

 uint에 uint8, uint16, uint32 등등이 μžˆλŠ”λ° κΈ°λ³Έμ μœΌλ‘œλŠ” 이런 ν•˜μœ„νƒ€μž…μ„ 써봀자

μ†”λ¦¬λ””ν‹°μ—μ„œ 256λΉ„νŠΈμ˜ μ €μž₯ 곡간을 미리 μž‘μ•„λ†“κΈ° λ•Œλ¬Έμ— μ•„λ¬΄λŸ° 이득이 μ—†λ‹€.

 

ν•˜μ§€λ§Œ ꡬ쑰체 μ•ˆμ— μ—¬λŸ¬κ°œμ˜ uintλ₯Ό λ§Œλ“ λ‹€λ©΄ κ°€λŠ₯ν•œ 더 μž‘μ€ 크기의 uintλ₯Ό μ“°λ©΄ 

μ†”λ¦¬λ””ν‹°μ—μ„œ κ·Έ λ³€μˆ˜λ“€μ„ 더 μž‘μ€ 곡간을 μ°¨μ§€ν•˜λ„λ‘ μ••μΆ•ν•  것이닀.

 

μ΄λŸ¬ν•œ 이유둜 ꡬ쑰체 μ•ˆμ—μ„œλŠ” κ°€λŠ₯ν•œ ν•œ μž‘μ€ 크기의 μ •μˆ˜ νƒ€μž…μ„ μ“°λŠ” 것이 μ’‹λ‹€.

또 λ™μΌν•œ 데이터 νƒ€μž…μ€ ν•˜λ‚˜λ‘œ λ¬Άμ–΄ λ†“λŠ” 것이 μ’‹λ‹€.

  • uint c; uint32 a; uint32 b; 
  • uint32 a; uint c; uint32 b;

μ²«λ²ˆμ§Έκ°€ κ°€μŠ€λ₯Ό 덜 μ†Œλͺ¨ν•œλ‹€. uint32 ν•„λ“œκ°€ λ¬Άμ˜€κΈ° λ•Œλ¬Έ.

 

 

Chapter 5. μ‹œκ°„ λ‹¨μœ„

  • μ‹œκ°„ λ‹¨μœ„(Time units)

nowλ³€μˆ˜λ‘œ ν˜„μž¬μ˜ μœ λ‹‰μŠ€ νƒ€μž„μŠ€νƒ¬ν”„ 값을 얻을 수 있음.

μ†”λ¦¬λ””ν‹°λŠ” seconds, minutes, hours, days, weeks, years 같은 μ‹œκ°„ λ‹¨μœ„ λ˜ν•œ ν¬ν•¨ν•˜κ³  μžˆλ‹€.

그에 ν•΄λ‹Ήν•˜λŠ” 길이만큼 μ΄ˆλ‹¨μœ„ uint 숫자둜 λ³€ν™˜λœλ‹€.

 

 

Chapter 6. μ’€λΉ„ μž¬μ‚¬μš© λŒ€κΈ° μ‹œκ°„

  • ꡬ쑰체λ₯Ό 인수둜 μ „λ‹¬ν•˜κΈ°

private λ˜λŠ” internal ν•¨μˆ˜μ— μΈμˆ˜λ‘œμ„œ ꡬ쑰체의 storage 포인터λ₯Ό 전달할 수 μžˆλ‹€. 

ν•¨μˆ˜μ— μ’€λΉ„ IDλ₯Ό μ „λ‹¬ν•˜κ³  μ’€λΉ„λ₯Ό μ°ΎλŠ” λŒ€μ‹ , 쒀비에 λŒ€ν•œ μ°Έμ‘°λ₯Ό 전달할 수 μžˆλ‹€.

 

 

Chapter 7. Public ν•¨μˆ˜ & λ³΄μ•ˆ

  λ³΄μ•ˆμ„ μ κ²€ν•˜λŠ” 쒋은 방법은 λͺ¨λ“  publicκ³Ό external ν•¨μˆ˜λ₯Ό κ²€μ‚¬ν•˜κ³ , μ‚¬μš©μžλ“€μ΄ κ·Έ ν•¨μˆ˜λ“€μ„ λ‚¨μš©ν•  수 μžˆλŠ” 방법을 μƒκ°ν•΄λ³΄λŠ” 것.

-> 이 ν•¨μˆ˜λ“€μ΄ onlyOwner 같은 μ œμ–΄μžλ₯Ό κ°–μ§€ μ•ŠλŠ” 이상, μ–΄λ–€ μ‚¬μš©μžλ“  이 ν•¨μˆ˜λ“€μ„ ν˜ΈμΆœν•˜κ³  μžμ‹ λ“€μ΄ μ›ν•˜λŠ” λͺ¨λ“  데이터λ₯Ό ν•¨μˆ˜μ— 전달할 수 μžˆλ‹€.

 

 

Chapter 8. ν•¨μˆ˜ μ œμ–΄μžμ˜ 또 λ‹€λ₯Έ νŠΉμ§•

 μΈμˆ˜λ₯Ό κ°€μ§€λŠ” ν•¨μˆ˜ μ œμ–΄μž

 

 

Chapter 10. ‘View’ ν•¨μˆ˜λ₯Ό μ‚¬μš©ν•΄ κ°€μŠ€ μ ˆμ•½ν•˜κΈ°

 View ν•¨μˆ˜λŠ” μ‚¬μš©μžμ— μ˜ν•΄ μ™ΈλΆ€μ—μ„œ 호좜 λ˜μ—ˆμ„ λ•Œ κ°€μŠ€λ₯Ό μ „ν˜€ μ†Œλͺ¨ν•˜μ§€ μ•ŠλŠ”λ‹€.

View ν•¨μˆ˜λŠ” 블둝체인 μƒμ—μ„œ μ‹€μ œλ‘œ μ–΄λ–€ 것도 μˆ˜μ •ν•˜μ§€ μ•ŠκΈ° λ•Œλ¬Έ. 

-> DApp의 κ°€μŠ€ μ‚¬μš©μ„ μ΅œμ ν™” ν•˜λŠ” 비결은 κ°€λŠ₯ν•œ λͺ¨λ“  곳에 읽기 μ „μš©μ˜ external view ν•¨μˆ˜λ₯Ό μ“°λŠ” 것.

 

λ§Œμ•½ view ν•¨μˆ˜κ°€ 동일 μ»¨νŠΈλž™νŠΈ 내에 μžˆλŠ”, view ν•¨μˆ˜κ°€ μ•„λ‹Œ λ‹€λ₯Έ ν•¨μˆ˜μ—μ„œ λ‚΄λΆ€μ μœΌλ‘œ 호좜될 경우, μ—¬μ „νžˆ κ°€μŠ€λ₯Ό μ†Œλͺ¨ν•  것이닀.

이것은 λ‹€λ₯Έ ν•¨μˆ˜κ°€ 이더리움에 νŠΈλžœμž­μ…˜μ„ μƒμ„±ν•˜κ³ , μ΄λŠ” λͺ¨λ“  κ°œλ³„ λ…Έλ“œμ—μ„œ κ²€μ¦λ˜μ–΄μ•Ό ν•˜κΈ° λ•Œλ¬Έ. 

View ν•¨μˆ˜λŠ” μ™ΈλΆ€μ—μ„œ 호좜 λ˜μ—ˆμ„ λ•Œμ—λ§Œ 무료.

 

 

Chapter 11. StorageλŠ” λΉ„μ‹Έλ‹€

 λ°μ΄ν„°μ˜ 일뢀λ₯Ό μ“°κ±°λ‚˜ λ°”κΏ€ λ•Œ λ§ˆλ‹€ 블둝체인에 영ꡬ적으둜 기둝되기 λ•Œλ¬Έμ—

μ˜μ›νžˆ μ§€κ΅¬μƒμ˜ 수천개의 λ…Έλ“œλ“€μ΄ κ·Έ ν•˜λ“œ λ“œλΌμ΄λΈŒμ— 데이터λ₯Ό μ €μž₯ν•΄μ•Ό ν•˜κ³ , 블둝체인이 μ»€μ Έκ°€λ©΄μ„œ λ°μ΄ν„°μ˜ μ–‘ λ˜ν•œ 같이 μ»€μ Έλ‚˜κ°€λ―€λ‘œ λΉ„μš©μ΄ λ“ λ‹€. 

 

λΉ„μš©μ„ μ΅œμ†Œν™” ν•˜κΈ° μœ„ν•΄μ„œ, μ§„μ§œ ν•„μš”ν•œ κ²½μš°κ°€ μ•„λ‹ˆλ©΄ storage에 데이터λ₯Ό μ“°μ§€ μ•ŠλŠ” 것이 μ’‹λ‹€.

 

λ©”λͺ¨λ¦¬μ— λ°°μ—΄ μ„ μ–Έν•˜κΈ°

 storage에 아무것도 μ“°μ§€ μ•Šκ³ λ„ ν•¨μˆ˜ μ•ˆμ— μƒˆλ‘œμš΄ 배열을 λ§Œλ“œλ €λ©΄ 배열에 memory ν‚€μ›Œλ“œλ₯Ό μ“°λ©΄ λœλ‹€.

이 배열은 ν•¨μˆ˜κ°€ 끝날 λ•Œ κΉŒμ§€λ§Œ μ‘΄μž¬ν•  것이고, storage 배열을 직접 μ—…λ°μ΄νŠΈ ν•˜λŠ” 것보닀 κ°€μŠ€ μ†Œλͺ¨ μΈ‘λ©΄μ—μ„œ 훨씬 μ €λ ΄ν•˜λ‹€.

 

λ©”λͺ¨λ¦¬ 배열은 λ°˜λ“œμ‹œ 길이 μΈμˆ˜μ™€ ν•¨κ»˜ μƒμ„±λ˜μ–΄μ•Ό ν•œλ‹€.

ν˜„μž¬λ‘œμ„œλŠ” array.puch() 둜 크기가 쑰절 λ˜μ§„ μ•ŠλŠ”λ‹€.

 

 

LIST

λŒ“κΈ€