ERC-1363 Payable Token

NPM Package Build Status Coverage Status MIT licensed

This is an implementation of the ERC-1363 Payable Token that defines a Payable Token, a Token Receiver and a Token Spender.

The ERC-1363 is an ERC-20 compatible token that can make a callback on the receiver contract to notify token transfers or token approvals. It can be used to create a token payable crowdsale, selling services for tokens, paying invoices, making subscriptions, use them for a specific utility and many other purposes.

This proposal allows to implement an ERC-20 token that can be used for payments (like the payable keyword does for Ethereum).

Install

npm install erc-payable-token

Usage

pragma solidity ^0.5.12;

import "erc-payable-token/contracts/token/ERC1363/ERC1363.sol";

contract MyToken is ERC1363 {
  // your stuff
}

Code

This repo contains:

IERC1363

IERC1363.sol

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

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.

IERC1363Spender

IERC1363Spender.sol

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

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 console

Compile

npm run compile

Test

npm run test 

Usage (using Buidler)

Open the Buidler console

npm run buidler:console

Compile

npm run buidler:compile

Test

npm run buidler:test 

License

Code released under the MIT License.