Class Wallet

java.lang.Object
com.codename1.crypto.wallet.Wallet

public final class Wallet extends Object

One wallet across chains, over a Signer. It knows the standard derivation paths, so the addresses it answers are the ones other wallets restore from the same mnemonic:

  • EVM: m/44'/60'/account'/0/index, as MetaMask and Ledger derive
  • Bitcoin: m/purpose'/coin'/account'/change/index with purpose 44 (P2PKH), 49 (P2SH-P2WPKH), 84 (P2WPKH) or 86 (P2TR), and the coin type of the network
  • Solana: m/44'/501'/account'/0', as Phantom and Solflare derive
String words = Mnemonic.generate(128);
Wallet w = Wallet.fromMnemonic(words, "");
EvmAddress eth = w.getEvmAddress(0, 0);
BitcoinAddress btc = w.getBitcoinAddress(BitcoinNetwork.MAINNET, Wallet.BIP84, 0, 0, 0);
SolanaAddress sol = w.getSolanaAddress(0);
EvmTransaction tx = EvmTransaction.eip1559(1, 0, UInt256.parseUnits("1", 9),
        UInt256.parseUnits("30", 9), 21000, eth, UInt256.ZERO, null);
EvmTransaction signed = w.signEvmTransaction(tx, Wallet.evmPath(0, 0));
  • Field Details

  • Constructor Details

    • Wallet

      public Wallet(Signer signer)
      A wallet over a signer.
  • Method Details

    • fromMnemonic

      public static Wallet fromMnemonic(String mnemonic, String passphrase)
      A wallet over an in-memory SeedSigner for a mnemonic.
    • getSigner

      public Signer getSigner()
      The signer.
    • evmPath

      public static DerivationPath evmPath(int account, int index)
      m/44'/60'/account'/0/index.
    • getEvmAddress

      public EvmAddress getEvmAddress(int account, int index)
      The EVM address at an account and index.
    • getEvmAddress

      public EvmAddress getEvmAddress(DerivationPath path)
      The EVM address at a path.
    • signEvmTransaction

      public EvmTransaction signEvmTransaction(EvmTransaction tx, DerivationPath path)
      Signs a transaction with the key at a path, answering the signed transaction.
    • personalSign

      public byte[] personalSign(byte[] message, DerivationPath path)
      An EIP-191 personal_sign signature, r || s || v with v 27 or 28.
    • personalSign

      public byte[] personalSign(String message, DerivationPath path)
      An EIP-191 signature of UTF-8 text.
    • signTypedData

      public byte[] signTypedData(TypedData data, DerivationPath path)
      An EIP-712 signature, r || s || v with v 27 or 28.
    • bitcoinPath

      public static DerivationPath bitcoinPath(BitcoinNetwork network, int purpose, int account, int change, int index)
      m/purpose'/coin'/account'/change/index for a network.
    • getBitcoinAddress

      public BitcoinAddress getBitcoinAddress(BitcoinNetwork network, int purpose, int account, int change, int index)

      The address of the output type a purpose implies, at a path under it.

      Throws
      • IllegalArgumentException: for a purpose other than 44, 49, 84 or 86
    • getBitcoinKey

      public BitcoinKey getBitcoinKey(DerivationPath path)
      The key at a path, for Psbt.sign(int, BitcoinKey); it signs through the signer.
    • signPsbt

      public int signPsbt(Psbt psbt)
      Signs every PSBT input whose recorded BIP-32 origin is this wallet's master, answering how many inputs were signed. The PSBT's creator records the origins (Psbt.addBip32Derivation(int, byte[], int, long[]), Psbt.addTapBip32Derivation(int, byte[], int, long[])), as every wallet does.
    • solanaPath

      public static DerivationPath solanaPath(int account)
      m/44'/501'/account'/0'.
    • getSolanaAddress

      public SolanaAddress getSolanaAddress(int account)
      The Solana address of an account.
    • getSolanaAddress

      public SolanaAddress getSolanaAddress(DerivationPath path)
      The Solana address at a path.
    • signSolanaTransaction

      public void signSolanaTransaction(SolanaTransaction tx, DerivationPath path)
      Adds the signature of the key at a path to a transaction it must sign.
    • signSolanaTransaction

      public void signSolanaTransaction(SolanaTransaction tx, int account)
      Adds the signature of an account's key.