2021-02-19 13:08:51 -08:00
package cash.z.ecc.android.sdk.jni
2021-04-09 19:29:29 -07:00
import androidx.test.filters.SmallTest
2021-02-19 13:08:51 -08:00
import cash.z.ecc.android.bip39.Mnemonics.MnemonicCode
import cash.z.ecc.android.bip39.toSeed
2021-04-09 19:29:29 -07:00
import cash.z.ecc.android.sdk.annotation.MaintainedTest
import cash.z.ecc.android.sdk.annotation.TestPurpose
2023-05-18 04:36:15 -07:00
import cash.z.ecc.android.sdk.internal.Derivation
import cash.z.ecc.android.sdk.internal.deriveUnifiedAddress
import cash.z.ecc.android.sdk.internal.deriveUnifiedFullViewingKeysTypesafe
import cash.z.ecc.android.sdk.internal.jni.RustDerivationTool
2022-08-02 06:29:09 -07:00
import cash.z.ecc.android.sdk.model.ZcashNetwork
2021-10-21 13:05:02 -07:00
import kotlinx.coroutines.runBlocking
2021-02-19 13:08:51 -08:00
import org.junit.Assert.assertEquals
import org.junit.BeforeClass
import org.junit.Test
import org.junit.runner.RunWith
2021-05-07 01:00:32 -07:00
import org.junit.runners.Parameterized
2021-02-19 13:08:51 -08:00
2021-04-09 19:29:29 -07:00
@MaintainedTest ( TestPurpose . REGRESSION )
2021-05-07 01:00:32 -07:00
@RunWith ( Parameterized :: class )
2021-04-09 19:29:29 -07:00
@SmallTest
2021-05-07 01:00:32 -07:00
class TransparentTest ( val expected : Expected , val network : ZcashNetwork ) {
2021-02-19 13:08:51 -08:00
2021-03-31 23:23:41 -07:00
@Test
2022-08-04 10:09:19 -07:00
fun deriveUnifiedFullViewingKeysFromSeedTest ( ) = runBlocking {
2023-05-18 04:36:15 -07:00
val ufvks = RustDerivationTool . new ( ) . deriveUnifiedFullViewingKeysTypesafe (
SEED ,
network = network ,
numberOfAccounts =
Derivation . DEFAULT _NUMBER _OF _ACCOUNTS
)
2022-08-23 15:40:51 -07:00
assertEquals ( 1 , ufvks . size )
val ufvk = ufvks . first ( )
2023-05-18 04:36:15 -07:00
assertEquals ( expected . uAddr , RustDerivationTool . new ( ) . deriveUnifiedAddress ( ufvk . encoding , network = network ) )
2022-08-23 15:40:51 -07:00
// TODO: If we need this, change DerivationTool to derive from the UFVK instead of the public key.
// assertEquals(expected.tAddr, DerivationTool.deriveTransparentAddressFromPublicKey(ufvk.encoding,
// network = network))
2021-02-19 13:08:51 -08:00
}
companion object {
2021-05-07 01:00:32 -07:00
const val PHRASE = " deputy visa gentle among clean scout farm drive comfort patch skin salt ranch cool ramp warrior drink narrow normal lunch behind salt deal person "
2021-02-19 13:08:51 -08:00
val MNEMONIC = MnemonicCode ( PHRASE )
val SEED = MNEMONIC . toSeed ( )
2021-03-31 23:23:41 -07:00
object ExpectedMainnet : Expected {
override val tAddr = " t1PKtYdJJHhc3Pxowmznkg7vdTwnhEsCvR4 "
override val zAddr = " zs1yc4sgtfwwzz6xfsy2xsradzr6m4aypgxhfw2vcn3hatrh5ryqsr08sgpemlg39vdh9kfupx20py "
2022-08-23 15:40:51 -07:00
override val uAddr = " u1607xqhx72u8x94xcg6kyt9sd83aw8zvys2vwlr5n956e5jfytcaaeuzrk938c03jv4t0kdk73yxz9yd8rdksutw68ycpy6yt9vzhu28z58rh89gtt653cspr0c50ev4av0ddzj5vrrh "
override val tAccountPrivKey = " xprv9z1aorRbyM5A6ok9QmdCUztMRRgthiNpus4u8Rgn9YeZEz1EVkLthFpJS1Y1FaXAvgNDPKTwxvshUMj7KJiGeNVhKL8RzDv14yHbUu3szy5 "
2021-03-31 23:23:41 -07:00
override val tskCompressed = " L4BvDC33yLjMRxipZvdiUmdYeRfZmR8viziwsVwe72zJdGbiJPv2 "
override val tpk = " 03b1d7fb28d17c125b504d06b1530097e0a3c76ada184237e3bc0925041230a5af "
}
2021-02-19 13:08:51 -08:00
2021-03-31 23:23:41 -07:00
object ExpectedTestnet : Expected {
override val tAddr = " tm9v3KTsjXK8XWSqiwFjic6Vda6eHY9Mjjq "
override val zAddr = " ztestsapling1wn3tw9w5rs55x5yl586gtk72e8hcfdq8zsnjzcu8p7ghm8lrx54axc74mvm335q7lmy3g0sqje6 "
2022-08-23 15:40:51 -07:00
override val uAddr = " utest1cy80kzr6fj5vrrazldtcgmycs6rgu2x73pvwrjjmlwrwx343m06lxua5u36jdwyeckn4a6a0fkxm4y7t3lvhzscqrwg3gxpj4rgrgmf93m0cpm9ddkzn5qyzgadktuwza5d5kucewv3 "
override val tAccountPrivKey = " xprv9yUDoMsKVAQ8W8tf3VuPGyBKHuDPa4SkBXT7KHp4dfW7iBWKUEgAYG1g6ZpdotTWc4iMrj6vgaT8otHCWRj5SYtXkDcxkheFCp6QZEW9dPi "
2021-03-31 23:23:41 -07:00
override val tskCompressed = " KzVugoXxR7AtTMdR5sdJtHxCNvMzQ4H196k7ATv4nnjoummsRC9G "
override val tpk = " 03b1d7fb28d17c125b504d06b1530097e0a3c76ada184237e3bc0925041230a5af "
2021-02-19 13:08:51 -08:00
}
@BeforeClass
@JvmStatic
fun startup ( ) {
}
2021-05-07 01:00:32 -07:00
@JvmStatic
@Parameterized . Parameters
fun data ( ) = listOf (
arrayOf ( ExpectedTestnet , ZcashNetwork . Testnet ) ,
2022-06-23 05:31:02 -07:00
arrayOf ( ExpectedMainnet , ZcashNetwork . Mainnet )
2021-05-07 01:00:32 -07:00
)
2021-02-19 13:08:51 -08:00
}
2021-03-31 23:23:41 -07:00
interface Expected {
val tAddr : String
val zAddr : String
2022-08-23 15:40:51 -07:00
val uAddr : String
val tAccountPrivKey : String
2021-03-31 23:23:41 -07:00
val tskCompressed : String
val tpk : String
}
2021-03-10 19:04:39 -08:00
}