> For the complete documentation index, see [llms.txt](https://whs3-doge5k.gitbook.io/smartcontract-security-docs/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://whs3-doge5k.gitbook.io/smartcontract-security-docs/basics/5.-metamask/undefined.md).

# 들어가기 전에

1. **암호 화폐 지갑이란**

* 암호 화폐 지갑은 암호  화폐를 보유 하고 있음을 증명하고 이를 거래할 수 있도록 하는 소프트웨어 또는 하드웨어 형태의 장치를 말한다.
* 실질적인 물건을 보관하는  물리적인 지갑이  현금, 카드, 기타 개인 물품 등을 보관하는 것과 달리 가상 화폐 지갑은 암호 화폐 자체를 보관하는 것이 아닌 블록체인 네트워크에 있는 데이터와 상호작용 하는 기능을 한다.

2. **가상 화폐 지갑 암호화 요소**

* **개인 키 (Private Key) :** 랜덤으로 생성된 숫자로 암호 화폐에 대한 소유 및 통제 권한을 부여하기에 절대 공개해서는 안된다.
* **공개 키 (Public key) :** 개인 키를 이용하여 특정 함수를 통해 계산되어 생성된 키로 지갑 주소 생성에 필요함&#x20;
* **주소 (Address) :**  공개 키로 생성된 공개된 지갑 주소

3. **지갑 종류**

* **핫 월렛(hot wallet) :** 핫 월렛은 인터넷에 연결되어 있는 지갑으로 거래 정보를 실시간으로 빠르게 활용할 수가 있다.  네트워크에 연결되어 있기 때문에 해킹 위험이 존재한다.

  * Metamask와 같은 웹 브라우저 형태의 지갑
  * Trustwallet과 같은 모바일 앱 형태의 지갑

* **콜드 월렛( cold wallet) :** 콜드 월렛은 인터넷에 연결되어 있지 않은 상태로 사용하는 지갑으로 네트워크에 연결되어 있지 않아 보안성이 높다.  장치 분실 위험 등 관리에 대한 주의가 필요하다

  * 종이 지갑: 지갑 주소에 대응하는 공개 키와 개인 키를 종이에 적거나  인쇄하여 보관
  * USB 형태의 하드웨어 지갑

4. **Mnemonic이란**

<div align="left"><figure><img src="https://2462457462-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FLf9vwRuaws92ULgGvzTi%2Fuploads%2FTnsrnOX9Y7mkdxxIghVR%2Fimage.png?alt=media&amp;token=179dd7f3-73fc-416e-9e48-b5809d8c225c" alt="" width="375"><figcaption></figcaption></figure></div>

* Mnemonic은 가상 화폐 지갑을 복구하기 위해 초기에 설정하여  분실 시 12개의 단어를 동일한 순서로 입력해야 하며 하나라도 틀리면 복구가 불가능하다.
* 가상 화폐 지갑을 복구할 수 있기에 본래 사용자 이외에 사람에게 유출되면 자산을 모두 잃을 수 있으니 보관에 주의 해야 한다.

***

## Metamask란?

Metamask는 이더리움이나 ERC-20 토큰 등을 안전하게 저장하고 관리 가능한  웹브라우저 확장 프로그램 및 모바일 앱 형식의 소프트웨어 암호 화폐 지갑으로 탈중앙화 애플리케이션(DApp)과 상호 작용이 가능하며 손쉽게 **암호 화폐를 거래**하거나 **블록체인 애플리케이션**을 사용할 수 있게 해준&#xB2E4;**.**

#### 1. MetaMask의 주요 기능

<table><thead><tr><th width="160.66668701171875">기능</th><th>설명</th></tr></thead><tbody><tr><td>지갑 기능</td><td>이더리움 주소(계정)를 만들고, 이더(ETH)나 NFT 같은 자산을 보관</td></tr><tr><td>브라우저 연동</td><td>크롬/파이어폭스 확장 프로그램으로 작동해서, 웹사이트에서 블록체인 앱(DApp)을 사용</td></tr><tr><td>트랜잭션 서명</td><td>돈을 보내거나 계약을 실행할 때, 사용자의 승인을 받아 서명</td></tr><tr><td>네트워크 설정</td><td>이더리움 메인넷뿐만 아니라, 테스트넷, Binance Smart Chain, Polygon 등 다양한 체인에 연결 가능</td></tr></tbody></table>

#### 2. Mainnet에서 Testnet으로 전환하는 이유

* Mainnet에서 테스트하면 생기는 문제

<table><thead><tr><th width="160">항목</th><th>설명</th></tr></thead><tbody><tr><td>비용</td><td>실제 이더(ETH)가 소모, 원치 않는 소비 발생 가능</td></tr><tr><td>리스크</td><td>실험 중 버그나 보안 취약점이 생기면 실제 자산이 위험</td></tr><tr><td>느림</td><td>메인넷은 거래 속도가 느릴 수 있고, 수수료(가스비)가 고가치</td></tr><tr><td>공개성</td><td>테스트 중인 코드가 전 세계에 실시간으로 공개</td></tr></tbody></table>

* Testnet의 장점

<table><thead><tr><th width="158.66668701171875">항목</th><th>설명</th></tr></thead><tbody><tr><td>무료 이더</td><td>faucet에서 공짜로 test ETH를 사용 가능</td></tr><tr><td>안전</td><td>돈을 잃을 위험이 없고, 실패해도 문제 발생X</td></tr><tr><td>개발 최적화</td><td>테스트 중 수백 번의 transaction을 보내도 부담X</td></tr><tr><td>실전 연습</td><td>실제 네트워크 구조와 거의 동일하므로, 실전에 가깝게 테스트 가능</td></tr></tbody></table>

#### 3. Testnet 전환 시 Metamask가 하는 일

* Metamask는 기본적으로 Main-net에 연결되어 있다.
* 네트워크를 다른 Test-net으로 바꾸면,
  * 메타마스크가 해당 테스트넷의 노드(RPC 서버)에 연결된다.
  * 이제부터 보낼 Transaction이나 Smart Contract 배포는 Main-net이 아닌 Test-net에 반영된다.
