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 }