Solidity
多邊形上的 Aave 存款功能表示執行已恢復
我在這裡有一份契約,我可以將 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);
同樣對於撤回