-
Bitcoin
$118300
-0.46% -
Ethereum
$3564
-2.49% -
XRP
$3.416
-2.78% -
Tether USDt
$1.000
-0.02% -
BNB
$736.2
-2.92% -
Solana
$177.8
-2.21% -
USDC
$0.9999
0.00% -
Dogecoin
$0.2457
-1.40% -
TRON
$0.3260
-2.11% -
Cardano
$0.8265
-3.60% -
Hyperliquid
$44.95
-1.90% -
Stellar
$0.4594
-5.15% -
Sui
$3.791
-5.47% -
Chainlink
$17.80
-4.31% -
Hedera
$0.2669
-3.01% -
Bitcoin Cash
$505.8
-4.24% -
Avalanche
$23.67
-3.21% -
Shiba Inu
$0.00001481
-3.79% -
UNUS SED LEO
$8.972
0.03% -
Toncoin
$3.180
-3.83% -
Litecoin
$101.0
-5.25% -
Polkadot
$4.239
-5.15% -
Uniswap
$10.11
-5.82% -
Monero
$324.7
-2.25% -
Ethena USDe
$1.001
-0.02% -
Bitget Token
$4.983
-1.83% -
Pepe
$0.00001307
-5.73% -
Dai
$0.9999
-0.02% -
Aave
$316.0
-4.46% -
Cronos
$0.1207
-1.59%
견고성의 오류를 처리하는 방법? (요구, 복귀, 주장)
Solidity는 오류 처리를 위해 'require', 'revert'및 'assert'를 제공하여 안전하고 예측 가능한 스마트 계약 실행을 보장합니다.
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);
기능 철수 (uint 금액) public {
error FundsLocked(uint releaseTime, uint currentTime);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)로 연락주시면 즉시 삭제하도록 하겠습니다.
- WLFI 토큰 거래 승인 : 트럼프 유대에서 지역 사회 투표에 이르기까지
- 2025-07-20 09:10:12
- Coindcx의 4,420 만 달러 보안 위반 : 암호화 교환을위한 모닝콜
- 2025-07-20 08:30:13
- 트럼프, WLFI 및 토큰 릴리스 : Crypto의 뉴욕 분
- 2025-07-20 08:30:13
- Ripple의 RLUSD : Bluechip Stablecoin은 시장을 방해 할 예정입니까?
- 2025-07-20 08:50:11
- 비트 코인 가격 행동 : 수평선에 대한 수요가 약화됩니까?
- 2025-07-20 08:50:11
- Ripple 's RLUSD : 최고 순위의 스타블 레코 인이 시장을 흔들 었습니다
- 2025-07-20 08:55:12
관련 지식

제작자 대 테이커 요금이란 무엇입니까?
2025-07-19 01:14:23
cryptocurrency 교환 수수료의 기본 사항 이해 cryptocurrency 거래의 세계에서, Maker vs Taker 수수료는 모든 거래자가 이해해야하는 기본 개념입니다. 이 수수료는 주문 유형에 따라 사용자와의 교환으로 청구됩니다. 제작자와 테이커 수수료 ...

CME의 미래 데이터를 분석하는 방법은 무엇입니까?
2025-07-19 17:22:11
CME의 미래 이해 Bitcoin Bitcoin CME 그룹 (Chicago Mercantile Exchange) 의 미래는 규제 금융 상품을 대표하여 투자자가 기본 자산을 소유하지 않고 Bitcoin의 미래 가격을 추측 할 수있게합니다. 이러한 선물 계약은 중앙 대상...

청산 가격을 이해하는 방법?
2025-07-19 22:00:19
cryptocurrency 거래의 청산 가격은 얼마입니까? 암호 화폐 미래 및 마진 거래 영역에서 청산 가격은 거래자의 위치가 교환에 의해 자동으로 폐쇄되는 특정 가격 수준을 나타냅니다. 이는 상인이 레버리지 위치를 유지하기 위해 필요한 마진을 충족 할 수 없을 때 발...

시력이 언제입니까 (GTC, IOC, FOK)?
2025-07-19 08:57:01
cryptocurrency 거래에서 시력 시간을 이해합니다 Cryptocurrency 거래 의 세계에서 TIF (Time)는 주문이 실행되거나 취소되기 전에 시장에서 주문이 얼마나 오래 지속되는지를 결정하는 중요한 매개 변수입니다. 주문이 다르게 행동 할 수있는 기존 ...

부분 청산이란 무엇입니까?
2025-07-19 01:49:36
부분 청산의 기본 이해 Cryptocurrency 거래의 세계, 특히 레버리지 위치 내에서, 부분 청산은 계정의 여백 수준이 필요한 임계 값 아래로 떨어질 때 거래자의 공개 위치의 일부의 자동 폐쇄를 말합니다. 이 메커니즘은 Exchange의 위험 관리 시스템의 무결성...

Bitcoin 선물에 대한 좋은 입장 및 종료 포인트를 찾는 방법은 무엇입니까?
2025-07-19 17:14:26
Bitcoin 미래와 그들의 독특한 특성 이해 Bitcoin 선물은 실제 cryptocurrency를 소유하지 않고 Bitcoin의 미래 가격을 추측 할 수있는 파생 계약입니다. 이 계약은 CME Group 및 Binance Futures 와 같은 규제 거래소에서 표준...

제작자 대 테이커 요금이란 무엇입니까?
2025-07-19 01:14:23
cryptocurrency 교환 수수료의 기본 사항 이해 cryptocurrency 거래의 세계에서, Maker vs Taker 수수료는 모든 거래자가 이해해야하는 기본 개념입니다. 이 수수료는 주문 유형에 따라 사용자와의 교환으로 청구됩니다. 제작자와 테이커 수수료 ...

CME의 미래 데이터를 분석하는 방법은 무엇입니까?
2025-07-19 17:22:11
CME의 미래 이해 Bitcoin Bitcoin CME 그룹 (Chicago Mercantile Exchange) 의 미래는 규제 금융 상품을 대표하여 투자자가 기본 자산을 소유하지 않고 Bitcoin의 미래 가격을 추측 할 수있게합니다. 이러한 선물 계약은 중앙 대상...

청산 가격을 이해하는 방법?
2025-07-19 22:00:19
cryptocurrency 거래의 청산 가격은 얼마입니까? 암호 화폐 미래 및 마진 거래 영역에서 청산 가격은 거래자의 위치가 교환에 의해 자동으로 폐쇄되는 특정 가격 수준을 나타냅니다. 이는 상인이 레버리지 위치를 유지하기 위해 필요한 마진을 충족 할 수 없을 때 발...

시력이 언제입니까 (GTC, IOC, FOK)?
2025-07-19 08:57:01
cryptocurrency 거래에서 시력 시간을 이해합니다 Cryptocurrency 거래 의 세계에서 TIF (Time)는 주문이 실행되거나 취소되기 전에 시장에서 주문이 얼마나 오래 지속되는지를 결정하는 중요한 매개 변수입니다. 주문이 다르게 행동 할 수있는 기존 ...

부분 청산이란 무엇입니까?
2025-07-19 01:49:36
부분 청산의 기본 이해 Cryptocurrency 거래의 세계, 특히 레버리지 위치 내에서, 부분 청산은 계정의 여백 수준이 필요한 임계 값 아래로 떨어질 때 거래자의 공개 위치의 일부의 자동 폐쇄를 말합니다. 이 메커니즘은 Exchange의 위험 관리 시스템의 무결성...

Bitcoin 선물에 대한 좋은 입장 및 종료 포인트를 찾는 방법은 무엇입니까?
2025-07-19 17:14:26
Bitcoin 미래와 그들의 독특한 특성 이해 Bitcoin 선물은 실제 cryptocurrency를 소유하지 않고 Bitcoin의 미래 가격을 추측 할 수있는 파생 계약입니다. 이 계약은 CME Group 및 Binance Futures 와 같은 규제 거래소에서 표준...
모든 기사 보기
