aboutsummaryrefslogtreecommitdiffstats
path: root/ethpub/types.go
blob: 7194de372ed663f9827b9da3480c6d748a27d64b (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
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
package ethpub

import (
    "encoding/hex"
    "github.com/ethereum/eth-go/ethchain"
    "github.com/ethereum/eth-go/ethutil"
    "strings"
)

// Block interface exposed to QML
type PBlock struct {
    ref    *ethchain.Block
    Number int    `json:"number"`
    Hash   string `json:"hash"`
}

// Creates a new QML Block from a chain block
func NewPBlock(block *ethchain.Block) *PBlock {
    if block == nil {
        return nil
    }

    return &PBlock{ref: block, Number: int(block.Number.Uint64()), Hash: ethutil.Hex(block.Hash())}
}

func (self *PBlock) ToString() string {
    if self.ref != nil {
        return self.ref.String()
    }

    return ""
}

type PTx struct {
    Value, Hash, Address string
    Contract             bool
}

func NewPTx(tx *ethchain.Transaction) *PTx {
    hash := hex.EncodeToString(tx.Hash())
    sender := hex.EncodeToString(tx.Recipient)
    isContract := len(tx.Data) > 0

    return &PTx{Hash: hash, Value: ethutil.CurrencyToString(tx.Value), Address: sender, Contract: isContract}
}

type PKey struct {
    Address    string `json:"address"`
    PrivateKey string `json:"privateKey"`
    PublicKey  string `json:"publicKey"`
}

func NewPKey(key *ethutil.KeyPair) *PKey {
    return &PKey{ethutil.Hex(key.Address()), ethutil.Hex(key.PrivateKey), ethutil.Hex(key.PublicKey)}
}

type PReceipt struct {
    CreatedContract bool   `json:"createdContract"`
    Address         string `json:"address"`
    Hash            string `json:"hash"`
    Sender          string `json:"sender"`
}

func NewPReciept(contractCreation bool, creationAddress, hash, address []byte) *PReceipt {
    return &PReceipt{
        contractCreation,
        ethutil.Hex(creationAddress),
        ethutil.Hex(hash),
        ethutil.Hex(address),
    }
}

type PStateObject struct {
    object *ethchain.StateObject
}

func NewPStateObject(object *ethchain.StateObject) *PStateObject {
    return &PStateObject{object: object}
}

func (c *PStateObject) GetStorage(address string) string {
    // Because somehow, even if you return nil to QML it
    // still has some magical object so we can't rely on
    // undefined or null at the QML side
    if c.object != nil {
        val := c.object.GetMem(ethutil.Big("0x" + address))

        return val.BigInt().String()
    }

    return ""
}

func (c *PStateObject) Value() string {
    if c.object != nil {
        return c.object.Amount.String()
    }

    return ""
}

func (c *PStateObject) Address() string {
    if c.object != nil {
        return ethutil.Hex(c.object.Address())
    }

    return ""
}

func (c *PStateObject) Nonce() int {
    if c.object != nil {
        return int(c.object.Nonce)
    }

    return 0
}

func (c *PStateObject) Root() string {
    if c.object != nil {
        return ethutil.Hex(ethutil.NewValue(c.object.State().Root()).Bytes())
    }

    return "<err>"
}

func (c *PStateObject) IsContract() bool {
    if c.object != nil {
        return len(c.object.Script()) > 0
    }

    return false
}

func (c *PStateObject) Script() string {
    if c.object != nil {
        return strings.Join(ethchain.Disassemble(c.object.Script()), " ")
    }

    return ""
}

type PStorageState struct {
    StateAddress string
    Address      string
    Value        string
}

func NewPStorageState(storageObject *ethchain.StorageState) *PStorageState {
    return &PStorageState{ethutil.Hex(storageObject.StateAddress), ethutil.Hex(storageObject.Address), storageObject.Value.String()}
}