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

Commit

Permalink
Rename exchange to protocol and added ERC165 to Swapper, Minter, Trader
Browse files Browse the repository at this point in the history
  • Loading branch information
MoMannn committed Apr 12, 2018
1 parent 6ddae20 commit 4f4b210
Show file tree
Hide file tree
Showing 12 changed files with 157 additions and 17 deletions.
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
64 changes: 50 additions & 14 deletions contracts/utils/Selector.sol
Original file line number Diff line number Diff line change
Expand Up @@ -4,31 +4,67 @@ import "../tokens/Xcert.sol";
import "../tokens/BurnableXcert.sol";
import "../tokens/SettableTransferXcert.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;
SettableTransferXcert i;
return i.setTransferable.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;
}
}
17 changes: 17 additions & 0 deletions test/mocks/XcertMock.sol
Original file line number Diff line number Diff line change
@@ -0,0 +1,17 @@
pragma solidity ^0.4.19;

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

contract XcertMock is BurnableXcert, SettableTransferXcert, ChainableXcert {

function XcertMock(string _name, string _symbol)
BurnableXcert(_name, _symbol)
SettableTransferXcert(_name, _symbol)
ChainableXcert(_name, _symbol)
public
{

}
}
File renamed without changes.
File renamed without changes.
File renamed without changes.
24 changes: 24 additions & 0 deletions test/utils/Selector.test.js
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,9 @@ const Xcert = artifacts.require('Xcert');
const BurnableXcert = artifacts.require('BurnableXcert');
const ChainableXcert = artifacts.require('ChainableXcert');
const SettableTransferXcert = artifacts.require('SettableTransferXcert');
const Minter = artifacts.require('Minter');
const Trader = artifacts.require('Trader');
const Swapper = artifacts.require('Swapper');
const Selector = artifacts.require('Selector');

contract('Selector', (accounts) => {
Expand Down Expand Up @@ -40,4 +43,25 @@ contract('Selector', (accounts) => {
assert.equal(supports, true);
});

it('Checks Minter selector', async () => {
var minter = await Minter.new(accounts[1], accounts[2], accounts[3]);
var bytes = await selector.calculateMinterSelector();
var supports = await minter.supportsInterface(bytes);
assert.equal(supports, true);
});

it('Checks Trader selector', async () => {
var trader = await Trader.new(accounts[1], accounts[2], accounts[3]);
var bytes = await selector.calculateTraderSelector();
var supports = await trader.supportsInterface(bytes);
assert.equal(supports, true);
});

it('Checks Swapper selector', async () => {
var swapper = await Swapper.new(accounts[1], accounts[2], accounts[3]);
var bytes = await selector.calculateSwapperSelector();
var supports = await swapper.supportsInterface(bytes);
assert.equal(supports, true);
});

});

0 comments on commit 4f4b210

Please sign in to comment.