> 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/4./transaction.md).

# 트랜잭션(Transaction)

### **트랜잭션**

<figure><img src="https://2462457462-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FLf9vwRuaws92ULgGvzTi%2Fuploads%2F40Tex4KXbf1nCqZgb7Tj%2Fimage.png?alt=media&amp;token=91c99b92-9cb8-4eb3-aca9-7181fcdecd07" alt=""><figcaption></figcaption></figure>

트랜잭션이란 외부 소유 계정(EOA)의 개인키에 의해 서명되어 네트워크에 전파되고, 이더리움 블록체인의 **상태를 변화**시키는 모든 요청이다. ETH 송금, 스마트 컨트랙트 배포, 스마트 컨트랙트 호출과 같이 기존 블록체인의 상태를 변화시키는 모든 행위는 트랜잭션으로 간주된다.

한편, 입력 값만을 이용한 연산(pure)이나 블록체인 상의 정보를 열람(view)하는 행위는 이더리움 블록체인의 상태를 변경시키지 않으므로 트랜잭션을 발생시키지 않는다.

* view, pure

```solidity
function getStoredNumber() public view returns (uint) {
    return storedNumber;
}
    
function add(uint a, uint b) public pure returns (uint) {
    return a + b;
}
```

사용자가 **이더리움 클라이언트 API**를 통해 트랜잭션을 발생시키면 해당 노드는 API의 요청을 받아 트랜잭션을 수신하고 트랜잭션의 **유효성을 검증**한다. 만약 유효한 트랜잭션이라고 판단되면 해당 노드는 트랜잭션을 자신의 메모리 풀(memory pool)에 추가함과 동시에 P2P 프로토콜을 통해 주변 노드들에게 트랜잭션 정보를 전파한다.

* **이더리움 클라이언트 API**: 사용자 지갑이나 DApp과 같은 클라이언트 프로그램이 이더리움 네트워크 노드와 데이터를 주고받고 트랜잭션을 요청할 수 있도록 표준화된 통신 통로를 제공하는 인터페이스(예, RPC URL)
