주장
모든 프로그램과 마찬가지로 버그가 발생할 수 있으며 사용자 입력을 검증해야 합니다.솔리디티는 사용자 입력을 검증하는 몇 가지 방법을 제공합니다. 그리고 계약 상태가 예상대로인지 확인하십시오.
상태 되돌리기
어설션은 조건이 참인지 확인하는 방법이며, 그렇지 않으면 트랜잭션이 실패합니다.거래가 있을 때 실패하면 트랜잭션에서 발생한 모든 상태 변경이 롤백됩니다.이는 다음과 같은 모든 변경 사항을 의미합니다. 영구 데이터/테이블은 마치 트랜잭션이 발생하지 않은 것처럼 되돌아갑니다.
Solidity에서는 다음을 사용하여 계약을 실패시키고 상태를 되돌릴 수 있습니다. revert
기능.
if(1 != 1) revert();
더 revert
함수로 인해 트랜잭션이 실패하고 상태가 되돌아갑니다.시간이 걸릴 수도 있습니다 string
논증으로서의 메시지,
오류로 발생합니다.
if(1 != 1) revert("1 should equal 1");
조건 검증
일반적으로 사용자 입력을 검증하거나 스마트 컨트랙트의 내부 상태가 예상대로인지 확인해야 합니다.
function addId(uint32 id) public {
require(id > 0, "id must be greater than 0");
}
더 require
함수는 첫 번째 인수가 true인지 확인하고, 그렇지 않으면 상태를 되돌리고 다음을 던집니다.
두 번째 인수에 제공된 메시지입니다.
를 사용해야 합니다. require
가능한 한 빨리 기능을 수행하십시오.실패하면 사용하지 않은 모든 가스를 다시 보내드립니다.
사용자.
치명적인 장애 예방
계약이 의도한 대로 작동하고 예상치 못한 상황이 발생하지 않았는지 확인하고 싶을 때가 많습니다. 이는 사용자 입력을 기반으로 할 수도 있고, 계약이 예전과 다른 방식으로 사용되어 절정에 이르는 다양한 호출을 기반으로 할 수도 있습니다. 사용하도록 설계되었습니다.
이러한 상황에서는 다음을 사용하는 것이 가장 좋습니다. assert
기능.그 이유는 assert
기능 의지
거래에 할당된 모든 가스를 소비하십시오.
일반적으로 계약이 의도하지 않은 상태에 이르면 계약에 버그가 있거나 악의적인 문제가 있는 것입니다. 배우가 계약을 악용하려고 합니다.후자의 경우가 발생할 수 있기 때문에 가능한 한 많은 가스를 섭취하고 싶습니다. 공격자의 공격을 가능한 한 비싸게 만들기 위해서입니다.
assert(funds > 0, "you shouldn't be doing this Bob");