aboutsummaryrefslogtreecommitdiffstats
path: root/ethpub/types.go
blob: c902afc564007b9f44f8a91bfe8f07923b452a6a (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
package ethpub

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

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

// Creates a new QML Block from a chain block
func NewPBlock(block *ethchain.Block) *PBlock {
    info := block.BlockInfo()
    hash := hex.EncodeToString(block.Hash())

    return &PBlock{Number: int(info.Number), Hash: hash}
}

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) IsContract() bool {
    if c.object != nil {
        return len(c.object.Script()) > 0
    }

    return false
}

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()}
}