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
블록을 정의하기 위한 도메인입니다. 해당 블록에 포함된 트랜잭션 목록을 하위 객체로 포함합니다.
Property | Type | Description | Required |
---|---|---|---|
hash | string | 블록의 해시(hash) 값, 구분자 | required |
number | integer | 블록 number(index) | required |
timestamp | integer | 블록의 생성 시각 Timestamp | required |
parent | string | 부모 블록의 해시(hash)값 | required |
size | string | 블록의 크기 | required |
gasLimit | string | 블록의 Gas Limit (EVM only) | conditional |
gasUsed | string | 블록에 실제로 포함된 모든 트랜잭션 Gas량의 합 (EVM only) | conditional |
transactions | object | 해당 블록에 포함된 모든 트랜잭션의 목록을 포함하는 객체 | required |
transactions.count | integer | 트랜잭션 목록의 크기 (트랜잭션의 수) | required |
transactions.items | array:transaction array:string | 블록에 포함된 전체 트랜잭션의 목록 블록 조회 API에서는 모든 트랜잭션의 상세를 포함하지 않고 트랜잭션 해시(hash)값의 목록으로 정의되며, 블록 내 트랜잭션 조회 API에서는 실제 모든 트랜잭션 도메인의 목록으로 반환됨. | required |
transactions.page | integer | 트랜잭션 목록 조회 페이징 지원을 위한 페이지 값 | optional |
transactions.rpp | integer | 트랜잭션 목록 조회 시 페이징 지원을 위한 페이지당 표시할 결과의 수 | optional |
path | string | 해당 블록의 리소스 경로 (/{protocol}/{network}/blocks/{hash}) | required |
Transaction
트랜잭션을 정의하기 위한 도메인입니다. 트랜잭션이 포함된 블록 도메인을 상위 객체로 포함하며, 트랜잭션 상세 및 처리 결과를 담고 있는 Receipt 도메인을 하위 객체로 포함합니다.
Property | Type | Description | Required |
---|---|---|---|
hash | string | 트랜잭션의 해시(hash)값, 구분자 | required |
from | string | 트랜잭션의 from 주소 | required |
to | string | 트랜잭션의 to 주소 | required |
data | string | 트랜잭션의 input data | required |
gas | string | 트랜잭션에 처리에 허용하는 최대 소모 gas의 양 | required |
gasPrice | string | 트랜잭션 처리에 적용된 gas 가격 | optional |
maxFeePerGas | string | 트랜잭션 생성자가 설정한 트랜잭션 처리에 허용하는 최대 gas 가격 | optional |
maxPriorityFeePerGas | string | 트랜잭션 생성자가 설정한, 블록 생성자에게 트랜잭션 처리에 대한 보상으로 추가 지불하고자 하는 수수료 | optional |
timetamp | integer | 트랜잭션이 처리된 시각 Timestamp | required |
status | string:enum | 트랜잭션의 처리 상태success ,failed ,pending ,dropped | required |
block | string | 해당 트랜잭션이 포함된 블록의 해시(hash)값 | required |
nonce | string | 트랜잭션의 Nonce값 (16진수) | required |
receipt | object:receipt | 트랜잭션의 Receipt 정보 아래 Receipt 도메인으로 정의됨. | required |
events | object | 해당 트랜잭션이 포함하는 Event 목록 객체 트랜잭션 정보 조회 API 호출 시 ABI(Application Binary Interface) 명세를 요청 Body로 전달하는 경우에 대해, 트랜잭션이 포함하고 있는 Log 정보를 분석하여 이 객체를 반환함. | optional |
events.count | integer | 해당 트랜잭션이 포함하는 Event 목록의 개수 | optional |
events.items | array:event | 해당 트랜잭션이 포함한 Event의 목록 | optional |
events.page | integer | 해당 트랜잭션이 포함한 Event 목록의 페이징 지원을 위한 페이지 값 | optional |
events.rpp | integer | 해당 트랜잭션이 포함한 Event 목록의 페이징 지원을 위한 페이지당 표시할 결과의 수 | optional |
path | string | 해당 트랜잭션 리소스의 경로 (/{protocol}/{network}/transactions/{hash}) | required |
Receipt
트랜잭션의 상세 정보를 포함하고 있는 Receipt 객체입니다. 이 트랜잭션의 수행으로 인해 특정한 Event가 emit된 경우, 해당 Event를 서술하기 위한 log 정보를 포함합니다.
Property | Type | Description | required |
---|---|---|---|
transactionHash | string | 트랜잭션의 해시(hash) | required |
transactionIndex | integer | 트랜잭션의 블록 내 순번 | required |
from | string | 트랜잭션의 from 주소 | required |
to | string | 트랜잭션의 to 주소 | required |
gasUsed | string | 이 트랜잭션 처리에 소모된 gas량 | required |
cumulativeGasUsed | string | 이 트랜잭션이 속한 블록 내에서 0번 트랜잭션부터 이 트랜잭션까지 각 트랜잭션 gasUsed의 총합 | required |
effectiveGasPrice | string | 이 트랜잭션을 처리할 때 결정된 가스당 비용 | required |
contractAddress | string | 컨트랙트 실행을 위한 트랜잭션인 경우, 관련 컨트랙트의 주소 | conditional |
status | string | 트랜잭션의 상태0x1(success) ,0x0(failed) | required |
logsBloom | string | 트랜잭션 실행 결과로 Emit된 Event에 대해 남겨진 모든 log에 대한 Bloom 필터 | required |
logs | array:object | 모든 log의 목록 | required |
logs[i].address | string | log를 남긴 컨트랙트의 주소 | required |
logs[i].topics | array:string | 이 log와 관련된 Event의 Topic 정보 32bytes 문자열의 배열 형태이며, 각 문자열은 Event를 서술하기 위한 정보를 포함합니다. | required |
logs[i].data | string | log의 data | required |
logs[i].logIndex | integer | 트랜잭션 내에서 이 log의 순번 | required |
logs[i].transactionHash | string | 이 log가 포함된 트랜잭션의 해시(hash) | required |
logs[i].transactionIndex | integer | 이 log가 포함된 트랜잭션의 블록 내 순번 | required |