How error propagate between contracts in Solidity?

jklepatch

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.

More great articles

What to build on Ethereum? Dapp ideas

So, you are thinking of building a Dapp on Ethereum, but you are still not sure what to build? In…

Read Story

New Features In Solidity 5.0

The upcoming Solidity 5.0 version is coming with a couple of breaking changes, and you should make sure to learn…

Read Story

Etherdelta smart contract walkthrough

In this article, I will walk you through the code of the Etherdelta smart contract: ERC20 token transfers, orders creation,…

Read Story

Never miss a minute

Get great content to your inbox every week. No spam.

    Only great content, we don’t share your email with third parties.
    Arrow-up