From 5ba0e0dc54b4cf23cb693199681da0409c2da359 Mon Sep 17 00:00:00 2001 From: Alex Towle Date: Sat, 3 Aug 2019 16:33:28 -0700 Subject: [PATCH] Updated the structure of the archive directory --- contracts/asset-proxy/compiler.json | 2 +- .../MixinAssetProxyDispatcher.sol | 4 +-- .../{src => archive}/MixinAuthorizable.sol | 2 +- .../asset-proxy/contracts/archive/Ownable.sol | 2 +- .../contracts/archive/interfaces/IOwnable.sol | 8 ------ .../contracts/src/ERC1155Proxy.sol | 4 +-- .../asset-proxy/contracts/src/ERC20Proxy.sol | 14 +++++----- .../asset-proxy/contracts/src/ERC721Proxy.sol | 12 ++++---- .../contracts/src/MultiAssetProxy.sol | 28 +++++++++---------- .../src/interfaces/IAuthorizable.sol | 2 +- 10 files changed, 35 insertions(+), 43 deletions(-) rename contracts/asset-proxy/contracts/{src => archive}/MixinAssetProxyDispatcher.sol (98%) rename contracts/asset-proxy/contracts/{src => archive}/MixinAuthorizable.sol (98%) delete mode 100644 contracts/asset-proxy/contracts/archive/interfaces/IOwnable.sol diff --git a/contracts/asset-proxy/compiler.json b/contracts/asset-proxy/compiler.json index 3a1115f5e4..51ff4efa9b 100644 --- a/contracts/asset-proxy/compiler.json +++ b/contracts/asset-proxy/compiler.json @@ -24,10 +24,10 @@ } }, "contracts": [ + "archive/MixinAuthorizable.sol", "src/ERC1155Proxy.sol", "src/ERC20Proxy.sol", "src/ERC721Proxy.sol", - "src/MixinAuthorizable.sol", "src/MultiAssetProxy.sol", "src/StaticCallProxy.sol", "src/interfaces/IAssetData.sol", diff --git a/contracts/asset-proxy/contracts/src/MixinAssetProxyDispatcher.sol b/contracts/asset-proxy/contracts/archive/MixinAssetProxyDispatcher.sol similarity index 98% rename from contracts/asset-proxy/contracts/src/MixinAssetProxyDispatcher.sol rename to contracts/asset-proxy/contracts/archive/MixinAssetProxyDispatcher.sol index a4e63029e3..bbc93ec6cb 100644 --- a/contracts/asset-proxy/contracts/src/MixinAssetProxyDispatcher.sol +++ b/contracts/asset-proxy/contracts/archive/MixinAssetProxyDispatcher.sol @@ -19,8 +19,8 @@ pragma solidity ^0.5.9; import "../archive/Ownable.sol"; -import "./interfaces/IAssetProxy.sol"; -import "./interfaces/IAssetProxyDispatcher.sol"; +import "../src/interfaces/IAssetProxy.sol"; +import "../src/interfaces/IAssetProxyDispatcher.sol"; contract MixinAssetProxyDispatcher is diff --git a/contracts/asset-proxy/contracts/src/MixinAuthorizable.sol b/contracts/asset-proxy/contracts/archive/MixinAuthorizable.sol similarity index 98% rename from contracts/asset-proxy/contracts/src/MixinAuthorizable.sol rename to contracts/asset-proxy/contracts/archive/MixinAuthorizable.sol index 58608113e9..5efb1340b6 100644 --- a/contracts/asset-proxy/contracts/src/MixinAuthorizable.sol +++ b/contracts/asset-proxy/contracts/archive/MixinAuthorizable.sol @@ -19,7 +19,7 @@ pragma solidity ^0.5.9; import "../archive/Ownable.sol"; -import "./interfaces/IAuthorizable.sol"; +import "../src/interfaces/IAuthorizable.sol"; contract MixinAuthorizable is diff --git a/contracts/asset-proxy/contracts/archive/Ownable.sol b/contracts/asset-proxy/contracts/archive/Ownable.sol index d04c141f58..b15e5d0266 100644 --- a/contracts/asset-proxy/contracts/archive/Ownable.sol +++ b/contracts/asset-proxy/contracts/archive/Ownable.sol @@ -1,6 +1,6 @@ pragma solidity ^0.5.9; -import "./interfaces/IOwnable.sol"; +import "@0x/contracts-utils/contracts/src/interfaces/IOwnable.sol"; contract Ownable is diff --git a/contracts/asset-proxy/contracts/archive/interfaces/IOwnable.sol b/contracts/asset-proxy/contracts/archive/interfaces/IOwnable.sol deleted file mode 100644 index d4b1c5c6b6..0000000000 --- a/contracts/asset-proxy/contracts/archive/interfaces/IOwnable.sol +++ /dev/null @@ -1,8 +0,0 @@ -pragma solidity ^0.5.9; - - -contract IOwnable { - - function transferOwnership(address newOwner) - public; -} diff --git a/contracts/asset-proxy/contracts/src/ERC1155Proxy.sol b/contracts/asset-proxy/contracts/src/ERC1155Proxy.sol index a4c649d2d4..c7879761dc 100644 --- a/contracts/asset-proxy/contracts/src/ERC1155Proxy.sol +++ b/contracts/asset-proxy/contracts/src/ERC1155Proxy.sol @@ -21,7 +21,7 @@ pragma solidity ^0.5.9; import "@0x/contracts-utils/contracts/src/LibBytes.sol"; import "@0x/contracts-utils/contracts/src/SafeMath.sol"; import "@0x/contracts-erc1155/contracts/src/interfaces/IERC1155.sol"; -import "./MixinAuthorizable.sol"; +import "../archive/MixinAuthorizable.sol"; import "./interfaces/IAssetProxy.sol"; @@ -69,7 +69,7 @@ contract ERC1155Proxy is for (uint256 i = 0; i != length; i++) { // We write the scaled values to an unused location in memory in order // to avoid copying over `ids` or `data`. This is possible if they are - // identical to `values` and the offsets for each are pointing to the + // identical to `values` and the offsets for each are pointing to the // same location in the ABI encoded calldata. scaledValues[i] = _safeMul(values[i], amount); } diff --git a/contracts/asset-proxy/contracts/src/ERC20Proxy.sol b/contracts/asset-proxy/contracts/src/ERC20Proxy.sol index c8d269f5a9..01a15ff6b6 100644 --- a/contracts/asset-proxy/contracts/src/ERC20Proxy.sol +++ b/contracts/asset-proxy/contracts/src/ERC20Proxy.sol @@ -18,7 +18,7 @@ pragma solidity ^0.5.9; -import "./MixinAuthorizable.sol"; +import "../archive/MixinAuthorizable.sol"; contract ERC20Proxy is @@ -26,9 +26,9 @@ contract ERC20Proxy is { // Id of this proxy. bytes4 constant internal PROXY_ID = bytes4(keccak256("ERC20Token(address)")); - + // solhint-disable-next-line payable-fallback - function () + function () external { assembly { @@ -117,13 +117,13 @@ contract ERC20Proxy is // * The "token address" is offset 32+4=36 bytes into "assetData" (tables 1 & 2). // [tokenOffset = assetDataOffsetFromHeader + 36 = calldataload(4) + 4 + 36] let token := calldataload(add(calldataload(4), 40)) - + /////// Setup Header Area /////// // This area holds the 4-byte `transferFrom` selector. // Any trailing data in transferFromSelector will be // overwritten in the next `mstore` call. mstore(0, 0x23b872dd00000000000000000000000000000000000000000000000000000000) - + /////// Setup Params Area /////// // We copy the fields `from`, `to` and `amount` in bulk // from our own calldata to the new calldata. @@ -147,7 +147,7 @@ contract ERC20Proxy is // If the token does return data, we require that it is a single // nonzero 32 bytes value. // So the transfer succeeded if the call succeeded and either - // returned nothing, or returned a non-zero 32 byte value. + // returned nothing, or returned a non-zero 32 byte value. success := and(success, or( iszero(returndatasize), and( @@ -158,7 +158,7 @@ contract ERC20Proxy is if success { return(0, 0) } - + // Revert with `Error("TRANSFER_FAILED")` mstore(0, 0x08c379a000000000000000000000000000000000000000000000000000000000) mstore(32, 0x0000002000000000000000000000000000000000000000000000000000000000) diff --git a/contracts/asset-proxy/contracts/src/ERC721Proxy.sol b/contracts/asset-proxy/contracts/src/ERC721Proxy.sol index b22c2336ec..649c4aabdb 100644 --- a/contracts/asset-proxy/contracts/src/ERC721Proxy.sol +++ b/contracts/asset-proxy/contracts/src/ERC721Proxy.sol @@ -18,7 +18,7 @@ pragma solidity ^0.5.9; -import "./MixinAuthorizable.sol"; +import "../archive/MixinAuthorizable.sol"; contract ERC721Proxy is @@ -28,7 +28,7 @@ contract ERC721Proxy is bytes4 constant internal PROXY_ID = bytes4(keccak256("ERC721Token(address,uint256)")); // solhint-disable-next-line payable-fallback - function () + function () external { assembly { @@ -93,10 +93,10 @@ contract ERC721Proxy is // | Params | | 2 * 32 | function parameters: | // | | 4 | 12 + 20 | 1. token address | // | | 36 | | 2. tokenId | - + // We construct calldata for the `token.transferFrom` ABI. // The layout of this calldata is in the table below. - // + // // | Area | Offset | Length | Contents | // |----------|--------|---------|-------------------------------------| // | Header | 0 | 4 | function selector | @@ -121,7 +121,7 @@ contract ERC721Proxy is // Any trailing data in transferFromSelector will be // overwritten in the next `mstore` call. mstore(0, 0x23b872dd00000000000000000000000000000000000000000000000000000000) - + /////// Setup Params Area /////// // We copy the fields `from` and `to` in bulk // from our own calldata to the new calldata. @@ -145,7 +145,7 @@ contract ERC721Proxy is if success { return(0, 0) } - + // Revert with `Error("TRANSFER_FAILED")` mstore(0, 0x08c379a000000000000000000000000000000000000000000000000000000000) mstore(32, 0x0000002000000000000000000000000000000000000000000000000000000000) diff --git a/contracts/asset-proxy/contracts/src/MultiAssetProxy.sol b/contracts/asset-proxy/contracts/src/MultiAssetProxy.sol index a5a1a05a4b..61c0c83646 100644 --- a/contracts/asset-proxy/contracts/src/MultiAssetProxy.sol +++ b/contracts/asset-proxy/contracts/src/MultiAssetProxy.sol @@ -18,8 +18,8 @@ pragma solidity ^0.5.9; -import "./MixinAssetProxyDispatcher.sol"; -import "./MixinAuthorizable.sol"; +import "../archive/MixinAssetProxyDispatcher.sol"; +import "../archive/MixinAuthorizable.sol"; contract MultiAssetProxy is @@ -105,7 +105,7 @@ contract MultiAssetProxy is // | | 36 | | 2. offset to nestedAssetData (*) | // | Data | | | amounts: | // | | 68 | 32 | amounts Length | - // | | 100 | a | amounts Contents | + // | | 100 | a | amounts Contents | // | | | | nestedAssetData: | // | | 100 + a | 32 | nestedAssetData Length | // | | 132 + a | b | nestedAssetData Contents (offsets) | @@ -149,8 +149,8 @@ contract MultiAssetProxy is // + 32 (amounts offset) let nestedAssetDataOffset := calldataload(add(assetDataOffset, 68)) - // In order to find the start of the `amounts` contents, we must add: - // assetDataOffset + // In order to find the start of the `amounts` contents, we must add: + // assetDataOffset // + 32 (assetData len) // + 4 (assetProxyId) // + amountsOffset @@ -160,8 +160,8 @@ contract MultiAssetProxy is // Load number of elements in `amounts` let amountsLen := calldataload(sub(amountsContentsStart, 32)) - // In order to find the start of the `nestedAssetData` contents, we must add: - // assetDataOffset + // In order to find the start of the `nestedAssetData` contents, we must add: + // assetDataOffset // + 32 (assetData len) // + 4 (assetProxyId) // + nestedAssetDataOffset @@ -190,10 +190,10 @@ contract MultiAssetProxy is // Overwrite existing offset to `assetData` with our own mstore(4, 128) - + // Load `amount` let amount := calldataload(100) - + // Calculate number of bytes in `amounts` contents let amountsByteLen := mul(amountsLen, 32) @@ -208,7 +208,7 @@ contract MultiAssetProxy is let amountsElement := calldataload(add(amountsContentsStart, i)) let totalAmount := mul(amountsElement, amount) - // Revert if `amount` != 0 and multiplication resulted in an overflow + // Revert if `amount` != 0 and multiplication resulted in an overflow if iszero(or( iszero(amount), eq(div(totalAmount, amount), amountsElement) @@ -228,7 +228,7 @@ contract MultiAssetProxy is let nestedAssetDataElementOffset := calldataload(add(nestedAssetDataContentsStart, i)) // In order to find the start of the `nestedAssetData[i]` contents, we must add: - // assetDataOffset + // assetDataOffset // + 32 (assetData len) // + 4 (assetProxyId) // + nestedAssetDataOffset @@ -274,7 +274,7 @@ contract MultiAssetProxy is mstore(164, assetProxies_slot) assetProxy := sload(keccak256(132, 64)) } - + // Revert if AssetProxy with given id does not exist if iszero(assetProxy) { // Revert with `Error("ASSET_PROXY_DOES_NOT_EXIST")` @@ -284,7 +284,7 @@ contract MultiAssetProxy is mstore(96, 0) revert(0, 100) } - + // Copy `nestedAssetData[i]` from calldata to memory calldatacopy( 132, // memory slot after `amounts[i]` @@ -298,7 +298,7 @@ contract MultiAssetProxy is assetProxy, // call address of asset proxy 0, // don't send any ETH 0, // pointer to start of input - add(164, nestedAssetDataElementLen), // length of input + add(164, nestedAssetDataElementLen), // length of input 0, // write output over memory that won't be reused 0 // don't copy output to memory ) diff --git a/contracts/asset-proxy/contracts/src/interfaces/IAuthorizable.sol b/contracts/asset-proxy/contracts/src/interfaces/IAuthorizable.sol index 96fa905338..5def85864b 100644 --- a/contracts/asset-proxy/contracts/src/interfaces/IAuthorizable.sol +++ b/contracts/asset-proxy/contracts/src/interfaces/IAuthorizable.sol @@ -18,7 +18,7 @@ pragma solidity ^0.5.9; -import "../../archive/interfaces/IOwnable.sol"; +import "@0x/contracts-utils/contracts/src/interfaces/IOwnable.sol"; contract IAuthorizable is