Crypto Flexs
  • DIRECTORY
  • CRYPTO
    • ETHEREUM
    • BITCOIN
    • ALTCOIN
  • BLOCKCHAIN
  • EXCHANGE
  • TRADING
  • SUBMIT
Crypto Flexs
  • DIRECTORY
  • CRYPTO
    • ETHEREUM
    • BITCOIN
    • ALTCOIN
  • BLOCKCHAIN
  • EXCHANGE
  • TRADING
  • SUBMIT
Crypto Flexs
Home»ETHEREUM NEWS»Solidity 0.6.x feature: try/catch statement
ETHEREUM NEWS

Solidity 0.6.x feature: try/catch statement

By Crypto FlexsFebruary 13, 20244 Mins Read
Facebook Twitter Pinterest LinkedIn Tumblr Email
Solidity 0.6.x feature: try/catch statement
Share
Facebook Twitter LinkedIn Pinterest Email

that much try/catch syntax introduced in 0.6.0 This is arguably the biggest leap forward in Solidity’s error handling capabilities. going back and need Released in v0.4.22. both try hard and Catch This is a reserved keyword From v0.5.9 You can now use this to handle errors. Out Calling a function without rolling back the entire transaction (state changes in the called function will still be rolled back, but state changes in the calling function will not)

We are moving one step further from the purist “all or nothing” approach to the transaction lifecycle. This falls short of the actual behavior we often want.

External call failure handling

Try/catch statements allow you to react to failure. Out With a phone Create contract I can’t use it because I’m making a phone call. interior Function call. If you want to wrap a public function call within the same contract using try/catch, you can make it external by calling the function with: this..

The example below shows how try/catch is used in the factory pattern where contract creation may fail. as follows charity dispenser The contract requires the required address attribute. _owner In the constructor.

pragma solidity ^0.6.1;

contract CharitySplitter 
    address public owner;
    constructor (address _owner) public 
        require(_owner != address(0), "no-owner-provided");
        owner = _owner;
    

There is a factory contract — charity division factory Used to create and manage instances. charity dispenser. From factory we can pack New CharitySplitter (charityOwner) Used in try/catch as a failsafe for cases where an empty value may cause the constructor to fail. charity owner It’s being passed.

pragma solidity ^0.6.1;
import "./CharitySplitter.sol";
contract CharitySplitterFactory 
    mapping (address => CharitySplitter) public charitySplitters;
    uint public errorCount;
    event ErrorHandled(string reason);
    event ErrorNotHandled(bytes reason);
    function createCharitySplitter(address charityOwner) public 
        try new CharitySplitter(charityOwner)
            returns (CharitySplitter newCharitySplitter)
        
            charitySplitters(msg.sender) = newCharitySplitter;
         catch 
            errorCount++;
        
    

With try/catch, only exceptions that occur within the external call itself are caught. For example, errors inside expressions are not caught. New CharitySplitter Since it is itself part of the internal call, any errors that occur will not be caught. The sample demonstrating this behavior has been modified. createCharitySplitter function. here charity dispenser Constructor input parameters are retrieved dynamically from other functions. getCharityOwner. If that function reverts, in this example “Revert needed for testing”This is not caught in the try/catch statement.

function createCharitySplitter(address _charityOwner) public 
    try new CharitySplitter(getCharityOwner(_charityOwner, false))
        returns (CharitySplitter newCharitySplitter)
    
        charitySplitters(msg.sender) = newCharitySplitter;
     catch (bytes memory reason) 
        ...
    

function getCharityOwner(address _charityOwner, bool _toPass)
        internal returns (address) 
    require(_toPass, "revert-required-for-testing");
    return _charityOwner;

Search for error messages

You can extend the try/catch logic further: createCharitySplitter A function to retrieve the error message if a failure resulted in an error message. going back or need Exported as event. There are two ways to achieve this:

1. Use Catching errors (string memory reasons)

function createCharitySplitter(address _charityOwner) public 
    try new CharitySplitter(_charityOwner) returns (CharitySplitter newCharitySplitter)
    
        charitySplitters(msg.sender) = newCharitySplitter;
    
    catch Error(string memory reason)
    
        errorCount++;
        CharitySplitter newCharitySplitter = new
            CharitySplitter(msg.sender);
        charitySplitters(msg.sender) = newCharitySplitter;
        // Emitting the error in event
        emit ErrorHandled(reason);
    
    catch
    
        errorCount++;
    

An error occurs when the following event occurs in a failed constructor:

CharitySplitterFactory.ErrorHandled(
    reason: 'no-owner-provided' (type: string)
)

2. Use catch(bytememoryreason)

function createCharitySplitter(address charityOwner) public 
    try new CharitySplitter(charityOwner)
        returns (CharitySplitter newCharitySplitter)
    
        charitySplitters(msg.sender) = newCharitySplitter;
    
    catch (bytes memory reason) 
        errorCount++;
        emit ErrorNotHandled(reason);
    

An error occurs when the following event occurs in a failed constructor:

CharitySplitterFactory.ErrorNotHandled(
  reason: hex'08c379a0000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000116e6f2d6f776e65722d70726f7669646564000000000000000000000000000000' (type: bytes)

The above two methods of searching for error strings produce similar results. The difference is that the second method does not ABI decode the error string. The advantage of the second method is that it runs even if ABI decoding fails on an error string or no reason is provided.

Future Plans

There are plans to release support for this error type. This means that you will be able to catch many different types of errors by declaring them in a similar way to events. For example:

catch CustomErrorA(uint data1)  … 
catch CustomErrorB(uint() memory data2)  … 
catch 
Share. Facebook Twitter Pinterest LinkedIn Tumblr Email

Related Posts

JPMorgan placed JPM Coin bank deposits into Base.

November 15, 2025

Announcement of Husaka Mainnet | Ethereum Foundation Blog

November 11, 2025

Can Bitcoin End the Q4 on a Positive Note? Here’s what the experts think

November 7, 2025
Add A Comment

Comments are closed.

Recent Posts

NFT sales fell 5.4% to $79 million, Pudgy Penguins down 36%

November 15, 2025

JPMorgan placed JPM Coin bank deposits into Base.

November 15, 2025

Dogecoin Faces Correction—Could EV2 Presale Become The New Titan Of Web3 Gaming?

November 15, 2025

Dogecoin Faces Correction—Could EV2 Presale Become The New Titan Of Web3 Gaming?

November 15, 2025

Bearish Administration: Let’s take a look at how the Bitcoin price has changed since Donald Trump became President.

November 14, 2025

What is a crypto bridge? The Complete Guide to Blockchain Interoperability

November 14, 2025

As RWA momentum accelerates, BlackRock’s BUILD launches on the BNB chain.

November 14, 2025

Coinbase Ventures-Backed Supra Offers $1M Bounty To Beat Its Parallel EVM Execution Engine

November 14, 2025

XRP rises 5% after Trump signs shutdown bill

November 14, 2025

Luxembourg’s finance minister said the state fund would only allocate assets to Bitcoin.

November 14, 2025

Effortlessly Start Your Crypto Mining Journey

November 13, 2025

Crypto Flexs is a Professional Cryptocurrency News Platform. Here we will provide you only interesting content, which you will like very much. We’re dedicated to providing you the best of Cryptocurrency. We hope you enjoy our Cryptocurrency News as much as we enjoy offering them to you.

Contact Us : Partner(@)Cryptoflexs.com

Top Insights

NFT sales fell 5.4% to $79 million, Pudgy Penguins down 36%

November 15, 2025

JPMorgan placed JPM Coin bank deposits into Base.

November 15, 2025

Dogecoin Faces Correction—Could EV2 Presale Become The New Titan Of Web3 Gaming?

November 15, 2025
Most Popular

Forget about high gas bills. Ethereum Still Bullish: Is It Time to Buy More?

December 27, 2023

Cryptocurrency Mining Stocks Rebound Premarket Following Donald Trump’s Victory

November 7, 2024

Sui’s DeFi ecosystem thrives with record growth in Q4 2024

January 10, 2025
  • Home
  • About Us
  • Contact Us
  • Disclaimer
  • Privacy Policy
  • Terms and Conditions
© 2025 Crypto Flexs

Type above and press Enter to search. Press Esc to cancel.