diff options
author | Leonid Logvinov <logvinov.leon@gmail.com> | 2019-02-07 19:23:00 +0800 |
---|---|---|
committer | GitHub <noreply@github.com> | 2019-02-07 19:23:00 +0800 |
commit | 7e19c944b91f573bb026ca3a916cd4e4b9169a9e (patch) | |
tree | 252302871a01eee80ae64966ed72dc82b6eda1aa | |
parent | 2a344e26cc51fa41a9df3535b625b8609dfc167e (diff) | |
parent | fd4d3cff880e9131d55a4e534c17289db5f72b6b (diff) | |
download | dexon-0x-contracts-7e19c944b91f573bb026ca3a916cd4e4b9169a9e.tar dexon-0x-contracts-7e19c944b91f573bb026ca3a916cd4e4b9169a9e.tar.gz dexon-0x-contracts-7e19c944b91f573bb026ca3a916cd4e4b9169a9e.tar.bz2 dexon-0x-contracts-7e19c944b91f573bb026ca3a916cd4e4b9169a9e.tar.lz dexon-0x-contracts-7e19c944b91f573bb026ca3a916cd4e4b9169a9e.tar.xz dexon-0x-contracts-7e19c944b91f573bb026ca3a916cd4e4b9169a9e.tar.zst dexon-0x-contracts-7e19c944b91f573bb026ca3a916cd4e4b9169a9e.zip |
Merge pull request #1575 from 0xProject/feature/contracts-gen
Contracts generator
111 files changed, 1286 insertions, 678 deletions
diff --git a/.github/autolabeler.yml b/.github/autolabeler.yml index 321ec18a4..fb5b00aa4 100644 --- a/.github/autolabeler.yml +++ b/.github/autolabeler.yml @@ -2,6 +2,7 @@ python: ['python-packages'] contracts: ['contracts'] sol-doc: ['packages/sol-doc'] sol-resolver: ['packages/sol-resolver'] +contracts-gen: ['packages/contracts-gen'] sra-spec: ['packages/sra-spec'] subproviders: ['packages/subproviders'] contract-addresses: ['packages/contract-addresses'] diff --git a/contracts/asset-proxy/compiler.json b/contracts/asset-proxy/compiler.json index 70d4c6b20..aab143bad 100644 --- a/contracts/asset-proxy/compiler.json +++ b/contracts/asset-proxy/compiler.json @@ -3,10 +3,7 @@ "contractsDir": "./contracts", "useDockerisedSolc": true, "compilerSettings": { - "optimizer": { - "enabled": true, - "runs": 1000000 - }, + "optimizer": { "enabled": true, "runs": 1000000 }, "outputSelection": { "*": { "*": [ @@ -20,12 +17,17 @@ } }, "contracts": [ - "IAssetData", - "IAssetProxy", - "IAuthorizable", - "ERC20Proxy", - "ERC721Proxy", - "MixinAuthorizable", - "MultiAssetProxy" + "@0x/contracts-erc20/contracts/test/DummyERC20Token.sol", + "@0x/contracts-erc20/contracts/test/DummyMultipleReturnERC20Token.sol", + "@0x/contracts-erc20/contracts/test/DummyNoReturnERC20Token.sol", + "@0x/contracts-erc721/contracts/test/DummyERC721Receiver.sol", + "@0x/contracts-erc721/contracts/test/DummyERC721Token.sol", + "src/ERC20Proxy.sol", + "src/ERC721Proxy.sol", + "src/MixinAuthorizable.sol", + "src/MultiAssetProxy.sol", + "src/interfaces/IAssetData.sol", + "src/interfaces/IAssetProxy.sol", + "src/interfaces/IAuthorizable.sol" ] } diff --git a/contracts/asset-proxy/package.json b/contracts/asset-proxy/package.json index 8398249cd..51d26b0ac 100644 --- a/contracts/asset-proxy/package.json +++ b/contracts/asset-proxy/package.json @@ -29,10 +29,12 @@ "profiler:report:html": "istanbul report html && open coverage/index.html", "coverage:report:lcov": "istanbul report lcov", "test:circleci": "yarn test", + "contracts:gen": "contracts-gen", "lint-contracts": "solhint -c ../.solhint.json contracts/**/**/**/**/*.sol" }, "config": { - "abis": "generated-artifacts/@(ERC20Proxy|ERC721Proxy|IAssetData|IAssetProxy|IAuthorizable|MixinAuthorizable|MultiAssetProxy).json" + "abis": "./generated-artifacts/@(DummyERC20Token|DummyERC721Receiver|DummyERC721Token|DummyMultipleReturnERC20Token|DummyNoReturnERC20Token|ERC20Proxy|ERC721Proxy|IAssetData|IAssetProxy|IAuthorizable|MixinAuthorizable|MultiAssetProxy).json", + "abis:comment": "This list is auto-generated by contracts-gen. Don't edit manually." }, "repository": { "type": "git", @@ -44,6 +46,7 @@ }, "homepage": "https://github.com/0xProject/0x-monorepo/contracts/protocol/README.md", "devDependencies": { + "@0x/contracts-gen": "^1.0.0", "@0x/abi-gen": "^2.0.1", "@0x/dev-utils": "^2.0.1", "@0x/sol-compiler": "^3.0.1", @@ -74,7 +77,7 @@ "@0x/utils": "^4.0.2", "@0x/web3-wrapper": "^4.0.1", "ethereum-types": "^2.0.0", - "lodash": "^4.17.5" + "lodash": "^4.17.11" }, "publishConfig": { "access": "public" diff --git a/contracts/asset-proxy/src/artifacts.ts b/contracts/asset-proxy/src/artifacts.ts new file mode 100644 index 000000000..d82c0537e --- /dev/null +++ b/contracts/asset-proxy/src/artifacts.ts @@ -0,0 +1,33 @@ +/* + * ----------------------------------------------------------------------------- + * Warning: This file is auto-generated by contracts-gen. Don't edit manually. + * ----------------------------------------------------------------------------- + */ +import { ContractArtifact } from 'ethereum-types'; + +import * as DummyERC20Token from '../generated-artifacts/DummyERC20Token.json'; +import * as DummyERC721Receiver from '../generated-artifacts/DummyERC721Receiver.json'; +import * as DummyERC721Token from '../generated-artifacts/DummyERC721Token.json'; +import * as DummyMultipleReturnERC20Token from '../generated-artifacts/DummyMultipleReturnERC20Token.json'; +import * as DummyNoReturnERC20Token from '../generated-artifacts/DummyNoReturnERC20Token.json'; +import * as ERC20Proxy from '../generated-artifacts/ERC20Proxy.json'; +import * as ERC721Proxy from '../generated-artifacts/ERC721Proxy.json'; +import * as IAssetData from '../generated-artifacts/IAssetData.json'; +import * as IAssetProxy from '../generated-artifacts/IAssetProxy.json'; +import * as IAuthorizable from '../generated-artifacts/IAuthorizable.json'; +import * as MixinAuthorizable from '../generated-artifacts/MixinAuthorizable.json'; +import * as MultiAssetProxy from '../generated-artifacts/MultiAssetProxy.json'; +export const artifacts = { + DummyERC20Token: DummyERC20Token as ContractArtifact, + DummyMultipleReturnERC20Token: DummyMultipleReturnERC20Token as ContractArtifact, + DummyNoReturnERC20Token: DummyNoReturnERC20Token as ContractArtifact, + DummyERC721Receiver: DummyERC721Receiver as ContractArtifact, + DummyERC721Token: DummyERC721Token as ContractArtifact, + ERC20Proxy: ERC20Proxy as ContractArtifact, + ERC721Proxy: ERC721Proxy as ContractArtifact, + MixinAuthorizable: MixinAuthorizable as ContractArtifact, + MultiAssetProxy: MultiAssetProxy as ContractArtifact, + IAssetData: IAssetData as ContractArtifact, + IAssetProxy: IAssetProxy as ContractArtifact, + IAuthorizable: IAuthorizable as ContractArtifact, +}; diff --git a/contracts/asset-proxy/src/artifacts/index.ts b/contracts/asset-proxy/src/artifacts/index.ts deleted file mode 100644 index 7f3060815..000000000 --- a/contracts/asset-proxy/src/artifacts/index.ts +++ /dev/null @@ -1,19 +0,0 @@ -import { ContractArtifact } from 'ethereum-types'; - -import * as ERC20Proxy from '../../generated-artifacts/ERC20Proxy.json'; -import * as ERC721Proxy from '../../generated-artifacts/ERC721Proxy.json'; -import * as IAssetData from '../../generated-artifacts/IAssetData.json'; -import * as IAssetProxy from '../../generated-artifacts/IAssetProxy.json'; -import * as IAuthorizable from '../../generated-artifacts/IAuthorizable.json'; -import * as MixinAuthorizable from '../../generated-artifacts/MixinAuthorizable.json'; -import * as MultiAssetProxy from '../../generated-artifacts/MultiAssetProxy.json'; - -export const artifacts = { - IAuthorizable: IAuthorizable as ContractArtifact, - IAssetData: IAssetData as ContractArtifact, - IAssetProxy: IAssetProxy as ContractArtifact, - ERC20Proxy: ERC20Proxy as ContractArtifact, - ERC721Proxy: ERC721Proxy as ContractArtifact, - MixinAuthorizable: MixinAuthorizable as ContractArtifact, - MultiAssetProxy: MultiAssetProxy as ContractArtifact, -}; diff --git a/contracts/asset-proxy/src/wrappers.ts b/contracts/asset-proxy/src/wrappers.ts new file mode 100644 index 000000000..f8cd342c0 --- /dev/null +++ b/contracts/asset-proxy/src/wrappers.ts @@ -0,0 +1,17 @@ +/* + * ----------------------------------------------------------------------------- + * Warning: This file is auto-generated by contracts-gen. Don't edit manually. + * ----------------------------------------------------------------------------- + */ +export * from '../generated-wrappers/dummy_erc20_token'; +export * from '../generated-wrappers/dummy_erc721_receiver'; +export * from '../generated-wrappers/dummy_erc721_token'; +export * from '../generated-wrappers/dummy_multiple_return_erc20_token'; +export * from '../generated-wrappers/dummy_no_return_erc20_token'; +export * from '../generated-wrappers/erc20_proxy'; +export * from '../generated-wrappers/erc721_proxy'; +export * from '../generated-wrappers/i_asset_data'; +export * from '../generated-wrappers/i_asset_proxy'; +export * from '../generated-wrappers/i_authorizable'; +export * from '../generated-wrappers/mixin_authorizable'; +export * from '../generated-wrappers/multi_asset_proxy'; diff --git a/contracts/asset-proxy/src/wrappers/index.ts b/contracts/asset-proxy/src/wrappers/index.ts deleted file mode 100644 index 6aecbc086..000000000 --- a/contracts/asset-proxy/src/wrappers/index.ts +++ /dev/null @@ -1,7 +0,0 @@ -export * from '../../generated-wrappers/i_asset_data'; -export * from '../../generated-wrappers/i_asset_proxy'; -export * from '../../generated-wrappers/erc20_proxy'; -export * from '../../generated-wrappers/erc721_proxy'; -export * from '../../generated-wrappers/mixin_authorizable'; -export * from '../../generated-wrappers/multi_asset_proxy'; -export * from '../../generated-wrappers/i_authorizable'; diff --git a/contracts/asset-proxy/test/proxies.ts b/contracts/asset-proxy/test/proxies.ts index 797787135..c2f9653aa 100644 --- a/contracts/asset-proxy/test/proxies.ts +++ b/contracts/asset-proxy/test/proxies.ts @@ -1,16 +1,4 @@ import { - artifacts as erc20Artifacts, - DummyERC20TokenContract, - DummyERC20TokenTransferEventArgs, - DummyMultipleReturnERC20TokenContract, - DummyNoReturnERC20TokenContract, -} from '@0x/contracts-erc20'; -import { - artifacts as erc721Artifacts, - DummyERC721ReceiverContract, - DummyERC721TokenContract, -} from '@0x/contracts-erc721'; -import { chaiSetup, constants, expectTransactionFailedAsync, @@ -30,6 +18,12 @@ import * as _ from 'lodash'; import { artifacts, + DummyERC20TokenContract, + DummyERC20TokenTransferEventArgs, + DummyERC721ReceiverContract, + DummyERC721TokenContract, + DummyMultipleReturnERC20TokenContract, + DummyNoReturnERC20TokenContract, ERC20ProxyContract, ERC20Wrapper, ERC721ProxyContract, @@ -154,7 +148,7 @@ describe('Asset Transfer Proxies', () => { constants.DUMMY_TOKEN_DECIMALS, ); noReturnErc20Token = await DummyNoReturnERC20TokenContract.deployFrom0xArtifactAsync( - erc20Artifacts.DummyNoReturnERC20Token, + artifacts.DummyNoReturnERC20Token, provider, txDefaults, constants.DUMMY_TOKEN_NAME, @@ -163,7 +157,7 @@ describe('Asset Transfer Proxies', () => { constants.DUMMY_TOKEN_TOTAL_SUPPLY, ); multipleReturnErc20Token = await DummyMultipleReturnERC20TokenContract.deployFrom0xArtifactAsync( - erc20Artifacts.DummyMultipleReturnERC20Token, + artifacts.DummyMultipleReturnERC20Token, provider, txDefaults, constants.DUMMY_TOKEN_NAME, @@ -204,7 +198,7 @@ describe('Asset Transfer Proxies', () => { // Deploy and configure ERC721 tokens and receiver [erc721TokenA, erc721TokenB] = await erc721Wrapper.deployDummyTokensAsync(); erc721Receiver = await DummyERC721ReceiverContract.deployFrom0xArtifactAsync( - erc721Artifacts.DummyERC721Receiver, + artifacts.DummyERC721Receiver, provider, txDefaults, ); @@ -568,7 +562,7 @@ describe('Asset Transfer Proxies', () => { erc721Receiver.address, amount, ); - const logDecoder = new LogDecoder(web3Wrapper, { ...artifacts, ...erc721Artifacts }); + const logDecoder = new LogDecoder(web3Wrapper, artifacts); const tx = await logDecoder.getTxWithDecodedLogsAsync( await web3Wrapper.sendTransactionAsync({ to: erc721Proxy.address, @@ -760,7 +754,7 @@ describe('Asset Transfer Proxies', () => { inputAmount, ); const erc20Balances = await erc20Wrapper.getBalancesAsync(); - const logDecoder = new LogDecoder(web3Wrapper, { ...artifacts, ...erc20Artifacts }); + const logDecoder = new LogDecoder(web3Wrapper, artifacts); const tx = await logDecoder.getTxWithDecodedLogsAsync( await web3Wrapper.sendTransactionAsync({ to: multiAssetProxy.address, diff --git a/contracts/asset-proxy/test/utils/erc20_wrapper.ts b/contracts/asset-proxy/test/utils/erc20_wrapper.ts index 12cd06ece..09607e776 100644 --- a/contracts/asset-proxy/test/utils/erc20_wrapper.ts +++ b/contracts/asset-proxy/test/utils/erc20_wrapper.ts @@ -1,4 +1,3 @@ -import { artifacts as tokensArtifacts, DummyERC20TokenContract } from '@0x/contracts-erc20'; import { constants, ERC20BalancesByOwner, txDefaults } from '@0x/contracts-test-utils'; import { assetDataUtils } from '@0x/order-utils'; import { BigNumber } from '@0x/utils'; @@ -6,8 +5,7 @@ import { Web3Wrapper } from '@0x/web3-wrapper'; import { Provider } from 'ethereum-types'; import * as _ from 'lodash'; -import { ERC20ProxyContract } from '../../generated-wrappers/erc20_proxy'; -import { artifacts } from '../../src/artifacts'; +import { artifacts, DummyERC20TokenContract, ERC20ProxyContract } from '../../src'; export class ERC20Wrapper { private readonly _tokenOwnerAddresses: string[]; @@ -38,7 +36,7 @@ export class ERC20Wrapper { for (let i = 0; i < numberToDeploy; i++) { this._dummyTokenContracts.push( await DummyERC20TokenContract.deployFrom0xArtifactAsync( - tokensArtifacts.DummyERC20Token, + artifacts.DummyERC20Token, this._provider, txDefaults, constants.DUMMY_TOKEN_NAME, diff --git a/contracts/asset-proxy/test/utils/erc721_wrapper.ts b/contracts/asset-proxy/test/utils/erc721_wrapper.ts index fc43d8c52..92d1398a7 100644 --- a/contracts/asset-proxy/test/utils/erc721_wrapper.ts +++ b/contracts/asset-proxy/test/utils/erc721_wrapper.ts @@ -1,4 +1,3 @@ -import { artifacts as tokensArtifacts, DummyERC721TokenContract } from '@0x/contracts-erc721'; import { constants, ERC721TokenIdsByOwner, txDefaults } from '@0x/contracts-test-utils'; import { generatePseudoRandomSalt } from '@0x/order-utils'; import { BigNumber } from '@0x/utils'; @@ -6,8 +5,7 @@ import { Web3Wrapper } from '@0x/web3-wrapper'; import { Provider } from 'ethereum-types'; import * as _ from 'lodash'; -import { ERC721ProxyContract } from '../../generated-wrappers/erc721_proxy'; -import { artifacts } from '../../src/artifacts'; +import { artifacts, DummyERC721TokenContract, ERC721ProxyContract } from '../../src'; export class ERC721Wrapper { private readonly _tokenOwnerAddresses: string[]; @@ -30,7 +28,7 @@ export class ERC721Wrapper { for (const i of _.times(constants.NUM_DUMMY_ERC721_TO_DEPLOY)) { this._dummyTokenContracts.push( await DummyERC721TokenContract.deployFrom0xArtifactAsync( - tokensArtifacts.DummyERC721Token, + artifacts.DummyERC721Token, this._provider, txDefaults, constants.DUMMY_TOKEN_NAME, diff --git a/contracts/asset-proxy/tsconfig.json b/contracts/asset-proxy/tsconfig.json index 7baa48cbe..526be2c64 100644 --- a/contracts/asset-proxy/tsconfig.json +++ b/contracts/asset-proxy/tsconfig.json @@ -1,19 +1,20 @@ { "extends": "../../tsconfig", - "compilerOptions": { - "outDir": "lib", - "rootDir": ".", - "resolveJsonModule": true - }, + "compilerOptions": { "outDir": "lib", "rootDir": ".", "resolveJsonModule": true }, "include": ["./src/**/*", "./test/**/*", "./generated-wrappers/**/*"], "files": [ - "./generated-artifacts/IAssetData.json", - "./generated-artifacts/IAssetProxy.json", - "./generated-artifacts/IAuthorizable.json", - "./generated-artifacts/ERC20Proxy.json", - "./generated-artifacts/ERC721Proxy.json", - "./generated-artifacts/MixinAuthorizable.json", - "./generated-artifacts/MultiAssetProxy.json" + "generated-artifacts/DummyERC20Token.json", + "generated-artifacts/DummyERC721Receiver.json", + "generated-artifacts/DummyERC721Token.json", + "generated-artifacts/DummyMultipleReturnERC20Token.json", + "generated-artifacts/DummyNoReturnERC20Token.json", + "generated-artifacts/ERC20Proxy.json", + "generated-artifacts/ERC721Proxy.json", + "generated-artifacts/IAssetData.json", + "generated-artifacts/IAssetProxy.json", + "generated-artifacts/IAuthorizable.json", + "generated-artifacts/MixinAuthorizable.json", + "generated-artifacts/MultiAssetProxy.json" ], "exclude": ["./deploy/solc/solc_bin"] } diff --git a/contracts/erc20/compiler.json b/contracts/erc20/compiler.json index 264f6231a..033917d22 100644 --- a/contracts/erc20/compiler.json +++ b/contracts/erc20/compiler.json @@ -3,10 +3,7 @@ "contractsDir": "./contracts", "useDockerisedSolc": true, "compilerSettings": { - "optimizer": { - "enabled": true, - "runs": 1000000 - }, + "optimizer": { "enabled": true, "runs": 1000000 }, "outputSelection": { "*": { "*": [ @@ -20,16 +17,16 @@ } }, "contracts": [ - "DummyERC20Token", - "DummyMultipleReturnERC20Token", - "DummyNoReturnERC20Token", - "ReentrantERC20Token", - "ERC20Token", - "IERC20Token", - "MintableERC20Token", - "UnlimitedAllowanceERC20Token", - "IEtherToken", - "WETH9", - "ZRXToken" + "src/ERC20Token.sol", + "src/MintableERC20Token.sol", + "src/UnlimitedAllowanceERC20Token.sol", + "src/WETH9.sol", + "src/ZRXToken.sol", + "src/interfaces/IERC20Token.sol", + "src/interfaces/IEtherToken.sol", + "test/DummyERC20Token.sol", + "test/DummyMultipleReturnERC20Token.sol", + "test/DummyNoReturnERC20Token.sol", + "test/ReentrantERC20Token.sol" ] } diff --git a/contracts/erc20/package.json b/contracts/erc20/package.json index 937198f2f..b3517a8c0 100644 --- a/contracts/erc20/package.json +++ b/contracts/erc20/package.json @@ -29,10 +29,12 @@ "profiler:report:html": "istanbul report html && open coverage/index.html", "coverage:report:lcov": "istanbul report lcov", "test:circleci": "yarn test", + "contracts:gen": "contracts-gen", "lint-contracts": "solhint -c ../.solhint.json contracts/**/**/**/**/*.sol" }, "config": { - "abis": "generated-artifacts/@(DummyERC20Token|DummyMultipleReturnERC20Token|DummyNoReturnERC20Token|ReentrantERC20Token|ERC20Token|IERC20Token|MintableERC20Token|UnlimitedAllowanceERC20Token|IEtherToken|WETH9|ZRXToken).json" + "abis": "./generated-artifacts/@(DummyERC20Token|DummyMultipleReturnERC20Token|DummyNoReturnERC20Token|ERC20Token|IERC20Token|IEtherToken|MintableERC20Token|ReentrantERC20Token|UnlimitedAllowanceERC20Token|WETH9|ZRXToken).json", + "abis:comment": "This list is auto-generated by contracts-gen. Don't edit manually." }, "repository": { "type": "git", @@ -44,6 +46,7 @@ }, "homepage": "https://github.com/0xProject/0x-monorepo/contracts/tokens/README.md", "devDependencies": { + "@0x/contracts-gen": "^1.0.0", "@0x/abi-gen": "^2.0.1", "@0x/contracts-test-utils": "^3.0.2", "@0x/dev-utils": "^2.0.1", @@ -72,7 +75,7 @@ "@0x/utils": "^4.0.2", "@0x/web3-wrapper": "^4.0.1", "ethereum-types": "^2.0.0", - "lodash": "^4.17.5" + "lodash": "^4.17.11" }, "publishConfig": { "access": "public" diff --git a/contracts/erc20/src/artifacts.ts b/contracts/erc20/src/artifacts.ts new file mode 100644 index 000000000..c97a73195 --- /dev/null +++ b/contracts/erc20/src/artifacts.ts @@ -0,0 +1,31 @@ +/* + * ----------------------------------------------------------------------------- + * Warning: This file is auto-generated by contracts-gen. Don't edit manually. + * ----------------------------------------------------------------------------- + */ +import { ContractArtifact } from 'ethereum-types'; + +import * as DummyERC20Token from '../generated-artifacts/DummyERC20Token.json'; +import * as DummyMultipleReturnERC20Token from '../generated-artifacts/DummyMultipleReturnERC20Token.json'; +import * as DummyNoReturnERC20Token from '../generated-artifacts/DummyNoReturnERC20Token.json'; +import * as ERC20Token from '../generated-artifacts/ERC20Token.json'; +import * as IERC20Token from '../generated-artifacts/IERC20Token.json'; +import * as IEtherToken from '../generated-artifacts/IEtherToken.json'; +import * as MintableERC20Token from '../generated-artifacts/MintableERC20Token.json'; +import * as ReentrantERC20Token from '../generated-artifacts/ReentrantERC20Token.json'; +import * as UnlimitedAllowanceERC20Token from '../generated-artifacts/UnlimitedAllowanceERC20Token.json'; +import * as WETH9 from '../generated-artifacts/WETH9.json'; +import * as ZRXToken from '../generated-artifacts/ZRXToken.json'; +export const artifacts = { + ERC20Token: ERC20Token as ContractArtifact, + MintableERC20Token: MintableERC20Token as ContractArtifact, + UnlimitedAllowanceERC20Token: UnlimitedAllowanceERC20Token as ContractArtifact, + WETH9: WETH9 as ContractArtifact, + ZRXToken: (ZRXToken as any) as ContractArtifact, + IERC20Token: IERC20Token as ContractArtifact, + IEtherToken: IEtherToken as ContractArtifact, + DummyERC20Token: DummyERC20Token as ContractArtifact, + DummyMultipleReturnERC20Token: DummyMultipleReturnERC20Token as ContractArtifact, + DummyNoReturnERC20Token: DummyNoReturnERC20Token as ContractArtifact, + ReentrantERC20Token: ReentrantERC20Token as ContractArtifact, +}; diff --git a/contracts/erc20/src/artifacts/index.ts b/contracts/erc20/src/artifacts/index.ts deleted file mode 100644 index ce1ae06ac..000000000 --- a/contracts/erc20/src/artifacts/index.ts +++ /dev/null @@ -1,30 +0,0 @@ -import { ContractArtifact } from 'ethereum-types'; - -import * as DummyERC20Token from '../../generated-artifacts/DummyERC20Token.json'; -import * as DummyMultipleReturnERC20Token from '../../generated-artifacts/DummyMultipleReturnERC20Token.json'; -import * as DummyNoReturnERC20Token from '../../generated-artifacts/DummyNoReturnERC20Token.json'; -import * as ERC20Token from '../../generated-artifacts/ERC20Token.json'; -import * as IERC20Token from '../../generated-artifacts/IERC20Token.json'; -import * as IEtherToken from '../../generated-artifacts/IEtherToken.json'; -import * as MintableERC20Token from '../../generated-artifacts/MintableERC20Token.json'; -import * as ReentrantERC20Token from '../../generated-artifacts/ReentrantERC20Token.json'; -import * as UnlimitedAllowanceERC20Token from '../../generated-artifacts/UnlimitedAllowanceERC20Token.json'; -import * as WETH9 from '../../generated-artifacts/WETH9.json'; -import * as ZRXToken from '../../generated-artifacts/ZRXToken.json'; - -// tslint:disable:no-unnecessary-type-assertion -export const artifacts = { - DummyERC20Token: DummyERC20Token as ContractArtifact, - DummyMultipleReturnERC20Token: DummyMultipleReturnERC20Token as ContractArtifact, - DummyNoReturnERC20Token: DummyNoReturnERC20Token as ContractArtifact, - ReentrantERC20Token: ReentrantERC20Token as ContractArtifact, - ERC20Token: ERC20Token as ContractArtifact, - IERC20Token: IERC20Token as ContractArtifact, - MintableERC20Token: MintableERC20Token as ContractArtifact, - UnlimitedAllowanceERC20Token: UnlimitedAllowanceERC20Token as ContractArtifact, - IEtherToken: IEtherToken as ContractArtifact, - WETH9: WETH9 as ContractArtifact, - // Note(albrow): "as any" hack still required here because ZRXToken does not - // conform to the v2 artifact type. - ZRXToken: (ZRXToken as any) as ContractArtifact, -}; diff --git a/contracts/erc20/src/wrappers.ts b/contracts/erc20/src/wrappers.ts new file mode 100644 index 000000000..40193e7d8 --- /dev/null +++ b/contracts/erc20/src/wrappers.ts @@ -0,0 +1,16 @@ +/* + * ----------------------------------------------------------------------------- + * Warning: This file is auto-generated by contracts-gen. Don't edit manually. + * ----------------------------------------------------------------------------- + */ +export * from '../generated-wrappers/dummy_erc20_token'; +export * from '../generated-wrappers/dummy_multiple_return_erc20_token'; +export * from '../generated-wrappers/dummy_no_return_erc20_token'; +export * from '../generated-wrappers/erc20_token'; +export * from '../generated-wrappers/i_erc20_token'; +export * from '../generated-wrappers/i_ether_token'; +export * from '../generated-wrappers/mintable_erc20_token'; +export * from '../generated-wrappers/reentrant_erc20_token'; +export * from '../generated-wrappers/unlimited_allowance_erc20_token'; +export * from '../generated-wrappers/weth9'; +export * from '../generated-wrappers/zrx_token'; diff --git a/contracts/erc20/src/wrappers/index.ts b/contracts/erc20/src/wrappers/index.ts deleted file mode 100644 index b4e4ef969..000000000 --- a/contracts/erc20/src/wrappers/index.ts +++ /dev/null @@ -1,11 +0,0 @@ -export * from '../../generated-wrappers/zrx_token'; -export * from '../../generated-wrappers/weth9'; -export * from '../../generated-wrappers/unlimited_allowance_erc20_token'; -export * from '../../generated-wrappers/reentrant_erc20_token'; -export * from '../../generated-wrappers/mintable_erc20_token'; -export * from '../../generated-wrappers/i_ether_token'; -export * from '../../generated-wrappers/i_erc20_token'; -export * from '../../generated-wrappers/erc20_token'; -export * from '../../generated-wrappers/dummy_no_return_erc20_token'; -export * from '../../generated-wrappers/dummy_multiple_return_erc20_token'; -export * from '../../generated-wrappers/dummy_erc20_token'; diff --git a/contracts/erc20/tsconfig.json b/contracts/erc20/tsconfig.json index 4df7424be..74419260a 100644 --- a/contracts/erc20/tsconfig.json +++ b/contracts/erc20/tsconfig.json @@ -1,23 +1,19 @@ { "extends": "../../tsconfig", - "compilerOptions": { - "outDir": "lib", - "rootDir": ".", - "resolveJsonModule": true - }, + "compilerOptions": { "outDir": "lib", "rootDir": ".", "resolveJsonModule": true }, "include": ["./src/**/*", "./test/**/*", "./generated-wrappers/**/*"], "files": [ - "./generated-artifacts/DummyERC20Token.json", - "./generated-artifacts/DummyMultipleReturnERC20Token.json", - "./generated-artifacts/DummyNoReturnERC20Token.json", - "./generated-artifacts/ReentrantERC20Token.json", - "./generated-artifacts/ERC20Token.json", - "./generated-artifacts/IERC20Token.json", - "./generated-artifacts/MintableERC20Token.json", - "./generated-artifacts/UnlimitedAllowanceERC20Token.json", - "./generated-artifacts/IEtherToken.json", - "./generated-artifacts/WETH9.json", - "./generated-artifacts/ZRXToken.json" + "generated-artifacts/DummyERC20Token.json", + "generated-artifacts/DummyMultipleReturnERC20Token.json", + "generated-artifacts/DummyNoReturnERC20Token.json", + "generated-artifacts/ERC20Token.json", + "generated-artifacts/IERC20Token.json", + "generated-artifacts/IEtherToken.json", + "generated-artifacts/MintableERC20Token.json", + "generated-artifacts/ReentrantERC20Token.json", + "generated-artifacts/UnlimitedAllowanceERC20Token.json", + "generated-artifacts/WETH9.json", + "generated-artifacts/ZRXToken.json" ], "exclude": ["./deploy/solc/solc_bin"] } diff --git a/contracts/erc721/compiler.json b/contracts/erc721/compiler.json index db8589016..09d79ba28 100644 --- a/contracts/erc721/compiler.json +++ b/contracts/erc721/compiler.json @@ -3,10 +3,7 @@ "contractsDir": "./contracts", "useDockerisedSolc": true, "compilerSettings": { - "optimizer": { - "enabled": true, - "runs": 1000000 - }, + "optimizer": { "enabled": true, "runs": 1000000 }, "outputSelection": { "*": { "*": [ @@ -20,12 +17,12 @@ } }, "contracts": [ - "DummyERC721Receiver", - "InvalidERC721Receiver", - "DummyERC721Token", - "ERC721Token", - "IERC721Receiver", - "IERC721Token", - "MintableERC721Token" + "src/ERC721Token.sol", + "src/MintableERC721Token.sol", + "src/interfaces/IERC721Receiver.sol", + "src/interfaces/IERC721Token.sol", + "test/DummyERC721Receiver.sol", + "test/DummyERC721Token.sol", + "test/InvalidERC721Receiver.sol" ] } diff --git a/contracts/erc721/package.json b/contracts/erc721/package.json index 4d2c79c46..a8cf7016f 100644 --- a/contracts/erc721/package.json +++ b/contracts/erc721/package.json @@ -29,10 +29,12 @@ "profiler:report:html": "istanbul report html && open coverage/index.html", "coverage:report:lcov": "istanbul report lcov", "test:circleci": "yarn test", + "contracts:gen": "contracts-gen", "lint-contracts": "solhint -c ../.solhint.json contracts/**/**/**/**/*.sol" }, "config": { - "abis": "generated-artifacts/@(DummyERC721Receiver|InvalidERC721Receiver|DummyERC721Token|ERC721Token|IERC721Receiver|IERC721Token|MintableERC721Token).json" + "abis": "./generated-artifacts/@(DummyERC721Receiver|DummyERC721Token|ERC721Token|IERC721Receiver|IERC721Token|InvalidERC721Receiver|MintableERC721Token).json", + "abis:comment": "This list is auto-generated by contracts-gen. Don't edit manually." }, "repository": { "type": "git", @@ -44,6 +46,7 @@ }, "homepage": "https://github.com/0xProject/0x-monorepo/contracts/tokens/README.md", "devDependencies": { + "@0x/contracts-gen": "^1.0.0", "@0x/abi-gen": "^2.0.1", "@0x/contracts-test-utils": "^3.0.2", "@0x/dev-utils": "^2.0.1", @@ -71,7 +74,7 @@ "@0x/utils": "^4.0.2", "@0x/web3-wrapper": "^4.0.1", "ethereum-types": "^2.0.0", - "lodash": "^4.17.5" + "lodash": "^4.17.11" }, "publishConfig": { "access": "public" diff --git a/contracts/erc721/src/artifacts.ts b/contracts/erc721/src/artifacts.ts new file mode 100644 index 000000000..79a76e21b --- /dev/null +++ b/contracts/erc721/src/artifacts.ts @@ -0,0 +1,23 @@ +/* + * ----------------------------------------------------------------------------- + * Warning: This file is auto-generated by contracts-gen. Don't edit manually. + * ----------------------------------------------------------------------------- + */ +import { ContractArtifact } from 'ethereum-types'; + +import * as DummyERC721Receiver from '../generated-artifacts/DummyERC721Receiver.json'; +import * as DummyERC721Token from '../generated-artifacts/DummyERC721Token.json'; +import * as ERC721Token from '../generated-artifacts/ERC721Token.json'; +import * as IERC721Receiver from '../generated-artifacts/IERC721Receiver.json'; +import * as IERC721Token from '../generated-artifacts/IERC721Token.json'; +import * as InvalidERC721Receiver from '../generated-artifacts/InvalidERC721Receiver.json'; +import * as MintableERC721Token from '../generated-artifacts/MintableERC721Token.json'; +export const artifacts = { + ERC721Token: ERC721Token as ContractArtifact, + MintableERC721Token: MintableERC721Token as ContractArtifact, + IERC721Receiver: IERC721Receiver as ContractArtifact, + IERC721Token: IERC721Token as ContractArtifact, + DummyERC721Receiver: DummyERC721Receiver as ContractArtifact, + DummyERC721Token: DummyERC721Token as ContractArtifact, + InvalidERC721Receiver: InvalidERC721Receiver as ContractArtifact, +}; diff --git a/contracts/erc721/src/artifacts/index.ts b/contracts/erc721/src/artifacts/index.ts deleted file mode 100644 index 8d5ec8a46..000000000 --- a/contracts/erc721/src/artifacts/index.ts +++ /dev/null @@ -1,20 +0,0 @@ -import { ContractArtifact } from 'ethereum-types'; - -import * as DummyERC721Receiver from '../../generated-artifacts/DummyERC721Receiver.json'; -import * as DummyERC721Token from '../../generated-artifacts/DummyERC721Token.json'; -import * as ERC721Token from '../../generated-artifacts/ERC721Token.json'; -import * as IERC721Receiver from '../../generated-artifacts/IERC721Receiver.json'; -import * as IERC721Token from '../../generated-artifacts/IERC721Token.json'; -import * as InvalidERC721Receiver from '../../generated-artifacts/InvalidERC721Receiver.json'; -import * as MintableERC721Token from '../../generated-artifacts/MintableERC721Token.json'; - -// tslint:disable:no-unnecessary-type-assertion -export const artifacts = { - DummyERC721Receiver: DummyERC721Receiver as ContractArtifact, - InvalidERC721Receiver: InvalidERC721Receiver as ContractArtifact, - DummyERC721Token: DummyERC721Token as ContractArtifact, - ERC721Token: ERC721Token as ContractArtifact, - IERC721Receiver: IERC721Receiver as ContractArtifact, - IERC721Token: IERC721Token as ContractArtifact, - MintableERC721Token: MintableERC721Token as ContractArtifact, -}; diff --git a/contracts/erc721/src/wrappers.ts b/contracts/erc721/src/wrappers.ts new file mode 100644 index 000000000..716f6cca4 --- /dev/null +++ b/contracts/erc721/src/wrappers.ts @@ -0,0 +1,12 @@ +/* + * ----------------------------------------------------------------------------- + * Warning: This file is auto-generated by contracts-gen. Don't edit manually. + * ----------------------------------------------------------------------------- + */ +export * from '../generated-wrappers/dummy_erc721_receiver'; +export * from '../generated-wrappers/dummy_erc721_token'; +export * from '../generated-wrappers/erc721_token'; +export * from '../generated-wrappers/i_erc721_receiver'; +export * from '../generated-wrappers/i_erc721_token'; +export * from '../generated-wrappers/invalid_erc721_receiver'; +export * from '../generated-wrappers/mintable_erc721_token'; diff --git a/contracts/erc721/src/wrappers/index.ts b/contracts/erc721/src/wrappers/index.ts deleted file mode 100644 index ba6c51885..000000000 --- a/contracts/erc721/src/wrappers/index.ts +++ /dev/null @@ -1,7 +0,0 @@ -export * from '../../generated-wrappers/mintable_erc721_token'; -export * from '../../generated-wrappers/invalid_erc721_receiver'; -export * from '../../generated-wrappers/i_erc721_token'; -export * from '../../generated-wrappers/i_erc721_receiver'; -export * from '../../generated-wrappers/erc721_token'; -export * from '../../generated-wrappers/dummy_erc721_token'; -export * from '../../generated-wrappers/dummy_erc721_receiver'; diff --git a/contracts/erc721/tsconfig.json b/contracts/erc721/tsconfig.json index 098c3a7f3..3b218affe 100644 --- a/contracts/erc721/tsconfig.json +++ b/contracts/erc721/tsconfig.json @@ -1,19 +1,15 @@ { "extends": "../../tsconfig", - "compilerOptions": { - "outDir": "lib", - "rootDir": ".", - "resolveJsonModule": true - }, + "compilerOptions": { "outDir": "lib", "rootDir": ".", "resolveJsonModule": true }, "include": ["./src/**/*", "./test/**/*", "./generated-wrappers/**/*"], "files": [ - "./generated-artifacts/DummyERC721Receiver.json", - "./generated-artifacts/InvalidERC721Receiver.json", - "./generated-artifacts/DummyERC721Token.json", - "./generated-artifacts/ERC721Token.json", - "./generated-artifacts/IERC721Receiver.json", - "./generated-artifacts/IERC721Token.json", - "./generated-artifacts/MintableERC721Token.json" + "generated-artifacts/DummyERC721Receiver.json", + "generated-artifacts/DummyERC721Token.json", + "generated-artifacts/ERC721Token.json", + "generated-artifacts/IERC721Receiver.json", + "generated-artifacts/IERC721Token.json", + "generated-artifacts/InvalidERC721Receiver.json", + "generated-artifacts/MintableERC721Token.json" ], "exclude": ["./deploy/solc/solc_bin"] } diff --git a/contracts/exchange-forwarder/compiler.json b/contracts/exchange-forwarder/compiler.json index e93eb4bdd..051e81de5 100644 --- a/contracts/exchange-forwarder/compiler.json +++ b/contracts/exchange-forwarder/compiler.json @@ -3,10 +3,7 @@ "contractsDir": "./contracts", "useDockerisedSolc": true, "compilerSettings": { - "optimizer": { - "enabled": true, - "runs": 1000000 - }, + "optimizer": { "enabled": true, "runs": 1000000 }, "outputSelection": { "*": { "*": [ @@ -19,5 +16,11 @@ } } }, - "contracts": ["Forwarder"] + "contracts": [ + "@0x/contracts-erc20/contracts/src/WETH9.sol", + "@0x/contracts-erc20/contracts/test/DummyERC20Token.sol", + "@0x/contracts-erc721/contracts/test/DummyERC721Token.sol", + "@0x/contracts-exchange/contracts/src/Exchange.sol", + "src/Forwarder.sol" + ] } diff --git a/contracts/exchange-forwarder/package.json b/contracts/exchange-forwarder/package.json index 8e7a0c5e0..1ed3bee3a 100644 --- a/contracts/exchange-forwarder/package.json +++ b/contracts/exchange-forwarder/package.json @@ -29,10 +29,12 @@ "profiler:report:html": "istanbul report html && open coverage/index.html", "coverage:report:lcov": "istanbul report lcov", "test:circleci": "yarn test", + "contracts:gen": "contracts-gen", "lint-contracts": "solhint -c ../.solhint.json contracts/**/**/**/**/*.sol" }, "config": { - "abis": "generated-artifacts/@(Forwarder).json" + "abis": "./generated-artifacts/@(DummyERC20Token|DummyERC721Token|Exchange|Forwarder|WETH9).json", + "abis:comment": "This list is auto-generated by contracts-gen. Don't edit manually." }, "repository": { "type": "git", @@ -44,6 +46,7 @@ }, "homepage": "https://github.com/0xProject/0x-monorepo/contracts/extensions/README.md", "devDependencies": { + "@0x/contracts-gen": "^1.0.0", "@0x/abi-gen": "^2.0.1", "@0x/contract-wrappers": "^7.0.1", "@0x/contracts-test-utils": "^3.0.2", @@ -78,7 +81,7 @@ "@0x/utils": "^4.0.2", "@0x/web3-wrapper": "^4.0.1", "ethereum-types": "^2.0.0", - "lodash": "^4.17.5" + "lodash": "^4.17.11" }, "publishConfig": { "access": "public" diff --git a/contracts/exchange-forwarder/src/artifacts.ts b/contracts/exchange-forwarder/src/artifacts.ts new file mode 100644 index 000000000..94bcdf84a --- /dev/null +++ b/contracts/exchange-forwarder/src/artifacts.ts @@ -0,0 +1,19 @@ +/* + * ----------------------------------------------------------------------------- + * Warning: This file is auto-generated by contracts-gen. Don't edit manually. + * ----------------------------------------------------------------------------- + */ +import { ContractArtifact } from 'ethereum-types'; + +import * as DummyERC20Token from '../generated-artifacts/DummyERC20Token.json'; +import * as DummyERC721Token from '../generated-artifacts/DummyERC721Token.json'; +import * as Exchange from '../generated-artifacts/Exchange.json'; +import * as Forwarder from '../generated-artifacts/Forwarder.json'; +import * as WETH9 from '../generated-artifacts/WETH9.json'; +export const artifacts = { + WETH9: WETH9 as ContractArtifact, + DummyERC20Token: DummyERC20Token as ContractArtifact, + DummyERC721Token: DummyERC721Token as ContractArtifact, + Exchange: Exchange as ContractArtifact, + Forwarder: Forwarder as ContractArtifact, +}; diff --git a/contracts/exchange-forwarder/src/artifacts/index.ts b/contracts/exchange-forwarder/src/artifacts/index.ts deleted file mode 100644 index f15dac49a..000000000 --- a/contracts/exchange-forwarder/src/artifacts/index.ts +++ /dev/null @@ -1,7 +0,0 @@ -import { ContractArtifact } from 'ethereum-types'; - -import * as Forwarder from '../../generated-artifacts/Forwarder.json'; - -export const artifacts = { - Forwarder: Forwarder as ContractArtifact, -}; diff --git a/contracts/exchange-forwarder/src/wrappers.ts b/contracts/exchange-forwarder/src/wrappers.ts new file mode 100644 index 000000000..cbe72c5cf --- /dev/null +++ b/contracts/exchange-forwarder/src/wrappers.ts @@ -0,0 +1,10 @@ +/* + * ----------------------------------------------------------------------------- + * Warning: This file is auto-generated by contracts-gen. Don't edit manually. + * ----------------------------------------------------------------------------- + */ +export * from '../generated-wrappers/dummy_erc20_token'; +export * from '../generated-wrappers/dummy_erc721_token'; +export * from '../generated-wrappers/exchange'; +export * from '../generated-wrappers/forwarder'; +export * from '../generated-wrappers/weth9'; diff --git a/contracts/exchange-forwarder/src/wrappers/index.ts b/contracts/exchange-forwarder/src/wrappers/index.ts deleted file mode 100644 index 89dff9e74..000000000 --- a/contracts/exchange-forwarder/src/wrappers/index.ts +++ /dev/null @@ -1 +0,0 @@ -export * from '../../generated-wrappers/forwarder'; diff --git a/contracts/exchange-forwarder/test/forwarder.ts b/contracts/exchange-forwarder/test/forwarder.ts index 24c219563..5acf113dd 100644 --- a/contracts/exchange-forwarder/test/forwarder.ts +++ b/contracts/exchange-forwarder/test/forwarder.ts @@ -1,7 +1,5 @@ import { ERC20Wrapper, ERC721Wrapper } from '@0x/contracts-asset-proxy'; -import { artifacts as erc20Artifacts, DummyERC20TokenContract, WETH9Contract } from '@0x/contracts-erc20'; -import { DummyERC721TokenContract } from '@0x/contracts-erc721'; -import { artifacts as exchangeArtifacts, ExchangeContract, ExchangeWrapper } from '@0x/contracts-exchange'; +import { ExchangeWrapper } from '@0x/contracts-exchange'; import { chaiSetup, constants, @@ -23,7 +21,15 @@ import { Web3Wrapper } from '@0x/web3-wrapper'; import * as chai from 'chai'; import { TransactionReceiptWithDecodedLogs } from 'ethereum-types'; -import { artifacts, ForwarderContract, ForwarderWrapper } from '../src'; +import { + artifacts, + DummyERC20TokenContract, + DummyERC721TokenContract, + ExchangeContract, + ForwarderContract, + ForwarderWrapper, + WETH9Contract, +} from '../src'; chaiSetup.configure(); const expect = chai.expect; @@ -88,14 +94,14 @@ describe(ContractName.Forwarder, () => { const erc721Balances = await erc721Wrapper.getBalancesAsync(); erc721MakerAssetIds = erc721Balances[makerAddress][erc721Token.address]; - wethContract = await WETH9Contract.deployFrom0xArtifactAsync(erc20Artifacts.WETH9, provider, txDefaults); + wethContract = await WETH9Contract.deployFrom0xArtifactAsync(artifacts.WETH9, provider, txDefaults); weth = new DummyERC20TokenContract(wethContract.abi, wethContract.address, provider); erc20Wrapper.addDummyTokenContract(weth); wethAssetData = assetDataUtils.encodeERC20AssetData(wethContract.address); zrxAssetData = assetDataUtils.encodeERC20AssetData(zrxToken.address); const exchangeInstance = await ExchangeContract.deployFrom0xArtifactAsync( - exchangeArtifacts.Exchange, + artifacts.Exchange, provider, txDefaults, zrxAssetData, @@ -166,7 +172,7 @@ describe(ContractName.Forwarder, () => { describe('constructor', () => { it('should revert if assetProxy is unregistered', async () => { const exchangeInstance = await ExchangeContract.deployFrom0xArtifactAsync( - exchangeArtifacts.Exchange, + artifacts.Exchange, provider, txDefaults, zrxAssetData, diff --git a/contracts/exchange-forwarder/test/utils/forwarder_wrapper.ts b/contracts/exchange-forwarder/test/utils/forwarder_wrapper.ts index 207106852..4f9f6110a 100644 --- a/contracts/exchange-forwarder/test/utils/forwarder_wrapper.ts +++ b/contracts/exchange-forwarder/test/utils/forwarder_wrapper.ts @@ -1,6 +1,3 @@ -import { artifacts as erc20Artifacts } from '@0x/contracts-erc20'; -import { artifacts as erc721Artifacts } from '@0x/contracts-erc721'; -import { artifacts as exchangeArtifacts } from '@0x/contracts-exchange'; import { constants, formatters, LogDecoder, MarketSellOrders } from '@0x/contracts-test-utils'; import { SignedOrder } from '@0x/types'; import { BigNumber } from '@0x/utils'; @@ -61,12 +58,7 @@ export class ForwarderWrapper { constructor(contractInstance: ForwarderContract, provider: Provider) { this._forwarderContract = contractInstance; this._web3Wrapper = new Web3Wrapper(provider); - this._logDecoder = new LogDecoder(this._web3Wrapper, { - ...artifacts, - ...erc20Artifacts, - ...erc721Artifacts, - ...exchangeArtifacts, - }); + this._logDecoder = new LogDecoder(this._web3Wrapper, artifacts); } public async marketSellOrdersWithEthAsync( orders: SignedOrder[], diff --git a/contracts/exchange-forwarder/tsconfig.json b/contracts/exchange-forwarder/tsconfig.json index cd80b5a5f..92c3a0475 100644 --- a/contracts/exchange-forwarder/tsconfig.json +++ b/contracts/exchange-forwarder/tsconfig.json @@ -1,11 +1,13 @@ { "extends": "../../tsconfig", - "compilerOptions": { - "outDir": "lib", - "rootDir": ".", - "resolveJsonModule": true - }, + "compilerOptions": { "outDir": "lib", "rootDir": ".", "resolveJsonModule": true }, "include": ["./src/**/*", "./test/**/*", "./generated-wrappers/**/*"], - "files": ["./generated-artifacts/Forwarder.json"], + "files": [ + "generated-artifacts/DummyERC20Token.json", + "generated-artifacts/DummyERC721Token.json", + "generated-artifacts/Exchange.json", + "generated-artifacts/Forwarder.json", + "generated-artifacts/WETH9.json" + ], "exclude": ["./deploy/solc/solc_bin"] } diff --git a/contracts/exchange-libs/compiler.json b/contracts/exchange-libs/compiler.json index c4f0c6bd9..2a69896e6 100644 --- a/contracts/exchange-libs/compiler.json +++ b/contracts/exchange-libs/compiler.json @@ -3,10 +3,7 @@ "contractsDir": "./contracts", "useDockerisedSolc": true, "compilerSettings": { - "optimizer": { - "enabled": true, - "runs": 1000000 - }, + "optimizer": { "enabled": true, "runs": 1000000 }, "outputSelection": { "*": { "*": [ @@ -20,13 +17,13 @@ } }, "contracts": [ - "TestLibs", - "LibOrder", - "LibMath", - "LibFillResults", - "LibAbiEncoder", - "LibEIP712", - "LibAssetProxyErrors", - "LibConstants" + "src/LibAbiEncoder.sol", + "src/LibAssetProxyErrors.sol", + "src/LibConstants.sol", + "src/LibEIP712.sol", + "src/LibFillResults.sol", + "src/LibMath.sol", + "src/LibOrder.sol", + "test/TestLibs.sol" ] } diff --git a/contracts/exchange-libs/package.json b/contracts/exchange-libs/package.json index 6bf8267be..2b7a1c404 100644 --- a/contracts/exchange-libs/package.json +++ b/contracts/exchange-libs/package.json @@ -29,10 +29,12 @@ "profiler:report:html": "istanbul report html && open coverage/index.html", "coverage:report:lcov": "istanbul report lcov", "test:circleci": "yarn test", + "contracts:gen": "contracts-gen", "lint-contracts": "solhint -c ../.solhint.json contracts/**/**/**/**/*.sol" }, "config": { - "abis": "generated-artifacts/@(LibMath|LibOrder|LibFillResults|LibAbiEncoder|TestLibs|LibEIP712).json" + "abis": "./generated-artifacts/@(LibAbiEncoder|LibAssetProxyErrors|LibConstants|LibEIP712|LibFillResults|LibMath|LibOrder|TestLibs).json", + "abis:comment": "This list is auto-generated by contracts-gen. Don't edit manually." }, "repository": { "type": "git", @@ -44,6 +46,7 @@ }, "homepage": "https://github.com/0xProject/0x-monorepo/contracts/libs/README.md", "devDependencies": { + "@0x/contracts-gen": "^1.0.0", "@0x/abi-gen": "^2.0.1", "@0x/contracts-test-utils": "^3.0.2", "@0x/dev-utils": "^2.0.1", @@ -72,7 +75,7 @@ "@0x/utils": "^4.0.2", "@0x/web3-wrapper": "^4.0.1", "ethereum-types": "^2.0.0", - "lodash": "^4.17.5" + "lodash": "^4.17.11" }, "publishConfig": { "access": "public" diff --git a/contracts/exchange-libs/src/artifacts.ts b/contracts/exchange-libs/src/artifacts.ts new file mode 100644 index 000000000..861d6f3d2 --- /dev/null +++ b/contracts/exchange-libs/src/artifacts.ts @@ -0,0 +1,25 @@ +/* + * ----------------------------------------------------------------------------- + * Warning: This file is auto-generated by contracts-gen. Don't edit manually. + * ----------------------------------------------------------------------------- + */ +import { ContractArtifact } from 'ethereum-types'; + +import * as LibAbiEncoder from '../generated-artifacts/LibAbiEncoder.json'; +import * as LibAssetProxyErrors from '../generated-artifacts/LibAssetProxyErrors.json'; +import * as LibConstants from '../generated-artifacts/LibConstants.json'; +import * as LibEIP712 from '../generated-artifacts/LibEIP712.json'; +import * as LibFillResults from '../generated-artifacts/LibFillResults.json'; +import * as LibMath from '../generated-artifacts/LibMath.json'; +import * as LibOrder from '../generated-artifacts/LibOrder.json'; +import * as TestLibs from '../generated-artifacts/TestLibs.json'; +export const artifacts = { + LibAbiEncoder: LibAbiEncoder as ContractArtifact, + LibAssetProxyErrors: LibAssetProxyErrors as ContractArtifact, + LibConstants: LibConstants as ContractArtifact, + LibEIP712: LibEIP712 as ContractArtifact, + LibFillResults: LibFillResults as ContractArtifact, + LibMath: LibMath as ContractArtifact, + LibOrder: LibOrder as ContractArtifact, + TestLibs: TestLibs as ContractArtifact, +}; diff --git a/contracts/exchange-libs/src/artifacts/index.ts b/contracts/exchange-libs/src/artifacts/index.ts deleted file mode 100644 index 3955bbe2b..000000000 --- a/contracts/exchange-libs/src/artifacts/index.ts +++ /dev/null @@ -1,17 +0,0 @@ -import { ContractArtifact } from 'ethereum-types'; - -import * as LibAbiEncoder from '../../generated-artifacts/LibAbiEncoder.json'; -import * as LibEIP721 from '../../generated-artifacts/LibEIP712.json'; -import * as LibFillResults from '../../generated-artifacts/LibFillResults.json'; -import * as LibMath from '../../generated-artifacts/LibMath.json'; -import * as LibOrder from '../../generated-artifacts/LibOrder.json'; -import * as TestLibs from '../../generated-artifacts/TestLibs.json'; - -export const artifacts = { - TestLibs: TestLibs as ContractArtifact, - LibAbiEncoder: LibAbiEncoder as ContractArtifact, - LibFillResults: LibFillResults as ContractArtifact, - LibMath: LibMath as ContractArtifact, - LibOrder: LibOrder as ContractArtifact, - LibEIP721: LibEIP721 as ContractArtifact, -}; diff --git a/contracts/exchange-libs/src/wrappers.ts b/contracts/exchange-libs/src/wrappers.ts new file mode 100644 index 000000000..05244d87b --- /dev/null +++ b/contracts/exchange-libs/src/wrappers.ts @@ -0,0 +1,13 @@ +/* + * ----------------------------------------------------------------------------- + * Warning: This file is auto-generated by contracts-gen. Don't edit manually. + * ----------------------------------------------------------------------------- + */ +export * from '../generated-wrappers/lib_abi_encoder'; +export * from '../generated-wrappers/lib_asset_proxy_errors'; +export * from '../generated-wrappers/lib_constants'; +export * from '../generated-wrappers/lib_e_i_p712'; +export * from '../generated-wrappers/lib_fill_results'; +export * from '../generated-wrappers/lib_math'; +export * from '../generated-wrappers/lib_order'; +export * from '../generated-wrappers/test_libs'; diff --git a/contracts/exchange-libs/src/wrappers/index.ts b/contracts/exchange-libs/src/wrappers/index.ts deleted file mode 100644 index baaae6e34..000000000 --- a/contracts/exchange-libs/src/wrappers/index.ts +++ /dev/null @@ -1,6 +0,0 @@ -export * from '../../generated-wrappers/test_libs'; -export * from '../../generated-wrappers/lib_abi_encoder'; -export * from '../../generated-wrappers/lib_fill_results'; -export * from '../../generated-wrappers/lib_math'; -export * from '../../generated-wrappers/lib_order'; -export * from '../../generated-wrappers/lib_e_i_p712'; diff --git a/contracts/exchange-libs/tsconfig.json b/contracts/exchange-libs/tsconfig.json index 27ca35085..1b5d54175 100644 --- a/contracts/exchange-libs/tsconfig.json +++ b/contracts/exchange-libs/tsconfig.json @@ -1,18 +1,16 @@ { "extends": "../../tsconfig", - "compilerOptions": { - "outDir": "lib", - "rootDir": ".", - "resolveJsonModule": true - }, + "compilerOptions": { "outDir": "lib", "rootDir": ".", "resolveJsonModule": true }, "include": ["./src/**/*", "./test/**/*", "./generated-wrappers/**/*"], "files": [ - "./generated-artifacts/TestLibs.json", - "./generated-artifacts/LibOrder.json", - "./generated-artifacts/LibFillResults.json", - "./generated-artifacts/LibAbiEncoder.json", - "./generated-artifacts/LibEIP712.json", - "./generated-artifacts/LibMath.json" + "generated-artifacts/LibAbiEncoder.json", + "generated-artifacts/LibAssetProxyErrors.json", + "generated-artifacts/LibConstants.json", + "generated-artifacts/LibEIP712.json", + "generated-artifacts/LibFillResults.json", + "generated-artifacts/LibMath.json", + "generated-artifacts/LibOrder.json", + "generated-artifacts/TestLibs.json" ], "exclude": ["./deploy/solc/solc_bin"] } diff --git a/contracts/exchange/compiler.json b/contracts/exchange/compiler.json index 6a5f666d1..b7a94cd13 100644 --- a/contracts/exchange/compiler.json +++ b/contracts/exchange/compiler.json @@ -3,10 +3,7 @@ "contractsDir": "./contracts", "useDockerisedSolc": true, "compilerSettings": { - "optimizer": { - "enabled": true, - "runs": 1000000 - }, + "optimizer": { "enabled": true, "runs": 1000000 }, "outputSelection": { "*": { "*": [ @@ -20,23 +17,31 @@ } }, "contracts": [ - "Exchange", - "IAssetProxyDispatcher", - "IExchange", - "IExchangeCore", - "IMatchOrders", - "ISignatureValidator", - "ITransactions", - "IValidator", - "IWallet", - "IWrapperFunctions", - "TestAssetProxyDispatcher", - "TestExchangeInternals", - "TestSignatureValidator", - "TestStaticCallReceiver", - "ExchangeWrapper", - "Validator", - "Wallet", - "Whitelist" + "@0x/contracts-asset-proxy/contracts/src/ERC20Proxy.sol", + "@0x/contracts-asset-proxy/contracts/src/ERC721Proxy.sol", + "@0x/contracts-asset-proxy/contracts/src/MultiAssetProxy.sol", + "@0x/contracts-erc20/contracts/test/DummyERC20Token.sol", + "@0x/contracts-erc20/contracts/test/DummyNoReturnERC20Token.sol", + "@0x/contracts-erc20/contracts/test/ReentrantERC20Token.sol", + "@0x/contracts-erc721/contracts/test/DummyERC721Token.sol", + "@0x/contracts-exchange-libs/contracts/test/TestLibs.sol", + "examples/ExchangeWrapper.sol", + "examples/Validator.sol", + "examples/Wallet.sol", + "examples/Whitelist.sol", + "src/Exchange.sol", + "src/interfaces/IAssetProxyDispatcher.sol", + "src/interfaces/IExchange.sol", + "src/interfaces/IExchangeCore.sol", + "src/interfaces/IMatchOrders.sol", + "src/interfaces/ISignatureValidator.sol", + "src/interfaces/ITransactions.sol", + "src/interfaces/IValidator.sol", + "src/interfaces/IWallet.sol", + "src/interfaces/IWrapperFunctions.sol", + "test/TestAssetProxyDispatcher.sol", + "test/TestExchangeInternals.sol", + "test/TestSignatureValidator.sol", + "test/TestStaticCallReceiver.sol" ] } diff --git a/contracts/exchange/package.json b/contracts/exchange/package.json index ca4b1fd00..6c3781b54 100644 --- a/contracts/exchange/package.json +++ b/contracts/exchange/package.json @@ -29,10 +29,12 @@ "profiler:report:html": "istanbul report html && open coverage/index.html", "coverage:report:lcov": "istanbul report lcov", "test:circleci": "yarn test", + "contracts:gen": "contracts-gen", "lint-contracts": "solhint -c ../.solhint.json contracts/**/**/**/**/*.sol" }, "config": { - "abis": "generated-artifacts/@(ERC20Proxy|ERC721Proxy|Exchange|IAssetProxyDispatcher|IExchange|IExchangeCore|IMatchOrders|ISignatureValidator|ITransactions|IWrapperFunctions|IValidator|IWallet|MixinAuthorizable|MultiAssetProxy|TestSignatureValidator|TestAssetProxyDispatcher|TestExchangeInternals|TestStaticCallReceiver|ExchangeWrapper|Validator|Wallet|Whitelist).json" + "abis": "./generated-artifacts/@(DummyERC20Token|DummyERC721Token|DummyNoReturnERC20Token|ERC20Proxy|ERC721Proxy|Exchange|ExchangeWrapper|IAssetProxyDispatcher|IExchange|IExchangeCore|IMatchOrders|ISignatureValidator|ITransactions|IValidator|IWallet|IWrapperFunctions|MultiAssetProxy|ReentrantERC20Token|TestAssetProxyDispatcher|TestExchangeInternals|TestLibs|TestSignatureValidator|TestStaticCallReceiver|Validator|Wallet|Whitelist).json", + "abis:comment": "This list is auto-generated by contracts-gen. Don't edit manually." }, "repository": { "type": "git", @@ -44,6 +46,7 @@ }, "homepage": "https://github.com/0xProject/0x-monorepo/contracts/protocol/README.md", "devDependencies": { + "@0x/contracts-gen": "^1.0.0", "@0x/abi-gen": "^2.0.1", "@0x/dev-utils": "^2.0.1", "@0x/sol-compiler": "^3.0.1", @@ -77,7 +80,7 @@ "@0x/web3-wrapper": "^4.0.1", "ethereum-types": "^2.0.0", "ethereumjs-util": "^5.1.1", - "lodash": "^4.17.5" + "lodash": "^4.17.11" }, "publishConfig": { "access": "public" diff --git a/contracts/exchange/src/artifacts.ts b/contracts/exchange/src/artifacts.ts new file mode 100644 index 000000000..efdacd376 --- /dev/null +++ b/contracts/exchange/src/artifacts.ts @@ -0,0 +1,61 @@ +/* + * ----------------------------------------------------------------------------- + * Warning: This file is auto-generated by contracts-gen. Don't edit manually. + * ----------------------------------------------------------------------------- + */ +import { ContractArtifact } from 'ethereum-types'; + +import * as DummyERC20Token from '../generated-artifacts/DummyERC20Token.json'; +import * as DummyERC721Token from '../generated-artifacts/DummyERC721Token.json'; +import * as DummyNoReturnERC20Token from '../generated-artifacts/DummyNoReturnERC20Token.json'; +import * as ERC20Proxy from '../generated-artifacts/ERC20Proxy.json'; +import * as ERC721Proxy from '../generated-artifacts/ERC721Proxy.json'; +import * as Exchange from '../generated-artifacts/Exchange.json'; +import * as ExchangeWrapper from '../generated-artifacts/ExchangeWrapper.json'; +import * as IAssetProxyDispatcher from '../generated-artifacts/IAssetProxyDispatcher.json'; +import * as IExchange from '../generated-artifacts/IExchange.json'; +import * as IExchangeCore from '../generated-artifacts/IExchangeCore.json'; +import * as IMatchOrders from '../generated-artifacts/IMatchOrders.json'; +import * as ISignatureValidator from '../generated-artifacts/ISignatureValidator.json'; +import * as ITransactions from '../generated-artifacts/ITransactions.json'; +import * as IValidator from '../generated-artifacts/IValidator.json'; +import * as IWallet from '../generated-artifacts/IWallet.json'; +import * as IWrapperFunctions from '../generated-artifacts/IWrapperFunctions.json'; +import * as MultiAssetProxy from '../generated-artifacts/MultiAssetProxy.json'; +import * as ReentrantERC20Token from '../generated-artifacts/ReentrantERC20Token.json'; +import * as TestAssetProxyDispatcher from '../generated-artifacts/TestAssetProxyDispatcher.json'; +import * as TestExchangeInternals from '../generated-artifacts/TestExchangeInternals.json'; +import * as TestLibs from '../generated-artifacts/TestLibs.json'; +import * as TestSignatureValidator from '../generated-artifacts/TestSignatureValidator.json'; +import * as TestStaticCallReceiver from '../generated-artifacts/TestStaticCallReceiver.json'; +import * as Validator from '../generated-artifacts/Validator.json'; +import * as Wallet from '../generated-artifacts/Wallet.json'; +import * as Whitelist from '../generated-artifacts/Whitelist.json'; +export const artifacts = { + ERC20Proxy: ERC20Proxy as ContractArtifact, + ERC721Proxy: ERC721Proxy as ContractArtifact, + MultiAssetProxy: MultiAssetProxy as ContractArtifact, + DummyERC20Token: DummyERC20Token as ContractArtifact, + DummyNoReturnERC20Token: DummyNoReturnERC20Token as ContractArtifact, + ReentrantERC20Token: ReentrantERC20Token as ContractArtifact, + DummyERC721Token: DummyERC721Token as ContractArtifact, + TestLibs: TestLibs as ContractArtifact, + ExchangeWrapper: ExchangeWrapper as ContractArtifact, + Validator: Validator as ContractArtifact, + Wallet: Wallet as ContractArtifact, + Whitelist: Whitelist as ContractArtifact, + Exchange: Exchange as ContractArtifact, + IAssetProxyDispatcher: IAssetProxyDispatcher as ContractArtifact, + IExchange: IExchange as ContractArtifact, + IExchangeCore: IExchangeCore as ContractArtifact, + IMatchOrders: IMatchOrders as ContractArtifact, + ISignatureValidator: ISignatureValidator as ContractArtifact, + ITransactions: ITransactions as ContractArtifact, + IValidator: IValidator as ContractArtifact, + IWallet: IWallet as ContractArtifact, + IWrapperFunctions: IWrapperFunctions as ContractArtifact, + TestAssetProxyDispatcher: TestAssetProxyDispatcher as ContractArtifact, + TestExchangeInternals: TestExchangeInternals as ContractArtifact, + TestSignatureValidator: TestSignatureValidator as ContractArtifact, + TestStaticCallReceiver: TestStaticCallReceiver as ContractArtifact, +}; diff --git a/contracts/exchange/src/artifacts/index.ts b/contracts/exchange/src/artifacts/index.ts deleted file mode 100644 index 798ff17ab..000000000 --- a/contracts/exchange/src/artifacts/index.ts +++ /dev/null @@ -1,41 +0,0 @@ -import { ContractArtifact } from 'ethereum-types'; - -import * as Exchange from '../../generated-artifacts/Exchange.json'; -import * as ExchangeWrapper from '../../generated-artifacts/ExchangeWrapper.json'; -import * as IAssetProxyDispatcher from '../../generated-artifacts/IAssetProxyDispatcher.json'; -import * as IExchange from '../../generated-artifacts/IExchange.json'; -import * as IExchangeCore from '../../generated-artifacts/IExchangeCore.json'; -import * as IMatchOrders from '../../generated-artifacts/IMatchOrders.json'; -import * as ISignatureValidator from '../../generated-artifacts/ISignatureValidator.json'; -import * as ITransactions from '../../generated-artifacts/ITransactions.json'; -import * as IValidator from '../../generated-artifacts/IValidator.json'; -import * as IWallet from '../../generated-artifacts/IWallet.json'; -import * as IWrapperFunctions from '../../generated-artifacts/IWrapperFunctions.json'; -import * as TestAssetProxyDispatcher from '../../generated-artifacts/TestAssetProxyDispatcher.json'; -import * as TestExchangeInternals from '../../generated-artifacts/TestExchangeInternals.json'; -import * as TestSignatureValidator from '../../generated-artifacts/TestSignatureValidator.json'; -import * as TestStaticCallReceiver from '../../generated-artifacts/TestStaticCallReceiver.json'; -import * as Validator from '../../generated-artifacts/Validator.json'; -import * as Wallet from '../../generated-artifacts/Wallet.json'; -import * as Whitelist from '../../generated-artifacts/Whitelist.json'; - -export const artifacts = { - Exchange: Exchange as ContractArtifact, - TestAssetProxyDispatcher: TestAssetProxyDispatcher as ContractArtifact, - TestExchangeInternals: TestExchangeInternals as ContractArtifact, - TestSignatureValidator: TestSignatureValidator as ContractArtifact, - TestStaticCallReceiver: TestStaticCallReceiver as ContractArtifact, - IExchange: IExchange as ContractArtifact, - IExchangeCore: IExchangeCore as ContractArtifact, - IMatchOrders: IMatchOrders as ContractArtifact, - ISignatureValidator: ISignatureValidator as ContractArtifact, - ITransactions: ITransactions as ContractArtifact, - IWrapperFunctions: IWrapperFunctions as ContractArtifact, - IAssetProxyDispatcher: IAssetProxyDispatcher as ContractArtifact, - IValidator: IValidator as ContractArtifact, - IWallet: IWallet as ContractArtifact, - ExchangeWrapper: ExchangeWrapper as ContractArtifact, - Validator: Validator as ContractArtifact, - Wallet: Wallet as ContractArtifact, - Whitelist: Whitelist as ContractArtifact, -}; diff --git a/contracts/exchange/src/wrappers.ts b/contracts/exchange/src/wrappers.ts new file mode 100644 index 000000000..1c1d7fdb4 --- /dev/null +++ b/contracts/exchange/src/wrappers.ts @@ -0,0 +1,31 @@ +/* + * ----------------------------------------------------------------------------- + * Warning: This file is auto-generated by contracts-gen. Don't edit manually. + * ----------------------------------------------------------------------------- + */ +export * from '../generated-wrappers/dummy_erc20_token'; +export * from '../generated-wrappers/dummy_erc721_token'; +export * from '../generated-wrappers/dummy_no_return_erc20_token'; +export * from '../generated-wrappers/erc20_proxy'; +export * from '../generated-wrappers/erc721_proxy'; +export * from '../generated-wrappers/exchange'; +export * from '../generated-wrappers/exchange_wrapper'; +export * from '../generated-wrappers/i_asset_proxy_dispatcher'; +export * from '../generated-wrappers/i_exchange'; +export * from '../generated-wrappers/i_exchange_core'; +export * from '../generated-wrappers/i_match_orders'; +export * from '../generated-wrappers/i_signature_validator'; +export * from '../generated-wrappers/i_transactions'; +export * from '../generated-wrappers/i_validator'; +export * from '../generated-wrappers/i_wallet'; +export * from '../generated-wrappers/i_wrapper_functions'; +export * from '../generated-wrappers/multi_asset_proxy'; +export * from '../generated-wrappers/reentrant_erc20_token'; +export * from '../generated-wrappers/test_asset_proxy_dispatcher'; +export * from '../generated-wrappers/test_exchange_internals'; +export * from '../generated-wrappers/test_libs'; +export * from '../generated-wrappers/test_signature_validator'; +export * from '../generated-wrappers/test_static_call_receiver'; +export * from '../generated-wrappers/validator'; +export * from '../generated-wrappers/wallet'; +export * from '../generated-wrappers/whitelist'; diff --git a/contracts/exchange/src/wrappers/index.ts b/contracts/exchange/src/wrappers/index.ts deleted file mode 100644 index 86e939b56..000000000 --- a/contracts/exchange/src/wrappers/index.ts +++ /dev/null @@ -1,18 +0,0 @@ -export * from '../../generated-wrappers/exchange'; -export * from '../../generated-wrappers/test_asset_proxy_dispatcher'; -export * from '../../generated-wrappers/test_exchange_internals'; -export * from '../../generated-wrappers/test_signature_validator'; -export * from '../../generated-wrappers/test_static_call_receiver'; -export * from '../../generated-wrappers/i_asset_proxy_dispatcher'; -export * from '../../generated-wrappers/i_exchange'; -export * from '../../generated-wrappers/i_exchange_core'; -export * from '../../generated-wrappers/i_match_orders'; -export * from '../../generated-wrappers/i_signature_validator'; -export * from '../../generated-wrappers/i_transactions'; -export * from '../../generated-wrappers/i_wrapper_functions'; -export * from '../../generated-wrappers/i_validator'; -export * from '../../generated-wrappers/i_wallet'; -export * from '../../generated-wrappers/exchange_wrapper'; -export * from '../../generated-wrappers/validator'; -export * from '../../generated-wrappers/wallet'; -export * from '../../generated-wrappers/whitelist'; diff --git a/contracts/exchange/test/core.ts b/contracts/exchange/test/core.ts index 74161cc73..7e61ef7ac 100644 --- a/contracts/exchange/test/core.ts +++ b/contracts/exchange/test/core.ts @@ -1,19 +1,4 @@ -import { - artifacts as proxyArtifacts, - ERC20ProxyContract, - ERC20Wrapper, - ERC721ProxyContract, - ERC721Wrapper, - MultiAssetProxyContract, -} from '@0x/contracts-asset-proxy'; -import { - artifacts as erc20Artifacts, - DummyERC20TokenContract, - DummyERC20TokenTransferEventArgs, - DummyNoReturnERC20TokenContract, - ReentrantERC20TokenContract, -} from '@0x/contracts-erc20'; -import { DummyERC721TokenContract } from '@0x/contracts-erc721'; +import { ERC20Wrapper, ERC721Wrapper } from '@0x/contracts-asset-proxy'; import { chaiSetup, constants, @@ -39,9 +24,17 @@ import * as _ from 'lodash'; import { artifacts, + DummyERC20TokenContract, + DummyERC20TokenTransferEventArgs, + DummyERC721TokenContract, + DummyNoReturnERC20TokenContract, + ERC20ProxyContract, + ERC721ProxyContract, ExchangeCancelEventArgs, ExchangeContract, ExchangeWrapper, + MultiAssetProxyContract, + ReentrantERC20TokenContract, TestStaticCallReceiverContract, } from '../src'; @@ -98,7 +91,7 @@ describe('Exchange core', () => { erc20Proxy = await erc20Wrapper.deployProxyAsync(); erc721Proxy = await erc721Wrapper.deployProxyAsync(); multiAssetProxy = await MultiAssetProxyContract.deployFrom0xArtifactAsync( - proxyArtifacts.MultiAssetProxy, + artifacts.MultiAssetProxy, provider, txDefaults, ); @@ -120,7 +113,7 @@ describe('Exchange core', () => { txDefaults, ); reentrantErc20Token = await ReentrantERC20TokenContract.deployFrom0xArtifactAsync( - erc20Artifacts.ReentrantERC20Token, + artifacts.ReentrantERC20Token, provider, txDefaults, exchange.address, @@ -345,7 +338,7 @@ describe('Exchange core', () => { describe('Testing exchange of ERC20 tokens with no return values', () => { before(async () => { noReturnErc20Token = await DummyNoReturnERC20TokenContract.deployFrom0xArtifactAsync( - erc20Artifacts.DummyNoReturnERC20Token, + artifacts.DummyNoReturnERC20Token, provider, txDefaults, constants.DUMMY_TOKEN_NAME, diff --git a/contracts/exchange/test/dispatcher.ts b/contracts/exchange/test/dispatcher.ts index a25755936..8263b0402 100644 --- a/contracts/exchange/test/dispatcher.ts +++ b/contracts/exchange/test/dispatcher.ts @@ -1,11 +1,4 @@ -import { - artifacts as proxyArtifacts, - ERC20ProxyContract, - ERC20Wrapper, - ERC721ProxyContract, - ERC721Wrapper, -} from '@0x/contracts-asset-proxy'; -import { DummyERC20TokenContract } from '@0x/contracts-erc20'; +import { ERC20Wrapper, ERC721Wrapper } from '@0x/contracts-asset-proxy'; import { chaiSetup, constants, @@ -25,6 +18,9 @@ import * as _ from 'lodash'; import { artifacts, + DummyERC20TokenContract, + ERC20ProxyContract, + ERC721ProxyContract, TestAssetProxyDispatcherAssetProxyRegisteredEventArgs, TestAssetProxyDispatcherContract, } from '../src'; @@ -131,7 +127,7 @@ describe('AssetProxyDispatcher', () => { expect(proxyAddress).to.be.equal(erc20Proxy.address); // Deploy a new version of the ERC20 Transfer Proxy contract const newErc20TransferProxy = await ERC20ProxyContract.deployFrom0xArtifactAsync( - proxyArtifacts.ERC20Proxy, + artifacts.ERC20Proxy, provider, txDefaults, ); diff --git a/contracts/exchange/test/match_orders.ts b/contracts/exchange/test/match_orders.ts index d17025ddd..98fea67ea 100644 --- a/contracts/exchange/test/match_orders.ts +++ b/contracts/exchange/test/match_orders.ts @@ -1,6 +1,4 @@ -import { ERC20ProxyContract, ERC20Wrapper, ERC721ProxyContract, ERC721Wrapper } from '@0x/contracts-asset-proxy'; -import { artifacts as erc20Artifacts, DummyERC20TokenContract, ReentrantERC20TokenContract } from '@0x/contracts-erc20'; -import { DummyERC721TokenContract } from '@0x/contracts-erc721'; +import { ERC20Wrapper, ERC721Wrapper } from '@0x/contracts-asset-proxy'; import { chaiSetup, constants, @@ -20,7 +18,18 @@ import { Web3Wrapper } from '@0x/web3-wrapper'; import * as chai from 'chai'; import * as _ from 'lodash'; -import { artifacts, ExchangeContract, ExchangeWrapper, MatchOrderTester, TestExchangeInternalsContract } from '../src'; +import { + artifacts, + DummyERC20TokenContract, + DummyERC721TokenContract, + ERC20ProxyContract, + ERC721ProxyContract, + ExchangeContract, + ExchangeWrapper, + MatchOrderTester, + ReentrantERC20TokenContract, + TestExchangeInternalsContract, +} from '../src'; const blockchainLifecycle = new BlockchainLifecycle(web3Wrapper); chaiSetup.configure(); @@ -131,7 +140,7 @@ describe('matchOrders', () => { ); reentrantErc20Token = await ReentrantERC20TokenContract.deployFrom0xArtifactAsync( - erc20Artifacts.ReentrantERC20Token, + artifacts.ReentrantERC20Token, provider, txDefaults, exchange.address, diff --git a/contracts/exchange/test/signature_validator.ts b/contracts/exchange/test/signature_validator.ts index 89eac4ddb..33510e50c 100644 --- a/contracts/exchange/test/signature_validator.ts +++ b/contracts/exchange/test/signature_validator.ts @@ -1,4 +1,3 @@ -import { artifacts as erc20Artifacts } from '@0x/contracts-erc20'; import { addressUtils, chaiSetup, @@ -78,7 +77,7 @@ describe('MixinSignatureValidator', () => { provider, txDefaults, ); - signatureValidatorLogDecoder = new LogDecoder(web3Wrapper, { ...artifacts, ...erc20Artifacts }); + signatureValidatorLogDecoder = new LogDecoder(web3Wrapper, artifacts); await web3Wrapper.awaitTransactionSuccessAsync( await signatureValidator.setSignatureValidatorApproval.sendTransactionAsync(testValidator.address, true, { from: signerAddress, diff --git a/contracts/exchange/test/utils/exchange_wrapper.ts b/contracts/exchange/test/utils/exchange_wrapper.ts index 03c37c4a9..535e3bcf2 100644 --- a/contracts/exchange/test/utils/exchange_wrapper.ts +++ b/contracts/exchange/test/utils/exchange_wrapper.ts @@ -1,5 +1,3 @@ -import { artifacts as erc20Artifacts } from '@0x/contracts-erc20'; -import { artifacts as erc721Artifacts } from '@0x/contracts-erc721'; import { FillResults, formatters, LogDecoder, OrderInfo, orderUtils } from '@0x/contracts-test-utils'; import { SignedOrder, SignedZeroExTransaction } from '@0x/types'; import { AbiEncoder, BigNumber } from '@0x/utils'; @@ -18,7 +16,7 @@ export class ExchangeWrapper { constructor(exchangeContract: ExchangeContract, provider: Provider) { this._exchange = exchangeContract; this._web3Wrapper = new Web3Wrapper(provider); - this._logDecoder = new LogDecoder(this._web3Wrapper, { ...artifacts, ...erc20Artifacts, ...erc721Artifacts }); + this._logDecoder = new LogDecoder(this._web3Wrapper, artifacts); } public async fillOrderAsync( signedOrder: SignedOrder, diff --git a/contracts/exchange/test/utils/fill_order_combinatorial_utils.ts b/contracts/exchange/test/utils/fill_order_combinatorial_utils.ts index 26b168909..00ca8a9fc 100644 --- a/contracts/exchange/test/utils/fill_order_combinatorial_utils.ts +++ b/contracts/exchange/test/utils/fill_order_combinatorial_utils.ts @@ -1,5 +1,4 @@ import { ERC20Wrapper, ERC721Wrapper } from '@0x/contracts-asset-proxy'; -import { artifacts as libsArtifacts, TestLibsContract } from '@0x/contracts-exchange-libs'; import { AllowanceAmountScenario, AssetDataScenario, @@ -33,7 +32,7 @@ import { LogWithDecodedArgs, Provider, TxData } from 'ethereum-types'; import * as _ from 'lodash'; import 'make-promises-safe'; -import { artifacts, ExchangeContract, ExchangeFillEventArgs } from '../../src'; +import { artifacts, ExchangeContract, ExchangeFillEventArgs, TestLibsContract } from '../../src'; import { AssetWrapper } from './asset_wrapper'; import { ExchangeWrapper } from './exchange_wrapper'; @@ -129,11 +128,7 @@ export async function fillOrderCombinatorialUtilsFactoryAsync( exchangeContract.address, ); - const testLibsContract = await TestLibsContract.deployFrom0xArtifactAsync( - libsArtifacts.TestLibs, - provider, - txDefaults, - ); + const testLibsContract = await TestLibsContract.deployFrom0xArtifactAsync(artifacts.TestLibs, provider, txDefaults); const fillOrderCombinatorialUtils = new FillOrderCombinatorialUtils( orderFactory, diff --git a/contracts/exchange/test/wrapper.ts b/contracts/exchange/test/wrapper.ts index 62a0d426f..5476ac99d 100644 --- a/contracts/exchange/test/wrapper.ts +++ b/contracts/exchange/test/wrapper.ts @@ -1,6 +1,4 @@ -import { ERC20ProxyContract, ERC20Wrapper, ERC721ProxyContract, ERC721Wrapper } from '@0x/contracts-asset-proxy'; -import { artifacts as erc20Artifacts, DummyERC20TokenContract, ReentrantERC20TokenContract } from '@0x/contracts-erc20'; -import { DummyERC721TokenContract } from '@0x/contracts-erc721'; +import { ERC20Wrapper, ERC721Wrapper } from '@0x/contracts-asset-proxy'; import { chaiSetup, constants, @@ -22,7 +20,16 @@ import { Web3Wrapper } from '@0x/web3-wrapper'; import * as chai from 'chai'; import * as _ from 'lodash'; -import { artifacts, ExchangeContract, ExchangeWrapper } from '../src'; +import { + artifacts, + DummyERC20TokenContract, + DummyERC721TokenContract, + ERC20ProxyContract, + ERC721ProxyContract, + ExchangeContract, + ExchangeWrapper, + ReentrantERC20TokenContract, +} from '../src'; chaiSetup.configure(); const expect = chai.expect; @@ -107,7 +114,7 @@ describe('Exchange wrappers', () => { ); reentrantErc20Token = await ReentrantERC20TokenContract.deployFrom0xArtifactAsync( - erc20Artifacts.ReentrantERC20Token, + artifacts.ReentrantERC20Token, provider, txDefaults, exchange.address, diff --git a/contracts/exchange/tsconfig.json b/contracts/exchange/tsconfig.json index b0fcd1771..35ca3d933 100644 --- a/contracts/exchange/tsconfig.json +++ b/contracts/exchange/tsconfig.json @@ -1,30 +1,34 @@ { "extends": "../../tsconfig", - "compilerOptions": { - "outDir": "lib", - "rootDir": ".", - "resolveJsonModule": true - }, + "compilerOptions": { "outDir": "lib", "rootDir": ".", "resolveJsonModule": true }, "include": ["./src/**/*", "./test/**/*", "./generated-wrappers/**/*"], "files": [ - "./generated-artifacts/IAssetProxyDispatcher.json", - "./generated-artifacts/IExchange.json", - "./generated-artifacts/IExchangeCore.json", - "./generated-artifacts/IMatchOrders.json", - "./generated-artifacts/ISignatureValidator.json", - "./generated-artifacts/ITransactions.json", - "./generated-artifacts/IValidator.json", - "./generated-artifacts/IWallet.json", - "./generated-artifacts/IWrapperFunctions.json", - "./generated-artifacts/Exchange.json", - "./generated-artifacts/TestAssetProxyDispatcher.json", - "./generated-artifacts/TestExchangeInternals.json", - "./generated-artifacts/TestSignatureValidator.json", - "./generated-artifacts/TestStaticCallReceiver.json", - "./generated-artifacts/ExchangeWrapper.json", - "./generated-artifacts/Validator.json", - "./generated-artifacts/Wallet.json", - "./generated-artifacts/Whitelist.json" + "generated-artifacts/DummyERC20Token.json", + "generated-artifacts/DummyERC721Token.json", + "generated-artifacts/DummyNoReturnERC20Token.json", + "generated-artifacts/ERC20Proxy.json", + "generated-artifacts/ERC721Proxy.json", + "generated-artifacts/Exchange.json", + "generated-artifacts/ExchangeWrapper.json", + "generated-artifacts/IAssetProxyDispatcher.json", + "generated-artifacts/IExchange.json", + "generated-artifacts/IExchangeCore.json", + "generated-artifacts/IMatchOrders.json", + "generated-artifacts/ISignatureValidator.json", + "generated-artifacts/ITransactions.json", + "generated-artifacts/IValidator.json", + "generated-artifacts/IWallet.json", + "generated-artifacts/IWrapperFunctions.json", + "generated-artifacts/MultiAssetProxy.json", + "generated-artifacts/ReentrantERC20Token.json", + "generated-artifacts/TestAssetProxyDispatcher.json", + "generated-artifacts/TestExchangeInternals.json", + "generated-artifacts/TestLibs.json", + "generated-artifacts/TestSignatureValidator.json", + "generated-artifacts/TestStaticCallReceiver.json", + "generated-artifacts/Validator.json", + "generated-artifacts/Wallet.json", + "generated-artifacts/Whitelist.json" ], "exclude": ["./deploy/solc/solc_bin"] } diff --git a/contracts/extensions/compiler.json b/contracts/extensions/compiler.json index 91e0bd429..41fd582ad 100644 --- a/contracts/extensions/compiler.json +++ b/contracts/extensions/compiler.json @@ -3,10 +3,7 @@ "contractsDir": "./contracts", "useDockerisedSolc": true, "compilerSettings": { - "optimizer": { - "enabled": true, - "runs": 1000000 - }, + "optimizer": { "enabled": true, "runs": 1000000 }, "outputSelection": { "*": { "*": [ @@ -19,5 +16,17 @@ } } }, - "contracts": ["BalanceThresholdFilter", "DutchAuction", "OrderMatcher", "OrderValidator"] + "contracts": [ + "@0x/contracts-asset-proxy/contracts/src/ERC20Proxy.sol", + "@0x/contracts-asset-proxy/contracts/src/ERC721Proxy.sol", + "@0x/contracts-erc20/contracts/src/WETH9.sol", + "@0x/contracts-erc20/contracts/test/DummyERC20Token.sol", + "@0x/contracts-erc721/contracts/test/DummyERC721Token.sol", + "@0x/contracts-exchange/contracts/examples/ExchangeWrapper.sol", + "@0x/contracts-exchange/contracts/src/Exchange.sol", + "src/BalanceThresholdFilter/BalanceThresholdFilter.sol", + "src/DutchAuction/DutchAuction.sol", + "src/OrderMatcher/OrderMatcher.sol", + "src/OrderValidator/OrderValidator.sol" + ] } diff --git a/contracts/extensions/package.json b/contracts/extensions/package.json index 0a8cf7fc0..118926eb5 100644 --- a/contracts/extensions/package.json +++ b/contracts/extensions/package.json @@ -29,10 +29,12 @@ "profiler:report:html": "istanbul report html && open coverage/index.html", "coverage:report:lcov": "istanbul report lcov", "test:circleci": "yarn test", + "contracts:gen": "contracts-gen", "lint-contracts": "solhint -c ../.solhint.json contracts/**/**/**/**/*.sol" }, "config": { - "abis": "generated-artifacts/@(BalanceThresholdFilter|DutchAuction|OrderMatcher|OrderValidator).json" + "abis": "./generated-artifacts/@(BalanceThresholdFilter|DummyERC20Token|DummyERC721Token|DutchAuction|ERC20Proxy|ERC721Proxy|Exchange|ExchangeWrapper|OrderMatcher|OrderValidator|WETH9).json", + "abis:comment": "This list is auto-generated by contracts-gen. Don't edit manually." }, "repository": { "type": "git", @@ -44,6 +46,7 @@ }, "homepage": "https://github.com/0xProject/0x-monorepo/contracts/extensions/README.md", "devDependencies": { + "@0x/contracts-gen": "^1.0.0", "@0x/abi-gen": "^2.0.1", "@0x/contract-wrappers": "^7.0.1", "@0x/contracts-test-utils": "^3.0.2", @@ -78,7 +81,7 @@ "@0x/utils": "^4.0.2", "@0x/web3-wrapper": "^4.0.1", "ethereum-types": "^2.0.0", - "lodash": "^4.17.5" + "lodash": "^4.17.11" }, "publishConfig": { "access": "public" diff --git a/contracts/extensions/src/artifacts.ts b/contracts/extensions/src/artifacts.ts new file mode 100644 index 000000000..efa5c859c --- /dev/null +++ b/contracts/extensions/src/artifacts.ts @@ -0,0 +1,31 @@ +/* + * ----------------------------------------------------------------------------- + * Warning: This file is auto-generated by contracts-gen. Don't edit manually. + * ----------------------------------------------------------------------------- + */ +import { ContractArtifact } from 'ethereum-types'; + +import * as BalanceThresholdFilter from '../generated-artifacts/BalanceThresholdFilter.json'; +import * as DummyERC20Token from '../generated-artifacts/DummyERC20Token.json'; +import * as DummyERC721Token from '../generated-artifacts/DummyERC721Token.json'; +import * as DutchAuction from '../generated-artifacts/DutchAuction.json'; +import * as ERC20Proxy from '../generated-artifacts/ERC20Proxy.json'; +import * as ERC721Proxy from '../generated-artifacts/ERC721Proxy.json'; +import * as Exchange from '../generated-artifacts/Exchange.json'; +import * as ExchangeWrapper from '../generated-artifacts/ExchangeWrapper.json'; +import * as OrderMatcher from '../generated-artifacts/OrderMatcher.json'; +import * as OrderValidator from '../generated-artifacts/OrderValidator.json'; +import * as WETH9 from '../generated-artifacts/WETH9.json'; +export const artifacts = { + ERC20Proxy: ERC20Proxy as ContractArtifact, + ERC721Proxy: ERC721Proxy as ContractArtifact, + WETH9: WETH9 as ContractArtifact, + DummyERC20Token: DummyERC20Token as ContractArtifact, + DummyERC721Token: DummyERC721Token as ContractArtifact, + ExchangeWrapper: ExchangeWrapper as ContractArtifact, + Exchange: Exchange as ContractArtifact, + BalanceThresholdFilter: BalanceThresholdFilter as ContractArtifact, + DutchAuction: DutchAuction as ContractArtifact, + OrderMatcher: OrderMatcher as ContractArtifact, + OrderValidator: OrderValidator as ContractArtifact, +}; diff --git a/contracts/extensions/src/artifacts/index.ts b/contracts/extensions/src/artifacts/index.ts deleted file mode 100644 index f2aee4908..000000000 --- a/contracts/extensions/src/artifacts/index.ts +++ /dev/null @@ -1,13 +0,0 @@ -import { ContractArtifact } from 'ethereum-types'; - -import * as BalanceThresholdFilter from '../../generated-artifacts/BalanceThresholdFilter.json'; -import * as DutchAuction from '../../generated-artifacts/DutchAuction.json'; -import * as OrderMatcher from '../../generated-artifacts/OrderMatcher.json'; -import * as OrderValidator from '../../generated-artifacts/OrderValidator.json'; - -export const artifacts = { - BalanceThresholdFilter: BalanceThresholdFilter as ContractArtifact, - DutchAuction: DutchAuction as ContractArtifact, - OrderMatcher: OrderMatcher as ContractArtifact, - OrderValidator: OrderValidator as ContractArtifact, -}; diff --git a/contracts/extensions/src/wrappers.ts b/contracts/extensions/src/wrappers.ts new file mode 100644 index 000000000..1a67d2ee3 --- /dev/null +++ b/contracts/extensions/src/wrappers.ts @@ -0,0 +1,16 @@ +/* + * ----------------------------------------------------------------------------- + * Warning: This file is auto-generated by contracts-gen. Don't edit manually. + * ----------------------------------------------------------------------------- + */ +export * from '../generated-wrappers/balance_threshold_filter'; +export * from '../generated-wrappers/dummy_erc20_token'; +export * from '../generated-wrappers/dummy_erc721_token'; +export * from '../generated-wrappers/dutch_auction'; +export * from '../generated-wrappers/erc20_proxy'; +export * from '../generated-wrappers/erc721_proxy'; +export * from '../generated-wrappers/exchange'; +export * from '../generated-wrappers/exchange_wrapper'; +export * from '../generated-wrappers/order_matcher'; +export * from '../generated-wrappers/order_validator'; +export * from '../generated-wrappers/weth9'; diff --git a/contracts/extensions/src/wrappers/index.ts b/contracts/extensions/src/wrappers/index.ts deleted file mode 100644 index eed198524..000000000 --- a/contracts/extensions/src/wrappers/index.ts +++ /dev/null @@ -1,4 +0,0 @@ -export * from '../../generated-wrappers/balance_threshold_filter'; -export * from '../../generated-wrappers/dutch_auction'; -export * from '../../generated-wrappers/order_matcher'; -export * from '../../generated-wrappers/order_validator'; diff --git a/contracts/extensions/test/balance_threshold_filter.ts b/contracts/extensions/test/balance_threshold_filter.ts index c79a72f5a..34eb319de 100644 --- a/contracts/extensions/test/balance_threshold_filter.ts +++ b/contracts/extensions/test/balance_threshold_filter.ts @@ -1,3 +1,4 @@ +import { ExchangeWrapper } from '@0x/contracts-exchange'; import { BlockchainLifecycle } from '@0x/dev-utils'; import { assetDataUtils } from '@0x/order-utils'; import { Order, RevertReason, SignedOrder } from '@0x/types'; @@ -9,7 +10,6 @@ import * as _ from 'lodash'; import { ERC20Wrapper, ERC721Wrapper } from '@0x/contracts-asset-proxy'; import { DummyERC20TokenContract } from '@0x/contracts-erc20'; -import { artifacts as exchangeArtifacts, ExchangeContract, ExchangeWrapper } from '@0x/contracts-exchange'; import { chaiSetup, constants, @@ -24,7 +24,7 @@ import { web3Wrapper, } from '@0x/contracts-test-utils'; -import { artifacts, BalanceThresholdFilterContract, BalanceThresholdWrapper } from '../src'; +import { artifacts, BalanceThresholdFilterContract, BalanceThresholdWrapper, ExchangeContract } from '../src'; chaiSetup.configure(); const expect = chai.expect; @@ -127,7 +127,7 @@ describe(ContractName.BalanceThresholdFilter, () => { await erc20Wrapper.setBalancesAndAllowancesAsync(); // Deploy Exchange contract exchangeInstance = await ExchangeContract.deployFrom0xArtifactAsync( - exchangeArtifacts.Exchange, + artifacts.Exchange, provider, txDefaults, zrxAssetData, diff --git a/contracts/extensions/test/dutch_auction.ts b/contracts/extensions/test/dutch_auction.ts index 34ff25c3d..efe813ffc 100644 --- a/contracts/extensions/test/dutch_auction.ts +++ b/contracts/extensions/test/dutch_auction.ts @@ -1,8 +1,6 @@ import { DutchAuctionWrapper } from '@0x/contract-wrappers'; import { ERC20Wrapper, ERC721Wrapper } from '@0x/contracts-asset-proxy'; -import { artifacts as erc20Artifacts, DummyERC20TokenContract, WETH9Contract } from '@0x/contracts-erc20'; -import { DummyERC721TokenContract } from '@0x/contracts-erc721'; -import { artifacts as exchangeArtifacts, ExchangeContract, ExchangeWrapper } from '@0x/contracts-exchange'; +import { ExchangeWrapper } from '@0x/contracts-exchange'; import { chaiSetup, constants, @@ -23,7 +21,15 @@ import { Web3Wrapper } from '@0x/web3-wrapper'; import * as chai from 'chai'; import * as _ from 'lodash'; -import { artifacts, DutchAuctionContract, DutchAuctionTestWrapper } from '../src'; +import { + artifacts, + DummyERC20TokenContract, + DummyERC721TokenContract, + DutchAuctionContract, + DutchAuctionTestWrapper, + ExchangeContract, + WETH9Contract, +} from '../src'; chaiSetup.configure(); const expect = chai.expect; @@ -82,12 +88,12 @@ describe(ContractName.DutchAuction, () => { const erc721Balances = await erc721Wrapper.getBalancesAsync(); erc721MakerAssetIds = erc721Balances[makerAddress][erc721Token.address]; - wethContract = await WETH9Contract.deployFrom0xArtifactAsync(erc20Artifacts.WETH9, provider, txDefaults); + wethContract = await WETH9Contract.deployFrom0xArtifactAsync(artifacts.WETH9, provider, txDefaults); erc20Wrapper.addDummyTokenContract(wethContract as any); const zrxAssetData = assetDataUtils.encodeERC20AssetData(zrxToken.address); const exchangeInstance = await ExchangeContract.deployFrom0xArtifactAsync( - exchangeArtifacts.Exchange, + artifacts.Exchange, provider, txDefaults, zrxAssetData, diff --git a/contracts/extensions/test/order_matcher.ts b/contracts/extensions/test/order_matcher.ts index 0b2f9ddbb..d726de8e0 100644 --- a/contracts/extensions/test/order_matcher.ts +++ b/contracts/extensions/test/order_matcher.ts @@ -1,17 +1,5 @@ -import { - artifacts as proxyArtifacts, - ERC20ProxyContract, - ERC20Wrapper, - ERC721ProxyContract, -} from '@0x/contracts-asset-proxy'; -import { artifacts as erc20Artifacts, DummyERC20TokenContract } from '@0x/contracts-erc20'; -import { artifacts as erc721Artifacts, DummyERC721TokenContract } from '@0x/contracts-erc721'; -import { - artifacts as exchangeArtifacts, - ExchangeContract, - ExchangeFillEventArgs, - ExchangeWrapper, -} from '@0x/contracts-exchange'; +import { ERC20Wrapper } from '@0x/contracts-asset-proxy'; +import { ExchangeWrapper } from '@0x/contracts-exchange'; import { chaiSetup, constants, @@ -34,7 +22,16 @@ import * as chai from 'chai'; import { LogWithDecodedArgs } from 'ethereum-types'; import * as _ from 'lodash'; -import { artifacts, OrderMatcherContract } from '../src'; +import { + artifacts, + DummyERC20TokenContract, + DummyERC721TokenContract, + ERC20ProxyContract, + ERC721ProxyContract, + ExchangeContract, + ExchangeFillEventArgs, + OrderMatcherContract, +} from '../src'; const blockchainLifecycle = new BlockchainLifecycle(web3Wrapper); chaiSetup.configure(); @@ -104,14 +101,10 @@ describe('OrderMatcher', () => { erc20Proxy = await erc20Wrapper.deployProxyAsync(); await erc20Wrapper.setBalancesAndAllowancesAsync(); // Deploy ERC721 proxy - erc721Proxy = await ERC721ProxyContract.deployFrom0xArtifactAsync( - proxyArtifacts.ERC721Proxy, - provider, - txDefaults, - ); + erc721Proxy = await ERC721ProxyContract.deployFrom0xArtifactAsync(artifacts.ERC721Proxy, provider, txDefaults); // Depoy exchange exchange = await ExchangeContract.deployFrom0xArtifactAsync( - exchangeArtifacts.Exchange, + artifacts.Exchange, provider, txDefaults, assetDataUtils.encodeERC20AssetData(zrxToken.address), @@ -200,7 +193,7 @@ describe('OrderMatcher', () => { describe('constructor', () => { it('should revert if assetProxy is unregistered', async () => { const exchangeInstance = await ExchangeContract.deployFrom0xArtifactAsync( - exchangeArtifacts.Exchange, + artifacts.Exchange, provider, txDefaults, constants.NULL_BYTES, @@ -454,7 +447,7 @@ describe('OrderMatcher', () => { signedOrderLeft.signature, signedOrderRight.signature, ); - const logDecoder = new LogDecoder(web3Wrapper, { ...artifacts, ...erc20Artifacts, ...exchangeArtifacts }); + const logDecoder = new LogDecoder(web3Wrapper, artifacts); const txReceipt = await logDecoder.getTxWithDecodedLogsAsync( await web3Wrapper.sendTransactionAsync({ data, @@ -492,7 +485,7 @@ describe('OrderMatcher', () => { signedOrderLeft.signature, signedOrderRight.signature, ); - const logDecoder = new LogDecoder(web3Wrapper, { ...artifacts, ...erc20Artifacts, ...exchangeArtifacts }); + const logDecoder = new LogDecoder(web3Wrapper, artifacts); const txReceipt = await logDecoder.getTxWithDecodedLogsAsync( await web3Wrapper.sendTransactionAsync({ data, @@ -729,7 +722,7 @@ describe('OrderMatcher', () => { }); it('should allow owner to withdraw ERC721 tokens', async () => { const erc721Token = await DummyERC721TokenContract.deployFrom0xArtifactAsync( - erc721Artifacts.DummyERC721Token, + artifacts.DummyERC721Token, provider, txDefaults, constants.DUMMY_TOKEN_NAME, @@ -774,7 +767,7 @@ describe('OrderMatcher', () => { }); it('should be able to approve an ERC721 token by passing in allowance = 1', async () => { const erc721Token = await DummyERC721TokenContract.deployFrom0xArtifactAsync( - erc721Artifacts.DummyERC721Token, + artifacts.DummyERC721Token, provider, txDefaults, constants.DUMMY_TOKEN_NAME, @@ -791,7 +784,7 @@ describe('OrderMatcher', () => { }); it('should be able to approve an ERC721 token by passing in allowance > 1', async () => { const erc721Token = await DummyERC721TokenContract.deployFrom0xArtifactAsync( - erc721Artifacts.DummyERC721Token, + artifacts.DummyERC721Token, provider, txDefaults, constants.DUMMY_TOKEN_NAME, diff --git a/contracts/extensions/test/order_validator.ts b/contracts/extensions/test/order_validator.ts index 88dae14fb..ec31cafbc 100644 --- a/contracts/extensions/test/order_validator.ts +++ b/contracts/extensions/test/order_validator.ts @@ -1,7 +1,5 @@ -import { ERC20ProxyContract, ERC20Wrapper, ERC721ProxyContract, ERC721Wrapper } from '@0x/contracts-asset-proxy'; -import { DummyERC20TokenContract } from '@0x/contracts-erc20'; -import { DummyERC721TokenContract } from '@0x/contracts-erc721'; -import { artifacts as exchangeArtifacts, ExchangeContract, ExchangeWrapper } from '@0x/contracts-exchange'; +import { ERC20Wrapper, ERC721Wrapper } from '@0x/contracts-asset-proxy'; +import { ExchangeWrapper } from '@0x/contracts-exchange'; import { chaiSetup, constants, @@ -18,7 +16,15 @@ import { BigNumber } from '@0x/utils'; import * as chai from 'chai'; import * as _ from 'lodash'; -import { artifacts, OrderValidatorContract } from '../src'; +import { + artifacts, + DummyERC20TokenContract, + DummyERC721TokenContract, + ERC20ProxyContract, + ERC721ProxyContract, + ExchangeContract, + OrderValidatorContract, +} from '../src'; chaiSetup.configure(); const expect = chai.expect; @@ -74,7 +80,7 @@ describe('OrderValidator', () => { const zrxAssetData = assetDataUtils.encodeERC20AssetData(zrxToken.address); exchange = await ExchangeContract.deployFrom0xArtifactAsync( - exchangeArtifacts.Exchange, + artifacts.Exchange, provider, txDefaults, zrxAssetData, diff --git a/contracts/extensions/test/utils/balance_threshold_wrapper.ts b/contracts/extensions/test/utils/balance_threshold_wrapper.ts index 3178d992e..ab59c5688 100644 --- a/contracts/extensions/test/utils/balance_threshold_wrapper.ts +++ b/contracts/extensions/test/utils/balance_threshold_wrapper.ts @@ -1,6 +1,3 @@ -import { artifacts as erc20Artifacts } from '@0x/contracts-erc20'; -import { artifacts as erc721Artifacts } from '@0x/contracts-erc721'; -import { artifacts as exchangeArtifacts, ExchangeContract } from '@0x/contracts-exchange'; import { FillResults, formatters, @@ -15,8 +12,7 @@ import { Web3Wrapper } from '@0x/web3-wrapper'; import { Provider, TransactionReceiptWithDecodedLogs } from 'ethereum-types'; import * as _ from 'lodash'; -import { BalanceThresholdFilterContract } from '../../generated-wrappers/balance_threshold_filter'; -import { artifacts } from '../../src/artifacts'; +import { artifacts, BalanceThresholdFilterContract, ExchangeContract } from '../../src'; export class BalanceThresholdWrapper { private readonly _balanceThresholdFilter: BalanceThresholdFilterContract; @@ -34,12 +30,7 @@ export class BalanceThresholdWrapper { this._exchange = exchangeContract; this._signerTransactionFactory = signerTransactionFactory; this._web3Wrapper = new Web3Wrapper(provider); - this._logDecoder = new LogDecoder(this._web3Wrapper, { - ...artifacts, - ...erc20Artifacts, - ...erc721Artifacts, - ...exchangeArtifacts, - }); + this._logDecoder = new LogDecoder(this._web3Wrapper, artifacts); } public async fillOrderAsync( signedOrder: SignedOrder, @@ -227,7 +218,7 @@ export class BalanceThresholdWrapper { from: string, ): Promise<TransactionReceiptWithDecodedLogs> { const params = orderUtils.createMatchOrders(signedOrderLeft, signedOrderRight); - const data = await this._exchange.matchOrders.getABIEncodedTransactionData( + const data = this._exchange.matchOrders.getABIEncodedTransactionData( params.left, params.right, params.leftSignature, diff --git a/contracts/extensions/test/utils/dutch_auction_test_wrapper.ts b/contracts/extensions/test/utils/dutch_auction_test_wrapper.ts index 5899ffcac..06cdc21d5 100644 --- a/contracts/extensions/test/utils/dutch_auction_test_wrapper.ts +++ b/contracts/extensions/test/utils/dutch_auction_test_wrapper.ts @@ -1,6 +1,3 @@ -import { artifacts as erc20Artifacts } from '@0x/contracts-erc20'; -import { artifacts as erc721Artifacts } from '@0x/contracts-erc721'; -import { artifacts as exchangeArtifacts } from '@0x/contracts-exchange'; import { LogDecoder } from '@0x/contracts-test-utils'; import { DutchAuctionDetails, SignedOrder } from '@0x/types'; import { Web3Wrapper } from '@0x/web3-wrapper'; @@ -18,12 +15,7 @@ export class DutchAuctionTestWrapper { constructor(contractInstance: DutchAuctionContract, provider: Provider) { this._dutchAuctionContract = contractInstance; this._web3Wrapper = new Web3Wrapper(provider); - this._logDecoder = new LogDecoder(this._web3Wrapper, { - ...artifacts, - ...erc20Artifacts, - ...erc721Artifacts, - ...exchangeArtifacts, - }); + this._logDecoder = new LogDecoder(this._web3Wrapper, artifacts); } /** * Matches the buy and sell orders at an amount given the following: the current block time, the auction diff --git a/contracts/extensions/tsconfig.json b/contracts/extensions/tsconfig.json index 0c06c6902..b424bfa04 100644 --- a/contracts/extensions/tsconfig.json +++ b/contracts/extensions/tsconfig.json @@ -1,16 +1,19 @@ { "extends": "../../tsconfig", - "compilerOptions": { - "outDir": "lib", - "rootDir": ".", - "resolveJsonModule": true - }, + "compilerOptions": { "outDir": "lib", "rootDir": ".", "resolveJsonModule": true }, "include": ["./src/**/*", "./test/**/*", "./generated-wrappers/**/*"], "files": [ - "./generated-artifacts/BalanceThresholdFilter.json", - "./generated-artifacts/DutchAuction.json", - "./generated-artifacts/OrderMatcher.json", - "./generated-artifacts/OrderValidator.json" + "generated-artifacts/BalanceThresholdFilter.json", + "generated-artifacts/DummyERC20Token.json", + "generated-artifacts/DummyERC721Token.json", + "generated-artifacts/DutchAuction.json", + "generated-artifacts/ERC20Proxy.json", + "generated-artifacts/ERC721Proxy.json", + "generated-artifacts/Exchange.json", + "generated-artifacts/ExchangeWrapper.json", + "generated-artifacts/OrderMatcher.json", + "generated-artifacts/OrderValidator.json", + "generated-artifacts/WETH9.json" ], "exclude": ["./deploy/solc/solc_bin"] } diff --git a/contracts/multisig/compiler.json b/contracts/multisig/compiler.json index ae3905238..336a9ed7b 100644 --- a/contracts/multisig/compiler.json +++ b/contracts/multisig/compiler.json @@ -3,10 +3,7 @@ "contractsDir": "./contracts", "useDockerisedSolc": true, "compilerSettings": { - "optimizer": { - "enabled": true, - "runs": 1000000 - }, + "optimizer": { "enabled": true, "runs": 1000000 }, "outputSelection": { "*": { "*": [ @@ -20,10 +17,11 @@ } }, "contracts": [ - "AssetProxyOwner", - "MultiSigWallet", - "MultiSigWalletWithTimeLock", - "TestAssetProxyOwner", - "TestRejectEther" + "@0x/contracts-asset-proxy/contracts/src/MixinAuthorizable.sol", + "src/AssetProxyOwner.sol", + "src/MultiSigWallet.sol", + "src/MultiSigWalletWithTimeLock.sol", + "test/TestAssetProxyOwner.sol", + "test/TestRejectEther.sol" ] } diff --git a/contracts/multisig/package.json b/contracts/multisig/package.json index bc83bbf05..ce29122c4 100644 --- a/contracts/multisig/package.json +++ b/contracts/multisig/package.json @@ -29,10 +29,12 @@ "profiler:report:html": "istanbul report html && open coverage/index.html", "coverage:report:lcov": "istanbul report lcov", "test:circleci": "yarn test", + "contracts:gen": "contracts-gen", "lint-contracts": "solhint -c ../.solhint.json contracts/**/**/**/**/*.sol" }, "config": { - "abis": "generated-artifacts/@(AssetProxyOwner|MultiSigWallet|MultiSigWalletWithTimeLock|TestAssetProxyOwner|TestRejectEther).json" + "abis": "./generated-artifacts/@(AssetProxyOwner|MixinAuthorizable|MultiSigWallet|MultiSigWalletWithTimeLock|TestAssetProxyOwner|TestRejectEther).json", + "abis:comment": "This list is auto-generated by contracts-gen. Don't edit manually." }, "repository": { "type": "git", @@ -44,6 +46,7 @@ }, "homepage": "https://github.com/0xProject/0x-monorepo/contracts/multisig/README.md", "devDependencies": { + "@0x/contracts-gen": "^1.0.0", "@0x/abi-gen": "^2.0.1", "@0x/contracts-test-utils": "^3.0.2", "@0x/dev-utils": "^2.0.1", @@ -72,7 +75,7 @@ "@0x/utils": "^4.0.2", "@0x/web3-wrapper": "^4.0.1", "ethereum-types": "^2.0.0", - "lodash": "^4.17.5" + "lodash": "^4.17.11" }, "publishConfig": { "access": "public" diff --git a/contracts/multisig/src/artifacts.ts b/contracts/multisig/src/artifacts.ts new file mode 100644 index 000000000..7d8a85884 --- /dev/null +++ b/contracts/multisig/src/artifacts.ts @@ -0,0 +1,21 @@ +/* + * ----------------------------------------------------------------------------- + * Warning: This file is auto-generated by contracts-gen. Don't edit manually. + * ----------------------------------------------------------------------------- + */ +import { ContractArtifact } from 'ethereum-types'; + +import * as AssetProxyOwner from '../generated-artifacts/AssetProxyOwner.json'; +import * as MixinAuthorizable from '../generated-artifacts/MixinAuthorizable.json'; +import * as MultiSigWallet from '../generated-artifacts/MultiSigWallet.json'; +import * as MultiSigWalletWithTimeLock from '../generated-artifacts/MultiSigWalletWithTimeLock.json'; +import * as TestAssetProxyOwner from '../generated-artifacts/TestAssetProxyOwner.json'; +import * as TestRejectEther from '../generated-artifacts/TestRejectEther.json'; +export const artifacts = { + MixinAuthorizable: MixinAuthorizable as ContractArtifact, + AssetProxyOwner: AssetProxyOwner as ContractArtifact, + MultiSigWallet: MultiSigWallet as ContractArtifact, + MultiSigWalletWithTimeLock: MultiSigWalletWithTimeLock as ContractArtifact, + TestAssetProxyOwner: TestAssetProxyOwner as ContractArtifact, + TestRejectEther: TestRejectEther as ContractArtifact, +}; diff --git a/contracts/multisig/src/artifacts/index.ts b/contracts/multisig/src/artifacts/index.ts deleted file mode 100644 index 326d79000..000000000 --- a/contracts/multisig/src/artifacts/index.ts +++ /dev/null @@ -1,15 +0,0 @@ -import { ContractArtifact } from 'ethereum-types'; - -import * as AssetProxyOwner from '../../generated-artifacts/AssetProxyOwner.json'; -import * as MultiSigWallet from '../../generated-artifacts/MultiSigWallet.json'; -import * as MultiSigWalletWithTimeLock from '../../generated-artifacts/MultiSigWalletWithTimeLock.json'; -import * as TestAssetProxyOwner from '../../generated-artifacts/TestAssetProxyOwner.json'; -import * as TestRejectEther from '../../generated-artifacts/TestRejectEther.json'; - -export const artifacts = { - AssetProxyOwner: AssetProxyOwner as ContractArtifact, - MultiSigWallet: MultiSigWallet as ContractArtifact, - MultiSigWalletWithTimeLock: MultiSigWalletWithTimeLock as ContractArtifact, - TestAssetProxyOwner: TestAssetProxyOwner as ContractArtifact, - TestRejectEther: TestRejectEther as ContractArtifact, -}; diff --git a/contracts/multisig/src/wrappers.ts b/contracts/multisig/src/wrappers.ts new file mode 100644 index 000000000..81aab39da --- /dev/null +++ b/contracts/multisig/src/wrappers.ts @@ -0,0 +1,11 @@ +/* + * ----------------------------------------------------------------------------- + * Warning: This file is auto-generated by contracts-gen. Don't edit manually. + * ----------------------------------------------------------------------------- + */ +export * from '../generated-wrappers/asset_proxy_owner'; +export * from '../generated-wrappers/mixin_authorizable'; +export * from '../generated-wrappers/multi_sig_wallet'; +export * from '../generated-wrappers/multi_sig_wallet_with_time_lock'; +export * from '../generated-wrappers/test_asset_proxy_owner'; +export * from '../generated-wrappers/test_reject_ether'; diff --git a/contracts/multisig/src/wrappers/index.ts b/contracts/multisig/src/wrappers/index.ts deleted file mode 100644 index 43ab25704..000000000 --- a/contracts/multisig/src/wrappers/index.ts +++ /dev/null @@ -1,5 +0,0 @@ -export * from '../../generated-wrappers/asset_proxy_owner'; -export * from '../../generated-wrappers/multi_sig_wallet'; -export * from '../../generated-wrappers/multi_sig_wallet_with_time_lock'; -export * from '../../generated-wrappers/test_asset_proxy_owner'; -export * from '../../generated-wrappers/test_reject_ether'; diff --git a/contracts/multisig/test/asset_proxy_owner.ts b/contracts/multisig/test/asset_proxy_owner.ts index 62081554b..7bf4069cb 100644 --- a/contracts/multisig/test/asset_proxy_owner.ts +++ b/contracts/multisig/test/asset_proxy_owner.ts @@ -1,4 +1,3 @@ -import { artifacts as proxyArtifacts, MixinAuthorizableContract } from '@0x/contracts-asset-proxy'; import { chaiSetup, constants, @@ -26,6 +25,7 @@ import { AssetProxyOwnerExecutionFailureEventArgs, AssetProxyOwnerSubmissionEventArgs, AssetProxyOwnerWrapper, + MixinAuthorizableContract, TestAssetProxyOwnerContract, } from '../src'; @@ -58,12 +58,12 @@ describe('AssetProxyOwner', () => { notOwner = accounts[3]; const initialOwner = accounts[0]; erc20Proxy = await MixinAuthorizableContract.deployFrom0xArtifactAsync( - proxyArtifacts.MixinAuthorizable, + artifacts.MixinAuthorizable, provider, txDefaults, ); erc721Proxy = await MixinAuthorizableContract.deployFrom0xArtifactAsync( - proxyArtifacts.MixinAuthorizable, + artifacts.MixinAuthorizable, provider, txDefaults, ); diff --git a/contracts/multisig/test/utils/asset_proxy_owner_wrapper.ts b/contracts/multisig/test/utils/asset_proxy_owner_wrapper.ts index b6040d8e3..d5aaaf519 100644 --- a/contracts/multisig/test/utils/asset_proxy_owner_wrapper.ts +++ b/contracts/multisig/test/utils/asset_proxy_owner_wrapper.ts @@ -1,5 +1,3 @@ -import { artifacts as proxyArtifacts } from '@0x/contracts-asset-proxy'; -import { artifacts as erc20Artifacts } from '@0x/contracts-erc20'; import { LogDecoder } from '@0x/contracts-test-utils'; import { BigNumber } from '@0x/utils'; import { Web3Wrapper } from '@0x/web3-wrapper'; @@ -16,7 +14,7 @@ export class AssetProxyOwnerWrapper { constructor(assetproxyOwnerContract: AssetProxyOwnerContract, provider: Provider) { this._assetProxyOwner = assetproxyOwnerContract; this._web3Wrapper = new Web3Wrapper(provider); - this._logDecoder = new LogDecoder(this._web3Wrapper, { ...artifacts, ...erc20Artifacts, ...proxyArtifacts }); + this._logDecoder = new LogDecoder(this._web3Wrapper, artifacts); } public async submitTransactionAsync( destination: string, diff --git a/contracts/multisig/tsconfig.json b/contracts/multisig/tsconfig.json index ad1707e43..094f89413 100644 --- a/contracts/multisig/tsconfig.json +++ b/contracts/multisig/tsconfig.json @@ -1,17 +1,14 @@ { "extends": "../../tsconfig", - "compilerOptions": { - "outDir": "lib", - "rootDir": ".", - "resolveJsonModule": true - }, + "compilerOptions": { "outDir": "lib", "rootDir": ".", "resolveJsonModule": true }, "include": ["./src/**/*", "./test/**/*", "./generated-wrappers/**/*"], "files": [ - "./generated-artifacts/AssetProxyOwner.json", - "./generated-artifacts/MultiSigWallet.json", - "./generated-artifacts/MultiSigWalletWithTimeLock.json", - "./generated-artifacts/TestAssetProxyOwner.json", - "./generated-artifacts/TestRejectEther.json" + "generated-artifacts/AssetProxyOwner.json", + "generated-artifacts/MixinAuthorizable.json", + "generated-artifacts/MultiSigWallet.json", + "generated-artifacts/MultiSigWalletWithTimeLock.json", + "generated-artifacts/TestAssetProxyOwner.json", + "generated-artifacts/TestRejectEther.json" ], "exclude": ["./deploy/solc/solc_bin"] } diff --git a/contracts/test-utils/package.json b/contracts/test-utils/package.json index 0b8478e05..f73e1f456 100644 --- a/contracts/test-utils/package.json +++ b/contracts/test-utils/package.json @@ -66,7 +66,7 @@ "ethereumjs-util": "^5.1.1", "ethers": "~4.0.4", "js-combinatorics": "^0.5.3", - "lodash": "^4.17.5", + "lodash": "^4.17.11", "make-promises-safe": "^1.1.0" }, "publishConfig": { diff --git a/contracts/utils/compiler.json b/contracts/utils/compiler.json index 7473ea6d1..a54f547df 100644 --- a/contracts/utils/compiler.json +++ b/contracts/utils/compiler.json @@ -3,10 +3,7 @@ "contractsDir": "./contracts", "useDockerisedSolc": true, "compilerSettings": { - "optimizer": { - "enabled": true, - "runs": 1000000 - }, + "optimizer": { "enabled": true, "runs": 1000000 }, "outputSelection": { "*": { "*": [ @@ -19,5 +16,13 @@ } } }, - "contracts": ["TestConstants", "TestLibBytes", "LibBytes", "Ownable", "IOwnable", "ReentrancyGuard", "SafeMath"] + "contracts": [ + "src/LibBytes.sol", + "src/Ownable.sol", + "src/ReentrancyGuard.sol", + "src/SafeMath.sol", + "src/interfaces/IOwnable.sol", + "test/TestConstants.sol", + "test/TestLibBytes.sol" + ] } diff --git a/contracts/utils/package.json b/contracts/utils/package.json index 214ea59d8..3b0e5a527 100644 --- a/contracts/utils/package.json +++ b/contracts/utils/package.json @@ -29,10 +29,12 @@ "profiler:report:html": "istanbul report html && open coverage/index.html", "coverage:report:lcov": "istanbul report lcov", "test:circleci": "yarn test", + "contracts:gen": "contracts-gen", "lint-contracts": "solhint -c ../.solhint.json contracts/**/**/**/**/*.sol" }, "config": { - "abis": "generated-artifacts/@(IOwnable|Ownable|LibBytes|ReentrancyGuard|SafeMath|TestConstants|TestLibBytes).json" + "abis": "./generated-artifacts/@(IOwnable|LibBytes|Ownable|ReentrancyGuard|SafeMath|TestConstants|TestLibBytes).json", + "abis:comment": "This list is auto-generated by contracts-gen. Don't edit manually." }, "repository": { "type": "git", @@ -44,6 +46,7 @@ }, "homepage": "https://github.com/0xProject/0x-monorepo/contracts/utils/README.md", "devDependencies": { + "@0x/contracts-gen": "^1.0.0", "@0x/abi-gen": "^2.0.1", "@0x/contracts-test-utils": "^3.0.2", "@0x/dev-utils": "^2.0.1", @@ -74,7 +77,7 @@ "bn.js": "^4.11.8", "ethereum-types": "^2.0.0", "ethereumjs-util": "^5.1.1", - "lodash": "^4.17.5" + "lodash": "^4.17.11" }, "publishConfig": { "access": "public" diff --git a/contracts/utils/src/artifacts.ts b/contracts/utils/src/artifacts.ts new file mode 100644 index 000000000..15a1abedf --- /dev/null +++ b/contracts/utils/src/artifacts.ts @@ -0,0 +1,23 @@ +/* + * ----------------------------------------------------------------------------- + * Warning: This file is auto-generated by contracts-gen. Don't edit manually. + * ----------------------------------------------------------------------------- + */ +import { ContractArtifact } from 'ethereum-types'; + +import * as IOwnable from '../generated-artifacts/IOwnable.json'; +import * as LibBytes from '../generated-artifacts/LibBytes.json'; +import * as Ownable from '../generated-artifacts/Ownable.json'; +import * as ReentrancyGuard from '../generated-artifacts/ReentrancyGuard.json'; +import * as SafeMath from '../generated-artifacts/SafeMath.json'; +import * as TestConstants from '../generated-artifacts/TestConstants.json'; +import * as TestLibBytes from '../generated-artifacts/TestLibBytes.json'; +export const artifacts = { + LibBytes: LibBytes as ContractArtifact, + Ownable: Ownable as ContractArtifact, + ReentrancyGuard: ReentrancyGuard as ContractArtifact, + SafeMath: SafeMath as ContractArtifact, + IOwnable: IOwnable as ContractArtifact, + TestConstants: TestConstants as ContractArtifact, + TestLibBytes: TestLibBytes as ContractArtifact, +}; diff --git a/contracts/utils/src/artifacts/index.ts b/contracts/utils/src/artifacts/index.ts deleted file mode 100644 index a5c2b215c..000000000 --- a/contracts/utils/src/artifacts/index.ts +++ /dev/null @@ -1,19 +0,0 @@ -import { ContractArtifact } from 'ethereum-types'; - -import * as IOwnable from '../../generated-artifacts/IOwnable.json'; -import * as LibBytes from '../../generated-artifacts/LibBytes.json'; -import * as Ownable from '../../generated-artifacts/Ownable.json'; -import * as ReentrancyGuard from '../../generated-artifacts/ReentrancyGuard.json'; -import * as SafeMath from '../../generated-artifacts/SafeMath.json'; -import * as TestConstants from '../../generated-artifacts/TestConstants.json'; -import * as TestLibBytes from '../../generated-artifacts/TestLibBytes.json'; - -export const artifacts = { - TestConstants: TestConstants as ContractArtifact, - TestLibBytes: TestLibBytes as ContractArtifact, - IOwnable: IOwnable as ContractArtifact, - LibBytes: LibBytes as ContractArtifact, - Ownable: Ownable as ContractArtifact, - SafeMath: SafeMath as ContractArtifact, - ReentrancyGuard: ReentrancyGuard as ContractArtifact, -}; diff --git a/contracts/utils/src/wrappers.ts b/contracts/utils/src/wrappers.ts new file mode 100644 index 000000000..8748cb074 --- /dev/null +++ b/contracts/utils/src/wrappers.ts @@ -0,0 +1,12 @@ +/* + * ----------------------------------------------------------------------------- + * Warning: This file is auto-generated by contracts-gen. Don't edit manually. + * ----------------------------------------------------------------------------- + */ +export * from '../generated-wrappers/i_ownable'; +export * from '../generated-wrappers/lib_bytes'; +export * from '../generated-wrappers/ownable'; +export * from '../generated-wrappers/reentrancy_guard'; +export * from '../generated-wrappers/safe_math'; +export * from '../generated-wrappers/test_constants'; +export * from '../generated-wrappers/test_lib_bytes'; diff --git a/contracts/utils/src/wrappers/index.ts b/contracts/utils/src/wrappers/index.ts deleted file mode 100644 index 823b7fa4b..000000000 --- a/contracts/utils/src/wrappers/index.ts +++ /dev/null @@ -1,2 +0,0 @@ -export * from '../../generated-wrappers/test_constants'; -export * from '../../generated-wrappers/test_lib_bytes'; diff --git a/contracts/utils/tsconfig.json b/contracts/utils/tsconfig.json index 68251e6b0..efd71ff93 100644 --- a/contracts/utils/tsconfig.json +++ b/contracts/utils/tsconfig.json @@ -1,19 +1,15 @@ { "extends": "../../tsconfig", - "compilerOptions": { - "outDir": "lib", - "rootDir": ".", - "resolveJsonModule": true - }, + "compilerOptions": { "outDir": "lib", "rootDir": ".", "resolveJsonModule": true }, "include": ["./src/**/*", "./test/**/*", "./generated-wrappers/**/*"], "files": [ - "./generated-artifacts/TestConstants.json", - "./generated-artifacts/TestLibBytes.json", - "./generated-artifacts/IOwnable.json", - "./generated-artifacts/Ownable.json", - "./generated-artifacts/LibBytes.json", - "./generated-artifacts/SafeMath.json", - "./generated-artifacts/ReentrancyGuard.json" + "generated-artifacts/IOwnable.json", + "generated-artifacts/LibBytes.json", + "generated-artifacts/Ownable.json", + "generated-artifacts/ReentrancyGuard.json", + "generated-artifacts/SafeMath.json", + "generated-artifacts/TestConstants.json", + "generated-artifacts/TestLibBytes.json" ], "exclude": ["./deploy/solc/solc_bin"] } diff --git a/package.json b/package.json index dccfe6513..af32a3c8f 100644 --- a/package.json +++ b/package.json @@ -32,6 +32,9 @@ "build:ts": "tsc -b", "watch:ts": "tsc -b -w", "clean": "wsrun clean $PKG --fast-exit -r --parallel --exclude-missing", + "contracts:gen": "wsrun contracts:gen $PKG --fast-exit -r --parallel --exclude-missing", + "contracts:compile": "wsrun compile $PKG --fast-exit -r --stages --exclude-missing", + "contracts:watch": "wsrun watch $PKG --parallel --exclude-missing", "remove_node_modules": "lerna clean --yes; rm -rf node_modules", "rebuild": "run-s clean build", "rebuild:no_website": "run-s clean build:no_website", @@ -81,7 +84,7 @@ "lcov-result-merger": "^3.0.0", "lerna": "^3.0.0-beta.25", "npm-run-all": "^4.1.2", - "prettier": "^1.15.3", + "prettier": "^1.16.3", "source-map-support": "^0.5.6", "typescript": "3.0.1", "wsrun": "^2.2.0" diff --git a/packages/contracts-gen/.npmignore b/packages/contracts-gen/.npmignore new file mode 100644 index 000000000..d645458f6 --- /dev/null +++ b/packages/contracts-gen/.npmignore @@ -0,0 +1,6 @@ +.* +yarn-error.log +/src/ +/scripts/ +tsconfig.json +/lib/monorepo_scripts/ diff --git a/packages/contracts-gen/CHANGELOG.json b/packages/contracts-gen/CHANGELOG.json new file mode 100644 index 000000000..fe51488c7 --- /dev/null +++ b/packages/contracts-gen/CHANGELOG.json @@ -0,0 +1 @@ +[] diff --git a/packages/contracts-gen/README.md b/packages/contracts-gen/README.md new file mode 100644 index 000000000..feaf9e65f --- /dev/null +++ b/packages/contracts-gen/README.md @@ -0,0 +1,76 @@ +# Contracts Gen + +This package allows you to generate boilerplate TypeScript code and configs for smart contracts packages. + +## Installation + +`yarn add -g @0x/contracts-gen` + +## Usage + +Run it from within your smart contracts packages. + +```bash +contracts-gen +``` + +You should run this tool after each time you move your contracts around to regenerate boilerplate code and configs. + +## What can it generate + +This tool does the following: + +- Reads your `compiler.json`. Specifically the list of smart contracts. +- Creates `wrapper.ts` file which exports all contract wrappers. +- Creates `artifacts.ts` file which exports all contract artifacts. +- Generates list of JSON artifact files in `tsconfig.json` +- Generates a glob for abi-gen in `package.json` + +On top of that - if your `compiler.json` has contracts referenced just by name - it will resolve the name to relative path and put it there. +It also sorts all the lists in it's output leading to smaller and cleaner diffs. + +## Contributing + +We welcome improvements and fixes from the wider community! To report bugs within this package, please create an issue in this repository. + +Please read our [contribution guidelines](../../CONTRIBUTING.md) before getting started. + +### Install dependencies + +If you don't have yarn workspaces enabled (Yarn < v1.0) - enable them: + +```bash +yarn config set workspaces-experimental true +``` + +Then install dependencies + +```bash +yarn install +``` + +### Build + +To build this package and all other monorepo packages that it depends on, run the following from the monorepo root directory: + +```bash +PKG=@0x/contracts-gen yarn build +``` + +Or continuously rebuild on change: + +```bash +PKG=@0x/contracts-gen yarn watch +``` + +### Clean + +```bash +yarn clean +``` + +### Lint + +```bash +yarn lint +``` diff --git a/packages/contracts-gen/bin/contracts-gen.js b/packages/contracts-gen/bin/contracts-gen.js new file mode 100755 index 000000000..ec6ab4db6 --- /dev/null +++ b/packages/contracts-gen/bin/contracts-gen.js @@ -0,0 +1,2 @@ +#!/usr/bin/env node +require('../lib/src/contracts-gen.js'); diff --git a/packages/contracts-gen/package.json b/packages/contracts-gen/package.json new file mode 100644 index 000000000..1265cac69 --- /dev/null +++ b/packages/contracts-gen/package.json @@ -0,0 +1,49 @@ +{ + "name": "@0x/contracts-gen", + "version": "1.0.0", + "engines": { + "node": ">=6.12" + }, + "description": "Generates boilerplate code for smart contracts packages", + "main": "lib/src/index.js", + "types": "lib/src/index.d.ts", + "scripts": { + "lint": "tslint --format stylish --project .", + "clean": "shx rm -rf lib", + "build": "tsc -b", + "build:ci": "yarn build" + }, + "bin": { + "contracts-gen": "bin/contracts-gen.js" + }, + "repository": { + "type": "git", + "url": "https://github.com/0xProject/0x-monorepo.git" + }, + "license": "Apache-2.0", + "bugs": { + "url": "https://github.com/0xProject/0x-monorepo/issues" + }, + "homepage": "https://github.com/0xProject/0x-monorepo/packages/contracts-gen/README.md", + "dependencies": { + "@0x/types": "^2.0.1", + "@0x/utils": "^4.0.2", + "@0x/typescript-typings": "^4.0.0", + "ethereum-types": "^2.0.0", + "@0x/sol-resolver": "^2.0.1", + "lodash": "^4.17.11", + "prettier": "^1.16.3", + "to-snake-case": "^1.0.0" + }, + "devDependencies": { + "@0x/tslint-config": "^3.0.0", + "@types/node": "*", + "@types/prettier": "^1.15.2", + "shx": "^0.2.2", + "tslint": "5.11.0", + "typescript": "3.0.1" + }, + "publishConfig": { + "access": "public" + } +} diff --git a/packages/contracts-gen/src/contracts-gen.ts b/packages/contracts-gen/src/contracts-gen.ts new file mode 100644 index 000000000..0160a8204 --- /dev/null +++ b/packages/contracts-gen/src/contracts-gen.ts @@ -0,0 +1,175 @@ +#!/usr/bin/env node + +import { NameResolver } from '@0x/sol-resolver'; +import { PackageJSON } from '@0x/types'; +import { logUtils } from '@0x/utils'; +import { CompilerOptions } from 'ethereum-types'; +import * as fs from 'fs'; +import * as _ from 'lodash'; +import * as path from 'path'; +import * as prettier from 'prettier'; +import toSnakeCase = require('to-snake-case'); + +const SOLIDITY_EXTENSION = '.sol'; +const DEFAULT_ARTIFACTS_DIR = 'artifacts'; +const DEFAULT_CONTRACTS_DIR = 'contracts'; +const DEFAULT_WRAPPERS_DIR = 'generated-wrappers'; +const AUTO_GENERATED_BANNER = `/* +* ----------------------------------------------------------------------------- +* Warning: This file is auto-generated by contracts-gen. Don't edit manually. +* ----------------------------------------------------------------------------- +*/`; +const AUTO_GENERATED_BANNER_FOR_LISTS = `This list is auto-generated by contracts-gen. Don't edit manually.`; + +(async () => { + const packageDir = process.cwd(); + const compilerJSON = readJSONFile<CompilerOptions>('compiler.json'); + const contracts = compilerJSON.contracts; + const contractsDir = compilerJSON.contractsDir || DEFAULT_CONTRACTS_DIR; + const artifactsDir = compilerJSON.artifactsDir || DEFAULT_ARTIFACTS_DIR; + const wrappersDir = DEFAULT_WRAPPERS_DIR; + if (!_.isArray(contracts)) { + throw new Error('Unable to run the generator bacause contracts key in compiler.json is not of type array'); + } + const prettierConfig = await prettier.resolveConfig(packageDir); + generateCompilerJSONContractsList(contracts, contractsDir, prettierConfig); + generateArtifactsTs(contracts, artifactsDir, prettierConfig); + generateWrappersTs(contracts, wrappersDir, prettierConfig); + generateTsConfigJSONFilesList(contracts, artifactsDir, prettierConfig); + generatePackageJSONABIConfig(contracts, artifactsDir, prettierConfig); + process.exit(0); +})().catch(err => { + logUtils.log(err); + process.exit(1); +}); + +function generateCompilerJSONContractsList( + contracts: string[], + contractsDir: string, + prettierConfig: prettier.Options | null, +): void { + const COMPILER_JSON_FILE_PATH = 'compiler.json'; + const compilerJSON = readJSONFile<CompilerOptions>(COMPILER_JSON_FILE_PATH); + compilerJSON.contracts = _.map(contracts, contract => { + if (contract.endsWith(SOLIDITY_EXTENSION)) { + // If it's already a relative path - NO-OP. + return contract; + } else { + // If it's just a contract name - resolve it and rewrite. + return new NameResolver(contractsDir).resolve(contract).path; + } + }); + compilerJSON.contracts = _.sortBy(compilerJSON.contracts); + const compilerJSONString = JSON.stringify(compilerJSON); + const formattedCompilerJSON = prettier.format(compilerJSONString, { + ...prettierConfig, + filepath: COMPILER_JSON_FILE_PATH, + }); + fs.writeFileSync(COMPILER_JSON_FILE_PATH, formattedCompilerJSON); +} + +function generateArtifactsTs(contracts: string[], artifactsDir: string, prettierConfig: prettier.Options | null): void { + const imports = _.map(contracts, contract => { + const contractName = path.basename(contract, SOLIDITY_EXTENSION); + const importPath = path.join('..', artifactsDir, `${contractName}.json`); + return `import * as ${contractName} from '${importPath}';`; + }); + const sortedImports = _.sortBy(imports); + const artifacts = _.map(contracts, contract => { + const contractName = path.basename(contract, SOLIDITY_EXTENSION); + if (contractName === 'ZRXToken') { + // HACK(albrow): "as any" hack still required here because ZRXToken does not + // conform to the v2 artifact type. + return `${contractName}: (${contractName} as any) as ContractArtifact,`; + } else { + return `${contractName}: ${contractName} as ContractArtifact,`; + } + }); + const artifactsTs = ` + ${AUTO_GENERATED_BANNER} + import { ContractArtifact } from 'ethereum-types'; + + ${sortedImports.join('\n')} + export const artifacts = {${artifacts.join('\n')}}; + `; + const ARTIFACTS_TS_FILE_PATH = 'src/artifacts.ts'; + const formattedArtifactsTs = prettier.format(artifactsTs, { ...prettierConfig, filepath: ARTIFACTS_TS_FILE_PATH }); + fs.writeFileSync(ARTIFACTS_TS_FILE_PATH, formattedArtifactsTs); +} + +function generateWrappersTs(contracts: string[], wrappersDir: string, prettierConfig: prettier.Options | null): void { + const imports = _.map(contracts, contract => { + const contractName = path.basename(contract, SOLIDITY_EXTENSION); + const outputFileName = makeOutputFileName(contractName); + const exportPath = path.join('..', wrappersDir, outputFileName); + return `export * from '${exportPath}';`; + }); + const sortedImports = _.sortBy(imports); + const wrappersTs = ` + ${AUTO_GENERATED_BANNER} + ${sortedImports.join('\n')} + `; + const WRAPPERS_TS_FILE_PATH = 'src/wrappers.ts'; + const formattedArtifactsTs = prettier.format(wrappersTs, { ...prettierConfig, filepath: WRAPPERS_TS_FILE_PATH }); + fs.writeFileSync(WRAPPERS_TS_FILE_PATH, formattedArtifactsTs); +} + +function generateTsConfigJSONFilesList( + contracts: string[], + artifactsDir: string, + prettierConfig: prettier.Options | null, +): void { + const TS_CONFIG_FILE_PATH = 'tsconfig.json'; + const tsConfig = readJSONFile<any>(TS_CONFIG_FILE_PATH); + tsConfig.files = _.map(contracts, contract => { + const contractName = path.basename(contract, SOLIDITY_EXTENSION); + const artifactPath = path.join(artifactsDir, `${contractName}.json`); + return artifactPath; + }); + tsConfig.files = _.sortBy(tsConfig.files); + const tsConfigString = JSON.stringify(tsConfig); + const formattedTsConfig = prettier.format(tsConfigString, { ...prettierConfig, filepath: TS_CONFIG_FILE_PATH }); + fs.writeFileSync(TS_CONFIG_FILE_PATH, formattedTsConfig); +} + +function generatePackageJSONABIConfig( + contracts: string[], + artifactsDir: string, + prettierConfig: prettier.Options | null, +): void { + let packageJSON = readJSONFile<PackageJSON>('package.json'); + const contractNames = _.map(contracts, contract => { + const contractName = path.basename(contract, SOLIDITY_EXTENSION); + return contractName; + }); + const sortedContractNames = _.sortBy(contractNames); + packageJSON = { + ...packageJSON, + config: { + ...packageJSON.config, + 'abis:comment': AUTO_GENERATED_BANNER_FOR_LISTS, + abis: `${artifactsDir}/@(${sortedContractNames.join('|')}).json`, + }, + }; + const PACKAGE_JSON_FILE_PATH = 'package.json'; + const packageJSONString = JSON.stringify(packageJSON); + const formattedPackageJSON = prettier.format(packageJSONString, { + ...prettierConfig, + filepath: PACKAGE_JSON_FILE_PATH, + }); + fs.writeFileSync(PACKAGE_JSON_FILE_PATH, formattedPackageJSON); +} + +function makeOutputFileName(name: string): string { + let fileName = toSnakeCase(name); + // HACK: Snake case doesn't make a lot of sense for abbreviated names but we can't reliably detect abbreviations + // so we special-case the abbreviations we use. + fileName = fileName.replace('z_r_x', 'zrx').replace('e_r_c', 'erc'); + return fileName; +} + +function readJSONFile<T>(filePath: string): T { + const JSONString = fs.readFileSync(filePath, 'utf8'); + const parsed: T = JSON.parse(JSONString); + return parsed; +} diff --git a/packages/contracts-gen/src/index.ts b/packages/contracts-gen/src/index.ts new file mode 100644 index 000000000..c5f4b01f1 --- /dev/null +++ b/packages/contracts-gen/src/index.ts @@ -0,0 +1,6 @@ +/** + * This module is a CLI tool. As soon as you run it - it starts doing stuff. + * At the same time - our installation tests assume that you can import package without causing side effects. + * That's why our main entry point it empty. No side effects. But our secondary entry point - contracts-gen.ts is a CLI tool and starts running as soon as you import/run it. + */ +export {}; diff --git a/packages/contracts-gen/tsconfig.json b/packages/contracts-gen/tsconfig.json new file mode 100644 index 000000000..233008d61 --- /dev/null +++ b/packages/contracts-gen/tsconfig.json @@ -0,0 +1,8 @@ +{ + "extends": "../../tsconfig", + "compilerOptions": { + "outDir": "lib", + "rootDir": "." + }, + "include": ["./src/**/*"] +} diff --git a/packages/contracts-gen/tslint.json b/packages/contracts-gen/tslint.json new file mode 100644 index 000000000..dd9053357 --- /dev/null +++ b/packages/contracts-gen/tslint.json @@ -0,0 +1,3 @@ +{ + "extends": ["@0x/tslint-config"] +} diff --git a/packages/metacoin/package.json b/packages/metacoin/package.json index 24b387355..fbff1c62a 100644 --- a/packages/metacoin/package.json +++ b/packages/metacoin/package.json @@ -24,7 +24,8 @@ "profiler:report:html": "istanbul report html && open coverage/index.html", "coverage:report:lcov": "istanbul report lcov", "test:circleci": "yarn test:coverage", - "compile": "sol-compiler compile" + "compile": "sol-compiler", + "watch": "sol-compiler -w" }, "author": "", "license": "Apache-2.0", diff --git a/packages/monorepo-scripts/package.json b/packages/monorepo-scripts/package.json index fddcc13f8..24dca0004 100644 --- a/packages/monorepo-scripts/package.json +++ b/packages/monorepo-scripts/package.json @@ -47,6 +47,7 @@ "typescript": "3.0.1" }, "dependencies": { + "@0x/types": "^2.0.1", "@0x/utils": "^4.0.2", "@lerna/batch-packages": "^3.0.0-beta.18", "@types/depcheck": "^0.6.0", diff --git a/packages/monorepo-scripts/src/deps_versions.ts b/packages/monorepo-scripts/src/deps_versions.ts index 0d01a2e3c..bb7e50f51 100644 --- a/packages/monorepo-scripts/src/deps_versions.ts +++ b/packages/monorepo-scripts/src/deps_versions.ts @@ -1,7 +1,7 @@ #!/usr/bin/env node +import { PackageJSON, PackageJSONConfig } from '@0x/types'; import chalk from 'chalk'; -import * as fs from 'fs'; import { sync as globSync } from 'glob'; import * as path from 'path'; @@ -24,9 +24,10 @@ interface ParsedDependencies { const PACKAGE_JSON_GLOB = '../../*/package.json'; -const config = JSON.parse(fs.readFileSync(path.join(__dirname, '../../../package.json')).toString()).config; -const dependenciesWithIgnoredVersions: string[] = config.ignoreDependencyVersions.split(' '); -const packagesWithIgnoredVersions: string[] = config.ignoreDependencyVersionsForPackage.split(' '); +const config = utils.readJSONFile<PackageJSON>(path.join(__dirname, '../../../package.json')) + .config as PackageJSONConfig; // tslint:disable-line no-unnecessary-type-assertion +const dependenciesWithIgnoredVersions: string[] = (config.ignoreDependencyVersions as string).split(' '); +const packagesWithIgnoredVersions: string[] = (config.ignoreDependencyVersionsForPackage as string).split(' '); if (require.main === module) { const dependencies = parseDependencies(); @@ -44,11 +45,10 @@ if (require.main === module) { } function getDependencies(_path: string): Dependencies { - const file = fs.readFileSync(_path).toString(); - const parsed = JSON.parse(file); + const packageJSON = utils.readJSONFile<PackageJSON>(_path); const dependencies = { - ...parsed.dependencies, - ...parsed.devDependencies, + ...packageJSON.dependencies, + ...packageJSON.devDependencies, }; return dependencies; } diff --git a/packages/monorepo-scripts/src/publish.ts b/packages/monorepo-scripts/src/publish.ts index 196b4c2ff..ddb2811f2 100644 --- a/packages/monorepo-scripts/src/publish.ts +++ b/packages/monorepo-scripts/src/publish.ts @@ -1,8 +1,8 @@ #!/usr/bin/env node +import { PackageJSON } from '@0x/types'; import { logUtils } from '@0x/utils'; import * as promisify from 'es6-promisify'; -import * as fs from 'fs'; import * as _ from 'lodash'; import * as moment from 'moment'; import opn = require('opn'); @@ -47,7 +47,7 @@ async function confirmAsync(message: string): Promise<void> { await confirmAsync( 'THIS IS NOT A TEST PUBLISH! You are about to publish one or more packages to npm. Are you sure you want to continue? (y/n)', ); - // await confirmDocPagesRenderAsync(packagesWithDocs); + await confirmDocPagesRenderAsync(packagesWithDocs); } // Update CHANGELOGs @@ -141,8 +141,8 @@ async function publishImagesToDockerHubAsync(allUpdatedPackages: Package[]): Pro function getPackagesWithDocs(allUpdatedPackages: Package[]): Package[] { const rootPackageJsonPath = `${constants.monorepoRootPath}/package.json`; - const rootPackageJson = JSON.parse(fs.readFileSync(rootPackageJsonPath).toString()); - const packagesWithDocPagesStringIfExist = _.get(rootPackageJson, 'config.packagesWithDocPages', undefined); + const rootPackageJSON = utils.readJSONFile<PackageJSON>(rootPackageJsonPath); + const packagesWithDocPagesStringIfExist = _.get(rootPackageJSON, 'config.packagesWithDocPages', undefined); if (_.isUndefined(packagesWithDocPagesStringIfExist)) { return []; // None to generate & publish } diff --git a/packages/monorepo-scripts/src/test_installation.ts b/packages/monorepo-scripts/src/test_installation.ts index 822f48967..ec145cd32 100644 --- a/packages/monorepo-scripts/src/test_installation.ts +++ b/packages/monorepo-scripts/src/test_installation.ts @@ -8,7 +8,7 @@ import { exec as execAsync } from 'promisify-child-process'; import * as rimraf from 'rimraf'; import { promisify } from 'util'; -import { Package } from './types'; +import { Changelog, Package } from './types'; import { utils } from './utils/utils'; // Packages might not be runnable if they are command-line tools or only run in browsers. @@ -100,7 +100,7 @@ async function testInstallPackageAsync( installablePackage: Package, ): Promise<void> { const changelogPath = path.join(installablePackage.location, 'CHANGELOG.json'); - const lastChangelogVersion = JSON.parse(fs.readFileSync(changelogPath).toString())[0].version; + const lastChangelogVersion = utils.readJSONFile<Changelog>(changelogPath)[0].version; const packageName = installablePackage.packageJson.name; utils.log(`Testing ${packageName}@${lastChangelogVersion}`); const packageDirName = path.join(...`${packageName}-test`.split('/')); diff --git a/packages/monorepo-scripts/src/types.ts b/packages/monorepo-scripts/src/types.ts index 4af4fd257..e285d9082 100644 --- a/packages/monorepo-scripts/src/types.ts +++ b/packages/monorepo-scripts/src/types.ts @@ -1,3 +1,5 @@ +import { PackageJSON } from '@0x/types'; + export interface UpdatedPackage { name: string; version: string; @@ -34,21 +36,6 @@ export interface GitTagsByPackageName { [packageName: string]: string[]; } -export interface PackageJSON { - private?: boolean; - version: string; - name: string; - main?: string; - scripts?: { [command: string]: string }; - config?: { - postpublish?: { - assets?: string[]; - docOmitExports?: string[]; - dockerHubRepo?: string; - }; - }; -} - export interface Package { location: string; packageJson: PackageJSON; diff --git a/packages/monorepo-scripts/src/utils/doc_generate_and_upload_utils.ts b/packages/monorepo-scripts/src/utils/doc_generate_and_upload_utils.ts index 1a4294e9c..c0e86ad44 100644 --- a/packages/monorepo-scripts/src/utils/doc_generate_and_upload_utils.ts +++ b/packages/monorepo-scripts/src/utils/doc_generate_and_upload_utils.ts @@ -1,3 +1,4 @@ +import { PackageJSON } from '@0x/types'; import { existsSync, readFileSync, writeFileSync } from 'fs'; import * as _ from 'lodash'; import * as path from 'path'; @@ -6,7 +7,7 @@ import * as ts from 'typescript'; import { constants } from '../constants'; import { docGenConfigs } from '../doc_gen_configs'; -import { ExportInfo, ExportNameToTypedocNames, ExportPathToExportedItems, PackageJSON } from '../types'; +import { ExportInfo, ExportNameToTypedocNames, ExportPathToExportedItems } from '../types'; import { utils } from './utils'; diff --git a/packages/monorepo-scripts/src/utils/utils.ts b/packages/monorepo-scripts/src/utils/utils.ts index 28c5658f3..20a6932c3 100644 --- a/packages/monorepo-scripts/src/utils/utils.ts +++ b/packages/monorepo-scripts/src/utils/utils.ts @@ -1,3 +1,4 @@ +import { PackageJSON } from '@0x/types'; import batchPackages = require('@lerna/batch-packages'); import * as fs from 'fs'; import * as _ from 'lodash'; @@ -5,7 +6,7 @@ import { exec as execAsync } from 'promisify-child-process'; import semver = require('semver'); import { constants } from '../constants'; -import { GitTagsByPackageName, Package, PackageJSON, UpdatedPackage } from '../types'; +import { GitTagsByPackageName, Package, UpdatedPackage } from '../types'; import { changelogUtils } from './changelog_utils'; @@ -13,6 +14,11 @@ export const utils = { log(...args: any[]): void { console.log(...args); // tslint:disable-line:no-console }, + readJSONFile<T>(path: string): T { + const JSONString = fs.readFileSync(path, 'utf8'); + const parsed: T = JSON.parse(JSONString); + return parsed; + }, getTopologicallySortedPackages(rootDir: string): Package[] { const packages = utils.getPackages(rootDir); const batchedPackages: PackageJSON[] = _.flatten(batchPackages(_.map(packages, pkg => pkg.packageJson), false)); @@ -23,8 +29,7 @@ export const utils = { return topsortedPackages; }, getPackages(rootDir: string): Package[] { - const rootPackageJsonString = fs.readFileSync(`${rootDir}/package.json`, 'utf8'); - const rootPackageJson = JSON.parse(rootPackageJsonString); + const rootPackageJson = utils.readJSONFile<PackageJSON>(`${rootDir}/package.json`); if (_.isUndefined(rootPackageJson.workspaces)) { throw new Error(`Did not find 'workspaces' key in root package.json`); } @@ -40,8 +45,7 @@ export const utils = { } const pathToPackageJson = `${rootDir}/${workspacePath}${subpackageName}`; try { - const packageJsonString = fs.readFileSync(`${pathToPackageJson}/package.json`, 'utf8'); - const packageJson = JSON.parse(packageJsonString); + const packageJson = utils.readJSONFile<PackageJSON>(`${pathToPackageJson}/package.json`); const pkg = { location: pathToPackageJson, packageJson, diff --git a/packages/pipeline/package.json b/packages/pipeline/package.json index a1500cc74..3e45aa992 100644 --- a/packages/pipeline/package.json +++ b/packages/pipeline/package.json @@ -57,7 +57,7 @@ "dockerode": "^2.5.7", "ethereum-types": "^2.0.0", "pg": "^7.5.0", - "prettier": "^1.15.3", + "prettier": "^1.16.3", "ramda": "^0.25.0", "reflect-metadata": "^0.1.12", "sqlite3": "^4.0.2", diff --git a/packages/sol-compiler/CHANGELOG.json b/packages/sol-compiler/CHANGELOG.json index 5f103342e..dd65f3aed 100644 --- a/packages/sol-compiler/CHANGELOG.json +++ b/packages/sol-compiler/CHANGELOG.json @@ -1,5 +1,14 @@ [ { + "version": "3.0.2", + "changes": [ + { + "note": "Fix a bug when smart recompilation wasn't working because of remappings", + "pr": 1575 + } + ] + }, + { "timestamp": 1549452781, "version": "3.0.1", "changes": [ diff --git a/packages/sol-compiler/src/compiler.ts b/packages/sol-compiler/src/compiler.ts index efee3eb8a..c5dea1155 100644 --- a/packages/sol-compiler/src/compiler.ts +++ b/packages/sol-compiler/src/compiler.ts @@ -195,9 +195,7 @@ export class Compiler { path.basename(contractSource.path, constants.SOLIDITY_FILE_EXTENSION), ); } else { - contractNamesToCompile = this._specifiedContracts.map(specifiedContract => - path.basename(specifiedContract, constants.SOLIDITY_FILE_EXTENSION), - ); + return this._specifiedContracts; } return contractNamesToCompile; } @@ -217,12 +215,9 @@ export class Compiler { for (const contractName of contractNames) { const spyResolver = new SpyResolver(this._resolver); const contractSource = spyResolver.resolve(contractName); - const sourceTreeHashHex = getSourceTreeHash( - spyResolver, - path.join(this._contractsDir, contractSource.path), - ).toString('hex'); + const sourceTreeHashHex = getSourceTreeHash(spyResolver, contractSource.path).toString('hex'); const contractData = { - contractName, + contractName: path.basename(contractName, constants.SOLIDITY_FILE_EXTENSION), currentArtifactIfExists: await getContractArtifactIfExistsAsync(this._artifactsDir, contractName), sourceTreeHashHex: `0x${sourceTreeHashHex}`, }; @@ -329,7 +324,10 @@ export class Compiler { } else { const currentArtifact = contractData.currentArtifactIfExists as ContractArtifact; const isUserOnLatestVersion = currentArtifact.schemaVersion === constants.LATEST_ARTIFACT_VERSION; - const didCompilerSettingsChange = !_.isEqual(currentArtifact.compiler.settings, this._compilerSettings); + const didCompilerSettingsChange = !_.isEqual( + _.omit(currentArtifact.compiler.settings, 'remappings'), + this._compilerSettings, + ); const didSourceChange = currentArtifact.sourceTreeHashHex !== contractData.sourceTreeHashHex; return !isUserOnLatestVersion || didCompilerSettingsChange || didSourceChange; } diff --git a/packages/sol-compiler/src/utils/compiler.ts b/packages/sol-compiler/src/utils/compiler.ts index c75f76dac..dffd07b1d 100644 --- a/packages/sol-compiler/src/utils/compiler.ts +++ b/packages/sol-compiler/src/utils/compiler.ts @@ -26,7 +26,10 @@ export async function getContractArtifactIfExistsAsync( contractName: string, ): Promise<ContractArtifact | void> { let contractArtifact; - const currentArtifactPath = `${artifactsDir}/${contractName}.json`; + const currentArtifactPath = `${artifactsDir}/${path.basename( + contractName, + constants.SOLIDITY_FILE_EXTENSION, + )}.json`; try { const opts = { encoding: 'utf8', diff --git a/packages/types/src/index.ts b/packages/types/src/index.ts index a30a0494f..b3a083999 100644 --- a/packages/types/src/index.ts +++ b/packages/types/src/index.ts @@ -691,6 +691,30 @@ export interface DutchAuctionDetails { currentTimeSeconds: BigNumber; } +export interface PackageJSONConfig { + postpublish?: { + assets?: string[]; + docOmitExports?: string[]; + dockerHubRepo?: string; + }; + 'abis:comment'?: string; + abis?: string; + ignoreDependencyVersions?: string; + ignoreDependencyVersionsForPackage?: string; +} + +export interface PackageJSON { + private?: boolean; + version: string; + name: string; + main?: string; + scripts?: { [command: string]: string }; + config?: PackageJSONConfig; + dependencies?: { [dependencyName: string]: string }; + devDependencies?: { [dependencyName: string]: string }; + workspaces?: string[]; +} + export interface EIP712DomainWithDefaultSchema { name?: string; version?: string; diff --git a/packages/website/package.json b/packages/website/package.json index 77295d4de..62b83b3ec 100644 --- a/packages/website/package.json +++ b/packages/website/package.json @@ -47,7 +47,7 @@ "find-versions": "^2.0.0", "jsonschema": "^1.2.0", "less": "^2.7.2", - "lodash": "^4.17.5", + "lodash": "^4.17.11", "material-ui": "^0.20.0", "moment": "2.21.0", "numeral": "^2.0.6", diff --git a/tsconfig.json b/tsconfig.json index 0a063c85b..bfa83503e 100644 --- a/tsconfig.json +++ b/tsconfig.json @@ -40,6 +40,7 @@ { "path": "./packages/contract-addresses" }, { "path": "./packages/contract-artifacts" }, { "path": "./packages/contract-wrappers" }, + { "path": "./packages/contracts-gen" }, { "path": "./packages/dev-utils" }, { "path": "./packages/ethereum-types" }, { "path": "./packages/fill-scenarios" }, @@ -472,6 +472,65 @@ npmlog "^4.1.2" write-file-atomic "^2.3.0" +"@0x/sol-resolver@^1.2.3": + version "1.2.3" + resolved "https://registry.yarnpkg.com/@0x/sol-resolver/-/sol-resolver-1.2.3.tgz#d45d18a6bdeb212abf791b1cbbeac1bb780a94d0" + integrity sha512-suWsEPba/XP7DBHWdQ1t14uQ9GCuvUq2lnoxXyPmrdV5pWDVr/j2qVdd16ZNdaI+BkOCwpfR1C40Yu7WtwQk5g== + dependencies: + "@0x/types" "^1.5.2" + "@0x/typescript-typings" "^3.0.8" + lodash "^4.17.5" + +"@0x/tslint-config@^2.0.2": + version "2.0.2" + resolved "https://registry.yarnpkg.com/@0x/tslint-config/-/tslint-config-2.0.2.tgz#a202f2cb943c6e5feab7446f3a004de874fb8b94" + integrity sha512-acYC+VYv5CQwoD5PKB7TjkesBZpX4ia6xpIT6mntzE3ro3NAO+KWVs0tnVM0T/k9+BiLLGyNGiqL6oEmF63LuQ== + dependencies: + lodash "^4.17.5" + tslint "5.11.0" + tslint-eslint-rules "5.4.0" + tslint-react "^3.2.0" + tsutils "3.0.0" + +"@0x/types@^1.5.2": + version "1.5.2" + resolved "https://registry.yarnpkg.com/@0x/types/-/types-1.5.2.tgz#19c99ff796664fc256facb10e704aa6541912551" + integrity sha512-73Q5k55SHgSrt3SUwbiySBgrNEJG5WWriTjgjUzcCSYGMLawC1X/wV1cfMsP8kCqH8jWcIiPdUoGXutXjC8jQg== + dependencies: + "@types/node" "*" + bignumber.js "~4.1.0" + ethereum-types "^1.1.6" + +"@0x/typescript-typings@^3.0.8": + version "3.0.8" + resolved "https://registry.yarnpkg.com/@0x/typescript-typings/-/typescript-typings-3.0.8.tgz#85689e477c1cb5e5bd3eeee0dd1e73e9c2f1db83" + integrity sha512-WVH/Cy5/XE+fXuiriraw77pkNJc+GCUsoWLD+EMJDeBzJih/XNogZcTn1f1JApmJUX1ag05rNQ5ISQikp17YUw== + dependencies: + "@types/bn.js" "^4.11.0" + "@types/react" "*" + bignumber.js "~4.1.0" + ethereum-types "^1.1.6" + popper.js "1.14.3" + +"@0x/utils@^3.0.1": + version "3.0.1" + resolved "https://registry.yarnpkg.com/@0x/utils/-/utils-3.0.1.tgz#20ada4a98f001c0a6656d45ae56e111b73ef8803" + integrity sha512-WlOmu1aZG7/a+5z1ehmoMNCgDc2s5bdVz/hD1mywSCHeJ0CqEaElTL4zXYoMxqV/wFMmwKTlQfGKwW1xKMjI4Q== + dependencies: + "@0x/types" "^1.5.2" + "@0x/typescript-typings" "^3.0.8" + "@types/node" "*" + abortcontroller-polyfill "^1.1.9" + bignumber.js "~4.1.0" + chalk "^2.4.1" + detect-node "2.0.3" + ethereum-types "^1.1.6" + ethereumjs-util "^5.1.1" + ethers "~4.0.4" + isomorphic-fetch "^2.2.1" + js-sha3 "^0.7.0" + lodash "^4.17.5" + "@0xproject/npm-cli-login@^0.0.11": version "0.0.11" resolved "https://registry.yarnpkg.com/@0xproject/npm-cli-login/-/npm-cli-login-0.0.11.tgz#3f1ec06112ce62aad300ff0575358f68aeecde2e" @@ -1486,6 +1545,11 @@ version "0.0.29" resolved "https://registry.yarnpkg.com/@types/pluralize/-/pluralize-0.0.29.tgz#6ffa33ed1fc8813c469b859681d09707eb40d03c" +"@types/prettier@^1.15.2": + version "1.15.2" + resolved "https://registry.yarnpkg.com/@types/prettier/-/prettier-1.15.2.tgz#91594ea7cb6f3b1f7ea69f32621246654c7cc231" + integrity sha512-XIB0ZCaFZmWUHAa9dBqP5UKXXHwuukmVlP+XcyU94dui2k+l2lG+CHAbt2ffenHPUqoIs5Beh8Pdf2YEq/CZ7A== + "@types/prop-types@*": version "15.5.5" resolved "https://registry.npmjs.org/@types/prop-types/-/prop-types-15.5.5.tgz#17038dd322c2325f5da650a94d5f9974943625e3" @@ -6285,6 +6349,14 @@ ethereum-common@^0.0.18: version "0.0.18" resolved "https://registry.yarnpkg.com/ethereum-common/-/ethereum-common-0.0.18.tgz#2fdc3576f232903358976eb39da783213ff9523f" +ethereum-types@^1.1.6: + version "1.1.6" + resolved "https://registry.yarnpkg.com/ethereum-types/-/ethereum-types-1.1.6.tgz#14437dbf401de361e70dac6358e5f2915ad3c35d" + integrity sha512-/1ixUyyg0f3Gor+U+3Kc3o9AvS8V5hNVHS9qeNXlooqVee+FIpv5kq+SOgMpKSNSVKp4wBJSjrzp0ShjbKo3bA== + dependencies: + "@types/node" "*" + bignumber.js "~4.1.0" + ethereumjs-abi@0.6.5: version "0.6.5" resolved "https://registry.yarnpkg.com/ethereumjs-abi/-/ethereumjs-abi-0.6.5.tgz#5a637ef16ab43473fa72a29ad90871405b3f5241" @@ -7793,7 +7865,8 @@ got@^6.7.1: graceful-fs@4.1.15, graceful-fs@^3.0.0, graceful-fs@^4.0.0, graceful-fs@^4.1.10, graceful-fs@^4.1.11, graceful-fs@^4.1.2, graceful-fs@^4.1.6, graceful-fs@^4.1.9, graceful-fs@~1.2.0: version "4.1.15" - resolved "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.1.15.tgz#ffb703e1066e8a0eeaa4c8b80ba9253eeefbfb00" + resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.1.15.tgz#ffb703e1066e8a0eeaa4c8b80ba9253eeefbfb00" + integrity sha512-6uHUhOPEBgQ24HM+r6b/QwWfZq+yiFcipKFrOFiBEnWdy5sdzYoi+pJeQaPI5qOLRFqWmAXUPQNsielzdLoecA== "graceful-readlink@>= 1.0.0": version "1.0.1" @@ -9069,7 +9142,7 @@ isobject@^3.0.0, isobject@^3.0.1: version "3.0.1" resolved "https://registry.yarnpkg.com/isobject/-/isobject-3.0.1.tgz#4e431e92b11a9731636aa1f9c8d1ccbcfdab78df" -isomorphic-fetch@2.2.1, isomorphic-fetch@^2.1.1: +isomorphic-fetch@2.2.1, isomorphic-fetch@^2.1.1, isomorphic-fetch@^2.2.1: version "2.2.1" resolved "https://registry.yarnpkg.com/isomorphic-fetch/-/isomorphic-fetch-2.2.1.tgz#611ae1acf14f5e81f729507472819fe9733558a9" dependencies: @@ -12793,6 +12866,11 @@ prettier@^1.14.3, prettier@^1.15.3: version "1.15.3" resolved "https://registry.yarnpkg.com/prettier/-/prettier-1.15.3.tgz#1feaac5bdd181237b54dbe65d874e02a1472786a" +prettier@^1.16.3: + version "1.16.3" + resolved "https://registry.yarnpkg.com/prettier/-/prettier-1.16.3.tgz#8c62168453badef702f34b45b6ee899574a6a65d" + integrity sha512-kn/GU6SMRYPxUakNXhpP0EedT/KmaPzr0H5lIsDogrykbaxOpOfAFfk5XA7DZrJyMAv1wlMV3CPcZruGXVVUZw== + pretty-bytes@^1.0.4: version "1.0.4" resolved "https://registry.yarnpkg.com/pretty-bytes/-/pretty-bytes-1.0.4.tgz#0a22e8210609ad35542f8c8d5d2159aff0751c84" @@ -13395,6 +13473,8 @@ react-highlight@0xproject/react-highlight#react-peer-deps: dependencies: highlight.js "^9.11.0" highlightjs-solidity "^1.0.5" + react "^16.5.2" + react-dom "^16.5.2" react-hot-loader@^4.3.3: version "4.3.4" @@ -14910,6 +14990,7 @@ smart-buffer@^4.0.1: snake-case@^2.1.0: version "2.1.0" resolved "https://registry.yarnpkg.com/snake-case/-/snake-case-2.1.0.tgz#41bdb1b73f30ec66a04d4e2cad1b76387d4d6d9f" + integrity sha1-Qb2xtz8w7GagTU4srRt2OH1NbZ8= dependencies: no-case "^2.2.0" @@ -16047,6 +16128,7 @@ to-regex@^3.0.1, to-regex@^3.0.2: to-snake-case@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/to-snake-case/-/to-snake-case-1.0.0.tgz#ce746913897946019a87e62edfaeaea4c608ab8c" + integrity sha1-znRpE4l5RgGah+Yu366upMYIq4w= dependencies: to-space-case "^1.0.0" |