github.com/incognitochain/go-incognito-sdk@v1.0.1/privacy/zkp/payment_test.go (about)

     1  package zkp
     2  
     3  import (
     4  	"github.com/incognitochain/go-incognito-sdk/common/base58"
     5  	"github.com/incognitochain/go-incognito-sdk/privacy"
     6  	"github.com/incognitochain/go-incognito-sdk/wallet"
     7  	"testing"
     8  )
     9  
    10  type CoinObject struct {
    11  	PublicKey      string
    12  	CoinCommitment string
    13  	SNDerivator    string
    14  	SerialNumber   string
    15  	Randomness     string
    16  	Value          uint64
    17  	Info           string
    18  }
    19  
    20  func ParseCoinObjectToStruct(coinObjects []CoinObject) ([]*privacy.InputCoin, uint64) {
    21  	coins := make([]*privacy.InputCoin, len(coinObjects))
    22  	sumValue := uint64(0)
    23  
    24  	for i := 0; i < len(coins); i++ {
    25  
    26  		publicKey, _, _ := base58.Base58Check{}.Decode(coinObjects[i].PublicKey)
    27  		publicKeyPoint := new(privacy.Point)
    28  		publicKeyPoint.FromBytesS(publicKey)
    29  
    30  		coinCommitment, _, _ := base58.Base58Check{}.Decode(coinObjects[i].CoinCommitment)
    31  		coinCommitmentPoint := new(privacy.Point)
    32  		coinCommitmentPoint.FromBytesS(coinCommitment)
    33  
    34  		snd, _, _ := base58.Base58Check{}.Decode(coinObjects[i].SNDerivator)
    35  		sndBN := new(privacy.Scalar).FromBytesS(snd)
    36  
    37  		serialNumber, _, _ := base58.Base58Check{}.Decode(coinObjects[i].CoinCommitment)
    38  		serialNumberPoint := new(privacy.Point)
    39  		serialNumberPoint.FromBytesS(serialNumber)
    40  
    41  		randomness, _, _ := base58.Base58Check{}.Decode(coinObjects[i].Randomness)
    42  		randomnessBN := new(privacy.Scalar).FromBytesS(randomness)
    43  
    44  		coins[i] = new(privacy.InputCoin).Init()
    45  		coins[i].CoinDetails.SetPublicKey(publicKeyPoint)
    46  		coins[i].CoinDetails.SetCoinCommitment(coinCommitmentPoint)
    47  		coins[i].CoinDetails.SetSNDerivator(sndBN)
    48  		coins[i].CoinDetails.SetSerialNumber(serialNumberPoint)
    49  		coins[i].CoinDetails.SetRandomness(randomnessBN)
    50  		coins[i].CoinDetails.SetValue(coinObjects[i].Value)
    51  
    52  		sumValue += coinObjects[i].Value
    53  
    54  	}
    55  
    56  	return coins, sumValue
    57  }
    58  
    59  func TestPaymentProofToBytes(t *testing.T) {
    60  	//witness := new(PaymentWitness)
    61  	witnessParam := new(PaymentWitnessParam)
    62  
    63  	keyWallet, _ := wallet.Base58CheckDeserialize("112t8rnXHD9s2MXSXigMyMtKdGFtSJmhA9cCBN34Fj55ox3cJVL6Fykv8uNWkDagL56RnA4XybQKNRrNXinrDDfKZmq9Y4LR18NscSrc9inc")
    64  	_ = keyWallet.KeySet.InitFromPrivateKey(&keyWallet.KeySet.PrivateKey)
    65  	senderKeyBN := new(privacy.Scalar).FromBytesS(keyWallet.KeySet.PrivateKey)
    66  	senderPKPoint := new(privacy.Point)
    67  	senderPKPoint.FromBytesS(keyWallet.KeySet.PaymentAddress.Pk)
    68  
    69  	coinStrs := []CoinObject{
    70  		{
    71  			PublicKey:      "183XvUp5gn7gtTWjMBGwpBSgER6zexEMAqmvvQsd9ZavsErG89y",
    72  			CoinCommitment: "16rDxiXDg9AhyC3o3XiBQZAtg4P2x1ER9umyspRFC4AUWGj9LnK",
    73  			SNDerivator:    "12bf2zoKdYw8c8BT3YMKNaVkLppoQqEkLtSCymEa6EK65FSowV7",
    74  			SerialNumber:   "17ioQJTBFV8HGK6TYQn9mWfdT8Z7wRCMyn9GjFYhMx6dP8UrnJp",
    75  			Randomness:     "13CyLqj6BErihknHV7AWqHdAodLAwRwGuqkEdDqFb5chS5uhLN",
    76  			Value:          13063917525,
    77  			Info:           "13PMpZ4",
    78  		},
    79  		{
    80  			PublicKey:      "183XvUp5gn7gtTWjMBGwpBSgER6zexEMAqmvvQsd9ZavsErG89y",
    81  			CoinCommitment: "17pb83j2YcrB8WLr1jPNGsT6Qgo3dEan7U6NsJwR2QAY1PcmXWa",
    82  			SNDerivator:    "12M48gjxpPUkb69ieMLc9EhBDcCerTbhtHnAgdoaEToXUYhFiCb",
    83  			SerialNumber:   "18fJDPSbjLnTCxk2QUrEig4Ai5kWbPYediD1KhKinKm142smQVs",
    84  			Randomness:     "12cyHe5MyGLDGeKDZSknP2DEny48mNMC49Rd8CHhdiBCh35bnTs",
    85  			Value:          4230769230,
    86  			Info:           "13PMpZ4",
    87  		},
    88  		{
    89  			PublicKey:      "183XvUp5gn7gtTWjMBGwpBSgER6zexEMAqmvvQsd9ZavsErG89y",
    90  			CoinCommitment: "17tcbagBHAjG8fr2RGLc3FjAJ5Mkbqitdv6KCtQWLiBydHoHpRP",
    91  			SNDerivator:    "1SXpgdZKqwENjSYgLhaam6PS3u5CciYMHuwyt1ipr5SUQQMYGn",
    92  			SerialNumber:   "15Mnm5Do1Np3eoPdGRvECJb8mjhHLgvDYoWxNQgAxXTLCUh2MYa",
    93  			Randomness:     "12Br463SeHFafpPEntE1L81S6vk5HShUtgE7tiCfPzr1aWiSZMU",
    94  			Value:          13395348837,
    95  			Info:           "13PMpZ4",
    96  		},
    97  		{
    98  			PublicKey:      "183XvUp5gn7gtTWjMBGwpBSgER6zexEMAqmvvQsd9ZavsErG89y",
    99  			CoinCommitment: "16ep85MLtTigBiwPf1b6bRcKJ9NJfVazxjC1GCzEsqKK1J5927t",
   100  			SNDerivator:    "1EXomopZG5uUDbC9fRWyg4UnvboqY3PQnmjF1srRyRUDFXaUzd",
   101  			SerialNumber:   "16PpZUXgsQntxB8Js6yoPRzyZEiQyQTGtSXUEYnvV1uEbv7wPdw",
   102  			Randomness:     "12uWji6kLpUo8Xg5AJx1odDkeP2ZQ7g9p2tnSMwLJfvgDDmkWVS",
   103  			Value:          466999090249,
   104  			Info:           "13PMpZ4",
   105  		},
   106  		{
   107  			PublicKey:      "183XvUp5gn7gtTWjMBGwpBSgER6zexEMAqmvvQsd9ZavsErG89y",
   108  			CoinCommitment: "17Pw2SmoW4zXojM8HHHMEpX5k3SjKL8UAeGXBDKjqpJBJKtHSkf",
   109  			SNDerivator:    "122qVAS24X5AjWdWsiX54npCN7WDrAyDk4VmGSbFNexWcofzNXa",
   110  			SerialNumber:   "18LrSQofiFy9HuiCbdPJZp7nFKg9z6xNiN1EoeRVWdCiMf6Yyrm",
   111  			Randomness:     "12XdvDLJ2UKASYX2wCSEKvda3xYrJKeUaP4XXmQ3f6f5hA399pg",
   112  			Value:          13423728813,
   113  			Info:           "13PMpZ4",
   114  		},
   115  		{
   116  			PublicKey:      "183XvUp5gn7gtTWjMBGwpBSgER6zexEMAqmvvQsd9ZavsErG89y",
   117  			CoinCommitment: "188C79Y2jJmKNxxuGN56S5rSXDYAZqP7erMEebmui74DaS7qf4V",
   118  			SNDerivator:    "1xD4hPppKFkwTkUK2GkR6VVEszhF94KZEFqpqvSynqUePGKnrh",
   119  			SerialNumber:   "16TKsDv351rbn64bw4CTnwfSd626oJ6bYRYjUQqYP2dmyRqYpXn",
   120  			Randomness:     "1WPLdUVWt6566hpjENoNkSmukPSyYBjbWwrv2nyQx49DByPR36",
   121  			Value:          6285714285,
   122  			Info:           "13PMpZ4",
   123  		},
   124  	}
   125  
   126  	inputCoins, sumValue := ParseCoinObjectToStruct(coinStrs)
   127  
   128  	keyWalletReceiver, _ := wallet.Base58CheckDeserialize("112t8rnXHD9s2MXSXigMyMtKdGFtSJmhA9cCBN34Fj55ox3cJVL6Fykv8uNWkDagL56RnA4XybQKNRrNXinrDDfKZmq9Y4LR18NscSrc9inc")
   129  	_ = keyWalletReceiver.KeySet.InitFromPrivateKey(&keyWalletReceiver.KeySet.PrivateKey)
   130  	//receiverKeyBN := new(big.Int).SetBytes(keyWalletReceiver.KeySet.PrivateKey)
   131  	receiverPublicKey := keyWalletReceiver.KeySet.PaymentAddress.Pk
   132  	receiverPublicKeyPoint := new(privacy.Point)
   133  	receiverPublicKeyPoint.FromBytesS(receiverPublicKey)
   134  
   135  	amountTransfer := uint64(1000000000)
   136  
   137  	outputCoins := make([]*privacy.OutputCoin, 2)
   138  	outputCoins[0] = new(privacy.OutputCoin)
   139  	outputCoins[0].Init()
   140  	outputCoins[0].CoinDetails.SetValue(uint64(amountTransfer))
   141  	outputCoins[0].CoinDetails.SetPublicKey(receiverPublicKeyPoint)
   142  	outputCoins[0].CoinDetails.SetSNDerivator(privacy.RandomScalar())
   143  
   144  	changeAmount := sumValue - amountTransfer
   145  
   146  	outputCoins[1] = new(privacy.OutputCoin)
   147  	outputCoins[1].Init()
   148  	outputCoins[1].CoinDetails.SetValue(changeAmount)
   149  	outputCoins[1].CoinDetails.SetPublicKey(senderPKPoint)
   150  	outputCoins[1].CoinDetails.SetSNDerivator(privacy.RandomScalar())
   151  
   152  	//HasPrivacy              bool
   153  	//PrivateKey              *big.Int
   154  	//InputCoins              []*privacy.InputCoin
   155  	//OutputCoins             []*privacy.OutputCoin
   156  	//PublicKeyLastByteSender byte
   157  	//Commitments             []*privacy.Point
   158  	//CommitmentIndices       []uint64
   159  	//MyCommitmentIndices     []uint64
   160  	//Fee                     uint64
   161  	witnessParam.HasPrivacy = true
   162  	witnessParam.PrivateKey = senderKeyBN
   163  	witnessParam.InputCoins = inputCoins
   164  	witnessParam.OutputCoins = outputCoins
   165  	witnessParam.PublicKeyLastByteSender = keyWallet.KeySet.PaymentAddress.Pk[len(keyWallet.KeySet.PaymentAddress.Pk)-1]
   166  
   167  	//witness.Init()
   168  
   169  }