我正在写一个拉付款函数,和任何外部调用一样,这是一个很好的实践,验证结果并检查成功的执行。我使用以下界面:
interface IAaveLendingPool {
function deposit(
address asset,
uint256 amount,
address onBehalfOf,
uint16 referralCode
) external;
function withdraw(
address asset,
uint256 amount,
address to
) external;
function getReservesList() external view returns (address[] memory);
}
aAveLendingPool= IAaveLendingPool(0x0543958349aAve_pooladdress)Aave提供的接口也没有指定返回。LendingPool.sol合同的退出函数返回external override whenNotPaused returns (uint256)。
问题:我是否可以使用返回的uint来验证成功的执行,或者aAveLendingPool.withdraw()返回一个布尔值?下面的工作会像预期的那样吗?
///@notice assigns dai to caller
require( aaveLendingPool.withdraw(
address(dai),
amount,
msg.sender), "Error, contract does not have enough DAI")如果有的话,请提供一个指向外部函数调用返回值的solidity链接。
发布于 2021-11-27 12:57:51
根据衰老勤勉Aave V2审计
ERC20实现并不总是一致的。有些传输和transferFrom实现可以在失败时返回“false”,而不是恢复。将这样的调用封装到针对这些失败的require()语句中是更安全的。
因此,将传输调用包装在需求检查中是安全和充分的。
require( aaveLendingPool.withdraw(
address(dai),
amount,
msg.sender), "Error, contract does not have enough DAI")https://stackoverflow.com/questions/70088614
复制相似问题