# 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.7.0;

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

contract MyToken is ERC1363 {

  constructor (string memory name, string memory symbol) ERC1363(name, symbol) {}

  // 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.