base on The open source repository for Cake Wallet, a noncustodial multi-currency wallet, and Monero.com, a noncustodial Monero-only wallet. Need help? Check out https://docs.cakewallet.com <div align="center"> ![logo](.github/assets/cake-wallet-gh-header-2.svg) </div> <div align="center"> [<img height="42" src=".github/assets/app-store-badge.svg">](https://apps.apple.com/us/app/cake-wallet/id1334702542?platform=iphone) [<img height="42" src=".github/assets/google-play-badge.png">](https://play.google.com/store/apps/details?id=com.cakewallet.cake_wallet) [<img height="42" src=".github/assets/f-droid-badge.png">](https://fdroid.cakelabs.com) [<img height="42" src=".github/assets/mac-store-badge.svg">](https://apps.apple.com/us/app/cake-wallet/id1334702542?platform=mac) [<img height="42" src=".github/assets/linux-badge.svg">](https://github.com/cake-tech/cake_wallet/releases) </div> # Cake Wallet [Cake Wallet](https://cakewallet.com) is an open-source, non-custodial, and private multi-currency crypto wallet for Android, iOS, macOS, and Linux. Cake Wallet includes support for several cryptocurrencies, including: * Monero (XMR) * Bitcoin (BTC) * Ethereum (ETH) * Litecoin (LTC) * Bitcoin Cash (BCH) * Polygon (POL) * Base (BASE) * Arbitrum (ARB) * Solana (SOL) * Tron (TRX) * Nano (XNO) * Zano (ZANO) * Decred (DCR) * Wownero (WOW) ## Features ### App-Wide Features * Completely noncustodial. *Your keys, your coins.* * Built-in exchange for dozens of pairs * Easily pay cryptocurrency invoices with fixed rate exchanges * Buy cryptocurrency (BTC/LTC/XMR/ETH) with credit/debit/bank * Sell cryptocurrency by bank transfer * Scan QR codes for easy cryptocurrency transfers * Create several wallets * Select your own custom nodes/servers * Address book * Backup to an external location or iCloud * Send to OpenAlias, Unstoppable Domains, Yats, and FIO Crypto Handles * Set desired network fee level * Store local transaction notes * Extremely simple user experience * Convenient exchange and sending templates for recurring payments * Create donation links and invoices in the receive screen * Robust privacy settings (eg: Tor-only connections) * Robust security settings (eg: Cake 2FA) ### Monero Specific Features * The Monero view key is retained on the device for maximum privacy * Full support for Monero subaddresses and accounts * Specify restore height for faster syncing * Specify multiple recipients for batch sending * Optionally set Monero nodes as trusted for faster syncing * Specify a proxy for Monero nodes, compatible with Tor and i2p ### Bitcoin Specific Features * Bitcoin coin control (specify specific outputs to spend) * Automatically generate new addresses * Specify multiple recipients for batch sending ### Ethereum Specific Features * Store ETH and all ERC-20 tokens * Add custom tokens by contract address * Enable or disable Etherscan for transaction history ### Litecoin Specific Features * Litecoin coin control (specify specific outputs to spend) * Automatically generate new addresses * Specify multiple recipients for batch sending # Monero.com by Cake Wallet for Android and iOS ## Open Source Monero-Only Wallet *Exchanging to/from other assets is also supported.* ## Links * Website: https://monero.com * App Store (iOS): https://apps.apple.com/app/id1601990386 * Google Play: https://play.google.com/store/apps/details?id=com.monero.app * F-Droid: https://fdroid.cakelabs.com * APK: https://github.com/cake-tech/cake_wallet/releases ### APK Verification APK releases on GitHub, Accrescent, and F-Droid use the same key. They can easily be verified using [apksigner](https://developer.android.com/tools/apksigner#options-verify) or [AppVerifier](https://github.com/soupslurpr/AppVerifier). See below for Cake Wallet's SHA-256 signing certificate hash: ``` com.cakewallet.cake_wallet C5:40:53:AB:0F:10:D9:54:17:62:A3:DA:76:65:AE:3D:BA:5E:7C:74:3A:B4:F1:08:A5:34:9D:62:AC:10:6E:F5 ``` # Support We have 24/7 free support. Please contact [email protected] We have excellent user guides, which are also open-source and open for contributions: https://guides.cakewallet.com # Build Instructions More instructions to follow For instructions on how to build for Android: please view file `howto-build-android.md` # Contributing ## Improving translations Edit the applicable `strings_XX.arb` file in `res/values/` and open a pull request with the changes. ## Current list of language files: - English - Spanish - French - German - Italian - Portuguese - Dutch - Polish - Croatian - Russian - Ukrainian - Hindi - Japanese - Chinese - Korean - Thai - Arabic - Turkish - Burmese - Urdu - Bulgarian - Czech - Indonesian - Hausa - Yoruba ## Add a new language 1. Create a new `strings_XX.arb` file in `res/values/`, replacing XX with the language's [ISO 639-1 code](https://en.wikipedia.org/wiki/ISO_639-1). 2. Edit the strings in this file, replacing XXX below with the translation for each string. `"welcome": "Welcome to",` -> `"welcome": "XXX",` 3. For strings where there is a variable, denoted by a $ symbol and braces, such as ${status}, the string in braces should not be translated. For example, when editing line 106: "time" : "${minutes}m ${seconds}s" The only parts to be translated, if needed, are the values m and s after the variables. 4. Add the language to `lib/entities/language_service.dart` under both `supportedLocales` and `localeCountryCode`. Use the name of the language in the local language and in English in parentheses after for `supportedLocales`. Use the [ISO 3166-1 alpha-3 code](https://en.wikipedia.org/wiki/ISO_3166-1_alpha-3) for `localeCountryCode`. You must choose one country, so choose the country with the most native speakers of this language or is otherwise best associated with this language. 5. Add a relevant flag to `assets/images/flags/XXXX.png`, replacing XXXX with the 3 letters localeCountryCode. The image must be 42x26 pixels with 3 pixels of transparent margin on all 4 sides. You can resize the flag with [paint.net](https://www.getpaint.net/) to 36x20 pixels, expand the canvas to 42x26 pixels with the flag anchored in the middle, and then manually delete the 3 pixels on each side to make it transparent. Or you can use another program like Photoshop. 6. Add the new language code to `tool/utils/translation/translation_constants.dart` ## Add a new fiat currency 1. Check with [Cake Wallet support](https://guides.cakewallet.com) to see if the desired new fiat currency is available through our fiat API. Not all fiat currencies are. 2. If the currency is associated strongly with a specific issuing country, map the [ISO 4217](https://en.wikipedia.org/wiki/ISO_4217) currency code with the applicable [ISO 3166-1 alpha-3 code](https://en.wikipedia.org/wiki/ISO_3166-1_alpha-3) in `lib/entities/fiat_currency.dart`. If the currency is used in a whole region or organization, then map with a reasonable interpretation of this (eg: eur countryCode for EUR symbol). 3. Add the raw mapping underneath in `lib/entities/fiat_currency.dart` following the same format as the others. 4. Add a flag of the issuing country or organization to `assets/images/flags/XXXX.png`, replacing XXXX with the ISO 3166-1 alpha-3 code used above (eg: `usa.png`, `eur.png`). Do not add this if the flag with the same name already exists. The image must be 42x26 pixels with a 3 pixels of transparent margin on all 4 sides. --- Copyright (C) 2018-2023 Cake Labs LLC ", Assign "at most 3 tags" to the expected json: {"id":"11268","tags":[]} "only from the tags list I provide: [{"id":77,"name":"3d"},{"id":89,"name":"agent"},{"id":17,"name":"ai"},{"id":54,"name":"algorithm"},{"id":24,"name":"api"},{"id":44,"name":"authentication"},{"id":3,"name":"aws"},{"id":27,"name":"backend"},{"id":60,"name":"benchmark"},{"id":72,"name":"best-practices"},{"id":39,"name":"bitcoin"},{"id":37,"name":"blockchain"},{"id":1,"name":"blog"},{"id":45,"name":"bundler"},{"id":58,"name":"cache"},{"id":21,"name":"chat"},{"id":49,"name":"cicd"},{"id":4,"name":"cli"},{"id":64,"name":"cloud-native"},{"id":48,"name":"cms"},{"id":61,"name":"compiler"},{"id":68,"name":"containerization"},{"id":92,"name":"crm"},{"id":34,"name":"data"},{"id":47,"name":"database"},{"id":8,"name":"declarative-gui "},{"id":9,"name":"deploy-tool"},{"id":53,"name":"desktop-app"},{"id":6,"name":"dev-exp-lib"},{"id":59,"name":"dev-tool"},{"id":13,"name":"ecommerce"},{"id":26,"name":"editor"},{"id":66,"name":"emulator"},{"id":62,"name":"filesystem"},{"id":80,"name":"finance"},{"id":15,"name":"firmware"},{"id":73,"name":"for-fun"},{"id":2,"name":"framework"},{"id":11,"name":"frontend"},{"id":22,"name":"game"},{"id":81,"name":"game-engine "},{"id":23,"name":"graphql"},{"id":84,"name":"gui"},{"id":91,"name":"http"},{"id":5,"name":"http-client"},{"id":51,"name":"iac"},{"id":30,"name":"ide"},{"id":78,"name":"iot"},{"id":40,"name":"json"},{"id":83,"name":"julian"},{"id":38,"name":"k8s"},{"id":31,"name":"language"},{"id":10,"name":"learning-resource"},{"id":33,"name":"lib"},{"id":41,"name":"linter"},{"id":28,"name":"lms"},{"id":16,"name":"logging"},{"id":76,"name":"low-code"},{"id":90,"name":"message-queue"},{"id":42,"name":"mobile-app"},{"id":18,"name":"monitoring"},{"id":36,"name":"networking"},{"id":7,"name":"node-version"},{"id":55,"name":"nosql"},{"id":57,"name":"observability"},{"id":46,"name":"orm"},{"id":52,"name":"os"},{"id":14,"name":"parser"},{"id":74,"name":"react"},{"id":82,"name":"real-time"},{"id":56,"name":"robot"},{"id":65,"name":"runtime"},{"id":32,"name":"sdk"},{"id":71,"name":"search"},{"id":63,"name":"secrets"},{"id":25,"name":"security"},{"id":85,"name":"server"},{"id":86,"name":"serverless"},{"id":70,"name":"storage"},{"id":75,"name":"system-design"},{"id":79,"name":"terminal"},{"id":29,"name":"testing"},{"id":12,"name":"ui"},{"id":50,"name":"ux"},{"id":88,"name":"video"},{"id":20,"name":"web-app"},{"id":35,"name":"web-server"},{"id":43,"name":"webassembly"},{"id":69,"name":"workflow"},{"id":87,"name":"yaml"}]" returns me the "expected json"