Solidity
Solidity 函式需要介面,但地址作為參數傳遞
我正在關注 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 將該地址視為介面的已部署實例。