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