Skip to content
This repository has been archived by the owner on Jan 12, 2019. It is now read-only.

Renamed exchange into protocol. Added ERC165 to protocol contract. Renamed SettableTransferXcert to PausableXcert. #16

Merged
merged 2 commits into from
Apr 12, 2018
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
6 changes: 3 additions & 3 deletions contracts/mocks/XcertMock.sol
Original file line number Diff line number Diff line change
@@ -1,14 +1,14 @@
pragma solidity ^0.4.19;

import "../../contracts/tokens/BurnableXcert.sol";
import "../../contracts/tokens/SettableTransferXcert.sol";
import "../../contracts/tokens/PausableXcert.sol";
import "../../contracts/tokens/ChainableXcert.sol";

contract XcertMock is BurnableXcert, SettableTransferXcert, ChainableXcert {
contract XcertMock is BurnableXcert, PausableXcert, ChainableXcert {

function XcertMock(string _name, string _symbol)
BurnableXcert(_name, _symbol)
SettableTransferXcert(_name, _symbol)
PausableXcert(_name, _symbol)
ChainableXcert(_name, _symbol)
public
{
Expand Down
23 changes: 22 additions & 1 deletion contracts/exchange/Minter.sol → contracts/protocol/Minter.sol
Original file line number Diff line number Diff line change
Expand Up @@ -6,11 +6,12 @@ import "../tokens/Xcert.sol";
import "../tokens/ERC20.sol";
import "./TokenTransferProxy.sol";
import "./XcertMintProxy.sol";
import "../tokens/ERC165.sol";

/*
* @dev based on: https://github.com/0xProject/contracts/blob/master/contracts/Exchange.sol
*/
contract Minter{
contract Minter is ERC165 {

using SafeMath for uint256;

Expand Down Expand Up @@ -46,6 +47,12 @@ contract Minter{
*/
mapping(bytes32 => bool) public mintPerformed;

/*
* @dev Mapping of supported intefraces.
* You must not set element 0xffffffff to true.
*/
mapping(bytes4 => bool) internal supportedInterfaces;

/*
* @dev This event emmits when xcert gets mint directly to the taker.
*/
Expand Down Expand Up @@ -107,6 +114,8 @@ contract Minter{
XCT_TOKEN_CONTRACT = _xctToken;
TOKEN_TRANSFER_PROXY_CONTRACT = _tokenTransferProxy;
XCERT_MINT_PROXY_CONTRACT = _xcertMintProxy;
supportedInterfaces[0x01ffc9a7] = true; // ERC165
supportedInterfaces[0xca4a3079] = true; // Minter
}


Expand Down Expand Up @@ -354,6 +363,18 @@ contract Minter{
);
}

/*
* @dev Function to check which interfaces are suported by this contract.
* @param interfaceID If of the interface.
*/
function supportsInterface(bytes4 interfaceID)
external
view
returns (bool)
{
return supportedInterfaces[interfaceID];
}

/*
* @dev Transfers XCT tokens via TokenTransferProxy using transferFrom function.
* @param _token Address of token to transferFrom.
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -6,11 +6,12 @@ import "../tokens/ERC20.sol";
import "../tokens/ERC721.sol";
import "./TokenTransferProxy.sol";
import "./NFTokenTransferProxy.sol";
import "../tokens/ERC165.sol";

/*
* @dev based on: https://github.com/0xProject/contracts/blob/master/contracts/Exchange.sol
*/
contract Swapper {
contract Swapper is ERC165 {

using SafeMath for uint256;

Expand Down Expand Up @@ -46,6 +47,12 @@ contract Swapper {
*/
mapping(bytes32 => bool) public swapPerformed;

/*
* @dev Mapping of supported intefraces.
* You must not set element 0xffffffff to true.
*/
mapping(bytes4 => bool) internal supportedInterfaces;

/*
* @dev This event emmits when NFToken changes ownership.
*/
Expand Down Expand Up @@ -111,6 +118,8 @@ contract Swapper {
TOKEN_CONTRACT = _xctToken;
TOKEN_TRANSFER_PROXY_CONTRACT = _tokenTransferProxy;
NFTOKEN_TRANSFER_PROXY_CONTRACT = _nfTokenTransferProxy;
supportedInterfaces[0x01ffc9a7] = true; // ERC165
supportedInterfaces[0xe20524dd] = true; // Swapper
}

/*
Expand Down Expand Up @@ -353,6 +362,18 @@ contract Swapper {
);
}

/*
* @dev Function to check which interfaces are suported by this contract.
* @param interfaceID If of the interface.
*/
function supportsInterface(bytes4 interfaceID)
external
view
returns (bool)
{
return supportedInterfaces[interfaceID];
}

/*
* @dev Check is payer can pay the feeAmounts.
* @param _to Address of the payer.
Expand Down
23 changes: 22 additions & 1 deletion contracts/exchange/Trader.sol → contracts/protocol/Trader.sol
Original file line number Diff line number Diff line change
Expand Up @@ -6,11 +6,12 @@ import "../tokens/ERC20.sol";
import "../tokens/ERC721.sol";
import "./TokenTransferProxy.sol";
import "./NFTokenTransferProxy.sol";
import "../tokens/ERC165.sol";

/*
* @dev based on: https://github.com/0xProject/contracts/blob/master/contracts/Exchange.sol
*/
contract Trader {
contract Trader is ERC165 {

using SafeMath for uint256;

Expand Down Expand Up @@ -46,6 +47,12 @@ contract Trader {
*/
mapping(bytes32 => bool) public transferPerformed;

/*
* @dev Mapping of supported intefraces.
* You must not set element 0xffffffff to true.
*/
mapping(bytes4 => bool) internal supportedInterfaces;

/*
* @dev This event emmits when NFToken changes ownership.
*/
Expand Down Expand Up @@ -104,6 +111,8 @@ contract Trader {
TOKEN_CONTRACT = _xctToken;
TOKEN_TRANSFER_PROXY_CONTRACT = _tokenTransferProxy;
NFTOKEN_TRANSFER_PROXY_CONTRACT = _nfTokenTransferProxy;
supportedInterfaces[0x01ffc9a7] = true; // ERC165
supportedInterfaces[0x6b28faee] = true; // Trader
}

/*
Expand Down Expand Up @@ -326,6 +335,18 @@ contract Trader {
);
}

/*
* @dev Function to check which interfaces are suported by this contract.
* @param interfaceID If of the interface.
*/
function supportsInterface(bytes4 interfaceID)
external
view
returns (bool)
{
return supportedInterfaces[interfaceID];
}

/*
* @dev Check is payer can pay the feeAmounts.
* @param _to Address of the payer.
Expand Down
53 changes: 53 additions & 0 deletions contracts/tokens/PausableXcert.sol
Original file line number Diff line number Diff line change
@@ -0,0 +1,53 @@
pragma solidity ^0.4.19;

import "./Xcert.sol";

contract PausableXcert is Xcert {

/*
* @dev This emits when ability of beeing able to transfer NFTokens changes (paused/unpaused).
*/
event IsPaused(bool _isPaused);

/*
* @dev Are NFTokens paused or not.
*/
bool public isPaused;

function PausableXcert(string _name, string _symbol)
Xcert(_name, _symbol)
public
{
supportedInterfaces[0xbedb86fb] = true; // PausableXcert
isPaused = false;
}

/*
* @dev Guarantees that the msg.sender is allowed to transfer NFToken.
* @param _tokenId ID of the NFToken to transfer.
*/
modifier canTransfer(uint256 _tokenId) {
address owner = idToOwner[_tokenId];
require(!isPaused && (
owner == msg.sender
|| getApproved(_tokenId) == msg.sender
|| ownerToOperators[owner][msg.sender])
);

_;
}

/*
* @dev Sets if NFTokens are paused or not.
* @param _isPaused Pause status.
*/
function setPause(bool _isPaused)
external
onlyOwner
{
require(isPaused != _isPaused);
isPaused = _isPaused;
IsPaused(_isPaused);
}

}
53 changes: 0 additions & 53 deletions contracts/tokens/SettableTransferXcert.sol

This file was deleted.

68 changes: 52 additions & 16 deletions contracts/utils/Selector.sol
Original file line number Diff line number Diff line change
Expand Up @@ -2,33 +2,69 @@ pragma solidity ^0.4.19;

import "../tokens/Xcert.sol";
import "../tokens/BurnableXcert.sol";
import "../tokens/SettableTransferXcert.sol";
import "../tokens/PausableXcert.sol";
import "../tokens/ChainableXcert.sol";
import "../protocol/Minter.sol";
import "../protocol/Trader.sol";
import "../protocol/Swapper.sol";

contract Selector {

function calculateXcertSelector() public pure returns (bytes4) {
Xcert i;
return i.mint.selector
^ i.getProof.selector
^ i.setMintAuthorizedAddress.selector
^ i.isMintAuthorizedAddress.selector;
Xcert i;
return i.mint.selector
^ i.getProof.selector
^ i.setMintAuthorizedAddress.selector
^ i.isMintAuthorizedAddress.selector;
}

function calculateBurnableXcertSelector() public pure returns (bytes4) {
BurnableXcert i;
return i.burn.selector;
BurnableXcert i;
return i.burn.selector;
}

function calculateSettableTransferXcertSelector() public pure returns (bytes4) {
SettableTransferXcert i;
return i.setTransferable.selector;
function calculatePausableXcertSelector() public pure returns (bytes4) {
PausableXcert i;
return i.setPause.selector;
}

function calculateChainableXcertSelector() public pure returns (bytes4) {
ChainableXcert i;
return i.chain.selector
^ i.getProofByIndex.selector
^ i.getProofCount.selector;
function calculateChainableXcertSelector() public pure returns (bytes4) {
ChainableXcert i;
return i.chain.selector
^ i.getProofByIndex.selector
^ i.getProofCount.selector;
}

function calculateMinterSelector() public pure returns (bytes4) {
Minter i;
return i.getTokenAddress.selector
^ i.getTokenTransferProxyAddress.selector
^ i.getXcertMintProxyAddress.selector
^ i.performMint.selector
^ i.cancelMint.selector
^ i.getMintDataClaim.selector
^ i.isValidSignature.selector;
}

function calculateTraderSelector() public pure returns (bytes4) {
Trader i;
return i.getTokenAddress.selector
^ i.getTokenTransferProxyAddress.selector
^ i.getNFTokenTransferProxyAddress.selector
^ i.performTransfer.selector
^ i.cancelTransfer.selector
^ i.getTransferDataClaim.selector
^ i.isValidSignature.selector;
}

function calculateSwapperSelector() public pure returns (bytes4) {
Swapper i;
return i.getTokenAddress.selector
^ i.getTokenTransferProxyAddress.selector
^ i.getNFTokenTransferProxyAddress.selector
^ i.performSwap.selector
^ i.cancelSwap.selector
^ i.getSwapDataClaim.selector
^ i.isValidSignature.selector;
}
}
Loading