Returning a boolean value when moving ERC20 token is an industry standard, expected by developers when coding contracts that interact with one another. It helps in transaction verification, frontend interaction and error handling.
Don't be like USDT, return a boolean to comply with the ERC20 token standard, even if this contract VaultFaucet.sol
is not an ERC20 implementation per se, it still moves ERC20 tokens.
-- function depositZETH(address zeth, uint88 amount) external nonReentrant {
++ function depositZETH(address zeth, uint88 amount) external nonReentrant returns (bool) {
if (amount == 0) revert Errors.PriceOrAmountIs0();
uint256 vault;
if (zeth == carbonZeth) {
vault = Vault.CARBON;
} else {
if (s.zethVault[zeth] == 0) revert Errors.InvalidZeth();
vault = s.zethVault[zeth];
}
IERC20(zeth).burnFrom(msg.sender, amount);
s.vaultUser[vault][msg.sender].ethEscrowed += amount;
++ return true;
}
function depositAsset(address asset, uint104 amount)
external
onlyValidAsset(asset)
isNotFrozen(asset)
nonReentrant
++ returns (bool)
{
if (amount == 0) revert Errors.PriceOrAmountIs0();
IERC20(asset).burnFrom(msg.sender, amount);
s.assetUser[asset][msg.sender].ercEscrowed += amount;
++ return true;
}
-- function withdrawZETH(address zeth, uint88 amount) external nonReentrant {
++ function withdrawZETH(address zeth, uint88 amount) external nonReentrant returns (bool) {
if (amount == 0) revert Errors.PriceOrAmountIs0();
uint256 vault;
if (zeth == carbonZeth) {
vault = Vault.CARBON;
} else {
if (s.zethVault[zeth] == 0) revert Errors.InvalidZeth();
vault = s.zethVault[zeth];
}
STypes.VaultUser storage VaultUser = s.vaultUser[vault][msg.sender];
if (amount > VaultUser.ethEscrowed) revert Errors.InsufficientETHEscrowed();
VaultUser.ethEscrowed -= amount;
IERC20(zeth).mint(msg.sender, amount);
++ return true;
}
function withdrawAsset(address asset, uint104 amount)
external
onlyValidAsset(asset)
nonReentrant
++ returns (bool)
{
if (amount == 0) revert Errors.PriceOrAmountIs0();
STypes.AssetUser storage AssetUser = s.assetUser[asset][msg.sender];
if (amount > AssetUser.ercEscrowed) revert Errors.InsufficientERCEscrowed();
AssetUser.ercEscrowed -= amount;
IERC20(asset).mint(msg.sender, amount);
++ return true;
}