Solidity

Solidity 函式需要介面,但地址作為參數傳遞

  • October 28, 2022

我正在關注 Superfluid 教程(請在此處查看完整的 repo ),並且我有一個關於介面作為函式參數的問題。我測試了契約和腳本,它們執行良好。

從上述參考:

function sendLumpSumIntoContract(ISuperToken token, uint256 amount) external 
       token.transferFrom(msg.sender, address(this), amount);
   }

現在,當我呼叫函式sendLumpSumIntoContract時,我傳入令牌的地址而不是 ISuperToken 介面

await moneyRouter.connect(signers[0]).sendLumpSumIntoContract(daix.address, ethers.utils.parseEther("500")).then(function (tx) {
   console.log(`Tx Hash: ${tx.hash}`)
   });

我希望建構一個介面並作為參數傳遞。非常感謝解釋為什麼不是這種情況。

一個介面只是提供了這個對象可以做什麼的資訊,如果是 ISuperToken solidity 知道任何地址解析為該介面都可以呼叫介面描述的方法,在這種情況下transferFrom ,當你傳遞地址時,程式碼是什麼就是說,這個地址對應於我剛剛將其轉換為的介面的部署,在你的情況下ISuperToken

如果您提供了錯誤的介面,那麼您傳遞的正確地址並不重要,您將無法呼叫合約地址中的方法,因為它們不在您在程式碼中引用的介面中。

簡短回答:當您傳遞地址時,solidity 將該地址視為介面的已部署實例。

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