Solidity

對於復雜場景(solidity 0.6),在智能合約之間進行互動的最佳方式是什麼?

  • April 7, 2020

我正在學習 Solidity。

我想寫一個複雜的demo場景來測試Solidity和智能合約的威力。

我的懷疑是關於智能合約之間的互動。

如果有很多智能合約,它們之間互動的最佳方式是什麼?

場景範例:

  • 我有一個 ContactA 及其功能。
  • 當 ContractA 中發生某些事情時,必須在 ContractB 中觸發某些事情(在此範例中為 HelloWord.sol)。
pragma solidity ^0.6.0;

contract HelloWord 
{
 string hello= "Hi buddy";
 function getSaluto () public view returns (string memory saluto ){
   return hello;
 }
}

另一個契約的另一個文件:

pragma solidity ^0.6.0;

import "HelloWord.sol";
contract ContractA is HelloWord
{
  event LogString(
    string errore,
    string saluto
  );
  receive() external payable {
    emit LogString("errore receive saluto " ,  HelloWord.getSaluto() ); //call to HelloWord function
  }
}

它有效,但是,這是與另一個合約互動的最佳方式嗎?

另一個我不知道如何實現的不同契約的場景:

  • 如果我必須呼叫與 ContractA 無關的另一個合約(因為沒有繼承),如何從客戶端應用程序中呼叫它?

非常感謝。

在您的情況下,智能合約之間沒有互動。 HelloWord.getSaluto()實際上是內部呼叫,即你的智能合約呼叫它自己的函式,只是在基礎智能合約中定義。真實的互動場景是這樣的:

contract A {
 uint state = 0;

 function foo (uint x) public returns (uint) {
   return state += x;
 }
}

contract B {
 A a;

 constructor (A _a) public {
   a = _a;
 }

 function bar (uint y) public {
   emit Zoo (a.foo (y));
 }

 event Zoo (uint z);
}

引用自:https://ethereum.stackexchange.com/questions/82225