From 856845dc9b228fe4be5902c31c67941361355250 Mon Sep 17 00:00:00 2001 From: 0xTopaz Date: Wed, 22 Jan 2025 15:31:53 +0900 Subject: [PATCH 1/3] refactor: event message change --- contract/r/gnoswap/common/halt.gno | 4 +- .../gnoswap/community_pool/community_pool.gno | 5 +- contract/r/gnoswap/emission/distribution.gno | 23 +++++++-- contract/r/gnoswap/emission/emission.gno | 24 ++++++---- contract/r/gnoswap/gnft/gnft.gno | 4 +- contract/r/gnoswap/gns/halving.gno | 34 +++++++++++-- contract/r/gnoswap/gov/governance/config.gno | 6 ++- .../r/gnoswap/gov/governance/proposal.gno | 45 +++++++++++------ contract/r/gnoswap/gov/governance/vote.gno | 20 ++++++-- contract/r/gnoswap/gov/staker/staker.gno | 18 +++---- contract/r/gnoswap/pool/pool.gno | 17 ++++--- contract/r/gnoswap/pool/pool_manager.gno | 14 ++++-- .../pool/protocol_fee_pool_creation.gno | 20 ++++---- .../gnoswap/pool/protocol_fee_withdrawal.gno | 38 ++++++++------- contract/r/gnoswap/pool/swap.gno | 23 +++++---- contract/r/gnoswap/position/position.gno | 48 ++++++++++++------- .../r/gnoswap/protocol_fee/protocol_fee.gno | 8 ++-- contract/r/gnoswap/router/exact_in.gno | 15 +++--- contract/r/gnoswap/router/exact_out.gno | 11 ++--- .../r/gnoswap/router/protocol_fee_swap.gno | 28 ++++++----- 20 files changed, 257 insertions(+), 148 deletions(-) diff --git a/contract/r/gnoswap/common/halt.gno b/contract/r/gnoswap/common/halt.gno index 14528c154..f701a6ad5 100644 --- a/contract/r/gnoswap/common/halt.gno +++ b/contract/r/gnoswap/common/halt.gno @@ -90,11 +90,11 @@ func SetHalt(halt bool) { func setHalt(halt bool) { halted = halt - prevAddr, prevRealm := getPrevAsString() + prevAddr, prevPkgPath := getPrevAsString() std.Emit( "setHalt", "prevAddr", prevAddr, - "prevRealm", prevRealm, + "prevRealm", prevPkgPath, "halt", strconv.FormatBool(halt), ) } diff --git a/contract/r/gnoswap/community_pool/community_pool.gno b/contract/r/gnoswap/community_pool/community_pool.gno index 1255405de..35bf4f3a6 100644 --- a/contract/r/gnoswap/community_pool/community_pool.gno +++ b/contract/r/gnoswap/community_pool/community_pool.gno @@ -29,11 +29,12 @@ func transferToken(tokenPath string, to std.Address, amount uint64) { teller := common.GetTokenTeller(tokenPath) checkErr(teller.Transfer(to, amount)) - prevAddr, prevRealm := getPrevAsString() + prevAddr, prevPkgPath := getPrevAsString() + std.Emit( "TransferToken", "prevAddr", prevAddr, - "prevRealm", prevRealm, + "prevRealm", prevPkgPath, "tokenPath", tokenPath, "to", to.String(), "amount", strconv.FormatUint(amount, 10), diff --git a/contract/r/gnoswap/emission/distribution.gno b/contract/r/gnoswap/emission/distribution.gno index 596efd2af..987b6dfc0 100644 --- a/contract/r/gnoswap/emission/distribution.gno +++ b/contract/r/gnoswap/emission/distribution.gno @@ -122,13 +122,13 @@ func changeDistributionPcts( "ChangeDistributionPct", "prevAddr", prevAddr, "prevRealm", prevPkgPath, - "target01", formatInt(target01), + "target01", targetToStr(target01), "pct01", formatUint(pct01), - "target02", formatInt(target02), + "target02", targetToStr(target02), "pct02", formatUint(pct02), - "target03", formatInt(target03), + "target03", targetToStr(target03), "pct03", formatUint(pct03), - "target04", formatInt(target04), + "target04", targetToStr(target04), "pct04", formatUint(pct04), ) } @@ -287,3 +287,18 @@ func GetHalvingBlocksInRange(start, end int64) ([]int64, []uint64) { } return halvingBlocks, halvingEmissions } + +func targetToStr(target int) string { + switch target { + case LIQUIDITY_STAKER: + return "LIQUIDITY_STAKER" + case DEVOPS: + return "DEVOPS" + case COMMUNITY_POOL: + return "COMMUNITY_POOL" + case GOV_STAKER: + return "GOV_STAKER" + default: + return "UNKNOWN" + } +} diff --git a/contract/r/gnoswap/emission/emission.gno b/contract/r/gnoswap/emission/emission.gno index c91f41b7c..9edfe891b 100644 --- a/contract/r/gnoswap/emission/emission.gno +++ b/contract/r/gnoswap/emission/emission.gno @@ -28,14 +28,17 @@ func MintAndDistributeGns() uint64 { } // Mint new tokens and add any leftover amounts from previous distribution mintedEmissionRewardAmount := gns.MintGns(a2u(consts.EMISSION_ADDR)) + + distributableAmount := mintedEmissionRewardAmount + prevLeftAmount := GetLeftGNSAmount() if hasLeftGNSAmount() { - mintedEmissionRewardAmount += GetLeftGNSAmount() + distributableAmount += prevLeftAmount setLeftGNSAmount(0) } // Distribute tokens and track any undistributed amount - distributedGNSAmount := distributeToTarget(mintedEmissionRewardAmount) - if mintedEmissionRewardAmount != distributedGNSAmount { - setLeftGNSAmount(mintedEmissionRewardAmount - distributedGNSAmount) + distributedGNSAmount := distributeToTarget(distributableAmount) + if distributableAmount != distributedGNSAmount { + setLeftGNSAmount(distributableAmount - distributedGNSAmount) } // Emit event with distribution details @@ -44,11 +47,14 @@ func MintAndDistributeGns() uint64 { "MintAndDistributeGns", "prevAddr", prevAddr, "prevRealm", prevPkgPath, - "internal_lastHeight", formatInt(lastExecutedHeight), - "internal_height", formatInt(currentHeight), - "internal_time", formatInt(time.Now().Unix()), - "internal_amount", formatUint(mintedEmissionRewardAmount), - "internal_totalSupply", formatUint(gns.TotalSupply()), + "lastHeight", formatInt(lastExecutedHeight), + "currentHeight", formatInt(currentHeight), + "currentTimestamp", formatInt(time.Now().Unix()), + "mintedAmount", formatUint(mintedEmissionRewardAmount), + "prevLeftAmount", formatUint(prevLeftAmount), + "distributedAmount", formatUint(distributedGNSAmount), + "currentLeftAmount", formatUint(GetLeftGNSAmount()), + "gnsTotalSupply", formatUint(gns.TotalSupply()), ) setLastExecutedHeight(currentHeight) diff --git a/contract/r/gnoswap/gnft/gnft.gno b/contract/r/gnoswap/gnft/gnft.gno index 6a132aa73..599b8e9cd 100644 --- a/contract/r/gnoswap/gnft/gnft.gno +++ b/contract/r/gnoswap/gnft/gnft.gno @@ -379,8 +379,8 @@ func setTokenURI(tid grc721.TokenID, tURI grc721.TokenURI) error { "SetTokenURI", "prevAddr", prevAddr, "prevRealm", prevPkgPath, - "lpTokenId", "tid", - "tokenURI", "tURI", + "lpTokenId", string(tid), + "tokenURI", string(tURI), ) return nil diff --git a/contract/r/gnoswap/gns/halving.gno b/contract/r/gnoswap/gns/halving.gno index 22fdad2d8..912181799 100644 --- a/contract/r/gnoswap/gns/halving.gno +++ b/contract/r/gnoswap/gns/halving.gno @@ -333,13 +333,26 @@ func SetAvgBlockTimeInMsByAdmin(ms int64) { prevAvgBlockTimeInMs := GetAvgBlockTimeInMs() setAvgBlockTimeInMs(ms) + halvingData := GetEmissionState().getHalvingData() prevAddr, prevPkgPath := getPrev() std.Emit( "SetAvgBlockTimeInMsByAdmin", "prevAddr", prevAddr, "prevRealm", prevPkgPath, - "prevAvgBlockTimeInMs", formatInt(prevAvgBlockTimeInMs), - "avgBlockTimeInMs", formatInt(ms), + "prevAvgBlockTimeMs", formatInt(prevAvgBlockTimeInMs), + "newAvgBlockTimeMs", formatInt(ms), + "endBlock1Year", formatInt(halvingData.getEndBlockHeight(1)), + "endBlock2Year", formatInt(halvingData.getEndBlockHeight(2)), + "endBlock3Year", formatInt(halvingData.getEndBlockHeight(3)), + "endBlock4Year", formatInt(halvingData.getEndBlockHeight(4)), + "endBlock5Year", formatInt(halvingData.getEndBlockHeight(4)), + "endBlock6Year", formatInt(halvingData.getEndBlockHeight(5)), + "endBlock7Year", formatInt(halvingData.getEndBlockHeight(6)), + "endBlock8Year", formatInt(halvingData.getEndBlockHeight(7)), + "endBlock9Year", formatInt(halvingData.getEndBlockHeight(8)), + "endBlock10Year", formatInt(halvingData.getEndBlockHeight(9)), + "endBlock11Year", formatInt(halvingData.getEndBlockHeight(10)), + "endBlock12Year", formatInt(halvingData.getEndBlockHeight(11)), ) } @@ -351,13 +364,26 @@ func SetAvgBlockTimeInMs(ms int64) { prevAvgBlockTimeInMs := GetAvgBlockTimeInMs() setAvgBlockTimeInMs(ms) + halvingData := GetEmissionState().getHalvingData() prevAddr, prevPkgPath := getPrev() std.Emit( "SetAvgBlockTimeInMs", "prevAddr", prevAddr, "prevRealm", prevPkgPath, - "prevAvgBlockTimeInMs", formatInt(prevAvgBlockTimeInMs), - "avgBlockTimeInMs", formatInt(ms), + "prevAvgBlockTimeMs", formatInt(prevAvgBlockTimeInMs), + "newAvgBlockTimeMs", formatInt(ms), + "endBlock1Year", formatInt(halvingData.getEndBlockHeight(1)), + "endBlock2Year", formatInt(halvingData.getEndBlockHeight(2)), + "endBlock3Year", formatInt(halvingData.getEndBlockHeight(3)), + "endBlock4Year", formatInt(halvingData.getEndBlockHeight(4)), + "endBlock5Year", formatInt(halvingData.getEndBlockHeight(4)), + "endBlock6Year", formatInt(halvingData.getEndBlockHeight(5)), + "endBlock7Year", formatInt(halvingData.getEndBlockHeight(6)), + "endBlock8Year", formatInt(halvingData.getEndBlockHeight(7)), + "endBlock9Year", formatInt(halvingData.getEndBlockHeight(8)), + "endBlock10Year", formatInt(halvingData.getEndBlockHeight(9)), + "endBlock11Year", formatInt(halvingData.getEndBlockHeight(10)), + "endBlock12Year", formatInt(halvingData.getEndBlockHeight(11)), ) } diff --git a/contract/r/gnoswap/gov/governance/config.gno b/contract/r/gnoswap/gov/governance/config.gno index bbbe756ed..7119f3ed8 100644 --- a/contract/r/gnoswap/gov/governance/config.gno +++ b/contract/r/gnoswap/gov/governance/config.gno @@ -97,7 +97,8 @@ func reconfigure( en.MintAndDistributeGns() updateProposalsState() - newVersion := getLatestVersion() + 1 + prevVersion := getLatestVersion() + newVersion := prevVersion + 1 config = Config{ VotingStartDelay: votingStartDelay, @@ -121,8 +122,9 @@ func reconfigure( "quorum", formatUint(config.Quorum), "proposalCreationThreshold", formatUint(config.ProposalCreationThreshold), "executionDelay", formatUint(config.ExecutionDelay), - "executionWindow", formatUint(config.ExecutionWindow), + "executionPeriod", formatUint(config.ExecutionWindow), "newConfigVersion", formatUint(newVersion), + "prevConfigVersion", formatUint(prevVersion), ) return newVersion diff --git a/contract/r/gnoswap/gov/governance/proposal.gno b/contract/r/gnoswap/gov/governance/proposal.gno index a0ba8de5a..449c155d1 100644 --- a/contract/r/gnoswap/gov/governance/proposal.gno +++ b/contract/r/gnoswap/gov/governance/proposal.gno @@ -53,6 +53,9 @@ func ProposeText( // votingMax does not include quantities delegated through Launchpad. votingMax, possibleAddressWithWeight := gs.GetPossibleVotingAddressWithWeight(now - config.VotingWeightSmoothingDuration) + maxVotingWeight := u256.NewUint(votingMax) + quorumAmount := maxVotingWeight.Uint64() * config.Quorum / 100 + proposal := ProposalInfo{ Proposer: proposer, ProposalType: Text, @@ -63,10 +66,10 @@ func ProposeText( }, Yea: u256.Zero(), Nay: u256.Zero(), - MaxVotingWeight: u256.NewUint(votingMax), + MaxVotingWeight: maxVotingWeight, PossibleAddressWithWeight: possibleAddressWithWeight, ConfigVersion: uint64(configVersions.Size()), // use latest config version - QuorumAmount: xgns.VotingSupply() * config.Quorum / 100, + QuorumAmount: quorumAmount, Title: title, Description: description, } @@ -83,10 +86,10 @@ func ProposeText( "title", title, "description", description, "proposalId", formatUint(proposalId), + "quorumAmount", formatUint(proposal.QuorumAmount), "maxVotingWeight", proposal.MaxVotingWeight.ToString(), - "createdAt", formatUint(proposal.State.CreatedAt), "configVersion", formatUint(proposal.ConfigVersion), - "quorumAmount", formatUint(proposal.QuorumAmount), + "createdAt", formatUint(proposal.State.CreatedAt), ) return proposalId } @@ -120,6 +123,9 @@ func ProposeCommunityPoolSpend( now := uint64(time.Now().Unix()) votingMax, possibleAddressWithWeight := gs.GetPossibleVotingAddressWithWeight(now - config.VotingWeightSmoothingDuration) + maxVotingWeight := u256.NewUint(votingMax) + quorumAmount := maxVotingWeight.Uint64() * config.Quorum / 100 + proposal := ProposalInfo{ Proposer: proposer, ProposalType: CommunityPoolSpend, @@ -130,10 +136,10 @@ func ProposeCommunityPoolSpend( }, Yea: u256.Zero(), Nay: u256.Zero(), - MaxVotingWeight: u256.NewUint(votingMax), + MaxVotingWeight: maxVotingWeight, PossibleAddressWithWeight: possibleAddressWithWeight, ConfigVersion: uint64(configVersions.Size()), - QuorumAmount: xgns.VotingSupply() * config.Quorum / 100, + QuorumAmount: quorumAmount, Title: title, Description: description, CommunityPoolSpend: CommunityPoolSpendInfo{ @@ -147,17 +153,21 @@ func ProposeCommunityPoolSpend( proposals.Set(formatUint(proposalId), proposal) latestProposalByProposer.Set(proposer.String(), proposalId) - prevAddr, prevRealm := getPrev() + prevAddr, prevPkgPath := getPrev() std.Emit( "ProposeCommunityPoolSpend", "prevAddr", prevAddr, - "prevRealm", prevRealm, + "prevRealm", prevPkgPath, "title", title, "description", description, "to", to.String(), "tokenPath", tokenPath, "amount", formatUint(amount), - "internal_proposalId", formatUint(proposalId), + "proposalId", formatUint(proposalId), + "quorumAmount", formatUint(proposal.QuorumAmount), + "maxVotingWeight", proposal.MaxVotingWeight.ToString(), + "configVersion", formatUint(proposal.ConfigVersion), + "createdAt", formatUint(proposal.State.CreatedAt), ) return proposalId @@ -207,6 +217,9 @@ func ProposeParameterChange( now := uint64(time.Now().Unix()) votingMax, possibleAddressWithWeight := gs.GetPossibleVotingAddressWithWeight(now - config.VotingWeightSmoothingDuration) + maxVotingWeight := u256.NewUint(votingMax) + quorumAmount := maxVotingWeight.Uint64() * config.Quorum / 100 + proposal := ProposalInfo{ Proposer: proposer, ProposalType: ParameterChange, @@ -217,10 +230,10 @@ func ProposeParameterChange( }, Yea: u256.Zero(), Nay: u256.Zero(), - MaxVotingWeight: u256.NewUint(votingMax), + MaxVotingWeight: maxVotingWeight, PossibleAddressWithWeight: possibleAddressWithWeight, ConfigVersion: uint64(configVersions.Size()), - QuorumAmount: xgns.VotingSupply() * config.Quorum / 100, + QuorumAmount: quorumAmount, Title: title, Description: description, Execution: ExecutionInfo{ @@ -233,16 +246,20 @@ func ProposeParameterChange( proposals.Set(formatUint(proposalId), proposal) latestProposalByProposer.Set(proposer.String(), proposalId) - prevAddr, prevRealm := getPrev() + prevAddr, prevPkgPath := getPrev() std.Emit( "ProposeParameterChange", "prevAddr", prevAddr, - "prevRealm", prevRealm, + "prevRealm", prevPkgPath, "title", title, "description", description, "numToExecute", formatUint(numToExecute), "executions", executions, - "internal_proposalId", formatUint(proposalId), + "proposalId", formatUint(proposalId), + "quorumAmount", formatUint(proposal.QuorumAmount), + "maxVotingWeight", proposal.MaxVotingWeight.ToString(), + "configVersion", formatUint(proposal.ConfigVersion), + "createdAt", formatUint(proposal.State.CreatedAt), ) return proposalId diff --git a/contract/r/gnoswap/gov/governance/vote.gno b/contract/r/gnoswap/gov/governance/vote.gno index 508999301..d1fc77915 100644 --- a/contract/r/gnoswap/gov/governance/vote.gno +++ b/contract/r/gnoswap/gov/governance/vote.gno @@ -23,8 +23,10 @@ type voteWithWeight struct { } var ( - votes = avl.NewTree() // voteKey(proposalId:user) -> yes/no - userVotes = avl.NewTree() // user -> proposalId -> voteWithWeight + votes = avl.NewTree() // voteKey(proposalId:user) -> yes/no + userVotes = avl.NewTree() // user -> proposalId -> voteWithWeight + accumYesVotes = make(map[uint64]uint64) // proposalId -> yes + accumNoVotes = make(map[uint64]uint64) // proposalId -> no ) func createVoteKey(pid uint64, voter string) string { @@ -40,7 +42,8 @@ func getVote(pid uint64, voter string) (bool, bool) { } func setVote(pid uint64, voter string, vote bool) { - votes.Set(createVoteKey(pid, voter), vote) + voteKey := createVoteKey(pid, voter) + votes.Set(voteKey, vote) } func createUserVoteKey(voter std.Address, pid uint64) string { @@ -56,6 +59,11 @@ func getUserVote(voter std.Address, pid uint64) (voteWithWeight, bool) { } func setUserVote(voter std.Address, pid uint64, vote voteWithWeight) { + if vote.Yes { + accumYesVotes[pid] += vote.Weight + } else { + accumNoVotes[pid] += vote.Weight + } userVotes.Set(createUserVoteKey(voter, pid), vote) } @@ -109,6 +117,8 @@ func Vote(pid uint64, yes bool) string { "voter", voter.String(), "yes", voteToString(yes), "voteWeight", formatUint(state.userWeight), + "voteYes", formatUint(accumYesVotes[pid]), + "voteNo", formatUint(accumNoVotes[pid]), ) return voteKey @@ -240,11 +250,11 @@ func Cancel(proposalId uint64) { proposals.Set(formatUint(proposalId), proposal) - prevAddr, prevRealm := getPrev() + prevAddr, prevPkgPath := getPrev() std.Emit( "Cancel", "prevAddr", prevAddr, - "prevRealm", prevRealm, + "prevRealm", prevPkgPath, "proposalId", formatUint(proposalId), ) } diff --git a/contract/r/gnoswap/gov/staker/staker.gno b/contract/r/gnoswap/gov/staker/staker.gno index 934c86eee..e98c3317f 100644 --- a/contract/r/gnoswap/gov/staker/staker.gno +++ b/contract/r/gnoswap/gov/staker/staker.gno @@ -21,7 +21,7 @@ import ( type lockedGNS struct { amount uint64 unlock uint64 - collected bool // TODO: + collected bool } const TIMESTAMP_7_DAYS = uint64(604800) // 7 days in seconds @@ -318,20 +318,18 @@ func CollectReward() { // // still, this is a tangled with the policy issue, so should be discussed. - - // TODO: if reward > 0 { gns.Transfer(a2u(caller), reward) std.Emit( "CollectEmissionReward", "prevAddr", prevAddr, "prevRealm", prevPkgPath, + "from", consts.GOV_STAKER_ADDR.String(), "to", caller.String(), "emissionRewardAmount", formatUint(reward), ) } - // TODO:: for tokenPath, amount := range protocolFeeRewards { if tokenPath == consts.WUGNOT_PATH { if amount > 0 { @@ -348,6 +346,8 @@ func CollectReward() { "prevAddr", prevAddr, "prevRealm", prevPkgPath, "tokenPath", tokenPath, + "from", consts.GOV_STAKER_ADDR.String(), + "to", caller.String(), "collectedAmount", formatUint(amount), ) } @@ -364,7 +364,6 @@ func CollectRewardFromLaunchPad(to std.Address) { prevAddr, prevPkgPath := getPrev() - // TODO:: emissionReward, protocolFeeRewards := rewardState.Claim(to, getCurrentBalance(), getCurrentProtocolFeeBalance()) if emissionReward > 0 { gns.Transfer(a2u(to), emissionReward) @@ -372,12 +371,12 @@ func CollectRewardFromLaunchPad(to std.Address) { "CollectEmissionFromLaunchPad", "prevAddr", prevAddr, "prevRealm", prevPkgPath, + "from", consts.GOV_STAKER_ADDR.String(), "to", to.String(), - "amount", formatUint(emissionReward), + "emissionRewardAmount", formatUint(emissionReward), ) } - // TODO:: for tokenPath, amount := range protocolFeeRewards { transferProtocolFee(tokenPath, to, amount) std.Emit( @@ -385,11 +384,12 @@ func CollectRewardFromLaunchPad(to std.Address) { "prevAddr", prevAddr, "prevRealm", prevPkgPath, "tokenPath", tokenPath, - "amount", formatUint(amount), + "from", consts.GOV_STAKER_ADDR.String(), + "to", to.String(), + "collectedAmount", formatUint(amount), ) } - } func transferProtocolFee(tokenPath string, to std.Address, amount uint64) { diff --git a/contract/r/gnoswap/pool/pool.gno b/contract/r/gnoswap/pool/pool.gno index 0f743dcc2..07e9c5971 100644 --- a/contract/r/gnoswap/pool/pool.gno +++ b/contract/r/gnoswap/pool/pool.gno @@ -1,9 +1,8 @@ package pool import ( - "std" - "gno.land/p/demo/ufmt" + "std" "gno.land/r/gnoswap/v1/common" "gno.land/r/gnoswap/v1/consts" @@ -267,11 +266,11 @@ func setFeeProtocolInternal(feeProtocol0, feeProtocol1 uint8, eventName string) eventName, "prevAddr", prevAddr, "prevRealm", prevPkgPath, - "feeProtocol0Old", formatUint(feeProtocol0Old), - "feeProtocol1Old", formatUint(feeProtocol1Old), - "feeProtocol0", formatUint(feeProtocol0), - "feeProtocol1", formatUint(feeProtocol1), - "internal_newFee", formatUint(newFee), + "prevFeeProtocol0", formatUint(uint64(feeProtocol0Old)), + "prevFeeProtocol1", formatUint(uint64(feeProtocol1Old)), + "feeProtocol0", formatUint(uint64(feeProtocol0)), + "feeProtocol1", formatUint(uint64(feeProtocol1)), + "newFee", formatUint(uint64(newFee)), ) } @@ -385,8 +384,8 @@ func CollectProtocolByAdmin( "token1Path", token1Path, "fee", formatUint(fee), "recipient", recipient.String(), - "internal_amount0", amount0, - "internal_amount1", amount1, + "collectedAmount0", amount0, + "collectedAmount1", amount1, ) return amount0, amount1 diff --git a/contract/r/gnoswap/pool/pool_manager.gno b/contract/r/gnoswap/pool/pool_manager.gno index c0c6a1deb..fb4600f1b 100644 --- a/contract/r/gnoswap/pool/pool_manager.gno +++ b/contract/r/gnoswap/pool/pool_manager.gno @@ -198,24 +198,28 @@ func CreatePool( "PoolCreationFee", "prevAddr", prevAddr, "prevRealm", prevRealm, - "internal_poolPath", poolPath, - "internal_tokenPath", consts.GNS_PATH, - "internal_amount", formatUint(poolCreationFee), + "poolPath", poolPath, + "feeTokenPath", consts.GNS_PATH, + "feeAmount", formatUint(poolCreationFee), ) } pool = newPool(poolInfo) pools.Set(poolPath, pool) + currentTick := common.TickMathGetTickAtSqrtRatio(sqrtPriceX96) + std.Emit( "CreatePool", "prevAddr", prevAddr, "prevRealm", prevRealm, "token0Path", token0Path, "token1Path", token1Path, - "fee", formatUint(fee), + "fee", formatUint(uint64(fee)), "sqrtPriceX96", sqrtPriceX96, - "internal_poolPath", poolPath, + "poolPath", poolPath, + "tick", formatInt(int64(currentTick)), + "tickSpacing", formatInt(int64(poolInfo.TickSpacing())), ) } diff --git a/contract/r/gnoswap/pool/protocol_fee_pool_creation.gno b/contract/r/gnoswap/pool/protocol_fee_pool_creation.gno index f849f14ed..0f4106d73 100644 --- a/contract/r/gnoswap/pool/protocol_fee_pool_creation.gno +++ b/contract/r/gnoswap/pool/protocol_fee_pool_creation.gno @@ -22,13 +22,12 @@ func GetPoolCreationFee() uint64 { // Only governance contract can execute this function via proposal // ref: https://docs.gnoswap.io/contracts/pool/protocol_fee_pool_creation.gno#setpoolcreationfee func SetPoolCreationFee(fee uint64) { - // TODO: - // 1. IsHalted name chnage to assertIsHalted - common.IsHalted() - caller := std.PrevRealm().Addr() + assertOnlyNotHalted() + caller := getPrevAddr() if err := common.GovernanceOnly(caller); err != nil { panic(err.Error()) } + prevPoolCreationFee := poolCreationFee setPoolCreationFee(fee) prevAddr, prevPkgPath := getPrevAsString() @@ -36,21 +35,21 @@ func SetPoolCreationFee(fee uint64) { "SetPoolCreationFee", "prevAddr", prevAddr, "prevRealm", prevPkgPath, - "fee", formatUint(fee), + "prevFee", formatUint(prevPoolCreationFee), + "newFee", formatUint(fee), ) } // SetPoolCreationFeeByAdmin sets the poolCreationFee by Admin. // Only admin can execute this function. func SetPoolCreationFeeByAdmin(fee uint64) { - // TODO: - // 1. IsHalted name chnage to assertIsHalted - common.IsHalted() + assertOnlyNotHalted() - caller := std.PrevRealm().Addr() + caller := getPrevAddr() if err := common.AdminOnly(caller); err != nil { panic(err.Error()) } + prevPoolCreationFee := poolCreationFee setPoolCreationFee(fee) prevAddr, prevPkgPath := getPrevAsString() @@ -58,7 +57,8 @@ func SetPoolCreationFeeByAdmin(fee uint64) { "SetPoolCreationFeeByAdmin", "prevAddr", prevAddr, "prevRealm", prevPkgPath, - "fee", formatUint(fee), + "prevFee", formatUint(prevPoolCreationFee), + "newFee", formatUint(fee), ) } diff --git a/contract/r/gnoswap/pool/protocol_fee_withdrawal.gno b/contract/r/gnoswap/pool/protocol_fee_withdrawal.gno index 9471d2230..3cad248d8 100644 --- a/contract/r/gnoswap/pool/protocol_fee_withdrawal.gno +++ b/contract/r/gnoswap/pool/protocol_fee_withdrawal.gno @@ -41,18 +41,18 @@ const ( func HandleWithdrawalFee( tokenId uint64, token0Path string, - _amount0 string, // uint256 + amount0 string, // uint256 token1Path string, - _amount1 string, // uint256 + amount1 string, // uint256 poolPath string, positionCaller std.Address, ) (string, string) { // uint256 x2 - common.IsHalted() + assertOnlyNotHalted() common.MustRegistered(token0Path) common.MustRegistered(token1Path) // only position contract can call this function - caller := std.PrevRealm().Addr() + caller := getPrevAddr() if err := common.PositionOnly(caller); err != nil { panic(addDetailToError( errNoPermission, @@ -62,11 +62,11 @@ func HandleWithdrawalFee( fee := GetWithdrawalFee() if fee == ZeroBps { - return _amount0, _amount1 + return amount0, amount1 } - feeAmount0, afterAmount0 := calculateAmountWithFee(u256.MustFromDecimal(_amount0), u256.NewUint(fee)) - feeAmount1, afterAmount1 := calculateAmountWithFee(u256.MustFromDecimal(_amount1), u256.NewUint(fee)) + feeAmount0, afterAmount0 := calculateAmountWithFee(u256.MustFromDecimal(amount0), u256.NewUint(fee)) + feeAmount1, afterAmount1 := calculateAmountWithFee(u256.MustFromDecimal(amount1), u256.NewUint(fee)) token0Teller := common.GetTokenTeller(token0Path) checkTransferError(token0Teller.TransferFrom(positionCaller, consts.PROTOCOL_FEE_ADDR, feeAmount0.Uint64())) @@ -82,11 +82,9 @@ func HandleWithdrawalFee( "prevAddr", prevAddr, "prevRealm", prevPkgPath, "lpTokenId", formatUint(tokenId), - "token0Path", token0Path, - "token1Path", token1Path, - "internal_fee0Amount", feeAmount0.ToString(), - "internal_fee1Amount", feeAmount1.ToString(), "poolPath", poolPath, + "feeAmount0", feeAmount0.ToString(), + "feeAmount1", feeAmount1.ToString(), ) return afterAmount0.ToString(), afterAmount1.ToString() @@ -102,12 +100,14 @@ func GetWithdrawalFee() uint64 { // Only governance contract can execute this function via proposal // ref: https://docs.gnoswap.io/contracts/pool/protocol_fee_withdrawal.gno#setwithdrawalfee func SetWithdrawalFee(fee uint64) { - common.IsHalted() - caller := std.PrevRealm().Addr() + assertOnlyNotHalted() + caller := getPrevAddr() if err := common.GovernanceOnly(caller); err != nil { panic(err.Error()) } + prevWithdrawalFee := withdrawalFeeBPS + setWithdrawalFee(fee) prevAddr, prevPkgPath := getPrevAsString() @@ -115,19 +115,22 @@ func SetWithdrawalFee(fee uint64) { "SetWithdrawalFee", "prevAddr", prevAddr, "prevRealm", prevPkgPath, - "fee", formatUint(fee), + "prevFee", formatUint(prevWithdrawalFee), + "newFee", formatUint(fee), ) } // SetWithdrawalFeeByAdmin sets the withdrawal fee by Admin. // Only admin can execute this function. func SetWithdrawalFeeByAdmin(fee uint64) { - common.IsHalted() - caller := std.PrevRealm().Addr() + assertOnlyNotHalted() + caller := getPrevAddr() if err := common.AdminOnly(caller); err != nil { panic(err.Error()) } + prevWithdrawalFee := withdrawalFeeBPS + setWithdrawalFee(fee) prevAddr, prevPkgPath := getPrevAsString() @@ -135,7 +138,8 @@ func SetWithdrawalFeeByAdmin(fee uint64) { "SetWithdrawalFeeByAdmin", "prevAddr", prevAddr, "prevRealm", prevPkgPath, - "fee", formatUint(fee), + "prevFee", formatUint(prevWithdrawalFee), + "newFee", formatUint(fee), ) } diff --git a/contract/r/gnoswap/pool/swap.gno b/contract/r/gnoswap/pool/swap.gno index a6f942cae..89d9fdd09 100644 --- a/contract/r/gnoswap/pool/swap.gno +++ b/contract/r/gnoswap/pool/swap.gno @@ -52,9 +52,9 @@ func Swap( sqrtPriceLimitX96 string, payer std.Address, // router ) (string, string) { - common.IsHalted() + assertOnlyNotHalted() if common.GetLimitCaller() { - caller := std.PrevRealm().Addr() + caller := getPrevAddr() if err := common.RouterOnly(caller); err != nil { panic(addDetailToError( errNoPermission, @@ -115,15 +115,22 @@ func Swap( "prevRealm", prevPkgPath, "poolPath", GetPoolPath(token0Path, token1Path, fee), "zeroForOne", formatBool(zeroForOne), - "amountSpecified", amountSpecified, + "requestAmount", amountSpecified, "sqrtPriceLimitX96", sqrtPriceLimitX96, "payer", payer.String(), "recipient", recipient.String(), - "internal_amount0", result.Amount0.ToString(), - "internal_amount1", result.Amount1.ToString(), - "internal_protocolFee0", pool.protocolFees.token0.ToString(), - "internal_protocolFee1", pool.protocolFees.token1.ToString(), - "internal_sqrtPriceX96", pool.slot0.sqrtPriceX96.ToString(), + "token0Amount", result.Amount0.ToString(), + "token1Amount", result.Amount1.ToString(), + "protocolFee0", pool.protocolFees.token0.ToString(), + "protocolFee1", pool.protocolFees.token1.ToString(), + "sqrtPriceX96", pool.slot0.sqrtPriceX96.ToString(), + "exactIn", strconv.FormatBool(comp.ExactInput), + "currentTick", strconv.FormatInt(int64(pool.Slot0Tick()), 10), + "liquidity", pool.Liquidity().ToString(), + "feeGrowthGlobal0X128", pool.FeeGrowthGlobal0X128().ToString(), + "feeGrowthGlobal1X128", pool.FeeGrowthGlobal1X128().ToString(), + "balanceToken0", pool.BalanceToken0().ToString(), + "balanceToken1", pool.BalanceToken1().ToString(), ) return result.Amount0.ToString(), result.Amount1.ToString() diff --git a/contract/r/gnoswap/position/position.gno b/contract/r/gnoswap/position/position.gno index 16c766b83..7b8e7b656 100644 --- a/contract/r/gnoswap/position/position.gno +++ b/contract/r/gnoswap/position/position.gno @@ -237,8 +237,8 @@ func Mint( "Mint", "prevAddr", prevAddr, "prevRealm", prevPkgPath, - "tickLower", formatInt(processedInput.tickLower), - "tickUpper", formatInt(processedInput.tickUpper), + "tickLower", formatInt(int64(processedInput.tickLower)), + "tickUpper", formatInt(int64(processedInput.tickUpper)), "poolPath", processedInput.poolPath, "mintTo", mintTo.String(), "caller", caller.String(), @@ -615,6 +615,8 @@ func IncreaseLiquidity( } poolSqrtPriceX96 := pl.PoolGetSlot0SqrtPriceX96(poolPath) + token0Balance := pl.PoolGetBalanceToken0(poolPath) + token1Balance := pl.PoolGetBalanceToken1(poolPath) prevAddr, prevPkgPath := getPrevAsString() @@ -629,6 +631,9 @@ func IncreaseLiquidity( "amount0", amount0.ToString(), "amount1", amount1.ToString(), "sqrtPriceX96", poolSqrtPriceX96, + "positionLiquidity", position.liquidity.ToString(), + "token0Balance", token0Balance.ToString(), + "token1Balance", token1Balance.ToString(), ) return tokenId, liquidity.ToString(), amount0.ToString(), amount1.ToString(), poolPath @@ -776,6 +781,8 @@ func DecreaseLiquidity( tokenId, liquidity, fee0, fee1, amount0, amount1, poolPath := decreaseLiquidity(decreaseLiquidityParams) poolSqrtPriceX96 := pl.PoolGetSlot0SqrtPriceX96(poolPath) + token0Balance := pl.PoolGetBalanceToken0(poolPath) + token1Balance := pl.PoolGetBalanceToken1(poolPath) prevAddr, prevPkgPath := getPrevAsString() @@ -784,15 +791,17 @@ func DecreaseLiquidity( "prevAddr", prevAddr, "prevRealm", prevPkgPath, "lpTokenId", formatUint(tokenId), - "removeLiquidity", liquidityStr, - "internal_poolPath", poolPath, - "internal_liquidity", liquidity.ToString(), - "internal_fee0", fee0.ToString(), - "internal_fee1", fee1.ToString(), - "internal_amount0", amount0.ToString(), - "internal_amount1", amount1.ToString(), - "internal_unwrapResult", formatBool(unwrapResult), - "internal_sqrtPriceX96", poolSqrtPriceX96, + "poolPath", poolPath, + "decreasedLiquidity", liquidity.ToString(), + "feeAmount0", fee0.ToString(), + "feeAmount1", fee1.ToString(), + "amount0", amount0.ToString(), + "amount1", amount1.ToString(), + "unwrapResult", formatBool(unwrapResult), + "sqrtPriceX96", poolSqrtPriceX96, + "positionLiquidity", PositionGetPositionLiquidityStr(tokenId), + "token0Balance", token0Balance.ToString(), + "token1Balance", token1Balance.ToString(), ) return tokenId, liquidity.ToString(), fee0.ToString(), fee1.ToString(), amount0.ToString(), amount1.ToString(), poolPath @@ -982,8 +991,8 @@ func CollectFee(tokenId uint64, unwrapResult bool) (uint64, string, string, stri "prevAddr", prevAddr, "prevRealm", prevPkgPath, "lpTokenId", formatUint(tokenId), - "fee0", withoutFee0, - "fee1", withoutFee1, + "feeAmount0", withoutFee0, + "feeAmount1", withoutFee1, "poolPath", position.poolKey, "unwrapResult", formatBool(unwrapResult), ) @@ -1095,6 +1104,8 @@ func Reposition( mustUpdatePosition(tokenId, position) poolSqrtPriceX96 := pl.PoolGetSlot0SqrtPriceX96(position.poolKey) + token0Balance := pl.PoolGetBalanceToken0(poolPath) + token1Balance := pl.PoolGetBalanceToken1(poolPath) prevAddr, prevPkgPath := getPrevAsString() std.Emit( @@ -1102,15 +1113,18 @@ func Reposition( "prevAddr", prevAddr, "prevRealm", prevPkgPath, "lpTokenId", formatUint(tokenId), - "tickLower", formatInt(tickLower), - "tickUpper", formatInt(tickUpper), + "tickLower", formatInt(int64(tickLower)), + "tickUpper", formatInt(int64(tickUpper)), "liquidity", liquidity.ToString(), "amount0", amount0.ToString(), "amount1", amount1.ToString(), - "oldTickLower", formatInt(oldTickLower), - "oldTickUpper", formatInt(oldTickUpper), + "prevTickLower", formatInt(int64(oldTickLower)), + "prevTickUpper", formatInt(int64(oldTickUpper)), "poolPath", position.poolKey, "sqrtPriceX96", poolSqrtPriceX96, + "positionLiquidity", PositionGetPositionLiquidityStr(tokenId), + "token0Balance", token0Balance.ToString(), + "token1Balance", token1Balance.ToString(), ) return tokenId, liquidity.ToString(), tickLower, tickUpper, amount0.ToString(), amount1.ToString() diff --git a/contract/r/gnoswap/protocol_fee/protocol_fee.gno b/contract/r/gnoswap/protocol_fee/protocol_fee.gno index ce36e320e..30cd140a2 100644 --- a/contract/r/gnoswap/protocol_fee/protocol_fee.gno +++ b/contract/r/gnoswap/protocol_fee/protocol_fee.gno @@ -92,14 +92,16 @@ func setDevOpsPct(pct uint64) { )) } + prevDevOpsPct := devOpsPct devOpsPct = pct - prevAddr, prevRealm := getPrev() + prevAddr, prevPkgPath := getPrev() std.Emit( "SetDevOpsPct", "prevAddr", prevAddr, - "prevRealm", prevRealm, - "pct", strconv.FormatUint(pct, 10), + "prevRealm", prevPkgPath, + "newPct", strconv.FormatUint(pct, 10), + "prevPct", strconv.FormatUint(prevDevOpsPct, 10), ) } diff --git a/contract/r/gnoswap/router/exact_in.gno b/contract/r/gnoswap/router/exact_in.gno index 41ba01fc6..f28c98c12 100644 --- a/contract/r/gnoswap/router/exact_in.gno +++ b/contract/r/gnoswap/router/exact_in.gno @@ -26,7 +26,7 @@ func NewExactInSwapOperation(pp ExactInParams) *ExactInSwapOperation { func ExactInSwapRoute( inputToken string, outputToken string, - finalAmountIn string, + amountIn string, RouteArr string, quoteArr string, amountOutMin string, @@ -44,7 +44,7 @@ func ExactInSwapRoute( pp := NewExactInParams( baseParams, - finalAmountIn, + amountIn, amountOutMin, ) @@ -58,7 +58,7 @@ func ExactInSwapRoute( )) } - finalAmountIn, finalAmountOut := finalizeSwap( + inputAmount, outputAmount := finalizeSwap( pp.InputToken, pp.OutputToken, result.AmountIn, @@ -78,15 +78,14 @@ func ExactInSwapRoute( "prevRealm", prevPkgPath, "input", pp.InputToken, "output", pp.OutputToken, - "amountIn", result.AmountIn.ToString(), + "exactAmount", amountIn, "route", pp.RouteArr, "quote", pp.QuoteArr, - "internal_amountIn", result.AmountIn.ToString(), - "internal_amountOut", result.AmountOut.ToString(), - "internal_amountOutWithoutFee", result.AmountOut.ToString(), + "resultInputAmount", inputAmount, + "resultOutputAmount", outputAmount, ) - return finalAmountIn, finalAmountOut + return inputAmount, outputAmount } func (op *ExactInSwapOperation) Validate() error { diff --git a/contract/r/gnoswap/router/exact_out.gno b/contract/r/gnoswap/router/exact_out.gno index d33bb4c52..61ef61578 100644 --- a/contract/r/gnoswap/router/exact_out.gno +++ b/contract/r/gnoswap/router/exact_out.gno @@ -50,7 +50,7 @@ func ExactOutSwapRoute( panic(addDetailToError(errInvalidInput, err.Error())) } - finalAmountIn, finalAmountOut := finalizeSwap( + inputAmount, outputAmount := finalizeSwap( pp.InputToken, pp.OutputToken, result.AmountIn, @@ -70,15 +70,14 @@ func ExactOutSwapRoute( "prevRealm", prevPkgPath, "input", pp.InputToken, "output", pp.OutputToken, - "amountOut", pp.AmountOut, + "exactAmount", amountOut, "route", pp.RouteArr, "quote", pp.QuoteArr, - "internal_amountIn", result.AmountIn.ToString(), - "internal_amountOut", result.AmountOut.ToString(), - "internal_amountOutWithoutFee", result.AmountOut.ToString(), + "resultInputAmount", inputAmount, + "resultOutputAmount", outputAmount, ) - return finalAmountIn, finalAmountOut + return inputAmount, outputAmount } func (op *ExactOutSwapOperation) Validate() error { diff --git a/contract/r/gnoswap/router/protocol_fee_swap.gno b/contract/r/gnoswap/router/protocol_fee_swap.gno index 97faa86bd..d9e298dae 100644 --- a/contract/r/gnoswap/router/protocol_fee_swap.gno +++ b/contract/r/gnoswap/router/protocol_fee_swap.gno @@ -30,22 +30,24 @@ func GetSwapFee() uint64 { // SetSwapFeeByAdmin modifies the swap fee // Only admin can execute this function func SetSwapFeeByAdmin(fee uint64) { - caller := std.PrevRealm().Addr() + caller := getPrevAddr() if err := common.AdminOnly(caller); err != nil { panic(err) } + prevSwapFee := swapFee if err := setSwapFee(fee); err != nil { panic(err) } - prevAddr, prevRealm := getPrev() + prevAddr, prevPkgPath := getPrev() std.Emit( "SetSwapFeeByAdmin", "prevAddr", prevAddr, - "prevRealm", prevRealm, - "fee", formatUint(fee), + "prevRealm", prevPkgPath, + "newFee", formatUint(fee), + "prevFee", formatUint(prevSwapFee), ) } @@ -53,22 +55,24 @@ func SetSwapFeeByAdmin(fee uint64) { // Only governance contract can execute this function via proposal // ref: https://docs.gnoswap.io/contracts/router/protocol_fee_swap.gno#setswapfee func SetSwapFee(fee uint64) { - caller := std.PrevRealm().Addr() + caller := getPrevAddr() if err := common.GovernanceOnly(caller); err != nil { panic(err) } + prevSwapFee := swapFee if err := setSwapFee(fee); err != nil { panic(err) } - prevAddr, prevRealm := getPrev() + prevAddr, prevPkgPath := getPrev() std.Emit( "SetSwapFee", "prevAddr", prevAddr, - "prevRealm", prevRealm, - "fee", formatUint(fee), + "prevRealm", prevPkgPath, + "newFee", formatUint(fee), + "prevFee", formatUint(prevSwapFee), ) } @@ -103,14 +107,14 @@ func handleSwapFee( outputTeller.TransferFrom(std.PrevRealm().Addr(), consts.PROTOCOL_FEE_ADDR, feeAmountUint64) pf.AddToProtocolFee(outputToken, feeAmountUint64) - prevAddr, prevRealm := getPrev() + prevAddr, prevPkgPath := getPrev() std.Emit( "SwapRouteFee", "prevAddr", prevAddr, - "prevRealm", prevRealm, - "internal_tokenPath", outputToken, - "internal_amount", formatUint(feeAmountUint64), + "prevRealm", prevPkgPath, + "tokenPath", outputToken, + "amount", formatUint(feeAmountUint64), ) toUserAfterProtocol := new(u256.Uint).Sub(amount, feeAmount) From 59b203d8eac68a487b3f5f741a9ee7a3cfb4810d Mon Sep 17 00:00:00 2001 From: 0xTopaz Date: Thu, 23 Jan 2025 17:25:34 +0900 Subject: [PATCH 2/3] refactor: staker event --- .../r/gnoswap/staker/external_deposit_fee.gno | 12 +- .../staker/manage_pool_tier_and_warmup.gno | 16 ++- .../gnoswap/staker/protocol_fee_unstaking.gno | 79 ++++++------- .../staker/protocol_fee_unstaking_test.gno | 4 +- contract/r/gnoswap/staker/staker.gno | 106 +++++++++++------- .../staker/staker_external_incentive.gno | 55 ++++----- 6 files changed, 157 insertions(+), 115 deletions(-) diff --git a/contract/r/gnoswap/staker/external_deposit_fee.gno b/contract/r/gnoswap/staker/external_deposit_fee.gno index 6910309f0..2ea3eeb58 100644 --- a/contract/r/gnoswap/staker/external_deposit_fee.gno +++ b/contract/r/gnoswap/staker/external_deposit_fee.gno @@ -35,6 +35,7 @@ func SetDepositGnsAmountByAdmin(amount uint64) { panic(err.Error()) } + prevDepositGnsAmount := getDepositGnsAmount() setDepositGnsAmount(amount) prevAddr, prevPkgPath := getPrev() @@ -43,7 +44,8 @@ func SetDepositGnsAmountByAdmin(amount uint64) { "SetDepositGnsAmountByAdmin", "prevAddr", prevAddr, "prevRealm", prevPkgPath, - "amount", formatUint(amount), + "prevAmount", formatUint(prevDepositGnsAmount), + "newAmount", formatUint(amount), ) } @@ -56,6 +58,7 @@ func SetDepositGnsAmount(amount uint64) { panic(err.Error()) } + prevDepositGnsAmount := getDepositGnsAmount() setDepositGnsAmount(amount) prevAddr, prevPkgPath := getPrev() @@ -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 +} diff --git a/contract/r/gnoswap/staker/manage_pool_tier_and_warmup.gno b/contract/r/gnoswap/staker/manage_pool_tier_and_warmup.gno index 24705ec71..e0aeafa57 100644 --- a/contract/r/gnoswap/staker/manage_pool_tier_and_warmup.gno +++ b/contract/r/gnoswap/staker/manage_pool_tier_and_warmup.gno @@ -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( @@ -44,6 +45,7 @@ func setPoolTier(poolPath string, tier uint64) { "prevRealm", prevRealm, "poolPath", poolPath, "tier", formatUint(tier), + "height", formatInt(currentHeight), ) } @@ -66,7 +68,9 @@ 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( @@ -74,7 +78,9 @@ func changePoolTier(poolPath string, tier uint64) { "prevAddr", prevAddr, "prevRealm", prevRealm, "poolPath", poolPath, - "tier", formatUint(tier), + "prevTier", formatUint(prevTier), + "newTier", formatUint(tier), + "height", formatInt(currentHeight), ) } @@ -97,7 +103,8 @@ 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( @@ -105,6 +112,7 @@ func removePoolTier(poolPath string) { "prevAddr", prevAddr, "prevRealm", prevRealm, "poolPath", poolPath, + "height", formatInt(currentHeight), ) } diff --git a/contract/r/gnoswap/staker/protocol_fee_unstaking.gno b/contract/r/gnoswap/staker/protocol_fee_unstaking.gno index 37dacfce4..e9debfb09 100644 --- a/contract/r/gnoswap/staker/protocol_fee_unstaking.gno +++ b/contract/r/gnoswap/staker/protocol_fee_unstaking.gno @@ -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. @@ -30,7 +30,7 @@ var ( // // Returns: // - uint64: The amount after deducting the unstaking fee. -func handleUnstakingFee( +func handleUnStakingFee( tokenPath string, amount uint64, internal bool, @@ -46,7 +46,7 @@ func handleUnstakingFee( return amount } - prevAddr, prevRealm := getPrev() + prevAddr, prevPkgPath := getPrev() if internal { // staker contract has fee @@ -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 @@ -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), ) } @@ -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. @@ -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( @@ -155,3 +154,7 @@ func setUnstakingFee(fee uint64) { unstakingFee = fee } + +func getUnStakingFee() uint64 { + return unstakingFee +} diff --git a/contract/r/gnoswap/staker/protocol_fee_unstaking_test.gno b/contract/r/gnoswap/staker/protocol_fee_unstaking_test.gno index ad54dac33..6229ac58f 100644 --- a/contract/r/gnoswap/staker/protocol_fee_unstaking_test.gno +++ b/contract/r/gnoswap/staker/protocol_fee_unstaking_test.gno @@ -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) @@ -68,7 +68,7 @@ func TestSetUnstakingFee(t *testing.T) { } }() - setUnstakingFee(tc.fee) + setUnStakingFee(tc.fee) if !tc.shouldPanic { if unstakingFee != tc.fee { diff --git a/contract/r/gnoswap/staker/staker.gno b/contract/r/gnoswap/staker/staker.gno index 96d623a7a..0fd2cf967 100644 --- a/contract/r/gnoswap/staker/staker.gno +++ b/contract/r/gnoswap/staker/staker.gno @@ -2,7 +2,6 @@ package staker import ( "std" - "strconv" "time" "gno.land/p/demo/avl" @@ -295,11 +294,13 @@ func StakeToken(tokenId uint64) (string, string, string) { "StakeToken", "prevAddr", prevAddr, "prevRealm", prevPkgPath, - "lpTokenId", strconv.FormatUint(tokenId, 10), + "positionId", formatUint(tokenId), "poolPath", poolPath, "amount0", token0Amount, "amount1", token1Amount, "liquidity", liquidity.ToString(), + "positionUpperTick", formatInt(tickUpper), + "positionLowerTick", formatInt(tickLower), "currentTick", formatInt(currentTick), "isInRange", formatBool(isInRange), ) @@ -374,11 +375,11 @@ func transferDeposit(tokenId uint64, owner, caller, to std.Address) error { //////////////////////////////////////////////////////////// -// ectReward harvests accumulated rewards for a staked position. This includes both -// inernal GNS emission and external incentive rewards. +// CollectReward harvests accumulated rewards for a staked position. This includes both +// internal GNS emission and external incentive rewards. // // State Transition: -// 1. Warm-up amounts are cleares for both internal and external rewards +// 1. Warm-up amounts are clears for both internal and external rewards // 2. Reward tokens are transferred to the owner // 3. Penalty fees are transferred to protocol/community addresses // 4. GNS balance is recalculated @@ -399,14 +400,14 @@ func transferDeposit(tokenId uint64, owner, caller, to std.Address) error { func CollectReward(tokenId uint64, unwrapResult bool) (string, string) { assertOnlyNotHalted() - en.MintAndDistributeGns() - deposit := deposits.Get(tokenId) caller := getPrevAddr() if err := common.SatisfyCond(caller == deposit.owner); err != nil { panic(addDetailToError(errNoPermission, ufmt.Sprintf("caller is not owner of tokenId(%d)", tokenId))) } + en.MintAndDistributeGns() + currentHeight := std.GetHeight() // get all internal and external rewards reward := calcPositionReward(currentHeight, tokenId) @@ -414,6 +415,8 @@ func CollectReward(tokenId uint64, unwrapResult bool) (string, string) { // update lastCollectHeight to current height deposit.lastCollectHeight = currentHeight + prevAddr, prevPkgPath := getPrev() + // transfer external rewards to user externalReward := reward.External for incentiveId, amount := range externalReward { @@ -428,7 +431,7 @@ func CollectReward(tokenId uint64, unwrapResult bool) (string, string) { incentive.rewardAmount -= amount externalIncentives.Set(incentiveId, incentive) - toUser := handleUnstakingFee(rewardToken, amount, false, tokenId, incentive.targetPoolPath) + toUser := handleUnStakingFee(rewardToken, amount, false, tokenId, incentive.targetPoolPath) teller := common.GetTokenTeller(rewardToken) teller.Transfer(deposit.owner, toUser) @@ -440,48 +443,61 @@ func CollectReward(tokenId uint64, unwrapResult bool) (string, string) { if unwrapResult && rewardToken == consts.WUGNOT_PATH { unwrap(toUser) } + std.Emit( + "CollectReward", + "prevAddr", prevAddr, + "prevRealm", prevPkgPath, + "positionId", formatUint(tokenId), + "poolPath", deposit.targetPoolPath, + "recipient", deposit.owner.String(), + "incentiveId", incentiveId, + "rewardToken", rewardToken, + "rewardAmount", formatUint(toUser), + "rewardPenalty", formatUint(externalPenalty), + "rewardFee", formatUint(amount-toUser), + "isRequestUnwrap", formatBool(unwrapResult), + ) } // internal reward to user - toUser := handleUnstakingFee(consts.GNS_PATH, reward.Internal, true, tokenId, deposit.targetPoolPath) - totalEmissionSent += toUser + toUser := handleUnStakingFee(consts.GNS_PATH, reward.Internal, true, tokenId, deposit.targetPoolPath) if toUser > 0 { + // internal reward to user + totalEmissionSent += toUser gns.Transfer(deposit.owner, toUser) // internal penalty to community pool - gns.Transfer(consts.COMMUNITY_POOL_ADDR, reward.InternalPenalty) totalEmissionSent += reward.InternalPenalty + gns.Transfer(consts.COMMUNITY_POOL_ADDR, reward.InternalPenalty) } unClaimableInternal := ProcessUnClaimableReward(deposit.targetPoolPath, currentHeight) - totalEmissionSent += unClaimableInternal if unClaimableInternal > 0 { - // internal unclaimable to community pool + // internal unClaimable to community pool + totalEmissionSent += unClaimableInternal gns.Transfer(consts.COMMUNITY_POOL_ADDR, unClaimableInternal) } - prevAddr, prevPkgPath := getPrev() std.Emit( "CollectReward", "prevAddr", prevAddr, "prevRealm", prevPkgPath, - "lpTokenId", formatUint(tokenId), - "internal_poolPath", deposit.targetPoolPath, - "internal_incentiveId", "INTERNAL", - "internal_rewardToken", consts.GNS_PATH, - "internal_recipient", deposit.owner.String(), - "internal_reward", formatUint(reward.Internal), - "internal_toUser", formatUint(toUser), - "internal_toFee", formatUint(reward.Internal-toUser), - "internal_toPenalty", formatUint(reward.InternalPenalty), - "internal_unClaimable", formatUint(unClaimableInternal), + "positionId", formatUint(tokenId), + "poolPath", deposit.targetPoolPath, + "recipient", deposit.owner.String(), + "rewardToken", consts.GNS_PATH, + "rewardAmount", formatUint(reward.Internal), + "rewardToUser", formatUint(toUser), + "rewardToFee", formatUint(reward.Internal-toUser), + "rewardPenalty", formatUint(reward.InternalPenalty), + "rewardUnClaimableAmount", formatUint(unClaimableInternal), ) return formatUint(toUser), formatUint(reward.InternalPenalty) } -// UnstakeToken withdraws an LP token from staking, collecting all pending rewards +// UnStakeToken withdraws an LP token from staking, collecting all pending rewards // and returning the token to its original owner. // // State transitions: @@ -497,7 +513,7 @@ func CollectReward(tokenId uint64, unwrapResult bool) (string, string) { // Requirements: // - Contract must not be halted // - Position must be staked (have deposit record) -// - Rewards are automatically collected before unstaking +// - Rewards are automatically collected before unStaking // // Params: // - tokenId (uint64): ID of the staked LP token @@ -509,10 +525,10 @@ func CollectReward(tokenId uint64, unwrapResult bool) (string, string) { // - token1Amount (string): Final amount of token1 in the position // // ref: https://docs.gnoswap.io/contracts/staker/staker.gno#unstaketoken -func UnstakeToken(tokenId uint64, unwrapResult bool) (string, string, string) { // poolPath, token0Amount, token1Amount +func UnStakeToken(tokenId uint64, unwrapResult bool) (string, string, string) { // poolPath, token0Amount, token1Amount assertOnlyNotHalted() - // unstaked status + // unStaked status deposit := deposits.Get(tokenId) poolPath := deposit.targetPoolPath @@ -528,16 +544,16 @@ func UnstakeToken(tokenId uint64, unwrapResult bool) (string, string, string) { prevAddr, prevPkgPath := getPrev() std.Emit( - "UnstakeToken", + "UnStakeToken", "prevAddr", prevAddr, "prevRealm", prevPkgPath, - "lpTokenId", formatUint(tokenId), - "unwrapResult", formatBool(unwrapResult), - "internal_poolPath", poolPath, - "internal_from", deposit.owner.String(), - "internal_to", consts.STAKER_ADDR.String(), - "internal_amount0", token0Amount, - "internal_amount1", token1Amount, + "positionId", formatUint(tokenId), + "poolPath", poolPath, + "isRequestUnwrap", formatBool(unwrapResult), + "from", consts.STAKER_ADDR.String(), + "to", deposit.owner.String(), + "amount0", token0Amount, + "amount1", token1Amount, ) return poolPath, token0Amount, token1Amount @@ -579,15 +595,19 @@ func applyUnStake(tokenId uint64) { prevAddr, prevPkgPath := getPrev() std.Emit( - "UnstakeToken", + "UnStakeToken", "prevAddr", prevAddr, "prevRealm", prevPkgPath, - "lpTokenId", formatUint(tokenId), - "internal_poolPath", deposit.targetPoolPath, - "internal_from", GetOrigPkgAddr().String(), - "internal_to", deposit.owner.String(), - "internal_amount0", token0Amount, - "internal_amount1", token1Amount, + "positionId", formatUint(tokenId), + "poolPath", deposit.targetPoolPath, + "from", GetOrigPkgAddr().String(), + "to", deposit.owner.String(), + "amount0", token0Amount, + "amount1", token1Amount, + "liquidity", deposit.liquidity.ToString(), + "positionUpperTick", formatInt(upperTick), + "positionLowerTick", formatInt(lowerTick), + "currentTick", formatInt(currentTick), ) } diff --git a/contract/r/gnoswap/staker/staker_external_incentive.gno b/contract/r/gnoswap/staker/staker_external_incentive.gno index a11b5284f..994ee0625 100644 --- a/contract/r/gnoswap/staker/staker_external_incentive.gno +++ b/contract/r/gnoswap/staker/staker_external_incentive.gno @@ -25,9 +25,7 @@ func CreateExternalIncentive( startTimestamp int64, endTimestamp int64, ) { - common.IsHalted() - - en.MintAndDistributeGns() + assertOnlyNotHalted() if common.GetLimitCaller() { prev := std.PrevRealm() @@ -44,6 +42,8 @@ func CreateExternalIncentive( )) } + en.MintAndDistributeGns() + // check token can be used as reward if err := isAllowedForExternalReward(targetPoolPath, rewardToken); err != nil { panic(err.Error()) @@ -57,7 +57,7 @@ func CreateExternalIncentive( if ugnotSent != rewardAmount { panic(addDetailToError( errInvalidInput, - ufmt.Sprintf("staker.gno__CreateExternalIncentive() || user(%s) sent ugnot(%d) amount not equal to rewardAmount(%d)", std.PrevRealm().Addr(), ugnotSent, rewardAmount), + ufmt.Sprintf("user(%s) sent ugnot(%d) amount not equal to rewardAmount(%d)", getPrevAddr(), ugnotSent, rewardAmount), )) } @@ -81,7 +81,7 @@ func CreateExternalIncentive( )) } - caller := std.PrevRealm().Addr() + caller := getPrevAddr() // incentiveId := incentiveIdCompute(std.PrevRealm().Addr(), targetPoolPath, rewardToken, startTimestamp, endTimestamp, std.GetHeight()) incentiveId := incentiveIdByTime(startTimestamp, endTimestamp, caller, rewardToken) @@ -125,26 +125,28 @@ func CreateExternalIncentive( pool.incentives.create(caller, incentive) - prevAddr, prevRealm := getPrev() + prevAddr, prevPkgPath := getPrev() std.Emit( "CreateExternalIncentive", "prevAddr", prevAddr, - "prevRealm", prevRealm, - "poolPath", targetPoolPath, + "prevRealm", prevPkgPath, + "incentiveId", incentiveId, + "targetPoolPath", targetPoolPath, "rewardToken", rewardToken, "rewardAmount", formatUint(rewardAmount), "startTimestamp", formatInt(startTimestamp), "endTimestamp", formatInt(endTimestamp), - "internal_incentiveId", incentiveId, - "internal_depositGnsAmount", formatUint(depositGnsAmount), - "internal_external", "created", + "depositGnsAmount", formatUint(depositGnsAmount), + "currentHeight", formatInt(std.GetHeight()), + "currentTime", formatInt(time.Now().Unix()), + "avgBlockTimeInMs", formatUint(gns.GetAvgBlockTimeInMs()), ) } // EndExternalIncentive ends the external incentive and refunds the remaining reward // ref: https://docs.gnoswap.io/contracts/staker/staker.gno#endexternalincentive func EndExternalIncentive(refundee std.Address, targetPoolPath, rewardToken string, startTimestamp, endTimestamp, height int64) { - common.IsHalted() + assertOnlyNotHalted() pool, exists := pools.Get(targetPoolPath) if !exists { @@ -158,25 +160,25 @@ func EndExternalIncentive(refundee std.Address, targetPoolPath, rewardToken stri if !exists { panic(addDetailToError( errCannotEndIncentive, - ufmt.Sprintf("staker.gno__EndExternalIncentive() || cannot end non existent incentive(%d:%d:%s:%s)", startTimestamp, endTimestamp, refundee, rewardToken), + ufmt.Sprintf("cannot end non existent incentive(%d:%d:%s:%s)", startTimestamp, endTimestamp, refundee, rewardToken), )) } - now := std.GetHeight() - if now < ictv.endHeight { + currentHeight := std.GetHeight() + if currentHeight < ictv.endHeight { panic(addDetailToError( errCannotEndIncentive, - ufmt.Sprintf("staker.gno__EndExternalIncentive() || cannot end incentive before endHeight(%d), current(%d)", ictv.endHeight, now), + ufmt.Sprintf("cannot end incentive before endHeight(%d), current(%d)", ictv.endHeight, currentHeight), )) } // when incentive end time is over // admin or refundee can end incentive ( left amount will be refunded ) - caller := std.PrevRealm().Addr() + caller := getPrevAddr() if caller != consts.ADMIN && caller != refundee { panic(addDetailToError( errNoPermission, - ufmt.Sprintf("staker.gno__EndExternalIncentive() || only refundee(%s) or admin(%s) can end incentive, but called from %s", refundee, consts.ADMIN, caller), + ufmt.Sprintf("only refundee(%s) or admin(%s) can end incentive, but called from %s", refundee, consts.ADMIN, caller), )) } @@ -204,18 +206,19 @@ func EndExternalIncentive(refundee std.Address, targetPoolPath, rewardToken stri // also refund deposit gns amount gns.Transfer(ictv.refundee, ictv.depositGnsAmount) - prevAddr, prevRealm := getPrev() + prevAddr, prevPkgPath := getPrev() std.Emit( "EndExternalIncentive", "prevAddr", prevAddr, - "prevRealm", prevRealm, - "poolPath", targetPoolPath, - "rewardToken", rewardToken, + "prevRealm", prevPkgPath, + "incentiveId", ictv.incentiveId, + "targetPoolPath", targetPoolPath, "refundee", refundee.String(), - "internal_endBy", ictv.refundee.String(), - "internal_refundAmount", formatUint(refund), - "internal_refundGnsAmount", formatUint(ictv.depositGnsAmount), - "internal_incentiveId", ufmt.Sprintf("%d:%d:%s:%s", startTimestamp, endTimestamp, refundee, rewardToken), + "refundToken", rewardToken, + "refundAmount", formatUint(refund), + "refundGnsAmount", formatUint(ictv.depositGnsAmount), + "isRequestUnwrap", ictv.rewardToken == consts.WUGNOT_PATH, + "externalIncentiveEndBy", getPrevAddr(), ) } From 57ed53137f44e2d7a1d73a2d21e3f6f9e08efc03 Mon Sep 17 00:00:00 2001 From: 0xTopaz Date: Fri, 24 Jan 2025 01:36:05 +0900 Subject: [PATCH 3/3] refactor: staker and gns event update --- contract/r/gnoswap/gns/gns.gno | 8 ++++++++ contract/r/gnoswap/staker/staker.gno | 5 +++-- 2 files changed, 11 insertions(+), 2 deletions(-) diff --git a/contract/r/gnoswap/gns/gns.gno b/contract/r/gnoswap/gns/gns.gno index 8dff35b46..e0898be79 100644 --- a/contract/r/gnoswap/gns/gns.gno +++ b/contract/r/gnoswap/gns/gns.gno @@ -234,6 +234,14 @@ func calculateAmountToMint(fromHeight, toHeight int64) uint64 { setHalvingYearMintAmount(year, GetHalvingYearMintAmount(year)+yearAmountToMint) setHalvingYearLeftAmount(year, GetHalvingYearLeftAmount(year)-yearAmountToMint) + std.Emit( + "CalculateAmountToMint", + "fromHeight", formatInt(curFrom), + "toHeight", formatInt(mintUntilHeight), + "year", formatInt(year), + "singleBlockAmount", formatUint(singleBlockAmount), + ) + // update fromHeight for next year (if necessary) curFrom = mintUntilHeight + 1 if curFrom > toHeight { diff --git a/contract/r/gnoswap/staker/staker.gno b/contract/r/gnoswap/staker/staker.gno index 0fd2cf967..7e0eba3af 100644 --- a/contract/r/gnoswap/staker/staker.gno +++ b/contract/r/gnoswap/staker/staker.gno @@ -452,9 +452,10 @@ func CollectReward(tokenId uint64, unwrapResult bool) (string, string) { "recipient", deposit.owner.String(), "incentiveId", incentiveId, "rewardToken", rewardToken, - "rewardAmount", formatUint(toUser), + "rewardAmount", formatUint(amount), + "rewardToUser", formatUint(toUser), + "rewardToFee", formatUint(amount-toUser), "rewardPenalty", formatUint(externalPenalty), - "rewardFee", formatUint(amount-toUser), "isRequestUnwrap", formatBool(unwrapResult), ) }