Skip to content

Commit

Permalink
Merge pull request #205 from icon-project/fix-issuer
Browse files Browse the repository at this point in the history
Fix issuer
  • Loading branch information
eunsoo-icon authored Jun 28, 2024
2 parents 6ebbc2d + a02b8a6 commit 23c77d4
Show file tree
Hide file tree
Showing 4 changed files with 91 additions and 15 deletions.
3 changes: 3 additions & 0 deletions icon/icmodule/revision.go
Original file line number Diff line number Diff line change
Expand Up @@ -45,6 +45,7 @@ const (
Revision23
Revision24
Revision25
Revision26
RevisionReserved
)

Expand Down Expand Up @@ -120,6 +121,8 @@ const (
RevisionChainScoreEventLog = Revision24

RevisionIISS4R1 = Revision25

RevisionFixIssueRegulator = Revision26
)

var revisionFlags []module.Revision
Expand Down
13 changes: 13 additions & 0 deletions icon/iiss/eventlog.go
Original file line number Diff line number Diff line change
Expand Up @@ -41,6 +41,7 @@ const (
EventPRepRegistered = "PRepRegistered(Address)"
EventPRepSet = "PRepSet(Address)"
EventRewardFundTransferred = "RewardFundTransferred(str,Address,Address,int)"
EventRewardFundTransferFailed = "RewardFundTransferFailed(str,Address,Address,int)"
EventRewardFundBurned = "RewardFundBurned(str,Address,int)"
EventPRepUnregistered = "PRepUnregistered(Address)"
EventBTPNetworkTypeActivated = "BTPNetworkTypeActivated(str,int)"
Expand Down Expand Up @@ -218,6 +219,18 @@ func EmitRewardFundTransferredEvent(cc icmodule.CallContext, key string, from, t
)
}

func EmitRewardFundTransferFailedEvent(cc icmodule.CallContext, key string, from, to module.Address, amount *big.Int) {
cc.OnEvent(state.SystemAddress,
[][]byte{[]byte(EventRewardFundTransferFailed)},
[][]byte{
[]byte(key),
from.Bytes(),
to.Bytes(),
intconv.BigIntToBytes(amount),
},
)
}

func EmitRewardFundBurnedEvent(cc icmodule.CallContext, key string, from module.Address, amount *big.Int) {
cc.OnEvent(state.SystemAddress,
[][]byte{[]byte(EventRewardFundBurned)},
Expand Down
51 changes: 36 additions & 15 deletions icon/iiss/extension.go
Original file line number Diff line number Diff line change
Expand Up @@ -927,19 +927,39 @@ func (es *ExtensionStateImpl) regulateIssue(iScore *big.Int) error {
return err
}
reward := new(big.Int).Set(iScore)
if prevGlobal != nil && icstate.IISSVersion3 == prevGlobal.GetIISSVersion() {
pg := prevGlobal.GetV2()
multiplier := big.NewInt(int64(prevGlobal.GetTermPeriod() * icmodule.IScoreICXRatio))
divider := big.NewInt(icmodule.MonthBlock * icmodule.DenomInRate)
rewardCPS := new(big.Int).Mul(pg.GetIGlobal(), pg.GetICps().NumBigInt())
rewardCPS.Mul(rewardCPS, multiplier)
rewardCPS.Div(rewardCPS, divider)
reward.Add(reward, rewardCPS)
rewardRelay := new(big.Int).Mul(pg.GetIGlobal(), pg.GetIRelay().NumBigInt())
rewardRelay.Mul(rewardRelay, multiplier)
rewardRelay.Div(rewardRelay, divider)
reward.Add(reward, rewardRelay)
es.logger.Tracef("regulateIssue with cps: %d, relay: %d", rewardCPS, rewardRelay)
if prevGlobal != nil {
switch prevGlobal.GetIISSVersion() {
case icstate.IISSVersion2:
case icstate.IISSVersion3:
pg := prevGlobal.GetV2()
multiplier := big.NewInt(int64(prevGlobal.GetTermPeriod() * icmodule.IScoreICXRatio))
divider := big.NewInt(icmodule.MonthBlock * icmodule.DenomInRate)
rewardCPS := new(big.Int).Mul(pg.GetIGlobal(), pg.GetICps().NumBigInt())
rewardCPS.Mul(rewardCPS, multiplier)
rewardCPS.Div(rewardCPS, divider)
reward.Add(reward, rewardCPS)
rewardRelay := new(big.Int).Mul(pg.GetIGlobal(), pg.GetIRelay().NumBigInt())
rewardRelay.Mul(rewardRelay, multiplier)
rewardRelay.Div(rewardRelay, divider)
reward.Add(reward, rewardRelay)
es.logger.Tracef("regulateIssue with cps: %d, relay: %d", rewardCPS, rewardRelay)
case icstate.IISSVersion4:
if term.Revision() >= icmodule.RevisionFixIssueRegulator {
pg := prevGlobal.GetV3()
multiplier := big.NewInt(int64(pg.GetTermPeriod() * icmodule.IScoreICXRatio))

keys := []icstate.RFundKey{icstate.KeyIcps, icstate.KeyIrelay}
for _, key := range keys {
amount := pg.GetRewardFundAmountByKey(key)
amount.Mul(amount, multiplier)
amount.Div(amount, big.NewInt(icmodule.MonthBlock))
reward.Add(reward, amount)
es.logger.Tracef("regulateIssue with %s: %s", key, amount)
}
}
default:
panic("regulateIssue: unknown IISS version")
}
}

is, err := es.State.GetIssue()
Expand Down Expand Up @@ -1703,9 +1723,10 @@ func (es *ExtensionStateImpl) transferRewardFund(cc icmodule.CallContext) error
amount.Div(amount, div)
if ok {
if err := cc.Transfer(from, to, amount, module.Reward); err != nil {
return err
EmitRewardFundTransferFailedEvent(cc, k.key, from, to, amount)
} else {
EmitRewardFundTransferredEvent(cc, k.key, from, to, amount)
}
EmitRewardFundTransferredEvent(cc, k.key, from, to, amount)
} else {
if cc.Revision().Value() >= icmodule.RevisionFixTransferRewardFund {
if err := cc.Withdraw(from, amount, module.Burn); err != nil {
Expand Down
39 changes: 39 additions & 0 deletions icon/revision.go
Original file line number Diff line number Diff line change
Expand Up @@ -17,6 +17,9 @@
package icon

import (
"math/big"

"github.com/icon-project/goloop/common"
"github.com/icon-project/goloop/icon/icmodule"
"github.com/icon-project/goloop/icon/iiss"
"github.com/icon-project/goloop/icon/iiss/icstate"
Expand All @@ -42,6 +45,7 @@ var revHandlerTable = []revHandlerItem{
{icmodule.RevisionBlockAccounts2, onRevBlockAccounts2},
{icmodule.RevisionIISS4R0, onRevIISS4R0},
{icmodule.RevisionIISS4R1, onRevIISS4R1},
{icmodule.RevisionFixIssueRegulator, onRevFixIssueRegulator},
}

// DO NOT update revHandlerMap manually
Expand Down Expand Up @@ -358,3 +362,38 @@ func onRevIISS4R1(s *chainScore, _, _ int) error {

return nil
}

func onRevFixIssueRegulator(s *chainScore, _, _ int) error {
if s.cc.ChainID() != CIDForMainNet {
return nil
}

cc := s.newCallContext(s.cc)
// deposit 6M to treasury
issueAmount := new(big.Int).Mul(icmodule.BigIntICX, big.NewInt(6_000_000))
if err := cc.Deposit(cc.Treasury(), issueAmount, module.Issue); err != nil {
return err
}
// increase total supply
if _, err := cc.AddTotalSupply(issueAmount); err != nil {
return err
}

// emit event logs
es := s.cc.GetExtensionState().(*iiss.ExtensionStateImpl)
issue, err := es.State.GetIssue()
if err != nil {
issue = icstate.NewIssue()
}
iiss.EmitICXIssuedEvent(
cc,
&iiss.IssueResultJSON{
common.HexIntZero,
common.HexIntZero,
common.NewHexInt(0).SetValue(issueAmount),
},
issue,
)

return nil
}

0 comments on commit 23c77d4

Please sign in to comment.