# What is ethers.js

The ethers.js library aims to be a complete and compact library for interacting with the Ethereum Blockchain and its ecosystem. It was originally designed for use with ethers.io and has since expanded into a much more general-purpose library.

## Features

> - Keep your private keys in your client, safe and sound
> - Import and export JSON wallets (Geth, Parity and crowdsale)
> - Import and export BIP 39 mnemonic phrases (12 word backup phrases) and HD Wallets (English, Italian, Japanese, Korean, Simplified Chinese, Traditional Chinese; more coming soon)
> - Meta-classes create JavaScript objects from any contract ABI, including ABIv2 and Human-Readable ABI
> - Connect to Ethereum nodes over JSON-RPC, INFURA, Etherscan, or MetaMask.
> - ENS names are first-class citizens; they can be used anywhere an Ethereum addresses can be used
> - Tiny (~88kb compressed; 284kb uncompressed)
> - Complete functionality for all your Ethereum needs
> - Extensive documentation
> - Large collection of test cases which are maintained and added to
> - Fully TypeScript ready, with definition files and full TypeScript source
> - MIT License (including ALL dependencies); completely open source to do with as you please

Developer Documentation

- Getting Started
  - Installing in Node.js
    - Importing
  - Including in Web Applications
- Application Programming Interface (API)
  - Wallets and Signers
    - Wallet
    - Signer API
  - Providers
    - Connecting to Ethereum
    - Properties
    - Network
    - Account
    - Blockchain Status
    - Ethereum Naming Service
    - Contract Execution
    - Contract State
    - Events
    - Objects and Types
    - Provider Specific Extra API Calls
  - Contracts
    - Deploying a Contract
    - Connecting to Existing Contracts
    - Meta-Class Properties
    - Overrides
    - Event Emitter
    - Providers vs Signers
    - Types
    - Filtering Events
    - Application Binary Interface (ABI)
  - Utilities
    - Addresses
    - Arrayish
    - Big Numbers
    - Bytes32 Strings
    - Constants
    - Cryptographic Functions
    - Ether Strings and Wei
    - Hex Strings
    - Namehash
    - Signatures
    - Transactions
    - UTF-8 Strings
    - Web
- Low-Level API
  - ABI Coder
    - Creating Instances
    - Static Properties
    - Prototype
  - HDNode
    - Creating Instances
    - Prototype
    - Deriving Child and Neutered Nodes
    - Static Methods
  - Interface
    - Creating an Instance
    - Prototype
    - Parsing Objects
    - Object Test Functions
    - Descriptions
  - Provider (Sub-Classing)
    - Static Methods
    - Prototype
  - Recursive-Length Prefixed Encoding (RLP)
    - Static Methods
  - Signing Key
    - Creating Instances
    - Prototype
    - Cryptographic Operations
- Cookbook
  - Accounts
    - Dump All JSON Wallet Balances (in current directory)
    - Sweep an Account into Another
    - Coalesce Jaxx Wallets
    - Access Funds in a Mnemonic Phrase Wallet
    - Random Mnemonic
    - Get Transaction History
  - Contracts
    - Return a Value from a State-Changing Method
    - Economic Incentives and Economic Value
  - Providers
    - MetaMask
    - TestRPC / Ganache
    - Custom Provider
  - Signing Messages
    - Signing a String Message
    - Signing a Digest Hash
  - Testing
    - Contract Events
    - Using Multiple Accounts
  - React Native
    - Shims
    - Wordlists
    - Other Notes
- Migration Guides
  - Migrating from Web3 to ethers v4
  - Migrating from ethers v3 to ethers v4
    - Constants
    - Deploying Contracts
    - Encrypted Wallets
    - Events
    - Fetching JSON
    - Interfaces
    - Networks
    - Parsing Transactions
    - Custom Signer
    - Default Provider
    - Big Number
    - JsonRpcProvider
    - Verifying Messages
    - Waiting for Transactions
- Notes
  - Why can’t I just use numbers?
  - Promises
  - Checksum Address
  - ICAP Address
  - Supported Platforms
  - Contributing
  - Security
    - The GitHub and NPM Package
    - Memory Hard Brute-Force Encrpyting
    - Responsible Disclosure
- Testing

## Legacy Documentation

For documentation of older versions, we will keep a list here.

> - version 3.0