diff options
Diffstat (limited to 'packages/contracts/src')
-rw-r--r-- | packages/contracts/src/contracts/previous/Exchange/Exchange_v1.sol | 2 | ||||
-rw-r--r-- | packages/contracts/src/utils/artifacts.ts | 48 | ||||
-rw-r--r-- | packages/contracts/src/utils/chai_setup.ts | 13 | ||||
-rw-r--r-- | packages/contracts/src/utils/constants.ts | 10 | ||||
-rw-r--r-- | packages/contracts/src/utils/crypto.ts | 2 | ||||
-rw-r--r-- | packages/contracts/src/utils/erc20_wrapper.ts | 33 | ||||
-rw-r--r-- | packages/contracts/src/utils/erc721_wrapper.ts | 31 | ||||
-rw-r--r-- | packages/contracts/src/utils/log_decoder.ts | 11 | ||||
-rw-r--r-- | packages/contracts/src/utils/multi_sig_wrapper.ts | 4 | ||||
-rw-r--r-- | packages/contracts/src/utils/token_registry_wrapper.ts | 8 | ||||
-rw-r--r-- | packages/contracts/src/utils/types.ts | 16 | ||||
-rw-r--r-- | packages/contracts/src/utils/web3_wrapper.ts | 12 |
12 files changed, 106 insertions, 84 deletions
diff --git a/packages/contracts/src/contracts/previous/Exchange/Exchange_v1.sol b/packages/contracts/src/contracts/previous/Exchange/Exchange_v1.sol index f85e1a7ea..3f8e7368d 100644 --- a/packages/contracts/src/contracts/previous/Exchange/Exchange_v1.sol +++ b/packages/contracts/src/contracts/previous/Exchange/Exchange_v1.sol @@ -85,7 +85,7 @@ contract Exchange_v1 is SafeMath { bytes32 orderHash; } - function Exchange(address _zrxToken, address _tokenTransferProxy) { + function Exchange_v1(address _zrxToken, address _tokenTransferProxy) { ZRX_TOKEN_CONTRACT = _zrxToken; TOKEN_TRANSFER_PROXY_CONTRACT = _tokenTransferProxy; } diff --git a/packages/contracts/src/utils/artifacts.ts b/packages/contracts/src/utils/artifacts.ts index 78ba1c142..caf5b94fd 100644 --- a/packages/contracts/src/utils/artifacts.ts +++ b/packages/contracts/src/utils/artifacts.ts @@ -1,19 +1,37 @@ -import * as DummyERC20TokenArtifact from '../artifacts/DummyERC20Token.json'; -import * as ExchangeArtifact from '../artifacts/Exchange.json'; -import * as MultiSigWalletWithTimeLockArtifact from '../artifacts/MultiSigWalletWithTimeLock.json'; -import * as MultiSigWalletWithTimeLockExceptRemoveAuthorizedAddressArtifact from '../artifacts/MultiSigWalletWithTimeLockExceptRemoveAuthorizedAddress.json'; -import * as TokenRegistryArtifact from '../artifacts/TokenRegistry.json'; -import * as EtherTokenArtifact from '../artifacts/WETH9.json'; -import * as ZRXArtifact from '../artifacts/ZRXToken.json'; +import { ContractArtifact } from '@0xproject/sol-compiler'; -import { Artifact } from './types'; +import * as DummyERC20Token from '../artifacts/DummyERC20Token.json'; +import * as DummyERC721Token from '../artifacts/DummyERC721Token.json'; +import * as ERC20Proxy from '../artifacts/ERC20Proxy.json'; +import * as ERC721Proxy from '../artifacts/ERC721Proxy.json'; +import * as Exchange from '../artifacts/Exchange.json'; +import * as MixinAuthorizable from '../artifacts/MixinAuthorizable.json'; +import * as MultiSigWallet from '../artifacts/MultiSigWallet.json'; +import * as MultiSigWalletWithTimeLock from '../artifacts/MultiSigWalletWithTimeLock.json'; +import * as MultiSigWalletWithTimeLockExceptRemoveAuthorizedAddress from '../artifacts/MultiSigWalletWithTimeLockExceptRemoveAuthorizedAddress.json'; +import * as TestAssetProxyDispatcher from '../artifacts/TestAssetProxyDispatcher.json'; +import * as TestLibBytes from '../artifacts/TestLibBytes.json'; +import * as TestLibs from '../artifacts/TestLibs.json'; +import * as TestSignatureValidator from '../artifacts/TestSignatureValidator.json'; +import * as TokenRegistry from '../artifacts/TokenRegistry.json'; +import * as EtherToken from '../artifacts/WETH9.json'; +import * as ZRX from '../artifacts/ZRXToken.json'; export const artifacts = { - ZRXArtifact: (ZRXArtifact as any) as Artifact, - DummyERC20TokenArtifact: (DummyERC20TokenArtifact as any) as Artifact, - ExchangeArtifact: (ExchangeArtifact as any) as Artifact, - EtherTokenArtifact: (EtherTokenArtifact as any) as Artifact, - TokenRegistryArtifact: (TokenRegistryArtifact as any) as Artifact, - MultiSigWalletWithTimeLockArtifact: (MultiSigWalletWithTimeLockArtifact as any) as Artifact, - MultiSigWalletWithTimeLockExceptRemoveAuthorizedAddressArtifact: (MultiSigWalletWithTimeLockExceptRemoveAuthorizedAddressArtifact as any) as Artifact, + DummyERC20Token: (DummyERC20Token as any) as ContractArtifact, + DummyERC721Token: (DummyERC721Token as any) as ContractArtifact, + ERC20Proxy: (ERC20Proxy as any) as ContractArtifact, + ERC721Proxy: (ERC721Proxy as any) as ContractArtifact, + Exchange: (Exchange as any) as ContractArtifact, + EtherToken: (EtherToken as any) as ContractArtifact, + MixinAuthorizable: (MixinAuthorizable as any) as ContractArtifact, + MultiSigWallet: (MultiSigWallet as any) as ContractArtifact, + MultiSigWalletWithTimeLock: (MultiSigWalletWithTimeLock as any) as ContractArtifact, + MultiSigWalletWithTimeLockExceptRemoveAuthorizedAddress: (MultiSigWalletWithTimeLockExceptRemoveAuthorizedAddress as any) as ContractArtifact, + TestAssetProxyDispatcher: (TestAssetProxyDispatcher as any) as ContractArtifact, + TestLibBytes: (TestLibBytes as any) as ContractArtifact, + TestLibs: (TestLibs as any) as ContractArtifact, + TestSignatureValidator: (TestSignatureValidator as any) as ContractArtifact, + TokenRegistry: (TokenRegistry as any) as ContractArtifact, + ZRX: (ZRX as any) as ContractArtifact, }; diff --git a/packages/contracts/src/utils/chai_setup.ts b/packages/contracts/src/utils/chai_setup.ts new file mode 100644 index 000000000..1a8733093 --- /dev/null +++ b/packages/contracts/src/utils/chai_setup.ts @@ -0,0 +1,13 @@ +import * as chai from 'chai'; +import chaiAsPromised = require('chai-as-promised'); +import ChaiBigNumber = require('chai-bignumber'); +import * as dirtyChai from 'dirty-chai'; + +export const chaiSetup = { + configure(): void { + chai.config.includeStack = true; + chai.use(ChaiBigNumber()); + chai.use(dirtyChai); + chai.use(chaiAsPromised); + }, +}; diff --git a/packages/contracts/src/utils/constants.ts b/packages/contracts/src/utils/constants.ts index 2c9d7b272..3fd2a0a3b 100644 --- a/packages/contracts/src/utils/constants.ts +++ b/packages/contracts/src/utils/constants.ts @@ -3,10 +3,6 @@ import { BigNumber } from '@0xproject/utils'; import * as ethUtil from 'ethereumjs-util'; import * as _ from 'lodash'; -const DUMMY_TOKEN_NAME = ''; -const DUMMY_TOKEN_SYMBOL = ''; -const DUMMY_TOKEN_DECIMALS = 18; -const DUMMY_TOKEN_TOTAL_SUPPLY = 0; const TESTRPC_PRIVATE_KEYS_STRINGS = [ '0xf2f48ee19680706196e2e339e5da3491186e0c4c5030670656b0e0164837257d', '0x5d862464fe9303452126c8bc94274b8c5f9874cbd219789b3eb2128075a76f72', @@ -27,8 +23,10 @@ export const constants = { MAX_ETHERTOKEN_WITHDRAW_GAS: 43000, MAX_TOKEN_TRANSFERFROM_GAS: 80000, MAX_TOKEN_APPROVE_GAS: 60000, - DUMMY_ERC20_TOKEN_ARGS: [DUMMY_TOKEN_NAME, DUMMY_TOKEN_SYMBOL, DUMMY_TOKEN_DECIMALS, DUMMY_TOKEN_TOTAL_SUPPLY], - DUMMY_ERC721_TOKEN_ARGS: [DUMMY_TOKEN_NAME, DUMMY_TOKEN_SYMBOL], + DUMMY_TOKEN_NAME: '', + DUMMY_TOKEN_SYMBOL: '', + DUMMY_TOKEN_DECIMALS: new BigNumber(18), + DUMMY_TOKEN_TOTAL_SUPPLY: new BigNumber(0), NUM_DUMMY_ERC20_TO_DEPLOY: 3, NUM_DUMMY_ERC721_TO_DEPLOY: 1, NUM_ERC721_TOKENS_TO_MINT: 2, diff --git a/packages/contracts/src/utils/crypto.ts b/packages/contracts/src/utils/crypto.ts index 222cb7cca..80c5f30a5 100644 --- a/packages/contracts/src/utils/crypto.ts +++ b/packages/contracts/src/utils/crypto.ts @@ -18,7 +18,7 @@ export const crypto = { solSHA256(args: any[]): Buffer { return crypto._solHash(args, ABI.soliditySHA256); }, - _solHash(args: any[], hashFunction: (types: string[], values: any[]) => Buffer) { + _solHash(args: any[], hashFunction: (types: string[], values: any[]) => Buffer): Buffer { const argTypes: string[] = []; _.each(args, (arg, i) => { const isNumber = _.isFinite(arg); diff --git a/packages/contracts/src/utils/erc20_wrapper.ts b/packages/contracts/src/utils/erc20_wrapper.ts index c2effb617..f12571b48 100644 --- a/packages/contracts/src/utils/erc20_wrapper.ts +++ b/packages/contracts/src/utils/erc20_wrapper.ts @@ -1,4 +1,3 @@ -import { Deployer } from '@0xproject/deployer'; import { Provider } from '@0xproject/types'; import { BigNumber } from '@0xproject/utils'; import * as _ from 'lodash'; @@ -6,41 +5,43 @@ import * as _ from 'lodash'; import { DummyERC20TokenContract } from '../contract_wrappers/generated/dummy_e_r_c20_token'; import { ERC20ProxyContract } from '../contract_wrappers/generated/e_r_c20_proxy'; +import { artifacts } from './artifacts'; import { constants } from './constants'; -import { ContractName, ERC20BalancesByOwner } from './types'; +import { ERC20BalancesByOwner } from './types'; +import { txDefaults } from './web3_wrapper'; export class ERC20Wrapper { private _tokenOwnerAddresses: string[]; private _contractOwnerAddress: string; - private _deployer: Deployer; private _provider: Provider; private _dummyTokenContracts?: DummyERC20TokenContract[]; private _proxyContract?: ERC20ProxyContract; - constructor(deployer: Deployer, provider: Provider, tokenOwnerAddresses: string[], contractOwnerAddress: string) { - this._deployer = deployer; + constructor(provider: Provider, tokenOwnerAddresses: string[], contractOwnerAddress: string) { this._provider = provider; this._tokenOwnerAddresses = tokenOwnerAddresses; this._contractOwnerAddress = contractOwnerAddress; } public async deployDummyTokensAsync(): Promise<DummyERC20TokenContract[]> { - const tokenContractInstances = await Promise.all( + this._dummyTokenContracts = await Promise.all( _.times(constants.NUM_DUMMY_ERC20_TO_DEPLOY, () => - this._deployer.deployAsync(ContractName.DummyERC20Token, constants.DUMMY_ERC20_TOKEN_ARGS), + DummyERC20TokenContract.deployFrom0xArtifactAsync( + artifacts.DummyERC20Token, + this._provider, + txDefaults, + constants.DUMMY_TOKEN_NAME, + constants.DUMMY_TOKEN_SYMBOL, + constants.DUMMY_TOKEN_DECIMALS, + constants.DUMMY_TOKEN_TOTAL_SUPPLY, + ), ), ); - this._dummyTokenContracts = _.map( - tokenContractInstances, - tokenContractInstance => - new DummyERC20TokenContract(tokenContractInstance.abi, tokenContractInstance.address, this._provider), - ); return this._dummyTokenContracts; } public async deployProxyAsync(): Promise<ERC20ProxyContract> { - const proxyContractInstance = await this._deployer.deployAsync(ContractName.ERC20Proxy); - this._proxyContract = new ERC20ProxyContract( - proxyContractInstance.abi, - proxyContractInstance.address, + this._proxyContract = await ERC20ProxyContract.deployFrom0xArtifactAsync( + artifacts.ERC20Proxy, this._provider, + txDefaults, ); return this._proxyContract; } diff --git a/packages/contracts/src/utils/erc721_wrapper.ts b/packages/contracts/src/utils/erc721_wrapper.ts index b78b76b51..5b5de262f 100644 --- a/packages/contracts/src/utils/erc721_wrapper.ts +++ b/packages/contracts/src/utils/erc721_wrapper.ts @@ -1,5 +1,4 @@ import { ZeroEx } from '0x.js'; -import { Deployer } from '@0xproject/deployer'; import { Provider } from '@0xproject/types'; import { BigNumber } from '@0xproject/utils'; import * as _ from 'lodash'; @@ -7,42 +6,42 @@ import * as _ from 'lodash'; import { DummyERC721TokenContract } from '../contract_wrappers/generated/dummy_e_r_c721_token'; import { ERC721ProxyContract } from '../contract_wrappers/generated/e_r_c721_proxy'; +import { artifacts } from './artifacts'; import { constants } from './constants'; -import { ContractName, ERC721TokenIdsByOwner } from './types'; +import { ERC721TokenIdsByOwner } from './types'; +import { txDefaults } from './web3_wrapper'; export class ERC721Wrapper { private _tokenOwnerAddresses: string[]; private _contractOwnerAddress: string; - private _deployer: Deployer; private _provider: Provider; private _dummyTokenContracts?: DummyERC721TokenContract[]; private _proxyContract?: ERC721ProxyContract; private _initialTokenIdsByOwner: ERC721TokenIdsByOwner = {}; - constructor(deployer: Deployer, provider: Provider, tokenOwnerAddresses: string[], contractOwnerAddress: string) { - this._deployer = deployer; + constructor(provider: Provider, tokenOwnerAddresses: string[], contractOwnerAddress: string) { this._provider = provider; this._tokenOwnerAddresses = tokenOwnerAddresses; this._contractOwnerAddress = contractOwnerAddress; } public async deployDummyTokensAsync(): Promise<DummyERC721TokenContract[]> { - const tokenContractInstances = await Promise.all( + this._dummyTokenContracts = await Promise.all( _.times(constants.NUM_DUMMY_ERC721_TO_DEPLOY, () => - this._deployer.deployAsync(ContractName.DummyERC721Token, constants.DUMMY_ERC721_TOKEN_ARGS), + DummyERC721TokenContract.deployFrom0xArtifactAsync( + artifacts.DummyERC721Token, + this._provider, + txDefaults, + constants.DUMMY_TOKEN_NAME, + constants.DUMMY_TOKEN_SYMBOL, + ), ), ); - this._dummyTokenContracts = _.map( - tokenContractInstances, - tokenContractInstance => - new DummyERC721TokenContract(tokenContractInstance.abi, tokenContractInstance.address, this._provider), - ); return this._dummyTokenContracts; } public async deployProxyAsync(): Promise<ERC721ProxyContract> { - const proxyContractInstance = await this._deployer.deployAsync(ContractName.ERC721Proxy); - this._proxyContract = new ERC721ProxyContract( - proxyContractInstance.abi, - proxyContractInstance.address, + this._proxyContract = await ERC721ProxyContract.deployFrom0xArtifactAsync( + artifacts.ERC721Proxy, this._provider, + txDefaults, ); return this._proxyContract; } diff --git a/packages/contracts/src/utils/log_decoder.ts b/packages/contracts/src/utils/log_decoder.ts index 291b85dd2..747c7644d 100644 --- a/packages/contracts/src/utils/log_decoder.ts +++ b/packages/contracts/src/utils/log_decoder.ts @@ -1,9 +1,9 @@ +import { ContractArtifact } from '@0xproject/sol-compiler'; import { AbiDefinition, LogEntry, LogWithDecodedArgs, RawLog } from '@0xproject/types'; import { AbiDecoder, BigNumber } from '@0xproject/utils'; import * as _ from 'lodash'; import { artifacts } from './artifacts'; -import { Artifact } from './types'; export class LogDecoder { private _abiDecoder: AbiDecoder; @@ -12,12 +12,9 @@ export class LogDecoder { throw new Error('networkId not specified'); } const abiArrays: AbiDefinition[][] = []; - _.forEach(artifacts, (artifact: Artifact) => { - const networkIfExists = artifact.networks[networkIdIfExists]; - if (_.isUndefined(networkIfExists)) { - throw new Error(`Artifact does not exist on network ${networkIdIfExists}`); - } - abiArrays.push(networkIfExists.abi); + _.forEach(artifacts, (artifact: ContractArtifact) => { + const compilerOutput = artifact.compilerOutput; + abiArrays.push(compilerOutput.abi); }); this._abiDecoder = new AbiDecoder(abiArrays); } diff --git a/packages/contracts/src/utils/multi_sig_wrapper.ts b/packages/contracts/src/utils/multi_sig_wrapper.ts index 84fed7944..41a1dd8d9 100644 --- a/packages/contracts/src/utils/multi_sig_wrapper.ts +++ b/packages/contracts/src/utils/multi_sig_wrapper.ts @@ -11,7 +11,7 @@ import { TransactionDataParams } from './types'; export class MultiSigWrapper { private _multiSig: MultiSigWalletContract; - public static encodeFnArgs(name: string, abi: AbiDefinition[], args: any[]) { + public static encodeFnArgs(name: string, abi: AbiDefinition[], args: any[]): string { const abiEntity = _.find(abi, { name }) as MethodAbi; if (_.isUndefined(abiEntity)) { throw new Error(`Did not find abi entry for name: ${name}`); @@ -33,7 +33,7 @@ export class MultiSigWrapper { from: string, dataParams: TransactionDataParams, value: BigNumber = new BigNumber(0), - ) { + ): Promise<string> { const { name, abi, args = [] } = dataParams; const encoded = MultiSigWrapper.encodeFnArgs(name, abi, args); return this._multiSig.submitTransaction.sendTransactionAsync(destination, value, encoded, { diff --git a/packages/contracts/src/utils/token_registry_wrapper.ts b/packages/contracts/src/utils/token_registry_wrapper.ts index 91bd5503d..86daeca62 100644 --- a/packages/contracts/src/utils/token_registry_wrapper.ts +++ b/packages/contracts/src/utils/token_registry_wrapper.ts @@ -9,7 +9,7 @@ export class TokenRegWrapper { constructor(tokenRegContract: TokenRegistryContract) { this._tokenReg = tokenRegContract; } - public async addTokenAsync(token: Token, from: string) { + public async addTokenAsync(token: Token, from: string): Promise<string> { const tx = this._tokenReg.addToken.sendTransactionAsync( token.address as string, token.name, @@ -21,7 +21,7 @@ export class TokenRegWrapper { ); return tx; } - public async getTokenMetaDataAsync(tokenAddress: string) { + public async getTokenMetaDataAsync(tokenAddress: string): Promise<Token> { const data = await this._tokenReg.getTokenMetaData.callAsync(tokenAddress); const token: Token = { address: data[0], @@ -33,7 +33,7 @@ export class TokenRegWrapper { }; return token; } - public async getTokenByNameAsync(tokenName: string) { + public async getTokenByNameAsync(tokenName: string): Promise<Token> { const data = await this._tokenReg.getTokenByName.callAsync(tokenName); const token: Token = { address: data[0], @@ -45,7 +45,7 @@ export class TokenRegWrapper { }; return token; } - public async getTokenBySymbolAsync(tokenSymbol: string) { + public async getTokenBySymbolAsync(tokenSymbol: string): Promise<Token> { const data = await this._tokenReg.getTokenBySymbol.callAsync(tokenSymbol); const token: Token = { address: data[0], diff --git a/packages/contracts/src/utils/types.ts b/packages/contracts/src/utils/types.ts index 2200e09f3..234b14ef9 100644 --- a/packages/contracts/src/utils/types.ts +++ b/packages/contracts/src/utils/types.ts @@ -103,22 +103,6 @@ export enum ContractName { Authorizable = 'Authorizable', } -export interface Artifact { - contract_name: ContractName; - networks: { - [networkId: number]: { - abi: ContractAbi; - solc_version: string; - keccak256: string; - optimizer_enabled: number; - unlinked_binary: string; - updated_at: number; - address: string; - constructor_args: string; - }; - }; -} - export interface SignedOrder extends UnsignedOrder { signature: string; } diff --git a/packages/contracts/src/utils/web3_wrapper.ts b/packages/contracts/src/utils/web3_wrapper.ts new file mode 100644 index 000000000..ed1c488a2 --- /dev/null +++ b/packages/contracts/src/utils/web3_wrapper.ts @@ -0,0 +1,12 @@ +import { devConstants, web3Factory } from '@0xproject/dev-utils'; +import { Provider } from '@0xproject/types'; +import { Web3Wrapper } from '@0xproject/web3-wrapper'; + +export const txDefaults = { + from: devConstants.TESTRPC_FIRST_ADDRESS, + gas: devConstants.GAS_ESTIMATE, +}; +const providerConfigs = { shouldUseInProcessGanache: true }; +export const web3 = web3Factory.create(providerConfigs); +export const provider = web3.currentProvider; +export const web3Wrapper = new Web3Wrapper(provider); |