====== DHT 协议结构 ======
===== 用户发贴 =====
用户的发贴是B编码后的结构,并且具有以下字段:
"userpost" :
{
"n" : username,
"k" : seq number,
"msg" : message,
"time" : unix utc,
"height" : best height at user (number of blocks),
"lastk" : seq number of previous public post -opt,
"dm" : encrypted message (dm) -opt,
"rt" : original userpost - opt,
"sig_rt" : sig of rt - opt,
"reply" : - opt,
{
"n" : reference username,
"k" : reference k,
}
}
"sig_userpost" : signature of bencoded "userpost" by user "n"
===== 基本结构 =====
例如在 [[zh:开发:dht_协议:apis#getData]] 和 [[zh:开发:dht_协议:apis#putData]] 中的DHT命令
{
"p" : {
"height" : number of blocks at time it was created,
"seq" : update sequence (for single type values),
"target" : {
"n" : user name or hashtag name etc,
"r" : name of the resource,
"t" : either "s" (single) or "m" (multi)
},
"time" : unix utc timestamp in seconds,
"v" : this is the actual value (string, dict etc)
},
"sig_p" : signature of "p" contents (bencoded),
"sig_user" : user signing this
}
每一个资源在关注列表中定义了什么将要到上面“v”值。
==== 资料 ====
"target": {"n":username,"r":"profile","t":"s"}
{
"fullname" : presentation name,
"bio" : short bio,
"location" : location,
"url" : user home page url,
"background" : background img url
}
==== 头像 ====
"target": {"n":username,"r":"avatar","t":"s"}
嵌入式图片 (最大 4kB):
''"data:image/jpg;base64,/9j..."''
或者链接到外部图片:
''"http://www.gravatar.com/avatar/205e460b..."''
==== 关注 ====
"target": {"n":username,"r":"following" + N,"t":"s"}
这是一个关注指定用户的列表。因为在DHT网络中存储的空间限制,这个列表或许被通过增加中的N值(从1开始)分成数页。N被作为字符串连接在一起到“r”字段。
["user1","user2","user3"...]
必须有一个与最后一页N + 1的空列表。
==== 帖子 ====
"target": {"n":username,"r":"post" + K,"t":"s"}
这是一个用户"n"的 K-th (公开) 帖子,在 "userpost" 中定义。
==== 状态 ====
"target": {"n":username,"r":"status","t":"s"}
这个资源包含了用户最后的发贴。因为一个相同资源被更新数次对于“seq”列的增长很重要。事实上,“seq” = K。
==== 回复 ====
"target": {"n":username,"r":"replies" + K,"t":"m"}
这是一个回复用户"n"的K-th帖子列表。它包括了帖子本身。因为它是一个“m”类型,一个新帖子可能被任何一个有效用户添加到这个资源中。
==== 转推 ====
"target": {"n":username,"r":"rts" + K,"t":"m"}
这是一个RTs (转推)用户"n"的K-th的帖子列表。它包括了帖子本身。因为它是一个“m”类型,一个新帖子可能被任何一个有效用户添加到这个资源中。
==== hashtag ====
"target": {"n":tag,"r":"hashtag","t":"m"}
这是一个包含 hashtag "n" 的帖子列表。它包括了帖子本身。因为它是一个“m”类型,一个新帖子可能被任何一个有效用户添加到这个资源中。
==== 提及 ====
"target": {"n":username,"r":"mention","t":"m"}
这是一个提及@username的帖子列表。它包括了帖子本身。因为它是一个“m”类型,一个新帖子可能被任何一个有效用户添加到这个资源中。
==== 跟踪 ====
"target": {"n":username,"r":"tracker","t":"m"}
这是一个特殊的只读资源,用于获取的用户群分发帖子所用的节点。