@airswap/peer

0.3.0 • Public • Published

Peer

⚠️ This package is under active development. Do not use in production.

AirSwap is a peer-to-peer trading network for Ethereum tokens. This package contains source code and tests for a basic Peer contract that can be deployed with trading rules. In addition, there is a PeerFactory contract that deploys Peer contracts as well.

💡 Note: solidity-coverage does not cooperate with view functions. To run test coverage, remove the view keywords from functions in Peer.sol, IPeer.sol, and PeerFactory.sol.

Discord License

Peer

Features

Limit Orders

Set rules to only take trades at specific prices.

Partial Fills

Send up to a maximum amount of a token.

Definitions

Term Definition
Peer Smart contract that trades based on rules. Acts as taker.
Consumer A party that gets quotes from and sends orders to the peer. Acts as maker.
Rule An amount of tokens to trade at a specific price.
Price Coefficient The significant digits of the price.
Price Exponent The location of the decimal on the price.

Constructor

Create a new Peer contract.

constructor(
  address _swapContract,
  address _peerContractOwner
) public

Params

Name Type Description
_swapContract address Address of the swap contract used to settle trades.
_peerContractOwner address Address of the owner of the peer for rule management.

Price Calculations

All amounts are in the smallest unit (e.g. wei), so all calculations based on price result in a whole number. For calculations that would result in a decimal, the amount is automatically floored by dropping the decimal. For example, a price of 5.25 and takerParam of 2 results in makerParam of 10 rather than 10.5. Tokens have many decimal places so these differences are very small.

Set a Rule

Set a trading rule on the peer.

function setRule(
  address _takerToken,
  address _makerToken,
  uint256 _maxTakerAmount,
  uint256 _priceCoef,
  uint256 _priceExp
) external onlyOwner

Params

Name Type Description
_takerToken address The token the peer would send.
_makerToken address The token the consumer would send.
_maxTakerAmount uint256 The maximum amount of token the peer would send.
_priceCoef uint256 The coefficient of the price to indicate the whole number.
_priceExp uint256 The exponent of the price to indicate location of the decimal.

Example

Set a rule to send up to 100,000 DAI for WETH at 0.0032 WETH/DAI

setRule(<WETHAddress>, <DAIAddress>, 100000, 32, 4)

Set a rule to send up to 100,000 DAI for WETH at 312.50 WETH/DAI

setRule(<WETHAddress>, <DAIAddress>, 100000, 32150, 2)

Set a rule to send up to 100,000 DAI for WETH at 312 WETH/DAI

setRule(<WETHAddress>, <DAIAddress>, 100000, 312, 0)

Unset a Rule

Unset a trading rule for the peer.

function unsetRule(
  address _takerToken,
  address _makerToken
) external onlyOwner

Params

Name Type Description
_takerToken address The token the peer would send.
_makerToken address The token the consumer would send.

Get a Maker-Side Quote

Get a quote for the maker (consumer) side. Often used to get a buy price for _quoteTakerToken.

function getMakerSideQuote(
  uint256 _quoteTakerParam,
  address _quoteTakerToken,
  address _quoteMakerToken
) external view returns (
  uint256 quoteMakerParam
)

Params

Name Type Description
_quoteTakerParam uint256 The amount of ERC-20 token the peer would send.
_quoteTakerToken address The address of an ERC-20 token the peer would send.
_quoteMakerToken address The address of an ERC-20 token the consumer would send.

Reverts

Reason Scenario
TOKEN_PAIR_INACTIVE There is no rule set for this token pair.
AMOUNT_EXCEEDS_MAX The quote would exceed the maximum for the rule.

Get a Taker-Side Quote

Get a quote for the taker (peer) side. Often used to get a sell price for _quoteMakerToken.

function getTakerSideQuote(
  uint256 _quoteMakerParam,
  address _quoteMakerToken,
  address _quoteTakerToken
) external view returns (
  uint256 quoteTakerParam
)

Params

Name Type Description
_quoteMakerParam uint256 The amount of ERC-20 token the consumer would send.
_quoteMakerToken address The address of an ERC-20 token the consumer would send.
_quoteTakerToken address The address of an ERC-20 token the peer would send.

Reverts

Reason Scenario
TOKEN_PAIR_INACTIVE There is no rule set for this token pair.
AMOUNT_EXCEEDS_MAX The quote would exceed the maximum for the rule.

Get a Max Quote

Get the maximum quote from the peer.

function getMaxQuote(
  address _quoteTakerToken,
  address _quoteMakerToken
) external view returns (
  uint256 quoteTakerParam,
  uint256 quoteMakerParam
)

Params

Name Type Description
_quoteTakerToken address The address of an ERC-20 token the peer would send.
_quoteMakerToken address The address of an ERC-20 token the consumer would send.

Reverts

Reason Scenario
TOKEN_PAIR_INACTIVE There is no rule set for this token pair.

Provide an Order

Provide an order to the peer for taking.

function provideOrder(
  Types.Order memory _order
) public

Params

Name Type Description
order Order Order struct as specified in the @airswap/types package.

Reverts

Reason Scenario
TOKEN_PAIR_INACTIVE There is no rule set for this token pair.
AMOUNT_EXCEEDS_MAX The amount of the trade would exceed the maximum for the rule.
PRICE_INCORRECT The order is priced incorrectly for the rule.

Peer Factory

Features

Deploys Peer Contracts

Creates peers with a trusted interface

Has lookup to find peer contracts it has deployed

Definitions

Term Definition
Peer Smart contract that trades based on rules. Acts as taker.

Constructor

Create a new Peer contract.

constructor(
  address _swapContract,
  address _peerContractOwner
) public

Create a new Peer contract.

createPeer(
  address _swapContract,
  address _peerContractOwner
) external returns
  (address peerContractAddress)

Params

Name Type Description
_swapContract address Address of the swap contract used to settle trades.
_peerContractOwner address Address of the owner of the peer for rule management.

Lookup for deployed peers

To check whether a locator was deployed

function has(
  bytes32 _locator
) external returns (bool)

Params

Name Type Description
_locator bytes32 locator of the peer in question, ex an address

Readme

Keywords

none

Package Sidebar

Install

npm i @airswap/peer

Weekly Downloads

1

Version

0.3.0

License

Apache-2.0

Unpacked Size

50 kB

Total Files

14

Last publish

Collaborators

  • npm