remove module's legacy code

This commit is contained in:
Solovyov1796 2024-05-09 14:07:43 +08:00 committed by 0g-wh
parent 6202424c27
commit e25cc5f531
10 changed files with 0 additions and 1468 deletions

View File

@ -1,57 +0,0 @@
package v0_16
import (
"fmt"
"github.com/0glabs/0g-chain/x/bep3/types"
)
// resetSwapForZeroHeight updates swap expiry/close heights to work when the chain height is reset to zero.
func resetSwapForZeroHeight(swap types.AtomicSwap) types.AtomicSwap {
switch status := swap.Status; status {
case types.SWAP_STATUS_COMPLETED:
// Reset closed block to one so completed swaps are not held in long term storage too long.
swap.ClosedBlock = 1
case types.SWAP_STATUS_OPEN:
switch dir := swap.Direction; dir {
case types.SWAP_DIRECTION_INCOMING:
// Open incoming swaps can be expired safely. They haven't been claimed yet, so the outgoing swap on bnb will just timeout.
// The chain downtime cannot be accurately predicted, so it's easier to expire than to recalculate a correct expire height.
swap.ExpireHeight = 1
swap.Status = types.SWAP_STATUS_EXPIRED
case types.SWAP_DIRECTION_OUTGOING:
// Open outgoing swaps should be extended to allow enough time to claim after the chain launches.
// They cannot be expired as there could be an open/claimed bnb swap.
swap.ExpireHeight = 1 + 24686 // default timeout used when sending swaps from 0g
case types.SWAP_DIRECTION_UNSPECIFIED:
default:
panic(fmt.Sprintf("unknown bep3 swap direction '%s'", dir))
}
case types.SWAP_STATUS_EXPIRED:
// Once a swap is marked expired the expire height is ignored. However reset to 1 to be sure.
swap.ExpireHeight = 1
case types.SWAP_STATUS_UNSPECIFIED:
default:
panic(fmt.Sprintf("unknown bep3 swap status '%s'", status))
}
return swap
}
func resetSwapsForZeroHeight(oldSwaps types.AtomicSwaps) types.AtomicSwaps {
newSwaps := make(types.AtomicSwaps, len(oldSwaps))
for i, oldSwap := range oldSwaps {
swap := resetSwapForZeroHeight(oldSwap)
newSwaps[i] = swap
}
return newSwaps
}
func Migrate(oldState types.GenesisState) *types.GenesisState {
return &types.GenesisState{
PreviousBlockTime: oldState.PreviousBlockTime,
Params: oldState.Params,
AtomicSwaps: resetSwapsForZeroHeight(oldState.AtomicSwaps),
Supplies: oldState.Supplies,
}
}

View File

@ -1,176 +0,0 @@
package v0_16
import (
"io/ioutil"
"path/filepath"
"testing"
"time"
sdkmath "cosmossdk.io/math"
"github.com/cometbft/cometbft/libs/bytes"
"github.com/cosmos/cosmos-sdk/codec"
sdk "github.com/cosmos/cosmos-sdk/types"
"github.com/stretchr/testify/suite"
app "github.com/0glabs/0g-chain/app"
"github.com/0glabs/0g-chain/chaincfg"
"github.com/0glabs/0g-chain/x/bep3/types"
)
type migrateTestSuite struct {
suite.Suite
addresses []sdk.AccAddress
v16genstate types.GenesisState
cdc codec.Codec
}
func (s *migrateTestSuite) SetupTest() {
chaincfg.SetSDKConfig()
s.v16genstate = types.GenesisState{
PreviousBlockTime: time.Date(2021, 4, 8, 15, 0, 0, 0, time.UTC),
Params: types.Params{},
Supplies: types.AssetSupplies{},
AtomicSwaps: types.AtomicSwaps{},
}
config := app.MakeEncodingConfig()
s.cdc = config.Marshaler
_, accAddresses := app.GeneratePrivKeyAddressPairs(10)
s.addresses = accAddresses
}
func (s *migrateTestSuite) TestMigrate_JSON() {
// Migrate v16 bep3 to v17
file := filepath.Join("testdata", "v16-bep3.json")
data, err := ioutil.ReadFile(file)
s.Require().NoError(err)
err = s.cdc.UnmarshalJSON(data, &s.v16genstate)
s.Require().NoError(err)
genstate := Migrate(s.v16genstate)
// Compare expect v16 bep3 json with migrated json
actual := s.cdc.MustMarshalJSON(genstate)
file = filepath.Join("testdata", "v17-bep3.json")
expected, err := ioutil.ReadFile(file)
s.Require().NoError(err)
s.Require().JSONEq(string(expected), string(actual))
}
func (s *migrateTestSuite) TestMigrate_Swaps() {
type swap struct {
ExpireHeight uint64
CloseBlock int64
Status types.SwapStatus
Direction types.SwapDirection
}
testcases := []struct {
name string
oldSwap swap
newSwap swap
}{
{
name: "incoming open swap",
oldSwap: swap{
// expire and close not set in open swaps
Status: types.SWAP_STATUS_OPEN,
Direction: types.SWAP_DIRECTION_INCOMING,
},
newSwap: swap{
ExpireHeight: 1,
Status: types.SWAP_STATUS_EXPIRED,
Direction: types.SWAP_DIRECTION_INCOMING,
},
},
{
name: "outgoing open swap",
oldSwap: swap{
// expire and close not set in open swaps
Status: types.SWAP_STATUS_OPEN,
Direction: types.SWAP_DIRECTION_OUTGOING,
},
newSwap: swap{
ExpireHeight: 24687,
Status: types.SWAP_STATUS_OPEN,
Direction: types.SWAP_DIRECTION_OUTGOING,
},
},
{
name: "completed swap",
oldSwap: swap{
ExpireHeight: 1000,
CloseBlock: 900,
Status: types.SWAP_STATUS_COMPLETED,
Direction: types.SWAP_DIRECTION_INCOMING,
},
newSwap: swap{
ExpireHeight: 1000,
CloseBlock: 1,
Status: types.SWAP_STATUS_COMPLETED,
Direction: types.SWAP_DIRECTION_INCOMING,
},
},
{
name: "expired swap",
oldSwap: swap{
ExpireHeight: 1000,
CloseBlock: 900,
Status: types.SWAP_STATUS_EXPIRED,
Direction: types.SWAP_DIRECTION_INCOMING,
},
newSwap: swap{
ExpireHeight: 1,
CloseBlock: 900,
Status: types.SWAP_STATUS_EXPIRED,
Direction: types.SWAP_DIRECTION_INCOMING,
},
},
}
for _, tc := range testcases {
s.Run(tc.name, func() {
oldSwaps := types.AtomicSwaps{
{
Amount: sdk.NewCoins(sdk.NewCoin("bnb", sdkmath.NewInt(12))),
RandomNumberHash: bytes.HexBytes{},
ExpireHeight: tc.oldSwap.ExpireHeight,
Timestamp: 1110,
Sender: s.addresses[0],
Recipient: s.addresses[1],
RecipientOtherChain: s.addresses[0].String(),
SenderOtherChain: s.addresses[1].String(),
ClosedBlock: tc.oldSwap.CloseBlock,
Status: tc.oldSwap.Status,
CrossChain: true,
Direction: tc.oldSwap.Direction,
},
}
expectedSwaps := types.AtomicSwaps{
{
Amount: sdk.NewCoins(sdk.NewCoin("bnb", sdkmath.NewInt(12))),
RandomNumberHash: bytes.HexBytes{},
ExpireHeight: tc.newSwap.ExpireHeight,
Timestamp: 1110,
Sender: s.addresses[0],
Recipient: s.addresses[1],
RecipientOtherChain: s.addresses[0].String(),
SenderOtherChain: s.addresses[1].String(),
ClosedBlock: tc.newSwap.CloseBlock,
Status: tc.newSwap.Status,
CrossChain: true,
Direction: tc.newSwap.Direction,
},
}
s.v16genstate.AtomicSwaps = oldSwaps
genState := Migrate(s.v16genstate)
s.Require().Len(genState.AtomicSwaps, 1)
s.Equal(expectedSwaps, genState.AtomicSwaps)
})
}
}
func TestMigrateTestSuite(t *testing.T) {
suite.Run(t, new(migrateTestSuite))
}

View File

@ -1,212 +0,0 @@
{
"atomic_swaps": [
{
"amount": [
{
"amount": "1999955998",
"denom": "btcb"
}
],
"closed_block": "838115",
"cross_chain": true,
"direction": "SWAP_DIRECTION_INCOMING",
"expire_height": "838627",
"random_number_hash": "6F1CF8F2E13A0C0F0A359F54E47E4E265D766B8E006D2F00BDF994ABDEF1E9E4",
"recipient": "kava1fl2hs6y9vz986g5v52pdan9ga923n9mn5cxxkw",
"recipient_other_chain": "bnb1xz3xqf4p2ygrw9lhp5g5df4ep4nd20vsywnmpr",
"sender": "kava14qsmvzprqvhwmgql9fr0u3zv9n2qla8zhnm5pc",
"sender_other_chain": "bnb19k9wuv2j7c7ck8tmc7kav0r0cnt3esmkrpf25x",
"status": "SWAP_STATUS_COMPLETED",
"timestamp": "1636034914"
},
{
"amount": [
{
"amount": "19000000000",
"denom": "bnb"
}
],
"closed_block": "1712118",
"cross_chain": true,
"direction": "SWAP_DIRECTION_OUTGOING",
"expire_height": "1736797",
"random_number_hash": "280EB832A37F2265CC82F3957CE603AAD57BAD7038B876A1F28953AFA29FA1C3",
"recipient": "kava1r4v2zdhdalfj2ydazallqvrus9fkphmglhn6u6",
"recipient_other_chain": "bnb18nsgj50zvc4uq93w4j0ltz5gaxhwv7aq4qnq0p",
"sender": "kava1zw6gg4ztvly7zf25pa33mclav3spvj3ympxxna",
"sender_other_chain": "bnb1jh7uv2rm6339yue8k4mj9406k3509kr4wt5nxn",
"status": "SWAP_STATUS_COMPLETED",
"timestamp": "1641976566"
},
{
"amount": [
{
"amount": "999595462080",
"denom": "busd"
}
],
"closed_block": "787122",
"cross_chain": true,
"direction": "SWAP_DIRECTION_INCOMING",
"expire_height": "811799",
"random_number_hash": "BFB7CC82DA0E0C8556AC37843F5AB136B9A7A066054368F5948944282B414D83",
"recipient": "kava1eufgf0w9d7hf5mgtek4zr2upkxag9stmzx6unl",
"recipient_other_chain": "bnb10zq89008gmedc6rrwzdfukjk94swynd7dl97w8",
"sender": "kava1hh4x3a4suu5zyaeauvmv7ypf7w9llwlfufjmuu",
"sender_other_chain": "bnb1vl3wn4x8kqajg2j9wxa5y5amgzdxchutkxr6at",
"status": "SWAP_STATUS_EXPIRED",
"timestamp": "1635694492"
},
{
"amount": [
{
"amount": "999595462080",
"denom": "busd"
}
],
"closed_block": "787122",
"cross_chain": true,
"direction": "SWAP_DIRECTION_OUTGOING",
"expire_height": "811799",
"random_number_hash": "BFB7CC82DA0E0C8556AC37843F5AB136B9A7A066054368F5948944282B414D83",
"recipient": "kava1hh4x3a4suu5zyaeauvmv7ypf7w9llwlfufjmuu",
"recipient_other_chain": "bnb1vl3wn4x8kqajg2j9wxa5y5amgzdxchutkxr6at",
"sender": "kava1eufgf0w9d7hf5mgtek4zr2upkxag9stmzx6unl",
"sender_other_chain": "bnb10zq89008gmedc6rrwzdfukjk94swynd7dl97w8",
"status": "SWAP_STATUS_EXPIRED",
"timestamp": "1635694492"
},
{
"amount": [
{
"amount": "1000000",
"denom": "btcb"
}
],
"closed_block": "0",
"cross_chain": true,
"direction": "SWAP_DIRECTION_OUTGOING",
"expire_height": "1730589",
"random_number_hash": "A74EA1AB58D312FDF1E872D18583CACCF294E639DDA4F303939E9ADCEC081D93",
"recipient": "kava14qsmvzprqvhwmgql9fr0u3zv9n2qla8zhnm5pc",
"recipient_other_chain": "bnb1lhk5ndlgf5wz55t8k35cqj6h9l3m4l5ek2w7q6",
"sender": "kava1d2u28azje7rhqyjtxc2ex8q0cxxpw7dfm7ltq5",
"sender_other_chain": "bnb1xz3xqf4p2ygrw9lhp5g5df4ep4nd20vsywnmpr",
"status": "SWAP_STATUS_OPEN",
"timestamp": "1641934114"
},
{
"amount": [
{
"amount": "1000000",
"denom": "btcb"
}
],
"closed_block": "0",
"cross_chain": true,
"direction": "SWAP_DIRECTION_INCOMING",
"expire_height": "1740000",
"random_number_hash": "39E9ADCEC081D93A74EA1A83CACCF294E639DDA4F3039B58D312FDF1E872D185",
"recipient": "kava1d2u28azje7rhqyjtxc2ex8q0cxxpw7dfm7ltq5",
"recipient_other_chain": "bnb1xz3xqf4p2ygrw9lhp5g5df4ep4nd20vsywnmpr",
"sender": "kava14qsmvzprqvhwmgql9fr0u3zv9n2qla8zhnm5pc",
"sender_other_chain": "bnb1lhk5ndlgf5wz55t8k35cqj6h9l3m4l5ek2w7q6",
"status": "SWAP_STATUS_OPEN",
"timestamp": "1641934114"
}
],
"params": {
"asset_params": [
{
"active": true,
"coin_id": "0",
"denom": "btcb",
"deputy_address": "kava1kla4wl0ccv7u85cemvs3y987hqk0afcv7vue84",
"fixed_fee": "2",
"max_block_lock": "86400",
"max_swap_amount": "2000000000",
"min_block_lock": "24686",
"min_swap_amount": "3",
"supply_limit": {
"limit": "100000000000",
"time_based_limit": "0",
"time_limited": false,
"time_period": "0s"
}
},
{
"active": true,
"coin_id": "144",
"denom": "xrpb",
"deputy_address": "kava14q5sawxdxtpap5x5sgzj7v4sp3ucncjlpuk3hs",
"fixed_fee": "100000",
"max_block_lock": "86400",
"max_swap_amount": "250000000000000",
"min_block_lock": "24686",
"min_swap_amount": "100001",
"supply_limit": {
"limit": "2000000000000000",
"time_based_limit": "0",
"time_limited": false,
"time_period": "0s"
}
},
{
"active": true,
"coin_id": "714",
"denom": "bnb",
"deputy_address": "kava1agcvt07tcw0tglu0hmwdecsnuxp2yd45f3avgm",
"fixed_fee": "1000",
"max_block_lock": "86400",
"max_swap_amount": "500000000000",
"min_block_lock": "24686",
"min_swap_amount": "1001",
"supply_limit": {
"limit": "100000000000000",
"time_based_limit": "0",
"time_limited": false,
"time_period": "0s"
}
},
{
"active": true,
"coin_id": "727",
"denom": "busd",
"deputy_address": "kava1j9je7f6s0v6k7dmgv6u5k5ru202f5ffsc7af04",
"fixed_fee": "20000",
"max_block_lock": "86400",
"max_swap_amount": "100000000000000",
"min_block_lock": "24686",
"min_swap_amount": "20001",
"supply_limit": {
"limit": "2000000000000000",
"time_based_limit": "0",
"time_limited": false,
"time_period": "0s"
}
}
]
},
"previous_block_time": "1970-01-01T00:00:00Z",
"supplies": [
{
"current_supply": {
"amount": "30467559434006",
"denom": "bnb"
},
"incoming_supply": {
"amount": "0",
"denom": "bnb"
},
"outgoing_supply": {
"amount": "0",
"denom": "bnb"
},
"time_elapsed": "0s",
"time_limited_current_supply": {
"amount": "0",
"denom": "bnb"
}
}
]
}

View File

@ -1,212 +0,0 @@
{
"atomic_swaps": [
{
"amount": [
{
"amount": "1999955998",
"denom": "btcb"
}
],
"closed_block": "1",
"cross_chain": true,
"direction": "SWAP_DIRECTION_INCOMING",
"expire_height": "838627",
"random_number_hash": "6F1CF8F2E13A0C0F0A359F54E47E4E265D766B8E006D2F00BDF994ABDEF1E9E4",
"recipient": "kava1fl2hs6y9vz986g5v52pdan9ga923n9mn5cxxkw",
"recipient_other_chain": "bnb1xz3xqf4p2ygrw9lhp5g5df4ep4nd20vsywnmpr",
"sender": "kava14qsmvzprqvhwmgql9fr0u3zv9n2qla8zhnm5pc",
"sender_other_chain": "bnb19k9wuv2j7c7ck8tmc7kav0r0cnt3esmkrpf25x",
"status": "SWAP_STATUS_COMPLETED",
"timestamp": "1636034914"
},
{
"amount": [
{
"amount": "19000000000",
"denom": "bnb"
}
],
"closed_block": "1",
"cross_chain": true,
"direction": "SWAP_DIRECTION_OUTGOING",
"expire_height": "1736797",
"random_number_hash": "280EB832A37F2265CC82F3957CE603AAD57BAD7038B876A1F28953AFA29FA1C3",
"recipient": "kava1r4v2zdhdalfj2ydazallqvrus9fkphmglhn6u6",
"recipient_other_chain": "bnb18nsgj50zvc4uq93w4j0ltz5gaxhwv7aq4qnq0p",
"sender": "kava1zw6gg4ztvly7zf25pa33mclav3spvj3ympxxna",
"sender_other_chain": "bnb1jh7uv2rm6339yue8k4mj9406k3509kr4wt5nxn",
"status": "SWAP_STATUS_COMPLETED",
"timestamp": "1641976566"
},
{
"amount": [
{
"amount": "999595462080",
"denom": "busd"
}
],
"closed_block": "787122",
"cross_chain": true,
"direction": "SWAP_DIRECTION_INCOMING",
"expire_height": "1",
"random_number_hash": "BFB7CC82DA0E0C8556AC37843F5AB136B9A7A066054368F5948944282B414D83",
"recipient": "kava1eufgf0w9d7hf5mgtek4zr2upkxag9stmzx6unl",
"recipient_other_chain": "bnb10zq89008gmedc6rrwzdfukjk94swynd7dl97w8",
"sender": "kava1hh4x3a4suu5zyaeauvmv7ypf7w9llwlfufjmuu",
"sender_other_chain": "bnb1vl3wn4x8kqajg2j9wxa5y5amgzdxchutkxr6at",
"status": "SWAP_STATUS_EXPIRED",
"timestamp": "1635694492"
},
{
"amount": [
{
"amount": "999595462080",
"denom": "busd"
}
],
"closed_block": "787122",
"cross_chain": true,
"direction": "SWAP_DIRECTION_OUTGOING",
"expire_height": "1",
"random_number_hash": "BFB7CC82DA0E0C8556AC37843F5AB136B9A7A066054368F5948944282B414D83",
"recipient": "kava1hh4x3a4suu5zyaeauvmv7ypf7w9llwlfufjmuu",
"recipient_other_chain": "bnb1vl3wn4x8kqajg2j9wxa5y5amgzdxchutkxr6at",
"sender": "kava1eufgf0w9d7hf5mgtek4zr2upkxag9stmzx6unl",
"sender_other_chain": "bnb10zq89008gmedc6rrwzdfukjk94swynd7dl97w8",
"status": "SWAP_STATUS_EXPIRED",
"timestamp": "1635694492"
},
{
"amount": [
{
"amount": "1000000",
"denom": "btcb"
}
],
"closed_block": "0",
"cross_chain": true,
"direction": "SWAP_DIRECTION_OUTGOING",
"expire_height": "24687",
"random_number_hash": "A74EA1AB58D312FDF1E872D18583CACCF294E639DDA4F303939E9ADCEC081D93",
"recipient": "kava14qsmvzprqvhwmgql9fr0u3zv9n2qla8zhnm5pc",
"recipient_other_chain": "bnb1lhk5ndlgf5wz55t8k35cqj6h9l3m4l5ek2w7q6",
"sender": "kava1d2u28azje7rhqyjtxc2ex8q0cxxpw7dfm7ltq5",
"sender_other_chain": "bnb1xz3xqf4p2ygrw9lhp5g5df4ep4nd20vsywnmpr",
"status": "SWAP_STATUS_OPEN",
"timestamp": "1641934114"
},
{
"amount": [
{
"amount": "1000000",
"denom": "btcb"
}
],
"closed_block": "0",
"cross_chain": true,
"direction": "SWAP_DIRECTION_INCOMING",
"expire_height": "1",
"random_number_hash": "39E9ADCEC081D93A74EA1A83CACCF294E639DDA4F3039B58D312FDF1E872D185",
"recipient": "kava1d2u28azje7rhqyjtxc2ex8q0cxxpw7dfm7ltq5",
"recipient_other_chain": "bnb1xz3xqf4p2ygrw9lhp5g5df4ep4nd20vsywnmpr",
"sender": "kava14qsmvzprqvhwmgql9fr0u3zv9n2qla8zhnm5pc",
"sender_other_chain": "bnb1lhk5ndlgf5wz55t8k35cqj6h9l3m4l5ek2w7q6",
"status": "SWAP_STATUS_EXPIRED",
"timestamp": "1641934114"
}
],
"params": {
"asset_params": [
{
"active": true,
"coin_id": "0",
"denom": "btcb",
"deputy_address": "kava1kla4wl0ccv7u85cemvs3y987hqk0afcv7vue84",
"fixed_fee": "2",
"max_block_lock": "86400",
"max_swap_amount": "2000000000",
"min_block_lock": "24686",
"min_swap_amount": "3",
"supply_limit": {
"limit": "100000000000",
"time_based_limit": "0",
"time_limited": false,
"time_period": "0s"
}
},
{
"active": true,
"coin_id": "144",
"denom": "xrpb",
"deputy_address": "kava14q5sawxdxtpap5x5sgzj7v4sp3ucncjlpuk3hs",
"fixed_fee": "100000",
"max_block_lock": "86400",
"max_swap_amount": "250000000000000",
"min_block_lock": "24686",
"min_swap_amount": "100001",
"supply_limit": {
"limit": "2000000000000000",
"time_based_limit": "0",
"time_limited": false,
"time_period": "0s"
}
},
{
"active": true,
"coin_id": "714",
"denom": "bnb",
"deputy_address": "kava1agcvt07tcw0tglu0hmwdecsnuxp2yd45f3avgm",
"fixed_fee": "1000",
"max_block_lock": "86400",
"max_swap_amount": "500000000000",
"min_block_lock": "24686",
"min_swap_amount": "1001",
"supply_limit": {
"limit": "100000000000000",
"time_based_limit": "0",
"time_limited": false,
"time_period": "0s"
}
},
{
"active": true,
"coin_id": "727",
"denom": "busd",
"deputy_address": "kava1j9je7f6s0v6k7dmgv6u5k5ru202f5ffsc7af04",
"fixed_fee": "20000",
"max_block_lock": "86400",
"max_swap_amount": "100000000000000",
"min_block_lock": "24686",
"min_swap_amount": "20001",
"supply_limit": {
"limit": "2000000000000000",
"time_based_limit": "0",
"time_limited": false,
"time_period": "0s"
}
}
]
},
"previous_block_time": "1970-01-01T00:00:00Z",
"supplies": [
{
"current_supply": {
"amount": "30467559434006",
"denom": "bnb"
},
"incoming_supply": {
"amount": "0",
"denom": "bnb"
},
"outgoing_supply": {
"amount": "0",
"denom": "bnb"
},
"time_elapsed": "0s",
"time_limited_current_supply": {
"amount": "0",
"denom": "bnb"
}
}
]
}

View File

@ -1,53 +0,0 @@
package v0_15
import (
"time"
sdkmath "cosmossdk.io/math"
sdk "github.com/cosmos/cosmos-sdk/types"
)
const (
// ModuleName The name that will be used throughout the module
ModuleName = "issuance"
)
// GenesisState is the state that must be provided at genesis for the issuance module
type GenesisState struct {
Params Params `json:"params" yaml:"params"`
Supplies AssetSupplies `json:"supplies" yaml:"supplies"`
}
// Params governance parameters for the issuance module
type Params struct {
Assets Assets `json:"assets" yaml:"assets"`
}
// Assets slice of Asset
type Assets []Asset
// Asset type for assets in the issuance module
type Asset struct {
Owner sdk.AccAddress `json:"owner" yaml:"owner"`
Denom string `json:"denom" yaml:"denom"`
BlockedAddresses []sdk.AccAddress `json:"blocked_addresses" yaml:"blocked_addresses"`
Paused bool `json:"paused" yaml:"paused"`
Blockable bool `json:"blockable" yaml:"blockable"`
RateLimit RateLimit `json:"rate_limit" yaml:"rate_limit"`
}
// RateLimit parameters for rate-limiting the supply of an issued asset
type RateLimit struct {
Active bool `json:"active" yaml:"active"`
Limit sdkmath.Int `json:"limit" yaml:"limit"`
TimePeriod time.Duration `json:"time_period" yaml:"time_period"`
}
// AssetSupplies is a slice of AssetSupply
type AssetSupplies []AssetSupply
// AssetSupply contains information about an asset's rate-limited supply (the total supply of the asset is tracked in the top-level supply module)
type AssetSupply struct {
CurrentSupply sdk.Coin `json:"current_supply" yaml:"current_supply"`
TimeElapsed time.Duration `json:"time_elapsed" yaml:"time_elapsed"`
}

View File

@ -1,48 +0,0 @@
package v0_16
import (
v015issuance "github.com/0glabs/0g-chain/x/issuance/legacy/v0_15"
v016issuance "github.com/0glabs/0g-chain/x/issuance/types"
)
func migrateParams(params v015issuance.Params) v016issuance.Params {
assets := make([]v016issuance.Asset, len(params.Assets))
for i, asset := range params.Assets {
blockedAddresses := make([]string, len(asset.BlockedAddresses))
for i, addr := range asset.BlockedAddresses {
blockedAddresses[i] = addr.String()
}
assets[i] = v016issuance.Asset{
Owner: asset.Owner.String(),
Denom: asset.Denom,
BlockedAddresses: blockedAddresses,
Paused: asset.Paused,
Blockable: asset.Blockable,
RateLimit: v016issuance.RateLimit{
Active: asset.RateLimit.Active,
Limit: asset.RateLimit.Limit,
TimePeriod: asset.RateLimit.TimePeriod,
},
}
}
return v016issuance.Params{Assets: assets}
}
func migrateSupplies(oldSupplies v015issuance.AssetSupplies) []v016issuance.AssetSupply {
supplies := make([]v016issuance.AssetSupply, len(oldSupplies))
for i, supply := range oldSupplies {
supplies[i] = v016issuance.AssetSupply{
CurrentSupply: supply.CurrentSupply,
TimeElapsed: supply.TimeElapsed,
}
}
return supplies
}
// Migrate converts v0.15 issuance state and returns it in v0.16 format
func Migrate(oldState v015issuance.GenesisState) *v016issuance.GenesisState {
return &v016issuance.GenesisState{
Params: migrateParams(oldState.Params),
Supplies: migrateSupplies(oldState.Supplies),
}
}

View File

@ -1,177 +0,0 @@
package v0_16
import (
"testing"
"time"
sdkmath "cosmossdk.io/math"
"github.com/cosmos/cosmos-sdk/codec"
sdk "github.com/cosmos/cosmos-sdk/types"
"github.com/stretchr/testify/suite"
app "github.com/0glabs/0g-chain/app"
"github.com/0glabs/0g-chain/chaincfg"
v015issuance "github.com/0glabs/0g-chain/x/issuance/legacy/v0_15"
v016issuance "github.com/0glabs/0g-chain/x/issuance/types"
)
type migrateTestSuite struct {
suite.Suite
addresses []sdk.AccAddress
v15genstate v015issuance.GenesisState
cdc codec.Codec
legacyCdc *codec.LegacyAmino
}
func (s *migrateTestSuite) SetupTest() {
chaincfg.SetSDKConfig()
s.v15genstate = v015issuance.GenesisState{
Params: v015issuance.Params{},
Supplies: v015issuance.AssetSupplies{},
}
config := app.MakeEncodingConfig()
s.cdc = config.Marshaler
legacyCodec := codec.NewLegacyAmino()
s.legacyCdc = legacyCodec
_, accAddresses := app.GeneratePrivKeyAddressPairs(10)
s.addresses = accAddresses
}
func (s *migrateTestSuite) TestMigrate_JSON() {
// Migrate v15 issuance to v16
data := `{
"params": {
"assets": [
{
"blockable": true,
"blocked_addresses": null,
"denom": "hbtc",
"owner": "0g1ffv7nhd3z6sych2qpqkk03ec6hzkmufyhp5hf8",
"paused": false,
"rate_limit": {
"active": false,
"limit": "0",
"time_period": "0"
}
}
]
},
"supplies": [
{
"current_supply": { "denom": "ua0gi", "amount": "100" },
"time_elapsed": "3600000000000"
},
{
"current_supply": { "denom": "bnb", "amount": "300" },
"time_elapsed": "300000000000"
}
]
}`
err := s.legacyCdc.UnmarshalJSON([]byte(data), &s.v15genstate)
s.Require().NoError(err)
genstate := Migrate(s.v15genstate)
// Compare expect v16 issuance json with migrated json
expected := `{
"params": {
"assets": [
{
"blockable": true,
"blocked_addresses": [],
"denom": "hbtc",
"owner": "0g1ffv7nhd3z6sych2qpqkk03ec6hzkmufyhp5hf8",
"paused": false,
"rate_limit": {
"active": false,
"limit": "0",
"time_period": "0s"
}
}
]
},
"supplies": [
{
"current_supply": { "denom": "ua0gi", "amount": "100" },
"time_elapsed": "3600s"
},
{
"current_supply": { "denom": "bnb", "amount": "300" },
"time_elapsed": "300s"
}
]
}`
actual := s.cdc.MustMarshalJSON(genstate)
s.Require().NoError(err)
s.Require().JSONEq(expected, string(actual))
}
func (s *migrateTestSuite) TestMigrate_Params() {
s.v15genstate.Params = v015issuance.Params{
Assets: v015issuance.Assets{
{
Owner: s.addresses[0],
Denom: "ua0gi",
BlockedAddresses: s.addresses[1:2],
Paused: true,
Blockable: true,
RateLimit: v015issuance.RateLimit{
Active: true,
Limit: sdkmath.NewInt(10),
TimePeriod: 1 * time.Hour,
},
},
},
}
expectedParams := v016issuance.Params{
Assets: []v016issuance.Asset{
{
Owner: s.addresses[0].String(),
Denom: "ua0gi",
BlockedAddresses: []string{s.addresses[1].String()},
Paused: true,
Blockable: true,
RateLimit: v016issuance.RateLimit{
Active: true,
Limit: sdkmath.NewInt(10),
TimePeriod: 1 * time.Hour,
},
},
},
}
genState := Migrate(s.v15genstate)
s.Require().Equal(expectedParams, genState.Params)
}
func (s *migrateTestSuite) TestMigrate_Supplies() {
s.v15genstate.Supplies = v015issuance.AssetSupplies{
{
CurrentSupply: sdk.NewCoin("ua0gi", sdkmath.NewInt(100)),
TimeElapsed: time.Duration(1 * time.Hour),
},
{
CurrentSupply: sdk.NewCoin("bnb", sdkmath.NewInt(300)),
TimeElapsed: time.Duration(5 * time.Minute),
},
}
expected := []v016issuance.AssetSupply{
{
CurrentSupply: sdk.NewCoin("ua0gi", sdkmath.NewInt(100)),
TimeElapsed: time.Duration(1 * time.Hour),
},
{
CurrentSupply: sdk.NewCoin("bnb", sdkmath.NewInt(300)),
TimeElapsed: time.Duration(5 * time.Minute),
},
}
genState := Migrate(s.v15genstate)
s.Require().Equal(expected, genState.Supplies)
}
func TestIssuanceMigrateTestSuite(t *testing.T) {
suite.Run(t, new(migrateTestSuite))
}

View File

@ -1,46 +0,0 @@
package v0_15
import (
"time"
sdk "github.com/cosmos/cosmos-sdk/types"
)
const (
// ModuleName The name that will be used throughout the module
ModuleName = "pricefeed"
)
// GenesisState - pricefeed state that must be provided at genesis
type GenesisState struct {
Params Params `json:"params" yaml:"params"`
PostedPrices PostedPrices `json:"posted_prices" yaml:"posted_prices"`
}
// Params params for pricefeed. Can be altered via governance
type Params struct {
Markets Markets `json:"markets" yaml:"markets"` // Array containing the markets supported by the pricefeed
}
// Markets array type for oracle
type Markets []Market
// Market an asset in the pricefeed
type Market struct {
MarketID string `json:"market_id" yaml:"market_id"`
BaseAsset string `json:"base_asset" yaml:"base_asset"`
QuoteAsset string `json:"quote_asset" yaml:"quote_asset"`
Oracles []sdk.AccAddress `json:"oracles" yaml:"oracles"`
Active bool `json:"active" yaml:"active"`
}
// PostedPrices type for an array of PostedPrice
type PostedPrices []PostedPrice
// PostedPrice price for market posted by a specific oracle
type PostedPrice struct {
MarketID string `json:"market_id" yaml:"market_id"`
OracleAddress sdk.AccAddress `json:"oracle_address" yaml:"oracle_address"`
Price sdk.Dec `json:"price" yaml:"price"`
Expiry time.Time `json:"expiry" yaml:"expiry"`
}

View File

@ -1,134 +0,0 @@
package v0_16
import (
v015pricefeed "github.com/0glabs/0g-chain/x/pricefeed/legacy/v0_15"
v016pricefeed "github.com/0glabs/0g-chain/x/pricefeed/types"
"github.com/cosmos/cosmos-sdk/types"
)
var NewIBCMarkets = []v016pricefeed.Market{
{
MarketID: "atom:usd",
BaseAsset: "atom",
QuoteAsset: "usd",
Oracles: nil,
Active: true,
},
{
MarketID: "atom:usd:30",
BaseAsset: "atom",
QuoteAsset: "usd",
Oracles: nil,
Active: true,
},
{
MarketID: "akt:usd",
BaseAsset: "akt",
QuoteAsset: "usd",
Oracles: nil,
Active: true,
},
{
MarketID: "akt:usd:30",
BaseAsset: "akt",
QuoteAsset: "usd",
Oracles: nil,
Active: true,
},
{
MarketID: "luna:usd",
BaseAsset: "luna",
QuoteAsset: "usd",
Oracles: nil,
Active: true,
},
{
MarketID: "luna:usd:30",
BaseAsset: "luna",
QuoteAsset: "usd",
Oracles: nil,
Active: true,
},
{
MarketID: "osmo:usd",
BaseAsset: "osmo",
QuoteAsset: "usd",
Oracles: nil,
Active: true,
},
{
MarketID: "osmo:usd:30",
BaseAsset: "osmo",
QuoteAsset: "usd",
Oracles: nil,
Active: true,
},
{
MarketID: "ust:usd",
BaseAsset: "ust",
QuoteAsset: "usd",
Oracles: nil,
Active: true,
},
{
MarketID: "ust:usd:30",
BaseAsset: "ust",
QuoteAsset: "usd",
Oracles: nil,
Active: true,
},
}
func migrateParams(params v015pricefeed.Params) v016pricefeed.Params {
markets := make(v016pricefeed.Markets, len(params.Markets))
for i, market := range params.Markets {
markets[i] = v016pricefeed.Market{
MarketID: market.MarketID,
BaseAsset: market.BaseAsset,
QuoteAsset: market.QuoteAsset,
Oracles: market.Oracles,
Active: market.Active,
}
}
markets = addIbcMarkets(markets)
return v016pricefeed.Params{Markets: markets}
}
func addIbcMarkets(markets v016pricefeed.Markets) v016pricefeed.Markets {
var oracles []types.AccAddress
if len(markets) > 0 {
oracles = markets[0].Oracles
}
for _, newMarket := range NewIBCMarkets {
// newMarket is a copy, should not affect other uses of NewIBCMarkets
newMarket.Oracles = oracles
markets = append(markets, newMarket)
}
return markets
}
func migratePostedPrices(oldPostedPrices v015pricefeed.PostedPrices) v016pricefeed.PostedPrices {
newPrices := make(v016pricefeed.PostedPrices, len(oldPostedPrices))
for i, price := range oldPostedPrices {
newPrices[i] = v016pricefeed.PostedPrice{
MarketID: price.MarketID,
OracleAddress: price.OracleAddress,
Price: price.Price,
Expiry: price.Expiry,
}
}
return newPrices
}
// Migrate converts v0.15 pricefeed state and returns it in v0.16 format
func Migrate(oldState v015pricefeed.GenesisState) *v016pricefeed.GenesisState {
return &v016pricefeed.GenesisState{
Params: migrateParams(oldState.Params),
PostedPrices: migratePostedPrices(oldState.PostedPrices),
}
}

View File

@ -1,353 +0,0 @@
package v0_16
import (
"testing"
"time"
"github.com/cosmos/cosmos-sdk/codec"
sdk "github.com/cosmos/cosmos-sdk/types"
"github.com/stretchr/testify/suite"
app "github.com/0glabs/0g-chain/app"
"github.com/0glabs/0g-chain/chaincfg"
v015pricefeed "github.com/0glabs/0g-chain/x/pricefeed/legacy/v0_15"
v016pricefeed "github.com/0glabs/0g-chain/x/pricefeed/types"
)
type migrateTestSuite struct {
suite.Suite
addresses []sdk.AccAddress
v15genstate v015pricefeed.GenesisState
cdc codec.Codec
legacyCdc *codec.LegacyAmino
}
func (s *migrateTestSuite) SetupTest() {
chaincfg.SetSDKConfig()
s.v15genstate = v015pricefeed.GenesisState{
Params: v015pricefeed.Params{},
PostedPrices: v015pricefeed.PostedPrices{},
}
config := app.MakeEncodingConfig()
s.cdc = config.Marshaler
legacyCodec := codec.NewLegacyAmino()
s.legacyCdc = legacyCodec
_, accAddresses := app.GeneratePrivKeyAddressPairs(10)
s.addresses = accAddresses
}
func (s *migrateTestSuite) TestMigrate_JSON() {
// Migrate v15 pricefeed to v16
v15Params := `{
"params": {
"markets": [
{
"active": true,
"base_asset": "bnb",
"market_id": "bnb:usd",
"oracles": ["0g1ffv7nhd3z6sych2qpqkk03ec6hzkmufyhp5hf8"],
"quote_asset": "usd"
},
{
"active": true,
"base_asset": "bnb",
"market_id": "bnb:usd:30",
"oracles": ["0g1ffv7nhd3z6sych2qpqkk03ec6hzkmufyhp5hf8"],
"quote_asset": "usd"
}
]
},
"posted_prices": [
{
"expiry": "2022-07-20T00:00:00Z",
"market_id": "bnb:usd",
"oracle_address": "0g1ffv7nhd3z6sych2qpqkk03ec6hzkmufyhp5hf8",
"price": "215.962650000000001782"
},
{
"expiry": "2022-07-20T00:00:00Z",
"market_id": "bnb:usd:30",
"oracle_address": "0g1ffv7nhd3z6sych2qpqkk03ec6hzkmufyhp5hf8",
"price": "217.962650000000001782"
}
]
}`
expectedV16Params := `{
"params": {
"markets": [
{
"market_id": "bnb:usd",
"base_asset": "bnb",
"quote_asset": "usd",
"oracles": [
"0g1ffv7nhd3z6sych2qpqkk03ec6hzkmufyhp5hf8"
],
"active": true
},
{
"market_id": "bnb:usd:30",
"base_asset": "bnb",
"quote_asset": "usd",
"oracles": [
"0g1ffv7nhd3z6sych2qpqkk03ec6hzkmufyhp5hf8"
],
"active": true
},
{
"market_id": "atom:usd",
"base_asset": "atom",
"quote_asset": "usd",
"oracles": [
"0g1ffv7nhd3z6sych2qpqkk03ec6hzkmufyhp5hf8"
],
"active": true
},
{
"market_id": "atom:usd:30",
"base_asset": "atom",
"quote_asset": "usd",
"oracles": [
"0g1ffv7nhd3z6sych2qpqkk03ec6hzkmufyhp5hf8"
],
"active": true
},
{
"market_id": "akt:usd",
"base_asset": "akt",
"quote_asset": "usd",
"oracles": [
"0g1ffv7nhd3z6sych2qpqkk03ec6hzkmufyhp5hf8"
],
"active": true
},
{
"market_id": "akt:usd:30",
"base_asset": "akt",
"quote_asset": "usd",
"oracles": [
"0g1ffv7nhd3z6sych2qpqkk03ec6hzkmufyhp5hf8"
],
"active": true
},
{
"market_id": "luna:usd",
"base_asset": "luna",
"quote_asset": "usd",
"oracles": [
"0g1ffv7nhd3z6sych2qpqkk03ec6hzkmufyhp5hf8"
],
"active": true
},
{
"market_id": "luna:usd:30",
"base_asset": "luna",
"quote_asset": "usd",
"oracles": [
"0g1ffv7nhd3z6sych2qpqkk03ec6hzkmufyhp5hf8"
],
"active": true
},
{
"market_id": "osmo:usd",
"base_asset": "osmo",
"quote_asset": "usd",
"oracles": [
"0g1ffv7nhd3z6sych2qpqkk03ec6hzkmufyhp5hf8"
],
"active": true
},
{
"market_id": "osmo:usd:30",
"base_asset": "osmo",
"quote_asset": "usd",
"oracles": [
"0g1ffv7nhd3z6sych2qpqkk03ec6hzkmufyhp5hf8"
],
"active": true
},
{
"market_id": "ust:usd",
"base_asset": "ust",
"quote_asset": "usd",
"oracles": [
"0g1ffv7nhd3z6sych2qpqkk03ec6hzkmufyhp5hf8"
],
"active": true
},
{
"market_id": "ust:usd:30",
"base_asset": "ust",
"quote_asset": "usd",
"oracles": [
"0g1ffv7nhd3z6sych2qpqkk03ec6hzkmufyhp5hf8"
],
"active": true
}
]
},
"posted_prices": [
{
"market_id": "bnb:usd",
"oracle_address": "0g1ffv7nhd3z6sych2qpqkk03ec6hzkmufyhp5hf8",
"price": "215.962650000000001782",
"expiry": "2022-07-20T00:00:00Z"
},
{
"market_id": "bnb:usd:30",
"oracle_address": "0g1ffv7nhd3z6sych2qpqkk03ec6hzkmufyhp5hf8",
"price": "217.962650000000001782",
"expiry": "2022-07-20T00:00:00Z"
}
]
}`
err := s.legacyCdc.UnmarshalJSON([]byte(v15Params), &s.v15genstate)
s.Require().NoError(err)
genstate := Migrate(s.v15genstate)
// v16 pricefeed json should be the same as v15 but with IBC markets added
actual := s.cdc.MustMarshalJSON(genstate)
s.Require().NoError(err)
s.Require().JSONEq(expectedV16Params, string(actual))
}
func (s *migrateTestSuite) TestMigrate_Params() {
s.v15genstate.Params = v015pricefeed.Params{
Markets: v015pricefeed.Markets{
{
MarketID: "market-1",
BaseAsset: "a0gi",
QuoteAsset: "usd",
Oracles: s.addresses,
Active: true,
},
},
}
expectedParams := v016pricefeed.Params{
Markets: v016pricefeed.Markets{
{
MarketID: "market-1",
BaseAsset: "a0gi",
QuoteAsset: "usd",
Oracles: s.addresses,
Active: true,
},
{
MarketID: "atom:usd",
BaseAsset: "atom",
QuoteAsset: "usd",
Oracles: s.addresses,
Active: true,
},
{
MarketID: "atom:usd:30",
BaseAsset: "atom",
QuoteAsset: "usd",
Oracles: s.addresses,
Active: true,
},
{
MarketID: "akt:usd",
BaseAsset: "akt",
QuoteAsset: "usd",
Oracles: s.addresses,
Active: true,
},
{
MarketID: "akt:usd:30",
BaseAsset: "akt",
QuoteAsset: "usd",
Oracles: s.addresses,
Active: true,
},
{
MarketID: "luna:usd",
BaseAsset: "luna",
QuoteAsset: "usd",
Oracles: s.addresses,
Active: true,
},
{
MarketID: "luna:usd:30",
BaseAsset: "luna",
QuoteAsset: "usd",
Oracles: s.addresses,
Active: true,
},
{
MarketID: "osmo:usd",
BaseAsset: "osmo",
QuoteAsset: "usd",
Oracles: s.addresses,
Active: true,
},
{
MarketID: "osmo:usd:30",
BaseAsset: "osmo",
QuoteAsset: "usd",
Oracles: s.addresses,
Active: true,
},
{
MarketID: "ust:usd",
BaseAsset: "ust",
QuoteAsset: "usd",
Oracles: s.addresses,
Active: true,
},
{
MarketID: "ust:usd:30",
BaseAsset: "ust",
QuoteAsset: "usd",
Oracles: s.addresses,
Active: true,
},
},
}
genState := Migrate(s.v15genstate)
s.Require().Equal(expectedParams, genState.Params)
}
func (s *migrateTestSuite) TestMigrate_PostedPrices() {
s.v15genstate.PostedPrices = v015pricefeed.PostedPrices{
{
MarketID: "market-1",
OracleAddress: s.addresses[0],
Price: sdk.MustNewDecFromStr("1.2"),
Expiry: time.Date(2020, time.January, 1, 0, 0, 0, 0, time.UTC),
},
{
MarketID: "market-2",
OracleAddress: s.addresses[1],
Price: sdk.MustNewDecFromStr("1.899"),
Expiry: time.Date(2021, time.January, 1, 0, 0, 0, 0, time.UTC),
},
}
expected := v016pricefeed.PostedPrices{
{
MarketID: "market-1",
OracleAddress: s.addresses[0],
Price: sdk.MustNewDecFromStr("1.2"),
Expiry: time.Date(2020, time.January, 1, 0, 0, 0, 0, time.UTC),
},
{
MarketID: "market-2",
OracleAddress: s.addresses[1],
Price: sdk.MustNewDecFromStr("1.899"),
Expiry: time.Date(2021, time.January, 1, 0, 0, 0, 0, time.UTC),
},
}
genState := Migrate(s.v15genstate)
s.Require().Equal(expected, genState.PostedPrices)
}
func TestPriceFeedMigrateTestSuite(t *testing.T) {
suite.Run(t, new(migrateTestSuite))
}