From eef35bf31c453a8fa758eb90b93a9606193e2724 Mon Sep 17 00:00:00 2001 From: yys Date: Tue, 22 Sep 2020 15:09:00 +0900 Subject: [PATCH] add oracle wasm query interface --- app/app.go | 2 + x/oracle/wasm/interface.go | 92 +++++++++ x/oracle/wasm/interface_test.go | 90 +++++++++ x/treasury/wasm/interface_test.go | 10 +- x/wasm/alias.go | 1 + x/wasm/internal/keeper/custom_test.go | 190 ++++++++++++------ x/wasm/internal/keeper/test_utils.go | 2 + .../keeper/testdata/bindings_tester.wasm | Bin 0 -> 209070 bytes x/wasm/internal/types/query_binding.go | 1 + 9 files changed, 323 insertions(+), 65 deletions(-) create mode 100644 x/oracle/wasm/interface.go create mode 100644 x/oracle/wasm/interface_test.go create mode 100644 x/wasm/internal/keeper/testdata/bindings_tester.wasm diff --git a/app/app.go b/app/app.go index 89f113a2f..bbeac2cdc 100644 --- a/app/app.go +++ b/app/app.go @@ -45,6 +45,7 @@ import ( bankwasm "github.com/terra-project/core/x/bank/wasm" marketwasm "github.com/terra-project/core/x/market/wasm" + oraclewasm "github.com/terra-project/core/x/oracle/wasm" stakingwasm "github.com/terra-project/core/x/staking/wasm" treasurywasm "github.com/terra-project/core/x/treasury/wasm" ) @@ -253,6 +254,7 @@ func NewTerraApp(logger log.Logger, db dbm.DB, traceStore io.Writer, loadLatest wasm.WasmQueryRouteBank: bankwasm.NewWasmQuerier(app.bankKeeper), wasm.WasmQueryRouteStaking: stakingwasm.NewWasmQuerier(app.stakingKeeper), wasm.WasmQueryRouteMarket: marketwasm.NewWasmQuerier(app.marketKeeper), + wasm.WasmQueryRouteOracle: oraclewasm.NewWasmQuerier(app.oracleKeeper), wasm.WasmQueryRouteTreasury: treasurywasm.NewWasmQuerier(app.treasuryKeeper), wasm.WasmQueryRouteWasm: wasm.NewWasmQuerier(app.wasmKeeper), }) diff --git a/x/oracle/wasm/interface.go b/x/oracle/wasm/interface.go new file mode 100644 index 000000000..1e5116a09 --- /dev/null +++ b/x/oracle/wasm/interface.go @@ -0,0 +1,92 @@ +package wasm + +import ( + "encoding/json" + + sdk "github.com/cosmos/cosmos-sdk/types" + sdkerrors "github.com/cosmos/cosmos-sdk/types/errors" + + wasmTypes "github.com/CosmWasm/go-cosmwasm/types" + + "github.com/terra-project/core/x/oracle/internal/keeper" + wasm "github.com/terra-project/core/x/wasm/exported" +) + +var _ wasm.WasmQuerierInterface = WasmQuerier{} + +// WasmQuerier - staking query interface for wasm contract +type WasmQuerier struct { + keeper keeper.Keeper +} + +// NewWasmQuerier return bank wasm query interface +func NewWasmQuerier(keeper keeper.Keeper) WasmQuerier { + return WasmQuerier{keeper} +} + +// Query - implement query function +func (WasmQuerier) Query(_ sdk.Context, _ wasmTypes.QueryRequest) ([]byte, error) { return nil, nil } + +// ExchangeRateQueryParams query request params for exchange rates +type ExchangeRateQueryParams struct { + BaseDenom string `json:"base_denom"` + QuoteDenoms []string `json:"quote_denoms"` +} + +// CosmosQuery custom query interface for oracle querier +type CosmosQuery struct { + ExchangeRates ExchangeRateQueryParams `json:"exchange_rates"` +} + +// ExchangeRatesQueryResponseItem - exchange rates query response item +type exchangeRateItem struct { + ExchangeRate string `json:"exchange_rate"` + QuoteDenom string `json:"quote_denom"` +} + +// ExchangeRatesQueryResponse - exchange rates query response for wasm module +type ExchangeRatesQueryResponse struct { + ExchangeRates []exchangeRateItem `json:"exchange_rates"` + BaseDenom string `json:"base_denom"` +} + +// QueryCustom implements custom query interface +func (querier WasmQuerier) QueryCustom(ctx sdk.Context, data json.RawMessage) ([]byte, error) { + var params CosmosQuery + err := json.Unmarshal(data, ¶ms) + + if err != nil { + return nil, sdkerrors.Wrap(sdkerrors.ErrJSONUnmarshal, err.Error()) + } + + // LUNA / BASE_DENOM + baseDenomExchangeRate, err := querier.keeper.GetLunaExchangeRate(ctx, params.ExchangeRates.BaseDenom) + if err != nil { + return nil, err + } + + var items []exchangeRateItem + for _, quoteDenom := range params.ExchangeRates.QuoteDenoms { + quoteDenomExchangeRate, err := querier.keeper.GetLunaExchangeRate(ctx, quoteDenom) + if err != nil { + return nil, err + } + + // (BASE_DENOM / LUNA) / (DENOM / LUNA) = BASE_DENOM / QUOTE_DENOM + items = append(items, exchangeRateItem{ + ExchangeRate: baseDenomExchangeRate.Quo(quoteDenomExchangeRate).String(), + QuoteDenom: quoteDenom, + }) + } + + bz, err := json.Marshal(ExchangeRatesQueryResponse{ + BaseDenom: params.ExchangeRates.BaseDenom, + ExchangeRates: items, + }) + + if err != nil { + return nil, sdkerrors.Wrap(sdkerrors.ErrJSONMarshal, err.Error()) + } + + return bz, nil +} diff --git a/x/oracle/wasm/interface_test.go b/x/oracle/wasm/interface_test.go new file mode 100644 index 000000000..8b0a66273 --- /dev/null +++ b/x/oracle/wasm/interface_test.go @@ -0,0 +1,90 @@ +package wasm + +import ( + "encoding/json" + "testing" + + sdk "github.com/cosmos/cosmos-sdk/types" + "github.com/stretchr/testify/require" + + core "github.com/terra-project/core/types" + "github.com/terra-project/core/x/oracle/internal/keeper" +) + +func TestQueryExchangeRates(t *testing.T) { + input := keeper.CreateTestInput(t) + + KRWExchangeRate := sdk.NewDec(1700) + USDExchangeRate := sdk.NewDecWithPrec(17, 1) + SDRExchangeRate := sdk.NewDecWithPrec(19, 1) + input.OracleKeeper.SetLunaExchangeRate(input.Ctx, core.MicroKRWDenom, KRWExchangeRate) + input.OracleKeeper.SetLunaExchangeRate(input.Ctx, core.MicroUSDDenom, USDExchangeRate) + input.OracleKeeper.SetLunaExchangeRate(input.Ctx, core.MicroSDRDenom, SDRExchangeRate) + + querier := NewWasmQuerier(input.OracleKeeper) + var err error + + // empty data will occur error + _, err = querier.QueryCustom(input.Ctx, []byte{}) + require.Error(t, err) + + // not existing quote denom query + queryParams := ExchangeRateQueryParams{ + BaseDenom: core.MicroLunaDenom, + QuoteDenoms: []string{core.MicroMNTDenom}, + } + bz, err := json.Marshal(CosmosQuery{ + ExchangeRates: queryParams, + }) + require.NoError(t, err) + + res, err := querier.QueryCustom(input.Ctx, bz) + require.Error(t, err) + + // not existing base denom query + queryParams = ExchangeRateQueryParams{ + BaseDenom: core.MicroCNYDenom, + QuoteDenoms: []string{core.MicroKRWDenom, core.MicroUSDDenom, core.MicroSDRDenom}, + } + bz, err = json.Marshal(CosmosQuery{ + ExchangeRates: queryParams, + }) + require.NoError(t, err) + + res, err = querier.QueryCustom(input.Ctx, bz) + require.Error(t, err) + + // valid query luna exchange rates + queryParams = ExchangeRateQueryParams{ + BaseDenom: core.MicroKRWDenom, + QuoteDenoms: []string{core.MicroLunaDenom, core.MicroUSDDenom, core.MicroSDRDenom}, + } + bz, err = json.Marshal(CosmosQuery{ + ExchangeRates: queryParams, + }) + require.NoError(t, err) + + res, err = querier.QueryCustom(input.Ctx, bz) + require.NoError(t, err) + + var exchangeRatesResponse ExchangeRatesQueryResponse + err = json.Unmarshal(res, &exchangeRatesResponse) + require.NoError(t, err) + require.Equal(t, exchangeRatesResponse, ExchangeRatesQueryResponse{ + BaseDenom: core.MicroKRWDenom, + ExchangeRates: []exchangeRateItem{ + { + ExchangeRate: KRWExchangeRate.String(), + QuoteDenom: core.MicroLunaDenom, + }, + { + ExchangeRate: KRWExchangeRate.Quo(USDExchangeRate).String(), + QuoteDenom: core.MicroUSDDenom, + }, + { + ExchangeRate: KRWExchangeRate.Quo(SDRExchangeRate).String(), + QuoteDenom: core.MicroSDRDenom, + }, + }, + }) +} diff --git a/x/treasury/wasm/interface_test.go b/x/treasury/wasm/interface_test.go index 203b5fa84..f33589570 100644 --- a/x/treasury/wasm/interface_test.go +++ b/x/treasury/wasm/interface_test.go @@ -38,10 +38,7 @@ func TestQueryTaxRate(t *testing.T) { var taxRateResponse TaxRateQueryResponse require.NoError(t, json.Unmarshal(res, &taxRateResponse)) - - taxRateRes, err := sdk.NewDecFromStr(taxRateResponse.Rate) - require.NoError(t, err) - require.Equal(t, rate, taxRateRes) + require.Equal(t, rate.String(), taxRateResponse.Rate) } func TestQueryTaxCap(t *testing.T) { @@ -71,8 +68,5 @@ func TestQueryTaxCap(t *testing.T) { var taxCapResponse TaxCapQueryResponse require.NoError(t, json.Unmarshal(res, &taxCapResponse)) - - taxCapRes, ok := sdk.NewIntFromString(taxCapResponse.Cap) - require.True(t, ok) - require.Equal(t, cap, taxCapRes) + require.Equal(t, cap.String(), taxCapResponse.Cap) } diff --git a/x/wasm/alias.go b/x/wasm/alias.go index 1a67b6f21..e6446daaa 100644 --- a/x/wasm/alias.go +++ b/x/wasm/alias.go @@ -36,6 +36,7 @@ const ( WasmQueryRouteBank = types.WasmQueryRouteBank WasmQueryRouteStaking = types.WasmQueryRouteStaking WasmQueryRouteMarket = types.WasmQueryRouteMarket + WasmQueryRouteOracle = types.WasmQueryRouteOracle WasmQueryRouteTreasury = types.WasmQueryRouteTreasury WasmQueryRouteWasm = types.WasmQueryRouteWasm ) diff --git a/x/wasm/internal/keeper/custom_test.go b/x/wasm/internal/keeper/custom_test.go index ea7b2ae88..7a9a9f0ca 100644 --- a/x/wasm/internal/keeper/custom_test.go +++ b/x/wasm/internal/keeper/custom_test.go @@ -15,7 +15,8 @@ import ( "github.com/stretchr/testify/require" core "github.com/terra-project/core/types" - "github.com/terra-project/core/x/treasury" + marketwasm "github.com/terra-project/core/x/market/wasm" + oraclewasm "github.com/terra-project/core/x/oracle/wasm" treasurywasm "github.com/terra-project/core/x/treasury/wasm" "github.com/terra-project/core/x/wasm/internal/types" ) @@ -76,6 +77,32 @@ type treasuryQueryWrapper struct { QueryData treasurywasm.CosmosQuery `json:"query_data"` } +// Binding query messages +type bindingsTesterSwapQueryMsg struct { + Swap swapQueryMsg `json:"swap"` +} +type bindingsTesterTaxRateQueryMsg struct { + TaxRate taxRateQueryMsg `json:"tax_rate"` +} +type bindingsTesterTaxCapQueryMsg struct { + TaxCap taxCapQueryMsg `json:"tax_cap"` +} +type bindingsTesterExchangeRatesQueryMsg struct { + ExchangeRates exchangeRatesQueryMsg `json:"exchange_rates"` +} +type swapQueryMsg struct { + OfferCoin wasmTypes.Coin `json:"offer_coin"` + AskDenom string `json:"ask_denom"` +} +type taxRateQueryMsg struct{} +type taxCapQueryMsg struct { + Denom string `json:"denom"` +} +type exchangeRatesQueryMsg struct { + BaseDenom string `json:"base_denom"` + QuoteDenoms []string `json:"quote_denoms"` +} + func TestInstantiateMaker(t *testing.T) { tempDir, err := ioutil.TempDir("", "wasm") require.NoError(t, err) @@ -119,37 +146,36 @@ func TestMarketQuerier(t *testing.T) { defer os.RemoveAll(tempDir) viper.Set(flags.FlagHome, tempDir) - input, _, makerAddr, offerCoin := setupMakerContract(t) + input, _, testerAddr, offerCoin := setupBindingsTesterContract(t) - ctx, keeper := input.Ctx, input.WasmKeeper + ctx, keeper, marketKeeper := input.Ctx, input.WasmKeeper, input.MarketKeeper - retCoin, spread, err := input.MarketKeeper.ComputeSwap(input.Ctx, offerCoin, core.MicroLunaDenom) - expectedRetCoins := sdk.NewCoins(sdk.NewCoin(core.MicroLunaDenom, retCoin.Amount.Mul(sdk.OneDec().Sub(spread)).TruncateInt())) - - // querier test - swapQueryMsg := MakerQueryMsg{ - Simulate: simulateQuery{ - OfferCoin: types.EncodeSdkCoin(offerCoin), + swapQueryMsg := bindingsTesterSwapQueryMsg{ + Swap: swapQueryMsg{ + OfferCoin: wasmTypes.Coin{ + Denom: core.MicroSDRDenom, + Amount: offerCoin.Amount.String(), + }, + AskDenom: core.MicroLunaDenom, }, } - bz, err := json.Marshal(swapQueryMsg) - require.NoError(t, err) - - res, err := keeper.queryToContract(ctx, makerAddr, bz) - require.NoError(t, err) + retCoin, spread, err := marketKeeper.ComputeSwap(input.Ctx, offerCoin, core.MicroLunaDenom) + retAmount := retCoin.Amount.Mul(sdk.OneDec().Sub(spread)).TruncateInt() - var simulRes simulateResponse - err = json.Unmarshal(res, &simulRes) + bz, err := json.Marshal(swapQueryMsg) require.NoError(t, err) - sellCoin, err := types.ParseToCoin(simulRes.SellCoin) + res, err := keeper.queryToContract(ctx, testerAddr, bz) require.NoError(t, err) - require.Equal(t, offerCoin, sellCoin) - buyCoin, err := types.ParseToCoin(simulRes.BuyCoin) + var swapResponse marketwasm.SwapQueryResponse + err = json.Unmarshal(res, &swapResponse) require.NoError(t, err) - require.Equal(t, expectedRetCoins[0], buyCoin) + require.Equal(t, wasmTypes.Coin{ + Denom: core.MicroLunaDenom, + Amount: retAmount.String(), + }, swapResponse.Receive) } func TestTreasuryQuerier(t *testing.T) { @@ -158,65 +184,82 @@ func TestTreasuryQuerier(t *testing.T) { defer os.RemoveAll(tempDir) viper.Set(flags.FlagHome, tempDir) - input, _, makerAddr, _ := setupMakerContract(t) - + input, _, testerAddr, _ := setupBindingsTesterContract(t) ctx, keeper, treasuryKeeper := input.Ctx, input.WasmKeeper, input.TreasuryKeeper - expectedTaxRate := treasuryKeeper.GetTaxRate(ctx) - expectedTaxCap := treasuryKeeper.GetTaxCap(ctx, core.MicroSDRDenom) - - // querier test - taxRateQueryMsg := MakerTreasuryQuerymsg{ - Reflect: treasuryQueryMsg{ - TerraQueryWrapper: treasuryQueryWrapper{ - Route: types.WasmQueryRouteTreasury, - QueryData: treasurywasm.CosmosQuery{ - TaxRate: &struct{}{}, - }, - }, - }, + taxRate := treasuryKeeper.GetTaxRate(ctx) + taxRateQueryMsg := bindingsTesterTaxRateQueryMsg{ + TaxRate: taxRateQueryMsg{}, } bz, err := json.Marshal(taxRateQueryMsg) require.NoError(t, err) - res, err := keeper.queryToContract(ctx, makerAddr, bz) + res, err := keeper.queryToContract(ctx, testerAddr, bz) require.NoError(t, err) - var taxRateRes treasurywasm.TaxRateQueryResponse - err = json.Unmarshal(res, &taxRateRes) + var taxRateResponse treasurywasm.TaxRateQueryResponse + err = json.Unmarshal(res, &taxRateResponse) require.NoError(t, err) - taxRate, err := sdk.NewDecFromStr(taxRateRes.Rate) + taxRateDec, err := sdk.NewDecFromStr(taxRateResponse.Rate) require.NoError(t, err) - require.Equal(t, expectedTaxRate, taxRate) + require.Equal(t, taxRate, taxRateDec) - taxCapQueryMsg := MakerTreasuryQuerymsg{ - Reflect: treasuryQueryMsg{ - TerraQueryWrapper: treasuryQueryWrapper{ - Route: types.WasmQueryRouteTreasury, - QueryData: treasurywasm.CosmosQuery{ - TaxCap: &treasury.QueryTaxCapParams{ - Denom: core.MicroSDRDenom, - }, - }, - }, + taxCap := treasuryKeeper.GetTaxCap(ctx, core.MicroSDRDenom) + taxCapQueryMsg := bindingsTesterTaxCapQueryMsg{ + TaxCap: taxCapQueryMsg{ + Denom: core.MicroSDRDenom, }, } bz, err = json.Marshal(taxCapQueryMsg) require.NoError(t, err) - res, err = keeper.queryToContract(ctx, makerAddr, bz) + res, err = keeper.queryToContract(ctx, testerAddr, bz) + require.NoError(t, err) + + var taxCapResponse treasurywasm.TaxCapQueryResponse + err = json.Unmarshal(res, &taxCapResponse) + require.NoError(t, err) + require.Equal(t, taxCap.String(), taxCapResponse.Cap) +} + +func TestExchangeRatesQuerier(t *testing.T) { + tempDir, err := ioutil.TempDir("", "wasm") + require.NoError(t, err) + defer os.RemoveAll(tempDir) + viper.Set(flags.FlagHome, tempDir) + + input, _, testerAddr, _ := setupBindingsTesterContract(t) + + ctx, keeper, oracleKeeper := input.Ctx, input.WasmKeeper, input.OracleKeeper + + exchangeRateQueryMsg := bindingsTesterExchangeRatesQueryMsg{ + ExchangeRates: exchangeRatesQueryMsg{ + BaseDenom: core.MicroKRWDenom, + QuoteDenoms: []string{ + core.MicroLunaDenom, + }, + }, + } + + KRWExchangeRate, err := oracleKeeper.GetLunaExchangeRate(ctx, core.MicroKRWDenom) + require.NoError(t, err) + + bz, err := json.Marshal(exchangeRateQueryMsg) require.NoError(t, err) - var taxCapRes treasurywasm.TaxCapQueryResponse - err = json.Unmarshal(res, &taxCapRes) + res, err := keeper.queryToContract(ctx, testerAddr, bz) require.NoError(t, err) - taxCap, ok := sdk.NewIntFromString(taxCapRes.Cap) - require.True(t, ok) - require.Equal(t, expectedTaxCap, taxCap) + var exchangeRateResponse oraclewasm.ExchangeRatesQueryResponse + err = json.Unmarshal(res, &exchangeRateResponse) + require.NoError(t, err) + + exchangeRateDec, err := sdk.NewDecFromStr(exchangeRateResponse.ExchangeRates[0].ExchangeRate) + require.NoError(t, err) + require.Equal(t, KRWExchangeRate, exchangeRateDec) } func TestBuyMsg(t *testing.T) { @@ -387,3 +430,36 @@ func setupMakerContract(t *testing.T) (input TestInput, creatorAddr, makerAddr s return } + +func setupBindingsTesterContract(t *testing.T) (input TestInput, creatorAddr, bindingsTesterAddr sdk.AccAddress, initCoin sdk.Coin) { + input = CreateTestInput(t) + + ctx, keeper, accKeeper, oracleKeeper := input.Ctx, input.WasmKeeper, input.AccKeeper, input.OracleKeeper + + lunaPriceInSDR := sdk.NewDecWithPrec(17, 1) + lunaPriceInUSD := sdk.NewDecWithPrec(15, 1) + lunaPriceInKRW := sdk.NewDec(1300) + oracleKeeper.SetLunaExchangeRate(input.Ctx, core.MicroSDRDenom, lunaPriceInSDR) + oracleKeeper.SetLunaExchangeRate(input.Ctx, core.MicroUSDDenom, lunaPriceInUSD) + oracleKeeper.SetLunaExchangeRate(input.Ctx, core.MicroKRWDenom, lunaPriceInKRW) + + swapAmountInSDR := lunaPriceInSDR.MulInt64(rand.Int63()%10000 + 2).TruncateInt() + initCoin = sdk.NewCoin(core.MicroSDRDenom, swapAmountInSDR) + + creatorAddr = createFakeFundedAccount(ctx, accKeeper, sdk.NewCoins(initCoin)) + + // upload staking derivates code + bindingsTCode, err := ioutil.ReadFile("./testdata/bindings_tester.wasm") + require.NoError(t, err) + bindingsTesterID, err := keeper.StoreCode(ctx, creatorAddr, bindingsTCode) + require.NoError(t, err) + require.Equal(t, uint64(1), bindingsTesterID) + + type EmptyStruct struct{} + initBz, err := json.Marshal(&EmptyStruct{}) + bindingsTesterAddr, err = keeper.InstantiateContract(input.Ctx, bindingsTesterID, creatorAddr, initBz, nil, true) + require.NoError(t, err) + require.NotEmpty(t, bindingsTesterAddr) + + return +} diff --git a/x/wasm/internal/keeper/test_utils.go b/x/wasm/internal/keeper/test_utils.go index 845feb61c..4f80deb60 100644 --- a/x/wasm/internal/keeper/test_utils.go +++ b/x/wasm/internal/keeper/test_utils.go @@ -30,6 +30,7 @@ import ( "github.com/terra-project/core/x/market" marketwasm "github.com/terra-project/core/x/market/wasm" "github.com/terra-project/core/x/oracle" + oraclewasm "github.com/terra-project/core/x/oracle/wasm" stakingwasm "github.com/terra-project/core/x/staking/wasm" "github.com/terra-project/core/x/treasury" treasurywasm "github.com/terra-project/core/x/treasury/wasm" @@ -236,6 +237,7 @@ func CreateTestInput(t *testing.T) TestInput { types.WasmQueryRouteMarket: marketwasm.NewWasmQuerier(marketKeeper), types.WasmQueryRouteTreasury: treasurywasm.NewWasmQuerier(treasuryKeeper), types.WasmQueryRouteWasm: NewWasmQuerier(keeper), + types.WasmQueryRouteOracle: oraclewasm.NewWasmQuerier(oracleKeeper), }) keeper.RegisterMsgParsers(map[string]types.WasmMsgParserInterface{ types.WasmMsgParserRouteBank: bankwasm.NewWasmMsgParser(), diff --git a/x/wasm/internal/keeper/testdata/bindings_tester.wasm b/x/wasm/internal/keeper/testdata/bindings_tester.wasm new file mode 100644 index 0000000000000000000000000000000000000000..214f6c346e178fbfd8cd1f9fbe2b6d89eb1f5f0a GIT binary patch literal 209070 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

qPd-rT2~yW<=ER>dCB&AsuB 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 literal 0 HcmV?d00001 diff --git a/x/wasm/internal/types/query_binding.go b/x/wasm/internal/types/query_binding.go index b3227dcea..9a198c3cd 100644 --- a/x/wasm/internal/types/query_binding.go +++ b/x/wasm/internal/types/query_binding.go @@ -41,6 +41,7 @@ const ( WasmQueryRouteBank = "bank" WasmQueryRouteStaking = "staking" WasmQueryRouteMarket = "market" + WasmQueryRouteOracle = "oracle" WasmQueryRouteTreasury = "treasury" WasmQueryRouteWasm = "wasm" )