# Remix

Remix는 브라우저에서 솔리디티를 이용하여 스마트 컨트랙트를 개발하도록 도와주는 IDE입니다.

* <https://remix.ethereum.org/>

## 1. Layout

아래는 Remix IDE 레이아웃입니다.

* A : 사이드패널(B)에 표시할 플러그인을 선택할 수 있는 아이콘 패입니다.
* B : 플러그인이 표시 되는 패널입니다. 대부분의 플러그인에 대한 GUI가 측면 패널에 표시됩니다.
* C : 기본 패널이며, 컴파일할 파일을 편집할 수 있습니다.
* D : 터미널이 표시되며, 결과를 보거나 스크립트를 실행 할 수 있습니다.

<figure><img src="https://1033638889-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F7LEQohl1OQ3UWEgDF4Zt%2Fuploads%2FEh0tVlw9zMXP6xIp8n5R%2Fscreencapture-remix-ethereum-org-2022-11-23-16_44_24.png?alt=media&#x26;token=f1aab197-7973-421b-8665-4b92b2bfbd23" alt=""><figcaption><p>Remix Layoit</p></figcaption></figure>

## 2. 모듈 소개&#x20;

Remix IDE를 처음 열때 기본 모듈은 File Explorer, Plugin Manager 및 Editor입니다.

### File Explorer

File Explorer 아이콘은 아이콘 패널의 맨 위에 있습니다.

<figure><img src="https://1033638889-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F7LEQohl1OQ3UWEgDF4Zt%2Fuploads%2F5MqzXMD865hGistdeziJ%2F%E1%84%89%E1%85%B3%E1%84%8F%E1%85%B3%E1%84%85%E1%85%B5%E1%86%AB%E1%84%89%E1%85%A3%E1%86%BA%202022-11-23%20%E1%84%8B%E1%85%A9%E1%84%92%E1%85%AE%205.19.03.png?alt=media&#x26;token=68c64590-ef92-4d9b-8c37-eded4c470573" alt=""><figcaption><p>File Explorer</p></figcaption></figure>

### Plugin Manager <a href="#plugin-manager" id="plugin-manager"></a>

Remix IDE는 플러그인을 기반으로 실행됩니다. 다양한 기능을 사용하려면 플러그인 관리자에서 모듈을 활성화해야 합니다. 아이콘 패널의 기본 모듈은 파일 탐색기, 컴파일, 배포 및 실행입니다.

<figure><img src="https://1033638889-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F7LEQohl1OQ3UWEgDF4Zt%2Fuploads%2F2UwIqQxEt5nRlO6BrH3P%2F%E1%84%89%E1%85%B3%E1%84%8F%E1%85%B3%E1%84%85%E1%85%B5%E1%86%AB%E1%84%89%E1%85%A3%E1%86%BA%202022-11-23%20%E1%84%8B%E1%85%A9%E1%84%92%E1%85%AE%205.18.17.png?alt=media&#x26;token=e1cc9277-db9a-4e69-99b8-95b6a3daa20f" alt=""><figcaption><p>Plugin Manager</p></figcaption></figure>

### Code Editor <a href="#code-editor" id="code-editor"></a>

기본 패널의 코드 편집기에서 코드를 작성하고 편집할 수 있습니다. 기존 코드를 변경할 경우 다시 컴파일해야 합니다.

<figure><img src="https://1033638889-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F7LEQohl1OQ3UWEgDF4Zt%2Fuploads%2FI6nohdqX7KJiWR2m3NNX%2F%E1%84%89%E1%85%B3%E1%84%8F%E1%85%B3%E1%84%85%E1%85%B5%E1%86%AB%E1%84%89%E1%85%A3%E1%86%BA%202022-11-23%20%E1%84%8B%E1%85%A9%E1%84%92%E1%85%AE%205.23.47.png?alt=media&#x26;token=7f9ef6bf-780f-4493-99cb-48710656e1b1" alt=""><figcaption><p>Code Editor</p></figcaption></figure>

contracts 디렉토리에 Code Editor로 MEVerseGreeter.sol을 생성합니다.&#x20;

```solidity
// SPDX-License-Identifier: MIT
pragma solidity ^0.5.6;
contract Mortal {
    /* 주소 타입의 소유자(owner) 변수 정의 */
    address payable owner;
    /* 이 함수는 초기화 시점에 실행되어 컨트랙트 소유자를 설정합니다 */
    constructor () public { owner = msg.sender; }
    /* 컨트랙트에서 자금을 회수하는 함수 */
    function kill() public payable { if (msg.sender == owner) selfdestruct(owner); }
}

contract MEVerseGreeter is Mortal {
    /* 문자열 타입의 변수 greeting 정의 */
    string greeting;
    /* 이 함수는 컨트랙트가 실행될 때 작동합니다 */
    constructor (string memory _greeting) public {
        greeting = _greeting;
    }
    /* 주(Main) 함수 */
    function greet() public view returns (string memory) {
        return greeting;
    }
}
```

### Terminal <a href="#terminal" id="terminal"></a>

터미널에서 컴파일 결과, 오류, 배포 상태 및 트랜잭션 정보를 확인할 수 있습니다. 세부 정보를 보려면 선택한 아이콘을 클릭하십시오.

<figure><img src="https://1033638889-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F7LEQohl1OQ3UWEgDF4Zt%2Fuploads%2FffAlopn4ErozUzVcaOss%2F%E1%84%89%E1%85%B3%E1%84%8F%E1%85%B3%E1%84%85%E1%85%B5%E1%86%AB%E1%84%89%E1%85%A3%E1%86%BA%202022-11-23%20%E1%84%8B%E1%85%A9%E1%84%92%E1%85%AE%205.26.22.png?alt=media&#x26;token=0d3005e6-7d89-4825-b63b-fc981a7667df" alt=""><figcaption><p>Terminal</p></figcaption></figure>

## 3. Solidity Compiler

코드 작성을 마쳤으면 컴파일을 사용하여 오류 또는 경고를 확인합니다. 계약서를 작성한 후에야 배포할 수 있습니다.

<figure><img src="https://1033638889-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F7LEQohl1OQ3UWEgDF4Zt%2Fuploads%2FmdHQLUyhsD8UoCIUd5U1%2F%E1%84%89%E1%85%B3%E1%84%8F%E1%85%B3%E1%84%85%E1%85%B5%E1%86%AB%E1%84%89%E1%85%A3%E1%86%BA%202022-11-23%20%E1%84%8B%E1%85%A9%E1%84%92%E1%85%AE%205.34.57.png?alt=media&#x26;token=37696636-5c67-4051-a7b7-8c6585bd464f" alt=""><figcaption><p>Solidity Compiler</p></figcaption></figure>

## 4. DEPLOY & RUN TRANSACTIONS

계약이 컴파일된 경우 아이콘 패널에서 이더리움 아이콘을 선택하여 배포합니다.

<figure><img src="https://1033638889-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F7LEQohl1OQ3UWEgDF4Zt%2Fuploads%2FCku58qy6cG6VvdEqd1Zv%2F%E1%84%89%E1%85%B3%E1%84%8F%E1%85%B3%E1%84%85%E1%85%B5%E1%86%AB%E1%84%89%E1%85%A3%E1%86%BA%202022-11-23%20%E1%84%8B%E1%85%A9%E1%84%92%E1%85%AE%205.37.05.png?alt=media&#x26;token=4836c1d8-c50f-4641-8b0c-c4949849bcec" alt=""><figcaption><p>Deploy &#x26; Run</p></figcaption></figure>

* **ENVIRONMENT** : 개발 환경을 설정하는 부분으로 MEVerse 네트워크에 배포할 경우는 **Injected Provider - MetaMask**를 선택하여 MetaMask 지갑에 접속하여 진행합니다.
* **ACCOUNT** : 스마트 컨트랙트를 배포하는 계정 정보가 보여집니다.
* **CONTRACT** : 배포하고자 하는 컨트랙트를 선택합니다. 컴파일된 컨트랙트만 선택가능합니다.

<figure><img src="https://1033638889-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F7LEQohl1OQ3UWEgDF4Zt%2Fuploads%2FP8KXt6gbA0Qb84yGVilF%2F%E1%84%89%E1%85%B3%E1%84%8F%E1%85%B3%E1%84%85%E1%85%B5%E1%86%AB%E1%84%89%E1%85%A3%E1%86%BA%202022-11-24%20%E1%84%8B%E1%85%A9%E1%84%8C%E1%85%A5%E1%86%AB%208.53.51.png?alt=media&#x26;token=5a2aab9e-fcc9-4460-8e72-59cdf88fcd2b" alt=""><figcaption><p>Remix - MetaMask</p></figcaption></figure>

<figure><img src="https://1033638889-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F7LEQohl1OQ3UWEgDF4Zt%2Fuploads%2F99PjdRwQE4vTjKddvvGL%2F%E1%84%89%E1%85%B3%E1%84%8F%E1%85%B3%E1%84%85%E1%85%B5%E1%86%AB%E1%84%89%E1%85%A3%E1%86%BA%202022-11-24%20%E1%84%8B%E1%85%A9%E1%84%8C%E1%85%A5%E1%86%AB%208.57.10.png?alt=media&#x26;token=f0c40a18-5891-404b-8267-691f563e162f" alt=""><figcaption><p>Injected Provider - MetaMask 연동 화면</p></figcaption></figure>

### Deploy

Environment, Account, Contract를 확인한 다음 Deploy 버튼을 클릭하여 스마트 컨트랙트를 배포합니다. 메타 마스크에서 수수료에 대한 정보를 확인 한 다음 확인을 눌러 스마트 컨트랙트 배포를 완료합니다.

<figure><img src="https://1033638889-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F7LEQohl1OQ3UWEgDF4Zt%2Fuploads%2FCpPnipWtxuYoCKnLVGiI%2F%E1%84%89%E1%85%B3%E1%84%8F%E1%85%B3%E1%84%85%E1%85%B5%E1%86%AB%E1%84%89%E1%85%A3%E1%86%BA%202022-11-23%20%E1%84%8B%E1%85%A9%E1%84%92%E1%85%AE%205.48.29.png?alt=media&#x26;token=a475eabb-3413-4186-861c-f788dee0c728" alt=""><figcaption><p>MetaMask - 컨트랙트 배포 승인</p></figcaption></figure>

Transactions recorded와 Deployed Contract를 확인하여 정상적으로 배포 되었는지 확인이 가능합니다. greet라는 버튼을 클릭하여 스마트 컨트랙트 내의 greet함수를 호출하여 결과를 확인할 수 있습니다.

<figure><img src="https://1033638889-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F7LEQohl1OQ3UWEgDF4Zt%2Fuploads%2FlMirqcGXpIROHqxzoQF8%2F%E1%84%89%E1%85%B3%E1%84%8F%E1%85%B3%E1%84%85%E1%85%B5%E1%86%AB%E1%84%89%E1%85%A3%E1%86%BA%202022-11-24%20%E1%84%8B%E1%85%A9%E1%84%8C%E1%85%A5%E1%86%AB%209.02.15.png?alt=media&#x26;token=51cf9e9c-eba5-4895-bc39-f86cda63baa9" alt=""><figcaption><p>배포된 컨트랙트 확인</p></figcaption></figure>

```shell
[block:28755068 txIndex:0]from: 0x193...449E7to: value: 0 weidata: 60806...00000logs: 0hash: 0x96a...d0065
status	                true Transaction mined and execution succeed
transaction hash	0xab577d01c5583bea3971eca8ae132713c5ad23157a318183fbfb45328066f4b9
from	                0x19368fCd2F0EE8d2C788b754F6504FD49de449E7
gas	                500000000 gas
transaction cost	223369 gas 
input	                60806...00000
decoded output	         - 
val	                0 wei
MetaMask Tx Signature: User denied transaction signature.. Execution failed at 0
```

<figure><img src="https://1033638889-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F7LEQohl1OQ3UWEgDF4Zt%2Fuploads%2F91X8eFG2S3FFZXmx0wvt%2Fscreencapture-testnet-meversescan-io-tx-0xab577d01c5583bea3971eca8ae132713c5ad23157a318183fbfb45328066f4b9-2022-11-24-09_12_51.png?alt=media&#x26;token=0127b847-1f55-413e-9ce2-dc372f60e39b" alt=""><figcaption><p>Testnet Scan(배포 트랜잭션 해시값으로 조회)</p></figcaption></figure>
