---
# System prepended metadata

title: 13-如何使用程式查看區塊鏈資料
tags: [fzth-post]

---

---
layout: post 
current: post
cover: assets/images/panda-xx.png #封面圖片
navigation: True #上方導覽列
title: 13-如何使用程式查看區塊鏈資料 #id-標題名稱
date: 2019-12-14 #日期 YYYY-MM-DD 
tags: fzth-post #標籤
class: post-template 
subclass: 'post' 
author: panda #作者 
---

> 我們常常都透過 Etherscan 等區塊鏈瀏覽器 .. 有沒有想過自己新建一個 Web Page 來去查看區塊鏈上的資料！

```
準備：

- Chrome 
- Metamask 
- Vscode / Sublime (編輯器)

```


> 今天我們來透過程式查看自己身上的 Likecoin 有多少總額吧！

## Step 1 - 前端


<div aling="center">
    <img src="https://ithelp.ithome.com.tw/upload/images/20191002/20118325oO7DFlnCnp.png" style="width:100%"> 
</div>

<br>

<center><strong>圖1 撰寫簡單的前端 Html </strong></center>

<div aling="center">
    <img src="https://ithelp.ithome.com.tw/upload/images/20191002/20118325x9gfv4UqB3.png" style="width:100%"> 
</div>

<br>

<center><strong>圖2 前端畫面 </strong></center>



## Step 2 - import web3 

> 添加 Web3 和 網頁做交互。

一般來說我們可以使用兩種方式，一種是 npm install 一種是 cdn 
```
npm install web3
```

```
<script src="https://cdn.jsdelivr.net/gh/ethereum/web3.js/dist/web3.min.js"></script>
```

```
// 添加此至 javascript 中，讓程式在一載入就先判斷有沒有 web3 如果沒有的話我們採用 infura 主網的節點
window.onload = function() {
      if (typeof web3 !== 'undefined') {
        web3 = new Web3(web3.currentProvider);
      } else {
        web3 = new Web3(new Web3.providers.HttpProvider("https://mainnet.infura.io"));
      }
    }
```

因為方便，我們這裡採用 cdn 的方式。

## Step 3 - ABI

添加合約的 Function ，
之前我們也說過每個合約都有屬於自己的 ABI ，那麼 ABI 是什麼？ 
如果以網頁來說，他就等同於 API 的存在。

> ABI 
![https://ithelp.ithome.com.tw/upload/images/20191002/20118325fAUtFlXwj2.png](https://ithelp.ithome.com.tw/upload/images/20191002/20118325fAUtFlXwj2.png)

## Step4 - 得到 ERC20 資訊

我們需要得到這些資訊，那麼我們會需要得知此 ERC20 合約地址、現在持有人的錢包地址，才可查看。

`
function getERC20TokenBalance(tokenAddress, walletAddress, callback)
`

將合約的一些宣告也寫入這個 function 

```
let contract = web3.eth.contract(minABI).at(tokenAddress);
      contract.balanceOf(walletAddress, (error, balance) => {
        contract.decimals((error, decimals) => {
          balance = balance.div(10**decimals);
          console.log(balance.toString());
          callback(balance);
        });
      });
```

`
balanceOf 持有多少 token  
decimals 小數
` 

## Step5 - function 完成
得到錢包地址、以及載入 Likecoin 合約、得知錢有多少

> 如何得知自己錢包地址，那就要採用 web3 的 function 了

` ethereum.selectedAddress `

> LikeCoin 合約 

`0x02f61fd266da6e8b102d4121f5ce7b992640cf98`

> GetBalance 

```
function getBalance(){
    	let tokenAddress = document.getElementById('token-address').value; // 合約地址
      	let walletAddress = document.getElementById('wallet-address').value; // 錢包地址
      	// 倘若合約地址及錢包地址都有填寫，則執行 getERC20TokenBalance 此function 
        if(tokenAddress != "" && walletAddress != "") {
        getERC20TokenBalance(tokenAddress, walletAddress, (balance) => {
          document.getElementById('result').innerText = balance.toString();
        });        
      }
    }
```    

## Step 6 執行

按照順序，點擊按鈕（得到錢包 -> 得到合約 -> 產生結果)

> 程式碼

<div align="center">
    <img src="https://ithelp.ithome.com.tw/upload/images/20191002/201183255MZwp7vkJC.png" style="width:100%">
</div>

<br>

<center><strong>圖3 全部程式碼</strong></center>


<div align="center">
    <img src="https://ithelp.ithome.com.tw/upload/images/20191002/20118325hbrZ1xu6Vt.png" style="width:100%">
</div>

<br>

<center><strong>圖4 前端填寫畫面輸出</strong></center>
<br>
就可以看到自己手上有多少顆 Likecoin 了呢！

## 小記 

今天來用 web3 和前端做個互動，查看自己錢包中的 Token 數量！
若文章有任何的問題或要討論的部分，歡迎在底下留言。
歡迎透過 Email: `pandap.d819@gamil.com` 聯絡我。