badgegenerator

package
v0.21.0 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Aug 10, 2023 License: Apache-2.0 Imports: 41 Imported by: 0

README

Bade generator

How to run

  • please also specify these env variables
       BADGE_DEFAULT_GEOLOCATION: 1
       BADGE_USER_DATA: "{\"1\":{\"default\":{\"project_public_key\":\"test111111\",\"private_key\":\"123456\",\"epochs_max_cu\":1},\"projectId2\":{\"project_public_key\":\"test1122\",\"private_key\":\"12345678\",\"epochs_max_cu\":1}},\"2\":{\"default\":{\"project_public_key\":\"test123\",\"private_key\":\"123456\",\"epochs_max_cu\":1}}}"
       BADGE_COUNTRIES_FILE_PATH: "countries.csv"
       BADGE_IP_FILE_PATH: "ip2asn-v4.tsv"
    
  • run the command
    lavad badgegenerator --port=8080 --log_level=debug  --chain-id=lava  --grpc-url=127.0.0.1:9090
    

Env Variables explained

  1. BADGE_DEFAULT_GEOLOCATION

    this is really important because if for some reason we don't find which country the users is calling from than we use the default value. this value should be on the BADGE_USER_DATA json.

  2. BADGE_COUNTRIES_FILE_PATH

    this is a csv file with all countries and lava-geolocation link for example. It contains four colums country-code;country-name,continent code,lava-geolocation
    for example:

    AD;Andorra;EU;2
    AE;United Arab Emirates;AS;2
    AF;Afghanistan;AS;2
    AL;Albania;EU;2
    AM;Armenia;AS;2
    AO;Angola;AF;2
    
  3. BADGE_IP_FILE_PATH

    this is a tsv file with all ip ranges and country code that they belong. it can be downloaded from here ip pls download ip2asn-v4.tsv It contains 4/5 colums range_start;range_end;AS_number;country_code AS_description
    for example:

    1.0.0.0 1.0.0.255	13335	US	CLOUDFLARENET
    1.0.1.0	1.0.3.255	0	None	Not routed
    1.0.4.0	1.0.5.255	38803	AU	WPL-AS-AP Wirefreebroadband Pty Ltd
    1.0.6.0	1.0.7.255	38803	AU	WPL-AS-AP Wirefreebroadband Pty Ltd
    1.0.8.0	1.0.15.255	0	None	Not routed
    
  4. BADGE_USER_DATA

    a json that link geolocation, public key of a project and private key to use for the encryption.

    {
      "1": {
        "default": {
          "project_public_key": "test111111",
          "private_key": "123456",
          "epochs_max_cu": 1
        },
        "projectId2": {
          "project_public_key": "test1122",
          "private_key": "12345678",
          "epochs_max_cu": 1
        }
      },
      "2": {
        "default": {
          "project_public_key": "test123",
          "private_key": "123456",
          "epochs_max_cu": 1
        }
      }
    }
    

Documentation

Index

Constants

View Source
const (
	PortEnvironmentVariable               = "PORT"
	MetricsPortEnvironmentVariable        = "METRICS_PORT"
	UserDataEnvironmentVariable           = "USER_DATA"
	GrpcUrlEnvironmentVariable            = "GRPC_URL"
	LavaChainIDEnvironmentVariable        = "CHAIN_ID"
	DefaultGeolocationEnvironmentVariable = "DEFAULT_GEOLOCATION"
	CountriesFilePathEnvironmentVariable  = "COUNTRIES_FILE_PATH"
	IpFilePathEnvironmentVariable         = "IP_FILE_PATH"
)
View Source
const DefaultProjectId = "default"
View Source
const RefererHeaderKey = "Referer"

Variables

This section is empty.

Functions

func CreateBadgeGeneratorCobraCommand

func CreateBadgeGeneratorCobraCommand() *cobra.Command

func RunBadgeServer

func RunBadgeServer(cmd *cobra.Command, v *viper.Viper)

Types

type BadgeStateTracker

type BadgeStateTracker struct {
	*statetracker.StateTracker
	// contains filtered or unexported fields
}

func NewBadgeStateTracker

func NewBadgeStateTracker(ctx context.Context, clientCtx cosmosclient.Context, chainFetcher chaintracker.ChainFetcher, chainId string) (ret *BadgeStateTracker, err error)

func (*BadgeStateTracker) RegisterForEpochUpdates

func (st *BadgeStateTracker) RegisterForEpochUpdates(ctx context.Context, epochUpdatable statetracker.EpochUpdatable)

type HealthServer

type HealthServer struct {
	health.UnimplementedHealthServer
}

func (*HealthServer) Check

func (*HealthServer) Watch

type IpData

type IpData struct {
	FromIp      int64
	ToIP        int64
	CountryCode string
	Geolocation int
}

type IpService

type IpService struct {
	DefaultGeolocation int
	CountryCsvFilePath string
	IpTsvFilePath      string
	IpCountryData      *[]*IpData
}

func InitIpService

func InitIpService(defaultGeolocation int, countriesFilePath, ipFilePath string) (*IpService, error)

func (*IpService) ReadIpTsvFileData

func (service *IpService) ReadIpTsvFileData() error

func (*IpService) SearchForIp

func (service *IpService) SearchForIp(toSearchIp string) (*IpData, error)

type MetricsService

type MetricsService struct {
	TotalRequests      prometheus.Counter
	FailedRequests     prometheus.Counter
	SuccessfulRequests prometheus.Counter
}

func InitMetrics

func InitMetrics() *MetricsService

func (*MetricsService) AddRequest

func (service *MetricsService) AddRequest(isSuccessful bool)

type ProjectConfiguration

type ProjectConfiguration struct {
	ProjectPublicKey  string              `json:"project_public_key"`
	ProjectPrivateKey string              `json:"private_key"`
	EpochsMaxCu       int64               `json:"epochs_max_cu"`
	UpdatedEpoch      uint64              `json:"update_epoch,omitempty"`
	PairingList       *[]types.StakeEntry `json:"pairing_list,omitempty"`
}

type Server

type Server struct {
	pairingtypes.UnimplementedBadgeGeneratorServer
	ProjectsConfiguration map[string]map[string]*ProjectConfiguration // geolocation/project_id/project_data

	ChainId   string
	IpService *IpService
	// contains filtered or unexported fields
}

func NewServer

func NewServer(ipService *IpService, grpcUrl, chainId, userData string) (*Server, error)

func (*Server) GetEpoch

func (s *Server) GetEpoch() uint64

func (*Server) UpdateEpoch

func (s *Server) UpdateEpoch(epoch uint64)

type UserBadgeItem

type UserBadgeItem struct {
	AllowedCu int64
	Epoch     uint64
	Signature string
	PublicKey string
	UserId    string
}

Directories

Path Synopsis

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL