What is ERC-1363?
ERC-20 with callback functions for payments and approvals.
ERC-1363 is the "do the token transfer and call the app" extension for ERC-20. It exists because plain transfer is silent.
on this page
The standard, in one card.
- Standard
- ERC-1363 / EIP-1363
- Extends
- ERC-20
- Core methods
- transferAndCall · transferFromAndCall · approveAndCall
- Canonical spec
- eips.ethereum.org / EIP-1363
The origin story.#
ERC-20 became the standard, but it never gave receiving contracts a callback. ERC-1363 adds a lightweight callback path without replacing the whole ERC-20 model.
What ERC-1363 actually is.#
function transferAndCall(address to, uint256 value) external returns (bool);
function transferAndCall(address to, uint256 value, bytes calldata data) external returns (bool);
function transferFromAndCall(address from, address to, uint256 value) external returns (bool);
function transferFromAndCall(address from, address to, uint256 value, bytes calldata data) external returns (bool);
function approveAndCall(address spender, uint256 value) external returns (bool);
function approveAndCall(address spender, uint256 value, bytes calldata data) external returns (bool);
transferAndCall · transferFromAndCall · approveAndCall onTransferReceived onApprovalReceived transferAndCall moves tokens and calls the receiver. approveAndCall approves a spender and calls the spender. The callbacks return selectors so the token can verify the recipient or spender accepted the operation.
What's broken about ERC-1363.#
The issue is adoption and execution risk. A callback extension only works when both sides implement it, and calling external code during token flow requires defensive integration.
-
Both sides have to opt in.#
A token has to implement ERC-1363, and the receiver or spender has to implement the callback interface. Existing ERC-20 tokens and contracts do not get the behavior automatically.
ERC-1363transferAndCallLSP7 + LSP1transfer with universalReceiverworkarounds tried- wrappers
- routers
- custom adapters
-
Callbacks add execution risk.#
Calling a receiver or spender during token logic adds reentrancy and failure-mode questions that plain ERC-20 transfers avoid.
callbackonTransferReceivedLSP1known receiver hookworkarounds tried- reentrancy guards
- callback allowlists
- pull payments
-
It does not fix allowance itself.#
approveAndCall notifies the spender, but the resulting approval is still ERC-20 allowance with the same standing-spender risks if the amount is broad.
approveAndCallapprove + notifyLSP6account permissionworkarounds tried- exact amounts
- short-lived flows
- Permit2
- revocation
LUKSO designed it differently.#
LSP7 makes transfer data and receiver notification part of the normal asset model. LSP1 generalizes the callback so every asset type does not need its own bespoke receiver interface.
ERC-1363 vs LSP7+LSP1 in one table.#
| row | ERC-1363 | LSP7 plus LSP1 |
|---|---|---|
| base asset | ERC-20 extension | LSP7 asset standard |
| receiver callback | onTransferReceived | LSP1 universalReceiver |
| approval callback | approveAndCall | LSP6-scoped controller permission |
| adoption path | token and receiver opt in | native within LSP asset/account stack |
FAQ.#
-
What does ERC-1363 add to ERC-20? #
It adds transferAndCall, transferFromAndCall, and approveAndCall, plus receiver/spender callback interfaces.
-
Is ERC-1363 the same as ERC-777? #
No. Both add callback behavior for fungible tokens, but ERC-1363 is a smaller ERC-20 extension while ERC-777 defines a broader token model with ERC-1820 discovery and operators.
-
What problem does transferAndCall solve? #
It lets a token transfer notify the receiving contract in the same transaction, avoiding the pattern where a contract receives ERC-20 tokens but has no callback to credit the deposit.