Solidity

多邊形上的 Aave 存款功能表示執行已恢復

  • July 3, 2021

我在這裡有一份契約,我可以將 dai 存入 aave 貸款池。我可以存入,但無法取款。這是契約:

// dai
ERC20 public TOKEN = ERC20(0x8f3Cf7ad23Cd3CaDbD9735AFf958023239c6A063);

ILendingPoolAddressesProvider provider = ILendingPoolAddressesProvider(0xd05e3E715d945B59290df0ae8eF85c1BdB684744);
ILendingPool pool = ILendingPool(provider.getLendingPool());

// put in 1 dai
function putInMoney() external {
   TOKEN.approve(address(pool), 1);
   pool.deposit(address(TOKEN), 1, msg.sender, 0);
}

// dai out 1 dai
function takeOut() external {
   pool.withdraw(address(TOKEN), 1, msg.sender);
}

這是它給出的錯誤:

Warning! Error encountered during contract execution [execution reverted] 

https://polygonscan.com/tx/0x4a53f02624f8691bdce69c8ec89d9ef27360e3703bdd780e622ef075331d0251

此外,它只存入 0.000000000000000001 dai 而不是 1。我不知道為什麼會這樣。

如何解決提款問題和 Dai 問題?

非常感謝!

當被呼叫時,dai 被存放在(即呼叫函式的人)putInMoney()的 Behlaf 上。msg.sender``putInMoney()

在呼叫takeOut()時,您基本上是將合約的資金提取給msg.sender(即呼叫takeOut()函式的人),但合約沒有代表其存入任何資金,因此它失敗了。

它存入 0.000000000000000001,因為 dai 有 18 位小數,預設單位是 Wei。因此,要存入和提取 1 dai,您應該將其更改為:

pool.deposit(address(TOKEN), 1 ether, msg.sender, 0);

(注:ether 是單位,1 ether = 10**18 wei)或

pool.deposit(address(TOKEN), 10**18, msg.sender, 0);

同樣對於撤回

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