This extension adds a decreaseAllowanceBySpender
function to decrease ERC-20 allowances, in which a spender can revoke or decrease a given allowance by a specific address. This ERC extends ERC-20.
Currently, ERC-20 tokens offer allowances, enabling token owners to authorize spenders to use a designated amount of tokens on their behalf. However, the process of decreasing an allowance is limited to the owner's side, which can be problematic if the token owner is a treasury wallet or a multi-signature wallet that has granted an excessive allowance to a spender. In such cases, reducing the allowance from the owner's perspective can be time-consuming and challenging.
To address this issue and enhance security measures, this ERC proposes allowing spenders to decrease or revoke the granted allowance from their end. This feature provides an additional layer of security in the event of a potential hack in the future. It also eliminates the need for a consensus or complex procedures to decrease the allowance from the token owner's side.
The keywords “MUST”, “MUST NOT”, “REQUIRED”, “SHALL”, “SHALL NOT”, “SHOULD”, “SHOULD NOT”, “RECOMMENDED”, “MAY”, and “OPTIONAL” in this document are to be interpreted as described in RFC 2119.
Contracts using this ERC MUST implement the IERC7410
interface.
pragma solidity ^0.8.0;
/**
* @title IERC-7410 Update Allowance By Spender Extension
* Note: the ERC-165 identifier for this interface is 0x12860fba
*/
interface IERC7410 is IERC20 {
/**
* @notice Decreases any allowance by `owner` address for caller.
* Emits an {IERC20-Approval} event.
*
* Requirements:
* - when `subtractedValue` is equal or higher than current allowance of spender the new allowance is set to 0.
* Nullification also MUST be reflected for current allowance being type(uint256).max.
*/
function decreaseAllowanceBySpender(address owner, uint256 subtractedValue) external;
}
The decreaseAllowanceBySpender(address owner, uint256 subtractedValue)
function MUST be either public
or external
.
The Approval
event MUST be emitted when decreaseAllowanceBySpender
is called.
The supportsInterface
method MUST return true
when called with 0x12860fba
.
The technical design choices within this ERC are driven by the following considerations:
decreaseAllowanceBySpender
function empowers spenders by allowing them to autonomously revoke or decrease allowances. This design choice aligns with the goal of providing more direct control to spenders over their authorization levels.subtractedValue
to be lower than the current allowance ensures a secure implementation. Additionally, nullification is achieved by setting the new allowance to 0 when subtractedValue
is equal to or exceeds the current allowance. This approach adds an extra layer of security and simplifies the process of decreasing allowances.This standard is compatible with ERC-20.
An minimal implementation is included here.
Users of this ERC must thoroughly consider the amount of tokens they decrease from their allowance for an owner
.
Copyright and related rights waived via CC0.