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