Skip to content

Commit

Permalink
1.optimize API 2.invole config (#24)
Browse files Browse the repository at this point in the history
1.optimize API 2.invole config
  • Loading branch information
cherry-yl-sh authored May 21, 2024
1 parent cedeb46 commit ac28d11
Show file tree
Hide file tree
Showing 28 changed files with 749 additions and 242 deletions.
2 changes: 2 additions & 0 deletions cmd/server/main.go
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,7 @@ import (
"AAStarCommunity/EthPaymaster_BackService/config"
"AAStarCommunity/EthPaymaster_BackService/envirment"
"AAStarCommunity/EthPaymaster_BackService/rpc_server/routers"
"AAStarCommunity/EthPaymaster_BackService/service/dashboard_service"
"flag"
"github.com/gin-gonic/gin"
"github.com/sirupsen/logrus"
Expand Down Expand Up @@ -67,6 +68,7 @@ func initEngine(strategyPath string, basicConfigPath string, secretPath string)
} else {
logrus.SetLevel(logrus.InfoLevel)
}
dashboard_service.Init()
logrus.Infof("Environment: %s", envirment.Environment.Name)
logrus.Infof("Debugger: %v", envirment.Environment.Debugger)
Engine = routers.SetRouters()
Expand Down
6 changes: 6 additions & 0 deletions common/global_const/common_const.go
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,8 @@ import (
"math/big"
)

type StrategyStatus string

const (
DummyPrivateKeyText = "0a82406dc7fcf16090e05215ff394c7465608dd1a698632471b1eb37b8ece2f7"
DummySignature = "0x3054659b5e29460a8f3ac9afc3d5fcbe4b76f92aed454b944e9b29e55d80fde807716530b739540e95cfa4880d69f710a9d45910f2951a227675dc1fb0fdf2c71c"
Expand All @@ -17,6 +19,10 @@ const (
DummyVerificationGas = 50000
DummyPaymasterPostOpGasLimit = 2000000
DummyPaymasterVerificationGasLimit = 5000000

ContextKeyApiMoDel = "api_model"
StrategyStatusDisable StrategyStatus = "disable"
StrategyStatusAchieve StrategyStatus = "enable"
)

var (
Expand Down
9 changes: 5 additions & 4 deletions common/global_const/token.go
Original file line number Diff line number Diff line change
Expand Up @@ -22,8 +22,9 @@ func IsStableToken(token TokenType) bool {
}

const (
TokenTypeUSDT TokenType = "USDT"
TokenTypeUSDC TokenType = "USDC"
TokenTypeETH TokenType = "ETH"
TokenTypeOP TokenType = "OP"
TokenTypeUSDT TokenType = "USDT"
TokenTypeUSDC TokenType = "USDC"
TokenTypeETH TokenType = "ETH"
TokenTypeOP TokenType = "OP"
TokenTypeAAStar TokenType = "AAStar"
)
9 changes: 9 additions & 0 deletions common/model/api_key_info.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
package model

import "golang.org/x/time/rate"

type ApiKeyModel struct {
Disable bool `gorm:"column:disable;type:bool" json:"disable"`
ApiKey string `gorm:"column:api_key;type:varchar(255)" json:"api_key"`
RateLimit rate.Limit `gorm:"column:rate_limit;type:int" json:"rate_limit"`
}
24 changes: 12 additions & 12 deletions common/model/api_request.go
Original file line number Diff line number Diff line change
Expand Up @@ -5,20 +5,20 @@ import (
)

type UserOpRequest struct {
ForceStrategyId string `json:"force_strategy_id"`
ForceNetwork global_const.Network `json:"force_network"`
Erc20Token global_const.TokenType `json:"force_token"`
ForceEntryPointAddress string `json:"force_entrypoint_address"`
UserOp map[string]any `json:"user_operation"`
Extra interface{} `json:"extra"`
EstimateOpGas bool `json:"estimate_op_gas"`
EntryPointVersion global_const.EntrypointVersion `json:"entrypoint_version"`
StrategyCode string `json:"strategy_code"`
Network global_const.Network `json:"network"`
UserPayErc20Token global_const.TokenType `json:"user_pay_erc20_token"`
UserOp map[string]any `json:"user_operation"`
Extra interface{} `json:"extra"`
EstimateOpGas bool `json:"estimate_op_gas"`
EntryPointVersion global_const.EntrypointVersion `json:"entrypoint_version"`
}
type JsonRpcRequest struct {
JsonRpc string `json:"jsonrpc"`
Method string `json:"method"`
Params []interface{} `json:"params"`
Id int `json:"id"`
JsonRpc string `json:"jsonrpc"`
Method string `json:"method"`
Params []interface{} `json:"params"`
Id int `json:"id"`
Network global_const.Network `json:"-"`
}
type ClientCredential struct {
ApiKey string `json:"apiKey"`
Expand Down
14 changes: 14 additions & 0 deletions common/model/db_model.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,14 @@
package model

import (
"gorm.io/gorm"
"time"
)

type BaseData struct {
// ID
ID int64 `gorm:"primaryKey;autoIncrement;column:id" json:"id"`
CreatedAt time.Time `gorm:"column:created_at" json:"created_at"`
UpdatedAt time.Time `gorm:"column:updated_at" json:"updated_at"`
DeletedAt gorm.DeletedAt `gorm:"softDelete:flag" json:"deleted_at"`
}
15 changes: 15 additions & 0 deletions common/model/secret_config.go
Original file line number Diff line number Diff line change
@@ -1,9 +1,24 @@
package model

type DBConfig struct {
Host string `json:"host"`
Port int `json:"port"`
User string `json:"user"`
Password string `json:"password"`
DBName string `json:"db_name"`
TimeZone string `json:"tz"`
SslMode string `json:"ssl_mode"`
}

type SecretConfig struct {
PriceOracleApiKey string `json:"price_oracle_api_key"`

NetWorkSecretConfigMap map[string]NetWorkSecretConfig `json:"network_secret_configs"`

ConfigDBConfig DBConfig `json:"config_db_config"`
RelayDBConfig DBConfig `json:"relay_db_config"`
ApiKeyTableName string `json:"api_key_table_name"`
StrategyConfigTableName string `json:"strategy_config_table_name"`
}

type NetWorkSecretConfig struct {
Expand Down
43 changes: 22 additions & 21 deletions common/model/strategy.go
Original file line number Diff line number Diff line change
Expand Up @@ -8,22 +8,23 @@ import (
)

type Strategy struct {
Id string `json:"id"`
StrategyCode string `json:"strategy_code"`
PaymasterInfo *PaymasterInfo `json:"paymaster_info"`
NetWorkInfo *NetWorkInfo `json:"network_info"`
EntryPointInfo *EntryPointInfo `json:"entrypoint_info"`
Description string `json:"description"`
ExecuteRestriction StrategyExecuteRestriction `json:"execute_restriction"`
Id string `json:"id"`
StrategyCode string `json:"strategy_code"`
PaymasterInfo *PaymasterInfo `json:"paymaster_info"`
NetWorkInfo *NetWorkInfo `json:"network_info"`
EntryPointInfo *EntryPointInfo `json:"entrypoint_info"`
Description string `json:"description"`
ExecuteRestriction *StrategyExecuteRestriction `json:"execute_restriction"`
Erc20TokenType global_const.TokenType
}
type PaymasterInfo struct {
PayMasterAddress *common.Address `json:"paymaster_address"`
PayType global_const.PayType `json:"pay_type"`
PayMasterAddress *common.Address `json:"paymaster_address"`
PayType global_const.PayType `json:"pay_type"`
IsProjectErc20PayEnable bool `json:"is_project_erc20_pay_enable"`
}
type NetWorkInfo struct {
NetWork global_const.Network `json:"network"`
Token global_const.TokenType `json:"tokens"`
NetWork global_const.Network `json:"network"`
GasToken global_const.TokenType `json:"tokens"`
}
type EntryPointInfo struct {
EntryPointAddress *common.Address `json:"entrypoint_address"`
Expand All @@ -41,29 +42,29 @@ func (strategy *Strategy) GetNewWork() global_const.Network {
}

func (strategy *Strategy) GetUseToken() global_const.TokenType {
return strategy.NetWorkInfo.Token
return strategy.NetWorkInfo.GasToken
}
func (strategy *Strategy) GetPayType() global_const.PayType {
return strategy.PaymasterInfo.PayType
}
func (strategy *Strategy) GetStrategyEntrypointVersion() global_const.EntrypointVersion {
return strategy.EntryPointInfo.EntryPointVersion
}
func (strategy Strategy) IsCurrencyPayEnable() bool {
func (strategy *Strategy) IsCurrencyPayEnable() bool {
return false
}

type StrategyExecuteRestriction struct {
BanSenderAddress string `json:"ban_sender_address"`
EffectiveStartTime *big.Int `json:"effective_start_time"`
EffectiveEndTime *big.Int `json:"effective_end_time"`
GlobalMaxUSD int64 `json:"global_max_usd"`
GlobalMaxOpCount int64 `json:"global_max_op_count"`
DayMaxUSD int64 `json:"day_max_usd"`
StartTime int64 `json:"start_time"`
EndTime int64 `json:"end_time"`
BanSenderAddress mapset.Set[string] `json:"ban_sender_address"`
EffectiveStartTime *big.Int `json:"start_time"`
EffectiveEndTime *big.Int `json:"end_time"`
GlobalMaxUSD *big.Float `json:"global_max_usd"`
GlobalMaxOpCount *big.Int `json:"global_max_op_count"`
DayMaxUSD *big.Float `json:"day_max_usd"`
AccessProject mapset.Set[string] `json:"access_project"`
AccessErc20 mapset.Set[string] `json:"access_erc20"`
ChainIdWhiteList mapset.Set[string] `json:"chain_id_whitelist"`
Status global_const.StrategyStatus
}

type StrategyValidateConfig struct {
Expand Down
16 changes: 10 additions & 6 deletions config/basic_config.go
Original file line number Diff line number Diff line change
Expand Up @@ -133,20 +133,20 @@ func GetChainId(networkParam global_const.Network) string {
return networkConfig.ChainId
}

func GetPaymasterAddress(network global_const.Network, version global_const.EntrypointVersion) common.Address {
func GetPaymasterAddress(network global_const.Network, version global_const.EntrypointVersion) *common.Address {
networkConfig := basicConfig.NetworkConfigMap[network]
if version == global_const.EntrypointV07 {
return networkConfig.V07PaymasterAddress
return &networkConfig.V07PaymasterAddress
}
return networkConfig.V06PaymasterAddress
return &networkConfig.V06PaymasterAddress
}

func GetEntrypointAddress(network global_const.Network, version global_const.EntrypointVersion) common.Address {
func GetEntrypointAddress(network global_const.Network, version global_const.EntrypointVersion) *common.Address {
networkConfig := basicConfig.NetworkConfigMap[network]
if version == global_const.EntrypointV07 {
return networkConfig.V07EntryPointAddress
return &networkConfig.V07EntryPointAddress
}
return networkConfig.V06EntryPointAddress
return &networkConfig.V06EntryPointAddress

}

Expand All @@ -170,8 +170,12 @@ var (
global_const.ScrollMainnet: common.HexToAddress("0x5300000000000000000000000000000000000002"),
}
Disable1559Chain = mapset.NewSet(global_const.ScrollSepolia, global_const.ScrollMainnet)
PErc20TokenSet = mapset.NewSet(global_const.TokenTypeAAStar)
)

func IsPErc20Token(token global_const.TokenType) bool {
return PErc20TokenSet.Contains(token)
}
func IsDisable1559Chain(network global_const.Network) bool {
return Disable1559Chain.Contains(network)
}
Expand Down
8 changes: 4 additions & 4 deletions config/basic_strategy_config.go
Original file line number Diff line number Diff line change
Expand Up @@ -19,9 +19,9 @@ var suitableStrategyMap = make(map[global_const.Network]map[global_const.Entrypo
func GetBasicStrategyConfig(strategyCode global_const.BasicStrategyCode) *model.Strategy {
strategy := basicStrategyConfig[string(strategyCode)]
paymasterAddress := GetPaymasterAddress(strategy.GetNewWork(), strategy.GetStrategyEntrypointVersion())
strategy.PaymasterInfo.PayMasterAddress = &paymasterAddress
strategy.PaymasterInfo.PayMasterAddress = paymasterAddress
entryPointAddress := GetEntrypointAddress(strategy.GetNewWork(), strategy.GetStrategyEntrypointVersion())
strategy.EntryPointInfo.EntryPointAddress = &entryPointAddress
strategy.EntryPointInfo.EntryPointAddress = entryPointAddress
return strategy

}
Expand Down Expand Up @@ -79,7 +79,7 @@ func convertMapToStrategyConfig(data map[string]map[string]any) (map[string]*mod
EntryPointVersion: global_const.EntrypointVersion(value["entrypoint_version"].(string)),
},

ExecuteRestriction: model.StrategyExecuteRestriction{
ExecuteRestriction: &model.StrategyExecuteRestriction{
EffectiveStartTime: effectiveStartTime,
EffectiveEndTime: effectiveEndTime,
AccessProject: utils.ConvertStringToSet(accessProjectStr, ","),
Expand All @@ -90,7 +90,7 @@ func convertMapToStrategyConfig(data map[string]map[string]any) (map[string]*mod
}
if strategy.GetPayType() == global_const.PayTypeERC20 {
erc20TokenStr := value["access_erc20"].(string)
strategy.NetWorkInfo.Token = global_const.TokenType(erc20TokenStr)
strategy.NetWorkInfo.GasToken = global_const.TokenType(erc20TokenStr)
strategy.ExecuteRestriction.AccessErc20 = utils.ConvertStringToSet(erc20TokenStr, ",")
}

Expand Down
32 changes: 32 additions & 0 deletions config/secret_config.go
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,8 @@ import (
"os"
)

var dsnTemplate = "host=%s port=%v user=%s password=%s dbname=%s TimeZone=%s sslmode=%s"

var secretConfig *model.SecretConfig
var signerConfig = make(SignerConfigMap)

Expand Down Expand Up @@ -42,6 +44,10 @@ func GetNetworkSecretConfig(network global_const.Network) model.NetWorkSecretCon
return secretConfig.NetWorkSecretConfigMap[string(network)]
}

func CheckNetworkSupport(network global_const.Network) bool {
_, ok := secretConfig.NetWorkSecretConfigMap[string(network)]
return ok
}
func GetPriceOracleApiKey() string {
return secretConfig.PriceOracleApiKey
}
Expand All @@ -54,3 +60,29 @@ func GetSignerKey(network global_const.Network) string {
func GetSigner(network global_const.Network) *global_const.EOA {
return signerConfig[network]
}
func GetAPIKeyTableName() string {
return secretConfig.ApiKeyTableName
}
func GetStrategyConfigTableName() string {
return secretConfig.StrategyConfigTableName
}
func GetConfigDBDSN() string {
return fmt.Sprintf(dsnTemplate,
secretConfig.ConfigDBConfig.Host,
secretConfig.ConfigDBConfig.Port,
secretConfig.ConfigDBConfig.User,
secretConfig.ConfigDBConfig.Password,
secretConfig.ConfigDBConfig.DBName,
secretConfig.ConfigDBConfig.TimeZone,
secretConfig.ConfigDBConfig.SslMode)
}
func GetRelayDBDSN() string {
return fmt.Sprintf(dsnTemplate,
secretConfig.RelayDBConfig.Host,
secretConfig.RelayDBConfig.Port,
secretConfig.RelayDBConfig.User,
secretConfig.RelayDBConfig.Password,
secretConfig.RelayDBConfig.DBName,
secretConfig.RelayDBConfig.TimeZone,
secretConfig.RelayDBConfig.SslMode)
}
9 changes: 8 additions & 1 deletion docs/docs.go
Original file line number Diff line number Diff line change
Expand Up @@ -61,7 +61,7 @@ const docTemplate = `{
}
}
},
"/api/v1/paymaster": {
"/api/v1/paymaster/{network}": {
"post": {
"security": [
{
Expand All @@ -76,6 +76,13 @@ const docTemplate = `{
"Paymaster"
],
"parameters": [
{
"type": "string",
"description": "Network",
"name": "network",
"in": "path",
"required": true
},
{
"description": "JsonRpcRequest Model",
"name": "rpcRequest",
Expand Down
9 changes: 8 additions & 1 deletion docs/swagger.json
Original file line number Diff line number Diff line change
Expand Up @@ -50,7 +50,7 @@
}
}
},
"/api/v1/paymaster": {
"/api/v1/paymaster/{network}": {
"post": {
"security": [
{
Expand All @@ -65,6 +65,13 @@
"Paymaster"
],
"parameters": [
{
"type": "string",
"description": "Network",
"name": "network",
"in": "path",
"required": true
},
{
"description": "JsonRpcRequest Model",
"name": "rpcRequest",
Expand Down
7 changes: 6 additions & 1 deletion docs/swagger.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -48,12 +48,17 @@ paths:
description: OK
tags:
- Healthz
/api/v1/paymaster:
/api/v1/paymaster/{network}:
post:
consumes:
- application/json
description: Paymaster JSON-RPC API
parameters:
- description: Network
in: path
name: network
required: true
type: string
- description: JsonRpcRequest Model
in: body
name: rpcRequest
Expand Down
Loading

0 comments on commit ac28d11

Please sign in to comment.