Delegatecall
如何對您擁有地址的已部署庫進行委託呼叫
在 TestContract 上呼叫 foo() 時,以下程式碼失敗。已將adaptedLib 設置為正確的地址。您如何正確地對庫進行委託呼叫?
contract TestContract { address public adapterLib; uint public a; function setLib(address lib)public{ adapterLib = lib; } function foo()public { (bool success, bytes memory returnData) = adapterLib.delegatecall( abi.encodeWithSignature('foo(uint)', 1) ); } } library Test{ function foo(State storage state)external returns(uint){ return 1; } }
嘗試將函式簽名更改為“foo(uint256)”。這當然是一個問題,因為 uint 是 uint256 的簡寫,但你不能將那個簡寫用於函式簽名
您的庫在您的智能合約中實現並且您在那裡使用該庫,在這種情況下“delegateCall”不適合,您可以使用“yourLibrary.yourFunc()”,但如果您在另一個合約中實現您的庫,我建議檢查您的輸入參數類型(uint 到 uint256)