2021-02-19 13:08:51 -08:00
|
|
|
package cash.z.ecc.android.sdk.jni
|
|
|
|
|
|
|
|
import androidx.test.ext.junit.runners.AndroidJUnit4
|
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
|
2021-02-19 13:08:51 -08:00
|
|
|
import cash.z.ecc.android.sdk.ext.TroubleshootingTwig
|
|
|
|
import cash.z.ecc.android.sdk.ext.Twig
|
|
|
|
import cash.z.ecc.android.sdk.tool.DerivationTool
|
2021-04-09 19:29:29 -07:00
|
|
|
import cash.z.ecc.android.sdk.type.ZcashNetwork
|
2021-02-19 13:08:51 -08:00
|
|
|
import org.junit.Assert.assertEquals
|
|
|
|
import org.junit.Before
|
|
|
|
import org.junit.BeforeClass
|
|
|
|
import org.junit.Test
|
|
|
|
import org.junit.runner.RunWith
|
|
|
|
|
2021-04-09 19:29:29 -07:00
|
|
|
@MaintainedTest(TestPurpose.REGRESSION)
|
2021-02-19 13:08:51 -08:00
|
|
|
@RunWith(AndroidJUnit4::class)
|
2021-04-09 19:29:29 -07:00
|
|
|
@SmallTest
|
2021-02-19 13:08:51 -08:00
|
|
|
class TransparentTest {
|
|
|
|
|
2021-03-31 23:23:41 -07:00
|
|
|
lateinit var expected: Expected
|
2021-04-09 18:43:07 -07:00
|
|
|
lateinit var network: ZcashNetwork
|
2021-03-31 23:23:41 -07:00
|
|
|
|
2021-02-19 13:08:51 -08:00
|
|
|
@Before
|
|
|
|
fun setup() {
|
2021-04-09 19:29:29 -07:00
|
|
|
// TODO: parameterize this for both networks
|
|
|
|
// if (BuildConfig.FLAVOR == "zcashtestnet") {
|
|
|
|
expected = ExpectedTestnet
|
2021-05-01 20:05:14 -07:00
|
|
|
network = ZcashNetwork.Mainnet
|
2021-04-09 19:29:29 -07:00
|
|
|
// } else {
|
|
|
|
// expected = ExpectedMainnet
|
|
|
|
// network = ZcashNetwork.Mainnet
|
|
|
|
// }
|
2021-02-19 13:08:51 -08:00
|
|
|
}
|
|
|
|
|
|
|
|
@Test
|
|
|
|
fun deriveTransparentSecretKeyTest() {
|
2021-04-09 18:43:07 -07:00
|
|
|
assertEquals(expected.tskCompressed, DerivationTool.deriveTransparentSecretKey(SEED, network = network))
|
2021-02-19 13:08:51 -08:00
|
|
|
}
|
|
|
|
|
|
|
|
@Test
|
|
|
|
fun deriveTransparentAddressTest() {
|
2021-04-09 18:43:07 -07:00
|
|
|
assertEquals(expected.tAddr, DerivationTool.deriveTransparentAddress(SEED, network = network))
|
2021-02-19 13:08:51 -08:00
|
|
|
}
|
|
|
|
|
|
|
|
@Test
|
|
|
|
fun deriveTransparentAddressFromSecretKeyTest() {
|
2021-05-01 20:05:14 -07:00
|
|
|
assertEquals(expected.tAddr, DerivationTool.deriveSpendingKeys(SEED, network = network)[0])
|
2021-03-31 23:23:41 -07:00
|
|
|
}
|
|
|
|
|
|
|
|
@Test
|
|
|
|
fun deriveUnifiedViewingKeysFromSeedTest() {
|
2021-04-09 18:43:07 -07:00
|
|
|
val uvks = DerivationTool.deriveUnifiedViewingKeys(SEED, network = network)
|
2021-03-31 23:23:41 -07:00
|
|
|
assertEquals(1, uvks.size)
|
|
|
|
val uvk = uvks.first()
|
2021-04-09 18:43:07 -07:00
|
|
|
assertEquals(expected.zAddr, DerivationTool.deriveShieldedAddress(uvk.extfvk, network = network))
|
|
|
|
assertEquals(expected.tAddr, DerivationTool.deriveTransparentAddressFromPublicKey(uvk.extpub, network = network))
|
2021-02-19 13:08:51 -08:00
|
|
|
}
|
|
|
|
|
|
|
|
companion object {
|
2021-05-01 20:05:14 -07:00
|
|
|
const val PHRASE = "wish puppy smile loan doll curve hole maze file ginger hair nose key relax knife witness cannon grab despair throw review deal slush frame" // "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"
|
|
|
|
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"
|
|
|
|
override val tskCompressed = "KzVugoXxR7AtTMdR5sdJtHxCNvMzQ4H196k7ATv4nnjoummsRC9G"
|
|
|
|
override val tpk = "03b1d7fb28d17c125b504d06b1530097e0a3c76ada184237e3bc0925041230a5af"
|
2021-02-19 13:08:51 -08:00
|
|
|
}
|
|
|
|
|
|
|
|
@BeforeClass
|
|
|
|
@JvmStatic
|
|
|
|
fun startup() {
|
2021-03-10 19:04:39 -08:00
|
|
|
Twig.plant(TroubleshootingTwig(formatter = { "@TWIG $it" }))
|
2021-02-19 13:08:51 -08:00
|
|
|
}
|
|
|
|
}
|
2021-03-31 23:23:41 -07:00
|
|
|
|
|
|
|
interface Expected {
|
|
|
|
val tAddr: String
|
|
|
|
val zAddr: String
|
|
|
|
val tskCompressed: String
|
|
|
|
val tpk: String
|
|
|
|
}
|
2021-03-10 19:04:39 -08:00
|
|
|
}
|