From fad7b29c2f0159a5a2fcb570ae2300475595dd91 Mon Sep 17 00:00:00 2001 From: outputlayer Date: Mon, 5 Oct 2026 16:42:44 +0200 Subject: [PATCH 1/4] chore(tokens): refresh GM token list 439 -> 450 from Dune Ondo assets Source: dune.com/queries/5581101 (address_sol). Only symbols that are listed in Ondo /v2/assets AND tradable in session-limits AND verified on-chain (Token-2022, Ondo mint authority) were added: AIon, GOOGon, HTZon, HYDBon, HYGWon, NEARon, RXRXon, SECUon, SYSBon, USHYon, WENon. Skipped: 95 Dune mints not yet listed by Ondo (pre-launch), USDon (stablecoin), SHVon (mint authority is not Ondo's). Supersedes PR #12. Sync doc counts (README, llms.txt, copilot) to 450. Co-Authored-By: Claude Opus 5.5 --- .github/copilot-instructions.md | 2 +- README.md | 2 +- crates/ondo/src/token_list.rs | 13 ++++++++++++- llms.txt | 2 +- 4 files changed, 15 insertions(+), 4 deletions(-) diff --git a/.github/copilot-instructions.md b/.github/copilot-instructions.md index de27ba1..0ecc259 100644 --- a/.github/copilot-instructions.md +++ b/.github/copilot-instructions.md @@ -36,7 +36,7 @@ Cargo workspace: `bin/rwa` (entry point) → `crates/cli` (clap parsing, output) ``` rwa gm hours # Market status -rwa gm list # All 438 tokens +rwa gm list # All 450 tokens rwa gm buy --dry-run # Preview trade (no separate quote command) rwa gm buy/sell -y # Execute trade rwa gm close-all -y # Sell ALL positions (parallel by default; skips dust <$1.50 and temporarily unsellable positions) diff --git a/README.md b/README.md index 26e54e9..f38b00e 100644 --- a/README.md +++ b/README.md @@ -1,6 +1,6 @@ # rwa — Trade Tokenized Stocks on Solana -CLI for buying & selling tokenized stocks and ETFs ([Ondo Global Markets](https://ondo.finance/)) on Solana via Jupiter. 438 tokens — TSLA, AAPL, NVDA, SPY, QQQ, and more. Flagship tokens trade 24/7. +CLI for buying & selling tokenized stocks and ETFs ([Ondo Global Markets](https://ondo.finance/)) on Solana via Jupiter. 450 tokens — TSLA, AAPL, NVDA, SPY, QQQ, and more. Flagship tokens trade 24/7. > **⚠️ Beta (pre-v1).** Breaking changes possible. Not financial advice — use at your own risk, and always preview with `--dry-run` before trading real funds. diff --git a/crates/ondo/src/token_list.rs b/crates/ondo/src/token_list.rs index 607b7c7..9d66a05 100644 --- a/crates/ondo/src/token_list.rs +++ b/crates/ondo/src/token_list.rs @@ -23,7 +23,7 @@ pub fn get_token_list() -> &'static [GmTokenEntry] { &TOKEN_LIST } -/// Static fallback list of Ondo GM tokens (439 tokens). +/// Static fallback list of Ondo GM tokens (450 tokens). /// Tuple: (symbol, solana_mint_address) static GM_TOKENS_STATIC: &[(&str, &str)] = &[ ("AALon", "9wYZetvT8J2ptfsRca5gzLBGvcUug38mp9yT3xaondo"), @@ -44,6 +44,7 @@ static GM_TOKENS_STATIC: &[(&str, &str)] = &[ ("AGon", "hrZ5vs6c6v1iWyvEXjGSHs3sQuuj58VzXikNyRWondo"), ("AIPon", "jmnrdSzu293vKTWyEx3A2ZRVxxytJKW1wD3CLzkondo"), ("AIQon", "uwh6Z6c2F8WZfUSK1A8VBfA9AwJKN5T2bvQwVFLondo"), + ("AIon", "rVMtUyy1ohurejV9qd81y9cPRHNA1A2QqWAErqfondo"), ("ALABon", "cskxd6aqyqJMYgLZmFYfYecWkjasRJDEtm1QVxsondo"), ("ALBon", "B5KufqHkskgGYwMXtL8FSHgREAkMQvE3ykhH5Kmondo"), ("ALOYon", "ndHvUEgrvZquSR6wZv2cG1AiBr7e7HGuWvfPULcondo"), @@ -194,6 +195,7 @@ static GM_TOKENS_STATIC: &[(&str, &str)] = &[ ("GMEon", "aznKt8v32CwYMEcTcB4bGTv8DXWStCpHrcCtyy7ondo"), ("GNRCon", "eqzwohR9oCR6sravF4y5HyUwyvCDbnfSYqiiFrXondo"), ("GOOGLon", "bbahNA5vT9WJeYft8tALrH1LXWffjwqVoUbqYa1ondo"), + ("GOOGon", "jcA9zXHWuTuDFDDDDYJTNhersed1B5etkuB6X9Eondo"), ("GRABon", "m9GcsVgdjaL3KsdtSFHimnhtsUMpTHkjtwEG4Tzondo"), ("GRNDon", "Gc1aT3ay7FXL3qdAW7cNSXYPDsGavy7qiACuxwxondo"), ("GSon", "BchJRy2snmhJZf3rQ9LJ3ePs2BGfYgfvQNo31d2ondo"), @@ -207,8 +209,11 @@ static GM_TOKENS_STATIC: &[(&str, &str)] = &[ ("HOODon", "BVdXGvmgi6A9oAiwWvBvP76fyTqcCNRJMM7zMN6ondo"), ("HPEon", "axbgKgUMscTJ34DjA69kBJuf6UYq4Pzb8B8numYondo"), ("HSAIon", "nagL8iWMNLZVuKFk3bUGDaHyT5ZY4bNfUzsdtGHondo"), + ("HTZon", "QApMAZTHvfhX2dTDzM8AMyAHVyhmPVwj4oY8Jveondo"), ("HUBBon", "ZmiDoowvkpp1Qgx4mmY3qtsHbNV1oE12ApKCbZNondo"), ("HUTon", "f7iz4BQsnjw95EUyFiBKAnKgo7oBrycfzQdtmDwondo"), + ("HYDBon", "71VH3YQkjqqGxzwYvGhsCsJNQYzkMo9Rg72aVxqondo"), + ("HYGWon", "ZKzkbFi4n3NQmRA9i5T7jVPSN2XERwxfHUf4p2pondo"), ("HYGon", "c5ug15fwZRfQhhVa6LHscFY33ebVDHcVCezYpj7ondo"), ("HYSon", "CsN1Tyz467bSFLPGd6MJyZhPNtwDaWZtX8ixHWyondo"), ("IALTon", "gfKuBLive7Q35MYgxPgNx7qx524zQJ9RiDZJFZoondo"), @@ -290,6 +295,7 @@ static GM_TOKENS_STATIC: &[(&str, &str)] = &[ ("MYRGon", "auLvQAhUzPuy2SQBSq2T6AofPGNkR4nZ83P8pjuondo"), ("NATon", "mmy8WbFRNrjoDsPGqpYmzQAVu7PfGhMCdSRLxZLondo"), ("NBISon", "DiRshqNDE68bWbGdLHm1GwQ76MvWQG3af6w1NdQondo"), + ("NEARon", "bD6TafGhPo8NaeKEyge1DrZGAPB5wxK3x4fCpqjondo"), ("NEEon", "t7eN6cGwRMFaZvsNW2SmVwkedmHtDdrxA4ycNE5ondo"), ("NEMon", "Dig28Tf1ufhCBAsjTmFkXCgcNgMqDMYj5A2rDQmondo"), ("NETon", "ZtAY65FCh3YB9H1wkbjRxxY5nXt9VfuTTz3Mzbuondo"), @@ -362,12 +368,14 @@ static GM_TOKENS_STATIC: &[(&str, &str)] = &[ ("RMBSon", "jjnSEAsi8UbCez7x9XCbWntLWRHBdc2tWSdC3uoondo"), ("ROKon", "e83tWWrVsVk1hRGNz5BCwNr9TMBNWixmoUhWgYcondo"), ("RTXon", "12BvLZtzjdssAycxPeBQUjukhmgQpULAvy6SroYdondo"), + ("RXRXon", "q16ZLSbANUhpcq15pRUXRxNFfEqgpde9mSBwRcyondo"), ("SAPon", "bjbrNi96mXAzgvxSuGJ2SRJ5U4N8agbG7wUAKAjondo"), ("SATAon", "vZVGEJfSM1hS4XdFVAZL2Fr1cbPzJty9vWyax68ondo"), ("SBETon", "iLDu2jjp2i3Uqc2Vm7K7GLiUj3hR4Un49MtD7c4ondo"), ("SBUXon", "iPFqjcZQTNMNXA4kbShbMhfAVD8yr8Uq9UtXMV6ondo"), ("SCCOon", "EANjzFjj3nPXHdzN5CE3Z8LLVn69Ce77FE8X4cvondo"), ("SCHWon", "cnc6M1zXLdrGR5LAQVcaJDfgezMiVWNtGQsVy1Kondo"), + ("SECUon", "sDtEN5uwUJJCFJ95x2rPjPqNx5UWUbHQ2ucceUzondo"), ("SEDGon", "EAwP9LGNjTkQ2YeKE6CGKqBYtrJ6APFvRe7KCMmondo"), ("SGOVon", "HjrN6ChZK2QRL6hMXayjGPLFvxhgjwKEy135VRjondo"), ("SHLDon", "siVse6kjZb9ihaXHaqoG3mhHyTPEnNCkvSDTheoondo"), @@ -401,6 +409,7 @@ static GM_TOKENS_STATIC: &[(&str, &str)] = &[ ("STXon", "EXtprP1wzrNo2bByrU9JyzqEg2hQMSCVJakeHHYondo"), ("SWKSon", "iJtKb1CWnWdgJhs7HgSZvLmSJABGGMc97QeuG7tondo"), ("SYMon", "nP42LxpSZkUfnBUxiFsHxL5GKYWRZ1VxqGkMTNwondo"), + ("SYSBon", "5U9o49BoQNU6bBMswvmBs3R4GZmYSyrnTN4ncX4ondo"), ("TASKon", "nQysX1ZsRJ8yTJg8smZTZ91rWcVBabDRqdUEKZHondo"), ("TCOMon", "9PMjLqd8zPdKkJUXarnit5t7tPL3cCscwHzy7ATondo"), ("TELon", "ZjYCwYeG85TbV5oXkCkvWQTNPh2PgTQ8X4nxpbyondo"), @@ -433,6 +442,7 @@ static GM_TOKENS_STATIC: &[(&str, &str)] = &[ ("URNMon", "hieZTEZNBU67bMGULK9hWCB9h5jBPKdpRWiXpwkondo"), ("USARon", "aA1dRckexLmQyppFoWmjKDFjrNFUsZeGzZ7L5xpondo"), ("USFRon", "o6U1Sm6Vd7EofMyCrL28mrp2QLzgYGgjveHiEQ5ondo"), + ("USHYon", "aau4XCAZR6p9uC4vgdHdh4ip3oW5pr5PrNs3FJ8ondo"), ("USOon", "rpydAzWdCy85HEmoQkH5PVxYtDYQWjmLxgHHadxondo"), ("UUUUon", "ey16y4Bk92zmPSvbRznuv3RioAXbVreBkQxrKGDondo"), ("VCXon", "esgtAV7yKf7Ei3Q92VmXcEGkoqY2UqCHzZvCWhgondo"), @@ -452,6 +462,7 @@ static GM_TOKENS_STATIC: &[(&str, &str)] = &[ ("Von", "kxEW4oJL75K37VeXaZF1ynbHQATQwhECQKN1374ondo"), ("WCCon", "m3m2HAANsAf2Y3BkdBixDgtrrFHnZDp4NqVh9obondo"), ("WDCon", "FLqH2jB2DZPJP5nnVFAakRKaNTcDZtq71Pnpp6Aondo"), + ("WENon", "QwJ619MuDRvT1f29RH7tMdaqsUnaSNcvBEJAZkHondo"), ("WFCon", "L6ZE5qCpVVSqLePz64CrwkgyWoPF9M7tB8BeFH4ondo"), ("WLKon", "mrNSd1y72F7Dx2Uip4vidtsJKKd8iJatTKGX6Pvondo"), ("WMBon", "bvjmEwQBqbMr6rnx5a74boBz6nmA1DNThujPnNAondo"), diff --git a/llms.txt b/llms.txt index 50aeca8..a423f6c 100644 --- a/llms.txt +++ b/llms.txt @@ -1,7 +1,7 @@ # rwa CLI CLI for trading tokenized stocks & ETFs (Ondo Global Markets) on Solana via Jupiter. -438 tokens: TSLA, AAPL, NVDA, SPY, QQQ, and more. +450 tokens: TSLA, AAPL, NVDA, SPY, QQQ, and more. ## Install From 6913ed21bd369a85f879e642a09969df5eb16bf7 Mon Sep 17 00:00:00 2001 From: outputlayer Date: Mon, 5 Oct 2026 16:42:56 +0200 Subject: [PATCH 2/4] session: auto-commit 2026-10-05T14:42:56Z --- .../update-token-list.cpython-314.pyc | Bin 0 -> 19658 bytes 1 file changed, 0 insertions(+), 0 deletions(-) create mode 100644 scripts/__pycache__/update-token-list.cpython-314.pyc diff --git a/scripts/__pycache__/update-token-list.cpython-314.pyc b/scripts/__pycache__/update-token-list.cpython-314.pyc new file mode 100644 index 0000000000000000000000000000000000000000..c06bffa798978dc56402d961698f8b2e278ddb58 GIT binary patch literal 19658 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 r7X5y;F+?H{#0^qI0191lxWDktH%4xr~y59 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 Vl2-?B;Mf_RQ29vD8PuTN{|7ZGF;D;i literal 0 HcmV?d00001 From b2e7fb25544548d58e0f09e681dbd9ffa9693f1e Mon Sep 17 00:00:00 2001 From: outputlayer Date: Mon, 5 Oct 2026 16:43:28 +0200 Subject: [PATCH 3/4] ci: drop the weekly token-list workflow; refresh the list by hand It failed silently every week since 2026-09-14 (Jupiter search could not resolve a live symbol, AIon, and one miss aborts the run), its PRs opened via GITHUB_TOKEN never triggered CI and sat unmerged, and GitHub auto-disables a cron workflow after 60 days without commits. The script stays as a manual pre-release tool. Co-Authored-By: Claude Opus 5.5 --- .github/workflows/update-token-list.yml | 80 ------------------------- scripts/update-token-list.py | 2 +- 2 files changed, 1 insertion(+), 81 deletions(-) delete mode 100644 .github/workflows/update-token-list.yml diff --git a/.github/workflows/update-token-list.yml b/.github/workflows/update-token-list.yml deleted file mode 100644 index 2b1a543..0000000 --- a/.github/workflows/update-token-list.yml +++ /dev/null @@ -1,80 +0,0 @@ -name: Update token list - -# Refresh the hardcoded Ondo GM token list (crates/ondo/src/token_list.rs) from -# the live Ondo asset universe + Jupiter mint resolution. Mints stay hardcoded; -# this only automates regenerating them. A human reviews and merges the PR — -# that review is the safety gate that catches any unexpected addition (e.g. a -# new non-equity Ondo product, or a symbol that fails mint-authority checks). - -on: - schedule: - - cron: "0 6 * * 1" # Mondays 06:00 UTC - workflow_dispatch: {} - -permissions: - contents: write - pull-requests: write - -jobs: - refresh: - name: Regenerate & open PR - runs-on: ubuntu-latest - steps: - - uses: actions/checkout@34e114876b0b11c390a56381ad16ebd13914f8d5 # v4 - - - uses: actions/setup-python@a26af69be951a213d495a4c3e4e4022e16d87065 # v5 - with: - python-version: "3.x" - - - name: Regenerate token_list.rs - run: python3 scripts/update-token-list.py - - - name: Detect changes - id: diff - run: | - if git diff --quiet -- crates/ondo/src/token_list.rs; then - echo "changed=false" >> "$GITHUB_OUTPUT" - echo "Token list already up to date." - else - echo "changed=true" >> "$GITHUB_OUTPUT" - fi - - # Validate the regenerated list before proposing it: integrity tests - # (count, sort, uniqueness, base58→32 bytes, canary mints) must pass. - - uses: dtolnay/rust-toolchain@4be7066ada62dd38de10e7b70166bc74ed198c30 # stable - if: steps.diff.outputs.changed == 'true' - - - uses: Swatinem/rust-cache@e18b497796c12c097a38f9edb9d0641fb99eee32 # v2 - if: steps.diff.outputs.changed == 'true' - - - name: Validate token list - if: steps.diff.outputs.changed == 'true' - run: cargo test -p rwa-ondo token_list - - - name: Open pull request - if: steps.diff.outputs.changed == 'true' - uses: peter-evans/create-pull-request@c5a7806660adbe173f04e3e038b0ccdcd758773c # v6 - with: - branch: chore/update-token-list - commit-message: "chore(tokens): refresh GM token list from Ondo + Jupiter" - title: "chore(tokens): refresh GM token list" - body: | - Automated refresh of `crates/ondo/src/token_list.rs`. - - Source of truth: - - Symbols: Ondo `/api/v2/assets` (tokenized equities/ETFs, suffix `on`) - - Mints: Jupiter token search, verified against Ondo's mint authority - - Gates that passed before this PR was opened (in `update-token-list.py`): - - **Form**: unique symbols/mints, base58 → 32 bytes, `on` suffix - - **On-chain**: every mint exists on Solana as a Token-2022 mint with - Ondo's issuer authority (`getMultipleAccounts`) - - **Tradability**: every symbol is in Ondo session-limits and tradable - in ≥1 session (the CLI's own tradability source — not a flaky live - Jupiter RFQ quote) - - **Integrity tests**: `cargo test -p rwa-ondo token_list` - - **Review the diff before merging** — confirm any added/removed symbols - are expected. The checks exclude look-alike tokens and non-Solana junk, - but a human gate catches new non-equity Ondo products and surprises. - labels: automated, tokens diff --git a/scripts/update-token-list.py b/scripts/update-token-list.py index 0c1a957..e26449b 100755 --- a/scripts/update-token-list.py +++ b/scripts/update-token-list.py @@ -21,7 +21,7 @@ Modes: (default) rewrite token_list.rs in place --check exit 1 if the generated list differs from the committed file - (no write) — used by CI to detect drift + (no write) — run manually before a release Network failures on individual symbols are retried; a symbol that never resolves aborts the run (fail-closed) rather than silently dropping a token. From b4f23fc7331799daeee9e77985d26529f2d81aec Mon Sep 17 00:00:00 2001 From: outputlayer Date: Wed, 7 Oct 2026 01:07:33 +0200 Subject: [PATCH 4/4] chore(deps): rustls 0.23.45 (RUSTSEC-2026-0285), chacha20 0.10.2 (0.10.1 yanked) Co-Authored-By: Claude Opus 5.5 --- Cargo.lock | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index 9204735..c539632 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -633,9 +633,9 @@ dependencies = [ [[package]] name = "chacha20" -version = "0.10.1" +version = "0.10.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d524456ba66e72eb8b115ff89e01e497f8e6d11d78b70b1aa13c0fbd97540a81" +checksum = "65c35e4b699c7e15ccbe7ee35c005e4fc0a278d22238a2857e6ce2dadeda1b06" dependencies = [ "cfg-if", "cpufeatures 0.3.0", @@ -2781,7 +2781,7 @@ version = "0.10.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "c7f5fa3a058cd35567ef9bfa5e75732bee0f9e4c55fa90477bef2dfcdbc4be80" dependencies = [ - "chacha20 0.10.1", + "chacha20 0.10.2", "getrandom 0.4.3", "rand_core 0.10.1", ] @@ -3072,9 +3072,9 @@ dependencies = [ [[package]] name = "rustls" -version = "0.23.41" +version = "0.23.45" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6b92b125634d9b795e7beca796cc790df15a7fb38323bf3196fda83292d06b1f" +checksum = "0d41d731c7d2f962d1ccc364cec258de3c0e93b38c2fb3ba97ac74513048d634" dependencies = [ "once_cell", "ring", @@ -3096,9 +3096,9 @@ dependencies = [ [[package]] name = "rustls-webpki" -version = "0.103.13" +version = "0.103.15" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "61c429a8649f110dddef65e2a5ad240f747e85f7758a6bccc7e5777bd33f756e" +checksum = "f3c3cf1d8b1e7d4927e2d154c3fcb02979afb9939629c62cd9048d4f07b60ac2" dependencies = [ "ring", "rustls-pki-types",