Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
33 commits
Select commit Hold shift + click to select a range
e4577ed
feat(ts): add multisig permission management
Jul 23, 2026
6200e2d
feat(ts): add local multisig signing workflow
Jul 23, 2026
8d2d4bd
feat(ts): add TronLink multisig collaboration
Jul 23, 2026
1d50d60
feat(ts): add GasFree transfer workflow
Jul 23, 2026
1653dd7
feat(ts): add account lifecycle commands
Jul 23, 2026
6ad21b0
feat(ts): add secure recipient contacts
Jul 23, 2026
ae7b2e1
feat(ts): add local address utilities
Jul 23, 2026
dfe4a27
feat(ts): add terminal receive QR
Jul 23, 2026
ca9bf97
fix(ts): expose v0.1.2 commands in help
Jul 23, 2026
9e3aa58
fix(ts): parse numeric transaction options
Jul 23, 2026
5292cb2
fix(ts): accept unsigned multisig weight defaults
Jul 23, 2026
c50fd85
Merge pull request #1 from grayfoxd/feat/ts-signing-commands
grayfoxd Jul 27, 2026
0f9d021
Merge pull request #961 from grayfoxd/feat/ts-v0.3.0
gummy789j Jul 27, 2026
13b8888
refactor(ts): separate TRON signing and multisig workflows
gummy789j Jul 28, 2026
c2cf2b8
docs(ts): document v0.3.0 commands and prepare 4.11.0
gummy789j Jul 28, 2026
1e06852
fix(ts): use accurate TRON operation labels
gummy789j Jul 28, 2026
bc35f0a
feat(ts): add standalone cross-platform releases
Jul 29, 2026
a15f1ee
fix(ts): support fsync on Windows
Jul 29, 2026
78fc56c
fix(ts): support Windows interactive terminals
Jul 29, 2026
696b93a
fix(ts): share Windows wallet root across shells
Jul 29, 2026
2452399
fix(ts): normalize Git Bash user profile
Jul 29, 2026
6111f76
fix(ts): publish standalone executable safely
Jul 29, 2026
701ef28
Merge branch 'tronprotocol:feat/ts-v4.11.0' into feat/ts-v4.11.0
grayfoxd Jul 30, 2026
f616a3a
Merge pull request #2 from grayfoxd/feat/ts-v4.11.0
grayfoxd Jul 30, 2026
3cf0ff3
ci(ts): add pull request quality gates
Jul 30, 2026
89c8ca0
Merge pull request #6 from grayfoxd/ci/ts-workflow
grayfoxd Jul 31, 2026
4ebadf6
fix(ts): use pinned Bun runtime for standalone builds
Jul 31, 2026
2b2e763
ci(ts): build standalone artifacts from develop
Jul 31, 2026
7a19f2e
update readme
Aug 1, 2026
6a2b814
fix(ts): resolve HID addon through Ledger transport
Aug 3, 2026
22277a4
fix(ts): align Linux standalone ABI baseline
Aug 3, 2026
83d7099
feat(ts): add Linux Ledger test container
Aug 3, 2026
7379d3e
Merge branch 'feat/standalone' into feat/ts-v4.11.0
grayfoxd Aug 6, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
63 changes: 63 additions & 0 deletions .github/workflows/ts-ci.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,63 @@
name: TypeScript CI

on:
pull_request:
branches:
- develop
push:
branches:
- develop
workflow_dispatch:

permissions:
contents: read

concurrency:
group: ts-ci-${{ github.event.pull_request.number || github.ref }}
cancel-in-progress: true

jobs:
quality:
name: Quality / Node ${{ matrix.node }}
runs-on: ubuntu-24.04
timeout-minutes: 20

strategy:
fail-fast: false
matrix:
node:
- "22"
- "24"

defaults:
run:
working-directory: ts

steps:
- name: Checkout
uses: actions/checkout@v7

- name: Set up Node.js
uses: actions/setup-node@v6
with:
node-version: ${{ matrix.node }}
cache: npm
cache-dependency-path: ts/package-lock.json

- name: Install locked dependencies
run: npm ci

- name: Check architecture boundaries
run: npm run depcruise

- name: Type-check
run: npm run typecheck

- name: Run tests
run: npm test

- name: Build npm bundle
run: npm run build

- name: Validate npm package contents
run: npm pack --dry-run
228 changes: 228 additions & 0 deletions .github/workflows/ts-standalone-release.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,228 @@
name: TypeScript Standalone Artifacts

on:
push:
branches:
- develop
workflow_dispatch:

permissions:
contents: read

env:
NODE_VERSION: "20"

jobs:
quality:
name: TypeScript quality gates
runs-on: ubuntu-24.04
defaults:
run:
working-directory: ts

steps:
- name: Checkout
uses: actions/checkout@v4

- name: Set up Node.js
uses: actions/setup-node@v4
with:
node-version: ${{ env.NODE_VERSION }}
cache: npm
cache-dependency-path: ts/package-lock.json

- name: Install dependencies
run: npm ci

- name: Check architecture boundaries
run: npm run depcruise

- name: Type-check
run: npm run typecheck

- name: Test
run: npm test

- name: Build npm bundle
run: npm run build

binaries:
name: ${{ matrix.asset }}
needs: quality
strategy:
fail-fast: false
matrix:
include:
- os: ubuntu-22.04
target: bun-linux-x64-baseline
asset: linux-x64
executable: wallet-cli
archive: tar.gz
glibc_max: "2.35"
- os: ubuntu-22.04-arm
target: bun-linux-arm64
asset: linux-arm64
executable: wallet-cli
archive: tar.gz
glibc_max: "2.35"
- os: macos-15-intel
target: bun-darwin-x64
asset: macos-x64
executable: wallet-cli
archive: tar.gz
- os: macos-15
target: bun-darwin-arm64
asset: macos-arm64
executable: wallet-cli
archive: tar.gz
- os: windows-2022
target: bun-windows-x64-baseline
asset: windows-x64
executable: wallet-cli.exe
archive: zip
runs-on: ${{ matrix.os }}
defaults:
run:
working-directory: ts

steps:
- name: Checkout
uses: actions/checkout@v4

- name: Set up Node.js
uses: actions/setup-node@v4
with:
node-version: ${{ env.NODE_VERSION }}
cache: npm
cache-dependency-path: ts/package-lock.json

- name: Install dependencies
run: npm ci

- name: Build standalone executable
run: >-
npm run build:standalone --
--target ${{ matrix.target }}
--outfile standalone/${{ matrix.executable }}

- name: Verify executable and embedded Ledger addon
run: node scripts/verify-standalone.mjs standalone/${{ matrix.executable }}

- name: Verify Linux ABI baseline
if: runner.os == 'Linux'
shell: bash
env:
MAX_GLIBC: ${{ matrix.glibc_max }}
run: |
set -euo pipefail
executable="standalone/${{ matrix.executable }}"
native_addon="$(
./node_modules/.bin/bun -e \
'import { resolveNodeHidAddon } from "./scripts/standalone/resolve-node-hid-addon.ts"; console.log(resolveNodeHidAddon().nativeAddon)'
)"
host_glibc="$(getconf GNU_LIBC_VERSION | awk '{print $2}')"

if [[ "${host_glibc}" != "${MAX_GLIBC}" ]]; then
echo "::error::runner glibc ${host_glibc} does not match the supported baseline ${MAX_GLIBC}"
exit 1
fi

required_versions="$(
{
readelf --version-info --wide "${executable}"
readelf --version-info --wide "${native_addon}"
} | grep -oE 'GLIBC_[0-9]+(\.[0-9]+)*' | sed 's/^GLIBC_//' | sort -Vu
)"
highest_required="$(printf '%s\n' "${required_versions}" | tail -n 1)"
highest_version="$(printf '%s\n%s\n' "${MAX_GLIBC}" "${highest_required}" | sort -V | tail -n 1)"

if [[ "${highest_version}" != "${MAX_GLIBC}" ]]; then
echo "::error::Linux artifact requires GLIBC_${highest_required}; maximum allowed is GLIBC_${MAX_GLIBC}"
exit 1
fi

dynamic_dependencies="$(readelf --dynamic --wide "${native_addon}")"
if ! grep -Fq 'Shared library: [libudev.so.1]' <<< "${dynamic_dependencies}"; then
echo "::error::Ledger native addon no longer declares its documented libudev.so.1 dependency"
exit 1
fi

echo "Verified GLIBC_${highest_required} <= GLIBC_${MAX_GLIBC} and libudev.so.1 dependency"

- name: Verify macOS code signature
if: runner.os == 'macOS'
run: codesign --verify --verbose standalone/${{ matrix.executable }}

- name: Package Unix archive
if: matrix.archive == 'tar.gz'
shell: bash
run: |
set -euo pipefail
version="$(node -p "require('./package.json').version")"
package="wallet-cli-${version}-${{ matrix.asset }}"
mkdir -p "standalone-assets/${package}"
cp "standalone/${{ matrix.executable }}" "standalone-assets/${package}/wallet-cli"
cp LICENSE "standalone-assets/${package}/LICENSE"
tar -C standalone-assets -czf "standalone-assets/${package}.tar.gz" "${package}"
rm -r "standalone-assets/${package}"

- name: Package Windows archive
if: matrix.archive == 'zip'
shell: pwsh
run: |
$ErrorActionPreference = "Stop"
$version = node -p "require('./package.json').version"
$package = "wallet-cli-$version-${{ matrix.asset }}"
New-Item -ItemType Directory -Force "standalone-assets/$package" | Out-Null
Copy-Item "standalone/${{ matrix.executable }}" "standalone-assets/$package/wallet-cli.exe"
Copy-Item "LICENSE" "standalone-assets/$package/LICENSE"
Compress-Archive -Path "standalone-assets/$package" -DestinationPath "standalone-assets/$package.zip"
Remove-Item -Recurse "standalone-assets/$package"

- name: Upload platform artifact
uses: actions/upload-artifact@v4
with:
name: wallet-cli-${{ matrix.asset }}
path: ts/standalone-assets/*
if-no-files-found: error
retention-days: 1

artifacts:
name: Publish Actions artifact
needs: binaries
runs-on: ubuntu-24.04
permissions:
artifact-metadata: write
attestations: write
contents: read
id-token: write

steps:
- name: Download binaries
uses: actions/download-artifact@v4
with:
pattern: wallet-cli-*
path: standalone-assets
merge-multiple: true

- name: Create checksums and metadata
shell: bash
run: |
set -euo pipefail
cd standalone-assets
printf 'commit=%s\nref=%s\nrun_id=%s\n' \
"${GITHUB_SHA}" "${GITHUB_REF}" "${GITHUB_RUN_ID}" > BUILD_METADATA.txt
sha256sum BUILD_METADATA.txt wallet-cli-* > SHA256SUMS.txt

- name: Attest standalone archives
uses: actions/attest@v4
with:
subject-checksums: standalone-assets/SHA256SUMS.txt

- name: Upload standalone bundle
uses: actions/upload-artifact@v4
with:
name: wallet-cli-standalone-${{ github.sha }}
path: standalone-assets/*
if-no-files-found: error
retention-days: 30
2 changes: 2 additions & 0 deletions CLAUDE.md
Original file line number Diff line number Diff line change
Expand Up @@ -25,6 +25,8 @@ are used only for secret input (create / import / backup / delete). **All `ts/`
cd ts
npm ci # install
npm run build # bundle to dist/ via tsup (bin: wallet-cli -> dist/index.js)
npm run build:standalone -- --outfile standalone/wallet-cli
# Bun (pinned devDependency) standalone executable for the native OS/CPU
npm run dev -- <args> # run from source via tsx (e.g. npm run dev -- create --label main)
npm test # vitest (tests are co-located as *.test.ts)
npm run typecheck # tsc --noEmit
Expand Down
8 changes: 4 additions & 4 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -24,8 +24,8 @@ Both manage the same kind of wallet on the same networks — your address is ide
| | [**Java**](java/README.md) — the original | [**TypeScript**](ts/README.md) — agent-first rewrite |
| ---------------------- | ------------------------------------------------------------------------------------------------------------------------------------------ | ----------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| **What it is** | The mature, full-feature reference CLI. | A newer rewrite focused on programmatic integration. |
| **Runtime** | JVM — built with Gradle, run as a `.jar`. Uses the [Trident](https://github.com/tronprotocol/trident) SDK. | [Node.js](https://nodejs.org) **20+**. |
| **Install** | `git clone` + `./gradlew build` (see [Setup](java/README.md#setup)) | `npm install -g @tron-walletcli/wallet-cli` |
| **Runtime** | JVM — built with Gradle, run as a `.jar`. Uses the [Trident](https://github.com/tronprotocol/trident) SDK. | Standalone executable, or [Node.js](https://nodejs.org) **20+** for the npm package. |
| **Install** | `git clone` + `./gradlew build` (see [Setup](java/README.md#setup)) | Download from [TypeScript Standalone Artifacts](https://github.com/tronprotocol/wallet-cli/actions/workflows/ts-standalone-release.yml), or `npm install -g @tron-walletcli/wallet-cli`. |
| **How you drive it** | An **interactive prompt only** — start it, then type commands at `>`. | **One-shot subcommands** — `wallet-cli <command>` from your shell. Interactive prompts only for secret input. |
| **Command style** | PascalCase verbs: `RegisterWallet`, `SendCoin`, `GetBalance`. Amounts in **SUN** (1 TRX = 1,000,000 SUN). | Noun-verb subcommands: `create`, `tx send`, `account balance`, with `--flags`. |
| **Output for scripts** | Human-readable text. | Stable JSON via `-o json` ([`wallet-cli.result.v1`](ts/docs/machine-interface.md)) + fixed exit codes (`0`/`1`/`2`). |
Expand Down Expand Up @@ -53,7 +53,7 @@ Full setup (config.conf, connecting to a node), the complete A–Z command list,

## TypeScript — get a taste

Install from npm, then run subcommands directly from your shell:
Download the standalone executable from [TypeScript Standalone Artifacts](https://github.com/tronprotocol/wallet-cli/actions/workflows/ts-standalone-release.yml), or install from npm when Node.js 20+ is already available. Then run subcommands directly from your shell:

```console
$ npm install -g @tron-walletcli/wallet-cli
Expand All @@ -73,4 +73,4 @@ Every command has a reference page, and the JSON contract, exit codes, and agent

- **Scripting, CI, or building an AI agent?** → the [TypeScript version](ts/README.md) — the JSON envelope and deterministic exit codes exist for exactly this.
- **Working interactively and want the complete TRON toolkit** — GasFree, TRC10 issuance, on-chain DEX/governance, or multi-sig? → the [Java version](java/README.md).
- **Just sending TRX/tokens or staking from your own machine?** → either works; the TypeScript CLI is the lighter install (`npm install -g`, no build step).
- **Just sending TRX/tokens or staking from your own machine?** → either works; the TypeScript CLI can run from a downloaded executable with no runtime installation.
2 changes: 1 addition & 1 deletion java/src/main/java/org/tron/common/utils/Utils.java
Original file line number Diff line number Diff line change
Expand Up @@ -138,7 +138,7 @@ public class Utils {

public static final int MIN_LENGTH = 2;
public static final int MAX_LENGTH = 14;
public static final String VERSION = " v4.10.1";
public static final String VERSION = " v4.11.0";
public static final String TRANSFER_METHOD_ID = "a9059cbb";

private static SecureRandom random = new SecureRandom();
Expand Down
10 changes: 10 additions & 0 deletions ts/.dockerignore
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
node_modules/
dist/
standalone/
standalone-assets/
release-assets/
.wallet-cli/
.private/
.env
*.log

4 changes: 3 additions & 1 deletion ts/.gitignore
Original file line number Diff line number Diff line change
@@ -1,7 +1,9 @@
node_modules/
dist/
/standalone/
/release-assets/
*.log
.wallet-cli/
.env
.private/
docs/superpowers
docs/superpowers
Loading