# 解析 4-byte Function Signature

## I. 什麼是 4-byte Function Signature ？

在以太坊智能合約中，開發者通常會命名本合約需要調用的函數，而這些函數名稱通過哈希等運算及編碼，取前四位的字節，最終得到了智能合約中的 4-byte Function Signatur，點擊[這裡](https://www.4byte.directory/)查看更多關於 4-byte Function Signature 信息。

![](https://37182324-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F-MVozfoQsxc6YFPQfVTB-3369173170%2Fuploads%2FcrSBlhRmNpWeuJKBjuwH%2FScreen%20Shot%202022-06-07%20at%203.15.57%20PM.png?alt=media\&token=fa768822-7264-4efb-b0e0-3679bacf4640)

## II. 為什麼要開發此功能？

Keystone 的願景和使命是讓交易更安全可靠。

Keystone 已經為用戶提供了 [ABI 解析](https://support.keyst.one/traditional-chinese/gao-ji-gong-neng/jie-xi-defi-jiao-yi)的功能，在收到了用戶認可的同時，也收到了許多用戶的反饋，希望 Keystone 可以解析更多的內容，將這些智能合約中的字節轉化為人類可讀的語言。於是在 ABI 解析功能的基礎上，推出了 4-byte Function Signature 的解析，幫助用戶在簽名的時候若未能進行 ABI 解析則會繼續解析 4-byte Function Signature 這樣可以看到智能合約調用了哪些函數，從側面增加了簽名的安全性。

## III. 解析 4-byte Function Signature

Keystone 錢包的 V6.0.0 (多幣種) 及以上多幣種固件版本已支持解析 4-byte Function Signature。本教程將以 MetaMask 為例，展示如何使用 Keystone 解析4-byte Function Signature。

#### 1. 準備

1）將 Keystone 的固件版本升級到 V6.0.0 （Multi-Coin）或以上版本，\
（有關更多詳情，請閱讀[如何升級固件](https://support.keyst.one/traditional-chinese/kai-shi-shi-yong/ru-he-sheng-ji-gu-jian)）

2）綁定“ MetaMask Extension ”（[如何綁定 MetaMask](https://support.keyst.one/traditional-chinese/di-san-fang-qian-bao/eth-web3-qian-bao/metamask-eth)）。

3）準备 MicroSD 記憶卡（要求：默認 FAT32 格式，且**不超過** 512GB，否則無法被 Keystone 識別）。

{% hint style="info" %}
提示：Keystone 可以將 Micro SD 卡格式化為 FAT32。（[教程](https://support.keyst.one/v/traditional-chinese/kai-shi-shi-yong/ru-he-sheng-ji-gu-jian/jiang-tf-ka-ge-shi-hua-cheng-fat32-ge-shi)）
{% endhint %}

4） MicroSD 記憶卡讀卡器（如果電腦支持直接插入 MicroSD 記憶卡，則無需準備）。

#### 2.操作

1）將 Micro SD 記憶卡插入電腦，下載 [ method\_signatures](https://github.com/KeystoneHQ/4bytes/releases)，下載完成後，解壓文檔，講解壓文檔“selector”並拷貝到 Micro SD 記憶卡的根目錄。

{% hint style="info" %}
**小貼士：**&#x60A8;可以使用開源工具小貼士查看 Selector 中的數據。[點擊此處](https://github.com/sqlitebrowser/sqlitebrowser)在 “GitHub > REDEME” 中下載開源工具。
{% endhint %}

![](https://37182324-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F-MVozfoQsxc6YFPQfVTB-3369173170%2Fuploads%2FhSDphEjOuxtOP17FlSLp%2FScreen%20Shot%202022-06-07%20at%204.08.07%20PM.png?alt=media\&token=8b944f91-3d6c-42e0-b6be-2cced9c9617a)

2）3. 將 MicroSD 記憶卡插入 Keystone 錢包設備。

![](https://37182324-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F-MVozfoQsxc6YFPQfVTB-3369173170%2Fuploads%2Fk72FShdB81c4AyWXycg7%2FTF%E6%8F%92%E5%85%A5KV.jpg?alt=media\&token=dfdab374-5cc2-4a26-85a8-39bc14cdc4a3)

3）創建一筆 DeFi 交易，生成待簽名的二維碼 （本教程通過連接 MetaMask 在 Sushiswap 上創建交易舉例）。

![](https://37182324-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F-MVozfoQsxc6YFPQfVTB-3369173170%2Fuploads%2FLWDe0rnpQjJtuEDz91oE%2F3.png?alt=media\&token=f3b06515-fccd-4e27-aa1c-cd56836eea20)

4）Keystone 端：點擊【菜單】> 【選擇軟件錢包】>【MM / DeFi / Web3】>【確認】，在此模式下，點擊主頁右上角 “掃描” 按鈕，攝像頭打開後對準  MetaMask 彈出來的待簽名交易二維碼進行掃描。

![](https://37182324-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F-MVozfoQsxc6YFPQfVTB-3369173170%2Fuploads%2FSk5WQDqa55erq9aoEFjw%2F6.png?alt=media\&token=8747d1f8-7f4b-46b7-9b68-c342a6ada1aa)

5）Keystone 將讀取到 MicroSD 記憶卡中匹配的 4-byte Function Signature 數據，解析該筆交易的資訊並展示所有可能調用的函&#x6578;**（只有在ABI數據未能解析時，才會進一步解析 4-byte Function Signature ）**。

![
](https://37182324-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F-MVozfoQsxc6YFPQfVTB-3369173170%2Fuploads%2FYAcbQNfZ4iIwnSM0Cwqc%2F4.0.png?alt=media\&token=857f7c97-400f-4bf4-9609-acbcdd7d2a12)

{% hint style="info" %}
**注意事項：**\
1\. 簽名交易時，需保持含有 Selector 資料庫的 MicroSD 記憶卡始終插在 Keystone 錢包中，不可中途將 MicroSD 記憶卡拔出，否則會導致交易無法解析。

2\. Keystone 錢包設備對之前已經讀取過的 Selector 不會有記憶，因此每一次簽名交易時，都需要將含有 Selector 資料庫的 MicroSD 記憶卡插入 Keystone 錢包設備中，直到不需要再做任何簽名時方可拔出 MicroSD 記憶卡。
{% endhint %}
