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

Commit

Permalink
Merge pull request #16 from MoMannn/dev
Browse files Browse the repository at this point in the history
Renamed exchange into protocol. Added ERC165 to protocol contract. Renamed SettableTransferXcert to PausableXcert.
  • Loading branch information
xpepermint committed Apr 12, 2018
2 parents 495ae82 + afe930d commit a17014b
Show file tree
Hide file tree
Showing 17 changed files with 248 additions and 125 deletions.
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;
}
}
File renamed without changes.
File renamed without changes.
File renamed without changes.
Loading

0 comments on commit a17014b

Please sign in to comment.