Skip to content

Commit b4ac78b

Browse files
authored
feat: start data set IDs at 1 (#196)
Avoid problems with default value matching. Matches how we deal with rail IDs and service provider IDs. Closes: FilOzone/filecoin-services#216
1 parent 4214bd2 commit b4ac78b

File tree

2 files changed

+31
-12
lines changed

2 files changed

+31
-12
lines changed

src/PDPVerifier.sol

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -153,6 +153,7 @@ contract PDPVerifier is Initializable, UUPSUpgradeable, OwnableUpgradeable {
153153
__Ownable_init(msg.sender);
154154
__UUPSUpgradeable_init();
155155
challengeFinality = _challengeFinality;
156+
nextDataSetId = 1; // Data sets start at 1
156157
}
157158

158159
string public constant VERSION = "2.0.0";

test/PDPVerifier.t.sol

Lines changed: 30 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -33,10 +33,10 @@ contract PDPVerifierDataSetCreateDeleteTest is Test {
3333
Cids.Cid memory zeroPiece;
3434

3535
vm.expectEmit(true, true, false, false);
36-
emit IPDPEvents.DataSetCreated(0, address(this));
36+
emit IPDPEvents.DataSetCreated(1, address(this));
3737

3838
uint256 setId = pdpVerifier.createDataSet{value: PDPFees.sybilFee()}(address(listener), empty);
39-
assertEq(setId, 0, "First data set ID should be 0");
39+
assertEq(setId, 1, "First data set ID should be 1");
4040
assertEq(pdpVerifier.getDataSetLeafCount(setId), 0, "Data set leaf count should be 0");
4141

4242
(address currentStorageProvider, address proposedStorageProvider) = pdpVerifier.getDataSetStorageProvider(setId);
@@ -61,7 +61,7 @@ contract PDPVerifierDataSetCreateDeleteTest is Test {
6161

6262
function testDeleteDataSet() public {
6363
vm.expectEmit(true, true, false, false);
64-
emit IPDPEvents.DataSetCreated(0, address(this));
64+
emit IPDPEvents.DataSetCreated(1, address(this));
6565
uint256 setId = pdpVerifier.createDataSet{value: PDPFees.sybilFee()}(address(listener), empty);
6666
vm.expectEmit(true, true, false, false);
6767
emit IPDPEvents.DataSetDeleted(setId, 0);
@@ -72,7 +72,7 @@ contract PDPVerifierDataSetCreateDeleteTest is Test {
7272

7373
function testOnlyStorageProviderCanDeleteDataSet() public {
7474
vm.expectEmit(true, true, false, false);
75-
emit IPDPEvents.DataSetCreated(0, address(this));
75+
emit IPDPEvents.DataSetCreated(1, address(this));
7676
uint256 setId = pdpVerifier.createDataSet{value: PDPFees.sybilFee()}(address(listener), empty);
7777
// Create a new address to act as a non-storage-provider
7878
address nonStorageProvider = address(0x1234);
@@ -91,13 +91,18 @@ contract PDPVerifierDataSetCreateDeleteTest is Test {
9191

9292
// TODO: once we have addPieces we should test deletion of a non empty data set
9393
function testCannotDeleteNonExistentDataSet() public {
94-
vm.expectRevert("data set id out of bounds");
94+
// Test with data set ID 0 (which is never valid since IDs start from 1)
95+
vm.expectRevert("Only the storage provider can delete data sets");
9596
pdpVerifier.deleteDataSet(0, empty);
97+
98+
// Test with a data set ID that hasn't been created yet
99+
vm.expectRevert("data set id out of bounds");
100+
pdpVerifier.deleteDataSet(999, empty);
96101
}
97102

98103
function testMethodsOnDeletedDataSetFails() public {
99104
vm.expectEmit(true, true, false, false);
100-
emit IPDPEvents.DataSetCreated(0, address(this));
105+
emit IPDPEvents.DataSetCreated(1, address(this));
101106
uint256 setId = pdpVerifier.createDataSet{value: PDPFees.sybilFee()}(address(listener), empty);
102107

103108
vm.expectEmit(true, true, false, false);
@@ -123,17 +128,30 @@ contract PDPVerifierDataSetCreateDeleteTest is Test {
123128

124129
function testGetDataSetID() public {
125130
vm.expectEmit(true, true, false, false);
126-
emit IPDPEvents.DataSetCreated(0, address(this));
131+
emit IPDPEvents.DataSetCreated(1, address(this));
127132
pdpVerifier.createDataSet{value: PDPFees.sybilFee()}(address(listener), empty);
128133
vm.expectEmit(true, true, false, false);
129-
emit IPDPEvents.DataSetCreated(1, address(this));
134+
emit IPDPEvents.DataSetCreated(2, address(this));
130135
pdpVerifier.createDataSet{value: PDPFees.sybilFee()}(address(listener), empty);
131-
assertEq(2, pdpVerifier.getNextDataSetId(), "Next data set ID should be 2");
132-
assertEq(2, pdpVerifier.getNextDataSetId(), "Next data set ID should be 2");
136+
assertEq(3, pdpVerifier.getNextDataSetId(), "Next data set ID should be 3");
137+
assertEq(3, pdpVerifier.getNextDataSetId(), "Next data set ID should be 3");
133138
}
134139

135140
receive() external payable {}
136141

142+
function testDataSetIdsStartFromOne() public {
143+
// Test that data set IDs start from 1, not 0
144+
assertEq(pdpVerifier.getNextDataSetId(), 1, "Next data set ID should start at 1");
145+
146+
uint256 firstSetId = pdpVerifier.createDataSet{value: PDPFees.sybilFee()}(address(listener), empty);
147+
assertEq(firstSetId, 1, "First data set ID should be 1, not 0");
148+
149+
uint256 secondSetId = pdpVerifier.createDataSet{value: PDPFees.sybilFee()}(address(listener), empty);
150+
assertEq(secondSetId, 2, "Second data set ID should be 2");
151+
152+
assertEq(pdpVerifier.getNextDataSetId(), 3, "Next data set ID should be 3 after creating two data sets");
153+
}
154+
137155
function testCreateDataSetFeeHandling() public {
138156
uint256 sybilFee = PDPFees.sybilFee();
139157

@@ -271,7 +289,7 @@ contract PDPVerifierDataSetMutateTest is Test, PieceHelper {
271289

272290
function testAddPiece() public {
273291
vm.expectEmit(true, true, false, false);
274-
emit IPDPEvents.DataSetCreated(0, address(this));
292+
emit IPDPEvents.DataSetCreated(1, address(this));
275293
uint256 setId = pdpVerifier.createDataSet{value: PDPFees.sybilFee()}(address(listener), empty);
276294

277295
Cids.Cid[] memory pieces = new Cids.Cid[](1);
@@ -301,7 +319,7 @@ contract PDPVerifierDataSetMutateTest is Test, PieceHelper {
301319

302320
function testAddMultiplePieces() public {
303321
vm.expectEmit(true, true, false, false);
304-
emit IPDPEvents.DataSetCreated(0, address(this));
322+
emit IPDPEvents.DataSetCreated(1, address(this));
305323
uint256 setId = pdpVerifier.createDataSet{value: PDPFees.sybilFee()}(address(listener), empty);
306324
Cids.Cid[] memory pieces = new Cids.Cid[](2);
307325
pieces[0] = makeSamplePiece(64);

0 commit comments

Comments
 (0)