Block/Transaction

Overview

블록체인에서 블록은 데이터 처리의 기준이 되는 단위에 해당하는 도메인입니다. 네트워크에 참여하는 마이너(Miner) 노드들은 네트워크에 제출 및 전파된 네트워크 상태 변경을 위한 요청, 즉 트랜잭션을 정의된 일정한 조건에 따라 N개 선택하여 블록으로 엮어 제안합니다. 제안된 블록은 Consensus 알고리즘 및 네트워크별 Finality 정책에 따라 최종 블록으로 확정될 수 있으며, 해당 블록에 포함된 트랜잭션들은 처리가 완료된 것으로 간주합니다. 따라서 현재 네트워크에서 생성되고 있는 블록에 대한 정보를 조회하고, 트랜잭션을 처리하고, 트랜잭션의 처리 상태 및 특정 블록에 포함된 트랜잭션들을 추적하는 것은 블록체인 네트워크에 참여하기 위한 분산 어플리케이션의 가장 중요하고 기본적인 요구사항이라고 할 수 있습니다.

루니버스의 Multichain Web3 API에서 제공하는 블록과 트랜잭션 도메인 API들을 활용하면 별도의 노드 운영 및 트래픽 분석 없이도 이러한 요구사항을 구현할 수 있습니다. API를 통해 트랜잭션을 처리하기 위한 예상 수수료를 계산하고 트랜잭션을 생성 및 제출한 뒤, 제출된 트랜잭션들의 상태를 추적하거나, 관심이 있는 특정 이벤트가 발생했는지 여부를 추적해보세요.

📘

블록과 트랜잭션 조회는 REST API로만 가능한가요?

루니버스의 노드 서비스를 사용하고 있다면, Multichain API를 사용하지 않고 각 프로토콜 별 노드에서 제공하는 인터페이스(JSON-RPC 인터페이스)를 직접 사용한 구현도 물론 가능합니다. 각 프로토콜별 노드 인터페이스 문서를 참조해주세요.

Usecases

  • GET listBlocks
    • 대상 프로토콜-네트워크의 최근 N개 블록에 대한 정보를 조회합니다.
    • 최신 블록의 정보 및 블록 Index number를 확인할 수 있습니다.
  • GET getBlockByHashOrNumber
    • 블록 해시(hash)값이나 Index number를 사용하여 특정 블록 정보를 조회합니다.
  • GET listBlockTransactions
    • 특정 블록에 포함된 트랜잭션 목록을 조회합니다.
  • GET getTransactionByHash
    • 트랜잭션의 해시(hash)값으로 특정 트랜잭션의 정보를 조회합니다.
  • GET getGasPrice
    • 네트워크의 현재 Gas price정보를 조회합니다.
  • GET getNextNonce
    • 특정 계정으로부터 다음 트랜잭션 생성하기 위해 사용 가능한 Nonce값을 조회합니다.

Domain

📘

블록체인 입문자이신가요?

블록과 트랜잭션이 실제로 어떻게 처리되는지에 대한 이해가 충분하지 않은 입문자시라면, 블록과 트랜잭션, Receipt 도메인의 각 Property가 의미하는 바를 이해하기 위해 더 많은 정보가 필요하실 수 있을 것 같아요! 입문자를 위한 루니버스 아카데미 컨텐츠가 곧 업데이트 될 예정입니다. 조금만 기다려주세요 🙂

Block

블록을 정의하기 위한 도메인입니다. 해당 블록에 포함된 트랜잭션 목록을 하위 객체로 포함합니다.

PropertyTypeDescriptionRequired
hashstring블록의 해시(hash) 값, 구분자required
numberinteger블록 number(index)required
timestampinteger블록의 생성 시각 Timestamprequired
parentstring부모 블록의 해시(hash)값required
sizestring블록의 크기required
gasLimitstring블록의 Gas Limit (EVM only)conditional
gasUsedstring블록에 실제로 포함된 모든 트랜잭션 Gas량의 합 (EVM only)conditional
transactionsobject해당 블록에 포함된 모든 트랜잭션의 목록을 포함하는 객체required
transactions.countinteger트랜잭션 목록의 크기 (트랜잭션의 수)required
transactions.itemsarray:transaction
array:string
블록에 포함된 전체 트랜잭션의 목록
블록 조회 API에서는 모든 트랜잭션의 상세를 포함하지 않고 트랜잭션 해시(hash)값의 목록으로 정의되며, 블록 내 트랜잭션 조회 API에서는 실제 모든 트랜잭션 도메인의 목록으로 반환됨.
required
transactions.pageinteger트랜잭션 목록 조회 페이징 지원을 위한 페이지 값optional
transactions.rppinteger트랜잭션 목록 조회 시 페이징 지원을 위한 페이지당 표시할 결과의 수optional
pathstring해당 블록의 리소스 경로
(/{protocol}/{network}/blocks/{hash})
required

Transaction

트랜잭션을 정의하기 위한 도메인입니다. 트랜잭션이 포함된 블록 도메인을 상위 객체로 포함하며, 트랜잭션 상세 및 처리 결과를 담고 있는 Receipt 도메인을 하위 객체로 포함합니다.

PropertyTypeDescriptionRequired
hashstring트랜잭션의 해시(hash)값, 구분자required
fromstring트랜잭션의 from 주소required
tostring트랜잭션의 to 주소required
datastring트랜잭션의 input datarequired
gasstring트랜잭션에 처리에 허용하는 최대 소모 gas의 양required
gasPricestring트랜잭션 처리에 적용된 gas 가격optional
maxFeePerGasstring트랜잭션 생성자가 설정한 트랜잭션 처리에 허용하는 최대 gas 가격optional
maxPriorityFeePerGasstring트랜잭션 생성자가 설정한, 블록 생성자에게 트랜잭션 처리에 대한 보상으로 추가 지불하고자 하는 수수료optional
timetampinteger트랜잭션이 처리된 시각 Timestamprequired
statusstring:enum트랜잭션의 처리 상태
success,failed,pending,dropped
required
blockstring해당 트랜잭션이 포함된 블록의 해시(hash)값required
noncestring트랜잭션의 Nonce값 (16진수)required
receiptobject:receipt트랜잭션의 Receipt 정보
아래 Receipt 도메인으로 정의됨.
required
eventsobject해당 트랜잭션이 포함하는 Event 목록 객체
트랜잭션 정보 조회 API 호출 시 ABI(Application Binary Interface) 명세를 요청 Body로 전달하는 경우에 대해, 트랜잭션이 포함하고 있는 Log 정보를 분석하여 이 객체를 반환함.
optional
events.countinteger해당 트랜잭션이 포함하는 Event 목록의 개수optional
events.itemsarray:event해당 트랜잭션이 포함한 Event의 목록optional
events.pageinteger해당 트랜잭션이 포함한 Event 목록의 페이징 지원을 위한 페이지 값optional
events.rppinteger해당 트랜잭션이 포함한 Event 목록의 페이징 지원을 위한 페이지당 표시할 결과의 수optional
pathstring해당 트랜잭션 리소스의 경로
(/{protocol}/{network}/transactions/{hash})
required

Receipt

트랜잭션의 상세 정보를 포함하고 있는 Receipt 객체입니다. 이 트랜잭션의 수행으로 인해 특정한 Event가 emit된 경우, 해당 Event를 서술하기 위한 log 정보를 포함합니다.

PropertyTypeDescriptionrequired
transactionHashstring트랜잭션의 해시(hash)required
transactionIndexinteger트랜잭션의 블록 내 순번 required
fromstring트랜잭션의 from 주소 required
tostring트랜잭션의 to 주소required
gasUsedstring이 트랜잭션 처리에 소모된 gas량required
cumulativeGasUsedstring이 트랜잭션이 속한 블록 내에서 0번 트랜잭션부터 이 트랜잭션까지 각 트랜잭션 gasUsed의 총합required
effectiveGasPricestring이 트랜잭션을 처리할 때 결정된 가스당 비용required
contractAddressstring컨트랙트 실행을 위한 트랜잭션인 경우, 관련 컨트랙트의 주소conditional
statusstring트랜잭션의 상태
0x1(success),0x0(failed)
required
logsBloomstring트랜잭션 실행 결과로 Emit된 Event에 대해 남겨진 모든 log에 대한 Bloom 필터required
logsarray:object모든 log의 목록required
logs[i].addressstringlog를 남긴 컨트랙트의 주소required
logs[i].topicsarray:string이 log와 관련된 Event의 Topic 정보
32bytes 문자열의 배열 형태이며, 각 문자열은 Event를 서술하기 위한 정보를 포함합니다.
required
logs[i].datastringlog의 datarequired
logs[i].logIndexinteger트랜잭션 내에서 이 log의 순번required
logs[i].transactionHashstring이 log가 포함된 트랜잭션의 해시(hash)required
logs[i].transactionIndexinteger이 log가 포함된 트랜잭션의 블록 내 순번required