XDAG技术详解6-块格式(伪块)
伪块是一些命令请求和响应,格式上相对随意,每一个都有点细节上的不同,但总体风格类似。
image-20191128140949189.png说明:
- 第一个8字节:仍然是传输头。
- 第二个8字节:只使用了后面8-bit,head-type=0,sub-type是真正的命令类型,其他位置清零。
- 第三个8字节:大多数时候放start_time,但是不同的命令可能不同。
- 第四个8字节:大多数时候放end_time。
具体到每个不同的命令,细节又略有不同。
-
批量block请求
-
head(field0)
sub-type = 0, //
XDAG_MESSAGE_BLOCKS_REQUEST
start_time位置:批量时间起点。
end_time位置:批量时间终点。
-
field1
第一个8字节放一个request_id,用作消息序列号。后24字节清零。
-
后面field
从field2开始,直接存储统计信息的结构体和所有已知hosts地址。
-
-
批量block请求响应
-
head(field0)
sub-type = 1, //
XDAG_MESSAGE_BLOCKS_REPLY
start_time位置:填充了返回的block数量
end_time位置:保留了与请求内容一致,但实际上无用。
-
field1
保持请求时的request_id不变,返回时候接收者需要用这个校验。
-
后面field
与请求类似,返回block中也填充自己已知的统计信息和hosts地址。
-
-
sums请求
-
head(field0)
sub-type = 2, //
XDAG_MESSAGE_SUMS_REQUEST
start_time位置:sums时间起点。
end_time位置:sums时间终点。
-
field1
与批量block请求相同,放request_id。
-
后面field
与批量block请求相同,放统计信息。
-
-
sums请求响应
除了sub-type=3(
XDAG_MESSAGE_SUMS_REPLY
)外,其他填充模式与批量block请求响应一样。 -
单个block请求
-
head(field0)
sub-type = 6, //
XDAG_MESSAGE_BLOCK_REQUEST
start_time位置:无意义,清零。
end_time位置:无意义,清零。
-
field1
放请求block的hash。
-
后面field
与其他block类似,放统计信息。
-