Skip to content

Commit

Permalink
refactor: staker event
Browse files Browse the repository at this point in the history
  • Loading branch information
onlyhyde committed Jan 23, 2025
1 parent 24685a6 commit 59b203d
Show file tree
Hide file tree
Showing 6 changed files with 157 additions and 115 deletions.
12 changes: 10 additions & 2 deletions contract/r/gnoswap/staker/external_deposit_fee.gno
Original file line number Diff line number Diff line change
Expand Up @@ -35,6 +35,7 @@ func SetDepositGnsAmountByAdmin(amount uint64) {
panic(err.Error())
}

prevDepositGnsAmount := getDepositGnsAmount()
setDepositGnsAmount(amount)

prevAddr, prevPkgPath := getPrev()
Expand All @@ -43,7 +44,8 @@ func SetDepositGnsAmountByAdmin(amount uint64) {
"SetDepositGnsAmountByAdmin",
"prevAddr", prevAddr,
"prevRealm", prevPkgPath,
"amount", formatUint(amount),
"prevAmount", formatUint(prevDepositGnsAmount),
"newAmount", formatUint(amount),
)
}

Expand All @@ -56,6 +58,7 @@ func SetDepositGnsAmount(amount uint64) {
panic(err.Error())
}

prevDepositGnsAmount := getDepositGnsAmount()
setDepositGnsAmount(amount)

prevAddr, prevPkgPath := getPrev()
Expand All @@ -64,10 +67,15 @@ func SetDepositGnsAmount(amount uint64) {
"SetDepositGnsAmount",
"prevAddr", prevAddr,
"prevRealm", prevPkgPath,
"amount", formatUint(amount),
"prevAmount", formatUint(prevDepositGnsAmount),
"newAmount", formatUint(amount),
)
}

func setDepositGnsAmount(amount uint64) {
depositGnsAmount = amount
}

func getDepositGnsAmount() uint64 {
return depositGnsAmount
}
16 changes: 12 additions & 4 deletions contract/r/gnoswap/staker/manage_pool_tier_and_warmup.gno
Original file line number Diff line number Diff line change
Expand Up @@ -34,8 +34,9 @@ func SetPoolTier(poolPath string, tier uint64) {
func setPoolTier(poolPath string, tier uint64) {
en.MintAndDistributeGns()

currentHeight := std.GetHeight()
pools.GetOrCreate(poolPath)
poolTier.changeTier(std.GetHeight(), pools, poolPath, tier)
poolTier.changeTier(currentHeight, pools, poolPath, tier)

prevAddr, prevRealm := getPrev()
std.Emit(
Expand All @@ -44,6 +45,7 @@ func setPoolTier(poolPath string, tier uint64) {
"prevRealm", prevRealm,
"poolPath", poolPath,
"tier", formatUint(tier),
"height", formatInt(currentHeight),
)
}

Expand All @@ -66,15 +68,19 @@ func ChangePoolTier(poolPath string, tier uint64) {
func changePoolTier(poolPath string, tier uint64) {
en.MintAndDistributeGns()

poolTier.changeTier(std.GetHeight(), pools, poolPath, tier)
prevTier := poolTier.CurrentTier(poolPath)
currentHeight := std.GetHeight()
poolTier.changeTier(currentHeight, pools, poolPath, tier)

prevAddr, prevRealm := getPrev()
std.Emit(
"ChangePoolTier",
"prevAddr", prevAddr,
"prevRealm", prevRealm,
"poolPath", poolPath,
"tier", formatUint(tier),
"prevTier", formatUint(prevTier),
"newTier", formatUint(tier),
"height", formatInt(currentHeight),
)
}

Expand All @@ -97,14 +103,16 @@ func RemovePoolTier(poolPath string) {
func removePoolTier(poolPath string) {
en.MintAndDistributeGns()

poolTier.changeTier(std.GetHeight(), pools, poolPath, NOT_EMISSION_TARGET_TIER)
currentHeight := std.GetHeight()
poolTier.changeTier(currentHeight, pools, poolPath, NOT_EMISSION_TARGET_TIER)

prevAddr, prevRealm := getPrev()
std.Emit(
"RemovePoolTier",
"prevAddr", prevAddr,
"prevRealm", prevRealm,
"poolPath", poolPath,
"height", formatInt(currentHeight),
)
}

Expand Down
79 changes: 41 additions & 38 deletions contract/r/gnoswap/staker/protocol_fee_unstaking.gno
Original file line number Diff line number Diff line change
Expand Up @@ -16,7 +16,7 @@ var (
unstakingFee = uint64(100) // 1%
)

// handleUnstakingFee calculates and applies the unstaking fee.
// handleUnStakingFee calculates and applies the unstaking fee.
//
// The function deducts a fee from the unstaked amount based on the `unstakingFee` rate,
// sends the fee to the protocol fee address, and emits an event indicating the fee transfer.
Expand All @@ -30,7 +30,7 @@ var (
//
// Returns:
// - uint64: The amount after deducting the unstaking fee.
func handleUnstakingFee(
func handleUnStakingFee(
tokenPath string,
amount uint64,
internal bool,
Expand All @@ -46,7 +46,7 @@ func handleUnstakingFee(
return amount
}

prevAddr, prevRealm := getPrev()
prevAddr, prevPkgPath := getPrev()

if internal {
// staker contract has fee
Expand All @@ -56,11 +56,11 @@ func handleUnstakingFee(
std.Emit(
"ProtocolFeeInternalReward",
"prevAddr", prevAddr,
"prevRealm", prevRealm,
"internal_lpTokenId", formatUint(tokenId),
"internal_poolPath", poolPath,
"internal_tokenPath", consts.GNS_PATH,
"internal_amount", formatUint(feeAmount),
"prevRealm", prevPkgPath,
"fromPositionId", formatUint(tokenId),
"fromPoolPath", poolPath,
"feeTokenPath", consts.GNS_PATH,
"feeAmount", formatUint(feeAmount),
)
} else {
// external contract has fee
Expand All @@ -71,11 +71,11 @@ func handleUnstakingFee(
std.Emit(
"ProtocolFeeExternalReward",
"prevAddr", prevAddr,
"prevRealm", prevRealm,
"internal_lpTokenId", formatUint(tokenId),
"internal_poolPath", poolPath,
"internal_tokenPath", tokenPath,
"internal_amount", formatUint(feeAmount),
"prevRealm", prevPkgPath,
"fromPositionId", formatUint(tokenId),
"fromPoolPath", poolPath,
"feeTokenPath", tokenPath,
"feeAmount", formatUint(feeAmount),
)
}

Expand All @@ -88,7 +88,7 @@ func GetUnstakingFee() uint64 {
return unstakingFee
}

// SetUnstakingFeeByAdmin sets the unstaking fee rate by an admin.
// SetUnStakingFeeByAdmin sets the unstaking fee rate by an admin.
//
// This function ensures that only admins can modify the unstaking fee. It validates
// the input fee and emits an event indicating the change.
Expand All @@ -98,53 +98,52 @@ func GetUnstakingFee() uint64 {
//
// Panics:
// - If the caller is not an admin.
func SetUnstakingFeeByAdmin(fee uint64) {
func SetUnStakingFeeByAdmin(fee uint64) {
caller := std.PrevRealm().Addr()
if err := common.AdminOnly(caller); err != nil {
panic(err.Error())
}

setUnstakingFee(fee)
prevUnStakingFee := getUnStakingFee()

prevAddr, prevRealm := getPrev()
setUnStakingFee(fee)

prevAddr, prevPkgPath := getPrev()

std.Emit(
"SetUnstakingFeeByAdmin",
"SetUnStakingFeeByAdmin",
"prevAddr", prevAddr,
"prevRealm", prevRealm,
"fee", formatUint(fee),
"prevRealm", prevPkgPath,
"prevFee", formatUint(prevUnStakingFee),
"newFee", formatUint(fee),
)
}

// SetUnstakingFee modifies the unstaking fee
// SetUnStakingFee modifies the unstaking fee
// Only governance contract can execute this function via proposal
// ref: https://docs.gnoswap.io/contracts/staker/protocol_fee_unstaking.gno#setunstakingfee
func SetUnstakingFee(fee uint64) {
caller := std.PrevRealm().Addr()
if caller != consts.GOV_GOVERNANCE_ADDR {
panic(addDetailToError(
errNoPermission,
ufmt.Sprintf(
"reward_fee.gno__SetUnstakingFee() || only governance(%s) can set unstaking fee, called from %s",
consts.GOV_GOVERNANCE_ADDR,
caller,
),
))
func SetUnStakingFee(fee uint64) {
caller := getPrevAddr()
if err := common.GovernanceOnly(caller); err != nil {
panic(addDetailToError(err.Error()))
}

setUnstakingFee(fee)
prevUnStakingFee := getUnStakingFee()

prevAddr, prevRealm := getPrev()
setUnStakingFee(fee)

prevAddr, prevPkgPath := getPrev()

std.Emit(
"SetUnstakingFee",
"SetUnStakingFee",
"prevAddr", prevAddr,
"prevRealm", prevRealm,
"fee", formatUint(fee),
"prevRealm", prevPkgPath,
"prevFee", formatUint(prevUnStakingFee),
"newFee", formatUint(fee),
)
}

func setUnstakingFee(fee uint64) {
func setUnStakingFee(fee uint64) {
// 10000 (bps) = 100%
if fee > 10000 {
panic(addDetailToError(
Expand All @@ -155,3 +154,7 @@ func setUnstakingFee(fee uint64) {

unstakingFee = fee
}

func getUnStakingFee() uint64 {
return unstakingFee
}
4 changes: 2 additions & 2 deletions contract/r/gnoswap/staker/protocol_fee_unstaking_test.gno
Original file line number Diff line number Diff line change
Expand Up @@ -41,7 +41,7 @@ func TestHandleUnstakingFee(t *testing.T) {
t.Run(tc.name, func(t *testing.T) {
unstakingFee = tc.expectedFee // Set the fee globally for the test

netAmount := handleUnstakingFee(tc.tokenPath, tc.amount, tc.internal, tc.tokenId, tc.poolPath)
netAmount := handleUnStakingFee(tc.tokenPath, tc.amount, tc.internal, tc.tokenId, tc.poolPath)

if netAmount != tc.expectedNet {
t.Errorf("Expected netAmount %d, got %d", tc.expectedNet, netAmount)
Expand All @@ -68,7 +68,7 @@ func TestSetUnstakingFee(t *testing.T) {
}
}()

setUnstakingFee(tc.fee)
setUnStakingFee(tc.fee)

if !tc.shouldPanic {
if unstakingFee != tc.fee {
Expand Down
Loading

0 comments on commit 59b203d

Please sign in to comment.