github.com/sunrise-zone/sunrise-node@v0.13.1-sr2/share/eds/byzantine/share_proof_test.go (about) 1 package byzantine 2 3 import ( 4 "context" 5 "strconv" 6 "testing" 7 "time" 8 9 "github.com/ipfs/go-cid" 10 "github.com/stretchr/testify/require" 11 12 "github.com/sunrise-zone/sunrise-app/pkg/da" 13 14 "github.com/sunrise-zone/sunrise-node/share/ipld" 15 "github.com/sunrise-zone/sunrise-node/share/sharetest" 16 ) 17 18 func TestGetProof(t *testing.T) { 19 const width = 4 20 21 ctx, cancel := context.WithTimeout(context.Background(), time.Second*2) 22 defer cancel() 23 bServ := ipld.NewMemBlockservice() 24 25 shares := sharetest.RandShares(t, width*width) 26 in, err := ipld.AddShares(ctx, shares, bServ) 27 require.NoError(t, err) 28 29 dah, err := da.NewDataAvailabilityHeader(in) 30 require.NoError(t, err) 31 var tests = []struct { 32 roots [][]byte 33 }{ 34 {dah.RowRoots}, 35 {dah.ColumnRoots}, 36 } 37 38 for i, tt := range tests { 39 t.Run(strconv.Itoa(i), func(t *testing.T) { 40 for _, root := range tt.roots { 41 rootCid := ipld.MustCidFromNamespacedSha256(root) 42 for index := 0; uint(index) < in.Width(); index++ { 43 proof := make([]cid.Cid, 0) 44 proof, err = ipld.GetProof(ctx, bServ, rootCid, proof, index, int(in.Width())) 45 require.NoError(t, err) 46 node, err := ipld.GetLeaf(ctx, bServ, rootCid, index, int(in.Width())) 47 require.NoError(t, err) 48 inclusion := NewShareWithProof(index, node.RawData(), proof) 49 require.True(t, inclusion.Validate(rootCid)) 50 } 51 } 52 }) 53 } 54 } 55 56 func TestGetProofs(t *testing.T) { 57 const width = 4 58 ctx, cancel := context.WithTimeout(context.Background(), time.Second*2) 59 defer cancel() 60 bServ := ipld.NewMemBlockservice() 61 62 shares := sharetest.RandShares(t, width*width) 63 in, err := ipld.AddShares(ctx, shares, bServ) 64 require.NoError(t, err) 65 66 dah, err := da.NewDataAvailabilityHeader(in) 67 require.NoError(t, err) 68 for _, root := range dah.ColumnRoots { 69 rootCid := ipld.MustCidFromNamespacedSha256(root) 70 data := make([][]byte, 0, in.Width()) 71 for index := 0; uint(index) < in.Width(); index++ { 72 node, err := ipld.GetLeaf(ctx, bServ, rootCid, index, int(in.Width())) 73 require.NoError(t, err) 74 data = append(data, node.RawData()[9:]) 75 } 76 77 proves, err := GetProofsForShares(ctx, bServ, rootCid, data) 78 require.NoError(t, err) 79 for _, proof := range proves { 80 require.True(t, proof.Validate(rootCid)) 81 } 82 } 83 }