Add interfaces for Exchange, TokenRegistery and TokenTransferProxy
This commit is contained in:
committed by
Amir Bandeali
parent
d08bfbf705
commit
b06ba55be3
@@ -0,0 +1,226 @@
|
||||
pragma solidity ^0.4.19;
|
||||
|
||||
contract IExchange {
|
||||
|
||||
// Error Codes
|
||||
enum Errors {
|
||||
ORDER_EXPIRED, // Order has already expired
|
||||
ORDER_FULLY_FILLED_OR_CANCELLED, // Order has already been fully filled or cancelled
|
||||
ROUNDING_ERROR_TOO_LARGE, // Rounding error too large
|
||||
INSUFFICIENT_BALANCE_OR_ALLOWANCE // Insufficient balance or allowance for token transfer
|
||||
}
|
||||
|
||||
event LogError(uint8 indexed errorId, bytes32 indexed orderHash);
|
||||
|
||||
event LogFill(
|
||||
address indexed maker,
|
||||
address taker,
|
||||
address indexed feeRecipient,
|
||||
address makerToken,
|
||||
address takerToken,
|
||||
uint filledMakerTokenAmount,
|
||||
uint filledTakerTokenAmount,
|
||||
uint paidMakerFee,
|
||||
uint paidTakerFee,
|
||||
bytes32 indexed tokens, // keccak256(makerToken, takerToken), allows subscribing to a token pair
|
||||
bytes32 orderHash
|
||||
);
|
||||
|
||||
event LogCancel(
|
||||
address indexed maker,
|
||||
address indexed feeRecipient,
|
||||
address makerToken,
|
||||
address takerToken,
|
||||
uint cancelledMakerTokenAmount,
|
||||
uint cancelledTakerTokenAmount,
|
||||
bytes32 indexed tokens,
|
||||
bytes32 orderHash
|
||||
);
|
||||
|
||||
function ZRX_TOKEN_CONTRACT()
|
||||
public view
|
||||
returns (address);
|
||||
|
||||
function TOKEN_TRANSFER_PROXY_CONTRACT()
|
||||
public view
|
||||
returns (address);
|
||||
|
||||
function EXTERNAL_QUERY_GAS_LIMIT()
|
||||
public view
|
||||
returns (uint16);
|
||||
|
||||
function VERSION()
|
||||
public view
|
||||
returns (string);
|
||||
|
||||
function filled(bytes32)
|
||||
public view
|
||||
returns (uint256);
|
||||
|
||||
function cancelled(bytes32)
|
||||
public view
|
||||
returns (uint256);
|
||||
|
||||
/// @dev Calculates the sum of values already filled and cancelled for a given order.
|
||||
/// @param orderHash The Keccak-256 hash of the given order.
|
||||
/// @return Sum of values already filled and cancelled.
|
||||
function getUnavailableTakerTokenAmount(bytes32 orderHash)
|
||||
public constant
|
||||
returns (uint);
|
||||
|
||||
/// @dev Calculates partial value given a numerator and denominator.
|
||||
/// @param numerator Numerator.
|
||||
/// @param denominator Denominator.
|
||||
/// @param target Value to calculate partial of.
|
||||
/// @return Partial value of target.
|
||||
function getPartialAmount(uint numerator, uint denominator, uint target)
|
||||
public constant
|
||||
returns (uint);
|
||||
|
||||
/// @dev Checks if rounding error > 0.1%.
|
||||
/// @param numerator Numerator.
|
||||
/// @param denominator Denominator.
|
||||
/// @param target Value to multiply with numerator/denominator.
|
||||
/// @return Rounding error is present.
|
||||
function isRoundingError(uint numerator, uint denominator, uint target)
|
||||
public constant
|
||||
returns (bool);
|
||||
|
||||
/// @dev Calculates Keccak-256 hash of order with specified parameters.
|
||||
/// @param orderAddresses Array of order's maker, taker, makerToken, takerToken, and feeRecipient.
|
||||
/// @param orderValues Array of order's makerTokenAmount, takerTokenAmount, makerFee, takerFee, expirationTimestampInSec, and salt.
|
||||
/// @return Keccak-256 hash of order.
|
||||
function getOrderHash(address[5] orderAddresses, uint[6] orderValues)
|
||||
public
|
||||
constant
|
||||
returns (bytes32);
|
||||
|
||||
/// @dev Verifies that an order signature is valid.
|
||||
/// @param signer address of signer.
|
||||
/// @param hash Signed Keccak-256 hash.
|
||||
/// @param v ECDSA signature parameter v.
|
||||
/// @param r ECDSA signature parameters r.
|
||||
/// @param s ECDSA signature parameters s.
|
||||
/// @return Validity of order signature.
|
||||
function isValidSignature(
|
||||
address signer,
|
||||
bytes32 hash,
|
||||
uint8 v,
|
||||
bytes32 r,
|
||||
bytes32 s)
|
||||
public constant
|
||||
returns (bool);
|
||||
|
||||
/// @dev Fills the input order.
|
||||
/// @param orderAddresses Array of order's maker, taker, makerToken, takerToken, and feeRecipient.
|
||||
/// @param orderValues Array of order's makerTokenAmount, takerTokenAmount, makerFee, takerFee, expirationTimestampInSec, and salt.
|
||||
/// @param fillTakerTokenAmount Desired amount of takerToken to fill.
|
||||
/// @param shouldThrowOnInsufficientBalanceOrAllowance Test if transfer will fail before attempting.
|
||||
/// @param v ECDSA signature parameter v.
|
||||
/// @param r ECDSA signature parameters r.
|
||||
/// @param s ECDSA signature parameters s.
|
||||
/// @return Total amount of takerToken filled in trade.
|
||||
function fillOrder(
|
||||
address[5] orderAddresses,
|
||||
uint[6] orderValues,
|
||||
uint fillTakerTokenAmount,
|
||||
bool shouldThrowOnInsufficientBalanceOrAllowance,
|
||||
uint8 v,
|
||||
bytes32 r,
|
||||
bytes32 s)
|
||||
public
|
||||
returns (uint filledTakerTokenAmount);
|
||||
|
||||
/// @dev Cancels the input order.
|
||||
/// @param orderAddresses Array of order's maker, taker, makerToken, takerToken, and feeRecipient.
|
||||
/// @param orderValues Array of order's makerTokenAmount, takerTokenAmount, makerFee, takerFee, expirationTimestampInSec, and salt.
|
||||
/// @param cancelTakerTokenAmount Desired amount of takerToken to cancel in order.
|
||||
/// @return Amount of takerToken cancelled.
|
||||
function cancelOrder(
|
||||
address[5] orderAddresses,
|
||||
uint[6] orderValues,
|
||||
uint cancelTakerTokenAmount)
|
||||
public
|
||||
returns (uint);
|
||||
|
||||
|
||||
/// @dev Fills an order with specified parameters and ECDSA signature, throws if specified amount not filled entirely.
|
||||
/// @param orderAddresses Array of order's maker, taker, makerToken, takerToken, and feeRecipient.
|
||||
/// @param orderValues Array of order's makerTokenAmount, takerTokenAmount, makerFee, takerFee, expirationTimestampInSec, and salt.
|
||||
/// @param fillTakerTokenAmount Desired amount of takerToken to fill.
|
||||
/// @param v ECDSA signature parameter v.
|
||||
/// @param r ECDSA signature parameters r.
|
||||
/// @param s ECDSA signature parameters s.
|
||||
function fillOrKillOrder(
|
||||
address[5] orderAddresses,
|
||||
uint[6] orderValues,
|
||||
uint fillTakerTokenAmount,
|
||||
uint8 v,
|
||||
bytes32 r,
|
||||
bytes32 s)
|
||||
public;
|
||||
|
||||
/// @dev Synchronously executes multiple fill orders in a single transaction.
|
||||
/// @param orderAddresses Array of address arrays containing individual order addresses.
|
||||
/// @param orderValues Array of uint arrays containing individual order values.
|
||||
/// @param fillTakerTokenAmounts Array of desired amounts of takerToken to fill in orders.
|
||||
/// @param shouldThrowOnInsufficientBalanceOrAllowance Test if transfers will fail before attempting.
|
||||
/// @param v Array ECDSA signature v parameters.
|
||||
/// @param r Array of ECDSA signature r parameters.
|
||||
/// @param s Array of ECDSA signature s parameters.
|
||||
function batchFillOrders(
|
||||
address[5][] orderAddresses,
|
||||
uint[6][] orderValues,
|
||||
uint[] fillTakerTokenAmounts,
|
||||
bool shouldThrowOnInsufficientBalanceOrAllowance,
|
||||
uint8[] v,
|
||||
bytes32[] r,
|
||||
bytes32[] s)
|
||||
public;
|
||||
|
||||
/// @dev Synchronously executes multiple fillOrKill orders in a single transaction.
|
||||
/// @param orderAddresses Array of address arrays containing individual order addresses.
|
||||
/// @param orderValues Array of uint arrays containing individual order values.
|
||||
/// @param fillTakerTokenAmounts Array of desired amounts of takerToken to fill in orders.
|
||||
/// @param v Array ECDSA signature v parameters.
|
||||
/// @param r Array of ECDSA signature r parameters.
|
||||
/// @param s Array of ECDSA signature s parameters.
|
||||
function batchFillOrKillOrders(
|
||||
address[5][] orderAddresses,
|
||||
uint[6][] orderValues,
|
||||
uint[] fillTakerTokenAmounts,
|
||||
uint8[] v,
|
||||
bytes32[] r,
|
||||
bytes32[] s)
|
||||
public;
|
||||
|
||||
/// @dev Synchronously executes multiple fill orders in a single transaction until total fillTakerTokenAmount filled.
|
||||
/// @param orderAddresses Array of address arrays containing individual order addresses.
|
||||
/// @param orderValues Array of uint arrays containing individual order values.
|
||||
/// @param fillTakerTokenAmount Desired total amount of takerToken to fill in orders.
|
||||
/// @param shouldThrowOnInsufficientBalanceOrAllowance Test if transfers will fail before attempting.
|
||||
/// @param v Array ECDSA signature v parameters.
|
||||
/// @param r Array of ECDSA signature r parameters.
|
||||
/// @param s Array of ECDSA signature s parameters.
|
||||
/// @return Total amount of fillTakerTokenAmount filled in orders.
|
||||
function fillOrdersUpTo(
|
||||
address[5][] orderAddresses,
|
||||
uint[6][] orderValues,
|
||||
uint fillTakerTokenAmount,
|
||||
bool shouldThrowOnInsufficientBalanceOrAllowance,
|
||||
uint8[] v,
|
||||
bytes32[] r,
|
||||
bytes32[] s)
|
||||
public
|
||||
returns (uint);
|
||||
|
||||
/// @dev Synchronously cancels multiple orders in a single transaction.
|
||||
/// @param orderAddresses Array of address arrays containing individual order addresses.
|
||||
/// @param orderValues Array of uint arrays containing individual order values.
|
||||
/// @param cancelTakerTokenAmounts Array of desired amounts of takerToken to cancel in orders.
|
||||
function batchCancelOrders(
|
||||
address[5][] orderAddresses,
|
||||
uint[6][] orderValues,
|
||||
uint[] cancelTakerTokenAmounts)
|
||||
public;
|
||||
}
|
||||
@@ -0,0 +1,195 @@
|
||||
/*
|
||||
|
||||
Copyright 2017 ZeroEx Intl.
|
||||
|
||||
Licensed under the Apache License, Version 2.0 (the "License");
|
||||
you may not use this file except in compliance with the License.
|
||||
You may obtain a copy of the License at
|
||||
|
||||
http://www.apache.org/licenses/LICENSE-2.0
|
||||
|
||||
Unless required by applicable law or agreed to in writing, software
|
||||
distributed under the License is distributed on an "AS IS" BASIS,
|
||||
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
See the License for the specific language governing permissions and
|
||||
limitations under the License.
|
||||
|
||||
*/
|
||||
|
||||
pragma solidity ^0.4.19;
|
||||
|
||||
import { IOwnable_v1 as IOwnable } from "../../../previous/Ownable/IOwnable_v1.sol";
|
||||
|
||||
/// @title Token Registry - Stores metadata associated with ERC20 tokens. See ERC22 https://github.com/ethereum/EIPs/issues/22
|
||||
/// @author Amir Bandeali - <amir@0xProject.com>, Will Warren - <will@0xProject.com>
|
||||
contract ITokenRegistery is IOwnable {
|
||||
|
||||
event LogAddToken(
|
||||
address indexed token,
|
||||
string name,
|
||||
string symbol,
|
||||
uint8 decimals,
|
||||
bytes ipfsHash,
|
||||
bytes swarmHash
|
||||
);
|
||||
|
||||
event LogRemoveToken(
|
||||
address indexed token,
|
||||
string name,
|
||||
string symbol,
|
||||
uint8 decimals,
|
||||
bytes ipfsHash,
|
||||
bytes swarmHash
|
||||
);
|
||||
|
||||
event LogTokenNameChange(
|
||||
address indexed token,
|
||||
string oldName,
|
||||
string newName
|
||||
);
|
||||
|
||||
event LogTokenSymbolChange(
|
||||
address indexed token,
|
||||
string oldSymbol,
|
||||
string newSymbol
|
||||
);
|
||||
|
||||
event LogTokenIpfsHashChange(
|
||||
address indexed token,
|
||||
bytes oldIpfsHash,
|
||||
bytes newIpfsHash
|
||||
);
|
||||
|
||||
event LogTokenSwarmHashChange(
|
||||
address indexed token,
|
||||
bytes oldSwarmHash,
|
||||
bytes newSwarmHash
|
||||
);
|
||||
|
||||
function tokens(address tokenAddress)
|
||||
public view
|
||||
returns (
|
||||
address token,
|
||||
string name,
|
||||
string symbol,
|
||||
uint8 decimals,
|
||||
bytes ipfsHash,
|
||||
bytes swarmHash
|
||||
);
|
||||
|
||||
function tokenAddresses(uint256 index)
|
||||
public view
|
||||
returns (address);
|
||||
|
||||
|
||||
/// @dev Allows owner to add a new token to the registry.
|
||||
/// @param _token Address of new token.
|
||||
/// @param _name Name of new token.
|
||||
/// @param _symbol Symbol for new token.
|
||||
/// @param _decimals Number of decimals, divisibility of new token.
|
||||
/// @param _ipfsHash IPFS hash of token icon.
|
||||
/// @param _swarmHash Swarm hash of token icon.
|
||||
function addToken(
|
||||
address _token,
|
||||
string _name,
|
||||
string _symbol,
|
||||
uint8 _decimals,
|
||||
bytes _ipfsHash,
|
||||
bytes _swarmHash)
|
||||
public;
|
||||
|
||||
/// @dev Allows owner to remove an existing token from the registry.
|
||||
/// @param _token Address of existing token.
|
||||
function removeToken(address _token, uint _index)
|
||||
public;
|
||||
|
||||
/// @dev Allows owner to modify an existing token's name.
|
||||
/// @param _token Address of existing token.
|
||||
/// @param _name New name.
|
||||
function setTokenName(address _token, string _name)
|
||||
public;
|
||||
|
||||
/// @dev Allows owner to modify an existing token's symbol.
|
||||
/// @param _token Address of existing token.
|
||||
/// @param _symbol New symbol.
|
||||
function setTokenSymbol(address _token, string _symbol)
|
||||
public;
|
||||
|
||||
/// @dev Allows owner to modify an existing token's IPFS hash.
|
||||
/// @param _token Address of existing token.
|
||||
/// @param _ipfsHash New IPFS hash.
|
||||
function setTokenIpfsHash(address _token, bytes _ipfsHash)
|
||||
public;
|
||||
|
||||
/// @dev Allows owner to modify an existing token's Swarm hash.
|
||||
/// @param _token Address of existing token.
|
||||
/// @param _swarmHash New Swarm hash.
|
||||
function setTokenSwarmHash(address _token, bytes _swarmHash)
|
||||
public;
|
||||
|
||||
/*
|
||||
* Web3 call functions
|
||||
*/
|
||||
|
||||
/// @dev Provides a registered token's address when given the token symbol.
|
||||
/// @param _symbol Symbol of registered token.
|
||||
/// @return Token's address.
|
||||
function getTokenAddressBySymbol(string _symbol)
|
||||
public constant
|
||||
returns (address);
|
||||
|
||||
/// @dev Provides a registered token's address when given the token name.
|
||||
/// @param _name Name of registered token.
|
||||
/// @return Token's address.
|
||||
function getTokenAddressByName(string _name)
|
||||
public constant
|
||||
returns (address);
|
||||
|
||||
/// @dev Provides a registered token's metadata, looked up by address.
|
||||
/// @param _token Address of registered token.
|
||||
/// @return Token metadata.
|
||||
function getTokenMetaData(address _token)
|
||||
public constant
|
||||
returns (
|
||||
address, //tokenAddress
|
||||
string, //name
|
||||
string, //symbol
|
||||
uint8, //decimals
|
||||
bytes, //ipfsHash
|
||||
bytes //swarmHash
|
||||
);
|
||||
|
||||
/// @dev Provides a registered token's metadata, looked up by name.
|
||||
/// @param _name Name of registered token.
|
||||
/// @return Token metadata.
|
||||
function getTokenByName(string _name)
|
||||
public constant
|
||||
returns (
|
||||
address, //tokenAddress
|
||||
string, //name
|
||||
string, //symbol
|
||||
uint8, //decimals
|
||||
bytes, //ipfsHash
|
||||
bytes //swarmHash
|
||||
);
|
||||
|
||||
/// @dev Provides a registered token's metadata, looked up by symbol.
|
||||
/// @param _symbol Symbol of registered token.
|
||||
/// @return Token metadata.
|
||||
function getTokenBySymbol(string _symbol)
|
||||
public constant
|
||||
returns (
|
||||
address, //tokenAddress
|
||||
string, //name
|
||||
string, //symbol
|
||||
uint8, //decimals
|
||||
bytes, //ipfsHash
|
||||
bytes //swarmHash
|
||||
);
|
||||
|
||||
/// @dev Returns an array containing all token addresses.
|
||||
/// @return Array of token addresses.
|
||||
function getTokenAddresses()
|
||||
public constant
|
||||
returns (address[]);
|
||||
}
|
||||
@@ -0,0 +1,72 @@
|
||||
/*
|
||||
|
||||
Copyright 2017 ZeroEx Intl.
|
||||
|
||||
Licensed under the Apache License, Version 2.0 (the "License");
|
||||
you may not use this file except in compliance with the License.
|
||||
You may obtain a copy of the License at
|
||||
|
||||
http://www.apache.org/licenses/LICENSE-2.0
|
||||
|
||||
Unless required by applicable law or agreed to in writing, software
|
||||
distributed under the License is distributed on an "AS IS" BASIS,
|
||||
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
See the License for the specific language governing permissions and
|
||||
limitations under the License.
|
||||
|
||||
*/
|
||||
|
||||
pragma solidity ^0.4.19;
|
||||
|
||||
import { IOwnable_v1 as IOwnable } from "../../../previous/Ownable/IOwnable_v1.sol";
|
||||
|
||||
/// @title TokenTransferProxy - Transfers tokens on behalf of contracts that have been approved via decentralized governance.
|
||||
/// @author Amir Bandeali - <amir@0xProject.com>, Will Warren - <will@0xProject.com>
|
||||
contract ITokenTransferProxy is IOwnable {
|
||||
|
||||
function authorized(address addr)
|
||||
public view
|
||||
returns (bool);
|
||||
|
||||
function authorities(uint256 index)
|
||||
public view
|
||||
returns (address);
|
||||
|
||||
/// @dev Gets all authorized addresses.
|
||||
/// @return Array of authorized addresses.
|
||||
function getAuthorizedAddresses()
|
||||
public view
|
||||
returns (address[]);
|
||||
|
||||
/// @dev Authorizes an address.
|
||||
/// @param target Address to authorize.
|
||||
function addAuthorizedAddress(address target)
|
||||
public;
|
||||
|
||||
/// @dev Removes authorizion of an address.
|
||||
/// @param target Address to remove authorization from.
|
||||
function removeAuthorizedAddress(address target)
|
||||
public;
|
||||
|
||||
/// @dev Calls into ERC20 Token contract, invoking transferFrom.
|
||||
/// @param token Address of token to transfer.
|
||||
/// @param from Address to transfer token from.
|
||||
/// @param to Address to transfer token to.
|
||||
/// @param value Amount of token to transfer.
|
||||
/// @return Success of transfer.
|
||||
function transferFrom(
|
||||
address token,
|
||||
address from,
|
||||
address to,
|
||||
uint value)
|
||||
public
|
||||
returns (bool);
|
||||
|
||||
event LogAuthorizedAddressAdded(
|
||||
address indexed target,
|
||||
address indexed caller);
|
||||
|
||||
event LogAuthorizedAddressRemoved(
|
||||
address indexed target,
|
||||
address indexed caller);
|
||||
}
|
||||
@@ -0,0 +1,18 @@
|
||||
pragma solidity ^0.4.19;
|
||||
|
||||
/*
|
||||
* Ownable
|
||||
*
|
||||
* Base contract with an owner.
|
||||
* Provides onlyOwner modifier, which prevents function from running if it is called by anyone other than the owner.
|
||||
*/
|
||||
|
||||
contract IOwnable_v1 {
|
||||
|
||||
function owner()
|
||||
public view
|
||||
returns (address);
|
||||
|
||||
function transferOwnership(address newOwner)
|
||||
public;
|
||||
}
|
||||
@@ -0,0 +1,52 @@
|
||||
pragma solidity ^0.4.18;
|
||||
|
||||
contract IToken_v1 {
|
||||
|
||||
/// @notice send `value` token to `to` from `msg.sender`
|
||||
/// @param to The address of the recipient
|
||||
/// @param value The amount of token to be transferred
|
||||
/// @return Whether the transfer was successful or not
|
||||
function transfer(address to, uint value)
|
||||
public
|
||||
returns (bool);
|
||||
|
||||
/// @notice send `value` token to `to` from `from` on the condition it is approved by `from`
|
||||
/// @param from The address of the sender
|
||||
/// @param to The address of the recipient
|
||||
/// @param value The amount of token to be transferred
|
||||
/// @return Whether the transfer was successful or not
|
||||
function transferFrom(address from, address to, uint value)
|
||||
public
|
||||
returns (bool);
|
||||
|
||||
/// @notice `msg.sender` approves `addr` to spend `value` tokens
|
||||
/// @param spender The address of the account able to transfer the tokens
|
||||
/// @param value The amount of wei to be approved for transfer
|
||||
/// @return Whether the approval was successful or not
|
||||
function approve(address spender, uint value)
|
||||
public
|
||||
returns (bool);
|
||||
|
||||
/// @param owner The address from which the balance will be retrieved
|
||||
/// @return The balance
|
||||
function balanceOf(address owner)
|
||||
public view
|
||||
returns (uint);
|
||||
|
||||
/// @param owner The address of the account owning tokens
|
||||
/// @param spender The address of the account able to transfer the tokens
|
||||
/// @return Amount of remaining tokens allowed to spent
|
||||
function allowance(address owner, address spender)
|
||||
public view
|
||||
returns (uint);
|
||||
|
||||
event Transfer(
|
||||
address indexed from,
|
||||
address indexed to,
|
||||
uint value);
|
||||
|
||||
event Approval(
|
||||
address indexed owner,
|
||||
address indexed spender,
|
||||
uint value);
|
||||
}
|
||||
Reference in New Issue
Block a user