Skip to content

Commit 70bf140

Browse files
authored
Merge pull request #3 from filecoin-project/feat/add-padding-helper
add a padding helper function
2 parents 9c0f3e0 + 4606b1a commit 70bf140

File tree

2 files changed

+77
-0
lines changed

2 files changed

+77
-0
lines changed

ffiwrapper/ffiwrapper.go

Lines changed: 28 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@ import (
66
"sync"
77

88
ffi "github.com/filecoin-project/filecoin-ffi"
9+
"github.com/filecoin-project/go-commp-utils/zerocomm"
910
"github.com/filecoin-project/go-state-types/abi"
1011
"github.com/ipfs/go-cid"
1112
logging "github.com/ipfs/go-log/v2"
@@ -73,3 +74,30 @@ func GeneratePieceCIDFromFile(proofType abi.RegisteredSealProof, piece io.Reader
7374

7475
return pieceCID, werr()
7576
}
77+
78+
func ZeroPadPieceCommitment(c cid.Cid, curSize abi.UnpaddedPieceSize, toSize abi.UnpaddedPieceSize) (cid.Cid, error) {
79+
cur := c
80+
for curSize < toSize {
81+
82+
zc := zerocomm.ZeroPieceCommitment(curSize)
83+
84+
p, err := ffi.GenerateUnsealedCID(abi.RegisteredSealProof_StackedDrg32GiBV1, []abi.PieceInfo{
85+
abi.PieceInfo{
86+
Size: curSize.Padded(),
87+
PieceCID: cur,
88+
},
89+
abi.PieceInfo{
90+
Size: curSize.Padded(),
91+
PieceCID: zc,
92+
},
93+
})
94+
if err != nil {
95+
return cid.Undef, err
96+
}
97+
98+
cur = p
99+
curSize = curSize * 2
100+
}
101+
102+
return cur, nil
103+
}

ffiwrapper/ffiwrapper_test.go

Lines changed: 49 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,49 @@
1+
package ffiwrapper
2+
3+
import (
4+
"bytes"
5+
"testing"
6+
7+
"github.com/filecoin-project/go-state-types/abi"
8+
"github.com/ipfs/go-cid"
9+
)
10+
11+
func TestZeroPadding(t *testing.T) {
12+
psize := abi.PaddedPieceSize(128).Unpadded()
13+
data := make([]byte, psize)
14+
15+
content := []byte("i am the biggest cat, what do you think about that")
16+
copy(data, content)
17+
18+
pcid, err := GeneratePieceCIDFromFile(abi.RegisteredSealProof_StackedDrg32GiBV1_1, bytes.NewReader(data), psize)
19+
if err != nil {
20+
t.Fatal(err)
21+
}
22+
23+
// value calculated using separate tooling
24+
expCid, err := cid.Decode("baga6ea4seaqozp3abki6vgdf7ztbipcycmxfyt2o64cpuyvdkczsjxsg7bqmioi")
25+
if err != nil {
26+
t.Fatal(err)
27+
}
28+
29+
if pcid != expCid {
30+
t.Fatalf("expected %s, got %s", expCid, pcid)
31+
}
32+
33+
padded, err := ZeroPadPieceCommitment(pcid, psize, psize*4)
34+
if err != nil {
35+
t.Fatal(err)
36+
}
37+
38+
data2 := make([]byte, psize*4)
39+
copy(data2, content)
40+
41+
padExpCid, err := GeneratePieceCIDFromFile(abi.RegisteredSealProof_StackedDrg32GiBV1_1, bytes.NewReader(data2), psize*4)
42+
if err != nil {
43+
t.Fatal(err)
44+
}
45+
46+
if padded != padExpCid {
47+
t.Fatalf("wrong padding, expected %s, got %s", padExpCid, padded)
48+
}
49+
}

0 commit comments

Comments
 (0)