🐬 Solidity 5κ°• 🐬

ν™μœ μ§„Β·2021λ…„ 9μ›” 25일

solidity

λͺ©λ‘ 보기
5/5

πŸ“Œ 이더리움 μƒμ˜ 토큰

이더리움 μƒμ—μ„œμ˜ 토큰은 .. κ·Έμ € ν•˜λ‚˜μ˜ μ»¨νŠΈλž™νŠΈ
λͺ‡λͺ‡ ν•¨μˆ˜λ₯Ό κ°€μ§€κ³  μ‚¬μš©μžλ“€μ΄ κ·Έλ“€μ˜ 토큰을 λ‹€λ₯Έ μ£Όμ†Œλ‘œ 전솑할 수 있게 함

ERC721 토큰! μš°λ¦¬λ“€μ˜ μ’€λΉ„ κ±°λž˜ν•  수 μžˆλ„λ‘ 함

πŸ“Œ ERC721 ν‘œμ€€, 닀쀑 상속

토큰 μ»¨νŠΈλž™νŠΈλ₯Ό κ΅¬ν˜„ν•  λ•Œ 처음 ν•΄μ•Ό ν•  일 :
1. μΈν„°νŽ˜μ΄μŠ€λ₯Ό 솔리디티 파일둜 λ”°λ‘œ λ³΅μ‚¬ν•˜μ—¬ μ €μž₯
2. import "./erc721.sol"; μ¨μ„œ μž„ν¬νŠΈ
3. ν•΄λ‹Ή μ»¨νŠΈλž™νŠΈλ₯Ό μƒμ†ν•˜λŠ” 우리의 μ»¨νŠΈλž™νŠΈλ₯Ό λ§Œλ“€κ³ , 각각의 ν•¨μˆ˜λ₯Ό μ˜€λ²„λΌμ΄λ”©ν•˜μ—¬ μ •μ˜

닀쀑 μƒμ†ν•˜λŠ” 방법 (κ·Έλƒ₯ ,둜 ꡬ뢄)

contract SatoshiNakamoto is NickSzabo, HalFinney {
  // 였 이런, 이 μ„Έκ³„μ˜ 비밀이 λ°ν˜€μ‘Œκ΅°!
}

πŸ“Œ balanceOf & ownerOf

balanceOf : λ‹¨μˆœνžˆ addressλ₯Ό λ°›μ•„, ν•΄λ‹Ή addressκ°€ 토큰을 μ–Όλ§ˆλ‚˜ κ°€μ§€κ³  μžˆλŠ”μ§€ λ°˜ν™˜. μ‚¬μš©μžκ°€ μ’€λΉ„λ₯Ό μ–Όλ§ˆλ‚˜ κ°€μ§€κ³  μžˆλŠ”μ§€!

ownerOf : 토큰 ID(μ’€λΉ„ ID)λ₯Ό λ°›μ•„, 이λ₯Ό μ†Œμœ ν•˜κ³  μžˆλŠ” μ‚¬λžŒμ˜ addressλ₯Ό λ°˜ν™˜.

πŸ“Œ λ¦¬νŒ©ν† λ§

μ•žμ„œ μƒμ„±ν•œ ownerOf ν•¨μˆ˜μ™€ modifier κ°€ 이름이 κ°™μ•„μ„œ μΆ©λŒλœλ‹€!
modifier 이름을 ownerOfμ—μ„œ onlyOwnerOf둜 λ°”κΏ”μ£Όμ—ˆλ‹€.

πŸ“Œ ERC721: 전솑 둜직

function transfer(address _to, uint256 _tokenId) public;

function approve(address _to, uint256 _tokenId) public;
function takeOwnership(uint256 _tokenId) public;

ERC721 μŠ€νŽ™μ—μ„œλŠ” 토큰을 전솑할 λ•Œ 2개의 방식이 μžˆλ‹€.

transfer와 takeOwnership λͺ¨λ‘ λ™μΌν•œ 전솑 λ‘œμ§μ„ κ°€μ§€κ³  μžˆλ‹€.
μˆœμ„œλ§Œ λ°˜λŒ€!
(μ „μžλŠ” 토큰을 λ³΄λ‚΄λŠ” μ‚¬λžŒμ΄ ν•¨μˆ˜λ₯Ό 호좜;
ν›„μžλŠ” 토큰을 λ°›λŠ” μ‚¬λžŒμ΄ 호좜;)

πŸ“Œ μ˜€λ²„ν”Œλ‘œμš° 막기

uint8 number = 255;
number++;

μ˜€λ²„ν”Œλ‘œμš°! numberλŠ” 0이 λœλ‹€
μ–Έλ”ν”Œλ‘œμš° : 0κ°’ κ°€μ§„ uint8μ—μ„œ 1 λΉΌλ©΄ 255

이 문제 λ§‰μ•„μ£ΌλŠ” SafeMath 라이브러리
SafeMath 라이브러리λ₯Ό μ“Έ λ•ŒλŠ” using SafeMath for uint256μ΄λΌλŠ” ꡬ문을 μ‚¬μš©ν•  것
add λ”ν•˜κΈ°
sub λΉΌκΈ°
mul κ³±ν•˜κΈ°
div λ‚˜λˆ„κΈ°

πŸ“Œ SafeMath(2)

라이브러리 vs μ»¨νŠΈλž™νŠΈ?
라이브러리: μš°λ¦¬κ°€ usingν‚€μ›Œλ“œ μ‚¬μš©ν•  수 μžˆλ„λ‘ ν•΄μ€Œ
이둜 인해 라이브러리의 λ©”μ†Œλ“œλ“€μ„ λ‹€λ₯Έ 데이터 νƒ€μž…μ— 적용 κ°€λŠ₯

function add(uint256 a, uint256 b) internal pure returns (uint256) {
  uint256 c = a + b;
  assert(c >= a);
  return c;
}

assert μ¨μ„œ κ·Έ 값이 a보닀 크도둝 보μž₯. 이것이 μ˜€λ²„ν”Œλ‘œμš° λ§‰μ•„μ€Œ.
assert : 쑰건 λ§žμ§€ μ•ŠμœΌλ©΄ μ—λŸ¬ λ°œμƒμ‹œν‚¨λ‹€λŠ” μ μ—μ„œ requireμ΄λž‘ λΉ„μŠ·

λ‹€λ₯Έμ ?
require은 ν•¨μˆ˜ μ‹€ν–‰ μ‹€νŒ¨ν•˜λ©΄ 남은 κ°€μŠ€λ₯Ό μ‚¬μš©μžμ—κ²Œ 되돌렀쀌, 근데 assertλŠ” μ•„λ‹˜

πŸ“Œ SafeMath(3)

using SafeMath32 for uint32;
using SafeMath64 for uint64;

ν˜• λ§žμΆ”κΈ°!!!!

πŸ“Œ 주석

// ν•œ 쀄 주석 μΆ”κ°€!
/* */ μ—¬λŸ¬ 쀄 주석 μΆ”κ°€!

μ»¨νŠΈλž™νŠΈμ˜ λͺ¨λ“  ν•¨μˆ˜μ—μ„œ μ˜ˆμƒλ˜λŠ” 행동값을 μ½”λ“œμ— μ£Όμ„μœΌλ‘œ μ„€λͺ…ν•˜λŠ” 것이 μ’‹λ‹€

/// @title 기본적인 μ‚°μˆ˜λ₯Ό μœ„ν•œ μ»¨νŠΈλž™νŠΈ
/// @author H4XF13LD MORRIS πŸ’―πŸ’―πŸ˜ŽπŸ’―πŸ’―
/// @notice μ§€κΈˆμ€ κ³±ν•˜κΈ° ν•¨μˆ˜λ§Œ μΆ”κ°€ν•œλ‹€.
contract Math {
  /// @notice 2개의 숫자λ₯Ό κ³±ν•œλ‹€.
  /// @param x 첫 번째 uint.
  /// @param y 두 번째 uint.
  /// @return z (x * y) 곱의 κ°’
  /// @dev 이 ν•¨μˆ˜λŠ” ν˜„μž¬ μ˜€λ²„ν”Œλ‘œμš°λ₯Ό ν™•μΈν•˜μ§€ μ•ŠλŠ”λ‹€.
  function multiply(uint x, uint y) returns (uint z) {
    // 이것은 일반적인 μ£Όμ„μœΌλ‘œ, natspec에 ν¬ν•¨λ˜μ§€ μ•ŠλŠ”λ‹€.
    z = x * y;
  }
}

@noticeλŠ” μ‚¬μš©μžμ—κ²Œ μ»¨νŠΈλž™νŠΈ/ν•¨μˆ˜κ°€ 무엇을 ν•˜λŠ”μ§€ μ„€λͺ….
@devλŠ” κ°œλ°œμžμ—κ²Œ 좔가적인 상세 정보λ₯Ό μ„€λͺ…ν•˜κΈ° μœ„ν•΄ μ‚¬μš©.

@paramκ³Ό @return은 ν•¨μˆ˜μ—μ„œ μ–΄λ–€ 맀개 λ³€μˆ˜μ™€ λ°˜ν™˜κ°’μ„ κ°€μ§€λŠ”μ§€ μ„€λͺ….

λͺ¨λ“  νƒœκ·Έκ°€ ν•„μˆ˜λŠ” μ•„λ‹ˆμ§€λ§Œ @devλŠ” μ¨μ£ΌλŠ” 게 μ’‹λ‹€~

0개의 λŒ“κΈ€