How error propagate between contracts in Solidity?

Julien Klepatch

Let's say we have 2 smart contracts. A and B. A calls B, and B throws an error.

What happen in A?

Not sure? haha, that's a tricky one!

Actually it depends on how B was called.

If B was called the normal way, the whole transaction get reverted:

contract A {
  function foo() {
   B b = new B();
   b.willThrow();
  }
}
contract B {
  function willThrow() {
    revert();
  }
}

BUT, if B was called with a low-level call() method, the error will NOT be propagated to A. Instead, A will received a false boolean value indicating there was an error in B. This way, A can recover from the error and handle the error itself.

Check out this video where I explain this in full details, as well as other error handling mechanisms in Solidity like assert, revert, require and throw.

By the way, in the Dapp 30 course, there is a bonus section dedicated to debugging in Solidity when I explain in details the different kind of errors in Solidity and how to debug them.

0 Comments

Leave a Reply

More great articles

Overview of the Github repos of Truffle

You probably have heard or used Truffle, the leading framework for Solidity smart contracts. But are you aware of all…

Read Story

Introducing “Smart Contract 30”, a 30-day course on Solidity

Are you a beginner learning Solidity? Are you overwhelmed by the complexity of developing an Ethereum smart contract and don't…

Read Story

Walkthrough the new UI of Remix

TIP: If you have never used Remix, check out my intro to Remix on Youtube. Remix, the online IDE for…

Read Story

Never miss a minute

Get great content to your inbox every week. No spam.
[contact-form-7 id="6" title="Footer CTA Subscribe Form"]
Arrow-up