aboutsummaryrefslogtreecommitdiffstats
path: root/state/manifest.go
blob: 994019a086f21d1c452bcd43ddfd38ab6554c57f (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
package state

import (
    "fmt"
    "math/big"
)

// Object manifest
//
// The object manifest is used to keep changes to the state so we can keep track of the changes
// that occurred during a state transitioning phase.
type Manifest struct {
    Messages Messages
}

func NewManifest() *Manifest {
    m := &Manifest{}
    m.Reset()

    return m
}

func (m *Manifest) Reset() {
    m.Messages = nil
}

func (self *Manifest) AddMessage(msg *Message) *Message {
    self.Messages = append(self.Messages, msg)

    return msg
}

func (self *Manifest) SetHash(hash []byte) {
    for _, message := range self.Messages {
        message.Block = hash
    }
}

type Messages []*Message
type Message struct {
    To, From  []byte
    Input     []byte
    Output    []byte
    Path      int
    Origin    []byte
    Timestamp int64
    Coinbase  []byte
    Block     []byte
    Number    *big.Int
    Value     *big.Int

    ChangedAddresses [][]byte
}

func (self *Message) AddStorageChange(addr []byte) {
    self.ChangedAddresses = append(self.ChangedAddresses, addr)
}

func (self *Message) String() string {
    return fmt.Sprintf("Message{to: %x from: %x input: %x output: %x origin: %x coinbase: %x block: %x number: %v timestamp: %d path: %d value: %v", self.To, self.From, self.Input, self.Output, self.Origin, self.Coinbase, self.Block, self.Number, self.Timestamp, self.Path, self.Value)
}