diff --git a/.changeset/green-taxis-talk.md b/.changeset/green-taxis-talk.md
new file mode 100644
index 00000000000..a04d105cad6
--- /dev/null
+++ b/.changeset/green-taxis-talk.md
@@ -0,0 +1,7 @@
+---
+"ledger-live-desktop": minor
+"@ledgerhq/live-common": minor
+"@ledgerhq/cryptoassets": minor
+---
+
+Add support of Cardano tokens in LLD
diff --git a/apps/ledger-live-desktop/cryptoassets.md b/apps/ledger-live-desktop/cryptoassets.md
index 40d0f4243de..88e4e9ec64e 100644
--- a/apps/ledger-live-desktop/cryptoassets.md
+++ b/apps/ledger-live-desktop/cryptoassets.md
@@ -109,7 +109,7 @@
| lisk | LSK | NO | lisk |
| æternity | AE | NO | aeternity |
-## Tokens (10098)
+## Tokens (10199)
| parent currency | ticker | contract | name | status | ledger id |
|--|--|--|--|--|--|
| Algorand | ARCC | MESEJMPXKL7YUWEQGNRCKSLMQDKHOHWIZ3RBWP7BV4JDMUJXFUVQZWUBJM | Asia Reserve Currency Coin | countervalues disabled | algorand/asa/163650 |
@@ -769,6 +769,107 @@
| Binance Smart Chain | VBSWAP | 0x4f0ed527e8A95ecAA132Af214dFd41F30b361600 | vSWAP.fi | countervalues disabled | bsc/bep20/vswap.fi |
| Binance Smart Chain | WRX | 0x8e17ed70334C87eCE574C9d537BC153d8609e2a3 | wazirx token | countervalues disabled | bsc/bep20/wazirx_token |
| Binance Smart Chain | WATCH | 0x7A9f28EB62C791422Aa23CeAE1dA9C847cBeC9b0 | yieldwatch | | bsc/bep20/yieldwatch |
+| Cardano | PUDGY | 133fac9e153194428eb0919be39837b42b9e977fc7298f3ff1b76ef95055444759 | $PUDGY Token | | cardano/native/133fac9e153194428eb0919be39837b42b9e977fc7298f3ff1b76ef95055444759 |
+| Cardano | WOLF | 1a71dc14baa0b4fcfb34464adc6656d0e562571e2ac1bc990c9ce5f6574f4c46 | $WOLF | | cardano/native/1a71dc14baa0b4fcfb34464adc6656d0e562571e2ac1bc990c9ce5f6574f4c46 |
+| Cardano | ASHIB | afc910d7a306d20c12903979d4935ae4307241d03245743548e767834153484942 | ADA Shiba Inu | | cardano/native/afc910d7a306d20c12903979d4935ae4307241d03245743548e767834153484942 |
+| Cardano | ADAFOX | e98165a25cd0320b25f22d686268e58e66f855b6d85974947ccd708d414441464f58 | ADAFOX | | cardano/native/e98165a25cd0320b25f22d686268e58e66f855b6d85974947ccd708d414441464f58 |
+| Cardano | ADAX | 0c78f619e54a5d00e143f66181a2c500d0c394b38a10e86cd1a23c5f41444158 | ADAX | | cardano/native/0c78f619e54a5d00e143f66181a2c500d0c394b38a10e86cd1a23c5f41444158 |
+| Cardano | AADA | 8fef2d34078659493ce161a6c7fba4b56afefa8535296a5743f6958741414441 | Aada DAO Token | | cardano/native/8fef2d34078659493ce161a6c7fba4b56afefa8535296a5743f6958741414441 |
+| Cardano | ADO | 5ad8deb64bfec21ad2d96e1270b5873d0c4d0f231b928b4c39eb243561646f736961 | Adosia | | cardano/native/5ad8deb64bfec21ad2d96e1270b5873d0c4d0f231b928b4c39eb243561646f736961 |
+| Cardano | BORGZ | 7f376e3d1cf52e6c4350a1a91c8f8d0f0b63baedd443999ebe8fe57a424f52475a | BORGZ | | cardano/native/7f376e3d1cf52e6c4350a1a91c8f8d0f0b63baedd443999ebe8fe57a424f52475a |
+| Cardano | BROOM | 8d0ae3c5b13b47907b16511a540d47436d12dcc96453c0f59089b45142524f4f4d | BROOM Token | | cardano/native/8d0ae3c5b13b47907b16511a540d47436d12dcc96453c0f59089b45142524f4f4d |
+| Cardano | BSEAL | 59e31d17e4d212ea35df6088e0395455c40f5ad463d161497a89c567426162795365616c | BabySeal | | cardano/native/59e31d17e4d212ea35df6088e0395455c40f5ad463d161497a89c567426162795365616c |
+| Cardano | BEAG | d3558649b7874a1a596378515f9b80da63e73f324439ea113d34c9bb42454147 | Beagle Bucks | | cardano/native/d3558649b7874a1a596378515f9b80da63e73f324439ea113d34c9bb42454147 |
+| Cardano | BISON | 2afb448ef716bfbed1dcb676102194c3009bee5399e93b90def9db6a4249534f4e | Bison Coin | | cardano/native/2afb448ef716bfbed1dcb676102194c3009bee5399e93b90def9db6a4249534f4e |
+| Cardano | BDOGE | f555c46bad0731d080c9381d7fff6f82839946a66bd070d185e1ea2f42444f4745 | BlackDoge | | cardano/native/f555c46bad0731d080c9381d7fff6f82839946a66bd070d185e1ea2f42444f4745 |
+| Cardano | BCG | 0c92aabef5a8f91a36470d0762806c165c0d04aa992541e25d55486a424347 | Blockchaingames | | cardano/native/0c92aabef5a8f91a36470d0762806c165c0d04aa992541e25d55486a424347 |
+| Cardano | BLOOM | 4c17b7009448a33d1834b0946ea752ecd0cc61c7bb25cd9ff18cff58426c6f6f6d | Bloom | | cardano/native/4c17b7009448a33d1834b0946ea752ecd0cc61c7bb25cd9ff18cff58426c6f6f6d |
+| Cardano | CHERRY | e14fe3ab348f9a6198359481472601f4557b9f86984f40a186a3b1e8434845525259 | CHERRY Token | | cardano/native/e14fe3ab348f9a6198359481472601f4557b9f86984f40a186a3b1e8434845525259 |
+| Cardano | CLAP | db30c7905f598ed0154de14f970de0f61f0cb3943ed82c891968480a434c4150 | CLAP | | cardano/native/db30c7905f598ed0154de14f970de0f61f0cb3943ed82c891968480a434c4150 |
+| Cardano | CardaniaFounderBlue | ccb3577601d6cf0e021288871112926338bee685c6c37eeadf6dddd943617264616e6961466f756e646572426c7565 | CardaniaFounderBlue | | cardano/native/ccb3577601d6cf0e021288871112926338bee685c6c37eeadf6dddd943617264616e6961466f756e646572426c7565 |
+| Cardano | CardaniaFounderGreen | ccb3577601d6cf0e021288871112926338bee685c6c37eeadf6dddd943617264616e6961466f756e646572477265656e | CardaniaFounderGreen | | cardano/native/ccb3577601d6cf0e021288871112926338bee685c6c37eeadf6dddd943617264616e6961466f756e646572477265656e |
+| Cardano | CardaniaFounderRed | ccb3577601d6cf0e021288871112926338bee685c6c37eeadf6dddd943617264616e6961466f756e646572526564 | CardaniaFounderRed | | cardano/native/ccb3577601d6cf0e021288871112926338bee685c6c37eeadf6dddd943617264616e6961466f756e646572526564 |
+| Cardano | C4 | a00fdf4fb9ab6c8c2bd1533a2f14855edf12aed5ecbf96d4b5f5b9394334 | Cardano Crocs Club Coin | | cardano/native/a00fdf4fb9ab6c8c2bd1533a2f14855edf12aed5ecbf96d4b5f5b9394334 |
+| Cardano | CARGO | f4364875e75320d405ceadebdf0db63fadaff55c72d4ff6b82f0676a434152474f | Cardano Gold | | cardano/native/f4364875e75320d405ceadebdf0db63fadaff55c72d4ff6b82f0676a434152474f |
+| Cardano | CNT | 2c96f49b6e6e32ae69a182e85b74db4edfc9539496a13ab76d1258fa434e54 | Cardano Native Token | | cardano/native/2c96f49b6e6e32ae69a182e85b74db4edfc9539496a13ab76d1258fa434e54 |
+| Cardano | CDOG | d030b626219d81673bd32932d2245e0c71ae5193281f971022b23a78436172646f67656f | Cardogeo | | cardano/native/d030b626219d81673bd32932d2245e0c71ae5193281f971022b23a78436172646f67656f |
+| Cardano | $PURR | d3a034e403b98cbdb0adbc8a3144d7779330916e190d387815bb85c650555252 | CatKinson | | cardano/native/d3a034e403b98cbdb0adbc8a3144d7779330916e190d387815bb85c650555252 |
+| Cardano | CHRLZ | e9c28a71273f825b13f38244ccf1fea97c4025813610d01a7c5d681f436861726c7a20546f6b656e | Charlz Token | | cardano/native/e9c28a71273f825b13f38244ccf1fea97c4025813610d01a7c5d681f436861726c7a20546f6b656e |
+| Cardano | $CLAW | 240fb00eff73acc51c09e81dae6628c4bedb9964151d45e3faed874f434c4157 | Claw Token | | cardano/native/240fb00eff73acc51c09e81dae6628c4bedb9964151d45e3faed874f434c4157 |
+| Cardano | COPI | b6a7467ea1deb012808ef4e87b5ff371e85f7142d7b356a40d9b42a0436f726e75636f70696173205b76696120436861696e506f72742e696f5d | Cornucopias Token | | cardano/native/b6a7467ea1deb012808ef4e87b5ff371e85f7142d7b356a40d9b42a0436f726e75636f70696173205b76696120436861696e506f72742e696f5d |
+| Cardano | DANA | c88bbd1848db5ea665b1fffbefba86e8dcd723b5085348e8a8d2260f44414e41 | DANA | | cardano/native/c88bbd1848db5ea665b1fffbefba86e8dcd723b5085348e8a8d2260f44414e41 |
+| Cardano | DIBS | c68307e7ca850513507f1498862a57c7f4fae7ba8e84b8bc074093a944494253 | DIBS | | cardano/native/c68307e7ca850513507f1498862a57c7f4fae7ba8e84b8bc074093a944494253 |
+| Cardano | DOEX | dca54ecf37b0e3af2fdfd336e1d21fadcc45b3261b0f73a095631dfe444f4558 | DOEX | | cardano/native/dca54ecf37b0e3af2fdfd336e1d21fadcc45b3261b0f73a095631dfe444f4558 |
+| Cardano | DRIP | af2e27f580f7f08e93190a81f72462f153026d06450924726645891b44524950 | DRIP | | cardano/native/af2e27f580f7f08e93190a81f72462f153026d06450924726645891b44524950 |
+| Cardano | DEFS | f28f457472e539dc75e1598a2beddf49ce5a717998c708f05f5de61044454653 | Defender Silver | | cardano/native/f28f457472e539dc75e1598a2beddf49ce5a717998c708f05f5de61044454653 |
+| Cardano | DGADA | b4273f1d8d0021d188784c3d72dc514f602b7ab8cfb87e3134550c42446f6765414441 | DogeADA | | cardano/native/b4273f1d8d0021d188784c3d72dc514f602b7ab8cfb87e3134550c42446f6765414441 |
+| Cardano | ETB | a89568bb399d0cdc38367e47831c95186f5c79e58174e08a182323964554424643546f6b656e | ETBFCToken | | cardano/native/a89568bb399d0cdc38367e47831c95186f5c79e58174e08a182323964554424643546f6b656e |
+| Cardano | EMP | 6c8642400e8437f737eb86df0fc8a8437c760f48592b1ba8f5767e81456d706f7761 | Empowa | | cardano/native/6c8642400e8437f737eb86df0fc8a8437c760f48592b1ba8f5767e81456d706f7761 |
+| Cardano | EUS | 88691a70bb0fe49cf9124b4f78553c36c09fa6264844e2b2941191734575736b6f | Eusko | | cardano/native/88691a70bb0fe49cf9124b4f78553c36c09fa6264844e2b2941191734575736b6f |
+| Cardano | FIRE | 2441ab3351c3b80213a98f4e09ddcf7dabe4879c3c94cc4e7205cb6346495245 | FIRE | | cardano/native/2441ab3351c3b80213a98f4e09ddcf7dabe4879c3c94cc4e7205cb6346495245 |
+| Cardano | FIRE | a4da8764a57e66a0085b5bfcde96c89b798d92ee83a75f59237e375b46495245 | FIRE Token | | cardano/native/a4da8764a57e66a0085b5bfcde96c89b798d92ee83a75f59237e375b46495245 |
+| Cardano | FGC | 5029eeccd52fef299509d509a8318fd7930c3dffcce1f9f39ff11ef9464743 | FabianGamerCoin | | cardano/native/5029eeccd52fef299509d509a8318fd7930c3dffcce1f9f39ff11ef9464743 |
+| Cardano | FLICK | df0172804f8418afc4e5b0a15b8fc78bdc3ca6d179405a7cd194f3b4464c49434b | Flickto | | cardano/native/df0172804f8418afc4e5b0a15b8fc78bdc3ca6d179405a7cd194f3b4464c49434b |
+| Cardano | FUD | dbc31b04d90b37332813cb4cee3e8f79994643d899a5366797e745ee465544 | FudCoin | | cardano/native/dbc31b04d90b37332813cb4cee3e8f79994643d899a5366797e745ee465544 |
+| Cardano | GROW | 544571c086d0e5c5022aca9717dd0f438e21190abb48f37b3ae129f047524f57 | GROW Token | | cardano/native/544571c086d0e5c5022aca9717dd0f438e21190abb48f37b3ae129f047524f57 |
+| Cardano | GOKEY | c7dcfa416c127f630b263c7e0fe0564430cfa9c56bba43e1a37c6915474f4b4559 | GoKey | | cardano/native/c7dcfa416c127f630b263c7e0fe0564430cfa9c56bba43e1a37c6915474f4b4559 |
+| Cardano | GTCHI | aea1ceb3625680e2f7a31ea1a64c9c430c34d8588bf4f8e3c7f9b1dd476f74636869 | Gotchi | | cardano/native/aea1ceb3625680e2f7a31ea1a64c9c430c34d8588bf4f8e3c7f9b1dd476f74636869 |
+| Cardano | HOSKY | a0028f350aaabe0545fdcb56b039bfb08e4bb4d8c4d7c3c7d481c235484f534b59 | HOSKY Token | | cardano/native/a0028f350aaabe0545fdcb56b039bfb08e4bb4d8c4d7c3c7d481c235484f534b59 |
+| Cardano | HI | 1f4b1b277c9c001c1522727506a2cfb401a0d0ade069b0241f16f07d4849 | Hosky Inu | | cardano/native/1f4b1b277c9c001c1522727506a2cfb401a0d0ade069b0241f16f07d4849 |
+| Cardano | HIS | 1f4b1b277c9c001c1522727506a2cfb401a0d0ade069b0241f16f07d484953 | Hosky Inu Silver | | cardano/native/1f4b1b277c9c001c1522727506a2cfb401a0d0ade069b0241f16f07d484953 |
+| Cardano | BLC | 585cfcbdd0786e961187999e5d5d36b38d1ebc1c4112a0a95a8bd477424c43 | Ibilecoin | | cardano/native/585cfcbdd0786e961187999e5d5d36b38d1ebc1c4112a0a95a8bd477424c43 |
+| Cardano | KAIZEN | cfee97ff8359f07a0a395a72b424bc6e030503390d864b86d4e0ecf84b41495a454e | KAIZEN | | cardano/native/cfee97ff8359f07a0a395a72b424bc6e030503390d864b86d4e0ecf84b41495a454e |
+| Cardano | KIDZ | c4c00fbd8fa227442a5e7cdecde33b24588494d05a2c50fda8938c6d4b49445a | Kidz Coin | | cardano/native/c4c00fbd8fa227442a5e7cdecde33b24588494d05a2c50fda8938c6d4b49445a |
+| Cardano | $LOBSTER | 8654e8b350e298c80d2451beb5ed80fc9eee9f38ce6b039fb8706bc34c4f4253544552 | LOBSTER | | cardano/native/8654e8b350e298c80d2451beb5ed80fc9eee9f38ce6b039fb8706bc34c4f4253544552 |
+| Cardano | LOG | c9f955eeffa84e42363b4992281d32dd2f9239153d6c66420a9acc154c4f47 | Life Log Token | | cardano/native/c9f955eeffa84e42363b4992281d32dd2f9239153d6c66420a9acc154c4f47 |
+| Cardano | LQ | da8c30857834c6ae7203935b89278c532b3995245295456f993e1d244c51 | Liqwid DAO Token | | cardano/native/da8c30857834c6ae7203935b89278c532b3995245295456f993e1d244c51 |
+| Cardano | LOOKZ | aa2797739e4f4a1efd5346998febff59909e425b5fddb1b0ec4a24f84c6f6f6b7a | Lookz | | cardano/native/aa2797739e4f4a1efd5346998febff59909e425b5fddb1b0ec4a24f84c6f6f6b7a |
+| Cardano | MELD | 6ac8ef33b510ec004fe11585f7c5a9f0c07f0c23428ab4f29c1d7d104d454c44 | MELD | | cardano/native/6ac8ef33b510ec004fe11585f7c5a9f0c07f0c23428ab4f29c1d7d104d454c44 |
+| Cardano | MEOW | 1dd1a7dde0e1e82761325ee5f4719d0d4b7c24dfba77d9bee01eed4b4d454f57 | MEOW | | cardano/native/1dd1a7dde0e1e82761325ee5f4719d0d4b7c24dfba77d9bee01eed4b4d454f57 |
+| Cardano | MILK | 8a1cfae21368b8bebbbed9800fec304e95cce39a2a57dc35e2e3ebaa4d494c4b | MILK | | cardano/native/8a1cfae21368b8bebbbed9800fec304e95cce39a2a57dc35e2e3ebaa4d494c4b |
+| Cardano | MYTH | 987c1f90efe1c95957509b460e0e4f6d6b3f7025a7aca99cd29090374d595448 | MYTH | | cardano/native/987c1f90efe1c95957509b460e0e4f6d6b3f7025a7aca99cd29090374d595448 |
+| Cardano | MKA | f4d97191f857096b441a410c036f63d6697dde0c71d2755dd664e3024d4b41 | Merkaba | | cardano/native/f4d97191f857096b441a410c036f63d6697dde0c71d2755dd664e3024d4b41 |
+| Cardano | MIN | 29d222ce763455e3d7a09a665ce554f00ac89d2e99a1a83d267170c64d494e | Minswap | | cardano/native/29d222ce763455e3d7a09a665ce554f00ac89d2e99a1a83d267170c64d494e |
+| Cardano | MINt | 29d222ce763455e3d7a09a665ce554f00ac89d2e99a1a83d267170c64d494e74 | Minswap MINt | | cardano/native/29d222ce763455e3d7a09a665ce554f00ac89d2e99a1a83d267170c64d494e74 |
+| Cardano | MYST | d01794c4604f3c0e544c537bb1f4268c0e81f45880c00c09ebe4b4a74d595354 | Mystery Token | | cardano/native/d01794c4604f3c0e544c537bb1f4268c0e81f45880c00c09ebe4b4a74d595354 |
+| Cardano | NEWM | 682fe60c9918842b3323c43b5144bc3d52a23bd2fb81345560d73f634e45574d | NEWM | | cardano/native/682fe60c9918842b3323c43b5144bc3d52a23bd2fb81345560d73f634e45574d |
+| Cardano | NFTC | b0af30edf2c7f11465853821137e0a6ebc395cab71ee39c24127ffb44e465443 | NFT Creative Coin | | cardano/native/b0af30edf2c7f11465853821137e0a6ebc395cab71ee39c24127ffb44e465443 |
+| Cardano | PAVIA | 884892bcdc360bcef87d6b3f806e7f9cd5ac30d999d49970e7a903ae5041564941 | PAVIA Token | | cardano/native/884892bcdc360bcef87d6b3f806e7f9cd5ac30d999d49970e7a903ae5041564941 |
+| Cardano | PIGY | 2aa9c1557fcf8e7caa049fa0911a8724a1cdaf8037fe0b431c6ac66450494759546f6b656e | PIGY Token | | cardano/native/2aa9c1557fcf8e7caa049fa0911a8724a1cdaf8037fe0b431c6ac66450494759546f6b656e |
+| Cardano | PROXIE | 20cd68533b47565f3c61efb39c30fdace9963bfa4c0060b613448e3c50524f584945 | PROXIE | | cardano/native/20cd68533b47565f3c61efb39c30fdace9963bfa4c0060b613448e3c50524f584945 |
+| Cardano | PinacolADA | 0c442180dd6163682d8e03b271caefb4944a24412bdd07adafb04ccb50494e41434f4c414441 | PinacolADA | | cardano/native/0c442180dd6163682d8e03b271caefb4944a24412bdd07adafb04ccb50494e41434f4c414441 |
+| Cardano | PTC | 007394e3117755fbb0558b93c54ce3bc6c85770920044ade143dc742505443 | Pocket Change | | cardano/native/007394e3117755fbb0558b93c54ce3bc6c85770920044ade143dc742505443 |
+| Cardano | KOZ | 63766427b4499dd678cb8b715dec3265dd292279ce7779447e3651e54b4f5a | Politikoz Token | | cardano/native/63766427b4499dd678cb8b715dec3265dd292279ce7779447e3651e54b4f5a |
+| Cardano | PoolPeekCoin | d0af056c509b6b1133cd83a750b7245e561169281fde3df1cb6e2d96506f6f6c5065656b436f696e | PoolPeekCoin | | cardano/native/d0af056c509b6b1133cd83a750b7245e561169281fde3df1cb6e2d96506f6f6c5065656b436f696e |
+| Cardano | QUID | b0446f1c9105f0cc5bb6bd092f5c3e523e13f8a999b31c870298fa4051554944 | QUID | | cardano/native/b0446f1c9105f0cc5bb6bd092f5c3e523e13f8a999b31c870298fa4051554944 |
+| Cardano | RAD | 6787a47e9f73efe4002d763337140da27afa8eb9a39413d2c39d4286524144546f6b656e73 | RADTokens | | cardano/native/6787a47e9f73efe4002d763337140da27afa8eb9a39413d2c39d4286524144546f6b656e73 |
+| Cardano | RAT | d5dec6074942b36b50975294fd801f7f28c907476b1ecc1b57c916ed524154 | RAT | | cardano/native/d5dec6074942b36b50975294fd801f7f28c907476b1ecc1b57c916ed524154 |
+| Cardano | RAG | ca942cb8bb5d1ef750766ded355f320880539111f10efa2b1a478ff9524147 | RaggieCoin | | cardano/native/ca942cb8bb5d1ef750766ded355f320880539111f10efa2b1a478ff9524147 |
+| Cardano | RAVE | 14a3455f71c435a04ea1fdb50a3ef4c1cab0e79fb1565627ac66a57552415645 | Ravendex | | cardano/native/14a3455f71c435a04ea1fdb50a3ef4c1cab0e79fb1565627ac66a57552415645 |
+| Cardano | REVU | 94cbb4fcbcaa2975779f273b263eb3b5f24a9951e446d6dc4c13586452455655 | Revuto | | cardano/native/94cbb4fcbcaa2975779f273b263eb3b5f24a9951e446d6dc4c13586452455655 |
+| Cardano | SHIBA | 208a2ca888886921513cb777bb832a8dc685c04de990480151f1215053484942414441 | SHIBADA | | cardano/native/208a2ca888886921513cb777bb832a8dc685c04de990480151f1215053484942414441 |
+| Cardano | SKULL | 885742cd7e0dad321622b5d3ad186797bd50c44cbde8b48be1583fbd534b554c4c | SKULL | | cardano/native/885742cd7e0dad321622b5d3ad186797bd50c44cbde8b48be1583fbd534b554c4c |
+| Cardano | SNOW | 8f52f6a88acf6127bc4758a16b6047afc4da7887feae121ec217b75a534e4f57 | SNOW | | cardano/native/8f52f6a88acf6127bc4758a16b6047afc4da7887feae121ec217b75a534e4f57 |
+| Cardano | SOCIETY | 25f0fc240e91bd95dcdaebd2ba7713fc5168ac77234a3d79449fc20c534f4349455459 | SOCIETY | | cardano/native/25f0fc240e91bd95dcdaebd2ba7713fc5168ac77234a3d79449fc20c534f4349455459 |
+| Cardano | SUNDAE | 9a9693a9a37912a5097918f97918d15240c92ab729a0b7c4aa144d7753554e444145 | SUNDAE | | cardano/native/9a9693a9a37912a5097918f97918d15240c92ab729a0b7c4aa144d7753554e444145 |
+| Cardano | SWEET | 47959e79846b8bdcacb91f586408d97e2dff44f31a04f03902cba8185357454554 | SWEET | | cardano/native/47959e79846b8bdcacb91f586408d97e2dff44f31a04f03902cba8185357454554 |
+| Cardano | STRIP | 6954264b15bc92d6d592febeac84f14645e1ed46ca5ebb9acdb5c15f5354524950 | StripperCoin | | cardano/native/6954264b15bc92d6d592febeac84f14645e1ed46ca5ebb9acdb5c15f5354524950 |
+| Cardano | TOKEN | 0171c997b8853fde686763d93b36ab8e04ce947bb6aa09a9ee5c4401544f4b454e | TOKEN | | cardano/native/0171c997b8853fde686763d93b36ab8e04ce947bb6aa09a9ee5c4401544f4b454e |
+| Cardano | Tokhun | 4247d5091db82330100904963ab8d0850976c80d3f1b927e052e07bd546f6b68756e | Tokhun.io Token | | cardano/native/4247d5091db82330100904963ab8d0850976c80d3f1b927e052e07bd546f6b68756e |
+| Cardano | VYFI | 804f5544c1962a40546827cab750a88404dc7108c0f588b72964754f56594649 | VYFI | | cardano/native/804f5544c1962a40546827cab750a88404dc7108c0f588b72964754f56594649 |
+| Cardano | TREES | f7c777fdd4531cf1c477551360e45b9684073c05c2fa61334f8f9add5665726974726565546f6b656e | VeritreeToken | | cardano/native/f7c777fdd4531cf1c477551360e45b9684073c05c2fa61334f8f9add5665726974726565546f6b656e |
+| Cardano | virus | 0fd9819a9d7fb414880883f43a42d33458f12bc5f9841cec6457dc155669527553 | Virus | | cardano/native/0fd9819a9d7fb414880883f43a42d33458f12bc5f9841cec6457dc155669527553 |
+| Cardano | WDAY | a3914cb7a564d010c7b67774ac8720a8ece3a758279b51d8a1c05cc55745444e4553444159 | Wednesday | | cardano/native/a3914cb7a564d010c7b67774ac8720a8ece3a758279b51d8a1c05cc55745444e4553444159 |
+| Cardano | WMT | 1d7f33bd23d85e1a25d87d86fac4f199c3197a2f7afeb662a0f34e1e776f726c646d6f62696c65746f6b656e | World Mobile Token | | cardano/native/1d7f33bd23d85e1a25d87d86fac4f199c3197a2f7afeb662a0f34e1e776f726c646d6f62696c65746f6b656e |
+| Cardano | XRAY | ae2a0aa5a24b27d9868c4a73b7c08077ac21baade5eca0fa467a2bbd58524159 | XRAY | | cardano/native/ae2a0aa5a24b27d9868c4a73b7c08077ac21baade5eca0fa467a2bbd58524159 |
+| Cardano | XT | 300ec0d82a79acdc0616fdc0ef615e7deeddb03275e834685e9ee8a65854 | XT | | cardano/native/300ec0d82a79acdc0616fdc0ef615e7deeddb03275e834685e9ee8a65854 |
+| Cardano | YAY | 57684adcb032c8dbc40179841bed987d8dee7472617a0e5c25ef414059617953776170 | YaySwap | | cardano/native/57684adcb032c8dbc40179841bed987d8dee7472617a0e5c25ef414059617953776170 |
+| Cardano | cNETA | b34b3ea80060ace9427bda98690a73d33840e27aaa8d6edb7f0c757a634e455441 | anetaBTC | | cardano/native/b34b3ea80060ace9427bda98690a73d33840e27aaa8d6edb7f0c757a634e455441 |
+| Cardano | cbTHC | 025146866af908340247fe4e9672d5ac7059f1e8534696b5f920c9e66362544843 | cbTHC | | cardano/native/025146866af908340247fe4e9672d5ac7059f1e8534696b5f920c9e66362544843 |
+| Cardano | GMBL | 2b0a04a7b60132b1805b296c7fcb3b217ff14413991bf76f72663c3067696d62616c | gimbal | | cardano/native/2b0a04a7b60132b1805b296c7fcb3b217ff14413991bf76f72663c3067696d62616c |
+| Cardano | purrADA | 97747aa3c33fdfe4b5faa7bb8b4534932c6d980cb13c14c5a547e7ca70757272414441 | purrADA | | cardano/native/97747aa3c33fdfe4b5faa7bb8b4534932c6d980cb13c14c5a547e7ca70757272414441 |
+| Cardano | SPACE | d894897411707efa755a76deb66d26dfd50593f2e70863e1661e98a07370616365636f696e73 | spacecoins | | cardano/native/d894897411707efa755a76deb66d26dfd50593f2e70863e1661e98a07370616365636f696e73 |
+| Cardano (Testnet) | tToken | 581684861359b6d4d00594073a9aa4223c6fc24d24da05e1b34fb865544553545f544f4b454e | TEST_TOKEN | | cardano_testnet/native/581684861359b6d4d00594073a9aa4223c6fc24d24da05e1b34fb865544553545f544f4b454e |
| Elrond | MEX | erd1qqqqqqqqqqqqqqqpqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqzllls8a5w6u | MEX | | elrond/esdt/4d45582d343535633537 |
| Elrond | USDC | erd1qqqqqqqqqqqqqqqpqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqzllls8a5w6u | WrappedUSDC | | elrond/esdt/555344432d633736663166 |
| Elrond | RIDE | erd1qqqqqqqqqqqqqqqpqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqzllls8a5w6u | holoride | | elrond/esdt/524944452d376431386539 |
diff --git a/apps/ledger-live-desktop/src/renderer/families/cardano/AccountBalanceSummaryFooter.jsx b/apps/ledger-live-desktop/src/renderer/families/cardano/AccountBalanceSummaryFooter.jsx
new file mode 100644
index 00000000000..6bf7cd38d4e
--- /dev/null
+++ b/apps/ledger-live-desktop/src/renderer/families/cardano/AccountBalanceSummaryFooter.jsx
@@ -0,0 +1,100 @@
+// @flow
+
+import React from "react";
+import styled from "styled-components";
+import { useSelector } from "react-redux";
+
+import { Trans } from "react-i18next";
+import { getAccountUnit } from "@ledgerhq/live-common/account/index";
+import { formatCurrencyUnit } from "@ledgerhq/live-common/currencies/index";
+
+import type { ThemedComponent } from "~/renderer/styles/StyleProvider";
+
+import { localeSelector } from "~/renderer/reducers/settings";
+
+import Discreet, { useDiscreetMode } from "~/renderer/components/Discreet";
+
+import Box from "~/renderer/components/Box/Box";
+import Text from "~/renderer/components/Text";
+import InfoCircle from "~/renderer/icons/InfoCircle";
+import ToolTip from "~/renderer/components/Tooltip";
+
+const Wrapper: ThemedComponent<*> = styled(Box).attrs(() => ({
+ horizontal: true,
+ mt: 4,
+ p: 5,
+ pb: 0,
+}))`
+ border-top: 1px solid ${p => p.theme.colors.palette.text.shade10};
+`;
+
+const BalanceDetail = styled(Box).attrs(() => ({
+ flex: "0.25 0 auto",
+ vertical: true,
+ alignItems: "start",
+}))`
+ &:nth-child(n + 3) {
+ flex: 0.75;
+ }
+`;
+
+const TitleWrapper = styled(Box).attrs(() => ({ horizontal: true, alignItems: "center", mb: 1 }))``;
+
+const Title = styled(Text).attrs(() => ({
+ fontSize: 4,
+ ff: "Inter|Medium",
+ color: "palette.text.shade60",
+}))`
+ line-height: ${p => p.theme.space[4]}px;
+ margin-right: ${p => p.theme.space[1]}px;
+`;
+
+const AmountValue = styled(Text).attrs(() => ({
+ fontSize: 6,
+ ff: "Inter|SemiBold",
+ color: "palette.text.shade100",
+}))``;
+
+type Props = {
+ account: any,
+ countervalue: any,
+};
+
+const AccountBalanceSummaryFooter = ({ account, countervalue }: Props) => {
+ const discreet = useDiscreetMode();
+ const locale = useSelector(localeSelector);
+
+ const { spendableBalance: _spendableBalance } = account;
+
+ const unit = getAccountUnit(account);
+
+ const formatConfig = {
+ disableRounding: true,
+ alwaysShowSign: false,
+ showCode: true,
+ discreet,
+ locale,
+ };
+
+ const spendableBalance = formatCurrencyUnit(unit, _spendableBalance, formatConfig);
+
+ return (
+
+
+ }>
+
+
+
+
+
+
+
+
+ {spendableBalance}
+
+
+
+ );
+};
+
+export default AccountBalanceSummaryFooter;
diff --git a/apps/ledger-live-desktop/src/renderer/families/cardano/AccountBodyHeader.js b/apps/ledger-live-desktop/src/renderer/families/cardano/AccountBodyHeader.js
new file mode 100644
index 00000000000..ca51d7d0fa4
--- /dev/null
+++ b/apps/ledger-live-desktop/src/renderer/families/cardano/AccountBodyHeader.js
@@ -0,0 +1,5 @@
+// @flow
+
+import StakingRewardsBanner from "./StakingRewardsBanner";
+
+export default StakingRewardsBanner;
diff --git a/apps/ledger-live-desktop/src/renderer/families/cardano/StakingRewardsBanner.jsx b/apps/ledger-live-desktop/src/renderer/families/cardano/StakingRewardsBanner.jsx
new file mode 100644
index 00000000000..410d83606af
--- /dev/null
+++ b/apps/ledger-live-desktop/src/renderer/families/cardano/StakingRewardsBanner.jsx
@@ -0,0 +1,44 @@
+import React from "react";
+import styled from "styled-components";
+import Box, { Card } from "~/renderer/components/Box";
+import Text from "~/renderer/components/Text";
+import { useTranslation } from "react-i18next";
+import InfoCircle from "~/renderer/icons/InfoCircle";
+
+const CardContent = styled(Box)`
+ display: flex;
+ flex-direction: row;
+ align-items: center;
+ justify-content: space-between;
+ flex: 1;
+`;
+
+const CardHeaderContainer = styled(Box)`
+ display: flex;
+ flex-direction: row;
+ align-items: center;
+ justify-content: center;
+`;
+
+const CardHeader = styled(Text)`
+ font-weight: 600;
+ font-size: 12px;
+ margin-left: 8px;
+`;
+
+const AccountBodyHeader = function() {
+ const { t } = useTranslation();
+
+ return (
+
+
+
+
+ {t("cardano.account.subHeader.cardTitle")}
+
+
+
+ );
+};
+
+export default AccountBodyHeader;
diff --git a/apps/ledger-live-desktop/src/renderer/modals/Send/steps/StepSummary.jsx b/apps/ledger-live-desktop/src/renderer/modals/Send/steps/StepSummary.jsx
index ee4ec422c31..1fe28794160 100644
--- a/apps/ledger-live-desktop/src/renderer/modals/Send/steps/StepSummary.jsx
+++ b/apps/ledger-live-desktop/src/renderer/modals/Send/steps/StepSummary.jsx
@@ -138,7 +138,7 @@ export default class StepSummary extends PureComponent {
{memo && (
-
+
diff --git a/apps/ledger-live-desktop/static/i18n/en/app.json b/apps/ledger-live-desktop/static/i18n/en/app.json
index 8385434e66f..93a3e9938c9 100644
--- a/apps/ledger-live-desktop/static/i18n/en/app.json
+++ b/apps/ledger-live-desktop/static/i18n/en/app.json
@@ -2004,6 +2004,13 @@
}
}
},
+ "cardano": {
+ "account": {
+ "subHeader": {
+ "cardTitle": "Total balance doesn't include staking rewards"
+ }
+ }
+ },
"tron": {
"voting": {
"emptyState": {
@@ -4420,6 +4427,12 @@
"NotEnoughNftOwned": {
"title": "You have exceeded the number of available tokens"
},
+ "CardanoMinAmountError": {
+ "title": "Minimum sendable amount is {{amount}} ADA"
+ },
+ "CardanoNotEnoughFunds": {
+ "title": "Please ensure you have enough funds to pay for fees"
+ },
"StellarWrongMemoFormat": {
"title": "Memo format is wrong"
},
diff --git a/apps/ledger-live-mobile/src/locales/en/common.json b/apps/ledger-live-mobile/src/locales/en/common.json
index cc544ffd463..62d5d3286f4 100644
--- a/apps/ledger-live-mobile/src/locales/en/common.json
+++ b/apps/ledger-live-mobile/src/locales/en/common.json
@@ -638,7 +638,10 @@
"title": "Your transaction may have failed. Please wait a moment then check the transaction history before trying again."
},
"CardanoMinAmountError": {
- "title": "Minimum {{amount}} ADA required"
+ "title": "Minimum sendable amount is {{amount}} ADA"
+ },
+ "CardanoNotEnoughFunds": {
+ "title": "Please ensure you have enough funds to pay for fees"
},
"StellarWrongMemoFormat": {
"title": "Memo format is wrong"
@@ -4480,8 +4483,8 @@
"tokenId": "Token ID",
"tokenIdCopied": "Token ID copied !",
"quantity": "Quantity",
- "attributes" : {
- "floorPrice" : "Floor Price"
+ "attributes": {
+ "floorPrice": "Floor Price"
}
},
"viewerModal": {
diff --git a/libs/ledger-live-common/src/apps/support.ts b/libs/ledger-live-common/src/apps/support.ts
index 83d1abc4dbe..937ef9ad32f 100644
--- a/libs/ledger-live-common/src/apps/support.ts
+++ b/libs/ledger-live-common/src/apps/support.ts
@@ -35,6 +35,7 @@ const appVersionsRequired = {
Elrond: ">= 1.0.11",
Ethereum: ">= 1.9.17",
Solana: ">= 1.2.0",
+ "Cardano ADA": ">= 4.1.0",
};
export function mustUpgrade(
deviceModel: DeviceModelId,
diff --git a/libs/ledger-live-common/src/currencies/__snapshots__/sortByMarketcap.test.ts.snap b/libs/ledger-live-common/src/currencies/__snapshots__/sortByMarketcap.test.ts.snap
index 5652aab21a8..56de21aef99 100644
--- a/libs/ledger-live-common/src/currencies/__snapshots__/sortByMarketcap.test.ts.snap
+++ b/libs/ledger-live-common/src/currencies/__snapshots__/sortByMarketcap.test.ts.snap
@@ -6428,6 +6428,107 @@ Array [
"algorand/asa/137594422",
"elrond/esdt/555344432d633736663166",
"elrond/esdt/524944452d376431386539",
+ "cardano_testnet/native/581684861359b6d4d00594073a9aa4223c6fc24d24da05e1b34fb865544553545f544f4b454e",
+ "cardano/native/a0028f350aaabe0545fdcb56b039bfb08e4bb4d8c4d7c3c7d481c235484f534b59",
+ "cardano/native/af2e27f580f7f08e93190a81f72462f153026d06450924726645891b44524950",
+ "cardano/native/9a9693a9a37912a5097918f97918d15240c92ab729a0b7c4aa144d7753554e444145",
+ "cardano/native/4247d5091db82330100904963ab8d0850976c80d3f1b927e052e07bd546f6b68756e",
+ "cardano/native/d894897411707efa755a76deb66d26dfd50593f2e70863e1661e98a07370616365636f696e73",
+ "cardano/native/29d222ce763455e3d7a09a665ce554f00ac89d2e99a1a83d267170c64d494e",
+ "cardano/native/afc910d7a306d20c12903979d4935ae4307241d03245743548e767834153484942",
+ "cardano/native/5ad8deb64bfec21ad2d96e1270b5873d0c4d0f231b928b4c39eb243561646f736961",
+ "cardano/native/8654e8b350e298c80d2451beb5ed80fc9eee9f38ce6b039fb8706bc34c4f4253544552",
+ "cardano/native/d030b626219d81673bd32932d2245e0c71ae5193281f971022b23a78436172646f67656f",
+ "cardano/native/a4da8764a57e66a0085b5bfcde96c89b798d92ee83a75f59237e375b46495245",
+ "cardano/native/2afb448ef716bfbed1dcb676102194c3009bee5399e93b90def9db6a4249534f4e",
+ "cardano/native/f28f457472e539dc75e1598a2beddf49ce5a717998c708f05f5de61044454653",
+ "cardano/native/544571c086d0e5c5022aca9717dd0f438e21190abb48f37b3ae129f047524f57",
+ "cardano/native/1a71dc14baa0b4fcfb34464adc6656d0e562571e2ac1bc990c9ce5f6574f4c46",
+ "cardano/native/884892bcdc360bcef87d6b3f806e7f9cd5ac30d999d49970e7a903ae5041564941",
+ "cardano/native/7f376e3d1cf52e6c4350a1a91c8f8d0f0b63baedd443999ebe8fe57a424f52475a",
+ "cardano/native/987c1f90efe1c95957509b460e0e4f6d6b3f7025a7aca99cd29090374d595448",
+ "cardano/native/6954264b15bc92d6d592febeac84f14645e1ed46ca5ebb9acdb5c15f5354524950",
+ "cardano/native/6ac8ef33b510ec004fe11585f7c5a9f0c07f0c23428ab4f29c1d7d104d454c44",
+ "cardano/native/b0446f1c9105f0cc5bb6bd092f5c3e523e13f8a999b31c870298fa4051554944",
+ "cardano/native/025146866af908340247fe4e9672d5ac7059f1e8534696b5f920c9e66362544843",
+ "cardano/native/c68307e7ca850513507f1498862a57c7f4fae7ba8e84b8bc074093a944494253",
+ "cardano/native/1d7f33bd23d85e1a25d87d86fac4f199c3197a2f7afeb662a0f34e1e776f726c646d6f62696c65746f6b656e",
+ "cardano/native/1f4b1b277c9c001c1522727506a2cfb401a0d0ade069b0241f16f07d4849",
+ "cardano/native/8d0ae3c5b13b47907b16511a540d47436d12dcc96453c0f59089b45142524f4f4d",
+ "cardano/native/d3558649b7874a1a596378515f9b80da63e73f324439ea113d34c9bb42454147",
+ "cardano/native/5029eeccd52fef299509d509a8318fd7930c3dffcce1f9f39ff11ef9464743",
+ "cardano/native/88691a70bb0fe49cf9124b4f78553c36c09fa6264844e2b2941191734575736b6f",
+ "cardano/native/cfee97ff8359f07a0a395a72b424bc6e030503390d864b86d4e0ecf84b41495a454e",
+ "cardano/native/e14fe3ab348f9a6198359481472601f4557b9f86984f40a186a3b1e8434845525259",
+ "cardano/native/e98165a25cd0320b25f22d686268e58e66f855b6d85974947ccd708d414441464f58",
+ "cardano/native/da8c30857834c6ae7203935b89278c532b3995245295456f993e1d244c51",
+ "cardano/native/b34b3ea80060ace9427bda98690a73d33840e27aaa8d6edb7f0c757a634e455441",
+ "cardano/native/300ec0d82a79acdc0616fdc0ef615e7deeddb03275e834685e9ee8a65854",
+ "cardano/native/682fe60c9918842b3323c43b5144bc3d52a23bd2fb81345560d73f634e45574d",
+ "cardano/native/d3a034e403b98cbdb0adbc8a3144d7779330916e190d387815bb85c650555252",
+ "cardano/native/007394e3117755fbb0558b93c54ce3bc6c85770920044ade143dc742505443",
+ "cardano/native/a3914cb7a564d010c7b67774ac8720a8ece3a758279b51d8a1c05cc55745444e4553444159",
+ "cardano/native/d01794c4604f3c0e544c537bb1f4268c0e81f45880c00c09ebe4b4a74d595354",
+ "cardano/native/29d222ce763455e3d7a09a665ce554f00ac89d2e99a1a83d267170c64d494e74",
+ "cardano/native/8a1cfae21368b8bebbbed9800fec304e95cce39a2a57dc35e2e3ebaa4d494c4b",
+ "cardano/native/a89568bb399d0cdc38367e47831c95186f5c79e58174e08a182323964554424643546f6b656e",
+ "cardano/native/c88bbd1848db5ea665b1fffbefba86e8dcd723b5085348e8a8d2260f44414e41",
+ "cardano/native/47959e79846b8bdcacb91f586408d97e2dff44f31a04f03902cba8185357454554",
+ "cardano/native/0171c997b8853fde686763d93b36ab8e04ce947bb6aa09a9ee5c4401544f4b454e",
+ "cardano/native/d5dec6074942b36b50975294fd801f7f28c907476b1ecc1b57c916ed524154",
+ "cardano/native/8fef2d34078659493ce161a6c7fba4b56afefa8535296a5743f6958741414441",
+ "cardano/native/0c78f619e54a5d00e143f66181a2c500d0c394b38a10e86cd1a23c5f41444158",
+ "cardano/native/585cfcbdd0786e961187999e5d5d36b38d1ebc1c4112a0a95a8bd477424c43",
+ "cardano/native/0c442180dd6163682d8e03b271caefb4944a24412bdd07adafb04ccb50494e41434f4c414441",
+ "cardano/native/f4d97191f857096b441a410c036f63d6697dde0c71d2755dd664e3024d4b41",
+ "cardano/native/804f5544c1962a40546827cab750a88404dc7108c0f588b72964754f56594649",
+ "cardano/native/ae2a0aa5a24b27d9868c4a73b7c08077ac21baade5eca0fa467a2bbd58524159",
+ "cardano/native/0fd9819a9d7fb414880883f43a42d33458f12bc5f9841cec6457dc155669527553",
+ "cardano/native/df0172804f8418afc4e5b0a15b8fc78bdc3ca6d179405a7cd194f3b4464c49434b",
+ "cardano/native/20cd68533b47565f3c61efb39c30fdace9963bfa4c0060b613448e3c50524f584945",
+ "cardano/native/e9c28a71273f825b13f38244ccf1fea97c4025813610d01a7c5d681f436861726c7a20546f6b656e",
+ "cardano/native/6787a47e9f73efe4002d763337140da27afa8eb9a39413d2c39d4286524144546f6b656e73",
+ "cardano/native/db30c7905f598ed0154de14f970de0f61f0cb3943ed82c891968480a434c4150",
+ "cardano/native/aea1ceb3625680e2f7a31ea1a64c9c430c34d8588bf4f8e3c7f9b1dd476f74636869",
+ "cardano/native/14a3455f71c435a04ea1fdb50a3ef4c1cab0e79fb1565627ac66a57552415645",
+ "cardano/native/2b0a04a7b60132b1805b296c7fcb3b217ff14413991bf76f72663c3067696d62616c",
+ "cardano/native/4c17b7009448a33d1834b0946ea752ecd0cc61c7bb25cd9ff18cff58426c6f6f6d",
+ "cardano/native/94cbb4fcbcaa2975779f273b263eb3b5f24a9951e446d6dc4c13586452455655",
+ "cardano/native/63766427b4499dd678cb8b715dec3265dd292279ce7779447e3651e54b4f5a",
+ "cardano/native/885742cd7e0dad321622b5d3ad186797bd50c44cbde8b48be1583fbd534b554c4c",
+ "cardano/native/f7c777fdd4531cf1c477551360e45b9684073c05c2fa61334f8f9add5665726974726565546f6b656e",
+ "cardano/native/aa2797739e4f4a1efd5346998febff59909e425b5fddb1b0ec4a24f84c6f6f6b7a",
+ "cardano/native/dca54ecf37b0e3af2fdfd336e1d21fadcc45b3261b0f73a095631dfe444f4558",
+ "cardano/native/25f0fc240e91bd95dcdaebd2ba7713fc5168ac77234a3d79449fc20c534f4349455459",
+ "cardano/native/57684adcb032c8dbc40179841bed987d8dee7472617a0e5c25ef414059617953776170",
+ "cardano/native/c9f955eeffa84e42363b4992281d32dd2f9239153d6c66420a9acc154c4f47",
+ "cardano/native/240fb00eff73acc51c09e81dae6628c4bedb9964151d45e3faed874f434c4157",
+ "cardano/native/2aa9c1557fcf8e7caa049fa0911a8724a1cdaf8037fe0b431c6ac66450494759546f6b656e",
+ "cardano/native/2c96f49b6e6e32ae69a182e85b74db4edfc9539496a13ab76d1258fa434e54",
+ "cardano/native/b6a7467ea1deb012808ef4e87b5ff371e85f7142d7b356a40d9b42a0436f726e75636f70696173205b76696120436861696e506f72742e696f5d",
+ "cardano/native/208a2ca888886921513cb777bb832a8dc685c04de990480151f1215053484942414441",
+ "cardano/native/c4c00fbd8fa227442a5e7cdecde33b24588494d05a2c50fda8938c6d4b49445a",
+ "cardano/native/dbc31b04d90b37332813cb4cee3e8f79994643d899a5366797e745ee465544",
+ "cardano/native/d0af056c509b6b1133cd83a750b7245e561169281fde3df1cb6e2d96506f6f6c5065656b436f696e",
+ "cardano/native/8f52f6a88acf6127bc4758a16b6047afc4da7887feae121ec217b75a534e4f57",
+ "cardano/native/2441ab3351c3b80213a98f4e09ddcf7dabe4879c3c94cc4e7205cb6346495245",
+ "cardano/native/c7dcfa416c127f630b263c7e0fe0564430cfa9c56bba43e1a37c6915474f4b4559",
+ "cardano/native/97747aa3c33fdfe4b5faa7bb8b4534932c6d980cb13c14c5a547e7ca70757272414441",
+ "cardano/native/ccb3577601d6cf0e021288871112926338bee685c6c37eeadf6dddd943617264616e6961466f756e646572426c7565",
+ "cardano/native/ccb3577601d6cf0e021288871112926338bee685c6c37eeadf6dddd943617264616e6961466f756e646572526564",
+ "cardano/native/1f4b1b277c9c001c1522727506a2cfb401a0d0ade069b0241f16f07d484953",
+ "cardano/native/ccb3577601d6cf0e021288871112926338bee685c6c37eeadf6dddd943617264616e6961466f756e646572477265656e",
+ "cardano/native/b4273f1d8d0021d188784c3d72dc514f602b7ab8cfb87e3134550c42446f6765414441",
+ "cardano/native/133fac9e153194428eb0919be39837b42b9e977fc7298f3ff1b76ef95055444759",
+ "cardano/native/f555c46bad0731d080c9381d7fff6f82839946a66bd070d185e1ea2f42444f4745",
+ "cardano/native/1dd1a7dde0e1e82761325ee5f4719d0d4b7c24dfba77d9bee01eed4b4d454f57",
+ "cardano/native/a00fdf4fb9ab6c8c2bd1533a2f14855edf12aed5ecbf96d4b5f5b9394334",
+ "cardano/native/f4364875e75320d405ceadebdf0db63fadaff55c72d4ff6b82f0676a434152474f",
+ "cardano/native/59e31d17e4d212ea35df6088e0395455c40f5ad463d161497a89c567426162795365616c",
+ "cardano/native/b0af30edf2c7f11465853821137e0a6ebc395cab71ee39c24127ffb44e465443",
+ "cardano/native/6c8642400e8437f737eb86df0fc8a8437c760f48592b1ba8f5767e81456d706f7761",
+ "cardano/native/ca942cb8bb5d1ef750766ded355f320880539111f10efa2b1a478ff9524147",
+ "cardano/native/0c92aabef5a8f91a36470d0762806c165c0d04aa992541e25d55486a424347",
"stellar/asset/USDC:GA5ZSEJYB37JRC5AVCIA5MOP4RHTM335X2KGX3IHOJAPP5RE34K4KZVN",
]
`;
diff --git a/libs/ledger-live-common/src/families/cardano/__snapshots__/bridge.integration.test.ts.snap b/libs/ledger-live-common/src/families/cardano/__snapshots__/bridge.integration.test.ts.snap
index 6e70e6eb06b..cfd06710acb 100644
--- a/libs/ledger-live-common/src/families/cardano/__snapshots__/bridge.integration.test.ts.snap
+++ b/libs/ledger-live-common/src/families/cardano/__snapshots__/bridge.integration.test.ts.snap
@@ -820,7 +820,7 @@ Array [
"operationsCount": 4,
"pendingOperations": Array [],
"seedIdentifier": "21a6a622d47969ef0b2b89ef7c2e8428f955bae3e52f211e651ccffd",
- "spendableBalance": "1021211139",
+ "spendableBalance": "1019831859",
"starred": false,
"subAccounts": Array [],
"swapHistory": Array [],
@@ -829,6 +829,20 @@ Array [
"used": true,
"xpub": "a902bc61a79256e1d5858d2ba49cab7011a26ad49580daace7412e255e818b1c1eba2defa321ff2937deba397f639f5bbabb0f0064516301fa4d08663c83f5b2",
},
+ Object {
+ "approvals": undefined,
+ "balance": "5000000000",
+ "compoundBalance": undefined,
+ "id": "js:2:cardano_testnet:a902bc61a79256e1d5858d2ba49cab7011a26ad49580daace7412e255e818b1c1eba2defa321ff2937deba397f639f5bbabb0f0064516301fa4d08663c83f5b2:cardano+cardano_testnet%2Fnative%2F581684861359b6d4d00594073a9aa4223c6fc24d24da05e1b34fb865544553545f544f4b454e",
+ "operationsCount": 1,
+ "parentId": "js:2:cardano_testnet:a902bc61a79256e1d5858d2ba49cab7011a26ad49580daace7412e255e818b1c1eba2defa321ff2937deba397f639f5bbabb0f0064516301fa4d08663c83f5b2:cardano",
+ "pendingOperations": Array [],
+ "spendableBalance": "5000000000",
+ "starred": false,
+ "swapHistory": Array [],
+ "tokenId": "cardano_testnet/native/581684861359b6d4d00594073a9aa4223c6fc24d24da05e1b34fb865544553545f544f4b454e",
+ "type": "TokenAccountRaw",
+ },
Object {
"balance": "0",
"cardanoResources": Object {
@@ -1662,6 +1676,32 @@ Array [
"value": "1000000000",
},
],
+ Array [
+ Object {
+ "accountId": "js:2:cardano_testnet:a902bc61a79256e1d5858d2ba49cab7011a26ad49580daace7412e255e818b1c1eba2defa321ff2937deba397f639f5bbabb0f0064516301fa4d08663c83f5b2:cardano+cardano_testnet%2Fnative%2F581684861359b6d4d00594073a9aa4223c6fc24d24da05e1b34fb865544553545f544f4b454e",
+ "blockHash": undefined,
+ "blockHeight": 3568569,
+ "contract": undefined,
+ "extra": Object {
+ "memo": undefined,
+ },
+ "fee": "215441",
+ "hash": "2c8106d296fe10a8e8bf37a0202df048265dc17f2aa6c184bd132960fbb18bae",
+ "id": "js:2:cardano_testnet:a902bc61a79256e1d5858d2ba49cab7011a26ad49580daace7412e255e818b1c1eba2defa321ff2937deba397f639f5bbabb0f0064516301fa4d08663c83f5b2:cardano+cardano_testnet%2Fnative%2F581684861359b6d4d00594073a9aa4223c6fc24d24da05e1b34fb865544553545f544f4b454e-2c8106d296fe10a8e8bf37a0202df048265dc17f2aa6c184bd132960fbb18bae-IN",
+ "operator": undefined,
+ "recipients": Array [
+ "addr_test1qqs6df3z63uknmct9wy77lpwss50j4d6u0jj7gg7v5wvll23krjmh2m86v92yu0my7rqydx3h5erqwty82kwgjuc4elsr6hdhy",
+ "addr_test1qzpdaf0vr0gdsjncllv7cejmpwmwu6m86c3epd8uadv99ktra2x9gp8eakdwsrv4k42ys4ajqy0r7f4k8hwrhcdt6sks7k7alz",
+ ],
+ "senders": Array [
+ "addr_test1qr4qq9s7cf28zse9t4c46l3utj6ajphx654l8ddcv6rhketra2x9gp8eakdwsrv4k42ys4ajqy0r7f4k8hwrhcdt6sksjh37nz",
+ ],
+ "standard": undefined,
+ "tokenId": undefined,
+ "type": "IN",
+ "value": "5000000000",
+ },
+ ],
Array [],
]
`;
diff --git a/libs/ledger-live-common/src/families/cardano/bridge.integration.test.ts b/libs/ledger-live-common/src/families/cardano/bridge.integration.test.ts
index 967118910f3..29c1ea33a4d 100644
--- a/libs/ledger-live-common/src/families/cardano/bridge.integration.test.ts
+++ b/libs/ledger-live-common/src/families/cardano/bridge.integration.test.ts
@@ -1,3 +1,4 @@
+import { NotEnoughBalance } from "@ledgerhq/errors";
import "../../__tests__/test-helpers/setup";
import { testBridge } from "../../__tests__/test-helpers/bridge";
import BigNumber from "bignumber.js";
@@ -33,6 +34,43 @@ const dataset: DatasetTest = {
},
},
},
+ {
+ name: "token amount more than balance",
+ transaction: fromTransactionRaw({
+ family: "cardano",
+ recipient:
+ "addr_test1qpl90kc2jl5kr9tev0s7vays9yhwcdnq8nlylyk4dqsdq3g466elxnxwrzwq72pvp5akenj30t5s9et7frfvrxxx8xcsxrzs87",
+ amount: "5000000001",
+ subAccountId:
+ "js:2:cardano_testnet:a902bc61a79256e1d5858d2ba49cab7011a26ad49580daace7412e255e818b1c1eba2defa321ff2937deba397f639f5bbabb0f0064516301fa4d08663c83f5b2:+cardano_testnet%2Fnative%2F581684861359b6d4d00594073a9aa4223c6fc24d24da05e1b34fb865544553545f544f4b454e",
+ mode: "send",
+ }),
+ expectedStatus: {
+ amount: new BigNumber("5000000001"),
+ errors: {
+ amount: new NotEnoughBalance(),
+ },
+ },
+ },
+ {
+ name: "send max token",
+ transaction: fromTransactionRaw({
+ family: "cardano",
+ recipient:
+ "addr_test1qpl90kc2jl5kr9tev0s7vays9yhwcdnq8nlylyk4dqsdq3g466elxnxwrzwq72pvp5akenj30t5s9et7frfvrxxx8xcsxrzs87",
+ amount: "0",
+ subAccountId:
+ "js:2:cardano_testnet:a902bc61a79256e1d5858d2ba49cab7011a26ad49580daace7412e255e818b1c1eba2defa321ff2937deba397f639f5bbabb0f0064516301fa4d08663c83f5b2:+cardano_testnet%2Fnative%2F581684861359b6d4d00594073a9aa4223c6fc24d24da05e1b34fb865544553545f544f4b454e",
+ mode: "send",
+ useAllAmount: true,
+ }),
+ expectedStatus: {
+ amount: new BigNumber("5000000000"),
+ totalSpent: new BigNumber("5000000000"),
+ errors: {},
+ warnings: {},
+ },
+ },
],
},
],
diff --git a/libs/ledger-live-common/src/families/cardano/buildSubAccounts.ts b/libs/ledger-live-common/src/families/cardano/buildSubAccounts.ts
index 3098ecbf666..7c2fb53dae3 100644
--- a/libs/ledger-live-common/src/families/cardano/buildSubAccounts.ts
+++ b/libs/ledger-live-common/src/families/cardano/buildSubAccounts.ts
@@ -83,6 +83,10 @@ const mapTxToTokenAccountOperation = ({
const tokenOperationType = token.amount.lt(0) ? "OUT" : "IN";
const memo = getMemoFromTx(tx);
+ const extra = {};
+ if (memo) {
+ extra["memo"] = memo;
+ }
const operation: Operation = {
accountId: tokenAccountId,
id: encodeOperationId(tokenAccountId, tx.hash, tokenOperationType),
@@ -102,9 +106,7 @@ const mapTxToTokenAccountOperation = ({
),
blockHeight: tx.blockHeight,
date: new Date(tx.timestamp),
- extra: {
- memo,
- },
+ extra: extra,
blockHash: undefined,
};
operations.push(operation);
diff --git a/libs/ledger-live-common/src/families/cardano/deviceTransactionConfig.ts b/libs/ledger-live-common/src/families/cardano/deviceTransactionConfig.ts
new file mode 100644
index 00000000000..13f523a59b4
--- /dev/null
+++ b/libs/ledger-live-common/src/families/cardano/deviceTransactionConfig.ts
@@ -0,0 +1,109 @@
+import BigNumber from "bignumber.js";
+import { getAccountUnit, getMainAccount } from "../../account";
+import { formatCurrencyUnit } from "../../currencies";
+import { DeviceTransactionField } from "../../transaction";
+import { Account, AccountLike, TransactionStatus } from "../../types";
+import { decodeTokenAssetId, decodeTokenCurrencyId } from "./buildSubAccounts";
+import { CardanoResources, Transaction } from "./types";
+import { utils as TyphonUtils } from "@stricahq/typhonjs";
+import { decodeTokenName } from "./logic";
+
+function getDeviceTransactionConfig({
+ account,
+ transaction,
+ parentAccount,
+}: {
+ account: AccountLike;
+ parentAccount: Account | null | undefined;
+ transaction: Transaction;
+ status: TransactionStatus;
+}): Array {
+ const { mode } = transaction;
+ const fields: DeviceTransactionField[] = [];
+ const mainAccount = getMainAccount(account, parentAccount);
+
+ if (mode === "send") {
+ if (account.type === "TokenAccount") {
+ const cardanoResources = mainAccount.cardanoResources as CardanoResources;
+
+ const { assetId } = decodeTokenCurrencyId(account.token.id);
+ const { policyId, assetName } = decodeTokenAssetId(assetId);
+ const transactionAmount = transaction.useAllAmount
+ ? account.balance
+ : transaction.amount;
+ const { fees } = transaction;
+
+ const tokensToSend = [
+ {
+ policyId,
+ assetName,
+ amount: transactionAmount,
+ },
+ ];
+
+ const requiredMinAdaForTokens = TyphonUtils.calculateMinUtxoAmount(
+ tokensToSend,
+ new BigNumber(cardanoResources.protocolParams.lovelacePerUtxoWord)
+ );
+ fields.push({
+ type: "text",
+ label: "ADA",
+ value: formatCurrencyUnit(
+ getAccountUnit(mainAccount),
+ requiredMinAdaForTokens,
+ { showCode: true, disableRounding: true }
+ ),
+ });
+ fields.push({
+ type: "text",
+ label: "Token Name",
+ value: decodeTokenName(assetName),
+ });
+ fields.push({
+ type: "text",
+ label: "Amount",
+ value: formatCurrencyUnit(getAccountUnit(account), transactionAmount, {
+ showCode: true,
+ disableRounding: true,
+ }),
+ });
+ if (fees) {
+ fields.push({
+ type: "text",
+ label: "Fees",
+ value: formatCurrencyUnit(getAccountUnit(mainAccount), fees, {
+ showCode: true,
+ disableRounding: true,
+ }),
+ });
+ }
+ } else if (account.type === "Account") {
+ const { fees } = transaction;
+ const transactionAmount = transaction.useAllAmount
+ ? account.balance
+ : transaction.amount;
+ fields.push({
+ type: "text",
+ label: "Amount",
+ value: formatCurrencyUnit(getAccountUnit(account), transactionAmount, {
+ showCode: true,
+ disableRounding: true,
+ }),
+ });
+ if (fees) {
+ fields.push({
+ type: "text",
+ label: "Fees",
+ value: formatCurrencyUnit(getAccountUnit(account), fees, {
+ showCode: true,
+ disableRounding: true,
+ }),
+ });
+ }
+ }
+ }
+
+ return fields;
+}
+
+export default getDeviceTransactionConfig;
diff --git a/libs/ledger-live-common/src/families/cardano/errors.ts b/libs/ledger-live-common/src/families/cardano/errors.ts
index 299ca3c2b9d..0c60d4fa025 100644
--- a/libs/ledger-live-common/src/families/cardano/errors.ts
+++ b/libs/ledger-live-common/src/families/cardano/errors.ts
@@ -6,3 +6,10 @@ import { createCustomErrorClass } from "@ledgerhq/errors";
export const CardanoMinAmountError = createCustomErrorClass(
"CardanoMinAmountError"
);
+
+/**
+ * Cardano error thrown when not enough funds to perform transaction
+ */
+export const CardanoNotEnoughFunds = createCustomErrorClass(
+ "CardanoNotEnoughFunds"
+);
diff --git a/libs/ledger-live-common/src/families/cardano/js-estimateMaxSpendable.ts b/libs/ledger-live-common/src/families/cardano/js-estimateMaxSpendable.ts
index 9383f05c147..58cb76a8e37 100644
--- a/libs/ledger-live-common/src/families/cardano/js-estimateMaxSpendable.ts
+++ b/libs/ledger-live-common/src/families/cardano/js-estimateMaxSpendable.ts
@@ -30,10 +30,13 @@ const estimateMaxSpendable = async ({
return account.balance;
}
+ const dummyRecipient =
+ "addr_test1qqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqq0uk53y";
const a = getMainAccount(account, parentAccount);
- const t = {
+ const t: Transaction = {
...createTransaction(),
...transaction,
+ recipient: dummyRecipient,
// amount field will not be used to build a transaction when useAllAmount is true
amount: new BigNumber(0),
useAllAmount: true,
diff --git a/libs/ledger-live-common/src/families/cardano/js-getTransactionStatus.ts b/libs/ledger-live-common/src/families/cardano/js-getTransactionStatus.ts
index 6023f81224c..323bc7dbb1f 100644
--- a/libs/ledger-live-common/src/families/cardano/js-getTransactionStatus.ts
+++ b/libs/ledger-live-common/src/families/cardano/js-getTransactionStatus.ts
@@ -1,6 +1,5 @@
import { BigNumber } from "bignumber.js";
import {
- NotEnoughBalance,
RecipientRequired,
FeeNotLoaded,
InvalidAddress,
@@ -10,7 +9,7 @@ import type { Account, TransactionStatus } from "../../types";
import type { CardanoResources, Token, Transaction } from "./types";
import { isValidAddress } from "./logic";
import { utils as TyphonUtils } from "@stricahq/typhonjs";
-import { CardanoMinAmountError } from "./errors";
+import { CardanoMinAmountError, CardanoNotEnoughFunds } from "./errors";
import { AccountAwaitingSendPendingOperations } from "../../errors";
import { getNetworkParameters } from "./networks";
import { decodeTokenAssetId, decodeTokenCurrencyId } from "./buildSubAccounts";
@@ -86,17 +85,18 @@ const getTransactionStatus = async (
if (!amount.gt(0)) {
errors.amount = useAllAmount
- ? new NotEnoughBalance()
+ ? new CardanoNotEnoughFunds()
: new AmountRequired();
} else if (!t.subAccountId && amount.lt(minTransactionAmount)) {
errors.amount = new CardanoMinAmountError("", {
amount: minTransactionAmount.div(1e6).toString(),
});
} else if (
- (tokenAccount && totalSpent.gt(tokenAccount.balance)) ||
- totalSpent.gt(a.balance)
+ tokenAccount
+ ? totalSpent.gt(tokenAccount.balance)
+ : totalSpent.gt(a.balance)
) {
- errors.amount = new NotEnoughBalance();
+ errors.amount = new CardanoNotEnoughFunds();
} else {
try {
await buildTransaction(a, t);
@@ -105,7 +105,7 @@ const getTransactionStatus = async (
e.message.toLowerCase() === "not enough ada" ||
e.message.toLowerCase() === "not enough tokens"
) {
- errors.amount = new NotEnoughBalance();
+ errors.amount = new CardanoNotEnoughFunds();
}
throw e;
}
diff --git a/libs/ledger-live-common/src/families/cardano/js-signOperation.ts b/libs/ledger-live-common/src/families/cardano/js-signOperation.ts
index 2925a236ea3..b72c4ef5c79 100644
--- a/libs/ledger-live-common/src/families/cardano/js-signOperation.ts
+++ b/libs/ledger-live-common/src/families/cardano/js-signOperation.ts
@@ -83,11 +83,18 @@ const buildOptimisticOperation = (
const memoMetadata = auxiliaryData.metadata.find(
(m) => m.label === MEMO_LABEL
);
- if (memoMetadata && Array.isArray(memoMetadata.data)) {
- memo = memoMetadata.data.join(", ");
+ if (memoMetadata && memoMetadata.data instanceof Map) {
+ const msg = memoMetadata.data.get("msg");
+ if (Array.isArray(msg) && msg.length) {
+ memo = msg.join(", ");
+ }
}
}
+ const extra = {};
+ if (memo) {
+ extra["memo"] = memo;
+ }
const op: Operation = {
id: encodeOperationId(account.id, transactionHash, opType),
hash: transactionHash,
@@ -100,9 +107,7 @@ const buildOptimisticOperation = (
recipients: transaction.getOutputs().map((o) => o.address.getBech32()),
accountId: account.id,
date: new Date(),
- extra: {
- memo,
- },
+ extra: extra,
};
const tokenAccount = t.subAccountId
diff --git a/libs/ledger-live-common/src/families/cardano/js-synchronisation.ts b/libs/ledger-live-common/src/families/cardano/js-synchronisation.ts
index 198d66938a3..b93bea0c43c 100644
--- a/libs/ledger-live-common/src/families/cardano/js-synchronisation.ts
+++ b/libs/ledger-live-common/src/families/cardano/js-synchronisation.ts
@@ -21,6 +21,7 @@ import {
getMemoFromTx,
getOperationType,
isHexString,
+ mergeTokens,
} from "./logic";
import { encodeOperationId } from "../../operation";
import { getNetworkParameters } from "./networks";
@@ -28,6 +29,9 @@ import { getNetworkInfo } from "./api/getNetworkInfo";
import uniqBy from "lodash/uniqBy";
import postSyncPatch from "./postSyncPatch";
import { getTransactions } from "./api/getTransactions";
+import { buildSubAccounts } from "./buildSubAccounts";
+import { calculateMinUtxoAmount } from "@stricahq/typhonjs/dist/utils/utils";
+import { listTokensForCryptoCurrency } from "../../currencies";
function mapTxToAccountOperation(
tx: APITransaction,
@@ -43,6 +47,10 @@ function mapTxToAccountOperation(
const subOperations = inferSubOperations(tx.hash, subAccounts);
const memo = getMemoFromTx(tx);
+ const extra = {};
+ if (memo) {
+ extra["memo"] = memo;
+ }
return {
accountId,
@@ -64,14 +72,12 @@ function mapTxToAccountOperation(
subOperations,
blockHeight: tx.blockHeight,
date: new Date(tx.timestamp),
- extra: {
- memo,
- },
+ extra: extra,
blockHash: undefined,
};
}
-function syncUtxos(
+function prepareUtxos(
newTransactions: Array,
stableUtxos: Array,
accountCredentialsMap: Record
@@ -116,7 +122,10 @@ function syncUtxos(
return utxos;
}
-export const getAccountShape: GetAccountShape = async (info) => {
+export const getAccountShape: GetAccountShape = async (
+ info,
+ { blacklistedTokenIds }
+) => {
const {
transport,
currency,
@@ -152,16 +161,27 @@ export const getAccountShape: GetAccountShape = async (info) => {
derivationMode,
});
+ // when new tokens are added / blacklist changes, we need to sync again because we need to go through all operations again
+ const syncHash =
+ JSON.stringify(blacklistedTokenIds || []) +
+ "_" +
+ listTokensForCryptoCurrency(currency, {
+ withDelisted: true,
+ }).length;
+ const outdatedSyncHash = initialAccount?.syncHash !== syncHash;
+
const requiredConfirmations = 90;
const oldOperations = initialAccount?.operations || [];
const lastBlockHeight = oldOperations.length
? (oldOperations[0].blockHeight || 0) + 1
: 0;
- const syncFromBlockHeight =
- lastBlockHeight > requiredConfirmations
- ? lastBlockHeight - requiredConfirmations
- : 0;
+
+ const syncFromBlockHeight = outdatedSyncHash
+ ? 0
+ : lastBlockHeight > requiredConfirmations
+ ? lastBlockHeight - requiredConfirmations
+ : 0;
const {
transactions: newTransactions,
@@ -195,21 +215,24 @@ export const getAccountShape: GetAccountShape = async (info) => {
(u) => stableOperationsByIds[u.hash]
);
- const utxos = syncUtxos(newTransactions, stableUtxos, accountCredentialsMap);
+ const utxos = prepareUtxos(
+ newTransactions,
+ stableUtxos,
+ accountCredentialsMap
+ );
const accountBalance = utxos.reduce(
(total, u) => total.plus(u.amount),
new BigNumber(0)
);
- // const tokenBalance = mergeTokens(utxos.map((u) => u.tokens).flat());
- // const subAccounts = buildSubAccounts({
- // initialAccount,
- // parentAccountId: accountId,
- // parentCurrency: currency,
- // newTransactions,
- // tokens: tokenBalance,
- // accountCredentialsMap,
- // });
- const subAccounts = [];
+ const tokenBalance = mergeTokens(utxos.map((u) => u.tokens).flat());
+ const subAccounts = buildSubAccounts({
+ initialAccount,
+ parentAccountId: accountId,
+ parentCurrency: currency,
+ newTransactions,
+ tokens: tokenBalance,
+ accountCredentialsMap,
+ });
const newOperations = newTransactions.map((t) =>
mapTxToAccountOperation(t, accountId, accountCredentialsMap, subAccounts)
@@ -233,13 +256,21 @@ export const getAccountShape: GetAccountShape = async (info) => {
}).getBech32(),
}));
const cardanoNetworkInfo = await getNetworkInfo(initialAccount, currency);
+ const minAdaBalanceForTokens = tokenBalance.length
+ ? calculateMinUtxoAmount(
+ tokenBalance,
+ new BigNumber(cardanoNetworkInfo.protocolParams.lovelacePerUtxoWord),
+ false
+ )
+ : new BigNumber(0);
return {
id: accountId,
xpub,
balance: accountBalance,
- spendableBalance: accountBalance,
+ spendableBalance: accountBalance.minus(minAdaBalanceForTokens),
operations: operations,
+ syncHash,
subAccounts,
freshAddresses,
freshAddress: freshAddresses[0].address,
diff --git a/libs/ledger-live-common/src/families/cardano/js-transaction.ts b/libs/ledger-live-common/src/families/cardano/js-transaction.ts
index bc41f043866..1985fed68d5 100644
--- a/libs/ledger-live-common/src/families/cardano/js-transaction.ts
+++ b/libs/ledger-live-common/src/families/cardano/js-transaction.ts
@@ -47,7 +47,7 @@ export const prepareTransaction = async (
try {
transaction = await buildTransaction(a, t);
} catch (error) {
- return { ...t, fees: new BigNumber(0), amount: new BigNumber(0) };
+ return { ...t, fees: new BigNumber(0), amount: t.amount };
}
const transactionFees = transaction.getFee();
diff --git a/libs/ledger-live-common/src/families/cardano/logic.ts b/libs/ledger-live-common/src/families/cardano/logic.ts
index 48dde894d52..5dcc2015d40 100644
--- a/libs/ledger-live-common/src/families/cardano/logic.ts
+++ b/libs/ledger-live-common/src/families/cardano/logic.ts
@@ -448,3 +448,13 @@ export function isHexString(value: string): boolean {
const regExp = /^[0-9a-fA-F]+$/;
return regExp.test(value);
}
+
+export function decodeTokenName(assetName: string): string {
+ if (assetName.length > 0) {
+ const bytes = [...Buffer.from(assetName, "hex")];
+ if (bytes.filter((byte) => byte <= 32 || byte >= 127).length === 0) {
+ return String.fromCharCode(...bytes);
+ }
+ }
+ return assetName;
+}
diff --git a/libs/ledger-live-common/src/families/cardano/specs.ts b/libs/ledger-live-common/src/families/cardano/specs.ts
index 9ba49e76c8d..cbe7bbb7199 100644
--- a/libs/ledger-live-common/src/families/cardano/specs.ts
+++ b/libs/ledger-live-common/src/families/cardano/specs.ts
@@ -9,10 +9,15 @@ import invariant from "invariant";
import { utils as TyphonUtils } from "@stricahq/typhonjs";
import { mergeTokens } from "./logic";
import { parseCurrencyUnit } from "../../currencies";
+import { SubAccount } from "../../types";
const currency = getCryptoCurrencyById("cardano");
const minBalanceRequired = parseCurrencyUnit(currency.units[0], "2.2");
const minBalanceRequiredForMaxSend = parseCurrencyUnit(currency.units[0], "1");
+const minSpendableRequiredForTokenTx = parseCurrencyUnit(
+ currency.units[0],
+ "3"
+);
const cardano: AppSpec = {
name: "cardano",
@@ -34,7 +39,12 @@ const cardano: AppSpec = {
const updates = [
{ recipient },
- { amount: new BigNumber(account.balance.dividedBy(2)).dp(0, 1) },
+ {
+ amount: new BigNumber(account.balance.dividedBy(2)).dp(
+ 0,
+ BigNumber.ROUND_CEIL
+ ),
+ },
{ memo: "LedgerLiveBot" },
];
@@ -90,6 +100,48 @@ const cardano: AppSpec = {
);
},
},
+ {
+ name: "move ~10% token",
+ maxRun: 1,
+ transaction: ({ account, siblings, bridge, maxSpendable }) => {
+ invariant(
+ maxSpendable.gte(minSpendableRequiredForTokenTx),
+ "balance is too low"
+ );
+ const sibling = pickSiblings(siblings, 3);
+ const recipient = sibling.freshAddress;
+ const transaction = bridge.createTransaction(account);
+
+ const subAccount = account.subAccounts?.find((subAccount) =>
+ subAccount.balance.gt(1)
+ ) as SubAccount;
+ invariant(subAccount, "No token account with balance");
+
+ const updates = [
+ { subAccountId: subAccount.id },
+ { recipient },
+ {
+ amount: new BigNumber(subAccount.balance.dividedBy(10)).dp(
+ 0,
+ BigNumber.ROUND_CEIL
+ ),
+ },
+ ];
+
+ return {
+ transaction,
+ updates,
+ };
+ },
+ test: ({ operation, transaction }): void => {
+ expect(operation.subOperations).toBeTruthy();
+ expect(operation.subOperations?.length).toEqual(1);
+
+ const subOperation =
+ operation.subOperations && operation.subOperations[0];
+ expect(subOperation?.value).toEqual(transaction.amount);
+ },
+ },
],
};
diff --git a/libs/ledger-live-common/src/families/cardano/speculos-deviceActions.ts b/libs/ledger-live-common/src/families/cardano/speculos-deviceActions.ts
index f89998f35e2..eab651261a6 100644
--- a/libs/ledger-live-common/src/families/cardano/speculos-deviceActions.ts
+++ b/libs/ledger-live-common/src/families/cardano/speculos-deviceActions.ts
@@ -39,6 +39,21 @@ const acceptTransaction: DeviceAction = deviceActionFlow({
expectedValue: ({ account, status }) =>
expectedValue(account.unit, status.amount),
},
+ {
+ title: "Asset fingerprint",
+ button: "LRlr",
+ },
+ {
+ title: "Token amount",
+ button: "LRlr",
+ },
+ {
+ title: "Confirm",
+ },
+ {
+ title: "output?",
+ button: "Rr",
+ },
{
title: "Transaction fee",
button: "LRlr",
diff --git a/libs/ledger-live-common/src/generated/deviceTransactionConfig.ts b/libs/ledger-live-common/src/generated/deviceTransactionConfig.ts
index 9bf7efc95c6..ccf56461bd1 100644
--- a/libs/ledger-live-common/src/generated/deviceTransactionConfig.ts
+++ b/libs/ledger-live-common/src/generated/deviceTransactionConfig.ts
@@ -2,6 +2,8 @@ import algorand from "../families/algorand/deviceTransactionConfig";
import bitcoin from "../families/bitcoin/deviceTransactionConfig";
+import cardano from "../families/cardano/deviceTransactionConfig";
+
import celo from "../families/celo/deviceTransactionConfig";
import cosmos from "../families/cosmos/deviceTransactionConfig";
@@ -32,6 +34,7 @@ import tron from "../families/tron/deviceTransactionConfig";
export default {
algorand,
bitcoin,
+ cardano,
celo,
cosmos,
crypto_org,
diff --git a/libs/ledgerjs/packages/cryptoassets/data/cardanoNative.js b/libs/ledgerjs/packages/cryptoassets/data/cardanoNative.js
new file mode 100644
index 00000000000..d21e6e572b2
--- /dev/null
+++ b/libs/ledgerjs/packages/cryptoassets/data/cardanoNative.js
@@ -0,0 +1,912 @@
+// [network_id, policyId, assetName, name, ticker, decimals, delisted]
+module.exports = [
+ [
+ "cardano_testnet",
+ "581684861359b6d4d00594073a9aa4223c6fc24d24da05e1b34fb865",
+ "544553545f544f4b454e",
+ "TEST_TOKEN",
+ "tToken",
+ 0,
+ false,
+ ],
+ [
+ "cardano",
+ "a0028f350aaabe0545fdcb56b039bfb08e4bb4d8c4d7c3c7d481c235",
+ "484f534b59",
+ "HOSKY Token",
+ "HOSKY",
+ 0,
+ false,
+ ],
+ [
+ "cardano",
+ "af2e27f580f7f08e93190a81f72462f153026d06450924726645891b",
+ "44524950",
+ "DRIP",
+ "DRIP",
+ 6,
+ false,
+ ],
+ [
+ "cardano",
+ "9a9693a9a37912a5097918f97918d15240c92ab729a0b7c4aa144d77",
+ "53554e444145",
+ "SUNDAE",
+ "SUNDAE",
+ 6,
+ false,
+ ],
+ [
+ "cardano",
+ "4247d5091db82330100904963ab8d0850976c80d3f1b927e052e07bd",
+ "546f6b68756e",
+ "Tokhun.io Token",
+ "Tokhun",
+ 0,
+ false,
+ ],
+ [
+ "cardano",
+ "d894897411707efa755a76deb66d26dfd50593f2e70863e1661e98a0",
+ "7370616365636f696e73",
+ "spacecoins",
+ "SPACE",
+ 0,
+ false,
+ ],
+ [
+ "cardano",
+ "29d222ce763455e3d7a09a665ce554f00ac89d2e99a1a83d267170c6",
+ "4d494e",
+ "Minswap",
+ "MIN",
+ 6,
+ false,
+ ],
+ [
+ "cardano",
+ "afc910d7a306d20c12903979d4935ae4307241d03245743548e76783",
+ "4153484942",
+ "ADA Shiba Inu",
+ "ASHIB",
+ 6,
+ false,
+ ],
+ [
+ "cardano",
+ "5ad8deb64bfec21ad2d96e1270b5873d0c4d0f231b928b4c39eb2435",
+ "61646f736961",
+ "Adosia",
+ "ADO",
+ 6,
+ false,
+ ],
+ [
+ "cardano",
+ "8654e8b350e298c80d2451beb5ed80fc9eee9f38ce6b039fb8706bc3",
+ "4c4f4253544552",
+ "LOBSTER",
+ "$LOBSTER",
+ 0,
+ false,
+ ],
+ [
+ "cardano",
+ "d030b626219d81673bd32932d2245e0c71ae5193281f971022b23a78",
+ "436172646f67656f",
+ "Cardogeo",
+ "CDOG",
+ 0,
+ false,
+ ],
+ [
+ "cardano",
+ "a4da8764a57e66a0085b5bfcde96c89b798d92ee83a75f59237e375b",
+ "46495245",
+ "FIRE Token",
+ "FIRE",
+ 0,
+ false,
+ ],
+ [
+ "cardano",
+ "2afb448ef716bfbed1dcb676102194c3009bee5399e93b90def9db6a",
+ "4249534f4e",
+ "Bison Coin",
+ "BISON",
+ 0,
+ false,
+ ],
+ [
+ "cardano",
+ "f28f457472e539dc75e1598a2beddf49ce5a717998c708f05f5de610",
+ "44454653",
+ "Defender Silver",
+ "DEFS",
+ 0,
+ false,
+ ],
+ [
+ "cardano",
+ "544571c086d0e5c5022aca9717dd0f438e21190abb48f37b3ae129f0",
+ "47524f57",
+ "GROW Token",
+ "GROW",
+ 0,
+ false,
+ ],
+ [
+ "cardano",
+ "1a71dc14baa0b4fcfb34464adc6656d0e562571e2ac1bc990c9ce5f6",
+ "574f4c46",
+ "$WOLF",
+ "WOLF",
+ 0,
+ false,
+ ],
+ [
+ "cardano",
+ "884892bcdc360bcef87d6b3f806e7f9cd5ac30d999d49970e7a903ae",
+ "5041564941",
+ "PAVIA Token",
+ "PAVIA",
+ 0,
+ false,
+ ],
+ [
+ "cardano",
+ "7f376e3d1cf52e6c4350a1a91c8f8d0f0b63baedd443999ebe8fe57a",
+ "424f52475a",
+ "BORGZ",
+ "BORGZ",
+ 0,
+ false,
+ ],
+ [
+ "cardano",
+ "987c1f90efe1c95957509b460e0e4f6d6b3f7025a7aca99cd2909037",
+ "4d595448",
+ "MYTH",
+ "MYTH",
+ 0,
+ false,
+ ],
+ [
+ "cardano",
+ "6954264b15bc92d6d592febeac84f14645e1ed46ca5ebb9acdb5c15f",
+ "5354524950",
+ "StripperCoin",
+ "STRIP",
+ 3,
+ false,
+ ],
+ [
+ "cardano",
+ "6ac8ef33b510ec004fe11585f7c5a9f0c07f0c23428ab4f29c1d7d10",
+ "4d454c44",
+ "MELD",
+ "MELD",
+ 6,
+ false,
+ ],
+ [
+ "cardano",
+ "b0446f1c9105f0cc5bb6bd092f5c3e523e13f8a999b31c870298fa40",
+ "51554944",
+ "QUID",
+ "QUID",
+ 0,
+ false,
+ ],
+ [
+ "cardano",
+ "025146866af908340247fe4e9672d5ac7059f1e8534696b5f920c9e6",
+ "6362544843",
+ "cbTHC",
+ "cbTHC",
+ 6,
+ false,
+ ],
+ [
+ "cardano",
+ "c68307e7ca850513507f1498862a57c7f4fae7ba8e84b8bc074093a9",
+ "44494253",
+ "DIBS",
+ "DIBS",
+ 0,
+ false,
+ ],
+ [
+ "cardano",
+ "1d7f33bd23d85e1a25d87d86fac4f199c3197a2f7afeb662a0f34e1e",
+ "776f726c646d6f62696c65746f6b656e",
+ "World Mobile Token",
+ "WMT",
+ 6,
+ false,
+ ],
+ [
+ "cardano",
+ "1f4b1b277c9c001c1522727506a2cfb401a0d0ade069b0241f16f07d",
+ "4849",
+ "Hosky Inu",
+ "HI",
+ 0,
+ false,
+ ],
+ [
+ "cardano",
+ "8d0ae3c5b13b47907b16511a540d47436d12dcc96453c0f59089b451",
+ "42524f4f4d",
+ "BROOM Token",
+ "BROOM",
+ 0,
+ false,
+ ],
+ [
+ "cardano",
+ "d3558649b7874a1a596378515f9b80da63e73f324439ea113d34c9bb",
+ "42454147",
+ "Beagle Bucks",
+ "BEAG",
+ 0,
+ false,
+ ],
+ [
+ "cardano",
+ "5029eeccd52fef299509d509a8318fd7930c3dffcce1f9f39ff11ef9",
+ "464743",
+ "FabianGamerCoin",
+ "FGC",
+ 0,
+ false,
+ ],
+ [
+ "cardano",
+ "88691a70bb0fe49cf9124b4f78553c36c09fa6264844e2b294119173",
+ "4575736b6f",
+ "Eusko",
+ "EUS",
+ 0,
+ false,
+ ],
+ [
+ "cardano",
+ "cfee97ff8359f07a0a395a72b424bc6e030503390d864b86d4e0ecf8",
+ "4b41495a454e",
+ "KAIZEN",
+ "KAIZEN",
+ 6,
+ false,
+ ],
+ [
+ "cardano",
+ "e14fe3ab348f9a6198359481472601f4557b9f86984f40a186a3b1e8",
+ "434845525259",
+ "CHERRY Token",
+ "CHERRY",
+ 0,
+ false,
+ ],
+ [
+ "cardano",
+ "e98165a25cd0320b25f22d686268e58e66f855b6d85974947ccd708d",
+ "414441464f58",
+ "ADAFOX",
+ "ADAFOX",
+ 0,
+ false,
+ ],
+ [
+ "cardano",
+ "da8c30857834c6ae7203935b89278c532b3995245295456f993e1d24",
+ "4c51",
+ "Liqwid DAO Token",
+ "LQ",
+ 6,
+ false,
+ ],
+ [
+ "cardano",
+ "b34b3ea80060ace9427bda98690a73d33840e27aaa8d6edb7f0c757a",
+ "634e455441",
+ "anetaBTC",
+ "cNETA",
+ 0,
+ false,
+ ],
+ [
+ "cardano",
+ "300ec0d82a79acdc0616fdc0ef615e7deeddb03275e834685e9ee8a6",
+ "5854",
+ "XT",
+ "XT",
+ 0,
+ false,
+ ],
+ [
+ "cardano",
+ "682fe60c9918842b3323c43b5144bc3d52a23bd2fb81345560d73f63",
+ "4e45574d",
+ "NEWM",
+ "NEWM",
+ 6,
+ false,
+ ],
+ [
+ "cardano",
+ "d3a034e403b98cbdb0adbc8a3144d7779330916e190d387815bb85c6",
+ "50555252",
+ "CatKinson",
+ "$PURR",
+ 0,
+ false,
+ ],
+ [
+ "cardano",
+ "007394e3117755fbb0558b93c54ce3bc6c85770920044ade143dc742",
+ "505443",
+ "Pocket Change",
+ "PTC",
+ 0,
+ false,
+ ],
+ [
+ "cardano",
+ "a3914cb7a564d010c7b67774ac8720a8ece3a758279b51d8a1c05cc5",
+ "5745444e4553444159",
+ "Wednesday",
+ "WDAY",
+ 0,
+ false,
+ ],
+ [
+ "cardano",
+ "d01794c4604f3c0e544c537bb1f4268c0e81f45880c00c09ebe4b4a7",
+ "4d595354",
+ "Mystery Token",
+ "MYST",
+ 0,
+ false,
+ ],
+ [
+ "cardano",
+ "29d222ce763455e3d7a09a665ce554f00ac89d2e99a1a83d267170c6",
+ "4d494e74",
+ "Minswap MINt",
+ "MINt",
+ 6,
+ false,
+ ],
+ [
+ "cardano",
+ "8a1cfae21368b8bebbbed9800fec304e95cce39a2a57dc35e2e3ebaa",
+ "4d494c4b",
+ "MILK",
+ "MILK",
+ 0,
+ false,
+ ],
+ [
+ "cardano",
+ "a89568bb399d0cdc38367e47831c95186f5c79e58174e08a18232396",
+ "4554424643546f6b656e",
+ "ETBFCToken",
+ "ETB",
+ 6,
+ false,
+ ],
+ [
+ "cardano",
+ "c88bbd1848db5ea665b1fffbefba86e8dcd723b5085348e8a8d2260f",
+ "44414e41",
+ "DANA",
+ "DANA",
+ 6,
+ false,
+ ],
+ [
+ "cardano",
+ "47959e79846b8bdcacb91f586408d97e2dff44f31a04f03902cba818",
+ "5357454554",
+ "SWEET",
+ "SWEET",
+ 0,
+ false,
+ ],
+ [
+ "cardano",
+ "0171c997b8853fde686763d93b36ab8e04ce947bb6aa09a9ee5c4401",
+ "544f4b454e",
+ "TOKEN",
+ "TOKEN",
+ 0,
+ false,
+ ],
+ [
+ "cardano",
+ "d5dec6074942b36b50975294fd801f7f28c907476b1ecc1b57c916ed",
+ "524154",
+ "RAT",
+ "RAT",
+ 6,
+ false,
+ ],
+ [
+ "cardano",
+ "8fef2d34078659493ce161a6c7fba4b56afefa8535296a5743f69587",
+ "41414441",
+ "Aada DAO Token",
+ "AADA",
+ 6,
+ false,
+ ],
+ [
+ "cardano",
+ "0c78f619e54a5d00e143f66181a2c500d0c394b38a10e86cd1a23c5f",
+ "41444158",
+ "ADAX",
+ "ADAX",
+ 0,
+ false,
+ ],
+ [
+ "cardano",
+ "585cfcbdd0786e961187999e5d5d36b38d1ebc1c4112a0a95a8bd477",
+ "424c43",
+ "Ibilecoin",
+ "BLC",
+ 6,
+ false,
+ ],
+ [
+ "cardano",
+ "0c442180dd6163682d8e03b271caefb4944a24412bdd07adafb04ccb",
+ "50494e41434f4c414441",
+ "PinacolADA",
+ "PinacolADA",
+ 0,
+ false,
+ ],
+ [
+ "cardano",
+ "f4d97191f857096b441a410c036f63d6697dde0c71d2755dd664e302",
+ "4d4b41",
+ "Merkaba",
+ "MKA",
+ 2,
+ false,
+ ],
+ [
+ "cardano",
+ "804f5544c1962a40546827cab750a88404dc7108c0f588b72964754f",
+ "56594649",
+ "VYFI",
+ "VYFI",
+ 6,
+ false,
+ ],
+ [
+ "cardano",
+ "ae2a0aa5a24b27d9868c4a73b7c08077ac21baade5eca0fa467a2bbd",
+ "58524159",
+ "XRAY",
+ "XRAY",
+ 0,
+ false,
+ ],
+ [
+ "cardano",
+ "0fd9819a9d7fb414880883f43a42d33458f12bc5f9841cec6457dc15",
+ "5669527553",
+ "Virus",
+ "virus",
+ 0,
+ false,
+ ],
+ [
+ "cardano",
+ "df0172804f8418afc4e5b0a15b8fc78bdc3ca6d179405a7cd194f3b4",
+ "464c49434b",
+ "Flickto",
+ "FLICK",
+ 0,
+ false,
+ ],
+ [
+ "cardano",
+ "20cd68533b47565f3c61efb39c30fdace9963bfa4c0060b613448e3c",
+ "50524f584945",
+ "PROXIE",
+ "PROXIE",
+ 6,
+ false,
+ ],
+ [
+ "cardano",
+ "e9c28a71273f825b13f38244ccf1fea97c4025813610d01a7c5d681f",
+ "436861726c7a20546f6b656e",
+ "Charlz Token",
+ "CHRLZ",
+ 0,
+ false,
+ ],
+ [
+ "cardano",
+ "6787a47e9f73efe4002d763337140da27afa8eb9a39413d2c39d4286",
+ "524144546f6b656e73",
+ "RADTokens",
+ "RAD",
+ 0,
+ false,
+ ],
+ [
+ "cardano",
+ "db30c7905f598ed0154de14f970de0f61f0cb3943ed82c891968480a",
+ "434c4150",
+ "CLAP",
+ "CLAP",
+ 3,
+ false,
+ ],
+ [
+ "cardano",
+ "aea1ceb3625680e2f7a31ea1a64c9c430c34d8588bf4f8e3c7f9b1dd",
+ "476f74636869",
+ "Gotchi",
+ "GTCHI",
+ 6,
+ false,
+ ],
+ [
+ "cardano",
+ "14a3455f71c435a04ea1fdb50a3ef4c1cab0e79fb1565627ac66a575",
+ "52415645",
+ "Ravendex",
+ "RAVE",
+ 0,
+ false,
+ ],
+ [
+ "cardano",
+ "2b0a04a7b60132b1805b296c7fcb3b217ff14413991bf76f72663c30",
+ "67696d62616c",
+ "gimbal",
+ "GMBL",
+ 6,
+ false,
+ ],
+ [
+ "cardano",
+ "4c17b7009448a33d1834b0946ea752ecd0cc61c7bb25cd9ff18cff58",
+ "426c6f6f6d",
+ "Bloom",
+ "BLOOM",
+ 6,
+ false,
+ ],
+ [
+ "cardano",
+ "94cbb4fcbcaa2975779f273b263eb3b5f24a9951e446d6dc4c135864",
+ "52455655",
+ "Revuto",
+ "REVU",
+ 8,
+ false,
+ ],
+ [
+ "cardano",
+ "63766427b4499dd678cb8b715dec3265dd292279ce7779447e3651e5",
+ "4b4f5a",
+ "Politikoz Token",
+ "KOZ",
+ 0,
+ false,
+ ],
+ [
+ "cardano",
+ "885742cd7e0dad321622b5d3ad186797bd50c44cbde8b48be1583fbd",
+ "534b554c4c",
+ "SKULL",
+ "SKULL",
+ 0,
+ false,
+ ],
+ [
+ "cardano",
+ "f7c777fdd4531cf1c477551360e45b9684073c05c2fa61334f8f9add",
+ "5665726974726565546f6b656e",
+ "VeritreeToken",
+ "TREES",
+ 0,
+ false,
+ ],
+ [
+ "cardano",
+ "aa2797739e4f4a1efd5346998febff59909e425b5fddb1b0ec4a24f8",
+ "4c6f6f6b7a",
+ "Lookz",
+ "LOOKZ",
+ 0,
+ false,
+ ],
+ [
+ "cardano",
+ "dca54ecf37b0e3af2fdfd336e1d21fadcc45b3261b0f73a095631dfe",
+ "444f4558",
+ "DOEX",
+ "DOEX",
+ 0,
+ false,
+ ],
+ [
+ "cardano",
+ "25f0fc240e91bd95dcdaebd2ba7713fc5168ac77234a3d79449fc20c",
+ "534f4349455459",
+ "SOCIETY",
+ "SOCIETY",
+ 6,
+ false,
+ ],
+ [
+ "cardano",
+ "57684adcb032c8dbc40179841bed987d8dee7472617a0e5c25ef4140",
+ "59617953776170",
+ "YaySwap",
+ "YAY",
+ 0,
+ false,
+ ],
+ [
+ "cardano",
+ "c9f955eeffa84e42363b4992281d32dd2f9239153d6c66420a9acc15",
+ "4c4f47",
+ "Life Log Token",
+ "LOG",
+ 6,
+ false,
+ ],
+ [
+ "cardano",
+ "240fb00eff73acc51c09e81dae6628c4bedb9964151d45e3faed874f",
+ "434c4157",
+ "Claw Token",
+ "$CLAW",
+ 0,
+ false,
+ ],
+ [
+ "cardano",
+ "2aa9c1557fcf8e7caa049fa0911a8724a1cdaf8037fe0b431c6ac664",
+ "50494759546f6b656e",
+ "PIGY Token",
+ "PIGY",
+ 0,
+ false,
+ ],
+ [
+ "cardano",
+ "2c96f49b6e6e32ae69a182e85b74db4edfc9539496a13ab76d1258fa",
+ "434e54",
+ "Cardano Native Token",
+ "CNT",
+ 0,
+ false,
+ ],
+ [
+ "cardano",
+ "b6a7467ea1deb012808ef4e87b5ff371e85f7142d7b356a40d9b42a0",
+ "436f726e75636f70696173205b76696120436861696e506f72742e696f5d",
+ "Cornucopias Token",
+ "COPI",
+ 6,
+ false,
+ ],
+ [
+ "cardano",
+ "208a2ca888886921513cb777bb832a8dc685c04de990480151f12150",
+ "53484942414441",
+ "SHIBADA",
+ "SHIBA",
+ 0,
+ false,
+ ],
+ [
+ "cardano",
+ "c4c00fbd8fa227442a5e7cdecde33b24588494d05a2c50fda8938c6d",
+ "4b49445a",
+ "Kidz Coin",
+ "KIDZ",
+ 0,
+ false,
+ ],
+ [
+ "cardano",
+ "dbc31b04d90b37332813cb4cee3e8f79994643d899a5366797e745ee",
+ "465544",
+ "FudCoin",
+ "FUD",
+ 6,
+ false,
+ ],
+ [
+ "cardano",
+ "d0af056c509b6b1133cd83a750b7245e561169281fde3df1cb6e2d96",
+ "506f6f6c5065656b436f696e",
+ "PoolPeekCoin",
+ "PoolPeekCoin",
+ 0,
+ false,
+ ],
+ [
+ "cardano",
+ "8f52f6a88acf6127bc4758a16b6047afc4da7887feae121ec217b75a",
+ "534e4f57",
+ "SNOW",
+ "SNOW",
+ 0,
+ false,
+ ],
+ [
+ "cardano",
+ "2441ab3351c3b80213a98f4e09ddcf7dabe4879c3c94cc4e7205cb63",
+ "46495245",
+ "FIRE",
+ "FIRE",
+ 0,
+ false,
+ ],
+ [
+ "cardano",
+ "c7dcfa416c127f630b263c7e0fe0564430cfa9c56bba43e1a37c6915",
+ "474f4b4559",
+ "GoKey",
+ "GOKEY",
+ 0,
+ false,
+ ],
+ [
+ "cardano",
+ "97747aa3c33fdfe4b5faa7bb8b4534932c6d980cb13c14c5a547e7ca",
+ "70757272414441",
+ "purrADA",
+ "purrADA",
+ 6,
+ false,
+ ],
+ [
+ "cardano",
+ "ccb3577601d6cf0e021288871112926338bee685c6c37eeadf6dddd9",
+ "43617264616e6961466f756e646572426c7565",
+ "CardaniaFounderBlue",
+ "CardaniaFounderBlue",
+ 0,
+ false,
+ ],
+ [
+ "cardano",
+ "ccb3577601d6cf0e021288871112926338bee685c6c37eeadf6dddd9",
+ "43617264616e6961466f756e646572526564",
+ "CardaniaFounderRed",
+ "CardaniaFounderRed",
+ 0,
+ false,
+ ],
+ [
+ "cardano",
+ "1f4b1b277c9c001c1522727506a2cfb401a0d0ade069b0241f16f07d",
+ "484953",
+ "Hosky Inu Silver",
+ "HIS",
+ 0,
+ false,
+ ],
+ [
+ "cardano",
+ "ccb3577601d6cf0e021288871112926338bee685c6c37eeadf6dddd9",
+ "43617264616e6961466f756e646572477265656e",
+ "CardaniaFounderGreen",
+ "CardaniaFounderGreen",
+ 0,
+ false,
+ ],
+ [
+ "cardano",
+ "b4273f1d8d0021d188784c3d72dc514f602b7ab8cfb87e3134550c42",
+ "446f6765414441",
+ "DogeADA",
+ "DGADA",
+ 0,
+ false,
+ ],
+ [
+ "cardano",
+ "133fac9e153194428eb0919be39837b42b9e977fc7298f3ff1b76ef9",
+ "5055444759",
+ "$PUDGY Token",
+ "PUDGY",
+ 0,
+ false,
+ ],
+ [
+ "cardano",
+ "f555c46bad0731d080c9381d7fff6f82839946a66bd070d185e1ea2f",
+ "42444f4745",
+ "BlackDoge",
+ "BDOGE",
+ 0,
+ false,
+ ],
+ [
+ "cardano",
+ "1dd1a7dde0e1e82761325ee5f4719d0d4b7c24dfba77d9bee01eed4b",
+ "4d454f57",
+ "MEOW",
+ "MEOW",
+ 6,
+ false,
+ ],
+ [
+ "cardano",
+ "a00fdf4fb9ab6c8c2bd1533a2f14855edf12aed5ecbf96d4b5f5b939",
+ "4334",
+ "Cardano Crocs Club Coin",
+ "C4",
+ 0,
+ false,
+ ],
+ [
+ "cardano",
+ "f4364875e75320d405ceadebdf0db63fadaff55c72d4ff6b82f0676a",
+ "434152474f",
+ "Cardano Gold",
+ "CARGO",
+ 6,
+ false,
+ ],
+ [
+ "cardano",
+ "59e31d17e4d212ea35df6088e0395455c40f5ad463d161497a89c567",
+ "426162795365616c",
+ "BabySeal",
+ "BSEAL",
+ 0,
+ false,
+ ],
+ [
+ "cardano",
+ "b0af30edf2c7f11465853821137e0a6ebc395cab71ee39c24127ffb4",
+ "4e465443",
+ "NFT Creative Coin",
+ "NFTC",
+ 0,
+ false,
+ ],
+ [
+ "cardano",
+ "6c8642400e8437f737eb86df0fc8a8437c760f48592b1ba8f5767e81",
+ "456d706f7761",
+ "Empowa",
+ "EMP",
+ 6,
+ false,
+ ],
+ [
+ "cardano",
+ "ca942cb8bb5d1ef750766ded355f320880539111f10efa2b1a478ff9",
+ "524147",
+ "RaggieCoin",
+ "RAG",
+ 0,
+ false,
+ ],
+ [
+ "cardano",
+ "0c92aabef5a8f91a36470d0762806c165c0d04aa992541e25d55486a",
+ "424347",
+ "Blockchaingames",
+ "BCG",
+ 6,
+ false,
+ ],
+];
diff --git a/libs/ledgerjs/packages/cryptoassets/src/tokens.ts b/libs/ledgerjs/packages/cryptoassets/src/tokens.ts
index f8583977b24..30cceeed6b2 100644
--- a/libs/ledgerjs/packages/cryptoassets/src/tokens.ts
+++ b/libs/ledgerjs/packages/cryptoassets/src/tokens.ts
@@ -7,6 +7,7 @@ import bep20tokens from "../data/bep20";
import polygonTokens from "../data/polygon-erc20";
import asatokens from "../data/asa";
import esdttokens from "../data/esdt";
+import cardanoNativeTokens from "../data/cardanoNative";
import stellarTokens from "../data/stellar";
//import spltokens from "../data/spl";
const emptyArray = [];
@@ -25,6 +26,7 @@ addTokens(trc20tokens.map(convertTRONTokens("trc20")));
addTokens(bep20tokens.map(convertBEP20));
addTokens(asatokens.map(convertAlgorandASATokens));
addTokens(esdttokens.map(convertElrondESDTTokens));
+addTokens(cardanoNativeTokens.map(convertCardanoNativeTokens));
addTokens(stellarTokens.map(convertStellarTokens));
//addTokens(spltokens.map(convertSplTokens));
type TokensListOptions = {
@@ -374,6 +376,37 @@ function convertSplTokens([
};
}
+function convertCardanoNativeTokens([
+ parentCurrencyId,
+ policyId,
+ assetName,
+ name,
+ ticker,
+ decimals,
+ delisted,
+]): TokenCurrency {
+ const assetId = policyId + assetName;
+ return {
+ type: "TokenCurrency",
+ id: `${parentCurrencyId}/native/${assetId}`,
+ // Tracking and accounting of native tokens is natively supported by cardano ledger.
+ // As there's no contract for native tokens, using unique assetId in place of contractAddress
+ contractAddress: assetId,
+ parentCurrency: getCryptoCurrencyById(parentCurrencyId),
+ tokenType: "native",
+ name,
+ ticker,
+ delisted,
+ units: [
+ {
+ name,
+ code: ticker,
+ magnitude: decimals,
+ },
+ ],
+ };
+}
+
function convertStellarTokens([
assetCode,
assetIssuer,
diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml
index f64f4eca266..e60121a1d3d 100644
--- a/pnpm-lock.yaml
+++ b/pnpm-lock.yaml
@@ -23082,7 +23082,7 @@ packages:
dev: false
/core-util-is/1.0.2:
- resolution: {integrity: sha512-3lqz5YjWTYnW6dlDa5TLaTCcShfar1e40rmcJVwCBJC6mWlFuj0eCHIElmG1g5kyuJ/GD+8Wn4FFCcz4gJPfaQ==}
+ resolution: {integrity: sha1-tf1UIgqivFq1eqtxQMlAdUUDwac=}
/core-util-is/1.0.3:
resolution: {integrity: sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ==}