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 ( + + + }> + + + <Trans i18nKey="account.availableBalance" /> + + + + + + {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==}