Solidity

關於 transferFrom 和 Approve 功能的幫助

  • February 18, 2022

我們有一個代幣合約 A 和一個託管合約 B。在將代幣從地址轉移到合約 B 時,我們使用了從合約 A 覆蓋的 transferFrom 函式。但是在需要進行轉賬時,我們必須在合約 A 上呼叫批准函式。如果我們直接從合約 A 呼叫批准函式,這將有效。但是如果我們像在合約 B 上的 transferFrom 一樣覆蓋批准函式,它就會失敗。有人可以解釋一下我們如何從契約 B 本身呼叫批准。

如果您想批准合約 b 中的代幣由其他人移動,這將起作用。但是,如果您想批准使用者 Y 將使用者 X 的代幣從合約 B 中移出,這是行不通的。問題是從合約 B 呼叫批准將具有 msg.sender 並且它將失敗。

希望這可以幫助

規則是:您只能批准代幣的未來支出。這可以確保隱式檢查 msg.sender 是“已批准”令牌的所有者。

如果 Escrow B 想要批准某事,它只能批准 Escrow B 賬戶上的代幣(即歸 0x… 所有的 Escrow 結果部署地址)。

不存在其他可能性(如果我們談論的是 ERC20)。

您應該需要代幣合約中的 forceTransfer 函式 1) 確實存在;2) 您可以訪問;為了能夠做一些不同的事情。

您編寫或發現編寫或在託管中設計的任何功能都不能與上述標準有所不同,因為代幣僅在代幣合約的內部儲存中駐留和管理,僅由代幣合約管理。在它之外,你只能與它進行互動,但沒有代幣從他們的合約中退出。

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