github.com/linapex/ethereum-go-chinese@v0.0.0-20190316121929-f8b7a73c3fa1/whisper/whisperv5/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:46</date>
    10  //</624450124076027904>
    11  
    12  
    13  /*
    14  软件包Whisperv5实现了Whisper协议(版本5)。
    15  
    16  Whisper结合了DHTS和数据报消息系统(如UDP)的各个方面。
    17  因此,可以将其与两者进行比较,而不是与
    18  物质/能量二元性(为明目张胆地滥用
    19  基本而美丽的自然法则)。
    20  
    21  Whisper是一个纯粹的基于身份的消息传递系统。低语提供了一个低层次
    22  (非特定于应用程序)但不基于
    23  或者受到低级硬件属性和特性的影响,
    24  尤其是奇点的概念。
    25  **/
    26  
    27  package whisperv5
    28  
    29  import (
    30  	"fmt"
    31  	"time"
    32  )
    33  
    34  const (
    35  	EnvelopeVersion    = uint64(0)
    36  	ProtocolVersion    = uint64(5)
    37  	ProtocolVersionStr = "5.0"
    38  	ProtocolName       = "shh"
    39  
    40  statusCode           = 0 //由耳语协议使用
    41  messagesCode         = 1 //正常低语信息
    42  p2pCode              = 2 //对等消息(由对等方使用,但不再转发)
    43  p2pRequestCode       = 3 //点对点消息,由DAPP协议使用
    44  	NumberOfMessageCodes = 64
    45  
    46  	paddingMask   = byte(3)
    47  	signatureFlag = byte(4)
    48  
    49  	TopicLength     = 4
    50  	signatureLength = 65
    51  	aesKeyLength    = 32
    52  	AESNonceLength  = 12
    53  	keyIdSize       = 32
    54  
    55  MaxMessageSize        = uint32(10 * 1024 * 1024) //邮件的最大可接受大小。
    56  	DefaultMaxMessageSize = uint32(1024 * 1024)
    57  	DefaultMinimumPoW     = 0.2
    58  
    59  padSizeLimit      = 256 //只是一个任意数字,可以在不破坏协议的情况下进行更改(不得超过2^24)
    60  	messageQueueLimit = 1024
    61  
    62  	expirationCycle   = time.Second
    63  	transmissionCycle = 300 * time.Millisecond
    64  
    65  DefaultTTL     = 50 //秒
    66  SynchAllowance = 10 //秒
    67  )
    68  
    69  type unknownVersionError uint64
    70  
    71  func (e unknownVersionError) Error() string {
    72  	return fmt.Sprintf("invalid envelope version %d", uint64(e))
    73  }
    74  
    75  //mail server表示一个邮件服务器,能够
    76  //存档旧邮件以供后续传递
    77  //对同龄人。任何实施都必须确保
    78  //函数是线程安全的。而且,他们必须尽快返回。
    79  //delivermail应使用directmessagescode进行传递,
    80  //以绕过到期检查。
    81  type MailServer interface {
    82  	Archive(env *Envelope)
    83  	DeliverMail(whisperPeer *Peer, request *Envelope)
    84  }
    85