Blog

Setting Token Approvals - Our Solution

Setting Token Approvals - Our Solution

Setting unreasonably high token allowances can be a risk. We are adding a new notification & way to edit these allowances. First, let us point out that we really appreciate the recent discussion around token allowances with a special thanks to ZenGo with their recent post on wallets that might want to check their dealings with the topics. Now, let’s start from the beginning, look at challenges and then find the solutions that we integrate into the next version of imToken -> soon™ About Approvals If you ever used a DApp on Ethereum there’s a very high chance you have approved an ERC20 token to be used by a smart contract. Approvals are first and foremost a technical solution: We first approve the contract for the token, then call the DApp contract which calls the transferFrom function.Simply put: Contracts can’t know when a token is transferred to them. Instead, we give the contract the right to take the tokens by itself. To deposit tokens on your favorite lending DApp you would first approve the DApp’s contract with the amount you want to deposit and then call the deposit function that will move your token to the DApp contract. The risk However, there are two different ways approvals are used: Sometimes approvals allow the DApp to transfer for example 5 DAI or 10 BAT, i.e. whatever you set in the approval transaction Often the amounts approved are very high — basically unlimited — allowing the DApp to transfer all of your tokens With unlimited approvals, any DApp (or the admin controlling it) can at any time transfer your tokens, without requiring any further approval. A smart contract (or it’s admin) can steal a bigger amount of your tokens at any time. Or a hacker might steal your money when that contract has vulnerabilities. Approving a limited allowance of 5 Dai would mean that this DApp can only use 5 Dai out of your wallet, for a single time.Trading on a DEX, you would need to send approval transactions every single time, but could be sure that the DEX takes only a limited amount of tokens out of your wallet. Some smart contract wallets allow you to approve limited amounts within every single transaction. Imagine using any DApp and automatically limit your ERC20 allowance for the specific amount of that transaction. Note: Since approvals don’t expire, you need to manually revoke them via tools such as tac.dappstar.io , approved.zone or revoke.cash (in your imToken browser or other wallets). Our Solution — Notify and Edit Following our design philosophy, we want to offer our users the ability to make educated decisions, just like imToken already warns when entering a malicious DApp. imToken warns when you enter a DApp tagged high-risk Following the EIP1102 process, DApps will not be able to see your account until you accept them. In imToken, DApps will access your account after confirmation Already today, you can use tools such as Token Allowance Checker in your imToken DApp Browser for managing all of your allowances. The tools scan your address to give you an overview of all allowances that you every set on any contracts. Use the tool to check which one you want to revoke. Additionally, we will build a similar tool of our own. We are introducing updates in two steps: An improved notification for setting ERC20 allowances (comes with next update) A way to edit ERC20 allowances With the next update, imToken will show you a special transaction notification for approvals. Each time you set a new approval, the app will show you both the token as well as the amount of tokens you are setting as allowance. While this doesn’t stop users from setting unlimited allowances, we are sure that it helps to make educated decisions. The new imToken approval design Afterwards, we will update the approval process in a way that allows you to edit allowances as you set them. Any DApp that asks for a very high allowance can be forced to accept a low one. Long-term, we hope that DApps will support approve-and-execute schemes in which a single user interaction both sets the allowance as well as executes the transaction. The future: Batched approval + transactions
2020-03-27
imToken 2.5.4, creating EOS accounts even more conveniently

imToken 2.5.4, creating EOS accounts even more conveniently

imToken 2.5.4 is now online! EOS account creation & transfer miner fee are optimized.   imToken 2.5.4 update. You can create an EOS account more easily Optimized miner fees for BTC transfers Optimize ETH miner fees to make your transactions better and faster Other fixes and optimizations Create an EOS account more conveniently Are you anxious to create an EOS account, but you don’t have enough ETH in your wallet to create one? With imToken 2.5.3, we now provide a more convenient solution: Create your EOS account in imToken as follows: Use ETH to complete the payment Hold 3 TFTs for free registration Other payment methods available (so far China only) Optimized BTC miner fee display This version optimizes the way the BTC default miner fee is shown to you. That means, you will have more realistic estimates before sending on the miner fees before sending your BTC transfer. Related: How to set transaction fees? Optimized ETH miner fee  As before, this version will intelligently estimate the appropriate miner fee for your ETH and ERC20 token transactions, but now even better, reducing the transfer failure caused by "out of gas / insufficient miner fee", making transactions faster and fail less. Related: What is the miner fee on Ethereum? What is the reason for the transaction failure? How to update Android users: You can download from the official website https://token.im or at your favorite app store iOS users: You can download from the App Store For 1.0 users, please follow the tutorial below to upgrade 1.0 to 2.0 safely: https://support.token.im/hc/en-us/articles/360013262654 https://medium.com/imtoken/tutorial-step-by-step-guide-for-upgrading-to-imtoken-2-0-dbe3b392242 If you face any difficulty using imToken or have any comments and suggestions for us, please submit your feedback directly within the app. Always backup your keys! Before upgrading, please make sure that all wallet identities have been backed up properly. Please write down the Mnemonic phrase on a physical paper, never store it in the network; Please restrain from sharing your private key, Mnemonic phrase or Keystore to anyone! If you find potential hacking activities in imToken, please report to us via email at [email protected] to prevent more people from being deceived; Please have a look at our Help Center at https://support.token.im/hc/en-us for more detailed information about imToken.
2020-03-30
Buy crypto with fiat, now on imToken

Buy crypto with fiat, now on imToken

Fiat-to-crypto by MoonPay: Purchase BTC, ETH, EOS & more with fiat in over 40 countries (including 🇬🇧 🇪🇺 🇺🇸 🇦🇺) We are thrilled to introduce a natively integrated fiat-to-crypto gateway powered by MoonPay. This added feature will allow imToken users in more than 40 countries to purchase BTC, ETH, EOS and many more digital assets with fiat. With the simple and fast fiat-to-crypto, we are looking forward to lowering the barrier-to-entry for our users again and bringing the crypto to a broader audience. To get started Open up your imToken app. Visit the Asset Details screen of your selected asset. Click on the Exchange button and select Buy xxx. Input the $ amount you want to purchase and follow the instructions. Supported Assets BTC, ETH, EOS, LTC, PAX, TRX, TUSD, USDC, USDT, BAT, DAI, EOSDT, and ATOM. Supported Countries 🇬🇧 United Kingdom 🇪🇺 Most of Europe 🇺🇸 Most of the USA 🇦🇺 Australia 🇧🇷 Brazil 🇨🇦 Canada 🇭🇰 HK 🇯🇵 Japan 🇲🇽 Mexico 🇷🇺 Russia 🇿🇦 South Africa 🇰🇷 South Korea and more. Click here to see the full list of supported countries. Pricing 4.5 % of each purchase or a $4.99 minimum fee will be collected by MoonPay. About MoonPay MoonPay is a fintech company that enables web and mobile developers to let their users purchase virtual currencies using their everyday credit card. It integrates with banks and online crypto exchanges to fulfil the entire purchase process.
2020-01-23
imToken 2.5.1, Tokenlon transaction rate is as low as 0.1%

imToken 2.5.1, Tokenlon transaction rate is as low as 0.1%

imToken wishes you a happy Chinese New Year, auspicious year of the rat. The Spring Festival is coming, the time when a country of 1.3 billion people is on the road home  ✈️ 🚗🚄 We want to take the opportunity and take a look at the new version of imToken and what the Updates bring. imToken 2.5.1 update content: Optimize Tokenlon fees: As low as $ 3 can complete a transaction on Tokenlon now More attractive transaction rates, as low as 0.1% You can import and export TRON, BCH, LTC wallet private keys You can switch the BCH address format and easily transfer BCH from exchange into imToken Optimize EOS resource management, you can use Alipay and WeChat to quickly lease CPU resources For developers: Fix DApp Browser scanning problem Tokenlon fee optimization imToken 2.5.1 features a Tokenlon fee optimization, with which you can complete transactions in Tokenlon with as low a fee as $3.  At the same time, new transaction levels were introduced: The more transactions you accumulated over the past 30 days using Tokenlon, the higher the corresponding transaction level and the lower the fee, which can be as low as 0.1%! For a detailed transaction rate introduction see the fee table.  Import and export TRON, BCH, LTC wallet Private Keys This optimization adds the TRON, BCH, LTC wallet private key import and export functions, making it easier to import imToken from other wallets.  Watch the screenshot below to learn how to import / import private keys     Switch your BCH address format Your BCH receipt page now supports BCH in two address formats: CashAddr and Legacy. Switch the address format to easily transfer your BCH out of any exchange into imToken. What is the BCH CashAddr and Legacy Address Format? 👇 CashAddr:CashAddr is a new Bitcoin Cash address format that helps distinguish between BCH addresses and BTC addresses. This can prevent users from accidentally transferring BCH to BTC address, so as not to cause unnecessary trouble. For example: bitcoincash: qpg6rgmpxr838cnwjhatdyuxkdz644xku54fe5yk99 Legacy: Although many exchanges and wallets use CashAddr, some exchanges have not adopted it (such as Huobi). If you do not support the CashAddr address format, you can choose the legacy address format. For example: 16tp827qst72hPT2MUKgCWNdE4E9HqVVuF to Optimized EOS resource management. Use Alipay and WeChat to quickly lease CPU resources Select your EOS wallet and click ‘Resource Management' on the asset homepage. You will now see the "CPU Lease" entrance at the bottom.  Here you can use Alipay and WeChat to lease CPU resources quickly, and use EOS Easy Payment CPU service to pay for the resources required for a single transfer operation with EOS, an easy way for solving the urgent need to send tokens. How to update Android users: You can download from the official website https://token.im or at your favorite app store iOS users: You can download from the App Store For 1.0 users, please follow the tutorial below to upgrade 1.0 to 2.0 safely: https://support.token.im/hc/en-us/articles/360013262654 https://medium.com/imtoken/tutorial-step-by-step-guide-for-upgrading-to-imtoken-2-0-dbe3b392242  If you face any difficulty using imToken or have any comments and suggestions for us, please submit your feedback directly within the app. Always backup your keys! Before upgrading, please make sure that all wallet identities have been backed up properly. Please write down the Mnemonic phrase on a physical paper, never store it in the network; Please restrain from sharing your private key, Mnemonic phrase or Keystore to anyone! If you find potential hacking activities in imToken, please report to us via email at [email protected] to prevent more people from being deceived; Please have a look at our Help Center at https://support.token.im/hc/en-us for more detailed information about imToken.
2020-03-05
BCH now on imToken!

BCH now on imToken!

We are happy to announce that Bitcoin Cash (BCH) is now available on imToken With the latest update, we are introducing support for a number of new tokens, including Bitcoin Cash, also known as BCH. About BCH Bitcoin Cash (also: BCH) is a fork of Bitcoin that was created in 2017. In 2018 Bitcoin Cash forked again into Bitcoin Cash and Bitcoin SV.  How is BCH different from BTC and what is the story behind BCH? The main difference between BCH and Bitcoin is the block size, with BCH currently supporting a block size up to 32M. The bigger blog size leads to more transactions confirmed per block which in turn leads to a lower cost per transaction. In comparison to Bitcoin, Bitcoin Cash aims to offer digital cash, an easy way for users to pay merchants and send - also smaller transactions - to other BCH users. This mission also fits the original promise of Bitcoin as "Peer-to-Peer Electronic Cash".  To this day BCH is already accepted by thousands of merchants across the world with the community aiming to get more on board. Source: https://bitinfocharts.com/comparison/transactionfees-btc-bch.html#6m  So, where does BCH actually come from? Due to transaction frequency and block size restrictions, Bitcoin (short: BTC) can handle roughly one 7 transactions per second.  When bitcoin transaction fees in 2016 and 2017 were getting higher and higher, some developers in the Bitcoin community, including Roger Ver, Jihan Wu and other investors, believed that if the block size would not increase, BTC will become a digital investment product and cannot be used as a payment method for ordinary people. To solve the problem of high transaction fees, Bitcoin Core is working on implementing SegWit + Lightning. Other camps in the blockchain community, however, insisted that an expansion of block size was the only viable solution. Roger Ver, as well as many investors and miners, were dissatisfied with the SegWit proposal and finally decided to hard fork bitcoin. In August 2017, at bitcoin’s block number 478559, BCH was released featuring a block size limit of eight megabytes. Currently, BCH holds the position of developing a block size limit of 32 megabytes. How do I open a BCH wallet? Do you want to store your BCH in imToken? Simply download imToken in your favorite app store, open the app and set up your first wallet. After that import any existing BCH wallet or create one as part of your already created imToken wallet. Your new wallet has a BCH address to which you can send existing BCH from other wallets or exchange accounts. It’s as simple as that. How to backup my BCH wallet? You already store your BCH in imToken and want to make sure to not lose it? There are two possible scenarios. First, if you imported your account from somewhere else, you already used a Private Key or Mnemonic to import. Simply write either one down in a secure place, and you will always be able to use it to get back access to your account, in imToken or other wallets. If you, however, use the BCH wallet that came with your imToken wallet, you can simply back up your Mnemonic phrase attached to your imToken wallet. This one Mnemonic will be able to restore all your accounts that you set up in imToken (excluding the above mentioned imported accounts). If you run into any trouble, feel free to contact our support at: [email protected] About imToken imToken is a feature-rich digital wallet to securely manage ETH, BTC, ATOM, EOS, TRX, CKB, BCH, LTC , and other digital assets. It enables decentralized value exchange and DApp browsing in one place.
2020-02-29
.crypto domains now on imToken

.crypto domains now on imToken

Unstoppable Domains are now on imToken Buy, send & receive funds to any .crypto and .zil domain What is .crypto? .crypto is a new kind of domain. A domain, which unstoppably links to your Ethereum and Zilliqa accounts. Generally, a domain defines the owner of a web address (.com, .org, .gov, .net, etc.). Unlike regular domains, blockchain domains store the records on the blockchain and their main purpose is to: Simplify crypto payments, and Build uncensorable websites How does that help me? The current internet is full of gatekeepers who control our behavior, and who lock us in and out of our digital lives: The big companies hold your money, email and web addresses. Now, .crypto was built to give freedom back to you, the users. Owning a .crypto domain, you can decide what to publish and what transactions you engage in on the internet. No company or 3rd party, including Unstoppable Domains, can take away your domain. With the latest update, Unstoppable Domains’ .crypto domains are finally available on imToken. Open imToken to send a transaction or get your own domain in the imToken DApp Browser or on Unstoppable Domains’ website. Who is Unstoppable Domains? Unstoppable Domains is a San Francisco-based company building domains on blockchains. The company is backed by Draper Associates and Boost VC and has received grants from the Ethereum Foundation and the Zilliqa Foundation. How to buy a .crypto domain Follow the step-by-step tutorial below and open your imToken do get .crypto Step 1: Install the imToken wallet on your mobile, set up and link the wallet to your Unstoppable account. To do so follow this guide. Step 2: Open the imToken Wallet application. Navigate to Unstoppable Domains and log in through the Dapp browser. Note that Google Authentication won’t work and you will have to manually log in by typing your email and password. Step 3: Go to ‘My Domains’ Step 4: Select your domain and click on ‘Claim .crypto’. This account only has 1 domain but feel free to select as many as you like. Step 5 : Press ‘Connect’ Step 6: Press on the checkbox ‘I understand’ and click on ‘Confirm’. Step 7: Press on ‘View domains’ and you wait for the claiming process to finish. Step 8: The claim process can take up to 15 minutes to complete depending on the backlog. You will know the claiming is complete when you are allowed to manage the domain. Step 9 : Add cryptocurrency addresses to your domain by going to ‘My Domains’ and clicking on ‘Manage’. Step 10: Copy and paste your cryptocurrency addresses in the respective fields. Step 11 : Press ‘ Save changes’. Step 12 : Press ‘Connect wallet’. Step 13: Confirm the transaction by selecting ‘Authorize Signature’. Step 14: Confirm by entering your password. This alert box will pop up three times. Step 15: Confirm that your addresses are added after the transaction is completed by going to ‘My Domains’ and pressing on the ‘down arrow’.  
2020-01-15
imToken in 2020: 2019 Statistics and Update

imToken in 2020: 2019 Statistics and Update

Insights from 2019 Small App, Big Data 2019 was an inspiring year for us. Our fans stay with us during the growth of the digital asset field as well as crypto bear markets. As pioneers, we are looking forward to a bright new year and would like to share some major checkpoints we crossed throughout the year 2019: Over 9,750,000 devices Cumulative transfers reach 40,797,647 Total value of transfer exceeds $80 billion, which is approximately equal to 1/3 of Singapore's GDP Total value of the coins & tokens at $1.75 billion managed, which is approximately equal to 37 tons of Gold NPS 77.56% Interesting Insights By comparing the value of stablecoin transfers within imToken, the current top 7 are: USDT; PAX; TUSD; USDC; DAI & SAI; USDx; GUSD Top 5 most popular DeFi DApps among imToken users are:imBTC, KyberSwap; Oasis; PoolTogether; Compound This year, we received 36,690 support tickets, and we found that users most frequently ask about: What if I forgot my password? What if imToken can't receive my assets? How do I import a wallet? … if you have more, please check out https://support.token.im or send a message to [email protected] Now, more latest updates Added Support for TRON, NERVOS, BCH, LTC to imToken imToken 2.5.0 supports TRON, NERVOS, BCH, LTC, plus with ETH, BTC, COSMOS, EOS, which are already supported. Now, imToken supports a total of eight blockchains! At the same time, with the release of TokenCoreX, we will continue to accelerate on the road of multi-chain support. Then you can use imToken to complete one-stop asset management. Read more on our blog. Supporting multi-chain domain resolution: .eth and .crypto Just remember a domain name and receive multi-chain assets. If you want to experience such advanced features, ENS and Unstoppable domains are your best choices. Not only is it easy to transfer tokens, blockchain domains will also have more practical uses in the future. Register an exclusive domain name for yourself! Our favorite DApps & news since last community update Knight Story, a game by the makers of EOS Knights, who have been topping DApp charts for over a year. Open their app to play and connect your imToken wallet to store game items on the Ethereum blockchain. MakerDAO had updated their stablecoin from DAI to MCD, a new form with multiple collateral. Read more on our blog. Ethereum upgraded during two updates, one at the end of 2019 and one in early 2020. Read more about those and how we supported it here. 2020 The blockchain is happening, and you must be a solid supporter in this trend if you reading this. We are truly looking forward to having you with us on this journey through the blockchain world.
2020-03-07
imToken 2.5.0 now with NERVOS, TRON, BCH, LTC support

imToken 2.5.0 now with NERVOS, TRON, BCH, LTC support

New chains and new Core in imToken 2.5.0: imToken now supports NERVOS, TRON, BCH, and LTC. Introducing TokenCoreX - New wallet core implementation in Rust Optimized DApp browser Newly added public chains: NERVOS, TRON, BCH, and LTC With the official release of imToken 2.5.0, we are very happy to share with you:  imToken is officially supporting NERVOS, TRON, BCH, LTC, becoming a multi-chain asset management platform with support of 8 major public blockchains. How to create NERVOS, TRON, BCH, LTC wallets? Go to "My Profile" and click "Manage Your Wallet", select "Add Wallet", select the currency you want to add under the identity wallet, enter the wallet password and click confirm. How to import NERVOS, TRON, BCH, LTC wallet ? Similarly, click "Manage Your Wallet", select "Add Wallet" in the bottom right corner, select the wallet you want to import, and use your Mnemonics to import your account. Integrate your blockchain into imToken with the open source wallet core component in Rust - TokenCoreX With imToken 2.5.0, TokenCoreX powers the four newly added public chains. In simple terms TokenCore 2.5 greatly improves the reliability, security, and scalability of the native system by optimizing the underlying core code. With the protection of the underlying technology, we have reasons to believe that in the future, imToken the multi-chain and fine-flow will greatly improve. In the spirit of open technology, TokenCoreX is soon to be completed open sourced for the community it was built for. At the same time, we launch developer-friendly product documentation for public chain developers to be able to easily integrate blockchains into imToken. The fastest way to communicate with imToken technology. Specific enhancements include: Built in one unified development language (Rust) to reduce the development cost of two platforms and multiple languages, for a one-time development; Making wallet management available not only on mobile devices, but other hardware (imKey, Ledger) and servers and web wallets; As Rust is widely used in the blockchain field, it will be easier to access the public chain in the future, meaning imToken will able to em Portal: TokenCoreX source code Optimized new DApp Browser imToken version 2.5.0 supports ETH, EOS, TRON DApps. At the same time, the optimized DApp browser can better meet your personalized needs. Open the "Browse" page and feel the charm of the decentralized world: Search: Enter the URL in the search box to access any DApp. "Hot Search" helps you to catch the recently popular; My Favorites: One-click favorite your DApp, easy to use without searching; Recently used: Display the recently used DApp   Surprise Forecast For 2.5 imToken will launch a week-long surprise event on January 7: One iPhone 11 will be given out a day, and Apple Family Bucket is waiting for you to take home, come to upgrade and participate. How to update to the latest imToken 2.0 Android users: You can download updates on the imToken website: https://token.im iOS users: App store is under review, thank you for your patience :) For 1.0 users, please follow the tutorial below to upgrade 1.0 to 2.0 safely: https://support.token.im/hc/en-us/articles/360013262654 https://medium.com/imtoken/tutorial-step-by-step-guide-for-upgrading-to-imtoken-2-0-dbe3b392242 If you face any difficulty using imToken or have any comments and suggestions for us, please submit your feedback directly within the app. Always backup your keys! Before upgrading, please make sure that all wallet identities have been backed up properly. Please write down the Mnemonic phrase on a physical paper, never store it in the network; Please restrain from sharing your private key, Mnemonic phrase or Keystore to anyone! If you find potential hacking activities in imToken, please report to us via email at [email protected] to prevent more people from being deceived; Please have a look at our Help Center at https://support.token.im/hc/en-us for more detailed information about imToken.  
2020-03-28
Tokenlon - Technical Deep Dive

Tokenlon - Technical Deep Dive

Tokenlon just launched. Now, here is a technical post on how Tokenlon works under the hood. Try on tokenlon.im/instant. Tokenlon decentralized exchange based on 0x protocol sets new standards, designed to give you a final price before you trade. 🐉 In short, Tokenlon is built to be: Fast to trade: As off-chain quotations present final prices Easy to use: As the user sees what he gets, using one-click interface Affordable: As ERC20 tokens are sent out via gasless transactions More secure: No deposit/withdrawal necessary as tokens go wallet-to-wallet via trustless swap Challenges with current DEXs There’s a couple of different DEX models. The biggest one, IDEX, asks the user to deposit tokens into their accounts, which takes time and involves cost.  Uniswap - which recently has been growing in popularity - offers prices completely based on on-chain logic. A model that is susceptible to front-running. Kyber Network - the other big DEX - is largely using market makers that provide periodic price updates, but only a final price after a user’s commitment to a trade.  Any user of either Uniswap and Kyber does not know the final price one gets from a trade before committing to the trade. With Tokenlon, on the other hand, Tokenlon aim to solve all 3 of those issues. Let’s dive into the how below. How does Tokenlon work? A token swap on Tokenlon Let’s walk through one trade on the new Tokenlon. Receive real price updates As soon as you enter a trading pair and amount, market makers compete on providing you with the best price - updated every 4 seconds. If you are selling an ERC20 token, you are asked to set allowance for the specific token the time you trade it. Trade with price-security Clicking on ‘trade’ then triggers the market maker signing an order with the tokens already held in reserve. Tokenlon then forwards your signed order to the 0x contract. With the transaction mined on the Ethereum blockchain, your tokens are available in your wallet. The whole process takes ~15 second, one block. As soon as you click the trade button, you can be very certain of that trade being settled on-chain. Why? Tokenlon’s architecture eliminates front-running.  Say goodbye to front-running As mentioned above, other exchanges such as Uniswap are prone to frontrunning in a way that — especially for large trades — give you a big slippage or failed trades. Trading on Tokenlon, however, prevents those outcomes. How? First, no other trader is able to accept your order, as the order itself specifies the taker as a transactionHash.The Tokenlon Exchange contract will then verify you as the taker of this specific offer, preventing other blockchain users (including Tokenlon users) from frontrunning the trade. The TokenlonExchange contract calls the 0x contract for settlement, with the specified UserProxy contract as the taker.  Therefore, miners are also not able to front run a trade. Therefore, as soon as you click the trade button, you are very certain that the trade will be executed. Trading doesn’t fail. Trusted on-chain settlement & free transactions Furthermore, even if trades would fail you wouldn’t lose your tokens as can happen when you deposit tokens on an exchange - no matter if centralized or decentralized.Since 0x contract offers trustless on-chain settlement, your trade will be finalized with either both tokens having changed their owner or nothing happening at all. You won’t lose your token in the swap process. Last, Tokenlon offers gasless transactions. Tokenlon incentivises the end users by broadcasting their orders (except ETH sell orders) for them, offering gas free transactions. If you would like to try Tokenlon, check it out in imToken or at tokenlon.im/instant 
2020-01-08

Load more