{"_id":"@chainberry/berry-signer","_rev":"12-cdd817d741c6c88fb7e7281a1daf8ec9","name":"@chainberry/berry-signer","dist-tags":{"latest":"1.1.0"},"versions":{"1.0.0":{"name":"@chainberry/berry-signer","version":"1.0.0","keywords":["blockchain","signing","wallet","ethereum","bitcoin","solana","tron","ton","xrp","litecoin"],"license":"MIT","_id":"@chainberry/berry-signer@1.0.0","maintainers":[{"name":"chainberry","email":"pd@chainberry.com"}],"dist":{"shasum":"1eddc3d7a97fcea03f26bdaed33439461ed1c567","tarball":"https://registry.npmjs.org/@chainberry/berry-signer/-/berry-signer-1.0.0.tgz","fileCount":13,"integrity":"sha512-6XJXJBYpz8QeOSIJnTonp+aZxVeL/CARWPUHl+gsMDBhpOhBTSuwHH1DZhToWQeVRwdIVL5Xxu6nSc4V9Tn7Lw==","signatures":[{"sig":"MEQCIEx8ovZ2xdBRoZvVl4JOsi0XoJEpJBQQSozjynjc7T7wAiA+O/jLfaSGIGtrRDSReW4ViB8hy8NPseC+40AFQh47Ow==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":16158},"main":"./dist/index.js","types":"./dist/index.d.ts","module":"./dist/index.js","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js","default":"./dist/index.js"},"./package.json":"./package.json"},"gitHead":"c606ebae6e7cae5aea16b37e0c1d1e668e255ef5","_npmUser":{"name":"chainberry","email":"pd@chainberry.com"},"_npmVersion":"10.9.2","description":"Pure signing library for multiple blockchain networks — EVM, BTC, LTC, SOL, TRX, XRP, TON","directories":{},"_nodeVersion":"23.11.0","dependencies":{"tslib":"2.8.1"},"_hasShrinkwrap":false,"peerDependencies":{"xrpl":">=2.0.0","ecpair":">=2.0.0","ethers":">=6.0.0","tronweb":">=5.0.0","@ton/ton":">=13.0.0","@ton/core":">=0.50.0","@ton/crypto":">=3.0.0","bitcoinjs-lib":">=6.0.0","tiny-secp256k1":">=2.0.0","@solana/web3.js":">=1.0.0"},"peerDependenciesMeta":{"xrpl":{"optional":true},"ecpair":{"optional":true},"ethers":{"optional":true},"tronweb":{"optional":true},"@ton/ton":{"optional":true},"@ton/core":{"optional":true},"@ton/crypto":{"optional":true},"bitcoinjs-lib":{"optional":true},"tiny-secp256k1":{"optional":true},"@solana/web3.js":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/berry-signer_1.0.0_1783066316960_0.013027287561292011","host":"s3://npm-registry-packages-npm-production"}},"1.0.1":{"name":"@chainberry/berry-signer","version":"1.0.1","keywords":["blockchain","signing","wallet","ethereum","bitcoin","solana","tron","ton","xrp","litecoin"],"license":"MIT","_id":"@chainberry/berry-signer@1.0.1","maintainers":[{"name":"chainberry","email":"pd@chainberry.com"}],"dist":{"shasum":"a7a236b3805f77e0c1cd22fd9d9fcc98e4c6ea40","tarball":"https://registry.npmjs.org/@chainberry/berry-signer/-/berry-signer-1.0.1.tgz","fileCount":39,"integrity":"sha512-SoEEGM4HKQaL+Plkp/0LXlMBY9HH6N4nq7Lz50ustGgH8adkVqjFVpGPf9E2sDkBKHvIsbqVSA5L3XU9lDvkgw==","signatures":[{"sig":"MEYCIQDDyNV/8W89wHYgM7sgtIPoSuZZoQ64Fs0cnMPJ80nXAwIhAKRbWuhPw7Jg30pbAYWoetoTga+RpRBv9KXe/Hq9K+6c","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":165041},"main":"./dist/index.js","types":"./dist/index.d.ts","module":"./dist/index.js","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js","default":"./dist/index.js"},"./package.json":"./package.json"},"gitHead":"c606ebae6e7cae5aea16b37e0c1d1e668e255ef5","_npmUser":{"name":"chainberry","email":"pd@chainberry.com"},"_npmVersion":"10.9.2","description":"Pure signing library for multiple blockchain networks — EVM, BTC, LTC, SOL, TRX, XRP, TON","directories":{},"_nodeVersion":"23.11.0","dependencies":{"tslib":"2.8.1"},"_hasShrinkwrap":false,"peerDependencies":{"xrpl":">=2.0.0","ecpair":">=2.0.0","ethers":">=6.0.0","tronweb":">=5.0.0","@ton/ton":">=13.0.0","@ton/core":">=0.50.0","@ton/crypto":">=3.0.0","bitcoinjs-lib":">=6.0.0","tiny-secp256k1":">=2.0.0","@solana/web3.js":">=1.0.0"},"peerDependenciesMeta":{"xrpl":{"optional":true},"ecpair":{"optional":true},"ethers":{"optional":true},"tronweb":{"optional":true},"@ton/ton":{"optional":true},"@ton/core":{"optional":true},"@ton/crypto":{"optional":true},"bitcoinjs-lib":{"optional":true},"tiny-secp256k1":{"optional":true},"@solana/web3.js":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/berry-signer_1.0.1_1783066514402_0.3497301304419691","host":"s3://npm-registry-packages-npm-production"}},"1.0.2":{"name":"@chainberry/berry-signer","version":"1.0.2","keywords":["blockchain","signing","wallet","ethereum","bitcoin","solana","tron","ton","xrp","litecoin"],"license":"MIT","_id":"@chainberry/berry-signer@1.0.2","maintainers":[{"name":"chainberry","email":"pd@chainberry.com"}],"dist":{"shasum":"e8fbef58ac840e58549cc624de42c1fdbaa94325","tarball":"https://registry.npmjs.org/@chainberry/berry-signer/-/berry-signer-1.0.2.tgz","fileCount":39,"integrity":"sha512-OD7SCN07iNvDUQycbtFF4a06Si951sFVR2SkPUpRwL0i3Kp1IyQfPyAiXb1MSWfWGVV2HY6FAWlrT+PR2lXfVw==","signatures":[{"sig":"MEYCIQCp7kNKSaypI2AxPuUCc8e4zMEBWmDPkunA4i2siQQYeAIhAM3/4Pi1se4M+BIRvFRSSqu7JgtcDk0uRIDQeQRTyBPR","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":167001},"main":"./dist/index.js","types":"./dist/index.d.ts","module":"./dist/index.js","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js","default":"./dist/index.js"},"./package.json":"./package.json"},"gitHead":"c606ebae6e7cae5aea16b37e0c1d1e668e255ef5","_npmUser":{"name":"chainberry","email":"pd@chainberry.com"},"_npmVersion":"10.9.2","description":"Pure signing library for multiple blockchain networks — EVM, BTC, LTC, SOL, TRX, XRP, TON","directories":{},"_nodeVersion":"23.11.0","dependencies":{"tslib":"2.8.1"},"_hasShrinkwrap":false,"peerDependencies":{"xrpl":">=2.0.0","ecpair":">=2.0.0","ethers":">=6.0.0","tronweb":">=5.0.0","@ton/ton":">=13.0.0","@ton/core":">=0.50.0","@ton/crypto":">=3.0.0","bitcoinjs-lib":">=6.0.0","tiny-secp256k1":">=2.0.0","@solana/web3.js":">=1.0.0"},"peerDependenciesMeta":{"xrpl":{"optional":true},"ecpair":{"optional":true},"ethers":{"optional":true},"tronweb":{"optional":true},"@ton/ton":{"optional":true},"@ton/core":{"optional":true},"@ton/crypto":{"optional":true},"bitcoinjs-lib":{"optional":true},"tiny-secp256k1":{"optional":true},"@solana/web3.js":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/berry-signer_1.0.2_1783067531701_0.5146343419102406","host":"s3://npm-registry-packages-npm-production"}},"1.0.3":{"name":"@chainberry/berry-signer","version":"1.0.3","keywords":["blockchain","signing","wallet","ethereum","bitcoin","solana","tron","ton","xrp","litecoin"],"license":"MIT","_id":"@chainberry/berry-signer@1.0.3","maintainers":[{"name":"chainberry","email":"pd@chainberry.com"}],"dist":{"shasum":"9f402e990d50407a6766f707eb1fe6ef242cde41","tarball":"https://registry.npmjs.org/@chainberry/berry-signer/-/berry-signer-1.0.3.tgz","fileCount":39,"integrity":"sha512-f8Gq54ClLnv/UUoqkINTYbLQ8jjyvqxuiMzK6hsTORF+cp9h4EqL1uCqd0geUkeIs7BYAc4o+SDrgQcGHgqi2Q==","signatures":[{"sig":"MEYCIQC5S1d514dWvXZQIWLwEuPf4w3tIUV/ql+WmfbscWFEVQIhAKdTIoNk1cl9G1VEhISMWXRoTfgBof6s1fUZhmYfDrCh","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":167186},"main":"./dist/index.js","types":"./dist/index.d.ts","module":"./dist/index.js","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js","default":"./dist/index.js"},"./package.json":"./package.json"},"gitHead":"088b82f2a9e336c5f2a0e1ba9d30516c87c6f101","_npmUser":{"name":"chainberry","email":"pd@chainberry.com"},"_npmVersion":"10.9.2","description":"Pure signing library for multiple blockchain networks — EVM, BTC, LTC, SOL, TRX, XRP, TON","directories":{},"_nodeVersion":"23.11.0","dependencies":{"tslib":"2.8.1"},"_hasShrinkwrap":false,"peerDependencies":{"xrpl":">=2.0.0","ecpair":">=2.0.0","ethers":">=6.0.0","tronweb":">=5.0.0","@ton/ton":">=13.0.0","@ton/core":">=0.50.0","@ton/crypto":">=3.0.0","bitcoinjs-lib":">=6.0.0","tiny-secp256k1":">=2.0.0","@solana/web3.js":">=1.0.0"},"peerDependenciesMeta":{"xrpl":{"optional":true},"ecpair":{"optional":true},"ethers":{"optional":true},"tronweb":{"optional":true},"@ton/ton":{"optional":true},"@ton/core":{"optional":true},"@ton/crypto":{"optional":true},"bitcoinjs-lib":{"optional":true},"tiny-secp256k1":{"optional":true},"@solana/web3.js":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/berry-signer_1.0.3_1783070207158_0.14648832798044786","host":"s3://npm-registry-packages-npm-production"}},"1.0.4":{"name":"@chainberry/berry-signer","version":"1.0.4","keywords":["blockchain","signing","wallet","ethereum","bitcoin","solana","tron","ton","xrp","litecoin"],"license":"MIT","_id":"@chainberry/berry-signer@1.0.4","maintainers":[{"name":"chainberry","email":"pd@chainberry.com"}],"dist":{"shasum":"c42de7a702362a977f3d20e678739feda8782a27","tarball":"https://registry.npmjs.org/@chainberry/berry-signer/-/berry-signer-1.0.4.tgz","fileCount":39,"integrity":"sha512-y+5srFZm14SPHi3lYSMRsllp7cgByA++Jz/9k6YSdp9MtltKuT3k58lXba3ZD9wk/YyHw6BJ7DAdjwL/Tc7tZQ==","signatures":[{"sig":"MEQCIEB1UGwq9nVXwhH0OvcuuYRlnNlUKzZx/qhy8MPXan6WAiAAwZMLsAfgj10gED/AOqbaJhbdsdd6pTBGq4Iepb318Q==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":167102},"main":"./dist/index.js","types":"./dist/index.d.ts","module":"./dist/index.js","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js","default":"./dist/index.js"},"./package.json":"./package.json"},"gitHead":"74b0582a7fb6bfab9e20b462e9ffc12eeb9b6b50","_npmUser":{"name":"chainberry","email":"pd@chainberry.com"},"_npmVersion":"10.9.2","description":"Pure signing library for multiple blockchain networks — EVM, BTC, LTC, SOL, TRX, XRP, TON","directories":{},"_nodeVersion":"23.11.0","dependencies":{"tslib":"2.8.1"},"_hasShrinkwrap":false,"peerDependencies":{"xrpl":">=2.0.0","ecpair":">=2.0.0","ethers":">=6.0.0","tronweb":">=5.0.0","@ton/ton":">=13.0.0","@ton/core":">=0.50.0","@ton/crypto":">=3.0.0","bitcoinjs-lib":">=6.0.0","tiny-secp256k1":">=2.0.0","@solana/web3.js":">=1.0.0"},"peerDependenciesMeta":{"xrpl":{"optional":true},"ecpair":{"optional":true},"ethers":{"optional":true},"tronweb":{"optional":true},"@ton/ton":{"optional":true},"@ton/core":{"optional":true},"@ton/crypto":{"optional":true},"bitcoinjs-lib":{"optional":true},"tiny-secp256k1":{"optional":true},"@solana/web3.js":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/berry-signer_1.0.4_1783071638088_0.8287487674851095","host":"s3://npm-registry-packages-npm-production"}},"1.0.5":{"name":"@chainberry/berry-signer","version":"1.0.5","keywords":["blockchain","signing","wallet","ethereum","bitcoin","solana","tron","ton","xrp","litecoin"],"license":"MIT","_id":"@chainberry/berry-signer@1.0.5","maintainers":[{"name":"chainberry","email":"pd@chainberry.com"}],"dist":{"shasum":"c0d42ee36dbe4967eb6c7e3f5536cdf94dcbd4e0","tarball":"https://registry.npmjs.org/@chainberry/berry-signer/-/berry-signer-1.0.5.tgz","fileCount":39,"integrity":"sha512-4dXTmI2OdSgbOgggEH0vR3BaF9GyfiSoQ7snI9858Q1t6Kra2SISsRHnlkVfelVLVOhl4Uu1aRrGW9orQdnD+w==","signatures":[{"sig":"MEUCIFJMl/8PRMQfz8J1E4tjwRPSu/Mp1m0Vjld/6Gnf+A8CAiEAnG8aqi9u6h3rZZfHHElmRbjtnMwu97naa1X2prszlbU=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":174770},"main":"./dist/index.js","types":"./dist/index.d.ts","module":"./dist/index.js","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js","default":"./dist/index.js"},"./package.json":"./package.json"},"gitHead":"f28219590583719100fbba5d7107d7e518310b5a","_npmUser":{"name":"chainberry","email":"pd@chainberry.com"},"_npmVersion":"10.9.2","description":"Pure signing library for multiple blockchain networks — EVM, BTC, LTC, SOL, TRX, XRP, TON","directories":{},"_nodeVersion":"23.11.0","dependencies":{"tslib":"2.8.1"},"_hasShrinkwrap":false,"peerDependencies":{"xrpl":">=2.0.0","ecpair":">=2.0.0","ethers":">=6.0.0","tronweb":">=5.0.0","@ton/ton":">=13.0.0","@ton/core":">=0.50.0","@ton/crypto":">=3.0.0","bitcoinjs-lib":">=6.0.0","tiny-secp256k1":">=2.0.0","@solana/web3.js":">=1.0.0"},"peerDependenciesMeta":{"xrpl":{"optional":true},"ecpair":{"optional":true},"ethers":{"optional":true},"tronweb":{"optional":true},"@ton/ton":{"optional":true},"@ton/core":{"optional":true},"@ton/crypto":{"optional":true},"bitcoinjs-lib":{"optional":true},"tiny-secp256k1":{"optional":true},"@solana/web3.js":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/berry-signer_1.0.5_1783533738921_0.7066265421762596","host":"s3://npm-registry-packages-npm-production"}},"1.0.6":{"name":"@chainberry/berry-signer","version":"1.0.6","keywords":["blockchain","signing","wallet","ethereum","bitcoin","bitcoin-cash","solana","tron","ton","xrp","litecoin"],"license":"MIT","_id":"@chainberry/berry-signer@1.0.6","maintainers":[{"name":"chainberry","email":"pd@chainberry.com"}],"dist":{"shasum":"ed067285a10382893bb6c01f1cd3bcd4ada3dc0e","tarball":"https://registry.npmjs.org/@chainberry/berry-signer/-/berry-signer-1.0.6.tgz","fileCount":55,"integrity":"sha512-xeDSiywHjtVjZK62y6FcyOFqVT3qLSL21kJqU+ndSgNCSszqsLHlvoKyVInsU25k9aqOID1mDUfMwDIPCji5dg==","signatures":[{"sig":"MEYCIQCwU6TSIqtS+t9lNyc3O67yyXjxjAKSscDRXEgfwxtXdAIhAPf5Xhn5ECHn6AtX6LGbm8/SfPugBMSOT45r7qS5Mr3x","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":210953},"main":"./dist/index.js","types":"./dist/index.d.ts","module":"./dist/index.js","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js","default":"./dist/index.js"},"./package.json":"./package.json"},"gitHead":"3b6ede3704c117f9836a7962d231c1e174f547c4","_npmUser":{"name":"chainberry","email":"pd@chainberry.com"},"_npmVersion":"10.9.2","description":"Pure signing library for multiple blockchain networks — EVM, BTC, BCH, LTC, SOL, TRX, XRP, TON","directories":{},"_nodeVersion":"23.11.0","dependencies":{"tslib":"2.8.1"},"_hasShrinkwrap":false,"peerDependencies":{"xrpl":">=2.0.0","ecpair":">=2.0.0","ethers":">=6.0.0","tronweb":">=5.0.0","@ton/ton":">=13.0.0","@ton/core":">=0.50.0","@ton/crypto":">=3.0.0","bitcoinjs-lib":">=6.0.0","tiny-secp256k1":">=2.0.0","@solana/web3.js":">=1.0.0","bitcore-lib-cash":">=10.0.0"},"peerDependenciesMeta":{"xrpl":{"optional":false},"ecpair":{"optional":false},"ethers":{"optional":false},"tronweb":{"optional":false},"@ton/ton":{"optional":false},"@ton/core":{"optional":false},"@ton/crypto":{"optional":false},"bitcoinjs-lib":{"optional":false},"tiny-secp256k1":{"optional":false},"@solana/web3.js":{"optional":false},"bitcore-lib-cash":{"optional":false}},"_npmOperationalInternal":{"tmp":"tmp/berry-signer_1.0.6_1784621099007_0.5845984311854131","host":"s3://npm-registry-packages-npm-production"}},"1.1.0":{"_id":"@chainberry/berry-signer@1.1.0","dist":{"shasum":"a2c6acc45b71f15705cddcc20e81561facfd0216","tarball":"https://registry.npmjs.org/@chainberry/berry-signer/-/berry-signer-1.1.0.tgz","fileCount":59,"integrity":"sha512-B+C4W05pLky3i23prhIQuyhwR0s0u+VjZ8bQS2pCLDuSYHu0+k0vSMpjX9JGpOfHDP6rTZqp7W6GJcYNOesywQ==","signatures":[{"sig":"MEYCIQDOD6NilEQk3YE1LrUHhnItJqdaVSiGTVWuy+F2KSR/1gIhAM8n2VPFftPdQqzUoYD0Qgn3LB4TZ/OVauugXhVMOZwZ","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEUCIDrqAoHS8u1EftzdpNuFHA6cv3Iixq7uVwf5DkrQP5ZzAiEApzRBUKy6XrwH2gCYsKBpWyaPcpWrb8eDwl8RviFQKgM="}],"unpackedSize":229362},"main":"./dist/index.js","name":"@chainberry/berry-signer","types":"./dist/index.d.ts","module":"./dist/index.js","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js","default":"./dist/index.js"},"./package.json":"./package.json"},"gitHead":"41390594947c16f85249ec2b6fa627bc65f6c159","license":"MIT","version":"1.1.0","_npmUser":{"name":"chainberry","email":"pd@chainberry.com"},"keywords":["blockchain","signing","wallet","ethereum","bitcoin","bitcoin-cash","solana","tron","ton","xrp","litecoin"],"_npmVersion":"10.9.2","description":"Pure signing library for multiple blockchain networks — EVM, BTC, BCH, LTC, SOL, TRX, XRP, TON, ADA","directories":{},"maintainers":[{"name":"chainberry","email":"pd@chainberry.com"}],"_nodeVersion":"23.11.0","dependencies":{"tslib":"2.8.1"},"_hasShrinkwrap":false,"peerDependencies":{"xrpl":">=2.0.0","ecpair":">=2.0.0","ethers":">=6.0.0","tronweb":">=5.0.0","@ton/ton":">=13.0.0","@ton/core":">=0.50.0","@ton/crypto":">=3.0.0","bitcoinjs-lib":">=6.0.0","tiny-secp256k1":">=2.0.0","@solana/web3.js":">=1.0.0","bitcore-lib-cash":">=10.0.0","@trustwallet/wallet-core":">=3.0.0"},"peerDependenciesMeta":{"xrpl":{"optional":false},"ecpair":{"optional":false},"ethers":{"optional":false},"tronweb":{"optional":false},"@ton/ton":{"optional":false},"@ton/core":{"optional":false},"@ton/crypto":{"optional":false},"bitcoinjs-lib":{"optional":false},"tiny-secp256k1":{"optional":false},"@solana/web3.js":{"optional":false},"bitcore-lib-cash":{"optional":false},"@trustwallet/wallet-core":{"optional":false}},"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/berry-signer_1.1.0_1790932789577_0.841463812877036"}}},"time":{"created":"2026-07-03T08:11:56.792Z","modified":"2026-10-02T09:19:50.095Z","1.0.0":"2026-07-03T08:11:57.100Z","1.0.1":"2026-07-03T08:15:14.545Z","1.0.2":"2026-07-03T08:32:11.874Z","1.0.3":"2026-07-03T09:16:47.316Z","1.0.4":"2026-07-03T09:40:38.205Z","1.0.5":"2026-07-08T18:02:19.232Z","1.0.6":"2026-07-21T08:04:59.122Z","1.1.0":"2026-10-02T09:19:49.694Z"},"license":"MIT","keywords":["blockchain","signing","wallet","ethereum","bitcoin","bitcoin-cash","solana","tron","ton","xrp","litecoin"],"description":"Pure signing library for multiple blockchain networks — EVM, BTC, BCH, LTC, SOL, TRX, XRP, TON, ADA","maintainers":[{"name":"chainberry","email":"pd@chainberry.com"}],"readme":"# BerrySigner\n\nPure signing library for multiple blockchain networks. No network calls — takes an unsigned transaction and a private key, returns a signed transaction ready for broadcast.\n\nCan run anywhere: browser, mobile wallet, browser extension, Node.js backend, or React Native.\n\n## Installation\n\n```sh\nnpm install @chainberry/berry-signer\n```\n\nInstall only the peer dependencies you need (one per chain):\n\n```sh\n# EVM (ETH, BNB, AVAX, ARB, OP, BASE, SONIC, POL, ...)\nnpm install ethers\n\n# Bitcoin\nnpm install bitcoinjs-lib ecpair tiny-secp256k1\n\n# Litecoin\nnpm install bitcoinjs-lib ecpair tiny-secp256k1\n\n# Solana\nnpm install @solana/web3.js\n\n# TRON\nnpm install tronweb\n\n# XRP Ledger\nnpm install xrpl tiny-secp256k1\n\n# TON\nnpm install @ton/core @ton/crypto @ton/ton\n```\n\n---\n\n## Supported Chains\n\n| Chain | Function | Returns |\n|-------|----------|---------|\n| EVM (ETH, BNB, POL, AVAX, ARB, OP, BASE, SONIC, …) | `signEvmTransaction` | Signed tx hex string |\n| Bitcoin | `signBtcTransaction` | Raw tx hex string |\n| Litecoin | `signLtcTransaction` | Raw tx hex string |\n| Solana | `signSolTransaction` | Signed tx base64 string |\n| TRON | `signTrxTransaction` | Signed tx JSON string |\n| XRP Ledger | `signXrpTransaction` | Signed tx blob hex string |\n| TON | `signTonTransaction` | `{ bocBase64, txHash }` |\n\n---\n\n## Private Key Format\n\nAll functions accept the private key as a hex string, with or without `0x` prefix — unless noted otherwise.\n\n| Chain | Accepted formats |\n|-------|-----------------|\n| EVM | `0x...` or plain hex |\n| Bitcoin / Litecoin | Plain hex (32 bytes) |\n| Solana | Hex (32 or 64 bytes) **or** base58 |\n| TRON | Plain hex (no `0x`) |\n| XRP | Plain hex (32 bytes) |\n| TON | Hex (32 bytes), with or without `0x` |\n\n---\n\n## API Reference\n\n### EVM — `signEvmTransaction`\n\n```ts\nimport { signEvmTransaction, EvmUnsignedTx } from \"@chainberry/berry-signer\";\n\nconst signedTxHex: string = await signEvmTransaction(privateKeyHex, unsignedTx);\n```\n\n**`EvmUnsignedTx` type:**\n\n```ts\ntype EvmUnsignedTx = {\n  to: string;         // recipient address\n  chainId: number;    // e.g. 1 (ETH), 56 (BNB), 42161 (ARB)\n  nonce: number;      // from eth_getTransactionCount\n  gasLimit: string;   // estimated gas, as decimal string\n\n  value?: string;     // amount in wei, as decimal string (omit for token transfers)\n  data?: string;      // hex-encoded calldata (required for ERC-20 transfers)\n\n  // EIP-1559 (preferred — use these if the network supports them):\n  maxFeePerGas?: string;          // decimal string, in wei\n  maxPriorityFeePerGas?: string;  // decimal string, in wei\n\n  // Legacy (fallback — use if maxFeePerGas is not available):\n  gasPrice?: string;  // decimal string, in wei\n};\n```\n\nReturns a serialized signed transaction hex string, ready for `eth_sendRawTransaction`.\n\n> **Note:** All numeric fields (`gasLimit`, `value`, `gasPrice`, etc.) are strings, not BigInt — this keeps the type JSON-serializable and avoids precision loss across network boundaries.\n\n---\n\n### Bitcoin — `signBtcTransaction`\n\n```ts\nimport { signBtcTransaction } from \"@chainberry/berry-signer\";\n\nconst signedTxHex: string = signBtcTransaction(privateKeyHex, unsignedPsbtBase64, isMainnet);\n```\n\n| Param | Type | Description |\n|-------|------|-------------|\n| `privateKeyHex` | `string` | 32-byte private key as hex |\n| `unsignedPsbtBase64` | `string` | PSBT (Partially Signed Bitcoin Transaction) in base64 — build with UTXOs and outputs |\n| `isMainnet` | `boolean` | `true` for mainnet, `false` for testnet |\n\nReturns the raw transaction hex ready for broadcast.\n\n---\n\n### Litecoin — `signLtcTransaction`\n\n```ts\nimport { signLtcTransaction } from \"@chainberry/berry-signer\";\n\nconst signedTxHex: string = signLtcTransaction(privateKeyHex, unsignedPsbtBase64, isMainnet);\n```\n\nSame signature as `signBtcTransaction`. Uses Litecoin-specific network params (bech32 prefix `ltc` / `tltc`).\n\n---\n\n### Solana — `signSolTransaction`\n\n```ts\nimport { signSolTransaction } from \"@chainberry/berry-signer\";\n\nconst signedTxBase64: string = signSolTransaction(privateKey, unsignedTxBase64);\n```\n\n| Param | Type | Description |\n|-------|------|-------------|\n| `privateKey` | `string` | 32-byte seed (hex or base58) or 64-byte keypair (hex or base58) |\n| `unsignedTxBase64` | `string` | Serialized `Transaction` object in base64 — must already have `recentBlockhash` set |\n\nReturns a base64-encoded signed transaction, ready for `sendRawTransaction`.\n\n> **Note:** Solana is the only chain that accepts base58 private keys (Phantom wallet export format). Both 32-byte seeds and 64-byte keypairs are accepted.\n\n---\n\n### TRON — `signTrxTransaction`\n\n```ts\nimport { signTrxTransaction } from \"@chainberry/berry-signer\";\n\nconst signedTxJson: string = await signTrxTransaction(privateKey, unsignedTx, rpcUrl);\n```\n\n| Param | Type | Description |\n|-------|------|-------------|\n| `privateKey` | `string` | 32-byte private key as hex (no `0x`) |\n| `unsignedTx` | `unknown` | Raw transaction object from `transactionBuilder` — TronWeb format |\n| `rpcUrl` | `string` | Any reachable TRON node URL (e.g. `https://api.trongrid.io`) |\n\nReturns a JSON string of the signed transaction object.\n\n> **Note:** `rpcUrl` is required by the TronWeb SDK constructor but **no network call is made during signing**. You can pass any reachable TRON node — it will not be contacted.\n\n> **Expiration:** TRON transactions expire 60 seconds after creation by default. If you're signing client-side and broadcasting server-side with any delay, extend the expiration before signing using `tronWeb.transactionBuilder.extendExpiration(tx, 600)` (10 minutes).\n\n---\n\n### XRP Ledger — `signXrpTransaction`\n\n```ts\nimport { signXrpTransaction } from \"@chainberry/berry-signer\";\nimport type { Payment } from \"xrpl\";\n\nconst signedTxBlob: string = signXrpTransaction(privateKeyHex, preparedTx);\n```\n\n| Param | Type | Description |\n|-------|------|-------------|\n| `privateKeyHex` | `string` | 32-byte private key as hex |\n| `preparedTx` | `Payment` | XRPL `Payment` object with `Sequence`, `Fee`, and `LastLedgerSequence` already set |\n\nReturns a hex-encoded signed transaction blob ready for `submit`.\n\n> **Note:** The `Payment` type is from the `xrpl` package. You must fill in `Sequence`, `Fee`, and `LastLedgerSequence` before signing (via xrpl's `autofill` or manually from network data).\n\n---\n\n### TON — `signTonTransaction`\n\n```ts\nimport { signTonTransaction, SignedTonTx } from \"@chainberry/berry-signer\";\n\nconst result: SignedTonTx = signTonTransaction(privateKeyHex, {\n  toAddress,\n  amount,   // in TON (e.g. \"1.5\"), NOT in nanoton\n  seqno,    // fetch from network first; use 0 for uninitialized wallets\n  memoId,   // optional: memo string (for exchange deposits, CEX tagging)\n});\n\n// result.bocBase64 — signed BOC, ready for broadcast\n// result.txHash   — pre-computed tx hash (useful as broadcast fallback identifier)\n```\n\n**`SignedTonTx` type:**\n\n```ts\ntype SignedTonTx = {\n  bocBase64: string;  // base64-encoded signed bag-of-cells\n  txHash: string;     // hex-encoded transaction hash\n};\n```\n\n> **Uninitialized wallet:** If `seqno === 0`, the wallet init cell is automatically included in the BOC. This is required for a wallet that has never sent a transaction (newly funded address).\n\n> **`txHash` usage:** TON's `sendBoc` API does not return a transaction hash. `txHash` is pre-computed from the cell hash before broadcast and can be used to look up the transaction on-chain.\n\n---\n\n## Full Examples\n\n### EVM — Native transfer\n\n```ts\nimport { ethers } from \"ethers\";\nimport { signEvmTransaction } from \"@chainberry/berry-signer\";\n\nconst provider = new ethers.JsonRpcProvider(\"https://arb1.arbitrum.io/rpc\");\n\n// Fetch network data (read-only — no private key needed yet)\nconst [feeData, nonce] = await Promise.all([\n  provider.getFeeData(),\n  provider.getTransactionCount(fromAddress, \"latest\"),\n]);\n\nconst unsignedTx = {\n  to: toAddress,\n  chainId: 42161, // Arbitrum One\n  nonce,\n  gasLimit: \"21000\",\n  maxFeePerGas: feeData.maxFeePerGas!.toString(),\n  maxPriorityFeePerGas: feeData.maxPriorityFeePerGas!.toString(),\n  value: ethers.parseEther(\"0.01\").toString(),\n};\n\n// Sign locally — private key never leaves this environment\nconst signedTx = await signEvmTransaction(privateKeyHex, unsignedTx);\n\n// Send signed tx to server for broadcast (or broadcast directly)\nawait fetch(\"/api/broadcast\", {\n  method: \"POST\",\n  body: JSON.stringify({ signedTx, network: \"arbitrum\" }),\n});\n```\n\n### EVM — ERC-20 token transfer\n\n```ts\nimport { ethers } from \"ethers\";\nimport { signEvmTransaction } from \"@chainberry/berry-signer\";\n\nconst provider = new ethers.JsonRpcProvider(\"https://arb1.arbitrum.io/rpc\");\nconst usdcAddress = \"0xaf88d065e77c8cC2239327C5EDb3A432268e5831\"; // USDC on Arbitrum\nconst erc20Interface = new ethers.Interface([\"function transfer(address,uint256)\"]);\n\n// Build calldata for ERC-20 transfer\nconst data = erc20Interface.encodeFunctionData(\"transfer\", [\n  toAddress,\n  ethers.parseUnits(\"10.0\", 6), // USDC has 6 decimals\n]);\n\nconst [feeData, nonce, gasLimit] = await Promise.all([\n  provider.getFeeData(),\n  provider.getTransactionCount(fromAddress, \"latest\"),\n  provider.estimateGas({ from: fromAddress, to: usdcAddress, data }),\n]);\n\nconst unsignedTx = {\n  to: usdcAddress,          // send to the token contract, not the recipient\n  chainId: 42161,\n  nonce,\n  gasLimit: gasLimit.toString(),\n  maxFeePerGas: feeData.maxFeePerGas!.toString(),\n  maxPriorityFeePerGas: feeData.maxPriorityFeePerGas!.toString(),\n  value: \"0\",               // no ETH value for token transfers\n  data,                     // encoded transfer(address,uint256)\n};\n\nconst signedTx = await signEvmTransaction(privateKeyHex, unsignedTx);\n```\n\n### TON — Native transfer\n\n**Step 1 — Fetch seqno from network:**\n```ts\nconst response = await fetch(\"https://toncenter.com/api/v2/runGetMethod\", {\n  method: \"POST\",\n  headers: { \"Content-Type\": \"application/json\" },\n  body: JSON.stringify({ address: walletAddress, method: \"seqno\", stack: [] }),\n});\nconst data = await response.json();\n\n// exit_code !== 0 means wallet is not yet deployed — use seqno 0\nconst seqno = data.result?.exit_code === 0\n  ? parseInt(data.result.stack[0][1], 16)\n  : 0;\n```\n\n**Step 2 — Sign locally:**\n```ts\nimport { signTonTransaction } from \"@chainberry/berry-signer\";\n\nconst { bocBase64, txHash } = signTonTransaction(privateKeyHex, {\n  toAddress: \"UQA...\",   // recipient TON address\n  amount: \"1.5\",         // in TON, not nanoton\n  seqno,                 // 0 = wallet not yet deployed, init is included automatically\n  memoId: \"12345\",       // optional: memo for exchange deposits\n});\n```\n\n**Step 3 — Broadcast:**\n```ts\nawait fetch(\"https://toncenter.com/api/v2/sendBoc\", {\n  method: \"POST\",\n  headers: { \"Content-Type\": \"application/json\" },\n  body: JSON.stringify({ boc: bocBase64 }),\n});\n\n// txHash can be used to track the transaction on-chain\nconsole.log(\"Track tx:\", `https://tonscan.org/tx/${txHash}`);\n```\n\n### Bitcoin — Native transfer\n\n```ts\nimport { signBtcTransaction } from \"@chainberry/berry-signer\";\n\n// unsignedPsbtBase64 is built by your server using UTXOs + fee rate\n// (fetched from mempool.space or similar indexer)\nconst signedTxHex = signBtcTransaction(privateKeyHex, unsignedPsbtBase64, true);\n\n// Broadcast via your server or directly to a BTC node\nawait fetch(\"/api/broadcast\", {\n  method: \"POST\",\n  body: JSON.stringify({ signedTx: signedTxHex, network: \"bitcoin\" }),\n});\n```\n\n### Solana — Native transfer\n\n```ts\nimport { signSolTransaction } from \"@chainberry/berry-signer\";\n\n// unsignedTxBase64 is built by your server with recentBlockhash + instructions\nconst signedTxBase64 = signSolTransaction(privateKey, unsignedTxBase64);\n\nawait fetch(\"/api/broadcast\", {\n  method: \"POST\",\n  body: JSON.stringify({ signedTx: signedTxBase64, network: \"solana\" }),\n});\n```\n\n---\n\n## Design\n\nThe private key never leaves the signing environment. The client (or secure signing service) prepares and signs the transaction, then sends only the signed tx for broadcast.\n\n```\nSigning environment                           Broadcast environment\n  │                                              │\n  │── fetch nonce / seqno / fee from RPC ───────>│ (or fetched directly by signer)\n  │                                              │\n  │── build unsigned tx                          │\n  │── sign with private key                      │\n  │                                              │\n  │── send signed tx only ──────────────────────>│── broadcast to network\n  │                                              │\n  │   (private key never crosses this boundary)  │\n```\n\nThis separation makes BerrySigner useful in trust-minimized architectures — hardware wallets, MPC signers, browser extensions, or any environment where the signing key cannot be exposed to network-connected servers.\n\n---\n\n## Chain IDs (EVM)\n\n| Network | Chain ID |\n|---------|----------|\n| Ethereum | 1 |\n| BNB Smart Chain | 56 |\n| Polygon | 137 |\n| Avalanche C-Chain | 43114 |\n| Arbitrum One | 42161 |\n| Optimism | 10 |\n| Base | 8453 |\n| Sonic | 146 |\n\n---\n\n## License\n\nMIT\n","readmeFilename":"README.md"}