Solidity
對於復雜場景(solidity 0.6),在智能合約之間進行互動的最佳方式是什麼?
我正在學習 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); }