# Solidity

Solidity는 이더리움 상태 내에서 계정의 동작을 제어하는 ​​프로그램인 스마트 컨트랙트를 구현하기 위한 객체 지향 고급 언어입니다. Solidity는 EVM(Ethereum Virtual Machine)에서 동작하도록 설계된 C++, Python 및 JavaScript의 영향을 받은 중괄호 타입의 언어입니다. Solidity는 정적으로 유형이 지정되며 다른 기능 중에서 상속, 라이브러리 및 복잡한 사용자 정의 유형을 지원합니다.&#x20;

Solidity를 사용하면 투표, 크라우드 펀딩, 블라인드 경매 및 다중 서명 지갑과 같은 용도의 계약을 생성할 수 있습니다.&#x20;

### 개발환경 (IDE) <a href="#integrated-development-environment-ide" id="integrated-development-environment-ide"></a>

Solidity를 지원하는 환경은 다양합니다. 브라우저 기반의 Remix부터 많이 사용되는 IDE 도구인 IntelliJ, Visual Studio 등에서 Solidity Plugin을 설치하면 사용이 가능합니다.

#### **Remix 사용법** <a href="#how-to-use-remix" id="how-to-use-remix"></a>

<https://remix.ethereum.org> 로 접속하면 다음과 같습니다. contracts 디렉터리에 Storage.sol, Owner.sol, Ballot.sol 세가지의 예제 스마트 컨트랙트가 보여지게 되며, 새로 작성하려면 이를 선택하여 지우고 새 파일을 생성하면 됩니다.

![Remix 초기 화면](https://content.gitbook.com/content/iXnTk8WgxaTaNidAuUYQ/blobs/thYAWl71KkeoThkUuxpi/Remix%20%E1%84%8E%E1%85%A9%E1%84%80%E1%85%B5%20%E1%84%92%E1%85%AA%E1%84%86%E1%85%A7%E1%86%AB.png)

다음과 같은 예제 스마트 컨트랙트를 작성할 수 있습니다. 예제 스마트 컨트랙트는 `get()`함수를 통해 count 값을 읽어올 수 있고, `inc()`, `dec()` 함수를 통해 count 값을 올리거나 내리는 기능을 제공합니다.

```
// SPDX-License-Identifier: MIT

pragma solidity ^0.8.11;

contract Counter {
    uint256 count;
    
    constructor(uint256 _count) {
        count = _count;
    }
    
    function get() public view returns (uint256) {
        return count;
    }
    
    function inc() public {
        count += 1;
    }
    
    function dec() public {
        count -= 1;
    }
}
```

![예제 코드 작성 ](https://content.gitbook.com/content/iXnTk8WgxaTaNidAuUYQ/blobs/vwj8KdbOtucO3qHt424n/%E1%84%8B%E1%85%A8%E1%84%8C%E1%85%A6%20%E1%84%8F%E1%85%A9%E1%84%83%E1%85%B3%20%E1%84%8C%E1%85%A1%E1%86%A8%E1%84%89%E1%85%A5%E1%86%BC%20%20.png)

코드가 작성되면 솔리디티 컴파일러 화면에서 맞는 컴파일러 버전을 선택한 후 컴파일을 할 수 있습니다.

![예제 코드 컴파일  ](https://content.gitbook.com/content/iXnTk8WgxaTaNidAuUYQ/blobs/LJzZY3CIOey9BH85BHsM/%E1%84%8B%E1%85%A8%E1%84%8C%E1%85%A6%20%E1%84%8F%E1%85%A9%E1%84%83%E1%85%B3%20%E1%84%8F%E1%85%A5%E1%86%B7%E1%84%91%E1%85%A1%E1%84%8B%E1%85%B5%E1%86%AF%20%20.png)

Deploy & Run Transactions 화면에서 배포하려고 하는 환경을 선택하고 스마트 컨트랙트를 배포하여 테스트를 해볼 수 있습니다. 아래 그림은 Remix에서 제공하는 "Injected Provider - Metamask"를 사용하여 WEMIX3.0 테스트넷에 배포하는 예입니다.

![예제 코드](https://content.gitbook.com/content/iXnTk8WgxaTaNidAuUYQ/blobs/Alc48Id3jJjq0xImREVp/%E1%84%8B%E1%85%A8%E1%84%8C%E1%85%A6%20%E1%84%8F%E1%85%A9%E1%84%83%E1%85%B3.png)

MetaMask를 사용하는 경우 다음과 같이 WEMIX3.0 테스트넷을 추가하여야 합니다. WEMIX3.0 테스트넷의 Gas fee가 이더리움과 다르므로 전송할 때 변경해주어야 합니다. Max fee를 100 GWEI로 Max priority fee를 100.000000001 GWEI로 변경해주면 됩니다.

네트워크 추가와 가스비 설정과 관련한 자세한 내용은 [Use MetaMask](https://docs.wemix.com/ko/quick-start/account/use-metamask)를 참고하십시오.
