How to create Stellar Muxed accounts using java-stellar-sdk

How to create Stellar Muxed accounts using java-stellar-sdk

Manage alerts

Loading saved threads...

user1609897 · External communityPost link
External question — Stellar Stack Exchange Author: user1609897 Original post: https://stellar.stackexchange.com/questions/5995 License: CC BY-SA 4.0 — https://creativecommons.org/licenses/by-sa/4.0/ Adaptation: HTML converted to plain text; contact email addresses removed. How to create Stellar Muxed accounts using java-stellar-sdk-0.31.0.jar, I want to create Muxed account with id 1 from custodian account GBMHTX6VOIIS4FNQSMTSWVHCMVCJXTTNXTIY3SBXI5K4NLDCTV5CJLZE attached my code, I get result but seems very long muxed account, can you please help on this? public static String createMuxedAccount(String custacc) throws Exception { MuxedAccount.MuxedAccountMed25519 accountMed25519 = new MuxedAccount.MuxedAccountMed25519(); accountMed25519.setEd25519(new Uint256(custacc.getBytes())); accountMed25519.setId(new Uint64(1L)); MuxedAccount muxedAccount = new MuxedAccount(); muxedAccount.setDiscriminant(CryptoKeyType.KEY_TYPE_MUXED_ED25519); muxedAccount.setMed25519(accountMed25519); AccountConverter accountConverter = AccountConverter.enableMuxed(); String muxedAccountrep = accountConverter.decode(muxedAccount); System.out.println(muxedAccountrep); return muxedAccountrep; } String destination = createMuxedAccount("GBMHTX6VOIIS4FNQSMTSWVHCMVCJXTTNXTIY3SBXI5K4NLDCTV5CJLZE"); MBDUETKIKRMDMVSPJFEVGNCGJZIVGTKUKNLVMSCDJVLEGSSYKRKE4WCUJFMTGU2CLBETKSZUJZGEIQ2UKY2UGSSMLJCQAAAAAAAAAAABNKZA when I use that generated Muxed account the transaction fail: tx_failed [op_no_destination] package com.example.DemoGraphQL.services; import org.springframework.stereotype.Service; import org.stellar.sdk.*; import org.stellar.sdk.Memo; import org.stellar.sdk.Transaction; import org.stellar.sdk.responses.AccountResponse; import org.stellar.sdk.responses.SubmitTransactionResponse; import org.stellar.sdk.xdr.*; import java.io.ByteArrayInputStream; import java.io.ByteArrayOutputStream; import java.nio.charset.StandardCharsets; @Service public class StellarServices { public static void main(String[] args) throws Exception { sendTransaction(); } public static String createMuxedAccount(String custacc) throws Exception { MuxedAccount.MuxedAccountMed25519 accountMed25519 = new MuxedAccount.MuxedAccountMed25519(); accountMed25519.setEd25519(new Uint256(custacc.getBytes())); accountMed25519.setId(new Uint64(1L)); MuxedAccount muxedAccount = new MuxedAccount(); muxedAccount.setDiscriminant(CryptoKeyType.KEY_TYPE_MUXED_ED25519); muxedAccount.setMed25519(accountMed25519); AccountConverter accountConverter = AccountConverter.enableMuxed(); String muxedAccountrep = accountConverter.decode(muxedAccount); return muxedAccountrep; } public static void sendTransaction() throws Exception { Server server = new Server("https://horizon-testnet.stellar.org"); KeyPair source = KeyPair.fromSecretSeed("SC3TVXXRGKXX5ATKLNLZZGHS642MAKFMSU7CYTY55XE3NNBFLJS45TXY"); String destination = createMuxedAccount("GBMHTX6VOIIS4FNQSMTSWVHCMVCJXTTNXTIY3SBXI5K4NLDCTV5CJLZE"); AccountResponse sourceAccount = server.accounts().account(source.getAccountId()); // Start building the transaction. Transaction transaction = new Transaction.Builder( sourceAccount, Network.TESTNET) .addOperation(new PaymentOperation.Builder(destination, new AssetTypeNative(), "10").build()) // A memo allows you to add your own metadata to a transaction. It's // optional and does not affect how Stellar treats the transaction. .addMemo(Memo.text("Test Transaction")) // Wait a maximum of three minutes for the transaction .setTimeout(180) // Set the amount of lumens you're willing to pay per operation to submit your transaction .setBaseFee(Transaction.MIN_BASE_FEE) .build(); // Sign the transaction to prove you are actually the person sending it. transaction.sign(source); // And finally, send it off to Stellar! try { SubmitTransactionResponse response = server.submitTransaction(transaction); System.out.println(response.getHash()); System.out.println(response.getExtras().getResultCodes().getTransactionResultCode()); System.out.println(response.getExtras().getResultCodes().getOperationsResultCodes()); System.out.println(response.getExtras().getResultXdr()); } catch (Exception e) { System.out.println("Something went wrong!"); System.out.println(e.getMessage()); } } } There is no clear Java example , like in javascript it's very easy like following new sdk.MuxedAccount(custodianAcc, "1") or const StellarBase = require("stellar-base"); let baseAccount = new StellarBase.Account("GBMHTX6VOIIS4FNQSMTSWVHCMVCJXTTNXTIY3SBXI5K4NLDCTV5CJLZE", '1'); const mux = new StellarBase.MuxedAccount(baseAccount, '0'); console.log(JSON.stringify(mux)) and response is : {"account":{"_accountId":"GBMHTX6VOIIS4FNQSMTSWVHCMVCJXTTNXTIY3SBXI5K4NLDCTV5CJLZE","sequence":"1"},"_muxedXdr":{"_switch":{"name":"keyTypeMuxedEd25519","value":256},"_arm":"med25519","_value":{"_attributes":{"id":{"low":0,"high":0,"unsigned":true},"ed25519":{"type":"Buffer","data":[88,121,223,213,114,17,46,21,176,147,39,43,84,226,101,68,155,206,109,188,209,141,200,55,71,85,198,172,98,157,122,36]}}}},"_mAddress":"MBMHTX6VOIIS4FNQSMTSWVHCMVCJXTTNXTIY3SBXI5K4NLDCTV5CIAAAAAAAAAAAAASPS","_id":"0"} in Python it's also clear account_id = "GAQAA5L65LSYH7CQ3VTJ7F3HHLGCL3DSLAR2Y47263D56MNNGHSQSTVY" account_muxed_id = 1234 account_muxed = "MAQAA5L65LSYH7CQ3VTJ7F3HHLGCL3DSLAR2Y47263D56MNNGHSQSAAAAAAAAAAE2LP26" # generate account_muxed muxed = MuxedAccount(account=account_id, account_muxed_id=1234) I tried to follow js & the java sdk unit tests documentation: here : 1- https://developers.stellar.org/docs/glossary/muxed-accounts/#what-happens-if-i-get-errors-when-using-muxed-accounts 2- https://github.com/stellar/stellar-protocol/blob/master/core/cap-0027.md 3- https://github.com/stellar/java-stellar-sdk/blob/master/src/test/java/org/stellar/sdk/OperationTest.java
Quote
Report
user1609897 · External communityPost link
External answer — Stellar Stack Exchange Author: user1609897 Original post: https://stellar.stackexchange.com/a/5996 License: CC BY-SA 4.0 — https://creativecommons.org/licenses/by-sa/4.0/ Adaptation: HTML converted to plain text; contact email addresses removed. I was able to get the Muxed account ID with the length that looks normal MBMHTX6VOIIS4FNQSMTSWVHCMVCJXTTNXTIY3SBXI5K4NLDCTV5CIAAAAAAAAAAAAEC6S Solved by: changing accountMed25519.setEd25519(new Uint256(custacc.getBytes())); to accountMed25519.setEd25519(new Uint256(KeyPair.fromAccountId(custacc).getPublicKey())); on the method createMuxedAccount ; here is the new method body: public static String createMuxedAccount(String custacc) throws Exception { MuxedAccount.MuxedAccountMed25519 accountMed25519 = new MuxedAccount.MuxedAccountMed25519(); accountMed25519.setEd25519(new Uint256(KeyPair.fromAccountId(custacc).getPublicKey())); accountMed25519.setId(new Uint64(1L)); MuxedAccount muxedAccount = new MuxedAccount(); muxedAccount.setDiscriminant(CryptoKeyType.KEY_TYPE_MUXED_ED25519); muxedAccount.setMed25519(accountMed25519); AccountConverter accountConverter = AccountConverter.enableMuxed(); String muxedAccountrep = accountConverter.decode(muxedAccount); System.out.println(muxedAccountrep); return muxedAccountrep; } I found there are many ways to generate muxed accounts based on what you want to use: from secret, public key string, KeyPair etc.. KeyPair keyPairFromSecret = KeyPair.fromSecretSeed("SC3TVXXRGKXX5ATKLNLZZGHS642MAKFMSU7CYTY55XE3NNBFLJS45TXY"); KeyPair keyPairFromAccountID = KeyPair.fromAccountId("GBMHTX6VOIIS4FNQSMTSWVHCMVCJXTTNXTIY3SBXI5K4NLDCTV5CJLZE"); Uint256 uint256 = new Uint256(); uint256.setUint256(KeyPair.fromAccountId("GBMHTX6VOIIS4FNQSMTSWVHCMVCJXTTNXTIY3SBXI5K4NLDCTV5CJLZE").getPublicKey()); // need to copy StrKey.java from stellar SDK + Google Juava Uint256 uint2561FromAccountid = StrKey.encodeToXDRMuxedAccount("GBMHTX6VOIIS4FNQSMTSWVHCMVCJXTTNXTIY3SBXI5K4NLDCTV5CJLZE").getEd25519(); MuxedAccount muxedAccount = new MuxedAccount(); muxedAccount.setDiscriminant(CryptoKeyType.KEY_TYPE_MUXED_ED25519); MuxedAccount.MuxedAccountMed25519 med = new MuxedAccount.MuxedAccountMed25519(); // all of these are working med.setEd25519(uint2561FromAccountid); med.setEd25519(uint256); med.setEd25519(keyPairFromAccountID.getXdrPublicKey().getEd25519()); med.setEd25519(keyPairFromSecret.getXdrPublicKey().getEd25519()); med.setId(new Uint64(1l)); muxedAccount.setMed25519(med); AccountConverter accountConverter = AccountConverter.enableMuxed(); String muxedAccountrep = accountConverter.decode(muxedAccount); System.out.println(muxedAccountrep);
Quote
Report

Post Reply

Quoted from Forex.com.bd-Editorial External question — Stellar Stack Exchange Author: user1609897 Source score (net votes, not local likes): 0 Original post: https://stellar.stackexchange.com/questions/5995 License: CC BY-SA 4.0 — https://creativecommons.org/licenses/by-sa/4.0/ Adaptation: HTML converted to plain text; contact email addresses removed. How to create Stellar Muxed accounts using java-stellar-sdk-0.31.0.jar, I want to create Muxed account with id 1 from custodian account GBMHTX6VOIIS4FNQSMTSWVHCMVCJXTTNXTIY3SBXI5K4NLDCTV5CJLZE attached my code, I get result but seems very long muxed account, can you please help on this? public static String createMuxedAccount(String custacc) throws Exception { MuxedAccount.MuxedAccountMed25519 accountMed25519 = new MuxedAccount.MuxedAccountMed25519(); accountMed25519.setEd25519(new Uint256(custacc.getBytes())); accountMed25519.setId(new Uint64(1L)); MuxedAccount muxedAccount = new MuxedAccount(); muxedAccount.setDiscriminant(CryptoKeyType.KEY_TYPE_MUXED_ED25519); muxedAccount.setMed25519(accountMed25519); AccountConverter accountConverter = AccountConverter.enableMuxed(); String muxedAccountrep = accountConverter.decode(muxedAccount); System.out.println(muxedAccountrep); return muxedAccountrep; } String destination = createMuxedAccount("GBMHTX6VOIIS4FNQSMTSWVHCMVCJXTTNXTIY3SBXI5K4NLDCTV5CJLZE"); MBDUETKIKRMDMVSPJFEVGNCGJZIVGTKUKNLVMSCDJVLEGSSYKRKE4WCUJFMTGU2CLBETKSZUJZGEIQ2UKY2UGSSMLJCQAAAAAAAAAAABNKZA when I use that generated Muxed account the transaction fail: tx_failed [op_no_destination] package com.example.DemoGraphQL.services; import org.springframework.stereotype.Service; import org.stellar.sdk.*; import org.stellar.sdk.Memo; import org.stellar.sdk.Transaction; import org.stellar.sdk.responses.AccountResponse; import org.stellar.sdk.responses.SubmitTransactionResponse; import org.stellar.sdk.xdr.*; import java.io.ByteArrayInputStream; import java.io.ByteArrayOutputStream; import java.nio.charset.StandardCharsets; @Service public class StellarServices { public static void main(String[] args) throws Exception { sendTransaction(); } public static String createMuxedAccount(String custacc) throws Exception { MuxedAccount.MuxedAccountMed25519 accountMed25519 = new MuxedAccount.MuxedAccountMed25519(); accountMed25519.setEd25519(new Uint256(custacc.getBytes())); accountMed25519.setId(new Uint64(1L)); MuxedAccount muxedAccount = new MuxedAccount(); muxedAccount.setDiscriminant(CryptoKeyType.KEY_TYPE_MUXED_ED25519); muxedAccount.setMed25519(accountMed25519); AccountConverter accountConverter = AccountConverter.enableMuxed(); String muxedAccountrep = accountConverter.decode(muxedAccount); return muxedAccountrep; } public static void sendTransaction() throws Exception { Server server = new Server("https://horizon-testnet.stellar.org"); KeyPair source = KeyPair.fromSecretSeed("SC3TVXXRGKXX5ATKLNLZZGHS642MAKFMSU7CYTY55XE3NNBFLJS45TXY"); String destination = createMuxedAccount("GBMHTX6VOIIS4FNQSMTSWVHCMVCJXTTNXTIY3SBXI5K4NLDCTV5CJLZE"); AccountResponse sourceAccount = server.accounts().account(source.getAccountId()); // Start building the transaction. Transaction transaction = new Transaction.Builder( sourceAccount, Network.TESTNET) .addOperation(new PaymentOperation.Builder(destination, new AssetTypeNative(), "10").build()) // A memo allows you to add your own metadata to a transaction. It's // optional and does not affect how Stellar treats the transaction. .addMemo(Memo.text("Test Transaction")) // Wait a maximum of three minutes for the transaction .setTimeout(180) // Set the amount of lumens you're willing to pay per operation to submit your transaction .setBaseFee(Transaction.MIN_BASE_FEE) .build(); // Sign the transaction to prove you are actually the person sending it. transaction.sign(source); // And finally, send it off to Stellar! try { SubmitTransactionResponse response = server.submitTransaction(transaction); System.out.println(response.getHash()); System.out.println(response.getExtras().getResultCodes().getTransactionResultCode()); System.out.println(response.getExtras().getResultCodes().getOperationsResultCodes()); System.out.println(response.getExtras().getResultXdr()); } catch (Exception e) { System.out.println("Something went wrong!"); System.out.println(e.getMessage()); } } } There is no clear Java example , like in javascript it's very easy like following new sdk.MuxedAccount(custodianAcc, "1") or const StellarBase = require("stellar-base"); let baseAccount = new StellarBase.Account("GBMHTX6VOIIS4FNQSMTSWVHCMVCJXTTNXTIY3SBXI5K4NLDCTV5CJLZE", '1'); const mux = new StellarBase.MuxedAccount(baseAccount, '0'); console.log(JSON.stringify(mux)) and response is : {"account":{"_accountId":"GBMHTX6VOIIS4FNQSMTSWVHCMVCJXTTNXTIY3SBXI5K4NLDCTV5CJLZE","sequence":"1"},"_muxedXdr":{"_switch":{"name":"keyTypeMuxedEd25519","value":256},"_arm":"med25519","_value":{"_attributes":{"id":{"low":0,"high":0,"unsigned":true},"ed25519":{"type":"Buffer","data":[88,121,223,213,114,17,46,21,176,147,39,43,84,226,101,68,155,206,109,188,209,141,200,55,71,85,198,172,98,157,122,36]}}}},"_mAddress":"MBMHTX6VOIIS4FNQSMTSWVHCMVCJXTTNXTIY3SBXI5K4NLDCTV5CIAAAAAAAAAAAAASPS","_id":"0"} in Python it's also clear account_id = "GAQAA5L65LSYH7CQ3VTJ7F3HHLGCL3DSLAR2Y47263D56MNNGHSQSTVY" account_muxed_id = 1234 account_muxed = "MAQAA5L65LSYH7CQ3VTJ7F3HHLGCL3DSLAR2Y47263D56MNNGHSQSAAAAAAAAAAE2LP26" # generate account_muxed muxed = MuxedAccount(account=account_id, account_muxed_id=1234) I tried to follow js & the java sdk unit tests documentation: here : 1- https://developers.stellar.org/docs/glossary/muxed-accounts/#what-happens-if-i-get-errors-when-using-muxed-accounts 2- https://github.com/stellar/stellar-protocol/blob/master/core/cap-0027.md 3- https://github.com/stellar/java-stellar-sdk/blob/master/src/test/java/org/stellar/sdk/OperationTest.java

Cancel quote

Checking account access…