-
Notifications
You must be signed in to change notification settings - Fork 0
/
genesis.go
86 lines (74 loc) · 2.59 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
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
package project
import (
"encoding/json"
sdk "github.com/cosmos/cosmos-sdk/types"
"github.com/furya-official/fury-blockchain/x/project/keeper"
"github.com/furya-official/fury-blockchain/x/project/types"
)
func InitGenesis(ctx sdk.Context, keeper keeper.Keeper, data types.GenesisState) {
// Marshal/Unmarshal account maps into array of AccountMap
accountMapsBz, err := json.Marshal(data.AccountMaps)
if err != nil {
panic(err)
}
var accountMaps []types.AccountMap
err = json.Unmarshal(accountMapsBz, &accountMaps)
if err != nil {
panic(err)
}
// Initialise project docs, account maps, project withdrawals, claims
for i := range data.ProjectDocs {
keeper.SetProjectDoc(ctx, data.ProjectDocs[i])
keeper.SetAccountMap(ctx,
data.ProjectDocs[i].ProjectDid, accountMaps[i])
keeper.SetProjectWithdrawalTransactions(ctx,
data.ProjectDocs[i].ProjectDid, data.WithdrawalsInfos[i])
for j := range data.Claims[i].ClaimsList {
keeper.SetClaim(ctx,
data.ProjectDocs[i].ProjectDid, data.Claims[i].ClaimsList[j])
}
}
// Initialise params
keeper.SetParams(ctx, data.Params)
}
func ExportGenesis(ctx sdk.Context, k keeper.Keeper) *types.GenesisState {
// Export project docs, account maps, project withdrawals
var projectDocs []types.ProjectDoc
var accountMaps []types.AccountMap
var withdrawalInfos []types.WithdrawalInfoDocs
var claims []types.Claims
iterator := k.GetProjectDocIterator(ctx)
for ; iterator.Valid(); iterator.Next() {
projectDoc := k.MustGetProjectDocByKey(ctx, iterator.Key())
accountMap := k.GetAccountMap(ctx, projectDoc.ProjectDid)
withdrawalInfo, _ := k.GetProjectWithdrawalTransactions(ctx, projectDoc.ProjectDid)
var subClaims types.Claims
claimIter := k.GetClaimIterator(ctx, projectDoc.ProjectDid)
for ; claimIter.Valid(); claimIter.Next() {
claim := k.MustGetClaimByKey(ctx, claimIter.Key())
subClaims = types.AppendClaims(subClaims, claim)
}
projectDocs = append(projectDocs, projectDoc)
accountMaps = append(accountMaps, accountMap)
withdrawalInfos = append(withdrawalInfos, withdrawalInfo)
claims = append(claims, subClaims)
}
params := k.GetParams(ctx)
// Marshal/Unmarshal account maps into array of GenesisAccountMap
accountMapsBz, err := json.Marshal(accountMaps)
if err != nil {
panic(err)
}
var genesisAccountMaps []types.GenesisAccountMap
err = json.Unmarshal(accountMapsBz, &genesisAccountMaps)
if err != nil {
panic(err)
}
return &types.GenesisState{
ProjectDocs: projectDocs,
AccountMaps: genesisAccountMaps,
WithdrawalsInfos: withdrawalInfos,
Claims: claims,
Params: params,
}
}