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 |