Skip to content

GalaxySciTech/tokencore

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

194 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Tokencore

Multi-chain cryptocurrency wallet core library for Java

Build Status JitPack Issues Pull Requests Contributors License

Supported Chains  •  Quick Start  •  Integration  •  Offline Signing  •  Contact


Introduction

Tokencore is a lightweight Java library that provides core wallet functionality for multiple blockchains. It handles HD wallet derivation, encrypted keystore management, and offline transaction signing — making it the ideal building block for exchange backends and custodial wallet services.

For a complete exchange wallet backend built on top of Tokencore, see java-wallet.

Supported Chains

Chain Token Standards Features
Bitcoin BTC, OMNI UTXO management, SegWit (P2WPKH)
Ethereum ETH, ERC-20 Offline signing, nonce management
TRON TRX, TRC-20 Transaction signing
Bitcoin Cash BCH CashAddr format
Bitcoin SV BSV Transaction signing
Litecoin LTC Transaction signing
Dogecoin DOGE Transaction signing
Dash DASH Transaction signing
Filecoin FIL Transaction signing

Requirements

  • Java 8 or higher
  • Gradle 8.5+ (included via wrapper, no manual install needed)

Integration

Gradle

repositories {
    maven { url 'https://jitpack.io' }
}
dependencies {
    implementation 'com.github.galaxyscitech:tokencore:1.3.0'
}

Maven

<repositories>
    <repository>
        <id>jitpack.io</id>
        <url>https://jitpack.io</url>
    </repository>
</repositories>

<dependency>
    <groupId>com.github.galaxyscitech</groupId>
    <artifactId>tokencore</artifactId>
    <version>1.3.0</version>
</dependency>

Quick Start

1. Initialize Keystore & Identity

WalletManager.storage = new KeystoreStorage() {
    @Override
    public File getKeystoreDir() {
        return new File("/path/to/keystore");
    }
};
WalletManager.scanWallets();

String password = "your_password";
Identity identity = Identity.getCurrentIdentity();

if (identity == null) {
    identity = Identity.createIdentity(
        "token", password, "", Network.MAINNET, Metadata.P2WPKH);
}

2. Derive a Wallet

Identity identity = Identity.getCurrentIdentity();
Wallet wallet = identity.deriveWalletByMnemonics(
    ChainType.BITCOIN, "your_password", MnemonicUtil.randomMnemonicCodes());
System.out.println(wallet.getAddress());

Offline Signing

Offline signing creates a digital signature without ever exposing private keys to an online environment.

Bitcoin

// 1. Define transaction parameters
String toAddress = "33sXfhCBPyHqeVsVthmyYonCBshw5XJZn9";
int changeIdx = 0;
long amount = 1000L;
long fee = 555L;

// 2. Collect UTXOs (from your node or a third-party API)
ArrayList<BitcoinTransaction.UTXO> utxos = new ArrayList<>();

// 3. Build and sign
BitcoinTransaction bitcoinTransaction = new BitcoinTransaction(
    toAddress, changeIdx, amount, fee, utxos);
Wallet wallet = WalletManager.findWalletByAddress(
    ChainType.BITCOIN, "33sXfhCBPyHqeVsVthmyYonCBshw5XJZn9");
TxSignResult txSignResult = bitcoinTransaction.signTransaction(
    String.valueOf(ChainId.BITCOIN_MAINNET), "your_password", wallet);
System.out.println(txSignResult.getSignedTx());

Ethereum

EthereumTransaction tx = new EthereumTransaction(
    BigInteger.ZERO,                                    // nonce
    BigInteger.valueOf(20_000_000_000L),                // gasPrice
    BigInteger.valueOf(21_000),                         // gasLimit
    "0xRecipientAddress",                               // to
    BigInteger.valueOf(1_000_000_000_000_000_000L),     // value (1 ETH)
    ""                                                  // data
);

Wallet wallet = WalletManager.findWalletByAddress(
    ChainType.ETHEREUM, "0xYourAddress");
TxSignResult result = tx.signTransaction(
    String.valueOf(ChainId.ETHEREUM_MAINNET), "your_password", wallet);
System.out.println(result.getSignedTx());

TRON

String from = "TJRabPrwbZy45sbavfcjinPJC18kjpRTv8";
String to   = "TF17BgPaZYbz8oxbjhriubPDsA7ArKoLX3";

TronTransaction transaction = new TronTransaction(from, to, 1L);
Wallet wallet = WalletManager.findWalletByAddress(ChainType.TRON, from);
TxSignResult result = transaction.signTransaction(
    "mainnet", "your_password", wallet);
System.out.println(result.getSignedTx());

Build & Test

# Build the library
./gradlew build

# Run the test suite
./gradlew test

Project Structure

src/main/java/org/consenlabs/tokencore/
├── wallet/
│   ├── Identity.java          # HD identity management
│   ├── Wallet.java            # Wallet abstraction
│   ├── WalletManager.java     # Wallet lifecycle & discovery
│   ├── address/               # Chain-specific address generation
│   ├── keystore/              # Encrypted keystore implementations
│   ├── model/                 # ChainType, ChainId, Metadata, etc.
│   ├── network/               # Bitcoin-fork network parameters
│   ├── transaction/           # Offline signing per chain
│   └── validators/            # Address & key validation
└── foundation/
    ├── crypto/                # AES, KDF, hashing primitives
    ├── utils/                 # Mnemonic, numeric, byte helpers
    └── rlp/                   # RLP encoding (Ethereum)

License

This project is licensed under the GNU General Public License v3.0.

Contact


Disclaimer: Tokencore is a functional component for digital currency operations. It is intended primarily for learning and development purposes and does not provide a complete blockchain business solution. Use at your own risk.

About

The core components of the blockchain wallet backend, support a variety of blockchain address generation and offline signatures

Topics

Resources

License

Stars

Watchers

Forks

Packages

 
 
 

Contributors

Languages