Skip to content

Commit

Permalink
Fix verifiable manifest initialization (#839)
Browse files Browse the repository at this point in the history
* fix verifiable manifest initialization

* fix linearstrategy, use verifiableStrategy to select blocks for slots

* check for both strategies in attribute inheritance test
  • Loading branch information
gmega authored Jun 21, 2024
1 parent 4619260 commit 8138ef5
Show file tree
Hide file tree
Showing 6 changed files with 54 additions and 10 deletions.
6 changes: 3 additions & 3 deletions codex/indexingstrategy.nim
Original file line number Diff line number Diff line change
Expand Up @@ -49,8 +49,8 @@ func getLinearIndicies(
self.checkIteration(iteration)

let
first = self.firstIndex + iteration * (self.step + 1)
last = min(first + self.step, self.lastIndex)
first = self.firstIndex + iteration * self.step
last = min(first + self.step - 1, self.lastIndex)

getIter(first, last, 1)

Expand Down Expand Up @@ -94,4 +94,4 @@ func init*(
firstIndex: firstIndex,
lastIndex: lastIndex,
iterations: iterations,
step: divUp((lastIndex - firstIndex), iterations))
step: divUp((lastIndex - firstIndex + 1), iterations))
7 changes: 4 additions & 3 deletions codex/manifest/manifest.nim
Original file line number Diff line number Diff line change
Expand Up @@ -231,7 +231,7 @@ func new*(
treeCid: Cid,
datasetSize: NBytes,
ecK, ecM: int,
strategy: StrategyType): Manifest =
strategy = SteppedStrategy): Manifest =
## Create an erasure protected dataset from an
## unprotected one
##
Expand Down Expand Up @@ -277,7 +277,7 @@ func new*(
ecM: int,
originalTreeCid: Cid,
originalDatasetSize: NBytes,
strategy: StrategyType): Manifest =
strategy = SteppedStrategy): Manifest =

Manifest(
treeCid: treeCid,
Expand All @@ -299,7 +299,7 @@ func new*(
verifyRoot: Cid,
slotRoots: openArray[Cid],
cellSize = DefaultCellSize,
strategy = SteppedStrategy): ?!Manifest =
strategy = LinearStrategy): ?!Manifest =
## Create a verifiable dataset from an
## protected one
##
Expand All @@ -324,6 +324,7 @@ func new*(
ecM: manifest.ecM,
originalTreeCid: manifest.treeCid,
originalDatasetSize: manifest.originalDatasetSize,
protectedStrategy: manifest.protectedStrategy,
verifiable: true,
verifyRoot: verifyRoot,
slotRoots: @slotRoots,
Expand Down
8 changes: 5 additions & 3 deletions codex/node.nim
Original file line number Diff line number Diff line change
Expand Up @@ -534,7 +534,9 @@ proc onStore(
trace "Unable to fetch manifest for cid", cid, err = err.msg
return failure(err)

without builder =? Poseidon2Builder.new(self.networkStore, manifest), err:
without builder =? Poseidon2Builder.new(
self.networkStore, manifest, manifest.verifiableStrategy
), err:
trace "Unable to create slots builder", err = err.msg
return failure(err)

Expand All @@ -559,8 +561,8 @@ proc onStore(

return success()

without indexer =? manifest.protectedStrategy.init(
0, manifest.numSlotBlocks() - 1, manifest.numSlots).catch, err:
without indexer =? manifest.verifiableStrategy.init(
0, manifest.blocksCount - 1, manifest.numSlots).catch, err:
trace "Unable to create indexing strategy from protected manifest", err = err.msg
return failure(err)

Expand Down
2 changes: 1 addition & 1 deletion tests/codex/node/testcontracts.nim
Original file line number Diff line number Diff line change
Expand Up @@ -134,7 +134,7 @@ asyncchecksuite "Test Node - Host contracts":
return success()

(await onStore(request, 1.u256, onBlocks)).tryGet()
check fetchedBytes == 262144
check fetchedBytes == 12 * DefaultBlockSize.uint

let indexer = verifiable.protectedStrategy.init(
0, verifiable.numSlotBlocks() - 1, verifiable.numSlots)
Expand Down
8 changes: 8 additions & 0 deletions tests/codex/testindexingstrategy.nim
Original file line number Diff line number Diff line change
Expand Up @@ -58,6 +58,14 @@ suite "Indexing strategies":
expect IndexingWrongIterationsError:
discard LinearStrategy.init(0, 10, 0)

test "should split elements evenly when possible":
let
l = LinearStrategy.init(0, 11, 3)
check:
toSeq(l.getIndicies(0)) == @[0, 1, 2, 3].mapIt(it)
toSeq(l.getIndicies(1)) == @[4, 5, 6, 7].mapIt(it)
toSeq(l.getIndicies(2)) == @[8, 9, 10, 11].mapIt(it)

test "linear - oob":
expect IndexingError:
discard linear.getIndicies(3)
Expand Down
33 changes: 33 additions & 0 deletions tests/codex/testmanifest.nim
Original file line number Diff line number Diff line change
Expand Up @@ -74,3 +74,36 @@ checksuite "Manifest":
test "Should encode/decode to/from verifiable manifest":
check:
encodeDecode(verifiableManifest) == verifiableManifest


suite "Manifest - Attribute Inheritance":
proc makeProtectedManifest(strategy: StrategyType): Manifest =
Manifest.new(
manifest = Manifest.new(
treeCid = Cid.example,
blockSize = 1.MiBs,
datasetSize = 100.MiBs,
),
treeCid = Cid.example,
datasetSize = 200.MiBs,
ecK = 1,
ecM = 1,
strategy = strategy
)

test "Should preserve interleaving strategy for protected manifest in verifiable manifest":
var verifiable = Manifest.new(
manifest = makeProtectedManifest(SteppedStrategy),
verifyRoot = Cid.example,
slotRoots = @[Cid.example, Cid.example]
).tryGet()

check verifiable.protectedStrategy == SteppedStrategy

verifiable = Manifest.new(
manifest = makeProtectedManifest(LinearStrategy),
verifyRoot = Cid.example,
slotRoots = @[Cid.example, Cid.example]
).tryGet()

check verifiable.protectedStrategy == LinearStrategy

0 comments on commit 8138ef5

Please sign in to comment.