[
  {
    "path": ".gitignore",
    "content": "# See https://help.github.com/articles/ignoring-files/ for more about ignoring files.\n\n# dependencies\n/node_modules\n/.pnp\n.pnp.js\n\n# testing\n/coverage\n\n# production\n/build\n\n# misc\n.DS_Store\n.env\n.env.local\n.env.development.local\n.env.test.local\n.env.production.local\n\nnpm-debug.log*\nyarn-debug.log*\nyarn-error.log*"
  },
  {
    "path": "README.md",
    "content": "# Ethers.js by Example\nLearn how to use ethers.js from these examples\n\n## Technology Stack & Tools\n\n- Javascript (Writing scripts)\n- [Ethers.js](https://docs.ethers.io/v5/) (Blockchain Interaction)\n- [Node.js](https://nodejs.org/en/) (To run our scripts and install ethers.js)\n- [Infura](https://infura.io/) (Node provider)\n\n## Setting Up\n### 1. Clone/Download the Repository\n\n### 2. Install Dependencies:\n```\n$ npm install\n```\n\n## Ethers.js scripts\n\n### 1_accounts.js - Reads balance of ether of wallet address\n- Input your infura project ID \n```\n$ node examples/1_accounts.js\n```\n\n### 2_read_smart_contract.js - Reads the balance of Dai wallet address from the Dai contract\n- Input your infura project ID \n```\n$ node examples/2_read_smart_contract.js\n```\n\n### 3_send_signed_transaction.js - Transfers 0.025 ether from account1 to account2\n- Input your infura project ID \n- Input your account1 public key\n- Input your account2 public key\n- Input your account1 private key\n```\n$ node examples/3_send_signed_transaction.js\n```\n\n### 4_deploy_contract.js - Deploys contract on Kovan testnet by using Factory contract\n- Input your infura project ID \n- Input your account private key\n```\n$ node examples/4_deploy_contract.js\n```\n\n### 5_write_contract.js - Transfers entire balance of token of your choosing from account1 to account2 (on Kovan testnet)\n- Input your infura project ID \n- Input your account1 public key\n- Input your account2 public key\n- Input your account1 private key\n- Input contract address of the token you want to transfer (You can use the deployed contract address from the previous script)\n```\n$ node examples/5_write_contract.js\n```\n\n### 6_contract_event_stream.js - Queries a block for transfer events\n- Input your infura project ID \n```\n$ node examples/6_contract_event_stream.js\n```\n\n### 7_inspecting_blocks.js - Get transactions from block\n- Input your infura project ID \n```\n$ node examples/7_inspecting_blocks.js\n```"
  },
  {
    "path": "examples/1_accounts.js",
    "content": "const { ethers } = require(\"ethers\");\n\nconst INFURA_ID = ''\nconst provider = new ethers.providers.JsonRpcProvider(`https://mainnet.infura.io/v3/${INFURA_ID}`)\n\nconst address = '0x73BCEb1Cd57C711feaC4224D062b0F6ff338501e'\n\nconst main = async () => {\n    const balance = await provider.getBalance(address)\n    console.log(`\\nETH Balance of ${address} --> ${ethers.utils.formatEther(balance)} ETH\\n`)\n}\n\nmain()\n\n"
  },
  {
    "path": "examples/2_read_smart_contract.js",
    "content": "const { ethers } = require(\"ethers\");\n\nconst INFURA_ID = ''\nconst provider = new ethers.providers.JsonRpcProvider(`https://mainnet.infura.io/v3/${INFURA_ID}`)\n\nconst ERC20_ABI = [\n    \"function name() view returns (string)\",\n    \"function symbol() view returns (string)\",\n    \"function totalSupply() view returns (uint256)\",\n    \"function balanceOf(address) view returns (uint)\",\n];\n\nconst address = '0x6B175474E89094C44Da98b954EedeAC495271d0F' // DAI Contract\nconst contract = new ethers.Contract(address, ERC20_ABI, provider)\n\nconst main = async () => {\n    const name = await contract.name()\n    const symbol = await contract.symbol()\n    const totalSupply = await contract.totalSupply()\n\n    console.log(`\\nReading from ${address}\\n`)\n    console.log(`Name: ${name}`)\n    console.log(`Symbol: ${symbol}`)\n    console.log(`Total Supply: ${totalSupply}\\n`)\n\n    const balance = await contract.balanceOf('0x6c6Bc977E13Df9b0de53b251522280BB72383700')\n\n    console.log(`Balance Returned: ${balance}`)\n    console.log(`Balance Formatted: ${ethers.utils.formatEther(balance)}\\n`)\n}\n\nmain()"
  },
  {
    "path": "examples/3_send_signed_transaction.js",
    "content": "const { ethers } = require(\"ethers\");\n\nconst INFURA_ID = ''\nconst provider = new ethers.providers.JsonRpcProvider(`https://kovan.infura.io/v3/${INFURA_ID}`)\n\nconst account1 = '' // Your account address 1\nconst account2 = '' // Your account address 2\n\nconst privateKey1 = '' // Private key of account 1\nconst wallet = new ethers.Wallet(privateKey1, provider)\n\nconst main = async () => {\n    const senderBalanceBefore = await provider.getBalance(account1)\n    const recieverBalanceBefore = await provider.getBalance(account2)\n\n    console.log(`\\nSender balance before: ${ethers.utils.formatEther(senderBalanceBefore)}`)\n    console.log(`reciever balance before: ${ethers.utils.formatEther(recieverBalanceBefore)}\\n`)\n\n    const tx = await wallet.sendTransaction({\n        to: account2,\n        value: ethers.utils.parseEther(\"0.025\")\n    })\n\n    await tx.wait()\n    console.log(tx)\n\n    const senderBalanceAfter = await provider.getBalance(account1)\n    const recieverBalanceAfter = await provider.getBalance(account2)\n\n    console.log(`\\nSender balance after: ${ethers.utils.formatEther(senderBalanceAfter)}`)\n    console.log(`reciever balance after: ${ethers.utils.formatEther(recieverBalanceAfter)}\\n`)\n}\n\nmain()"
  },
  {
    "path": "examples/4_write_contract.js",
    "content": "const { ethers } = require(\"ethers\");\n\nconst INFURA_ID = ''\nconst provider = new ethers.providers.JsonRpcProvider(`https://kovan.infura.io/v3/${INFURA_ID}`)\n\nconst account1 = '' // Your account address 1\nconst account2 = '' // Your account address 2\n\nconst privateKey1 = '' // Private key of account 1\nconst wallet = new ethers.Wallet(privateKey1, provider)\n\nconst ERC20_ABI = [\n    \"function balanceOf(address) view returns (uint)\",\n    \"function transfer(address to, uint amount) returns (bool)\",\n];\n\nconst address = ''\nconst contract = new ethers.Contract(address, ERC20_ABI, provider)\n\nconst main = async () => {\n    const balance = await contract.balanceOf(account1)\n\n    console.log(`\\nReading from ${address}\\n`)\n    console.log(`Balance of sender: ${balance}\\n`)\n\n    const contractWithWallet = contract.connect(wallet)\n\n    const tx = await contractWithWallet.transfer(account2, balance)\n    await tx.wait()\n\n    console.log(tx)\n\n    const balanceOfSender = await contract.balanceOf(account1)\n    const balanceOfReciever = await contract.balanceOf(account2)\n\n    console.log(`\\nBalance of sender: ${balanceOfSender}`)\n    console.log(`Balance of reciever: ${balanceOfReciever}\\n`)\n}\n\nmain()"
  },
  {
    "path": "examples/5_contract_event_stream.js",
    "content": "const { ethers } = require(\"ethers\");\n\nconst INFURA_ID = ''\nconst provider = new ethers.providers.JsonRpcProvider(`https://mainnet.infura.io/v3/${INFURA_ID}`)\n\nconst ERC20_ABI = [\n    \"function name() view returns (string)\",\n    \"function symbol() view returns (string)\",\n    \"function totalSupply() view returns (uint256)\",\n    \"function balanceOf(address) view returns (uint)\",\n\n    \"event Transfer(address indexed from, address indexed to, uint amount)\"\n];\n\nconst address = '0x6B175474E89094C44Da98b954EedeAC495271d0F' // DAI Contract\nconst contract = new ethers.Contract(address, ERC20_ABI, provider)\n\nconst main = async () => {\n    const block = await provider.getBlockNumber()\n\n    const transferEvents = await contract.queryFilter('Transfer', block - 1, block)\n    console.log(transferEvents)\n}\n\nmain()"
  },
  {
    "path": "examples/6_inspecting_blocks.js",
    "content": "const { ethers } = require(\"ethers\");\n\nconst INFURA_ID = ''\nconst provider = new ethers.providers.JsonRpcProvider(`https://mainnet.infura.io/v3/${INFURA_ID}`)\n\nconst main = async () => {\n    const block = await provider.getBlockNumber()\n\n    console.log(`\\nBlock Number: ${block}\\n`)\n\n    const blockInfo = await provider.getBlock(block)\n\n    console.log(blockInfo)\n\n    const { transactions } = await provider.getBlockWithTransactions(block)\n\n    console.log(`\\nLogging first transaction in block:\\n`)\n    console.log(transactions[0])\n}\n\nmain()"
  },
  {
    "path": "package.json",
    "content": "{\n  \"name\": \"ethers_examples\",\n  \"version\": \"1.0.0\",\n  \"description\": \"\",\n  \"main\": \"index.js\",\n  \"scripts\": {\n    \"test\": \"echo \\\"Error: no test specified\\\" && exit 1\"\n  },\n  \"author\": \"\",\n  \"license\": \"ISC\",\n  \"dependencies\": {\n    \"ethers\": \"^5.5.4\"\n  }\n}\n"
  }
]