Skip to content

Commit 770b584

Browse files
committed
Add getAllowedTraders method and make tradersHistory contain unique elements
1 parent d1ebe6e commit 770b584

File tree

2 files changed

+73
-3
lines changed

2 files changed

+73
-3
lines changed

contracts/protocol/modules/GeneralIndexModule.sol

Lines changed: 18 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -572,6 +572,22 @@ contract GeneralIndexModule is ModuleBase, ReentrancyGuard {
572572
return _isAllowedTrader(_setToken, _trader);
573573
}
574574

575+
/**
576+
* Get the list of traders who are allowed to call trade(), tradeRemainingWeth(), and raiseAssetTarget()
577+
*
578+
* @param _setToken Address of the SetToken
579+
*
580+
* @return address[]
581+
*/
582+
function getAllowedTraders(ISetToken _setToken)
583+
external
584+
view
585+
onlyValidAndInitializedSet(_setToken)
586+
returns (address[] memory)
587+
{
588+
return permissionInfo[_setToken].tradersHistory;
589+
}
590+
575591
/* ============ Internal Functions ============ */
576592

577593
/**
@@ -1050,9 +1066,9 @@ contract GeneralIndexModule is ModuleBase, ReentrancyGuard {
10501066
10511067
*/
10521068
function _updateTradersHistory(ISetToken _setToken, address _trader, bool _status) internal {
1053-
if (_status) {
1069+
if (_status && !permissionInfo[_setToken].tradersHistory.contains(_trader)) {
10541070
permissionInfo[_setToken].tradersHistory.push(_trader);
1055-
} else if(permissionInfo[_setToken].tradersHistory.contains(_trader)) {
1071+
} else if(!_status && permissionInfo[_setToken].tradersHistory.contains(_trader)) {
10561072
permissionInfo[_setToken].tradersHistory.removeStorage(_trader);
10571073
}
10581074
}

test/protocol/modules/generalIndexModule.spec.ts

Lines changed: 55 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1906,6 +1906,45 @@ describe("GeneralIndexModule", () => {
19061906
});
19071907
});
19081908

1909+
describe("#getAllowedTraders", async () => {
1910+
let subjectTraders: Address[];
1911+
let subjectStatuses: boolean[];
1912+
1913+
beforeEach(async () => {
1914+
subjectCaller = owner;
1915+
subjectSetToken = index;
1916+
subjectTraders = [trader.address];
1917+
subjectStatuses = [true];
1918+
1919+
return await indexModule.connect(subjectCaller.wallet).setTraderStatus(
1920+
subjectSetToken.address,
1921+
subjectTraders,
1922+
subjectStatuses
1923+
);
1924+
});
1925+
1926+
async function subject(): Promise<Boolean> {
1927+
return await indexModule.connect(subjectCaller.wallet).getAllowedTraders(subjectSetToken.address);
1928+
}
1929+
1930+
it("returns trader status", async () => {
1931+
await subject();
1932+
1933+
const expectedTraders = await subject();
1934+
expect(expectedTraders).to.deep.equal(subjectTraders);
1935+
});
1936+
1937+
describe("when the setToken is not valid", async () => {
1938+
beforeEach(() => {
1939+
subjectSetToken = { address: ADDRESS_ZERO } as SetToken;
1940+
});
1941+
1942+
it("should revert", async () => {
1943+
expect(subject()).to.be.revertedWith("Must be a valid and initialized SetToken");
1944+
});
1945+
});
1946+
});
1947+
19091948
describe("#setRaiseTargetPercentage", async () => {
19101949
let subjectRaiseTargetPercentage: BigNumber;
19111950

@@ -2197,12 +2236,27 @@ describe("GeneralIndexModule", () => {
21972236
const preConditionTrader = await indexModule.getIsAllowedTrader(subjectSetToken.address, subjectTraders[0]);
21982237
expect(preConditionTrader).to.be.true;
21992238

2200-
22012239
await subject();
22022240

22032241
const postConditionTrader = await indexModule.getIsAllowedTrader(subjectSetToken.address, subjectTraders[0]);
22042242
expect(postConditionTrader).to.be.false;
22052243
});
2244+
2245+
it("the tradersHistory should be updated correctly", async() => {
2246+
const preConditionTraders = await indexModule.getAllowedTraders(subjectSetToken.address);
2247+
expect(preConditionTraders).to.deep.equal(subjectTraders);
2248+
2249+
await subject();
2250+
2251+
const postConditionTraders = await indexModule.getAllowedTraders(subjectSetToken.address);
2252+
const expectedTraders = subjectTraders.slice(1);
2253+
2254+
expect(expectedTraders[0]).to.not.equal(expectedTraders[1]);
2255+
expect(postConditionTraders[0]).to.not.equal(postConditionTraders[1]);
2256+
2257+
expect(postConditionTraders.includes(expectedTraders[0])).to.be.true;
2258+
expect(postConditionTraders.includes(expectedTraders[1])).to.be.true;
2259+
});
22062260
});
22072261

22082262
describe("when array lengths don't match", async () => {

0 commit comments

Comments
 (0)