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  }