Solidity

Ethernaut Challenge Naught Coin

  • October 16, 2022

我批准了使用此程式碼發送我的代幣的契約,solidity await contract.approve(contract.address, totalBalance)並且交易通過了。之後,我執行程式碼solidity await contract.transferFrom(player,randomAddress,totalBalance),交易失敗。是什麼原因?

因為這不是您應該使用批准功能的方式。

您擁有所有代幣,但無法使用 transfer() 轉移它們。所以你需要使用transferFrom。因此,您需要批准某人使用您的所有代幣,以便有人可以呼叫 transferFrom 並將您的所有代幣轉出您的錢包。

在這種情況下,您甚至可以批准自己(即呼叫批准(myAddress,1000000000000000000000000)),然後您可以呼叫transferFrom(someoneElse,1000000000000000000000000)。

或者您可以使用第二個地址並從地址 1 呼叫批准(address2, 1000000000000000000000000),然後使用地址 2 呼叫 transferFrom(address1, address2, 1000000000000000000000000)。

你在這裡所做的是批准合約使用你的代幣,但合約沒有呼叫 transferFrom 的能力,所以這無濟於事。

希望我的回答對您有幫助,如果您有後續問題,請告訴我

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