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

# 스마트 컨트랙트

스마트 컨트랙트는 이더리움 블록체인에서 특정 조건이 충족될 때 자동으로 실행되는 프로그래밍된 계약이다. 이는 중개자 없이 익명의 당사자 간에 안전하고 신뢰할 수 있는 거래를 가능하게 하며, 계약의 조건이 코드 형태로 **블록체인에 기록되고 자동으로 이행**된다.

이더리움에서 스마트 컨트랙트는 주로 솔리디티(Solidity) 프로그래밍 언어로 작성되며, 이더리움 가상 머신(EVM, Ethereum Virtual Machine)이라는 런타임 환경에서 실행된다.

***

### 스마트 컨트랙트 실행 흐름

1. **트랜잭션 생성**: 사용자는 스마트 컨트랙트를 호출하는 트랜잭션을 생성하고, 필요한 가스를 지정한다.
2. **트랜잭션 전파**: 트랜잭션은 네트워크를 통해 전파되어, 블록에 포함될 준비를 한다.
3. **블록 생성**: 검증자는 트랜잭션을 포함한 블록을 생성하고, 이를 네트워크에 전파한다.
4. **EVM 실행**: 각 노드는 블록에 포함된 트랜잭션을 순차적으로 실행하여 스마트 컨트랙트를 실행한다.
5. **상태 업데이트**: 스마트 컨트랙트의 실행 결과는 블록체인에 기록되어, 상태가 업데이트된다.

<figure><img src="https://2462457462-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FLf9vwRuaws92ULgGvzTi%2Fuploads%2F2zaju6yRcz3dc0wdzFdg%2Fimage.png?alt=media&amp;token=0a85c3ac-9aee-4a22-9fc2-da8ada62b928" alt=""><figcaption><p>[출처] Smart Contract: Attacks and Protections</p></figcaption></figure>

***

### 가스(gas) <a href="#gas" id="gas"></a>

가스는 이더리움에서 무한 루프에 빠지는 것을 방지하기 위해 도입된 개념이다. 한 블록에 담을 수 있는 가스량이 정해져 있기 때문에, 스마트 컨트랙트 코드를 **무한히 실행시킬 수 없다**.

#### 가스의 중요성

가스는 DoS(서비스 거부 공격) 방지책으로 작용한다. 아래와 같은 공격으로부터 방어할 수 있다.

* 복잡한 계산을 반복 실행해 네트워크 과부하를 유도하는 공격
* 스마트 컨트랙트 호출을 무한 반복하여 검증자 리소스를 소모시키려는 공격

가스가 소진되면 스마트 컨트랙트 실행이 중단된다. 이때 결과는 무효 처리되며 이미 소비된 가스는 환불되지 않는다.
