github.com/linapex/ethereum-go-chinese@v0.0.0-20190316121929-f8b7a73c3fa1/swarm/pss/doc.go (about)

     1  
     2  //<developer>
     3  //    <name>linapex 曹一峰</name>
     4  //    <email>linapex@163.com</email>
     5  //    <wx>superexc</wx>
     6  //    <qqgroup>128148617</qqgroup>
     7  //    <url>https://jsq.ink</url>
     8  //    <role>pku engineer</role>
     9  //    <date>2019-03-16 19:16:44</date>
    10  //</624450116513697792>
    11  
    12  
    13  //PSS为Swarm节点提供了devp2p功能,无需在它们之间建立直接的TCP连接。
    14  //
    15  //消息封装在devp2p消息结构“pssmsg”中。这些胶囊使用普通的tcp devp2p从一个节点转发到另一个节点,直到到达目的地:能够成功解密消息的一个或多个节点。
    16  //
    17  //消息路由使用Swarm自己的Kademlia路由完成。可以选择关闭路由,强制将消息发送到所有对等端,类似于耳语协议的行为。
    18  //
    19  //PSS适用于大小有限的消息,通常最多为数千字节。消息本身可以是任何东西;复杂的数据结构或非描述字节序列。
    20  //
    21  //文档可以在自述文件中找到。
    22  //
    23  //有关PSS开发的当前状态和路线图,请参阅https://github.com/ethersphere/swarm/wiki/swarm-dev-progress。
    24  //
    25  //请在https://github.com/ethersphere/go-ethereum上报告问题
    26  //
    27  //请随时在https://gitter.im/ethersphere/pss中提问
    28  //
    29  //话题
    30  //
    31  //PSS消息的加密信封始终包含主题。这是PSS决定对消息采取什么行动的方式。主题仅对可以解密消息的节点可见。
    32  //
    33  //这个“主题”不像电子邮件的主题,而是一个类似于哈希的任意4字节值。可以使用'pss_u*totopic'API方法生成有效的主题。
    34  //
    35  //PSS中的身份
    36  //
    37  //PSS旨在实现完美的黑暗。这意味着使用PSS进行通信的两个节点的最低要求是共享秘密。这个秘密可以是任意字节片,也可以是ECDSA密钥对。
    38  //
    39  //对等密钥可以通过其api调用'pss'setpeerpublickey'和'pss'setsymetrickey'手动添加到pss节点。键总是与主题耦合,并且这些键只对这些主题有效。
    40  //
    41  //连接
    42  //
    43  //PSS中的“连接”是纯虚拟构造。没有适当的机制来确保远程对等机确实存在。实际上,“添加”一个对等节点只涉及节点认为对等节点在那里的观点。它可以将消息发送给远程对等机,发送给直接连接的对等机,然后由该对等机传递消息。但是,如果它不在网络上——或者如果没有到网络的路由——那么消息将永远无法通过转发到达目的地。
    44  //
    45  //在实现devp2p协议栈时,远程对等端的“添加”是实际启动协议通信的一方的先决条件。添加一个有效的对等机“运行”该对等机上的协议,并在主题和该对等机之间添加一个内部映射。它还可以使用devp2p中的主IO结构(p2p.msgreadwriter)发送和接收消息。
    46  //
    47  //在引擎盖下,PSS实现了自己的msgreadwriter,它将msgreadwriter.writemsg与pss.sendraw连接起来,并巧妙地添加了injectmsg方法,通过管道将传入的消息显示在msgreadwriter.readmsg通道上。
    48  //
    49  //一个传入的连接只不过是一个实际的pssmsg,它出现在一个特定的主题中。如果处理程序har已注册到该主题,则消息将传递给它。如果出现以下情况,则构成“新”连接:
    50  //
    51  //-PSS节点从未使用远程对等地址和主题的组合调用addpeer,以及
    52  //
    53  //-PSS节点以前从未从具有此特定主题的远程对等端接收到PSSMSG。
    54  //
    55  //如果是“新”连接,协议将在远程对等机上“运行”,其方式与预先添加协议的方式相同。
    56  //
    57  package pss
    58