From 3bf40b97f98461e26cb082dadb7da072fdae2dc5 Mon Sep 17 00:00:00 2001 From: Kevin Davis Date: Mon, 22 Feb 2021 14:53:00 -0700 Subject: [PATCH] feat: pricefeed migrations (#846) --- migrate/v0_13/migrate.go | 26 ++++++++++++++++++- migrate/v0_13/migrate_test.go | 14 ++++++++++ .../testdata/kava-4-pricefeed-state.json | 1 + 3 files changed, 40 insertions(+), 1 deletion(-) create mode 100644 migrate/v0_13/testdata/kava-4-pricefeed-state.json diff --git a/migrate/v0_13/migrate.go b/migrate/v0_13/migrate.go index e2eab9e2..2078d63f 100644 --- a/migrate/v0_13/migrate.go +++ b/migrate/v0_13/migrate.go @@ -20,6 +20,8 @@ import ( v0_13incentive "github.com/kava-labs/kava/x/incentive" v0_11incentive "github.com/kava-labs/kava/x/incentive/legacy/v0_11" "github.com/kava-labs/kava/x/kavadist" + v0_11pricefeed "github.com/kava-labs/kava/x/pricefeed" + v0_13pricefeed "github.com/kava-labs/kava/x/pricefeed" validatorvesting "github.com/kava-labs/kava/x/validator-vesting" ) @@ -441,7 +443,7 @@ func Bep3(genesisState bep3.GenesisState) bep3.GenesisState { return bep3.NewGenesisState(newParams, newSwaps, newSupplies, genesisState.PreviousBlockTime) } -// Committee migrates from a v0.11 (or v0.12) committee genesis state to a v0.13 committee genesis stat +// Committee migrates from a v0.11 (or v0.12) committee genesis state to a v0.13 committee genesis state func Committee(genesisState v0_11committee.GenesisState) v0_13committee.GenesisState { committees := []v0_13committee.Committee{} votes := []v0_13committee.Vote{} @@ -556,6 +558,28 @@ func Committee(genesisState v0_11committee.GenesisState) v0_13committee.GenesisS genesisState.NextProposalID, committees, proposals, votes) } +// Pricefeed migrates from a v0.11 (or v0.12) pricefeed genesis state to a v0.13 pricefeed genesis state +func Pricefeed(genesisState v0_11pricefeed.GenesisState) v0_13pricefeed.GenesisState { + newMarkets := v0_13pricefeed.Markets{} + oracles := genesisState.Params.Markets[0].Oracles + + for _, m := range genesisState.Params.Markets { + newMarkets = append(newMarkets, m) + } + usdx := v0_11pricefeed.NewMarket("usdx:usd", "usdx", "usd", oracles, true) + newMarkets = append(newMarkets, usdx) + + newPrices := v0_13pricefeed.PostedPrices{} + + for _, p := range genesisState.PostedPrices { + if p.Expiry.After(GenesisTime) { + newPrices = append(newPrices, p) + } + } + + return v0_13pricefeed.NewGenesisState(v0_13pricefeed.NewParams(newMarkets), newPrices) +} + func removeIndex(accs authexported.GenesisAccounts, index int) authexported.GenesisAccounts { ret := make(authexported.GenesisAccounts, 0) ret = append(ret, accs[:index]...) diff --git a/migrate/v0_13/migrate_test.go b/migrate/v0_13/migrate_test.go index d47e469a..9aaf97b1 100644 --- a/migrate/v0_13/migrate_test.go +++ b/migrate/v0_13/migrate_test.go @@ -23,6 +23,7 @@ import ( v0_11hard "github.com/kava-labs/kava/x/hard/legacy/v0_11" v0_13incentive "github.com/kava-labs/kava/x/incentive" v0_11incentive "github.com/kava-labs/kava/x/incentive/legacy/v0_11" + v0_11pricefeed "github.com/kava-labs/kava/x/pricefeed" validatorvesting "github.com/kava-labs/kava/x/validator-vesting" "github.com/stretchr/testify/require" @@ -178,6 +179,19 @@ func TestCommittee(t *testing.T) { require.Equal(t, len(oldSPCP.AllowedMarkets), len(newSPCP.AllowedMarkets)) } +func TestPricefeed(t *testing.T) { + cdc := app.MakeCodec() + bz, err := ioutil.ReadFile(filepath.Join("testdata", "kava-4-pricefeed-state.json")) + require.NoError(t, err) + var oldPricefeedGenState v0_11pricefeed.GenesisState + require.NotPanics(t, func() { + cdc.MustUnmarshalJSON(bz, &oldPricefeedGenState) + }) + newGenState := Pricefeed(oldPricefeedGenState) + err = newGenState.Validate() + require.NoError(t, err) + require.Equal(t, len(oldPricefeedGenState.Params.Markets)+1, len(newGenState.Params.Markets)) +} func TestBep3(t *testing.T) { bz, err := ioutil.ReadFile(filepath.Join("testdata", "kava-4-bep3-state.json")) require.NoError(t, err) diff --git a/migrate/v0_13/testdata/kava-4-pricefeed-state.json b/migrate/v0_13/testdata/kava-4-pricefeed-state.json new file mode 100644 index 00000000..b8634a0e --- /dev/null +++ b/migrate/v0_13/testdata/kava-4-pricefeed-state.json @@ -0,0 +1 @@ +{"params":{"markets":[{"active":true,"base_asset":"bnb","market_id":"bnb:usd","oracles":["kava12dyshua9nkvx9w8ywp72wdnzrc4t4mnnycz0dl","kava1tuxyepdrkwraa22k99w04c0wa64tgh70mv87fs","kava1ueak7nzesm3pnev6lngp6lgk0ry02djz8pjpcg","kava1sl62nqm89c780yxm3m9lp3tacmpnfljq6tytvl","kava1ujfrlcd0ted58mzplnyxzklsw0sqevlgxndanp","kava17fatl3wzxvk4rwfu3tqsctdp5x9vute67j9ufj","kava19rjk5qmmwywnzfccwzyn02jywgpwjqf60afj92","kava1xd39avn2f008jmvua0eupg39zsp2xn3wf802vn","kava1pt6q4kdmwawr3thm9cd82pq7hml8u84rd0f3jy","kava13tpwqygswyzupqfggfgh9dmtgthgucn5wpfksh"],"quote_asset":"usd"},{"active":true,"base_asset":"bnb","market_id":"bnb:usd:30","oracles":["kava12dyshua9nkvx9w8ywp72wdnzrc4t4mnnycz0dl","kava1tuxyepdrkwraa22k99w04c0wa64tgh70mv87fs","kava1ueak7nzesm3pnev6lngp6lgk0ry02djz8pjpcg","kava1sl62nqm89c780yxm3m9lp3tacmpnfljq6tytvl","kava1ujfrlcd0ted58mzplnyxzklsw0sqevlgxndanp","kava17fatl3wzxvk4rwfu3tqsctdp5x9vute67j9ufj","kava19rjk5qmmwywnzfccwzyn02jywgpwjqf60afj92","kava1xd39avn2f008jmvua0eupg39zsp2xn3wf802vn","kava1pt6q4kdmwawr3thm9cd82pq7hml8u84rd0f3jy","kava13tpwqygswyzupqfggfgh9dmtgthgucn5wpfksh"],"quote_asset":"usd"},{"active":true,"base_asset":"btc","market_id":"btc:usd","oracles":["kava12dyshua9nkvx9w8ywp72wdnzrc4t4mnnycz0dl","kava1tuxyepdrkwraa22k99w04c0wa64tgh70mv87fs","kava1ueak7nzesm3pnev6lngp6lgk0ry02djz8pjpcg","kava1sl62nqm89c780yxm3m9lp3tacmpnfljq6tytvl","kava1ujfrlcd0ted58mzplnyxzklsw0sqevlgxndanp","kava17fatl3wzxvk4rwfu3tqsctdp5x9vute67j9ufj","kava19rjk5qmmwywnzfccwzyn02jywgpwjqf60afj92","kava1xd39avn2f008jmvua0eupg39zsp2xn3wf802vn","kava1pt6q4kdmwawr3thm9cd82pq7hml8u84rd0f3jy","kava13tpwqygswyzupqfggfgh9dmtgthgucn5wpfksh"],"quote_asset":"usd"},{"active":true,"base_asset":"btc","market_id":"btc:usd:30","oracles":["kava12dyshua9nkvx9w8ywp72wdnzrc4t4mnnycz0dl","kava1tuxyepdrkwraa22k99w04c0wa64tgh70mv87fs","kava1ueak7nzesm3pnev6lngp6lgk0ry02djz8pjpcg","kava1sl62nqm89c780yxm3m9lp3tacmpnfljq6tytvl","kava1ujfrlcd0ted58mzplnyxzklsw0sqevlgxndanp","kava17fatl3wzxvk4rwfu3tqsctdp5x9vute67j9ufj","kava19rjk5qmmwywnzfccwzyn02jywgpwjqf60afj92","kava1xd39avn2f008jmvua0eupg39zsp2xn3wf802vn","kava1pt6q4kdmwawr3thm9cd82pq7hml8u84rd0f3jy","kava13tpwqygswyzupqfggfgh9dmtgthgucn5wpfksh"],"quote_asset":"usd"},{"active":true,"base_asset":"xrp","market_id":"xrp:usd","oracles":["kava12dyshua9nkvx9w8ywp72wdnzrc4t4mnnycz0dl","kava1tuxyepdrkwraa22k99w04c0wa64tgh70mv87fs","kava1ueak7nzesm3pnev6lngp6lgk0ry02djz8pjpcg","kava1sl62nqm89c780yxm3m9lp3tacmpnfljq6tytvl","kava1ujfrlcd0ted58mzplnyxzklsw0sqevlgxndanp","kava17fatl3wzxvk4rwfu3tqsctdp5x9vute67j9ufj","kava19rjk5qmmwywnzfccwzyn02jywgpwjqf60afj92","kava1xd39avn2f008jmvua0eupg39zsp2xn3wf802vn","kava1pt6q4kdmwawr3thm9cd82pq7hml8u84rd0f3jy","kava13tpwqygswyzupqfggfgh9dmtgthgucn5wpfksh"],"quote_asset":"usd"},{"active":true,"base_asset":"xrp","market_id":"xrp:usd:30","oracles":["kava12dyshua9nkvx9w8ywp72wdnzrc4t4mnnycz0dl","kava1tuxyepdrkwraa22k99w04c0wa64tgh70mv87fs","kava1ueak7nzesm3pnev6lngp6lgk0ry02djz8pjpcg","kava1sl62nqm89c780yxm3m9lp3tacmpnfljq6tytvl","kava1ujfrlcd0ted58mzplnyxzklsw0sqevlgxndanp","kava17fatl3wzxvk4rwfu3tqsctdp5x9vute67j9ufj","kava19rjk5qmmwywnzfccwzyn02jywgpwjqf60afj92","kava1xd39avn2f008jmvua0eupg39zsp2xn3wf802vn","kava1pt6q4kdmwawr3thm9cd82pq7hml8u84rd0f3jy","kava13tpwqygswyzupqfggfgh9dmtgthgucn5wpfksh"],"quote_asset":"usd"},{"active":true,"base_asset":"busd","market_id":"busd:usd","oracles":["kava12dyshua9nkvx9w8ywp72wdnzrc4t4mnnycz0dl","kava1tuxyepdrkwraa22k99w04c0wa64tgh70mv87fs","kava1ueak7nzesm3pnev6lngp6lgk0ry02djz8pjpcg","kava1sl62nqm89c780yxm3m9lp3tacmpnfljq6tytvl","kava1ujfrlcd0ted58mzplnyxzklsw0sqevlgxndanp","kava17fatl3wzxvk4rwfu3tqsctdp5x9vute67j9ufj","kava19rjk5qmmwywnzfccwzyn02jywgpwjqf60afj92","kava1xd39avn2f008jmvua0eupg39zsp2xn3wf802vn","kava1pt6q4kdmwawr3thm9cd82pq7hml8u84rd0f3jy","kava13tpwqygswyzupqfggfgh9dmtgthgucn5wpfksh"],"quote_asset":"usd"},{"active":true,"base_asset":"busd","market_id":"busd:usd:30","oracles":["kava12dyshua9nkvx9w8ywp72wdnzrc4t4mnnycz0dl","kava1tuxyepdrkwraa22k99w04c0wa64tgh70mv87fs","kava1ueak7nzesm3pnev6lngp6lgk0ry02djz8pjpcg","kava1sl62nqm89c780yxm3m9lp3tacmpnfljq6tytvl","kava1ujfrlcd0ted58mzplnyxzklsw0sqevlgxndanp","kava17fatl3wzxvk4rwfu3tqsctdp5x9vute67j9ufj","kava19rjk5qmmwywnzfccwzyn02jywgpwjqf60afj92","kava1xd39avn2f008jmvua0eupg39zsp2xn3wf802vn","kava1pt6q4kdmwawr3thm9cd82pq7hml8u84rd0f3jy","kava13tpwqygswyzupqfggfgh9dmtgthgucn5wpfksh"],"quote_asset":"usd"},{"active":true,"base_asset":"kava","market_id":"kava:usd","oracles":["kava12dyshua9nkvx9w8ywp72wdnzrc4t4mnnycz0dl","kava1tuxyepdrkwraa22k99w04c0wa64tgh70mv87fs","kava1ueak7nzesm3pnev6lngp6lgk0ry02djz8pjpcg","kava1sl62nqm89c780yxm3m9lp3tacmpnfljq6tytvl","kava1ujfrlcd0ted58mzplnyxzklsw0sqevlgxndanp","kava17fatl3wzxvk4rwfu3tqsctdp5x9vute67j9ufj","kava19rjk5qmmwywnzfccwzyn02jywgpwjqf60afj92","kava1xd39avn2f008jmvua0eupg39zsp2xn3wf802vn","kava1pt6q4kdmwawr3thm9cd82pq7hml8u84rd0f3jy","kava13tpwqygswyzupqfggfgh9dmtgthgucn5wpfksh"],"quote_asset":"usd"},{"active":true,"base_asset":"kava","market_id":"kava:usd:30","oracles":["kava12dyshua9nkvx9w8ywp72wdnzrc4t4mnnycz0dl","kava1tuxyepdrkwraa22k99w04c0wa64tgh70mv87fs","kava1ueak7nzesm3pnev6lngp6lgk0ry02djz8pjpcg","kava1sl62nqm89c780yxm3m9lp3tacmpnfljq6tytvl","kava1ujfrlcd0ted58mzplnyxzklsw0sqevlgxndanp","kava17fatl3wzxvk4rwfu3tqsctdp5x9vute67j9ufj","kava19rjk5qmmwywnzfccwzyn02jywgpwjqf60afj92","kava1xd39avn2f008jmvua0eupg39zsp2xn3wf802vn","kava1pt6q4kdmwawr3thm9cd82pq7hml8u84rd0f3jy","kava13tpwqygswyzupqfggfgh9dmtgthgucn5wpfksh"],"quote_asset":"usd"},{"active":true,"base_asset":"hard","market_id":"hard:usd","oracles":["kava12dyshua9nkvx9w8ywp72wdnzrc4t4mnnycz0dl","kava1tuxyepdrkwraa22k99w04c0wa64tgh70mv87fs","kava1ueak7nzesm3pnev6lngp6lgk0ry02djz8pjpcg","kava1sl62nqm89c780yxm3m9lp3tacmpnfljq6tytvl","kava1ujfrlcd0ted58mzplnyxzklsw0sqevlgxndanp","kava17fatl3wzxvk4rwfu3tqsctdp5x9vute67j9ufj","kava19rjk5qmmwywnzfccwzyn02jywgpwjqf60afj92","kava1xd39avn2f008jmvua0eupg39zsp2xn3wf802vn","kava1pt6q4kdmwawr3thm9cd82pq7hml8u84rd0f3jy","kava13tpwqygswyzupqfggfgh9dmtgthgucn5wpfksh"],"quote_asset":"usd"},{"active":true,"base_asset":"hard","market_id":"hard:usd:30","oracles":["kava12dyshua9nkvx9w8ywp72wdnzrc4t4mnnycz0dl","kava1tuxyepdrkwraa22k99w04c0wa64tgh70mv87fs","kava1ueak7nzesm3pnev6lngp6lgk0ry02djz8pjpcg","kava1sl62nqm89c780yxm3m9lp3tacmpnfljq6tytvl","kava1ujfrlcd0ted58mzplnyxzklsw0sqevlgxndanp","kava17fatl3wzxvk4rwfu3tqsctdp5x9vute67j9ufj","kava19rjk5qmmwywnzfccwzyn02jywgpwjqf60afj92","kava1xd39avn2f008jmvua0eupg39zsp2xn3wf802vn","kava1pt6q4kdmwawr3thm9cd82pq7hml8u84rd0f3jy","kava13tpwqygswyzupqfggfgh9dmtgthgucn5wpfksh"],"quote_asset":"usd"}]},"posted_prices":[{"expiry":"2021-01-23T03:06:00Z","market_id":"bnb:usd","oracle_address":"kava19rjk5qmmwywnzfccwzyn02jywgpwjqf60afj92","price":"40.393200000000000216"},{"expiry":"2021-01-23T03:06:00Z","market_id":"bnb:usd","oracle_address":"kava1pt6q4kdmwawr3thm9cd82pq7hml8u84rd0f3jy","price":"40.393200000000000216"},{"expiry":"2020-12-28T12:10:07Z","market_id":"bnb:usd","oracle_address":"kava1ueak7nzesm3pnev6lngp6lgk0ry02djz8pjpcg","price":"35.165300000000002001"},{"expiry":"2021-01-23T03:06:02Z","market_id":"bnb:usd","oracle_address":"kava12dyshua9nkvx9w8ywp72wdnzrc4t4mnnycz0dl","price":"40.397899999999999920"},{"expiry":"2021-01-23T03:06:01Z","market_id":"bnb:usd","oracle_address":"kava1xd39avn2f008jmvua0eupg39zsp2xn3wf802vn","price":"40.368999999999999773"},{"expiry":"2021-01-23T03:06:00Z","market_id":"bnb:usd","oracle_address":"kava13tpwqygswyzupqfggfgh9dmtgthgucn5wpfksh","price":"40.393200000000000216"},{"expiry":"2020-11-10T18:45:03Z","market_id":"bnb:usd","oracle_address":"kava1sl62nqm89c780yxm3m9lp3tacmpnfljq6tytvl","price":"28.031700000000000728"},{"expiry":"2020-12-31T07:58:02Z","market_id":"bnb:usd","oracle_address":"kava17fatl3wzxvk4rwfu3tqsctdp5x9vute67j9ufj","price":"37.425199999999996692"},{"expiry":"2021-01-23T02:00:00Z","market_id":"bnb:usd","oracle_address":"kava1ujfrlcd0ted58mzplnyxzklsw0sqevlgxndanp","price":"40.449699999999999989"},{"expiry":"2021-01-23T02:59:00Z","market_id":"bnb:usd:30","oracle_address":"kava19rjk5qmmwywnzfccwzyn02jywgpwjqf60afj92","price":"40.471173333333325672"},{"expiry":"2021-01-23T03:02:00Z","market_id":"bnb:usd:30","oracle_address":"kava1pt6q4kdmwawr3thm9cd82pq7hml8u84rd0f3jy","price":"40.434153333333334501"},{"expiry":"2020-12-28T04:58:00Z","market_id":"bnb:usd:30","oracle_address":"kava1ueak7nzesm3pnev6lngp6lgk0ry02djz8pjpcg","price":"34.187010000000000787"},{"expiry":"2021-01-23T02:58:01Z","market_id":"bnb:usd:30","oracle_address":"kava12dyshua9nkvx9w8ywp72wdnzrc4t4mnnycz0dl","price":"40.506103333333335570"},{"expiry":"2021-01-23T03:03:04Z","market_id":"bnb:usd:30","oracle_address":"kava1xd39avn2f008jmvua0eupg39zsp2xn3wf802vn","price":"40.399290000000000589"},{"expiry":"2021-01-23T02:06:53Z","market_id":"bnb:usd:30","oracle_address":"kava13tpwqygswyzupqfggfgh9dmtgthgucn5wpfksh","price":"40.521906666666659191"},{"expiry":"2020-11-10T19:52:02Z","market_id":"bnb:usd:30","oracle_address":"kava1sl62nqm89c780yxm3m9lp3tacmpnfljq6tytvl","price":"27.935529999999992867"},{"expiry":"2020-12-31T07:58:55Z","market_id":"bnb:usd:30","oracle_address":"kava17fatl3wzxvk4rwfu3tqsctdp5x9vute67j9ufj","price":"37.324073333333323887"},{"expiry":"2021-01-23T02:30:00Z","market_id":"bnb:usd:30","oracle_address":"kava1ujfrlcd0ted58mzplnyxzklsw0sqevlgxndanp","price":"40.604963333333344622"},{"expiry":"2021-01-23T02:54:53Z","market_id":"btc:usd","oracle_address":"kava1pt6q4kdmwawr3thm9cd82pq7hml8u84rd0f3jy","price":"32902.010000000002037268"},{"expiry":"2021-01-23T02:54:52Z","market_id":"btc:usd","oracle_address":"kava19rjk5qmmwywnzfccwzyn02jywgpwjqf60afj92","price":"32910.980000000003201421"},{"expiry":"2020-12-31T07:59:46Z","market_id":"btc:usd","oracle_address":"kava17fatl3wzxvk4rwfu3tqsctdp5x9vute67j9ufj","price":"29006.619999999998981366"},{"expiry":"2021-01-23T03:00:04Z","market_id":"btc:usd","oracle_address":"kava1ujfrlcd0ted58mzplnyxzklsw0sqevlgxndanp","price":"32835.290000000000873115"},{"expiry":"2021-01-23T02:57:53Z","market_id":"btc:usd","oracle_address":"kava1xd39avn2f008jmvua0eupg39zsp2xn3wf802vn","price":"32852.250000000000000000"},{"expiry":"2020-12-27T19:07:26Z","market_id":"btc:usd","oracle_address":"kava1ueak7nzesm3pnev6lngp6lgk0ry02djz8pjpcg","price":"27441.619999999998981366"},{"expiry":"2020-11-10T20:07:33Z","market_id":"btc:usd","oracle_address":"kava1sl62nqm89c780yxm3m9lp3tacmpnfljq6tytvl","price":"15227.329999999999927240"},{"expiry":"2021-01-23T02:54:52Z","market_id":"btc:usd","oracle_address":"kava13tpwqygswyzupqfggfgh9dmtgthgucn5wpfksh","price":"32913.489999999997962732"},{"expiry":"2021-01-23T02:53:55Z","market_id":"btc:usd","oracle_address":"kava12dyshua9nkvx9w8ywp72wdnzrc4t4mnnycz0dl","price":"32917.000000000000000000"},{"expiry":"2021-01-23T03:04:01Z","market_id":"btc:usd:30","oracle_address":"kava1pt6q4kdmwawr3thm9cd82pq7hml8u84rd0f3jy","price":"33120.613333333334594499"},{"expiry":"2021-01-23T03:00:01Z","market_id":"btc:usd:30","oracle_address":"kava19rjk5qmmwywnzfccwzyn02jywgpwjqf60afj92","price":"33196.733666666666977108"},{"expiry":"2020-12-31T08:00:36Z","market_id":"btc:usd:30","oracle_address":"kava17fatl3wzxvk4rwfu3tqsctdp5x9vute67j9ufj","price":"28989.400333333334856434"},{"expiry":"2021-01-22T23:30:00Z","market_id":"btc:usd:30","oracle_address":"kava1ujfrlcd0ted58mzplnyxzklsw0sqevlgxndanp","price":"33290.522000000004481990"},{"expiry":"2021-01-23T03:04:54Z","market_id":"btc:usd:30","oracle_address":"kava1xd39avn2f008jmvua0eupg39zsp2xn3wf802vn","price":"33124.741000000001804437"},{"expiry":"2020-12-28T17:35:40Z","market_id":"btc:usd:30","oracle_address":"kava1ueak7nzesm3pnev6lngp6lgk0ry02djz8pjpcg","price":"27347.275000000005093170"},{"expiry":"2021-01-23T03:04:00Z","market_id":"btc:usd:30","oracle_address":"kava13tpwqygswyzupqfggfgh9dmtgthgucn5wpfksh","price":"33120.613333333334594499"},{"expiry":"2021-01-23T03:00:05Z","market_id":"btc:usd:30","oracle_address":"kava12dyshua9nkvx9w8ywp72wdnzrc4t4mnnycz0dl","price":"33196.733666666666977108"},{"expiry":"2021-01-23T02:57:52Z","market_id":"xrp:usd","oracle_address":"kava1pt6q4kdmwawr3thm9cd82pq7hml8u84rd0f3jy","price":"0.269699999999999995"},{"expiry":"2021-01-23T03:05:02Z","market_id":"xrp:usd","oracle_address":"kava19rjk5qmmwywnzfccwzyn02jywgpwjqf60afj92","price":"0.270830000000000015"},{"expiry":"2020-12-31T08:01:28Z","market_id":"xrp:usd","oracle_address":"kava17fatl3wzxvk4rwfu3tqsctdp5x9vute67j9ufj","price":"0.214529999999999998"},{"expiry":"2021-01-23T00:00:02Z","market_id":"xrp:usd","oracle_address":"kava1ujfrlcd0ted58mzplnyxzklsw0sqevlgxndanp","price":"0.275679999999999981"},{"expiry":"2021-01-23T03:05:31Z","market_id":"xrp:usd","oracle_address":"kava1xd39avn2f008jmvua0eupg39zsp2xn3wf802vn","price":"0.271110000000000018"},{"expiry":"2020-12-27T18:53:48Z","market_id":"xrp:usd","oracle_address":"kava1ueak7nzesm3pnev6lngp6lgk0ry02djz8pjpcg","price":"0.289540000000000020"},{"expiry":"2020-11-10T19:36:31Z","market_id":"xrp:usd","oracle_address":"kava1sl62nqm89c780yxm3m9lp3tacmpnfljq6tytvl","price":"0.252699999999999980"},{"expiry":"2021-01-23T02:58:01Z","market_id":"xrp:usd","oracle_address":"kava13tpwqygswyzupqfggfgh9dmtgthgucn5wpfksh","price":"0.269689999999999985"},{"expiry":"2021-01-23T03:04:00Z","market_id":"xrp:usd","oracle_address":"kava12dyshua9nkvx9w8ywp72wdnzrc4t4mnnycz0dl","price":"0.270409999999999984"},{"expiry":"2021-01-23T03:04:56Z","market_id":"xrp:usd:30","oracle_address":"kava1pt6q4kdmwawr3thm9cd82pq7hml8u84rd0f3jy","price":"0.272260333333333382"},{"expiry":"2021-01-23T03:05:27Z","market_id":"xrp:usd:30","oracle_address":"kava19rjk5qmmwywnzfccwzyn02jywgpwjqf60afj92","price":"0.272176333333333353"},{"expiry":"2020-12-31T08:02:20Z","market_id":"xrp:usd:30","oracle_address":"kava17fatl3wzxvk4rwfu3tqsctdp5x9vute67j9ufj","price":"0.214288666666666655"},{"expiry":"2021-01-23T03:00:05Z","market_id":"xrp:usd:30","oracle_address":"kava1xd39avn2f008jmvua0eupg39zsp2xn3wf802vn","price":"0.272865333333333404"},{"expiry":"2020-12-27T17:01:22Z","market_id":"xrp:usd:30","oracle_address":"kava1ueak7nzesm3pnev6lngp6lgk0ry02djz8pjpcg","price":"0.280510666666666630"},{"expiry":"2021-01-23T00:30:00Z","market_id":"xrp:usd:30","oracle_address":"kava1ujfrlcd0ted58mzplnyxzklsw0sqevlgxndanp","price":"0.275616666666666676"},{"expiry":"2021-01-23T02:57:01Z","market_id":"xrp:usd:30","oracle_address":"kava13tpwqygswyzupqfggfgh9dmtgthgucn5wpfksh","price":"0.273398666666666734"},{"expiry":"2021-01-23T02:59:06Z","market_id":"xrp:usd:30","oracle_address":"kava12dyshua9nkvx9w8ywp72wdnzrc4t4mnnycz0dl","price":"0.273043000000000091"},{"expiry":"2021-01-22T23:31:01Z","market_id":"busd:usd","oracle_address":"kava1pt6q4kdmwawr3thm9cd82pq7hml8u84rd0f3jy","price":"1.000000000000000000"},{"expiry":"2021-01-23T02:08:02Z","market_id":"busd:usd","oracle_address":"kava19rjk5qmmwywnzfccwzyn02jywgpwjqf60afj92","price":"1.000000000000000000"},{"expiry":"2020-12-31T08:03:13Z","market_id":"busd:usd","oracle_address":"kava17fatl3wzxvk4rwfu3tqsctdp5x9vute67j9ufj","price":"1.000000000000000000"},{"expiry":"2021-01-23T01:00:06Z","market_id":"busd:usd","oracle_address":"kava1ujfrlcd0ted58mzplnyxzklsw0sqevlgxndanp","price":"1.000000000000000000"},{"expiry":"2021-01-23T00:04:02Z","market_id":"busd:usd","oracle_address":"kava1xd39avn2f008jmvua0eupg39zsp2xn3wf802vn","price":"1.000000000000000000"},{"expiry":"2020-12-27T19:44:55Z","market_id":"busd:usd","oracle_address":"kava1ueak7nzesm3pnev6lngp6lgk0ry02djz8pjpcg","price":"1.000000000000000000"},{"expiry":"2021-01-23T01:35:52Z","market_id":"busd:usd","oracle_address":"kava13tpwqygswyzupqfggfgh9dmtgthgucn5wpfksh","price":"1.000000000000000000"},{"expiry":"2021-01-23T00:07:02Z","market_id":"busd:usd","oracle_address":"kava12dyshua9nkvx9w8ywp72wdnzrc4t4mnnycz0dl","price":"1.000000000000000000"},{"expiry":"2021-01-23T03:05:28Z","market_id":"busd:usd:30","oracle_address":"kava1pt6q4kdmwawr3thm9cd82pq7hml8u84rd0f3jy","price":"1.000000000000000000"},{"expiry":"2021-01-23T02:23:01Z","market_id":"busd:usd:30","oracle_address":"kava19rjk5qmmwywnzfccwzyn02jywgpwjqf60afj92","price":"1.000000000000000000"},{"expiry":"2020-12-31T08:04:04Z","market_id":"busd:usd:30","oracle_address":"kava17fatl3wzxvk4rwfu3tqsctdp5x9vute67j9ufj","price":"1.000000000000000000"},{"expiry":"2021-01-23T01:30:01Z","market_id":"busd:usd:30","oracle_address":"kava1ujfrlcd0ted58mzplnyxzklsw0sqevlgxndanp","price":"1.000000000000000000"},{"expiry":"2021-01-23T00:06:08Z","market_id":"busd:usd:30","oracle_address":"kava1xd39avn2f008jmvua0eupg39zsp2xn3wf802vn","price":"1.000000000000000000"},{"expiry":"2020-12-27T20:44:44Z","market_id":"busd:usd:30","oracle_address":"kava1ueak7nzesm3pnev6lngp6lgk0ry02djz8pjpcg","price":"1.000000000000000000"},{"expiry":"2021-01-23T02:16:02Z","market_id":"busd:usd:30","oracle_address":"kava13tpwqygswyzupqfggfgh9dmtgthgucn5wpfksh","price":"1.000000000000000000"},{"expiry":"2021-01-23T00:34:07Z","market_id":"busd:usd:30","oracle_address":"kava12dyshua9nkvx9w8ywp72wdnzrc4t4mnnycz0dl","price":"1.000000000000000000"},{"expiry":"2021-01-23T03:05:35Z","market_id":"kava:usd","oracle_address":"kava19rjk5qmmwywnzfccwzyn02jywgpwjqf60afj92","price":"2.144800000000000040"},{"expiry":"2021-01-23T03:01:00Z","market_id":"kava:usd","oracle_address":"kava1ujfrlcd0ted58mzplnyxzklsw0sqevlgxndanp","price":"2.138399999999999856"},{"expiry":"2021-01-23T02:54:17Z","market_id":"kava:usd","oracle_address":"kava1xd39avn2f008jmvua0eupg39zsp2xn3wf802vn","price":"2.140499999999999847"},{"expiry":"2021-01-23T03:04:53Z","market_id":"kava:usd","oracle_address":"kava13tpwqygswyzupqfggfgh9dmtgthgucn5wpfksh","price":"2.143400000000000194"},{"expiry":"2020-12-27T22:19:18Z","market_id":"kava:usd","oracle_address":"kava1ueak7nzesm3pnev6lngp6lgk0ry02djz8pjpcg","price":"1.323499999999999899"},{"expiry":"2021-01-23T03:06:10Z","market_id":"kava:usd:30","oracle_address":"kava19rjk5qmmwywnzfccwzyn02jywgpwjqf60afj92","price":"2.155063333333333109"},{"expiry":"2021-01-23T00:00:23Z","market_id":"kava:usd:30","oracle_address":"kava1ujfrlcd0ted58mzplnyxzklsw0sqevlgxndanp","price":"2.218760000000000066"},{"expiry":"2021-01-23T03:01:01Z","market_id":"kava:usd:30","oracle_address":"kava1xd39avn2f008jmvua0eupg39zsp2xn3wf802vn","price":"2.161160000000000192"},{"expiry":"2021-01-23T03:01:01Z","market_id":"kava:usd:30","oracle_address":"kava13tpwqygswyzupqfggfgh9dmtgthgucn5wpfksh","price":"2.161160000000000192"},{"expiry":"2020-12-27T17:00:29Z","market_id":"kava:usd:30","oracle_address":"kava1ueak7nzesm3pnev6lngp6lgk0ry02djz8pjpcg","price":"1.277976666666666983"},{"expiry":"2021-01-23T03:01:01Z","market_id":"hard:usd","oracle_address":"kava19rjk5qmmwywnzfccwzyn02jywgpwjqf60afj92","price":"0.682100000000000040"},{"expiry":"2021-01-23T00:30:42Z","market_id":"hard:usd","oracle_address":"kava1ujfrlcd0ted58mzplnyxzklsw0sqevlgxndanp","price":"0.705099999999999949"},{"expiry":"2021-01-23T03:05:47Z","market_id":"hard:usd:30","oracle_address":"kava19rjk5qmmwywnzfccwzyn02jywgpwjqf60afj92","price":"0.693106666666666649"},{"expiry":"2021-01-23T00:02:06Z","market_id":"hard:usd:30","oracle_address":"kava1ujfrlcd0ted58mzplnyxzklsw0sqevlgxndanp","price":"0.714273333333333427"}]}