From fc738f59fd4542f5c16bf947bcd7360748597866 Mon Sep 17 00:00:00 2001 From: Satya Date: Fri, 16 Apr 2021 23:35:42 +0800 Subject: [PATCH] Enterprise adddress generation --- rust/src/address.rs | 70 +++++++++++++--- rust/src/lib.rs | 80 ++++++++----------- .../cardano/client/account/Account.java | 18 ++++- .../cardano/client/cli/AccountGeneration.java | 25 ++++-- .../cardano/client/cli/FromMnemonic.java | 22 +++-- .../cardano/client/jna/CardanoJNA.java | 8 +- .../cardano/client/CardanoJNATest.java | 79 +++++++++++++----- .../com/bloxbean/cardano/client/TestRun.java | 1 + .../cardano/client/account/AccountTest.java | 15 +++- 9 files changed, 223 insertions(+), 95 deletions(-) rename src/{main => test}/java/com/bloxbean/cardano/client/TestRun.java (93%) diff --git a/rust/src/address.rs b/rust/src/address.rs index 5b8fb50f..73b6c845 100644 --- a/rust/src/address.rs +++ b/rust/src/address.rs @@ -4,7 +4,7 @@ use std::os::raw::c_char; use std::str; use bip39::{Language, Mnemonic, MnemonicType}; -use cardano_serialization_lib::address::{BaseAddress, NetworkInfo, Pointer, PointerAddress, StakeCredential}; +use cardano_serialization_lib::address::{BaseAddress, NetworkInfo, Pointer, PointerAddress, StakeCredential, EnterpriseAddress}; use cardano_serialization_lib::chain_core::property::FromStr; use cardano_serialization_lib::crypto::Bip32PrivateKey; use rand::prelude::*; @@ -56,6 +56,36 @@ pub fn get_baseaddress_from_mnemonic(phrase: &str, index: u32, is_testnet: bool) get_baseaddress_from_mnemonic_by_networkInfo(phrase, index, network) } +pub fn get_enterpriseaddress_from_mnemonic_by_networkInfo(phrase: &str, index: u32, network: NetworkInfo) -> String { + let result = Mnemonic::from_phrase(phrase, Language::English).unwrap(); + + let entropy = result.entropy(); + + let root_key = get_root_key(&entropy); + let spend = root_key + .derive(harden(1852)) + .derive(harden(1815)) + .derive(harden(0)) + .derive(0) + .derive(index) + .to_public(); + + let spend_cred = StakeCredential::from_keyhash(&spend.to_raw_key().hash()); + let addr_net_0 = EnterpriseAddress::new(network.network_id(), &spend_cred).to_address(); + + addr_net_0.to_bech32(None).unwrap() +} + +pub fn get_enterpriseaddress_from_mnemonic(phrase: &str, index: u32, is_testnet: bool) -> String { + let network = if is_testnet { + NetworkInfo::testnet() + } else { + NetworkInfo::mainnet() + }; + + get_enterpriseaddress_from_mnemonic_by_networkInfo(phrase, index, network) +} + pub fn generate_mnemonic() -> String { let mnemonic = Mnemonic::new(MnemonicType::Words24, Language::English); let phrase = mnemonic.phrase(); @@ -65,18 +95,10 @@ pub fn generate_mnemonic() -> String { #[cfg(test)] mod tests { - use crate::address::{generate_mnemonic, get_baseaddress_from_mnemonic}; - -// #[test] - // fn it_works() { - // let phrase = "test walk nut penalty hip pave soap entry language right filter choice"; - // // let entropy = [0xdf, 0x9e, 0xd2, 0x5e, 0xd1, 0x46, 0xbf, 0x43, 0x33, 0x6a, 0x5d, 0x7c, 0xf7, 0x39, 0x59, 0x94]; - // let str = get_baseaddress_from_mnemonic(phrase, 0); - // println!(" Hello: {}", str); - // } + use crate::address::{generate_mnemonic, get_baseaddress_from_mnemonic, get_enterpriseaddress_from_mnemonic}; #[test] - fn get_baseaddress_from_mnemonic_yoroi() { + fn get_baseaddress_from_mnemonic_15words() { //15 words let phrase = "stairs same wheel damage taste amused dutch fly end tiger benefit leopard purity work year"; // let entropy = [0xdf, 0x9e, 0xd2, 0x5e, 0xd1, 0x46, 0xbf, 0x43, 0x33, 0x6a, 0x5d, 0x7c, 0xf7, 0x39, 0x59, 0x94]; @@ -122,6 +144,32 @@ mod tests { assert_eq!(add2, "addr_test1qrpr30ykyfa3pw6qkkun3dyyxsvftq3xukuyxdt58pxcpxgl5mr3vkp82y2kcwxxtu4zjcxvm80ttmx2hyeyjka4v8pskku650"); } + #[test] + fn get_enterpriseaddress_from_mnemonic_mainnet() { + //24 words + let phrase = "coconut you order found animal inform tent anxiety pepper aisle web horse source indicate eyebrow viable lawsuit speak dragon scheme among animal slogan exchange"; + let add0 = get_enterpriseaddress_from_mnemonic(phrase, 0, false); + let add1 = get_enterpriseaddress_from_mnemonic(phrase, 1, false); + let add2 = get_enterpriseaddress_from_mnemonic(phrase, 2, false); + + assert_eq!(add0, "addr1vxsaa6czesrzwp45rd5flg86n5hnwhz5setqfyt39natwvstf7k4n"); + assert_eq!(add1, "addr1v93jwnn3hvgcuv02tqe08lpdkxxpmvapxgjxwewya47tqsg7davae"); + assert_eq!(add2, "addr1v8pr30ykyfa3pw6qkkun3dyyxsvftq3xukuyxdt58pxcpxgvddj89"); + } + + #[test] + fn get_enterpriseaddress_from_mnemonic_testnet() { + //24 words + let phrase = "coconut you order found animal inform tent anxiety pepper aisle web horse source indicate eyebrow viable lawsuit speak dragon scheme among animal slogan exchange"; + let add0 = get_enterpriseaddress_from_mnemonic(phrase, 0, true); + let add1 = get_enterpriseaddress_from_mnemonic(phrase, 1, true); + let add2 = get_enterpriseaddress_from_mnemonic(phrase, 2, true); + + assert_eq!(add0, "addr_test1vzsaa6czesrzwp45rd5flg86n5hnwhz5setqfyt39natwvssp226k"); + assert_eq!(add1, "addr_test1vp3jwnn3hvgcuv02tqe08lpdkxxpmvapxgjxwewya47tqsg99fsju"); + assert_eq!(add2, "addr_test1vrpr30ykyfa3pw6qkkun3dyyxsvftq3xukuyxdt58pxcpxgh9ewgq"); + } + #[test] fn generate_mnemonic_daedalus() { let mnemonic = generate_mnemonic(); diff --git a/rust/src/lib.rs b/rust/src/lib.rs index 15c4d231..1b76228a 100644 --- a/rust/src/lib.rs +++ b/rust/src/lib.rs @@ -10,7 +10,7 @@ use jni::objects::{JClass, JString}; // lifetime checker won't let us. use jni::sys::jstring; -use crate::address::{get_baseaddress_from_mnemonic, get_baseaddress_from_mnemonic_by_networkInfo}; +use crate::address::{get_baseaddress_from_mnemonic, get_baseaddress_from_mnemonic_by_networkInfo, get_enterpriseaddress_from_mnemonic_by_networkInfo, get_enterpriseaddress_from_mnemonic}; use std::os::raw::c_char; use std::ffi::{CStr,CString}; @@ -22,31 +22,17 @@ use serde_json::Result; mod address; -// This keeps Rust from "mangling" the name and making it unique for this -// crate. #[no_mangle] -pub extern "system" fn Java_com_bloxbean_cardano_client_CardanoNative_getBaseAddressFromMnemonic(env: JNIEnv, -// This is the class that owns our static method. It's not going to be used, -// but still must be present to match the expected signature of a static -// native method. - class: JClass, - input: JString, index: u32, is_testnet: bool) - -> jstring { - // First, we have to get the string out of Java. Check out the `strings` - // module for more info on how this works. - let input: String = - env.get_string(input).expect("Couldn't get java string!").into(); - - let add = get_baseaddress_from_mnemonic(input.as_str(), index, is_testnet); - - let output = env.new_string(format!("{}", add)) - .expect("Couldn't create java string!"); - - output.into_inner() +#[repr(C)] +#[allow(missing_copy_implementations)] +pub struct Network { + network_id: u8, + protocol_magic: u64 } #[no_mangle] -pub fn get_address(phrase: *const c_char, index: u32, is_testnet: bool) -> *const c_char { +#[allow(non_snake_case)] +pub fn getBaseAddress(phrase: *const c_char, index: u32, is_testnet: bool) -> *const c_char { let s = to_string(phrase); let add = get_baseaddress_from_mnemonic(s.as_str(), index, is_testnet); @@ -55,15 +41,8 @@ pub fn get_address(phrase: *const c_char, index: u32, is_testnet: bool) -> *cons } #[no_mangle] -#[repr(C)] -#[allow(missing_copy_implementations)] -pub struct Network { - network_id: u8, - protocol_magic: u64 -} - -#[no_mangle] -pub fn get_address_by_network(phrase: *const c_char, index: u32, network: &Network) -> *const c_char { +#[allow(non_snake_case)] +pub fn getBaseAddressByNetwork(phrase: *const c_char, index: u32, network: &Network) -> *const c_char { let s = to_string(phrase); let netInfo = NetworkInfo::new(network.network_id, @@ -73,24 +52,31 @@ pub fn get_address_by_network(phrase: *const c_char, index: u32, network: &Netwo to_ptr(add) } -// #[no_mangle] -// pub fn get_address_by_network_json(phrase: *const c_char, index: u32, network: *const c_char) -> *const c_char { -// let s = to_string(phrase); -// -// let netStr = to_string(network); -// -// let nt: NetworkJava = serde_json::from_str(netStr.as_str()).unwrap(); -// println!("{}", nt.network_id); -// println!("{}", nt.protocol_magic); -// -// let netInfo = NetworkInfo::new(nt.network_id, nt.protocol_magic); -// let add = get_baseaddress_from_mnemonic_by_networkInfo(s.as_str(), index, netInfo); -// -// to_ptr(add) -// } +#[no_mangle] +#[allow(non_snake_case)] +pub fn getEnterpriseAddress(phrase: *const c_char, index: u32, is_testnet: bool) -> *const c_char { + let s = to_string(phrase); + + let add = get_enterpriseaddress_from_mnemonic(s.as_str(), index, is_testnet); + + to_ptr(add) +} + +#[no_mangle] +#[allow(non_snake_case)] +pub fn getEnterpriseAddressByNetwork(phrase: *const c_char, index: u32, network: &Network) -> *const c_char { + let s = to_string(phrase); + + let netInfo = NetworkInfo::new(network.network_id, + network.protocol_magic as u32); + let add = get_enterpriseaddress_from_mnemonic_by_networkInfo(s.as_str(), index, netInfo); + + to_ptr(add) +} #[no_mangle] -pub fn generate_mnemonic() -> *const c_char { +#[allow(non_snake_case)] +pub fn generateMnemonic() -> *const c_char { let mnemonic = address::generate_mnemonic(); to_ptr(mnemonic) diff --git a/src/main/java/com/bloxbean/cardano/client/account/Account.java b/src/main/java/com/bloxbean/cardano/client/account/Account.java index ffde9ca3..b6a6d80f 100644 --- a/src/main/java/com/bloxbean/cardano/client/account/Account.java +++ b/src/main/java/com/bloxbean/cardano/client/account/Account.java @@ -10,6 +10,7 @@ public class Account { private String mnemonic; private String baseAddress; + private String enterpriseAddress; private Network network; /** @@ -66,11 +67,24 @@ public String baseAddress(int index) { refNetwork.network_id = network.network_id; refNetwork.protocol_magic = network.protocol_magic; - return CardanoJNA.INSTANCE.get_address_by_network(mnemonic, index, refNetwork); + return CardanoJNA.INSTANCE.getBaseAddressByNetwork(mnemonic, index, refNetwork); + } + + /** + * + * @param index + * @return enterpriseAddress at index + */ + public String enterpriseAddress(int index) { + Network.ByReference refNetwork = new Network.ByReference(); + refNetwork.network_id = network.network_id; + refNetwork.protocol_magic = network.protocol_magic; + + return CardanoJNA.INSTANCE.getEnterpriseAddressByNetwork(mnemonic, index, refNetwork); } private void generateNew() { - String mnemonic = CardanoJNA.INSTANCE.generate_mnemonic(); + String mnemonic = CardanoJNA.INSTANCE.generateMnemonic(); this.mnemonic = mnemonic; } } diff --git a/src/main/java/com/bloxbean/cardano/client/cli/AccountGeneration.java b/src/main/java/com/bloxbean/cardano/client/cli/AccountGeneration.java index 1f78e6eb..c22273d4 100644 --- a/src/main/java/com/bloxbean/cardano/client/cli/AccountGeneration.java +++ b/src/main/java/com/bloxbean/cardano/client/cli/AccountGeneration.java @@ -1,6 +1,8 @@ package com.bloxbean.cardano.client.cli; +import com.bloxbean.cardano.client.account.Account; import com.bloxbean.cardano.client.jna.CardanoJNA; +import com.bloxbean.cardano.client.util.Networks; import picocli.CommandLine; @CommandLine.Command( @@ -15,21 +17,30 @@ public class AccountGeneration implements Runnable { @CommandLine.Option(names = {"-t", "--total"}, description = "Total number of accounts to generate") private int total; + @CommandLine.Option(names = {"-ea", "--enterprise-address"}, description = "Generate enterprise address") + private boolean entAddress; + @Override public void run() { if (network == null || network.trim().length() == 0) network = "mainnet"; - String mnemonic = CardanoJNA.INSTANCE.generate_mnemonic(); + Account account = null; + + if("testnet".equals(network)) { + account = new Account(Networks.testnet()); + } else { + account = new Account(); + } + + String mnemonic = account.mnemonic(); System.out.println("Mnemonic : " + mnemonic); for (int i = 0; i <= total; i++) { - if ("testnet".equals(network)) { - String baseAddress = CardanoJNA.INSTANCE.get_address(mnemonic, i, true); - System.out.println("Address-" + i + ": " + baseAddress); - } else { - String baseAddress = CardanoJNA.INSTANCE.get_address(mnemonic, i, false); - System.out.println("Address-" + i + ": " + baseAddress); + System.out.println(" "); + System.out.println("Base Address-" + i + ": " + account.baseAddress(i)); + if(entAddress) { + System.out.println("Ent Address -" + i + ": " + account.enterpriseAddress(i)); } } } diff --git a/src/main/java/com/bloxbean/cardano/client/cli/FromMnemonic.java b/src/main/java/com/bloxbean/cardano/client/cli/FromMnemonic.java index b6e9e166..f047c376 100644 --- a/src/main/java/com/bloxbean/cardano/client/cli/FromMnemonic.java +++ b/src/main/java/com/bloxbean/cardano/client/cli/FromMnemonic.java @@ -1,6 +1,8 @@ package com.bloxbean.cardano.client.cli; +import com.bloxbean.cardano.client.account.Account; import com.bloxbean.cardano.client.jna.CardanoJNA; +import com.bloxbean.cardano.client.util.Networks; import picocli.CommandLine; @CommandLine.Command( @@ -18,18 +20,26 @@ public class FromMnemonic implements Runnable { @CommandLine.Option(names = {"-t", "--total"}, description = "Total number of accounts to generate") private int total; + @CommandLine.Option(names = {"-ea", "--enterprise-address"}, description = "Generate enterprise address") + private boolean entAddress; + @Override public void run() { if (network == null || network.trim().length() == 0) network = "mainnet"; + Account account = null; + if("testnet".equals(network)) { + account = new Account(Networks.testnet(), mnemonic); + } else { + account = new Account(mnemonic); + } + for (int i = 0; i <= total; i++) { - if ("testnet".equals(network)) { - String baseAddress = CardanoJNA.INSTANCE.get_address(mnemonic, i, true); - System.out.println("Address-" + i + ": " + baseAddress); - } else { - String baseAddress = CardanoJNA.INSTANCE.get_address(mnemonic, i, false); - System.out.println("Address-" + i + ": " + baseAddress); + System.out.println(" "); + System.out.println("Base Address-" + i + ": " + account.baseAddress(i)); + if(entAddress) { + System.out.println("Ent Address -" + i + ": " + account.enterpriseAddress(i)); } } } diff --git a/src/main/java/com/bloxbean/cardano/client/jna/CardanoJNA.java b/src/main/java/com/bloxbean/cardano/client/jna/CardanoJNA.java index 64db2ddb..68611f69 100644 --- a/src/main/java/com/bloxbean/cardano/client/jna/CardanoJNA.java +++ b/src/main/java/com/bloxbean/cardano/client/jna/CardanoJNA.java @@ -10,7 +10,9 @@ public interface CardanoJNA extends Library { Native.load(LibraryUtil.getCardanoWrapperLib(), CardanoJNA.class); - public String get_address(String phrase, int index, boolean isTestnet); - public String get_address_by_network(String phrase, int index, Network.ByReference network); - public String generate_mnemonic(); + public String getBaseAddress(String phrase, int index, boolean isTestnet); + public String getBaseAddressByNetwork(String phrase, int index, Network.ByReference network); + public String getEnterpriseAddress(String phrase, int index, boolean isTestnet); + public String getEnterpriseAddressByNetwork(String phrase, int index, Network.ByReference network); + public String generateMnemonic(); } diff --git a/src/test/java/com/bloxbean/cardano/client/CardanoJNATest.java b/src/test/java/com/bloxbean/cardano/client/CardanoJNATest.java index e97377b7..1ca0a0c7 100644 --- a/src/test/java/com/bloxbean/cardano/client/CardanoJNATest.java +++ b/src/test/java/com/bloxbean/cardano/client/CardanoJNATest.java @@ -27,52 +27,95 @@ static void setup() { String phrase24W = "coconut you order found animal inform tent anxiety pepper aisle web horse source indicate eyebrow viable lawsuit speak dragon scheme among animal slogan exchange"; - String getPhrase24WAddress0 = "addr1qxsaa6czesrzwp45rd5flg86n5hnwhz5setqfyt39natwvsl5mr3vkp82y2kcwxxtu4zjcxvm80ttmx2hyeyjka4v8ps7zwsra"; - String getPhrase24WAddress1 = "addr1q93jwnn3hvgcuv02tqe08lpdkxxpmvapxgjxwewya47tqsgl5mr3vkp82y2kcwxxtu4zjcxvm80ttmx2hyeyjka4v8ps4zthxn"; - String getPhrase24WAddress2 = "addr1q8pr30ykyfa3pw6qkkun3dyyxsvftq3xukuyxdt58pxcpxgl5mr3vkp82y2kcwxxtu4zjcxvm80ttmx2hyeyjka4v8ps4qp6cs"; - String getPhrase24WAddress3 = "addr1qxa5pll82u8lqtzqjqhdr828medvfvezv4509nzyuhwt5aql5mr3vkp82y2kcwxxtu4zjcxvm80ttmx2hyeyjka4v8psy8jsmy"; + String baseAddress0 = "addr1qxsaa6czesrzwp45rd5flg86n5hnwhz5setqfyt39natwvsl5mr3vkp82y2kcwxxtu4zjcxvm80ttmx2hyeyjka4v8ps7zwsra"; + String baseAddress1 = "addr1q93jwnn3hvgcuv02tqe08lpdkxxpmvapxgjxwewya47tqsgl5mr3vkp82y2kcwxxtu4zjcxvm80ttmx2hyeyjka4v8ps4zthxn"; + String baseAddress2 = "addr1q8pr30ykyfa3pw6qkkun3dyyxsvftq3xukuyxdt58pxcpxgl5mr3vkp82y2kcwxxtu4zjcxvm80ttmx2hyeyjka4v8ps4qp6cs"; + String baseAddress3 = "addr1qxa5pll82u8lqtzqjqhdr828medvfvezv4509nzyuhwt5aql5mr3vkp82y2kcwxxtu4zjcxvm80ttmx2hyeyjka4v8psy8jsmy"; - String testnetAddress0 = "addr_test1qzsaa6czesrzwp45rd5flg86n5hnwhz5setqfyt39natwvsl5mr3vkp82y2kcwxxtu4zjcxvm80ttmx2hyeyjka4v8psa5ns0z"; - String testnetAddress1 = "addr_test1qp3jwnn3hvgcuv02tqe08lpdkxxpmvapxgjxwewya47tqsgl5mr3vkp82y2kcwxxtu4zjcxvm80ttmx2hyeyjka4v8psk5kh2v"; - String getTestnetAddress2 = "addr_test1qrpr30ykyfa3pw6qkkun3dyyxsvftq3xukuyxdt58pxcpxgl5mr3vkp82y2kcwxxtu4zjcxvm80ttmx2hyeyjka4v8pskku650"; + String testnetBaseAddress0 = "addr_test1qzsaa6czesrzwp45rd5flg86n5hnwhz5setqfyt39natwvsl5mr3vkp82y2kcwxxtu4zjcxvm80ttmx2hyeyjka4v8psa5ns0z"; + String testnetBaseAddress1 = "addr_test1qp3jwnn3hvgcuv02tqe08lpdkxxpmvapxgjxwewya47tqsgl5mr3vkp82y2kcwxxtu4zjcxvm80ttmx2hyeyjka4v8psk5kh2v"; + String testnetBaseAddress2 = "addr_test1qrpr30ykyfa3pw6qkkun3dyyxsvftq3xukuyxdt58pxcpxgl5mr3vkp82y2kcwxxtu4zjcxvm80ttmx2hyeyjka4v8pskku650"; + + String entAddress0 = "addr1vxsaa6czesrzwp45rd5flg86n5hnwhz5setqfyt39natwvstf7k4n"; + String entAddress1 = "addr1v93jwnn3hvgcuv02tqe08lpdkxxpmvapxgjxwewya47tqsg7davae"; + String entAddress2 = "addr1v8pr30ykyfa3pw6qkkun3dyyxsvftq3xukuyxdt58pxcpxgvddj89"; + + String testnetEntAddress0 = "addr_test1vzsaa6czesrzwp45rd5flg86n5hnwhz5setqfyt39natwvssp226k"; + String testnetEntAddress1 = "addr_test1vp3jwnn3hvgcuv02tqe08lpdkxxpmvapxgjxwewya47tqsg99fsju"; + String testnetEntAddress2 = "addr_test1vrpr30ykyfa3pw6qkkun3dyyxsvftq3xukuyxdt58pxcpxgh9ewg"; @Test public void testGetBaseAddressFromMnemonicIndex_0() { - String baseAddress = CardanoJNA.INSTANCE.get_address(phrase24W, 0, false); + String baseAddress = CardanoJNA.INSTANCE.getBaseAddress(phrase24W, 0, false); System.out.println(baseAddress); - Assertions.assertEquals(getPhrase24WAddress0, baseAddress); + Assertions.assertEquals(baseAddress0, baseAddress); } @Test public void testGetBaseAddressFromMnemonicIndex_1() { - String baseAddress = CardanoJNA.INSTANCE.get_address(phrase24W, 1, false); + String baseAddress = CardanoJNA.INSTANCE.getBaseAddress(phrase24W, 1, false); System.out.println(baseAddress); - Assertions.assertEquals(getPhrase24WAddress1, baseAddress); + Assertions.assertEquals(baseAddress1, baseAddress); } @Test public void testGetBaseAddressFromMnemonicIndex_2() { - String baseAddress = CardanoJNA.INSTANCE.get_address(phrase24W, 2, false); + String baseAddress = CardanoJNA.INSTANCE.getBaseAddress(phrase24W, 2, false); System.out.println(baseAddress); - Assertions.assertEquals(getPhrase24WAddress2, baseAddress); + Assertions.assertEquals(baseAddress2, baseAddress); } @Test public void generateMnemonic24w() { - String mnemonic = CardanoJNA.INSTANCE.generate_mnemonic(); + String mnemonic = CardanoJNA.INSTANCE.generateMnemonic(); System.out.println(mnemonic); Assertions.assertTrue(mnemonic.length() > 0); } @Test public void testGetBaseAddressFromMnemonicByNetworkInfoMainnet() { - String baseAddress = CardanoJNA.INSTANCE.get_address_by_network(phrase24W, 2, Networks.mainnet()); - Assertions.assertEquals(getPhrase24WAddress2, baseAddress); + String baseAddress = CardanoJNA.INSTANCE.getBaseAddressByNetwork(phrase24W, 2, Networks.mainnet()); + Assertions.assertEquals(baseAddress2, baseAddress); } @Test public void testGetBaseAddressFromMnemonicByNetworkInfoTestnet() { - String baseAddress = CardanoJNA.INSTANCE.get_address_by_network(phrase24W, 1, Networks.testnet()); - Assertions.assertEquals(testnetAddress1, baseAddress); + String baseAddress = CardanoJNA.INSTANCE.getBaseAddressByNetwork(phrase24W, 1, Networks.testnet()); + Assertions.assertEquals(testnetBaseAddress1, baseAddress); + } + + @Test + public void testGetEnterpriseAddressFromMnemonicIndex_0() { + String entAddress = CardanoJNA.INSTANCE.getEnterpriseAddress(phrase24W, 0, false); + System.out.println(entAddress); + Assertions.assertEquals(entAddress0, entAddress); + } + + @Test + public void testGetEnterpriseAddressFromMnemonicIndex_1() { + String entAddress = CardanoJNA.INSTANCE.getEnterpriseAddress(phrase24W, 1, false); + System.out.println(entAddress); + Assertions.assertEquals(entAddress1, entAddress); + } + + @Test + public void testGetEnterpriseAddressFromMnemonicIndex_2() { + String entAddress = CardanoJNA.INSTANCE.getEnterpriseAddress(phrase24W, 2, false); + System.out.println(entAddress); + Assertions.assertEquals(entAddress2, entAddress); + } + + @Test + public void testGetEnterpriseAddressFromMnemonicIndexByNetwork_0() { + String entAddress = CardanoJNA.INSTANCE.getEnterpriseAddressByNetwork(phrase24W, 0, Networks.mainnet()); + System.out.println(entAddress); + Assertions.assertEquals(entAddress0, entAddress); + } + + @Test + public void testGetEnterpriseAddressFromMnemonicIndexByNetwork_1() { + String entAddress = CardanoJNA.INSTANCE.getEnterpriseAddressByNetwork(phrase24W, 1, Networks.mainnet()); + System.out.println(entAddress); + Assertions.assertEquals(entAddress1, entAddress); } } diff --git a/src/main/java/com/bloxbean/cardano/client/TestRun.java b/src/test/java/com/bloxbean/cardano/client/TestRun.java similarity index 93% rename from src/main/java/com/bloxbean/cardano/client/TestRun.java rename to src/test/java/com/bloxbean/cardano/client/TestRun.java index e8b26b00..1a2abd06 100644 --- a/src/main/java/com/bloxbean/cardano/client/TestRun.java +++ b/src/test/java/com/bloxbean/cardano/client/TestRun.java @@ -9,6 +9,7 @@ public static void main(String[] args) { Account account = new Account(Networks.testnet()); System.out.println(account.mnemonic()); System.out.println(account.baseAddress(0)); + System.out.println(account.enterpriseAddress(0)); // String phrase24W = "coconut you order found animal inform tent anxiety pepper aisle web horse source indicate eyebrow viable lawsuit speak dragon scheme among animal slogan exchange"; // String baseAddress = CardanoJNA.INSTANCE.get_address_by_network(phrase24W, 0, Networks.mainnet()); diff --git a/src/test/java/com/bloxbean/cardano/client/account/AccountTest.java b/src/test/java/com/bloxbean/cardano/client/account/AccountTest.java index 5a7c2419..133b1831 100644 --- a/src/test/java/com/bloxbean/cardano/client/account/AccountTest.java +++ b/src/test/java/com/bloxbean/cardano/client/account/AccountTest.java @@ -9,7 +9,7 @@ import static org.junit.jupiter.api.Assertions.*; -class AccountTest { +public class AccountTest { static { String folderPrefix = Platform.getNativeLibraryResourcePrefix(); @@ -74,4 +74,17 @@ void getBaseAddressFromMnemonic_byNetwork() { assertEquals(address0, account.baseAddress(0)); assertEquals(phrase24W, account.mnemonic()); } + + @Test + void getEntAddressFromMnemonic_byNetwork() { + String phrase24W = "coconut you order found animal inform tent anxiety pepper aisle web horse source indicate eyebrow viable lawsuit speak dragon scheme among animal slogan exchange"; + String address0 = "addr_test1vzsaa6czesrzwp45rd5flg86n5hnwhz5setqfyt39natwvssp226k"; + String address1 = "addr_test1vp3jwnn3hvgcuv02tqe08lpdkxxpmvapxgjxwewya47tqsg99fsju"; + + Account account = new Account(Networks.testnet(), phrase24W); + + assertEquals(address0, account.enterpriseAddress(0)); + assertEquals(address1, account.enterpriseAddress(1)); + assertNotNull(account.mnemonic()); + } }