ethstorage-sdk
Version:
eip-4844 blobs upload sdk
41 lines (36 loc) • 1.58 kB
text/typescript
import { retry, stringToHex } from "./util";
import { Contract } from "ethers";
import { UploadDetails, ChunkCountResult, FileBatch, ChunkHashResult } from "../param";
export async function getUploadInfo(contract: Contract, hexName: string, retries: number): Promise<UploadDetails> {
const result = await retry(() => contract["getUploadInfo"](hexName), retries);
return {
fileMode: Number(result[0]),
oldChunkCount: Number(result[1]),
cost: result[2] as bigint
};
}
export async function getChunkCounts(contract: Contract, batch: string[], retries: number): Promise<ChunkCountResult[]> {
const names = batch.map(key => stringToHex(key));
const counts = await retry(() => contract["getChunkCountsBatch"](names), retries);
const results: ChunkCountResult[] = [];
let index = 0;
for (const key of batch) {
results.push({ key, chunkCount: Number(counts[index++]) });
}
return results;
}
export async function getChunkHashes(contract: Contract, batch: FileBatch[], retries: number): Promise<ChunkHashResult[]> {
const fileChunks = batch.map(file => [
stringToHex(file.name),
file.chunkIds
]);
const hashes = await retry(() => contract["getChunkHashesBatch"](fileChunks), retries);
const results: ChunkHashResult[] = [];
let index = 0;
for (const file of batch) {
for (let j = 0; j < file.chunkIds.length; j++) {
results.push(<ChunkHashResult>{ name: file.name, chunkId: file.chunkIds[j], hash: hashes[index++] });
}
}
return results;
}