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

Solidity vs Javascript arrays

https://youtu.be/MPBOnChpi0c Solidity arrays... are like Javascript arrays, right? Nope.. In Solidity: Arrays can only contain data of the same type…

Read Story

EatTheBlocks Pro Subscription price increase 10 USD -> 15 USD

Disclaimer: the price increase will NOT affect existing users who subscribed before June 10th. If you are an existing subscriber…

Read Story

How to transfer Ether between 2 smart contracts?

https://youtu.be/_Nvl-gz-tRs Sending Ether between smart contracts is very important. After all, it's because smart contracts can do financial transactions that…

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