1

I've got one Ethereum smart contract which calls functions of the other one. How could I track these calls using web3js or some other tool if it is possible at all? I need it because I want to execute some JavaScript (or other non-solidity language) code after receiving such call and then call other function of first smart contract so the sequence of calls should be following:

  1. Smart contract N1 calls N2 smart contract function.
  2. JavaScript (or other non-solidity language) code catches this call and execute some code.
  3. Smart contract N2 calls back N1 using data from previous step.

Could anybody help with it?

  • I think you can use javascript as the bridge. You use javascript to calll a function in contract N1 to call N2, then listen by the call. When it receives the confirmation and execute the code, javascript call contract N2 to call N1. Both contracts needs to have a function to call the other contract, otherwise I think it is not possible. – João Paulo Morais Feb 16 '22 at 12:19

2 Answers2

0

Contract N1 interfaces method A in contract N2.

Once method A in contract N2 successfully executes, it logs an event on the blockchain and it passes as argument the output of the method.

You then use a service which monitors your contracts events (such as Openzeppelin Defender Sentinels) to catch the events of your contract, send you a webhook, parse the json of the webhook extract the parameter that was passed with the event that you want to pass to N1 and use the output of method N2 to then call using web3.py contract N1.

Alternatively, you can simply interface method 1 N2 in method 1 N1, and return the value as a normal return variable without any inbetween off chain stuff happening and this would all be on chain which is better and cheaper.

0

What you are trying to archive is contrary to the design principles of Solidity and the blockchain. The answer to the question Why can't contracts make API calls? will pretty much explain why.

In short words: If you would open up Solidity to call arbritrary non Solidity code it would become non-deterministic as that non Solidity code would not exist outside of the blockchain and could be modified independently.

TorstenS
  • 182
  • 5
  • I understand it, but solution like http://www.oraclize.it/ exists and is successful. I need something like this. – Dmitriy Vinokurov May 27 '18 at 07:14
  • An oracle and what you are asking for isn't exactly the same. Basically, what an Oracle does it to send certain data from the outside world onto the blockchain, while making an API call would be just the other way round. Notice the difference? Maybe you have to re-think what you are trying to achieve or at least explain a bit more details. – TorstenS May 27 '18 at 10:11
  • Also possibly check the code samples at http://docs.oraclize.it/#ethereum-quick-start. Or you should ask a different question probably which would be: How to write my own oracle on the blockchain? – TorstenS May 27 '18 at 10:13