{"_id":"@chainberry/trust-wallet-core","_rev":"9-c5c96213ef8d6c1bec89d9dc147a2c30","name":"@chainberry/trust-wallet-core","dist-tags":{"latest":"2.6.0"},"versions":{"1.0.0":{"name":"@chainberry/trust-wallet-core","version":"1.0.0","license":"MIT","_id":"@chainberry/trust-wallet-core@1.0.0","maintainers":[{"name":"chainberry","email":"pd@chainberry.com"}],"dist":{"shasum":"c76c13b64dfd7f4bbcff359f873fc73f8ed2bfc9","tarball":"https://registry.npmjs.org/@chainberry/trust-wallet-core/-/trust-wallet-core-1.0.0.tgz","fileCount":8,"integrity":"sha512-4gIA5QRnfFZy2dmRoP9p1E3kOrncpxLFbNsaSL8YjMcAGLejaxEfp9pY6BiRbcAht/mfwpBWmO/diLxJ+P6Zqw==","signatures":[{"sig":"MEUCIQCgB7zmeJ8QP4ofpl5QclxQ0hlD6d6w1gKPJTARQnkM1wIgKpCMtXc9q5PwRTeNXowDRF09DNiUNQ3tBfCO4VJcb6Q=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":20998},"main":"src/index.ts","types":"src/index.ts","_npmUser":{"name":"chainberry","email":"pd@chainberry.com"},"_npmVersion":"11.6.2","description":"Expo native module wrapping Trust Wallet Core for HD wallet generation, address derivation, and transaction signing (Ethereum, Solana, BNB)","directories":{},"_nodeVersion":"25.0.0","_hasShrinkwrap":false,"peerDependencies":{"expo":"*","expo-modules-core":"*"},"_npmOperationalInternal":{"tmp":"tmp/trust-wallet-core_1.0.0_1785351910361_0.4457241990846581","host":"s3://npm-registry-packages-npm-production"}},"1.0.1":{"name":"@chainberry/trust-wallet-core","version":"1.0.1","license":"MIT","_id":"@chainberry/trust-wallet-core@1.0.1","maintainers":[{"name":"chainberry","email":"pd@chainberry.com"}],"dist":{"shasum":"82c950066d45bbffc080269ae39b71ea7a7679c6","tarball":"https://registry.npmjs.org/@chainberry/trust-wallet-core/-/trust-wallet-core-1.0.1.tgz","fileCount":8,"integrity":"sha512-yRpo5BxpaFO++mpO5zyu0YVQG2JOXqck4XMxQClzOWcP6NAjlObzr6ASuCyXsZugzpeuPiw5pPZcNKr95ulwUQ==","signatures":[{"sig":"MEYCIQCpvch0yeYaY9QMkEN1bzQ7/OXsEQst7SVGurVSMcSESgIhALKYjBe3D+6uRgGkfjmkvyCVZtp6MikIQxhvJ2WgtLrh","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":21047},"main":"src/index.ts","types":"src/index.ts","_npmUser":{"name":"chainberry","email":"pd@chainberry.com"},"_npmVersion":"11.6.2","description":"Expo native module wrapping Trust Wallet Core for HD wallet generation, address derivation, and transaction signing (Ethereum, Solana, BNB)","directories":{},"_nodeVersion":"25.0.0","publishConfig":{"access":"public"},"_hasShrinkwrap":false,"peerDependencies":{"expo":"*","expo-modules-core":"*"},"_npmOperationalInternal":{"tmp":"tmp/trust-wallet-core_1.0.1_1785352142564_0.09452979887234148","host":"s3://npm-registry-packages-npm-production"}},"1.0.2":{"name":"@chainberry/trust-wallet-core","version":"1.0.2","license":"MIT","_id":"@chainberry/trust-wallet-core@1.0.2","maintainers":[{"name":"chainberry","email":"pd@chainberry.com"}],"dist":{"shasum":"23bd3a0a47506dfb3e38086b3ec318b8719037ae","tarball":"https://registry.npmjs.org/@chainberry/trust-wallet-core/-/trust-wallet-core-1.0.2.tgz","fileCount":8,"integrity":"sha512-734KPrDvE9HtwN5E8MaJikM74nEkiCTqzEdZwlTsu607LQAQDJOkMwZ0hKNZFyOyTB7viQLdmpI/h70bH2l2tA==","signatures":[{"sig":"MEUCIQC/0obrsSquLL6P1+NPCf1qT7JAwEIuFIbk5OxZvablPQIgZ9aal5lsKisV7C/Z3yMiOUY/V0Qfm1vQDxjNwPxOgqk=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":20981},"main":"src/index.ts","types":"src/index.ts","_npmUser":{"name":"chainberry","email":"pd@chainberry.com"},"_npmVersion":"11.6.2","description":"Expo native module wrapping Trust Wallet Core for HD wallet generation, address derivation, and transaction signing (Ethereum, Solana, BNB)","directories":{},"_nodeVersion":"25.0.0","publishConfig":{"access":"public"},"_hasShrinkwrap":false,"peerDependencies":{"expo":"*","expo-modules-core":"*"},"_npmOperationalInternal":{"tmp":"tmp/trust-wallet-core_1.0.2_1785352770637_0.8929997245732268","host":"s3://npm-registry-packages-npm-production"}},"2.0.0":{"name":"@chainberry/trust-wallet-core","version":"2.0.0","license":"MIT","_id":"@chainberry/trust-wallet-core@2.0.0","maintainers":[{"name":"chainberry","email":"pd@chainberry.com"}],"dist":{"shasum":"099fd148e3f972d80d47369b525ddf8b80d2bca7","tarball":"https://registry.npmjs.org/@chainberry/trust-wallet-core/-/trust-wallet-core-2.0.0.tgz","fileCount":10,"integrity":"sha512-uADQv119IHa28qDRhytCLgA8AM2ZR1RJP3A+Zn1+RB2oAMnKClN/MqclgABkoOKHSdkIA6yzuotP/WR3nPya8A==","signatures":[{"sig":"MEUCIGe9G8rJnPg5dH4Jg8p4W8GufLCjIDqV/L//ID5gnMNHAiEAjI15wuaOhnV2CY56L9xf49sXiPIGi2U2CxuLfv+wr3c=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":44523},"main":"src/index.ts","types":"src/index.ts","_npmUser":{"name":"chainberry","email":"pd@chainberry.com"},"_npmVersion":"11.6.2","description":"Expo native module wrapping Trust Wallet Core for native-only HD wallet custody, address derivation, and transaction signing (Ethereum, BNB, Polygon, Solana, Tron, TON, Bitcoin, Bitcoin Cash, Litecoin, XRP) — mnemonic/private keys never cross the JS bridg","directories":{},"_nodeVersion":"25.0.0","publishConfig":{"access":"public"},"_hasShrinkwrap":false,"peerDependencies":{"expo":"*","expo-modules-core":"*"},"_npmOperationalInternal":{"tmp":"tmp/trust-wallet-core_2.0.0_1785408680480_0.16322732851416166","host":"s3://npm-registry-packages-npm-production"}},"2.5.0":{"name":"@chainberry/trust-wallet-core","version":"2.5.0","license":"MIT","_id":"@chainberry/trust-wallet-core@2.5.0","maintainers":[{"name":"chainberry","email":"pd@chainberry.com"}],"dist":{"shasum":"bc1667c6b6cde72954d756ff5e39f11a287c7820","tarball":"https://registry.npmjs.org/@chainberry/trust-wallet-core/-/trust-wallet-core-2.5.0.tgz","fileCount":35,"integrity":"sha512-d739d8X08TzM8vnlzVmOAywCyhDx9VNAri0DGwZf9U6TE3+7E5ECjZnAFBYgOERtuEbBnMqhaDK38/SNkUOeSQ==","signatures":[{"sig":"MEQCIF4vCFwGGO6aHxs7SHsiUVpkSHvTEVfF4i4oRcHIXFP/AiADy8vOSlE+2FXOM8Ks9cY9C06iT/0YNNwcSh4NpTXSzA==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":32673084},"main":"src/index.ts","types":"src/index.ts","_npmUser":{"name":"chainberry","email":"pd@chainberry.com"},"_npmVersion":"11.6.2","description":"Expo native module wrapping Trust Wallet Core for native-only HD wallet custody, address derivation, and transaction signing (Ethereum, BNB, Polygon, Solana, Tron, TON, Bitcoin, Bitcoin Cash, Litecoin, XRP) — mnemonic/private keys never cross the JS bridg","directories":{},"_nodeVersion":"25.0.0","publishConfig":{"access":"public"},"_hasShrinkwrap":false,"peerDependencies":{"expo":"*","expo-modules-core":"*"},"_npmOperationalInternal":{"tmp":"tmp/trust-wallet-core_2.5.0_1788760547207_0.5164691267436232","host":"s3://npm-registry-packages-npm-production"}},"2.5.1":{"name":"@chainberry/trust-wallet-core","version":"2.5.1","license":"MIT","_id":"@chainberry/trust-wallet-core@2.5.1","maintainers":[{"name":"chainberry","email":"pd@chainberry.com"}],"dist":{"shasum":"2558b8e0d6bc781b84673b18419f7f9d93b7a84a","tarball":"https://registry.npmjs.org/@chainberry/trust-wallet-core/-/trust-wallet-core-2.5.1.tgz","fileCount":37,"integrity":"sha512-NC7s80KE+wVGWH7+8Xctod5lhcTSkuw0G77/wJAsS/2A9eyyEDvKbs2X+nr23SZEwvkYGbxNJ0nRTafJ7UQM9w==","signatures":[{"sig":"MEYCIQCWVldMoqHx5V0G/AYv0fHBazNuFIUwFU7F55RH0wi4TwIhAO/a0ku++X+mhcesEtK6GEUIRQlbJ3kR3kI6H5a4p7zq","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":32743335},"main":"src/index.ts","types":"src/index.ts","_npmUser":{"name":"chainberry","email":"pd@chainberry.com"},"_npmVersion":"11.6.2","description":"Expo native module wrapping Trust Wallet Core for native-only HD wallet custody, address derivation, and transaction signing (Ethereum, BNB, Polygon, Solana, Tron, TON, Bitcoin, Bitcoin Cash, Litecoin, XRP) — mnemonic/private keys never cross the JS bridg","directories":{},"_nodeVersion":"25.0.0","publishConfig":{"access":"public"},"_hasShrinkwrap":false,"peerDependencies":{"expo":"*","expo-modules-core":"*"},"_npmOperationalInternal":{"tmp":"tmp/trust-wallet-core_2.5.1_1789037137151_0.2509672840225152","host":"s3://npm-registry-packages-npm-production"}},"2.5.2":{"name":"@chainberry/trust-wallet-core","version":"2.5.2","license":"MIT","_id":"@chainberry/trust-wallet-core@2.5.2","maintainers":[{"name":"chainberry","email":"pd@chainberry.com"}],"dist":{"shasum":"87f6bc04563f40924d9572f9d1cc1d3f464e84b9","tarball":"https://registry.npmjs.org/@chainberry/trust-wallet-core/-/trust-wallet-core-2.5.2.tgz","fileCount":37,"integrity":"sha512-QQFL8KI1DSkEgZtCK1Lhf0ilTGv9u0RTZzy9o4lUp3pc8GJnGu+Ba9kItL9QHqbSaBLsifd3msAznN+bFX8zig==","signatures":[{"sig":"MEYCIQDfqt/TNxwiHy7HCIsiNEC/+pw/tgaRlvCM4VujtQeXMQIhAOw/Dwgh6vOVLWZ/HBwmjqdhJK4NJbe6It3EF80GHyW9","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":32751392},"main":"src/index.ts","types":"src/index.ts","_npmUser":{"name":"chainberry","email":"pd@chainberry.com"},"_npmVersion":"11.6.2","description":"Expo native module wrapping Trust Wallet Core for native-only HD wallet custody, address derivation, and transaction signing (Ethereum, BNB, Polygon, Solana, Tron, TON, Bitcoin, Bitcoin Cash, Litecoin, XRP) — mnemonic/private keys never cross the JS bridg","directories":{},"_nodeVersion":"25.0.0","publishConfig":{"access":"public"},"_hasShrinkwrap":false,"peerDependencies":{"expo":"*","expo-modules-core":"*"},"_npmOperationalInternal":{"tmp":"tmp/trust-wallet-core_2.5.2_1789311789916_0.31162460728165","host":"s3://npm-registry-packages-npm-production"}},"2.6.0":{"_id":"@chainberry/trust-wallet-core@2.6.0","dist":{"shasum":"c3cc1873e45bb344201f23227aad71ddc14f7bf7","tarball":"https://registry.npmjs.org/@chainberry/trust-wallet-core/-/trust-wallet-core-2.6.0.tgz","fileCount":37,"integrity":"sha512-/YbmM4G4x0Lrj+09b/Nh1qe7tdDZkOT05UXgcPSWk+A+2FmwsEXcl29cMk34Uc21vtv91AhWxBV/Y0VQUQ61fg==","signatures":[{"sig":"MEUCIQDB+tCaa9P5vIrmyD0yFJgYk6bGlPQVQP6TvW3aFXFyvQIgCZDrt/Asar0NbV8iMacr4F4ud82LZ16g0V0e70yI4t4=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEQCIAcXU3QF8p9p6jYuVh4Yu6gKhcGNOq+RyCDRtsWtGKeHAiAHkMmz2AXJYxgB7ILkTUF88r/r3ogugQ+OycPZfB6wmA=="}],"unpackedSize":32765656},"main":"src/index.ts","name":"@chainberry/trust-wallet-core","types":"src/index.ts","license":"MIT","version":"2.6.0","_npmUser":{"name":"chainberry","email":"pd@chainberry.com"},"_npmVersion":"10.9.2","description":"Expo native module wrapping Trust Wallet Core for native-only HD wallet custody, address derivation, and transaction signing (Ethereum, BNB, Polygon, Solana, Tron, TON, Bitcoin, Bitcoin Cash, Litecoin, XRP, Cosmos, Aptos, Tezos, Cardano) — mnemonic/privat","directories":{},"maintainers":[{"name":"chainberry","email":"pd@chainberry.com"}],"_nodeVersion":"23.11.0","publishConfig":{"access":"public"},"_hasShrinkwrap":false,"peerDependencies":{"expo":"*","expo-modules-core":"*"},"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/trust-wallet-core_2.6.0_1790276761920_0.9369674543220186"}}},"time":{"created":"2026-07-29T19:05:10.292Z","modified":"2026-09-24T19:06:02.593Z","1.0.0":"2026-07-29T19:05:10.504Z","1.0.1":"2026-07-29T19:09:02.731Z","1.0.2":"2026-07-29T19:19:30.790Z","2.0.0":"2026-07-30T10:51:20.621Z","2.5.0":"2026-09-07T05:55:47.735Z","2.5.1":"2026-09-10T10:45:37.687Z","2.5.2":"2026-09-13T15:03:10.441Z","2.6.0":"2026-09-24T19:06:02.433Z"},"license":"MIT","description":"Expo native module wrapping Trust Wallet Core for native-only HD wallet custody, address derivation, and transaction signing (Ethereum, BNB, Polygon, Solana, Tron, TON, Bitcoin, Bitcoin Cash, Litecoin, XRP, Cosmos, Aptos, Tezos, Cardano) — mnemonic/privat","maintainers":[{"name":"chainberry","email":"pd@chainberry.com"}],"readme":"# @chainberry/trust-wallet-core\n\nExpo native module wrapping [Trust Wallet Core](https://github.com/trustwallet/wallet-core) for HD wallet generation, address derivation, and transaction signing. Runs the real native library (Kotlin/JNI on Android, Swift on iOS) — not the WASM build, so it works fine under Hermes.\n\nSupported chains: Ethereum, BNB Smart Chain, Polygon, Solana, Tron, TON, Bitcoin, Bitcoin Cash (address derivation only — see Security model), Litecoin, XRP (see `Chain`).\n\n## Installation\n\n```sh\nnpx expo install @chainberry/trust-wallet-core\n```\n\nThis is an Expo native module with native Android/iOS code. It uses Expo's autolinking mechanism and does not ship an Expo config plugin. A development build is required (`expo prebuild` / EAS Build) — it will not work in Expo Go.\n\n### Android: no GitHub credentials needed\n\nTrust Wallet Core's Android artifact is only published to GitHub Packages, which requires authentication even though the package itself is public. To avoid making that a requirement for every dev/CI machine, `com.trustwallet:wallet-core` and its `wallet-core-proto` dependency are vendored locally as a plain Maven repo in `android/libs/` — `android/build.gradle` resolves from there first, so a normal `./gradlew` build needs no credentials at all. See `android/libs/README.md` for how it's kept up to date.\n\nGitHub Packages auth is still needed (via `GITHUB_ACTOR`/`GITHUB_TOKEN` env vars or `gpr.user`/`gpr.key` in `~/.gradle/gradle.properties`) only when bumping the pinned wallet-core version — see `android/libs/download.sh`.\n\n### iOS\n\n`WalletCore` is pulled in via CocoaPods (`s.dependency 'TrustWalletCore'`) — no extra auth needed, `pod install` handles it. Biometric/passcode gating uses `LocalAuthentication` (system framework, no extra dependency).\n\nAndroid biometric gating additionally pulls in `androidx.biometric:biometric:1.1.0`.\n\n## Publish\n\nThis package is consumed by the app via `file:modules/trust-wallet-core` (see the root\n`package.json`), not an npm workspace under `packages/*` — so, unlike\n`@chainberry/expo-wallet-sdk`, there's no `-w` flag to use; run these from inside this directory.\nThere's also no build step: this package ships its TypeScript source directly (`main`/`types`\npoint at `src/index.ts`), so no `prepublishOnly` rebuild happens either.\n\n1. Bump the version (in `package.json`, or via):\n   ```sh\n   cd modules/trust-wallet-core\n   npm version patch   # or minor / major\n   ```\n2. Dry-run first — prints exactly what would be published without touching the registry:\n   ```sh\n   npm publish --dry-run\n   ```\n3. Publish for real:\n   ```sh\n   npm publish\n   ```\n   `publishConfig.access: \"public\"` in this package's own `package.json` already covers the\n   `--access public` flag scoped packages otherwise need.\n\nRequires npm registry publish auth (an `_authToken` for `@chainberry`, e.g. via `.npmrc` — not\ncommitted to git). This is separate from the GitHub Packages auth mentioned above, which is only\nneeded for bumping the pinned Android wallet-core artifact, not for publishing this npm package.\n\n## Usage\n\n```ts\nimport {\n  createWallet,\n  importWallet,\n  signTransaction,\n  exportMnemonic,\n} from \"@chainberry/trust-wallet-core\";\n\nconst { walletId, addresses } = await createWallet(); // 128-bit / 12-word by default\n// addresses: { ethereum: \"0x...\", solana: \"...\", bnb: \"0x...\", bitcoin: \"...\", ... }\n\nconst restored = await importWallet(mnemonic);\n\n// Triggers a native biometry/passcode prompt; only signed tx bytes/hex cross back to JS.\nconst { signedTx } = await signTransaction(walletId, \"ethereum\", unsignedTx);\n\n// Explicit backup flow only — biometry/passcode gated.\nconst mnemonic = await exportMnemonic(walletId);\n```\n\n## API\n\n- `createWallet(strength = 128)` — generates a new BIP-39 mnemonic and persists it natively (Keychain on iOS / Keystore-backed file on Android, biometry-or-passcode gated). Returns `{ walletId, addresses }` — the mnemonic itself never leaves native code. No BIP-39 passphrase support: `signTransaction` always reconstructs the wallet with an empty passphrase, so a caller-supplied one would derive addresses from a seed different from the one actually used to sign.\n- `importWallet(mnemonic)` — validates and persists an existing mnemonic the same way. The `mnemonic` argument is a one-time exposure from the caller (e.g. a text-entry backup-restore screen); discard your own copy immediately after this call resolves.\n- `listWallets()` — returns `{ walletId, addresses }[]` for every persisted wallet, reading only the ungated metadata store. No biometric prompt.\n- `deleteWallet(walletId)` — removes the wallet's native key material and metadata entry. Irreversible; requires a fresh biometric/passcode confirmation before deletion proceeds on both platforms.\n- `signTransaction(walletId, chain, unsignedTx)` — triggers a native biometry/passcode prompt, then derives the key and signs entirely inside native code. Returns `{ signedTx, meta? }`; `meta` currently only carries TON's `txHash`.\n- `exportMnemonic(walletId)` — the one sanctioned mnemonic exposure. Biometry/passcode gated. Use only for an explicit \"reveal recovery phrase\" backup screen; don't hold the result in app state beyond that screen's lifetime.\n\n## Security model\n\nMnemonic and derived private keys are generated, persisted, and used for signing entirely inside this module's native code (Swift/Kotlin) — they are never serialized back across the JS bridge, with the single exception of `exportMnemonic`'s explicit backup flow. This is a deliberate change from this module's earlier version, which returned raw private keys to JS on every address derivation; that let a compromised/malicious JS dependency, an attached JS debugger, or a JS-heap memory dump read wallet secrets in full. Now the JS runtime never holds them at all.\n\nStorage: one biometry-or-passcode-gated secret per wallet (`SecAccessControl` + iOS Keychain; an Android Keystore AES key gating an encrypted on-disk file), plus a separate, ungated metadata entry (`walletId` → addresses) for read-only UI that shouldn't need a biometric prompt just to show an address or balance.\n\n**Android hardware backing is best-effort, not guaranteed.** Key creation requests StrongBox first (API 28+), falling back to a plain Keystore key (which Keymaster backs with a TEE on virtually all real devices, but which can be software-only on an emulator or a device with no secure hardware at all) on `StrongBoxUnavailableException` or below API 28. The actual security level achieved is verified via `KeyInfo` right after creation and logged (`NativeWalletStore` logcat tag) — a software-only key is tolerated rather than blocking wallet creation, so this is a best-effort hardening measure, not an enforced guarantee. Don't assume every wallet on every device is hardware-backed; check the logs on a specific device/build if that matters for your threat model.\n\nBitcoin Cash is derivation-only: sending BCH is unsupported both here and upstream (`chainberry-wallet`'s self-custody transaction preparation has no BCH case), so this module only derives its address.\n\nBoth platforms pin **Trust Wallet Core 4.1.19** (`com.trustwallet:wallet-core:4.1.19` in `android/build.gradle`; `s.dependency 'TrustWalletCore', '4.1.19'` in the podspec).\n\n**Address derivation is verified for all 10 chains** in `conformance/address-derivation-vectors.json`, asserted by the Android instrumented test (`src/androidTest/.../AddressDerivationConformanceTest.kt`; run via `./gradlew connectedDebugAndroidTest`). Methodology: real on-device 4.1.19 addresses were harvested from the instrumented test running on an emulator, cross-checked against an independent derivation via the WASM build (`@trustwallet/wallet-core` 3.3.3, run standalone in Node — a different upstream release than the pinned 4.1.19, used only as a second data point); on-device 4.1.19 is authoritative wherever the two disagree, since that's what the app actually ships. They agreed on 6 of 7 previously-pending chains exactly; `ton` disagreed only in address-flag encoding (bounceable vs. non-bounceable — same underlying key/hash, see that fixture entry's `_note`). This same run also caught a real bug: the Ethereum/BNB/Polygon address that had been marked `\"verified\"` since before this pass was actually wrong — the instrumented test that should have caught it had never successfully executed (two pre-existing bugs: `coin.name()` didn't compile against this Kotlin binding, and no `testInstrumentationRunner` was configured, so `connectedAndroidTest` silently ran \"0 tests\" instead of failing). Both are fixed now; see the test file's header comment for details.\n\n**Byte-for-byte signing output is verified for 8 of 9 signable chains** in `conformance/signing-vectors.json`, asserted by `src/androidTest/.../SigningConformanceTest.kt`. Each vector calls `ChainSigner.sign()` — the same call path production code uses — with a fixed, deterministic (not necessarily broadcast-valid) unsigned tx. `ton` is verified but _not_ byte-exact-asserted: `signTon()` embeds a wall-clock `expireAt` into the signed payload, so its output legitimately differs every run — the test instead checks the output is a well-formed signed BOC. `bitcoincash` has no signing vector (sending is unsupported, see above).\n\nBoth Android suites are CI-gated on every push/PR (`.github/workflows/ci.yml`'s `android-unit-tests` and `android-instrumented-tests` jobs, via `example/` — see that folder's README for why an Expo host app is needed to build this module at all). iOS is CI-gated via the `ios-conformance-tests` job: `expo prebuild` generates the Xcode workspace, `pod install` wires up the `ConformanceTests` test_spec declared in the podspec (CocoaPods includes test_specs automatically — there is no `--include-test-specs` flag), and `xcodebuild test` runs both `AddressDerivationConformanceTests` and `SigningConformanceTests` on an iPhone 16 simulator.\n\n**Tron divergence resolved.** iOS's `signTron` used to hand wallet-core the full `rawJson` and return its own reconstruction, diverging from Android's `txId`-only input + manual JSON reassembly — and `TronSigningInput` has no `rawJson` field in the pinned 4.1.19 anyway, so the old iOS code didn't compile. iOS now signs the same way Android does: `TronSigningInput.txID` set to the digest, signature reassembled into `{...tx, signature}` in app code (see `ios/ChainSigning.swift`'s `signTron`). Same key + same digest is guaranteed to produce the same ECDSA signature, so this is a structural fix, not something that needs a device to confirm.\n\n**iOS conformance suites are wired via CocoaPods `test_spec`.** `ios/ConformanceTests/AddressDerivationConformanceTests.swift` and `SigningConformanceTests.swift` mirror the Android fixtures above (all 10 address-derivation chains, the same 8 signing vectors, including a `testTron()` that asserts the reassembled signature matches Android's byte-for-byte). Both are declared as a `test_spec 'ConformanceTests'` in `ChainberryTrustWalletCoreModule.podspec`, which links them against `TrustWalletCore 4.1.19` and embeds the JSON fixtures as bundle resources. Running `pod install` from `example/ios` creates the `ChainberryTrustWalletCoreModule-ConformanceTests` scheme in the workspace automatically. The `ConformanceTests/` SwiftPM package continues to test only amount-parsing (no WalletCore dependency, runs standalone via `swift test`). The `tron` signing vector remains `\"verified-android-only\"` in the JSON until the iOS CI job's first green run confirms the signature matches byte-for-byte.\n\n## License\n\nMIT. Trust Wallet Core itself is Apache-2.0 — see [trustwallet/wallet-core](https://github.com/trustwallet/wallet-core) for its license.\n","readmeFilename":"README.md"}