From bab3d2a7d698326ba25107d6c36ca87337ae2373 Mon Sep 17 00:00:00 2001 From: Mudit Gupta Date: Mon, 22 Oct 2018 18:44:11 +0530 Subject: [PATCH 1/3] Fixed verify transfer --- contracts/tokens/SecurityToken.sol | 49 ++++++++++++++---------------- 1 file changed, 22 insertions(+), 27 deletions(-) diff --git a/contracts/tokens/SecurityToken.sol b/contracts/tokens/SecurityToken.sol index 1d2b165f5..07bb892ee 100644 --- a/contracts/tokens/SecurityToken.sol +++ b/contracts/tokens/SecurityToken.sol @@ -540,36 +540,31 @@ contract SecurityToken is StandardToken, DetailedERC20, ReentrancyGuard, Registr uint256 _value, bytes _data, bool _isTransfer - ) internal checkGranularity(_value) returns (bool) { - if (!transfersFrozen) { - if (modules[TRANSFER_KEY].length == 0) { - return true; - } - bool isInvalid = false; - bool isValid = false; - bool isForceValid = false; - bool unarchived = false; - address module; - for (uint8 i = 0; i < modules[TRANSFER_KEY].length; i++) { - module = modules[TRANSFER_KEY][i]; - if (!modulesToData[module].isArchived) { - unarchived = true; - ITransferManager.Result valid = ITransferManager(module).verifyTransfer(_from, _to, _value, _data, _isTransfer); - if (valid == ITransferManager.Result.INVALID) { - isInvalid = true; - } - if (valid == ITransferManager.Result.VALID) { - isValid = true; - } - if (valid == ITransferManager.Result.FORCE_VALID) { - isForceValid = true; - } + ) + internal + checkGranularity(_value) + returns (bool validTransfer) + { + if (transfersFrozen) + return false; + + if (modules[TRANSFER_KEY].length == 0) + return true; + + validTransfer = true; + address module; + + for (uint256 i = 0; i < modules[TRANSFER_KEY].length; i++) { + module = modules[TRANSFER_KEY][i]; + if (!modulesToData[module].isArchived) { + ITransferManager.Result valid = ITransferManager(module).verifyTransfer(_from, _to, _value, _data, _isTransfer); + if (valid == ITransferManager.Result.INVALID) { + validTransfer = false; + } else if (valid == ITransferManager.Result.FORCE_VALID) { + return true; } } - // If no unarchived modules, return true by default - return unarchived ? (isForceValid ? true : (isInvalid ? false : isValid)) : true; } - return false; } /** From fd7a2a5c722d09be57663034ea2c111f9cdeaa9b Mon Sep 17 00:00:00 2001 From: Mudit Gupta Date: Mon, 22 Oct 2018 18:48:37 +0530 Subject: [PATCH 2/3] Simplified verify transfer --- contracts/tokens/SecurityToken.sol | 3 --- 1 file changed, 3 deletions(-) diff --git a/contracts/tokens/SecurityToken.sol b/contracts/tokens/SecurityToken.sol index 07bb892ee..806c5e870 100644 --- a/contracts/tokens/SecurityToken.sol +++ b/contracts/tokens/SecurityToken.sol @@ -548,9 +548,6 @@ contract SecurityToken is StandardToken, DetailedERC20, ReentrancyGuard, Registr if (transfersFrozen) return false; - if (modules[TRANSFER_KEY].length == 0) - return true; - validTransfer = true; address module; From 52a7ca42d09f4df22a88fcb96c201cd105a3e124 Mon Sep 17 00:00:00 2001 From: Mudit Gupta Date: Mon, 22 Oct 2018 19:23:13 +0530 Subject: [PATCH 3/3] Fixed verifyTransfer --- contracts/tokens/SecurityToken.sol | 38 ++++++++++++++++++------------ 1 file changed, 23 insertions(+), 15 deletions(-) diff --git a/contracts/tokens/SecurityToken.sol b/contracts/tokens/SecurityToken.sol index 806c5e870..d7f0ab80e 100644 --- a/contracts/tokens/SecurityToken.sol +++ b/contracts/tokens/SecurityToken.sol @@ -543,25 +543,33 @@ contract SecurityToken is StandardToken, DetailedERC20, ReentrancyGuard, Registr ) internal checkGranularity(_value) - returns (bool validTransfer) + returns (bool) { - if (transfersFrozen) - return false; - - validTransfer = true; - address module; - - for (uint256 i = 0; i < modules[TRANSFER_KEY].length; i++) { - module = modules[TRANSFER_KEY][i]; - if (!modulesToData[module].isArchived) { - ITransferManager.Result valid = ITransferManager(module).verifyTransfer(_from, _to, _value, _data, _isTransfer); - if (valid == ITransferManager.Result.INVALID) { - validTransfer = false; - } else if (valid == ITransferManager.Result.FORCE_VALID) { - return true; + if (!transfersFrozen) { + if (modules[TRANSFER_KEY].length == 0) + return true; + + bool isValid; + bool isInvalid; + address module; + + for (uint256 i = 0; i < modules[TRANSFER_KEY].length; i++) { + module = modules[TRANSFER_KEY][i]; + if (!modulesToData[module].isArchived) { + ITransferManager.Result valid = ITransferManager(module).verifyTransfer(_from, _to, _value, _data, _isTransfer); + if (valid == ITransferManager.Result.INVALID) { + isInvalid = true; + } else if (valid == ITransferManager.Result.VALID) { + isValid = true; + } else if (valid == ITransferManager.Result.FORCE_VALID) { + return true; + } } } + if (isValid && !isInvalid) + return true; } + return false; } /**