diff --git a/contracts/core/Core.sol b/contracts/core/Core.sol index 19c0cd400..21c0d1c99 100644 --- a/contracts/core/Core.sol +++ b/contracts/core/Core.sol @@ -47,12 +47,10 @@ contract Core is * * @param _transferProxy The address of the transfer proxy * @param _vault The address of the vault - * @param _signatureValidator The address of the signature validator */ constructor( address _transferProxy, - address _vault, - address _signatureValidator + address _vault ) public { @@ -67,8 +65,5 @@ contract Core is // Instantiate instance of vault state.vaultInstance = IVault(_vault); - - // Commit passed address to signatureValidator state variable - state.signatureValidator = _signatureValidator; } } diff --git a/contracts/core/extensions/CoreInternal.sol b/contracts/core/extensions/CoreInternal.sol index 3e8cf55f0..86410a7eb 100644 --- a/contracts/core/extensions/CoreInternal.sol +++ b/contracts/core/extensions/CoreInternal.sol @@ -80,10 +80,6 @@ contract CoreInternal is address _priceLibrary ); - event SignatureValidatorChanged( - address _signatureValidator - ); - /* ============ External Functions ============ */ /** @@ -294,23 +290,4 @@ contract CoreInternal is _priceLibrary ); } - - /** - * Change address of the Signature Validator contract - * - * @param _signatureValidator Address of the Signature Validator library - */ - function setSignatureValidator( - address _signatureValidator - ) - external - onlyOwner - timeLockUpgrade - { - state.signatureValidator = _signatureValidator; - - emit SignatureValidatorChanged( - _signatureValidator - ); - } } diff --git a/contracts/core/interfaces/ICore.sol b/contracts/core/interfaces/ICore.sol index eef73dea1..903a48ef2 100644 --- a/contracts/core/interfaces/ICore.sol +++ b/contracts/core/interfaces/ICore.sol @@ -91,16 +91,6 @@ interface ICore { view returns(bool); - /** - * Return signatureValidator address - * - * @return address signatureValidator address - */ - function signatureValidator() - external - view - returns(address); - /** * Exchanges components for Set Tokens * diff --git a/contracts/core/lib/CoreState.sol b/contracts/core/lib/CoreState.sol index f07fba435..5f702934d 100644 --- a/contracts/core/lib/CoreState.sol +++ b/contracts/core/lib/CoreState.sol @@ -53,9 +53,6 @@ contract CoreState { // Mapping of approved modules mapping(address => bool) validModules; - // Address of the Signature Validator contract - address signatureValidator; - // Mapping of tracked SetToken factories mapping(address => bool) validFactories; @@ -133,19 +130,6 @@ contract CoreState { return state.vault; } - /** - * Return signatureValidator address - * - * @return address signatureValidator address - */ - function signatureValidator() - external - view - returns(address) - { - return state.signatureValidator; - } - /** * Return boolean indicating if address is valid factory. * diff --git a/contracts/core/modules/IssuanceOrderModule.sol b/contracts/core/modules/IssuanceOrderModule.sol index 403448957..3470a3469 100644 --- a/contracts/core/modules/IssuanceOrderModule.sol +++ b/contracts/core/modules/IssuanceOrderModule.sol @@ -18,6 +18,7 @@ pragma solidity 0.4.25; pragma experimental "ABIEncoderV2"; import { Math } from "openzeppelin-solidity/contracts/math/Math.sol"; +import { Ownable } from "openzeppelin-solidity/contracts/ownership/Ownable.sol"; import { ReentrancyGuard } from "openzeppelin-solidity/contracts/utils/ReentrancyGuard.sol"; import { SafeMath } from "openzeppelin-solidity/contracts/math/SafeMath.sol"; @@ -33,6 +34,7 @@ import { IVault } from "../interfaces/IVault.sol"; import { LibBytes } from "../../external/0x/LibBytes.sol"; import { ModuleCoreState } from "./lib/ModuleCoreState.sol"; import { OrderLibrary } from "../lib/OrderLibrary.sol"; +import { TimeLockUpgrade } from "../../lib/TimeLockUpgrade.sol"; /** @@ -44,6 +46,8 @@ import { OrderLibrary } from "../lib/OrderLibrary.sol"; */ contract IssuanceOrderModule is ModuleCoreState, + Ownable, + TimeLockUpgrade, ReentrancyGuard { using SafeMath for uint256; @@ -57,6 +61,10 @@ contract IssuanceOrderModule is // Mapping of canceled Issuance Orders mapping(bytes32 => uint256) public orderCancels; + // Address of signature validator + address public signatureValidator; + ISignatureValidator public signatureValidatorInstance; + /* ============ Events ============ */ event LogFill( @@ -81,6 +89,10 @@ contract IssuanceOrderModule is bytes32 orderHash ); + event SignatureValidatorChanged( + address _signatureValidator + ); + /* ============ Constructor ============ */ /** @@ -89,11 +101,13 @@ contract IssuanceOrderModule is * @param _core The address of Core * @param _transferProxy The address of transferProxy * @param _vault The address of Vault + * @param _signatureValidator The address of SignatureValidator */ constructor( address _core, address _transferProxy, - address _vault + address _vault, + address _signatureValidator ) public ModuleCoreState( @@ -101,7 +115,30 @@ contract IssuanceOrderModule is _transferProxy, _vault ) - {} + { + // Commit the signature validator address and instance + signatureValidator = _signatureValidator; + signatureValidatorInstance = ISignatureValidator(signatureValidator); + } + + /** + * Change address of the Signature Validator contract + * + * @param _signatureValidator Address of the Signature Validator library + */ + function setSignatureValidator( + address _signatureValidator + ) + external + onlyOwner + timeLockUpgrade + { + signatureValidator = _signatureValidator; + + emit SignatureValidatorChanged( + _signatureValidator + ); + } /* ============ External Functions ============ */ @@ -258,7 +295,7 @@ contract IssuanceOrderModule is // Verify signature is authentic, if already been filled before skip to save gas if (orderFills[_orderHash] == 0) { - ISignatureValidator(coreInstance.signatureValidator()).validateSignature( + signatureValidatorInstance.validateSignature( _orderHash, _order.makerAddress, _signature diff --git a/contracts/mocks/core/CoreMock.sol b/contracts/mocks/core/CoreMock.sol index f1185fe4b..4863804a5 100644 --- a/contracts/mocks/core/CoreMock.sol +++ b/contracts/mocks/core/CoreMock.sol @@ -8,11 +8,10 @@ import { ISetToken } from "../../core/interfaces/ISetToken.sol"; contract CoreMock is Core { constructor( address _transferProxy, - address _vault, - address _signatureValidator + address _vault ) public - Core(_transferProxy, _vault, _signatureValidator) + Core(_transferProxy, _vault) {} /* diff --git a/test/contracts/core/core.spec.ts b/test/contracts/core/core.spec.ts index 0fcf31df0..d8b835303 100644 --- a/test/contracts/core/core.spec.ts +++ b/test/contracts/core/core.spec.ts @@ -6,7 +6,7 @@ import { Address } from 'set-protocol-utils'; import ChaiSetup from '@utils/chaiSetup'; import { BigNumberSetup } from '@utils/bigNumberSetup'; -import { CoreContract, SignatureValidatorContract, TransferProxyContract, VaultContract } from '@utils/contracts'; +import { CoreContract, TransferProxyContract, VaultContract } from '@utils/contracts'; import { Blockchain } from '@utils/blockchain'; import { getWeb3 } from '@utils/web3Helper'; @@ -27,7 +27,6 @@ contract('Core', accounts => { let transferProxy: TransferProxyContract; let vault: VaultContract; - let signatureValidator: SignatureValidatorContract; const coreWrapper = new CoreWrapper(ownerAccount, ownerAccount); @@ -53,14 +52,12 @@ contract('Core', accounts => { beforeEach(async () => { transferProxy = await coreWrapper.deployTransferProxyAsync(); vault = await coreWrapper.deployVaultAsync(); - signatureValidator = await coreWrapper.deploySignatureValidatorAsync(); }); async function subject(): Promise { return await coreWrapper.deployCoreAsync( transferProxy, vault, - signatureValidator, subjectCaller, ); } @@ -80,13 +77,5 @@ contract('Core', accounts => { expect(vaultAddress).to.equal(vault.address); }); - - it('should contain the correct address of the signatureValidator', async () => { - const coreContract = await subject(); - - const signatureValidatorAddress = await coreContract.signatureValidator.callAsync(); - - expect(signatureValidatorAddress).to.equal(signatureValidator.address); - }); }); }); diff --git a/test/contracts/core/exchange-wrappers/kyberNetworkWrapper.spec.ts b/test/contracts/core/exchange-wrappers/kyberNetworkWrapper.spec.ts index 4c76c2c21..2d587ba68 100644 --- a/test/contracts/core/exchange-wrappers/kyberNetworkWrapper.spec.ts +++ b/test/contracts/core/exchange-wrappers/kyberNetworkWrapper.spec.ts @@ -10,7 +10,6 @@ import { BigNumberSetup } from '@utils/bigNumberSetup'; import { CoreContract, KyberNetworkWrapperContract, - SignatureValidatorContract, StandardTokenMockContract, TransferProxyContract, VaultContract, @@ -51,7 +50,6 @@ contract('KyberNetworkWrapper', accounts => { let core: CoreContract; let transferProxy: TransferProxyContract; let vault: VaultContract; - let signatureValidator: SignatureValidatorContract; let kyberNetworkWrapper: KyberNetworkWrapperContract; @@ -60,8 +58,7 @@ contract('KyberNetworkWrapper', accounts => { transferProxy = await coreWrapper.deployTransferProxyAsync(); vault = await coreWrapper.deployVaultAsync(); - signatureValidator = await coreWrapper.deploySignatureValidatorAsync(); - core = await coreWrapper.deployCoreMockAsync(transferProxy, vault, signatureValidator); + core = await coreWrapper.deployCoreMockAsync(transferProxy, vault); await coreWrapper.addModuleAsync(core, issuanceOrderModuleAccount); kyberNetworkWrapper = await exchangeWrapper.deployKyberNetworkWrapper( diff --git a/test/contracts/core/exchange-wrappers/takerWalletWrapper.spec.ts b/test/contracts/core/exchange-wrappers/takerWalletWrapper.spec.ts index 66e20c87a..4783f5006 100644 --- a/test/contracts/core/exchange-wrappers/takerWalletWrapper.spec.ts +++ b/test/contracts/core/exchange-wrappers/takerWalletWrapper.spec.ts @@ -10,7 +10,6 @@ import ChaiSetup from '@utils/chaiSetup'; import { BigNumberSetup } from '@utils/bigNumberSetup'; import { CoreContract, - SignatureValidatorContract, StandardTokenMockContract, TakerWalletWrapperContract, TransferProxyContract, @@ -52,7 +51,6 @@ contract('TakerWalletWrapper', accounts => { let core: CoreContract; let transferProxy: TransferProxyContract; let vault: VaultContract; - let signatureValidator: SignatureValidatorContract; let takerWalletWrapper: TakerWalletWrapperContract; let components: StandardTokenMockContract[] = []; @@ -64,8 +62,7 @@ contract('TakerWalletWrapper', accounts => { transferProxy = await coreWrapper.deployTransferProxyAsync(); vault = await coreWrapper.deployVaultAsync(); - signatureValidator = await coreWrapper.deploySignatureValidatorAsync(); - core = await coreWrapper.deployCoreMockAsync(transferProxy, vault, signatureValidator); + core = await coreWrapper.deployCoreMockAsync(transferProxy, vault); await coreWrapper.addModuleAsync(core, issuanceOrderModuleAccount); takerWalletWrapper = await exchangeWrapper.deployTakerWalletExchangeWrapper(core.address, transferProxy); diff --git a/test/contracts/core/exchange-wrappers/zeroExExchangeWrapper.spec.ts b/test/contracts/core/exchange-wrappers/zeroExExchangeWrapper.spec.ts index 68014b785..89e9477e5 100644 --- a/test/contracts/core/exchange-wrappers/zeroExExchangeWrapper.spec.ts +++ b/test/contracts/core/exchange-wrappers/zeroExExchangeWrapper.spec.ts @@ -11,7 +11,6 @@ import ChaiSetup from '@utils/chaiSetup'; import { BigNumberSetup } from '@utils/bigNumberSetup'; import { CoreContract, - SignatureValidatorContract, StandardTokenMockContract, TransferProxyContract, VaultContract, @@ -58,7 +57,6 @@ contract('ZeroExExchangeWrapper', accounts => { let core: CoreContract; let transferProxy: TransferProxyContract; let vault: VaultContract; - let signatureValidator: SignatureValidatorContract; let zeroExExchangeWrapper: ZeroExExchangeWrapperContract; @@ -71,8 +69,7 @@ contract('ZeroExExchangeWrapper', accounts => { transferProxy = await coreWrapper.deployTransferProxyAsync(); vault = await coreWrapper.deployVaultAsync(); - signatureValidator = await coreWrapper.deploySignatureValidatorAsync(); - core = await coreWrapper.deployCoreMockAsync(transferProxy, vault, signatureValidator); + core = await coreWrapper.deployCoreMockAsync(transferProxy, vault); await coreWrapper.addModuleAsync(core, issuanceOrderModuleAccount); zeroExExchangeWrapper = await exchangeWrapper.deployZeroExExchangeWrapper( diff --git a/test/contracts/core/extensions/coreAccounting.spec.ts b/test/contracts/core/extensions/coreAccounting.spec.ts index 1cba66932..7bc5c5647 100644 --- a/test/contracts/core/extensions/coreAccounting.spec.ts +++ b/test/contracts/core/extensions/coreAccounting.spec.ts @@ -12,7 +12,6 @@ import { BigNumberSetup } from '@utils/bigNumberSetup'; import { CoreContract, SetTokenFactoryContract, - SignatureValidatorContract, StandardTokenMockContract, TransferProxyContract, VaultContract @@ -47,7 +46,6 @@ contract('CoreAccounting', accounts => { let mockTokens: StandardTokenMockContract[] = []; let transferProxy: TransferProxyContract; let vault: VaultContract; - let signatureValidator: SignatureValidatorContract; let setTokenFactory: SetTokenFactoryContract; const coreWrapper = new CoreWrapper(ownerAccount, ownerAccount); @@ -66,8 +64,7 @@ contract('CoreAccounting', accounts => { vault = await coreWrapper.deployVaultAsync(); transferProxy = await coreWrapper.deployTransferProxyAsync(); - signatureValidator = await coreWrapper.deploySignatureValidatorAsync(); - core = await coreWrapper.deployCoreAsync(transferProxy, vault, signatureValidator); + core = await coreWrapper.deployCoreAsync(transferProxy, vault); setTokenFactory = await coreWrapper.deploySetTokenFactoryAsync(core.address); await coreWrapper.setDefaultStateAndAuthorizationsAsync(core, vault, transferProxy, setTokenFactory); }); diff --git a/test/contracts/core/extensions/coreInternal.spec.ts b/test/contracts/core/extensions/coreInternal.spec.ts index f35183e4a..aac8acf90 100644 --- a/test/contracts/core/extensions/coreInternal.spec.ts +++ b/test/contracts/core/extensions/coreInternal.spec.ts @@ -20,7 +20,6 @@ import { SetReenabled, PriceLibraryAdded, PriceLibraryRemoved, - SignatureValidatorChanged, } from '@utils/contract_logs/core'; import { LinearAuctionPriceCurveContract, @@ -54,7 +53,6 @@ contract('CoreInternal', accounts => { const [ ownerAccount, otherAccount, - protocolAccount, zeroExWrapperAddress, moduleAccount, ] = accounts; @@ -682,53 +680,4 @@ contract('CoreInternal', accounts => { }); }); }); - - describe('#setSignatureValidator', async () => { - let subjectCaller: Address; - let subjectSignatureValidator: Address; - - beforeEach(async () => { - vault = await coreWrapper.deployVaultAsync(); - transferProxy = await coreWrapper.deployTransferProxyAsync(); - setTokenFactory = await coreWrapper.deploySetTokenFactoryAsync(core.address); - await coreWrapper.setDefaultStateAndAuthorizationsAsync(core, vault, transferProxy, setTokenFactory); - - subjectSignatureValidator = protocolAccount; - subjectCaller = ownerAccount; - }); - - async function subject(): Promise { - return core.setSignatureValidator.sendTransactionAsync( - subjectSignatureValidator, - { from: subjectCaller }, - ); - } - - it('changes the signatureValidator to the correct address', async () => { - await subject(); - - const signatureValidatorAddress = await core.signatureValidator.callAsync(); - expect(signatureValidatorAddress).to.equal(subjectSignatureValidator); - }); - - it('emits the correct SignatureValidatorChanged log', async () => { - const txHash = await subject(); - const formattedLogs = await setTestUtils.getLogsFromTxHash(txHash); - const expectedLogs = SignatureValidatorChanged( - core.address, - subjectSignatureValidator, - ); - await SetTestUtils.assertLogEquivalence(formattedLogs, [expectedLogs]); - }); - - describe('when the caller is not the owner of the contract', async () => { - beforeEach(async () => { - subjectCaller = otherAccount; - }); - - it('should revert', async () => { - await expectRevertError(subject()); - }); - }); - }); }); diff --git a/test/contracts/core/extensions/coreIssuance.spec.ts b/test/contracts/core/extensions/coreIssuance.spec.ts index f93a3b475..2c38e63e4 100644 --- a/test/contracts/core/extensions/coreIssuance.spec.ts +++ b/test/contracts/core/extensions/coreIssuance.spec.ts @@ -15,7 +15,6 @@ import { RebalancingSetTokenFactoryContract, SetTokenContract, SetTokenFactoryContract, - SignatureValidatorContract, StandardTokenMockContract, TransferProxyContract, VaultContract, @@ -59,7 +58,6 @@ contract('CoreIssuance', accounts => { let transferProxy: TransferProxyContract; let vault: VaultContract; let setTokenFactory: SetTokenFactoryContract; - let signatureValidator: SignatureValidatorContract; const coreWrapper = new CoreWrapper(ownerAccount, ownerAccount); const erc20Wrapper = new ERC20Wrapper(ownerAccount); @@ -83,8 +81,7 @@ contract('CoreIssuance', accounts => { transferProxy = await coreWrapper.deployTransferProxyAsync(); vault = await coreWrapper.deployVaultAsync(); - signatureValidator = await coreWrapper.deploySignatureValidatorAsync(); - core = await coreWrapper.deployCoreAsync(transferProxy, vault, signatureValidator); + core = await coreWrapper.deployCoreAsync(transferProxy, vault); setTokenFactory = await coreWrapper.deploySetTokenFactoryAsync(core.address); await coreWrapper.setDefaultStateAndAuthorizationsAsync(core, vault, transferProxy, setTokenFactory); }); diff --git a/test/contracts/core/extensions/coreModuleInteraction.spec.ts b/test/contracts/core/extensions/coreModuleInteraction.spec.ts index 6b6e8ccad..ae3fa9430 100644 --- a/test/contracts/core/extensions/coreModuleInteraction.spec.ts +++ b/test/contracts/core/extensions/coreModuleInteraction.spec.ts @@ -13,7 +13,6 @@ import { CoreContract, SetTokenContract, SetTokenFactoryContract, - SignatureValidatorContract, StandardTokenMockContract, TransferProxyContract, VaultContract @@ -55,7 +54,6 @@ contract('CoreModuleInteraction', accounts => { let mockTokens: StandardTokenMockContract[] = []; let transferProxy: TransferProxyContract; let vault: VaultContract; - let signatureValidator: SignatureValidatorContract; let setTokenFactory: SetTokenFactoryContract; const coreWrapper = new CoreWrapper(ownerAccount, ownerAccount); @@ -76,8 +74,7 @@ contract('CoreModuleInteraction', accounts => { vault = await coreWrapper.deployVaultAsync(); transferProxy = await coreWrapper.deployTransferProxyAsync(); - signatureValidator = await coreWrapper.deploySignatureValidatorAsync(); - core = await coreWrapper.deployCoreAsync(transferProxy, vault, signatureValidator); + core = await coreWrapper.deployCoreAsync(transferProxy, vault); setTokenFactory = await coreWrapper.deploySetTokenFactoryAsync(core.address); await coreWrapper.setDefaultStateAndAuthorizationsAsync(core, vault, transferProxy, setTokenFactory); await coreWrapper.addModuleAsync(core, moduleAccount); diff --git a/test/contracts/core/lib/orderLibrary.spec.ts b/test/contracts/core/lib/orderLibrary.spec.ts index 2f284d6e2..7b3469e8a 100644 --- a/test/contracts/core/lib/orderLibrary.spec.ts +++ b/test/contracts/core/lib/orderLibrary.spec.ts @@ -12,7 +12,6 @@ import { OrderLibraryMockContract, SetTokenContract, SetTokenFactoryContract, - SignatureValidatorContract, StandardTokenMockContract, TransferProxyContract, VaultContract @@ -54,7 +53,6 @@ contract('OrderLibrary', accounts => { let transferProxy: TransferProxyContract; let vault: VaultContract; let setTokenFactory: SetTokenFactoryContract; - let signatureValidator: SignatureValidatorContract; let orderLib: OrderLibraryMockContract; const coreWrapper = new CoreWrapper(ownerAccount, ownerAccount); @@ -73,8 +71,7 @@ contract('OrderLibrary', accounts => { vault = await coreWrapper.deployVaultAsync(); transferProxy = await coreWrapper.deployTransferProxyAsync(); - signatureValidator = await coreWrapper.deploySignatureValidatorAsync(); - core = await coreWrapper.deployCoreMockAsync(transferProxy, vault, signatureValidator); + core = await coreWrapper.deployCoreMockAsync(transferProxy, vault); setTokenFactory = await coreWrapper.deploySetTokenFactoryAsync(core.address); await coreWrapper.setDefaultStateAndAuthorizationsAsync(core, vault, transferProxy, setTokenFactory); diff --git a/test/contracts/core/modules/exchangeIssueModule.spec.ts b/test/contracts/core/modules/exchangeIssueModule.spec.ts index bda82c1bf..d1cae9902 100644 --- a/test/contracts/core/modules/exchangeIssueModule.spec.ts +++ b/test/contracts/core/modules/exchangeIssueModule.spec.ts @@ -20,7 +20,6 @@ import { ExchangeIssueModuleContract, SetTokenContract, SetTokenFactoryContract, - SignatureValidatorContract, StandardTokenMockContract, TransferProxyContract, VaultContract @@ -62,7 +61,6 @@ contract('ExchangeIssueModule', accounts => { let vault: VaultContract; let exchangeIssueModule: ExchangeIssueModuleContract; let setTokenFactory: SetTokenFactoryContract; - let signatureValidator: SignatureValidatorContract; const coreWrapper = new CoreWrapper(contractDeployer, contractDeployer); const erc20Wrapper = new ERC20Wrapper(contractDeployer); @@ -83,8 +81,7 @@ contract('ExchangeIssueModule', accounts => { vault = await coreWrapper.deployVaultAsync(); transferProxy = await coreWrapper.deployTransferProxyAsync(); - signatureValidator = await coreWrapper.deploySignatureValidatorAsync(); - core = await coreWrapper.deployCoreAsync(transferProxy, vault, signatureValidator); + core = await coreWrapper.deployCoreAsync(transferProxy, vault); exchangeIssueModule = await coreWrapper.deployExchangeIssueModuleAsync( core, transferProxy, diff --git a/test/contracts/core/modules/issuanceOrderModule.spec.ts b/test/contracts/core/modules/issuanceOrderModule.spec.ts index c8afaecb3..1d879a2eb 100644 --- a/test/contracts/core/modules/issuanceOrderModule.spec.ts +++ b/test/contracts/core/modules/issuanceOrderModule.spec.ts @@ -31,7 +31,11 @@ import { ether } from '@utils/units'; import { assertTokenBalanceAsync, expectRevertError } from '@utils/tokenAssertions'; import { Blockchain } from '@utils/blockchain'; import { DEFAULT_GAS, DEPLOYED_TOKEN_QUANTITY, KYBER_RESERVE_CONFIGURED_RATE } from '@utils/constants'; -import { getExpectedFillLog, getExpectedCancelLog } from '@utils/contract_logs/issuanceOrderModule'; +import { + getExpectedFillLog, + getExpectedCancelLog, + SignatureValidatorChanged, +} from '@utils/contract_logs/issuanceOrderModule'; import { generateOrdersDataWithIncorrectExchange } from '@utils/orders'; import { getWeb3 } from '@utils/web3Helper'; @@ -61,6 +65,7 @@ contract('IssuanceOrderModule', accounts => { issuanceOrderMaker, zeroExOrderMaker, notIssuanceOrderMaker, + notOwner, ] = accounts; let core: CoreContract; @@ -90,11 +95,12 @@ contract('IssuanceOrderModule', accounts => { vault = await coreWrapper.deployVaultAsync(); transferProxy = await coreWrapper.deployTransferProxyAsync(); signatureValidator = await coreWrapper.deploySignatureValidatorAsync(); - core = await coreWrapper.deployCoreAsync(transferProxy, vault, signatureValidator); + core = await coreWrapper.deployCoreAsync(transferProxy, vault); issuanceOrderModule = await coreWrapper.deployIssuanceOrderModuleAsync( core, transferProxy, - vault + vault, + signatureValidator, ); await coreWrapper.addModuleAsync(core, issuanceOrderModule.address); setTokenFactory = await coreWrapper.deploySetTokenFactoryAsync(core.address); @@ -1182,4 +1188,48 @@ contract('IssuanceOrderModule', accounts => { }); }); }); + + describe('#setSignatureValidator', async () => { + let subjectCaller: Address; + let subjectSignatureValidator: Address; + + beforeEach(async () => { + subjectSignatureValidator = contractDeployer; + subjectCaller = contractDeployer; + }); + + async function subject(): Promise { + return issuanceOrderModule.setSignatureValidator.sendTransactionAsync( + subjectSignatureValidator, + { from: subjectCaller }, + ); + } + + it('changes the signatureValidator to the correct address', async () => { + await subject(); + + const signatureValidatorAddress = await issuanceOrderModule.signatureValidator.callAsync(); + expect(signatureValidatorAddress).to.equal(subjectSignatureValidator); + }); + + it('emits the correct SignatureValidatorChanged log', async () => { + const txHash = await subject(); + const formattedLogs = await setTestUtils.getLogsFromTxHash(txHash); + const expectedLogs = SignatureValidatorChanged( + issuanceOrderModule.address, + subjectSignatureValidator, + ); + await SetTestUtils.assertLogEquivalence(formattedLogs, [expectedLogs]); + }); + + describe('when the caller is not the owner of the contract', async () => { + beforeEach(async () => { + subjectCaller = notOwner; + }); + + it('should revert', async () => { + await expectRevertError(subject()); + }); + }); + }); }); diff --git a/test/contracts/core/modules/rebalanceAuctionModule.spec.ts b/test/contracts/core/modules/rebalanceAuctionModule.spec.ts index bb0fcc85a..d130fb467 100644 --- a/test/contracts/core/modules/rebalanceAuctionModule.spec.ts +++ b/test/contracts/core/modules/rebalanceAuctionModule.spec.ts @@ -17,7 +17,6 @@ import { RebalancingSetTokenFactoryContract, SetTokenContract, SetTokenFactoryContract, - SignatureValidatorContract, TransferProxyContract, VaultContract, WhiteListContract, @@ -63,7 +62,6 @@ contract('RebalanceAuctionModule', accounts => { let coreMock: CoreMockContract; let transferProxy: TransferProxyContract; let vault: VaultContract; - let signatureValidator: SignatureValidatorContract; let rebalanceAuctionModuleMock: RebalanceAuctionModuleMockContract; let factory: SetTokenFactoryContract; let rebalancingComponentWhiteList: WhiteListContract; @@ -94,8 +92,7 @@ contract('RebalanceAuctionModule', accounts => { transferProxy = await coreWrapper.deployTransferProxyAsync(); vault = await coreWrapper.deployVaultAsync(); - signatureValidator = await coreWrapper.deploySignatureValidatorAsync(); - coreMock = await coreWrapper.deployCoreMockAsync(transferProxy, vault, signatureValidator); + coreMock = await coreWrapper.deployCoreMockAsync(transferProxy, vault); rebalanceAuctionModuleMock = await coreWrapper.deployRebalanceAuctionModuleMockAsync(coreMock, vault); await coreWrapper.addModuleAsync(coreMock, rebalanceAuctionModuleMock.address); diff --git a/test/contracts/core/tokens/rebalancingSetToken.spec.ts b/test/contracts/core/tokens/rebalancingSetToken.spec.ts index 53a6078ee..fc74f1513 100644 --- a/test/contracts/core/tokens/rebalancingSetToken.spec.ts +++ b/test/contracts/core/tokens/rebalancingSetToken.spec.ts @@ -17,7 +17,6 @@ import { RebalancingSetTokenContract, RebalancingSetTokenFactoryContract, SetTokenFactoryContract, - SignatureValidatorContract, StandardTokenMockContract, TransferProxyContract, VaultContract, @@ -75,7 +74,6 @@ contract('RebalancingSetToken', accounts => { let transferProxy: TransferProxyContract; let vault: VaultContract; let rebalanceAuctionModule: RebalanceAuctionModuleContract; - let signatureValidator: SignatureValidatorContract; let factory: SetTokenFactoryContract; let rebalancingFactory: RebalancingSetTokenFactoryContract; let rebalancingComponentWhiteList: WhiteListContract; @@ -105,8 +103,7 @@ contract('RebalancingSetToken', accounts => { transferProxy = await coreWrapper.deployTransferProxyAsync(); vault = await coreWrapper.deployVaultAsync(); - signatureValidator = await coreWrapper.deploySignatureValidatorAsync(); - coreMock = await coreWrapper.deployCoreMockAsync(transferProxy, vault, signatureValidator); + coreMock = await coreWrapper.deployCoreMockAsync(transferProxy, vault); rebalanceAuctionModule = await coreWrapper.deployRebalanceAuctionModuleAsync(coreMock, vault); await coreWrapper.addModuleAsync(coreMock, rebalanceAuctionModule.address); diff --git a/test/contracts/core/tokens/rebalancingSetTokenFactory.spec.ts b/test/contracts/core/tokens/rebalancingSetTokenFactory.spec.ts index 807c291c8..1af98be99 100644 --- a/test/contracts/core/tokens/rebalancingSetTokenFactory.spec.ts +++ b/test/contracts/core/tokens/rebalancingSetTokenFactory.spec.ts @@ -16,7 +16,6 @@ import { RebalancingSetTokenFactoryContract, SetTokenContract, SetTokenFactoryContract, - SignatureValidatorContract, TransferProxyContract, VaultContract, } from '@utils/contracts'; @@ -50,7 +49,6 @@ contract('RebalancingSetTokenFactory', accounts => { let rebalancingSetTokenFactory: RebalancingSetTokenFactoryContract; let transferProxy: TransferProxyContract; let vault: VaultContract; - let signatureValidator: SignatureValidatorContract; let core: CoreContract; let rebalanceAuctionModule: RebalanceAuctionModuleContract; let setToken: SetTokenContract; @@ -73,8 +71,7 @@ contract('RebalancingSetTokenFactory', accounts => { vault = await coreWrapper.deployVaultAsync(); transferProxy = await coreWrapper.deployTransferProxyAsync(); - signatureValidator = await coreWrapper.deploySignatureValidatorAsync(); - core = await coreWrapper.deployCoreAsync(transferProxy, vault, signatureValidator); + core = await coreWrapper.deployCoreAsync(transferProxy, vault); rebalanceAuctionModule = await coreWrapper.deployRebalanceAuctionModuleAsync(core, vault); await coreWrapper.addModuleAsync(core, rebalanceAuctionModule.address); diff --git a/test/contracts/core/tokens/setTokenFactory.spec.ts b/test/contracts/core/tokens/setTokenFactory.spec.ts index 845076002..0f66ee808 100644 --- a/test/contracts/core/tokens/setTokenFactory.spec.ts +++ b/test/contracts/core/tokens/setTokenFactory.spec.ts @@ -13,7 +13,6 @@ import { StandardTokenMockContract, SetTokenFactoryContract, SetTokenContract, - SignatureValidatorContract, TransferProxyContract, VaultContract, } from '@utils/contracts'; @@ -46,7 +45,6 @@ contract('SetTokenFactory', accounts => { let vault: VaultContract; let core: CoreContract; let setTokenFactory: SetTokenFactoryContract; - let signatureValidator: SignatureValidatorContract; const coreWrapper = new CoreWrapper(deployerAccount, deployerAccount); const erc20Wrapper = new ERC20Wrapper(deployerAccount); @@ -66,8 +64,7 @@ contract('SetTokenFactory', accounts => { vault = await coreWrapper.deployVaultAsync(); transferProxy = await coreWrapper.deployTransferProxyAsync(); - signatureValidator = await coreWrapper.deploySignatureValidatorAsync(); - core = await coreWrapper.deployCoreAsync(transferProxy, vault, signatureValidator); + core = await coreWrapper.deployCoreAsync(transferProxy, vault); setTokenFactory = await coreWrapper.deploySetTokenFactoryAsync(core.address); await coreWrapper.addFactoryAsync(core, setTokenFactory); diff --git a/test/contracts/scenario/issuance_orders/coreIssuanceOrderScenarios.spec.ts b/test/contracts/scenario/issuance_orders/coreIssuanceOrderScenarios.spec.ts index 81196bbda..c142fa0fc 100644 --- a/test/contracts/scenario/issuance_orders/coreIssuanceOrderScenarios.spec.ts +++ b/test/contracts/scenario/issuance_orders/coreIssuanceOrderScenarios.spec.ts @@ -81,8 +81,13 @@ contract('CoreIssuanceOrder::Scenarios', accounts => { vault = await coreWrapper.deployVaultAsync(); transferProxy = await coreWrapper.deployTransferProxyAsync(); signatureValidator = await coreWrapper.deploySignatureValidatorAsync(); - core = await coreWrapper.deployCoreAsync(transferProxy, vault, signatureValidator); - issuanceOrderModule = await coreWrapper.deployIssuanceOrderModuleAsync(core, transferProxy, vault); + core = await coreWrapper.deployCoreAsync(transferProxy, vault); + issuanceOrderModule = await coreWrapper.deployIssuanceOrderModuleAsync( + core, + transferProxy, + vault, + signatureValidator + ); await coreWrapper.addModuleAsync(core, issuanceOrderModule.address); setTokenFactory = await coreWrapper.deploySetTokenFactoryAsync(core.address); diff --git a/test/profile/issuanceOrder.spec.ts b/test/profile/issuanceOrder.spec.ts index 5ad067658..2b6705f17 100644 --- a/test/profile/issuanceOrder.spec.ts +++ b/test/profile/issuanceOrder.spec.ts @@ -108,8 +108,13 @@ contract('Issuance Orders', accounts => { const vault = await coreWrapper.deployVaultAsync(); transferProxy = await coreWrapper.deployTransferProxyAsync(); const signatureValidator = await coreWrapper.deploySignatureValidatorAsync(); - core = await coreWrapper.deployCoreAsync(transferProxy, vault, signatureValidator); - issuanceOrderModule = await coreWrapper.deployIssuanceOrderModuleAsync(core, transferProxy, vault); + core = await coreWrapper.deployCoreAsync(transferProxy, vault); + issuanceOrderModule = await coreWrapper.deployIssuanceOrderModuleAsync( + core, + transferProxy, + vault, + signatureValidator, + ); await coreWrapper.addModuleAsync(core, issuanceOrderModule.address); setTokenFactory = await coreWrapper.deploySetTokenFactoryAsync(core.address); diff --git a/test/profile/setIssuance.spec.ts b/test/profile/setIssuance.spec.ts index 745dd8251..67449de2c 100644 --- a/test/profile/setIssuance.spec.ts +++ b/test/profile/setIssuance.spec.ts @@ -10,7 +10,6 @@ import { BigNumberSetup } from '@utils/bigNumberSetup'; import { CoreContract, SetTokenFactoryContract, - SignatureValidatorContract, TransferProxyContract, VaultContract } from '@utils/contracts'; @@ -50,7 +49,6 @@ contract('Issuance', accounts => { let transferProxy: TransferProxyContract; let vault: VaultContract; let setTokenFactory: SetTokenFactoryContract; - let signatureValidator: SignatureValidatorContract; const subjectComponentsInSetToIssue: number[] = [1, 2, 3, 5, 10, 25, 50, 75]; @@ -64,8 +62,7 @@ contract('Issuance', accounts => { transferProxy = await coreWrapper.deployTransferProxyAsync(); vault = await coreWrapper.deployVaultAsync(); - signatureValidator = await coreWrapper.deploySignatureValidatorAsync(); - core = await coreWrapper.deployCoreAsync(transferProxy, vault, signatureValidator); + core = await coreWrapper.deployCoreAsync(transferProxy, vault); setTokenFactory = await coreWrapper.deploySetTokenFactoryAsync(core.address); await coreWrapper.setDefaultStateAndAuthorizationsAsync(core, vault, transferProxy, setTokenFactory); diff --git a/utils/contract_logs/core.ts b/utils/contract_logs/core.ts index 1e7e8da99..4c7f341fc 100644 --- a/utils/contract_logs/core.ts +++ b/utils/contract_logs/core.ts @@ -228,19 +228,6 @@ export function ProtocolFeeChanged( }; } -export function SignatureValidatorChanged( - _coreAddress: Address, - _signatureValidator: Address, -): Log { - return { - event: 'SignatureValidatorChanged', - address: _coreAddress, - args: { - _signatureValidator, - }, - }; -} - /********** Other Log Utilities **********/ export function extractNewSetTokenAddressFromLogs( diff --git a/utils/contract_logs/issuanceOrderModule.ts b/utils/contract_logs/issuanceOrderModule.ts index 84cb7c058..404add2a1 100644 --- a/utils/contract_logs/issuanceOrderModule.ts +++ b/utils/contract_logs/issuanceOrderModule.ts @@ -54,3 +54,16 @@ export function getExpectedCancelLog( }, }]; } + +export function SignatureValidatorChanged( + _coreAddress: Address, + _signatureValidator: Address, +): Log { + return { + event: 'SignatureValidatorChanged', + address: _coreAddress, + args: { + _signatureValidator, + }, + }; +} diff --git a/utils/wrappers/coreWrapper.ts b/utils/wrappers/coreWrapper.ts index 602b11996..0e8ea436d 100644 --- a/utils/wrappers/coreWrapper.ts +++ b/utils/wrappers/coreWrapper.ts @@ -237,12 +237,10 @@ export class CoreWrapper { ): Promise { const transferProxy = await this.deployTransferProxyAsync(); const vault = await this.deployVaultAsync(); - const signatureValidator = await this.deploySignatureValidatorAsync(); const truffleCore = await Core.new( transferProxy.address, vault.address, - signatureValidator.address, { from }, ); @@ -255,14 +253,12 @@ export class CoreWrapper { public async deployCoreAsync( transferProxy: TransferProxyContract, vault: VaultContract, - signatureValidator: SignatureValidatorContract, from: Address = this._tokenOwnerAddress ): Promise { const truffleCore = await Core.new( transferProxy.address, vault.address, - signatureValidator.address, { from }, ); @@ -275,14 +271,12 @@ export class CoreWrapper { public async deployCoreMockAsync( transferProxy: TransferProxyContract, vault: VaultContract, - signatureValidator: SignatureValidatorContract, from: Address = this._tokenOwnerAddress ): Promise { const truffleCore = await CoreMock.new( transferProxy.address, vault.address, - signatureValidator.address, { from }, ); @@ -373,6 +367,7 @@ export class CoreWrapper { core: CoreLikeContract, transferProxy: TransferProxyContract, vault: VaultContract, + signatureValidator: SignatureValidatorContract, from: Address = this._tokenOwnerAddress ): Promise { await this.linkIssuanceOrderLibrariesAsync(); @@ -381,6 +376,7 @@ export class CoreWrapper { core.address, transferProxy.address, vault.address, + signatureValidator.address, { from }, );