본문 바로가기

블록체인/크립토 좀비

[크립토 좀비] 레슨04/05 정리

Payable

웹에서 요청으로 암호화폐를 지불하거나 이체하는 것을 가능하게 하는 함수 제어자

 

난수 만들기

Oracle을 사용하지 않고 난수를 만드는 방법은 keccak256 해시 함수를 사용하는 것

// Generate a random number between 1 and 100:
uint randNonce = 0;
uint random = uint(keccak256(now, msg.sender, randNonce)) % 100;
randNonce++; //randNonce 는 일회성이여야 하므로 한번 실행되면 값을 증가시킨다.
uint random2 = uint(keccak256(now, msg.sender, randNonce)) % 100; //마지막 2자리만 사용하기 위함

이 방식은 안전하지 않기 때문에 추천하지 않음 차후에 Oracle로 난수 생성하는 법을 다룸.

 

개발을 할 때는 통신 규약에 맞춰 개발을 하는 것이 좋다.

ex) 토큰 - erc20, nft - erc721 등

 

다중 상속

솔리디티는 다중 상속을 지원한다.

contract SatoshiNakamoto is NickSzabo, HalFinney {
  // 오 이런, 이 세계의 비밀이 밝혀졌군!
}

 

오버플로우 방지

OpenZeppelin의 SafeMath 사용

using SafeMath for uint256;

uint256 a = 5;
uint256 b = a.add(3); // 5 + 3 = 8
uint256 c = a.mul(2); // 5 * 2 = 10

count++ 같은 기본 연산 또한 SafeMath를 사용하는 것이 좋다.

만약 구조체 내부 선언과 같이 uint16 uint32 등 uint256 보다 작은 크기로 선언된 것들의 경우 직접 SafeMath16, SafeMath32 등을 만드는 것도 좋다. (크립토 좀비에서는 실제로 구현하지만 실제 개발에서도 이렇게 할지는 의문)

 

주석

기본적인 // /* */ 이외에 natspec이라고 불리는 ///도 사용함

/// @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;
  }
}

@title // 컨트랙트 제목

@author  //작성자

@notice/dev 주의, 추가 설명

@param 매개변수 설명

@return 반환 값

 

'블록체인 > 크립토 좀비' 카테고리의 다른 글

[크립토 좀비] 레슨 03 정리  (0) 2022.04.20
[크립토 좀비] 레슨02 정리  (0) 2022.04.15
[크립토 좀비] 레슨 01 정리  (0) 2022.04.14