-
bitcoin $78074.098354 USD
1.89% -
ethereum $2299.014391 USD
2.17% -
tether $0.998449 USD
0.01% -
bnb $700.460149 USD
1.26% -
xrp $1.273048 USD
1.81% -
usd-coin $0.999762 USD
0.01% -
solana $92.929882 USD
1.25% -
tron $0.321666 USD
0.30% -
zcash $1272.523101 USD
12.65% -
hyperliquid $84.856242 USD
1.58% -
monero $637.212844 USD
3.50% -
dogecoin $0.074680 USD
1.23% -
unus-sed-leo $9.292529 USD
-0.02% -
chainlink $11.063098 USD
-0.05% -
cardano $0.190385 USD
1.97%
견고성의 오류를 처리하는 방법? (요구, 복귀, 주장)
Solidity provides `require`, `revert`, and `assert` for error handling, ensuring secure and predictable smart contract execution.
2025/07/20 05:00
견고성에서 오류 처리를 이해합니다
이더 리움 스마트 계약의 주요 프로그래밍 언어 인 Solidity는 오류 처리를 위한 몇 가지 메커니즘을 제공합니다. 이러한 메커니즘은 예상치 못한 또는 유효하지 않은 조건이 발생할 때 계약이 예측 가능하고 안전하게 행동하도록하는 데 중요합니다. 견고성에서 오류 처리에 사용할 수있는 주요 도구는 require revert assert 이러한 각 기능은 다른 목적을 달성하며 상황에 따라 적절하게 사용해야합니다.
입력 유효성 검증에 require 사용
require 기능은 주로 함수의 핵심 논리를 실행하기 전에 입력 및 조건을 검증하는 데 사용됩니다. require false 평가되면 트랜잭션이 되돌리고 상태에 대한 변경 사항이 롤백됩니다. 또한 require 사용하면 개발자가 사용자 정의 오류 메시지를 제공 할 수 있습니다.
예:
function transfer(address to, uint amount) public {require(amount > 0, 'Amount must be greater than zero'); require(balance[msg.sender] >= amount, 'Insufficient balance'); balance[msg.sender] -= amount; balance[to] += amount;
}
이 예에서는 발신자가 균형이 충분하고 전송되는 금액이 유효하도록 require . 두 조건 중 하나가 실패하면 거래는 명확한 오류 메시지로 되돌아갑니다.
사용자 정의 오류 조건에 대한 revert 사용합니다
revert 기능은 개발자가 함수 내의 어느 시점에서든 실행을 되돌릴 수 있도록함으로써 require 보다 더 많은 유연성을 제공합니다. 단일 require 사항에 의해 쉽게 처리되지 않을 수있는 복잡한 논리 또는 여러 조건을 다룰 때 특히 유용합니다.
예:
function withdraw(uint amount) public {if (amount > balance[msg.sender]) { revert('Insufficient funds for withdrawal'); } if (block.timestamp < lockTime[msg.sender]) { revert('Funds are locked until a later time'); } balance[msg.sender] -= amount; payable(msg.sender).transfer(amount);
}
이 시나리오에서는 철회 revert 방지 할 수있는 두 가지 고유 한 조건을 처리하는 데 사용됩니다. 각 조건은 별도로 평가되며 조건이 실패하면 특정 메시지가 반환됩니다.
내부 오류 감지를 위해 assert 활용합니다
assert 함수는 정상적인 상황에서는 결코 발생하지 않아야 할 내부 오류 를 확인하고 내부 오류를 포착하기위한 것입니다. require 및 revert 과 달리 assert 사용은 트리거시 트랜잭션에 제공된 모든 가스를 소비합니다. 따라서 중요한 버그가 의심되는 상황에는 예약되어야합니다.
예:
function calculateSum(uint a, uint b) internal pure returns (uint) {uint sum = a + b; assert(sum >= a); return sum;
}
이 기능에서 assert 추가 작업이 언더 플로 또는 오버플로를 초래하지 않도록합니다. 그러한 양식이 발생하면 트랜잭션이 되돌아 코드의 잠재적 버그를 나타냅니다.
require , revert 및 assert 의 차이
견고성에서 효과적인 오류 처리에 require , revert 및 assert 의 차이점을 이해합니다.
- 가스 소비 : 오류 지점까지 가스를
require하고revert반면,assert제공된 모든 가스를 소비합니다. - 사용 사례 :
require입력 유효성 검사에 가장 적합합니다. 맞춤 조건을revert내부 논리 검사를assert. - 오류 메시지 : 사용자 정의 오류 메시지를
require하고revert수 있습니다.assert오래된 버전의 견고성 (0.8.0 이전)에서 사용자 정의 메시지를 반환하는 방법을 제공하지 않습니다.
적절한 오류 처리 방법을 선택하면 스마트 계약이 안전 하고 효율적 일 수 있습니다.
견고성의 사용자 지정 오류
Solidity 0.8.0 부터 개발자는 문자열 기반 오류 메시지보다 가스 효율적 이고 읽기 쉬운 사용자 정의 오류 유형을 정의 할 수 있습니다. 사용자 정의 오류는 error 키워드를 사용하여 정의되며 revert 와 함께 사용할 수 있습니다.
예:
error InsufficientBalance(uint requested, uint available); error FundsLocked(uint releaseTime, uint currentTime);기능 철수 (uint 금액) public {if (amount > balance[msg.sender]) { revert InsufficientBalance(amount, balance[msg.sender]); } if (block.timestamp < lockTime[msg.sender]) { revert FundsLocked(lockTime[msg.sender], block.timestamp); } balance[msg.sender] -= amount; payable(msg.sender).transfer(amount);}
사용자 지정 오류를 사용하여 개발자는 가스 사용 측면에서 이해하기 쉽고 효율적인 구조화 된 오류 정보를 제공 할 수 있습니다.
자주 묻는 질문
Q : 입력 유효성 검사에 assert 사용할 수 있습니까? A : 아니요, 입력 유효성 검사에 사용 assert 안됩니다. 내부 검사를 위해 설계되었으며 도달 할 수없는 코드 또는 임계 버그를 감지하는 데만 사용해야합니다.
Q : 문자열 메시지에 비해 사용자 정의 오류가 가스를 어떻게 저장합니까? A : 사용자 정의 오류는 함수 서명과 유사한 4 바이트 선택기 로 인코딩되며 전체 문자열 메시지보다 훨씬 짧고 저렴합니다 . 이로 인해 오류가 발생하면 가스 비용이 낮아집니다 .
Q : 계약에서 오류를 처리하지 않으면 어떻게됩니까? A : 오류가 올바르게 처리되지 않으면 유효하지 않거나 예상치 못한 조건이 잘못된 상태 변경 , 자금 손실 또는 공격자가 악용 할 수있는 취약점 으로 이어질 수 있습니다.
Q : 동일한 기능으로 require 결합하고 revert 수 있습니까? A : 그렇습니다. 동일한 기능으로 require 및 revert 수 있습니다. require 은 일반적으로 간단한 조건 검사에 사용되며, revert 는 기능의 뒷부분에서보다 복잡하거나 조건부 회복에 사용됩니다.
부인 성명:info@kdj.com
제공된 정보는 거래 조언이 아닙니다. kdj.com은 이 기사에 제공된 정보를 기반으로 이루어진 투자에 대해 어떠한 책임도 지지 않습니다. 암호화폐는 변동성이 매우 높으므로 철저한 조사 후 신중하게 투자하는 것이 좋습니다!
본 웹사이트에 사용된 내용이 귀하의 저작권을 침해한다고 판단되는 경우, 즉시 당사(info@kdj.com)로 연락주시면 즉시 삭제하도록 하겠습니다.
- DarkSword 공격 도구는 iOS 취약점을 악용하여 암호화폐 지갑 보안에 큰 위협을 가하고 있습니다.
- 2026-11-05 04:45:02
- 프랑스 은행 암호화폐 손실: ZachXBT, Crédit Mutuel Arkéa에서 1억 3300만 달러 규모의 강도 사건 발견
- 2026-11-04 16:55:01
- 민주당이 미국 하원 통제권을 확보하고 중간 선거 속에서 의회의 새로운 시대를 열었습니다.
- 2026-11-04 16:45:01
- 미국 중간고사, 예측 시장 및 암호화폐 경쟁: 워싱턴의 미래에 대한 고액 베팅
- 2026-11-04 04:30:22
- 디지털 자산, 글로벌 금융 및 AI: DavosWeb3 및 그 이상에서 차세대 개척지 탐색
- 2026-11-04 04:30:22
- 광범위한 시장 문제로 인해 Avalanche AVAX 가격 하락; 기관의 관심은 여전히 강하다
- 2026-11-03 12:35:02
관련 지식
BTCUSDT 선물 포지션을 보유하는 데 드는 총 비용을 계산하는 방법
2026-10-26 04:06:35
BTCUSDT 선물 포지션의 총 비용 구성요소 1. BTCUSDT 선물 포지션을 보유하는 데 드는 총 비용에는 명시적 비용과 암묵적 비용이 모두 포함됩니다. 명시적 비용은 개설 및 마감 거래 수수료로 구성되는 반면, 암묵적 비용은 주로 시간이 지남에 따라 자금 요율 지...
XRPUSDT 펀딩 비율과 미결제약정을 함께 모니터링하는 방법
2026-10-20 18:39:42
XRPUSDT 무기한 계약의 펀딩 요율 메커니즘 1. XRPUSDT 영구 스왑의 펀딩 요율은 XRP와 USDT 표시 대출 시장 간의 프리미엄 지수와 이자율 차이를 사용하여 8시간마다 계산됩니다. 2. Binance, Bybit 및 OKX와 같은 거래소는 파생 상품 AP...
SOLUSDT 무기한 선물에 손익분기점 손실을 설정하는 방법
2026-10-23 09:34:18
손익분기점 손실 메커니즘 이해 1. 손익분기점 손절매는 포지션이 수익성 있게 움직일 때 위쪽으로 조정되어 실행 시 순손실이 0으로 고정되는 동적 주문입니다. 2. 거래가 미리 정의된 수익 기준점(일반적으로 초기 위험 또는 진입 수수료의 1배~2배)에 도달한 후에만 작동...
ETHUSDT 거래에 바이낸스 선물 계산기를 사용하는 방법
2026-10-21 02:00:11
바이낸스 선물 계산기 인터페이스 이해 1. 계산기는 주문 입력 패널 아래 ETHUSDT 영구 계약 페이지를 통해 액세스할 수 있는 바이낸스 선물 거래 인터페이스에 직접 내장되어 있습니다. 2. 사용자가 포지션 크기, 진입 가격, 레버리지 수준, 이익실현 또는 손절매 수...
선물 청산 전 BTCUSDT 표시 가격을 확인하는 방법
2026-10-26 12:20:18
BTCUSDT 선물의 시장 평균 가격 이해 1. 시장평균가는 변동성이 큰 시장 상황에서 불공정한 청산을 방지하기 위해 거래소가 계산한 가격입니다. 2. 지수 가격, 펀딩 요율 등 다양한 출처에서 도출된 공정하고 안정적인 기준 가격을 반영합니다. 3. 시장 평균가는 마지...
TRUMPUSDT 무기한 계약의 레버리지를 조정하는 방법
2026-10-30 22:19:37
TRUMPUSDT 무기한 계약 메커니즘 이해 1. TRUMPUSDT는 여러 Tier-1 파생상품 거래소에 상장된 주제별 무기한 선물 계약으로, 기본 자산 펀더멘털보다는 미국 정치적 서술에 대한 가격 심리를 추적하도록 설계되었습니다. 2. USDT를 견적 및 마진 자산으...
BTCUSDT 선물 포지션을 보유하는 데 드는 총 비용을 계산하는 방법
2026-10-26 04:06:35
BTCUSDT 선물 포지션의 총 비용 구성요소 1. BTCUSDT 선물 포지션을 보유하는 데 드는 총 비용에는 명시적 비용과 암묵적 비용이 모두 포함됩니다. 명시적 비용은 개설 및 마감 거래 수수료로 구성되는 반면, 암묵적 비용은 주로 시간이 지남에 따라 자금 요율 지...
XRPUSDT 펀딩 비율과 미결제약정을 함께 모니터링하는 방법
2026-10-20 18:39:42
XRPUSDT 무기한 계약의 펀딩 요율 메커니즘 1. XRPUSDT 영구 스왑의 펀딩 요율은 XRP와 USDT 표시 대출 시장 간의 프리미엄 지수와 이자율 차이를 사용하여 8시간마다 계산됩니다. 2. Binance, Bybit 및 OKX와 같은 거래소는 파생 상품 AP...
SOLUSDT 무기한 선물에 손익분기점 손실을 설정하는 방법
2026-10-23 09:34:18
손익분기점 손실 메커니즘 이해 1. 손익분기점 손절매는 포지션이 수익성 있게 움직일 때 위쪽으로 조정되어 실행 시 순손실이 0으로 고정되는 동적 주문입니다. 2. 거래가 미리 정의된 수익 기준점(일반적으로 초기 위험 또는 진입 수수료의 1배~2배)에 도달한 후에만 작동...
ETHUSDT 거래에 바이낸스 선물 계산기를 사용하는 방법
2026-10-21 02:00:11
바이낸스 선물 계산기 인터페이스 이해 1. 계산기는 주문 입력 패널 아래 ETHUSDT 영구 계약 페이지를 통해 액세스할 수 있는 바이낸스 선물 거래 인터페이스에 직접 내장되어 있습니다. 2. 사용자가 포지션 크기, 진입 가격, 레버리지 수준, 이익실현 또는 손절매 수...
선물 청산 전 BTCUSDT 표시 가격을 확인하는 방법
2026-10-26 12:20:18
BTCUSDT 선물의 시장 평균 가격 이해 1. 시장평균가는 변동성이 큰 시장 상황에서 불공정한 청산을 방지하기 위해 거래소가 계산한 가격입니다. 2. 지수 가격, 펀딩 요율 등 다양한 출처에서 도출된 공정하고 안정적인 기준 가격을 반영합니다. 3. 시장 평균가는 마지...
TRUMPUSDT 무기한 계약의 레버리지를 조정하는 방법
2026-10-30 22:19:37
TRUMPUSDT 무기한 계약 메커니즘 이해 1. TRUMPUSDT는 여러 Tier-1 파생상품 거래소에 상장된 주제별 무기한 선물 계약으로, 기본 자산 펀더멘털보다는 미국 정치적 서술에 대한 가격 심리를 추적하도록 설계되었습니다. 2. USDT를 견적 및 마진 자산으...
모든 기사 보기














