From 024939ab09c04a9a0c9066b41757122c958ce1b1 Mon Sep 17 00:00:00 2001 From: Mudit Gupta Date: Mon, 22 Oct 2018 19:45:04 +0530 Subject: [PATCH 1/3] Optimized verifyTransfer --- contracts/tokens/SecurityToken.sol | 11 ++++------- 1 file changed, 4 insertions(+), 7 deletions(-) diff --git a/contracts/tokens/SecurityToken.sol b/contracts/tokens/SecurityToken.sol index 1d2b165f5..6623db9ac 100644 --- a/contracts/tokens/SecurityToken.sol +++ b/contracts/tokens/SecurityToken.sol @@ -547,7 +547,6 @@ contract SecurityToken is StandardToken, DetailedERC20, ReentrancyGuard, Registr } bool isInvalid = false; bool isValid = false; - bool isForceValid = false; bool unarchived = false; address module; for (uint8 i = 0; i < modules[TRANSFER_KEY].length; i++) { @@ -557,17 +556,15 @@ contract SecurityToken is StandardToken, DetailedERC20, ReentrancyGuard, Registr ITransferManager.Result valid = ITransferManager(module).verifyTransfer(_from, _to, _value, _data, _isTransfer); if (valid == ITransferManager.Result.INVALID) { isInvalid = true; - } - if (valid == ITransferManager.Result.VALID) { + } else if (valid == ITransferManager.Result.VALID) { isValid = true; - } - if (valid == ITransferManager.Result.FORCE_VALID) { - isForceValid = true; + } 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 unarchived ? (isInvalid ? false : isValid) : true; } return false; } From 5631ae6cd7fc472174036156684eea70bb7c17a6 Mon Sep 17 00:00:00 2001 From: Mudit Gupta Date: Tue, 23 Oct 2018 09:50:38 +0530 Subject: [PATCH 2/3] minor optimization --- contracts/tokens/SecurityToken.sol | 7 ++----- 1 file changed, 2 insertions(+), 5 deletions(-) diff --git a/contracts/tokens/SecurityToken.sol b/contracts/tokens/SecurityToken.sol index 6623db9ac..6c348e71b 100644 --- a/contracts/tokens/SecurityToken.sol +++ b/contracts/tokens/SecurityToken.sol @@ -540,16 +540,13 @@ contract SecurityToken is StandardToken, DetailedERC20, ReentrancyGuard, Registr uint256 _value, bytes _data, bool _isTransfer - ) internal checkGranularity(_value) returns (bool) { + ) internal checkGranularity(_value) returns (bool) { if (!transfersFrozen) { - if (modules[TRANSFER_KEY].length == 0) { - return true; - } bool isInvalid = false; bool isValid = false; bool unarchived = false; address module; - for (uint8 i = 0; i < modules[TRANSFER_KEY].length; i++) { + for (uint256 i = 0; i < modules[TRANSFER_KEY].length; i++) { module = modules[TRANSFER_KEY][i]; if (!modulesToData[module].isArchived) { unarchived = true; From 6199a260a37e2fb71018d5c980b743b385ffc0b9 Mon Sep 17 00:00:00 2001 From: Mudit Gupta Date: Thu, 25 Oct 2018 13:08:53 +0530 Subject: [PATCH 3/3] Force valid fixed --- contracts/tokens/SecurityToken.sol | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/contracts/tokens/SecurityToken.sol b/contracts/tokens/SecurityToken.sol index 1ca137994..ebd4af297 100644 --- a/contracts/tokens/SecurityToken.sol +++ b/contracts/tokens/SecurityToken.sol @@ -544,6 +544,7 @@ contract SecurityToken is StandardToken, DetailedERC20, ReentrancyGuard, Registr if (!transfersFrozen) { bool isInvalid = false; bool isValid = false; + bool isForceValid = false; bool unarchived = false; address module; for (uint256 i = 0; i < modules[TRANSFER_KEY].length; i++) { @@ -556,12 +557,12 @@ contract SecurityToken is StandardToken, DetailedERC20, ReentrancyGuard, Registr } else if (valid == ITransferManager.Result.VALID) { isValid = true; } else if (valid == ITransferManager.Result.FORCE_VALID) { - return true; + isForceValid = true; } } } // If no unarchived modules, return true by default - return unarchived ? (isInvalid ? false : isValid) : true; + return unarchived ? (isForceValid ? true : (isInvalid ? false : isValid)) : true; } return false; }