반응형
💡솔리디티 기본 문법 - 이벤트 및 에러 핸들링
✓ 이벤트
이벤트는 어떤 결과가 발생했을 때 해당 컨트랙트에서 dApp 클라이언트 또는 다른 컨트랙트에게 전달한다. 컨트랙트는 event 키워드를 사용해 이벤트를 설정하고, 경우에 따라 emit 키워드를 사용해 이벤트를 실행한다. 이벤트가 실행된 경우, 트랜잭션에 기록된다.
contract coinTransfer {
// event 이벤트명(파라미터 유형1 파라미터1, 파라미터 유형2 파라미터2, ...)
event Transfer(address from, address to, uint256 value);
function transfer(address to, address amount) {
// ...
// emit 이벤트명(인자1, 인자2, ...)
emit Transfer(msg.sender, to, amount);
}
}
✓ 에러 핸들링
솔리디티에서 에러를 처리할 때는 assert, require, revert 함수를 사용한다.
* revert: 해당 함수를 종료하고 에러를 리턴한다.
* require, assert: 설정한 조건이 참인지 확인하고, 조건이 거짓이면 에러를 리턴한다.
revert는 다음과 같이 사용할 수 있다.
contract VendingMachine {
address owner;
function buy(uint amount) public payable {
if (amount > msg.value / 2 ether){
revert("Not enough Ether provided."); // 에러를 리턴하면서 에러메시지를 지정할 수 있다.
// 송금 진행
}
}
}
require 는 그 자체로 if...revert 처럼 사용되는 게이트키퍼 역할을 한다.
* 게이트키퍼(gatekeeper) : 조건을 만족하면 특정 동작을 실행하고, 조건을 만족하지 않으면 실행하지 못하도록 하는 역할
가령, 위의 VendingMachine 컨트랙트의 buy 함수를 아래의 코드와 완전히 동일하게 작동한다.
contract VendingMachine {
address owner;
function buy(uint amount) public payable {
require(
amount <= msg.value / 2 ether, // 주어진 조건이 참이면 넘어가고, 거짓이면 에러 리턴
"Not enough Ether provided." // 에러 메시지를 지정할 수 있다.
);
// 송금 진행
}
}
assert 는 require 와 사용법이 동일하나, 사용하지 않은 가스를 호출자에게 반환하지 않고 공급된 가스를 모두 소모하여 상태를 원래대로 되돌린다.
반응형
'블록체인 > WEB3 개발' 카테고리의 다른 글
솔리디티 기본 문법 - 조건문 (0) | 2022.07.11 |
---|---|
솔리디티 기본 문법 - 상속 및 라이브러리 (0) | 2022.07.08 |
솔리디티 기본 문법 - 함수 제어자 (0) | 2022.07.08 |
솔리디티 기본 문법 - 함수 (0) | 2022.07.08 |
솔리디티 기본 문법 - 연산자 (0) | 2022.07.08 |
댓글