> 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/advanced/eip/eip-1.md).

# EIP 활용

* OpenZepplin에서 EIP 실습을 위한 표준 구현체를 제공하고 있다.

{% embed url="<https://github.com/OpenZeppelin/openzeppelin-contracts>" %}

<figure><img src="https://2462457462-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FLf9vwRuaws92ULgGvzTi%2Fuploads%2FfyY51jBJg5vzulF9QPq2%2Fimage.png?alt=media&amp;token=29516435-9942-4b63-a9af-f30def85975b" alt=""><figcaption></figcaption></figure>

```
forge install OpenZeppelin/openzeppelin-contracts
```

* foundry로 표준 구현체를 이용하기 위해서 라이브러리 설치를 진행해준다.

<figure><img src="https://2462457462-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FLf9vwRuaws92ULgGvzTi%2Fuploads%2FBj73INb3fB4IldQzaHv7%2Fimage.png?alt=media&amp;token=8e12aa4d-f62c-4bad-a44a-0a5622a541b9" alt=""><figcaption></figcaption></figure>

* lib 폴더에 들어가면 설치가 완료된 것을 확인 할 수가 있다.

<div align="left"><figure><img src="https://2462457462-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FLf9vwRuaws92ULgGvzTi%2Fuploads%2FkTd9FPTr06jHmbq3sInb%2Fimage.png?alt=media&amp;token=4a01ae15-436b-4e0d-8343-45df6272dd6c" alt=""><figcaption></figcaption></figure></div>

* 라이브러리를 쉽게 import 하기 위해 remapping을 해준다.

```
forge remappings > remapping.txt
```

<figure><img src="https://2462457462-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FLf9vwRuaws92ULgGvzTi%2Fuploads%2FlIvq8CuMKdp4kApJYizM%2Fimage.png?alt=media&amp;token=c1f2968f-d386-4de6-a1d0-303ae168eda5" alt=""><figcaption></figcaption></figure>

* 솔리디티 파일을 만들기 위해 src 폴더로 이동한다.

<div align="left"><figure><img src="https://2462457462-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FLf9vwRuaws92ULgGvzTi%2Fuploads%2Fotr8JPY24g22HbMcWnvy%2Fimage.png?alt=media&amp;token=8eba1f91-f2b5-4f6a-9100-38fc11c7b672" alt=""><figcaption></figcaption></figure></div>

* 공격 컨트랙트를 작성 할 solidity 파일을 만들어준다.

```
 touch <filename>.sol
```

<figure><img src="https://2462457462-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FLf9vwRuaws92ULgGvzTi%2Fuploads%2Fh0DidDAMV3kQNV8y1c0c%2Fimage.png?alt=media&amp;token=796cf00c-a511-4714-8b0c-cc61e28b9399" alt=""><figcaption></figcaption></figure>

* cli에서 코드 작성은 vim을, gui에서 코드 작성은  vscode를 이용하여 작성해준다.

<div align="left"><figure><img src="https://2462457462-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FLf9vwRuaws92ULgGvzTi%2Fuploads%2F9D1k6qT0ybi4MeWyfHne%2Fimage.png?alt=media&amp;token=23fa595a-0a9e-4b69-b8de-d752d55151c1" alt=""><figcaption></figcaption></figure></div>

<div align="left"><figure><img src="https://2462457462-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FLf9vwRuaws92ULgGvzTi%2Fuploads%2FaMfgbSoOdOfGjo4NuxCh%2Fimage.png?alt=media&amp;token=8459ea51-bcff-4692-849c-0a13827f1c52" alt=""><figcaption></figcaption></figure></div>

<div align="left"><figure><img src="https://2462457462-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FLf9vwRuaws92ULgGvzTi%2Fuploads%2F7p3zFvgeZxVOSQf1Zpp3%2Fimage.png?alt=media&amp;token=f9689e1a-82db-4ae3-bccf-13253bdfea75" alt=""><figcaption></figcaption></figure></div>

* &#x20;설치한 contract를 import하고 사용자에 따라 추가적인 코드를 작성할 수 있다.
* remapping 설정을 해주었기에 @openzeppelin가 lib 폴더에 있는 openzeppelin-contracts 경로와 연결되어 @openzeppelin으로 간단하게 불러올 수 있다.

<figure><img src="https://2462457462-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FLf9vwRuaws92ULgGvzTi%2Fuploads%2FH0pp4b7X5tvONuT1y93H%2Fimage.png?alt=media&amp;token=69fec99a-07b4-4c0e-b7d3-7e8a390b08d0" alt=""><figcaption></figcaption></figure>

* 이후 배포, 실행은 [7. Foundry](/smartcontract-security-docs/basics/6.-foundry.md)를 참조 한다.
