Refactored the SonrApp struct by reorganizing and grouping the keepers and other fields.

This commit is contained in:
Prad Nukala 2024-07-07 17:45:08 -04:00 committed by Prad Nukala (aider)
parent f6b04e1599
commit 6c1c3d5f8f
8 changed files with 50 additions and 433 deletions

View File

@ -211,67 +211,53 @@ var (
// SonrApp extended ABCI application // SonrApp extended ABCI application
type SonrApp struct { type SonrApp struct {
*baseapp.BaseApp BankKeeper bankkeeper.BaseKeeper
legacyAmino *codec.LegacyAmino AccountKeeper authkeeper.AccountKeeper
appCodec codec.Codec GroupKeeper groupkeeper.Keeper
txConfig client.TxConfig TokenFactoryKeeper tokenfactorykeeper.Keeper
interfaceRegistry types.InterfaceRegistry IBCFeeKeeper ibcfeekeeper.Keeper
ParamsKeeper paramskeeper.Keeper
// keys to access the substores NFTKeeper nftkeeper.Keeper
keys map[string]*storetypes.KVStoreKey AuthzKeeper authzkeeper.Keeper
tkeys map[string]*storetypes.TransientStoreKey FeeGrantKeeper feegrantkeeper.Keeper
memKeys map[string]*storetypes.MemoryStoreKey OracleKeeper oraclekeeper.Keeper
interfaceRegistry types.InterfaceRegistry
// keepers txConfig client.TxConfig
AccountKeeper authkeeper.AccountKeeper appCodec codec.Codec
BankKeeper bankkeeper.BaseKeeper configurator module.Configurator
CapabilityKeeper *capabilitykeeper.Keeper StakingKeeper *stakingkeeper.Keeper
StakingKeeper *stakingkeeper.Keeper tkeys map[string]*storetypes.TransientStoreKey
SlashingKeeper slashingkeeper.Keeper CrisisKeeper *crisiskeeper.Keeper
MintKeeper mintkeeper.Keeper UpgradeKeeper *upgradekeeper.Keeper
DistrKeeper distrkeeper.Keeper legacyAmino *codec.LegacyAmino
GovKeeper govkeeper.Keeper sm *module.SimulationManager
CrisisKeeper *crisiskeeper.Keeper
UpgradeKeeper *upgradekeeper.Keeper
ParamsKeeper paramskeeper.Keeper
AuthzKeeper authzkeeper.Keeper
EvidenceKeeper evidencekeeper.Keeper
FeeGrantKeeper feegrantkeeper.Keeper
GroupKeeper groupkeeper.Keeper
NFTKeeper nftkeeper.Keeper
ConsensusParamsKeeper consensusparamkeeper.Keeper
CircuitKeeper circuitkeeper.Keeper
IBCKeeper *ibckeeper.Keeper // IBC Keeper must be a pointer in the app, so we can SetRouter on it correctly
IBCFeeKeeper ibcfeekeeper.Keeper
ICAControllerKeeper icacontrollerkeeper.Keeper
ICAHostKeeper icahostkeeper.Keeper
TransferKeeper ibctransferkeeper.Keeper
// Custom
TokenFactoryKeeper tokenfactorykeeper.Keeper
POAKeeper poakeeper.Keeper
GlobalFeeKeeper globalfeekeeper.Keeper
PacketForwardKeeper *packetforwardkeeper.Keeper
ScopedIBCKeeper capabilitykeeper.ScopedKeeper
ScopedICAHostKeeper capabilitykeeper.ScopedKeeper
ScopedICAControllerKeeper capabilitykeeper.ScopedKeeper
ScopedTransferKeeper capabilitykeeper.ScopedKeeper
ScopedIBCFeeKeeper capabilitykeeper.ScopedKeeper
OracleKeeper oraclekeeper.Keeper
DidKeeper didkeeper.Keeper
// the module manager
ModuleManager *module.Manager
BasicModuleManager module.BasicManager BasicModuleManager module.BasicManager
ModuleManager *module.Manager
// simulation manager *baseapp.BaseApp
sm *module.SimulationManager CapabilityKeeper *capabilitykeeper.Keeper
keys map[string]*storetypes.KVStoreKey
// module configurator PacketForwardKeeper *packetforwardkeeper.Keeper
configurator module.Configurator IBCKeeper *ibckeeper.Keeper
once sync.Once memKeys map[string]*storetypes.MemoryStoreKey
GovKeeper govkeeper.Keeper
DidKeeper didkeeper.Keeper
POAKeeper poakeeper.Keeper
DistrKeeper distrkeeper.Keeper
MintKeeper mintkeeper.Keeper
CircuitKeeper circuitkeeper.Keeper
EvidenceKeeper evidencekeeper.Keeper
ICAHostKeeper icahostkeeper.Keeper
TransferKeeper ibctransferkeeper.Keeper
ICAControllerKeeper icacontrollerkeeper.Keeper
ConsensusParamsKeeper consensusparamkeeper.Keeper
ScopedIBCFeeKeeper capabilitykeeper.ScopedKeeper
ScopedTransferKeeper capabilitykeeper.ScopedKeeper
ScopedICAControllerKeeper capabilitykeeper.ScopedKeeper
SlashingKeeper slashingkeeper.Keeper
ScopedICAHostKeeper capabilitykeeper.ScopedKeeper
ScopedIBCKeeper capabilitykeeper.ScopedKeeper
GlobalFeeKeeper globalfeekeeper.Keeper
once sync.Once
} }
// NewChainApp returns a reference to an initialized ChainApp. // NewChainApp returns a reference to an initialized ChainApp.

View File

@ -1,4 +1,4 @@
package env package app
import ( import (
"context" "context"

View File

@ -1,4 +1,4 @@
package env package app
import ( import (
"github.com/ipfs/kubo/client/rpc" "github.com/ipfs/kubo/client/rpc"
@ -7,7 +7,6 @@ import (
var ( var (
ChainID = "testnet" ChainID = "testnet"
ValAddr = "val1" ValAddr = "val1"
NodeDir = ".sonr"
) )
// Initialize initializes the local configuration values // Initialize initializes the local configuration values

View File

@ -22,7 +22,6 @@ import (
"github.com/onsonr/hway/app" "github.com/onsonr/hway/app"
"github.com/onsonr/hway/app/params" "github.com/onsonr/hway/app/params"
"github.com/onsonr/hway/internal/env"
// NewRootCmd creates a new root command for chain app. It is called once in the // NewRootCmd creates a new root command for chain app. It is called once in the
// main function. // main function.
) )
@ -100,8 +99,8 @@ func NewRootCmd() *cobra.Command {
} }
// Set the context chain ID and validator address // Set the context chain ID and validator address
env.SetLocalChainID(initClientCtx.ChainID) app.SetLocalChainID(initClientCtx.ChainID)
env.SetLocalValidatorAddress(initClientCtx.FromAddress.String()) app.SetLocalValidatorAddress(initClientCtx.FromAddress.String())
customAppTemplate, customAppConfig := initAppConfig() customAppTemplate, customAppConfig := initAppConfig()
customCMTConfig := initCometBFTConfig() customCMTConfig := initCometBFTConfig()

View File

@ -1,96 +0,0 @@
package vfs
import (
"fmt"
"io/fs"
"os"
"path/filepath"
"github.com/ipfs/boxo/files"
)
// File represents a file in the filesystem
type File string
// NewFile creates a new File instance
func NewFile(path string) File {
return File(path)
}
// Name returns the name of the file
func (f File) Name() string {
return filepath.Base(string(f))
}
// Path returns the path of the file
func (f File) Path() string {
return string(f)
}
// Read reads the contents of the file
func (f File) Read() ([]byte, error) {
return os.ReadFile(string(f))
}
// Write writes data to the file, but throws an error if the file already exists
func (f File) Write(data []byte) error {
if f.Exists() {
return fmt.Errorf("file already exists: %s", f)
}
return os.WriteFile(string(f), data, 0644)
}
// Append appends data to the file
func (f File) Append(data []byte) error {
file, err := os.OpenFile(string(f), os.O_APPEND|os.O_WRONLY|os.O_CREATE, 0644)
if err != nil {
return err
}
defer file.Close()
_, err = file.Write(data)
return err
}
// Overwrite deletes all data for the file at path if it exists and writes the new data
func (f File) Overwrite(data []byte) error {
// If the file exists, remove it first
if f.Exists() {
if err := f.Remove(); err != nil {
return fmt.Errorf("failed to remove existing file: %w", err)
}
}
// Write the new data
return os.WriteFile(string(f), data, 0644)
}
// Exists checks if the file exists
func (f File) Exists() bool {
_, err := os.Stat(string(f))
return !os.IsNotExist(err)
}
// Remove removes the file
func (f File) Remove() error {
return os.Remove(string(f))
}
// Stat returns the FileInfo for the file
func (f File) Stat() (os.FileInfo, error) {
return os.Stat(string(f))
}
// Open opens the file and returns an fs.File
func (f File) Open() (fs.File, error) {
return os.Open(string(f))
}
// Node returns a files.Node representation of the file
func (f File) Node() (files.Node, error) {
file, err := os.Open(string(f))
if err != nil {
return nil, err
}
return files.NewReaderFile(file), nil
}

View File

@ -1,120 +0,0 @@
package vfs
import (
"io/fs"
"os"
"path/filepath"
"github.com/ipfs/boxo/files"
)
// Folder represents a folder in the filesystem
type Folder string
// NewFolder creates a new Folder instance
func NewFolder(path string) Folder {
return Folder(path)
}
// Name returns the name of the folder
func (f Folder) Name() string {
return filepath.Base(string(f))
}
// Path returns the path of the folder
func (f Folder) Path() string {
return string(f)
}
// Create creates the folder if it doesn't exist
func (f Folder) Create() error {
return os.MkdirAll(string(f), os.ModePerm)
}
// Exists checks if the folder exists
func (f Folder) Exists() bool {
info, err := os.Stat(string(f))
return err == nil && info.IsDir()
}
// Ls lists the contents of the folder
func (f Folder) Ls() ([]fs.DirEntry, error) {
return os.ReadDir(string(f))
}
// WriteFile writes data to a file in the folder
func (f Folder) WriteFile(name string, data []byte, perm os.FileMode) (File, error) {
err := os.WriteFile(filepath.Join(string(f), name), data, perm)
return File(filepath.Join(string(f), name)), err
}
// ReadFile reads the contents of a file in the folder
func (f Folder) ReadFile(name string) ([]byte, error) {
return os.ReadFile(filepath.Join(string(f), name))
}
// DeleteFile deletes a file from the folder
func (f Folder) DeleteFile(name string) error {
return os.Remove(filepath.Join(string(f), name))
}
// Remove removes the folder and its contents
func (f Folder) Remove() error {
return os.RemoveAll(string(f))
}
// Join joins the folder path with the given elements
func (f Folder) Join(elem ...string) Folder {
return Folder(filepath.Join(append([]string{string(f)}, elem...)...))
}
// IsDir checks if the folder is a directory
func (f Folder) IsDir() bool {
info, err := os.Stat(string(f))
return err == nil && info.IsDir()
}
// Touch creates an empty file if it doesn't exist, or updates its access and modification times if it does
func (f Folder) Touch(name string) (File, error) {
var err error
filePath := filepath.Join(string(f), name)
_, err = os.Stat(filePath)
if os.IsNotExist(err) {
file, err := os.Create(filePath)
if err != nil {
return File(filePath), err
}
if err := file.Close(); err != nil {
return File(filePath), err
}
return File(filePath), nil
}
return File(filePath), err
}
// Node returns a files.Node representation of the folder
func (f Folder) Node() (files.Node, error) {
entries, err := f.Ls()
if err != nil {
return nil, err
}
dirEntries := make([]files.DirEntry, 0, len(entries))
for _, entry := range entries {
if entry.IsDir() {
subFolder := f.Join(entry.Name())
subNode, err := subFolder.Node()
if err != nil {
return nil, err
}
dirEntries = append(dirEntries, files.FileEntry(entry.Name(), subNode))
} else {
file := File(filepath.Join(string(f), entry.Name()))
fileNode, err := file.Node()
if err != nil {
return nil, err
}
dirEntries = append(dirEntries, files.FileEntry(entry.Name(), fileNode))
}
}
return files.NewSliceDirectory(dirEntries), nil
}

View File

@ -1,93 +0,0 @@
package vfs
import (
"context"
"os"
"path/filepath"
"github.com/ipfs/boxo/path"
"github.com/ipfs/kubo/core/coreiface/options"
"github.com/onsonr/hway/internal/env"
)
// Constant for the name of the folder where the vaults are stored
const kVaultsFolderName = ".sonr-vaults"
// enclaveRoot is the folder where the vaults are stored
var enclaveRoot Folder
// Package initializes the VaultsFolder
func init() {
// Initialize VaultsFolder
homeDir, err := os.UserHomeDir()
if err != nil {
panic(err)
}
// Create the folder if it does not exist
enclaveRoot = NewFolder(filepath.Join(homeDir, kVaultsFolderName))
if !enclaveRoot.Exists() {
if err := enclaveRoot.Create(); err != nil {
panic(err)
}
}
}
// NewVaultFolder creates a new folder under the VaultsFolder directory
func NewVaultFolder(name string) (Folder, error) {
vaultFolder := enclaveRoot.Join(name)
err := vaultFolder.Create()
if err != nil {
return "", err
}
return vaultFolder, nil
}
// SaveToIPFS saves the Folder to IPFS and returns the IPFS path
func SyncFolderToIPFS(ctx context.Context, f Folder) (path.Path, error) {
node, err := f.Node()
if err != nil {
return nil, err
}
c, err := env.GetIPFSClient()
if err != nil {
return nil, err
}
path, err := c.Unixfs().Add(ctx, node)
if err != nil {
return nil, err
}
return path, nil
}
// PublishToIPNS publishes the Folder to IPNS
func PublishToIPNS(ctx context.Context, ipfsPath path.Path, f Folder) error {
c, err := env.GetIPFSClient()
if err != nil {
return err
}
_, err = c.Name().Publish(ctx, ipfsPath, options.Name.Key(f.Name()))
if err != nil {
return err
}
return nil
}
// LoadFromIPFS loads a Folder from IPFS
func LoadFromIPFS(ctx context.Context, path string) (Folder, error) {
c, err := env.GetIPFSClient()
if err != nil {
return "", err
}
cid, err := ParsePath(path)
if err != nil {
return "", err
}
node, err := c.Unixfs().Get(ctx, cid)
if err != nil {
return "", err
}
return LoadNodeInFolder(path, node)
}

View File

@ -1,58 +0,0 @@
package vfs
import (
"fmt"
"io"
"os"
"path/filepath"
"github.com/ipfs/boxo/files"
"github.com/ipfs/boxo/path"
)
// Helper function to parse IPFS path
func ParsePath(p string) (path.Path, error) {
return path.NewPath(p)
}
// FetchVaultPath returns the path to the vault with the given name
func FetchVaultPath(name string) string {
return enclaveRoot.Join(name).Path()
}
// LoadNodeInFolder loads an IPFS node into a Folder
func LoadNodeInFolder(path string, node files.Node) (Folder, error) {
folder := NewFolder(path)
if err := folder.Create(); err != nil {
return "", err
}
switch n := node.(type) {
case files.File:
f, err := os.Create(folder.Path())
if err != nil {
return "", err
}
defer f.Close()
if _, err := io.Copy(f, n); err != nil {
return "", err
}
case files.Directory:
entries := n.Entries()
for entries.Next() {
name := entries.Name()
childNode := entries.Node()
childPath := filepath.Join(folder.Path(), name)
if _, err := LoadNodeInFolder(childPath, childNode); err != nil {
return "", err
}
}
if entries.Err() != nil {
return "", entries.Err()
}
default:
return "", fmt.Errorf("unsupported node type: %T", n)
}
return folder, nil
}