aboutsummaryrefslogtreecommitdiffstats
path: root/whisper/whisperv5/envelope.go
diff options
context:
space:
mode:
Diffstat (limited to 'whisper/whisperv5/envelope.go')
-rw-r--r--whisper/whisperv5/envelope.go10
1 files changed, 7 insertions, 3 deletions
diff --git a/whisper/whisperv5/envelope.go b/whisper/whisperv5/envelope.go
index 1b976705d..8812ae207 100644
--- a/whisper/whisperv5/envelope.go
+++ b/whisper/whisperv5/envelope.go
@@ -116,12 +116,16 @@ func (e *Envelope) Seal(options *MessageParams) error {
}
if target > 0 && bestBit < target {
- return errors.New("Failed to reach the PoW target")
+ return errors.New("Failed to reach the PoW target, insufficient work time")
}
return nil
}
+func (e *Envelope) size() int {
+ return len(e.Data) + len(e.Version) + len(e.AESNonce) + len(e.Salt) + 20
+}
+
func (e *Envelope) PoW() float64 {
if e.pow == 0 {
e.calculatePoW(0)
@@ -137,14 +141,14 @@ func (e *Envelope) calculatePoW(diff uint32) {
h = crypto.Keccak256(buf)
firstBit := common.FirstBitSet(common.BigD(h))
x := math.Pow(2, float64(firstBit))
- x /= float64(len(e.Data)) // we only count e.Data, other variable-sized members are checked in Whisper.add()
+ x /= float64(e.size())
x /= float64(e.TTL + diff)
e.pow = x
}
func (e *Envelope) powToFirstBit(pow float64) int {
x := pow
- x *= float64(len(e.Data))
+ x *= float64(e.size())
x *= float64(e.TTL)
bits := math.Log2(x)
bits = math.Ceil(bits)