aboutsummaryrefslogtreecommitdiffstats
path: root/packages/contracts
diff options
context:
space:
mode:
Diffstat (limited to 'packages/contracts')
-rw-r--r--packages/contracts/compiler.json2
-rw-r--r--packages/contracts/package.json3
-rw-r--r--packages/contracts/src/contracts/previous/MultiSigWalletWithTImeLockExceptRemoveAuthorizedAddress/MultiSigWalletWithTimeLockExceptRemoveAuthorizedAddress.sol82
-rw-r--r--packages/contracts/test/asset_proxy_owner.ts8
4 files changed, 91 insertions, 4 deletions
diff --git a/packages/contracts/compiler.json b/packages/contracts/compiler.json
index bf6cc2376..7d469d2c3 100644
--- a/packages/contracts/compiler.json
+++ b/packages/contracts/compiler.json
@@ -19,6 +19,7 @@
}
},
"contracts": [
+ "AssetProxyOwner",
"DummyERC20Token",
"DummyERC721Token",
"ERC20Proxy",
@@ -27,7 +28,6 @@
"MixinAuthorizable",
"MultiSigWallet",
"MultiSigWalletWithTimeLock",
- "MultiSigWalletWithTimeLockExceptRemoveAuthorizedAddress",
"TestAssetProxyDispatcher",
"TestLibBytes",
"TestLibs",
diff --git a/packages/contracts/package.json b/packages/contracts/package.json
index e4e5b131d..180b8058a 100644
--- a/packages/contracts/package.json
+++ b/packages/contracts/package.json
@@ -20,7 +20,8 @@
"run_mocha": "mocha 'lib/test/**/*.js' --timeout 100000 --bail --exit",
"compile": "sol-compiler",
"clean": "shx rm -rf lib src/contract_wrappers/generated",
- "generate_contract_wrappers": "abi-gen --abis ${npm_package_config_abis} --template ../contract_templates/contract.handlebars --partials '../contract_templates/partials/**/*.handlebars' --output src/contract_wrappers/generated --backend ethers && prettier --write 'src/contract_wrappers/generated/**.ts'",
+ "generate_contract_wrappers":
+ "abi-gen --abis ${npm_package_config_abis} --template ../contract_templates/contract.handlebars --partials '../contract_templates/partials/**/*.handlebars' --output src/contract_wrappers/generated --backend ethers && prettier --write 'src/contract_wrappers/generated/**.ts'",
"lint": "tslint --project .",
"coverage:report:text": "istanbul report text",
"coverage:report:html": "istanbul report html && open coverage/index.html",
diff --git a/packages/contracts/src/contracts/previous/MultiSigWalletWithTImeLockExceptRemoveAuthorizedAddress/MultiSigWalletWithTimeLockExceptRemoveAuthorizedAddress.sol b/packages/contracts/src/contracts/previous/MultiSigWalletWithTImeLockExceptRemoveAuthorizedAddress/MultiSigWalletWithTimeLockExceptRemoveAuthorizedAddress.sol
new file mode 100644
index 000000000..8d7d64a75
--- /dev/null
+++ b/packages/contracts/src/contracts/previous/MultiSigWalletWithTImeLockExceptRemoveAuthorizedAddress/MultiSigWalletWithTimeLockExceptRemoveAuthorizedAddress.sol
@@ -0,0 +1,82 @@
+/*
+
+ Copyright 2017 ZeroEx Intl.
+
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+
+*/
+
+pragma solidity ^0.4.10;
+
+import "../../current/multisig/MultiSigWalletWithTimeLock/MultiSigWalletWithTimeLock.sol";
+
+contract MultiSigWalletWithTimeLockExceptRemoveAuthorizedAddress is MultiSigWalletWithTimeLock {
+
+ address public TOKEN_TRANSFER_PROXY_CONTRACT;
+
+ modifier validRemoveAuthorizedAddressTx(uint transactionId) {
+ Transaction storage tx = transactions[transactionId];
+ require(tx.destination == TOKEN_TRANSFER_PROXY_CONTRACT);
+ require(isFunctionRemoveAuthorizedAddress(tx.data));
+ _;
+ }
+
+ /// @dev Contract constructor sets initial owners, required number of confirmations, time lock, and tokenTransferProxy address.
+ /// @param _owners List of initial owners.
+ /// @param _required Number of required confirmations.
+ /// @param _secondsTimeLocked Duration needed after a transaction is confirmed and before it becomes executable, in seconds.
+ /// @param _tokenTransferProxy Address of TokenTransferProxy contract.
+ function MultiSigWalletWithTimeLockExceptRemoveAuthorizedAddress(
+ address[] _owners,
+ uint _required,
+ uint _secondsTimeLocked,
+ address _tokenTransferProxy)
+ public
+ MultiSigWalletWithTimeLock(_owners, _required, _secondsTimeLocked)
+ {
+ TOKEN_TRANSFER_PROXY_CONTRACT = _tokenTransferProxy;
+ }
+
+ /// @dev Allows execution of removeAuthorizedAddress without time lock.
+ /// @param transactionId Transaction ID.
+ function executeRemoveAuthorizedAddress(uint transactionId)
+ public
+ notExecuted(transactionId)
+ fullyConfirmed(transactionId)
+ validRemoveAuthorizedAddressTx(transactionId)
+ {
+ Transaction storage tx = transactions[transactionId];
+ tx.executed = true;
+ if (tx.destination.call.value(tx.value)(tx.data))
+ Execution(transactionId);
+ else {
+ ExecutionFailure(transactionId);
+ tx.executed = false;
+ }
+ }
+
+ /// @dev Compares first 4 bytes of byte array to removeAuthorizedAddress function signature.
+ /// @param data Transaction data.
+ /// @return Successful if data is a call to removeAuthorizedAddress.
+ function isFunctionRemoveAuthorizedAddress(bytes data)
+ public
+ constant
+ returns (bool)
+ {
+ bytes4 removeAuthorizedAddressSignature = bytes4(sha3("removeAuthorizedAddress(address)"));
+ for (uint i = 0; i < 4; i++) {
+ require(data[i] == removeAuthorizedAddressSignature[i]);
+ }
+ return true;
+ }
+} \ No newline at end of file
diff --git a/packages/contracts/test/asset_proxy_owner.ts b/packages/contracts/test/asset_proxy_owner.ts
index 7b470e82e..2e8e9373a 100644
--- a/packages/contracts/test/asset_proxy_owner.ts
+++ b/packages/contracts/test/asset_proxy_owner.ts
@@ -40,7 +40,11 @@ describe('AssetProxyOwner', () => {
const accounts = await web3Wrapper.getAvailableAddressesAsync();
owners = [accounts[0], accounts[1]];
const initialOwner = (authorized = accounts[0]);
- erc20Proxy = await MixinAuthorizableContract.deployFrom0xArtifactAsync(artifacts.MixinAuthorizable, provider, txDefaults);
+ erc20Proxy = await MixinAuthorizableContract.deployFrom0xArtifactAsync(
+ artifacts.MixinAuthorizable,
+ provider,
+ txDefaults,
+ );
erc721Proxy = await MixinAuthorizableContract.deployFrom0xArtifactAsync(
artifacts.MixinAuthorizable,
provider,
@@ -55,7 +59,7 @@ describe('AssetProxyOwner', () => {
requiredApprovals,
SECONDS_TIME_LOCKED,
defaultAssetProxyContractAddresses,
- ]);
+ );
multiSigWrapper = new MultiSigWrapper(multiSig, zeroEx);
await erc20Proxy.transferOwnership.sendTransactionAsync(multiSig.address, { from: initialOwner });
await erc721Proxy.transferOwnership.sendTransactionAsync(multiSig.address, { from: initialOwner });