/
genesis.go
65 lines (55 loc) · 1.47 KB
/
genesis.go
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
package types
import (
"encoding/json"
"github.com/hyperledger/burrow/acm/acmstate"
"github.com/hyperledger/burrow/binary"
"github.com/hyperledger/burrow/crypto"
)
type Contract struct {
Address crypto.Address `json:"address"`
Code CVMCode `json:"code"`
Storage []Storage `json:"storage"`
Abi []byte `json:"abi"`
Meta []ContractMeta `json:"meta"`
}
type ContractMeta struct {
CodeHash []byte
MetadataHash []byte
}
type Storage struct {
Key binary.Word256 `json:"key"`
Value []byte `json:"value"`
}
type Metadata struct {
Hash acmstate.MetadataHash `json:"hash"`
Metadata string `json:"metadata"`
}
// GenesisState is a cvm genesis state.
type GenesisState struct {
// GasRate defines the gas exchange rate between Cosmos gas and CVM gas.
// CVM gas equals to Cosmos Gas * gasRate.
GasRate uint64 `json:"gasrate"`
Contracts []Contract `json:"contracts"`
Metadata []Metadata `json:"metadata"`
}
// NewGenesisState creates a new GenesisState object.
func NewGenesisState(rate uint64) GenesisState {
return GenesisState{
GasRate: rate,
}
}
// DefaultGenesisState creates a default GenesisState object.
func DefaultGenesisState() GenesisState {
return GenesisState{
GasRate: DefaultGasRate,
}
}
// ValidateGenesis validates cvm genesis data.
func ValidateGenesis(bz json.RawMessage) error {
var data GenesisState
err := ModuleCdc.UnmarshalJSON(bz, &data)
if err != nil {
return err
}
return nil
}