Solidity에서 요구 vs 주장
assert 및 require는 조건을 확인하는 편의 함수입니다. 조건이 충족되지 않으면 예외가 발생합니다.
통사론
assert(bool condition)
는 Panic
오류를 유발하므로 조건이 충족되지 않으면 상태 변경 복귀가 내부 오류에 사용됩니다.require(bool condition)
조건이 충족되지 않으면 되돌려 입력 또는 외부 구성 요소의 오류에 사용됩니다.require(bool condition, string memory message)
조건이 충족되지 않으면 되돌려 입력 또는 외부 구성 요소의 오류에 사용됩니다. 오류 메시지도 제공합니다.revert()
실행 중단 및 상태 변경 되돌리기revert(string memory reason)
실행을 중단하고 상태 변경을 되돌려 설명 문자열 제공// SPDX-License-Identifier: MIT
pragma solidity ^0.8.10;
contract Error {
function testRequire(uint _i) public pure {
// Require should be used to validate conditions such as:
// - inputs
// - conditions before execution
// - return values from calls to other functions
require(_i > 10, "Input must be greater than 10");
}
function testRevert(uint _i) public pure {
// Revert is useful when the condition to check is complex.
// This code does the exact same thing as the example above
if (_i <= 10) {
revert("Input must be greater than 10");
}
}
uint public num;
function testAssert() public view {
// Assert should only be used to test for internal errors,
// and to check invariants.
// Here we assert that num is always equal to 0
// since it is impossible to update the value of num
assert(num == 0);
}
// custom error
error InsufficientBalance(uint balance, uint withdrawAmount);
function testCustomError(uint _withdrawAmount) public view {
uint bal = address(this).balance;
if (bal < _withdrawAmount) {
revert InsufficientBalance({balance: bal, withdrawAmount: _withdrawAmount});
}
}
}
* Assert와 Require In Solidity의 주요 차이점
*
assert() ** 및 require() ** 함수는 Solidity의 오류 처리 측면의 일부입니다. Solidity는 상태 반전 오류 처리 예외를 사용합니다.
즉, 오류가 발생하면 해당 호출 또는 하위 호출에서 계약에 대한 모든 변경 사항이 실행 취소됩니다. 또한 오류를 표시합니다.
둘 다 조건을 확인하고 충족되지 않으면 오류가 발생한다는 점에서 매우 유사합니다.
둘 사이의 큰 차이점은 **assert() **함수가 거짓일 때 남은 가스를 모두 사용하고 변경된 모든 내용을 되돌린다는 것입니다.
한편, ** require() ** 함수는 거짓일 때 계약에 대한 모든 변경 사항을 되돌리지만 우리가 지불하겠다고 제안한 나머지 가스 요금은 모두 환불합니다.
이는 디버깅 및 오류 처리를 위해 개발자가 사용하는 가장 일반적인 Solidity 기능입니다.
결론
오류를 처리하기 위해 Solidity는 문제를 일으킬 수 있는 변경 사항을 취소합니다.
assert는 내부 오류를 확인합니다. 분석 조건이 필요합니다.
Reference
이 문제에 관하여(Solidity에서 요구 vs 주장), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://dev.to/tawseef/require-vs-assert-in-solidity-5e9d텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)