Skip to content

Commit fd8dabe

Browse files
committed
add proof record map for pdp
1 parent 2be272c commit fd8dabe

File tree

5 files changed

+106
-5
lines changed

5 files changed

+106
-5
lines changed

contracts/PDP.sol

Lines changed: 95 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,10 @@ import "./type.sol";
77
import "./interface.sol";
88

99
contract PDP is Initializable, IPDP, IFsEvent {
10+
11+
using IterableMapping for ProofsPool;
12+
ProofsPool proofsPool;
13+
1014
function initialize() public initializer {}
1115

1216
function GenChallenge(GenChallengeParams memory gParams)
@@ -114,7 +118,7 @@ contract PDP is Initializable, IPDP, IFsEvent {
114118
}
115119

116120
function VerifyProofWithMerklePathForFile(
117-
VerifyProofWithMerklePathForFileParams memory vParams
121+
ProofParams memory vParams
118122
) public view virtual override returns (bool) {
119123
// TODO
120124
console.log(vParams.Version);
@@ -133,3 +137,93 @@ contract PDP is Initializable, IPDP, IFsEvent {
133137
return true;
134138
}
135139
}
140+
141+
// map
142+
struct IndexValue {
143+
uint256 keyIndex;
144+
ProofsRecord value;
145+
}
146+
struct KeyFlag {
147+
bytes key;
148+
bool deleted;
149+
}
150+
struct ProofsPool {
151+
mapping(bytes => IndexValue) data;
152+
KeyFlag[] keys;
153+
uint256 size;
154+
}
155+
library IterableMapping {
156+
function insert(
157+
ProofsPool storage self,
158+
bytes memory key,
159+
ProofsRecord memory value
160+
) internal returns (bool replaced) {
161+
uint256 keyIndex = self.data[key].keyIndex;
162+
self.data[key].value = value;
163+
if (keyIndex > 0) return true;
164+
else {
165+
keyIndex = self.keys.length;
166+
self.keys.push();
167+
self.data[key].keyIndex = keyIndex + 1;
168+
self.keys[keyIndex].key = key;
169+
self.size++;
170+
return false;
171+
}
172+
}
173+
174+
function remove(ProofsPool storage self, bytes memory key)
175+
internal
176+
returns (bool success)
177+
{
178+
uint256 keyIndex = self.data[key].keyIndex;
179+
if (keyIndex == 0) return false;
180+
delete self.data[key];
181+
self.keys[keyIndex - 1].deleted = true;
182+
self.size--;
183+
}
184+
185+
function contains(ProofsPool storage self, bytes memory key)
186+
internal
187+
view
188+
returns (bool)
189+
{
190+
return self.data[key].keyIndex > 0;
191+
}
192+
193+
function iterate_start(ProofsPool storage self)
194+
internal
195+
view
196+
returns (uint256 keyIndex)
197+
{
198+
uint256 index = iterate_next(self, type(uint256).min);
199+
return index - 1;
200+
}
201+
202+
function iterate_valid(ProofsPool storage self, uint256 keyIndex)
203+
internal
204+
view
205+
returns (bool)
206+
{
207+
return keyIndex < self.keys.length;
208+
}
209+
210+
function iterate_next(ProofsPool storage self, uint256 keyIndex)
211+
internal
212+
view
213+
returns (uint256 r_keyIndex)
214+
{
215+
keyIndex++;
216+
while (keyIndex < self.keys.length && self.keys[keyIndex].deleted)
217+
keyIndex++;
218+
return keyIndex;
219+
}
220+
221+
function iterate_get(ProofsPool storage self, uint256 keyIndex)
222+
internal
223+
view
224+
returns (bytes memory key, ProofsRecord memory value)
225+
{
226+
key = self.keys[keyIndex].key;
227+
value = self.data[key].value;
228+
}
229+
}

contracts/Prove.sol

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -436,7 +436,7 @@ contract Prove is Initializable, IProve, IFsEvent {
436436
return false;
437437
}
438438
// verify
439-
VerifyProofWithMerklePathForFileParams memory vParams;
439+
ProofParams memory vParams;
440440
vParams.Version = 0;
441441
vParams.Proofs = sectorProveData.Proofs;
442442
vParams.FileIds = pReturns.FileIDs;

contracts/ProveExtra.sol

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -139,7 +139,7 @@ contract ProveExtra {
139139
gParams.ProveNum = fileInfo.ProveBlockNum;
140140
Challenge[] memory challenges = pdp.GenChallenge(gParams);
141141
// verify
142-
VerifyProofWithMerklePathForFileParams memory vParams;
142+
ProofParams memory vParams;
143143
vParams.Version = 0;
144144
vParams.Proofs = proveData.Proofs;
145145
vParams.FileIds = proveParam.FileID;

contracts/Type.sol

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -244,7 +244,8 @@ struct GenChallengeParams {
244244
uint64 ProveNum;
245245
}
246246

247-
struct VerifyProofWithMerklePathForFileParams {
247+
// VerifyProofWithMerklePathForFileParams
248+
struct ProofParams {
248249
uint64 Version;
249250
bytes Proofs;
250251
bytes[] FileIds;
@@ -254,6 +255,12 @@ struct VerifyProofWithMerklePathForFileParams {
254255
bytes RootHashes;
255256
}
256257

258+
struct ProofsRecord {
259+
ProofParams Proof;
260+
bool State;
261+
uint LastUpdateHeight;
262+
}
263+
257264
struct VerifyPlotDataParams {
258265
PlotInfo PlotInfo_;
259266
bytes PlotData;

contracts/interface.sol

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -276,7 +276,7 @@ interface IPDP {
276276
returns (Challenge[] memory);
277277

278278
function VerifyProofWithMerklePathForFile(
279-
VerifyProofWithMerklePathForFileParams memory vParams
279+
ProofParams memory vParams
280280
) external view returns (bool);
281281

282282
function PrepareForPdpVerification(

0 commit comments

Comments
 (0)