Skip to content

Commit e8276e0

Browse files
committed
Configure a maximum airdrop USD value
1 parent 1752c93 commit e8276e0

File tree

2 files changed

+13
-4
lines changed

2 files changed

+13
-4
lines changed

pkg/code/server/transaction/airdrop.go

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -248,6 +248,12 @@ func (s *transactionServer) airdrop(ctx context.Context, intentId string, owner
248248
coreMintAmount := nativeAmount / otherRateRecord.Rate
249249
quarkAmount := uint64(coreMintAmount * float64(common.CoreMintQuarksPerUnit))
250250

251+
usdValue := usdRateRecord.Rate * coreMintAmount
252+
if usdValue > s.conf.maxAirdropUsdValue.Get(ctx) {
253+
log.Warn("airdrop exceeds max usd value")
254+
return nil, ErrIneligibleForAirdrop
255+
}
256+
251257
var isAirdropperManuallyUnlocked bool
252258
s.airdropperLock.Lock()
253259
defer func() {
@@ -318,7 +324,7 @@ func (s *transactionServer) airdrop(ctx context.Context, intentId string, owner
318324
ExchangeCurrency: currencyCode,
319325
ExchangeRate: otherRateRecord.Rate,
320326
NativeAmount: nativeAmount,
321-
UsdMarketValue: usdRateRecord.Rate * coreMintAmount,
327+
UsdMarketValue: usdValue,
322328

323329
IsWithdrawal: false,
324330
},

pkg/code/server/transaction/config.go

Lines changed: 6 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -33,6 +33,9 @@ const (
3333
AirdropperOwnerPublicKeyEnvName = envConfigPrefix + "AIRDROPPER_OWNER_PUBLIC_KEY"
3434
defaultAirdropperOwnerPublicKey = "invalid" // Ensure something valid is set
3535

36+
MaxAirdropUsdValueEnvName = envConfigPrefix + "_MAX_AIRDROP_USD_VALUE"
37+
defaultMaxAirdropUsdValue = 1.0
38+
3639
SwapSubsidizerOwnerPublicKeyEnvName = envConfigPrefix + "SWAP_SUBSIDIZER_OWNER_PUBLIC_KEY"
3740
defaultSwapSubsidizerOwnerPublicKey = "invalid" // Ensure something valid is set
3841

@@ -52,8 +55,8 @@ type conf struct {
5255
clientReceiveTimeout config.Duration
5356
feeCollectorTokenPublicKey config.String
5457
enableAirdrops config.Bool
55-
enableAsyncAirdropProcessing config.Bool
5658
airdropperOwnerPublicKey config.String
59+
maxAirdropUsdValue config.Float64
5760
swapSubsidizerOwnerPublicKey config.String
5861
swapTimeout config.Duration
5962
swapPriorityFeeMultiple config.Float64
@@ -75,8 +78,8 @@ func WithEnvConfigs() ConfigProvider {
7578
clientReceiveTimeout: env.NewDurationConfig(ClientReceiveTimeoutConfigEnvName, defaultClientReceiveTimeout),
7679
feeCollectorTokenPublicKey: env.NewStringConfig(FeeCollectorTokenPublicKeyConfigEnvName, defaultFeeCollectorPublicKey),
7780
enableAirdrops: env.NewBoolConfig(EnableAirdropsConfigEnvName, defaultEnableAirdrops),
78-
enableAsyncAirdropProcessing: wrapper.NewBoolConfig(memory.NewConfig(true), true),
7981
airdropperOwnerPublicKey: env.NewStringConfig(AirdropperOwnerPublicKeyEnvName, defaultAirdropperOwnerPublicKey),
82+
maxAirdropUsdValue: env.NewFloat64Config(MaxAirdropUsdValueEnvName, defaultMaxAirdropUsdValue),
8083
swapSubsidizerOwnerPublicKey: env.NewStringConfig(SwapSubsidizerOwnerPublicKeyEnvName, defaultSwapSubsidizerOwnerPublicKey),
8184
swapTimeout: env.NewDurationConfig(SwapTimeoutConfigEnvName, defaultSwapTimeout),
8285
swapPriorityFeeMultiple: env.NewFloat64Config(SwapPriorityFeeMultiple, defaultSwapPriorityFeeMultiple),
@@ -105,8 +108,8 @@ func withManualTestOverrides(overrides *testOverrides) ConfigProvider {
105108
clientReceiveTimeout: wrapper.NewDurationConfig(memory.NewConfig(overrides.clientReceiveTimeout), defaultClientReceiveTimeout),
106109
feeCollectorTokenPublicKey: wrapper.NewStringConfig(memory.NewConfig(overrides.feeCollectorTokenPublicKey), defaultFeeCollectorPublicKey),
107110
enableAirdrops: wrapper.NewBoolConfig(memory.NewConfig(overrides.enableAirdrops), false),
108-
enableAsyncAirdropProcessing: wrapper.NewBoolConfig(memory.NewConfig(false), false),
109111
airdropperOwnerPublicKey: wrapper.NewStringConfig(memory.NewConfig(defaultAirdropperOwnerPublicKey), defaultAirdropperOwnerPublicKey),
112+
maxAirdropUsdValue: wrapper.NewFloat64Config(memory.NewConfig(defaultMaxAirdropUsdValue), defaultMaxAirdropUsdValue),
110113
swapSubsidizerOwnerPublicKey: wrapper.NewStringConfig(memory.NewConfig(defaultSwapSubsidizerOwnerPublicKey), defaultSwapSubsidizerOwnerPublicKey),
111114
swapTimeout: wrapper.NewDurationConfig(memory.NewConfig(defaultSwapTimeout), defaultSwapTimeout),
112115
swapPriorityFeeMultiple: wrapper.NewFloat64Config(memory.NewConfig(defaultSwapPriorityFeeMultiple), defaultSwapPriorityFeeMultiple),

0 commit comments

Comments
 (0)