aboutsummaryrefslogtreecommitdiffstats
path: root/packages/contracts
diff options
context:
space:
mode:
authorBrandon Millman <brandon.millman@gmail.com>2018-02-08 02:27:22 +0800
committerBrandon Millman <brandon.millman@gmail.com>2018-02-08 02:27:22 +0800
commitf3c6cce4559d096a2f3babfc7af670d078a6f0dd (patch)
tree580c59d474d52affc57593d25eb1d0acd480d4b0 /packages/contracts
parentd9b1d31e7310f7f554f1740f93e4ccd5b5db90f5 (diff)
parenta26e77074fdf5ea7a754a7a676ebd752668d3c82 (diff)
downloaddexon-sol-tools-f3c6cce4559d096a2f3babfc7af670d078a6f0dd.tar
dexon-sol-tools-f3c6cce4559d096a2f3babfc7af670d078a6f0dd.tar.gz
dexon-sol-tools-f3c6cce4559d096a2f3babfc7af670d078a6f0dd.tar.bz2
dexon-sol-tools-f3c6cce4559d096a2f3babfc7af670d078a6f0dd.tar.lz
dexon-sol-tools-f3c6cce4559d096a2f3babfc7af670d078a6f0dd.tar.xz
dexon-sol-tools-f3c6cce4559d096a2f3babfc7af670d078a6f0dd.tar.zst
dexon-sol-tools-f3c6cce4559d096a2f3babfc7af670d078a6f0dd.zip
Merge branch 'development' into feature/testnet-faucets/queue-by-network
* development: (24 commits) Fix Remco's github name in CODEOWNERS Fix ABI error message Stop using definite assignment assertion cause prettier doesn't handle that Special-case ZRXToken snake case conversion Fix linter errors Generate contract wrappers on pre-build Add missing async Remove noImplicitThis Tslint disable no-consecutive-blank-lines in generated files Change compiled sources in contracts Change utils Change tests Add base_contract.ts Remove generated files .gitignore gemerated files Change the list of generated wrappers Change contract templates Add indices for index parameters so that their names don't collide Use abi-gen for events in 0x.js Fix artifacts path ...
Diffstat (limited to 'packages/contracts')
-rw-r--r--packages/contracts/contract_templates/contract.handlebars26
-rw-r--r--packages/contracts/contract_templates/partials/call.handlebars10
-rw-r--r--packages/contracts/contract_templates/partials/params.handlebars3
-rw-r--r--packages/contracts/contract_templates/partials/return_type.handlebars10
-rw-r--r--packages/contracts/contract_templates/partials/tx.handlebars36
-rw-r--r--packages/contracts/contract_templates/partials/typed_params.handlebars3
-rw-r--r--packages/contracts/package.json7
-rw-r--r--packages/contracts/src/artifacts/DummyToken.json (renamed from packages/contracts/artifacts/DummyToken.json)0
-rw-r--r--packages/contracts/src/artifacts/ERC20Token.json (renamed from packages/contracts/artifacts/ERC20Token.json)0
-rw-r--r--packages/contracts/src/artifacts/ERC20Token_v1.json (renamed from packages/contracts/artifacts/ERC20Token_v1.json)0
-rw-r--r--packages/contracts/src/artifacts/Exchange.json (renamed from packages/contracts/artifacts/Exchange.json)0
-rw-r--r--packages/contracts/src/artifacts/MaliciousToken.json (renamed from packages/contracts/artifacts/MaliciousToken.json)0
-rw-r--r--packages/contracts/src/artifacts/Mintable.json (renamed from packages/contracts/artifacts/Mintable.json)0
-rw-r--r--packages/contracts/src/artifacts/MultiSigWallet.json (renamed from packages/contracts/artifacts/MultiSigWallet.json)0
-rw-r--r--packages/contracts/src/artifacts/MultiSigWalletWithTimeLock.json (renamed from packages/contracts/artifacts/MultiSigWalletWithTimeLock.json)0
-rw-r--r--packages/contracts/src/artifacts/MultiSigWalletWithTimeLockExceptRemoveAuthorizedAddress.json (renamed from packages/contracts/artifacts/MultiSigWalletWithTimeLockExceptRemoveAuthorizedAddress.json)0
-rw-r--r--packages/contracts/src/artifacts/Ownable.json (renamed from packages/contracts/artifacts/Ownable.json)0
-rw-r--r--packages/contracts/src/artifacts/Ownable_v1.json (renamed from packages/contracts/artifacts/Ownable_v1.json)0
-rw-r--r--packages/contracts/src/artifacts/SafeMath.json (renamed from packages/contracts/artifacts/SafeMath.json)0
-rw-r--r--packages/contracts/src/artifacts/SafeMath_v1.json (renamed from packages/contracts/artifacts/SafeMath_v1.json)0
-rw-r--r--packages/contracts/src/artifacts/Token.json (renamed from packages/contracts/artifacts/Token.json)0
-rw-r--r--packages/contracts/src/artifacts/TokenRegistry.json (renamed from packages/contracts/artifacts/TokenRegistry.json)0
-rw-r--r--packages/contracts/src/artifacts/TokenTransferProxy.json (renamed from packages/contracts/artifacts/TokenTransferProxy.json)0
-rw-r--r--packages/contracts/src/artifacts/Token_v1.json (renamed from packages/contracts/artifacts/Token_v1.json)0
-rw-r--r--packages/contracts/src/artifacts/UnlimitedAllowanceToken.json (renamed from packages/contracts/artifacts/UnlimitedAllowanceToken.json)0
-rw-r--r--packages/contracts/src/artifacts/UnlimitedAllowanceToken_v1.json (renamed from packages/contracts/artifacts/UnlimitedAllowanceToken_v1.json)0
-rw-r--r--packages/contracts/src/artifacts/WETH9.json (renamed from packages/contracts/artifacts/WETH9.json)0
-rw-r--r--packages/contracts/src/artifacts/ZRXToken.json (renamed from packages/contracts/artifacts/ZRXToken.json)0
-rw-r--r--packages/contracts/src/contract_wrappers/generated/.gitignore8
-rw-r--r--packages/contracts/src/contract_wrappers/generated/base_contract.ts35
-rw-r--r--packages/contracts/src/contracts/current/multisig/MultiSigWallet/MultiSigWallet.sol (renamed from packages/contracts/src/current/multisig/MultiSigWallet/MultiSigWallet.sol)0
-rw-r--r--packages/contracts/src/contracts/current/multisig/MultiSigWalletWithTimeLock/MultiSigWalletWithTimeLock.sol (renamed from packages/contracts/src/current/multisig/MultiSigWalletWithTimeLock/MultiSigWalletWithTimeLock.sol)0
-rw-r--r--packages/contracts/src/contracts/current/multisig/MultiSigWalletWithTimeLockExceptRemoveAuthorizedAddress/MultiSigWalletWithTimeLockExceptRemoveAuthorizedAddress.sol (renamed from packages/contracts/src/current/multisig/MultiSigWalletWithTimeLockExceptRemoveAuthorizedAddress/MultiSigWalletWithTimeLockExceptRemoveAuthorizedAddress.sol)0
-rw-r--r--packages/contracts/src/contracts/current/protocol/Exchange/Exchange.sol (renamed from packages/contracts/src/current/protocol/Exchange/Exchange.sol)0
-rw-r--r--packages/contracts/src/contracts/current/protocol/TokenRegistry/TokenRegistry.sol (renamed from packages/contracts/src/current/protocol/TokenRegistry/TokenRegistry.sol)0
-rw-r--r--packages/contracts/src/contracts/current/protocol/TokenTransferProxy/TokenTransferProxy.sol (renamed from packages/contracts/src/current/protocol/TokenTransferProxy/TokenTransferProxy.sol)0
-rw-r--r--packages/contracts/src/contracts/current/test/DummyToken/DummyToken.sol (renamed from packages/contracts/src/current/test/DummyToken/DummyToken.sol)0
-rw-r--r--packages/contracts/src/contracts/current/test/MaliciousToken/MaliciousToken.sol (renamed from packages/contracts/src/current/test/MaliciousToken/MaliciousToken.sol)0
-rw-r--r--packages/contracts/src/contracts/current/test/Mintable/Mintable.sol (renamed from packages/contracts/src/current/test/Mintable/Mintable.sol)0
-rw-r--r--packages/contracts/src/contracts/current/tokens/ERC20Token/ERC20Token.sol (renamed from packages/contracts/src/current/tokens/ERC20Token/ERC20Token.sol)0
-rw-r--r--packages/contracts/src/contracts/current/tokens/Token/Token.sol (renamed from packages/contracts/src/current/tokens/Token/Token.sol)0
-rw-r--r--packages/contracts/src/contracts/current/tokens/UnlimitedAllowanceToken/UnlimitedAllowanceToken.sol (renamed from packages/contracts/src/current/tokens/UnlimitedAllowanceToken/UnlimitedAllowanceToken.sol)0
-rw-r--r--packages/contracts/src/contracts/current/tokens/WETH9/WETH9.sol (renamed from packages/contracts/src/current/tokens/WETH9/WETH9.sol)0
-rw-r--r--packages/contracts/src/contracts/current/tokens/ZRXToken/ZRXToken.sol (renamed from packages/contracts/src/current/tokens/ZRXToken/ZRXToken.sol)0
-rw-r--r--packages/contracts/src/contracts/current/utils/Ownable/Ownable.sol (renamed from packages/contracts/src/current/utils/Ownable/Ownable.sol)0
-rw-r--r--packages/contracts/src/contracts/current/utils/SafeMath/SafeMath.sol (renamed from packages/contracts/src/current/utils/SafeMath/SafeMath.sol)0
-rw-r--r--packages/contracts/src/contracts/previous/ERC20Token/ERC20Token_v1.sol (renamed from packages/contracts/src/previous/ERC20Token/ERC20Token_v1.sol)0
-rw-r--r--packages/contracts/src/contracts/previous/Ownable/Ownable_v1.sol (renamed from packages/contracts/src/previous/Ownable/Ownable_v1.sol)0
-rw-r--r--packages/contracts/src/contracts/previous/SafeMath/SafeMath_v1.sol (renamed from packages/contracts/src/previous/SafeMath/SafeMath_v1.sol)0
-rw-r--r--packages/contracts/src/contracts/previous/Token/Token_v1.sol (renamed from packages/contracts/src/previous/Token/Token_v1.sol)0
-rw-r--r--packages/contracts/src/contracts/previous/UnlimitedAllowanceToken/UnlimitedAllowanceToken_v1.sol (renamed from packages/contracts/src/previous/UnlimitedAllowanceToken/UnlimitedAllowanceToken_v1.sol)0
-rw-r--r--packages/contracts/test/exchange/core.ts81
-rw-r--r--packages/contracts/test/exchange/helpers.ts7
-rw-r--r--packages/contracts/test/exchange/wrapper.ts59
-rw-r--r--packages/contracts/test/multi_sig_with_time_lock.ts70
-rw-r--r--packages/contracts/test/multi_sig_with_time_lock_except_remove_auth_addr.ts85
-rw-r--r--packages/contracts/test/token_registry.ts55
-rw-r--r--packages/contracts/test/token_transfer_proxy/auth.ts36
-rw-r--r--packages/contracts/test/token_transfer_proxy/transfer_from.ts51
-rw-r--r--packages/contracts/test/unlimited_allowance_token.ts22
-rw-r--r--packages/contracts/test/utils/deployer.ts2
-rw-r--r--packages/contracts/test/zrx_token.ts16
-rw-r--r--packages/contracts/tsconfig.json5
-rw-r--r--packages/contracts/util/artifacts.ts20
-rw-r--r--packages/contracts/util/balances.ts6
-rw-r--r--packages/contracts/util/exchange_wrapper.ts42
-rw-r--r--packages/contracts/util/multi_sig_wrapper.ts13
-rw-r--r--packages/contracts/util/token_registry_wrapper.ts14
68 files changed, 466 insertions, 256 deletions
diff --git a/packages/contracts/contract_templates/contract.handlebars b/packages/contracts/contract_templates/contract.handlebars
new file mode 100644
index 000000000..afb9708e9
--- /dev/null
+++ b/packages/contracts/contract_templates/contract.handlebars
@@ -0,0 +1,26 @@
+/**
+ * This file is auto-generated using abi-gen. Don't edit directly.
+ * Templates can be found at https://github.com/0xProject/0x.js/tree/development/packages/abi-gen-templates.
+ */
+// tslint:disable:async-suffix member-ordering no-consecutive-blank-lines
+// tslint:disable-next-line:no-unused-variable
+import { TxData, TxDataPayable } from '@0xproject/types';
+import { BigNumber, classUtils, promisify } from '@0xproject/utils';
+import * as Web3 from 'web3';
+
+import {BaseContract} from './base_contract';
+
+export class {{contractName}}Contract extends BaseContract {
+{{#each methods}}
+ {{#this.constant}}
+ {{> call contractName=../contractName}}
+ {{/this.constant}}
+ {{^this.constant}}
+ {{> tx contractName=../contractName}}
+ {{/this.constant}}
+{{/each}}
+ constructor(web3ContractInstance: Web3.ContractInstance, defaults?: Partial<TxData>) {
+ super(web3ContractInstance, defaults);
+ classUtils.bindAll(this, ['_web3ContractInstance', '_defaults']);
+ }
+} // tslint:disable:max-file-line-count
diff --git a/packages/contracts/contract_templates/partials/call.handlebars b/packages/contracts/contract_templates/partials/call.handlebars
new file mode 100644
index 000000000..82a45b40e
--- /dev/null
+++ b/packages/contracts/contract_templates/partials/call.handlebars
@@ -0,0 +1,10 @@
+public async {{this.name}}(
+{{> typed_params inputs=inputs}}
+ defaultBlock?: Web3.BlockParam,
+): Promise<{{> return_type outputs=outputs}}> {
+ const self = this as {{contractName}}Contract;
+ const result = await self._web3ContractInstance.{{this.name}}.call(
+ {{> params inputs=inputs}}
+ );
+ return result;
+}
diff --git a/packages/contracts/contract_templates/partials/params.handlebars b/packages/contracts/contract_templates/partials/params.handlebars
new file mode 100644
index 000000000..ac5d4ae85
--- /dev/null
+++ b/packages/contracts/contract_templates/partials/params.handlebars
@@ -0,0 +1,3 @@
+{{#each inputs}}
+{{name}},
+{{/each}}
diff --git a/packages/contracts/contract_templates/partials/return_type.handlebars b/packages/contracts/contract_templates/partials/return_type.handlebars
new file mode 100644
index 000000000..40a5dd8b0
--- /dev/null
+++ b/packages/contracts/contract_templates/partials/return_type.handlebars
@@ -0,0 +1,10 @@
+{{#if outputs.length}}
+{{#singleReturnValue}}
+{{#returnType outputs.0.type}}{{/returnType}}
+{{/singleReturnValue}}
+{{^singleReturnValue}}
+[{{#each outputs}}{{#returnType type}}{{/returnType}}{{#unless @last}}, {{/unless}}{{/each}}]
+{{/singleReturnValue}}
+{{else}}
+void
+{{/if}}
diff --git a/packages/contracts/contract_templates/partials/tx.handlebars b/packages/contracts/contract_templates/partials/tx.handlebars
new file mode 100644
index 000000000..69ae982d6
--- /dev/null
+++ b/packages/contracts/contract_templates/partials/tx.handlebars
@@ -0,0 +1,36 @@
+public {{this.name}} = {
+ async sendTransactionAsync(
+ {{> typed_params inputs=inputs}}
+ {{#this.payable}}
+ txData: TxDataPayable = {},
+ {{/this.payable}}
+ {{^this.payable}}
+ txData: TxData = {},
+ {{/this.payable}}
+ ): Promise<string> {
+ const self = this as {{contractName}}Contract;
+ const txDataWithDefaults = await self._applyDefaultsToTxDataAsync(txData);
+ const txHash = await self._web3ContractInstance.{{this.name}}(
+ {{> params inputs=inputs}}
+ txDataWithDefaults,
+ );
+ return txHash;
+ },
+ async callAsync(
+ {{> typed_params inputs=inputs}}
+ {{#this.payable}}
+ txData: TxDataPayable = {},
+ {{/this.payable}}
+ {{^this.payable}}
+ txData: TxData = {},
+ {{/this.payable}}
+ ): Promise<{{> return_type outputs=outputs}}> {
+ const self = this as {{contractName}}Contract;
+ const txDataWithDefaults = await self._applyDefaultsToTxDataAsync(txData);
+ const returnValue = await self._web3ContractInstance.{{this.name}}.call(
+ {{> params inputs=inputs}}
+ txDataWithDefaults,
+ );
+ return returnValue;
+ },
+};
diff --git a/packages/contracts/contract_templates/partials/typed_params.handlebars b/packages/contracts/contract_templates/partials/typed_params.handlebars
new file mode 100644
index 000000000..3ea4b2e95
--- /dev/null
+++ b/packages/contracts/contract_templates/partials/typed_params.handlebars
@@ -0,0 +1,3 @@
+{{#each inputs}}
+ {{name}}: {{#parameterType type}}{{/parameterType}},
+{{/each}}
diff --git a/packages/contracts/package.json b/packages/contracts/package.json
index b4074193d..af7441d85 100644
--- a/packages/contracts/package.json
+++ b/packages/contracts/package.json
@@ -9,14 +9,15 @@
},
"scripts": {
"build:watch": "tsc -w",
- "prebuild": "run-s clean copy_artifacts",
- "copy_artifacts": "copyfiles './artifacts/**/*' ./lib",
+ "prebuild": "run-s clean copy_artifacts generate_contract_wrappers",
+ "copy_artifacts": "copyfiles './src/artifacts/**/*' ./lib",
"build": "tsc",
"test": "run-s compile build run_mocha",
"run_mocha": "mocha 'lib/test/**/*.js' --timeout 10000 --bail --exit",
"compile:comment": "Yarn workspaces do not link binaries correctly so we need to reference them directly https://github.com/yarnpkg/yarn/issues/3846",
- "compile": "node ../deployer/lib/src/cli.js compile",
+ "compile": "node ../deployer/lib/src/cli.js compile --contracts-dir src/contracts --artifacts-dir src/artifacts",
"clean": "rm -rf ./lib",
+ "generate_contract_wrappers": "node ../abi-gen/lib/index.js --abis 'src/artifacts/@(DummyToken|TokenTransferProxy|Exchange|TokenRegistry|MultiSigWallet|MultiSigWalletWithTimeLock|MultiSigWalletWithTimeLockExceptRemoveAuthorizedAddress|TokenRegistry|ZRXToken).json' --template contract_templates/contract.handlebars --partials 'contract_templates/partials/**/*.handlebars' --output src/contract_wrappers/generated",
"migrate": "node ../deployer/lib/src/cli.js migrate",
"lint": "tslint --project . 'migrations/**/*.ts' 'test/**/*.ts' 'util/**/*.ts' 'deploy/**/*.ts'",
"test:circleci": "yarn test"
diff --git a/packages/contracts/artifacts/DummyToken.json b/packages/contracts/src/artifacts/DummyToken.json
index 8be276389..8be276389 100644
--- a/packages/contracts/artifacts/DummyToken.json
+++ b/packages/contracts/src/artifacts/DummyToken.json
diff --git a/packages/contracts/artifacts/ERC20Token.json b/packages/contracts/src/artifacts/ERC20Token.json
index fc0dd5259..fc0dd5259 100644
--- a/packages/contracts/artifacts/ERC20Token.json
+++ b/packages/contracts/src/artifacts/ERC20Token.json
diff --git a/packages/contracts/artifacts/ERC20Token_v1.json b/packages/contracts/src/artifacts/ERC20Token_v1.json
index 757962064..757962064 100644
--- a/packages/contracts/artifacts/ERC20Token_v1.json
+++ b/packages/contracts/src/artifacts/ERC20Token_v1.json
diff --git a/packages/contracts/artifacts/Exchange.json b/packages/contracts/src/artifacts/Exchange.json
index ea3891d94..ea3891d94 100644
--- a/packages/contracts/artifacts/Exchange.json
+++ b/packages/contracts/src/artifacts/Exchange.json
diff --git a/packages/contracts/artifacts/MaliciousToken.json b/packages/contracts/src/artifacts/MaliciousToken.json
index 000cb890d..000cb890d 100644
--- a/packages/contracts/artifacts/MaliciousToken.json
+++ b/packages/contracts/src/artifacts/MaliciousToken.json
diff --git a/packages/contracts/artifacts/Mintable.json b/packages/contracts/src/artifacts/Mintable.json
index 9877fce84..9877fce84 100644
--- a/packages/contracts/artifacts/Mintable.json
+++ b/packages/contracts/src/artifacts/Mintable.json
diff --git a/packages/contracts/artifacts/MultiSigWallet.json b/packages/contracts/src/artifacts/MultiSigWallet.json
index 47bca568e..47bca568e 100644
--- a/packages/contracts/artifacts/MultiSigWallet.json
+++ b/packages/contracts/src/artifacts/MultiSigWallet.json
diff --git a/packages/contracts/artifacts/MultiSigWalletWithTimeLock.json b/packages/contracts/src/artifacts/MultiSigWalletWithTimeLock.json
index 2c97612ac..2c97612ac 100644
--- a/packages/contracts/artifacts/MultiSigWalletWithTimeLock.json
+++ b/packages/contracts/src/artifacts/MultiSigWalletWithTimeLock.json
diff --git a/packages/contracts/artifacts/MultiSigWalletWithTimeLockExceptRemoveAuthorizedAddress.json b/packages/contracts/src/artifacts/MultiSigWalletWithTimeLockExceptRemoveAuthorizedAddress.json
index d65371cf2..d65371cf2 100644
--- a/packages/contracts/artifacts/MultiSigWalletWithTimeLockExceptRemoveAuthorizedAddress.json
+++ b/packages/contracts/src/artifacts/MultiSigWalletWithTimeLockExceptRemoveAuthorizedAddress.json
diff --git a/packages/contracts/artifacts/Ownable.json b/packages/contracts/src/artifacts/Ownable.json
index 5a2a84a6d..5a2a84a6d 100644
--- a/packages/contracts/artifacts/Ownable.json
+++ b/packages/contracts/src/artifacts/Ownable.json
diff --git a/packages/contracts/artifacts/Ownable_v1.json b/packages/contracts/src/artifacts/Ownable_v1.json
index 250952533..250952533 100644
--- a/packages/contracts/artifacts/Ownable_v1.json
+++ b/packages/contracts/src/artifacts/Ownable_v1.json
diff --git a/packages/contracts/artifacts/SafeMath.json b/packages/contracts/src/artifacts/SafeMath.json
index cbe88bef6..cbe88bef6 100644
--- a/packages/contracts/artifacts/SafeMath.json
+++ b/packages/contracts/src/artifacts/SafeMath.json
diff --git a/packages/contracts/artifacts/SafeMath_v1.json b/packages/contracts/src/artifacts/SafeMath_v1.json
index bad4834c0..bad4834c0 100644
--- a/packages/contracts/artifacts/SafeMath_v1.json
+++ b/packages/contracts/src/artifacts/SafeMath_v1.json
diff --git a/packages/contracts/artifacts/Token.json b/packages/contracts/src/artifacts/Token.json
index 601facc28..601facc28 100644
--- a/packages/contracts/artifacts/Token.json
+++ b/packages/contracts/src/artifacts/Token.json
diff --git a/packages/contracts/artifacts/TokenRegistry.json b/packages/contracts/src/artifacts/TokenRegistry.json
index b4264430b..b4264430b 100644
--- a/packages/contracts/artifacts/TokenRegistry.json
+++ b/packages/contracts/src/artifacts/TokenRegistry.json
diff --git a/packages/contracts/artifacts/TokenTransferProxy.json b/packages/contracts/src/artifacts/TokenTransferProxy.json
index 1815458f8..1815458f8 100644
--- a/packages/contracts/artifacts/TokenTransferProxy.json
+++ b/packages/contracts/src/artifacts/TokenTransferProxy.json
diff --git a/packages/contracts/artifacts/Token_v1.json b/packages/contracts/src/artifacts/Token_v1.json
index a2f3f6a24..a2f3f6a24 100644
--- a/packages/contracts/artifacts/Token_v1.json
+++ b/packages/contracts/src/artifacts/Token_v1.json
diff --git a/packages/contracts/artifacts/UnlimitedAllowanceToken.json b/packages/contracts/src/artifacts/UnlimitedAllowanceToken.json
index f6415840b..f6415840b 100644
--- a/packages/contracts/artifacts/UnlimitedAllowanceToken.json
+++ b/packages/contracts/src/artifacts/UnlimitedAllowanceToken.json
diff --git a/packages/contracts/artifacts/UnlimitedAllowanceToken_v1.json b/packages/contracts/src/artifacts/UnlimitedAllowanceToken_v1.json
index 731a4e4ee..731a4e4ee 100644
--- a/packages/contracts/artifacts/UnlimitedAllowanceToken_v1.json
+++ b/packages/contracts/src/artifacts/UnlimitedAllowanceToken_v1.json
diff --git a/packages/contracts/artifacts/WETH9.json b/packages/contracts/src/artifacts/WETH9.json
index ffe11ce40..ffe11ce40 100644
--- a/packages/contracts/artifacts/WETH9.json
+++ b/packages/contracts/src/artifacts/WETH9.json
diff --git a/packages/contracts/artifacts/ZRXToken.json b/packages/contracts/src/artifacts/ZRXToken.json
index 285cc1dfd..285cc1dfd 100644
--- a/packages/contracts/artifacts/ZRXToken.json
+++ b/packages/contracts/src/artifacts/ZRXToken.json
diff --git a/packages/contracts/src/contract_wrappers/generated/.gitignore b/packages/contracts/src/contract_wrappers/generated/.gitignore
new file mode 100644
index 000000000..b976a8737
--- /dev/null
+++ b/packages/contracts/src/contract_wrappers/generated/.gitignore
@@ -0,0 +1,8 @@
+dummy_token.ts
+exchange.ts
+multi_sig_wallet_with_time_lock_except_remove_authorized_address.ts
+multi_sig_wallet_with_time_lock.ts
+multi_sig_wallet.ts
+token_registry.ts
+token_transfer_proxy.ts
+zrx_token.ts
diff --git a/packages/contracts/src/contract_wrappers/generated/base_contract.ts b/packages/contracts/src/contract_wrappers/generated/base_contract.ts
new file mode 100644
index 000000000..2d77b3ab1
--- /dev/null
+++ b/packages/contracts/src/contract_wrappers/generated/base_contract.ts
@@ -0,0 +1,35 @@
+import {TxData, TxDataPayable} from '@0xproject/types';
+import * as _ from 'lodash';
+import * as Web3 from 'web3';
+
+export class BaseContract {
+ public address: string;
+ protected _web3ContractInstance: Web3.ContractInstance;
+ protected _defaults: Partial<TxData>;
+ protected async _applyDefaultsToTxDataAsync<T extends TxData|TxDataPayable>(
+ txData: T,
+ estimateGasAsync?: (txData: T) => Promise<number>,
+ ): Promise<TxData> {
+ // Gas amount sourced with the following priorities:
+ // 1. Optional param passed in to public method call
+ // 2. Global config passed in at library instantiation
+ // 3. Gas estimate calculation + safety margin
+ const removeUndefinedProperties = _.pickBy;
+ const txDataWithDefaults = {
+ ...removeUndefinedProperties(this._defaults),
+ ...removeUndefinedProperties(txData as any),
+ // HACK: TS can't prove that T is spreadable.
+ // Awaiting https://github.com/Microsoft/TypeScript/pull/13288 to be merged
+ };
+ if (_.isUndefined(txDataWithDefaults.gas) && !_.isUndefined(estimateGasAsync)) {
+ const estimatedGas = await estimateGasAsync(txData);
+ txDataWithDefaults.gas = estimatedGas;
+ }
+ return txDataWithDefaults;
+ }
+ constructor(web3ContractInstance: Web3.ContractInstance, defaults?: Partial<TxData>) {
+ this.address = web3ContractInstance.address;
+ this._web3ContractInstance = web3ContractInstance;
+ this._defaults = defaults || {};
+ }
+}
diff --git a/packages/contracts/src/current/multisig/MultiSigWallet/MultiSigWallet.sol b/packages/contracts/src/contracts/current/multisig/MultiSigWallet/MultiSigWallet.sol
index 997bb86c0..997bb86c0 100644
--- a/packages/contracts/src/current/multisig/MultiSigWallet/MultiSigWallet.sol
+++ b/packages/contracts/src/contracts/current/multisig/MultiSigWallet/MultiSigWallet.sol
diff --git a/packages/contracts/src/current/multisig/MultiSigWalletWithTimeLock/MultiSigWalletWithTimeLock.sol b/packages/contracts/src/contracts/current/multisig/MultiSigWalletWithTimeLock/MultiSigWalletWithTimeLock.sol
index a545d9813..a545d9813 100644
--- a/packages/contracts/src/current/multisig/MultiSigWalletWithTimeLock/MultiSigWalletWithTimeLock.sol
+++ b/packages/contracts/src/contracts/current/multisig/MultiSigWalletWithTimeLock/MultiSigWalletWithTimeLock.sol
diff --git a/packages/contracts/src/current/multisig/MultiSigWalletWithTimeLockExceptRemoveAuthorizedAddress/MultiSigWalletWithTimeLockExceptRemoveAuthorizedAddress.sol b/packages/contracts/src/contracts/current/multisig/MultiSigWalletWithTimeLockExceptRemoveAuthorizedAddress/MultiSigWalletWithTimeLockExceptRemoveAuthorizedAddress.sol
index 3c6a3d2ef..3c6a3d2ef 100644
--- a/packages/contracts/src/current/multisig/MultiSigWalletWithTimeLockExceptRemoveAuthorizedAddress/MultiSigWalletWithTimeLockExceptRemoveAuthorizedAddress.sol
+++ b/packages/contracts/src/contracts/current/multisig/MultiSigWalletWithTimeLockExceptRemoveAuthorizedAddress/MultiSigWalletWithTimeLockExceptRemoveAuthorizedAddress.sol
diff --git a/packages/contracts/src/current/protocol/Exchange/Exchange.sol b/packages/contracts/src/contracts/current/protocol/Exchange/Exchange.sol
index 8dacf797c..8dacf797c 100644
--- a/packages/contracts/src/current/protocol/Exchange/Exchange.sol
+++ b/packages/contracts/src/contracts/current/protocol/Exchange/Exchange.sol
diff --git a/packages/contracts/src/current/protocol/TokenRegistry/TokenRegistry.sol b/packages/contracts/src/contracts/current/protocol/TokenRegistry/TokenRegistry.sol
index 3bd2fbfaf..3bd2fbfaf 100644
--- a/packages/contracts/src/current/protocol/TokenRegistry/TokenRegistry.sol
+++ b/packages/contracts/src/contracts/current/protocol/TokenRegistry/TokenRegistry.sol
diff --git a/packages/contracts/src/current/protocol/TokenTransferProxy/TokenTransferProxy.sol b/packages/contracts/src/contracts/current/protocol/TokenTransferProxy/TokenTransferProxy.sol
index 1ce949fa6..1ce949fa6 100644
--- a/packages/contracts/src/current/protocol/TokenTransferProxy/TokenTransferProxy.sol
+++ b/packages/contracts/src/contracts/current/protocol/TokenTransferProxy/TokenTransferProxy.sol
diff --git a/packages/contracts/src/current/test/DummyToken/DummyToken.sol b/packages/contracts/src/contracts/current/test/DummyToken/DummyToken.sol
index ab04f4d16..ab04f4d16 100644
--- a/packages/contracts/src/current/test/DummyToken/DummyToken.sol
+++ b/packages/contracts/src/contracts/current/test/DummyToken/DummyToken.sol
diff --git a/packages/contracts/src/current/test/MaliciousToken/MaliciousToken.sol b/packages/contracts/src/contracts/current/test/MaliciousToken/MaliciousToken.sol
index 9e502616c..9e502616c 100644
--- a/packages/contracts/src/current/test/MaliciousToken/MaliciousToken.sol
+++ b/packages/contracts/src/contracts/current/test/MaliciousToken/MaliciousToken.sol
diff --git a/packages/contracts/src/current/test/Mintable/Mintable.sol b/packages/contracts/src/contracts/current/test/Mintable/Mintable.sol
index cf7ee35a5..cf7ee35a5 100644
--- a/packages/contracts/src/current/test/Mintable/Mintable.sol
+++ b/packages/contracts/src/contracts/current/test/Mintable/Mintable.sol
diff --git a/packages/contracts/src/current/tokens/ERC20Token/ERC20Token.sol b/packages/contracts/src/contracts/current/tokens/ERC20Token/ERC20Token.sol
index 0e5b87aa4..0e5b87aa4 100644
--- a/packages/contracts/src/current/tokens/ERC20Token/ERC20Token.sol
+++ b/packages/contracts/src/contracts/current/tokens/ERC20Token/ERC20Token.sol
diff --git a/packages/contracts/src/current/tokens/Token/Token.sol b/packages/contracts/src/contracts/current/tokens/Token/Token.sol
index bf4e71dcd..bf4e71dcd 100644
--- a/packages/contracts/src/current/tokens/Token/Token.sol
+++ b/packages/contracts/src/contracts/current/tokens/Token/Token.sol
diff --git a/packages/contracts/src/current/tokens/UnlimitedAllowanceToken/UnlimitedAllowanceToken.sol b/packages/contracts/src/contracts/current/tokens/UnlimitedAllowanceToken/UnlimitedAllowanceToken.sol
index 699f535d2..699f535d2 100644
--- a/packages/contracts/src/current/tokens/UnlimitedAllowanceToken/UnlimitedAllowanceToken.sol
+++ b/packages/contracts/src/contracts/current/tokens/UnlimitedAllowanceToken/UnlimitedAllowanceToken.sol
diff --git a/packages/contracts/src/current/tokens/WETH9/WETH9.sol b/packages/contracts/src/contracts/current/tokens/WETH9/WETH9.sol
index 733ca414b..733ca414b 100644
--- a/packages/contracts/src/current/tokens/WETH9/WETH9.sol
+++ b/packages/contracts/src/contracts/current/tokens/WETH9/WETH9.sol
diff --git a/packages/contracts/src/current/tokens/ZRXToken/ZRXToken.sol b/packages/contracts/src/contracts/current/tokens/ZRXToken/ZRXToken.sol
index 7f5e1f849..7f5e1f849 100644
--- a/packages/contracts/src/current/tokens/ZRXToken/ZRXToken.sol
+++ b/packages/contracts/src/contracts/current/tokens/ZRXToken/ZRXToken.sol
diff --git a/packages/contracts/src/current/utils/Ownable/Ownable.sol b/packages/contracts/src/contracts/current/utils/Ownable/Ownable.sol
index 9b3d6b9cf..9b3d6b9cf 100644
--- a/packages/contracts/src/current/utils/Ownable/Ownable.sol
+++ b/packages/contracts/src/contracts/current/utils/Ownable/Ownable.sol
diff --git a/packages/contracts/src/current/utils/SafeMath/SafeMath.sol b/packages/contracts/src/contracts/current/utils/SafeMath/SafeMath.sol
index 955a9e379..955a9e379 100644
--- a/packages/contracts/src/current/utils/SafeMath/SafeMath.sol
+++ b/packages/contracts/src/contracts/current/utils/SafeMath/SafeMath.sol
diff --git a/packages/contracts/src/previous/ERC20Token/ERC20Token_v1.sol b/packages/contracts/src/contracts/previous/ERC20Token/ERC20Token_v1.sol
index e05ee2d5e..e05ee2d5e 100644
--- a/packages/contracts/src/previous/ERC20Token/ERC20Token_v1.sol
+++ b/packages/contracts/src/contracts/previous/ERC20Token/ERC20Token_v1.sol
diff --git a/packages/contracts/src/previous/Ownable/Ownable_v1.sol b/packages/contracts/src/contracts/previous/Ownable/Ownable_v1.sol
index c87438fa4..c87438fa4 100644
--- a/packages/contracts/src/previous/Ownable/Ownable_v1.sol
+++ b/packages/contracts/src/contracts/previous/Ownable/Ownable_v1.sol
diff --git a/packages/contracts/src/previous/SafeMath/SafeMath_v1.sol b/packages/contracts/src/contracts/previous/SafeMath/SafeMath_v1.sol
index 341d611ec..341d611ec 100644
--- a/packages/contracts/src/previous/SafeMath/SafeMath_v1.sol
+++ b/packages/contracts/src/contracts/previous/SafeMath/SafeMath_v1.sol
diff --git a/packages/contracts/src/previous/Token/Token_v1.sol b/packages/contracts/src/contracts/previous/Token/Token_v1.sol
index de619fb7e..de619fb7e 100644
--- a/packages/contracts/src/previous/Token/Token_v1.sol
+++ b/packages/contracts/src/contracts/previous/Token/Token_v1.sol
diff --git a/packages/contracts/src/previous/UnlimitedAllowanceToken/UnlimitedAllowanceToken_v1.sol b/packages/contracts/src/contracts/previous/UnlimitedAllowanceToken/UnlimitedAllowanceToken_v1.sol
index 6376f3f2c..6376f3f2c 100644
--- a/packages/contracts/src/previous/UnlimitedAllowanceToken/UnlimitedAllowanceToken_v1.sol
+++ b/packages/contracts/src/contracts/previous/UnlimitedAllowanceToken/UnlimitedAllowanceToken_v1.sol
diff --git a/packages/contracts/test/exchange/core.ts b/packages/contracts/test/exchange/core.ts
index 10816d2d6..5cedaddc9 100644
--- a/packages/contracts/test/exchange/core.ts
+++ b/packages/contracts/test/exchange/core.ts
@@ -13,6 +13,9 @@ import * as chai from 'chai';
import ethUtil = require('ethereumjs-util');
import * as Web3 from 'web3';
+import { DummyTokenContract } from '../../src/contract_wrappers/generated/dummy_token';
+import { ExchangeContract } from '../../src/contract_wrappers/generated/exchange';
+import { TokenTransferProxyContract } from '../../src/contract_wrappers/generated/token_transfer_proxy';
import { Balances } from '../../util/balances';
import { constants } from '../../util/constants';
import { crypto } from '../../util/crypto';
@@ -37,11 +40,11 @@ describe('Exchange', () => {
const INITIAL_BALANCE = ZeroEx.toBaseUnitAmount(new BigNumber(10000), 18);
const INITIAL_ALLOWANCE = ZeroEx.toBaseUnitAmount(new BigNumber(10000), 18);
- let rep: Web3.ContractInstance;
- let dgd: Web3.ContractInstance;
- let zrx: Web3.ContractInstance;
- let exchange: Web3.ContractInstance;
- let tokenTransferProxy: Web3.ContractInstance;
+ let rep: DummyTokenContract;
+ let dgd: DummyTokenContract;
+ let zrx: DummyTokenContract;
+ let exchange: ExchangeContract;
+ let tokenTransferProxy: TokenTransferProxyContract;
let order: Order;
let balances: BalancesByOwner;
@@ -55,14 +58,22 @@ describe('Exchange', () => {
const accounts = await web3Wrapper.getAvailableAddressesAsync();
maker = accounts[0];
[tokenOwner, taker, feeRecipient] = accounts;
- [rep, dgd, zrx] = await Promise.all([
+ const [repInstance, dgdInstance, zrxInstance] = await Promise.all([
deployer.deployAsync(ContractName.DummyToken),
deployer.deployAsync(ContractName.DummyToken),
deployer.deployAsync(ContractName.DummyToken),
]);
- tokenTransferProxy = await deployer.deployAsync(ContractName.TokenTransferProxy);
- exchange = await deployer.deployAsync(ContractName.Exchange, [zrx.address, tokenTransferProxy.address]);
- await tokenTransferProxy.addAuthorizedAddress(exchange.address, { from: accounts[0] });
+ rep = new DummyTokenContract(repInstance);
+ dgd = new DummyTokenContract(dgdInstance);
+ zrx = new DummyTokenContract(zrxInstance);
+ const tokenTransferProxyInstance = await deployer.deployAsync(ContractName.TokenTransferProxy);
+ tokenTransferProxy = new TokenTransferProxyContract(tokenTransferProxyInstance);
+ const exchangeInstance = await deployer.deployAsync(ContractName.Exchange, [
+ zrx.address,
+ tokenTransferProxy.address,
+ ]);
+ exchange = new ExchangeContract(exchangeInstance);
+ await tokenTransferProxy.addAuthorizedAddress.sendTransactionAsync(exchange.address, { from: accounts[0] });
zeroEx = new ZeroEx(web3.currentProvider, {
exchangeContractAddress: exchange.address,
networkId: constants.TESTRPC_NETWORK_ID,
@@ -83,30 +94,30 @@ describe('Exchange', () => {
orderFactory = new OrderFactory(web3Wrapper, defaultOrderParams);
dmyBalances = new Balances([rep, dgd, zrx], [maker, taker, feeRecipient]);
await Promise.all([
- rep.approve(tokenTransferProxy.address, INITIAL_ALLOWANCE, {
+ rep.approve.sendTransactionAsync(tokenTransferProxy.address, INITIAL_ALLOWANCE, {
from: maker,
}),
- rep.approve(tokenTransferProxy.address, INITIAL_ALLOWANCE, {
+ rep.approve.sendTransactionAsync(tokenTransferProxy.address, INITIAL_ALLOWANCE, {
from: taker,
}),
- rep.setBalance(maker, INITIAL_BALANCE, { from: tokenOwner }),
- rep.setBalance(taker, INITIAL_BALANCE, { from: tokenOwner }),
- dgd.approve(tokenTransferProxy.address, INITIAL_ALLOWANCE, {
+ rep.setBalance.sendTransactionAsync(maker, INITIAL_BALANCE, { from: tokenOwner }),
+ rep.setBalance.sendTransactionAsync(taker, INITIAL_BALANCE, { from: tokenOwner }),
+ dgd.approve.sendTransactionAsync(tokenTransferProxy.address, INITIAL_ALLOWANCE, {
from: maker,
}),
- dgd.approve(tokenTransferProxy.address, INITIAL_ALLOWANCE, {
+ dgd.approve.sendTransactionAsync(tokenTransferProxy.address, INITIAL_ALLOWANCE, {
from: taker,
}),
- dgd.setBalance(maker, INITIAL_BALANCE, { from: tokenOwner }),
- dgd.setBalance(taker, INITIAL_BALANCE, { from: tokenOwner }),
- zrx.approve(tokenTransferProxy.address, INITIAL_ALLOWANCE, {
+ dgd.setBalance.sendTransactionAsync(maker, INITIAL_BALANCE, { from: tokenOwner }),
+ dgd.setBalance.sendTransactionAsync(taker, INITIAL_BALANCE, { from: tokenOwner }),
+ zrx.approve.sendTransactionAsync(tokenTransferProxy.address, INITIAL_ALLOWANCE, {
from: maker,
}),
- zrx.approve(tokenTransferProxy.address, INITIAL_ALLOWANCE, {
+ zrx.approve.sendTransactionAsync(tokenTransferProxy.address, INITIAL_ALLOWANCE, {
from: taker,
}),
- zrx.setBalance(maker, INITIAL_BALANCE, { from: tokenOwner }),
- zrx.setBalance(taker, INITIAL_BALANCE, { from: tokenOwner }),
+ zrx.setBalance.sendTransactionAsync(maker, INITIAL_BALANCE, { from: tokenOwner }),
+ zrx.setBalance.sendTransactionAsync(taker, INITIAL_BALANCE, { from: tokenOwner }),
]);
});
beforeEach(async () => {
@@ -117,19 +128,19 @@ describe('Exchange', () => {
});
describe('internal functions', () => {
it('should include transferViaTokenTransferProxy', () => {
- expect(exchange.transferViaTokenTransferProxy).to.be.undefined();
+ expect((exchange as any).transferViaTokenTransferProxy).to.be.undefined();
});
it('should include isTransferable', () => {
- expect(exchange.isTransferable).to.be.undefined();
+ expect((exchange as any).isTransferable).to.be.undefined();
});
it('should include getBalance', () => {
- expect(exchange.getBalance).to.be.undefined();
+ expect((exchange as any).getBalance).to.be.undefined();
});
it('should include getAllowance', () => {
- expect(exchange.getAllowance).to.be.undefined();
+ expect((exchange as any).getAllowance).to.be.undefined();
});
});
@@ -565,9 +576,9 @@ describe('Exchange', () => {
it('should not change balances if maker allowances are too low to fill order and \
shouldThrowOnInsufficientBalanceOrAllowance = false', async () => {
- await rep.approve(tokenTransferProxy.address, 0, { from: maker });
+ await rep.approve.sendTransactionAsync(tokenTransferProxy.address, new BigNumber(0), { from: maker });
await exWrapper.fillOrderAsync(order, taker);
- await rep.approve(tokenTransferProxy.address, INITIAL_ALLOWANCE, {
+ await rep.approve.sendTransactionAsync(tokenTransferProxy.address, INITIAL_ALLOWANCE, {
from: maker,
});
@@ -577,22 +588,22 @@ describe('Exchange', () => {
it('should throw if maker allowances are too low to fill order and \
shouldThrowOnInsufficientBalanceOrAllowance = true', async () => {
- await rep.approve(tokenTransferProxy.address, 0, { from: maker });
+ await rep.approve.sendTransactionAsync(tokenTransferProxy.address, new BigNumber(0), { from: maker });
expect(
exWrapper.fillOrderAsync(order, taker, {
shouldThrowOnInsufficientBalanceOrAllowance: true,
}),
).to.be.rejectedWith(constants.REVERT);
- await rep.approve(tokenTransferProxy.address, INITIAL_ALLOWANCE, {
+ await rep.approve.sendTransactionAsync(tokenTransferProxy.address, INITIAL_ALLOWANCE, {
from: maker,
});
});
it('should not change balances if taker allowances are too low to fill order and \
shouldThrowOnInsufficientBalanceOrAllowance = false', async () => {
- await dgd.approve(tokenTransferProxy.address, 0, { from: taker });
+ await dgd.approve.sendTransactionAsync(tokenTransferProxy.address, new BigNumber(0), { from: taker });
await exWrapper.fillOrderAsync(order, taker);
- await dgd.approve(tokenTransferProxy.address, INITIAL_ALLOWANCE, {
+ await dgd.approve.sendTransactionAsync(tokenTransferProxy.address, INITIAL_ALLOWANCE, {
from: taker,
});
@@ -602,13 +613,13 @@ describe('Exchange', () => {
it('should throw if taker allowances are too low to fill order and \
shouldThrowOnInsufficientBalanceOrAllowance = true', async () => {
- await dgd.approve(tokenTransferProxy.address, 0, { from: taker });
+ await dgd.approve.sendTransactionAsync(tokenTransferProxy.address, new BigNumber(0), { from: taker });
expect(
exWrapper.fillOrderAsync(order, taker, {
shouldThrowOnInsufficientBalanceOrAllowance: true,
}),
).to.be.rejectedWith(constants.REVERT);
- await dgd.approve(tokenTransferProxy.address, INITIAL_ALLOWANCE, {
+ await dgd.approve.sendTransactionAsync(tokenTransferProxy.address, INITIAL_ALLOWANCE, {
from: taker,
});
});
@@ -668,7 +679,9 @@ describe('Exchange', () => {
it('should throw if getBalance or getAllowance attempts to change state and \
shouldThrowOnInsufficientBalanceOrAllowance = false', async () => {
const maliciousToken = await deployer.deployAsync(ContractName.MaliciousToken);
- await maliciousToken.approve(tokenTransferProxy.address, INITIAL_ALLOWANCE, { from: taker });
+ await maliciousToken.approve.sendTransactionAsync(tokenTransferProxy.address, INITIAL_ALLOWANCE, {
+ from: taker,
+ });
order = await orderFactory.newSignedOrderAsync({
takerToken: maliciousToken.address,
diff --git a/packages/contracts/test/exchange/helpers.ts b/packages/contracts/test/exchange/helpers.ts
index 5efce41a4..33bf8b803 100644
--- a/packages/contracts/test/exchange/helpers.ts
+++ b/packages/contracts/test/exchange/helpers.ts
@@ -5,6 +5,7 @@ import { Web3Wrapper } from '@0xproject/web3-wrapper';
import * as chai from 'chai';
import ethUtil = require('ethereumjs-util');
+import { ExchangeContract } from '../../src/contract_wrappers/generated/exchange';
import { constants } from '../../util/constants';
import { ExchangeWrapper } from '../../util/exchange_wrapper';
import { Order } from '../../util/order';
@@ -38,7 +39,11 @@ describe('Exchange', () => {
deployer.deployAsync(ContractName.DummyToken),
deployer.deployAsync(ContractName.DummyToken),
]);
- const exchange = await deployer.deployAsync(ContractName.Exchange, [zrx.address, tokenTransferProxy.address]);
+ const exchangeInstance = await deployer.deployAsync(ContractName.Exchange, [
+ zrx.address,
+ tokenTransferProxy.address,
+ ]);
+ const exchange = new ExchangeContract(exchangeInstance);
await tokenTransferProxy.addAuthorizedAddress(exchange.address, { from: accounts[0] });
const zeroEx = new ZeroEx(web3.currentProvider, { networkId: constants.TESTRPC_NETWORK_ID });
exchangeWrapper = new ExchangeWrapper(exchange, zeroEx);
diff --git a/packages/contracts/test/exchange/wrapper.ts b/packages/contracts/test/exchange/wrapper.ts
index acdf481a9..b1851a55c 100644
--- a/packages/contracts/test/exchange/wrapper.ts
+++ b/packages/contracts/test/exchange/wrapper.ts
@@ -6,6 +6,10 @@ import * as chai from 'chai';
import * as _ from 'lodash';
import * as Web3 from 'web3';
+import { DummyTokenContract } from '../../src/contract_wrappers/generated/dummy_token';
+import { ExchangeContract } from '../../src/contract_wrappers/generated/exchange';
+import { TokenRegistryContract } from '../../src/contract_wrappers/generated/token_registry';
+import { TokenTransferProxyContract } from '../../src/contract_wrappers/generated/token_transfer_proxy';
import { Balances } from '../../util/balances';
import { constants } from '../../util/constants';
import { ExchangeWrapper } from '../../util/exchange_wrapper';
@@ -30,12 +34,12 @@ describe('Exchange', () => {
const INIT_BAL = ZeroEx.toBaseUnitAmount(new BigNumber(10000), 18);
const INIT_ALLOW = ZeroEx.toBaseUnitAmount(new BigNumber(10000), 18);
- let rep: Web3.ContractInstance;
- let dgd: Web3.ContractInstance;
- let zrx: Web3.ContractInstance;
- let exchange: Web3.ContractInstance;
- let tokenRegistry: Web3.ContractInstance;
- let tokenTransferProxy: Web3.ContractInstance;
+ let rep: DummyTokenContract;
+ let dgd: DummyTokenContract;
+ let zrx: DummyTokenContract;
+ let exchange: ExchangeContract;
+ let tokenRegistry: TokenRegistryContract;
+ let tokenTransferProxy: TokenTransferProxyContract;
let balances: BalancesByOwner;
@@ -47,15 +51,24 @@ describe('Exchange', () => {
const accounts = await web3Wrapper.getAvailableAddressesAsync();
tokenOwner = accounts[0];
[maker, taker, feeRecipient] = accounts;
- [rep, dgd, zrx] = await Promise.all([
+ const [repInstance, dgdInstance, zrxInstance] = await Promise.all([
deployer.deployAsync(ContractName.DummyToken),
deployer.deployAsync(ContractName.DummyToken),
deployer.deployAsync(ContractName.DummyToken),
]);
- tokenRegistry = await deployer.deployAsync(ContractName.TokenRegistry);
- tokenTransferProxy = await deployer.deployAsync(ContractName.TokenTransferProxy);
- exchange = await deployer.deployAsync(ContractName.Exchange, [zrx.address, tokenTransferProxy.address]);
- await tokenTransferProxy.addAuthorizedAddress(exchange.address, { from: accounts[0] });
+ rep = new DummyTokenContract(repInstance);
+ dgd = new DummyTokenContract(dgdInstance);
+ zrx = new DummyTokenContract(zrxInstance);
+ const tokenRegistryInstance = await deployer.deployAsync(ContractName.TokenRegistry);
+ tokenRegistry = new TokenRegistryContract(tokenRegistryInstance);
+ const tokenTransferProxyInstance = await deployer.deployAsync(ContractName.TokenTransferProxy);
+ tokenTransferProxy = new TokenTransferProxyContract(tokenTransferProxyInstance);
+ const exchangeInstance = await deployer.deployAsync(ContractName.Exchange, [
+ zrx.address,
+ tokenTransferProxy.address,
+ ]);
+ exchange = new ExchangeContract(exchangeInstance);
+ await tokenTransferProxy.addAuthorizedAddress.sendTransactionAsync(exchange.address, { from: accounts[0] });
const zeroEx = new ZeroEx(web3.currentProvider, { networkId: constants.TESTRPC_NETWORK_ID });
exWrapper = new ExchangeWrapper(exchange, zeroEx);
@@ -74,18 +87,18 @@ describe('Exchange', () => {
orderFactory = new OrderFactory(web3Wrapper, defaultOrderParams);
dmyBalances = new Balances([rep, dgd, zrx], [maker, taker, feeRecipient]);
await Promise.all([
- rep.approve(tokenTransferProxy.address, INIT_ALLOW, { from: maker }),
- rep.approve(tokenTransferProxy.address, INIT_ALLOW, { from: taker }),
- rep.setBalance(maker, INIT_BAL, { from: tokenOwner }),
- rep.setBalance(taker, INIT_BAL, { from: tokenOwner }),
- dgd.approve(tokenTransferProxy.address, INIT_ALLOW, { from: maker }),
- dgd.approve(tokenTransferProxy.address, INIT_ALLOW, { from: taker }),
- dgd.setBalance(maker, INIT_BAL, { from: tokenOwner }),
- dgd.setBalance(taker, INIT_BAL, { from: tokenOwner }),
- zrx.approve(tokenTransferProxy.address, INIT_ALLOW, { from: maker }),
- zrx.approve(tokenTransferProxy.address, INIT_ALLOW, { from: taker }),
- zrx.setBalance(maker, INIT_BAL, { from: tokenOwner }),
- zrx.setBalance(taker, INIT_BAL, { from: tokenOwner }),
+ rep.approve.sendTransactionAsync(tokenTransferProxy.address, INIT_ALLOW, { from: maker }),
+ rep.approve.sendTransactionAsync(tokenTransferProxy.address, INIT_ALLOW, { from: taker }),
+ rep.setBalance.sendTransactionAsync(maker, INIT_BAL, { from: tokenOwner }),
+ rep.setBalance.sendTransactionAsync(taker, INIT_BAL, { from: tokenOwner }),
+ dgd.approve.sendTransactionAsync(tokenTransferProxy.address, INIT_ALLOW, { from: maker }),
+ dgd.approve.sendTransactionAsync(tokenTransferProxy.address, INIT_ALLOW, { from: taker }),
+ dgd.setBalance.sendTransactionAsync(maker, INIT_BAL, { from: tokenOwner }),
+ dgd.setBalance.sendTransactionAsync(taker, INIT_BAL, { from: tokenOwner }),
+ zrx.approve.sendTransactionAsync(tokenTransferProxy.address, INIT_ALLOW, { from: maker }),
+ zrx.approve.sendTransactionAsync(tokenTransferProxy.address, INIT_ALLOW, { from: taker }),
+ zrx.setBalance.sendTransactionAsync(maker, INIT_BAL, { from: tokenOwner }),
+ zrx.setBalance.sendTransactionAsync(taker, INIT_BAL, { from: tokenOwner }),
]);
});
beforeEach(async () => {
diff --git a/packages/contracts/test/multi_sig_with_time_lock.ts b/packages/contracts/test/multi_sig_with_time_lock.ts
index bd64be1ba..6812cb09f 100644
--- a/packages/contracts/test/multi_sig_with_time_lock.ts
+++ b/packages/contracts/test/multi_sig_with_time_lock.ts
@@ -6,6 +6,8 @@ import * as chai from 'chai';
import * as Web3 from 'web3';
import * as multiSigWalletJSON from '../../build/contracts/MultiSigWalletWithTimeLock.json';
+import { MultiSigWalletContract } from '../src/contract_wrappers/generated/multi_sig_wallet';
+import { MultiSigWalletWithTimeLockContract } from '../src/contract_wrappers/generated/multi_sig_wallet_with_time_lock';
import { artifacts } from '../util/artifacts';
import { constants } from '../util/constants';
import { MultiSigWrapper } from '../util/multi_sig_wrapper';
@@ -30,12 +32,12 @@ describe('MultiSigWalletWithTimeLock', () => {
const accounts = await web3Wrapper.getAvailableAddressesAsync();
owners = [accounts[0], accounts[1]];
});
- const SIGNATURES_REQUIRED = 2;
- const SECONDS_TIME_LOCKED = 10000;
+ const SIGNATURES_REQUIRED = new BigNumber(2);
+ const SECONDS_TIME_LOCKED = new BigNumber(10000);
- let multiSig: Web3.ContractInstance;
+ let multiSig: MultiSigWalletWithTimeLockContract;
let multiSigWrapper: MultiSigWrapper;
- let txId: number;
+ let txId: BigNumber;
let initialSecondsTimeLocked: number;
let rpc: RPC;
@@ -52,20 +54,21 @@ describe('MultiSigWalletWithTimeLock', () => {
describe('changeTimeLock', () => {
describe('initially non-time-locked', async () => {
before('deploy a walet', async () => {
- multiSig = await deployer.deployAsync(ContractName.MultiSigWalletWithTimeLock, [
+ const multiSigInstance = await deployer.deployAsync(ContractName.MultiSigWalletWithTimeLock, [
owners,
SIGNATURES_REQUIRED,
0,
]);
- multiSigWrapper = new MultiSigWrapper(multiSig);
+ multiSig = new MultiSigWalletWithTimeLockContract(multiSigInstance);
+ multiSigWrapper = new MultiSigWrapper((multiSig as any) as MultiSigWalletContract);
const secondsTimeLocked = await multiSig.secondsTimeLocked();
initialSecondsTimeLocked = secondsTimeLocked.toNumber();
});
it('should throw when not called by wallet', async () => {
- return expect(multiSig.changeTimeLock(SECONDS_TIME_LOCKED, { from: owners[0] })).to.be.rejectedWith(
- constants.REVERT,
- );
+ return expect(
+ multiSig.changeTimeLock.sendTransactionAsync(SECONDS_TIME_LOCKED, { from: owners[0] }),
+ ).to.be.rejectedWith(constants.REVERT);
});
it('should throw without enough confirmations', async () => {
@@ -74,7 +77,7 @@ describe('MultiSigWalletWithTimeLock', () => {
const dataParams = {
name: 'changeTimeLock',
abi: MULTI_SIG_ABI,
- args: [SECONDS_TIME_LOCKED],
+ args: [SECONDS_TIME_LOCKED.toNumber()],
};
const txHash = await multiSigWrapper.submitTransactionAsync(destination, from, dataParams);
const subRes = await zeroEx.awaitTransactionMinedAsync(txHash);
@@ -82,10 +85,10 @@ describe('MultiSigWalletWithTimeLock', () => {
SubmissionContractEventArgs
>;
- txId = log.args.transactionId.toNumber();
- return expect(multiSig.executeTransaction(txId, { from: owners[0] })).to.be.rejectedWith(
- constants.REVERT,
- );
+ txId = log.args.transactionId;
+ return expect(
+ multiSig.executeTransaction.sendTransactionAsync(txId, { from: owners[0] }),
+ ).to.be.rejectedWith(constants.REVERT);
});
it('should set confirmation time with enough confirmations', async () => {
@@ -94,7 +97,7 @@ describe('MultiSigWalletWithTimeLock', () => {
const dataParams = {
name: 'changeTimeLock',
abi: MULTI_SIG_ABI,
- args: [SECONDS_TIME_LOCKED],
+ args: [SECONDS_TIME_LOCKED.toNumber()],
};
let txHash = await multiSigWrapper.submitTransactionAsync(destination, from, dataParams);
const subRes = await zeroEx.awaitTransactionMinedAsync(txHash);
@@ -102,15 +105,15 @@ describe('MultiSigWalletWithTimeLock', () => {
SubmissionContractEventArgs
>;
- txId = log.args.transactionId.toNumber();
- txHash = await multiSig.confirmTransaction(txId, { from: owners[1] });
+ txId = log.args.transactionId;
+ txHash = await multiSig.confirmTransaction.sendTransactionAsync(txId, { from: owners[1] });
const res = await zeroEx.awaitTransactionMinedAsync(txHash);
expect(res.logs).to.have.length(2);
const blockNum = await web3Wrapper.getBlockNumberAsync();
const blockInfo = await web3Wrapper.getBlockAsync(blockNum);
const timestamp = new BigNumber(blockInfo.timestamp);
- const confirmationTimeBigNum = new BigNumber(await multiSig.confirmationTimes.call(txId));
+ const confirmationTimeBigNum = new BigNumber(await multiSig.confirmationTimes(txId));
expect(timestamp).to.be.bignumber.equal(confirmationTimeBigNum);
});
@@ -121,7 +124,7 @@ describe('MultiSigWalletWithTimeLock', () => {
const dataParams = {
name: 'changeTimeLock',
abi: MULTI_SIG_ABI,
- args: [SECONDS_TIME_LOCKED],
+ args: [SECONDS_TIME_LOCKED.toNumber()],
};
let txHash = await multiSigWrapper.submitTransactionAsync(destination, from, dataParams);
const subRes = await zeroEx.awaitTransactionMinedAsync(txHash);
@@ -129,27 +132,28 @@ describe('MultiSigWalletWithTimeLock', () => {
SubmissionContractEventArgs
>;
- txId = log.args.transactionId.toNumber();
- txHash = await multiSig.confirmTransaction(txId, { from: owners[1] });
+ txId = log.args.transactionId;
+ txHash = await multiSig.confirmTransaction.sendTransactionAsync(txId, { from: owners[1] });
expect(initialSecondsTimeLocked).to.be.equal(0);
- txHash = await multiSig.executeTransaction(txId, { from: owners[0] });
+ txHash = await multiSig.executeTransaction.sendTransactionAsync(txId, { from: owners[0] });
const res = await zeroEx.awaitTransactionMinedAsync(txHash);
expect(res.logs).to.have.length(2);
- const secondsTimeLocked = new BigNumber(await multiSig.secondsTimeLocked.call());
+ const secondsTimeLocked = new BigNumber(await multiSig.secondsTimeLocked());
expect(secondsTimeLocked).to.be.bignumber.equal(SECONDS_TIME_LOCKED);
});
});
describe('initially time-locked', async () => {
before('deploy a walet', async () => {
- multiSig = await deployer.deployAsync(ContractName.MultiSigWalletWithTimeLock, [
+ const multiSigInstance = await deployer.deployAsync(ContractName.MultiSigWalletWithTimeLock, [
owners,
SIGNATURES_REQUIRED,
SECONDS_TIME_LOCKED,
]);
- multiSigWrapper = new MultiSigWrapper(multiSig);
+ multiSig = new MultiSigWalletWithTimeLockContract(multiSigInstance);
+ multiSigWrapper = new MultiSigWrapper((multiSig as any) as MultiSigWalletContract);
const secondsTimeLocked = await multiSig.secondsTimeLocked();
initialSecondsTimeLocked = secondsTimeLocked.toNumber();
@@ -165,8 +169,8 @@ describe('MultiSigWalletWithTimeLock', () => {
const log = abiDecoder.tryToDecodeLogOrNoop(subRes.logs[0]) as LogWithDecodedArgs<
SubmissionContractEventArgs
>;
- txId = log.args.transactionId.toNumber();
- txHash = await multiSig.confirmTransaction(txId, {
+ txId = log.args.transactionId;
+ txHash = await multiSig.confirmTransaction.sendTransactionAsync(txId, {
from: owners[1],
});
const confRes = await zeroEx.awaitTransactionMinedAsync(txHash);
@@ -174,16 +178,16 @@ describe('MultiSigWalletWithTimeLock', () => {
});
const newSecondsTimeLocked = 0;
it('should throw if it has enough confirmations but is not past the time lock', async () => {
- return expect(multiSig.executeTransaction(txId, { from: owners[0] })).to.be.rejectedWith(
- constants.REVERT,
- );
+ return expect(
+ multiSig.executeTransaction.sendTransactionAsync(txId, { from: owners[0] }),
+ ).to.be.rejectedWith(constants.REVERT);
});
it('should execute if it has enough confirmations and is past the time lock', async () => {
- await rpc.increaseTimeAsync(SECONDS_TIME_LOCKED);
- await multiSig.executeTransaction(txId, { from: owners[0] });
+ await rpc.increaseTimeAsync(SECONDS_TIME_LOCKED.toNumber());
+ await multiSig.executeTransaction.sendTransactionAsync(txId, { from: owners[0] });
- const secondsTimeLocked = new BigNumber(await multiSig.secondsTimeLocked.call());
+ const secondsTimeLocked = new BigNumber(await multiSig.secondsTimeLocked());
expect(secondsTimeLocked).to.be.bignumber.equal(newSecondsTimeLocked);
});
});
diff --git a/packages/contracts/test/multi_sig_with_time_lock_except_remove_auth_addr.ts b/packages/contracts/test/multi_sig_with_time_lock_except_remove_auth_addr.ts
index f6b7c1d53..7e9d44730 100644
--- a/packages/contracts/test/multi_sig_with_time_lock_except_remove_auth_addr.ts
+++ b/packages/contracts/test/multi_sig_with_time_lock_except_remove_auth_addr.ts
@@ -5,6 +5,9 @@ import { Web3Wrapper } from '@0xproject/web3-wrapper';
import * as chai from 'chai';
import * as Web3 from 'web3';
+import { MultiSigWalletContract } from '../src/contract_wrappers/generated/multi_sig_wallet';
+import { MultiSigWalletWithTimeLockExceptRemoveAuthorizedAddressContract } from '../src/contract_wrappers/generated/multi_sig_wallet_with_time_lock_except_remove_authorized_address';
+import { TokenTransferProxyContract } from '../src/contract_wrappers/generated/token_transfer_proxy';
import { artifacts } from '../util/artifacts';
import { constants } from '../util/constants';
import { crypto } from '../util/crypto';
@@ -35,8 +38,8 @@ describe('MultiSigWalletWithTimeLockExceptRemoveAuthorizedAddress', () => {
let authorizedAddress: string;
let unauthorizedAddress: string;
- let tokenTransferProxy: Web3.ContractInstance;
- let multiSig: Web3.ContractInstance;
+ let tokenTransferProxy: TokenTransferProxyContract;
+ let multiSig: MultiSigWalletWithTimeLockExceptRemoveAuthorizedAddressContract;
let multiSigWrapper: MultiSigWrapper;
let validDestination: string;
@@ -45,20 +48,20 @@ describe('MultiSigWalletWithTimeLockExceptRemoveAuthorizedAddress', () => {
owners = [accounts[0], accounts[1]];
[authorizedAddress, unauthorizedAddress] = accounts;
const initialOwner = accounts[0];
- tokenTransferProxy = await deployer.deployAsync(ContractName.TokenTransferProxy);
- await tokenTransferProxy.addAuthorizedAddress(authorizedAddress, {
+ const tokenTransferProxyInstance = await deployer.deployAsync(ContractName.TokenTransferProxy);
+ tokenTransferProxy = new TokenTransferProxyContract(tokenTransferProxyInstance);
+ await tokenTransferProxy.addAuthorizedAddress.sendTransactionAsync(authorizedAddress, {
from: initialOwner,
});
- multiSig = await deployer.deployAsync(ContractName.MultiSigWalletWithTimeLockExceptRemoveAuthorizedAddress, [
- owners,
- requiredApprovals,
- SECONDS_TIME_LOCKED,
- tokenTransferProxy.address,
- ]);
- await tokenTransferProxy.transferOwnership(multiSig.address, {
+ const multiSigInstance = await deployer.deployAsync(
+ ContractName.MultiSigWalletWithTimeLockExceptRemoveAuthorizedAddress,
+ [owners, requiredApprovals, SECONDS_TIME_LOCKED, tokenTransferProxy.address],
+ );
+ multiSig = new MultiSigWalletWithTimeLockExceptRemoveAuthorizedAddressContract(multiSigInstance);
+ await tokenTransferProxy.transferOwnership.sendTransactionAsync(multiSig.address, {
from: initialOwner,
});
- multiSigWrapper = new MultiSigWrapper(multiSig);
+ multiSigWrapper = new MultiSigWrapper((multiSig as any) as MultiSigWalletContract);
validDestination = tokenTransferProxy.address;
});
beforeEach(async () => {
@@ -71,12 +74,12 @@ describe('MultiSigWalletWithTimeLockExceptRemoveAuthorizedAddress', () => {
describe('isFunctionRemoveAuthorizedAddress', () => {
it('should throw if data is not for removeAuthorizedAddress', async () => {
const data = MultiSigWrapper.encodeFnArgs('addAuthorizedAddress', PROXY_ABI, [owners[0]]);
- return expect(multiSig.isFunctionRemoveAuthorizedAddress.call(data)).to.be.rejectedWith(constants.REVERT);
+ return expect(multiSig.isFunctionRemoveAuthorizedAddress(data)).to.be.rejectedWith(constants.REVERT);
});
it('should return true if data is for removeAuthorizedAddress', async () => {
const data = MultiSigWrapper.encodeFnArgs('removeAuthorizedAddress', PROXY_ABI, [owners[0]]);
- const isFunctionRemoveAuthorizedAddress = await multiSig.isFunctionRemoveAuthorizedAddress.call(data);
+ const isFunctionRemoveAuthorizedAddress = await multiSig.isFunctionRemoveAuthorizedAddress(data);
expect(isFunctionRemoveAuthorizedAddress).to.be.true();
});
});
@@ -91,11 +94,11 @@ describe('MultiSigWalletWithTimeLockExceptRemoveAuthorizedAddress', () => {
const txHash = await multiSigWrapper.submitTransactionAsync(validDestination, owners[0], dataParams);
const res = await zeroEx.awaitTransactionMinedAsync(txHash);
const log = abiDecoder.tryToDecodeLogOrNoop(res.logs[0]) as LogWithDecodedArgs<SubmissionContractEventArgs>;
- const txId = log.args.transactionId.toString();
+ const txId = log.args.transactionId;
- return expect(multiSig.executeRemoveAuthorizedAddress(txId, { from: owners[1] })).to.be.rejectedWith(
- constants.REVERT,
- );
+ return expect(
+ multiSig.executeRemoveAuthorizedAddress.sendTransactionAsync(txId, { from: owners[1] }),
+ ).to.be.rejectedWith(constants.REVERT);
});
it('should throw if tx destination is not the tokenTransferProxy', async () => {
@@ -109,14 +112,14 @@ describe('MultiSigWalletWithTimeLockExceptRemoveAuthorizedAddress', () => {
const txHash = await multiSigWrapper.submitTransactionAsync(invalidDestination, owners[0], dataParams);
const res = await zeroEx.awaitTransactionMinedAsync(txHash);
const log = abiDecoder.tryToDecodeLogOrNoop(res.logs[0]) as LogWithDecodedArgs<SubmissionContractEventArgs>;
- const txId = log.args.transactionId.toString();
- await multiSig.confirmTransaction(txId, { from: owners[1] });
- const isConfirmed = await multiSig.isConfirmed.call(txId);
+ const txId = log.args.transactionId;
+ await multiSig.confirmTransaction.sendTransactionAsync(txId, { from: owners[1] });
+ const isConfirmed = await multiSig.isConfirmed(txId);
expect(isConfirmed).to.be.true();
- return expect(multiSig.executeRemoveAuthorizedAddress(txId, { from: owners[1] })).to.be.rejectedWith(
- constants.REVERT,
- );
+ return expect(
+ multiSig.executeRemoveAuthorizedAddress.sendTransactionAsync(txId, { from: owners[1] }),
+ ).to.be.rejectedWith(constants.REVERT);
});
it('should throw if tx data is not for removeAuthorizedAddress', async () => {
@@ -128,14 +131,14 @@ describe('MultiSigWalletWithTimeLockExceptRemoveAuthorizedAddress', () => {
const txHash = await multiSigWrapper.submitTransactionAsync(validDestination, owners[0], dataParams);
const res = await zeroEx.awaitTransactionMinedAsync(txHash);
const log = abiDecoder.tryToDecodeLogOrNoop(res.logs[0]) as LogWithDecodedArgs<SubmissionContractEventArgs>;
- const txId = log.args.transactionId.toString();
- await multiSig.confirmTransaction(txId, { from: owners[1] });
- const isConfirmed = await multiSig.isConfirmed.call(txId);
+ const txId = log.args.transactionId;
+ await multiSig.confirmTransaction.sendTransactionAsync(txId, { from: owners[1] });
+ const isConfirmed = await multiSig.isConfirmed(txId);
expect(isConfirmed).to.be.true();
- return expect(multiSig.executeRemoveAuthorizedAddress(txId, { from: owners[1] })).to.be.rejectedWith(
- constants.REVERT,
- );
+ return expect(
+ multiSig.executeRemoveAuthorizedAddress.sendTransactionAsync(txId, { from: owners[1] }),
+ ).to.be.rejectedWith(constants.REVERT);
});
it('should execute removeAuthorizedAddress for valid tokenTransferProxy if fully confirmed', async () => {
@@ -147,12 +150,12 @@ describe('MultiSigWalletWithTimeLockExceptRemoveAuthorizedAddress', () => {
const txHash = await multiSigWrapper.submitTransactionAsync(validDestination, owners[0], dataParams);
const res = await zeroEx.awaitTransactionMinedAsync(txHash);
const log = abiDecoder.tryToDecodeLogOrNoop(res.logs[0]) as LogWithDecodedArgs<SubmissionContractEventArgs>;
- const txId = log.args.transactionId.toString();
- await multiSig.confirmTransaction(txId, { from: owners[1] });
- const isConfirmed = await multiSig.isConfirmed.call(txId);
+ const txId = log.args.transactionId;
+ await multiSig.confirmTransaction.sendTransactionAsync(txId, { from: owners[1] });
+ const isConfirmed = await multiSig.isConfirmed(txId);
expect(isConfirmed).to.be.true();
- await multiSig.executeRemoveAuthorizedAddress(txId, { from: owners[1] });
- const isAuthorized = await tokenTransferProxy.authorized.call(authorizedAddress);
+ await multiSig.executeRemoveAuthorizedAddress.sendTransactionAsync(txId, { from: owners[1] });
+ const isAuthorized = await tokenTransferProxy.authorized(authorizedAddress);
expect(isAuthorized).to.be.false();
});
@@ -165,17 +168,17 @@ describe('MultiSigWalletWithTimeLockExceptRemoveAuthorizedAddress', () => {
const txHash = await multiSigWrapper.submitTransactionAsync(validDestination, owners[0], dataParams);
const res = await zeroEx.awaitTransactionMinedAsync(txHash);
const log = abiDecoder.tryToDecodeLogOrNoop(res.logs[0]) as LogWithDecodedArgs<SubmissionContractEventArgs>;
- const txId = log.args.transactionId.toString();
- await multiSig.confirmTransaction(txId, { from: owners[1] });
+ const txId = log.args.transactionId;
+ await multiSig.confirmTransaction.sendTransactionAsync(txId, { from: owners[1] });
const isConfirmed = await multiSig.isConfirmed(txId);
expect(isConfirmed).to.be.true();
- await multiSig.executeRemoveAuthorizedAddress(txId, { from: owners[1] });
+ await multiSig.executeRemoveAuthorizedAddress.sendTransactionAsync(txId, { from: owners[1] });
const tx = await multiSig.transactions(txId);
const isExecuted = tx[3];
expect(isExecuted).to.be.true();
- return expect(multiSig.executeRemoveAuthorizedAddress(txId, { from: owners[1] })).to.be.rejectedWith(
- constants.REVERT,
- );
+ return expect(
+ multiSig.executeRemoveAuthorizedAddress.sendTransactionAsync(txId, { from: owners[1] }),
+ ).to.be.rejectedWith(constants.REVERT);
});
});
});
diff --git a/packages/contracts/test/token_registry.ts b/packages/contracts/test/token_registry.ts
index 2a270dc2f..867282d2c 100644
--- a/packages/contracts/test/token_registry.ts
+++ b/packages/contracts/test/token_registry.ts
@@ -1,11 +1,13 @@
import { ZeroEx } from '0x.js';
import { BlockchainLifecycle, devConstants, web3Factory } from '@0xproject/dev-utils';
+import { BigNumber } from '@0xproject/utils';
import { Web3Wrapper } from '@0xproject/web3-wrapper';
import * as chai from 'chai';
import ethUtil = require('ethereumjs-util');
import * as _ from 'lodash';
import * as Web3 from 'web3';
+import { TokenRegistryContract } from '../src/contract_wrappers/generated/token_registry';
import { constants } from '../util/constants';
import { TokenRegWrapper } from '../util/token_registry_wrapper';
import { ContractName } from '../util/types';
@@ -22,13 +24,14 @@ const blockchainLifecycle = new BlockchainLifecycle();
describe('TokenRegistry', () => {
let owner: string;
let notOwner: string;
- let tokenReg: Web3.ContractInstance;
+ let tokenReg: TokenRegistryContract;
let tokenRegWrapper: TokenRegWrapper;
before(async () => {
const accounts = await web3Wrapper.getAvailableAddressesAsync();
owner = accounts[0];
notOwner = accounts[1];
- tokenReg = await deployer.deployAsync(ContractName.TokenRegistry);
+ const tokenRegInstance = await deployer.deployAsync(ContractName.TokenRegistry);
+ tokenReg = new TokenRegistryContract(tokenRegInstance);
tokenRegWrapper = new TokenRegWrapper(tokenReg);
});
beforeEach(async () => {
@@ -132,12 +135,12 @@ describe('TokenRegistry', () => {
describe('setTokenName', () => {
it('should throw when not called by owner', async () => {
return expect(
- tokenReg.setTokenName(token1.address, token2.name, { from: notOwner }),
+ tokenReg.setTokenName.sendTransactionAsync(token1.address, token2.name, { from: notOwner }),
).to.be.rejectedWith(constants.REVERT);
});
it('should change the token name when called by owner', async () => {
- await tokenReg.setTokenName(token1.address, token2.name, {
+ await tokenReg.setTokenName.sendTransactionAsync(token1.address, token2.name, {
from: owner,
});
const [newData, oldData] = await Promise.all([
@@ -154,14 +157,14 @@ describe('TokenRegistry', () => {
it('should throw if the name already exists', async () => {
await tokenRegWrapper.addTokenAsync(token2, owner);
- return expect(tokenReg.setTokenName(token1.address, token2.name, { from: owner })).to.be.rejectedWith(
- constants.REVERT,
- );
+ return expect(
+ tokenReg.setTokenName.sendTransactionAsync(token1.address, token2.name, { from: owner }),
+ ).to.be.rejectedWith(constants.REVERT);
});
it('should throw if token does not exist', async () => {
return expect(
- tokenReg.setTokenName(nullToken.address, token2.name, { from: owner }),
+ tokenReg.setTokenName.sendTransactionAsync(nullToken.address, token2.name, { from: owner }),
).to.be.rejectedWith(constants.REVERT);
});
});
@@ -169,14 +172,14 @@ describe('TokenRegistry', () => {
describe('setTokenSymbol', () => {
it('should throw when not called by owner', async () => {
return expect(
- tokenReg.setTokenSymbol(token1.address, token2.symbol, {
+ tokenReg.setTokenSymbol.sendTransactionAsync(token1.address, token2.symbol, {
from: notOwner,
}),
).to.be.rejectedWith(constants.REVERT);
});
it('should change the token symbol when called by owner', async () => {
- await tokenReg.setTokenSymbol(token1.address, token2.symbol, { from: owner });
+ await tokenReg.setTokenSymbol.sendTransactionAsync(token1.address, token2.symbol, { from: owner });
const [newData, oldData] = await Promise.all([
tokenRegWrapper.getTokenBySymbolAsync(token2.symbol),
tokenRegWrapper.getTokenBySymbolAsync(token1.symbol),
@@ -192,7 +195,7 @@ describe('TokenRegistry', () => {
await tokenRegWrapper.addTokenAsync(token2, owner);
return expect(
- tokenReg.setTokenSymbol(token1.address, token2.symbol, {
+ tokenReg.setTokenSymbol.sendTransactionAsync(token1.address, token2.symbol, {
from: owner,
}),
).to.be.rejectedWith(constants.REVERT);
@@ -200,7 +203,7 @@ describe('TokenRegistry', () => {
it('should throw if token does not exist', async () => {
return expect(
- tokenReg.setTokenSymbol(nullToken.address, token2.symbol, {
+ tokenReg.setTokenSymbol.sendTransactionAsync(nullToken.address, token2.symbol, {
from: owner,
}),
).to.be.rejectedWith(constants.REVERT);
@@ -209,15 +212,15 @@ describe('TokenRegistry', () => {
describe('removeToken', () => {
it('should throw if not called by owner', async () => {
- const index = 0;
- return expect(tokenReg.removeToken(token1.address, index, { from: notOwner })).to.be.rejectedWith(
- constants.REVERT,
- );
+ const index = new BigNumber(0);
+ return expect(
+ tokenReg.removeToken.sendTransactionAsync(token1.address, index, { from: notOwner }),
+ ).to.be.rejectedWith(constants.REVERT);
});
it('should remove token metadata when called by owner', async () => {
- const index = 0;
- await tokenReg.removeToken(token1.address, index, {
+ const index = new BigNumber(0);
+ await tokenReg.removeToken.sendTransactionAsync(token1.address, index, {
from: owner,
});
const tokenData = await tokenRegWrapper.getTokenMetaDataAsync(token1.address);
@@ -225,18 +228,18 @@ describe('TokenRegistry', () => {
});
it('should throw if token does not exist', async () => {
- const index = 0;
- return expect(tokenReg.removeToken(nullToken.address, index, { from: owner })).to.be.rejectedWith(
- constants.REVERT,
- );
+ const index = new BigNumber(0);
+ return expect(
+ tokenReg.removeToken.sendTransactionAsync(nullToken.address, index, { from: owner }),
+ ).to.be.rejectedWith(constants.REVERT);
});
it('should throw if token at given index does not match address', async () => {
await tokenRegWrapper.addTokenAsync(token2, owner);
- const incorrectIndex = 0;
- return expect(tokenReg.removeToken(token2.address, incorrectIndex, { from: owner })).to.be.rejectedWith(
- constants.REVERT,
- );
+ const incorrectIndex = new BigNumber(0);
+ return expect(
+ tokenReg.removeToken.sendTransactionAsync(token2.address, incorrectIndex, { from: owner }),
+ ).to.be.rejectedWith(constants.REVERT);
});
});
});
diff --git a/packages/contracts/test/token_transfer_proxy/auth.ts b/packages/contracts/test/token_transfer_proxy/auth.ts
index b2bfc6b65..9d453b079 100644
--- a/packages/contracts/test/token_transfer_proxy/auth.ts
+++ b/packages/contracts/test/token_transfer_proxy/auth.ts
@@ -3,6 +3,7 @@ import { Web3Wrapper } from '@0xproject/web3-wrapper';
import * as chai from 'chai';
import * as Web3 from 'web3';
+import { TokenTransferProxyContract } from '../../src/contract_wrappers/generated/token_transfer_proxy';
import { constants } from '../../util/constants';
import { ContractName } from '../../util/types';
import { chaiSetup } from '../utils/chai_setup';
@@ -18,12 +19,13 @@ describe('TokenTransferProxy', () => {
let owner: string;
let notOwner: string;
let address: string;
- let tokenTransferProxy: Web3.ContractInstance;
+ let tokenTransferProxy: TokenTransferProxyContract;
before(async () => {
const accounts = await web3Wrapper.getAvailableAddressesAsync();
owner = address = accounts[0];
notOwner = accounts[1];
- tokenTransferProxy = await deployer.deployAsync(ContractName.TokenTransferProxy);
+ const tokenTransferProxyInstance = await deployer.deployAsync(ContractName.TokenTransferProxy);
+ tokenTransferProxy = new TokenTransferProxyContract(tokenTransferProxyInstance);
});
beforeEach(async () => {
await blockchainLifecycle.startAsync();
@@ -33,36 +35,36 @@ describe('TokenTransferProxy', () => {
});
describe('addAuthorizedAddress', () => {
it('should throw if not called by owner', async () => {
- return expect(tokenTransferProxy.addAuthorizedAddress(notOwner, { from: notOwner })).to.be.rejectedWith(
- constants.REVERT,
- );
+ return expect(
+ tokenTransferProxy.addAuthorizedAddress.sendTransactionAsync(notOwner, { from: notOwner }),
+ ).to.be.rejectedWith(constants.REVERT);
});
it('should allow owner to add an authorized address', async () => {
- await tokenTransferProxy.addAuthorizedAddress(address, { from: owner });
+ await tokenTransferProxy.addAuthorizedAddress.sendTransactionAsync(address, { from: owner });
const isAuthorized = await tokenTransferProxy.authorized(address);
expect(isAuthorized).to.be.true();
});
it('should throw if owner attempts to authorize a duplicate address', async () => {
- await tokenTransferProxy.addAuthorizedAddress(address, { from: owner });
- return expect(tokenTransferProxy.addAuthorizedAddress(address, { from: owner })).to.be.rejectedWith(
- constants.REVERT,
- );
+ await tokenTransferProxy.addAuthorizedAddress.sendTransactionAsync(address, { from: owner });
+ return expect(
+ tokenTransferProxy.addAuthorizedAddress.sendTransactionAsync(address, { from: owner }),
+ ).to.be.rejectedWith(constants.REVERT);
});
});
describe('removeAuthorizedAddress', () => {
it('should throw if not called by owner', async () => {
- await tokenTransferProxy.addAuthorizedAddress(address, { from: owner });
+ await tokenTransferProxy.addAuthorizedAddress.sendTransactionAsync(address, { from: owner });
return expect(
- tokenTransferProxy.removeAuthorizedAddress(address, {
+ tokenTransferProxy.removeAuthorizedAddress.sendTransactionAsync(address, {
from: notOwner,
}),
).to.be.rejectedWith(constants.REVERT);
});
it('should allow owner to remove an authorized address', async () => {
- await tokenTransferProxy.addAuthorizedAddress(address, { from: owner });
- await tokenTransferProxy.removeAuthorizedAddress(address, {
+ await tokenTransferProxy.addAuthorizedAddress.sendTransactionAsync(address, { from: owner });
+ await tokenTransferProxy.removeAuthorizedAddress.sendTransactionAsync(address, {
from: owner,
});
const isAuthorized = await tokenTransferProxy.authorized(address);
@@ -71,7 +73,7 @@ describe('TokenTransferProxy', () => {
it('should throw if owner attempts to remove an address that is not authorized', async () => {
return expect(
- tokenTransferProxy.removeAuthorizedAddress(address, {
+ tokenTransferProxy.removeAuthorizedAddress.sendTransactionAsync(address, {
from: owner,
}),
).to.be.rejectedWith(constants.REVERT);
@@ -82,14 +84,14 @@ describe('TokenTransferProxy', () => {
it('should return all authorized addresses', async () => {
const initial = await tokenTransferProxy.getAuthorizedAddresses();
expect(initial).to.have.length(0);
- await tokenTransferProxy.addAuthorizedAddress(address, {
+ await tokenTransferProxy.addAuthorizedAddress.sendTransactionAsync(address, {
from: owner,
});
const afterAdd = await tokenTransferProxy.getAuthorizedAddresses();
expect(afterAdd).to.have.length(1);
expect(afterAdd).to.include(address);
- await tokenTransferProxy.removeAuthorizedAddress(address, {
+ await tokenTransferProxy.removeAuthorizedAddress.sendTransactionAsync(address, {
from: owner,
});
const afterRemove = await tokenTransferProxy.getAuthorizedAddresses();
diff --git a/packages/contracts/test/token_transfer_proxy/transfer_from.ts b/packages/contracts/test/token_transfer_proxy/transfer_from.ts
index bd7adcfae..c35a7276a 100644
--- a/packages/contracts/test/token_transfer_proxy/transfer_from.ts
+++ b/packages/contracts/test/token_transfer_proxy/transfer_from.ts
@@ -1,8 +1,11 @@
import { BlockchainLifecycle, devConstants, web3Factory } from '@0xproject/dev-utils';
+import { BigNumber } from '@0xproject/utils';
import { Web3Wrapper } from '@0xproject/web3-wrapper';
import * as chai from 'chai';
import * as Web3 from 'web3';
+import { DummyTokenContract } from '../../src/contract_wrappers/generated/dummy_token';
+import { TokenTransferProxyContract } from '../../src/contract_wrappers/generated/token_transfer_proxy';
import { Balances } from '../../util/balances';
import { constants } from '../../util/constants';
import { ContractName } from '../../util/types';
@@ -19,29 +22,31 @@ describe('TokenTransferProxy', () => {
let accounts: string[];
let owner: string;
let notAuthorized: string;
- const INIT_BAL = 100000000;
- const INIT_ALLOW = 100000000;
+ const INIT_BAL = new BigNumber(100000000);
+ const INIT_ALLOW = new BigNumber(100000000);
- let tokenTransferProxy: Web3.ContractInstance;
- let rep: Web3.ContractInstance;
+ let tokenTransferProxy: TokenTransferProxyContract;
+ let rep: DummyTokenContract;
let dmyBalances: Balances;
before(async () => {
accounts = await web3Wrapper.getAvailableAddressesAsync();
owner = notAuthorized = accounts[0];
- tokenTransferProxy = await deployer.deployAsync(ContractName.TokenTransferProxy);
- rep = await deployer.deployAsync(ContractName.DummyToken);
+ const tokenTransferProxyInstance = await deployer.deployAsync(ContractName.TokenTransferProxy);
+ tokenTransferProxy = new TokenTransferProxyContract(tokenTransferProxyInstance);
+ const repInstance = await deployer.deployAsync(ContractName.DummyToken);
+ rep = new DummyTokenContract(repInstance);
dmyBalances = new Balances([rep], [accounts[0], accounts[1]]);
await Promise.all([
- rep.approve(tokenTransferProxy.address, INIT_ALLOW, {
+ rep.approve.sendTransactionAsync(tokenTransferProxy.address, INIT_ALLOW, {
from: accounts[0],
}),
- rep.setBalance(accounts[0], INIT_BAL, { from: owner }),
- rep.approve(tokenTransferProxy.address, INIT_ALLOW, {
+ rep.setBalance.sendTransactionAsync(accounts[0], INIT_BAL, { from: owner }),
+ rep.approve.sendTransactionAsync(tokenTransferProxy.address, INIT_ALLOW, {
from: accounts[1],
}),
- rep.setBalance(accounts[1], INIT_BAL, { from: owner }),
+ rep.setBalance.sendTransactionAsync(accounts[1], INIT_BAL, { from: owner }),
]);
});
beforeEach(async () => {
@@ -54,20 +59,34 @@ describe('TokenTransferProxy', () => {
describe('transferFrom', () => {
it('should throw when called by an unauthorized address', async () => {
expect(
- tokenTransferProxy.transferFrom(rep.address, accounts[0], accounts[1], 1000, { from: notAuthorized }),
+ tokenTransferProxy.transferFrom.sendTransactionAsync(
+ rep.address,
+ accounts[0],
+ accounts[1],
+ new BigNumber(1000),
+ {
+ from: notAuthorized,
+ },
+ ),
).to.be.rejectedWith(constants.REVERT);
});
it('should allow an authorized address to transfer', async () => {
const balances = await dmyBalances.getAsync();
- await tokenTransferProxy.addAuthorizedAddress(notAuthorized, {
+ await tokenTransferProxy.addAuthorizedAddress.sendTransactionAsync(notAuthorized, {
from: owner,
});
- const transferAmt = 10000;
- await tokenTransferProxy.transferFrom(rep.address, accounts[0], accounts[1], transferAmt, {
- from: notAuthorized,
- });
+ const transferAmt = new BigNumber(10000);
+ await tokenTransferProxy.transferFrom.sendTransactionAsync(
+ rep.address,
+ accounts[0],
+ accounts[1],
+ transferAmt,
+ {
+ from: notAuthorized,
+ },
+ );
const newBalances = await dmyBalances.getAsync();
expect(newBalances[accounts[0]][rep.address]).to.be.bignumber.equal(
diff --git a/packages/contracts/test/unlimited_allowance_token.ts b/packages/contracts/test/unlimited_allowance_token.ts
index 34d2ba33b..f0a66e76b 100644
--- a/packages/contracts/test/unlimited_allowance_token.ts
+++ b/packages/contracts/test/unlimited_allowance_token.ts
@@ -5,6 +5,7 @@ import { Web3Wrapper } from '@0xproject/web3-wrapper';
import * as chai from 'chai';
import * as Web3 from 'web3';
+import { DummyTokenContract } from '../src/contract_wrappers/generated/dummy_token';
import { constants } from '../util/constants';
import { ContractName } from '../util/types';
@@ -27,14 +28,15 @@ describe('UnlimitedAllowanceToken', () => {
const MAX_MINT_VALUE = new BigNumber(100000000000000000000);
let tokenAddress: string;
- let token: Web3.ContractInstance;
+ let token: DummyTokenContract;
before(async () => {
const accounts = await web3Wrapper.getAvailableAddressesAsync();
owner = accounts[0];
spender = accounts[1];
- token = await deployer.deployAsync(ContractName.DummyToken);
- await token.mint(MAX_MINT_VALUE, { from: owner });
+ const tokenInstance = await deployer.deployAsync(ContractName.DummyToken);
+ token = new DummyTokenContract(tokenInstance);
+ await token.mint.sendTransactionAsync(MAX_MINT_VALUE, { from: owner });
tokenAddress = token.address;
});
beforeEach(async () => {
@@ -47,7 +49,7 @@ describe('UnlimitedAllowanceToken', () => {
it('should throw if owner has insufficient balance', async () => {
const ownerBalance = await zeroEx.token.getBalanceAsync(tokenAddress, owner);
const amountToTransfer = ownerBalance.plus(1);
- return expect(token.transfer.call(spender, amountToTransfer, { from: owner })).to.be.rejectedWith(
+ return expect(token.transfer.callAsync(spender, amountToTransfer, { from: owner })).to.be.rejectedWith(
constants.REVERT,
);
});
@@ -67,7 +69,7 @@ describe('UnlimitedAllowanceToken', () => {
});
it('should return true on a 0 value transfer', async () => {
- const didReturnTrue = await token.transfer.call(spender, 0, {
+ const didReturnTrue = await token.transfer.callAsync(spender, new BigNumber(0), {
from: owner,
});
expect(didReturnTrue).to.be.true();
@@ -80,7 +82,7 @@ describe('UnlimitedAllowanceToken', () => {
const amountToTransfer = ownerBalance.plus(1);
await zeroEx.token.setAllowanceAsync(tokenAddress, owner, spender, amountToTransfer);
return expect(
- token.transferFrom.call(owner, spender, amountToTransfer, {
+ token.transferFrom.callAsync(owner, spender, amountToTransfer, {
from: spender,
}),
).to.be.rejectedWith(constants.REVERT);
@@ -95,15 +97,17 @@ describe('UnlimitedAllowanceToken', () => {
expect(spenderAllowanceIsInsufficient).to.be.true();
return expect(
- token.transferFrom.call(owner, spender, amountToTransfer, {
+ token.transferFrom.callAsync(owner, spender, amountToTransfer, {
from: spender,
}),
).to.be.rejectedWith(constants.REVERT);
});
it('should return true on a 0 value transfer', async () => {
- const amountToTransfer = 0;
- const didReturnTrue = await token.transferFrom.call(owner, spender, amountToTransfer, { from: spender });
+ const amountToTransfer = new BigNumber(0);
+ const didReturnTrue = await token.transferFrom.callAsync(owner, spender, amountToTransfer, {
+ from: spender,
+ });
expect(didReturnTrue).to.be.true();
});
diff --git a/packages/contracts/test/utils/deployer.ts b/packages/contracts/test/utils/deployer.ts
index dc41e41e2..4e7f35c72 100644
--- a/packages/contracts/test/utils/deployer.ts
+++ b/packages/contracts/test/utils/deployer.ts
@@ -5,7 +5,7 @@ import * as path from 'path';
import { constants } from '../../util/constants';
const deployerOpts = {
- artifactsDir: path.resolve('artifacts'),
+ artifactsDir: path.resolve('src', 'artifacts'),
jsonrpcPort: devConstants.RPC_PORT,
networkId: constants.TESTRPC_NETWORK_ID,
defaults: {
diff --git a/packages/contracts/test/zrx_token.ts b/packages/contracts/test/zrx_token.ts
index 1844a67af..1610ada12 100644
--- a/packages/contracts/test/zrx_token.ts
+++ b/packages/contracts/test/zrx_token.ts
@@ -5,6 +5,7 @@ import { Web3Wrapper } from '@0xproject/web3-wrapper';
import * as chai from 'chai';
import * as Web3 from 'web3';
+import { ZRXTokenContract } from '../src/contract_wrappers/generated/zrx_token';
import { constants } from '../util/constants';
import { ContractName } from '../util/types';
@@ -24,7 +25,7 @@ describe('ZRXToken', () => {
let MAX_UINT: BigNumber;
- let zrx: Web3.ContractInstance;
+ let zrx: ZRXTokenContract;
let zrxAddress: string;
before(async () => {
@@ -34,7 +35,8 @@ describe('ZRXToken', () => {
zeroEx = new ZeroEx(web3.currentProvider, {
networkId: constants.TESTRPC_NETWORK_ID,
});
- zrx = await deployer.deployAsync(ContractName.ZRXToken);
+ const zrxInstance = await deployer.deployAsync(ContractName.ZRXToken);
+ zrx = new ZRXTokenContract(zrxInstance);
zrxAddress = zrx.address;
MAX_UINT = zeroEx.token.UNLIMITED_ALLOWANCE_IN_BASE_UNITS;
});
@@ -94,7 +96,7 @@ describe('ZRXToken', () => {
});
it('should return true on a 0 value transfer', async () => {
- const didReturnTrue = await zrx.transfer.call(spender, 0, {
+ const didReturnTrue = await zrx.transfer.callAsync(spender, new BigNumber(0), {
from: owner,
});
expect(didReturnTrue).to.be.true();
@@ -108,7 +110,7 @@ describe('ZRXToken', () => {
await zeroEx.token.setAllowanceAsync(zrxAddress, owner, spender, amountToTransfer, {
gasLimit: constants.MAX_TOKEN_APPROVE_GAS,
});
- const didReturnTrue = await zrx.transferFrom.call(owner, spender, amountToTransfer, { from: spender });
+ const didReturnTrue = await zrx.transferFrom.callAsync(owner, spender, amountToTransfer, { from: spender });
expect(didReturnTrue).to.be.false();
});
@@ -120,13 +122,13 @@ describe('ZRXToken', () => {
const spenderAllowanceIsInsufficient = spenderAllowance.cmp(amountToTransfer) < 0;
expect(spenderAllowanceIsInsufficient).to.be.true();
- const didReturnTrue = await zrx.transferFrom.call(owner, spender, amountToTransfer, { from: spender });
+ const didReturnTrue = await zrx.transferFrom.callAsync(owner, spender, amountToTransfer, { from: spender });
expect(didReturnTrue).to.be.false();
});
it('should return true on a 0 value transfer', async () => {
- const amountToTransfer = 0;
- const didReturnTrue = await zrx.transferFrom.call(owner, spender, amountToTransfer, { from: spender });
+ const amountToTransfer = new BigNumber(0);
+ const didReturnTrue = await zrx.transferFrom.callAsync(owner, spender, amountToTransfer, { from: spender });
expect(didReturnTrue).to.be.true();
});
diff --git a/packages/contracts/tsconfig.json b/packages/contracts/tsconfig.json
index 0c1b3bc16..b618ca4e7 100644
--- a/packages/contracts/tsconfig.json
+++ b/packages/contracts/tsconfig.json
@@ -4,6 +4,7 @@
"outDir": "lib",
"baseUrl": ".",
"declaration": false,
+ "noImplicitThis": false,
"allowJs": true
},
"include": [
@@ -14,10 +15,10 @@
"../../node_modules/types-ethereumjs-util/index.d.ts",
"../../node_modules/types-bn/index.d.ts",
"./globals.d.ts",
+ "./src/**/*",
"./util/**/*",
"./test/**/*",
- "./migrations/**/*",
- "./deploy/**/*"
+ "./migrations/**/*"
],
"exclude": ["./deploy/solc/solc_bin"]
}
diff --git a/packages/contracts/util/artifacts.ts b/packages/contracts/util/artifacts.ts
index fd9380d1d..7c375c1b7 100644
--- a/packages/contracts/util/artifacts.ts
+++ b/packages/contracts/util/artifacts.ts
@@ -1,13 +1,13 @@
-import * as DummyTokenArtifact from '../artifacts/DummyToken.json';
-import * as ExchangeArtifact from '../artifacts/Exchange.json';
-import * as MaliciousTokenArtifact from '../artifacts/MaliciousToken.json';
-import * as MultiSigWalletWithTimeLockArtifact from '../artifacts/MultiSigWalletWithTimeLock.json';
-import * as MultiSigWalletWithTimeLockExceptRemoveAuthorizedAddressArtifact from '../artifacts/MultiSigWalletWithTimeLockExceptRemoveAuthorizedAddress.json';
-import * as TokenArtifact from '../artifacts/Token.json';
-import * as TokenRegistryArtifact from '../artifacts/TokenRegistry.json';
-import * as TokenTransferProxyArtifact from '../artifacts/TokenTransferProxy.json';
-import * as EtherTokenArtifact from '../artifacts/WETH9.json';
-import * as ZRXArtifact from '../artifacts/ZRXToken.json';
+import * as DummyTokenArtifact from '../src/artifacts/DummyToken.json';
+import * as ExchangeArtifact from '../src/artifacts/Exchange.json';
+import * as MaliciousTokenArtifact from '../src/artifacts/MaliciousToken.json';
+import * as MultiSigWalletWithTimeLockArtifact from '../src/artifacts/MultiSigWalletWithTimeLock.json';
+import * as MultiSigWalletWithTimeLockExceptRemoveAuthorizedAddressArtifact from '../src/artifacts/MultiSigWalletWithTimeLockExceptRemoveAuthorizedAddress.json';
+import * as TokenArtifact from '../src/artifacts/Token.json';
+import * as TokenRegistryArtifact from '../src/artifacts/TokenRegistry.json';
+import * as TokenTransferProxyArtifact from '../src/artifacts/TokenTransferProxy.json';
+import * as EtherTokenArtifact from '../src/artifacts/WETH9.json';
+import * as ZRXArtifact from '../src/artifacts/ZRXToken.json';
import { Artifact } from './types';
diff --git a/packages/contracts/util/balances.ts b/packages/contracts/util/balances.ts
index 5bcb5145f..0abc305d8 100644
--- a/packages/contracts/util/balances.ts
+++ b/packages/contracts/util/balances.ts
@@ -2,12 +2,14 @@ import { BigNumber } from '@0xproject/utils';
import * as _ from 'lodash';
import * as Web3 from 'web3';
+import { DummyTokenContract } from '../src/contract_wrappers/generated/dummy_token';
+
import { BalancesByOwner } from './types';
export class Balances {
- private _tokenContractInstances: Web3.ContractInstance[];
+ private _tokenContractInstances: DummyTokenContract[];
private _ownerAddresses: string[];
- constructor(tokenContractInstances: Web3.ContractInstance[], ownerAddresses: string[]) {
+ constructor(tokenContractInstances: DummyTokenContract[], ownerAddresses: string[]) {
this._tokenContractInstances = tokenContractInstances;
this._ownerAddresses = ownerAddresses;
}
diff --git a/packages/contracts/util/exchange_wrapper.ts b/packages/contracts/util/exchange_wrapper.ts
index 7a07239f5..b749cd72e 100644
--- a/packages/contracts/util/exchange_wrapper.ts
+++ b/packages/contracts/util/exchange_wrapper.ts
@@ -3,14 +3,16 @@ import { BigNumber } from '@0xproject/utils';
import * as _ from 'lodash';
import * as Web3 from 'web3';
+import { ExchangeContract } from '../src/contract_wrappers/generated/exchange';
+
import { formatters } from './formatters';
import { Order } from './order';
export class ExchangeWrapper {
- private _exchange: Web3.ContractInstance;
+ private _exchange: ExchangeContract;
private _zeroEx: ZeroEx;
- constructor(exchangeContractInstance: Web3.ContractInstance, zeroEx: ZeroEx) {
- this._exchange = exchangeContractInstance;
+ constructor(exchangeContract: ExchangeContract, zeroEx: ZeroEx) {
+ this._exchange = exchangeContract;
this._zeroEx = zeroEx;
}
public async fillOrderAsync(
@@ -23,14 +25,14 @@ export class ExchangeWrapper {
): Promise<TransactionReceiptWithDecodedLogs> {
const shouldThrowOnInsufficientBalanceOrAllowance = !!opts.shouldThrowOnInsufficientBalanceOrAllowance;
const params = order.createFill(shouldThrowOnInsufficientBalanceOrAllowance, opts.fillTakerTokenAmount);
- const txHash = await this._exchange.fillOrder(
+ const txHash = await this._exchange.fillOrder.sendTransactionAsync(
params.orderAddresses,
params.orderValues,
params.fillTakerTokenAmount,
params.shouldThrowOnInsufficientBalanceOrAllowance,
- params.v,
- params.r,
- params.s,
+ params.v as number,
+ params.r as string,
+ params.s as string,
{ from },
);
const tx = await this._zeroEx.awaitTransactionMinedAsync(txHash);
@@ -44,7 +46,7 @@ export class ExchangeWrapper {
opts: { cancelTakerTokenAmount?: BigNumber } = {},
): Promise<TransactionReceiptWithDecodedLogs> {
const params = order.createCancel(opts.cancelTakerTokenAmount);
- const txHash = await this._exchange.cancelOrder(
+ const txHash = await this._exchange.cancelOrder.sendTransactionAsync(
params.orderAddresses,
params.orderValues,
params.cancelTakerTokenAmount,
@@ -62,13 +64,13 @@ export class ExchangeWrapper {
): Promise<TransactionReceiptWithDecodedLogs> {
const shouldThrowOnInsufficientBalanceOrAllowance = true;
const params = order.createFill(shouldThrowOnInsufficientBalanceOrAllowance, opts.fillTakerTokenAmount);
- const txHash = await this._exchange.fillOrKillOrder(
+ const txHash = await this._exchange.fillOrKillOrder.sendTransactionAsync(
params.orderAddresses,
params.orderValues,
params.fillTakerTokenAmount,
- params.v,
- params.r,
- params.s,
+ params.v as number,
+ params.r as string,
+ params.s as string,
{ from },
);
const tx = await this._zeroEx.awaitTransactionMinedAsync(txHash);
@@ -90,7 +92,7 @@ export class ExchangeWrapper {
shouldThrowOnInsufficientBalanceOrAllowance,
opts.fillTakerTokenAmounts,
);
- const txHash = await this._exchange.batchFillOrders(
+ const txHash = await this._exchange.batchFillOrders.sendTransactionAsync(
params.orderAddresses,
params.orderValues,
params.fillTakerTokenAmounts,
@@ -116,7 +118,7 @@ export class ExchangeWrapper {
shouldThrowOnInsufficientBalanceOrAllowance,
opts.fillTakerTokenAmounts,
);
- const txHash = await this._exchange.batchFillOrKillOrders(
+ const txHash = await this._exchange.batchFillOrKillOrders.sendTransactionAsync(
params.orderAddresses,
params.orderValues,
params.fillTakerTokenAmounts,
@@ -141,7 +143,7 @@ export class ExchangeWrapper {
shouldThrowOnInsufficientBalanceOrAllowance,
opts.fillTakerTokenAmount,
);
- const txHash = await this._exchange.fillOrdersUpTo(
+ const txHash = await this._exchange.fillOrdersUpTo.sendTransactionAsync(
params.orderAddresses,
params.orderValues,
params.fillTakerTokenAmount,
@@ -162,7 +164,7 @@ export class ExchangeWrapper {
opts: { cancelTakerTokenAmounts?: BigNumber[] } = {},
): Promise<TransactionReceiptWithDecodedLogs> {
const params = formatters.createBatchCancel(orders, opts.cancelTakerTokenAmounts);
- const txHash = await this._exchange.batchCancelOrders(
+ const txHash = await this._exchange.batchCancelOrders.sendTransactionAsync(
params.orderAddresses,
params.orderValues,
params.cancelTakerTokenAmounts,
@@ -182,10 +184,10 @@ export class ExchangeWrapper {
public async isValidSignatureAsync(order: Order): Promise<boolean> {
const isValidSignature = await this._exchange.isValidSignature(
order.params.maker,
- order.params.orderHashHex,
- order.params.v,
- order.params.r,
- order.params.s,
+ order.params.orderHashHex as string,
+ order.params.v as number,
+ order.params.r as string,
+ order.params.s as string,
);
return isValidSignature;
}
diff --git a/packages/contracts/util/multi_sig_wrapper.ts b/packages/contracts/util/multi_sig_wrapper.ts
index 0a066df53..3b83ccb7b 100644
--- a/packages/contracts/util/multi_sig_wrapper.ts
+++ b/packages/contracts/util/multi_sig_wrapper.ts
@@ -1,12 +1,15 @@
+import { BigNumber } from '@0xproject/utils';
import ABI = require('ethereumjs-abi');
import ethUtil = require('ethereumjs-util');
import * as _ from 'lodash';
import * as Web3 from 'web3';
+import { MultiSigWalletContract } from '../src/contract_wrappers/generated/multi_sig_wallet';
+
import { TransactionDataParams } from './types';
export class MultiSigWrapper {
- private _multiSig: Web3.ContractInstance;
+ private _multiSig: MultiSigWalletContract;
public static encodeFnArgs(name: string, abi: Web3.AbiDefinition[], args: any[]) {
const abiEntity = _.find(abi, { name }) as Web3.MethodAbi;
if (_.isUndefined(abiEntity)) {
@@ -21,18 +24,18 @@ export class MultiSigWrapper {
});
return funcSig + argsData.join('');
}
- constructor(multiSigContractInstance: Web3.ContractInstance) {
- this._multiSig = multiSigContractInstance;
+ constructor(multiSigContract: MultiSigWalletContract) {
+ this._multiSig = multiSigContract;
}
public async submitTransactionAsync(
destination: string,
from: string,
dataParams: TransactionDataParams,
- value: number = 0,
+ value: BigNumber = new BigNumber(0),
) {
const { name, abi, args = [] } = dataParams;
const encoded = MultiSigWrapper.encodeFnArgs(name, abi, args);
- return this._multiSig.submitTransaction(destination, value, encoded, {
+ return this._multiSig.submitTransaction.sendTransactionAsync(destination, value, encoded, {
from,
});
}
diff --git a/packages/contracts/util/token_registry_wrapper.ts b/packages/contracts/util/token_registry_wrapper.ts
index 033b72d10..d0af17103 100644
--- a/packages/contracts/util/token_registry_wrapper.ts
+++ b/packages/contracts/util/token_registry_wrapper.ts
@@ -1,15 +1,17 @@
import * as Web3 from 'web3';
+import { TokenRegistryContract } from '../src/contract_wrappers/generated/token_registry';
+
import { Token } from './types';
export class TokenRegWrapper {
- private _tokenReg: Web3.ContractInstance;
- constructor(tokenRegContractInstance: Web3.ContractInstance) {
- this._tokenReg = tokenRegContractInstance;
+ private _tokenReg: TokenRegistryContract;
+ constructor(tokenRegContract: TokenRegistryContract) {
+ this._tokenReg = tokenRegContract;
}
- public addTokenAsync(token: Token, from: string) {
- const tx = this._tokenReg.addToken(
- token.address,
+ public async addTokenAsync(token: Token, from: string) {
+ const tx = this._tokenReg.addToken.sendTransactionAsync(
+ token.address as string,
token.name,
token.symbol,
token.decimals,