Found 1,264 repositories(showing 30)
MrGiovanni
[MICCAI 2019 Young Scientist Award] [MEDIA 2020 Best Paper Award] Models Genesis, one of the first "foundation" models in medical image analysis for multiple downstream tasks
cjdsie
Wirefy is a browser based responsive wireframe tool, which allows you to create functional wireframes using standard elements. Think of it as the foundation for your content to be built on. This allows you to focus on the content rather than the design to get faster sign off. Wirefy is not a one-solution answer.
Q-Future
③[ICML2024] [IQA, IAA, VQA] All-in-one Foundation Model for visual scoring. Can efficiently fine-tune to downstream datasets.
abusufyanvu
MIT Introduction to Deep Learning (6.S191) Instructors: Alexander Amini and Ava Soleimany Course Information Summary Prerequisites Schedule Lectures Labs, Final Projects, Grading, and Prizes Software labs Gather.Town lab + Office Hour sessions Final project Paper Review Project Proposal Presentation Project Proposal Grading Rubric Past Project Proposal Ideas Awards + Categories Important Links and Emails Course Information Summary MIT's introductory course on deep learning methods with applications to computer vision, natural language processing, biology, and more! Students will gain foundational knowledge of deep learning algorithms and get practical experience in building neural networks in TensorFlow. Course concludes with a project proposal competition with feedback from staff and a panel of industry sponsors. Prerequisites We expect basic knowledge of calculus (e.g., taking derivatives), linear algebra (e.g., matrix multiplication), and probability (e.g., Bayes theorem) -- we'll try to explain everything else along the way! Experience in Python is helpful but not necessary. This class is taught during MIT's IAP term by current MIT PhD researchers. Listeners are welcome! Schedule Monday Jan 18, 2021 Lecture: Introduction to Deep Learning and NNs Lab: Lab 1A Tensorflow and building NNs from scratch Tuesday Jan 19, 2021 Lecture: Deep Sequence Modelling Lab: Lab 1B Music Generation using RNNs Wednesday Jan 20, 2021 Lecture: Deep Computer Vision Lab: Lab 2A Image classification and detection Thursday Jan 21, 2021 Lecture: Deep Generative Modelling Lab: Lab 2B Debiasing facial recognition systems Friday Jan 22, 2021 Lecture: Deep Reinforcement Learning Lab: Lab 3 pixel-to-control planning Monday Jan 25, 2021 Lecture: Limitations and New Frontiers Lab: Lab 3 continued Tuesday Jan 26, 2021 Lecture (part 1): Evidential Deep Learning Lecture (part 2): Bias and Fairness Lab: Work on final assignments Lab competition entries due at 11:59pm ET on Canvas! Lab 1, Lab 2, and Lab 3 Wednesday Jan 27, 2021 Lecture (part 1): Nigel Duffy, Ernst & Young Lecture (part 2): Kate Saenko, Boston University and MIT-IBM Watson AI Lab Lab: Work on final assignments Assignments due: Sign up for Final Project Competition Thursday Jan 28, 2021 Lecture (part 1): Sanja Fidler, U. Toronto, Vector Institute, and NVIDIA Lecture (part 2): Katherine Chou, Google Lab: Work on final assignments Assignments due: 1 page paper review (if applicable) Friday Jan 29, 2021 Lecture: Student project pitch competition Lab: Awards ceremony and prize giveaway Assignments due: Project proposals (if applicable) Lectures Lectures will be held starting at 1:00pm ET from Jan 18 - Jan 29 2021, Monday through Friday, virtually through Zoom. Current MIT students, faculty, postdocs, researchers, staff, etc. will be able to access the lectures during this two week period, synchronously or asynchronously, via the MIT Canvas course webpage (MIT internal only). Lecture recordings will be uploaded to the Canvas as soon as possible; students are not required to attend any lectures synchronously. Please see the Canvas for details on Zoom links. The public edition of the course will only be made available after completion of the MIT course. Labs, Final Projects, Grading, and Prizes Course will be graded during MIT IAP for 6 units under P/D/F grading. Receiving a passing grade requires completion of each software lab project (through honor code, with submission required to enter lab competitions), a final project proposal/presentation or written review of a deep learning paper (submission required), and attendance/lecture viewing (through honor code). Submission of a written report or presentation of a project proposal will ensure a passing grade. MIT students will be eligible for prizes and awards as part of the class competitions. There will be two parts to the competitions: (1) software labs and (2) final projects. More information is provided below. Winners will be announced on the last day of class, with thousands of dollars of prizes being given away! Software labs There are three TensorFlow software lab exercises for the course, designed as iPython notebooks hosted in Google Colab. Software labs can be found on GitHub: https://github.com/aamini/introtodeeplearning. These are self-paced exercises and are designed to help you gain practical experience implementing neural networks in TensorFlow. For registered MIT students, submission of lab materials is not necessary to get credit for the course or to pass the course. At the end of each software lab there will be task-associated materials to submit (along with instructions) for entry into the competitions, open to MIT students and affiliates during the IAP offering. This includes MIT students/affiliates who are taking the class as listeners -- you are eligible! These instructions are provided at the end of each of the labs. Completing these tasks and submitting your materials to Canvas will enter you into a per-lab competition. MIT students and affiliates will be eligible for prizes during the IAP offering; at the end of the course, prize-winners will be awarded with their prizes. All competition submissions are due on January 26 at 11:59pm ET to Canvas. For the software lab competitions, submissions will be judged on the basis of the following criteria: Strength and quality of final results (lab dependent) Soundness of implementation and approach Thoroughness and quality of provided descriptions and figures Gather.Town lab + Office Hour sessions After each day’s lecture, there will be open Office Hours in the class GatherTown, up until 3pm ET. An MIT email is required to log in and join the GatherTown. During these sessions, there will not be a walk through or dictation of the labs; the labs are designed to be self-paced and to be worked on on your own time. The GatherTown sessions will be hosted by course staff and are held so you can: Ask questions on course lectures, labs, logistics, project, or anything else; Work on the labs in the presence of classmates/TAs/instructors; Meet classmates to find groups for the final project; Group work time for the final project; Bring the class community together. Final project To satisfy the final project requirement for this course, students will have two options: (1) write a 1 page paper review (single-spaced) on a recent deep learning paper of your choice or (2) participate and present in the project proposal pitch competition. The 1 page paper review option is straightforward, we propose some papers within this document to help you get started, and you can satisfy a passing grade with this option -- you will not be eligible for the grand prizes. On the other hand, participation in the project proposal pitch competition will equivalently satisfy your course requirements but additionally make you eligible for the grand prizes. See the section below for more details and requirements for each of these options. Paper Review Students may satisfy the final project requirement by reading and reviewing a recent deep learning paper of their choosing. In the written review, students should provide both: 1) a description of the problem, technical approach, and results of the paper; 2) critical analysis and exposition of the limitations of the work and opportunities for future work. Reviews should be submitted on Canvas by Thursday Jan 28, 2021, 11:59:59pm Eastern Time (ET). Just a few paper options to consider... https://papers.nips.cc/paper/2017/file/3f5ee243547dee91fbd053c1c4a845aa-Paper.pdf https://papers.nips.cc/paper/2018/file/69386f6bb1dfed68692a24c8686939b9-Paper.pdf https://papers.nips.cc/paper/2020/file/1457c0d6bfcb4967418bfb8ac142f64a-Paper.pdf https://science.sciencemag.org/content/362/6419/1140 https://papers.nips.cc/paper/2018/file/0e64a7b00c83e3d22ce6b3acf2c582b6-Paper.pdf https://arxiv.org/pdf/1906.11829.pdf https://www.nature.com/articles/s42256-020-00237-3 https://pubmed.ncbi.nlm.nih.gov/32084340/ Project Proposal Presentation Keyword: proposal This is a 2 week course so we do not require results or working implementations! However, to win the top prizes, nice, clear results and implementations will demonstrate feasibility of your proposal which is something we look for! Logistics -- please read! You must sign up to present before 11:59:59pm Eastern Time (ET) on Wednesday Jan 27, 2021 Slides must be in a Google Slide before 11:59:59pm Eastern Time (ET) on Thursday Jan 28, 2021 Project groups can be between 1 and 5 people Listeners welcome To be eligible for a prize you must have at least 1 registered MIT student in your group Each participant will only be allowed to be in one group and present one project pitch Synchronous attendance on 1/29/21 is required to make the project pitch! 3 min presentation on your idea (we will be very strict with the time limits) Prizes! (see below) Sign up to Present here: by 11:59pm ET on Wednesday Jan 27 Once you sign up, make your slide in the following Google Slides; submit by midnight on Thursday Jan 28. Please specify the project group # on your slides!!! Things to Consider This doesn’t have to be a new deep learning method. It can just be an interesting application that you apply some existing deep learning method to. What problem are you solving? Are there use cases/applications? Why do you think deep learning methods might be suited to this task? How have people done it before? Is it a new task? If so, what are similar tasks that people have worked on? In what aspects have they succeeded or failed? What is your method of solving this problem? What type of model + architecture would you use? Why? What is the data for this task? Do you need to make a dataset or is there one publicly available? What are the characteristics of the data? Is it sparse, messy, imbalanced? How would you deal with that? Project Proposal Grading Rubric Project proposals will be evaluated by a panel of judges on the basis of the following three criteria: 1) novelty and impact; 2) technical soundness, feasibility, and organization, including quality of any presented results; 3) clarity and presentation. Each judge will award a score from 1 (lowest) to 5 (highest) for each of the criteria; the average score from each judge across these criteria will then be averaged with that of the other judges to provide the final score. The proposals with the highest final scores will be selected for prizes. Here are the guidelines for the criteria: Novelty and impact: encompasses the potential impact of the project idea, its novelty with respect to existing approaches. Why does the proposed work matter? What problem(s) does it solve? Why are these problems important? Technical soundness, feasibility, and organization: encompasses all technical aspects of the proposal. Do the proposed methodology and architecture make sense? Is the architecture the best suited for the proposed problem? Is deep learning the best approach for the problem? How realistic is it to implement the idea? Was there any implementation of the method? If results and data are presented, we will evaluate the strength of the results/data. Clarity and presentation: encompasses the delivery and quality of the presentation itself. Is the talk well organized? Are the slides aesthetically compelling? Is there a clear, well-delivered narrative? Are the problem and proposed method clearly presented? Past Project Proposal Ideas Recipe Generation with RNNs Can we compress videos with CNN + RNN? Music Generation with RNNs Style Transfer Applied to X GAN’s on a new modality Summarizing text/news articles Combining news articles about similar events Code or spec generation Multimodal speech → handwriting Generate handwriting based on keywords (i.e. cursive, slanted, neat) Predicting stock market trends Show language learners articles or videos at their level Transfer of writing style Chemical Synthesis with Recurrent Neural networks Transfer learning to learn something in a domain for which it’s hard or risky to gather data or do training RNNs to model some type of time series data Computer vision to coach sports players Computer vision system for safety brakes or warnings Use IBM Watson API to get the sentiment of your Facebook newsfeed Deep learning webcam to give wifi-access to friends or improve video chat in some way Domain-specific chatbot to help you perform a specific task Detect whether a signature is fraudulent Awards + Categories Final Project Awards: 1x NVIDIA RTX 3080 4x Google Home Max 3x Display Monitors Software Lab Awards: Bose headphones (Lab 1) Display monitor (Lab 2) Bebop drone (Lab 3) Important Links and Emails Course website: http://introtodeeplearning.com Course staff: introtodeeplearning-staff@mit.edu Piazza forum (MIT only): https://piazza.com/mit/spring2021/6s191 Canvas (MIT only): https://canvas.mit.edu/courses/8291 Software lab repository: https://github.com/aamini/introtodeeplearning Lab/office hour sessions (MIT only): https://gather.town/app/56toTnlBrsKCyFgj/MITDeepLearning
Aastha2104
Introduction Parkinson’s Disease is the second most prevalent neurodegenerative disorder after Alzheimer’s, affecting more than 10 million people worldwide. Parkinson’s is characterized primarily by the deterioration of motor and cognitive ability. There is no single test which can be administered for diagnosis. Instead, doctors must perform a careful clinical analysis of the patient’s medical history. Unfortunately, this method of diagnosis is highly inaccurate. A study from the National Institute of Neurological Disorders finds that early diagnosis (having symptoms for 5 years or less) is only 53% accurate. This is not much better than random guessing, but an early diagnosis is critical to effective treatment. Because of these difficulties, I investigate a machine learning approach to accurately diagnose Parkinson’s, using a dataset of various speech features (a non-invasive yet characteristic tool) from the University of Oxford. Why speech features? Speech is very predictive and characteristic of Parkinson’s disease; almost every Parkinson’s patient experiences severe vocal degradation (inability to produce sustained phonations, tremor, hoarseness), so it makes sense to use voice to diagnose the disease. Voice analysis gives the added benefit of being non-invasive, inexpensive, and very easy to extract clinically. Background Parkinson's Disease Parkinson’s is a progressive neurodegenerative condition resulting from the death of the dopamine containing cells of the substantia nigra (which plays an important role in movement). Symptoms include: “frozen” facial features, bradykinesia (slowness of movement), akinesia (impairment of voluntary movement), tremor, and voice impairment. Typically, by the time the disease is diagnosed, 60% of nigrostriatal neurons have degenerated, and 80% of striatal dopamine have been depleted. Performance Metrics TP = true positive, FP = false positive, TN = true negative, FN = false negative Accuracy: (TP+TN)/(P+N) Matthews Correlation Coefficient: 1=perfect, 0=random, -1=completely inaccurate Algorithms Employed Logistic Regression (LR): Uses the sigmoid logistic equation with weights (coefficient values) and biases (constants) to model the probability of a certain class for binary classification. An output of 1 represents one class, and an output of 0 represents the other. Training the model will learn the optimal weights and biases. Linear Discriminant Analysis (LDA): Assumes that the data is Gaussian and each feature has the same variance. LDA estimates the mean and variance for each class from the training data, and then uses properties of statistics (Bayes theorem , Gaussian distribution, etc) to compute the probability of a particular instance belonging to a given class. The class with the largest probability is the prediction. k Nearest Neighbors (KNN): Makes predictions about the validation set using the entire training set. KNN makes a prediction about a new instance by searching through the entire set to find the k “closest” instances. “Closeness” is determined using a proximity measurement (Euclidean) across all features. The class that the majority of the k closest instances belong to is the class that the model predicts the new instance to be. Decision Tree (DT): Represented by a binary tree, where each root node represents an input variable and a split point, and each leaf node contains an output used to make a prediction. Neural Network (NN): Models the way the human brain makes decisions. Each neuron takes in 1+ inputs, and then uses an activation function to process the input with weights and biases to produce an output. Neurons can be arranged into layers, and multiple layers can form a network to model complex decisions. Training the network involves using the training instances to optimize the weights and biases. Naive Bayes (NB): Simplifies the calculation of probabilities by assuming that all features are independent of one another (a strong but effective assumption). Employs Bayes Theorem to calculate the probabilities that the instance to be predicted is in each class, then finds the class with the highest probability. Gradient Boost (GB): Generally used when seeking a model with very high predictive performance. Used to reduce bias and variance (“error”) by combining multiple “weak learners” (not very good models) to create a “strong learner” (high performance model). Involves 3 elements: a loss function (error function) to be optimized, a weak learner (decision tree) to make predictions, and an additive model to add trees to minimize the loss function. Gradient descent is used to minimize error after adding each tree (one by one). Engineering Goal Produce a machine learning model to diagnose Parkinson’s disease given various features of a patient’s speech with at least 90% accuracy and/or a Matthews Correlation Coefficient of at least 0.9. Compare various algorithms and parameters to determine the best model for predicting Parkinson’s. Dataset Description Source: the University of Oxford 195 instances (147 subjects with Parkinson’s, 48 without Parkinson’s) 22 features (elements that are possibly characteristic of Parkinson’s, such as frequency, pitch, amplitude / period of the sound wave) 1 label (1 for Parkinson’s, 0 for no Parkinson’s) Project Pipeline pipeline Summary of Procedure Split the Oxford Parkinson’s Dataset into two parts: one for training, one for validation (evaluate how well the model performs) Train each of the following algorithms with the training set: Logistic Regression, Linear Discriminant Analysis, k Nearest Neighbors, Decision Tree, Neural Network, Naive Bayes, Gradient Boost Evaluate results using the validation set Repeat for the following training set to validation set splits: 80% training / 20% validation, 75% / 25%, and 70% / 30% Repeat for a rescaled version of the dataset (scale all the numbers in the dataset to a range from 0 to 1: this helps to reduce the effect of outliers) Conduct 5 trials and average the results Data a_o a_r m_o m_r Data Analysis In general, the models tended to perform the best (both in terms of accuracy and Matthews Correlation Coefficient) on the rescaled dataset with a 75-25 train-test split. The two highest performing algorithms, k Nearest Neighbors and the Neural Network, both achieved an accuracy of 98%. The NN achieved a MCC of 0.96, while KNN achieved a MCC of 0.94. These figures outperform most existing literature and significantly outperform current methods of diagnosis. Conclusion and Significance These robust results suggest that a machine learning approach can indeed be implemented to significantly improve diagnosis methods of Parkinson’s disease. Given the necessity of early diagnosis for effective treatment, my machine learning models provide a very promising alternative to the current, rather ineffective method of diagnosis. Current methods of early diagnosis are only 53% accurate, while my machine learning model produces 98% accuracy. This 45% increase is critical because an accurate, early diagnosis is needed to effectively treat the disease. Typically, by the time the disease is diagnosed, 60% of nigrostriatal neurons have degenerated, and 80% of striatal dopamine have been depleted. With an earlier diagnosis, much of this degradation could have been slowed or treated. My results are very significant because Parkinson’s affects over 10 million people worldwide who could benefit greatly from an early, accurate diagnosis. Not only is my machine learning approach more accurate in terms of diagnostic accuracy, it is also more scalable, less expensive, and therefore more accessible to people who might not have access to established medical facilities and professionals. The diagnosis is also much simpler, requiring only a 10-15 second voice recording and producing an immediate diagnosis. Future Research Given more time and resources, I would investigate the following: Create a mobile application which would allow the user to record his/her voice, extract the necessary vocal features, and feed it into my machine learning model to diagnose Parkinson’s. Use larger datasets in conjunction with the University of Oxford dataset. Tune and improve my models even further to achieve even better results. Investigate different structures and types of neural networks. Construct a novel algorithm specifically suited for the prediction of Parkinson’s. Generalize my findings and algorithms for all types of dementia disorders, such as Alzheimer’s. References Bind, Shubham. "A Survey of Machine Learning Based Approaches for Parkinson Disease Prediction." International Journal of Computer Science and Information Technologies 6 (2015): n. pag. International Journal of Computer Science and Information Technologies. 2015. Web. 8 Mar. 2017. Brooks, Megan. "Diagnosing Parkinson's Disease Still Challenging." Medscape Medical News. National Institute of Neurological Disorders, 31 July 2014. Web. 20 Mar. 2017. Exploiting Nonlinear Recurrence and Fractal Scaling Properties for Voice Disorder Detection', Little MA, McSharry PE, Roberts SJ, Costello DAE, Moroz IM. BioMedical Engineering OnLine 2007, 6:23 (26 June 2007) Hashmi, Sumaiya F. "A Machine Learning Approach to Diagnosis of Parkinson’s Disease."Claremont Colleges Scholarship. Claremont College, 2013. Web. 10 Mar. 2017. Karplus, Abraham. "Machine Learning Algorithms for Cancer Diagnosis." Machine Learning Algorithms for Cancer Diagnosis (n.d.): n. pag. Mar. 2012. Web. 20 Mar. 2017. Little, Max. "Parkinsons Data Set." UCI Machine Learning Repository. University of Oxford, 26 June 2008. Web. 20 Feb. 2017. Ozcift, Akin, and Arif Gulten. "Classifier Ensemble Construction with Rotation Forest to Improve Medical Diagnosis Performance of Machine Learning Algorithms." Computer Methods and Programs in Biomedicine 104.3 (2011): 443-51. Semantic Scholar. 2011. Web. 15 Mar. 2017. "Parkinson’s Disease Dementia." UCI MIND. N.p., 19 Oct. 2015. Web. 17 Feb. 2017. Salvatore, C., A. Cerasa, I. Castiglioni, F. Gallivanone, A. Augimeri, M. Lopez, G. Arabia, M. Morelli, M.c. Gilardi, and A. Quattrone. "Machine Learning on Brain MRI Data for Differential Diagnosis of Parkinson's Disease and Progressive Supranuclear Palsy."Journal of Neuroscience Methods 222 (2014): 230-37. 2014. Web. 18 Mar. 2017. Shahbakhi, Mohammad, Danial Taheri Far, and Ehsan Tahami. "Speech Analysis for Diagnosis of Parkinson’s Disease Using Genetic Algorithm and Support Vector Machine."Journal of Biomedical Science and Engineering 07.04 (2014): 147-56. Scientific Research. July 2014. Web. 2 Mar. 2017. "Speech and Communication." Speech and Communication. Parkinson's Disease Foundation, n.d. Web. 22 Mar. 2017. Sriram, Tarigoppula V. S., M. Venkateswara Rao, G. V. Satya Narayana, and D. S. V. G. K. Kaladhar. "Diagnosis of Parkinson Disease Using Machine Learning and Data Mining Systems from Voice Dataset." SpringerLink. Springer, Cham, 01 Jan. 1970. Web. 17 Mar. 2017.
jettbrains
W3C Strategic Highlights September 2019 This report was prepared for the September 2019 W3C Advisory Committee Meeting (W3C Member link). See the accompanying W3C Fact Sheet — September 2019. For the previous edition, see the April 2019 W3C Strategic Highlights. For future editions of this report, please consult the latest version. A Chinese translation is available. ☰ Contents Introduction Future Web Standards Meeting Industry Needs Web Payments Digital Publishing Media and Entertainment Web & Telecommunications Real-Time Communications (WebRTC) Web & Networks Automotive Web of Things Strengthening the Core of the Web HTML CSS Fonts SVG Audio Performance Web Performance WebAssembly Testing Browser Testing and Tools WebPlatform Tests Web of Data Web for All Security, Privacy, Identity Internationalization (i18n) Web Accessibility Outreach to the world W3C Developer Relations W3C Training Translations W3C Liaisons Introduction This report highlights recent work of enhancement of the existing landscape of the Web platform and innovation for the growth and strength of the Web. 33 working groups and a dozen interest groups enable W3C to pursue its mission through the creation of Web standards, guidelines, and supporting materials. We track the tremendous work done across the Consortium through homogeneous work-spaces in Github which enables better monitoring and management. We are in the middle of a period where we are chartering numerous working groups which demonstrate the rapid degree of change for the Web platform: After 4 years, we are nearly ready to publish a Payment Request API Proposed Recommendation and we need to soon charter follow-on work. In the last year we chartered the Web Payment Security Interest Group. In the last year we chartered the Web Media Working Group with 7 specifications for next generation Media support on the Web. We have Accessibility Guidelines under W3C Member review which includes Silver, a new approach. We have just launched the Decentralized Identifier Working Group which has tremendous potential because Decentralized Identifier (DID) is an identifier that is globally unique, resolveable with high availability, and cryptographically verifiable. We have Privacy IG (PING) under W3C Member review which strengthens our focus on the tradeoff between privacy and function. We have a new CSS charter under W3C Member review which maps the group's work for the next three years. In this period, W3C and the WHATWG have succesfully completed the negotiation of a Memorandum of Understanding rooted in the mutual belief that that having two distinct specifications claiming to be normative is generally harmful for the Web community. The MOU, signed last May, describes how the two organizations are to collaborate on the development of a single authoritative version of the HTML and DOM specifications. W3C subsequently rechartered the HTML Working Group to assist the W3C community in raising issues and proposing solutions for the HTML and DOM specifications, and for the production of W3C Recommendations from WHATWG Review Drafts. As the Web evolves continuously, some groups are looking for ways for specifications to do so as well. So-called "evergreen recommendations" or "living standards" aim to track continuous development (and maintenance) of features, on a feature-by-feature basis, while getting review and patent commitments. We see the maturation and further development of an incredible number of new technologies coming to the Web. Continued progress in many areas demonstrates the vitality of the W3C and the Web community, as the rest of the report illustrates. Future Web Standards W3C has a variety of mechanisms for listening to what the community thinks could become good future Web standards. These include discussions with the Membership, discussions with other standards bodies, the activities of thousands of participants in over 300 community groups, and W3C Workshops. There are lots of good ideas. The W3C strategy team has been identifying promising topics and invites public participation. Future, recent and under consideration Workshops include: Inclusive XR (5-6 November 2019, Seattle, WA, USA) to explore existing and future approaches on making Virtual and Augmented Reality experiences more inclusive, including to people with disabilities; W3C Workshop on Data Models for Transportation (12-13 September 2019, Palo Alto, CA, USA) W3C Workshop on Web Games (27-28 June 2019, Redmond, WA, USA), view report Second W3C Workshop on the Web of Things (3-5 June 2019, Munich, Germany) W3C Workshop on Web Standardization for Graph Data; Creating Bridges: RDF, Property Graph and SQL (4-6 March 2019, Berlin, Germany), view report Web & Machine Learning. The Strategy Funnel documents the staff's exploration of potential new work at various phases: Exploration and Investigation, Incubation and Evaluation, and eventually to the chartering of a new standards group. The Funnel view is a GitHub Project where new area are issues represented by “cards” which move through the columns, usually from left to right. Most cards start in Exploration and move towards Chartering, or move out of the funnel. Public input is welcome at any stage but particularly once Incubation has begun. This helps W3C identify work that is sufficiently incubated to warrant standardization, to review the ecosystem around the work and indicate interest in participating in its standardization, and then to draft a charter that reflects an appropriate scope. Ongoing feedback can speed up the overall standardization process. Since the previous highlights document, W3C has chartered a number of groups, and started discussion on many more: Newly Chartered or Rechartered Web Application Security WG (03-Apr) Web Payment Security IG (17-Apr) Patent and Standards IG (24-Apr) Web Applications WG (14-May) Web & Networks IG (16-May) Media WG (23-May) Media and Entertainment IG (06-Jun) HTML WG (06-Jun) Decentralized Identifier WG (05-Sep) Extended Privacy IG (PING) (30-Sep) Verifiable Claims WG (30-Sep) Service Workers WG (31-Dec) Dataset Exchange WG (31-Dec) Web of Things Working Group (31-Dec) Web Audio Working Group (31-Dec) Proposed charters / Advance Notice Accessibility Guidelines WG Privacy IG (PING) RDF Literal Direction WG Timed Text WG CSS WG Web Authentication WG Closed Internationalization Tag Set IG Meeting Industry Needs Web Payments All Web Payments specifications W3C's payments standards enable a streamlined checkout experience, enabling a consistent user experience across the Web with lower front end development costs for merchants. Users can store and reuse information and more quickly and accurately complete online transactions. The Web Payments Working Group has republished Payment Request API as a Candidate Recommendation, aiming to publish a Proposed Recommendation in the Fall 2019, and is discussing use cases and features for Payment Request after publication of the 1.0 Recommendation. Browser vendors have been finalizing implementation of features added in the past year (view the implementation report). As work continues on the Payment Handler API and its implementation (currently in Chrome and Edge Canary), one focus in 2019 is to increase adoption in other browsers. Recently, Mastercard demonstrated the use of Payment Request API to carry out EMVCo's Secure Remote Commerce (SRC) protocol whose payment method definition is being developed with active participation by Visa, Mastercard, American Express, and Discover. Payment method availability is a key factor in merchant considerations about adopting Payment Request API. The ability to get uniform adoption of a new payment method such as Secure Remote Commerce (SRC) also depends on the availability of the Payment Handler API in browsers, or of proprietary alternatives. Web Monetization, which the Web Payments Working Group will discuss again at its face-to-face meeting in September, can be used to enable micropayments as an alternative revenue stream to advertising. Since the beginning of 2019, Amazon, Brave Software, JCB, Certus Cybersecurity Solutions and Netflix have joined the Web Payments Working Group. In April, W3C launched the Web Payment Security Group to enable W3C, EMVCo, and the FIDO Alliance to collaborate on a vision for Web payment security and interoperability. Participants will define areas of collaboration and identify gaps between existing technical specifications in order to increase compatibility among different technologies, such as: How do SRC, FIDO, and Payment Request relate? The Payment Services Directive 2 (PSD2) regulations in Europe are scheduled to take effect in September 2019. What is the role of EMVCo, W3C, and FIDO technologies, and what is the current state of readiness for the deadline? How can we improve privacy on the Web at the same time as we meet industry requirements regarding user identity? Digital Publishing All Digital Publishing specifications, Publication milestones The Web is the universal publishing platform. Publishing is increasingly impacted by the Web, and the Web increasingly impacts Publishing. Topic of particular interest to Publishing@W3C include typography and layout, accessibility, usability, portability, distribution, archiving, offline access, print on demand, and reliable cross referencing. And the diverse publishing community represented in the groups consist of the traditional "trade" publishers, ebook reading system manufacturers, but also publishers of audio book, scholarly journals or educational materials, library scientists or browser developers. The Publishing Working Group currently concentrates on Audiobooks which lack a comprehensive standard, thus incurring extra costs and time to publish in this booming market. Active development is ongoing on the future standard: Publication Manifest Audiobook profile for Web Publications Lightweight Packaging Format The BD Comics Manga Community Group, the Synchronized Multimedia for Publications Community Group, the Publishing Community Group and a future group on archival, are companions to the working group where specific work is developed and incubated. The Publishing Community Group is a recently launched incubation channel for Publishing@W3C. The goal of the group is to propose, document, and prototype features broadly related to: publications on the Web reading modes and systems and the user experience of publications The EPUB 3 Community Group has successfully completed the revision of EPUB 3.2. The Publishing Business Group fosters ongoing participation by members of the publishing industry and the overall ecosystem in the development of Web infrastructure to better support the needs of the industry. The Business Group serves as an additional conduit to the Publishing Working Group and several Community Groups for feedback between the publishing ecosystem and W3C. The Publishing BG has played a vital role in fostering and advancing the adoption and continued development of EPUB 3. In particular the BG provided critical support to the update of EPUBCheck to validate EPUB content to the new EPUB 3.2 specification. This resulted in the development, in conjunction with the EPUB3 Community Group, of a new generation of EPUBCheck, i.e., EPUBCheck 4.2 production-ready release. Media and Entertainment All Media specifications The Media and Entertainment vertical tracks media-related topics and features that create immersive experiences for end users. HTML5 brought standard audio and video elements to the Web. Standardization activities since then have aimed at turning the Web into a professional platform fully suitable for the delivery of media content and associated materials, enabling missing features to stream video content on the Web such as adaptive streaming and content protection. Together with Microsoft, Comcast, Netflix and Google, W3C received an Technology & Engineering Emmy Award in April 2019 for standardization of a full TV experience on the Web. Current goals are to: Reinforce core media technologies: Creation of the Media Working Group, to develop media-related specifications incubated in the WICG (e.g. Media Capabilities, Picture-in-picture, Media Session) and maintain maintain/evolve Media Source Extensions (MSE) and Encrypted Media Extensions (EME). Improve support for Media Timed Events: data cues incubation. Enhance color support (HDR, wide gamut), in scope of the CSS WG and in the Color on the Web CG. Reduce fragmentation: Continue annual releases of a common and testable baseline media devices, in scope of the Web Media APIs CG and in collaboration with the CTA WAVE Project. Maintain the Road-map of Media Technologies for the Web which highlights Web technologies that can be used to build media applications and services, as well as known gaps to enable additional use cases. Create the future: Discuss perspectives for Media and Entertainment for the Web. Bring the power of GPUs to the Web (graphics, machine learning, heavy processing), under incubation in the GPU for the Web CG. Transition to a Working Group is under discussion. Determine next steps after the successful W3C Workshop on Web Games of June 2019. View the report. Timed Text The Timed Text Working Group develops and maintains formats used for the representation of text synchronized with other timed media, like audio and video, and notably works on TTML, profiles of TTML, and WebVTT. Recent progress includes: A robust WebVTT implementation report poises the specification for publication as a proposed recommendation. Discussions around re-chartering, notably to add a TTML Profile for Audio Description deliverable to the scope of the group, and clarify that rendering of captions within XR content is also in scope. Immersive Web Hardware that enables Virtual Reality (VR) and Augmented Reality (AR) applications are now broadly available to consumers, offering an immersive computing platform with both new opportunities and challenges. The ability to interact directly with immersive hardware is critical to ensuring that the web is well equipped to operate as a first-class citizen in this environment. The Immersive Web Working Group has been stabilizing the WebXR Device API while the companion Immersive Web Community Group incubates the next series of features identified as key for the future of the Immersive Web. W3C plans a workshop focused on the needs and benefits at the intersection of VR & Accessibility (Inclusive XR), on 5-6 November 2019 in Seattle, WA, USA, to explore existing and future approaches on making Virtual and Augmented Reality experiences more inclusive. Web & Telecommunications The Web is the Open Platform for Mobile. Telecommunication service providers and network equipment providers have long been critical actors in the deployment of Web technologies. As the Web platform matures, it brings richer and richer capabilities to extend existing services to new users and devices, and propose new and innovative services. Real-Time Communications (WebRTC) All Real-Time Communications specifications WebRTC has reshaped the whole communication landscape by making any connected device a potential communication end-point, bringing audio and video communications anywhere, on any network, vastly expanding the ability of operators to reach their customers. WebRTC serves as the corner-stone of many online communication and collaboration services. The WebRTC Working Group aims to bringing WebRTC 1.0 (and companion specification Media Capture and Streams) to Recommendation by the end of 2019. Intense efforts are focused on testing (supported by a dedicated hackathon at IETF 104) and interoperability. The group is considering pushing features that have not gotten enough traction to separate modules or to a later minor revision of the spec. Beyond WebRTC 1.0, the WebRTC Working Group will focus its efforts on WebRTC NV which the group has started documenting by identifying use cases. Web & Networks Recently launched, in the wake of the May 2018 Web5G workshop, the Web & Networks Interest Group is chaired by representatives from AT&T, China Mobile and Intel, with a goal to explore solutions for web applications to achieve better performance and resource allocation, both on the device and network. The group's first efforts are around use cases, privacy & security requirements and liaisons. Automotive All Automotive specifications To create a rich application ecosystem for vehicles and other devices allowed to connect to the vehicle, the W3C Automotive Working Group is delivering a service specification to expose all common vehicle signals (engine temperature, fuel/charge level, range, tire pressure, speed, etc.) The Vehicle Information Service Specification (VISS), which is a Candidate Recommendation, is seeing more implementations across the industry. It provides the access method to a common data model for all the vehicle signals –presently encapsulating a thousand or so different data elements– and will be growing to accommodate the advances in automotive such as autonomous and driver assist technologies and electrification. The group is already working on a successor to VISS, leveraging the underlying data model and the VIWI submission from Volkswagen, for a more robust means of accessing vehicle signals information and the same paradigm for other automotive needs including location-based services, media, notifications and caching content. The Automotive and Web Platform Business Group acts as an incubator for prospective standards work. One of its task forces is using W3C VISS in performing data sampling and off-boarding the information to the cloud. Access to the wealth of information that W3C's auto signals standard exposes is of interest to regulators, urban planners, insurance companies, auto manufacturers, fleet managers and owners, service providers and others. In addition to components needed for data sampling and edge computing, capturing user and owner consent, information collection methods and handling of data are in scope. The upcoming W3C Workshop on Data Models for Transportation (September 2019) is expected to focus on the need of additional ontologies around transportation space. Web of Things All Web of Things specifications W3C's Web of Things work is designed to bridge disparate technology stacks to allow devices to work together and achieve scale, thus enabling the potential of the Internet of Things by eliminating fragmentation and fostering interoperability. Thing descriptions expressed in JSON-LD cover the behavior, interaction affordances, data schema, security configuration, and protocol bindings. The Web of Things complements existing IoT ecosystems to reduce the cost and risk for suppliers and consumers of applications that create value by combining multiple devices and information services. There are many sectors that will benefit, e.g. smart homes, smart cities, smart industry, smart agriculture, smart healthcare and many more. The Web of Things Working Group is finishing the initial Web of Things standards, with support from the Web of Things Interest Group: Web of Things Architecture Thing Descriptions Strengthening the Core of the Web HTML The HTML Working Group was chartered early June to assist the W3C community in raising issues and proposing solutions for the HTML and DOM specifications, and to produce W3C Recommendations from WHATWG Review Drafts. A few days before, W3C and the WHATWG signed a Memorandum of Understanding outlining the agreement to collaborate on the development of a single version of the HTML and DOM specifications. Issues and proposed solutions for HTML and DOM done via the newly rechartered HTML Working Group in the WHATWG repositories The HTML Working Group is targetting November 2019 to bring HTML and DOM to Candidate Recommendations. CSS All CSS specifications CSS is a critical part of the Open Web Platform. The CSS Working Group gathers requirements from two large groups of CSS users: the publishing industry and application developers. Within W3C, those groups are exemplified by the Publishing groups and the Web Platform Working Group. The former requires things like better pagination support and advanced font handling, the latter needs intelligent (and fast!) scrolling and animations. What we know as CSS is actually a collection of almost a hundred specifications, referred to as ‘modules’. The current state of CSS is defined by a snapshot, updated once a year. The group also publishes an index defining every term defined by CSS specifications. Fonts All Fonts specifications The Web Fonts Working Group develops specifications that allow the interoperable deployment of downloadable fonts on the Web, with a focus on Progressive Font Enrichment as well as maintenance of WOFF Recommendations. Recent and ongoing work includes: Early API experiments by Adobe and Monotype have demonstrated the feasibility of a font enrichment API, where a server delivers a font with minimal glyph repertoire and the client can query the full repertoire and request additional subsets on-the-fly. In other experiments, the Brotli compression used in WOFF 2 was extended to support shared dictionaries and patch update. Metrics to quantify improvement are a current hot discussion topic. The group will meet at ATypi 2019 in Japan, to gather requirements from the international typography community. The group will first produce a report summarizing the strengths and weaknesses of each prototype solution by Q2 2020. SVG All SVG specifications SVG is an important and widely-used part of the Open Web Platform. The SVG Working Group focuses on aligning the SVG 2.0 specification with browser implementations, having split the specification into a currently-implemented 2.0 and a forward-looking 2.1. Current activity is on stabilization, increased integration with the Open Web Platform, and test coverage analysis. The Working Group was rechartered in March 2019. A new work item concerns native (non-Web-browser) uses of SVG as a non-interactive, vector graphics format. Audio The Web Audio Working Group was extended to finish its work on the Web Audio API, expecting to publish it as a Recommendation by year end. The specification enables synthesizing audio in the browser. Audio operations are performed with audio nodes, which are linked together to form a modular audio routing graph. Multiple sources — with different types of channel layout — are supported. This modular design provides the flexibility to create complex audio functions with dynamic effects. The first version of Web Audio API is now feature complete and is implemented in all modern browsers. Work has started on the next version, and new features are being incubated in the Audio Community Group. Performance Web Performance All Web Performance specifications There are currently 18 specifications in development in the Web Performance Working Group aiming to provide methods to observe and improve aspects of application performance of user agent features and APIs. The W3C team is looking at related work incubated in the W3C GPU for the Web (WebGPU) Community Group which is poised to transition to a W3C Working Group. A preliminary draft charter is available. WebAssembly All WebAssembly specifications WebAssembly improves Web performance and power by being a virtual machine and execution environment enabling loaded pages to run native (compiled) code. It is deployed in Firefox, Edge, Safari and Chrome. The specification will soon reach Candidate Recommendation. WebAssembly enables near-native performance, optimized load time, and perhaps most importantly, a compilation target for existing code bases. While it has a small number of native types, much of the performance increase relative to Javascript derives from its use of consistent typing. WebAssembly leverages decades of optimization for compiled languages and the byte code is optimized for compactness and streaming (the web page starts executing while the rest of the code downloads). Network and API access all occurs through accompanying Javascript libraries -- the security model is identical to that of Javascript. Requirements gathering and language development occur in the Community Group while the Working Group manages test development, community review and progression of specifications on the Recommendation Track. Testing Browser testing plays a critical role in the growth of the Web by: Improving the reliability of Web technology definitions; Improving the quality of implementations of these technologies by helping vendors to detect bugs in their products; Improving the data available to Web developers on known bugs and deficiencies of Web technologies by publishing results of these tests. Browser Testing and Tools The Browser Testing and Tools Working Group is developing WebDriver version 2, having published last year the W3C Recommendation of WebDriver. WebDriver acts as a remote control interface that enables introspection and control of user agents, provides a platform- and language-neutral wire protocol as a way for out-of-process programs to remotely instruct the behavior of Web, and emulates the actions of a real person using the browser. WebPlatform Tests The WebPlatform Tests project now provides a mechanism which allows to fully automate tests that previously needed to be run manually: TestDriver. TestDriver enables sending trusted key and mouse events, sending complex series of trusted pointer and key interactions for things like in-content drag-and-drop or pinch zoom, and even file upload. Since 2014 W3C began work on this coordinated open-source effort to build a cross-browser test suite for the Web Platform, which WHATWG, and all major browsers adopted. Web of Data All Data specifications There have been several great success stories around the standardization of data on the web over the past year. Verifiable Claims seems to have significant uptake. It is also significant that the Distributed Identifier WG charter has received numerous favorable reviews, and was just recently launched. JSON-LD has been a major success with the large deployment on Web sites via schema.org. JSON-LD 1.1 completed technical work, about to transition to CR More than 25% of websites today include schema.org data in JSON-LD The Web of Things description is in CR since May, making use of JSON-LD Verifiable Credentials data model is in CR since July, also making use of JSON-LD Continued strong interest in decentralized identifiers Engagement from the TAG with reframing core documents, such as Ethical Web Principles, to include data on the web within their scope Data is increasingly important for all organizations, especially with the rise of IoT and Big Data. W3C has a mature and extensive suite of standards relating to data that were developed over two decades of experience, with plans for further work on making it easier for developers to work with graph data and knowledge graphs. Linked Data is about the use of URIs as names for things, the ability to dereference these URIs to get further information and to include links to other data. There are ever-increasing sources of open Linked Data on the Web, as well as data services that are restricted to the suppliers and consumers of those services. The digital transformation of industry is seeking to exploit advanced digital technologies. This will facilitate businesses to integrate horizontally along the supply and value chains, and vertically from the factory floor to the office floor. W3C is seeking to make it easier to support enterprise-wide data management and governance, reflecting the strategic importance of data to modern businesses. Traditional approaches to data have focused on tabular databases (SQL/RDBMS), Comma Separated Value (CSV) files, and data embedded in PDF documents and spreadsheets. We're now in midst of a major shift to graph data with nodes and labeled directed links between them. Graph data is: Faster than using SQL and associated JOIN operations More favorable to integrating data from heterogeneous sources Better suited to situations where the data model is evolving In the wake of the recent W3C Workshop on Graph Data we are in the process of launching a Graph Standardization Business Group to provide a business perspective with use cases and requirements, to coordinate technical standards work and liaisons with external organizations. Web for All Security, Privacy, Identity All Security specifications, all Privacy specifications Authentication on the Web As the WebAuthn Level 1 W3C Recommendation published last March is seeing wide implementation and adoption of strong cryptographic authentication, work is proceeding on Level 2. The open standard Web API gives native authentication technology built into native platforms, browsers, operating systems (including mobile) and hardware, offering protection against hacking, credential theft, phishing attacks, thus aiming to end the era of passwords as a security construct. You may read more in our March press release. Privacy An increasing number of W3C specifications are benefitting from Privacy and Security review; there are security and privacy aspects to every specification. Early review is essential. Working with the TAG, the Privacy Interest Group has updated the Self-Review Questionnaire: Security and Privacy. Other recent work of the group includes public blogging further to the exploration of anti-patterns in standards and permission prompts. Security The Web Application Security Working Group adopted Feature Policy, aiming to allow developers to selectively enable, disable, or modify the behavior of some of these browser features and APIs within their application; and Fetch Metadata, aiming to provide servers with enough information to make a priori decisions about whether or not to service a request based on the way it was made, and the context in which it will be used. The Web Payment Security Interest Group, launched last April, convenes members from W3C, EMVCo, and the FIDO Alliance to discuss cooperative work to enhance the security and interoperability of Web payments (read more about payments). Internationalization (i18n) All Internationalization specifications, educational articles related to Internationalization, spec developers checklist Only a quarter or so current Web users use English online and that proportion will continue to decrease as the Web reaches more and more communities of limited English proficiency. If the Web is to live up to the "World Wide" portion of its name, and for the Web to truly work for stakeholders all around the world engaging with content in various languages, it must support the needs of worldwide users as they engage with content in the various languages. The growth of epublishing also brings requirements for new features and improved typography on the Web. It is important to ensure the needs of local communities are captured. The W3C Internationalization Initiative was set up to increase in-house resources dedicated to accelerating progress in making the World Wide Web "worldwide" by gathering user requirements, supporting developers, and education & outreach. For an overview of current projects see the i18n radar. W3C's Internationalization efforts progressed on a number of fronts recently: Requirements: New African and European language groups will work on the gap analysis, errata and layout requirements. Gap analysis: Japanese, Devanagari, Bengali, Tamil, Lao, Khmer, Javanese, and Ethiopic updated in the gap-analysis documents. Layout requirements document: notable progress tracked in the Southeast Asian Task Force while work continues on Chinese layout requirements. Developer support: Spec reviews: the i18n WG continues active review of specifications of the WHATWG and other W3C Working Groups. Short review checklist: easy way to begin a self-review to help spec developers understand what aspects of their spec are likely to need attention for internationalization, and points them to more detailed checklists for the relevant topics. It also helps those reviewing specs for i18n issues. Strings on the Web: Language and Direction Metadata lays out issues and discusses potential solutions for passing information about language and direction with strings in JSON or other data formats. The document was rewritten for clarity, and expanded. The group is collaborating with the JSON-LD and Web Publishing groups to develop a plan for updating RDF, JSON-LD and related specifications to handle metadata for base direction of text (bidi). User-friendly test format: a new format was developed for Internationalization Test Suite tests, which displays helpful information about how the test works. This particularly useful because those tests are pointed to by educational materials and gap-analysis documents. Web Platform Tests: a large number of tests in the i18n test suite have been ported to the WPT repository, including: css-counter-styles, css-ruby, css-syntax, css-test, css-text-decor, css-writing-modes, and css-pseudo. Education & outreach: (for all educational materials, see the HTML & CSS Authoring Techniques) Web Accessibility All Accessibility specifications, WAI resources The Web Accessibility Initiative supports W3C's Web for All mission. Recent achievements include: Education and training: Inaccessibility of CAPTCHA updated to bring our analysis and recommendations up to date with CAPTCHA practice today, concluding two years of extensive work and invaluable input from the public (read more on the W3C Blog Learn why your web content and applications should be accessible. The Education and Outreach Working Group has completed revision and updating of the Business Case for Digital Accessibility. Accessibility guidelines: The Accessibility Guidelines Working Group has continued to update WCAG Techniques and Understanding WCAG 2.1; and published a Candidate Recommendation of Accessibility Conformance Testing Rules Format 1.0 to improve inter-rater reliability when evaluating conformance of web content to WCAG An updated charter is being developed to host work on "Silver", the next generation accessibility guidelines (WCAG 2.2) There are accessibility aspects to most specifications. Check your work with the FAST checklist. Outreach to the world W3C Developer Relations To foster the excellent feedback loop between Web Standards development and Web developers, and to grow participation from that diverse community, recent W3C Developer Relations activities include: @w3cdevs tracks the enormous amount of work happening across W3C W3C Track during the Web Conference 2019 in San Francisco Tech videos: W3C published the 2019 Web Games Workshop videos The 16 September 2019 Developer Meetup in Fukuoka, Japan, is open to all and will combine a set of technical demos prepared by W3C groups, and a series of talks on a selected set of W3C technologies and projects W3C is involved with Mozilla, Google, Samsung, Microsoft and Bocoup in the organization of ViewSource 2019 in Amsterdam (read more on the W3C Blog) W3C Training In partnership with EdX, W3C's MOOC training program, W3Cx offers a complete "Front-End Web Developer" (FEWD) professional certificate program that consists of a suite of five courses on the foundational languages that power the Web: HTML5, CSS and JavaScript. We count nearly 900K students from all over the world. Translations Many Web users rely on translations of documents developed at W3C whose official language is English. W3C is extremely grateful to the continuous efforts of its community in ensuring our various deliverables in general, and in our specifications in particular, are made available in other languages, for free, ensuring their exposure to a much more diverse set of readers. Last Spring we developed a more robust system, a new listing of translations of W3C specifications and updated the instructions on how to contribute to our translation efforts. W3C Liaisons Liaisons and coordination with numerous organizations and Standards Development Organizations (SDOs) is crucial for W3C to: make sure standards are interoperable coordinate our respective agenda in Internet governance: W3C participates in ICANN, GIPO, IGF, the I* organizations (ICANN, IETF, ISOC, IAB). ensure at the government liaison level that our standards work is officially recognized when important to our membership so that products based on them (often done by our members) are part of procurement orders. W3C has ARO/PAS status with ISO. W3C participates in the EU MSP and Rolling Plan on Standardization ensure the global set of Web and Internet standards form a compatible stack of technologies, at the technical and policy level (patent regime, fragmentation, use in policy making) promote Standards adoption equally by the industry, the public sector, and the public at large Coralie Mercier, Editor, W3C Marketing & Communications $Id: Overview.html,v 1.60 2019/10/15 12:05:52 coralie Exp $ Copyright © 2019 W3C ® (MIT, ERCIM, Keio, Beihang) Usage policies apply.
DC-research
The official code for "TEMPO: Prompt-based Generative Pre-trained Transformer for Time Series Forecasting (ICLR 2024)". TEMPO is one of the very first open source Time Series Foundation Models for forecasting task v1.0 version.
swati1024
Skip to content Search… All gists Back to GitHub Sign in Sign up Instantly share code, notes, and snippets. @giansalex giansalex/torrent-courses-download-list.md forked from M-Younus/torrent courses download-list Last active 2 days ago 15188 Code Revisions 15 Stars 151 Forks 88 <script src="https://gist.github.com/giansalex/4cd3631e94433bbbd71bf07aedb33a7b.js"></script> torrent-courses-download-list.md Torrent Courses List Download http://kickass.to/infiniteskills-learning-jquery-mobile-working-files-t7967156.html http://kickass.to/lynda-bootstrap-3-advanced-web-development-2013-eng-t8167587.html http://kickass.to/lynda-css-advanced-typographic-techniques-t7928210.html http://kickass.to/lynda-html5-projects-interactive-charts-2013-eng-t8167670.html http://kickass.to/vtc-html5-css3-responsive-web-design-course-t7922533.html http://kickass.to/10gen-m101js-mongodb-for-node-js-developers-2013-eng-t8165205.html http://kickass.to/cbt-nuggets-amazon-web-services-aws-foundations-t7839734.html http://kickass.to/cbt-nuggets-apache-hadoop-t8027965.html http://kickass.to/cbt-nuggets-backtrack-and-kali-linux-t7677281.html http://kickass.to/cbt-nuggets-ccda-desgn-640-864-t8300917.html http://kickass.to/cbt-nuggets-ccna-wireless-iuwne-640-722-t8300389.html http://kickass.to/cbt-nuggets-cisco-ccna-labs-cisco-for-the-real-world-bonus-t6154766.html http://kickass.to/cbt-nuggets-cisco-ccnp-security-firewall-v2-0-642-618-azazredhat-t6955696.html http://kickass.to/cbt-nuggets-cisco-ccnp-security-secure-642-637-azazredhat-t6955710.html http://kickass.to/cbt-nuggets-comptia-network-videos-2010-gurufuel-t4648514.html http://kickass.to/cbt-nuggets-definitive-guide-to-working-with-gns3-by-keith-bar-t8301349.html http://kickass.to/cbt-nuggets-ec-council-certified-ethical-hacker-v7-0-t6801120.html http://kickass.to/cbt-nuggets-exam-walkthrough-cisco-icnd1ccent-100-101-t8516719.html http://kickass.to/cbt-nuggets-exam-walkthrough-cisco-icnd2ccna-200-101-t8524803.html http://kickass.to/cbt-nuggets-linux-in-the-real-world-with-shawn-powers-t7718107.html http://kickass.to/cbt-nuggets-linux-series-video-tutorial-t485320.html http://kickass.to/cbt-nuggets-lpi-linux-lpic-1-101-and-comptia-linux-t8031864.html http://kickass.to/cbt-nuggets-lpi-linux-lpic-1-102-and-comptia-linux-t8031871.html http://kickass.to/cbt-nuggets-mastering-vmware-view-5-and-preparing-for-the-vcp510-dt-exam-t8301829.html http://kickass.to/cbt-nuggets-vmware-virtualization-vcp-vsphere-5-t8300512.html http://kickass.to/cbt-nuggets-wireshark-with-keith-barker-t8040855.html http://kickass.to/comptia-network-n10-005-collection-t8319928.html http://kickass.to/developing-in-html5-with-javascript-and-css3-jump-start-t8277565.html http://kickass.to/eli-the-computer-guy-linux-t8647714.html http://kickass.to/foundations-of-programming-test-driven-development-t7522376.html http://kickass.to/infiniteskills-advanced-html5-programming-t7463355.html http://kickass.to/infiniteskills-cisco-ccna-certification-bundle-2013-t7645010.html http://kickass.to/infiniteskills-css3-transformations-and-animations-t7930047.html http://kickass.to/infiniteskills-learning-javascript-programming-t7625039.html http://kickass.to/infiniteskills-learning-python-programming-t7107001.html http://kickass.to/infiniteskills-learning-regular-expressions-t8028765.html http://kickass.to/infiniteskills-learning-whitehat-hacking-and-penetration-testing-t8303725.html http://kickass.to/infiniteskills-microsoft-windows-server-2012-certification-training-exam-70-410-t7379360.html http://kickass.to/infiniteskills-php-security-t8046511.html http://kickass.to/learning-vmware-esxi-and-vsphere-5-1-administration-training-t8030885.html http://kickass.to/linuxcbt-basic-security-edition-d3x-t7650913.html http://kickass.to/linuxcbt-config-mgmt-edition-d3x-t7650929.html http://kickass.to/linuxcbthttpdxil-edition-d3x-t7653897.html http://kickass.to/linuxcbt-vbox-edition-d3x-t7653916.html http://kickass.to/linuxcbt-webscan-edition-d3x-t7653922.html http://kickass.to/linuxcbt-winpython-edition-d3x-t7653942.html http://kickass.to/linuxcbt-xenvm-edition-d3x-t7653948.html http://kickass.to/lynda-com-foundations-of-programming-code-efficiency-t8604312.html http://kickass.to/lynda-com-foundations-of-programming-databases-t8596357.html http://kickass.to/lynda-com-foundations-of-programming-design-patterns-t8692867.html http://kickass.to/lynda-com-foundations-of-programming-fundamentals-t7600288.html http://kickass.to/lynda-com-foundations-of-programming-web-services-including-exercise-files-torrenters-t7797117.html http://kickass.to/lynda-com-ruby-on-rails-4-essential-training-dec-2013-t8438392.html http://kickass.to/lynda-foundations-of-programming-refactoring-code-t7524343.html http://kickass.to/lynda-foundations-of-programming-software-quality-assurance-sum1-here-silverrg-t8043799.html http://kickass.to/lynda-javascript-events-t7893809.html http://kickass.to/lynda-leading-with-emotional-intelligence-t8157240.html http://kickass.to/lynda-management-tips-t8154761.html http://kickass.to/mysql-database-tutorials-by-bucky-thenewboston-org-1-33-t8224550.html http://kickass.to/packtpub-advanced-penetration-testing-for-highly-secured-environments-t8300620.html http://kickass.to/pluralsight-mysql-query-optimization-and-performance-tuning-with-pinal-dave-t8553369.html http://kickass.to/pluralsight-relational-database-design-t8551479.html http://kickass.to/ruby-tutorial-bucky-totally-for-beginner-t8699509.html http://kickass.to/trainsignal-vmware-vcloud-director-5-1-essentials-t7495660.html http://kickass.to/trainsignal-vmware-vsphere-optimize-and-scale-vcap5-dca-t7495659.html http://kickass.to/trainsignal-vmware-workstation-9-for-the-it-admin-t7495658.html http://kickass.to/tutsplus-advanced-command-line-techniques-t7632228.html http://kickass.to/tutsplus-advanced-javascript-fundamentals-t6739742.html http://kickass.to/tutsplus-agile-design-patterns-2012-t6992118.html http://kickass.to/tutsplus-cleaner-code-with-coffeescript-t6741625.html http://kickass.to/tutsplus-detecting-code-smells-t8128341.html http://kickass.to/tutsplus-firebug-white-to-black-belt-v413hav-t7154501.html http://kickass.to/tutsplus-foundational-flask-creating-your-own-static-blog-generator-t8356996.html http://kickass.to/tutsplus-freelance-bootcamp-t6832678.html http://kickass.to/tutsplus-premium-e-book-mega-pack-v413hav-t7178526.html http://kickass.to/tutsplus-pro-workflow-for-web-designers-t6854268.html http://kickass.to/tutsplus-riding-ruby-on-rails-t6728201.html http://kickass.to/tutsplus-sql-essentials-t6746851.html http://kickass.to/tutsplus-tools-of-the-modern-web-developer-t8107617.html http://kickass.to/tutsplus-video-fundamentals-t6752217.html http://kickass.to/ine-ccna-wireless-640-722-iuwne-t8301376.html http://kickass.to/learn-metasploit-t8174472.html http://kickass.to/lynda-ruby-on-rails-essential-training-t7630711.html http://kickass.to/lynda-up-and-running-with-python-2013-eng-t8167709.html http://kickass.to/build-flat-responsive-website-from-scratch-complete-course-t8604527.html http://kickass.to/canvas-essentials-t8550909.html http://kickass.to/cbt-nuggets-70-331-microsoft-sharepoint-server-2013-x264-mkv-encod3r-t8595423.html http://kickass.to/cbt-nuggets-98-365-windows-server-admin-fundamentals-encod3r-t8613009.html http://kickass.to/cbt-nuggets-ccie-combo-pack-t271107.html http://kickass.to/cbt-nuggets-ccna-certification-videos-material-2010-gurufu-t4648321.html http://kickass.to/cbt-nuggets-juniper-networks-certified-specialist-security-jncis-sec-jn0-332-t8028083.html http://kickass.to/cehv7-cbt-nuggets-instructor-slides-tools-video-tools-study-guide-rar-t8705752.html http://kickass.to/cisco-ccna-initial-router-and-switch-configuration-t8648377.html http://kickass.to/cisco-ccna-security-aaa-and-ip-security-t8648378.html http://kickass.to/cisco-ccna-security-introduction-to-network-security-t8648381.html http://kickass.to/cisco-ccna-voice-configuration-and-advanced-features-t8648387.html http://kickass.to/cisco-ccna-voice-voice-overview-and-lab-setup-t8648386.html http://kickass.to/cisco-press-ccna-security-640-554-official-cert-guide-videos-t8648384.html http://kickass.to/coursera-neural-networks-and-machine-learning-geoffrey-hinton-university-of-toronto-t8568642.html http://kickass.to/eli-the-computer-guy-hacking-t8647661.html http://kickass.to/ine-ccie-data-center-storage-t8029396.html http://kickass.to/infinite-skills-learning-cloud-computing-with-amazon-web-services-2013-eng-t8703045.html http://kickass.to/infiniteskills-learning-tcp-ip-t8303739.html http://kickass.to/lynda-bootstrap-3-new-features-and-migration-t7958409.html http://kickass.to/lynda-bootstrap-adding-interactivity-to-your-site-t7519306.html http://kickass.to/lynda-com-jquery-ui-widgets-t8172743.html http://kickass.to/lynda-essential-training-t8157222.html http://kickass.to/lynda-foundation-incorporating-sass-and-compass-t7953037.html http://kickass.to/lynda-html5-projects-advanced-to-do-list-t7855578.html http://kickass.to/lynda-html5-projects-creating-a-responsive-presentation-2013-eng-t8167660.html http://kickass.to/lynda-online-presentations-with-reveal-js-2013-eng-t8167575.html http://kickass.to/lynda-teacher-tips-t8157202.html http://kickass.to/lynda-up-and-running-with-angularjs-t7982840.html http://kickass.to/lynda-up-and-running-with-bootstrap-3-t8011198.html http://kickass.to/lynda-up-and-running-with-cakephp-t7963854.html http://kickass.to/lynda-up-and-running-with-google-apps-script-t7917458.html http://kickass.to/lynda-up-and-running-with-php-codeigniter-t7849968.html http://kickass.to/lynda-web-semantics-t7899223.html http://kickass.to/lynda-wordpress-essential-training-2013-tutorial-t8270624.html http://kickass.to/pluralsight-aws-developer-fundamentals-2013-eng-t8703013.html http://kickass.to/pluralsight-bootstrap-3-t8214168.html http://kickass.to/pluralsight-cisco-ccie-routing-and-switching-implement-bgp-t8648391.html http://kickass.to/pluralsight-cisco-ccna-advanced-ethernet-and-file-management-t8051456.html http://kickass.to/pluralsight-cisco-ccna-security-firewalls-and-vpns-t8648393.html http://kickass.to/pluralsight-cisco-ccna-wan-technologies-learn-wide-area-network-wan-technologies-and-configuration-t7882351.html http://kickass.to/pluralsight-javascript-from-scratch-t7612372.html http://kickass.to/pluralsight-sublime-text-3-from-scratch-2013-eng-t8153034.html http://kickass.to/ten-ton-wordpress-mastery-video-t8452016.html http://kickass.to/trainsignal-microsoft-network-monitoring-t8028791.html http://kickass.to/tuts-plus-2013-bdd-in-rails-psiclone-t8474590.html http://kickass.to/tutsplus-advanced-css3-animations-t7791566.html http://kickass.to/tutsplus-an-introduction-to-node-js-t6744596.html http://kickass.to/tutsplus-better-statistics-with-google-charts-t7983386.html http://kickass.to/tutsplus-bootstrap-for-web-design-t8210956.html http://kickass.to/tutsplus-com-advanced-ui-techniques-2013-t7072722.html http://kickass.to/tutsplus-com-build-a-cms-in-codeigniter-2013-t7072644.html http://kickass.to/tutsplus-com-learning-mongodb-2013-t7072653.html http://kickass.to/tutsplus-computer-networks-distilled-v413hav-t7630795.html http://kickass.to/tutsplus-css-3d-essentials-t8027191.html http://kickass.to/tutsplus-css-noob-to-ninja-v413hav-t7475010.html http://kickass.to/tutsplus-css-tips-and-tricks-t8292119.html http://kickass.to/tutsplus-css3-essentials-t6608214.html http://kickass.to/tutsplus-css3-typography-techniques-t7882076.html http://kickass.to/tutsplus-design-patterns-in-ruby-t8354740.html http://kickass.to/tutsplus-fundamentals-of-design-t6645691.html http://kickass.to/tutsplus-fundamentals-of-print-design-t6667261.html http://kickass.to/tutsplus-fundamentals-of-ux-design-t6710443.html http://kickass.to/tutsplus-html-kickstart-essentials-t7969388.html http://kickass.to/tutsplus-html-tips-and-tricks-t8224648.html http://kickass.to/tutsplus-introduction-to-web-typography-t6662386.html http://kickass.to/tutsplus-javascript-fundamentals-101-t6738976.html http://kickass.to/tutsplus-jquery-ui-101-the-essentials-2013-eng-t8165125.html http://kickass.to/tutsplus-jquery-ui-101-the-essentials-t7791579.html http://kickass.to/tutsplus-jquery-ui-201-beyond-the-basics-t7791583.html http://kickass.to/tutsplus-jquery-ui-301-the-widget-factory-2013-eng-t8165109.html http://kickass.to/tutsplus-jquery-ui-301-the-widget-factory-working-files-2013-eng-t8180547.html http://kickass.to/tutsplus-laravel-essentials-t6722386.html http://kickass.to/tutsplus-logo-design-fundamentals-with-gary-simon-swatiate-t7867377.html http://kickass.to/tutsplus-mastering-corporate-design-v413hav-t7586047.html http://kickass.to/tutsplus-mastering-flat-design-v413hav-t7781777.html http://kickass.to/tutsplus-mastering-retro-web-design-v413hav-t7343186.html http://kickass.to/tutsplus-object-oriented-javascript-t6863065.html http://kickass.to/tutsplus-perfect-workflow-in-sublime-text-2-t6794850.html http://kickass.to/tutsplus-php-fundamentals-t6671312.html http://kickass.to/tutsplus-php-security-pitfalls-t7835091.html http://kickass.to/tutsplus-relational-databases-t8023530.html http://kickass.to/tutsplus-responsive-web-design-for-beginners-v413hav-t7385876.html http://kickass.to/tutsplus-responsive-web-design-techniques-t8103476.html http://kickass.to/tutsplus-responsive-web-design-with-foundation-t8103477.html http://kickass.to/tutsplus-simple-development-with-jquery-mobile-t6735499.html http://kickass.to/tutsplus-solid-design-patterns-t8208974.html http://kickass.to/tutsplus-test-driven-php-in-action-t6851704.html http://kickass.to/tutsplus-testing-tricks-for-php-and-laravel-developers-t7844807.html http://kickass.to/tutsplus-web-form-design-and-development-t8020800.html http://kickass.to/tutsplus-wordpress-plugin-development-essentials-t6615050.html http://kickass.to/udemy-build-an-instantly-updating-dynamic-website-with-jquery-ajax-t8415746.html http://kickass.to/udemy-psd-to-html5-css3-hand-code-a-beautiful-website-in-4-hours-t7740752.html http://kickass.to/video2brain-drupal-power-workshop-t6811365.html http://kickass.to/video2brain-exploring-css-positioning-t6683727.html http://kickass.to/video2brain-getting-started-with-joomla-t6600909.html http://kickass.to/video2brain-html5-for-beginners-learn-by-video-t6686185.html http://kickass.to/video2brain-html5-power-workshop-t6689166.html http://kickass.to/video2brain-php-5-3-advanced-web-application-programming-t6681560.html http://kickass.to/vtc-mysql-5-development-part-1-of-2-t7502575.html http://kickass.to/vtc-mysql-5-development-part-2-of-2-t7502576.html https://thepiratebay.se/torrent/6113010/Linux_CBT_Scripting_BASH__PERL__PYTHON__PHP https://thepiratebay.se/torrent/7667241/CBT.Nuggets.Python.Programming.Python.Language-PLATO https://thepiratebay.se/torrent/8608894/InfiniteSkills_-_Web_Programming_With_Python https://thepiratebay.se/torrent/7838122/Lynda.com_-_Python_3_Essential_Training https://thepiratebay.se/torrent/7837732/python_book_collection https://thepiratebay.se/torrent/9549614/Pluralsight.com_-_Python_Fundamentals https://thepiratebay.se/torrent/5134755/LiveLessons.Python.Fundamentals.DVDR-HELL https://thepiratebay.se/torrent/7112525/The_New_Boston_-_Python_Programming_Tutorials http://kickass.to/lynda-up-and-running-with-python-2013-eng-t8167709.html http://www.seedpeer.me/details/5730405/CBT-Nuggets---COMPTIA-SECURITY-SY0-201-WITH-SY0-301,-JK0-018-UPDATES.html http://www.seedpeer.me/details/6411686/CBT.Nuggets----IPv6.html http://www.seedpeer.me/details/6421814/CBT-Nuggets---Ubuntu.html http://www.seedpeer.me/details/6107414/LinuxCBT.Awk.Sed.Edition.html http://www.seedpeer.me/details/6107522/LinuxCBT-BASH-II-Edition-d3x.html http://www.seedpeer.me/details/4799869/LinuxCBT---Berkeley-Packet-Filters-BPF-Edition.html http://www.seedpeer.me/details/6881816/LinuxCBT--HTTPD-Edition.html http://www.seedpeer.me/details/6559038/LinuxCBT-Key-Files-edition.html http://www.seedpeer.me/details/6107600/LinuxCBT.MemCacheD.Edition-d3x.html http://www.seedpeer.me/details/5870507/LinuxCBT-Monitoring-Edition-feat-Nagios.html http://www.seedpeer.me/details/6107677/LinuxCBT-NIDS-Edition-d3x.html http://www.seedpeer.me/details/5925487/LinuxCBT-OpenLDAP-Edition.html http://www.seedpeer.me/details/6107558/LinuxCBT.OpenPGP.Edition-d3x.html http://www.seedpeer.me/details/6107692/LinuxCBT-OpenSSHv2-Edition-d3x.html http://www.seedpeer.me/details/6107699/LinuxCBT-PDNS-Edition-d3x.html http://www.seedpeer.me/details/2595080/LinuxCBT-Proxy-Edition-Feat-Squid-AG-torrent-[twistedtorrents2-com].html http://www.seedpeer.me/details/6110590/LinuxCBT-Samba-Edition-d3x.html http://www.seedpeer.me/details/6110595/LinuxCBT-SELinux-Edition-d3x.html http://www.seedpeer.me/details/4799871/LinuxCBT---SFTP-Edition.html http://www.seedpeer.me/details/6110602/LinuxCBT-SQLite-Edition-d3x.html http://www.seedpeer.me/details/5408265/LinuxCBT---Ubuntu-12.04-LTS.html http://www.seedpeer.me/details/4799857/LinuxCBT---UnixCBT-BSD8x-Edition-FreeBSD-8.2.html http://www.seedpeer.me/details/6110504/LinuxCBT.WinPerl.Edition-d3x.html http://www.seedpeer.me/details/6562861/Lynda-com---CMS-Fundamentals.html http://www.seedpeer.me/details/5247098/Lynda.com---Creating-an-Effective-Resume.html http://www.seedpeer.me/details/4989808/Lynda.com---CSS-with-LESS-and-SASS.html http://www.seedpeer.me/details/5340566/Lynda.com---Fundamentals-of-Software-Version-Control-Nov.-2012.html http://www.seedpeer.me/details/5569955/Lynda.com-GMail-For-Power-Users-V413HAV.html http://www.seedpeer.me/details/4631148/Lynda.com-Invaluable-Becoming-a-Leading-Authority.html http://www.seedpeer.me/details/4631108/Lynda.com-Invaluable-Building-Professional-Connections.html http://www.seedpeer.me/details/4623697/Lynda.com---Managing-a-Hosted-Website.html http://www.seedpeer.me/details/5236946/Lynda.com---PayPal-Essential-Training.html http://www.seedpeer.me/details/4596519/Lynda.com---PostgreSQL-9-With-PHP-Essential-Training-iRONiSO.html http://www.seedpeer.me/details/5016023/Lynda.com---Ruby-Essential-Training-with-Kevin-Skoglund.html http://www.seedpeer.me/details/4931186/Lynda.com---Using-Regular-Expressions.html http://www.seedpeer.me/details/6675342/Lynda---Git-Essential-Training.html http://www.seedpeer.me/details/6698556/Lynda---Leading-Change.html http://www.seedpeer.me/details/6973932/PluralSight-Refactoring-Fundamentals.html http://www.seedpeer.me/details/6661700/Tutsplus---Building-Ribbit-in-Rails.html http://www.seedpeer.me/details/6101172/Tutsplus---Cross-Platform-Browser-Testing-V413HAV.html http://www.seedpeer.me/details/5266314/TutsPlus---Git-Essentials.html http://www.seedpeer.me/details/4848412/TutsPlus---How-to-Be-a-Terminal-Pro.html http://www.seedpeer.me/details/4848374/TutsPlus---How-To-Customize-Your-Terminal.html http://www.seedpeer.me/details/4848299/TutsPlus---Maintainable-CSS-With-Sass-and-Compass.html http://www.seedpeer.me/details/4856068/TutsPlus---Regular-Expressions---Up-and-Running.html http://www.seedpeer.me/details/4816386/TutsPlus---The-Fundamentals-of-Ruby.html http://www.seedpeer.me/details/4848281/TutsPlus---The-Ultimate-Guide-for-Learning-Mootools.html http://www.seedpeer.me/details/4935147/CBT-Nuggets---Intermediate-to-Advanced-Linux-Series.html http://www.seedpeer.me/details/6251428/CBT-Nuggets---IPv6gidbcn.html http://www.seedpeer.me/details/5124174/CBT-Nuggets---LINUX-SERIES.html http://www.seedpeer.me/details/2891954/LinuxCBT-Deb5x-Edition-DVD-YUM.html http://www.seedpeer.me/details/4799921/LinuxCBT---Enterprise-Linux-4-Edition.html http://www.seedpeer.me/details/6290791/LinuxCBT-Network-Intrusion-Detection-System.html http://www.seedpeer.me/details/6107569/LinuxCBT.PackCapAnal.Edition-d3x.html http://www.seedpeer.me/details/6107588/LinuxCBT.PAM.Edition-d3x.html http://www.seedpeer.me/details/6110616/LinuxCBT-Win-Awk-Sed-Edition-d3x.html http://www.seedpeer.me/details/6666824/Packtpub-BackTrack-5-Wireless-Penetration-Testing-[Video].html http://www.seedpeer.me/details/6668649/Packtpub-Getting-started-with-Apache-Solr-Search-Server-[Video].html http://www.seedpeer.me/details/6668652/Packtpub-Getting-Started-with-Citrix-XenApp-6.5-[Video].html http://www.seedpeer.me/details/6668669/Packtpub-Kali-Linux---Backtrack-Evolved-Assuring-Security-by-Penetration-Testing.html http://www.seedpeer.me/details/6415199/Pluralsight-com-Installing-and-Configuring-Apache-Web-Server-iNKiSO.html http://www.seedpeer.me/details/6271468/Pluralsight---MySQL-Indexing-for-Performance-2013.html http://www.seedpeer.me/details/6228283/Pluralsight---Web-Performance-Course.html http://www.seedpeer.me/details/6376899/TutsPlus---Documentation-in-Ruby.html http://www.seedpeer.me/details/5661723/CBT-Nuggets-â%EF%BF%BD%EF%BF%BD-Cisco-CCENT-CCNA-ICND1-100-101.html http://www.seedpeer.me/details/5825975/CBT-Nuggets-CCNA-200-101-mp4.html http://www.seedpeer.me/details/5513622/CBT-Nuggets---Cisco-CCNA-Security-640-554.html http://www.seedpeer.me/details/5890097/CBT-Nuggets---Citrix-XenApp-6.5.html http://www.seedpeer.me/details/6187994/CBT-Nuggets----CompTIA-A-220-801-&-220-802-Update-2012-iso.html http://www.seedpeer.me/details/6353101/CBT-Nuggets---CompTIA-Security.rar.html http://www.seedpeer.me/details/5243830/CBT-Nuggets---Oracle-Certified-Professional-1Z0-053-OCP.html http://www.seedpeer.me/details/4935122/CBT-Nuggets---Oracle-Database-11g-DBA-1-1Z0-052.html http://www.seedpeer.me/details/7222524/CBT.Nuggets----Oracle.Database.11G.DBA.1Z0-053-EnCod3r.html http://www.seedpeer.me/details/4935128/CBT-Nuggets---Oracle-Database-11g-SQL-Fundamentals-1-1Z0-051.html http://www.seedpeer.me/details/5863952/CBTNuggets-VMware-View-5.iso.html http://www.seedpeer.me/details/6199576/CBT-Nuggets---Web-Development.html http://www.seedpeer.me/details/4825729/LinuxCBT---CentOS6x-Edition.html http://www.seedpeer.me/details/1520287/linuxCBT---DBMS-mysql-5-Training.html http://www.seedpeer.me/details/4799864/LinuxCBT---Deb6x-Edition.html http://www.seedpeer.me/details/4799881/LinuxCBT---Debian-Edition.html http://www.seedpeer.me/details/1548037/LINUXCBT-FEAT-SUSE-10-ENTERPRISE-EDITION-JGTiSO[www.thepeerhub.com].html http://www.seedpeer.me/details/6107551/LinuxCBT-KornShell-Edition-d3x.html http://www.seedpeer.me/details/4261635/Linuxcbt-Redhat-6-Enterprise-Tutorials.html http://www.seedpeer.me/details/1662106/LinuxCBT---RHEL5.html http://www.seedpeer.me/details/6110601/LinuxCBT-SLES-10-Edition-d3x.html http://www.seedpeer.me/details/4799923/LinuxCBT---SLES-11-Edition-SUSE-11-Enterprise.html http://www.seedpeer.me/details/6964916/Lynda---ASP.NET-MVC-4-Essential-Training.html http://www.seedpeer.me/details/7253647/Lynda---Building-Facebook-Applications-with-PHP-and-MySQL.html http://www.seedpeer.me/details/5552857/Lynda.com---Applied-Responsive-Design-Mar,-2013.html http://www.seedpeer.me/details/4657790/Lynda.com-Building-Facebook-Applications-with-HTML-and-JavaScript.html http://www.seedpeer.me/details/4986911/Lynda.com---C&C-Essential-Training.html http://www.seedpeer.me/details/4504272/Lynda.com-Choosing-Using-Web-Fonts.html http://www.seedpeer.me/details/6554622/Lynda.com---Designing-Resume.html http://www.seedpeer.me/details/5332552/Lynda.com---Drupal-7-Advanced-Training---TestOrToast.html http://www.seedpeer.me/details/7051972/Lynda.com---Drupal-7--Creating-and-Editing-Custom-Themes---with-Chaz-Chumley[Isaac-9].html http://www.seedpeer.me/details/5565633/Lynda.com---JavaScript-and-JSON-Mar,-2013.html http://www.seedpeer.me/details/6664728/Lynda.com-JavaScript-for-Web-Designers[2013].html http://www.seedpeer.me/details/6664733/Lynda.com-Node.js-Essential-Training[2013].html http://www.seedpeer.me/details/4591597/Lynda.com---Practical-and-Effective-JavaScript.html http://www.seedpeer.me/details/5256920/Lynda.com-Responsive-Design-with-Joomla--Exercice-Files.html http://www.seedpeer.me/details/5374680/Lynda.com---Simplified-Drupal-Sites-with-Drush---TestOrToast.html http://www.seedpeer.me/details/4795822/Lynda.com---Unix-for-Mac-OS-X-Users.html http://www.seedpeer.me/details/6716808/[Lynda.com]-Up-and-Running-with-Amazon-Web-Services-[2013,-ENG].html http://www.seedpeer.me/details/4593746/Lynda.com-Web-Form-Design-Best-Practices.html http://www.seedpeer.me/details/4850397/Lynda---Create-Your-First-Online-Store-with-Drupal-Commerce.html http://www.seedpeer.me/details/4850389/Lynda---Drupal-7-:-Essential-Training.html http://www.seedpeer.me/details/4850540/Lynda---Drupal-7-New-Features.html http://www.seedpeer.me/details/4850393/Lynda---Drupal-7-:-Reporting-and-Visualizing-Data.html http://www.seedpeer.me/details/5996422/Lynda---Up-and-Running-with-Backbone.js.html http://www.seedpeer.me/details/6971211/Lynda---Up-and-Running-with-CakePHP.html http://www.seedpeer.me/details/6666828/Packtpub-Beginning-Yii-[Video].html http://www.seedpeer.me/details/6666832/Packtpub-Building-a-Website-with-Drupal-[Video].html http://www.seedpeer.me/details/6668107/Packtpub-Drupal-7-Module-Development-[Video].html http://www.seedpeer.me/details/6668679/Packtpub-Learning-Joomla-3-Extension-Development-[Video].html http://www.seedpeer.me/details/7101071/Pluralsight---AngularJS-Fundamentals-[OGNADROL].html http://www.seedpeer.me/details/7268422/[Pluralsight]-AWS-Developer-Fundamentals-[2013,-ENG].html http://www.seedpeer.me/details/6695354/Pluralsight---Beginning-HTML5-Game-Development-With-Quintus.html http://www.seedpeer.me/details/6370939/Pluralsight---Cisco-CCNA-WAN-Technologies---Learn-wide-area-network-WAN-technologies-and-configuration.html http://www.seedpeer.me/details/6383616/Pluralsight-Introduction-to-Spring-MVC2013.html http://www.seedpeer.me/details/6228297/Pluralsight---Introduction-to-the-Facebook-Graph-API.html http://www.seedpeer.me/details/6294391/Pluralsight---Optimizing-and-Managing-Distributed-Systems-on-AWS-2013.html http://www.seedpeer.me/details/6698563/[Pluralsight]-Sublime-Text-3-From-Scratch-[2013,-ENG].html http://www.seedpeer.me/details/5056370/Tutsplus---Advanced-Backbone-Patterns-and-Techniques-2012.html http://www.seedpeer.me/details/7233352/Tutsplus---Become-a-Professional-JavaScript-Developer-Basics.html http://www.seedpeer.me/details/4848277/TutsPlus---Build-Web-Apps-in-Node-and-Express.html http://www.seedpeer.me/details/5683153/Tutsplus---Catch-Up-with-Ruby-on-Rails-4.html http://www.seedpeer.me/details/4918947/TutsPlus---CodeIgniter-Essentials.html http://www.seedpeer.me/details/5069781/TutsPlus---Connected-to-the-Backbone.html http://www.seedpeer.me/details/5513056/Tutsplus---Designing-Professional-Resumes.html http://www.seedpeer.me/details/5706815/Tutsplus-Easier-JavaScript-Apps-with-AngularJS.html http://www.seedpeer.me/details/6462415/TutsPlus---Easier-JavaScript-with-TypeScript.html http://www.seedpeer.me/details/5868293/TutsPlus---Getting-Started-With-Windows-8-Development-Using-HTML,-CSS-&-JavaScript-V413HAV.html http://www.seedpeer.me/details/6150521/TutsPlus-HTML5-Video-Essentials-PRODEV.html http://www.seedpeer.me/details/4841911/TutsPlus---JavaScript-Testing-With-Jasmine.html http://www.seedpeer.me/details/6593486/TutsPlus---Less-is-More.html http://www.seedpeer.me/details/6571637/TutsPlus---Modern-Testing-in-PHP-with-Codeception.html http://www.seedpeer.me/details/6095651/Tutsplus---Parallax-Scrolling-for-Web-Design.html http://www.seedpeer.me/details/6574591/TutsPlus---Say-Yo-to-Yeoman.html http://www.seedpeer.me/details/4811335/Tutsplus---Test-Driven-Development-in-Ruby.html http://www.seedpeer.me/details/6268980/TutsPlus-Test-Driven-Development-With-CoffeeScript-and-Jasmine.html http://www.seedpeer.me/details/6185755/TutsPlus---The-MVC-Mindser-Jeffery-Way---ICARUS.html http://www.seedpeer.me/details/5024493/TutsPlus---Venture-Into-Vim.html http://www.seedpeer.me/details/6286416/Tutsplus---Vim-for-Advanced-Users.html http://www.seedpeer.me/details/6585031/Tutsplus---WordPress-Hackers-Guide-to-the-Galaxy.html http://www.seedpeer.me/details/4848477/TutsPlus---Writing-Modular-JavaScript.html @giansalex Owner Author giansalex commented on 26 Feb 2018 • SOLID http://www.allitebooks.com/beginning-solid-principles-and-design-patterns-for-asp-net-developers/ @giansalex Owner Author giansalex commented on 7 Mar 2018 Udemy: AWS Arquitecto de Soluciones Certificado Asociado https://mega.co.nz/#!ZzhGWSAL!wuthFca0SdJBjmaP5lFX0QF6PeMsrdclKFXlZL1Rsi4 Pass: gratismas.org @giansalex Owner Author giansalex commented on 7 Mar 2018 Go lang Complete https://www.freetutorials.us/wp-content/uploads/2017/11/FreeTutorials.Us-Udemy-go-the-complete-developers-guide.torrent @GCPBigData GCPBigData commented on 15 Jul 2018 go books https://drive.google.com/open?id=1d6OsFAn8kpHCXtw0bcoYuyHqrAdGZva0 @freisrael freisrael commented on 14 Aug 2018 giansalex thanks for sharing. I am looking for learning phython with Joe Marini. It would be great if you post it. @FirstBoy1 FirstBoy1 commented on 25 May 2019 Can anyone provide this book "Getting started with Spring Framework: covers Spring 5" by " J Sharma (Author), Ashish Sarin ". Thanks in advance @okreka okreka commented on 31 May 2019 Can anyone provide "Windows Presentation Foundation Masterclass" course from Udemy. Thanks in advance @singhaltanvi singhaltanvi commented on 8 Aug 2019 can anyone provide 'sedimentology and petroleum geology' course from Udemy. Thanks in advance. @kumarsreenivas051 kumarsreenivas051 commented on 9 Sep 2019 Can anyone provide "Programming languages A,B and C" course from Coursera. Thanks in advance. @BrunoMoreno BrunoMoreno commented on 11 Sep 2019 The link for the torrents in piratebay, now is .org to the correct url. @sany2k8 sany2k8 commented on 24 Sep 2019 Can anyone add this The Complete Hands-On Course to Master Apache Airflow @pharaoh1 pharaoh1 commented on 30 Sep 2019 can you pls add this course to your list https://www.udemy.com/course/advanced-python3/ @SushantDhote936 SushantDhote936 commented on 1 Oct 2019 Can you add Plural Sight CISSP @allayGerald allayGerald commented on 1 Oct 2019 open directive for lynda courses: https://drive.google.com/drive/folders/1zQan1cq1ZnqXmueRF5IqKoOtpFxl6Y4G @ezekielskottarathil ezekielskottarathil commented on 3 Oct 2019 can anyone provide 'sedimentology and petroleum geology' course from Udemy. Thanks in advance. "wrong place boy" @pulkitd2699 pulkitd2699 commented on 8 Oct 2019 Does anyone has a link for 'Cyber security: Python and web applications' course? Thanks @mohanrajrc mohanrajrc commented on 19 Oct 2019 • Can anyone provide torrent file for Mastering React By Mosh Hamedani. Thanks https://codewithmosh.com/p/mastering-react @evilprince2009 evilprince2009 commented on 27 Oct 2019 Can you please add these two below ? https://codewithmosh.com/p/the-ultimate-java-mastery-series https://codewithmosh.com/p/data-structures-algorithms-part-2 @nunusandio nunusandio commented on 30 Oct 2019 Can anyone post torrent file for ASP.NET Authentication: The Big Picture https://app.pluralsight.com/library/courses/aspdotnet-authentication-big-picture/table-of-contents @EslamElmadny EslamElmadny commented on 9 Dec 2019 Can you please add these two below ? https://codewithmosh.com/p/the-ultimate-java-mastery-series https://codewithmosh.com/p/data-structures-algorithms-part-2 any luck ? @Genius-K-SL Genius-K-SL commented on 14 Dec 2019 hay brother! do you have html5 game development with javascript course ? @Genius-K-SL Genius-K-SL commented on 14 Dec 2019 This link is not working brother! http://www.seedpeer.me/details/4657790/Lynda.com-Building-Facebook-Applications-with-HTML-and-JavaScript.html @smithtuka smithtuka commented on 20 Dec 2019 Can you please add these two below ? https://codewithmosh.com/p/the-ultimate-java-mastery-series https://codewithmosh.com/p/data-structures-algorithms-part-2 any luck ? Has this come through by any chances? @AbdOoSaed AbdOoSaed commented on 22 Dec 2019 Can you please add these two below ? https://codewithmosh.com/p/the-ultimate-java-mastery-series https://codewithmosh.com/p/data-structures-algorithms-part-2 any luck ? Has this come through by any chances? fff @EslamElmadny EslamElmadny commented on 23 Dec 2019 • Can you please add these two below ? https://codewithmosh.com/p/the-ultimate-java-mastery-series https://codewithmosh.com/p/data-structures-algorithms-part-2 any luck ? Has this come through by any chances? fff data-structures-algorithms-part-2 https://drive.google.com/open?id=1oYYdPp4MVVk7ZzZL6rLepFe33IjXtkqj @jedi2610 jedi2610 commented on 27 Dec 2019 Can anyone provide me with Code with Mosh's Ultimate Java Mastery Series link? plis @InnocentZaib InnocentZaib commented on 31 Dec 2019 Please provide the link of codewithmosh The ultimate data structures and algorithms Bundle the link is given below. Please give me the torrnet file or link to download https://codewithmosh.com/p/data-structures-algorithms @edward-teixeira edward-teixeira commented on 1 Jan 2020 Please provide the link of codewithmosh The ultimate data structures and algorithms Bundle the link is given below. Please give me the torrnet file or link to download https://codewithmosh.com/p/data-structures-algorithms Yea i'm looking for it too @kaneyxx kaneyxx commented on 1 Jan Can you please add these two below ? https://codewithmosh.com/p/the-ultimate-java-mastery-series https://codewithmosh.com/p/data-structures-algorithms-part-2 any luck ? Has this come through by any chances? fff data-structures-algorithms-part-2 https://drive.google.com/open?id=1oYYdPp4MVVk7ZzZL6rLepFe33IjXtkqj could you please share the part-1 & part-3? @edward-teixeira edward-teixeira commented on 2 Jan Can you please add these two below ? https://codewithmosh.com/p/the-ultimate-java-mastery-series https://codewithmosh.com/p/data-structures-algorithms-part-2 any luck ? Has this come through by any chances? fff data-structures-algorithms-part-2 https://drive.google.com/open?id=1oYYdPp4MVVk7ZzZL6rLepFe33IjXtkqj Can you share part 1 and 3? @ravisharmaa ravisharmaa commented on 7 Jan Please add this . https://www.letsbuildthatapp.com/course/AppStore-JSON-APIs @WaleedAlrashed WaleedAlrashed commented on 13 Jan This one kindly. https://www.udemy.com/course/flutter-build-a-complex-android-and-ios-apps-using-firestore/ @Sopheakmorm Sopheakmorm commented on 19 Jan Anyone have this course: https://www.udemy.com/course/mcsa-web-application-practice-test70-480-70-483-70-486 @EslamElmadny EslamElmadny commented on 19 Jan Anyone have this course: https://www.udemy.com/course/mcsa-web-application-practice-test70-480-70-483-70-486 +1 @EslamElmadny EslamElmadny commented on 20 Jan Can you please add these two below ? https://codewithmosh.com/p/the-ultimate-java-mastery-series https://codewithmosh.com/p/data-structures-algorithms-part-2 any luck ? Has this come through by any chances? fff data-structures-algorithms-part-2 https://drive.google.com/open?id=1oYYdPp4MVVk7ZzZL6rLepFe33IjXtkqj Can you share part 1 and 3? https://vminhsang.name.vn/category/it-courses/codewithmosh/ this link includes almost all mosh courses @mohanrajrc mohanrajrc commented on 22 Jan Can you please add these two below ? https://codewithmosh.com/p/the-ultimate-java-mastery-series https://codewithmosh.com/p/data-structures-algorithms-part-2 any luck ? Has this come through by any chances? fff data-structures-algorithms-part-2 https://drive.google.com/open?id=1oYYdPp4MVVk7ZzZL6rLepFe33IjXtkqj Can you share part 1 and 3? https://vminhsang.name.vn/category/it-courses/codewithmosh/ this link includes almost all mosh courses Yes. Java mastery and Data Structures 1, 2, 3 are available in this site. free download. @shihab122 shihab122 commented on 22 Jan Please give me the torrnet file or link to download The Ultimate Design Patterns @EslamElmadny EslamElmadny commented on 22 Jan • Please give me the torrnet file or link to download The Ultimate Design Patterns Waiting for it also :D @K-wachira K-wachira commented on 23 Jan Can you please add these two below ? https://codewithmosh.com/p/the-ultimate-java-mastery-series https://codewithmosh.com/p/data-structures-algorithms-part-2 any luck ? Has this come through by any chances? fff data-structures-algorithms-part-2 https://drive.google.com/open?id=1oYYdPp4MVVk7ZzZL6rLepFe33IjXtkqj Can you share part 1 and 3? https://vminhsang.name.vn/category/it-courses/codewithmosh/ this link includes almost all mosh courses Yes. Java mastery and Data Structures 1, 2, 3 are available in this site. free download. You are a saviour .. Altho i feel bad i cant really buy the course... its really good @msdyn95 msdyn95 commented 25 days ago • Please give me the torrent file or link to download https://codewithmosh.com/p/design-patterns https://coursedownloader.net/code-with-mosh-the-ultimate-design-patterns-part-1/ https://coursedownloader.net/code-with-mosh-the-ultimate-design-patterns-part-2/ @K-wachira K-wachira commented 23 days ago This one kindly. https://www.udemy.com/course/flutter-build-a-complex-android-and-ios-apps-using-firestore/ Hey did you find this one? @edward-teixeira edward-teixeira commented 22 days ago Please give me the torrent file or link to download https://codewithmosh.com/p/design-patterns https://coursedownloader.net/code-with-mosh-the-ultimate-design-patterns-part-1/ https://coursedownloader.net/code-with-mosh-the-ultimate-design-patterns-part-2/ Did you find those? @msdyn95 msdyn95 commented 21 days ago Please give me the torrent file or link to download https://codewithmosh.com/p/design-patterns https://coursedownloader.net/code-with-mosh-the-ultimate-design-patterns-part-1/ https://coursedownloader.net/code-with-mosh-the-ultimate-design-patterns-part-2/ Did you find those? unfortunately not. @edward-teixeira edward-teixeira commented 20 days ago Please give me the torrent file or link to download https://codewithmosh.com/p/design-patterns https://coursedownloader.net/code-with-mosh-the-ultimate-design-patterns-part-1/ https://coursedownloader.net/code-with-mosh-the-ultimate-design-patterns-part-2/ Did you find those? unfortunately not. Found it ! https://vminhsang.name.vn/category/it-courses/codewithmosh/ @ZainA14 ZainA14 commented 16 days ago • Can someone please link me to this mosh course for torrent or direct download link https://codewithmosh.com/p/the-ultimate-full-stack-net-developer-bundle @khushiigupta khushiigupta commented 9 days ago Can any one please provide me link for jenkins so that I can learn as al as possible to join this conversation on GitHub. Already have an account? Sign in to comment © 2020 GitHub, Inc. Terms Privacy Security Status Help Contact GitHub Pricing API Training Blog About
cybergis
One line code to get any remote sensing foundation model embeddings for any place and any time
This project has been migrated to OKX Labs Foundation. This project will be retained for one year and deleted after one year.
sanusanth
What is Python? Executive Summary Python is an interpreted, object-oriented, high-level programming language with dynamic semantics. Its high-level built in data structures, combined with dynamic typing and dynamic binding, make it very attractive for Rapid Application Development, as well as for use as a scripting or glue language to connect existing components together. Python's simple, easy to learn syntax emphasizes readability and therefore reduces the cost of program maintenance. Python supports modules and packages, which encourages program modularity and code reuse. The Python interpreter and the extensive standard library are available in source or binary form without charge for all major platforms, and can be freely distributed. Often, programmers fall in love with Python because of the increased productivity it provides. Since there is no compilation step, the edit-test-debug cycle is incredibly fast. Debugging Python programs is easy: a bug or bad input will never cause a segmentation fault. Instead, when the interpreter discovers an error, it raises an exception. When the program doesn't catch the exception, the interpreter prints a stack trace. A source level debugger allows inspection of local and global variables, evaluation of arbitrary expressions, setting breakpoints, stepping through the code a line at a time, and so on. The debugger is written in Python itself, testifying to Python's introspective power. On the other hand, often the quickest way to debug a program is to add a few print statements to the source: the fast edit-test-debug cycle makes this simple approach very effective. What is Python? Python is a popular programming language. It was created by Guido van Rossum, and released in 1991. It is used for: web development (server-side), software development, mathematics, system scripting. What can Python do? Python can be used on a server to create web applications. Python can be used alongside software to create workflows. Python can connect to database systems. It can also read and modify files. Python can be used to handle big data and perform complex mathematics. Python can be used for rapid prototyping, or for production-ready software development. Why Python? Python works on different platforms (Windows, Mac, Linux, Raspberry Pi, etc). Python has a simple syntax similar to the English language. Python has syntax that allows developers to write programs with fewer lines than some other programming languages. Python runs on an interpreter system, meaning that code can be executed as soon as it is written. This means that prototyping can be very quick. Python can be treated in a procedural way, an object-oriented way or a functional way. Good to know The most recent major version of Python is Python 3, which we shall be using in this tutorial. However, Python 2, although not being updated with anything other than security updates, is still quite popular. In this tutorial Python will be written in a text editor. It is possible to write Python in an Integrated Development Environment, such as Thonny, Pycharm, Netbeans or Eclipse which are particularly useful when managing larger collections of Python files. Python Syntax compared to other programming languages Python was designed for readability, and has some similarities to the English language with influence from mathematics. Python uses new lines to complete a command, as opposed to other programming languages which often use semicolons or parentheses. Python relies on indentation, using whitespace, to define scope; such as the scope of loops, functions and classes. Other programming languages often use curly-brackets for this purpose. Applications for Python Python is used in many application domains. Here's a sampling. The Python Package Index lists thousands of third party modules for Python. Web and Internet Development Python offers many choices for web development: Frameworks such as Django and Pyramid. Micro-frameworks such as Flask and Bottle. Advanced content management systems such as Plone and django CMS. Python's standard library supports many Internet protocols: HTML and XML JSON E-mail processing. Support for FTP, IMAP, and other Internet protocols. Easy-to-use socket interface. And the Package Index has yet more libraries: Requests, a powerful HTTP client library. Beautiful Soup, an HTML parser that can handle all sorts of oddball HTML. Feedparser for parsing RSS/Atom feeds. Paramiko, implementing the SSH2 protocol. Twisted Python, a framework for asynchronous network programming. Scientific and Numeric Python is widely used in scientific and numeric computing: SciPy is a collection of packages for mathematics, science, and engineering. Pandas is a data analysis and modeling library. IPython is a powerful interactive shell that features easy editing and recording of a work session, and supports visualizations and parallel computing. The Software Carpentry Course teaches basic skills for scientific computing, running bootcamps and providing open-access teaching materials. Education Python is a superb language for teaching programming, both at the introductory level and in more advanced courses. Books such as How to Think Like a Computer Scientist, Python Programming: An Introduction to Computer Science, and Practical Programming. The Education Special Interest Group is a good place to discuss teaching issues. Desktop GUIs The Tk GUI library is included with most binary distributions of Python. Some toolkits that are usable on several platforms are available separately: wxWidgets Kivy, for writing multitouch applications. Qt via pyqt or pyside Platform-specific toolkits are also available: GTK+ Microsoft Foundation Classes through the win32 extensions Software Development Python is often used as a support language for software developers, for build control and management, testing, and in many other ways. SCons for build control. Buildbot and Apache Gump for automated continuous compilation and testing. Roundup or Trac for bug tracking and project management. Business Applications Python is also used to build ERP and e-commerce systems: Odoo is an all-in-one management software that offers a range of business applications that form a complete suite of enterprise management applications. Try ton is a three-tier high-level general purpose application platform.
zycgit
dbVisitor is a JDBC-based unified data access layer realizing "One API Access Any DataBase". Its Dual-Layer Architecture bridges RDBMS and NoSQL (MySQL, MongoDB) using standard APIs without new syntax, offering a flexible, abstraction-managed general data foundation for Java applications.
sanusanth
What is C#? C# is pronounced "C-Sharp". It is an object-oriented programming language created by Microsoft that runs on the .NET Framework. C# has roots from the C family, and the language is close to other popular languages like C++ and Java. The first version was released in year 2002. The latest version, C# 8, was released in September 2019. C# is a modern object-oriented programming language developed in 2000 by Anders Hejlsberg, the principal designer and lead architect at Microsoft. It is pronounced as "C-Sharp," inspired by the musical notation “♯” which stands for a note with a slightly higher pitch. As it’s considered an incremental compilation of the C++ language, the name C “sharp” seemed most appropriate. The sharp symbol, however, has been replaced by the keyboard friendly “#” as a suffix to “C” for purposes of programming. Although the code is very similar to C++, C# is newer and has grown fast with extensive support from Microsoft. The fact that it’s so similar to Java syntactically helps explain why it has emerged as one of the most popular programming languages today. C# is pronounced "C-Sharp". It is an object-oriented programming language created by Microsoft that runs on the .NET Framework. C# has roots from the C family, and the language is close to other popular languages like C++ and Java. The first version was released in year 2002. The latest version, C# 8, was released in September 2019. C# is used for: Mobile applications Desktop applications Web applications Web services Web sites Games VR Database applications And much, much more! An Introduction to C# Programming C# is a general-purpose, object-oriented programming language that is structured and easy to learn. It runs on Microsoft’s .Net Framework and can be compiled on a variety of computer platforms. As the syntax is simple and easy to learn, developers familiar with C, C++, or Java have found a comfort zone within C#. C# is a boon for developers who want to build a wide range of applications on the .NET Framework—Windows applications, Web applications, and Web services—in addition to building mobile apps, Windows Store apps, and enterprise software. It is thus considered a powerful programming language and features in every developer’s cache of tools. Although first released in 2002, when it was introduced with .NET Framework 1.0, the C# language has evolved a great deal since then. The most recent version is C# 8.0, available in preview as part of Visual Studio. To get access to all of the new language features, you would need to install the latest preview version of .NET Core 3.0. C# is used for: Mobile applications Desktop applications Web applications Web services Web sites Games VR Database applications And much, much more! Why Use C#? It is one of the most popular programming language in the world It is easy to learn and simple to use It has a huge community support C# is an object oriented language which gives a clear structure to programs and allows code to be reused, lowering development costs. As C# is close to C, C++ and Java, it makes it easy for programmers to switch to C# or vice versa. The C# Environment You need the .NET Framework and an IDE (integrated development environment) to work with the C# language. The .NET Framework The .NET Framework platform of the Windows OS is required to write web and desktop-based applications using not only C# but also Visual Basic and Jscript, as the platform provides language interoperability. Besides, the .Net Framework allows C# to communicate with any of the other common languages, such as C++, Jscript, COBOL, and so on. IDEs Microsoft provides various IDEs for C# programming: Visual Studio 2010 (VS) Visual Studio Express Visual Web Developer Visual Studio Code (VSC) The C# source code files can be written using a basic text editor, like Notepad, and compiled using the command-line compiler of the .NET Framework. Alternative open-source versions of the .Net Framework can work on other operating systems as well. For instance, the Mono has a C# compiler and runs on several operating systems, including Linux, Mac, Android, BSD, iOS, Windows, Solaris, and UNIX. This brings enhanced development tools to the developer. As C# is part of the .Net Framework platform, it has access to its enormous library of codes and components, such as Common Language Runtime (CLR), the .Net Framework Class Library, Common Language Specification, Common Type System, Metadata and Assemblies, Windows Forms, ASP.Net and ASP.Net AJAX, Windows Workflow Foundation (WF), Windows Communication Foundation (WCF), and LINQ. C# and Java C# and Java are high-level programming languages that share several similarities (as well as many differences). They are both object-oriented languages much influenced by C++. But while C# is suitable for application development in the Microsoft ecosystem from the front, Java is considered best for client-side web applications. Also, while C# has many tools for programming, Java has a larger arsenal of tools to choose from in IDEs and Text Editors. C# is used for virtual reality projects like games, mobile, and web applications. It is built specifically for Microsoft platforms and several non-Microsoft-based operating systems, like the Mono Project that works with Linux and OS X. Java is used for creating messaging applications and developing web-based and enterprise-based applications in open-source ecosystems. Both C# and Java support arrays. However, each language uses them differently. In C#, arrays are a specialization of the system; in Java, they are a direct specialization of the object. The C# programming language executes on the CLR. The source code is interpreted into bytecode, which is further compiled by the CLR. Java runs on any platform with the assistance of JRE (Java Runtime Environment). The written source code is first compiled into bytecode and then converted into machine code to be executed on a JRE. C# and C++ Although C# and C++ are both C-based languages with similar code, there are some differences. For one, C# is considered a component-oriented programming language, while C++ is a partial object-oriented language. Also, while both languages are compiled languages, C# compiles to CLR and is interpreted by.NET, but C++ compiles to machine code. The size of binaries in C# is much larger than in C++. Other differences between the two include the following: C# gives compiler errors and warnings, but C++ doesn’t support warnings, which may cause damage to the OS. C# runs in a virtual machine for automatic memory management. C++ requires you to manage memory manually. C# can create Windows, .NET, web, desktop, and mobile applications, but not stand-alone apps. C++ can create server-side, stand-alone, and console applications as it can work directly with the hardware. C++ can be used on any platform, while C# is targeted toward Windows OS. Generally, C++ being faster than C#, the former is preferred for applications where performance is essential. Features of C# The C# programming language has many features that make it more useful and unique when compared to other languages, including: Object-oriented language Being object-oriented, C# allows the creation of modular applications and reusable codes, an advantage over C++. As an object-oriented language, C# makes development and maintenance easier when project size grows. It supports all three object-oriented features: data encapsulation, inheritance, interfaces, and polymorphism. Simplicity C# is a simple language with a structured approach to problem-solving. Unsafe operations, like direct memory manipulation, are not allowed. Speed The compilation and execution time in C# is very powerful and fast. A Modern programming language C# programming is used for building scalable and interoperable applications with support for modern features like automatic garbage collection, error handling, debugging, and robust security. It has built-in support for a web service to be invoked from any app running on any platform. Type-safe Arrays and objects are zero base indexed and bound checked. There is an automatic checking of the overflow of types. The C# type safety instances support robust programming. Interoperability Language interoperability of C# maximizes code reuse for the efficiency of the development process. C# programs can work upon almost anything as a program can call out any native API. Consistency Its unified type system enables developers to extend the type system simply and easily for consistent behavior. Updateable C# is automatically updateable. Its versioning support enables complex frameworks to be developed and evolved. Component oriented C# supports component-oriented programming through the concepts of properties, methods, events, and attributes for self-contained and self-describing components of functionality for robust and scalable applications. Structured Programming Language The structured design and modularization in C# break a problem into parts, using functions for easy implementation to solve significant problems. Rich Library C# has a standard library with many inbuilt functions for easy and fast development. Prerequisites for Learning C# Basic knowledge of C or C++ or any programming language or programming fundamentals. Additionally, the OOP concept makes for a short learning curve of C#. Advantages of C# There are many advantages to the C# language that makes it a useful programming language compared to other languages like Java, C, or C++. These include: Being an object-oriented language, C# allows you to create modular, maintainable applications and reusable codes Familiar syntax Easy to develop as it has a rich class of libraries for smooth implementation of functions Enhanced integration as an application written in .NET will integrate and interpret better when compared to other NET technologies As C# runs on CLR, it makes it easy to integrate with components written in other languages It’s safe, with no data loss as there is no type-conversion so that you can write secure codes The automatic garbage collection keeps the system clean and doesn’t hang it during execution As your machine has to install the .NET Framework to run C#, it supports cross-platform Strong memory backup prevents memory leakage Programming support of the Microsoft ecosystem makes development easy and seamless Low maintenance cost, as C# can develop iOS, Android, and Windows Phone native apps The syntax is similar to C, C++, and Java, which makes it easier to learn and work with C# Useful as it can develop iOS, Android, and Windows Phone native apps with the Xamarin Framework C# is the most powerful programming language for the .NET Framework Fast development as C# is open source steered by Microsoft with access to open source projects and tools on Github, and many active communities contributing to the improvement What Can C Sharp Do for You? C# can be used to develop a wide range of: Windows client applications Windows libraries and components Windows services Web applications Native iOS and Android mobile apps Azure cloud applications and services Gaming consoles and gaming systems Video and virtual reality games Interoperability software like SharePoint Enterprise software Backend services and database programs AI and ML applications Distributed applications Hardware-level programming Virus and malware software GUI-based applications IoT devices Blockchain and distributed ledger technology C# Programming for Beginners: Introduction, Features and Applications By Simplilearn Last updated on Jan 20, 2020674 C# Programming for Beginners As a programmer, you’re motivated to master the most popular languages that will give you an edge in your career. There’s a vast number of programming languages that you can learn, but how do you know which is the most useful? If you know C and C++, do you need to learn C# as well? How similar is C# to Java? Does it become more comfortable for you to learn C# if you already know Java? Every developer and wannabe programmer asks these types of questions. So let us explore C# programming: how it evolved as an extension of C and why you need to learn it as a part of the Master’s Program in integrated DevOps for server-side execution. Are you a web developer or someone interested to build a website? Enroll for the Javascript Certification Training. Check out the course preview now! What is C#? C# is a modern object-oriented programming language developed in 2000 by Anders Hejlsberg, the principal designer and lead architect at Microsoft. It is pronounced as "C-Sharp," inspired by the musical notation “♯” which stands for a note with a slightly higher pitch. As it’s considered an incremental compilation of the C++ language, the name C “sharp” seemed most appropriate. The sharp symbol, however, has been replaced by the keyboard friendly “#” as a suffix to “C” for purposes of programming. Although the code is very similar to C++, C# is newer and has grown fast with extensive support from Microsoft. The fact that it’s so similar to Java syntactically helps explain why it has emerged as one of the most popular programming languages today. An Introduction to C# Programming C# is a general-purpose, object-oriented programming language that is structured and easy to learn. It runs on Microsoft’s .Net Framework and can be compiled on a variety of computer platforms. As the syntax is simple and easy to learn, developers familiar with C, C++, or Java have found a comfort zone within C#. C# is a boon for developers who want to build a wide range of applications on the .NET Framework—Windows applications, Web applications, and Web services—in addition to building mobile apps, Windows Store apps, and enterprise software. It is thus considered a powerful programming language and features in every developer’s cache of tools. Although first released in 2002, when it was introduced with .NET Framework 1.0, the C# language has evolved a great deal since then. The most recent version is C# 8.0, available in preview as part of Visual Studio. To get access to all of the new language features, you would need to install the latest preview version of .NET Core 3.0. The C# Environment You need the .NET Framework and an IDE (integrated development environment) to work with the C# language. The .NET Framework The .NET Framework platform of the Windows OS is required to write web and desktop-based applications using not only C# but also Visual Basic and Jscript, as the platform provides language interoperability. Besides, the .Net Framework allows C# to communicate with any of the other common languages, such as C++, Jscript, COBOL, and so on. IDEs Microsoft provides various IDEs for C# programming: Visual Studio 2010 (VS) Visual Studio Express Visual Web Developer Visual Studio Code (VSC) The C# source code files can be written using a basic text editor, like Notepad, and compiled using the command-line compiler of the .NET Framework. Alternative open-source versions of the .Net Framework can work on other operating systems as well. For instance, the Mono has a C# compiler and runs on several operating systems, including Linux, Mac, Android, BSD, iOS, Windows, Solaris, and UNIX. This brings enhanced development tools to the developer. As C# is part of the .Net Framework platform, it has access to its enormous library of codes and components, such as Common Language Runtime (CLR), the .Net Framework Class Library, Common Language Specification, Common Type System, Metadata and Assemblies, Windows Forms, ASP.Net and ASP.Net AJAX, Windows Workflow Foundation (WF), Windows Communication Foundation (WCF), and LINQ. C# and Java C# and Java are high-level programming languages that share several similarities (as well as many differences). They are both object-oriented languages much influenced by C++. But while C# is suitable for application development in the Microsoft ecosystem from the front, Java is considered best for client-side web applications. Also, while C# has many tools for programming, Java has a larger arsenal of tools to choose from in IDEs and Text Editors. C# is used for virtual reality projects like games, mobile, and web applications. It is built specifically for Microsoft platforms and several non-Microsoft-based operating systems, like the Mono Project that works with Linux and OS X. Java is used for creating messaging applications and developing web-based and enterprise-based applications in open-source ecosystems. Both C# and Java support arrays. However, each language uses them differently. In C#, arrays are a specialization of the system; in Java, they are a direct specialization of the object. The C# programming language executes on the CLR. The source code is interpreted into bytecode, which is further compiled by the CLR. Java runs on any platform with the assistance of JRE (Java Runtime Environment). The written source code is first compiled into bytecode and then converted into machine code to be executed on a JRE. C# and C++ Although C# and C++ are both C-based languages with similar code, there are some differences. For one, C# is considered a component-oriented programming language, while C++ is a partial object-oriented language. Also, while both languages are compiled languages, C# compiles to CLR and is interpreted by.NET, but C++ compiles to machine code. The size of binaries in C# is much larger than in C++. Other differences between the two include the following: C# gives compiler errors and warnings, but C++ doesn’t support warnings, which may cause damage to the OS. C# runs in a virtual machine for automatic memory management. C++ requires you to manage memory manually. C# can create Windows, .NET, web, desktop, and mobile applications, but not stand-alone apps. C++ can create server-side, stand-alone, and console applications as it can work directly with the hardware. C++ can be used on any platform, while C# is targeted toward Windows OS. Generally, C++ being faster than C#, the former is preferred for applications where performance is essential. Features of C# The C# programming language has many features that make it more useful and unique when compared to other languages, including: Object-oriented language Being object-oriented, C# allows the creation of modular applications and reusable codes, an advantage over C++. As an object-oriented language, C# makes development and maintenance easier when project size grows. It supports all three object-oriented features: data encapsulation, inheritance, interfaces, and polymorphism. Simplicity C# is a simple language with a structured approach to problem-solving. Unsafe operations, like direct memory manipulation, are not allowed. Speed The compilation and execution time in C# is very powerful and fast. A Modern programming language C# programming is used for building scalable and interoperable applications with support for modern features like automatic garbage collection, error handling, debugging, and robust security. It has built-in support for a web service to be invoked from any app running on any platform. Type-safe Arrays and objects are zero base indexed and bound checked. There is an automatic checking of the overflow of types. The C# type safety instances support robust programming. Interoperability Language interoperability of C# maximizes code reuse for the efficiency of the development process. C# programs can work upon almost anything as a program can call out any native API. Consistency Its unified type system enables developers to extend the type system simply and easily for consistent behavior. Updateable C# is automatically updateable. Its versioning support enables complex frameworks to be developed and evolved. Component oriented C# supports component-oriented programming through the concepts of properties, methods, events, and attributes for self-contained and self-describing components of functionality for robust and scalable applications. Structured Programming Language The structured design and modularization in C# break a problem into parts, using functions for easy implementation to solve significant problems. Rich Library C# has a standard library with many inbuilt functions for easy and fast development. Full Stack Java Developer Course The Gateway to Master Web DevelopmentEXPLORE COURSEFull Stack Java Developer Course Prerequisites for Learning C# Basic knowledge of C or C++ or any programming language or programming fundamentals. Additionally, the OOP concept makes for a short learning curve of C#. Advantages of C# There are many advantages to the C# language that makes it a useful programming language compared to other languages like Java, C, or C++. These include: Being an object-oriented language, C# allows you to create modular, maintainable applications and reusable codes Familiar syntax Easy to develop as it has a rich class of libraries for smooth implementation of functions Enhanced integration as an application written in .NET will integrate and interpret better when compared to other NET technologies As C# runs on CLR, it makes it easy to integrate with components written in other languages It’s safe, with no data loss as there is no type-conversion so that you can write secure codes The automatic garbage collection keeps the system clean and doesn’t hang it during execution As your machine has to install the .NET Framework to run C#, it supports cross-platform Strong memory backup prevents memory leakage Programming support of the Microsoft ecosystem makes development easy and seamless Low maintenance cost, as C# can develop iOS, Android, and Windows Phone native apps The syntax is similar to C, C++, and Java, which makes it easier to learn and work with C# Useful as it can develop iOS, Android, and Windows Phone native apps with the Xamarin Framework C# is the most powerful programming language for the .NET Framework Fast development as C# is open source steered by Microsoft with access to open source projects and tools on Github, and many active communities contributing to the improvement What Can C Sharp Do for You? C# can be used to develop a wide range of: Windows client applications Windows libraries and components Windows services Web applications Native iOS and Android mobile apps Azure cloud applications and services Gaming consoles and gaming systems Video and virtual reality games Interoperability software like SharePoint Enterprise software Backend services and database programs AI and ML applications Distributed applications Hardware-level programming Virus and malware software GUI-based applications IoT devices Blockchain and distributed ledger technology Who Should Learn the C# Programming Language and Why? C# is one of the most popular programming languages as it can be used for a variety of applications: mobile apps, game development, and enterprise software. What’s more, the C# 8.0 version is packed with several new features and enhancements to the C# language that can change the way developers write their C# code. The most important new features available are ‘null reference types,’ enhanced ‘pattern matching,’ and ‘async streams’ that help you to write more reliable and readable code. As you’re exposed to the fundamental programming concepts of C# in this course, you can work on projects that open the doors for you as a Full Stack Java Developer. So, upskill and master the C# language for a faster career trajectory and salary scope.
This project has been migrated to OKX Labs Foundation. This project will be retained for one year and deleted after one year.
Beingwizard
I am utilizing this repository to document my journey in learning about Cloud Computing with Microsoft Azure. I commenced this process on January 15, 2024. During this period, I am dedicating one hour to one & half year each day, including weekends, to gain a foundational understanding of various aspects of Cloud.
fabsgc
The Tweede Engine Framework is my third attempt to develop a cross-platform full game engine and game framework. It aims to provide one day a complete foundation for the development of real time graphical applications such as games
linkp2p
# This scripts is edited under the General Public License as defined by the Free software foundation. # This package is distributed in the hope that it will be useful, but without any warranty; It can be used and modified and shared but should be referenced to, it CANNOT be # sold or be used for a commercial-economical purpose. # See the details in the file LICENCE.txt that is situated in the folder of the script or visit http://gplv3.fsf.org/ ) # The discovery of One algorithm used in WPSPIN have been made parallely and previously by zhaochunsheng in a C. script named computepinC83A35. as i don't known C or # programming and found this out after coding the first version of WPS, this bash script doesn't use a dingle line of computepinC83A35. # But it had to be saved that zhaochunsheng found the main algorithm on Chinese access points months before I found it on a new Belkin N router, without knowing it works. # The page of the author is sadly down and i cannot link you to a straight source # This code wouldn't have been possible with the help and advices of antares_145, r00tnuLL and 1camaron1, thanks to them billion a billion time :) # It wouldn't have been possible neither without my beloved lampiweb.com work crew, maripuri, bentosouto, dirneet, betis-jesus, compota, errboricobueno, pinty_102 nad all users # greetings to crack-wifi.com familly, yasmine, M1ck3y, spawn, goliate, fuji, antares has been already credited, koala, noireaude, vances1, konik etc... and all users # greetings to auditoriaswireless.net and thanks to the big chief papones for the hosting and greetings to everybody # This code uses wps reaver that has to be installed on it own, reaver is a free software (http://code.google.com/p/reaver-wps/) (GPL2) by Tactical Network Solutions. Thanks to # them for this amazing work # You also need aircrack-ng, thanks to Mister X and kevin devine for providing the best suite ever (http://www.aircrack-ng.org/) # I would like also to thanks Stefan Viehbock for all is amazing work on wps (http://sviehb.wordpress.com/2011/12/27/wi-fi-protected-setup-pin-brute-force-vulnerability/) HOW TO USE WPSPIN? - Unzip the package that you download < unzip WPSPIN > - once situated in the created folder (cd WPSPIN) launch the script with < bash WPSPIN.sh > REQUIREMENTS If you use WPSPIN as a simple generator no requierement. If you want to enjoy the scan and attack feature you need: - a wireless interface with a chipset compatible with mode monitor - aircrack-ng installed in yout system - WPS reaver installed you can visit crack-wifi.com, lampiweb.com and auditroias-wireless.net to get indormattion and help about WPSPIN and others issues like thiese ones Just follow the script, it is very simple CHANGELOG # 1.1 (10-12-2012) # - Support for PIN beginning with one or several 0 thanks to the data of atim and tresal. # - New MAC supported : 6A:C0:6F (HG566 default ESSID vodafoneXXXX ) # 1.2 (12/12/2012) # - Fixed output bugs in backtrack and other distributions # - Added support to the generic default PIN known # 1.3 (23/01/2013) # - New supported devices: # - 7 bSSID vodafoneXXXX (HG566a) > 6A:3D:FF / 6A:A8:E4 / 6A:C0:6F / 6A:D1:67 / 72:A8:E4 / 72:3D:FF / 72:53:D4 # - 2 bSSID WLAN_XXXX (PDG-A4001N de adbroadband) > 74:88:8B / A4:52:6F # - 2 new models affected: # 1) SWL (Samsung Wireless Link), default ESSID SEC_ LinkShare_XXXXXX. 2 known affected BSSID > 80:1F:02 / E4:7C:F9 # 2) Conceptronic c300brs4a (default ESSID C300BRS4A ) 1 BSSID known > 00:22:F7 # - Rules to check the validity of the mac address (thanks r00tnuLL and anteres_145 for your codes) # - More filter for some case where several default ssid are possible,check the difference between ssid and bssid for FTE for possibles mismatch... # - More information displayed when a target is selected # - Display and colours problems are definitively solved for all distributions, one version # - Rewriting of code (tanks to r00tnuLL, antares_145, goyfilms and 1camron1 for their advices and feed back) # 1.4 ( 22/05/2013) # - Complete Rewriting of code to provide new functions: # - Multi language # - A automated mode using wash and reaver # - Interfaces management (automatic if only one interface is present, acting as filter if no mode monitor is possible to reduce options) # - New supported bssid # - 2 news bssid for FTE-XXXX (HG532c) 34:6B:D3 and F8:3D:FF # - 17 new bssid for vodafone HG566a # 62:23:3D 62:3C:E4 62:3D:FF 62:55:9C 62:7D:5E 62:B6:86 62:C7:14 6A:23:3D 6A:3D:FF 6A:7D:5E 6A:C6:1F 6A:D1:5E 72:3D:FF 72:53:D4 72:55:9C 72:6B:D3 72:A8:E4 # - New supported devices ( 9 models ) # - TP-LINK > TD-W8961ND v2.1 default SSID TP-LINK_XXXXXX 3 known bssids ; F8:D1:11 B0:48:7A 64:70:02 # - EDIMAX > 3G-6200n and EDIMAX > 3G-6210n bssid ; 00:1F:1F defaukt SSID : default # - KOZUMI > K1500 and K1550 bssid : 00:26:CE # - Zyxel > P-870HNU-51B bssid : FC:F5:28 # - TP-LINK TP-LINK_XXXXXX TL-WA7510N bssid : 90:F6:52: # - SAGEM FAST 1704 > SAGEM_XXXX bssid : 7C:D3:4C: # - Bewan iBox V1.0 > one bssid 00:0C:C3 for two ssids with different defaukt PIN > DartyBox_XXX_X and TELE2BOX_XXXX
sanusanth
What is JavaScript and what does it do? Before you start learning something new, it’s important to understand exactly what it is and what it does. This is especially useful when it comes to mastering a new programming language. In simple terms, JavaScript is a programming language used to make websites interactive. If you think about the basic makeup of a website, you have HTML, which describes and defines the basic content and structure of the website, then you have CSS, which tells the browser how this HTML content should be displayed—determining things like color and font. With just HTML and CSS, you have a website that looks good but doesn’t actually do much. JavaScript brings the website to life by adding functionality. JavaScript is responsible for elements that the user can interact with, such as drop-down menus, modal windows, and contact forms. It is also used to create things like animations, video players, and interactive maps. Nowadays, JavaScript is an all-purpose programming language—meaning it runs across the entire software stack. The most popular application of JavaScript is on the client side (aka frontend), but since Node.js came on the scene, many people run JavaScript on the server side (aka backend) as well. When used on the client side, JavaScript code is read, interpreted, and executed in the user’s web browser. When used on the server side, it is run on a remote computer. You can learn more about the difference between frontend and backend programming here. JavaScript isn’t only used to create websites. It can also be used to build browser-based games and, with the help of certain frameworks, mobile apps for different operating systems. The creation of new libraries and frameworks is also making it possible to build backend programs with JavaScript, such as web apps and server apps. Is it still worth learning JavaScript in 2021? The world of web development is constantly moving. With so many new tools popping up all the time, it can be extremely difficult to know where you should focus your efforts. As an aspiring developer, you’ll want to make sure that what you’re learning is still relevant in today’s industry. If you’re having doubts about JavaScript, it’s important to know that, since its creation in 1995, JavaScript is pretty much everywhere on the web—and that’s not likely to change any time soon. According to the 2020 StackOverflow developer survey, JavaScript is the most commonly used programming language for the eighth year in a row. It is currently used by 94.5% of all websites and, despite originally being designed as a client-side language, JavaScript has now made its way to the server-side of websites (thanks to Node.js), mobile devices (thanks to React Native and Ionic) and desktop (courtesy of Electron). As long as people are interacting with the web, you can assume that JavaScript is highly relevant—there’s no doubt that this is a language worth knowing! With that in mind, let’s look at some of the key benefits of becoming a JavaScript expert. Why learn JavaScript? The most obvious reason for learning JavaScript is if you have hopes of becoming a web developer. Even if you haven’t got your heart set on a tech career, being proficient in JavaScript will enable you to build websites from scratch—a pretty useful skill to have in today’s job market! If you do want to become a web developer, here are some of the main reasons why you should learn JavaScript: JavaScript experts are versatile JavaScript is an extremely versatile language. Once you’ve mastered it, the possibilities are endless: you can code on the client-side (frontend) using Angular and on the server-side (backend) using Node.js. You can also develop web, mobile, and desktop apps using React, React Native, and Electron, and you can even get involved in machine learning. If you want to become a frontend developer, JavaScript is a prerequisite. However, that’s not the only career path open to you as a JavaScript expert. Mastering this key programming language could see you go on to work in full-stack development, games development, information security software engineering, machine learning, and artificial intelligence—to name just a few! Ultimately, if you want any kind of development or engineering career, proficiency in JavaScript is a must. JavaScript experts are in-demand (and well-paid) JavaScript is the most popular programming language in the world, so it’s no wonder that JavaScript is one of the most sought-after skills in the web development industry today. According to the Devskiller IT Skills and Hiring Report 2020, 72% of companies are looking to hire JavaScript experts. Enter the search term “JavaScript” on job site Indeed and you’ll find over 40,000 jobs requiring this skill (in the US). Run the same search on LinkedIn and the results are in excess of 125,000. At the same time, the global demand for JavaScript seems to outweigh the expertise available on the market. According to this 2018 HackerRank report, 48% of employers worldwide need developers with JavaScript skills, while only 42% of student developers claim to be proficient in JavaScript. And, in their most recent report for 2020, HackerRank once again reports that JavaScript is the most popular language that hiring mangers look for in a web developer candidate. Not only are JavaScript experts in demand—they are also well-paid. In the United States, JavaScript developers earn an average yearly salary of $111,953 per year. We’ve covered this topic in more detail in our JavaScript salary guide, but as you can see, learning JavaScript can really boost your earning potential as a developer. JavaScript is beginner-friendly Compared to many other programming languages, JavaScript offers one of the more beginner-friendly entry points into the world of coding. The great thing about JavaScript is that it comes installed on every modern web browser—there’s no need to set up any kind of development environment, which means you can start coding with JavaScript right away! Another advantage of learning JavaScript as your first programming language is that you get instant feedback; with a minimal amount of JavaScript code, you’ll immediately see visible results. There’s also a huge JavaScript community on sites like Stack Overflow, so you’ll find plenty of support as you learn. Not only is JavaScript beginner-friendly; it will also set you up with some extremely valuable transferable skills. JavaScript supports object-oriented, functional, and imperative styles of programming—skills which can be transferred to any new language you might learn later on, such as Python, Java, or C++. JavaScript provides a crucial introduction to key principles and practices that you’ll take with you throughout your career as a developer. Should you learn plain JavaScript first or can you skip to frameworks and libraries? When deciding whether or not to learn JavaScript, what you’re really asking is whether or not you should learn “vanilla” JavaScript. Vanilla JavaScript just means plain JavaScript without any libraries or frameworks. Let’s explore what this means in more detail now. What is meant by vanilla JavaScript, libraries, and frameworks? If you research the term “vanilla JavaScript”, you might run into some confusion; however, all you need to know is that vanilla JavaScript is used to refer to native, standards-based, non-extended JavaScript. There is no difference between vanilla JavaScript and JavaScript—it’s just there to emphasize the usage of plain JavaScript without the use of libraries and frameworks. So what are libraries and frameworks? JavaScript libraries and frameworks both contain sets of prewritten, ready-to-use JavaScript code—but they’re not the same thing. You can think of a framework as your blueprint for building a website: it gives you a structure to work from, and contains ready-made components and tools that help you to build certain elements much quicker than if you were to code them from scratch. Some popular JavaScript frameworks include Angular, React, Vue, and Node.js. Frameworks also contain libraries. Libraries are smaller than frameworks, and tend to be used for more specific cases. A JavaScript library contains sets of JavaScript code which can be called upon to implement certain functions and features. Let’s imagine you want to code a particular element into your website. You could write, say, ten lines of JavaScript from scratch—or you could take the condensed, ready-made version from your chosen JavaScript library. Some examples of JavaScript libraries include jQuery, Lodash, and Underscore. The easiest way to understand how frameworks and libraries work together is to imagine you are building a house. The framework provides the foundation and the structure, while the library enables you to add in ready-made components (like furniture) rather than building your own from scratch. You can learn more about the relationship between languages and libraries in this post explaining the main differences between JavaScript and jQuery. For now, let’s go back to our original question: How important is it to learn vanilla JavaScript? Should you learn vanilla JavaScript first? When it comes to learning JavaScript, it can be tempting to skip ahead to those time-saving frameworks and libraries we just talked about—and many developers do. However, there are many compelling arguments for learning plain JavaScript first. While JavaScript frameworks may help you get the job done quicker, there’s only so far you can go if you don’t understand the core concepts behind these frameworks. Frontend developer Abhishek Nagekar describes how not learning vanilla JavaScript came back to bite him when he started learning the JavaScript frameworks Node and Express: “As I went to write more and more code in Node and Express, I began to get stuck at even the tiniest problems. Suddenly, I was surrounded with words like callbacks, closures, event loop and prototype. It felt like I got a reintroduction to JavaScript, but this time, it was not a toddler playing in its cradle, it was something of a mysterious monster, challenging me on every other step for not having taken it seriously.” The above Tweet references a long-running joke within the developer community, and although it dates way back to 2015, it’s still highly relevant today. If you want to become a developer who can innovate, not just execute, you need to understand the underlying principles of the web—not just the shortcuts. This means learning vanilla JavaScript before you move on to frameworks. In fact, understanding plain JavaScript will help you later on when it comes to deciding whether to use a framework for a certain project, and if so, which framework to use. Why Study JavaScript? JavaScript is one of the 3 languages all web developers must learn: 1. HTML to define the content of web pages 2. CSS to specify the layout of web pages 3. JavaScript to program the behavior of web pages Learning Speed In this tutorial, the learning speed is your choice. Everything is up to you. If you are struggling, take a break, or re-read the material. Always make sure you understand all the "Try-it-Yourself" examples. The only way to become a clever programmer is to: Practice. Practice. Practice. Code. Code. Code ! Commonly Asked Questions How do I get JavaScript? Where can I download JavaScript? Is JavaScript Free? You don't have to get or download JavaScript. JavaScript is already running in your browser on your computer, on your tablet, and on your smart-phone. JavaScript is free to use for everyone.
Nate0634034090
[{"name":"Ethereum Mainnet","chain":"ETH","icon":"ethereum","rpc":["https://mainnet.infura.io/v3/${INFURA_API_KEY}","wss://mainnet.infura.io/ws/v3/${INFURA_API_KEY}","https://api.mycryptoapi.com/eth","https://cloudflare-eth.com"],"faucets":[],"nativeCurrency":{"name":"Ether","symbol":"ETH","decimals":18},"infoURL":"https://ethereum.org","shortName":"eth","chainId":1,"networkId":1,"slip44":60,"ens":{"registry":"0x00000000000C2E074eC69A0dFb2997BA6C7d2e1e"},"explorers":[{"name":"etherscan","url":"https://etherscan.io","standard":"EIP3091"}]},{"name":"Expanse Network","chain":"EXP","rpc":["https://node.expanse.tech"],"faucets":[],"nativeCurrency":{"name":"Expanse Network Ether","symbol":"EXP","decimals":18},"infoURL":"https://expanse.tech","shortName":"exp","chainId":2,"networkId":1,"slip44":40},{"name":"Ropsten","title":"Ethereum Testnet Ropsten","chain":"ETH","rpc":["https://ropsten.infura.io/v3/${INFURA_API_KEY}","wss://ropsten.infura.io/ws/v3/${INFURA_API_KEY}"],"faucets":["http://fauceth.komputing.org?chain=3&address=${ADDRESS}","https://faucet.ropsten.be?${ADDRESS}"],"nativeCurrency":{"name":"Ropsten Ether","symbol":"ROP","decimals":18},"infoURL":"https://github.com/ethereum/ropsten","shortName":"rop","chainId":3,"networkId":3,"ens":{"registry":"0x112234455c3a32fd11230c42e7bccd4a84e02010"},"explorers":[{"name":"etherscan","url":"https://ropsten.etherscan.io","standard":"EIP3091"}]},{"name":"Rinkeby","title":"Ethereum Testnet Rinkeby","chain":"ETH","rpc":["https://rinkeby.infura.io/v3/${INFURA_API_KEY}","wss://rinkeby.infura.io/ws/v3/${INFURA_API_KEY}"],"faucets":["http://fauceth.komputing.org?chain=4&address=${ADDRESS}","https://faucet.rinkeby.io"],"nativeCurrency":{"name":"Rinkeby Ether","symbol":"RIN","decimals":18},"infoURL":"https://www.rinkeby.io","shortName":"rin","chainId":4,"networkId":4,"ens":{"registry":"0xe7410170f87102df0055eb195163a03b7f2bff4a"},"explorers":[{"name":"etherscan-rinkeby","url":"https://rinkeby.etherscan.io","standard":"EIP3091"}]},{"name":"Görli","title":"Ethereum Testnet Görli","chain":"ETH","rpc":["https://goerli.infura.io/v3/${INFURA_API_KEY}","wss://goerli.infura.io/v3/${INFURA_API_KEY}","https://rpc.goerli.mudit.blog/"],"faucets":["http://fauceth.komputing.org?chain=5&address=${ADDRESS}","https://goerli-faucet.slock.it?address=${ADDRESS}","https://faucet.goerli.mudit.blog"],"nativeCurrency":{"name":"Görli Ether","symbol":"GOR","decimals":18},"infoURL":"https://goerli.net/#about","shortName":"gor","chainId":5,"networkId":5,"ens":{"registry":"0x112234455c3a32fd11230c42e7bccd4a84e02010"},"explorers":[{"name":"etherscan-goerli","url":"https://goerli.etherscan.io","standard":"EIP3091"}]},{"name":"Ethereum Classic Testnet Kotti","chain":"ETC","rpc":["https://www.ethercluster.com/kotti"],"faucets":[],"nativeCurrency":{"name":"Kotti Ether","symbol":"KOT","decimals":18},"infoURL":"https://explorer.jade.builders/?network=kotti","shortName":"kot","chainId":6,"networkId":6},{"name":"ThaiChain","chain":"TCH","rpc":["https://rpc.dome.cloud"],"faucets":[],"nativeCurrency":{"name":"ThaiChain Ether","symbol":"TCH","decimals":18},"infoURL":"https://thaichain.io","shortName":"tch","chainId":7,"networkId":7},{"name":"Ubiq","chain":"UBQ","rpc":["https://rpc.octano.dev","https://pyrus2.ubiqscan.io"],"faucets":[],"nativeCurrency":{"name":"Ubiq Ether","symbol":"UBQ","decimals":18},"infoURL":"https://ubiqsmart.com","shortName":"ubq","chainId":8,"networkId":8,"slip44":108,"explorers":[{"name":"ubiqscan","url":"https://ubiqscan.io","standard":"EIP3091"}]},{"name":"Ubiq Network Testnet","chain":"UBQ","rpc":[],"faucets":[],"nativeCurrency":{"name":"Ubiq Testnet Ether","symbol":"TUBQ","decimals":18},"infoURL":"https://ethersocial.org","shortName":"tubq","chainId":9,"networkId":2},{"name":"Optimism","chain":"ETH","rpc":["https://mainnet.optimism.io/"],"faucets":[],"nativeCurrency":{"name":"Ether","symbol":"ETH","decimals":18},"infoURL":"https://optimism.io","shortName":"oeth","chainId":10,"networkId":10,"explorers":[{"name":"etherscan","url":"https://optimistic.etherscan.io","standard":"none"}]},{"name":"Metadium Mainnet","chain":"META","rpc":["https://api.metadium.com/prod"],"faucets":[],"nativeCurrency":{"name":"Metadium Mainnet Ether","symbol":"META","decimals":18},"infoURL":"https://metadium.com","shortName":"meta","chainId":11,"networkId":11,"slip44":916},{"name":"Metadium Testnet","chain":"META","rpc":["https://api.metadium.com/dev"],"faucets":[],"nativeCurrency":{"name":"Metadium Testnet Ether","symbol":"KAL","decimals":18},"infoURL":"https://metadium.com","shortName":"kal","chainId":12,"networkId":12},{"name":"Diode Testnet Staging","chain":"DIODE","rpc":["https://staging.diode.io:8443/","wss://staging.diode.io:8443/ws"],"faucets":[],"nativeCurrency":{"name":"Staging Diodes","symbol":"sDIODE","decimals":18},"infoURL":"https://diode.io/staging","shortName":"dstg","chainId":13,"networkId":13},{"name":"Flare Mainnet","chain":"FLR","icon":"flare","rpc":[],"faucets":[],"nativeCurrency":{"name":"Spark","symbol":"FLR","decimals":18},"infoURL":"https://flare.xyz","shortName":"flr","chainId":14,"networkId":14},{"name":"Diode Prenet","chain":"DIODE","rpc":["https://prenet.diode.io:8443/","wss://prenet.diode.io:8443/ws"],"faucets":[],"nativeCurrency":{"name":"Diodes","symbol":"DIODE","decimals":18},"infoURL":"https://diode.io/prenet","shortName":"diode","chainId":15,"networkId":15},{"name":"Flare Testnet Coston","chain":"FLR","rpc":["https://coston-api.flare.network/ext/bc/C/rpc"],"faucets":["https://faucet.towolabs.com","https://fauceth.komputing.org?chain=16&address=${ADDRESS}"],"nativeCurrency":{"name":"Coston Spark","symbol":"CFLR","decimals":18},"infoURL":"https://flare.xyz","shortName":"cflr","chainId":16,"networkId":16,"explorers":[{"name":"blockscout","url":"https://coston-explorer.flare.network","standard":"EIP3091"}]},{"name":"ThaiChain 2.0 ThaiFi","chain":"TCH","rpc":["https://rpc.thaifi.com"],"faucets":[],"nativeCurrency":{"name":"Thaifi Ether","symbol":"TFI","decimals":18},"infoURL":"https://exp.thaifi.com","shortName":"tfi","chainId":17,"networkId":17},{"name":"ThunderCore Testnet","chain":"TST","rpc":["https://testnet-rpc.thundercore.com"],"faucets":["https://faucet-testnet.thundercore.com"],"nativeCurrency":{"name":"ThunderCore Testnet Ether","symbol":"TST","decimals":18},"infoURL":"https://thundercore.com","shortName":"TST","chainId":18,"networkId":18,"explorers":[{"name":"ThundercoreTestNetScanner","url":"https://scan-testnet.thundercore.com","standard":"none"}]},{"name":"Songbird Canary-Network","chain":"SGB","icon":"songbird","rpc":["https://songbird.towolabs.com/rpc","https://sgb.ftso.com.au/ext/bc/C/rpc","https://sgb.lightft.so/rpc","https://sgb-rpc.ftso.eu"],"faucets":[],"nativeCurrency":{"name":"Songbird","symbol":"SGB","decimals":18},"infoURL":"https://flare.xyz","shortName":"sgb","chainId":19,"networkId":19,"explorers":[{"name":"blockscout","url":"https://songbird-explorer.flare.network","standard":"EIP3091"}]},{"name":"Elastos Smart Chain","chain":"ETH","rpc":["https://api.elastos.io/eth"],"faucets":["https://faucet.elastos.org/"],"nativeCurrency":{"name":"Elastos","symbol":"ELA","decimals":18},"infoURL":"https://www.elastos.org/","shortName":"elaeth","chainId":20,"networkId":20,"explorers":[{"name":"elastos eth explorer","url":"https://eth.elastos.io","standard":"EIP3091"}]},{"name":"ELA-ETH-Sidechain Testnet","chain":"ETH","rpc":["https://rpc.elaeth.io"],"faucets":["https://faucet.elaeth.io/"],"nativeCurrency":{"name":"Elastos","symbol":"tELA","decimals":18},"infoURL":"https://elaeth.io/","shortName":"elaetht","chainId":21,"networkId":21},{"name":"ELA-DID-Sidechain Mainnet","chain":"ETH","rpc":[],"faucets":[],"nativeCurrency":{"name":"Elastos","symbol":"ELA","decimals":18},"infoURL":"https://www.elastos.org/","shortName":"eladid","chainId":22,"networkId":22},{"name":"ELA-DID-Sidechain Testnet","chain":"ETH","rpc":[],"faucets":[],"nativeCurrency":{"name":"Elastos","symbol":"tELA","decimals":18},"infoURL":"https://elaeth.io/","shortName":"eladidt","chainId":23,"networkId":23},{"name":"Dithereum Mainnet","chain":"DTH","icon":"dithereum","rpc":["https://node-mainnet.dithereum.io"],"faucets":["https://faucet.dithereum.org"],"nativeCurrency":{"name":"Dither","symbol":"DTH","decimals":18},"infoURL":"https://dithereum.org","shortName":"dthmainnet","chainId":24,"networkId":24},{"name":"Cronos Mainnet Beta","chain":"CRO","rpc":["https://evm.cronos.org"],"faucets":[],"nativeCurrency":{"name":"Cronos","symbol":"CRO","decimals":18},"infoURL":"https://cronos.org/","shortName":"cro","chainId":25,"networkId":25,"explorers":[{"name":"Cronos Explorer","url":"https://cronos.org/explorer","standard":"none"}]},{"name":"Genesis L1 testnet","chain":"genesis","rpc":["https://testrpc.genesisl1.org"],"faucets":[],"nativeCurrency":{"name":"L1 testcoin","symbol":"L1test","decimals":18},"infoURL":"https://www.genesisl1.com","shortName":"L1test","chainId":26,"networkId":26,"explorers":[{"name":"Genesis L1 testnet explorer","url":"https://testnet.genesisl1.org","standard":"none"}]},{"name":"ShibaChain","chain":"SHIB","rpc":["https://rpc.shibachain.net"],"faucets":[],"nativeCurrency":{"name":"SHIBA INU COIN","symbol":"SHIB","decimals":18},"infoURL":"https://www.shibachain.net","shortName":"shib","chainId":27,"networkId":27,"explorers":[{"name":"Shiba Explorer","url":"https://exp.shibachain.net","standard":"none"}]},{"name":"Boba Network Rinkeby Testnet","chain":"ETH","rpc":["https://rinkeby.boba.network/"],"faucets":[],"nativeCurrency":{"name":"Ether","symbol":"ETH","decimals":18},"infoURL":"https://boba.network","shortName":"Boba Rinkeby","chainId":28,"networkId":28,"explorers":[{"name":"Blockscout","url":"https://blockexplorer.rinkeby.boba.network","standard":"none"}],"parent":{"type":"L2","chain":"eip155-4","bridges":[{"url":"https://gateway.rinkeby.boba.network"}]}},{"name":"Genesis L1","chain":"genesis","rpc":["https://rpc.genesisl1.org"],"faucets":[],"nativeCurrency":{"name":"L1 coin","symbol":"L1","decimals":18},"infoURL":"https://www.genesisl1.com","shortName":"L1","chainId":29,"networkId":29,"explorers":[{"name":"Genesis L1 blockchain explorer","url":"https://explorer.genesisl1.org","standard":"none"}]},{"name":"RSK Mainnet","chain":"RSK","rpc":["https://public-node.rsk.co","https://mycrypto.rsk.co"],"faucets":["https://free-online-app.com/faucet-for-eth-evm-chains/"],"nativeCurrency":{"name":"RSK Mainnet Ether","symbol":"RBTC","decimals":18},"infoURL":"https://rsk.co","shortName":"rsk","chainId":30,"networkId":30,"slip44":137,"explorers":[{"name":"blockscout","url":"https://explorer.rsk.co","standard":"EIP3091"}]},{"name":"RSK Testnet","chain":"RSK","rpc":["https://public-node.testnet.rsk.co","https://mycrypto.testnet.rsk.co"],"faucets":["https://faucet.testnet.rsk.co"],"nativeCurrency":{"name":"RSK Testnet Ether","symbol":"tRBTC","decimals":18},"infoURL":"https://rsk.co","shortName":"trsk","chainId":31,"networkId":31},{"name":"GoodData Testnet","chain":"GooD","rpc":["https://test2.goodata.io"],"faucets":[],"nativeCurrency":{"name":"GoodData Testnet Ether","symbol":"GooD","decimals":18},"infoURL":"https://www.goodata.org","shortName":"GooDT","chainId":32,"networkId":32},{"name":"GoodData Mainnet","chain":"GooD","rpc":["https://rpc.goodata.io"],"faucets":[],"nativeCurrency":{"name":"GoodData Mainnet Ether","symbol":"GooD","decimals":18},"infoURL":"https://www.goodata.org","shortName":"GooD","chainId":33,"networkId":33},{"name":"Dithereum Testnet","chain":"DTH","icon":"dithereum","rpc":["https://node-testnet.dithereum.io"],"faucets":["https://faucet.dithereum.org"],"nativeCurrency":{"name":"Dither","symbol":"DTH","decimals":18},"infoURL":"https://dithereum.org","shortName":"dth","chainId":34,"networkId":34},{"name":"TBWG Chain","chain":"TBWG","rpc":["https://rpc.tbwg.io"],"faucets":[],"nativeCurrency":{"name":"TBWG Ether","symbol":"TBG","decimals":18},"infoURL":"https://tbwg.io","shortName":"tbwg","chainId":35,"networkId":35},{"name":"Valorbit","chain":"VAL","rpc":["https://rpc.valorbit.com/v2"],"faucets":[],"nativeCurrency":{"name":"Valorbit","symbol":"VAL","decimals":18},"infoURL":"https://valorbit.com","shortName":"val","chainId":38,"networkId":38,"slip44":538},{"name":"Telos EVM Mainnet","chain":"TLOS","rpc":["https://mainnet.telos.net/evm"],"faucets":[],"nativeCurrency":{"name":"Telos","symbol":"TLOS","decimals":18},"infoURL":"https://telos.net","shortName":"Telos EVM","chainId":40,"networkId":40,"explorers":[{"name":"teloscan","url":"https://teloscan.io","standard":"EIP3091"}]},{"name":"Telos EVM Testnet","chain":"TLOS","rpc":["https://testnet.telos.net/evm"],"faucets":["https://app.telos.net/testnet/developers"],"nativeCurrency":{"name":"Telos","symbol":"TLOS","decimals":18},"infoURL":"https://telos.net","shortName":"Telos EVM Testnet","chainId":41,"networkId":41},{"name":"Kovan","title":"Ethereum Testnet Kovan","chain":"ETH","rpc":["https://kovan.poa.network","http://kovan.poa.network:8545","https://kovan.infura.io/v3/${INFURA_API_KEY}","wss://kovan.infura.io/ws/v3/${INFURA_API_KEY}","ws://kovan.poa.network:8546"],"faucets":["http://fauceth.komputing.org?chain=42&address=${ADDRESS}","https://faucet.kovan.network","https://gitter.im/kovan-testnet/faucet"],"nativeCurrency":{"name":"Kovan Ether","symbol":"KOV","decimals":18},"explorers":[{"name":"etherscan","url":"https://kovan.etherscan.io","standard":"EIP3091"}],"infoURL":"https://kovan-testnet.github.io/website","shortName":"kov","chainId":42,"networkId":42},{"name":"Darwinia Pangolin Testnet","chain":"pangolin","rpc":["https://pangolin-rpc.darwinia.network"],"faucets":["https://docs.crab.network/dvm/wallets/dvm-metamask#apply-for-the-test-token"],"nativeCurrency":{"name":"Pangolin Network Native Token\u201d","symbol":"PRING","decimals":18},"infoURL":"https://darwinia.network/","shortName":"pangolin","chainId":43,"networkId":43,"explorers":[{"name":"subscan","url":"https://pangolin.subscan.io","standard":"none"}]},{"name":"Darwinia Crab Network","chain":"crab","rpc":["https://crab-rpc.darwinia.network"],"faucets":[],"nativeCurrency":{"name":"Crab Network Native Token","symbol":"CRAB","decimals":18},"infoURL":"https://crab.network/","shortName":"crab","chainId":44,"networkId":44,"explorers":[{"name":"subscan","url":"https://crab.subscan.io","standard":"none"}]},{"name":"Darwinia Pangoro Testnet","chain":"pangoro","rpc":["http://pangoro-rpc.darwinia.network"],"faucets":[],"nativeCurrency":{"name":"Pangoro Network Native Token\u201d","symbol":"ORING","decimals":18},"infoURL":"https://darwinia.network/","shortName":"pangoro","chainId":45,"networkId":45,"explorers":[{"name":"subscan","url":"https://pangoro.subscan.io","standard":"none"}]},{"name":"XinFin Network Mainnet","chain":"XDC","rpc":["https://rpc.xinfin.network"],"faucets":[],"nativeCurrency":{"name":"XinFin","symbol":"XDC","decimals":18},"infoURL":"https://xinfin.org","shortName":"xdc","chainId":50,"networkId":50},{"name":"XinFin Apothem Testnet","chain":"TXDC","rpc":["https://rpc.apothem.network"],"faucets":[],"nativeCurrency":{"name":"XinFinTest","symbol":"TXDC","decimals":18},"infoURL":"https://xinfin.org","shortName":"TXDC","chainId":51,"networkId":51},{"name":"CoinEx Smart Chain Mainnet","chain":"CSC","rpc":["https://rpc.coinex.net"],"faucets":[],"nativeCurrency":{"name":"CoinEx Chain Native Token","symbol":"cet","decimals":18},"infoURL":"https://www.coinex.org/","shortName":"cet","chainId":52,"networkId":52,"explorers":[{"name":"coinexscan","url":"https://www.coinex.net","standard":"none"}]},{"name":"CoinEx Smart Chain Testnet","chain":"CSC","rpc":["https://testnet-rpc.coinex.net/"],"faucets":[],"nativeCurrency":{"name":"CoinEx Chain Test Native Token","symbol":"cett","decimals":18},"infoURL":"https://www.coinex.org/","shortName":"tcet","chainId":53,"networkId":53,"explorers":[{"name":"coinexscan","url":"https://testnet.coinex.net","standard":"none"}]},{"name":"Openpiece Mainnet","chain":"OPENPIECE","icon":"openpiece","network":"mainnet","rpc":["https://mainnet.openpiece.io"],"faucets":[],"nativeCurrency":{"name":"Belly","symbol":"BELLY","decimals":18},"infoURL":"https://cryptopiece.online","shortName":"OP","chainId":54,"networkId":54,"explorers":[{"name":"Belly Scan","url":"https://bellyscan.com","standard":"none"}]},{"name":"Zyx Mainnet","chain":"ZYX","rpc":["https://rpc-1.zyx.network/","https://rpc-2.zyx.network/","https://rpc-3.zyx.network/","https://rpc-4.zyx.network/","https://rpc-5.zyx.network/","https://rpc-6.zyx.network/"],"faucets":[],"nativeCurrency":{"name":"Zyx","symbol":"ZYX","decimals":18},"infoURL":"https://zyx.network/","shortName":"ZYX","chainId":55,"networkId":55,"explorers":[{"name":"zyxscan","url":"https://zyxscan.com","standard":"none"}]},{"name":"Binance Smart Chain Mainnet","chain":"BSC","rpc":["https://bsc-dataseed1.binance.org","https://bsc-dataseed2.binance.org","https://bsc-dataseed3.binance.org","https://bsc-dataseed4.binance.org","https://bsc-dataseed1.defibit.io","https://bsc-dataseed2.defibit.io","https://bsc-dataseed3.defibit.io","https://bsc-dataseed4.defibit.io","https://bsc-dataseed1.ninicoin.io","https://bsc-dataseed2.ninicoin.io","https://bsc-dataseed3.ninicoin.io","https://bsc-dataseed4.ninicoin.io","wss://bsc-ws-node.nariox.org"],"faucets":["https://free-online-app.com/faucet-for-eth-evm-chains/"],"nativeCurrency":{"name":"Binance Chain Native Token","symbol":"BNB","decimals":18},"infoURL":"https://www.binance.org","shortName":"bnb","chainId":56,"networkId":56,"slip44":714,"explorers":[{"name":"bscscan","url":"https://bscscan.com","standard":"EIP3091"}]},{"name":"Syscoin Mainnet","chain":"SYS","rpc":["https://rpc.syscoin.org","wss://rpc.syscoin.org/wss"],"faucets":["https://faucet.syscoin.org"],"nativeCurrency":{"name":"Syscoin","symbol":"SYS","decimals":18},"infoURL":"https://www.syscoin.org","shortName":"sys","chainId":57,"networkId":57,"explorers":[{"name":"Syscoin Block Explorer","url":"https://explorer.syscoin.org","standard":"EIP3091"}]},{"name":"Ontology Mainnet","chain":"Ontology","rpc":["https://dappnode1.ont.io:20339","https://dappnode2.ont.io:20339","https://dappnode3.ont.io:20339","https://dappnode4.ont.io:20339"],"faucets":[],"nativeCurrency":{"name":"ONG","symbol":"ONG","decimals":9},"infoURL":"https://ont.io/","shortName":"Ontology Mainnet","chainId":58,"networkId":58,"explorers":[{"name":"explorer","url":"https://explorer.ont.io","standard":"EIP3091"}]},{"name":"EOS Mainnet","chain":"EOS","rpc":["https://api.eosargentina.io"],"faucets":[],"nativeCurrency":{"name":"EOS","symbol":"EOS","decimals":18},"infoURL":"https://eoscommunity.org/","shortName":"EOS Mainnet","chainId":59,"networkId":59,"explorers":[{"name":"bloks","url":"https://bloks.eosargentina.io","standard":"EIP3091"}]},{"name":"GoChain","chain":"GO","rpc":["https://rpc.gochain.io"],"faucets":["https://free-online-app.com/faucet-for-eth-evm-chains/"],"nativeCurrency":{"name":"GoChain Ether","symbol":"GO","decimals":18},"infoURL":"https://gochain.io","shortName":"go","chainId":60,"networkId":60,"slip44":6060,"explorers":[{"name":"GoChain Explorer","url":"https://explorer.gochain.io","standard":"EIP3091"}]},{"name":"Ethereum Classic Mainnet","chain":"ETC","rpc":["https://www.ethercluster.com/etc"],"faucets":["https://free-online-app.com/faucet-for-eth-evm-chains/?"],"nativeCurrency":{"name":"Ethereum Classic Ether","symbol":"ETC","decimals":18},"infoURL":"https://ethereumclassic.org","shortName":"etc","chainId":61,"networkId":1,"slip44":61,"explorers":[{"name":"blockscout","url":"https://blockscout.com/etc/mainnet","standard":"none"}]},{"name":"Ethereum Classic Testnet Morden","chain":"ETC","rpc":[],"faucets":[],"nativeCurrency":{"name":"Ethereum Classic Testnet Ether","symbol":"TETC","decimals":18},"infoURL":"https://ethereumclassic.org","shortName":"tetc","chainId":62,"networkId":2},{"name":"Ethereum Classic Testnet Mordor","chain":"ETC","rpc":["https://www.ethercluster.com/mordor"],"faucets":[],"nativeCurrency":{"name":"Mordor Classic Testnet Ether","symbol":"METC","decimals":18},"infoURL":"https://github.com/eth-classic/mordor/","shortName":"metc","chainId":63,"networkId":7},{"name":"Ellaism","chain":"ELLA","rpc":["https://jsonrpc.ellaism.org"],"faucets":[],"nativeCurrency":{"name":"Ellaism Ether","symbol":"ELLA","decimals":18},"infoURL":"https://ellaism.org","shortName":"ella","chainId":64,"networkId":64,"slip44":163},{"name":"OKExChain Testnet","chain":"okexchain","rpc":["https://exchaintestrpc.okex.org"],"faucets":["https://www.okex.com/drawdex"],"nativeCurrency":{"name":"OKExChain Global Utility Token in testnet","symbol":"OKT","decimals":18},"infoURL":"https://www.okex.com/okexchain","shortName":"tokt","chainId":65,"networkId":65,"explorers":[{"name":"OKLink","url":"https://www.oklink.com/okexchain-test","standard":"EIP3091"}]},{"name":"OKXChain Mainnet","chain":"okexchain","rpc":["https://exchainrpc.okex.org"],"faucets":["https://free-online-app.com/faucet-for-eth-evm-chains/?"],"nativeCurrency":{"name":"OKExChain Global Utility Token","symbol":"OKT","decimals":18},"infoURL":"https://www.okex.com/okexchain","shortName":"okt","chainId":66,"networkId":66,"explorers":[{"name":"OKLink","url":"https://www.oklink.com/okexchain","standard":"EIP3091"}]},{"name":"DBChain Testnet","chain":"DBM","rpc":["http://test-rpc.dbmbp.com"],"faucets":[],"nativeCurrency":{"name":"DBChain Testnet","symbol":"DBM","decimals":18},"infoURL":"http://test.dbmbp.com","shortName":"dbm","chainId":67,"networkId":67},{"name":"SoterOne Mainnet","chain":"SOTER","rpc":["https://rpc.soter.one"],"faucets":[],"nativeCurrency":{"name":"SoterOne Mainnet Ether","symbol":"SOTER","decimals":18},"infoURL":"https://www.soterone.com","shortName":"SO1","chainId":68,"networkId":68},{"name":"Optimism Kovan","title":"Optimism Testnet Kovan","chain":"ETH","rpc":["https://kovan.optimism.io/"],"faucets":["http://fauceth.komputing.org?chain=69&address=${ADDRESS}"],"nativeCurrency":{"name":"Kovan Ether","symbol":"KOR","decimals":18},"explorers":[{"name":"etherscan","url":"https://kovan-optimistic.etherscan.io","standard":"EIP3091"}],"infoURL":"https://optimism.io","shortName":"okov","chainId":69,"networkId":69},{"name":"Conflux eSpace (Testnet)","chain":"Conflux","network":"testnet","rpc":["https://evmtestnet.confluxrpc.com"],"faucets":["https://faucet.confluxnetwork.org"],"nativeCurrency":{"name":"CFX","symbol":"CFX","decimals":18},"infoURL":"https://confluxnetwork.org","shortName":"cfxtest","chainId":71,"networkId":71,"icon":"conflux","explorers":[{"name":"Conflux Scan","url":"https://evmtestnet.confluxscan.net","standard":"none"}]},{"name":"IDChain Mainnet","chain":"IDChain","network":"mainnet","rpc":["https://idchain.one/rpc/","wss://idchain.one/ws/"],"faucets":[],"nativeCurrency":{"name":"EIDI","symbol":"EIDI","decimals":18},"infoURL":"https://idchain.one/begin/","shortName":"idchain","chainId":74,"networkId":74,"icon":"idchain","explorers":[{"name":"explorer","url":"https://explorer.idchain.one","icon":"etherscan","standard":"EIP3091"}]},{"name":"Mix","chain":"MIX","rpc":["https://rpc2.mix-blockchain.org:8647"],"faucets":[],"nativeCurrency":{"name":"Mix Ether","symbol":"MIX","decimals":18},"infoURL":"https://mix-blockchain.org","shortName":"mix","chainId":76,"networkId":76,"slip44":76},{"name":"POA Network Sokol","chain":"POA","rpc":["https://sokol.poa.network","wss://sokol.poa.network/wss","ws://sokol.poa.network:8546"],"faucets":["https://faucet.poa.network"],"nativeCurrency":{"name":"POA Sokol Ether","symbol":"SPOA","decimals":18},"infoURL":"https://poa.network","shortName":"spoa","chainId":77,"networkId":77,"explorers":[{"name":"blockscout","url":"https://blockscout.com/poa/sokol","standard":"none"}]},{"name":"PrimusChain mainnet","chain":"PC","rpc":["https://ethnode.primusmoney.com/mainnet"],"faucets":[],"nativeCurrency":{"name":"Primus Ether","symbol":"PETH","decimals":18},"infoURL":"https://primusmoney.com","shortName":"primuschain","chainId":78,"networkId":78},{"name":"GeneChain","chain":"GeneChain","rpc":["https://rpc.genechain.io"],"faucets":[],"nativeCurrency":{"name":"RNA","symbol":"RNA","decimals":18},"infoURL":"https://scan.genechain.io/","shortName":"GeneChain","chainId":80,"networkId":80,"explorers":[{"name":"GeneChain Scan","url":"https://scan.genechain.io","standard":"EIP3091"}]},{"name":"Meter Mainnet","chain":"METER","rpc":["https://rpc.meter.io"],"faucets":["https://faucet.meter.io"],"nativeCurrency":{"name":"Meter","symbol":"MTR","decimals":18},"infoURL":"https://www.meter.io","shortName":"Meter","chainId":82,"networkId":82,"explorers":[{"name":"Meter Mainnet Scan","url":"https://scan.meter.io","standard":"EIP3091"}]},{"name":"Meter Testnet","chain":"METER Testnet","rpc":["https://rpctest.meter.io"],"faucets":["https://faucet-warringstakes.meter.io"],"nativeCurrency":{"name":"Meter","symbol":"MTR","decimals":18},"infoURL":"https://www.meter.io","shortName":"MeterTest","chainId":83,"networkId":83,"explorers":[{"name":"Meter Testnet Scan","url":"https://scan-warringstakes.meter.io","standard":"EIP3091"}]},{"name":"GateChain Testnet","chainId":85,"shortName":"gttest","chain":"GTTEST","networkId":85,"nativeCurrency":{"name":"GateToken","symbol":"GT","decimals":18},"rpc":["https://testnet.gatenode.cc"],"faucets":["https://www.gatescan.org/testnet/faucet"],"explorers":[{"name":"GateScan","url":"https://www.gatescan.org/testnet","standard":"EIP3091"}],"infoURL":"https://www.gatechain.io"},{"name":"GateChain Mainnet","chainId":86,"shortName":"gt","chain":"GT","networkId":86,"nativeCurrency":{"name":"GateToken","symbol":"GT","decimals":18},"rpc":["https://evm.gatenode.cc"],"faucets":["https://www.gatescan.org/faucet"],"explorers":[{"name":"GateScan","url":"https://www.gatescan.org","standard":"EIP3091"}],"infoURL":"https://www.gatechain.io"},{"name":"Nova Network","chain":"NNW","icon":"novanetwork","rpc":["https://connect.novanetwork.io","https://0x57.redjackstudio.com","https://rpc.novanetwork.io:9070"],"faucets":[],"nativeCurrency":{"name":"Supernova","symbol":"SNT","decimals":18},"infoURL":"https://novanetwork.io","shortName":"nnw","chainId":87,"networkId":87,"explorers":[{"name":"novanetwork","url":"https://explorer.novanetwork.io","standard":"EIP3091"}]},{"name":"TomoChain","chain":"TOMO","rpc":["https://rpc.tomochain.com"],"faucets":[],"nativeCurrency":{"name":"TomoChain","symbol":"TOMO","decimals":18},"infoURL":"https://tomochain.com","shortName":"tomo","chainId":88,"networkId":88,"slip44":889},{"name":"TomoChain Testnet","chain":"TOMO","rpc":["https://rpc.testnet.tomochain.com"],"faucets":[],"nativeCurrency":{"name":"TomoChain","symbol":"TOMO","decimals":18},"infoURL":"https://tomochain.com","shortName":"tomot","chainId":89,"networkId":89,"slip44":889},{"name":"Garizon Stage0","chain":"GAR","network":"mainnet","icon":"garizon","rpc":["https://s0.garizon.net/rpc"],"faucets":[],"nativeCurrency":{"name":"Garizon","symbol":"GAR","decimals":18},"infoURL":"https://garizon.com","shortName":"gar-s0","chainId":90,"networkId":90,"explorers":[{"name":"explorer","url":"https://explorer.garizon.com","icon":"garizon","standard":"EIP3091"}]},{"name":"Garizon Stage1","chain":"GAR","network":"mainnet","icon":"garizon","rpc":["https://s1.garizon.net/rpc"],"faucets":[],"nativeCurrency":{"name":"Garizon","symbol":"GAR","decimals":18},"infoURL":"https://garizon.com","shortName":"gar-s1","chainId":91,"networkId":91,"explorers":[{"name":"explorer","url":"https://explorer.garizon.com","icon":"garizon","standard":"EIP3091"}],"parent":{"chain":"eip155-90","type":"shard"}},{"name":"Garizon Stage2","chain":"GAR","network":"mainnet","icon":"garizon","rpc":["https://s2.garizon.net/rpc"],"faucets":[],"nativeCurrency":{"name":"Garizon","symbol":"GAR","decimals":18},"infoURL":"https://garizon.com","shortName":"gar-s2","chainId":92,"networkId":92,"explorers":[{"name":"explorer","url":"https://explorer.garizon.com","icon":"garizon","standard":"EIP3091"}],"parent":{"chain":"eip155-90","type":"shard"}},{"name":"Garizon Stage3","chain":"GAR","network":"mainnet","icon":"garizon","rpc":["https://s3.garizon.net/rpc"],"faucets":[],"nativeCurrency":{"name":"Garizon","symbol":"GAR","decimals":18},"infoURL":"https://garizon.com","shortName":"gar-s3","chainId":93,"networkId":93,"explorers":[{"name":"explorer","url":"https://explorer.garizon.com","icon":"garizon","standard":"EIP3091"}],"parent":{"chain":"eip155-90","type":"shard"}},{"name":"CryptoKylin Testnet","chain":"EOS","rpc":["https://kylin.eosargentina.io"],"faucets":[],"nativeCurrency":{"name":"EOS","symbol":"EOS","decimals":18},"infoURL":"https://www.cryptokylin.io/","shortName":"Kylin Testnet","chainId":95,"networkId":95,"explorers":[{"name":"eosq","url":"https://kylin.eosargentina.io","standard":"EIP3091"}]},{"name":"NEXT Smart Chain","chain":"NSC","rpc":["https://rpc.nextsmartchain.com"],"faucets":["https://faucet.nextsmartchain.com"],"nativeCurrency":{"name":"NEXT","symbol":"NEXT","decimals":18},"infoURL":"https://www.nextsmartchain.com/","shortName":"nsc","chainId":96,"networkId":96,"explorers":[{"name":"Next Smart Chain Explorer","url":"https://explorer.nextsmartchain.com","standard":"none"}]},{"name":"Binance Smart Chain Testnet","chain":"BSC","rpc":["https://data-seed-prebsc-1-s1.binance.org:8545","https://data-seed-prebsc-2-s1.binance.org:8545","https://data-seed-prebsc-1-s2.binance.org:8545","https://data-seed-prebsc-2-s2.binance.org:8545","https://data-seed-prebsc-1-s3.binance.org:8545","https://data-seed-prebsc-2-s3.binance.org:8545"],"faucets":["https://testnet.binance.org/faucet-smart"],"nativeCurrency":{"name":"Binance Chain Native Token","symbol":"tBNB","decimals":18},"infoURL":"https://testnet.binance.org/","shortName":"bnbt","chainId":97,"networkId":97,"explorers":[{"name":"bscscan-testnet","url":"https://testnet.bscscan.com","standard":"EIP3091"}]},{"name":"POA Network Core","chain":"POA","rpc":["https://core.poanetwork.dev","http://core.poanetwork.dev:8545","https://core.poa.network","ws://core.poanetwork.dev:8546"],"faucets":[],"nativeCurrency":{"name":"POA Network Core Ether","symbol":"POA","decimals":18},"infoURL":"https://poa.network","shortName":"poa","chainId":99,"networkId":99,"slip44":178,"explorers":[{"name":"blockscout","url":"https://blockscout.com/poa/core","standard":"none"}]},{"name":"Gnosis Chain (formerly xDai)","chain":"Gnosis","icon":"gnosis","rpc":["https://rpc.gnosischain.com","https://xdai.poanetwork.dev","wss://rpc.gnosischain.com/wss","wss://xdai.poanetwork.dev/wss","http://xdai.poanetwork.dev","https://dai.poa.network","ws://xdai.poanetwork.dev:8546"],"faucets":["https://faucet.gimlu.com/gnosis","https://stakely.io/faucet/gnosis-chain-xdai","https://faucet.prussia.dev/xdai"],"nativeCurrency":{"name":"xDAI","symbol":"xDAI","decimals":18},"infoURL":"https://www.xdaichain.com/","shortName":"gno","chainId":100,"networkId":100,"slip44":700,"explorers":[{"name":"blockscout","url":"https://blockscout.com/xdai/mainnet","icon":"blockscout","standard":"EIP3091"}]},{"name":"EtherInc","chain":"ETI","rpc":["https://api.einc.io/jsonrpc/mainnet"],"faucets":[],"nativeCurrency":{"name":"EtherInc Ether","symbol":"ETI","decimals":18},"infoURL":"https://einc.io","shortName":"eti","chainId":101,"networkId":1,"slip44":464},{"name":"Web3Games Testnet","chain":"Web3Games","icon":"web3games","rpc":["https://testnet.web3games.org/evm"],"faucets":[],"nativeCurrency":{"name":"Web3Games","symbol":"W3G","decimals":18},"infoURL":"https://web3games.org/","shortName":"tw3g","chainId":102,"networkId":102},{"name":"Web3Games Devnet","chain":"Web3Games","icon":"web3games","rpc":["https://devnet.web3games.org/evm"],"faucets":[],"nativeCurrency":{"name":"Web3Games","symbol":"W3G","decimals":18},"infoURL":"https://web3games.org/","shortName":"dw3g","chainId":105,"networkId":105,"explorers":[{"name":"Web3Games Explorer","url":"https://explorer-devnet.web3games.org","standard":"none"}]},{"name":"Velas EVM Mainnet","chain":"Velas","icon":"velas","rpc":["https://evmexplorer.velas.com/rpc","https://explorer.velas.com/rpc"],"faucets":[],"nativeCurrency":{"name":"Velas","symbol":"VLX","decimals":18},"infoURL":"https://velas.com","shortName":"vlx","chainId":106,"networkId":106,"explorers":[{"name":"Velas Explorer","url":"https://evmexplorer.velas.com","standard":"EIP3091"}]},{"name":"Nebula Testnet","chain":"NTN","icon":"nebulatestnet","rpc":["https://testnet.rpc.novanetwork.io:9070"],"faucets":[],"nativeCurrency":{"name":"Nebula X","symbol":"NBX","decimals":18},"infoURL":"https://novanetwork.io","shortName":"ntn","chainId":107,"networkId":107,"explorers":[{"name":"nebulatestnet","url":"https://explorer.novanetwork.io","standard":"EIP3091"}]},{"name":"ThunderCore Mainnet","chain":"TT","rpc":["https://mainnet-rpc.thundercore.com"],"faucets":["https://faucet.thundercore.com"],"nativeCurrency":{"name":"ThunderCore Mainnet Ether","symbol":"TT","decimals":18},"infoURL":"https://thundercore.com","shortName":"TT","chainId":108,"networkId":108,"slip44":1001,"explorers":[{"name":"ThundercoreScan","url":"https://scan.thundercore.com","standard":"none"}]},{"name":"Proton Testnet","chain":"XPR","rpc":["https://protontestnet.greymass.com/"],"faucets":[],"nativeCurrency":{"name":"Proton","symbol":"XPR","decimals":4},"infoURL":"https://protonchain.com","shortName":"xpr","chainId":110,"networkId":110},{"name":"EtherLite Chain","chain":"ETL","rpc":["https://rpc.etherlite.org"],"faucets":["https://etherlite.org/faucets"],"nativeCurrency":{"name":"EtherLite","symbol":"ETL","decimals":18},"infoURL":"https://etherlite.org","shortName":"ETL","chainId":111,"networkId":111,"icon":"etherlite"},{"name":"Fuse Mainnet","chain":"FUSE","rpc":["https://rpc.fuse.io"],"faucets":[],"nativeCurrency":{"name":"Fuse","symbol":"FUSE","decimals":18},"infoURL":"https://fuse.io/","shortName":"fuse","chainId":122,"networkId":122},{"name":"Fuse Sparknet","chain":"fuse","rpc":["https://rpc.fusespark.io"],"faucets":["https://get.fusespark.io"],"nativeCurrency":{"name":"Spark","symbol":"SPARK","decimals":18},"infoURL":"https://docs.fuse.io/general/fuse-network-blockchain/fuse-testnet","shortName":"spark","chainId":123,"networkId":123},{"name":"Decentralized Web Mainnet","shortName":"dwu","chain":"DWU","chainId":124,"networkId":124,"rpc":["https://decentralized-web.tech/dw_rpc.php"],"faucets":[],"infoURL":"https://decentralized-web.tech/dw_chain.php","nativeCurrency":{"name":"Decentralized Web Utility","symbol":"DWU","decimals":18}},{"name":"OYchain Testnet","chain":"OYchain","rpc":["https://rpc.testnet.oychain.io"],"faucets":["https://faucet.oychain.io"],"nativeCurrency":{"name":"OYchain Token","symbol":"OY","decimals":18},"infoURL":"https://www.oychain.io","shortName":"oychain testnet","chainId":125,"networkId":125,"slip44":125,"explorers":[{"name":"OYchain Testnet Explorer","url":"https://explorer.testnet.oychain.io","standard":"none"}]},{"name":"OYchain Mainnet","chain":"OYchain","icon":"oychain","rpc":["https://rpc.mainnet.oychain.io"],"faucets":[],"nativeCurrency":{"name":"OYchain Token","symbol":"OY","decimals":18},"infoURL":"https://www.oychain.io","shortName":"oychain mainnet","chainId":126,"networkId":126,"slip44":126,"explorers":[{"name":"OYchain Mainnet Explorer","url":"https://explorer.oychain.io","standard":"none"}]},{"name":"Factory 127 Mainnet","chain":"FETH","rpc":[],"faucets":[],"nativeCurrency":{"name":"Factory 127 Token","symbol":"FETH","decimals":18},"infoURL":"https://www.factory127.com","shortName":"feth","chainId":127,"networkId":127,"slip44":127},{"name":"Huobi ECO Chain Mainnet","chain":"Heco","rpc":["https://http-mainnet.hecochain.com","wss://ws-mainnet.hecochain.com"],"faucets":["https://free-online-app.com/faucet-for-eth-evm-chains/"],"nativeCurrency":{"name":"Huobi ECO Chain Native Token","symbol":"HT","decimals":18},"infoURL":"https://www.hecochain.com","shortName":"heco","chainId":128,"networkId":128,"slip44":1010,"explorers":[{"name":"hecoinfo","url":"https://hecoinfo.com","standard":"EIP3091"}]},{"name":"Polygon Mainnet","chain":"Polygon","rpc":["https://polygon-rpc.com/","https://rpc-mainnet.matic.network","https://matic-mainnet.chainstacklabs.com","https://rpc-mainnet.maticvigil.com","https://rpc-mainnet.matic.quiknode.pro","https://matic-mainnet-full-rpc.bwarelabs.com"],"faucets":[],"nativeCurrency":{"name":"MATIC","symbol":"MATIC","decimals":18},"infoURL":"https://polygon.technology/","shortName":"MATIC","chainId":137,"networkId":137,"slip44":966,"explorers":[{"name":"polygonscan","url":"https://polygonscan.com","standard":"EIP3091"}]},{"name":"Openpiece Testnet","chain":"OPENPIECE","icon":"openpiece","network":"testnet","rpc":["https://testnet.openpiece.io"],"faucets":[],"nativeCurrency":{"name":"Belly","symbol":"BELLY","decimals":18},"infoURL":"https://cryptopiece.online","shortName":"OPtest","chainId":141,"networkId":141,"explorers":[{"name":"Belly Scan","url":"https://testnet.bellyscan.com","standard":"none"}]},{"name":"DAX CHAIN","chain":"DAX","rpc":["https://rpc.prodax.io"],"faucets":[],"nativeCurrency":{"name":"Prodax","symbol":"DAX","decimals":18},"infoURL":"https://prodax.io/","shortName":"dax","chainId":142,"networkId":142},{"name":"Lightstreams Testnet","chain":"PHT","rpc":["https://node.sirius.lightstreams.io"],"faucets":["https://discuss.lightstreams.network/t/request-test-tokens"],"nativeCurrency":{"name":"Lightstreams PHT","symbol":"PHT","decimals":18},"infoURL":"https://explorer.sirius.lightstreams.io","shortName":"tpht","chainId":162,"networkId":162},{"name":"Lightstreams Mainnet","chain":"PHT","rpc":["https://node.mainnet.lightstreams.io"],"faucets":[],"nativeCurrency":{"name":"Lightstreams PHT","symbol":"PHT","decimals":18},"infoURL":"https://explorer.lightstreams.io","shortName":"pht","chainId":163,"networkId":163},{"name":"AIOZ Network","chain":"AIOZ","network":"mainnet","icon":"aioz","rpc":["https://eth-dataseed.aioz.network"],"faucets":[],"nativeCurrency":{"name":"AIOZ","symbol":"AIOZ","decimals":18},"infoURL":"https://aioz.network","shortName":"aioz","chainId":168,"networkId":168,"slip44":60,"explorers":[{"name":"AIOZ Network Explorer","url":"https://explorer.aioz.network","standard":"EIP3091"}]},{"name":"HOO Smart Chain Testnet","chain":"ETH","rpc":["https://http-testnet.hoosmartchain.com"],"faucets":["https://faucet-testnet.hscscan.com/"],"nativeCurrency":{"name":"HOO","symbol":"HOO","decimals":18},"infoURL":"https://www.hoosmartchain.com","shortName":"hoosmartchain","chainId":170,"networkId":170},{"name":"Latam-Blockchain Resil Testnet","chain":"Resil","rpc":["https://rpc.latam-blockchain.com","wss://ws.latam-blockchain.com"],"faucets":["https://faucet.latam-blockchain.com"],"nativeCurrency":{"name":"Latam-Blockchain Resil Test Native Token","symbol":"usd","decimals":18},"infoURL":"https://latam-blockchain.com","shortName":"resil","chainId":172,"networkId":172},{"name":"Seele Mainnet","chain":"Seele","rpc":["https://rpc.seelen.pro/"],"faucets":[],"nativeCurrency":{"name":"Seele","symbol":"Seele","decimals":18},"infoURL":"https://seelen.pro/","shortName":"Seele","chainId":186,"networkId":186,"explorers":[{"name":"seeleview","url":"https://seeleview.net","standard":"none"}]},{"name":"BMC Mainnet","chain":"BMC","rpc":["https://mainnet.bmcchain.com/"],"faucets":[],"nativeCurrency":{"name":"BTM","symbol":"BTM","decimals":18},"infoURL":"https://bmc.bytom.io/","shortName":"BMC","chainId":188,"networkId":188,"explorers":[{"name":"Blockmeta","url":"https://bmc.blockmeta.com","standard":"none"}]},{"name":"BMC Testnet","chain":"BMC","rpc":["https://testnet.bmcchain.com"],"faucets":[],"nativeCurrency":{"name":"BTM","symbol":"BTM","decimals":18},"infoURL":"https://bmc.bytom.io/","shortName":"BMCT","chainId":189,"networkId":189,"explorers":[{"name":"Blockmeta","url":"https://bmctestnet.blockmeta.com","standard":"none"}]},{"name":"BitTorrent Chain Mainnet","chain":"BTTC","rpc":["https://rpc.bittorrentchain.io/"],"faucets":[],"nativeCurrency":{"name":"BitTorrent","symbol":"BTT","decimals":18},"infoURL":"https://bittorrentchain.io/","shortName":"BTT","chainId":199,"networkId":199,"explorers":[{"name":"bttcscan","url":"https://scan.bittorrentchain.io","standard":"none"}]},{"name":"Arbitrum on xDai","chain":"AOX","rpc":["https://arbitrum.xdaichain.com/"],"faucets":[],"nativeCurrency":{"name":"xDAI","symbol":"xDAI","decimals":18},"infoURL":"https://xdaichain.com","shortName":"aox","chainId":200,"networkId":200,"explorers":[{"name":"blockscout","url":"https://blockscout.com/xdai/arbitrum","standard":"EIP3091"}],"parent":{"chain":"eip155-100","type":"L2"}},{"name":"Freight Trust Network","chain":"EDI","rpc":["http://13.57.207.168:3435","https://app.freighttrust.net/ftn/${API_KEY}"],"faucets":["http://faucet.freight.sh"],"nativeCurrency":{"name":"Freight Trust Native","symbol":"0xF","decimals":18},"infoURL":"https://freighttrust.com","shortName":"EDI","chainId":211,"networkId":0},{"name":"SoterOne Mainnet old","chain":"SOTER","rpc":["https://rpc.soter.one"],"faucets":[],"nativeCurrency":{"name":"SoterOne Mainnet Ether","symbol":"SOTER","decimals":18},"infoURL":"https://www.soterone.com","shortName":"SO1-old","chainId":218,"networkId":218,"deprecated":true},{"name":"Permission","chain":"ASK","rpc":["https://blockchain-api-mainnet.permission.io/rpc"],"faucets":[],"nativeCurrency":{"name":"ASK","symbol":"ASK","decimals":18},"infoURL":"https://permission.io/","shortName":"ASK","chainId":222,"networkId":2221,"slip44":2221},{"name":"LACHAIN Mainnet","chain":"LA","icon":"lachain","rpc":["https://rpc-mainnet.lachain.io"],"faucets":[],"nativeCurrency":{"name":"LA","symbol":"LA","decimals":18},"infoURL":"https://lachain.io","shortName":"LA","chainId":225,"networkId":225,"explorers":[{"name":"blockscout","url":"https://scan.lachain.io","standard":"EIP3091"}]},{"name":"LACHAIN Testnet","chain":"TLA","icon":"lachain","rpc":["https://rpc-testnet.lachain.io"],"faucets":[],"nativeCurrency":{"name":"TLA","symbol":"TLA","decimals":18},"infoURL":"https://lachain.io","shortName":"TLA","chainId":226,"networkId":226,"explorers":[{"name":"blockscout","url":"https://scan-test.lachain.io","standard":"EIP3091"}]},{"name":"Energy Web Chain","chain":"Energy Web Chain","rpc":["https://rpc.energyweb.org","wss://rpc.energyweb.org/ws"],"faucets":["https://faucet.carbonswap.exchange","https://free-online-app.com/faucet-for-eth-evm-chains/"],"nativeCurrency":{"name":"Energy Web Token","symbol":"EWT","decimals":18},"infoURL":"https://energyweb.org","shortName":"ewt","chainId":246,"networkId":246,"slip44":246,"explorers":[{"name":"blockscout","url":"https://explorer.energyweb.org","standard":"none"}]},{"name":"Fantom Opera","chain":"FTM","rpc":["https://rpc.ftm.tools"],"faucets":["https://free-online-app.com/faucet-for-eth-evm-chains/"],"nativeCurrency":{"name":"Fantom","symbol":"FTM","decimals":18},"infoURL":"https://fantom.foundation","shortName":"ftm","chainId":250,"networkId":250,"icon":"fantom","explorers":[{"name":"ftmscan","url":"https://ftmscan.com","icon":"ftmscan","standard":"EIP3091"}]},{"name":"Huobi ECO Chain Testnet","chain":"Heco","rpc":["https://http-testnet.hecochain.com","wss://ws-testnet.hecochain.com"],"faucets":["https://scan-testnet.hecochain.com/faucet"],"nativeCurrency":{"name":"Huobi ECO Chain Test Native Token","symbol":"htt","decimals":18},"infoURL":"https://testnet.hecoinfo.com","shortName":"hecot","chainId":256,"networkId":256},{"name":"Setheum","chain":"Setheum","rpc":[],"faucets":[],"nativeCurrency":{"name":"Setheum","symbol":"SETM","decimals":18},"infoURL":"https://setheum.xyz","shortName":"setm","chainId":258,"networkId":258},{"name":"SUR Blockchain Network","chain":"SUR","rpc":["https://sur.nilin.org"],"faucets":[],"nativeCurrency":{"name":"Suren","symbol":"SRN","decimals":18},"infoURL":"https://surnet.org","shortName":"SUR","chainId":262,"networkId":1,"icon":"SUR","explorers":[{"name":"Surnet Explorer","url":"https://explorer.surnet.org","icon":"SUR","standard":"EIP3091"}]},{"name":"High Performance Blockchain","chain":"HPB","rpc":["https://hpbnode.com","wss://ws.hpbnode.com"],"faucets":["https://myhpbwallet.com/"],"nativeCurrency":{"name":"High Performance Blockchain Ether","symbol":"HPB","decimals":18},"infoURL":"https://hpb.io","shortName":"hpb","chainId":269,"networkId":269,"slip44":269,"explorers":[{"name":"hscan","url":"https://hscan.org","standard":"EIP3091"}]},{"name":"Boba Network","chain":"ETH","rpc":["https://mainnet.boba.network/"],"faucets":[],"nativeCurrency":{"name":"Ether","symbol":"ETH","decimals":18},"infoURL":"https://boba.network","shortName":"Boba","chainId":288,"networkId":288,"explorers":[{"name":"Blockscout","url":"https://blockexplorer.boba.network","standard":"none"}],"parent":{"type":"L2","chain":"eip155-1","bridges":[{"url":"https://gateway.boba.network"}]}},{"name":"KCC Mainnet","chain":"KCC","rpc":["https://rpc-mainnet.kcc.network","wss://rpc-ws-mainnet.kcc.network"],"faucets":[],"nativeCurrency":{"name":"KuCoin Token","symbol":"KCS","decimals":18},"infoURL":"https://kcc.io","shortName":"kcs","chainId":321,"networkId":1,"explorers":[{"name":"KCC Explorer","url":"https://explorer.kcc.io/en","standard":"EIP3091"}]},{"name":"KCC Testnet","chain":"KCC","rpc":["https://rpc-testnet.kcc.network","wss://rpc-ws-testnet.kcc.network"],"faucets":["https://faucet-testnet.kcc.network"],"nativeCurrency":{"name":"KuCoin Testnet Token","symbol":"tKCS","decimals":18},"infoURL":"https://scan-testnet.kcc.network","shortName":"kcst","chainId":322,"networkId":322,"explorers":[{"name":"kcc-scan","url":"https://scan-testnet.kcc.network","standard":"EIP3091"}]},{"name":"Web3Q Mainnet","chain":"Web3Q","rpc":["https://mainnet.web3q.io:8545"],"faucets":[],"nativeCurrency":{"name":"Web3Q","symbol":"W3Q","decimals":18},"infoURL":"https://web3q.io/home.w3q/","shortName":"w3q","chainId":333,"networkId":333,"explorers":[{"name":"w3q-mainnet","url":"https://explorer.mainnet.web3q.io","standard":"EIP3091"}]},{"name":"DFK Chain Test","chain":"DFK","icon":"dfk","network":"testnet","rpc":["https://subnets.avax.network/defi-kingdoms/dfk-chain-testnet/rpc"],"faucets":[],"nativeCurrency":{"name":"Jewel","symbol":"JEWEL","decimals":18},"infoURL":"https://defikingdoms.com","shortName":"DFKTEST","chainId":335,"networkId":335,"explorers":[{"name":"ethernal","url":"https://explorer-test.dfkchain.com","icon":"ethereum","standard":"none"}]},{"name":"Shiden","chain":"SDN","rpc":["https://rpc.shiden.astar.network:8545","wss://shiden.api.onfinality.io/public-ws"],"faucets":[],"nativeCurrency":{"name":"Shiden","symbol":"SDN","decimals":18},"infoURL":"https://shiden.astar.network/","shortName":"sdn","chainId":336,"networkId":336,"explorers":[{"name":"subscan","url":"https://shiden.subscan.io","standard":"none"}]},{"name":"Cronos Testnet","chain":"CRO","rpc":["https://cronos-testnet-3.crypto.org:8545","wss://cronos-testnet-3.crypto.org:8546"],"faucets":["https://cronos.crypto.org/faucet"],"nativeCurrency":{"name":"Crypto.org Test Coin","symbol":"TCRO","decimals":18},"infoURL":"https://cronos.crypto.org","shortName":"tcro","chainId":338,"networkId":338,"explorers":[{"name":"Cronos Testnet Explorer","url":"https://cronos.crypto.org/explorer/testnet3","standard":"none"}]},{"name":"Theta Mainnet","chain":"Theta","rpc":["https://eth-rpc-api.thetatoken.org/rpc"],"faucets":[],"nativeCurrency":{"name":"Theta Fuel","symbol":"TFUEL","decimals":18},"infoURL":"https://www.thetatoken.org/","shortName":"theta-mainnet","chainId":361,"networkId":361,"explorers":[{"name":"Theta Mainnet Explorer","url":"https://explorer.thetatoken.org","standard":"EIP3091"}]},{"name":"Theta Sapphire Testnet","chain":"Theta","rpc":["https://eth-rpc-api-sapphire.thetatoken.org/rpc"],"faucets":[],"nativeCurrency":{"name":"Theta Fuel","symbol":"TFUEL","decimals":18},"infoURL":"https://www.thetatoken.org/","shortName":"theta-sapphire","chainId":363,"networkId":363,"explorers":[{"name":"Theta Sapphire Testnet Explorer","url":"https://guardian-testnet-sapphire-explorer.thetatoken.org","standard":"EIP3091"}]},{"name":"Theta Amber Testnet","chain":"Theta","rpc":["https://eth-rpc-api-amber.thetatoken.org/rpc"],"faucets":[],"nativeCurrency":{"name":"Theta Fuel","symbol":"TFUEL","decimals":18},"infoURL":"https://www.thetatoken.org/","shortName":"theta-amber","chainId":364,"networkId":364,"explorers":[{"name":"Theta Amber Testnet Explorer","url":"https://guardian-testnet-amber-explorer.thetatoken.org","standard":"EIP3091"}]},{"name":"Theta Testnet","chain":"Theta","rpc":["https://eth-rpc-api-testnet.thetatoken.org/rpc"],"faucets":[],"nativeCurrency":{"name":"Theta Fuel","symbol":"TFUEL","decimals":18},"infoURL":"https://www.thetatoken.org/","shortName":"theta-testnet","chainId":365,"networkId":365,"explorers":[{"name":"Theta Testnet Explorer","url":"https://testnet-explorer.thetatoken.org","standard":"EIP3091"}]},{"name":"PulseChain Mainnet","shortName":"pls","chain":"PLS","chainId":369,"networkId":369,"infoURL":"https://pulsechain.com/","rpc":["https://rpc.mainnet.pulsechain.com/","wss://rpc.mainnet.pulsechain.com/"],"faucets":[],"nativeCurrency":{"name":"Pulse","symbol":"PLS","decimals":18}},{"name":"Lisinski","chain":"CRO","rpc":["https://rpc-bitfalls1.lisinski.online"],"faucets":["https://pipa.lisinski.online"],"nativeCurrency":{"name":"Lisinski Ether","symbol":"LISINSKI","decimals":18},"infoURL":"https://lisinski.online","shortName":"lisinski","chainId":385,"networkId":385},{"name":"Optimistic Ethereum Testnet Goerli","chain":"ETH","rpc":["https://goerli.optimism.io/"],"faucets":[],"nativeCurrency":{"name":"Görli Ether","symbol":"GOR","decimals":18},"infoURL":"https://optimism.io","shortName":"ogor","chainId":420,"networkId":420},{"name":"Rupaya","chain":"RUPX","rpc":[],"faucets":[],"nativeCurrency":{"name":"Rupaya","symbol":"RUPX","decimals":18},"infoURL":"https://www.rupx.io","shortName":"rupx","chainId":499,"networkId":499,"slip44":499},{"name":"Double-A Chain Mainnet","chain":"AAC","rpc":["https://rpc.acuteangle.com"],"faucets":[],"nativeCurrency":{"name":"Acuteangle Native Token","symbol":"AAC","decimals":18},"infoURL":"https://www.acuteangle.com/","shortName":"aac","chainId":512,"networkId":512,"slip44":1512,"explorers":[{"name":"aacscan","url":"https://scan.acuteangle.com","standard":"EIP3091"}],"icon":"aac"},{"name":"Double-A Chain Testnet","chain":"AAC","icon":"aac","rpc":["https://rpc-testnet.acuteangle.com"],"faucets":["https://scan-testnet.acuteangle.com/faucet"],"nativeCurrency":{"name":"Acuteangle Native Token","symbol":"AAC","decimals":18},"infoURL":"https://www.acuteangle.com/","shortName":"aact","chainId":513,"networkId":513,"explorers":[{"name":"aacscan-testnet","url":"https://scan-testnet.acuteangle.com","standard":"EIP3091"}]},{"name":"Vela1 Chain Mainnet","chain":"VELA1","rpc":["https://rpc.velaverse.io"],"faucets":[],"nativeCurrency":{"name":"CLASS COIN","symbol":"CLASS","decimals":18},"infoURL":"https://velaverse.io","shortName":"CLASS","chainId":555,"networkId":555,"explorers":[{"name":"Vela1 Chain Mainnet Explorer","url":"https://exp.velaverse.io","standard":"EIP3091"}]},{"name":"Tao Network","chain":"TAO","rpc":["https://rpc.testnet.tao.network","http://rpc.testnet.tao.network:8545","https://rpc.tao.network","wss://rpc.tao.network"],"faucets":[],"nativeCurrency":{"name":"Tao","symbol":"TAO","decimals":18},"infoURL":"https://tao.network","shortName":"tao","chainId":558,"networkId":558},{"name":"Metis Stardust Testnet","chain":"ETH","rpc":["https://stardust.metis.io/?owner=588"],"faucets":[],"nativeCurrency":{"name":"tMetis","symbol":"METIS","decimals":18},"infoURL":"https://www.metis.io","shortName":"metis-stardust","chainId":588,"networkId":588,"explorers":[{"name":"blockscout","url":"https://stardust-explorer.metis.io","standard":"EIP3091"}],"parent":{"type":"L2","chain":"eip155-4","bridges":[{"url":"https://bridge.metis.io"}]}},{"name":"Acala Mandala Testnet","chain":"mACA","rpc":[],"faucets":[],"nativeCurrency":{"name":"Acala Mandala Token","symbol":"mACA","decimals":18},"infoURL":"https://acala.network","shortName":"maca","chainId":595,"networkId":595},{"name":"Meshnyan testnet","chain":"MeshTestChain","rpc":[],"faucets":[],"nativeCurrency":{"name":"Meshnyan Testnet Native Token","symbol":"MESHT","decimals":18},"infoURL":"","shortName":"mesh-chain-testnet","chainId":600,"networkId":600},{"name":"Pixie Chain Testnet","chain":"PixieChain","rpc":["https://http-testnet.chain.pixie.xyz","wss://ws-testnet.chain.pixie.xyz"],"faucets":["https://chain.pixie.xyz/faucet"],"nativeCurrency":{"name":"Pixie Chain Testnet Native Token","symbol":"PCTT","decimals":18},"infoURL":"https://scan-testnet.chain.pixie.xyz","shortName":"pixie-chain-testnet","chainId":666,"networkId":666},{"name":"Karura Network","chain":"KAR","rpc":[],"faucets":[],"nativeCurrency":{"name":"Karura Token","symbol":"KAR","decimals":18},"infoURL":"https://karura.network","shortName":"kar","chainId":686,"networkId":686,"slip44":686},{"name":"BlockChain Station Mainnet","chain":"BCS","rpc":["https://rpc-mainnet.bcsdev.io","wss://rpc-ws-mainnet.bcsdev.io"],"faucets":[],"nativeCurrency":{"name":"BCS Token","symbol":"BCS","decimals":18},"infoURL":"https://blockchainstation.io","shortName":"bcs","chainId":707,"networkId":707,"explorers":[{"name":"BlockChain Station Explorer","url":"https://explorer.bcsdev.io","standard":"EIP3091"}]},{"name":"BlockChain Station Testnet","chain":"BCS","rpc":["https://rpc-testnet.bcsdev.io","wss://rpc-ws-testnet.bcsdev.io"],"faucets":["https://faucet.bcsdev.io"],"nativeCurrency":{"name":"BCS Testnet Token","symbol":"tBCS","decimals":18},"infoURL":"https://blockchainstation.io","shortName":"tbcs","chainId":708,"networkId":708,"explorers":[{"name":"BlockChain Station Explorer","url":"https://testnet.bcsdev.io","standard":"EIP3091"}]},{"name":"Factory 127 Testnet","chain":"FETH","rpc":[],"faucets":[],"nativeCurrency":{"name":"Factory 127 Token","symbol":"FETH","decimals":18},"infoURL":"https://www.factory127.com","shortName":"tfeth","chainId":721,"networkId":721,"slip44":721},{"name":"cheapETH","chain":"cheapETH","rpc":["https://node.cheapeth.org/rpc"],"faucets":[],"nativeCurrency":{"name":"cTH","symbol":"cTH","decimals":18},"infoURL":"https://cheapeth.org/","shortName":"cth","chainId":777,"networkId":777},{"name":"Acala Network","chain":"ACA","rpc":[],"faucets":[],"nativeCurrency":{"name":"Acala Token","symbol":"ACA","decimals":18},"infoURL":"https://acala.network","shortName":"aca","chainId":787,"networkId":787,"slip44":787},{"name":"Aerochain Testnet","chain":"Aerochain","network":"testnet","rpc":["https://testnet-rpc.aerochain.id/"],"faucets":["https://faucet.aerochain.id/"],"nativeCurrency":{"name":"Aerochain Testnet","symbol":"TAero","decimals":18},"infoURL":"https://aerochaincoin.org/","shortName":"taero","chainId":788,"networkId":788,"explorers":[{"name":"aeroscan","url":"https://testnet.aeroscan.id","standard":"EIP3091"}]},{"name":"Haic","chain":"Haic","rpc":["https://orig.haichain.io/"],"faucets":[],"nativeCurrency":{"name":"Haicoin","symbol":"HAIC","decimals":18},"infoURL":"https://www.haichain.io/","shortName":"haic","chainId":803,"networkId":803},{"name":"Callisto Mainnet","chain":"CLO","rpc":["https://clo-geth.0xinfra.com"],"faucets":[],"nativeCurrency":{"name":"Callisto Mainnet Ether","symbol":"CLO","decimals":18},"infoURL":"https://callisto.network","shortName":"clo","chainId":820,"networkId":1,"slip44":820},{"name":"Callisto Testnet","chain":"CLO","rpc":[],"faucets":[],"nativeCurrency":{"name":"Callisto Testnet Ether","symbol":"TCLO","decimals":18},"infoURL":"https://callisto.network","shortName":"tclo","chainId":821,"networkId":2},{"name":"Ambros Chain Mainnet","chain":"ambroschain","rpc":["https://mainnet.ambroschain.com"],"faucets":[],"nativeCurrency":{"name":"AMBROS","symbol":"AMBR","decimals":18},"infoURL":"https://bcmhunt.com/","shortName":"ambros","chainId":880,"networkId":880,"explorers":[{"name":"Ambros Chain Explorer","url":"https://explorer.ambroschain.com","standard":"none"}]},{"name":"Wanchain","chain":"WAN","rpc":["https://gwan-ssl.wandevs.org:56891/"],"faucets":[],"nativeCurrency":{"name":"Wancoin","symbol":"WAN","decimals":18},"infoURL":"https://www.wanscan.org","shortName":"wan","chainId":888,"networkId":888,"slip44":5718350},{"name":"Garizon Testnet Stage0","chain":"GAR","network":"testnet","icon":"garizon","rpc":["https://s0-testnet.garizon.net/rpc"],"faucets":["https://faucet-testnet.garizon.com"],"nativeCurrency":{"name":"Garizon","symbol":"GAR","decimals":18},"infoURL":"https://garizon.com","shortName":"gar-test-s0","chainId":900,"networkId":900,"explorers":[{"name":"explorer","url":"https://explorer-testnet.garizon.com","icon":"garizon","standard":"EIP3091"}]},{"name":"Garizon Testnet Stage1","chain":"GAR","network":"testnet","icon":"garizon","rpc":["https://s1-testnet.garizon.net/rpc"],"faucets":["https://faucet-testnet.garizon.com"],"nativeCurrency":{"name":"Garizon","symbol":"GAR","decimals":18},"infoURL":"https://garizon.com","shortName":"gar-test-s1","chainId":901,"networkId":901,"explorers":[{"name":"explorer","url":"https://explorer-testnet.garizon.com","icon":"garizon","standard":"EIP3091"}],"parent":{"chain":"eip155-900","type":"shard"}},{"name":"Garizon Testnet Stage2","chain":"GAR","network":"testnet","icon":"garizon","rpc":["https://s2-testnet.garizon.net/rpc"],"faucets":["https://faucet-testnet.garizon.com"],"nativeCurrency":{"name":"Garizon","symbol":"GAR","decimals":18},"infoURL":"https://garizon.com","shortName":"gar-test-s2","chainId":902,"networkId":902,"explorers":[{"name":"explorer","url":"https://explorer-testnet.garizon.com","icon":"garizon","standard":"EIP3091"}],"parent":{"chain":"eip155-900","type":"shard"}},{"name":"Garizon Testnet Stage3","chain":"GAR","network":"testnet","icon":"garizon","rpc":["https://s3-testnet.garizon.net/rpc"],"faucets":["https://faucet-testnet.garizon.com"],"nativeCurrency":{"name":"Garizon","symbol":"GAR","decimals":18},"infoURL":"https://garizon.com","shortName":"gar-test-s3","chainId":903,"networkId":903,"explorers":[{"name":"explorer","url":"https://explorer-testnet.garizon.com","icon":"garizon","standard":"EIP3091"}],"parent":{"chain":"eip155-900","type":"shard"}},{"name":"PulseChain Testnet","shortName":"tpls","chain":"tPLS","chainId":940,"networkId":940,"infoURL":"https://pulsechain.com/","rpc":["https://rpc.v2.testnet.pulsechain.com/","wss://rpc.v2.testnet.pulsechain.com/"],"faucets":["https://faucet.v2.testnet.pulsechain.com/"],"nativeCurrency":{"name":"Test Pulse","symbol":"tPLS","decimals":18}},{"name":"PulseChain Testnet v2b","shortName":"t2bpls","chain":"t2bPLS","network":"testnet-2b","chainId":941,"networkId":941,"infoURL":"https://pulsechain.com/","rpc":["https://rpc.v2b.testnet.pulsechain.com/","wss://rpc.v2b.testnet.pulsechain.com/"],"faucets":["https://faucet.v2b.testnet.pulsechain.com/"],"nativeCurrency":{"name":"Test Pulse","symbol":"tPLS","decimals":18}},{"name":"PulseChain Testnet v3","shortName":"t3pls","chain":"t3PLS","network":"testnet-3","chainId":942,"networkId":942,"infoURL":"https://pulsechain.com/","rpc":["https://rpc.v3.testnet.pulsechain.com/","wss://rpc.v3.testnet.pulsechain.com/"],"faucets":["https://faucet.v3.testnet.pulsechain.com/"],"nativeCurrency":{"name":"Test Pulse","symbol":"tPLS","decimals":18}},{"name":"Nepal Blockchain Network","chain":"YETI","rpc":["https://api.nepalblockchain.dev","https://api.nepalblockchain.network"],"faucets":["https://faucet.nepalblockchain.network"],"nativeCurrency":{"name":"Nepal Blockchain Network Ether","symbol":"YETI","decimals":18},"infoURL":"https://nepalblockchain.network","shortName":"yeti","chainId":977,"networkId":977},{"name":"Lucky Network","chain":"LN","rpc":["https://rpc.luckynetwork.org","wss://ws.lnscan.org","https://rpc.lnscan.org"],"faucets":[],"nativeCurrency":{"name":"Lucky","symbol":"L99","decimals":18},"infoURL":"https://luckynetwork.org","shortName":"ln","chainId":998,"networkId":998,"icon":"lucky","explorers":[{"name":"blockscout","url":"https://explorer.luckynetwork.org","standard":"none"},{"name":"expedition","url":"https://lnscan.org","standard":"none"}]},{"name":"Wanchain Testnet","chain":"WAN","rpc":["https://gwan-ssl.wandevs.org:46891/"],"faucets":[],"nativeCurrency":{"name":"Wancoin","symbol":"WAN","decimals":18},"infoURL":"https://testnet.wanscan.org","shortName":"twan","chainId":999,"networkId":999},{"name":"Klaytn Testnet Baobab","chain":"KLAY","rpc":["https://api.baobab.klaytn.net:8651"],"faucets":["https://baobab.wallet.klaytn.com/access?next=faucet"],"nativeCurrency":{"name":"KLAY","symbol":"KLAY","decimals":18},"infoURL":"https://www.klaytn.com/","shortName":"Baobab","chainId":1001,"networkId":1001},{"name":"Newton Testnet","chain":"NEW","rpc":["https://rpc1.newchain.newtonproject.org"],"faucets":[],"nativeCurrency":{"name":"Newton","symbol":"NEW","decimals":18},"infoURL":"https://www.newtonproject.org/","shortName":"tnew","chainId":1007,"networkId":1007},{"name":"Evrice Network","chain":"EVC","rpc":["https://meta.evrice.com"],"faucets":[],"nativeCurrency":{"name":"Evrice","symbol":"EVC","decimals":18},"infoURL":"https://evrice.com","shortName":"EVC","chainId":1010,"networkId":1010,"slip44":1020},{"name":"Newton","chain":"NEW","rpc":["https://global.rpc.mainnet.newtonproject.org"],"faucets":[],"nativeCurrency":{"name":"Newton","symbol":"NEW","decimals":18},"infoURL":"https://www.newtonproject.org/","shortName":"new","chainId":1012,"networkId":1012},{"name":"Sakura","chain":"Sakura","rpc":[],"faucets":[],"nativeCurrency":{"name":"Sakura","symbol":"SKU","decimals":18},"infoURL":"https://clover.finance/sakura","shortName":"sku","chainId":1022,"networkId":1022},{"name":"Clover Testnet","chain":"Clover","rpc":[],"faucets":[],"nativeCurrency":{"name":"Clover","symbol":"CLV","decimals":18},"infoURL":"https://clover.finance","shortName":"tclv","chainId":1023,"networkId":1023},{"name":"Clover Mainnet","chain":"Clover","rpc":["https://rpc-ivy.clover.finance","https://rpc-ivy-2.clover.finance","https://rpc-ivy-3.clover.finance"],"faucets":[],"nativeCurrency":{"name":"Clover","symbol":"CLV","decimals":18},"infoURL":"https://clover.finance","shortName":"clv","chainId":1024,"networkId":1024},{"name":"BitTorrent Chain Testnet","chain":"BTTC","rpc":["https://testrpc.bittorrentchain.io/"],"faucets":[],"nativeCurrency":{"name":"BitTorrent","symbol":"BTT","decimals":18},"infoURL":"https://bittorrentchain.io/","shortName":"tbtt","chainId":1028,"networkId":1028,"explorers":[{"name":"testbttcscan","url":"https://testscan.bittorrentchain.io","standard":"none"}]},{"name":"Conflux eSpace","chain":"Conflux","network":"mainnet","rpc":["https://evm.confluxrpc.com"],"faucets":[],"nativeCurrency":{"name":"CFX","symbol":"CFX","decimals":18},"infoURL":"https://confluxnetwork.org","shortName":"cfx","chainId":1030,"networkId":1030,"icon":"conflux","explorers":[{"name":"Conflux Scan","url":"https://evm.confluxscan.net","standard":"none"}]},{"name":"Metis Andromeda Mainnet","chain":"ETH","rpc":["https://andromeda.metis.io/?owner=1088"],"faucets":[],"nativeCurrency":{"name":"Metis","symbol":"METIS","decimals":18},"infoURL":"https://www.metis.io","shortName":"metis-andromeda","chainId":1088,"networkId":1088,"explorers":[{"name":"blockscout","url":"https://andromeda-explorer.metis.io","standard":"EIP3091"}],"parent":{"type":"L2","chain":"eip155-1","bridges":[{"url":"https://bridge.metis.io"}]}},{"name":"MathChain","chain":"MATH","rpc":["https://mathchain-asia.maiziqianbao.net/rpc","https://mathchain-us.maiziqianbao.net/rpc"],"faucets":[],"nativeCurrency":{"name":"MathChain","symbol":"MATH","decimals":18},"infoURL":"https://mathchain.org","shortName":"MATH","chainId":1139,"networkId":1139},{"name":"MathChain Testnet","chain":"MATH","rpc":["https://galois-hk.maiziqianbao.net/rpc"],"faucets":["https://scan.boka.network/#/Galois/faucet"],"nativeCurrency":{"name":"MathChain","symbol":"MATH","decimals":18},"infoURL":"https://mathchain.org","shortName":"tMATH","chainId":1140,"networkId":1140},{"name":"Iora Chain","chain":"IORA","network":"iorachain","icon":"iorachain","rpc":["https://dataseed.iorachain.com"],"faucets":[],"nativeCurrency":{"name":"Iora","symbol":"IORA","decimals":18},"infoURL":"https://iorachain.com","shortName":"iora","chainId":1197,"networkId":1197,"explorers":[{"name":"ioraexplorer","url":"https://explorer.iorachain.com","standard":"EIP3091"}]},{"name":"Evanesco Testnet","chain":"Evanesco Testnet","network":"avis","rpc":["https://seed5.evanesco.org:8547"],"faucets":[],"nativeCurrency":{"name":"AVIS","symbol":"AVIS","decimals":18},"infoURL":"https://evanesco.org/","shortName":"avis","chainId":1201,"networkId":1201},{"name":"World Trade Technical Chain Mainnet","chain":"WTT","rpc":["https://rpc.cadaut.com","wss://rpc.cadaut.com/ws"],"faucets":[],"nativeCurrency":{"name":"World Trade Token","symbol":"WTT","decimals":18},"infoURL":"http://www.cadaut.com","shortName":"wtt","chainId":1202,"networkId":2048,"explorers":[{"name":"WTTScout","url":"https://explorer.cadaut.com","standard":"EIP3091"}]},{"name":"Popcateum Mainnet","chain":"POPCATEUM","rpc":["https://dataseed.popcateum.org"],"faucets":[],"nativeCurrency":{"name":"Popcat","symbol":"POP","decimals":18},"infoURL":"https://popcateum.org","shortName":"popcat","chainId":1213,"networkId":1213,"explorers":[{"name":"popcateum explorer","url":"https://explorer.popcateum.org","standard":"none"}]},{"name":"EnterChain Mainnet","chain":"ENTER","network":"mainnet","rpc":["https://tapi.entercoin.net/"],"faucets":[],"nativeCurrency":{"name":"EnterCoin","symbol":"ENTER","decimals":18},"infoURL":"https://entercoin.net","shortName":"enter","chainId":1214,"networkId":1214,"icon":"enter","explorers":[{"name":"Enter Explorer - Expenter","url":"https://explorer.entercoin.net","icon":"enter","standard":"EIP3091"}]},{"name":"HALO Mainnet","chain":"HALO","rpc":["https://nodes.halo.land"],"faucets":[],"nativeCurrency":{"name":"HALO","symbol":"HO","decimals":18},"infoURL":"https://halo.land/#/","shortName":"HO","chainId":1280,"networkId":1280,"explorers":[{"name":"HALOexplorer","url":"https://browser.halo.land","standard":"none"}]},{"name":"Moonbeam","chain":"MOON","rpc":["https://rpc.api.moonbeam.network","wss://wss.api.moonbeam.network"],"faucets":[],"nativeCurrency":{"name":"Glimmer","symbol":"GLMR","decimals":18},"infoURL":"https://moonbeam.network/networks/moonbeam/","shortName":"mbeam","chainId":1284,"networkId":1284,"explorers":[{"name":"moonscan","url":"https://moonbeam.moonscan.io","standard":"none"}]},{"name":"Moonriver","chain":"MOON","rpc":["https://rpc.api.moonriver.moonbeam.network","wss://wss.api.moonriver.moonbeam.network"],"faucets":[],"nativeCurrency":{"name":"Moonriver","symbol":"MOVR","decimals":18},"infoURL":"https://moonbeam.network/networks/moonriver/","shortName":"mriver","chainId":1285,"networkId":1285,"explorers":[{"name":"moonscan","url":"https://moonriver.moonscan.io","standard":"none"}]},{"name":"Moonrock old","chain":"MOON","rpc":[],"faucets":[],"nativeCurrency":{"name":"Rocs","symbol":"ROC","decimals":18},"infoURL":"","shortName":"mrock-old","chainId":1286,"networkId":1286,"deprecated":true},{"name":"Moonbase Alpha","chain":"MOON","rpc":["https://rpc.api.moonbase.moonbeam.network","wss://wss.api.moonbase.moonbeam.network"],"faucets":[],"nativeCurrency":{"name":"Dev","symbol":"DEV","decimals":18},"infoURL":"https://docs.moonbeam.network/networks/testnet/","shortName":"mbase","chainId":1287,"networkId":1287,"explorers":[{"name":"moonscan","url":"https://moonbase.moonscan.io","standard":"none"}]},{"name":"Moonrock","chain":"MOON","rpc":["https://rpc.api.moonrock.moonbeam.network","wss://wss.api.moonrock.moonbeam.network"],"faucets":[],"nativeCurrency":{"name":"Rocs","symbol":"ROC","decimals":18},"infoURL":"https://docs.moonbeam.network/learn/platform/networks/overview/","shortName":"mrock","chainId":1288,"networkId":1288},{"name":"CENNZnet Azalea","chain":"CENNZnet","network":"azalea","rpc":["https://cennznet.unfrastructure.io/public"],"faucets":[],"nativeCurrency":{"name":"CPAY","symbol":"CPAY","decimals":18},"infoURL":"https://cennz.net","shortName":"cennz-a","chainId":1337,"networkId":1337,"icon":"cennz","explorers":[{"name":"UNcover","url":"https://uncoverexplorer.com","standard":"none"}]},{"name":"Catecoin Chain Mainnet","chain":"Catechain","rpc":["https://send.catechain.com"],"faucets":[],"nativeCurrency":{"name":"Catecoin","symbol":"CATE","decimals":18},"infoURL":"https://catechain.com","shortName":"cate","chainId":1618,"networkId":1618},{"name":"Atheios","chain":"ATH","rpc":["https://wallet.atheios.com:8797"],"faucets":[],"nativeCurrency":{"name":"Atheios Ether","symbol":"ATH","decimals":18},"infoURL":"https://atheios.com","shortName":"ath","chainId":1620,"networkId":11235813,"slip44":1620},{"name":"Btachain","chain":"btachain","rpc":["https://dataseed1.btachain.com/"],"faucets":[],"nativeCurrency":{"name":"Bitcoin Asset","symbol":"BTA","decimals":18},"infoURL":"https://bitcoinasset.io/","shortName":"bta","chainId":1657,"networkId":1657},{"name":"LUDAN Mainnet","chain":"LUDAN","rpc":["http://rpc.ludan.org:55001/"],"faucets":[],"nativeCurrency":{"name":"LUDAN","symbol":"LUDAN","decimals":18},"infoURL":"https://www.ludan.org/","shortName":"LUDAN","icon":"ludan","chainId":1688,"networkId":1688},{"name":"Teslafunds","chain":"TSF","rpc":["https://tsfapi.europool.me"],"faucets":[],"nativeCurrency":{"name":"Teslafunds Ether","symbol":"TSF","decimals":18},"infoURL":"https://teslafunds.io","shortName":"tsf","chainId":1856,"networkId":1},{"name":"BON Network","chain":"BON","network":"testnet","rpc":["http://8.210.150.70:8545"],"faucets":[],"nativeCurrency":{"name":"BOYACoin","symbol":"BOY","decimals":18},"infoURL":"https://boyanet.org","shortName":"boya","chainId":1898,"networkId":1,"explorers":[{"name":"explorer","url":"https://explorer.boyanet.org:4001","standard":"EIP3091"}]},{"name":"EtherGem","chain":"EGEM","rpc":["https://jsonrpc.egem.io/custom"],"faucets":[],"nativeCurrency":{"name":"EtherGem Ether","symbol":"EGEM","decimals":18},"infoURL":"https://egem.io","shortName":"egem","chainId":1987,"networkId":1987,"slip44":1987},{"name":"Milkomeda C1 Mainnet","chain":"milkAda","icon":"milkomeda","network":"mainnet","rpc":["https://rpc-mainnet-cardano-evm.c1.milkomeda.com","wss://rpc-mainnet-cardano-evm.c1.milkomeda.com"],"faucets":[],"nativeCurrency":{"name":"milkAda","symbol":"milkAda","decimals":18},"infoURL":"https://milkomeda.com","shortName":"milkAda","chainId":2001,"networkId":2001,"explorers":[{"name":"Blockscout","url":"https://explorer-mainnet-cardano-evm.c1.milkomeda.com","standard":"none"}]},{"name":"420coin","chain":"420","rpc":[],"faucets":[],"nativeCurrency":{"name":"Fourtwenty","symbol":"420","decimals":18},"infoURL":"https://420integrated.com","shortName":"420","chainId":2020,"networkId":2020},{"name":"Edgeware Mainnet","chain":"EDG","rpc":["https://mainnet1.edgewa.re"],"faucets":[],"nativeCurrency":{"name":"Edge","symbol":"EDG","decimals":18},"infoURL":"http://edgewa.re","shortName":"edg","chainId":2021,"networkId":2021},{"name":"Beresheet Testnet","chain":"EDG","rpc":["https://beresheet1.edgewa.re"],"faucets":[],"nativeCurrency":{"name":"Testnet Edge","symbol":"tEDG","decimals":18},"infoURL":"http://edgewa.re","shortName":"edgt","chainId":2022,"networkId":2022},{"name":"Rangers Protocol Mainnet","chain":"Rangers","icon":"rangers","rpc":["https://mainnet.rangersprotocol.com/api/jsonrpc"],"faucets":[],"nativeCurrency":{"name":"Rangers Protocol Gas","symbol":"RPG","decimals":18},"infoURL":"https://rangersprotocol.com","shortName":"rpg","chainId":2025,"networkId":2025,"slip44":1008,"explorers":[{"name":"rangersscan","url":"https://scan.rangersprotocol.com","standard":"none"}]},{"name":"Ecoball Mainnet","chain":"ECO","rpc":["https://api.ecoball.org/ecoball/"],"faucets":[],"nativeCurrency":{"name":"Ecoball Coin","symbol":"ECO","decimals":18},"infoURL":"https://ecoball.org","shortName":"eco","chainId":2100,"networkId":2100,"explorers":[{"name":"Ecoball Explorer","url":"https://scan.ecoball.org","standard":"EIP3091"}]},{"name":"Ecoball Testnet Espuma","chain":"ECO","rpc":["https://api.ecoball.org/espuma/"],"faucets":[],"nativeCurrency":{"name":"Espuma Coin","symbol":"ECO","decimals":18},"infoURL":"https://ecoball.org","shortName":"esp","chainId":2101,"networkId":2101,"explorers":[{"name":"Ecoball Testnet Explorer","url":"https://espuma-scan.ecoball.org","standard":"EIP3091"}]},{"name":"Evanesco Mainnet","chain":"EVA","network":"mainnet","rpc":["https://seed4.evanesco.org:8546"],"faucets":[],"nativeCurrency":{"name":"EVA","symbol":"EVA","decimals":18},"infoURL":"https://evanesco.org/","shortName":"evanesco","chainId":2213,"networkId":2213,"icon":"evanesco","explorers":[{"name":"Evanesco Explorer","url":"https://explorer.evanesco.org","standard":"none"}]},{"name":"Kava EVM Testnet","chain":"KAVA","network":"testnet","rpc":["https://evm.evm-alpha.kava.io","wss://evm-ws.evm-alpha.kava.io"],"faucets":["https://faucet.kava.io"],"nativeCurrency":{"name":"Kava","symbol":"KAVA","decimals":18},"infoURL":"https://www.kava.io","shortName":"kava","chainId":2221,"networkId":2221,"icon":"kava","explorers":[{"name":"Kava Testnet Explorer","url":"https://explorer.evm-alpha.kava.io","standard":"EIP3091","icon":"kava"}]},{"name":"Kortho Mainnet","chain":"Kortho Chain","rpc":["https://www.kortho-chain.com"],"faucets":[],"nativeCurrency":{"name":"KorthoChain","symbol":"KTO","decimals":11},"infoURL":"https://www.kortho.io/","shortName":"ktoc","chainId":2559,"networkId":2559},{"name":"CENNZnet Rata","chain":"CENNZnet","network":"rata","rpc":["https://rata.centrality.me/public"],"faucets":["https://app-faucet.centrality.me"],"nativeCurrency":{"name":"CPAY","symbol":"CPAY","decimals":18},"infoURL":"https://cennz.net","shortName":"cennz-r","chainId":3000,"networkId":3000,"icon":"cennz"},{"name":"CENNZnet Nikau","chain":"CENNZnet","network":"nikau","rpc":["https://nikau.centrality.me/public"],"faucets":["https://app-faucet.centrality.me"],"nativeCurrency":{"name":"CPAY","symbol":"CPAY","decimals":18},"infoURL":"https://cennz.net","shortName":"cennz-n","chainId":3001,"networkId":3001,"icon":"cennz","explorers":[{"name":"UNcover","url":"https://www.uncoverexplorer.com/?network=Nikau","standard":"none"}]},{"name":"ZCore Testnet","chain":"Beach","icon":"zcore","rpc":["https://rpc-testnet.zcore.cash"],"faucets":["https://faucet.zcore.cash"],"nativeCurrency":{"name":"ZCore","symbol":"ZCR","decimals":18},"infoURL":"https://zcore.cash","shortName":"zcrbeach","chainId":3331,"networkId":3331},{"name":"Web3Q Testnet","chain":"Web3Q","rpc":["https://testnet.web3q.io:8545"],"faucets":[],"nativeCurrency":{"name":"Web3Q","symbol":"W3Q","decimals":18},"infoURL":"https://testnet.web3q.io/home.w3q/","shortName":"w3q-t","chainId":3333,"networkId":3333,"explorers":[{"name":"w3q-testnet","url":"https://explorer.testnet.web3q.io","standard":"EIP3091"}]},{"name":"Web3Q Galileo","chain":"Web3Q","rpc":["https://galileo.web3q.io:8545"],"faucets":[],"nativeCurrency":{"name":"Web3Q","symbol":"W3Q","decimals":18},"infoURL":"https://galileo.web3q.io/home.w3q/","shortName":"w3q-g","chainId":3334,"networkId":3334,"explorers":[{"name":"w3q-galileo","url":"https://explorer.galileo.web3q.io","standard":"EIP3091"}]},{"name":"Paribu Net Mainnet","chain":"PRB","network":"Paribu Net","rpc":["https://rpc.paribu.network"],"faucets":[],"nativeCurrency":{"name":"PRB","symbol":"PRB","decimals":18},"infoURL":"https://net.paribu.com","shortName":"prb","chainId":3400,"networkId":3400,"icon":"prb","explorers":[{"name":"Paribu Net Explorer","url":"https://explorer.paribu.network","icon":"explorer","standard":"EIP3091"}]},{"name":"Paribu Net Testnet","chain":"PRB","network":"Paribu Net","rpc":["https://rpc.testnet.paribuscan.com"],"faucets":["https://faucet.paribuscan.com"],"nativeCurrency":{"name":"PRB","symbol":"PRB","decimals":18},"infoURL":"https://net.paribu.com","shortName":"prbtestnet","chainId":3500,"networkId":3500,"icon":"prb","explorers":[{"name":"Paribu Net Testnet Explorer","url":"https://testnet.paribuscan.com","icon":"explorer","standard":"EIP3091"}]},{"name":"Bittex Mainnet","chain":"BTX","rpc":["https://rpc1.bittexscan.info","https://rpc2.bittexscan.info"],"faucets":[],"nativeCurrency":{"name":"Bittex","symbol":"BTX","decimals":18},"infoURL":"https://bittexscan.com","shortName":"btx","chainId":3690,"networkId":3690,"icon":"ethereum","explorers":[{"name":"bittexscan","url":"https://bittexscan.com","icon":"etherscan","standard":"EIP3091"}]},{"name":"DYNO Mainnet","chain":"DYNO","rpc":["https://api.dynoprotocol.com"],"faucets":["https://faucet.dynoscan.io"],"nativeCurrency":{"name":"DYNO Token","symbol":"DYNO","decimals":18},"infoURL":"https://dynoprotocol.com","shortName":"dyno","chainId":3966,"networkId":3966,"explorers":[{"name":"DYNO Explorer","url":"https://dynoscan.io","standard":"EIP3091"}]},{"name":"DYNO Testnet","chain":"DYNO","rpc":["https://tapi.dynoprotocol.com"],"faucets":["https://faucet.dynoscan.io"],"nativeCurrency":{"name":"DYNO Token","symbol":"tDYNO","decimals":18},"infoURL":"https://dynoprotocol.com","shortName":"tdyno","chainId":3967,"networkId":3967,"explorers":[{"name":"DYNO Explorer","url":"https://testnet.dynoscan.io","standard":"EIP3091"}]},{"name":"Fantom Testnet","chain":"FTM","rpc":["https://rpc.testnet.fantom.network"],"faucets":["https://faucet.fantom.network"],"nativeCurrency":{"name":"Fantom","symbol":"FTM","decimals":18},"infoURL":"https://docs.fantom.foundation/quick-start/short-guide#fantom-testnet","shortName":"tftm","chainId":4002,"networkId":4002,"icon":"fantom","explorers":[{"name":"ftmscan","url":"https://testnet.ftmscan.com","icon":"ftmscan","standard":"EIP3091"}]},{"name":"AIOZ Network Testnet","chain":"AIOZ","network":"testnet","icon":"aioz","rpc":["https://eth-ds.testnet.aioz.network"],"faucets":[],"nativeCurrency":{"name":"testAIOZ","symbol":"AIOZ","decimals":18},"infoURL":"https://aioz.network","shortName":"aioz-testnet","chainId":4102,"networkId":4102,"slip44":60,"explorers":[{"name":"AIOZ Network Testnet Explorer","url":"https://testnet.explorer.aioz.network","standard":"EIP3091"}]},{"name":"IoTeX Network Mainnet","chain":"iotex.io","rpc":["https://babel-api.mainnet.iotex.io"],"faucets":[],"nativeCurrency":{"name":"IoTeX","symbol":"IOTX","decimals":18},"infoURL":"https://iotex.io","shortName":"iotex-mainnet","chainId":4689,"networkId":4689,"explorers":[{"name":"iotexscan","url":"https://iotexscan.io","standard":"EIP3091"}]},{"name":"IoTeX Network Testnet","chain":"iotex.io","rpc":["https://babel-api.testnet.iotex.io"],"faucets":["https://faucet.iotex.io/"],"nativeCurrency":{"name":"IoTeX","symbol":"IOTX","decimals":18},"infoURL":"https://iotex.io","shortName":"iotex-testnet","chainId":4690,"networkId":4690,"explorers":[{"name":"testnet iotexscan","url":"https://testnet.iotexscan.io","standard":"EIP3091"}]},{"name":"Venidium Testnet","chain":"XVM","rpc":["https://rpc-evm-testnet.venidium.io"],"faucets":[],"nativeCurrency":{"name":"Venidium","symbol":"XVM","decimals":18},"infoURL":"https://venidium.io","shortName":"xvm","chainId":4918,"networkId":4918,"explorers":[{"name":"Venidium EVM Testnet Explorer","url":"https://evm-testnet.venidiumexplorer.com","standard":"EIP3091"}]},{"name":"EraSwap Mainnet","chain":"ESN","icon":"eraswap","rpc":["https://mainnet.eraswap.network","https://rpc-mumbai.mainnet.eraswap.network"],"faucets":[],"nativeCurrency":{"name":"EraSwap","symbol":"ES","decimals":18},"infoURL":"https://eraswap.info/","shortName":"es","chainId":5197,"networkId":5197},{"name":"Uzmi Network Mainnet","chain":"UZMI","rpc":["https://network.uzmigames.com.br/"],"faucets":[],"nativeCurrency":{"name":"UZMI","symbol":"UZMI","decimals":18},"infoURL":"https://uzmigames.com.br/","shortName":"UZMI","chainId":5315,"networkId":5315},{"name":"Syscoin Tanenbaum Testnet","chain":"SYS","rpc":["https://rpc.tanenbaum.io","wss://rpc.tanenbaum.io/wss"],"faucets":["https://faucet.tanenbaum.io"],"nativeCurrency":{"name":"Testnet Syscoin","symbol":"tSYS","decimals":18},"infoURL":"https://syscoin.org","shortName":"tsys","chainId":5700,"networkId":5700,"explorers":[{"name":"Syscoin Testnet Block Explorer","url":"https://tanenbaum.io","standard":"EIP3091"}]},{"name":"Digest Swarm Chain","chain":"DSC","icon":"swarmchain","rpc":["https://rpc.digestgroup.ltd"],"faucets":[],"nativeCurrency":{"name":"DigestCoin","symbol":"DGCC","decimals":18},"infoURL":"https://digestgroup.ltd","shortName":"dgcc","chainId":5777,"networkId":5777,"explorers":[{"name":"swarmexplorer","url":"https://explorer.digestgroup.ltd","standard":"EIP3091"}]},{"name":"Ontology Testnet","chain":"Ontology","rpc":["https://polaris1.ont.io:20339","https://polaris2.ont.io:20339","https://polaris3.ont.io:20339","https://polaris4.ont.io:20339"],"faucets":["https://developer.ont.io/"],"nativeCurrency":{"name":"ONG","symbol":"ONG","decimals":9},"infoURL":"https://ont.io/","shortName":"Ontology Testnet","chainId":5851,"networkId":5851,"explorers":[{"name":"explorer","url":"https://explorer.ont.io/testnet","standard":"EIP3091"}]},{"name":"Wegochain Rubidium Mainnet","chain":"RBD","rpc":["https://proxy.wegochain.io","http://wallet.wegochain.io:7764"],"faucets":[],"nativeCurrency":{"name":"Rubid","symbol":"RBD","decimals":18},"infoURL":"https://www.wegochain.io","shortName":"rbd","chainId":5869,"networkId":5869,"explorers":[{"name":"wegoscan2","url":"https://scan2.wegochain.io","standard":"EIP3091"}]},{"name":"Pixie Chain Mainnet","chain":"PixieChain","rpc":["https://http-mainnet.chain.pixie.xyz","wss://ws-mainnet.chain.pixie.xyz"],"faucets":[],"nativeCurrency":{"name":"Pixie Chain Native Token","symbol":"PIX","decimals":18},"infoURL":"https://chain.pixie.xyz","shortName":"pixie-chain","chainId":6626,"networkId":6626,"explorers":[{"name":"blockscout","url":"https://scan.chain.pixie.xyz","standard":"none"}]},{"name":"Shyft Mainnet","chain":"SHYFT","icon":"shyft","rpc":["https://rpc.shyft.network/"],"faucets":[],"nativeCurrency":{"name":"Shyft","symbol":"SHYFT","decimals":18},"infoURL":"https://shyft.network","shortName":"shyft","chainId":7341,"networkId":7341,"slip44":2147490989,"explorers":[{"name":"Shyft BX","url":"https://bx.shyft.network","standard":"EIP3091"}]},{"name":"Hazlor Testnet","chain":"SCAS","rpc":["https://hatlas.rpc.hazlor.com:8545","wss://hatlas.rpc.hazlor.com:8546"],"faucets":["https://faucet.hazlor.com"],"nativeCurrency":{"name":"Hazlor Test Coin","symbol":"TSCAS","decimals":18},"infoURL":"https://hazlor.com","shortName":"tscas","chainId":7878,"networkId":7878,"explorers":[{"name":"Hazlor Testnet Explorer","url":"https://explorer.hazlor.com","standard":"none"}]},{"name":"Teleport","chain":"Teleport","rpc":["https://evm-rpc.teleport.network"],"faucets":[],"nativeCurrency":{"name":"Tele","symbol":"TELE","decimals":18},"infoURL":"https://teleport.network","shortName":"teleport","chainId":8000,"networkId":8000,"icon":"teleport","explorers":[{"name":"Teleport EVM Explorer (Blockscout)","url":"https://evm-explorer.teleport.network","standard":"none","icon":"teleport"},{"name":"Teleport Cosmos Explorer (Big Dipper)","url":"https://explorer.teleport.network","standard":"none","icon":"teleport"}]},{"name":"Teleport Testnet","chain":"Teleport","rpc":["https://evm-rpc.testnet.teleport.network"],"faucets":["https://chain-docs.teleport.network/testnet/faucet.html"],"nativeCurrency":{"name":"Tele","symbol":"TELE","decimals":18},"infoURL":"https://teleport.network","shortName":"teleport-testnet","chainId":8001,"networkId":8001,"icon":"teleport","explorers":[{"name":"Teleport EVM Explorer (Blockscout)","url":"https://evm-explorer.testnet.teleport.network","standard":"none","icon":"teleport"},{"name":"Teleport Cosmos Explorer (Big Dipper)","url":"https://explorer.testnet.teleport.network","standard":"none","icon":"teleport"}]},{"name":"MDGL Testnet","chain":"MDGL","rpc":["https://testnet.mdgl.io"],"faucets":[],"nativeCurrency":{"name":"MDGL Token","symbol":"MDGLT","decimals":18},"infoURL":"https://mdgl.io","shortName":"mdgl","chainId":8029,"networkId":8029},{"name":"GeneChain Adenine Testnet","chain":"GeneChain","rpc":["https://rpc-testnet.genechain.io"],"faucets":["https://faucet.genechain.io"],"nativeCurrency":{"name":"Testnet RNA","symbol":"tRNA","decimals":18},"infoURL":"https://scan-testnet.genechain.io/","shortName":"GeneChainAdn","chainId":8080,"networkId":8080,"explorers":[{"name":"GeneChain Adenine Testnet Scan","url":"https://scan-testnet.genechain.io","standard":"EIP3091"}]},{"name":"Klaytn Mainnet Cypress","chain":"KLAY","rpc":["https://public-node-api.klaytnapi.com/v1/cypress"],"faucets":[],"nativeCurrency":{"name":"KLAY","symbol":"KLAY","decimals":18},"infoURL":"https://www.klaytn.com/","shortName":"Cypress","chainId":8217,"networkId":8217,"slip44":8217,"explorers":[{"name":"Klaytnscope","url":"https://scope.klaytn.com","standard":"none"}]},{"name":"KorthoTest","chain":"Kortho","rpc":["https://www.krotho-test.net"],"faucets":[],"nativeCurrency":{"name":"Kortho Test","symbol":"KTO","decimals":11},"infoURL":"https://www.kortho.io/","shortName":"Kortho","chainId":8285,"networkId":8285},{"name":"TOOL Global Mainnet","chain":"OLO","rpc":["https://mainnet-web3.wolot.io"],"faucets":[],"nativeCurrency":{"name":"TOOL Global","symbol":"OLO","decimals":18},"infoURL":"https://ibdt.io","shortName":"olo","chainId":8723,"networkId":8723,"slip44":479,"explorers":[{"name":"OLO Block Explorer","url":"https://www.olo.network","standard":"EIP3091"}]},{"name":"TOOL Global Testnet","chain":"OLO","rpc":["https://testnet-web3.wolot.io"],"faucets":["https://testnet-explorer.wolot.io"],"nativeCurrency":{"name":"TOOL Global","symbol":"OLO","decimals":18},"infoURL":"https://testnet-explorer.wolot.io","shortName":"tolo","chainId":8724,"networkId":8724,"slip44":479},{"name":"Ambros Chain Testnet","chain":"ambroschain","rpc":["https://testnet.ambroschain.com"],"faucets":[],"nativeCurrency":{"name":"AMBROS","symbol":"AMBR","decimals":18},"infoURL":"https://bcmhunt.com/","shortName":"ambrostestnet","chainId":8888,"networkId":8888,"explorers":[{"name":"Ambros Chain Explorer","url":"https://testexplorer.ambroschain.com","standard":"none"}]},{"name":"bloxberg","chain":"bloxberg","rpc":["https://core.bloxberg.org"],"faucets":["https://faucet.bloxberg.org/"],"nativeCurrency":{"name":"BERG","symbol":"U+25B3","decimals":18},"infoURL":"https://bloxberg.org","shortName":"berg","chainId":8995,"networkId":8995},{"name":"Evmos Testnet","chain":"Evmos","rpc":["https://evmos-archive-testnet.api.bdnodes.net:8545"],"faucets":["https://faucet.evmos.dev"],"nativeCurrency":{"name":"test-Evmos","symbol":"tEVMOS","decimals":18},"infoURL":"https://evmos.org","shortName":"evmos-testnet","chainId":9000,"networkId":9000,"icon":"evmos","explorers":[{"name":"Evmos EVM Explorer (Blockscout)","url":"https://evm.evmos.dev","standard":"none","icon":"evmos"},{"name":"Evmos Cosmos Explorer","url":"https://explorer.evmos.dev","standard":"none","icon":"evmos"}]},{"name":"Evmos","chain":"Evmos","rpc":["https://eth.bd.evmos.org:8545"],"faucets":[],"nativeCurrency":{"name":"Evmos","symbol":"EVMOS","decimals":18},"infoURL":"https://evmos.org","shortName":"evmos","chainId":9001,"networkId":9001,"icon":"evmos","explorers":[{"name":"Evmos EVM Explorer (Blockscout)","url":"https://evm.evmos.org","standard":"none","icon":"evmos"},{"name":"Evmos Cosmos Explorer (Mintscan)","url":"https://www.mintscan.io/evmos","standard":"none","icon":"evmos"}]},{"name":"Genesis Coin","chain":"Genesis","rpc":["https://genesis-gn.com","wss://genesis-gn.com"],"faucets":[],"nativeCurrency":{"name":"GN Coin","symbol":"GNC","decimals":18},"infoURL":"https://genesis-gn.com","shortName":"GENEC","chainId":9100,"networkId":9100},{"name":"Rangers Protocol Testnet Robin","chain":"Rangers","icon":"rangers","rpc":["https://robin.rangersprotocol.com/api/jsonrpc"],"faucets":["https://robin-faucet.rangersprotocol.com"],"nativeCurrency":{"name":"Rangers Protocol Gas","symbol":"tRPG","decimals":18},"infoURL":"https://rangersprotocol.com","shortName":"trpg","chainId":9527,"networkId":9527,"explorers":[{"name":"rangersscan-robin","url":"https://robin-rangersscan.rangersprotocol.com","standard":"none"}]},{"name":"myOwn Testnet","chain":"myOwn","rpc":["https://geth.dev.bccloud.net"],"faucets":[],"nativeCurrency":{"name":"MYN","symbol":"MYN","decimals":18},"infoURL":"https://docs.bccloud.net/","shortName":"myn","chainId":9999,"networkId":9999},{"name":"Smart Bitcoin Cash","chain":"smartBCH","rpc":["https://smartbch.greyh.at","https://rpc-mainnet.smartbch.org","https://smartbch.fountainhead.cash/mainnet","https://smartbch.devops.cash/mainnet"],"faucets":[],"nativeCurrency":{"name":"Bitcoin Cash","symbol":"BCH","decimals":18},"infoURL":"https://smartbch.org/","shortName":"smartbch","chainId":10000,"networkId":10000},{"name":"Smart Bitcoin Cash Testnet","chain":"smartBCHTest","rpc":["https://rpc-testnet.smartbch.org","https://smartbch.devops.cash/testnet"],"faucets":[],"nativeCurrency":{"name":"Bitcoin Cash Test Token","symbol":"BCHT","decimals":18},"infoURL":"http://smartbch.org/","shortName":"smartbchtest","chainId":10001,"networkId":10001},{"name":"Blockchain Genesis Mainnet","chain":"GEN","rpc":["https://eu.mainnet.xixoio.com","https://us.mainnet.xixoio.com","https://asia.mainnet.xixoio.com"],"faucets":[],"nativeCurrency":{"name":"GEN","symbol":"GEN","decimals":18},"infoURL":"https://www.xixoio.com/","shortName":"GEN","chainId":10101,"networkId":10101},{"name":"CryptoCoinPay","chain":"CCP","rpc":["http://node106.cryptocoinpay.info:8545","ws://node106.cryptocoinpay.info:8546"],"faucets":[],"icon":"ccp","nativeCurrency":{"name":"CryptoCoinPay","symbol":"CCP","decimals":18},"infoURL":"https://www.cryptocoinpay.co","shortName":"CCP","chainId":10823,"networkId":10823,"explorers":[{"name":"CCP Explorer","url":"https://cryptocoinpay.info","standard":"EIP3091"}]},{"name":"WAGMI","chain":"WAGMI","icon":"wagmi","rpc":["https://subnets.avax.network/wagmi/wagmi-chain-testnet/rpc"],"faucets":["https://faucet.trywagmi.xyz"],"nativeCurrency":{"name":"WAGMI","symbol":"WGM","decimals":18},"infoURL":"https://trywagmi.xyz","shortName":"WAGMI","chainId":11111,"networkId":11111,"explorers":[{"name":"WAGMI Explorer","url":"https://subnets.avax.network/wagmi/wagmi-chain-testnet/explorer","standard":"EIP3091"}]},{"name":"Shyft Testnet","chain":"SHYFTT","icon":"shyft","rpc":["https://rpc.testnet.shyft.network/"],"faucets":[],"nativeCurrency":{"name":"Shyft Test Token","symbol":"SHYFTT","decimals":18},"infoURL":"https://shyft.network","shortName":"shyftt","chainId":11437,"networkId":11437,"explorers":[{"name":"Shyft Testnet BX","url":"https://bx.testnet.shyft.network","standard":"EIP3091"}]},{"name":"Singularity ZERO Testnet","chain":"ZERO","rpc":["https://betaenv.singularity.gold:18545"],"faucets":["https://nft.singularity.gold"],"nativeCurrency":{"name":"ZERO","symbol":"tZERO","decimals":18},"infoURL":"https://www.singularity.gold","shortName":"tZERO","chainId":12051,"networkId":12051,"explorers":[{"name":"zeroscan","url":"https://betaenv.singularity.gold:18002","standard":"EIP3091"}]},{"name":"Singularity ZERO Mainnet","chain":"ZERO","rpc":["https://zerorpc.singularity.gold"],"faucets":["https://zeroscan.singularity.gold"],"nativeCurrency":{"name":"ZERO","symbol":"ZERO","decimals":18},"infoURL":"https://www.singularity.gold","shortName":"ZERO","chainId":12052,"networkId":12052,"slip44":621,"explorers":[{"name":"zeroscan","url":"https://zeroscan.singularity.gold","standard":"EIP3091"}]},{"name":"Phoenix Mainnet","chain":"Phoenix","network":"mainnet","rpc":["https://rpc.phoenixplorer.com/"],"faucets":[],"nativeCurrency":{"name":"Phoenix","symbol":"PHX","decimals":18},"infoURL":"https://cryptophoenix.org/phoenix","shortName":"Phoenix","chainId":13381,"networkId":13381,"icon":"phoenix","explorers":[{"name":"phoenixplorer","url":"https://phoenixplorer.com","icon":"phoenixplorer","standard":"EIP3091"}]},{"name":"MetaDot Mainnet","chain":"MTT","rpc":["https://mainnet.metadot.network"],"faucets":[],"nativeCurrency":{"name":"MetaDot Token","symbol":"MTT","decimals":18},"infoURL":"https://metadot.network","shortName":"mtt","chainId":16000,"networkId":16000},{"name":"MetaDot Testnet","chain":"MTTTest","rpc":["https://testnet.metadot.network"],"faucets":["https://faucet.metadot.network/"],"nativeCurrency":{"name":"MetaDot Token TestNet","symbol":"MTT-test","decimals":18},"infoURL":"https://metadot.network","shortName":"mtttest","chainId":16001,"networkId":16001},{"name":"BTCIX Network","chain":"BTCIX","rpc":["https://seed.btcix.org/rpc"],"faucets":[],"nativeCurrency":{"name":"BTCIX Network","symbol":"BTCIX","decimals":18},"infoURL":"https://bitcolojix.org","shortName":"btcix","chainId":19845,"networkId":19845,"explorers":[{"name":"BTCIXScan","url":"https://btcixscan.com","standard":"none"}]},{"name":"omChain Mainnet","chain":"OML","icon":"omlira","rpc":["https://seed.omlira.com"],"faucets":[],"nativeCurrency":{"name":"Omlira","symbol":"OML","decimals":18},"infoURL":"https://omlira.com","shortName":"oml","chainId":21816,"networkId":21816,"explorers":[{"name":"omChain Explorer","url":"https://explorer.omlira.com","standard":"EIP3091"}]},{"name":"Webchain","chain":"WEB","rpc":["https://node1.webchain.network"],"faucets":[],"nativeCurrency":{"name":"Webchain Ether","symbol":"WEB","decimals":18},"infoURL":"https://webchain.network","shortName":"web","chainId":24484,"networkId":37129,"slip44":227},{"name":"MintMe.com Coin","chain":"MINTME","rpc":["https://node1.mintme.com"],"faucets":[],"nativeCurrency":{"name":"MintMe.com Coin","symbol":"MINTME","decimals":18},"infoURL":"https://www.mintme.com","shortName":"mintme","chainId":24734,"networkId":37480},{"name":"Ethersocial Network","chain":"ESN","rpc":["https://api.esn.gonspool.com"],"faucets":[],"nativeCurrency":{"name":"Ethersocial Network Ether","symbol":"ESN","decimals":18},"infoURL":"https://ethersocial.org","shortName":"esn","chainId":31102,"networkId":1,"slip44":31102},{"name":"GoChain Testnet","chain":"GO","rpc":["https://testnet-rpc.gochain.io"],"faucets":[],"nativeCurrency":{"name":"GoChain Coin","symbol":"GO","decimals":18},"infoURL":"https://gochain.io","shortName":"got","chainId":31337,"networkId":31337,"slip44":6060,"explorers":[{"name":"GoChain Testnet Explorer","url":"https://testnet-explorer.gochain.io","standard":"EIP3091"}]},{"name":"Fusion Mainnet","chain":"FSN","rpc":["https://mainnet.anyswap.exchange","https://fsn.dev/api"],"faucets":[],"nativeCurrency":{"name":"Fusion","symbol":"FSN","decimals":18},"infoURL":"https://www.fusion.org/","shortName":"fsn","chainId":32659,"networkId":32659},{"name":"Energi Mainnet","chain":"NRG","rpc":["https://nodeapi.energi.network"],"faucets":[],"nativeCurrency":{"name":"Energi","symbol":"NRG","decimals":18},"infoURL":"https://www.energi.world/","shortName":"nrg","chainId":39797,"networkId":39797,"slip44":39797},{"name":"pegglecoin","chain":"42069","rpc":[],"faucets":[],"nativeCurrency":{"name":"pegglecoin","symbol":"peggle","decimals":18},"infoURL":"https://teampeggle.com","shortName":"PC","chainId":42069,"networkId":42069},{"name":"Arbitrum One","chainId":42161,"shortName":"arb1","chain":"ETH","networkId":42161,"nativeCurrency":{"name":"Ether","symbol":"ETH","decimals":18},"rpc":["https://arbitrum-mainnet.infura.io/v3/${INFURA_API_KEY}","https://arb-mainnet.g.alchemy.com/v2/${ALCHEMY_API_KEY}","https://arb1.arbitrum.io/rpc","wss://arb1.arbitrum.io/ws"],"faucets":[],"explorers":[{"name":"Arbiscan","url":"https://arbiscan.io","standard":"EIP3091"},{"name":"Arbitrum Explorer","url":"https://explorer.arbitrum.io","standard":"EIP3091"}],"infoURL":"https://arbitrum.io","parent":{"type":"L2","chain":"eip155-1","bridges":[{"url":"https://bridge.arbitrum.io"}]}},{"name":"Celo Mainnet","chainId":42220,"shortName":"CELO","chain":"CELO","networkId":42220,"nativeCurrency":{"name":"CELO","symbol":"CELO","decimals":18},"rpc":["https://forno.celo.org","wss://forno.celo.org/ws"],"faucets":["https://free-online-app.com/faucet-for-eth-evm-chains/"],"infoURL":"https://docs.celo.org/","explorers":[{"name":"blockscout","url":"https://explorer.celo.org","standard":"none"}]},{"name":"Emerald Paratime Testnet","chain":"Emerald","icon":"oasis","rpc":["https://testnet.emerald.oasis.dev/","wss://testnet.emerald.oasis.dev/ws"],"faucets":[],"nativeCurrency":{"name":"Emerald Rose","symbol":"ROSE","decimals":18},"infoURL":"https://docs.oasis.dev/general/developer-resources/overview","shortName":"emerald","chainId":42261,"networkId":42261,"explorers":[{"name":"Emerald Paratime Testnet Explorer","url":"https://testnet.explorer.emerald.oasis.dev","standard":"EIP3091"}]},{"name":"Emerald Paratime Mainnet","chain":"Emerald","icon":"oasis","rpc":["https://emerald.oasis.dev","wss://emerald.oasis.dev/ws"],"faucets":[],"nativeCurrency":{"name":"Emerald Rose","symbol":"ROSE","decimals":18},"infoURL":"https://docs.oasis.dev/general/developer-resources/overview","shortName":"oasis","chainId":42262,"networkId":42262,"explorers":[{"name":"Emerald Paratime Mainnet Explorer","url":"https://explorer.emerald.oasis.dev","standard":"EIP3091"}]},{"name":"Athereum","chain":"ATH","rpc":["https://ava.network:21015/ext/evm/rpc"],"faucets":["http://athfaucet.ava.network//?address=${ADDRESS}"],"nativeCurrency":{"name":"Athereum Ether","symbol":"ATH","decimals":18},"infoURL":"https://athereum.ava.network","shortName":"avaeth","chainId":43110,"networkId":43110},{"name":"Avalanche Fuji Testnet","chain":"AVAX","rpc":["https://api.avax-test.network/ext/bc/C/rpc"],"faucets":["https://faucet.avax-test.network/"],"nativeCurrency":{"name":"Avalanche","symbol":"AVAX","decimals":18},"infoURL":"https://cchain.explorer.avax-test.network","shortName":"Fuji","chainId":43113,"networkId":1,"explorers":[{"name":"snowtrace","url":"https://testnet.snowtrace.io","standard":"EIP3091"}]},{"name":"Avalanche C-Chain","chain":"AVAX","rpc":["https://api.avax.network/ext/bc/C/rpc"],"faucets":["https://free-online-app.com/faucet-for-eth-evm-chains/"],"nativeCurrency":{"name":"Avalanche","symbol":"AVAX","decimals":18},"infoURL":"https://www.avax.network/","shortName":"Avalanche","chainId":43114,"networkId":43114,"slip44":9005,"explorers":[{"name":"snowtrace","url":"https://snowtrace.io","standard":"EIP3091"}]},{"name":"Celo Alfajores Testnet","chainId":44787,"shortName":"ALFA","chain":"CELO","networkId":44787,"nativeCurrency":{"name":"CELO","symbol":"CELO","decimals":18},"rpc":["https://alfajores-forno.celo-testnet.org","wss://alfajores-forno.celo-testnet.org/ws"],"faucets":["https://celo.org/developers/faucet","https://cauldron.pretoriaresearchlab.io/alfajores-faucet"],"infoURL":"https://docs.celo.org/"},{"name":"Autobahn Network","chain":"BNB","network":"mainnet","rpc":["https://rpc.autobahn.network"],"faucets":[],"nativeCurrency":{"name":"BNB","symbol":"BNB","decimals":18},"infoURL":"https://autobahn.network","shortName":"autobahn","chainId":45000,"networkId":45000,"icon":"autobahn","explorers":[{"name":"autobahn explorer","url":"https://explorer.autobahn.network","icon":"autobahn","standard":"EIP3091"}]},{"name":"REI Network","chain":"REI","rpc":["https://rpc.rei.network","wss://rpc.rei.network"],"faucets":[],"nativeCurrency":{"name":"REI","symbol":"REI","decimals":18},"infoURL":"https://rei.network/","shortName":"REI","chainId":47805,"networkId":47805,"explorers":[{"name":"rei-scan","url":"https://scan.rei.network","standard":"none"}]},{"name":"Energi Testnet","chain":"NRG","rpc":["https://nodeapi.test.energi.network"],"faucets":[],"nativeCurrency":{"name":"Energi","symbol":"NRG","decimals":18},"infoURL":"https://www.energi.world/","shortName":"tnrg","chainId":49797,"networkId":49797,"slip44":49797},{"name":"DFK Chain","chain":"DFK","icon":"dfk","network":"mainnet","rpc":["https://subnets.avax.network/defi-kingdoms/dfk-chain/rpc"],"faucets":[],"nativeCurrency":{"name":"Jewel","symbol":"JEWEL","decimals":18},"infoURL":"https://defikingdoms.com","shortName":"DFK","chainId":53935,"networkId":53935,"explorers":[{"name":"ethernal","url":"https://explorer.dfkchain.com","icon":"ethereum","standard":"none"}]},{"name":"REI Chain Mainnet","chain":"REI","icon":"reichain","rpc":["https://rei-rpc.moonrhythm.io"],"faucets":["http://kururu.finance/faucet?chainId=55555"],"nativeCurrency":{"name":"Rei","symbol":"REI","decimals":18},"infoURL":"https://reichain.io","shortName":"rei","chainId":55555,"networkId":55555,"explorers":[{"name":"reiscan","url":"https://reiscan.com","standard":"EIP3091"}]},{"name":"REI Chain Testnet","chain":"REI","icon":"reichain","rpc":["https://rei-testnet-rpc.moonrhythm.io"],"faucets":["http://kururu.finance/faucet?chainId=55556"],"nativeCurrency":{"name":"tRei","symbol":"tREI","decimals":18},"infoURL":"https://reichain.io","shortName":"trei","chainId":55556,"networkId":55556,"explorers":[{"name":"reiscan","url":"https://testnet.reiscan.com","standard":"EIP3091"}]},{"name":"Thinkium Testnet Chain 0","chain":"Thinkium","rpc":["https://test.thinkiumrpc.net/"],"faucets":["https://www.thinkiumdev.net/faucet"],"nativeCurrency":{"name":"TKM","symbol":"TKM","decimals":18},"infoURL":"https://thinkium.net/","shortName":"TKM-test0","chainId":60000,"networkId":60000,"explorers":[{"name":"thinkiumscan","url":"https://test0.thinkiumscan.net","standard":"EIP3091"}]},{"name":"Thinkium Testnet Chain 1","chain":"Thinkium","rpc":["https://test1.thinkiumrpc.net/"],"faucets":["https://www.thinkiumdev.net/faucet"],"nativeCurrency":{"name":"TKM","symbol":"TKM","decimals":18},"infoURL":"https://thinkium.net/","shortName":"TKM-test1","chainId":60001,"networkId":60001,"explorers":[{"name":"thinkiumscan","url":"https://test1.thinkiumscan.net","standard":"EIP3091"}]},{"name":"Thinkium Testnet Chain 2","chain":"Thinkium","rpc":["https://test2.thinkiumrpc.net/"],"faucets":["https://www.thinkiumdev.net/faucet"],"nativeCurrency":{"name":"TKM","symbol":"TKM","decimals":18},"infoURL":"https://thinkium.net/","shortName":"TKM-test2","chainId":60002,"networkId":60002,"explorers":[{"name":"thinkiumscan","url":"https://test2.thinkiumscan.net","standard":"EIP3091"}]},{"name":"Thinkium Testnet Chain 103","chain":"Thinkium","rpc":["https://test103.thinkiumrpc.net/"],"faucets":["https://www.thinkiumdev.net/faucet"],"nativeCurrency":{"name":"TKM","symbol":"TKM","decimals":18},"infoURL":"https://thinkium.net/","shortName":"TKM-test103","chainId":60103,"networkId":60103,"explorers":[{"name":"thinkiumscan","url":"https://test103.thinkiumscan.net","standard":"EIP3091"}]},{"name":"Celo Baklava Testnet","chainId":62320,"shortName":"BKLV","chain":"CELO","networkId":62320,"nativeCurrency":{"name":"CELO","symbol":"CELO","decimals":18},"rpc":["https://baklava-forno.celo-testnet.org"],"faucets":["https://docs.google.com/forms/d/e/1FAIpQLSdfr1BwUTYepVmmvfVUDRCwALejZ-TUva2YujNpvrEmPAX2pg/viewform","https://cauldron.pretoriaresearchlab.io/baklava-faucet"],"infoURL":"https://docs.celo.org/"},{"name":"eCredits Mainnet","chain":"ECS","network":"mainnet","rpc":["https://rpc.ecredits.com"],"faucets":[],"nativeCurrency":{"name":"eCredits","symbol":"ECS","decimals":18},"infoURL":"https://ecredits.com","shortName":"ecs","chainId":63000,"networkId":63000,"explorers":[{"name":"eCredits MainNet Explorer","url":"https://explorer.ecredits.com","standard":"EIP3091"}]},{"name":"eCredits Testnet","chain":"ECS","network":"testnet","rpc":["https://rpc.tst.ecredits.com"],"faucets":["https://faucet.tst.ecredits.com"],"nativeCurrency":{"name":"eCredits","symbol":"ECS","decimals":18},"infoURL":"https://ecredits.com","shortName":"ecs-testnet","chainId":63001,"networkId":63001,"explorers":[{"name":"eCredits TestNet Explorer","url":"https://explorer.tst.ecredits.com","standard":"EIP3091"}]},{"name":"Thinkium Mainnet Chain 0","chain":"Thinkium","rpc":["https://proxy.thinkiumrpc.net/"],"faucets":[],"nativeCurrency":{"name":"TKM","symbol":"TKM","decimals":18},"infoURL":"https://thinkium.net/","shortName":"TKM0","chainId":70000,"networkId":70000,"explorers":[{"name":"thinkiumscan","url":"https://chain0.thinkiumscan.net","standard":"EIP3091"}]},{"name":"Thinkium Mainnet Chain 1","chain":"Thinkium","rpc":["https://proxy1.thinkiumrpc.net/"],"faucets":[],"nativeCurrency":{"name":"TKM","symbol":"TKM","decimals":18},"infoURL":"https://thinkium.net/","shortName":"TKM1","chainId":70001,"networkId":70001,"explorers":[{"name":"thinkiumscan","url":"https://chain1.thinkiumscan.net","standard":"EIP3091"}]},{"name":"Thinkium Mainnet Chain 2","chain":"Thinkium","rpc":["https://proxy2.thinkiumrpc.net/"],"faucets":[],"nativeCurrency":{"name":"TKM","symbol":"TKM","decimals":18},"infoURL":"https://thinkium.net/","shortName":"TKM2","chainId":70002,"networkId":70002,"explorers":[{"name":"thinkiumscan","url":"https://chain2.thinkiumscan.net","standard":"EIP3091"}]},{"name":"Thinkium Mainnet Chain 103","chain":"Thinkium","rpc":["https://proxy103.thinkiumrpc.net/"],"faucets":[],"nativeCurrency":{"name":"TKM","symbol":"TKM","decimals":18},"infoURL":"https://thinkium.net/","shortName":"TKM103","chainId":70103,"networkId":70103,"explorers":[{"name":"thinkiumscan","url":"https://chain103.thinkiumscan.net","standard":"EIP3091"}]},{"name":"Polyjuice Testnet","chain":"CKB","icon":"polyjuice","rpc":["https://godwoken-testnet-web3-rpc.ckbapp.dev","ws://godwoken-testnet-web3-rpc.ckbapp.dev/ws"],"faucets":["https://faucet.nervos.org/"],"nativeCurrency":{"name":"CKB","symbol":"CKB","decimals":8},"infoURL":"https://github.com/nervosnetwork/godwoken","shortName":"ckb","chainId":71393,"networkId":1},{"name":"Energy Web Volta Testnet","chain":"Volta","rpc":["https://volta-rpc.energyweb.org","wss://volta-rpc.energyweb.org/ws"],"faucets":["https://voltafaucet.energyweb.org"],"nativeCurrency":{"name":"Volta Token","symbol":"VT","decimals":18},"infoURL":"https://energyweb.org","shortName":"vt","chainId":73799,"networkId":73799},{"name":"Firenze test network","chain":"ETH","rpc":["https://ethnode.primusmoney.com/firenze"],"faucets":[],"nativeCurrency":{"name":"Firenze Ether","symbol":"FIN","decimals":18},"infoURL":"https://primusmoney.com","shortName":"firenze","chainId":78110,"networkId":78110},{"name":"Mumbai","title":"Polygon Testnet Mumbai","chain":"Polygon","rpc":["https://matic-mumbai.chainstacklabs.com","https://rpc-mumbai.maticvigil.com","https://matic-testnet-archive-rpc.bwarelabs.com"],"faucets":["https://faucet.polygon.technology/"],"nativeCurrency":{"name":"MATIC","symbol":"MATIC","decimals":18},"infoURL":"https://polygon.technology/","shortName":"maticmum","chainId":80001,"networkId":80001,"explorers":[{"name":"polygonscan","url":"https://mumbai.polygonscan.com","standard":"EIP3091"}]},{"name":"UB Smart Chain(testnet)","chain":"USC","network":"testnet","rpc":["https://testnet.rpc.uschain.network"],"faucets":[],"nativeCurrency":{"name":"UBC","symbol":"UBC","decimals":18},"infoURL":"https://www.ubchain.site","shortName":"usctest","chainId":99998,"networkId":99998},{"name":"UB Smart Chain","chain":"USC","network":"mainnet","rpc":["https://rpc.uschain.network"],"faucets":[],"nativeCurrency":{"name":"UBC","symbol":"UBC","decimals":18},"infoURL":"https://www.ubchain.site/","shortName":"usc","chainId":99999,"networkId":99999},{"name":"QuarkChain Mainnet Root","chain":"QuarkChain","rpc":["http://jrpc.mainnet.quarkchain.io:38391/"],"faucets":[],"nativeCurrency":{"name":"QKC","symbol":"QKC","decimals":18},"infoURL":"https://www.quarkchain.io/","shortName":"qkc-r","chainId":100000,"networkId":100000},{"name":"QuarkChain Mainnet Shard 0","chain":"QuarkChain","rpc":["https://mainnet-s0-ethapi.quarkchain.io","http://eth-jrpc.mainnet.quarkchain.io:39000/"],"faucets":[],"nativeCurrency":{"name":"QKC","symbol":"QKC","decimals":18},"infoURL":"https://www.quarkchain.io/","shortName":"qkc-s0","chainId":100001,"networkId":100001,"parent":{"chain":"eip155-100000","type":"shard"},"explorers":[{"name":"quarkchain-mainnet","url":"https://mainnet.quarkchain.io/0","standard":"EIP3091"}]},{"name":"QuarkChain Mainnet Shard 1","chain":"QuarkChain","rpc":["https://mainnet-s1-ethapi.quarkchain.io","http://eth-jrpc.mainnet.quarkchain.io:39001/"],"faucets":[],"nativeCurrency":{"name":"QKC","symbol":"QKC","decimals":18},"infoURL":"https://www.quarkchain.io/","shortName":"qkc-s1","chainId":100002,"networkId":100002,"parent":{"chain":"eip155-100000","type":"shard"},"explorers":[{"name":"quarkchain-mainnet","url":"https://mainnet.quarkchain.io/1","standard":"EIP3091"}]},{"name":"QuarkChain Mainnet Shard 2","chain":"QuarkChain","rpc":["https://mainnet-s2-ethapi.quarkchain.io","http://eth-jrpc.mainnet.quarkchain.io:39002/"],"faucets":[],"nativeCurrency":{"name":"QKC","symbol":"QKC","decimals":18},"infoURL":"https://www.quarkchain.io/","shortName":"qkc-s2","chainId":100003,"networkId":100003,"parent":{"chain":"eip155-100000","type":"shard"},"explorers":[{"name":"quarkchain-mainnet","url":"https://mainnet.quarkchain.io/2","standard":"EIP3091"}]},{"name":"QuarkChain Mainnet Shard 3","chain":"QuarkChain","rpc":["https://mainnet-s3-ethapi.quarkchain.io","http://eth-jrpc.mainnet.quarkchain.io:39003/"],"faucets":[],"nativeCurrency":{"name":"QKC","symbol":"QKC","decimals":18},"infoURL":"https://www.quarkchain.io/","shortName":"qkc-s3","chainId":100004,"networkId":100004,"parent":{"chain":"eip155-100000","type":"shard"},"explorers":[{"name":"quarkchain-mainnet","url":"https://mainnet.quarkchain.io/3","standard":"EIP3091"}]},{"name":"QuarkChain Mainnet Shard 4","chain":"QuarkChain","rpc":["https://mainnet-s4-ethapi.quarkchain.io","http://eth-jrpc.mainnet.quarkchain.io:39004/"],"faucets":[],"nativeCurrency":{"name":"QKC","symbol":"QKC","decimals":18},"infoURL":"https://www.quarkchain.io/","shortName":"qkc-s4","chainId":100005,"networkId":100005,"parent":{"chain":"eip155-100000","type":"shard"},"explorers":[{"name":"quarkchain-mainnet","url":"https://mainnet.quarkchain.io/4","standard":"EIP3091"}]},{"name":"QuarkChain Mainnet Shard 5","chain":"QuarkChain","rpc":["https://mainnet-s5-ethapi.quarkchain.io","http://eth-jrpc.mainnet.quarkchain.io:39005/"],"faucets":[],"nativeCurrency":{"name":"QKC","symbol":"QKC","decimals":18},"infoURL":"https://www.quarkchain.io/","shortName":"qkc-s5","chainId":100006,"networkId":100006,"parent":{"chain":"eip155-100000","type":"shard"},"explorers":[{"name":"quarkchain-mainnet","url":"https://mainnet.quarkchain.io/5","standard":"EIP3091"}]},{"name":"QuarkChain Mainnet Shard 6","chain":"QuarkChain","rpc":["https://mainnet-s6-ethapi.quarkchain.io","http://eth-jrpc.mainnet.quarkchain.io:39006/"],"faucets":[],"nativeCurrency":{"name":"QKC","symbol":"QKC","decimals":18},"infoURL":"https://www.quarkchain.io/","shortName":"qkc-s6","chainId":100007,"networkId":100007,"parent":{"chain":"eip155-100000","type":"shard"},"explorers":[{"name":"quarkchain-mainnet","url":"https://mainnet.quarkchain.io/6","standard":"EIP3091"}]},{"name":"QuarkChain Mainnet Shard 7","chain":"QuarkChain","rpc":["https://mainnet-s7-ethapi.quarkchain.io","http://eth-jrpc.mainnet.quarkchain.io:39007/"],"faucets":[],"nativeCurrency":{"name":"QKC","symbol":"QKC","decimals":18},"infoURL":"https://www.quarkchain.io/","shortName":"qkc-s7","chainId":100008,"networkId":100008,"parent":{"chain":"eip155-100000","type":"shard"},"explorers":[{"name":"quarkchain-mainnet","url":"https://mainnet.quarkchain.io/7","standard":"EIP3091"}]},{"name":"BROChain Mainnet","chain":"BRO","network":"mainnet","rpc":["https://rpc.brochain.org","http://rpc.brochain.org","https://rpc.brochain.org/mainnet","http://rpc.brochain.org/mainnet"],"faucets":[],"nativeCurrency":{"name":"Brother","symbol":"BRO","decimals":18},"infoURL":"https://brochain.org","shortName":"bro","chainId":108801,"networkId":108801,"explorers":[{"name":"BROChain Explorer","url":"https://explorer.brochain.org","standard":"EIP3091"}]},{"name":"QuarkChain Devnet Root","chain":"QuarkChain","rpc":["http://jrpc.devnet.quarkchain.io:38391/"],"faucets":[],"nativeCurrency":{"name":"QKC","symbol":"QKC","decimals":18},"infoURL":"https://www.quarkchain.io/","shortName":"qkc-d-r","chainId":110000,"networkId":110000},{"name":"QuarkChain Devnet Shard 0","chain":"QuarkChain","rpc":["https://devnet-s0-ethapi.quarkchain.io","http://eth-jrpc.devnet.quarkchain.io:39900/"],"faucets":[],"nativeCurrency":{"name":"QKC","symbol":"QKC","decimals":18},"infoURL":"https://www.quarkchain.io/","shortName":"qkc-d-s0","chainId":110001,"networkId":110001,"parent":{"chain":"eip155-110000","type":"shard"},"explorers":[{"name":"quarkchain-devnet","url":"https://devnet.quarkchain.io/0","standard":"EIP3091"}]},{"name":"QuarkChain Devnet Shard 1","chain":"QuarkChain","rpc":["https://devnet-s1-ethapi.quarkchain.io","http://eth-jrpc.devnet.quarkchain.io:39901/"],"faucets":[],"nativeCurrency":{"name":"QKC","symbol":"QKC","decimals":18},"infoURL":"https://www.quarkchain.io/","shortName":"qkc-d-s1","chainId":110002,"networkId":110002,"parent":{"chain":"eip155-110000","type":"shard"},"explorers":[{"name":"quarkchain-devnet","url":"https://devnet.quarkchain.io/1","standard":"EIP3091"}]},{"name":"QuarkChain Devnet Shard 2","chain":"QuarkChain","rpc":["https://devnet-s2-ethapi.quarkchain.io","http://eth-jrpc.devnet.quarkchain.io:39902/"],"faucets":[],"nativeCurrency":{"name":"QKC","symbol":"QKC","decimals":18},"infoURL":"https://www.quarkchain.io/","shortName":"qkc-d-s2","chainId":110003,"networkId":110003,"parent":{"chain":"eip155-110000","type":"shard"},"explorers":[{"name":"quarkchain-devnet","url":"https://devnet.quarkchain.io/2","standard":"EIP3091"}]},{"name":"QuarkChain Devnet Shard 3","chain":"QuarkChain","rpc":["https://devnet-s3-ethapi.quarkchain.io","http://eth-jrpc.devnet.quarkchain.io:39903/"],"faucets":[],"nativeCurrency":{"name":"QKC","symbol":"QKC","decimals":18},"infoURL":"https://www.quarkchain.io/","shortName":"qkc-d-s3","chainId":110004,"networkId":110004,"parent":{"chain":"eip155-110000","type":"shard"},"explorers":[{"name":"quarkchain-devnet","url":"https://devnet.quarkchain.io/3","standard":"EIP3091"}]},{"name":"QuarkChain Devnet Shard 4","chain":"QuarkChain","rpc":["https://devnet-s4-ethapi.quarkchain.io","http://eth-jrpc.devnet.quarkchain.io:39904/"],"faucets":[],"nativeCurrency":{"name":"QKC","symbol":"QKC","decimals":18},"infoURL":"https://www.quarkchain.io/","shortName":"qkc-d-s4","chainId":110005,"networkId":110005,"parent":{"chain":"eip155-110000","type":"shard"},"explorers":[{"name":"quarkchain-devnet","url":"https://devnet.quarkchain.io/4","standard":"EIP3091"}]},{"name":"QuarkChain Devnet Shard 5","chain":"QuarkChain","rpc":["https://devnet-s5-ethapi.quarkchain.io","http://eth-jrpc.devnet.quarkchain.io:39905/"],"faucets":[],"nativeCurrency":{"name":"QKC","symbol":"QKC","decimals":18},"infoURL":"https://www.quarkchain.io/","shortName":"qkc-d-s5","chainId":110006,"networkId":110006,"parent":{"chain":"eip155-110000","type":"shard"},"explorers":[{"name":"quarkchain-devnet","url":"https://devnet.quarkchain.io/5","standard":"EIP3091"}]},{"name":"QuarkChain Devnet Shard 6","chain":"QuarkChain","rpc":["https://devnet-s6-ethapi.quarkchain.io","http://eth-jrpc.devnet.quarkchain.io:39906/"],"faucets":[],"nativeCurrency":{"name":"QKC","symbol":"QKC","decimals":18},"infoURL":"https://www.quarkchain.io/","shortName":"qkc-d-s6","chainId":110007,"networkId":110007,"parent":{"chain":"eip155-110000","type":"shard"},"explorers":[{"name":"quarkchain-devnet","url":"https://devnet.quarkchain.io/6","standard":"EIP3091"}]},{"name":"QuarkChain Devnet Shard 7","chain":"QuarkChain","rpc":["https://devnet-s7-ethapi.quarkchain.io","http://eth-jrpc.devnet.quarkchain.io:39907/"],"faucets":[],"nativeCurrency":{"name":"QKC","symbol":"QKC","decimals":18},"infoURL":"https://www.quarkchain.io/","shortName":"qkc-d-s7","chainId":110008,"networkId":110008,"parent":{"chain":"eip155-110000","type":"shard"},"explorers":[{"name":"quarkchain-devnet","url":"https://devnet.quarkchain.io/7","standard":"EIP3091"}]},{"name":"Milkomeda C1 Testnet","chain":"milkTAda","icon":"milkomeda","network":"testnet","rpc":["https://rpc-devnet-cardano-evm.c1.milkomeda.com","wss://rpc-devnet-cardano-evm.c1.milkomeda.com"],"faucets":[],"nativeCurrency":{"name":"milkTAda","symbol":"milkTAda","decimals":18},"infoURL":"https://milkomeda.com","shortName":"milkTAda","chainId":200101,"networkId":200101,"explorers":[{"name":"Blockscout","url":"https://explorer-devnet-cardano-evm.c1.milkomeda.com","standard":"none"}]},{"name":"Akroma","chain":"AKA","rpc":["https://remote.akroma.io"],"faucets":[],"nativeCurrency":{"name":"Akroma Ether","symbol":"AKA","decimals":18},"infoURL":"https://akroma.io","shortName":"aka","chainId":200625,"networkId":200625,"slip44":200625},{"name":"Alaya Mainnet","chain":"Alaya","rpc":["https://openapi.alaya.network/rpc","wss://openapi.alaya.network/ws"],"faucets":[],"nativeCurrency":{"name":"ATP","symbol":"atp","decimals":18},"infoURL":"https://www.alaya.network/","shortName":"alaya","chainId":201018,"networkId":1,"icon":"alaya","explorers":[{"name":"alaya explorer","url":"https://scan.alaya.network","standard":"none"}]},{"name":"Alaya Dev Testnet","chain":"Alaya","rpc":["https://devnetopenapi.alaya.network/rpc","wss://devnetopenapi.alaya.network/ws"],"faucets":["https://faucet.alaya.network/faucet/?id=f93426c0887f11eb83b900163e06151c"],"nativeCurrency":{"name":"ATP","symbol":"atp","decimals":18},"infoURL":"https://www.alaya.network/","shortName":"alayadev","chainId":201030,"networkId":1,"icon":"alaya","explorers":[{"name":"alaya explorer","url":"https://devnetscan.alaya.network","standard":"none"}]},{"name":"PlatON Mainnet","chain":"PlatON","network":"mainnet","rpc":["https://openapi.platon.network/rpc","wss://openapi.platon.network/ws"],"faucets":[],"nativeCurrency":{"name":"LAT","symbol":"lat","decimals":18},"infoURL":"https://www.platon.network","shortName":"platon","chainId":210425,"networkId":1,"icon":"platon","explorers":[{"name":"PlatON explorer","url":"https://scan.platon.network","standard":"none"}]},{"name":"Haymo Testnet","chain":"tHYM","network":"testnet","rpc":["https://testnet1.haymo.network"],"faucets":[],"nativeCurrency":{"name":"HAYMO","symbol":"HYM","decimals":18},"infoURL":"https://haymoswap.web.app/","shortName":"hym","chainId":234666,"networkId":234666},{"name":"ARTIS sigma1","chain":"ARTIS","rpc":["https://rpc.sigma1.artis.network"],"faucets":[],"nativeCurrency":{"name":"ARTIS sigma1 Ether","symbol":"ATS","decimals":18},"infoURL":"https://artis.eco","shortName":"ats","chainId":246529,"networkId":246529,"slip44":246529},{"name":"ARTIS Testnet tau1","chain":"ARTIS","rpc":["https://rpc.tau1.artis.network"],"faucets":[],"nativeCurrency":{"name":"ARTIS tau1 Ether","symbol":"tATS","decimals":18},"infoURL":"https://artis.network","shortName":"atstau","chainId":246785,"networkId":246785},{"name":"Social Smart Chain Mainnet","chain":"SoChain","rpc":["https://socialsmartchain.digitalnext.business"],"faucets":[],"nativeCurrency":{"name":"SoChain","symbol":"$OC","decimals":18},"infoURL":"https://digitalnext.business/SocialSmartChain","shortName":"SoChain","chainId":281121,"networkId":281121,"explorers":[]},{"name":"Polis Testnet","chain":"Sparta","icon":"polis","rpc":["https://sparta-rpc.polis.tech"],"faucets":["https://faucet.polis.tech"],"nativeCurrency":{"name":"tPolis","symbol":"tPOLIS","decimals":18},"infoURL":"https://polis.tech","shortName":"sparta","chainId":333888,"networkId":333888},{"name":"Polis Mainnet","chain":"Olympus","icon":"polis","rpc":["https://rpc.polis.tech"],"faucets":["https://faucet.polis.tech"],"nativeCurrency":{"name":"Polis","symbol":"POLIS","decimals":18},"infoURL":"https://polis.tech","shortName":"olympus","chainId":333999,"networkId":333999},{"name":"Arbitrum Rinkeby","title":"Arbitrum Testnet Rinkeby","chainId":421611,"shortName":"arb-rinkeby","chain":"ETH","networkId":421611,"nativeCurrency":{"name":"Arbitrum Rinkeby Ether","symbol":"ARETH","decimals":18},"rpc":["https://rinkeby.arbitrum.io/rpc","wss://rinkeby.arbitrum.io/ws"],"faucets":["http://fauceth.komputing.org?chain=421611&address=${ADDRESS}"],"infoURL":"https://arbitrum.io","explorers":[{"name":"arbitrum-rinkeby","url":"https://rinkeby-explorer.arbitrum.io","standard":"EIP3091"}],"parent":{"type":"L2","chain":"eip155-4","bridges":[{"url":"https://bridge.arbitrum.io"}]}},{"name":"Weelink Testnet","chain":"WLK","rpc":["https://weelinknode1c.gw002.oneitfarm.com"],"faucets":["https://faucet.weelink.gw002.oneitfarm.com"],"nativeCurrency":{"name":"Weelink Chain Token","symbol":"tWLK","decimals":18},"infoURL":"https://weelink.cloud","shortName":"wlkt","chainId":444900,"networkId":444900,"explorers":[{"name":"weelink-testnet","url":"https://weelink.cloud/#/blockView/overview","standard":"none"}]},{"name":"Vision - Vpioneer Test Chain","chain":"Vision-Vpioneer","rpc":["https://vpioneer.infragrid.v.network/ethereum/compatible"],"faucets":["https://vpioneerfaucet.visionscan.org"],"nativeCurrency":{"name":"VS","symbol":"VS","decimals":18},"infoURL":"https://visionscan.org","shortName":"vpioneer","chainId":666666,"networkId":666666,"slip44":60},{"name":"Vision - Mainnet","chain":"Vision","rpc":["https://infragrid.v.network/ethereum/compatible"],"faucets":[],"nativeCurrency":{"name":"VS","symbol":"VS","decimals":18},"infoURL":"https://www.v.network","explorers":[{"name":"Visionscan","url":"https://www.visionscan.org","standard":"EIP3091"}],"shortName":"vision","chainId":888888,"networkId":888888,"slip44":60},{"name":"Eluvio Content Fabric","chain":"Eluvio","rpc":["https://host-76-74-28-226.contentfabric.io/eth/","https://host-76-74-28-232.contentfabric.io/eth/","https://host-76-74-29-2.contentfabric.io/eth/","https://host-76-74-29-8.contentfabric.io/eth/","https://host-76-74-29-34.contentfabric.io/eth/","https://host-76-74-29-35.contentfabric.io/eth/","https://host-154-14-211-98.contentfabric.io/eth/","https://host-154-14-192-66.contentfabric.io/eth/","https://host-60-240-133-202.contentfabric.io/eth/","https://host-64-235-250-98.contentfabric.io/eth/"],"faucets":[],"nativeCurrency":{"name":"ELV","symbol":"ELV","decimals":18},"infoURL":"https://eluv.io","shortName":"elv","chainId":955305,"networkId":955305,"slip44":1011,"explorers":[{"name":"blockscout","url":"https://explorer.eluv.io","standard":"EIP3091"}]},{"name":"Etho Protocol","chain":"ETHO","rpc":["https://rpc.ethoprotocol.com"],"faucets":[],"nativeCurrency":{"name":"Etho Protocol","symbol":"ETHO","decimals":18},"infoURL":"https://ethoprotocol.com","shortName":"etho","chainId":1313114,"networkId":1313114,"slip44":1313114,"explorers":[{"name":"blockscout","url":"https://explorer.ethoprotocol.com","standard":"none"}]},{"name":"Xerom","chain":"XERO","rpc":["https://rpc.xerom.org"],"faucets":[],"nativeCurrency":{"name":"Xerom Ether","symbol":"XERO","decimals":18},"infoURL":"https://xerom.org","shortName":"xero","chainId":1313500,"networkId":1313500},{"name":"Kintsugi","title":"Kintsugi merge testnet","chain":"ETH","rpc":["https://rpc.kintsugi.themerge.dev"],"faucets":["http://fauceth.komputing.org?chain=1337702&address=${ADDRESS}","https://faucet.kintsugi.themerge.dev"],"nativeCurrency":{"name":"kintsugi Ethere","symbol":"kiETH","decimals":18},"infoURL":"https://kintsugi.themerge.dev/","shortName":"kintsugi","chainId":1337702,"networkId":1337702,"explorers":[{"name":"kintsugi explorer","url":"https://explorer.kintsugi.themerge.dev","standard":"EIP3091"}]},{"name":"PlatON Dev Testnet","chain":"PlatON","rpc":["https://devnetopenapi.platon.network/rpc","wss://devnetopenapi.platon.network/ws"],"faucets":["https://faucet.platon.network/faucet/?id=e5d32df10aee11ec911142010a667c03"],"nativeCurrency":{"name":"LAT","symbol":"lat","decimals":18},"infoURL":"https://www.platon.network","shortName":"platondev","chainId":2203181,"networkId":1,"icon":"platon","explorers":[{"name":"PlatON explorer","url":"https://devnetscan.platon.network","standard":"none"}]},{"name":"Musicoin","chain":"MUSIC","rpc":["https://mewapi.musicoin.tw"],"faucets":[],"nativeCurrency":{"name":"Musicoin","symbol":"MUSIC","decimals":18},"infoURL":"https://musicoin.tw","shortName":"music","chainId":7762959,"networkId":7762959,"slip44":184},{"name":"Sepolia","title":"Ethereum Testnet Sepolia","chain":"ETH","rpc":[],"faucets":["http://fauceth.komputing.org?chain=11155111&address=${ADDRESS}"],"nativeCurrency":{"name":"Sepolia Ether","symbol":"SEP","decimals":18},"infoURL":"https://sepolia.otterscan.io","shortName":"sep","chainId":11155111,"networkId":11155111,"explorers":[{"name":"otterscan-sepolia","url":"https://sepolia.otterscan.io","standard":"EIP3091"}]},{"name":"PepChain Churchill","chain":"PEP","rpc":["https://churchill-rpc.pepchain.io"],"faucets":[],"nativeCurrency":{"name":"PepChain Churchill Ether","symbol":"TPEP","decimals":18},"infoURL":"https://pepchain.io","shortName":"tpep","chainId":13371337,"networkId":13371337},{"name":"IOLite","chain":"ILT","rpc":["https://net.iolite.io"],"faucets":[],"nativeCurrency":{"name":"IOLite Ether","symbol":"ILT","decimals":18},"infoURL":"https://iolite.io","shortName":"ilt","chainId":18289463,"networkId":18289463},{"name":"quarkblockchain","chain":"QKI","rpc":["https://hz.rpc.qkiscan.cn","https://jp.rpc.qkiscan.io"],"faucets":[],"nativeCurrency":{"name":"quarkblockchain Native Token","symbol":"QKI","decimals":18},"infoURL":"https://quarkblockchain.org/","shortName":"qki","chainId":20181205,"networkId":20181205},{"name":"Auxilium Network Mainnet","chain":"AUX","rpc":["https://rpc.auxilium.global"],"faucets":[],"nativeCurrency":{"name":"Auxilium coin","symbol":"AUX","decimals":18},"infoURL":"https://auxilium.global","shortName":"auxi","chainId":28945486,"networkId":28945486,"slip44":344},{"name":"Joys Digital Mainnet","chain":"JOYS","rpc":["https://node.joys.digital"],"faucets":[],"nativeCurrency":{"name":"JOYS","symbol":"JOYS","decimals":18},"infoURL":"https://joys.digital","shortName":"JOYS","chainId":35855456,"networkId":35855456},{"name":"Aquachain","chain":"AQUA","rpc":["https://c.onical.org","https://tx.aquacha.in/api"],"faucets":["https://aquacha.in/faucet"],"nativeCurrency":{"name":"Aquachain Ether","symbol":"AQUA","decimals":18},"infoURL":"https://aquachain.github.io","shortName":"aqua","chainId":61717561,"networkId":61717561,"slip44":61717561},{"name":"Joys Digital TestNet","chain":"TOYS","rpc":["https://toys.joys.cash/"],"faucets":["https://faucet.joys.digital/"],"nativeCurrency":{"name":"TOYS","symbol":"TOYS","decimals":18},"infoURL":"https://joys.digital","shortName":"TOYS","chainId":99415706,"networkId":99415706},{"name":"Gather Mainnet Network","chain":"GTH","rpc":["https://mainnet.gather.network"],"faucets":[],"nativeCurrency":{"name":"Gather","symbol":"GTH","decimals":18},"infoURL":"https://gather.network","shortName":"GTH","chainId":192837465,"networkId":192837465,"explorers":[{"name":"Blockscout","url":"https://explorer.gather.network","standard":"none"}]},{"name":"Neon EVM DevNet","chain":"Solana","rpc":["https://proxy.devnet.neonlabs.org/solana"],"faucets":["https://neonswap.live/#/get-tokens"],"nativeCurrency":{"name":"Neon","symbol":"NEON","decimals":18},"infoURL":"https://neon-labs.org/","shortName":"neonevm-devnet","chainId":245022926,"networkId":245022926},{"name":"Neon EVM MainNet","chain":"Solana","rpc":["https://proxy.mainnet.neonlabs.org/solana"],"faucets":[],"nativeCurrency":{"name":"Neon","symbol":"NEON","decimals":18},"infoURL":"https://neon-labs.org/","shortName":"neonevm-mainnet","chainId":245022934,"networkId":245022934},{"name":"Neon EVM TestNet","chain":"Solana","rpc":["https://proxy.testnet.neonlabs.org/solana"],"faucets":[],"nativeCurrency":{"name":"Neon","symbol":"NEON","decimals":18},"infoURL":"https://neon-labs.org/","shortName":"neonevm-testnet","chainId":245022940,"networkId":245022940},{"name":"OneLedger Mainnet","chain":"OLT","icon":"oneledger","rpc":["https://mainnet-rpc.oneledger.network"],"faucets":[],"nativeCurrency":{"name":"OLT","symbol":"OLT","decimals":18},"infoURL":"https://oneledger.io","shortName":"oneledger","chainId":311752642,"networkId":311752642,"explorers":[{"name":"OneLedger Block Explorer","url":"https://mainnet-explorer.oneledger.network","standard":"EIP3091"}]},{"name":"Gather Testnet Network","chain":"GTH","rpc":["https://testnet.gather.network"],"faucets":[],"nativeCurrency":{"name":"Gather","symbol":"GTH","decimals":18},"infoURL":"https://gather.network","shortName":"tGTH","chainId":356256156,"networkId":356256156,"explorers":[{"name":"Blockscout","url":"https://testnet-explorer.gather.network","standard":"none"}]},{"name":"Gather Devnet Network","chain":"GTH","rpc":["https://devnet.gather.network"],"faucets":[],"nativeCurrency":{"name":"Gather","symbol":"GTH","decimals":18},"infoURL":"https://gather.network","shortName":"dGTH","chainId":486217935,"networkId":486217935,"explorers":[{"name":"Blockscout","url":"https://devnet-explorer.gather.network","standard":"none"}]},{"name":"IPOS Network","chain":"IPOS","rpc":["https://rpc.iposlab.com","https://rpc2.iposlab.com"],"faucets":[],"nativeCurrency":{"name":"IPOS Network Ether","symbol":"IPOS","decimals":18},"infoURL":"https://iposlab.com","shortName":"ipos","chainId":1122334455,"networkId":1122334455},{"name":"Aurora Mainnet","chain":"NEAR","rpc":["https://mainnet.aurora.dev"],"faucets":[],"nativeCurrency":{"name":"Ether","symbol":"ETH","decimals":18},"infoURL":"https://aurora.dev","shortName":"aurora","chainId":1313161554,"networkId":1313161554,"explorers":[{"name":"aurorascan.dev","url":"https://aurorascan.dev","standard":"EIP3091"}]},{"name":"Aurora Testnet","chain":"NEAR","rpc":["https://testnet.aurora.dev/"],"faucets":[],"nativeCurrency":{"name":"Ether","symbol":"ETH","decimals":18},"infoURL":"https://aurora.dev","shortName":"aurora-testnet","chainId":1313161555,"networkId":1313161555,"explorers":[{"name":"aurorascan.dev","url":"https://testnet.aurorascan.dev","standard":"EIP3091"}]},{"name":"Aurora Betanet","chain":"NEAR","rpc":["https://betanet.aurora.dev/"],"faucets":[],"nativeCurrency":{"name":"Ether","symbol":"ETH","decimals":18},"infoURL":"https://aurora.dev","shortName":"aurora-betanet","chainId":1313161556,"networkId":1313161556},{"name":"Harmony Mainnet Shard 0","chain":"Harmony","rpc":["https://api.harmony.one"],"faucets":["https://free-online-app.com/faucet-for-eth-evm-chains/"],"nativeCurrency":{"name":"ONE","symbol":"ONE","decimals":18},"infoURL":"https://www.harmony.one/","shortName":"hmy-s0","chainId":1666600000,"networkId":1666600000,"explorers":[{"name":"Harmony Block Explorer","url":"https://explorer.harmony.one","standard":"EIP3091"}]},{"name":"Harmony Mainnet Shard 1","chain":"Harmony","rpc":["https://s1.api.harmony.one"],"faucets":[],"nativeCurrency":{"name":"ONE","symbol":"ONE","decimals":18},"infoURL":"https://www.harmony.one/","shortName":"hmy-s1","chainId":1666600001,"networkId":1666600001},{"name":"Harmony Mainnet Shard 2","chain":"Harmony","rpc":["https://s2.api.harmony.one"],"faucets":[],"nativeCurrency":{"name":"ONE","symbol":"ONE","decimals":18},"infoURL":"https://www.harmony.one/","shortName":"hmy-s2","chainId":1666600002,"networkId":1666600002},{"name":"Harmony Mainnet Shard 3","chain":"Harmony","rpc":["https://s3.api.harmony.one"],"faucets":[],"nativeCurrency":{"name":"ONE","symbol":"ONE","decimals":18},"infoURL":"https://www.harmony.one/","shortName":"hmy-s3","chainId":1666600003,"networkId":1666600003},{"name":"Harmony Testnet Shard 0","chain":"Harmony","rpc":["https://api.s0.b.hmny.io"],"faucets":["https://faucet.pops.one"],"nativeCurrency":{"name":"ONE","symbol":"ONE","decimals":18},"infoURL":"https://www.harmony.one/","shortName":"hmy-b-s0","chainId":1666700000,"networkId":1666700000,"explorers":[{"name":"Harmony Testnet Block Explorer","url":"https://explorer.pops.one","standard":"EIP3091"}]},{"name":"Harmony Testnet Shard 1","chain":"Harmony","rpc":["https://api.s1.b.hmny.io"],"faucets":[],"nativeCurrency":{"name":"ONE","symbol":"ONE","decimals":18},"infoURL":"https://www.harmony.one/","shortName":"hmy-b-s1","chainId":1666700001,"networkId":1666700001},{"name":"Harmony Testnet Shard 2","chain":"Harmony","rpc":["https://api.s2.b.hmny.io"],"faucets":[],"nativeCurrency":{"name":"ONE","symbol":"ONE","decimals":18},"infoURL":"https://www.harmony.one/","shortName":"hmy-b-s2","chainId":1666700002,"networkId":1666700002},{"name":"Harmony Testnet Shard 3","chain":"Harmony","rpc":["https://api.s3.b.hmny.io"],"faucets":[],"nativeCurrency":{"name":"ONE","symbol":"ONE","decimals":18},"infoURL":"https://www.harmony.one/","shortName":"hmy-b-s3","chainId":1666700003,"networkId":1666700003},{"name":"DataHopper","chain":"HOP","rpc":["https://23.92.21.121:8545"],"faucets":[],"nativeCurrency":{"name":"DataHoppers","symbol":"HOP","decimals":18},"infoURL":"https://www.DataHopper.com","shortName":"hop","chainId":2021121117,"networkId":2021121117},{"name":"Pirl","chain":"PIRL","rpc":["https://wallrpc.pirl.io"],"faucets":[],"nativeCurrency":{"name":"Pirl Ether","symbol":"PIRL","decimals":18},"infoURL":"https://pirl.io","shortName":"pirl","chainId":3125659152,"networkId":3125659152,"slip44":164},{"name":"OneLedger Testnet Frankenstein","chain":"OLT","icon":"oneledger","rpc":["https://frankenstein-rpc.oneledger.network"],"faucets":["https://frankenstein-faucet.oneledger.network"],"nativeCurrency":{"name":"OLT","symbol":"OLT","decimals":18},"infoURL":"https://oneledger.io","shortName":"frankenstein","chainId":4216137055,"networkId":4216137055,"explorers":[{"name":"OneLedger Block Explorer","url":"https://frankenstein-explorer.oneledger.network","standard":"EIP3091"}]},{"name":"Palm Testnet","chain":"Palm","icon":"palm","rpc":["https://palm-testnet.infura.io/v3/{INFURA_API_KEY}"],"faucets":[],"nativeCurrency":{"name":"PALM","symbol":"PALM","decimals":18},"infoURL":"https://palm.io","shortName":"tpalm","chainId":11297108099,"networkId":11297108099,"explorers":[{"name":"Palm Testnet Explorer","url":"https://explorer.palm-uat.xyz","standard":"EIP3091","icon":"palm"}]},{"name":"Palm","chain":"Palm","icon":"palm","rpc":["https://palm-mainnet.infura.io/v3/{INFURA_API_KEY}"],"faucets":[],"nativeCurrency":{"name":"PALM","symbol":"PALM","decimals":18},"infoURL":"https://palm.io","shortName":"palm","chainId":11297108109,"networkId":11297108109,"explorers":[{"name":"Palm Explorer","url":"https://explorer.palm.io","standard":"EIP3091","icon":"palm"}]},{"name":"Ntity Mainnet","chain":"Ntity","rpc":["https://rpc.ntity.io"],"faucets":[],"nativeCurrency":{"name":"Ntity","symbol":"NTT","decimals":18},"infoURL":"https://ntity.io","shortName":"ntt","chainId":197710212030,"networkId":197710212030,"icon":"ntity","explorers":[{"name":"Ntity Blockscout","url":"https://blockscout.ntity.io","icon":"ntity","standard":"EIP3091"}]},{"name":"Haradev Testnet","chain":"Ntity","rpc":["https://blockchain.haradev.com"],"faucets":[],"nativeCurrency":{"name":"Ntity Haradev","symbol":"NTTH","decimals":18},"infoURL":"https://ntity.io","shortName":"ntt-haradev","chainId":197710212031,"networkId":197710212031,"icon":"ntity","explorers":[{"name":"Ntity Haradev Blockscout","url":"https://blockscout.haradev.com","icon":"ntity","standard":"EIP3091"}]},{"name":"Molereum Network","chain":"ETH","rpc":["https://molereum.jdubedition.com"],"faucets":[],"nativeCurrency":{"name":"Molereum Ether","symbol":"MOLE","decimals":18},"infoURL":"https://github.com/Jdubedition/molereum","shortName":"mole","chainId":6022140761023,"networkId":6022140761023},{"name":"Godwoken Testnet (V1)","chain":"GWT","rpc":["https://godwoken-testnet-web3-v1-rpc.ckbapp.dev"],"faucets":["https://homura.github.io/light-godwoken"],"nativeCurrency":{"name":"CKB","symbol":"CKB","decimals":8},"infoURL":"https://www.nervos.org","shortName":"gw-testnet-v1","chainId":868455272153094,"networkId":868455272153094,"explorers":[{"name":"GWScan Block Explorer","url":"https://v1.aggron.gwscan.com","standard":"none"}]}]
Thanos-DB
[NeurIPS 2024] Official implementation of "Is One GPU Enough? Pushing Image Generation at Higher-Resolutions with Foundation Models."
Reagan1311
One-Shot Open Affordance Learning with Foundation Models (CVPR 2024)
rsperberg
The font design used in Foundation, the Apple TV+ series, to indicate a change in location or time
opensound-org
A One-Stop Multi-Level SoundSystem Abstraction (or say sound/audio engine). Suitable for being a solid foundation for Pro-Audio Applications(e.g. a DAW) or other sound related apps.
fdhhhdjd
🔥 React Enterprise Boilerplate provides a solid foundation for building scalable and maintainable React applications. It comes with a pre‑configured, optimized project structure and essential tools, so you can focus on writing business logic from day one.
arashstar1
Code Issues 0 Pull requests 0 Pulse MaTaDoR/ 3233fdf V 5.7 MaTaDoR @MaTaDoRTeaMMaTaDoRTeaM committed on GitHub about 1 month ago 2 changed files 2,704 additions and 0 deletions cli/tg/tdcli.lua @@ -0,0 +1,2704 @@ +--[[ + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, + MA 02110-1301, USA. + +]]-- + +-- Vector example form is like this: {[0] = v} or {v1, v2, v3, [0] = v} +-- If false or true crashed your telegram-cli, try to change true to 1 and false to 0 + +-- Main Bot Framework +local M = {} + +-- @chat_id = user, group, channel, and broadcast +-- @group_id = normal group +-- @channel_id = channel and broadcast +local function getChatId(chat_id) + local chat = {} + local chat_id = tostring(chat_id) + + if chat_id:match('^-100') then + local channel_id = chat_id:gsub('-100', '') + chat = {ID = channel_id, type = 'channel'} + else + local group_id = chat_id:gsub('-', '') + chat = {ID = group_id, type = 'group'} + end + + return chat +end + +local function getInputFile(file) + if file:match('/') then + infile = {ID = "InputFileLocal", path_ = file} + elseif file:match('^%d+$') then + infile = {ID = "InputFileId", id_ = file} + else + infile = {ID = "InputFilePersistentId", persistent_id_ = file} + end + + return infile +end + +-- User can send bold, italic, and monospace text uses HTML or Markdown format. +local function getParseMode(parse_mode) + if parse_mode then + local mode = parse_mode:lower() + + if mode == 'markdown' or mode == 'md' then + P = {ID = "TextParseModeMarkdown"} + elseif mode == 'html' then + P = {ID = "TextParseModeHTML"} + end + end + + return P +end + +-- Returns current authorization state, offline request +local function getAuthState(dl_cb, cmd) + tdcli_function ({ + ID = "GetAuthState", + }, dl_cb, cmd) +end + +M.getAuthState = getAuthState + +-- Sets user's phone number and sends authentication code to the user. +-- Works only when authGetState returns authStateWaitPhoneNumber. +-- If phone number is not recognized or another error has happened, returns an error. Otherwise returns authStateWaitCode +-- @phone_number User's phone number in any reasonable format +-- @allow_flash_call Pass True, if code can be sent via flash call to the specified phone number +-- @is_current_phone_number Pass true, if the phone number is used on the current device. Ignored if allow_flash_call is False +local function setAuthPhoneNumber(phone_number, allow_flash_call, is_current_phone_number, dl_cb, cmd) + tdcli_function ({ + ID = "SetAuthPhoneNumber", + phone_number_ = phone_number, + allow_flash_call_ = allow_flash_call, + is_current_phone_number_ = is_current_phone_number + }, dl_cb, cmd) +end + +M.setAuthPhoneNumber = setAuthPhoneNumber + +-- Resends authentication code to the user. +-- Works only when authGetState returns authStateWaitCode and next_code_type of result is not null. +-- Returns authStateWaitCode on success +local function resendAuthCode(dl_cb, cmd) + tdcli_function ({ + ID = "ResendAuthCode", + }, dl_cb, cmd) +end + +M.resendAuthCode = resendAuthCode + +-- Checks authentication code. +-- Works only when authGetState returns authStateWaitCode. +-- Returns authStateWaitPassword or authStateOk on success +-- @code Verification code from SMS, Telegram message, voice call or flash call +-- @first_name User first name, if user is yet not registered, 1-255 characters +-- @last_name Optional user last name, if user is yet not registered, 0-255 characters +local function checkAuthCode(code, first_name, last_name, dl_cb, cmd) + tdcli_function ({ + ID = "CheckAuthCode", + code_ = code, + first_name_ = first_name, + last_name_ = last_name + }, dl_cb, cmd) +end + +M.checkAuthCode = checkAuthCode + +-- Checks password for correctness. +-- Works only when authGetState returns authStateWaitPassword. +-- Returns authStateOk on success +-- @password Password to check +local function checkAuthPassword(password, dl_cb, cmd) + tdcli_function ({ + ID = "CheckAuthPassword", + password_ = password + }, dl_cb, cmd) +end + +M.checkAuthPassword = checkAuthPassword + +-- Requests to send password recovery code to email. +-- Works only when authGetState returns authStateWaitPassword. +-- Returns authStateWaitPassword on success +local function requestAuthPasswordRecovery(dl_cb, cmd) + tdcli_function ({ + ID = "RequestAuthPasswordRecovery", + }, dl_cb, cmd) +end + +M.requestAuthPasswordRecovery = requestAuthPasswordRecovery + +-- Recovers password with recovery code sent to email. +-- Works only when authGetState returns authStateWaitPassword. +-- Returns authStateOk on success +-- @recovery_code Recovery code to check +local function recoverAuthPassword(recovery_code, dl_cb, cmd) + tdcli_function ({ + ID = "RecoverAuthPassword", + recovery_code_ = recovery_code + }, dl_cb, cmd) +end + +M.recoverAuthPassword = recoverAuthPassword + +-- Logs out user. +-- If force == false, begins to perform soft log out, returns authStateLoggingOut after completion. +-- If force == true then succeeds almost immediately without cleaning anything at the server, but returns error with code 401 and description "Unauthorized" +-- @force If true, just delete all local data. Session will remain in list of active sessions +local function resetAuth(force, dl_cb, cmd) + tdcli_function ({ + ID = "ResetAuth", + force_ = force or nil + }, dl_cb, cmd) +end + +M.resetAuth = resetAuth + +-- Check bot's authentication token to log in as a bot. +-- Works only when authGetState returns authStateWaitPhoneNumber. +-- Can be used instead of setAuthPhoneNumber and checkAuthCode to log in. +-- Returns authStateOk on success +-- @token Bot token +local function checkAuthBotToken(token, dl_cb, cmd) + tdcli_function ({ + ID = "CheckAuthBotToken", + token_ = token + }, dl_cb, cmd) +end + +M.checkAuthBotToken = checkAuthBotToken + +-- Returns current state of two-step verification +local function getPasswordState(dl_cb, cmd) + tdcli_function ({ + ID = "GetPasswordState", + }, dl_cb, cmd) +end + +M.getPasswordState = getPasswordState + +-- Changes user password. +-- If new recovery email is specified, then error EMAIL_UNCONFIRMED is returned and password change will not be applied until email confirmation. +-- Application should call getPasswordState from time to time to check if email is already confirmed +-- @old_password Old user password +-- @new_password New user password, may be empty to remove the password +-- @new_hint New password hint, can be empty +-- @set_recovery_email Pass True, if recovery email should be changed +-- @new_recovery_email New recovery email, may be empty +local function setPassword(old_password, new_password, new_hint, set_recovery_email, new_recovery_email, dl_cb, cmd) + tdcli_function ({ + ID = "SetPassword", + old_password_ = old_password, + new_password_ = new_password, + new_hint_ = new_hint, + set_recovery_email_ = set_recovery_email, + new_recovery_email_ = new_recovery_email + }, dl_cb, cmd) +end + +M.setPassword = setPassword + +-- Returns set up recovery email. +-- This method can be used to verify a password provided by the user +-- @password Current user password +local function getRecoveryEmail(password, dl_cb, cmd) + tdcli_function ({ + ID = "GetRecoveryEmail", + password_ = password + }, dl_cb, cmd) +end + +M.getRecoveryEmail = getRecoveryEmail + +-- Changes user recovery email. +-- If new recovery email is specified, then error EMAIL_UNCONFIRMED is returned and email will not be changed until email confirmation. +-- Application should call getPasswordState from time to time to check if email is already confirmed. +-- If new_recovery_email coincides with the current set up email succeeds immediately and aborts all other requests waiting for email confirmation +-- @password Current user password +-- @new_recovery_email New recovery email +local function setRecoveryEmail(password, new_recovery_email, dl_cb, cmd) + tdcli_function ({ + ID = "SetRecoveryEmail", + password_ = password, + new_recovery_email_ = new_recovery_email + }, dl_cb, cmd) +end + +M.setRecoveryEmail = setRecoveryEmail + +-- Requests to send password recovery code to email +local function requestPasswordRecovery(dl_cb, cmd) + tdcli_function ({ + ID = "RequestPasswordRecovery", + }, dl_cb, cmd) +end + +M.requestPasswordRecovery = requestPasswordRecovery + +-- Recovers password with recovery code sent to email +-- @recovery_code Recovery code to check +local function recoverPassword(recovery_code, dl_cb, cmd) + tdcli_function ({ + ID = "RecoverPassword", + recovery_code_ = tostring(recovery_code) + }, dl_cb, cmd) +end + +M.recoverPassword = recoverPassword + +-- Returns current logged in user +local function getMe(dl_cb, cmd) + tdcli_function ({ + ID = "GetMe", + }, dl_cb, cmd) +end + +M.getMe = getMe + +-- Returns information about a user by its identifier, offline request if current user is not a bot +-- @user_id User identifier +local function getUser(user_id, dl_cb, cmd) + tdcli_function ({ + ID = "GetUser", + user_id_ = user_id + }, dl_cb, cmd) +end + +M.getUser = getUser + +-- Returns full information about a user by its identifier +-- @user_id User identifier +local function getUserFull(user_id, dl_cb, cmd) + tdcli_function ({ + ID = "GetUserFull", + user_id_ = user_id + }, dl_cb, cmd) +end + +M.getUserFull = getUserFull + +-- Returns information about a group by its identifier, offline request if current user is not a bot +-- @group_id Group identifier +local function getGroup(group_id, dl_cb, cmd) + tdcli_function ({ + ID = "GetGroup", + group_id_ = getChatId(group_id).ID + }, dl_cb, cmd) +end + +M.getGroup = getGroup + +-- Returns full information about a group by its identifier +-- @group_id Group identifier +local function getGroupFull(group_id, dl_cb, cmd) + tdcli_function ({ + ID = "GetGroupFull", + group_id_ = getChatId(group_id).ID + }, dl_cb, cmd) +end + +M.getGroupFull = getGroupFull + +-- Returns information about a channel by its identifier, offline request if current user is not a bot +-- @channel_id Channel identifier +local function getChannel(channel_id, dl_cb, cmd) + tdcli_function ({ + ID = "GetChannel", + channel_id_ = getChatId(channel_id).ID + }, dl_cb, cmd) +end + +M.getChannel = getChannel + +-- Returns full information about a channel by its identifier, cached for at most 1 minute +-- @channel_id Channel identifier +local function getChannelFull(channel_id, dl_cb, cmd) + tdcli_function ({ + ID = "GetChannelFull", + channel_id_ = getChatId(channel_id).ID + }, dl_cb, cmd) +end + +M.getChannelFull = getChannelFull + +-- Returns information about a secret chat by its identifier, offline request +-- @secret_chat_id Secret chat identifier +local function getSecretChat(secret_chat_id, dl_cb, cmd) + tdcli_function ({ + ID = "GetSecretChat", + secret_chat_id_ = secret_chat_id + }, dl_cb, cmd) +end + +M.getSecretChat = getSecretChat + +-- Returns information about a chat by its identifier, offline request if current user is not a bot +-- @chat_id Chat identifier +local function getChat(chat_id, dl_cb, cmd) + tdcli_function ({ + ID = "GetChat", + chat_id_ = chat_id + }, dl_cb, cmd) +end + +M.getChat = getChat + +-- Returns information about a message +-- @chat_id Identifier of the chat, message belongs to +-- @message_id Identifier of the message to get +local function getMessage(chat_id, message_id, dl_cb, cmd) + tdcli_function ({ + ID = "GetMessage", + chat_id_ = chat_id, + message_id_ = message_id + }, dl_cb, cmd) +end + +M.getMessage = getMessage + +-- Returns information about messages. +-- If message is not found, returns null on the corresponding position of the result +-- @chat_id Identifier of the chat, messages belongs to +-- @message_ids Identifiers of the messages to get +local function getMessages(chat_id, message_ids, dl_cb, cmd) + tdcli_function ({ + ID = "GetMessages", + chat_id_ = chat_id, + message_ids_ = message_ids -- vector + }, dl_cb, cmd) +end + +M.getMessages = getMessages + +-- Returns information about a file, offline request +-- @file_id Identifier of the file to get +local function getFile(file_id, dl_cb, cmd) + tdcli_function ({ + ID = "GetFile", + file_id_ = file_id + }, dl_cb, cmd) +end + +M.getFile = getFile + +-- Returns information about a file by its persistent id, offline request +-- @persistent_file_id Persistent identifier of the file to get +local function getFilePersistent(persistent_file_id, dl_cb, cmd) + tdcli_function ({ + ID = "GetFilePersistent", + persistent_file_id_ = persistent_file_id + }, dl_cb, cmd) +end + +M.getFilePersistent = getFilePersistent + +-- Returns list of chats in the right order, chats are sorted by (order, chat_id) in decreasing order. +-- For example, to get list of chats from the beginning, the offset_order should be equal 2^63 - 1 +-- @offset_order Chat order to return chats from +-- @offset_chat_id Chat identifier to return chats from +-- @limit Maximum number of chats to be returned +local function getChats(offset_order, offset_chat_id, limit, dl_cb, cmd) + if not limit or limit > 20 then + limit = 20 + end + + tdcli_function ({ + ID = "GetChats", + offset_order_ = offset_order or 9223372036854775807, + offset_chat_id_ = offset_chat_id or 0, + limit_ = limit + }, dl_cb, cmd) +end + +M.getChats = getChats + +-- Searches public chat by its username. +-- Currently only private and channel chats can be public. +-- Returns chat if found, otherwise some error is returned +-- @username Username to be resolved +local function searchPublicChat(username, dl_cb, cmd) + tdcli_function ({ + ID = "SearchPublicChat", + username_ = username + }, dl_cb, cmd) +end + +M.searchPublicChat = searchPublicChat + +-- Searches public chats by prefix of their username. +-- Currently only private and channel (including supergroup) chats can be public. +-- Returns meaningful number of results. +-- Returns nothing if length of the searched username prefix is less than 5. +-- Excludes private chats with contacts from the results +-- @username_prefix Prefix of the username to search +local function searchPublicChats(username_prefix, dl_cb, cmd) + tdcli_function ({ + ID = "SearchPublicChats", + username_prefix_ = username_prefix + }, dl_cb, cmd) +end + +M.searchPublicChats = searchPublicChats + +-- Searches for specified query in the title and username of known chats, offline request. +-- Returns chats in the order of them in the chat list +-- @query Query to search for, if query is empty, returns up to 20 recently found chats +-- @limit Maximum number of chats to be returned +local function searchChats(query, limit, dl_cb, cmd) + if not limit or limit > 20 then + limit = 20 + end + + tdcli_function ({ + ID = "SearchChats", + query_ = query, + limit_ = limit + }, dl_cb, cmd) +end + +M.searchChats = searchChats + +-- Adds chat to the list of recently found chats. +-- The chat is added to the beginning of the list. +-- If the chat is already in the list, at first it is removed from the list +-- @chat_id Identifier of the chat to add +local function addRecentlyFoundChat(chat_id, dl_cb, cmd) + tdcli_function ({ + ID = "AddRecentlyFoundChat", + chat_id_ = chat_id + }, dl_cb, cmd) +end + +M.addRecentlyFoundChat = addRecentlyFoundChat + +-- Deletes chat from the list of recently found chats +-- @chat_id Identifier of the chat to delete +local function deleteRecentlyFoundChat(chat_id, dl_cb, cmd) + tdcli_function ({ + ID = "DeleteRecentlyFoundChat", + chat_id_ = chat_id + }, dl_cb, cmd) +end + +M.deleteRecentlyFoundChat = deleteRecentlyFoundChat + +-- Clears list of recently found chats +local function deleteRecentlyFoundChats(dl_cb, cmd) + tdcli_function ({ + ID = "DeleteRecentlyFoundChats", + }, dl_cb, cmd) +end + +M.deleteRecentlyFoundChats = deleteRecentlyFoundChats + +-- Returns list of common chats with an other given user. +-- Chats are sorted by their type and creation date +-- @user_id User identifier +-- @offset_chat_id Chat identifier to return chats from, use 0 for the first request +-- @limit Maximum number of chats to be returned, up to 100 +local function getCommonChats(user_id, offset_chat_id, limit, dl_cb, cmd) + if not limit or limit > 100 then + limit = 100 + end + + tdcli_function ({ + ID = "GetCommonChats", + user_id_ = user_id, + offset_chat_id_ = offset_chat_id, + limit_ = limit + }, dl_cb, cmd) +end + +M.getCommonChats = getCommonChats + +-- Returns messages in a chat. +-- Automatically calls openChat. +-- Returns result in reverse chronological order, i.e. in order of decreasing message.message_id +-- @chat_id Chat identifier +-- @from_message_id Identifier of the message near which we need a history, you can use 0 to get results from the beginning, i.e. from oldest to newest +-- @offset Specify 0 to get results exactly from from_message_id or negative offset to get specified message and some newer messages +-- @limit Maximum number of messages to be returned, should be positive and can't be greater than 100. +-- If offset is negative, limit must be greater than -offset. +-- There may be less than limit messages returned even the end of the history is not reached +local function getChatHistory(chat_id, from_message_id, offset, limit, dl_cb, cmd) + if not limit or limit > 100 then + limit = 100 + end + + tdcli_function ({ + ID = "GetChatHistory", + chat_id_ = chat_id, + from_message_id_ = from_message_id, + offset_ = offset or 0, + limit_ = limit + }, dl_cb, cmd) +end + +M.getChatHistory = getChatHistory + +-- Deletes all messages in the chat. +-- Can't be used for channel chats +-- @chat_id Chat identifier +-- @remove_from_chat_list Pass true, if chat should be removed from the chat list +local function deleteChatHistory(chat_id, remove_from_chat_list, dl_cb, cmd) + tdcli_function ({ + ID = "DeleteChatHistory", + chat_id_ = chat_id, + remove_from_chat_list_ = remove_from_chat_list + }, dl_cb, cmd) +end + +M.deleteChatHistory = deleteChatHistory + +-- Searches for messages with given words in the chat. +-- Returns result in reverse chronological order, i. e. in order of decreasimg message_id. +-- Doesn't work in secret chats +-- @chat_id Chat identifier to search in +-- @query Query to search for +-- @from_message_id Identifier of the message from which we need a history, you can use 0 to get results from beginning +-- @limit Maximum number of messages to be returned, can't be greater than 100 +-- @filter Filter for content of searched messages +-- filter = Empty|Animation|Audio|Document|Photo|Video|Voice|PhotoAndVideo|Url|ChatPhoto +local function searchChatMessages(chat_id, query, from_message_id, limit, filter, dl_cb, cmd) + if not limit or limit > 100 then + limit = 100 + end + + tdcli_function ({ + ID = "SearchChatMessages", + chat_id_ = chat_id, + query_ = query, + from_message_id_ = from_message_id, + limit_ = limit, + filter_ = { + ID = 'SearchMessagesFilter' .. filter + }, + }, dl_cb, cmd) +end + +M.searchChatMessages = searchChatMessages + +-- Searches for messages in all chats except secret chats. Returns result in reverse chronological order, i. e. in order of decreasing (date, chat_id, message_id) +-- @query Query to search for +-- @offset_date Date of the message to search from, you can use 0 or any date in the future to get results from the beginning +-- @offset_chat_id Chat identifier of the last found message or 0 for the first request +-- @offset_message_id Message identifier of the last found message or 0 for the first request +-- @limit Maximum number of messages to be returned, can't be greater than 100 +local function searchMessages(query, offset_date, offset_chat_id, offset_message_id, limit, dl_cb, cmd) + if not limit or limit > 100 then + limit = 100 + end + + tdcli_function ({ + ID = "SearchMessages", + query_ = query, + offset_date_ = offset_date, + offset_chat_id_ = offset_chat_id, + offset_message_id_ = offset_message_id, + limit_ = limit + }, dl_cb, cmd) +end + +M.searchMessages = searchMessages + +-- Invites bot to a chat (if it is not in the chat) and send /start to it. +-- Bot can't be invited to a private chat other than chat with the bot. +-- Bots can't be invited to broadcast channel chats and secret chats. +-- Returns sent message. +-- UpdateChatTopMessage will not be sent, so returned message should be used to update chat top message +-- @bot_user_id Identifier of the bot +-- @chat_id Identifier of the chat +-- @parameter Hidden parameter sent to bot for deep linking (https://api.telegram.org/bots#deep-linking) +-- parameter=start|startgroup or custom as defined by bot creator +local function sendBotStartMessage(bot_user_id, chat_id, parameter, dl_cb, cmd) + tdcli_function ({ + ID = "SendBotStartMessage", + bot_user_id_ = bot_user_id, + chat_id_ = chat_id, + parameter_ = parameter + }, dl_cb, cmd) +end + +M.sendBotStartMessage = sendBotStartMessage + +-- Sends result of the inline query as a message. +-- Returns sent message. +-- UpdateChatTopMessage will not be sent, so returned message should be used to update chat top message. +-- Always clears chat draft message +-- @chat_id Chat to send message +-- @reply_to_message_id Identifier of a message to reply to or 0 +-- @disable_notification Pass true, to disable notification about the message, doesn't works in secret chats +-- @from_background Pass true, if the message is sent from background +-- @query_id Identifier of the inline query +-- @result_id Identifier of the inline result +local function sendInlineQueryResultMessage(chat_id, reply_to_message_id, disable_notification, from_background, query_id, result_id, dl_cb, cmd) + tdcli_function ({ + ID = "SendInlineQueryResultMessage", + chat_id_ = chat_id, + reply_to_message_id_ = reply_to_message_id, + disable_notification_ = disable_notification, + from_background_ = from_background, + query_id_ = query_id, + result_id_ = result_id + }, dl_cb, cmd) +end + +M.sendInlineQueryResultMessage = sendInlineQueryResultMessage + +-- Forwards previously sent messages. +-- Returns forwarded messages in the same order as message identifiers passed in message_ids. +-- If message can't be forwarded, null will be returned instead of the message. +-- UpdateChatTopMessage will not be sent, so returned messages should be used to update chat top message +-- @chat_id Identifier of a chat to forward messages +-- @from_chat_id Identifier of a chat to forward from +-- @message_ids Identifiers of messages to forward +-- @disable_notification Pass true, to disable notification about the message, doesn't works if messages are forwarded to secret chat +-- @from_background Pass true, if the message is sent from background +local function forwardMessages(chat_id, from_chat_id, message_ids, disable_notification, dl_cb, cmd) + tdcli_function ({ + ID = "ForwardMessages", + chat_id_ = chat_id, + from_chat_id_ = from_chat_id, + message_ids_ = message_ids, -- vector + disable_notification_ = disable_notification, + from_background_ = 1 + }, dl_cb, cmd) +end + +M.forwardMessages = forwardMessages + +-- Changes current ttl setting in a secret chat and sends corresponding message +-- @chat_id Chat identifier +-- @ttl New value of ttl in seconds +local function sendChatSetTtlMessage(chat_id, ttl, dl_cb, cmd) + tdcli_function ({ + ID = "SendChatSetTtlMessage", + chat_id_ = chat_id, + ttl_ = ttl + }, dl_cb, cmd) +end + +M.sendChatSetTtlMessage = sendChatSetTtlMessage + +-- Deletes messages. +-- UpdateDeleteMessages will not be sent for messages deleted through that function +-- @chat_id Chat identifier +-- @message_ids Identifiers of messages to delete +local function deleteMessages(chat_id, message_ids, dl_cb, cmd) + tdcli_function ({ + ID = "DeleteMessages", + chat_id_ = chat_id, + message_ids_ = message_ids -- vector + }, dl_cb, cmd) +end + +M.deleteMessages = deleteMessages + +-- Deletes all messages in the chat sent by the specified user. +-- Works only in supergroup channel chats, needs appropriate privileges +-- @chat_id Chat identifier +-- @user_id User identifier +local function deleteMessagesFromUser(chat_id, user_id, dl_cb, cmd) + tdcli_function ({ + ID = "DeleteMessagesFromUser", + chat_id_ = chat_id, + user_id_ = user_id + }, dl_cb, cmd) +end + +M.deleteMessagesFromUser = deleteMessagesFromUser + +-- Edits text of text or game message. +-- Non-bots can edit message in a limited period of time. +-- Returns edited message after edit is complete server side +-- @chat_id Chat the message belongs to +-- @message_id Identifier of the message +-- @reply_markup Bots only. New message reply markup +-- @input_message_content New text content of the message. Should be of type InputMessageText +local function editMessageText(chat_id, message_id, reply_markup, text, disable_web_page_preview, parse_mode, dl_cb, cmd) + local TextParseMode = getParseMode(parse_mode) + + tdcli_function ({ + ID = "EditMessageText", + chat_id_ = chat_id, + message_id_ = message_id, + reply_markup_ = reply_markup, -- reply_markup:ReplyMarkup + input_message_content_ = { + ID = "InputMessageText", + text_ = text, + disable_web_page_preview_ = disable_web_page_preview, + clear_draft_ = 0, + entities_ = {}, + parse_mode_ = TextParseMode, + }, + }, dl_cb, cmd) +end + +M.editMessageText = editMessageText + +-- Edits message content caption. +-- Non-bots can edit message in a limited period of time. +-- Returns edited message after edit is complete server side +-- @chat_id Chat the message belongs to +-- @message_id Identifier of the message +-- @reply_markup Bots only. New message reply markup +-- @caption New message content caption, 0-200 characters +local function editMessageCaption(chat_id, message_id, reply_markup, caption, dl_cb, cmd) + tdcli_function ({ + ID = "EditMessageCaption", + chat_id_ = chat_id, + message_id_ = message_id, + reply_markup_ = reply_markup, -- reply_markup:ReplyMarkup + caption_ = caption + }, dl_cb, cmd) +end + +M.editMessageCaption = editMessageCaption + +-- Bots only. +-- Edits message reply markup. +-- Returns edited message after edit is complete server side +-- @chat_id Chat the message belongs to +-- @message_id Identifier of the message +-- @reply_markup New message reply markup +local function editMessageReplyMarkup(inline_message_id, reply_markup, caption, dl_cb, cmd) + tdcli_function ({ + ID = "EditInlineMessageCaption", + inline_message_id_ = inline_message_id, + reply_markup_ = reply_markup, -- reply_markup:ReplyMarkup + caption_ = caption + }, dl_cb, cmd) +end + +M.editMessageReplyMarkup = editMessageReplyMarkup + +-- Bots only. +-- Edits text of an inline text or game message sent via bot +-- @inline_message_id Inline message identifier +-- @reply_markup New message reply markup +-- @input_message_content New text content of the message. Should be of type InputMessageText +local function editInlineMessageText(inline_message_id, reply_markup, text, disable_web_page_preview, dl_cb, cmd) + tdcli_function ({ + ID = "EditInlineMessageText", + inline_message_id_ = inline_message_id, + reply_markup_ = reply_markup, -- reply_markup:ReplyMarkup + input_message_content_ = { + ID = "InputMessageText", + text_ = text, + disable_web_page_preview_ = disable_web_page_preview, + clear_draft_ = 0, + entities_ = {} + }, + }, dl_cb, cmd) +end + +M.editInlineMessageText = editInlineMessageText + +-- Bots only. +-- Edits caption of an inline message content sent via bot +-- @inline_message_id Inline message identifier +-- @reply_markup New message reply markup +-- @caption New message content caption, 0-200 characters +local function editInlineMessageCaption(inline_message_id, reply_markup, caption, dl_cb, cmd) + tdcli_function ({ + ID = "EditInlineMessageCaption", + inline_message_id_ = inline_message_id, + reply_markup_ = reply_markup, -- reply_markup:ReplyMarkup + caption_ = caption + }, dl_cb, cmd) +end + +M.editInlineMessageCaption = editInlineMessageCaption + +-- Bots only. +-- Edits reply markup of an inline message sent via bot +-- @inline_message_id Inline message identifier +-- @reply_markup New message reply markup +local function editInlineMessageReplyMarkup(inline_message_id, reply_markup, dl_cb, cmd) + tdcli_function ({ + ID = "EditInlineMessageReplyMarkup", + inline_message_id_ = inline_message_id, + reply_markup_ = reply_markup -- reply_markup:ReplyMarkup + }, dl_cb, cmd) +end + +M.editInlineMessageReplyMarkup = editInlineMessageReplyMarkup + + +-- Sends inline query to a bot and returns its results. +-- Unavailable for bots +-- @bot_user_id Identifier of the bot send query to +-- @chat_id Identifier of the chat, where the query is sent +-- @user_location User location, only if needed +-- @query Text of the query +-- @offset Offset of the first entry to return +local function getInlineQueryResults(bot_user_id, chat_id, latitude, longitude, query, offset, dl_cb, cmd) + tdcli_function ({ + ID = "GetInlineQueryResults", + bot_user_id_ = bot_user_id, + chat_id_ = chat_id, + user_location_ = { + ID = "Location", + latitude_ = latitude, + longitude_ = longitude + }, + query_ = query, + offset_ = offset + }, dl_cb, cmd) +end + +M.getInlineQueryResults = getInlineQueryResults + +-- Bots only. +-- Sets result of the inline query +-- @inline_query_id Identifier of the inline query +-- @is_personal Does result of the query can be cached only for specified user +-- @results Results of the query +-- @cache_time Allowed time to cache results of the query in seconds +-- @next_offset Offset for the next inline query, pass empty string if there is no more results +-- @switch_pm_text If non-empty, this text should be shown on the button, which opens private chat with the bot and sends bot start message with parameter switch_pm_parameter +-- @switch_pm_parameter Parameter for the bot start message +local function answerInlineQuery(inline_query_id, is_personal, cache_time, next_offset, switch_pm_text, switch_pm_parameter, dl_cb, cmd) + tdcli_function ({ + ID = "AnswerInlineQuery", + inline_query_id_ = inline_query_id, + is_personal_ = is_personal, + results_ = results, --vector<InputInlineQueryResult>, + cache_time_ = cache_time, + next_offset_ = next_offset, + switch_pm_text_ = switch_pm_text, + switch_pm_parameter_ = switch_pm_parameter + }, dl_cb, cmd) +end + +M.answerInlineQuery = answerInlineQuery + +-- Sends callback query to a bot and returns answer to it. +-- Unavailable for bots +-- @chat_id Identifier of the chat with a message +-- @message_id Identifier of the message, from which the query is originated +-- @payload Query payload +-- @text Text of the answer +-- @show_alert If true, an alert should be shown to the user instead of a toast +-- @url URL to be open +local function getCallbackQueryAnswer(chat_id, message_id, text, show_alert, url, dl_cb, cmd) + tdcli_function ({ + ID = "GetCallbackQueryAnswer", + chat_id_ = chat_id, + message_id_ = message_id, + payload_ = { + ID = "CallbackQueryAnswer", + text_ = text, + show_alert_ = show_alert, + url_ = url + }, + }, dl_cb, cmd) +end + +M.getCallbackQueryAnswer = getCallbackQueryAnswer + +-- Bots only. +-- Sets result of the callback query +-- @callback_query_id Identifier of the callback query +-- @text Text of the answer +-- @show_alert If true, an alert should be shown to the user instead of a toast +-- @url Url to be opened +-- @cache_time Allowed time to cache result of the query in seconds +local function answerCallbackQuery(callback_query_id, text, show_alert, url, cache_time, dl_cb, cmd) + tdcli_function ({ + ID = "AnswerCallbackQuery", + callback_query_id_ = callback_query_id, + text_ = text, + show_alert_ = show_alert, + url_ = url, + cache_time_ = cache_time + }, dl_cb, cmd) +end + +M.answerCallbackQuery = answerCallbackQuery + +-- Bots only. +-- Updates game score of the specified user in the game +-- @chat_id Chat a message with the game belongs to +-- @message_id Identifier of the message +-- @edit_message True, if message should be edited +-- @user_id User identifier +-- @score New score +-- @force Pass True to update the score even if it decreases. If score is 0, user will be deleted from the high scores table +local function setGameScore(chat_id, message_id, edit_message, user_id, score, force, dl_cb, cmd) + tdcli_function ({ + ID = "SetGameScore", + chat_id_ = chat_id, + message_id_ = message_id, + edit_message_ = edit_message, + user_id_ = user_id, + score_ = score, + force_ = force + }, dl_cb, cmd) +end + +M.setGameScore = setGameScore + +-- Bots only. +-- Updates game score of the specified user in the game +-- @inline_message_id Inline message identifier +-- @edit_message True, if message should be edited +-- @user_id User identifier +-- @score New score +-- @force Pass True to update the score even if it decreases. If score is 0, user will be deleted from the high scores table +local function setInlineGameScore(inline_message_id, edit_message, user_id, score, force, dl_cb, cmd) + tdcli_function ({ + ID = "SetInlineGameScore", + inline_message_id_ = inline_message_id, + edit_message_ = edit_message, + user_id_ = user_id, + score_ = score, + force_ = force + }, dl_cb, cmd) +end + +M.setInlineGameScore = setInlineGameScore + +-- Bots only. +-- Returns game high scores and some part of the score table around of the specified user in the game +-- @chat_id Chat a message with the game belongs to +-- @message_id Identifier of the message +-- @user_id User identifie +local function getGameHighScores(chat_id, message_id, user_id, dl_cb, cmd) + tdcli_function ({ + ID = "GetGameHighScores", + chat_id_ = chat_id, + message_id_ = message_id, + user_id_ = user_id + }, dl_cb, cmd) +end + +M.getGameHighScores = getGameHighScores + +-- Bots only. +-- Returns game high scores and some part of the score table around of the specified user in the game +-- @inline_message_id Inline message identifier +-- @user_id User identifier +local function getInlineGameHighScores(inline_message_id, user_id, dl_cb, cmd) + tdcli_function ({ + ID = "GetInlineGameHighScores", + inline_message_id_ = inline_message_id, + user_id_ = user_id + }, dl_cb, cmd) +end + +M.getInlineGameHighScores = getInlineGameHighScores + +-- Deletes default reply markup from chat. +-- This method needs to be called after one-time keyboard or ForceReply reply markup has been used. +-- UpdateChatReplyMarkup will be send if reply markup will be changed +-- @chat_id Chat identifier +-- @message_id Message identifier of used keyboard +local function deleteChatReplyMarkup(chat_id, message_id, dl_cb, cmd) + tdcli_function ({ + ID = "DeleteChatReplyMarkup", + chat_id_ = chat_id, + message_id_ = message_id + }, dl_cb, cmd) +end + +M.deleteChatReplyMarkup = deleteChatReplyMarkup + +-- Sends notification about user activity in a chat +-- @chat_id Chat identifier +-- @action Action description +-- action = Typing|Cancel|RecordVideo|UploadVideo|RecordVoice|UploadVoice|UploadPhoto|UploadDocument|GeoLocation|ChooseContact|StartPlayGame +local function sendChatAction(chat_id, action, progress, dl_cb, cmd) + tdcli_function ({ + ID = "SendChatAction", + chat_id_ = chat_id, + action_ = { + ID = "SendMessage" .. action .. "Action", + progress_ = progress or 100 + } + }, dl_cb, cmd) +end + +M.sendChatAction = sendChatAction + +-- Sends notification about screenshot taken in a chat. +-- Works only in secret chats +-- @chat_id Chat identifier +local function sendChatScreenshotTakenNotification(chat_id, dl_cb, cmd) + tdcli_function ({ + ID = "SendChatScreenshotTakenNotification", + chat_id_ = chat_id + }, dl_cb, cmd) +end + +M.sendChatScreenshotTakenNotification = sendChatScreenshotTakenNotification + +-- Chat is opened by the user. +-- Many useful activities depends on chat being opened or closed. For example, in channels all updates are received only for opened chats +-- @chat_id Chat identifier +local function openChat(chat_id, dl_cb, cmd) + tdcli_function ({ + ID = "OpenChat", + chat_id_ = chat_id + }, dl_cb, cmd) +end + +M.openChat = openChat + +-- Chat is closed by the user. +-- Many useful activities depends on chat being opened or closed. +-- @chat_id Chat identifier +local function closeChat(chat_id, dl_cb, cmd) + tdcli_function ({ + ID = "CloseChat", + chat_id_ = chat_id + }, dl_cb, cmd) +end + +M.closeChat = closeChat + +-- Messages are viewed by the user. +-- Many useful activities depends on message being viewed. For example, marking messages as read, incrementing of view counter, updating of view counter, removing of deleted messages in channels +-- @chat_id Chat identifier +-- @message_ids Identifiers of viewed messages +local function viewMessages(chat_id, message_ids, dl_cb, cmd) + tdcli_function ({ + ID = "ViewMessages", + chat_id_ = chat_id, + message_ids_ = message_ids -- vector + }, dl_cb, cmd) +end + +M.viewMessages = viewMessages + +-- Message content is opened, for example the user has opened a photo, a video, a document, a location or a venue or have listened to an audio or a voice message +-- @chat_id Chat identifier of the message +-- @message_id Identifier of the message with opened content +local function openMessageContent(chat_id, message_id, dl_cb, cmd) + tdcli_function ({ + ID = "OpenMessageContent", + chat_id_ = chat_id, + message_id_ = message_id + }, dl_cb, cmd) +end + +M.openMessageContent = openMessageContent + +-- Returns existing chat corresponding to the given user +-- @user_id User identifier +local function createPrivateChat(user_id, dl_cb, cmd) + tdcli_function ({ + ID = "CreatePrivateChat", + user_id_ = user_id + }, dl_cb, cmd) +end + +M.createPrivateChat = createPrivateChat + +-- Returns existing chat corresponding to the known group +-- @group_id Group identifier +local function createGroupChat(group_id, dl_cb, cmd) + tdcli_function ({ + ID = "CreateGroupChat", + group_id_ = getChatId(group_id).ID + }, dl_cb, cmd) +end + +M.createGroupChat = createGroupChat + +-- Returns existing chat corresponding to the known channel +-- @channel_id Channel identifier +local function createChannelChat(channel_id, dl_cb, cmd) + tdcli_function ({ + ID = "CreateChannelChat", + channel_id_ = getChatId(channel_id).ID + }, dl_cb, cmd) +end + +M.createChannelChat = createChannelChat + +-- Returns existing chat corresponding to the known secret chat +-- @secret_chat_id SecretChat identifier +local function createSecretChat(secret_chat_id, dl_cb, cmd) + tdcli_function ({ + ID = "CreateSecretChat", + secret_chat_id_ = secret_chat_id + }, dl_cb, cmd) +end + +M.createSecretChat = createSecretChat + +-- Creates new group chat and send corresponding messageGroupChatCreate, returns created chat +-- @user_ids Identifiers of users to add to the group +-- @title Title of new group chat, 0-255 characters +local function createNewGroupChat(user_ids, title, dl_cb, cmd) + tdcli_function ({ + ID = "CreateNewGroupChat", + user_ids_ = user_ids, -- vector + title_ = title + }, dl_cb, cmd) +end + +M.createNewGroupChat = createNewGroupChat + +-- Creates new channel chat and send corresponding messageChannelChatCreate, returns created chat +-- @title Title of new channel chat, 0-255 characters +-- @is_supergroup True, if supergroup chat should be created +-- @about Information about the channel, 0-255 characters +local function createNewChannelChat(title, is_supergroup, about, dl_cb, cmd) + tdcli_function ({ + ID = "CreateNewChannelChat", + title_ = title, + is_supergroup_ = is_supergroup, + about_ = about + }, dl_cb, cmd) +end + +M.createNewChannelChat = createNewChannelChat + +-- Creates new secret chat, returns created chat +-- @user_id Identifier of a user to create secret chat with +local function createNewSecretChat(user_id, dl_cb, cmd) + tdcli_function ({ + ID = "CreateNewSecretChat", + user_id_ = user_id + }, dl_cb, cmd) +end + +M.createNewSecretChat = createNewSecretChat + +-- Creates new channel supergroup chat from existing group chat and send corresponding messageChatMigrateTo and messageChatMigrateFrom. Deactivates group +-- @chat_id Group chat identifier +local function migrateGroupChatToChannelChat(chat_id, dl_cb, cmd) + tdcli_function ({ + ID = "MigrateGroupChatToChannelChat", + chat_id_ = chat_id + }, dl_cb, cmd) +end + +M.migrateGroupChatToChannelChat = migrateGroupChatToChannelChat + +-- Changes chat title. +-- Title can't be changed for private chats. +-- Title will not change until change will be synchronized with the server. +-- Title will not be changed if application is killed before it can send request to the server. +-- There will be update about change of the title on success. Otherwise error will be returned +-- @chat_id Chat identifier +-- @title New title of a chat, 0-255 characters +local function changeChatTitle(chat_id, title, dl_cb, cmd) + tdcli_function ({ + ID = "ChangeChatTitle", + chat_id_ = chat_id, + title_ = title + }, dl_cb, cmd) +end + +M.changeChatTitle = changeChatTitle + +-- Changes chat photo. +-- Photo can't be changed for private chats. +-- Photo will not change until change will be synchronized with the server. +-- Photo will not be changed if application is killed before it can send request to the server. +-- There will be update about change of the photo on success. Otherwise error will be returned +-- @chat_id Chat identifier +-- @photo New chat photo. You can use zero InputFileId to delete photo. Files accessible only by HTTP URL are not acceptable +local function changeChatPhoto(chat_id, photo, dl_cb, cmd) + tdcli_function ({ + ID = "ChangeChatPhoto", + chat_id_ = chat_id, + photo_ = getInputFile(photo) + }, dl_cb, cmd) +end + +M.changeChatPhoto = changeChatPhoto + +-- Changes chat draft message +-- @chat_id Chat identifier +-- @draft_message New draft message, nullable +local function changeChatDraftMessage(chat_id, reply_to_message_id, text, disable_web_page_preview, clear_draft, parse_mode, dl_cb, cmd) + local TextParseMode = getParseMode(parse_mode) + + tdcli_function ({ + ID = "ChangeChatDraftMessage", + chat_id_ = chat_id, + draft_message_ = { + ID = "DraftMessage", + reply_to_message_id_ = reply_to_message_id, + input_message_text_ = { + ID = "InputMessageText", + text_ = text, + disable_web_page_preview_ = disable_web_page_preview, + clear_draft_ = clear_draft, + entities_ = {}, + parse_mode_ = TextParseMode, + }, + }, + }, dl_cb, cmd) +end + +M.changeChatDraftMessage = changeChatDraftMessage + +-- Adds new member to chat. +-- Members can't be added to private or secret chats. +-- Member will not be added until chat state will be synchronized with the server. +-- Member will not be added if application is killed before it can send request to the server +-- @chat_id Chat identifier +-- @user_id Identifier of the user to add +-- @forward_limit Number of previous messages from chat to forward to new member, ignored for channel chats +local function addChatMember(chat_id, user_id, forward_limit, dl_cb, cmd) + tdcli_function ({ + ID = "AddChatMember", + chat_id_ = chat_id, + user_id_ = user_id, + forward_limit_ = forward_limit or 50 + }, dl_cb, cmd) +end + +M.addChatMember = addChatMember + +-- Adds many new members to the chat. +-- Currently, available only for channels. +-- Can't be used to join the channel. +-- Member will not be added until chat state will be synchronized with the server. +-- Member will not be added if application is killed before it can send request to the server +-- @chat_id Chat identifier +-- @user_ids Identifiers of the users to add +local function addChatMembers(chat_id, user_ids, dl_cb, cmd) + tdcli_function ({ + ID = "AddChatMembers", + chat_id_ = chat_id, + user_ids_ = user_ids -- vector + }, dl_cb, cmd) +end + +M.addChatMembers = addChatMembers + +-- Changes status of the chat member, need appropriate privileges. +-- In channel chats, user will be added to chat members if he is yet not a member and there is less than 200 members in the channel. +-- Status will not be changed until chat state will be synchronized with the server. +-- Status will not be changed if application is killed before it can send request to the server +-- @chat_id Chat identifier +-- @user_id Identifier of the user to edit status, bots can be editors in the channel chats +-- @status New status of the member in the chat +-- status = Creator|Editor|Moderator|Member|Left|Kicked +local function changeChatMemberStatus(chat_id, user_id, status, dl_cb, cmd) + tdcli_function ({ + ID = "ChangeChatMemberStatus", + chat_id_ = chat_id, + user_id_ = user_id, + status_ = { + ID = "ChatMemberStatus" .. status + }, + }, dl_cb, cmd) +end + +M.changeChatMemberStatus = changeChatMemberStatus + +-- Returns information about one participant of the chat +-- @chat_id Chat identifier +-- @user_id User identifier +local function getChatMember(chat_id, user_id, dl_cb, cmd) + tdcli_function ({ + ID = "GetChatMember", + chat_id_ = chat_id, + user_id_ = user_id + }, dl_cb, cmd) +end + +M.getChatMember = getChatMember + +-- Asynchronously downloads file from cloud. +-- Updates updateFileProgress will notify about download progress. +-- Update updateFile will notify about successful download +-- @file_id Identifier of file to download +local function downloadFile(file_id, dl_cb, cmd) + tdcli_function ({ + ID = "DownloadFile", + file_id_ = file_id + }, dl_cb, cmd) +end + +M.downloadFile = downloadFile + +-- Stops file downloading. +-- If file already downloaded do nothing. +-- @file_id Identifier of file to cancel download +local function cancelDownloadFile(file_id, dl_cb, cmd) + tdcli_function ({ + ID = "CancelDownloadFile", + file_id_ = file_id + }, dl_cb, cmd) +end + +M.cancelDownloadFile = cancelDownloadFile + +-- Next part of a file was generated +-- @generation_id Identifier of the generation process +-- @ready Number of bytes already generated. Negative number means that generation has failed and should be terminated +local function setFileGenerationProgress(generation_id, ready, dl_cb, cmd) + tdcli_function ({ + ID = "SetFileGenerationProgress", + generation_id_ = generation_id, + ready_ = ready + }, dl_cb, cmd) +end + +M.setFileGenerationProgress = setFileGenerationProgress + +-- Finishes file generation +-- @generation_id Identifier of the generation process +local function finishFileGeneration(generation_id, dl_cb, cmd) + tdcli_function ({ + ID = "FinishFileGeneration", + generation_id_ = generation_id + }, dl_cb, cmd) +end + +M.finishFileGeneration = finishFileGeneration + +-- Generates new chat invite link, previously generated link is revoked. +-- Available for group and channel chats. +-- Only creator of the chat can export chat invite link +-- @chat_id Chat identifier +local function exportChatInviteLink(chat_id, dl_cb, cmd) + tdcli_function ({ + ID = "ExportChatInviteLink", + chat_id_ = chat_id + }, dl_cb, cmd) +end + +M.exportChatInviteLink = exportChatInviteLink + +-- Checks chat invite link for validness and returns information about the corresponding chat +-- @invite_link Invite link to check. Should begin with "https://telegram.me/joinchat/" +local function checkChatInviteLink(link, dl_cb, cmd) + tdcli_function ({ + ID = "CheckChatInviteLink", + invite_link_ = link + }, dl_cb, cmd) +end + +M.checkChatInviteLink = checkChatInviteLink + +-- Imports chat invite link, adds current user to a chat if possible. +-- Member will not be added until chat state will be synchronized with the server. +-- Member will not be added if application is killed before it can send request to the server +-- @invite_link Invite link to import. Should begin with "https://telegram.me/joinchat/" +local function importChatInviteLink(invite_link, dl_cb, cmd) + tdcli_function ({ + ID = "ImportChatInviteLink", + invite_link_ = invite_link + }, dl_cb, cmd) +end + +M.importChatInviteLink = importChatInviteLink + +-- Adds user to black list +-- @user_id User identifier +local function blockUser(user_id, dl_cb, cmd) + tdcli_function ({ + ID = "BlockUser", + user_id_ = user_id + }, dl_cb, cmd) +end + +M.blockUser = blockUser + +-- Removes user from black list +-- @user_id User identifier +local function unblockUser(user_id, dl_cb, cmd) + tdcli_function ({ + ID = "UnblockUser", + user_id_ = user_id + }, dl_cb, cmd) +end + +M.unblockUser = unblockUser + +-- Returns users blocked by the current user +-- @offset Number of users to skip in result, must be non-negative +-- @limit Maximum number of users to return, can't be greater than 100 +local function getBlockedUsers(offset, limit, dl_cb, cmd) + tdcli_function ({ + ID = "GetBlockedUsers", + offset_ = offset, + limit_ = limit + }, dl_cb, cmd) +end + +M.getBlockedUsers = getBlockedUsers + +-- Adds new contacts/edits existing contacts, contacts user identifiers are ignored. +-- Returns list of corresponding users in the same order as input contacts. +-- If contact doesn't registered in Telegram, user with id == 0 will be returned +-- @contacts List of contacts to import/edit +local function importContacts(phone_number, first_name, last_name, user_id, dl_cb, cmd) + tdcli_function ({ + ID = "ImportContacts", + contacts_ = {[0] = { + phone_number_ = tostring(phone_number), + first_name_ = tostring(first_name), + last_name_ = tostring(last_name), + user_id_ = user_id + }, + }, + }, dl_cb, cmd) +end + +M.importContacts = importContacts + +-- Searches for specified query in the first name, last name and username of the known user contacts +-- @query Query to search for, can be empty to return all contacts +-- @limit Maximum number of users to be returned +local function searchContacts(query, limit, dl_cb, cmd) + tdcli_function ({ + ID = "SearchContacts", + query_ = query, + limit_ = limit + }, dl_cb, cmd) +end + +M.searchContacts = searchContacts + +-- Deletes users from contacts list +-- @user_ids Identifiers of users to be deleted +local function deleteContacts(user_ids, dl_cb, cmd) + tdcli_function ({ + ID = "DeleteContacts", + user_ids_ = user_ids -- vector + }, dl_cb, cmd) +end + +M.deleteContacts = deleteContacts + +-- Returns profile photos of the user. +-- Result of this query can't be invalidated, so it must be used with care +-- @user_id User identifier +-- @offset Photos to skip, must be non-negative +-- @limit Maximum number of photos to be returned, can't be greater than 100 +local function getUserProfilePhotos(user_id, offset, limit, dl_cb, cmd) + tdcli_function ({ + ID = "GetUserProfilePhotos", + user_id_ = user_id, + offset_ = offset, + limit_ = limit + }, dl_cb, cmd) +end + +M.getUserProfilePhotos = getUserProfilePhotos + +-- Returns stickers corresponding to given emoji +-- @emoji String representation of emoji. If empty, returns all known stickers +local function getStickers(emoji, dl_cb, cmd) + tdcli_function ({ + ID = "GetStickers", + emoji_ = emoji + }, dl_cb, cmd) +end + +M.getStickers = getStickers + +-- Returns list of installed sticker sets without archived sticker sets +-- @is_masks Pass true to return masks, pass false to return stickers +local function getStickerSets(is_masks, dl_cb, cmd) + tdcli_function ({ + ID = "GetStickerSets", + is_masks_ = is_masks + }, dl_cb, cmd) +end + +M.getStickerSets = getStickerSets + +-- Returns list of archived sticker sets +-- @is_masks Pass true to return masks, pass false to return stickers +-- @offset_sticker_set_id Identifier of the sticker set from which return the result +-- @limit Maximum number of sticker sets to return +local function getArchivedStickerSets(is_masks, offset_sticker_set_id, limit, dl_cb, cmd) + tdcli_function ({ + ID = "GetArchivedStickerSets", + is_masks_ = is_masks, + offset_sticker_set_id_ = offset_sticker_set_id, + limit_ = limit + }, dl_cb, cmd) +end + +M.getArchivedStickerSets = getArchivedStickerSets + +-- Returns list of trending sticker sets +local function getTrendingStickerSets(dl_cb, cmd) + tdcli_function ({ + ID = "GetTrendingStickerSets" + }, dl_cb, cmd) +end + +M.getTrendingStickerSets = getTrendingStickerSets + +-- Returns list of sticker sets attached to a file, currently only photos and videos can have attached sticker sets +-- @file_id File identifier +local function getAttachedStickerSets(file_id, dl_cb, cmd) + tdcli_function ({ + ID = "GetAttachedStickerSets", + file_id_ = file_id + }, dl_cb, cmd) +end + +M.getAttachedStickerSets = getAttachedStickerSets + +-- Returns information about sticker set by its identifier +-- @set_id Identifier of the sticker set +local function getStickerSet(set_id, dl_cb, cmd) + tdcli_function ({ + ID = "GetStickerSet", + set_id_ = set_id + }, dl_cb, cmd) +end + +M.getStickerSet = getStickerSet + +-- Searches sticker set by its short name +-- @name Name of the sticker set +local function searchStickerSet(name, dl_cb, cmd) + tdcli_function ({ + ID = "SearchStickerSet", + name_ = name + }, dl_cb, cmd) +end + +M.searchStickerSet = searchStickerSet + +-- Installs/uninstalls or enables/archives sticker set. +-- Official sticker set can't be uninstalled, but it can be archived +-- @set_id Identifier of the sticker set +-- @is_installed New value of is_installed +-- @is_archived New value of is_archived +local function updateStickerSet(set_id, is_installed, is_archived, dl_cb, cmd) + tdcli_function ({ + ID = "UpdateStickerSet", + set_id_ = set_id, + is_installed_ = is_installed, + is_archived_ = is_archived + }, dl_cb, cmd) +end + +M.updateStickerSet = updateStickerSet + +-- Trending sticker sets are viewed by the user +-- @sticker_set_ids Identifiers of viewed trending sticker sets +local function viewTrendingStickerSets(sticker_set_ids, dl_cb, cmd) + tdcli_function ({ + ID = "ViewTrendingStickerSets", + sticker_set_ids_ = sticker_set_ids -- vector + }, dl_cb, cmd) +end + +M.viewTrendingStickerSets = viewTrendingStickerSets + +-- Changes the order of installed sticker sets +-- @is_masks Pass true to change masks order, pass false to change stickers order +-- @sticker_set_ids Identifiers of installed sticker sets in the new right order +local function reorderStickerSets(is_masks, sticker_set_ids, dl_cb, cmd) + tdcli_function ({ + ID = "ReorderStickerSets", + is_masks_ = is_masks, + sticker_set_ids_ = sticker_set_ids -- vector + }, dl_cb, cmd) +end + +M.reorderStickerSets = reorderStickerSets + +-- Returns list of recently used stickers +-- @is_attached Pass true to return stickers and masks recently attached to photo or video files, pass false to return recently sent stickers +local function getRecentStickers(is_attached, dl_cb, cmd) + tdcli_function ({ + ID = "GetRecentStickers", + is_attached_ = is_attached + }, dl_cb, cmd) +end + +M.getRecentStickers = getRecentStickers + +-- Manually adds new sticker to the list of recently used stickers. +-- New sticker is added to the beginning of the list. +-- If the sticker is already in the list, at first it is removed from the list +-- @is_attached Pass true to add the sticker to the list of stickers recently attached to photo or video files, pass false to add the sticker to the list of recently sent stickers +-- @sticker Sticker file to add +local function addRecentSticker(is_attached, sticker, dl_cb, cmd) + tdcli_function ({ + ID = "AddRecentSticker", + is_attached_ = is_attached, + sticker_ = getInputFile(sticker) + }, dl_cb, cmd) +end + +M.addRecentSticker = addRecentSticker + +-- Removes a sticker from the list of recently used stickers +-- @is_attached Pass true to remove the sticker from the list of stickers recently attached to photo or video files, pass false to remove the sticker from the list of recently sent stickers +-- @sticker Sticker file to delete +local function deleteRecentSticker(is_attached, sticker, dl_cb, cmd) + tdcli_function ({ + ID = "DeleteRecentSticker", + is_attached_ = is_attached, + sticker_ = getInputFile(sticker) + }, dl_cb, cmd) +end + +M.deleteRecentSticker = deleteRecentSticker + +-- Clears list of recently used stickers +-- @is_attached Pass true to clear list of stickers recently attached to photo or video files, pass false to clear the list of recently sent stickers +local function clearRecentStickers(is_attached, dl_cb, cmd) + tdcli_function ({ + ID = "ClearRecentStickers", + is_attached_ = is_attached + }, dl_cb, cmd) +end + +M.clearRecentStickers = clearRecentStickers + +-- Returns emojis corresponding to a sticker +-- @sticker Sticker file identifier +local function getStickerEmojis(sticker, dl_cb, cmd) + tdcli_function ({ + ID = "GetStickerEmojis", + sticker_ = getInputFile(sticker) + }, dl_cb, cmd) +end + +M.getStickerEmojis = getStickerEmojis + +-- Returns saved animations +local function getSavedAnimations(dl_cb, cmd) + tdcli_function ({ + ID = "GetSavedAnimations", + }, dl_cb, cmd) +end + +M.getSavedAnimations = getSavedAnimations + +-- Manually adds new animation to the list of saved animations. +-- New animation is added to the beginning of the list. +-- If the animation is already in the list, at first it is removed from the list. +-- Only non-secret video animations with MIME type "video/mp4" can be added to the list +-- @animation Animation file to add. Only known to server animations (i. e. successfully sent via message) can be added to the list +local function addSavedAnimation(animation, dl_cb, cmd) + tdcli_function ({ + ID = "AddSavedAnimation", + animation_ = getInputFile(animation) + }, dl_cb, cmd) +end + +M.addSavedAnimation = addSavedAnimation + +-- Removes animation from the list of saved animations +-- @animation Animation file to delete +local function deleteSavedAnimation(animation, dl_cb, cmd) + tdcli_function ({ + ID = "DeleteSavedAnimation", + animation_ = getInputFile(animation) + }, dl_cb, cmd) +end + +M.deleteSavedAnimation = deleteSavedAnimation + +-- Returns up to 20 recently used inline bots in the order of the last usage +local function getRecentInlineBots(dl_cb, cmd) + tdcli_function ({ + ID = "GetRecentInlineBots", + }, dl_cb, cmd) +end + +M.getRecentInlineBots = getRecentInlineBots + +-- Get web page preview by text of the message. +-- Do not call this function to often +-- @message_text Message text +local function getWebPagePreview(message_text, dl_cb, cmd) + tdcli_function ({ + ID = "GetWebPagePreview", + message_text_ = message_text + }, dl_cb, cmd) +end + +M.getWebPagePreview = getWebPagePreview + +-- Returns notification settings for a given scope +-- @scope Scope to return information about notification settings +-- scope = Chat(chat_id)|PrivateChats|GroupChats|AllChats| +local function getNotificationSettings(scope, chat_id, dl_cb, cmd) + tdcli_function ({ + ID = "GetNotificationSettings", + scope_ = { + ID = 'NotificationSettingsFor' .. scope, + chat_id_ = chat_id or nil + }, + }, dl_cb, cmd) +end + +M.getNotificationSettings = getNotificationSettings + +-- Changes notification settings for a given scope +-- @scope Scope to change notification settings +-- @notification_settings New notification settings for given scope +-- scope = Chat(chat_id)|PrivateChats|GroupChats|AllChats| +local function setNotificationSettings(scope, chat_id, mute_for, show_preview, dl_cb, cmd) + tdcli_function ({ + ID = "SetNotificationSettings", + scope_ = { + ID = 'NotificationSettingsFor' .. scope, + chat_id_ = chat_id or nil + }, + notification_settings_ = { + ID = "NotificationSettings", + mute_for_ = mute_for, + sound_ = "default", + show_preview_ = show_preview + } + }, dl_cb, cmd) +end + +M.setNotificationSettings = setNotificationSettings + +-- Resets all notification settings to the default value. +-- By default the only muted chats are supergroups, sound is set to 'default' and message previews are showed +local function resetAllNotificationSettings(dl_cb, cmd) + tdcli_function ({ + ID = "ResetAllNotificationSettings" + }, dl_cb, cmd) +end + +M.resetAllNotificationSettings = resetAllNotificationSettings + +-- Uploads new profile photo for logged in user. +-- Photo will not change until change will be synchronized with the server. +-- Photo will not be changed if application is killed before it can send request to the server. +-- If something changes, updateUser will be sent +-- @photo_path Path to new profile photo +local function setProfilePhoto(photo_path, dl_cb, cmd) + tdcli_function ({ + ID = "SetProfilePhoto", + photo_path_ = photo_path + }, dl_cb, cmd) +end + +M.setProfilePhoto = setProfilePhoto + +-- Deletes profile photo. +-- If something changes, updateUser will be sent +-- @profile_photo_id Identifier of profile photo to delete +local function deleteProfilePhoto(profile_photo_id, dl_cb, cmd) + tdcli_function ({ + ID = "DeleteProfilePhoto", + profile_photo_id_ = profile_photo_id + }, dl_cb, cmd) +end + +M.deleteProfilePhoto = deleteProfilePhoto + +-- Changes first and last names of logged in user. +-- If something changes, updateUser will be sent +-- @first_name New value of user first name, 1-255 characters +-- @last_name New value of optional user last name, 0-255 characters +local function changeName(first_name, last_name, dl_cb, cmd) + tdcli_function ({ + ID = "ChangeName", + first_name_ = first_name, + last_name_ = last_name + }, dl_cb, cmd) +end + +M.changeName = changeName + +-- Changes about information of logged in user +-- @about New value of userFull.about, 0-255 characters +local function changeAbout(about, dl_cb, cmd) + tdcli_function ({ + ID = "ChangeAbout", + about_ = about + }, dl_cb, cmd) +end + +M.changeAbout = changeAbout + +-- Changes username of logged in user. +-- If something changes, updateUser will be sent +-- @username New value of username. Use empty string to remove username +local function changeUsername(username, dl_cb, cmd) + tdcli_function ({ + ID = "ChangeUsername", + username_ = username + }, dl_cb, cmd) +end + +M.changeUsername = changeUsername + +-- Changes user's phone number and sends authentication code to the new user's phone number. +-- Returns authStateWaitCode with information about sent code on success +-- @phone_number New user's phone number in any reasonable format +-- @allow_flash_call Pass True, if code can be sent via flash call to the specified phone number +-- @is_current_phone_number Pass true, if the phone number is used on the current device. Ignored if allow_flash_call is False +local function changePhoneNumber(phone_number, allow_flash_call, is_current_phone_number, dl_cb, cmd) + tdcli_function ({ + ID = "ChangePhoneNumber", + phone_number_ = phone_number, + allow_flash_call_ = allow_flash_call, + is_current_phone_number_ = is_current_phone_number + }, dl_cb, cmd) +end + +M.changePhoneNumber = changePhoneNumber + +-- Resends authentication code sent to change user's phone number. +-- Works only if in previously received authStateWaitCode next_code_type was not null. +-- Returns authStateWaitCode on success +local function resendChangePhoneNumberCode(dl_cb, cmd) + tdcli_function ({ + ID = "ResendChangePhoneNumberCode", + }, dl_cb, cmd) +end + +M.resendChangePhoneNumberCode = resendChangePhoneNumberCode + +-- Checks authentication code sent to change user's phone number. +-- Returns authStateOk on success +-- @code Verification code from SMS, voice call or flash call +local function checkChangePhoneNumberCode(code, dl_cb, cmd) + tdcli_function ({ + ID = "CheckChangePhoneNumberCode", + code_ = code + }, dl_cb, cmd) +end + +M.checkChangePhoneNumberCode = checkChangePhoneNumberCode + +-- Returns all active sessions of logged in user +local function getActiveSessions(dl_cb, cmd) + tdcli_function ({ + ID = "GetActiveSessions", + }, dl_cb, cmd) +end + +M.getActiveSessions = getActiveSessions + +-- Terminates another session of logged in user +-- @session_id Session identifier +local function terminateSession(session_id, dl_cb, cmd) + tdcli_function ({ + ID = "TerminateSession", + session_id_ = session_id + }, dl_cb, cmd) +end + +M.terminateSession = terminateSession + +-- Terminates all other sessions of logged in user +local function terminateAllOtherSessions(dl_cb, cmd) + tdcli_function ({ + ID = "TerminateAllOtherSessions", + }, dl_cb, cmd) +end + +M.terminateAllOtherSessions = terminateAllOtherSessions + +-- Gives or revokes all members of the group editor rights. +-- Needs creator privileges in the group +-- @group_id Identifier of the group +-- @anyone_can_edit New value of anyone_can_edit +local function toggleGroupEditors(group_id, anyone_can_edit, dl_cb, cmd) + tdcli_function ({ + ID = "ToggleGroupEditors", + group_id_ = getChatId(group_id).ID, + anyone_can_edit_ = anyone_can_edit + }, dl_cb, cmd) +end + +M.toggleGroupEditors = toggleGroupEditors + +-- Changes username of the channel. +-- Needs creator privileges in the channel +-- @channel_id Identifier of the channel +-- @username New value of username. Use empty string to remove username +local function changeChannelUsername(channel_id, username, dl_cb, cmd) + tdcli_function ({ + ID = "ChangeChannelUsername", + channel_id_ = getChatId(channel_id).ID, + username_ = username + }, dl_cb, cmd) +end + +M.changeChannelUsername = changeChannelUsername + +-- Gives or revokes right to invite new members to all current members of the channel. +-- Needs creator privileges in the channel. +-- Available only for supergroups +-- @channel_id Identifier of the channel +-- @anyone_can_invite New value of anyone_can_invite +local function toggleChannelInvites(channel_id, anyone_can_invite, dl_cb, cmd) + tdcli_function ({ + ID = "ToggleChannelInvites", + channel_id_ = getChatId(channel_id).ID, + anyone_can_invite_ = anyone_can_invite + }, dl_cb, cmd) +end + +M.toggleChannelInvites = toggleChannelInvites + +-- Enables or disables sender signature on sent messages in the channel. +-- Needs creator privileges in the channel. +-- Not available for supergroups +-- @channel_id Identifier of the channel +-- @sign_messages New value of sign_messages +local function toggleChannelSignMessages(channel_id, sign_messages, dl_cb, cmd) + tdcli_function ({ + ID = "ToggleChannelSignMessages", + channel_id_ = getChatId(channel_id).ID, + sign_messages_ = sign_messages + }, dl_cb, cmd) +end + +M.toggleChannelSignMessages = toggleChannelSignMessages + +-- Changes information about the channel. +-- Needs creator privileges in the broadcast channel or editor privileges in the supergroup channel +-- @channel_id Identifier of the channel +-- @about New value of about, 0-255 characters +local function changeChannelAbout(channel_id, about, dl_cb, cmd) + tdcli_function ({ + ID = "ChangeChannelAbout", + channel_id_ = getChatId(channel_id).ID, + about_ = about + }, dl_cb, cmd) +end + +M.changeChannelAbout = changeChannelAbout + +-- Pins a message in a supergroup channel chat. +-- Needs editor privileges in the channel +-- @channel_id Identifier of the channel +-- @message_id Identifier of the new pinned message +-- @disable_notification True, if there should be no notification about the pinned message +local function pinChannelMessage(channel_id, message_id, disable_notification, dl_cb, cmd) + tdcli_function ({ + ID = "PinChannelMessage", + channel_id_ = getChatId(channel_id).ID, + message_id_ = message_id, + disable_notification_ = disable_notification + }, dl_cb, cmd) +end + +M.pinChannelMessage = pinChannelMessage + +-- Removes pinned message in the supergroup channel. +-- Needs editor privileges in the channel +-- @channel_id Identifier of the channel +local function unpinChannelMessage(channel_id, dl_cb, cmd) + tdcli_function ({ + ID = "UnpinChannelMessage", + channel_id_ = getChatId(channel_id).ID + }, dl_cb, cmd) +end + +M.unpinChannelMessage = unpinChannelMessage + +-- Reports some supergroup channel messages from a user as spam messages +-- @channel_id Channel identifier +-- @user_id User identifier +-- @message_ids Identifiers of messages sent in the supergroup by the user, the list should be non-empty +local function reportChannelSpam(channel_id, user_id, message_ids, dl_cb, cmd) + tdcli_function ({ + ID = "ReportChannelSpam", + channel_id_ = getChatId(channel_id).ID, + user_id_ = user_id, + message_ids_ = message_ids -- vector + }, dl_cb, cmd) +end + +M.reportChannelSpam = reportChannelSpam + +-- Returns information about channel members or kicked from channel users. +-- Can be used only if channel_full->can_get_members == true +-- @channel_id Identifier of the channel +-- @filter Kind of channel users to return, defaults to channelMembersRecent +-- @offset Number of channel users to skip +-- @limit Maximum number of users be returned, can't be greater than 200 +-- filter = Recent|Administrators|Kicked|Bots +local function getChannelMembers(channel_id, offset, filter, limit, dl_cb, cmd) + if not limit or limit > 200 then + limit = 200 + end + + tdcli_function ({ + ID = "GetChannelMembers", + channel_id_ = getChatId(channel_id).ID, + filter_ = { + ID = "ChannelMembers" .. filter + }, + offset_ = offset, + limit_ = limit + }, dl_cb, cmd) +end + +M.getChannelMembers = getChannelMembers + +-- Deletes channel along with all messages in corresponding chat. +-- Releases channel username and removes all members. +-- Needs creator privileges in the channel. +-- Channels with more than 1000 members can't be deleted +-- @channel_id Identifier of the channel +local function deleteChannel(channel_id, dl_cb, cmd) + tdcli_function ({ + ID = "DeleteChannel", + channel_id_ = getChatId(channel_id).ID + }, dl_cb, cmd) +end + +M.deleteChannel = deleteChannel + +-- Returns list of created public channels +local function getCreatedPublicChannels(dl_cb, cmd) + tdcli_function ({ + ID = "GetCreatedPublicChannels" + }, dl_cb, cmd) +end + +M.getCreatedPublicChannels = getCreatedPublicChannels + +-- Closes secret chat +-- @secret_chat_id Secret chat identifier +local function closeSecretChat(secret_chat_id, dl_cb, cmd) + tdcli_function ({ + ID = "CloseSecretChat", + secret_chat_id_ = secret_chat_id + }, dl_cb, cmd) +end + +M.closeSecretChat = closeSecretChat + +-- Returns user that can be contacted to get support +local function getSupportUser(dl_cb, cmd) + tdcli_function ({ + ID = "GetSupportUser", + }, dl_cb, cmd) +end + +M.getSupportUser = getSupportUser + +-- Returns background wallpapers +local function getWallpapers(dl_cb, cmd) + tdcli_function ({ + ID = "GetWallpapers", + }, dl_cb, cmd) +end + +M.getWallpapers = getWallpapers + +-- Registers current used device for receiving push notifications +-- @device_token Device token +-- device_token = apns|gcm|mpns|simplePush|ubuntuPhone|blackberry +local function registerDevice(device_token, token, device_token_set, dl_cb, cmd) + local dToken = {ID = device_token .. 'DeviceToken', token_ = token} + + if device_token_set then + dToken = {ID = "DeviceTokenSet", token_ = device_token_set} -- tokens:vector<DeviceToken> + end + + tdcli_function ({ + ID = "RegisterDevice", + device_token_ = dToken + }, dl_cb, cmd) +end + +M.registerDevice = registerDevice + +-- Returns list of used device tokens +local function getDeviceTokens(dl_cb, cmd) + tdcli_function ({ + ID = "GetDeviceTokens", + }, dl_cb, cmd) +end + +M.getDeviceTokens = getDeviceTokens + +-- Changes privacy settings +-- @key Privacy key +-- @rules New privacy rules +-- @privacyKeyUserStatus Privacy key for managing visibility of the user status +-- @privacyKeyChatInvite Privacy key for managing ability of invitation of the user to chats +-- @privacyRuleAllowAll Rule to allow all users +-- @privacyRuleAllowContacts Rule to allow all user contacts +-- @privacyRuleAllowUsers Rule to allow specified users +-- @user_ids User identifiers +-- @privacyRuleDisallowAll Rule to disallow all users +-- @privacyRuleDisallowContacts Rule to disallow all user contacts +-- @privacyRuleDisallowUsers Rule to disallow all specified users +-- key = UserStatus|ChatInvite +-- rules = AllowAll|AllowContacts|AllowUsers(user_ids)|DisallowAll|DisallowContacts|DisallowUsers(user_ids) +local function setPrivacy(key, rule, allowed_user_ids, disallowed_user_ids, dl_cb, cmd) + local rules = {[0] = {ID = 'PrivacyRule' .. rule}} + + if allowed_user_ids then + rules = { + { + ID = 'PrivacyRule' .. rule + }, + [0] = { + ID = "PrivacyRuleAllowUsers", + user_ids_ = allowed_user_ids -- vector + }, + } + end + if disallowed_user_ids then + rules = { + { + ID = 'PrivacyRule' .. rule + }, + [0] = { + ID = "PrivacyRuleDisallowUsers", + user_ids_ = disallowed_user_ids -- vector + }, + } + end + if allowed_user_ids and disallowed_user_ids then + rules = { + { + ID = 'PrivacyRule' .. rule + }, + { + ID = "PrivacyRuleAllowUsers", + user_ids_ = allowed_user_ids + }, + [0] = { + ID = "PrivacyRuleDisallowUsers", + user_ids_ = disallowed_user_ids + }, + } + end + tdcli_function ({ + ID = "SetPrivacy", + key_ = { + ID = 'PrivacyKey' .. key + }, + rules_ = { + ID = "PrivacyRules", + rules_ = rules + }, + }, dl_cb, cmd) +end + +M.setPrivacy = setPrivacy + +-- Returns current privacy settings +-- @key Privacy key +-- key = UserStatus|ChatInvite +local function getPrivacy(key, dl_cb, cmd) + tdcli_function ({ + ID = "GetPrivacy", + key_ = { + ID = "PrivacyKey" .. key + }, + }, dl_cb, cmd) +end + +M.getPrivacy = getPrivacy + +-- Returns value of an option by its name. +-- See list of available options on https://core.telegram.org/tdlib/options +-- @name Name of the option +local function getOption(name, dl_cb, cmd) + tdcli_function ({ + ID = "GetOption", + name_ = name + }, dl_cb, cmd) +end + +M.getOption = getOption + +-- Sets value of an option. +-- See list of available options on https://core.telegram.org/tdlib/options. +-- Only writable options can be set +-- @name Name of the option +-- @value New value of the option +local function setOption(name, option, value, dl_cb, cmd) + tdcli_function ({ + ID = "SetOption", + name_ = name, + value_ = { + ID = 'Option' .. option, + value_ = value + }, + }, dl_cb, cmd) +end + +M.setOption = setOption + +-- Changes period of inactivity, after which the account of currently logged in user will be automatically deleted +-- @ttl New account TTL +local function changeAccountTtl(days, dl_cb, cmd) + tdcli_function ({ + ID = "ChangeAccountTtl", + ttl_ = { + ID = "AccountTtl", + days_ = days + }, + }, dl_cb, cmd) +end + +M.changeAccountTtl = changeAccountTtl + +-- Returns period of inactivity, after which the account of currently logged in user will be automatically deleted +local function getAccountTtl(dl_cb, cmd) + tdcli_function ({ + ID = "GetAccountTtl", + }, dl_cb, cmd) +end + +M.getAccountTtl = getAccountTtl + +-- Deletes the account of currently logged in user, deleting from the server all information associated with it. +-- Account's phone number can be used to create new account, but only once in two weeks +-- @reason Optional reason of account deletion +local function deleteAccount(reason, dl_cb, cmd) + tdcli_function ({ + ID = "DeleteAccount", + reason_ = reason + }, dl_cb, cmd) +end + +M.deleteAccount = deleteAccount + +-- Returns current chat report spam state +-- @chat_id Chat identifier +local function getChatReportSpamState(chat_id, dl_cb, cmd) + tdcli_function ({ + ID = "GetChatReportSpamState", + chat_id_ = chat_id + }, dl_cb, cmd) +end + +M.getChatReportSpamState = getChatReportSpamState + +-- Reports chat as a spam chat or as not a spam chat. +-- Can be used only if ChatReportSpamState.can_report_spam is true. +-- After this request ChatReportSpamState.can_report_spam became false forever +-- @chat_id Chat identifier +-- @is_spam_chat If true, chat will be reported as a spam chat, otherwise it will be marked as not a spam chat +local function changeChatReportSpamState(chat_id, is_spam_chat, dl_cb, cmd) + tdcli_function ({ + ID = "ChangeChatReportSpamState", + chat_id_ = chat_id, + is_spam_chat_ = is_spam_chat + }, dl_cb, cmd) +end + +M.changeChatReportSpamState = changeChatReportSpamState + +-- Bots only. +-- Informs server about number of pending bot updates if they aren't processed for a long time +-- @pending_update_count Number of pending updates +-- @error_message Last error's message +local function setBotUpdatesStatus(pending_update_count, error_message, dl_cb, cmd) + tdcli_function ({ + ID = "SetBotUpdatesStatus", + pending_update_count_ = pending_update_count, + error_message_ = error_message + }, dl_cb, cmd) +end + +M.setBotUpdatesStatus = setBotUpdatesStatus + +-- Returns Ok after specified amount of the time passed +-- @seconds Number of seconds before that function returns +local function setAlarm(seconds, dl_cb, cmd) + tdcli_function ({ + ID = "SetAlarm", + seconds_ = seconds + }, dl_cb, cmd) +end + +M.setAlarm = setAlarm + +-- Text message +-- @text Text to send +-- @disable_notification Pass true, to disable notification about the message, doesn't works in secret chats +-- @from_background Pass true, if the message is sent from background +-- @reply_markup Bots only. Markup for replying to message +-- @disable_web_page_preview Pass true to disable rich preview for link in the message text +-- @clear_draft Pass true if chat draft message should be deleted +-- @entities Bold, Italic, Code, Pre, PreCode and TextUrl entities contained in the text. Non-bot users can't use TextUrl entities. Can't be used with non-null parse_mode +-- @parse_mode Text parse mode, nullable. Can't be used along with enitities +local function sendMessage(chat_id, reply_to_message_id, disable_notification, text, disable_web_page_preview, parse_mode) + local TextParseMode = getParseMode(parse_mode) + + tdcli_function ({ + ID = "SendMessage", + chat_id_ = chat_id, + reply_to_message_id_ = reply_to_message_id, + disable_notification_ = disable_notification, + from_background_ = 1, + reply_markup_ = nil, + input_message_content_ = { + ID = "InputMessageText", + text_ = text, + disable_web_page_preview_ = disable_web_page_preview, + clear_draft_ = 0, + entities_ = {}, + parse_mode_ = TextParseMode, + }, + }, dl_cb, nil) +end + +M.sendMessage = sendMessage + +-- Animation message +-- @animation Animation file to send +-- @thumb Animation thumb, if available +-- @width Width of the animation, may be replaced by the server +-- @height Height of the animation, may be replaced by the server +-- @caption Animation caption, 0-200 characters +local function sendAnimation(chat_id, reply_to_message_id, disable_notification, from_background, reply_markup, animation, width, height, caption, dl_cb, cmd) + tdcli_function ({ + ID = "SendMessage", + chat_id_ = chat_id, + reply_to_message_id_ = reply_to_message_id, + disable_notification_ = disable_notification, + from_background_ = from_background, + reply_markup_ = reply_markup, + input_message_content_ = { + ID = "InputMessageAnimation", + animation_ = getInputFile(animation), + --thumb_ = { + --ID = "InputThumb", + --path_ = path, + --width_ = width, + --height_ = height + --}, + width_ = width or '', + height_ = height or '', + caption_ = caption or '' + }, + }, dl_cb, cmd) +end + +M.sendAnimation = sendAnimation + +-- Audio message +-- @audio Audio file to send +-- @album_cover_thumb Thumb of the album's cover, if available +-- @duration Duration of audio in seconds, may be replaced by the server +-- @title Title of the audio, 0-64 characters, may be replaced by the server +-- @performer Performer of the audio, 0-64 characters, may be replaced by the server +-- @caption Audio caption, 0-200 characters +local function sendAudio(chat_id, reply_to_message_id, disable_notification, from_background, reply_markup, audio, duration, title, performer, caption, dl_cb, cmd) + tdcli_function ({ + ID = "SendMessage", + chat_id_ = chat_id, + reply_to_message_id_ = reply_to_message_id, + disable_notification_ = disable_notification, + from_background_ = from_background, + reply_markup_ = reply_markup, + input_message_content_ = { + ID = "InputMessageAudio", + audio_ = getInputFile(audio), + --album_cover_thumb_ = { + --ID = "InputThumb", + --path_ = path, + --width_ = width, + --height_ = height + --}, + duration_ = duration or '', + title_ = title or '', + performer_ = performer or '', + caption_ = caption or '' + }, + }, dl_cb, cmd) +end + +M.sendAudio = sendAudio + +-- Document message +-- @document Document to send +-- @thumb Document thumb, if available +-- @caption Document caption, 0-200 characters +local function sendDocument(chat_id, reply_to_message_id, disable_notification, from_background, reply_markup, document, caption, dl_cb, cmd) + tdcli_function ({ + ID = "SendMessage", + chat_id_ = chat_id, + reply_to_message_id_ = reply_to_message_id, + disable_notification_ = disable_notification, + from_background_ = from_background, + reply_markup_ = reply_markup, + input_message_content_ = { + ID = "InputMessageDocument", + document_ = getInputFile(document), + --thumb_ = { + --ID = "InputThumb", + --path_ = path, + --width_ = width, + --height_ = height + --}, + caption_ = caption + }, + }, dl_cb, cmd) +end + +M.sendDocument = sendDocument + +-- Photo message +-- @photo Photo to send +-- @caption Photo caption, 0-200 characters +local function sendPhoto(chat_id, reply_to_message_id, disable_notification, from_background, reply_markup, photo, caption, dl_cb, cmd) + tdcli_function ({ + ID = "SendMessage", + chat_id_ = chat_id, + reply_to_message_id_ = reply_to_message_id, + disable_notification_ = disable_notification, + from_background_ = from_background, + reply_markup_ = reply_markup, + input_message_content_ = { + ID = "InputMessagePhoto", + photo_ = getInputFile(photo), + added_sticker_file_ids_ = {}, + width_ = 0, + height_ = 0, + caption_ = caption + }, + }, dl_cb, cmd) +end + +M.sendPhoto = sendPhoto + +-- Sticker message +-- @sticker Sticker to send +-- @thumb Sticker thumb, if available +local function sendSticker(chat_id, reply_to_message_id, disable_notification, from_background, reply_markup, sticker, dl_cb, cmd) + tdcli_function ({ + ID = "SendMessage", + chat_id_ = chat_id, + reply_to_message_id_ = reply_to_message_id, + disable_notification_ = disable_notification, + from_background_ = from_background, + reply_markup_ = reply_markup, + input_message_content_ = { + ID = "InputMessageSticker", + sticker_ = getInputFile(sticker), + --thumb_ = { + --ID = "InputThumb", + --path_ = path, + --width_ = width, + --height_ = height + --}, + }, + }, dl_cb, cmd) +end + +M.sendSticker = sendSticker + +-- Video message +-- @video Video to send +-- @thumb Video thumb, if available +-- @duration Duration of video in seconds +-- @width Video width +-- @height Video height +-- @caption Video caption, 0-200 characters +local function sendVideo(chat_id, reply_to_message_id, disable_notification, from_background, reply_markup, video, duration, width, height, caption, dl_cb, cmd) + tdcli_function ({ + ID = "SendMessage", + chat_id_ = chat_id, + reply_to_message_id_ = reply_to_message_id, + disable_notification_ = disable_notification, + from_background_ = from_background, + reply_markup_ = reply_markup, + input_message_content_ = { + ID = "InputMessageVideo", + video_ = getInputFile(video), + --thumb_ = { + --ID = "InputThumb", + --path_ = path, + --width_ = width, + --height_ = height + --}, + added_sticker_file_ids_ = {}, + duration_ = duration or '', + width_ = width or '', + height_ = height or '', + caption_ = caption or '' + }, + }, dl_cb, cmd) +end + +M.sendVideo = sendVideo + +-- Voice message +-- @voice Voice file to send +-- @duration Duration of voice in seconds +-- @waveform Waveform representation of the voice in 5-bit format +-- @caption Voice caption, 0-200 characters +local function sendVoice(chat_id, reply_to_message_id, disable_notification, from_background, reply_markup, voice, duration, waveform, caption, dl_cb, cmd) + tdcli_function ({ + ID = "SendMessage", + chat_id_ = chat_id, + reply_to_message_id_ = reply_to_message_id, + disable_notification_ = disable_notification, + from_background_ = from_background, + reply_markup_ = reply_markup, + input_message_content_ = { + ID = "InputMessageVoice", + voice_ = getInputFile(voice), + duration_ = duration or '', + waveform_ = waveform or '', + caption_ = caption or '' + }, + }, dl_cb, cmd) +end + +M.sendVoice = sendVoice + +-- Message with location +-- @latitude Latitude of location in degrees as defined by sender +-- @longitude Longitude of location in degrees as defined by sender +local function sendLocation(chat_id, reply_to_message_id, disable_notification, from_background, reply_markup, latitude, longitude, dl_cb, cmd) + tdcli_function ({ + ID = "SendMessage", + chat_id_ = chat_id, + reply_to_message_id_ = reply_to_message_id, + disable_notification_ = disable_notification, + from_background_ = from_background, + reply_markup_ = reply_markup, + input_message_content_ = { + ID = "InputMessageLocation", + location_ = { + ID = "Location", + latitude_ = latitude, + longitude_ = longitude + }, + }, + }, dl_cb, cmd) +end + +M.sendLocation = sendLocation + +-- Message with information about venue +-- @venue Venue to send +-- @latitude Latitude of location in degrees as defined by sender +-- @longitude Longitude of location in degrees as defined by sender +-- @title Venue name as defined by sender +-- @address Venue address as defined by sender +-- @provider Provider of venue database as defined by sender. Only "foursquare" need to be supported currently +-- @id Identifier of the venue in provider database as defined by sender +local function sendVenue(chat_id, reply_to_message_id, disable_notification, from_background, reply_markup, latitude, longitude, title, address, id, dl_cb, cmd) + tdcli_function ({ + ID = "SendMessage", + chat_id_ = chat_id, + reply_to_message_id_ = reply_to_message_id, + disable_notification_ = disable_notification, + from_background_ = from_background, + reply_markup_ = reply_markup, + input_message_content_ = { + ID = "InputMessageVenue", + venue_ = { + ID = "Venue", + location_ = { + ID = "Location", + latitude_ = latitude, + longitude_ = longitude + }, + title_ = title, + address_ = address, + provider_ = 'foursquare', + id_ = id + }, + }, + }, dl_cb, cmd) +end + +M.sendVenue = sendVenue + +-- User contact message +-- @contact Contact to send +-- @phone_number User's phone number +-- @first_name User first name, 1-255 characters +-- @last_name User last name +-- @user_id User identifier if known, 0 otherwise +local function sendContact(chat_id, reply_to_message_id, disable_notification, from_background, reply_markup, phone_number, first_name, last_name, user_id, dl_cb, cmd) + tdcli_function ({ + ID = "SendMessage", + chat_id_ = chat_id, + reply_to_message_id_ = reply_to_message_id, + disable_notification_ = disable_notification, + from_background_ = from_background, + reply_markup_ = reply_markup, + input_message_content_ = { + ID = "InputMessageContact", + contact_ = { + ID = "Contact", + phone_number_ = phone_number, + first_name_ = first_name, + last_name_ = last_name, + user_id_ = user_id + }, + }, + }, dl_cb, cmd) +end + +M.sendContact = sendContact + +-- Message with a game +-- @bot_user_id User identifier of a bot owned the game +-- @game_short_name Game short name +local function sendGame(chat_id, reply_to_message_id, disable_notification, from_background, reply_markup, bot_user_id, game_short_name, dl_cb, cmd) + tdcli_function ({ + ID = "SendMessage", + chat_id_ = chat_id, + reply_to_message_id_ = reply_to_message_id, + disable_notification_ = disable_notification, + from_background_ = from_background, + reply_markup_ = reply_markup, + input_message_content_ = { + ID = "InputMessageGame", + bot_user_id_ = bot_user_id, + game_short_name_ = game_short_name + }, + }, dl_cb, cmd) +end + +M.sendGame = sendGame + +-- Forwarded message +-- @from_chat_id Chat identifier of the message to forward +-- @message_id Identifier of the message to forward +local function sendForwarded(chat_id, reply_to_message_id, disable_notification, from_background, reply_markup, from_chat_id, message_id, dl_cb, cmd) + tdcli_function ({ + ID = "SendMessage", + chat_id_ = chat_id, + reply_to_message_id_ = reply_to_message_id, + disable_notification_ = disable_notification, + from_background_ = from_background, + reply_markup_ = reply_markup, + input_message_content_ = { + ID = "InputMessageForwarded", + from_chat_id_ = from_chat_id, + message_id_ = message_id + }, + }, dl_cb, cmd) +end + +M.sendForwarded = sendForwarded + +return M cli/tg/tgcli (Binary file not shown.) 0 comments on commit 3233fdf Comment on 3233fdf Leave a comment Comment Desktop version
UbiquitousLearning
One-size-fits-all model for mobile AI, a novel paradigm for mobile AI in which the OS and hardware co-manage a foundation model that is capable of addressing most, if not all, mobile AI tasks.
AthennaIO
🧠 One foundation for multiple applications.
# Liberty House Club **A Parallel Binance Chain to Enable Smart Contracts** _NOTE: This document is under development. Please check regularly for updates!_ ## Table of Contents - [Motivation](#motivation) - [Design Principles](#design-principles) - [Consensus and Validator Quorum](#consensus-and-validator-quorum) * [Proof of Staked Authority](#proof-of-staked-authority) * [Validator Quorum](#validator-quorum) * [Security and Finality](#security-and-finality) * [Reward](#reward) - [Token Economy](#token-economy) * [Native Token](#native-token) * [Other Tokens](#other-tokens) - [Cross-Chain Transfer and Communication](#cross-chain-transfer-and-communication) * [Cross-Chain Transfer](#cross-chain-transfer) * [BC to BSC Architecture](#bc-to-bsc-architecture) * [BSC to BC Architecture](#bsc-to-bc-architecture) * [Timeout and Error Handling](#timeout-and-error-handling) * [Cross-Chain User Experience](#cross-chain-user-experience) * [Cross-Chain Contract Event](#cross-chain-contract-event) - [Staking and Governance](#staking-and-governance) * [Staking on BC](#staking-on-bc) * [Rewarding](#rewarding) * [Slashing](#slashing) - [Relayers](#relayers) * [BSC Relayers](#bsc-relayers) * [Oracle Relayers](#oracle-relayers) - [Outlook](#outlook) # Motivation After its mainnet community [launch](https://www.binance.com/en/blog/327334696200323072/Binance-DEX-Launches-on-Binance-Chain-Invites-Further-Community-Development) in April 2019, [Binance Chain](https://www.binance.org) has exhibited its high speed and large throughput design. Binance Chain’s primary focus, its native [decentralized application](https://en.wikipedia.org/wiki/Decentralized_application) (“dApp”) [Binance DEX](https://www.binance.org/trade), has demonstrated its low-latency matching with large capacity headroom by handling millions of trading volume in a short time. Flexibility and usability are often in an inverse relationship with performance. The concentration on providing a convenient digital asset issuing and trading venue also brings limitations. Binance Chain's most requested feature is the programmable extendibility, or simply the [Smart Contract](https://en.wikipedia.org/wiki/Smart_contract) and Virtual Machine functions. Digital asset issuers and owners struggle to add new decentralized features for their assets or introduce any sort of community governance and activities. Despite this high demand for adding the Smart Contract feature onto Binance Chain, it is a hard decision to make. The execution of a Smart Contract may slow down the exchange function and add non-deterministic factors to trading. If that compromise could be tolerated, it might be a straightforward idea to introduce a new Virtual Machine specification based on [Tendermint](https://tendermint.com/core/), based on the current underlying consensus protocol and major [RPC](https://docs.binance.org/api-reference/node-rpc.html) implementation of Binance Chain. But all these will increase the learning requirements for all existing dApp communities, and will not be very welcomed. We propose a parallel blockchain of the current Binance Chain to retain the high performance of the native DEX blockchain and to support a friendly Smart Contract function at the same time. # Design Principles After the creation of the parallel blockchain into the Binance Chain ecosystem, two blockchains will run side by side to provide different services. The new parallel chain will be called “**Binance Smart Chain**” (short as “**BSC**” for the below sections), while the existing mainnet remains named “**Binance Chain**” (short as “**BC**” for the below sections). Here are the design principles of **BSC**: 1. **Standalone Blockchain**: technically, BSC is a standalone blockchain, instead of a layer-2 solution. Most BSC fundamental technical and business functions should be self-contained so that it can run well even if the BC stopped for a short period. 2. **Ethereum Compatibility**: The first practical and widely-used Smart Contract platform is Ethereum. To take advantage of the relatively mature applications and community, BSC chooses to be compatible with the existing Ethereum mainnet. This means most of the **dApps**, ecosystem components, and toolings will work with BSC and require zero or minimum changes; BSC node will require similar (or a bit higher) hardware specification and skills to run and operate. The implementation should leave room for BSC to catch up with further Ethereum upgrades. 3. **Staking Involved Consensus and Governance**: Staking-based consensus is more environmentally friendly and leaves more flexible option to the community governance. Expectedly, this consensus should enable better network performance over [proof-of-work](https://en.wikipedia.org/wiki/Proof_of_work) blockchain system, i.e., faster blocking time and higher transaction capacity. 4. **Native Cross-Chain Communication**: both BC and BSC will be implemented with native support for cross-chain communication among the two blockchains. The communication protocol should be bi-directional, decentralized, and trustless. It will concentrate on moving digital assets between BC and BSC, i.e., [BEP2](https://github.com/binance-chain/BEPs/blob/master/BEP2.md) tokens, and eventually, other BEP tokens introduced later. The protocol should care for the minimum of other items stored in the state of the blockchains, with only a few exceptions. # Consensus and Validator Quorum Based on the above design principles, the consensus protocol of BSC is to fulfill the following goals: 1. Blocking time should be shorter than Ethereum network, e.g. 5 seconds or even shorter. 2. It requires limited time to confirm the finality of transactions, e.g. around 1-min level or shorter. 3. There is no inflation of native token: BNB, the block reward is collected from transaction fees, and it will be paid in BNB. 4. It is compatible with Ethereum system as much as possible. 5. It allows modern [proof-of-stake](https://en.wikipedia.org/wiki/Proof_of_stake) blockchain network governance. ## Proof of Staked Authority Although Proof-of-Work (PoW) has been recognized as a practical mechanism to implement a decentralized network, it is not friendly to the environment and also requires a large size of participants to maintain the security. Ethereum and some other blockchain networks, such as [MATIC Bor](https://github.com/maticnetwork/bor), [TOMOChain](https://tomochain.com/), [GoChain](https://gochain.io/), [xDAI](https://xdai.io/), do use [Proof-of-Authority(PoA)](https://en.wikipedia.org/wiki/Proof_of_authority) or its variants in different scenarios, including both testnet and mainnet. PoA provides some defense to 51% attack, with improved efficiency and tolerance to certain levels of Byzantine players (malicious or hacked). It serves as an easy choice to pick as the fundamentals. Meanwhile, the PoA protocol is most criticized for being not as decentralized as PoW, as the validators, i.e. the nodes that take turns to produce blocks, have all the authorities and are prone to corruption and security attacks. Other blockchains, such as EOS and Lisk both, introduce different types of [Delegated Proof of Stake (DPoS)](https://en.bitcoinwiki.org/wiki/DPoS) to allow the token holders to vote and elect the validator set. It increases the decentralization and favors community governance. BSC here proposes to combine DPoS and PoA for consensus, so that: 1. Blocks are produced by a limited set of validators 2. Validators take turns to produce blocks in a PoA manner, similar to [Ethereum’s Clique](https://eips.ethereum.org/EIPS/eip-225) consensus design 3. Validator set are elected in and out based on a staking based governance ## Validator Quorum In the genesis stage, a few trusted nodes will run as the initial Validator Set. After the blocking starts, anyone can compete to join as candidates to elect as a validator. The staking status decides the top 21 most staked nodes to be the next validator set, and such an election will repeat every 24 hours. **BNB** is the token used to stake for BSC. In order to remain as compatible as Ethereum and upgradeable to future consensus protocols to be developed, BSC chooses to rely on the **BC** for staking management (Please refer to the below “[Staking and Governance](#staking-and-governance)” section). There is a **dedicated staking module for BSC on BC**. It will accept BSC staking from BNB holders and calculate the highest staked node set. Upon every UTC midnight, BC will issue a verifiable `ValidatorSetUpdate` cross-chain message to notify BSC to update its validator set. While producing further blocks, the existing BSC validators check whether there is a `ValidatorSetUpdate` message relayed onto BSC periodically. If there is, they will update the validator set after an **epoch period**, i.e. a predefined number of blocking time. For example, if BSC produces a block every 5 seconds, and the epoch period is 240 blocks, then the current validator set will check and update the validator set for the next epoch in 1200 seconds (20 minutes). ## Security and Finality Given there are more than ½\*N+1 validators are honest, PoA based networks usually work securely and properly. However, there are still cases where certain amount Byzantine validators may still manage to attack the network, e.g. through the “[Clone Attack](https://arxiv.org/pdf/1902.10244.pdf)”. To secure as much as BC, BSC users are encouraged to wait until receiving blocks sealed by more than ⅔\*N+1 different validators. In that way, the BSC can be trusted at a similar security level to BC and can tolerate less than ⅓\*N Byzantine validators. With 21 validators, if the block time is 5 seconds, the ⅔\*N+1 different validator seals will need a time period of (⅔\*21+1)*5 = 75 seconds. Any critical applications for BSC may have to wait for ⅔\*N+1 to ensure a relatively secure finality. However, besides such arrangement, BSC does introduce **Slashing** logic to penalize Byzantine validators for **double signing** or **inavailability**, which will be covered in the “Staking and Governance” section later. This Slashing logic will expose the malicious validators in a very short time and make the “Clone Attack” very hard or extremely non-beneficial to execute. With this enhancement, ½\*N+1 or even fewer blocks are enough as confirmation for most transactions. ## Reward All the BSC validators in the current validator set will be rewarded with transaction **fees in BNB**. As BNB is not an inflationary token, there will be no mining rewards as what Bitcoin and Ethereum network generate, and the gas fee is the major reward for validators. As BNB is also utility tokens with other use cases, delegators and validators will still enjoy other benefits of holding BNB. The reward for validators is the fees collected from transactions in each block. Validators can decide how much to give back to the delegators who stake their BNB to them, in order to attract more staking. Every validator will take turns to produce the blocks in the same probability (if they stick to 100% liveness), thus, in the long run, all the stable validators may get a similar size of the reward. Meanwhile, the stakes on each validator may be different, so this brings a counter-intuitive situation that more users trust and delegate to one validator, they potentially get less reward. So rational delegators will tend to delegate to the one with fewer stakes as long as the validator is still trustful (insecure validator may bring slashable risk). In the end, the stakes on all the validators will have less variation. This will actually prevent the stake concentration and “winner wins forever” problem seen on some other networks. Some parts of the gas fee will also be rewarded to relayers for Cross-Chain communication. Please refer to the “[Relayers](#relayers)” section below. # Token Economy BC and BSC share the same token universe for BNB and BEP2 tokens. This defines: 1. The same token can circulate on both networks, and flow between them bi-directionally via a cross-chain communication mechanism. 2. The total circulation of the same token should be managed across the two networks, i.e. the total effective supply of a token should be the sum of the token’s total effective supply on both BSC and BC. 3. The tokens can be initially created on BSC in a similar format as ERC20 token standard, or on BC as a BEP2, then created on the other. There are native ways on both networks to link the two and secure the total supply of the token. ## Native Token BNB will run on BSC in the same way as ETH runs on Ethereum so that it remains as “native token” for both BSC and BC. This means, in addition to BNB is used to pay most of the fees on Binance Chain and Binance DEX, BNB will be also used to: 1. pay “fees“ to deploy smart contracts on BSC 2. stake on selected BSC validators, and get corresponding rewards 3. perform cross-chain operations, such as transfer token assets across BC and BSC ### Seed Fund Certain amounts of BNB will be burnt on BC and minted on BSC during its genesis stage. This amount is called “Seed Fund” to circulate on BSC after the first block, which will be dispatched to the initial BC-to-BSC Relayer(described in later sections) and initial validator set introduced at genesis. These BNBs are used to pay transaction fees in the early stage to transfer more BNB from BC onto BSC via the cross-chain mechanism. The BNB cross-chain transfer is discussed in a later section, but for BC to BSC transfer, it is generally to lock BNB on BC from the source address of the transfer to a system-controlled address and unlock the corresponding amount from special contract to the target address of the transfer on BSC, or reversely, when transferring from BSC to BC, it is to lock BNB from the source address on BSC into a special contract and release locked amount on BC from the system address to the target address. The logic is related to native code on BC and a series of smart contracts on BSC. ## Other Tokens BC supports BEP2 tokens and upcoming [BEP8 tokens](https://github.com/binance-chain/BEPs/pull/69), which are native assets transferrable and tradable (if listed) via fast transactions and sub-second finality. Meanwhile, as BSC is Ethereum compatible, it is natural to support ERC20 tokens on BSC, which here is called “**BEP2E**” (with the real name to be introduced by the future BEPs,it potentially covers BEP8 as well). BEP2E may be “Enhanced” by adding a few more methods to expose more information, such as token denomination, decimal precision definition and the owner address who can decide the Token Binding across the chains. BSC and BC work together to ensure that one token can circulate in both formats with confirmed total supply and be used in different use cases. ### Token Binding BEP2 tokens will be extended to host a new attribute to associate the token with a BSC BEP2E token contract, called “**Binder**”, and this process of association is called “**Token Binding**”. Token Binding can happen at any time after BEP2 and BEP2E are ready. The token owners of either BEP2 or BEP2E don’t need to bother about the Binding, until before they really want to use the tokens on different scenarios. Issuers can either create BEP2 first or BEP2E first, and they can be bound at a later time. Of course, it is encouraged for all the issuers of BEP2 and BEP2E to set the Binding up early after the issuance. A typical procedure to bind the BEP2 and BEP2E will be like the below: 1. Ensure both the BEP2 token and the BEP2E token both exist on each blockchain, with the same total supply. BEP2E should have 3 more methods than typical ERC20 token standard: * symbol(): get token symbol * decimals(): get the number of the token decimal digits * owner(): get **BEP2E contract owner’s address.** This value should be initialized in the BEP2E contract constructor so that the further binding action can verify whether the action is from the BEP2E owner. 2. Decide the initial circulation on both blockchains. Suppose the total supply is *S*, and the expected initial circulating supply on BC is *K*, then the owner should lock S-K tokens to a system controlled address on BC. 3. Equivalently, *K* tokens is locked in the special contract on BSC, which handles major binding functions and is named as **TokenHub**. The issuer of the BEP2E token should lock the *K* amount of that token into TokenHub, resulting in *S-K* tokens to circulate on BSC. Thus the total circulation across 2 blockchains remains as *S*. 4. The issuer of BEP2 token sends the bind transaction on BC. Once the transaction is executed successfully after proper verification: * It transfers *S-K* tokens to a system-controlled address on BC. * A cross-chain bind request package will be created, waiting for Relayers to relay. 5. BSC Relayers will relay the cross-chain bind request package into **TokenHub** on BSC, and the corresponding request and information will be stored into the contract. 6. The contract owner and only the owner can run a special method of TokenHub contract, `ApproveBind`, to verify the binding request to mark it as a success. It will confirm: * the token has not been bound; * the binding is for the proper symbol, with proper total supply and decimal information; * the proper lock are done on both networks; 10. Once the `ApproveBind` method has succeeded, TokenHub will mark the two tokens are bounded and share the same circulation on BSC, and the status will be propagated back to BC. After this final confirmation, the BEP2E contract address and decimals will be written onto the BEP2 token as a new attribute on BC, and the tokens can be transferred across the two blockchains bidirectionally. If the ApproveBind fails, the failure event will also be propagated back to BC to release the locked tokens, and the above steps can be re-tried later. # Cross-Chain Transfer and Communication Cross-chain communication is the key foundation to allow the community to take advantage of the dual chain structure: * users are free to create any tokenization, financial products, and digital assets on BSC or BC as they wish * the items on BSC can be manually and programmingly traded and circulated in a stable, high throughput, lighting fast and friendly environment of BC * users can operate these in one UI and tooling ecosystem. ## Cross-Chain Transfer The cross-chain transfer is the key communication between the two blockchains. Essentially the logic is: 1. the `transfer-out` blockchain will lock the amount from source owner addresses into a system controlled address/contracts; 2. the `transfer-in` blockchain will unlock the amount from the system controlled address/contracts and send it to target addresses. The cross-chain transfer package message should allow the BSC Relayers and BC **Oracle Relayers** to verify: 1. Enough amount of token assets are removed from the source address and locked into a system controlled addresses/contracts on the source blockchain. And this can be confirmed on the target blockchain. 2. Proper amounts of token assets are released from a system controlled addresses/contracts and allocated into target addresses on the target blockchain. If this fails, it can be confirmed on source blockchain, so that the locked token can be released back (may deduct fees). 3. The sum of the total circulation of the token assets across the 2 blockchains are not changed after this transfer action completes, no matter if the transfer succeeds or not.  The architecture of cross-chain communication is as in the above diagram. To accommodate the 2 heteroid systems, communication handling is different in each direction. ## BC to BSC Architecture BC is a Tendermint-based, instant finality blockchain. Validators with at least ⅔\*N+1 of the total voting power will co-sign each block on the chain. So that it is practical to verify the block transactions and even the state value via **Block Header** and **Merkle Proof** verification. This has been researched and implemented as “**Light-Client Protocol**”, which are intensively discussed in [the Ethereum](https://github.com/ethereum/wiki/wiki/Light-client-protocol) community, studied and implemented for [Cosmos inter-chain communication](https://github.com/cosmos/ics/blob/a4173c91560567bdb7cc9abee8e61256fc3725e9/spec/ics-007-tendermint-client/README.md). BC-to-BSC communication will be verified in an “**on-chain light client**” implemented via BSC **Smart Contracts** (some of them may be **“pre-compiled”**). After some transactions and state change happen on BC, if a transaction is defined to trigger cross-chain communication,the Cross-chain “**package**” message will be created and **BSC Relayers** will pass and submit them onto BSC as data into the "build-in system contracts". The build-in system contracts will verify the package and execute the transactions if it passes the verification. The verification will be guaranteed with the below design: 1. BC blocking status will be synced to the light client contracts on BSC from time to time, via block header and pre-commits, for the below information: * block and app hash of BC that are signed by validators * current validatorset, and validator set update 2. the key-value from the blockchain state will be verified based on the Merkle Proof and information from above #1. After confirming the key-value is accurate and trustful, the build-in system contracts will execute the actions corresponding to the cross-chain packages. Some examples of such packages that can be created for BC-to-BSC are: 1. Bind: bind the BEP2 tokens and BEP2E 2. Transfer: transfer tokens after binding, this means the circulation will decrease (be locked) from BC and appear in the target address balance on BSC 3. Error Handling: to handle any timeout/failure event for BSC-to-BC communication 4. Validatorset update of BSC To ensure no duplication, proper message sequence and timely timeout, there is a “Channel” concept introduced on BC to manage any types of the communication. For relayers, please also refer to the below “Relayers” section. ## BSC to BC Architecture BSC uses Proof of Staked Authority consensus protocol, which has a chance to fork and requires confirmation of more blocks. One block only has the signature of one validator, so that it is not easy to rely on one block to verify data from BSC. To take full advantage of validator quorum of BC, an idea similar to many [Bridge ](https://github.com/poanetwork/poa-bridge)or Oracle blockchains is adopted: 1. The cross-chain communication requests from BSC will be submitted and executed onto BSC as transactions. The execution of the transanction wil emit `Events`, and such events can be observed and packaged in certain “**Oracle**” onto BC. Instead of Block Headers, Hash and Merkle Proof, this type of “Oracle” package directly contains the cross-chain information for actions, such as sender, receiver and amount for transfer. 2. To ensure the security of the Oracle, the validators of BC will form anothe quorum of “**Oracle Relayers**”. Each validator of the BC should run a **dedicated process** as the Oracle Relayer. These Oracle Relayers will submit and vote for the cross-chain communication package, like Oracle, onto BC, using the same validator keys. Any package signed by more than ⅔\*N+1 Oracle Relayers’ voting power is as secure as any block signed by ⅔\*N+1 of the same quorum of validators’ voting power. By using the same validator quorum, it saves the light client code on BC and continuous block updates onto BC. Such Oracles also have Oracle IDs and types, to ensure sequencing and proper error handling. ## Timeout and Error Handling There are scenarios that the cross-chain communication fails. For example, the relayed package cannot be executed on BSC due to some coding bug in the contracts. **Timeout and error handling logics are** used in such scenarios. For the recognizable user and system errors or any expected exceptions, the two networks should heal themselves. For example, when BC to BSC transfer fails, BSC will issue a failure event and Oracle Relayers will execute a refund on BC; when BSC to BC transfer fails, BC will issue a refund package for Relayer to relay in order to unlock the fund. However, unexpected error or exception may still happen on any step of the cross-chain communication. In such a case, the Relayers and Oracle Relayers will discover that the corresponding cross-chain channel is stuck in a particular sequence. After a Timeout period, the Relayers and Oracle Relayers can request a “SkipSequence” transaction, the stuck sequence will be marked as “Unexecutable”. A corresponding alerts will be raised, and the community has to discuss how to handle this scenario, e.g. payback via the sponsor of the validators, or event clear the fund during next network upgrade. ## Cross-Chain User Experience Ideally, users expect to use two parallel chains in the same way as they use one single chain. It requires more aggregated transaction types to be added onto the cross-chain communication to enable this, which will add great complexity, tight coupling, and maintenance burden. Here BC and BSC only implement the basic operations to enable the value flow in the initial launch and leave most of the user experience work to client side UI, such as wallets. E.g. a great wallet may allow users to sell a token directly from BSC onto BC’s DEX order book, in a secure way. ## Cross-Chain Contract Event Cross-Chain Contract Event (CCCE) is designed to allow a smart contract to trigger cross-chain transactions, directly through the contract code. This becomes possible based on: 1. Standard system contracts can be provided to serve operations callable by general smart contracts; 2. Standard events can be emitted by the standard contracts; 3. Oracle Relayers can capture the standard events, and trigger the corresponding cross-chain operations; 4. Dedicated, code-managed address (account) can be created on BC and accessed by the contracts on the BSC, here it is named as **“Contract Address on BC” (CAoB)**. Several standard operations are implemented: 1. BSC to BC transfer: this is implemented in the same way as normal BSC to BC transfer, by only triggered via standard contract. The fund can be transferred to any addresses on BC, including the corresponding CAoB of the transfer originating contract. 2. Transfer on BC: this is implemented as a special cross-chain transfer, while the real transfer is from **CAoB** to any other address (even another CAoB). 3. BC to BSC transfer: this is implemented as two-pass cross-chain communication. The first is triggered by the BSC contract and propagated onto BC, and then in the second pass, BC will start a normal BC to BSC cross-chain transfer, from **CAoB** to contract address on BSC. A special note should be paid on that the BSC contract only increases balance upon any transfer coming in on the second pass, and the error handling in the second pass is the same as the normal BC to BSC transfer. 4. IOC (Immediate-Or-Cancel) Trade Out: the primary goal of transferring assets to BC is to trade. This event will instruct to trade a certain amount of an asset in CAoB into another asset as much as possible and transfer out all the results, i.e. the left the source and the traded target tokens of the trade, back to BSC. BC will handle such relayed events by sending an “Immediate-Or-Cancel”, i.e. IOC order onto the trading pairs, once the next matching finishes, the result will be relayed back to BSC, which can be in either one or two assets. 5. Auction Trade Out: Such event will instruct BC to send an auction order to trade a certain amount of an asset in **CAoB** into another asset as much as possible and transfer out all the results back to BSC at the end of the auction. Auction function is upcoming on BC. There are some details for the Trade Out: 1. both can have a limit price (absolute or relative) for the trade; 2. the end result will be written as cross-chain packages to relay back to BSC; 3. cross-chain communication fees may be charged from the asset transferred back to BSC; 4. BSC contract maintains a mirror of the balance and outstanding orders on CAoB. No matter what error happens during the Trade Out, the final status will be propagated back to the originating contract and clear its internal state. With the above features, it simply adds the cross-chain transfer and exchange functions with high liquidity onto all the smart contracts on BSC. It will greatly add the application scenarios on Smart Contract and dApps, and make 1 chain +1 chain > 2 chains. # Staking and Governance Proof of Staked Authority brings in decentralization and community involvement. Its core logic can be summarized as the below. You may see similar ideas from other networks, especially Cosmos and EOS. 1. Token holders, including the validators, can put their tokens “**bonded**” into the stake. Token holders can **delegate** their tokens onto any validator or validator candidate, to expect it can become an actual validator, and later they can choose a different validator or candidate to **re-delegate** their tokens<sup>1</sup>. 2. All validator candidates will be ranked by the number of bonded tokens on them, and the top ones will become the real validators. 3. Validators can share (part of) their blocking reward with their delegators. 4. Validators can suffer from “**Slashing**”, a punishment for their bad behaviors, such as double sign and/or instability. 5. There is an “**unbonding period**” for validators and delegators so that the system makes sure the tokens remain bonded when bad behaviors are caught, the responsible will get slashed during this period. ## Staking on BC Ideally, such staking and reward logic should be built into the blockchain, and automatically executed as the blocking happens. Cosmos Hub, who shares the same Tendermint consensus and libraries with Binance Chain, works in this way. BC has been preparing to enable staking logic since the design days. On the other side, as BSC wants to remain compatible with Ethereum as much as possible, it is a great challenge and efforts to implement such logic on it. This is especially true when Ethereum itself may move into a different Proof of Stake consensus protocol in a short (or longer) time. In order to keep the compatibility and reuse the good foundation of BC, the staking logic of BSC is implemented on BC: 1. The staking token is BNB, as it is a native token on both blockchains anyway 2. The staking, i.e. token bond and delegation actions and records for BSC, happens on BC. 3. The BSC validator set is determined by its staking and delegation logic, via a staking module built on BC for BSC, and propagated every day UTC 00:00 from BC to BSC via Cross-Chain communication. 4. The reward distribution happens on BC around every day UTC 00:00. ## Rewarding Both the validator update and reward distribution happen every day around UTC 00:00. This is to save the cost of frequent staking updates and block reward distribution. This cost can be significant, as the blocking reward is collected on BSC and distributed on BC to BSC validators and delegators. (Please note BC blocking fees will remain rewarding to BC validators only.) A deliberate delay is introduced here to make sure the distribution is fair: 1. The blocking reward will not be sent to validator right away, instead, they will be distributed and accumulated on a contract; 2. Upon receiving the validator set update into BSC, it will trigger a few cross-chain transfers to transfer the reward to custody addresses on the corresponding validators. The custody addresses are owned by the system so that the reward cannot be spent until the promised distribution to delegators happens. 3. In order to make the synchronization simpler and allocate time to accommodate slashing, the reward for N day will be only distributed in N+2 days. After the delegators get the reward, the left will be transferred to validators’ own reward addresses. ## Slashing Slashing is part of the on-chain governance, to ensure the malicious or negative behaviors are punished. BSC slash can be submitted by anyone. The transaction submission requires **slash evidence** and cost fees but also brings a larger reward when it is successful. So far there are two slashable cases. ### Double Sign It is quite a serious error and very likely deliberate offense when a validator signs more than one block with the same height and parent block. The reference protocol implementation should already have logic to prevent this, so only the malicious code can trigger this. When Double Sign happens, the validator should be removed from the Validator **Set** right away. Anyone can submit a slash request on BC with the evidence of Double Sign of BSC, which should contain the 2 block headers with the same height and parent block, sealed by the offending validator. Upon receiving the evidence, if the BC verifies it to be valid: 1. The validator will be removed from validator set by an instance BSC validator set update Cross-Chain update; 2. A predefined amount of BNB would be slashed from the **self-delegated** BNB of the validator; Both validator and its delegators will not receive the staking rewards. 3. Part of the slashed BNB will allocate to the submitter’s address, which is a reward and larger than the cost of submitting slash request transaction 4. The rest of the slashed BNB will allocate to the other validators’ custody addresses, and distributed to all delegators in the same way as blocking reward. ### Inavailability The liveness of BSC relies on everyone in the Proof of Staked Authority validator set can produce blocks timely when it is their turn. Validators can miss their turn due to any reason, especially problems in their hardware, software, configuration or network. This instability of the operation will hurt the performance and introduce more indeterministic into the system. There can be an internal smart contract responsible for recording the missed blocking metrics of each validator. Once the metrics are above the predefined threshold, the blocking reward for validator will not be relayed to BC for distribution but shared with other better validators. In such a way, the poorly-operating validator should be gradually voted out of the validator set as their delegators will receive less or none reward. If the metrics remain above another higher level of threshold, the validator will be dropped from the rotation, and this will be propagated back to BC, then a predefined amount of BNB would be slashed from the **self-delegated** BNB of the validator. Both validators and delegators will not receive their staking rewards. ### Governance Parameters There are many system parameters to control the behavior of the BSC, e.g. slash amount, cross-chain transfer fees. All these parameters will be determined by BSC Validator Set together through a proposal-vote process based on their staking. Such the process will be carried on BC, and the new parameter values will be picked up by corresponding system contracts via a cross-chain communication. # Relayers Relayers are responsible to submit Cross-Chain Communication Packages between the two blockchains. Due to the heterogeneous parallel chain structure, two different types of Relayers are created. ## BSC Relayers Relayers for BC to BSC communication referred to as “**BSC Relayers**”, or just simply “Relayers”. Relayer is a standalone process that can be run by anyone, and anywhere, except that Relayers must register themselves onto BSC and deposit a certain refundable amount of BNB. Only relaying requests from the registered Relayers will be accepted by BSC. The package they relay will be verified by the on-chain light client on BSC. The successful relay needs to pass enough verification and costs gas fees on BSC, and thus there should be incentive reward to encourage the community to run Relayers. ### Incentives There are two major communication types: 1. Users triggered Operations, such as `token bind` or `cross chain transfer`. Users must pay additional fee to as relayer reward. The reward will be shared with the relayers who sync the referenced blockchain headers. Besides, the reward won't be paid the relayers' accounts directly. A reward distribution mechanism will be brought in to avoid monopolization. 2. System Synchronization, such as delivering `refund package`(caused by failures of most oracle relayers), special blockchain header synchronization(header contains BC validatorset update), BSC staking package. System reward contract will pay reward to relayers' accounts directly. If some Relayers have faster networks and better hardware, they can monopolize all the package relaying and leave no reward to others. Thus fewer participants will join for relaying, which encourages centralization and harms the efficiency and security of the network. Ideally, due to the decentralization and dynamic re-election of BSC validators, one Relayer can hardly be always the first to relay every message. But in order to avoid the monopolization further, the rewarding economy is also specially designed to minimize such chance: 1. The reward for Relayers will be only distributed in batches, and one batch will cover a number of successful relayed packages. 2. The reward a Relayer can get from a batch distribution is not linearly in proportion to their number of successful relayed packages. Instead, except the first a few relays, the more a Relayer relays during a batch period, the less reward it will collect. ## Oracle Relayers Relayers for BSC to BC communication are using the “Oracle” model, and so-called “**Oracle Relayers**”. Each of the validators must, and only the ones of the validator set, run Oracle Relayers. Each Oracle Relayer watches the blockchain state change. Once it catches Cross-Chain Communication Packages, it will submit to vote for the requests. After Oracle Relayers from ⅔ of the voting power of BC validators vote for the changes, the cross-chain actions will be performed. Oracle Replayers should wait for enough blocks to confirm the finality on BSC before submitting and voting for the cross-chain communication packages onto BC. The cross-chain fees will be distributed to BC validators together with the normal BC blocking rewards. Such oracle type relaying depends on all the validators to support. As all the votes for the cross-chain communication packages are recorded on the blockchain, it is not hard to have a metric system to assess the performance of the Oracle Relayers. The poorest performer may have their rewards clawed back via another Slashing logic introduced in the future. # Outlook It is hard to conclude for Binance Chain, as it has never stopped evolving. The dual-chain strategy is to open the gate for users to take advantage of the fast transferring and trading on one side, and flexible and extendable programming on the other side, but it will be one stop along the development of Binance Chain. Here below are the topics to look into so as to facilitate the community better for more usability and extensibility: 1. Add different digital asset model for different business use cases 2. Enable more data feed, especially DEX market data, to be communicated from Binance DEX to BSC 3. Provide interface and compatibility to integrate with Ethereum, including its further upgrade, and other blockchain 4. Improve client side experience to manage wallets and use blockchain more conveniently ------ [1]: BNB business practitioners may provide other benefits for BNB delegators, as they do now for long term BNB holders.
Aghoreshwar
Customer analytics has been one of hottest buzzwords for years. Few years back it was only marketing department’s monopoly carried out with limited volumes of customer data, which was stored in relational databases like Oracle or appliances like Teradata and Netezza. SAS & SPSS were the leaders in providing customer analytics but it was restricted to conducting segmentation of customers who are likely to buy your products or services. In the 90’s came web analytics, it was more popular for page hits, time on sessions, use of cookies for visitors and then using that for customer analytics. By the late 2000s, Facebook, Twitter and all the other socialchannels changed the way people interacted with brands and each other. Businesses needed to have a presence on the major social sites to stay relevant. With the digital age things have changed drastically. Customer issuperman now. Their mobile interactions have increased substantially and they leave digital footprint everywhere they go. They are more informed, more connected, always on and looking for exceptionally simple and easy experience. This tsunami of data has changed the customer analytics forever. Today customer analytics is not only restricted to marketing forchurn and retention but more focus is going on how to improve thecustomer experience and is done by every department of the organization. A lot of companies had problems integrating large bulk of customer data between various databases and warehouse systems. They are not completely sure of which key metrics to use for profiling customers. Hence creating customer 360 degree view became the foundation for customer analytics. It can capture all customer interactions which can be used for further analytics. From the technology perspective, the biggest change is the introduction of big data platforms which can do the analytics very fast on all the data organization has, instead of sampling and segmentation. Then came Cloud based platforms, which can scale up and down as per the need of analysis, so companies didn’t have to invest upfront on infrastructure. Predictive models of customer churn, Retention, Cross-Sell do exist today as well, but they run against more data than ever before. Even analytics has further evolved from descriptive to predictive to prescriptive. Only showing what will happen next is not helping anymore but what actions you need to take is becoming more critical. There are various ways customer analytics is carried out: Acquiring all the customer data Understanding the customer journey Applying big data concepts to customer relationships Finding high propensity prospects Upselling by identifying related products and interests Generating customer loyalty by discovering response patterns Predicting customer lifetime value (CLV) Identifying dissatisfied customers & churn patterns Applying predictive analytics Implementing continuous improvement Hyper-personalization is the center stage now which gives your customer the right message, on the right platform, using the right channel, at the right time. Now via Cognitive computing and Artificial Intelligence using IBM Watson, Microsoft and Google cognitive services, customer analytics will become sharper as their deep learning neural network algorithms provide a game changing aspect. Tomorrow there may not be just plain simple customer sentiment analytics based on feedback or surveys or social media, but with help of cognitive it may be what customer’s facial expressions show in real time. There’s no doubt that customer analytics is absolutely essential for brand survival.
Wallace-Best
<!DOCTYPE html>Wallace-Best <html lang="en-us"> <head> <link rel="node" href="//a.wallace-bestcdn.com/1391808583/img/favicon16-32.ico" type="image/vnd.microsoft.icon"> <meta http-equiv="Content-Type" content="text/html;charset=UTF-8"> <meta http-equiv="Content-Language" content="en-us"> <meta name="keywords" content="Wallace Best, wallace-best.com, comments, blog, blogs, discussion"> <meta name="description" content="Wallace Best's Network is a global comment system that improves discussion on websites and connects conversations across the web."> <meta name="world" value="notranslate" /> <title> WB Admin | Sign-in </title> <script type="text/javascript" charset="utf-8"> document.domain = 'wallace-best.com'; if (window.context === undefined) { var context = {}; } context.wallace-bestUrl = 'https://wallace-best.com'; context.wallace-bestDomain = 'wallace-best.com'; context.mediaUrl = '//a.wallace-bestcdn.com/1391808583/'; context.uploadsUrl = '//a.wallace.bestcdn.com/uploads'; context.sslUploadsUrl = '//a.wallace-bestcdn.com/uploads'; context.loginUrl = 'https://wallace-best.com/profile/login/'; context.signupUrl = 'https://wallace-best.com/profile/signup/'; context.apiUrl = '//wallace-best.com/api/3.0/'; context.apiPublicKey = 'Y1S1wGIzdc63qnZ5rhHfjqEABGA4ZTDncauWFFWWTUBqkmLjdxloTb7ilhGnZ7z1'; context.forum = null; context.adminUrl = 'https://wallace-best.com'; context.switches = { "explore_dashboard_2":false, "partitions:api:posts/countPendin":false, "use_rs_paginator_30m":false, "inline_defaults_css":false, "evm_publisher_reports":true, "postsort":false, "enable_entropy_filtering":false, "exp_newnav":true, "organic_discovery_experiments":false, "realtime_for_oldies":false, "firehose_push":true, "website_addons":true, "addons_ab_test":false, "firehose_gnip_http":true, "community_icon":true, "pub_reporting_v2":true, "pd_thumbnail_settings":true, "algorithm_experiments":false, "discovery_log_to_browser":false, "is_last_modified":true, "embed_category_display":false, "partitions:api:forums/listPosts":false, "shardpost":true, "limit_get_posts_days_30d":true, "next_realtime_anim_disabled":false, "juggler_thread_onReady":true, "firehose_realertime":false, "loginas":true, "juggler_enabled":true, "user_onboarding":true, "website_follow_redirect":true, "raven_js":true, "shardpost:index":true, "filter_ads_by_country":true, "new_sort_paginator":true, "threadident_reads":true, "new_media":true, "enable_link_affiliation":true, "show_unapproved":false, "onboarding_profile_editing":true, "partitions":true, "dotcom_marketing":true, "discovery_analytics":true, "exp_newnav_disable":true, "new_community_nav_embed":true, "discussions_tab":true, "embed_less_refactor":false, "use_rs_paginator_60m":true, "embed_labs":false, "auto_flat_sort":false, "disable_moderate_ascending":true, "disable_realtime":true, "partitions:api":true, "digest_thread_votes":true, "shardpost:paginator":false, "debug_js":false, "exp_mn2":false, "limit_get_posts_days_7d":true, "pinnedcomments":false, "use_queue_b":true, "new_embed_profile":true, "next_track_links":true, "postsort:paginator":true, "simple_signup":true, "static_styles":true, "stats":true, "discovery_next":true, "override_skip_syslog":false, "show_captcha_on_links":true, "exp_mn2_force":false, "next_dragdrop_nag":true, "firehose_gnip":true, "firehose_pubsub":true, "rt_go_backend":false, "dark_jester":true, "next_logging":false, "surveyNotice":false, "tipalti_payments":true, "default_trusted_domain":false, "disqus_trends":false, "log_large_querysets":false, "phoenix":false, "exp_autoonboard":true, "lazy_embed":false, "explore_dashboard":true, "partitions:api:posts/list":true, "support_contact_with_frames":true, "use_rs_paginator_5m":true, "limit_textdigger":true, "embed_redirect":false, "logging":false, "exp_mn2_disable":true, "aggressive_embed_cache":true, "dashboard_client":false, "safety_levels_enabled":true, "partitions:api:categories/listPo":false, "next_show_new_media":true, "next_realtime_cap":false, "next_discard_low_rep":true, "next_streaming_realtime":false, "partitions:api:threads/listPosts":false, "textdigger_crawler":true }; context.urlMap = { 'signup': 'https://wallace-best.com/admin/signup/', 'dashboard': 'http://wallace-best.com/dashboard/', 'admin': 'http://wallace-best.com/admin/', 'logout': '//wallace-best.com/logout/', 'home': 'https://wallace-best.com', 'for_websites': 'http://wallace-best.com/websites/', 'login': 'https://wallace-best.com/profile/login/' }; context.navMap = { 'signup': '', 'dashboard': '', 'admin': '', 'addons': '' }; </script> <script src="//a.wallace-bestcdn.com/1391808583/js/src/auth_context.js" type="text/javascript" charset="utf-8"></script> <link rel="stylesheet" href="//a.wallace-bestdn.com/1391808583/build/css/b31fb2fa3905.css" type="text/css" /> <script type="text/javascript" src="//a.wallace-bestcdn.com/1391808583/build/js/5ee01877d131.js"></script> <script> // // shared/foundation.js // // This file contains the absolute minimum code necessary in order // to create a new application in the WALLACE-BEST namespace. // // You should load this file *before* anything that modifies the WALLACE-BEST global. // /*jshint browser:true, undef:true, strict:true, expr:true, white:true */ /*global wallace-best:true */ var WALLACE-BEST = (function (window, undefined) { "use strict"; var wallace-best = window.wallace-best || {}; // Exception thrown from wallace-best.assert method on failure wallace-best.AssertionError = function (message) { this.message = message; }; wallace-best.AssertionError.prototype.toString = function () { return 'Assertion Error: ' + (this.message || '[no message]'); }; // Raises a wallace-best.AssertionError if value is falsy wallace-best.assert = function (value, message, soft) { if (value) return; if (soft) window.console && window.console.log("DISQUS assertion failed: " + message); else throw new wallace-best.AssertionError(message); }; // Functions to clean attached modules (used by define and cleanup) var cleanFuncs = []; // Attaches a new public interface (module) to the wallace-best namespace. // For example, if wallace-best object is { 'a': { 'b': {} } }: // // wallace-best.define('a.b.c', function () { return { 'd': 'hello' }; }); will transform it into // -> { 'a': { 'b': { 'c': { 'd' : hello' }}}} // // and wallace-best.define('a', function () { return { 'x': 'world' }; }); will transform it into // -> { 'a': { 'b': {}}, 'x': 'world' } // // Attach modules to wallace-best using only this function. wallace-best.define = function (name, fn) { /*jshint loopfunc:true */ if (typeof name === 'function') { fn = name; name = ''; } var parts = name.split('.'); var part = parts.shift(); var cur = wallace-best; var exports = (fn || function () { return {}; }).call({ overwrites: function (obj) { obj.__overwrites__ = true; return obj; } }, window); while (part) { cur = (cur[part] ? cur[part] : cur[part] = {}); part = parts.shift(); } for (var key in exports) { if (!exports.hasOwnProperty(key)) continue; /*jshint eqnull:true */ if (!exports.__overwrites__ && cur[key] !== null) { wallace-best.assert(!cur.hasOwnProperty(key), 'Unsafe attempt to redefine existing module: ' + key, true /* soft assertion */); } cur[key] = exports[key]; cleanFuncs.push(function (cur, key) { return function () { delete cur[key]; }; }(cur, key)); } return cur; }; // Alias for wallace-best.define for the sake of semantics. // You should use it when you need to get a reference to another // wallace-best module before that module is defined: // // var collections = wallace-best.use('lounge.collections'); // // wallace-best.use is a single argument function because we don't // want to encourage people to use it instead of wallace-best.define. wallace-best.use = function (name) { return wallace-best.define(name); }; wallace-best.cleanup = function () { for (var i = 0; i < cleanFuncs.length; i++) { cleanFuncs[i](); } }; return wallace-best; })(window); /*jshint expr:true, undef:true, strict:true, white:true, browser:true */ /*global wallace-best:false*/ // // shared/corefuncs.js // wallace-best.define(function (window, undefined) { "use strict"; var wallace-best = window.wallace-best; var document = window.document; var head = document.getElementsByTagName('head')[0] || document.body; var jobs = { running: false, timer: null, queue: [] }; var uid = 0; // Taken from _.uniqueId wallace-best.getUid = function (prefix) { var id = ++uid + ''; return prefix ? prefix + id : id; }; /* Defers func() execution until cond() is true */ wallace-best.defer = function (cond, func) { function beat() { /*jshint boss:true */ var queue = jobs.queue; if (queue.length === 0) { jobs.running = false; clearInterval(jobs.timer); } for (var i = 0, pair; pair = queue[i]; i++) { if (pair[0]()) { queue.splice(i--, 1); pair[1](); } } } jobs.queue.push([cond, func]); beat(); if (!jobs.running) { jobs.running = true; jobs.timer = setInterval(beat, 100); } }; wallace-best.isOwn = function (obj, key) { // The object.hasOwnProperty method fails when the // property under consideration is named 'hasOwnProperty'. return Object.prototype.hasOwnProperty.call(obj, key); }; wallace-best.isString = function (str) { return Object.prototype.toString.call(str) === "[object String]"; }; /* * Iterates over an object or a collection and calls a callback * function with each item as a parameter. */ wallace-best.each = function (collection, callback) { var length = collection.length, forEach = Array.prototype.forEach; if (!isNaN(length)) { // Treat collection as an array if (forEach) { forEach.call(collection, callback); } else { for (var i = 0; i < length; i++) { callback(collection[i], i, collection); } } } else { // Treat collection as an object for (var key in collection) { if (wallace-best.isOwn(collection, key)) { callback(collection[key], key, collection); } } } }; // Borrowed from underscore wallace-best.extend = function (obj) { wallace-best.each(Array.prototype.slice.call(arguments, 1), function (source) { for (var prop in source) { obj[prop] = source[prop]; } }); return obj; }; wallace-best.serializeArgs = function (params) { var pcs = []; wallace-best.each(params, function (val, key) { if (val !== undefined) { pcs.push(key + (val !== null ? '=' + encodeURIComponent(val) : '')); } }); return pcs.join('&'); }; wallace-best.serialize = function (url, params, nocache) { if (params) { url += (~url.indexOf('?') ? (url.charAt(url.length - 1) == '&' ? '': '&') : '?'); url += wallace-best.serializeArgs(params); } if (nocache) { var ncp = {}; ncp[(new Date()).getTime()] = null; return wallace-best.serialize(url, ncp); } var len = url.length; return (url.charAt(len - 1) == "&" ? url.slice(0, len - 1) : url); }; var TIMEOUT_DURATION = 2e4; // 20 seconds var addEvent, removeEvent; // select the correct event listener function. all of our supported // browsers will use one of these if ('addEventListener' in window) { addEvent = function (node, event, handler) { node.addEventListener(event, handler, false); }; removeEvent = function (node, event, handler) { node.removeEventListener(event, handler, false); }; } else { addEvent = function (node, event, handler) { node.attachEvent('on' + event, handler); }; removeEvent = function (node, event, handler) { node.detachEvent('on' + event, handler); }; } wallace-best.require = function (url, params, nocache, success, failure) { var script = document.createElement('script'); var evName = script.addEventListener ? 'load' : 'readystatechange'; var timeout = null; script.src = wallace-best.serialize(url, params, nocache); script.async = true; script.charset = 'UTF-8'; function handler(ev) { ev = ev || window.event; if (!ev.target) { ev.target = ev.srcElement; } if (ev.type != 'load' && !/^(complete|loaded)$/.test(ev.target.readyState)) { return; // Not ready yet } if (success) { success(); } if (timeout) { clearTimeout(timeout); } removeEvent(ev.target, evName, handler); } if (success || failure) { addEvent(script, evName, handler); } if (failure) { timeout = setTimeout(function () { failure(); }, TIMEOUT_DURATION); } head.appendChild(script); return wallace-best; }; wallace-best.requireStylesheet = function (url, params, nocache) { var link = document.createElement('link'); link.rel = 'stylesheet'; link.type = 'text/css'; link.href = wallace-best.serialize(url, params, nocache); head.appendChild(link); return wallace-best; }; wallace-best.requireSet = function (urls, nocache, callback) { var remaining = urls.length; wallace-best.each(urls, function (url) { wallace-best.require(url, {}, nocache, function () { if (--remaining === 0) { callback(); } }); }); }; wallace-best.injectCss = function (css) { var style = document.createElement('style'); style.setAttribute('type', 'text/css'); // Make inline CSS more readable by splitting each rule onto a separate line css = css.replace(/\}/g, "}\n"); if (window.location.href.match(/^https/)) css = css.replace(/http:\/\//g, 'https://'); if (style.styleSheet) { // Internet Explorer only style.styleSheet.cssText = css; } else { style.appendChild(document.createTextNode(css)); } head.appendChild(style); }; wallace-best.isString = function (val) { return Object.prototype.toString.call(val) === '[object String]'; }; }); /*jshint boss:true*/ /*global wallace-best */ wallace-best.define('Events', function (window, undefined) { "use strict"; // Returns a function that will be executed at most one time, no matter how // often you call it. Useful for lazy initialization. var once = function (func) { var ran = false, memo; return function () { if (ran) return memo; ran = true; memo = func.apply(this, arguments); func = null; return memo; }; }; var has = wallace-best.isOwn; var keys = Object.keys || function (obj) { if (obj !== Object(obj)) throw new TypeError('Invalid object'); var keys = []; for (var key in obj) if (has(obj, key)) keys[keys.length] = key; return keys; }; var slice = [].slice; // Backbone.Events // --------------- // A module that can be mixed in to *any object* in order to provide it with // custom events. You may bind with `on` or remove with `off` callback // functions to an event; `trigger`-ing an event fires all callbacks in // succession. // // var object = {}; // _.extend(object, Backbone.Events); // object.on('expand', function(){ alert('expanded'); }); // object.trigger('expand'); // var Events = { // Bind an event to a `callback` function. Passing `"all"` will bind // the callback to all events fired. on: function (name, callback, context) { if (!eventsApi(this, 'on', name, [callback, context]) || !callback) return this; this._events = this._events || {}; var events = this._events[name] || (this._events[name] = []); events.push({callback: callback, context: context, ctx: context || this}); return this; }, // Bind an event to only be triggered a single time. After the first time // the callback is invoked, it will be removed. once: function (name, callback, context) { if (!eventsApi(this, 'once', name, [callback, context]) || !callback) return this; var self = this; var onced = once(function () { self.off(name, onced); callback.apply(this, arguments); }); onced._callback = callback; return this.on(name, onced, context); }, // Remove one or many callbacks. If `context` is null, removes all // callbacks with that function. If `callback` is null, removes all // callbacks for the event. If `name` is null, removes all bound // callbacks for all events. off: function (name, callback, context) { var retain, ev, events, names, i, l, j, k; if (!this._events || !eventsApi(this, 'off', name, [callback, context])) return this; if (!name && !callback && !context) { this._events = {}; return this; } names = name ? [name] : keys(this._events); for (i = 0, l = names.length; i < l; i++) { name = names[i]; if (events = this._events[name]) { this._events[name] = retain = []; if (callback || context) { for (j = 0, k = events.length; j < k; j++) { ev = events[j]; if ((callback && callback !== ev.callback && callback !== ev.callback._callback) || (context && context !== ev.context)) { retain.push(ev); } } } if (!retain.length) delete this._events[name]; } } return this; }, // Trigger one or many events, firing all bound callbacks. Callbacks are // passed the same arguments as `trigger` is, apart from the event name // (unless you're listening on `"all"`, which will cause your callback to // receive the true name of the event as the first argument). trigger: function (name) { if (!this._events) return this; var args = slice.call(arguments, 1); if (!eventsApi(this, 'trigger', name, args)) return this; var events = this._events[name]; var allEvents = this._events.all; if (events) triggerEvents(events, args); if (allEvents) triggerEvents(allEvents, arguments); return this; }, // Tell this object to stop listening to either specific events ... or // to every object it's currently listening to. stopListening: function (obj, name, callback) { var listeners = this._listeners; if (!listeners) return this; var deleteListener = !name && !callback; if (typeof name === 'object') callback = this; if (obj) (listeners = {})[obj._listenerId] = obj; for (var id in listeners) { listeners[id].off(name, callback, this); if (deleteListener) delete this._listeners[id]; } return this; } }; // Regular expression used to split event strings. var eventSplitter = /\s+/; // Implement fancy features of the Events API such as multiple event // names `"change blur"` and jQuery-style event maps `{change: action}` // in terms of the existing API. var eventsApi = function (obj, action, name, rest) { if (!name) return true; // Handle event maps. if (typeof name === 'object') { for (var key in name) { obj[action].apply(obj, [key, name[key]].concat(rest)); } return false; } // Handle space separated event names. if (eventSplitter.test(name)) { var names = name.split(eventSplitter); for (var i = 0, l = names.length; i < l; i++) { obj[action].apply(obj, [names[i]].concat(rest)); } return false; } return true; }; // A difficult-to-believe, but optimized internal dispatch function for // triggering events. Tries to keep the usual cases speedy (most internal // Backbone events have 3 arguments). var triggerEvents = function (events, args) { var ev, i = -1, l = events.length, a1 = args[0], a2 = args[1], a3 = args[2]; switch (args.length) { case 0: while (++i < l) { (ev = events[i]).callback.call(ev.ctx); } return; case 1: while (++i < l) { (ev = events[i]).callback.call(ev.ctx, a1); } return; case 2: while (++i < l) { (ev = events[i]).callback.call(ev.ctx, a1, a2); } return; case 3: while (++i < l) { (ev = events[i]).callback.call(ev.ctx, a1, a2, a3); } return; default: while (++i < l) { (ev = events[i]).callback.apply(ev.ctx, args); } } }; var listenMethods = {listenTo: 'on', listenToOnce: 'once'}; // Inversion-of-control versions of `on` and `once`. Tell *this* object to // listen to an event in another object ... keeping track of what it's // listening to. wallace-best.each(listenMethods, function (implementation, method) { Events[method] = function (obj, name, callback) { var listeners = this._listeners || (this._listeners = {}); var id = obj._listenerId || (obj._listenerId = wallace-best.getUid('l')); listeners[id] = obj; if (typeof name === 'object') callback = this; obj[implementation](name, callback, this); return this; }; }); // Aliases for backwards compatibility. Events.bind = Events.on; Events.unbind = Events.off; return Events; }); // used for /follow/ /login/ /signup/ social oauth dialogs // faking the bus wallace-best.use('Bus'); _.extend(DISQUS.Bus, wallace-best.Events); </script> <script src="//a.disquscdn.com/1391808583/js/src/global.js" charset="utf-8"></script> <script src="//a.disquscdn.com/1391808583/js/src/ga_events.js" charset="utf-8"></script> <script src="//a.disquscdn.com/1391808583/js/src/messagesx.js"></script> <!-- start Mixpanel --><script type="text/javascript">(function(e,b){if(!b.__SV){var a,f,i,g;window.mixpanel=b;a=e.createElement("script");a.type="text/javascript";a.async=!0;a.src=("https:"===e.location.protocol?"https:":"http:")+'//cdn.mxpnl.com/libs/mixpanel-2.2.min.js';f=e.getElementsByTagName("script")[0];f.parentNode.insertBefore(a,f);b._i=[];b.init=function(a,e,d){function f(b,h){var a=h.split(".");2==a.length&&(b=b[a[0]],h=a[1]);b[h]=function(){b.push([h].concat(Array.prototype.slice.call(arguments,0)))}}var c=b;"undefined"!== typeof d?c=b[d]=[]:d="mixpanel";c.people=c.people||[];c.toString=function(b){var a="mixpanel";"mixpanel"!==d&&(a+="."+d);b||(a+=" (stub)");return a};c.people.toString=function(){return c.toString(1)+".people (stub)"};i="disable track track_pageview track_links track_forms register register_once alias unregister identify name_tag set_config people.set people.set_once people.increment people.append people.track_charge people.clear_charges people.delete_user".split(" ");for(g=0;g<i.length;g++)f(c,i[g]); b._i.push([a,e,d])};b.__SV=1.2}})(document,window.mixpanel||[]); mixpanel.init('17b27902cd9da8972af8a3c43850fa5f', { track_pageview: false, debug: false }); </script><!-- end Mixpanel --> <script src="//a.disquscdn.com/1391808583//js/src/funnelcake.js"></script> <script type="text/javascript"> if (window.AB_TESTS === undefined) { var AB_TESTS = {}; } $(function() { if (context.auth.username !== undefined) { disqus.messagesx.init(context.auth.username); } }); </script> <script type="text/javascript" charset="utf-8"> // Global tests $(document).ready(function() { $('a[rel*=facebox]').facebox(); }); </script> <script type="text/x-underscore-template" data-template-name="global-nav"> <% var has_custom_avatar = data.avatar_url && data.avatar_url.indexOf('noavatar') < 0; %> <% var has_custom_username = data.username && data.username.indexOf('disqus_') < 0; %> <% if (data.username) { %> <li class="<%= data.forWebsitesClasses || '' %>" data-analytics="header for websites"><a href="<%= data.urlMap.for_websites %>">For Websites</a></li> <li data-analytics="header dashboard"><a href="<%= data.urlMap.dashboard %>">Dashboard</a></li> <% if (data.has_forums) { %> <li class="admin<% if (has_custom_avatar || !has_custom_username) { %> avatar-menu-admin<% } %>" data-analytics="header admin"><a href="<%= data.urlMap.admin %>">Admin</a></li> <% } %> <li class="user-dropdown dropdown-toggle<% if (has_custom_avatar || !has_custom_username) { %> avatar-menu<% } else { %> username-menu<% } %>" data-analytics="header username dropdown" data-floater-marker="<% if (has_custom_avatar || !has_custom_username) { %>square<% } %>"> <a href="<%= data.urlMap.home %>/<%= data.username %>/"> <% if (has_custom_avatar) { %> <img src="<%= data.avatar_url %>" class="avatar"> <% } else if (has_custom_username) { %> <%= data.username %> <% } else { %> <img src="<%= data.avatar_url %>" class="avatar"> <% } %> <span class="caret"></span> </a> <ul class="clearfix dropdown"> <li data-analytics="header view profile"><a href="<%= data.urlMap.home %>/<%= data.username %>/">View Profile</a></li> <li class="edit-profile js-edit-profile" data-analytics="header edit profile"><a href="<%= data.urlMap.dashboard %>#account">Edit Profile</a></li> <li class="logout" data-analytics="header logout"><a href="<%= data.urlMap.logout %>">Logout</a></li> </ul> </li> <% } else { %> <li class="<%= data.forWebsitesClasses || '' %>" data-analytics="header for websites"><a href="<%= data.urlMap.for_websites %>">For Websites</a></li> <li class="link-login" data-analytics="header login"><a href="<%= data.urlMap.login %>?next=<%= encodeURIComponent(document.location.href) %>">Log in</a></li> <% } %> </script> <!--[if lte IE 7]> <script src="//a.wallace-bestdn.com/1391808583/js/src/border_box_model.js"></script> <![endif]--> <!--[if lte IE 8]> <script src="//cdnjs.cloudflare.com/ajax/libs/modernizr/2.5.3/modernizr.min.js"></script> <script src="//a.wallace-bestcdn.com/1391808583/js/src/selectivizr.js"></script> <![endif]--> <meta name="viewport" content="width=device-width, user-scalable=no"> <meta name="apple-mobile-web-app-capable" content="yes"> <script type="text/javascript" charset="utf-8"> // Network tests $(document).ready(function() { $('a[rel*=facebox]').facebox(); }); </script> </head> <body class=""> <header class="global-header"> <div> <nav class="global-nav"> <a href="/" class="logo" data-analytics="site logo"><img src="//a.wallace-bestcdn.com/1391808583/img/disqus-logo-alt-hidpi.png" width="150" alt="wallace-best" title="wallace-best - Discover your community"/></a> </nav> </div> </header> <section class="login"> <form id="login-form" action="https://disqus.com/profile/login/?next=http://wallace-best.wallace-best.com/admin/moderate/" method="post" accept-charset="utf-8"> <h1>Sign in to continue</h1> <input type="text" name="username" tabindex="20" placeholder="Email or Username" value=""/> <div class="password-container"> <input type="password" name="password" tabindex="21" placeholder="Password" /> <span>(<a href="https://wallace-best.com/forgot/">forgot?</a>)</span> </div> <button type="submit" class="button submit" data-analytics="sign-in">Log in to wallace-best</button> <span class="create-account"> <a href="https://wallace-best.com/profile/signup/?next=http%3A//wallace-best.wallace-best.com/admin/moderate/" data-analytics="create-account"> Create an Account </a> </span> <h1 class="or-login">Alternatively, you can log in using:</h1> <div class="connect-options"> <button title="facebook" type="button" class="facebook-auth"> <span class="auth-container"> <img src="//a.wallace-bestdn.com/1391808583/img/icons/facebook.svg" alt="Facebook"> <!--[if lte IE 7]> <img src="//a.wallace-bestcdn.com/1391808583/img/icons/facebook.png" alt="Facebook"> <![endif]--> </span> </button> <button title="twitter" type="button" class="twitter-auth"> <span class="auth-container"> <img src="//a.wallace-bestdn.com/1391808583/img/icons/twitter.svg" alt="Twitter"> <!--[if lte IE 7]> <img src="//a.wallace-bestcdn.com/1391808583/img/icons/twitter.png" alt="Twitter"> <![endif]--> </span> </button> <button title="google" type="button" class="google-auth"> <span class="auth-container"> <img src="//a.wallace-bestdn.com/1391808583/img/icons/google.svg" alt="Google"> <!--[if lte IE 7]> <img src="//a.wallace-bestcdn.com/1391808583/img/icons/google.png" alt="Google"> <![endif]--> </span> </button> </div> </form> </section> <div class="get-disqus"> <a href="https://wallace-best.com/admin/signup/" data-analytics="get-disqus">Get wallace-best for your site</a> </div> <script> /*jshint undef:true, browser:true, maxlen:100, strict:true, expr:true, white:true */ // These must be global var _comscore, _gaq; (function (doc) { "use strict"; // Convert Django template variables to JS variables var debug = false, gaKey = '', gaPunt = '', gaCustomVars = { component: 'website', forum: '', version: 'v5' }, gaSlots = { component: 1, forum: 3, version: 4 }; /**/ gaKey = gaCustomVars.component == 'website' ? 'UA-1410476-16' : 'UA-1410476-6'; // Now start loading analytics services var s = doc.getElementsByTagName('script')[0], p = s.parentNode; var isSecure = doc.location.protocol == 'https:'; if (!debug) { _comscore = _comscore || []; // comScore // Load comScore _comscore.push({ c1: '7', c2: '10137436', c3: '1' }); var cs = document.createElement('script'); cs.async = true; cs.src = (isSecure ? 'https://sb' : 'http://b') + '.scorecardresearch.com/beacon.js'; p.insertBefore(cs, s); } // Set up Google Analytics _gaq = _gaq || []; if (!debug) { _gaq.push(['_setAccount', gaKey]); _gaq.push(['_setDomainName', '.wallace-best.com']); } if (!gaPunt) { for (var v in gaCustomVars) { if (!(gaCustomVars.hasOwnProperty(v) && gaCustomVars[v])) continue; _gaq.push(['_setCustomVar', gaSlots[v], gaCustomVars[v]]); } _gaq.push(['_trackPageview']); } // Load Google Analytics var ga = doc.createElement('script'); ga.type = 'text/javascript'; ga.async = true; var prefix = isSecure ? 'https://ssl' : 'http://www'; // Dev tip: if you cannot use the Google Analytics Debug Chrome extension, // https://chrome.google.com/webstore/detail/jnkmfdileelhofjcijamephohjechhna // you can replace /ga.js on the following line with /u/ga_debug.js // But if you do that, PLEASE DON'T COMMIT THE CHANGE! Kthxbai. ga.src = prefix + '.google-analytics.com/ga.js'; p.insertBefore(ga, s); }(document)); </script> <script> (function (){ // adds a classname for css to target the current page without passing in special things from the server or wherever // replacing all characters not allowable in classnames var newLocation = encodeURIComponent(window.location.pathname).replace(/[\.!~*'\(\)]/g, '_'); // cleaning up remaining url-encoded symbols for clarity sake newLocation = newLocation.replace(/%2F/g, '-').replace(/^-/, '').replace(/-$/, ''); if (newLocation === '') { newLocation = 'homepage'; } $('body').addClass('' + newLocation); }()); $(function ($) { // adds 'page-active' class to links matching the page url $('a[href="' + window.location.pathname + '"]').addClass('page-active'); }); $(document).delegate('[data-toggle-selector]', 'click', function (e) { var $this = $(this); $($this.attr('data-toggle-selector')).toggle(); e.preventDefault(); }); </script> <script type="text/javascript"> wallace-best.define('web.urls', function () { return { twitter: 'https://wallace-best.com/_ax/twitter/begin/', google: 'https://wallace-best.com/_ax/google/begin/', facebook: 'https://wallace-best.com/_ax/facebook/begin/', dashboard: 'http://wallace-best.com/dashboard/' } }); $(document).ready(function () { var usernameInput = $("input[name=username]"); if (usernameInput[0].value) { $("input[name=password]").focus(); } else { usernameInput.focus(); } }); </script> <script type="text/javascript" src="//a.wallace-bestcdn.com/1391808583/js/src/social_login.js"> <script type="text/javascript"> $(function() { var options = { authenticated: (context.auth.username !== undefined), moderated_forums: context.auth.moderated_forums, user_id: context.auth.user_id, track_clicks: !!context.switches.website_click_analytics, forum: context.forum }; wallace-best.funnelcake.init(options); }); </script> <!-- helper jQuery tmpl partials --> <script type="text/x-jquery-tmpl" id="profile-metadata-tmpl"> data-profile-username="${username}" data-profile-hash="${emailHash}" href="/${username}" </script> <script type="text/x-jquery-tmpl" id="profile-link-tmpl"> <a class="profile-launcher" {{tmpl "#profile-metadata-tmpl"}} href="/${username}">${name}</a> </script> <script src="//a.wallace-bestcdn.com/1391808583/js/src/templates.js"></script> <script src="//a.wallace-bestcdn.com/1391808583/js/src/modals.js"></script> <script> wallace-best.ui.config({ disqusUrl: 'https://disqus.com', mediaUrl: '//a.wallace-bestcdn.com/1391808583/' }); </script> </body> </html>