본문으로 건너뛰기

블록 레이아웃

정보

이 페이지의 이해도를 극대화하려면 TL-B 언어를 숙지하는 것이 좋습니다.

블록체인의 블록은 새로운 거래의 기록으로, 완료되면 이 탈중앙화된 원장의 영구적이고 불변하는 부분으로 블록체인에 추가됩니다. 각 블록에는 거래 데이터, 시간, 이전 블록에 대한 참조 등의 정보가 포함되어 블록 체인을 형성합니다.

TON 블록체인의 블록은 시스템의 전반적인 복잡성으로 인해 다소 복잡한 구조를 가지고 있습니다. 이 페이지에서는 이러한 블록의 구조와 레이아웃에 대해 설명합니다.

블록

블록의 원시 TL-B 체계는 다음과 같습니다:

block#11ef55aa global_id:int32
info:^BlockInfo value_flow:^ValueFlow
state_update:^(MERKLE_UPDATE ShardState)
extra:^BlockExtra = Block;

각 분야를 자세히 살펴보겠습니다.

global_id:int32

이 블록이 생성된 네트워크의 ID입니다. 메인넷의 경우 -239, 테스트넷의 경우 -3입니다.

정보:^BlockInfo

이 필드에는 버전, 시퀀스 번호, 식별자 및 기타 플래그와 같은 블록에 대한 정보가 포함되어 있습니다.

block_info#9bc7a987 version:uint32
not_master:(## 1)
after_merge:(## 1) before_split:(## 1)
after_split:(## 1)
want_split:Bool want_merge:Bool
key_block:Bool vert_seqno_incr:(## 1)
flags:(## 8) { flags <= 1 }
seq_no:# vert_seq_no:# { vert_seq_no >= vert_seqno_incr }
{ prev_seq_no:# } { ~prev_seq_no + 1 = seq_no }
shard:ShardIdent gen_utime:uint32
start_lt:uint64 end_lt:uint64
gen_validator_list_hash_short:uint32
gen_catchain_seqno:uint32
min_ref_mc_seqno:uint32
prev_key_block_seqno:uint32
gen_software:flags . 0?GlobalVersion
master_ref:not_master?^BlkMasterInfo
prev_ref:^(BlkPrevInfo after_merge)
prev_vert_ref:vert_seqno_incr?^(BlkPrevInfo 0)
= BlockInfo;
필드유형설명
'버전'uint32블록 구조의 버전입니다.
not_master(## 1)이 블록이 마스터체인 블록인지 여부를 나타내는 플래그입니다.
after_merge(## 1)이 블록이 두 개의 샤드체인이 병합된 직후에 생성되어 두 개의 부모 블록을 가지고 있는지를 나타내는 플래그입니다.
before_split(## 1)해당 블록이 샤드체인 분할 직전에 생성되었는지를 나타내는 플래그입니다.
after_split(## 1)해당 블록이 샤드체인 분할 직후에 생성되었는지를 나타내는 플래그입니다.
want_splitBool샤드체인 분할을 원하는지 여부를 나타내는 플래그입니다.
want_mergeBool샤드체인 병합을 원하는지 여부를 나타내는 플래그입니다.
키_블록Bool이 블록이 키 블록인지 여부를 나타내는 플래그입니다.
VERT_SEQNO_INCR(## 1)수직 시퀀스 번호의 증분.
'플래그'(## 8)블록에 대한 추가 플래그.
seq_no#블록과 관련된 시퀀스 번호입니다.
VERT_SEQ_NO#블록과 관련된 세로 시퀀스 번호입니다.
샤드샤드아이덴트이 블록이 속한 샤드의 식별자입니다.
gen_utimeuint32블록의 생성 시간입니다.
start_ltuint64블록과 연결된 논리적 시간을 시작합니다.
END_LTuint64블록과 관련된 논리적 시간을 종료합니다.
gen_validator_list_hash_shortuint32이 블록을 생성하는 시점의 유효성 검사기 목록과 관련된 짧은 해시입니다.
GEN_CATCHAIN_SEQNOuint32이 블록과 관련된 캐치인 시퀀스 번호입니다.
min_ref_mc_seqnouint32참조된 마스터체인 블록의 최소 시퀀스 번호입니다.
PREV_KEY_BLOCK_SEQNOuint32이전 키 블록의 시퀀스 번호입니다.
gen_software글로벌 버전블록을 생성한 소프트웨어의 버전입니다. 버전의 첫 번째 비트가 1`로 설정된 경우에만 표시됩니다.
master_refBlkMasterInfo블록이 마스터가 아닌 경우 마스터 블록에 대한 참조입니다. 참조 블록에 저장됩니다.
prev_refBlkPrevInfo after_merge이전 블록에 대한 참조입니다. 참조에 저장됩니다.
prev_vert_refBlkPrevInfo 0수직 시퀀스에서 이전 블록이 있는 경우 해당 블록에 대한 참조입니다. 참조에 저장됩니다.

value_flow:^ValueFlow

이 필드는 징수된 수수료와 통화와 관련된 기타 거래를 포함하여 블록 내 통화의 흐름을 나타냅니다.

value_flow#b8e48dfb ^[ from_prev_blk:CurrencyCollection
to_next_blk:CurrencyCollection
imported:CurrencyCollection
exported:CurrencyCollection ]
fees_collected:CurrencyCollection
^[
fees_imported:CurrencyCollection
recovered:CurrencyCollection
created:CurrencyCollection
minted:CurrencyCollection
] = ValueFlow;
필드유형설명
FROM_PREV_BLK`[CurrencyCollection](/개발/데이터 형식/msg-tlb#currencycollection)이전 블록의 통화 흐름을 나타냅니다.
TO_NEXT_BLK`[CurrencyCollection](/개발/데이터 형식/msg-tlb#currencycollection)다음 블록으로의 통화 흐름을 나타냅니다.
수입된[CurrencyCollection](/개발/데이터 형식/msg-tlb#currencycollection)블록으로 가져온 통화의 흐름을 나타냅니다.
'내보내기'커런시 컬렉션블록에서 내보낸 통화의 흐름을 나타냅니다.
수수료_수집된커런시 컬렉션블록에서 징수된 수수료의 총액입니다.
수수료_수입커런시 컬렉션블록으로 가져온 수수료의 양입니다. 마스터체인에서만 0이 아닙니다.
'복구됨'커런시 컬렉션블록에서 회수된 화폐의 양입니다. 마스터체인에서만 0이 아닙니다.
생성된`커런시 컬렉션블록에 새로 생성된 화폐의 양입니다. 마스터체인에서만 0이 아닙니다.
'발행된'커런시 컬렉션블록에서 발행된 화폐의 양입니다. 마스터체인에서만 0이 아닙니다.

stateupdate:^(머클업데이트 샤드스테이트)

이 필드는 샤드 상태의 업데이트를 나타냅니다.

!merkle_update#02 {X:Type} old_hash:bits256 new_hash:bits256
old:^X new:^X = MERKLE_UPDATE X;
필드유형설명
OLD_HASHbits256샤드 상태의 이전 해시입니다.
new_hashbits256샤드 상태의 새 해시입니다.
old#샤드스테이트샤드의 이전 상태입니다. 참조에 저장됩니다.
새로운#샤드스테이트샤드의 새 상태입니다. 참조에 저장됩니다.

샤드 상태

샤드 상태`에는 샤드에 대한 정보 또는 이 샤드가 분할된 경우 왼쪽과 오른쪽으로 분할된 부분에 대한 정보가 포함될 수 있습니다.

_ ShardStateUnsplit = ShardState;
split_state#5f327da5 left:^ShardStateUnsplit right:^ShardStateUnsplit = ShardState;

샤드 상태 분할되지 않음

shard_state#9023afe2 global_id:int32
shard_id:ShardIdent
seq_no:uint32 vert_seq_no:#
gen_utime:uint32 gen_lt:uint64
min_ref_mc_seqno:uint32
out_msg_queue_info:^OutMsgQueueInfo
before_split:(## 1)
accounts:^ShardAccounts
^[ overload_history:uint64 underload_history:uint64
total_balance:CurrencyCollection
total_validator_fees:CurrencyCollection
libraries:(HashmapE 256 LibDescr)
master_ref:(Maybe BlkMasterInfo) ]
custom:(Maybe ^McStateExtra)
= ShardStateUnsplit;
필드유형필수설명
글로벌_IDint32이 샤드가 속한 네트워크의 ID입니다. 메인넷의 경우 -239, 테스트넷의 경우 -3입니다.
shard_id샤드아이덴트샤드의 식별자입니다.
seq_nouint32이 샤드체인과 관련된 최신 시퀀스 번호입니다.
VERT_SEQ_NO#이 샤드체인과 관련된 최신 수직 시퀀스 번호입니다.
gen_utimeuint32샤드 생성과 관련된 생성 시간입니다.
gen_ltuint64샤드 생성과 관련된 논리적 시간입니다.
min_ref_mc_seqnouint32참조된 최신 마스터체인 블록의 시퀀스 번호입니다.
OUT_MSG_QUEUE_INFO아웃메시지 대기열 정보이 샤드의 아웃 메시지 큐에 대한 정보입니다. 참조에 저장됩니다.
before_split## 1이 샤드체인의 다음 블록에서 분할할지 여부를 나타내는 플래그입니다.
계정샤드 계정샤드에 있는 계정의 상태입니다. 참조에 저장됩니다.
오버로드_기록uint64샤드에 대한 과부하 이벤트 기록. 샤딩을 통한 로드 밸런싱에 사용됩니다.
언더로드_역사uint64샤드에 대한 과부하 이벤트 기록. 샤딩을 통한 로드 밸런싱에 사용됩니다.
총액_잔액[CurrencyCollection](/개발/데이터 형식/msg-tlb#currencycollection)샤드의 총 잔액입니다.
총_검증자_수수료[CurrencyCollection](/개발/데이터 형식/msg-tlb#currencycollection)샤드에 대한 총 유효성 검사기 수수료입니다.
라이브러리해시맵E 256 LibDescr이 샤드에 있는 라이브러리 설명의 해시맵입니다. 현재 마스터체인에서만 비어 있지 않습니다.
master_refBlkMasterInfo아니요마스터 블록 정보에 대한 참조입니다.
custom맥스테이트 엑스트라아니요샤드 상태에 대한 사용자 지정 추가 데이터. 이 필드는 마스터체인에만 존재하며 모든 마스터체인 관련 데이터를 포함합니다. 참조에 저장됩니다.

샤드 상태 분할

필드유형설명
'왼쪽'#샤드스테이트언스플릿왼쪽 분할 샤드의 상태입니다. 레퍼런스에 저장됩니다.
right#샤드스테이트언스플릿오른쪽 분할 샤드의 상태입니다. 참조에 저장됩니다.

추가:^BlockExtra

이 필드에는 블록에 대한 추가 정보가 포함되어 있습니다.

block_extra in_msg_descr:^InMsgDescr
out_msg_descr:^OutMsgDescr
account_blocks:^ShardAccountBlocks
rand_seed:bits256
created_by:bits256
custom:(Maybe ^McBlockExtra) = BlockExtra;
필드유형필수설명
IN_MSG_DESCRInMsgDescr블록에 들어오는 메시지에 대한 설명자입니다. 참조에 저장됩니다.
OUT_MSG_DESCROutMsgDescr블록에 있는 발신 메시지의 설명자입니다. 참조에 저장됩니다.
계정_블록`샤드 계정 블록샤드에 할당된 계정 상태의 모든 업데이트와 함께 블록에서 처리된 모든 트랜잭션의 모음입니다. 참조에 저장됩니다.
rand_seedbits256블록의 무작위 시드입니다.
created_bybits256블록을 생성한 엔티티(일반적으로 유효성 검사자의 공개 키)입니다.
custom맥블록엑스트라아니요이 필드는 마스터체인에만 존재하며 모든 마스터체인 관련 데이터를 포함합니다. 블록에 대한 사용자 지정 추가 데이터. 참조에 저장됩니다.

맥블록엑스트라

이 필드에는 마스터체인 블록에 대한 추가 정보가 포함되어 있습니다.

masterchain_block_extra#cca5
key_block:(## 1)
shard_hashes:ShardHashes
shard_fees:ShardFees
^[ prev_blk_signatures:(HashmapE 16 CryptoSignaturePair)
recover_create_msg:(Maybe ^InMsg)
mint_msg:(Maybe ^InMsg) ]
config:key_block?ConfigParams
= McBlockExtra;
필드유형필수설명
키_블록## 1블록이 키 블록인지 여부를 나타내는 플래그입니다.
shard_해시샤드해시해당 샤드체인의 최신 블록 해시입니다.
shard_fees샤드 수수료이 블록의 모든 샤드에서 징수된 총 수수료입니다.
prev_blk_signatures해시맵E 16 암호화 서명 쌍이전 블록 서명.
복구생성메시지`InMsg아니요추가 통화 복구와 관련된 메시지(있는 경우)입니다. 참조에 저장됩니다.
mint_msgInMsg아니요추가 통화 발행과 관련된 메시지(있는 경우)입니다. 참조에 저장됩니다.
config구성 매개변수아니요이 블록의 실제 구성 매개변수입니다. 이 필드는 key_block이 설정된 경우에만 표시됩니다.

참고 항목