Getting cids in slot

This commit is contained in:
benbierens 2023-11-30 10:21:04 +01:00 committed by Dmitriy Ryajov
parent e7996bf058
commit 8d17fb40b4
No known key found for this signature in database
GPG Key ID: DA8C680CE7C657A4
2 changed files with 83 additions and 8 deletions

View File

@ -1,6 +1,22 @@
import pkg/libp2p
import ../blocktype
import ../stores
import ../manifest
type
SlotBuilder* = object of RootObj
blockStore: BlockStore
manifest: Manifest
proc aaa*(self: SlotBuilder): void =
echo "aaa"
proc new*(
T: type SlotBuilder,
blockStore: BlockStore,
manifest: Manifest
): SlotBuilder =
SlotBuilder(
blockStore: blockStore,
manifest: manifest
)
proc getSlotBlockCids*(self: SlotBuilder, datasetSlotIndex: uint64): seq[Cid] =
raiseAssert("a")

View File

@ -1,17 +1,76 @@
import std/sequtils
import pkg/chronos
import pkg/asynctest
import pkg/questionable/results
import pkg/codex/blocktype as bt
import pkg/codex/stores/cachestore
import pkg/codex/rng
import pkg/codex/stores
import pkg/codex/chunker
import pkg/codex/merkletree
import ../helpers
import codex/slotbuilder/slotbuilder
asyncchecksuite "Slot builder":
test "a":
let builder = SlotBuilder()
builder.aaa()
let
blockSize = 64 * 1024
numberOfSlotBlocks = 6
numberOfSlots = 5
datasetSize = numberOfSlotBlocks * numberOfSlots * blockSize
chunker = RandomChunker.new(Rng.instance(), size = datasetSize, chunkSize = blockSize)
check:
1 == 1
var
datasetBlocks: seq[bt.Block]
localStore = CacheStore.new()
protectedManifest: Manifest
slotBuilder: SlotBuilder
proc createBlocks(): Future[void] {.async.} =
while true:
let chunk = await chunker.getBytes()
if chunk.len <= 0:
break
let blk = bt.Block.new(chunk).tryGet()
datasetBlocks.add(blk)
discard await localStore.putBlock(blk)
proc createProtectedManifest(): Future[void] {.async.} =
let
cids = datasetBlocks.mapIt(it.cid)
tree = MerkleTree.init(cids).tryGet()
treeCid = tree.rootCid().tryGet()
for index, cid in cids:
let proof = tree.getProof(index).tryget()
discard await localStore.putBlockCidAndProof(treeCid, index, cid, proof)
protectedManifest = Manifest.new(
manifest = Manifest.new(
treeCid = treeCid,
blockSize = blockSize.NBytes,
datasetSize = datasetSize.NBytes),
treeCid = treeCid,
datasetSize = datasetSize.NBytes,
ecK = numberOfSlots,
ecM = 0
)
let manifestBlock = bt.Block.new(protectedManifest.encode().tryGet(), codec = DagPBCodec).tryGet()
discard await localStore.putBlock(manifestBlock)
setup:
await createBlocks()
await createProtectedManifest()
slotBuilder = SlotBuilder.new(localStore, protectedManifest)
for i in 0 ..< numberOfSlots:
test "Can get the protected slot blocks given a slot index (" & $i & ")":
let
selectStart = i * numberOfSlotBlocks
selectEnd = selectStart + numberOfSlotBlocks
expectedCids = datasetBlocks.mapIt(it.cid)[selectStart ..< selectEnd]
cids = slotBuilder.getSlotBlockCids(i.uint64)
check:
cids == expectedCids