Have ideas to improve npm?Join in the discussion! »

    erc-payable-token

    4.0.0 • Public • Published

    ERC-1363 Payable Token

    NPM Package CI Coverage Status MIT licensed

    ERC-1363 allows to implement an ERC-20 token that can be used for payments.

    This is an implementation of the ERC-1363 Payable Token that defines a token interface for ERC-20 tokens that supports executing recipient code after transfer or transferFrom, or spender code after approve.

    Abstract

    There is no way to execute code after an ERC-20 transfer or approval (i.e. making a payment), so to make an action it is required to send another transaction and pay GAS twice. ERC-1363 makes token payments easier and working without the use of any other listener. It allows to make a callback after a transfer or approval in a single transaction.

    There are many proposed uses of Ethereum smart contracts that can accept ERC-20 payments.

    Examples could be:

    • to create a token payable crowdsale
    • selling services for tokens
    • paying invoices
    • making subscriptions

    For these reasons it was named as "Payable Token".

    Anyway you can use it for specific utilities or for any other purposes who require the execution of a callback after a transfer or approval received.

    Install

    npm install erc-payable-token

    Usage

    pragma solidity ^0.8.0;
    
    import "erc-payable-token/contracts/token/ERC1363/ERC1363.sol";
    
    contract MyToken is ERC1363 {
    
        constructor (
            string memory name,
            string memory symbol
        ) ERC20(name, symbol) {
            // your stuff
        }
    
      // your stuff
    }

    Code

    This repo contains:

    IERC1363

    IERC1363.sol

    Interface for a Payable Token contract as defined in ERC-1363 Payable Token.

    interface IERC1363 is IERC20, IERC165 {
        function transferAndCall(address recipient, uint256 amount) external returns (bool);
        function transferAndCall(address recipient, uint256 amount, bytes calldata data) external returns (bool);
        function transferFromAndCall(address sender, address recipient, uint256 amount) external returns (bool);
        function transferFromAndCall(address sender, address recipient, uint256 amount, bytes calldata data) external returns (bool);
        function approveAndCall(address spender, uint256 amount) external returns (bool);
        function approveAndCall(address spender, uint256 amount, bytes calldata data) external returns (bool);
    }

    ERC1363

    ERC1363.sol

    Implementation of an IERC1363 interface.

    IERC1363Receiver

    IERC1363Receiver.sol

    Interface for any contract that wants to support transferAndCall or transferFromAndCall from ERC1363 token contracts.

    interface IERC1363Receiver {
        function onTransferReceived(address operator, address sender, uint256 amount, bytes calldata data) external returns (bytes4);
    }

    IERC1363Spender

    IERC1363Spender.sol

    Interface for any contract that wants to support approveAndCall from ERC1363 token contracts.

    interface IERC1363Spender {
        function onApprovalReceived(address sender, uint256 amount, bytes calldata data) external returns (bytes4);
    }

    ERC1363Payable

    ERC1363Payable.sol

    Implementation proposal of a contract that wants to accept ERC1363 payments. It intercepts what is the ERC1363 token desired for payments and throws if another is sent.

    It emits a TokensReceived event to notify the transfer received by the contract.

    It also implements a transferReceived function that can be overridden to make your stuffs within your contract after a onTransferReceived.

    It emits a TokensApproved event to notify the approval received by the contract.

    It also implements a approvalReceived function that can be overridden to make your stuffs within your contract after a onApprovalReceived.

    ERC1363PayableCrowdsale

    ERC1363PayableCrowdsale.sol

    As example: an Implementation of a classic token Crowdsale, but paid with ERC1363 tokens instead of ETH.

    Development

    Install dependencies

    npm install

    Linter

    Use Solhint

    npm run lint:sol

    Use ESLint

    npm run lint:js

    Use Eslint and fix

    npm run lint:fix

    Usage (using Truffle)

    Open the Truffle console

    npm run truffle:console

    Compile

    npm run truffle:compile

    Test

    npm run truffle:test

    Usage (using Hardhat)

    Open the Hardhat console

    npm run hardhat:console

    Compile

    npm run hardhat:compile

    Test

    npm run hardhat:test

    Code Coverage

    npm run hardhat:coverage

    License

    Code released under the MIT License.

    Install

    npm i erc-payable-token

    DownloadsWeekly Downloads

    56

    Version

    4.0.0

    License

    MIT

    Unpacked Size

    85.1 kB

    Total Files

    21

    Last publish

    Collaborators

    • avatar