Skip to content

Commit aa985b1

Browse files
committed
final test suite
1 parent c020217 commit aa985b1

2 files changed

Lines changed: 328 additions & 6 deletions

File tree

contracts/ERC1410/ERC1410Standard.sol

Lines changed: 14 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -60,12 +60,25 @@ contract ERC1410Standard is IERC1410, ERC1410Operator, Ownable {
6060
require(_validPartition(_partition, _from), "Invalid partition");
6161
uint256 index = partitionToIndex[_from][_partition] - 1;
6262
require(partitions[_from][index].amount >= _value, "Insufficient value");
63-
partitions[_from][index].amount = partitions[_from][index].amount.sub(_value);
63+
if (partitions[_from][index].amount == _value) {
64+
_deletePartitionForHolder(_from, _partition, index);
65+
} else {
66+
partitions[_from][index].amount = partitions[_from][index].amount.sub(_value);
67+
}
6468
balances[_from] = balances[_from].sub(_value);
6569
_totalSupply = _totalSupply.sub(_value);
6670
emit RedeemedByPartition(_partition, _operator, _from, _value, _data, _operatorData);
6771
}
6872

73+
function _deletePartitionForHolder(address _holder, bytes32 _partition, uint256 index) internal {
74+
if (index != partitions[_holder].length -1) {
75+
partitions[_holder][index] = partitions[_holder][partitions[_holder].length -1];
76+
partitionToIndex[_holder][partitions[_holder][index].partition] = index + 1;
77+
}
78+
delete partitionToIndex[_holder][_partition];
79+
partitions[_holder].length--;
80+
}
81+
6982
function _validateParams(bytes32 _partition, uint256 _value) internal pure {
7083
require(_value != uint256(0), "Zero value not allowed");
7184
require(_partition != bytes32(0), "Invalid partition");

0 commit comments

Comments
 (0)