※ 기본적인 프로그래밍 지식이 있다는 전제하에 작성함.
'★'은 처음 접할 수 있는 내용
Solidity
- library
- modifier
Library
솔리디티에서 라이브러리는 특정 주소에 한번 배포되어 다양한 컨트랙트에서 재사용하기 위한 코드
Using x for y : x 라이브러리의 Y함수 or 구조체등을 사용한다는 의미
예제)
pragma solidity ^0.8.0;
import "@openzeppelin/contracts/utils/Counters.sol";
contract nft_721{
using Counters for Counters.Counter;
// Default : 0 선언
Counters.Counter public _tokenIds;
function get_val2() public view returns(Counters.Counter memory){
// Counters.Counter memory me = _tokenIds;
return _tokenIds;
}
function val_incre() public{
_tokenIds.increment();
}
function val_decre() public{
_tokenIds.decrement();
}
}
★ Modifier
모듈을 동기화시켜 Modifier 명령어 내부에 _; 에서 부터 선언한 함수 명령어를 실행하라는 의미
※ _;는 큐(Quque) 처럼 쌓을 수 있음 (예제보면 단번에 이해할 수 있음)
fuinction 함수명(get_a()) public Modifier명(onlytest) returns (uint) 식으로 만들기
pragma solidity >=0.7.0 <0.9.0;
contract er_tetst{
uint a = 0;
modifier onlytest{
a += 500;
require(a < 1500, "higer");
// _; 이부분에 함수 넣겠다는 의미
_;
}
function get_a() public onlytest returns(uint){
return a;
}
}
아래처럼 실행됨
modifier onlytest{
a += 500;
require(a < 1500, "higer");
_; <------- 여기서 부터 다른 함수 호출
get_a() <-------- 이런 느낌으로 실행됨
}
require 함수 조건식으로 인해 1500 넘어가니 에러남
★ assert, revert, require
- Gas환불 X, 조건식 O -
assert : gas를 다 소비한후, 특정한 조건에 부합하지 않으면 에러를 발생
assert (a <= 1500);
// 조건 False일 때 에러출력 즉, a = 1550이면 1,550 <= 1500(False) 에러출력
- Gas환불 O, 조건식 X -
revert: 조건없이 에러를 발생시키고, Gas소모 후 에러나면 gas를 환불
revert("higer");
- Gas환불 O, 조건식 O -
require: 특정한 조건에 부합하지 않으면 에러를 발생시키고, Gas소모 후 에러나면 gas를 환불
'보안 및 블록체인 > 블록체인' 카테고리의 다른 글
하이퍼레저 패브릭(Hyperledger Fabric) 구성 정리 Ledger #2 - Key Concept (0) | 2022.05.06 |
---|---|
하이퍼레저 패브릭(Hyperledger Fabric) 구성 정리 Peer #1 - Key Concept (2) | 2022.05.06 |
블록체인 채굴 / 작업 증명 알고리즘 원리 및 개념정리- [블록체인] (0) | 2022.01.18 |
솔리디티(Solidity) 기본 언어/문법 정리 #2, 이더리움 Dapp개발을 위해 - [블록체인] (0) | 2022.01.12 |
솔리디티(Solidity) 기본 언어/문법 정리, 이더리움 Dapp개발을 위해 - [블록체인] (0) | 2022.01.12 |