-
Bitcoin
$118200
0.49% -
Ethereum
$3580
0.33% -
XRP
$3.429
-0.49% -
Tether USDt
$1.000
-0.05% -
BNB
$734.1
0.18% -
Solana
$177.7
0.26% -
USDC
$0.9999
-0.01% -
Dogecoin
$0.2434
4.12% -
TRON
$0.3203
-1.58% -
Cardano
$0.8334
1.59% -
Hyperliquid
$44.70
2.39% -
Stellar
$0.4636
-1.10% -
Sui
$3.789
-0.43% -
Chainlink
$18.49
4.03% -
Hedera
$0.2674
-0.08% -
Avalanche
$25.08
6.37% -
Bitcoin Cash
$520.4
1.12% -
Shiba Inu
$0.00001495
1.88% -
Litecoin
$112.5
9.34% -
UNUS SED LEO
$8.994
0.24% -
Toncoin
$3.209
-0.74% -
Polkadot
$4.393
2.95% -
Uniswap
$10.16
-0.07% -
Monero
$325.2
1.09% -
Ethena USDe
$1.001
0.00% -
Bitget Token
$4.898
-1.03% -
Pepe
$0.00001326
0.54% -
Dai
$1.000
0.02% -
Aave
$317.2
-0.43% -
Cronos
$0.1214
0.07%
堅実さでエラーを処理する方法は? (要求、戻る、主張)
Solidityは、エラー処理のために「必要」、「Revert」、および「Assert」を提供し、安全で予測可能なスマートコントラクトの実行を確保します。
2025/07/20 05:00

堅牢性でのエラー処理の理解
Ethereumスマートコントラクトの主要なプログラミング言語である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
を使用して、撤退を防ぐことができる2つの異なる条件を処理します。各条件は個別に評価され、条件が故障したときに特定のメッセージが返されます。
内部エラー検出のために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
、古いバージョンのSolidity(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の4420万ドルのセキュリティ侵害:暗号交換のためのモーニングコール
- 2025-07-20 08:30:13
- トランプ、WLFI、トークンリリース:暗号のニューヨークの分
- 2025-07-20 08:30:13
- Ripple's RLUSD:Bluechip Stablecoinが市場を混乱させようとしていますか?
- 2025-07-20 08:50:11
- ビットコインの価格アクション:地平線に対する需要の弱まりはありますか?
- 2025-07-20 08:50:11
- RippleのRLUSD:市場を揺るがすトップランクのStablecoin
- 2025-07-20 08:55:12
関連知識

メーカーとテイカー料金とは何ですか?
2025-07-19 01:14:23
暗号通貨交換料金の基本を理解する暗号通貨取引の世界では、メーカーとテイカーの手数料は、すべてのトレーダーが理解すべき基本的な概念です。これらの料金は、配置する注文の種類に基づいてユーザーとの交換によって請求されます。メーカーとテイカーの手数料の区別は、取引コストで支払う金額に影響を与え、取引戦略に影...

Bitcoin先物データをCMEから分析する方法は?
2025-07-19 17:22:11
CMEでのBitcoin先物の理解Bitcoin CME Group(Chicago Mercantile Exchange)の先物は、投資家が基礎となる資産を所有せずにBitcoinの将来の価格を推測できる規制された金融商品を表しています。これらの先物契約は標準化され、集中交換で取引されているため...

清算価格を理解する方法は?
2025-07-19 22:00:19
暗号通貨取引の清算価格とはいくらですか?暗号通貨先物とマージン取引の領域では、清算価格とは、トレーダーのポジションが交換によって自動的に閉鎖される特定の価格レベルを指します。これは、トレーダーがレバレッジされた位置を維持するために必要なマージンを満たすことができないときに発生します。清算価格は、交換...

施行されている時間(GTC、IOC、FOK)は何ですか?
2025-07-19 08:57:01
暗号通貨取引で有効な時間を理解する暗号通貨取引の世界では、強制時間(TIF)は、順序が実行またはキャンセルされる前に市場でアクティブな期間を決定する重要なパラメーターです。注文が異なる動作をすることができる従来の株式市場とは異なり、暗号交換はGTC 、 IOC 、 FOKなどの特定のTIFオプション...

部分的な清算とは何ですか?
2025-07-19 01:49:36
部分的な清算の基本を理解する暗号通貨取引の世界では、特にレバレッジドポジション内で、部分的な清算とは、アカウントのマージンレベルが必要なしきい値を下回るときのトレーダーのオープンポジションの一部の自動閉鎖を指します。このメカニズムは、取引所のリスク管理システムの整合性を維持しながら、投資資本の完全な...

Bitcoin先物の優れたエントリポイントと出口ポイントを見つける方法は?
2025-07-19 17:14:26
Bitcoin先物とそれらのユニークな特性を理解するBitcoin先物は、実際の暗号通貨を所有せずにBitcoinの将来の価格をトレーダーが推測できるようにする派生契約です。これらの契約は、 CMEグループやBinance先物などの規制された取引所で標準化および取引されています。スポット取引とは異な...

メーカーとテイカー料金とは何ですか?
2025-07-19 01:14:23
暗号通貨交換料金の基本を理解する暗号通貨取引の世界では、メーカーとテイカーの手数料は、すべてのトレーダーが理解すべき基本的な概念です。これらの料金は、配置する注文の種類に基づいてユーザーとの交換によって請求されます。メーカーとテイカーの手数料の区別は、取引コストで支払う金額に影響を与え、取引戦略に影...

Bitcoin先物データをCMEから分析する方法は?
2025-07-19 17:22:11
CMEでのBitcoin先物の理解Bitcoin CME Group(Chicago Mercantile Exchange)の先物は、投資家が基礎となる資産を所有せずにBitcoinの将来の価格を推測できる規制された金融商品を表しています。これらの先物契約は標準化され、集中交換で取引されているため...

清算価格を理解する方法は?
2025-07-19 22:00:19
暗号通貨取引の清算価格とはいくらですか?暗号通貨先物とマージン取引の領域では、清算価格とは、トレーダーのポジションが交換によって自動的に閉鎖される特定の価格レベルを指します。これは、トレーダーがレバレッジされた位置を維持するために必要なマージンを満たすことができないときに発生します。清算価格は、交換...

施行されている時間(GTC、IOC、FOK)は何ですか?
2025-07-19 08:57:01
暗号通貨取引で有効な時間を理解する暗号通貨取引の世界では、強制時間(TIF)は、順序が実行またはキャンセルされる前に市場でアクティブな期間を決定する重要なパラメーターです。注文が異なる動作をすることができる従来の株式市場とは異なり、暗号交換はGTC 、 IOC 、 FOKなどの特定のTIFオプション...

部分的な清算とは何ですか?
2025-07-19 01:49:36
部分的な清算の基本を理解する暗号通貨取引の世界では、特にレバレッジドポジション内で、部分的な清算とは、アカウントのマージンレベルが必要なしきい値を下回るときのトレーダーのオープンポジションの一部の自動閉鎖を指します。このメカニズムは、取引所のリスク管理システムの整合性を維持しながら、投資資本の完全な...

Bitcoin先物の優れたエントリポイントと出口ポイントを見つける方法は?
2025-07-19 17:14:26
Bitcoin先物とそれらのユニークな特性を理解するBitcoin先物は、実際の暗号通貨を所有せずにBitcoinの将来の価格をトレーダーが推測できるようにする派生契約です。これらの契約は、 CMEグループやBinance先物などの規制された取引所で標準化および取引されています。スポット取引とは異な...
すべての記事を見る
