상식닷컴
로그인
가입하기
2026년 상식닷컴 선정 식당 & 카페 리스트
2025년 2026년 신상 호텔 리스트
최근에 오픈한 호텔을 찾는다면 살펴보세요
일주일 식단표 어플
자동 일주일 식단표 어플
안드로이드
아이폰
주식 & 코인 차트의 신
1000만원으로 2000만원 만들기 프로젝트
수정하기 - 솔리디티에서 'require'와 'assert'의 차이는 무엇인가요?
닉네임
비밀번호
제목
내용
[이미지 업로드는 권한이 있는 사람만 가능. 하단 카톡으로 연락]
Solidity에서 `require`와 `assert`는 모두 조건을 검사하고, 조건이 충족되지 않을 경우 트랜잭션을 실패시키는 데 사용되는 함수입니다. 그러나 이 두 함수는 사용 목적과 동작 방식에서 중요한 차이점이 있습니다. 아래에서 이 두 함수의 차이점과 각각의 <a href='https://sangseek.com/sangseeks/사용 사례/ko'>사용 사례</a>에 대해 자세히 설명하겠습니다. 1. `require` - 목적 : `require`는 주로 입력값 검증, 상태 조건 확인, 외부 호출의 성공 여부 등을 확인하는 데 사용됩니다. 예를 들어, 함수의 인자가 유효한지, 특정 조건이 충족되는지 등을 검사할 때 사용합니다. - 사용 예 : ```solidity function transfer(address to, u<a href='https://sangseek.com/sangseeks/int/ko'>int</a>256 amount) public { require(to != address(0), "Invalid address"); require(balance[msg.sender] >= amount, "Insufficient balance"); balance[msg.sender] -= amount; balance[to] += amount; } ``` - 가스 반환 : `require`가 실패하면, 해당 트랜잭션은 revert되고, 사용자가 지불한 가스의 일부가 반환됩니다. 이는 사용자가 잘못된 입력을 제공했을 때, 가스 비용을 절약할 수 있게 해줍니다. - 에러 메시지 : `require`는 실패 시 사용자 정의 에러 메시지를 제공할 수 있어, 어떤 조건이 실패했는지 쉽게 파악할 수 있습니다. 2. `assert` - 목적 : `assert`는 코드의 불변 조건을 검사하는 데 사용됩니다. 즉, 프로그램의 논리적 오류를 확인하는 데 적합합니다. 예를 들어, 상태 변수가 특정 값이어야 하거나, 함수가 호출된 후에 어떤 조건이 항상 참이어야 할 때 사용합니다. - 사용 예 : ```solidity function withdraw(uint256 amount) public { uint256 previousBalance = balance[msg.sender]; balance[msg.sender] -= amount; assert(balance[msg.sender] == previousBalance - amount); } ``` - 가스 반환 : `assert`가 실패하면, 해당 트랜잭션은 revert되고, 사용자가 지불한 가스는 반환되지 않습니다. 이는 `assert`가 코드의 심각한 오류를 나타내기 때문에, 이러한 오류가 발생했을 경우에는 가스 비용을 반환하지 않는 것이 일반적입니다. - 에러 메시지 : `assert`는 사용자 정의 에러 메시지를 제공하지 않으며, 실패 시 기본적인 오류 메시지만 반환합니다. 이는 디버깅을 어렵게 만들 수 있습니다. 요약 - 사용 목적 : - `require`: 입력값 검증 및 외부 조건 확인에 사용. - `assert`: 코드의 불변 조건 및 논리적 오류 확인에 사용. - 가스 처리 : - `require`: 실패 시 가스 일부 반환. - `assert`: 실패 시 가스 반환 없음. - 에러 메시지 : - `require`: 사용자 정의 메시지 제공 가능. - `assert`: 기본 오류 메시지만 제공. 결론 `require`와 `assert`는 Solidity에서 조건을 검사하는 데 중요한 역할을 합니다. `require`는 주로 사용자 입력이나 외부 조건을 검증하는 데 사용되며, `assert`는 코드의 논리적 오류를 확인하는 데 사용됩니다. 이 두 가지를 적절히 사용함으로써, 스마트 계약의 안정성과 신뢰성을 높일 수 있습니다.
이용안내
커뮤니티 이용안내
×
- 게시한 게시글로 발생하는 문제는 게시자에게 책임이 있습니다.
- 게시글이 타인/타업체의 저작권을 침해할 경우 모든 책임은 게시자에게 있습니다. 게시자가 모든 손해를 부담해야 합니다.
- 상식닷컴 운영자는 게시자와 상의하지 않고 게시글을 수정 또는 삭제할 수 있습니다.
- 상식닷컴 운영자는 깨끗한 커뮤니티 공간을 만드는 것이 1순위입니다.
수정하기
취소하기