From fb6b4896d0a73d0418ac964a1ef4177f4beeac08 Mon Sep 17 00:00:00 2001 From: Nattharat Wiriyakulnan Date: Tue, 9 Jun 2020 11:10:47 +0700 Subject: [PATCH 1/8] add changelog --- CHANGELOG.md | 1 + 1 file changed, 1 insertion(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index 584f07c411..bbfd7363fd 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -16,6 +16,7 @@ - (impv/chore) [\#1893](https://github.com/bandprotocol/bandchain/pull/1893) Cleanup and Add genesis command to add data sources / oracle scripts. - (feat) [\#1910](https://github.com/bandprotocol/bandchain/pull/1910) Implement request-search REST and CLI endpoint. - (impv) [\#1903](https://github.com/bandprotocol/bandchain/pull/1903) Store result in store instead of result hash. +- (feat) [\#1905](https://github.com/bandprotocol/bandchain/pull/1905) Add request + response packet to request rest endpoint. - (impv) [\#1901](https://github.com/bandprotocol/bandchain/pull/1901) Added `moniker` field to `delegations_view` table. - (feat) [\#1879](https://github.com/bandprotocol/bandchain/pull/1879) Keep `Request` and `Report` around. We avoid premature optimization at the moment. - (feat) [\#1873](https://github.com/bandprotocol/bandchain/pull/1873) Add `in-before-resolve` field in `Report` data structure. From 6b31eac0d907a952d8ca5465f2e899760ec8b49b Mon Sep 17 00:00:00 2001 From: Nattharat Wiriyakulnan Date: Tue, 9 Jun 2020 11:12:23 +0700 Subject: [PATCH 2/8] fix change log --- CHANGELOG.md | 1 + 1 file changed, 1 insertion(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index bbfd7363fd..bb939523c5 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -33,6 +33,7 @@ - (imprv) [\#1904](https://github.com/bandprotocol/bandchain/pull/1904) Added helper tooltips. - (imprv) [\#1900](https://github.com/bandprotocol/bandchain/pull/1900) Shorten marketcap amount on landing page - (feat) [\#1888](https://github.com/bandprotocol/bandchain/pull/1888) Added OBI bindings and patched scan to use OBI standard +- (impv) [\#1900](https://github.com/bandprotocol/bandchain/pull/1900) Shorten marketcap amount on landing page - (bug) [\#1861](https://github.com/bandprotocol/bandchain/pull/1861) Fix name, endpoint of guanyu-devnet on chain-id selection - (feat) [\#1856](https://github.com/bandprotocol/bandchain/pull/1856) Add sorting on Validator Home Page. From 6aac01b13d63a3c6b92c0bfd6e74c81e0cf1db90 Mon Sep 17 00:00:00 2001 From: Nattharat Wiriyakulnan Date: Tue, 9 Jun 2020 11:44:53 +0700 Subject: [PATCH 3/8] update querier --- chain/x/oracle/keeper/querier.go | 5 ++++- chain/x/oracle/types/querier.go | 8 +++++++- 2 files changed, 11 insertions(+), 2 deletions(-) diff --git a/chain/x/oracle/keeper/querier.go b/chain/x/oracle/keeper/querier.go index a71d567df0..f6eee80d8c 100644 --- a/chain/x/oracle/keeper/querier.go +++ b/chain/x/oracle/keeper/querier.go @@ -8,6 +8,7 @@ import ( sdkerrors "github.com/cosmos/cosmos-sdk/types/errors" abci "github.com/tendermint/tendermint/abci/types" + "github.com/bandprotocol/bandchain/chain/pkg/obi" "github.com/bandprotocol/bandchain/chain/x/oracle/types" ) @@ -95,7 +96,9 @@ func queryRequestByID(ctx sdk.Context, path []string, k Keeper) ([]byte, error) return nil, err } reports := k.GetReports(ctx, types.RequestID(id)) - result, _ := k.GetResult(ctx, types.RequestID(id)) + resultBytes, _ := k.GetResult(ctx, types.RequestID(id)) + var result types.Result + obi.MustDecode(resultBytes, &result) return codec.MarshalJSONIndent(types.ModuleCdc, types.QueryRequestResult{ Request: request, Reports: reports, diff --git a/chain/x/oracle/types/querier.go b/chain/x/oracle/types/querier.go index 531c46fd82..cd5f9ff257 100644 --- a/chain/x/oracle/types/querier.go +++ b/chain/x/oracle/types/querier.go @@ -17,9 +17,15 @@ type QueryCountsResult struct { RequestCount int64 `json:"request_count"` } +// Result is the struct for meaning result +type Result struct { + RequestPacketData OracleRequestPacketData + ResponsePacketData OracleResponsePacketData +} + // QueryRequestResult is the struct for the result of request query. type QueryRequestResult struct { Request Request `json:"request"` Reports []Report `json:"reports"` - Result []byte `json:"result"` // TODO: Update to richer data type. + Result Result `json:"result"` } From 22167c73f53fc0d6536720400cfbe4d9ebf73d91 Mon Sep 17 00:00:00 2001 From: Nattharat Wiriyakulnan Date: Tue, 9 Jun 2020 19:29:03 +0700 Subject: [PATCH 4/8] fix result to pointer --- .../x/oracle/client/common/request_search.go | 11 ++++++++-- chain/x/oracle/keeper/owasm_test.go | 11 +++++----- chain/x/oracle/keeper/querier.go | 8 +++---- chain/x/oracle/keeper/result.go | 21 ++++++++++++++++--- chain/x/oracle/keeper/result_test.go | 15 ++++++++++--- chain/x/oracle/types/error.go | 1 + chain/x/oracle/types/querier.go | 8 +------ chain/x/oracle/types/result.go | 7 +++++++ 8 files changed, 57 insertions(+), 25 deletions(-) create mode 100644 chain/x/oracle/types/result.go diff --git a/chain/x/oracle/client/common/request_search.go b/chain/x/oracle/client/common/request_search.go index c77319cc87..4ab4434a79 100644 --- a/chain/x/oracle/client/common/request_search.go +++ b/chain/x/oracle/client/common/request_search.go @@ -52,8 +52,15 @@ func QuerySearchLatestRequest( } } if ok && rid != "" { - // TODO: Check if request has resolved. - return queryRequest(route, cliCtx, rid) + res, h, err := queryRequest(route, cliCtx, rid) + if err != nil { + continue + } + var out types.QueryRequestResult + cliCtx.Codec.MustUnmarshalJSON(res, &out) + if out.Result != nil { + return res, h, nil + } } } } diff --git a/chain/x/oracle/keeper/owasm_test.go b/chain/x/oracle/keeper/owasm_test.go index c61d4998f3..970dadfc0d 100644 --- a/chain/x/oracle/keeper/owasm_test.go +++ b/chain/x/oracle/keeper/owasm_test.go @@ -319,20 +319,21 @@ func TestResolveRequestSuccess(t *testing.T) { reqID := k.AddRequest(ctx, req) k.ResolveRequest(ctx, reqID) - res, err := k.GetResult(ctx, reqID) + reqPacket, resPacket, err := k.GetResult(ctx, reqID) require.NoError(t, err) r := k.MustGetRequest(ctx, reqID) - resPacket := types.NewOracleResponsePacketData( + expectedResPacket := types.NewOracleResponsePacketData( r.ClientID, reqID, k.GetReportCount(ctx, reqID), r.RequestTime, ctx.BlockTime().Unix(), types.ResolveStatus_Success, []byte("beeb"), ) - reqPacket := types.NewOracleRequestPacketData( + expectedReqPacket := types.NewOracleRequestPacketData( r.ClientID, r.OracleScriptID, r.Calldata, r.MinCount, uint64(len(r.RequestedValidators)), ) - expecetRes := types.CalculateEncodedResult(reqPacket, resPacket) - require.Equal(t, expecetRes, res) + require.Equal(t, expectedReqPacket, reqPacket) + require.Equal(t, expectedResPacket, resPacket) + } // TODO: Patch to "Bad" wasm code that is a valid wasm code. diff --git a/chain/x/oracle/keeper/querier.go b/chain/x/oracle/keeper/querier.go index f6eee80d8c..69cc42629c 100644 --- a/chain/x/oracle/keeper/querier.go +++ b/chain/x/oracle/keeper/querier.go @@ -8,7 +8,6 @@ import ( sdkerrors "github.com/cosmos/cosmos-sdk/types/errors" abci "github.com/tendermint/tendermint/abci/types" - "github.com/bandprotocol/bandchain/chain/pkg/obi" "github.com/bandprotocol/bandchain/chain/x/oracle/types" ) @@ -96,12 +95,11 @@ func queryRequestByID(ctx sdk.Context, path []string, k Keeper) ([]byte, error) return nil, err } reports := k.GetReports(ctx, types.RequestID(id)) - resultBytes, _ := k.GetResult(ctx, types.RequestID(id)) - var result types.Result - obi.MustDecode(resultBytes, &result) + req, res := k.MustGetResult(ctx, types.RequestID(id)) + result := types.Result{RequestPacketData: req, ResponsePacketData: res} return codec.MarshalJSONIndent(types.ModuleCdc, types.QueryRequestResult{ Request: request, Reports: reports, - Result: result, + Result: &result, }) } diff --git a/chain/x/oracle/keeper/result.go b/chain/x/oracle/keeper/result.go index 525e790fb7..102ee50e24 100644 --- a/chain/x/oracle/keeper/result.go +++ b/chain/x/oracle/keeper/result.go @@ -4,6 +4,7 @@ import ( sdk "github.com/cosmos/cosmos-sdk/types" sdkerrors "github.com/cosmos/cosmos-sdk/types/errors" + "github.com/bandprotocol/bandchain/chain/pkg/obi" "github.com/bandprotocol/bandchain/chain/x/oracle/types" ) @@ -19,12 +20,26 @@ func (k Keeper) SetResult(ctx sdk.Context, reqID types.RequestID, result []byte) } // GetResult returns the result bytes for the given request ID or error if not exists. -func (k Keeper) GetResult(ctx sdk.Context, id types.RequestID) ([]byte, error) { +func (k Keeper) GetResult(ctx sdk.Context, id types.RequestID) (types.OracleRequestPacketData, types.OracleResponsePacketData, error) { bz := ctx.KVStore(k.storeKey).Get(types.ResultStoreKey(id)) if bz == nil { - return nil, sdkerrors.Wrapf(types.ErrResultNotFound, "id: %d", id) + return types.OracleRequestPacketData{}, types.OracleResponsePacketData{}, sdkerrors.Wrapf(types.ErrResultNotFound, "id: %d", id) } - return bz, nil + var result types.Result + err := obi.Decode(bz, &result) + if err != nil { + return types.OracleRequestPacketData{}, types.OracleResponsePacketData{}, types.ErrOBIDecode + } + + return result.RequestPacketData, result.ResponsePacketData, nil +} + +// MustGetResult returns the result bytes for the given request ID. Panics on error. +func (k Keeper) MustGetResult(ctx sdk.Context, id types.RequestID) (types.OracleRequestPacketData, types.OracleResponsePacketData) { + bz := ctx.KVStore(k.storeKey).Get(types.ResultStoreKey(id)) + var result types.Result + obi.MustDecode(bz, &result) + return result.RequestPacketData, result.ResponsePacketData } // GetAllResults returns the list of all results in the store. Nil will be added for skipped results. diff --git a/chain/x/oracle/keeper/result_test.go b/chain/x/oracle/keeper/result_test.go index c1ab613800..a8eee772a4 100644 --- a/chain/x/oracle/keeper/result_test.go +++ b/chain/x/oracle/keeper/result_test.go @@ -16,13 +16,22 @@ func TestResultBasicFunctions(t *testing.T) { k.SetResult(ctx, types.RequestID(1), encodedResult) // Test GetResult func - encodedResultReqID1, err := k.GetResult(ctx, types.RequestID(1)) + reqPacket, resPacket, err := k.GetResult(ctx, types.RequestID(1)) require.NoError(t, err) - require.Equal(t, encodedResult, encodedResultReqID1) + require.Equal(t, req, reqPacket) + require.Equal(t, res, resPacket) - _, err = k.GetResult(ctx, types.RequestID(2)) + // Test MustGetResult func + reqPacket, resPacket = k.MustGetResult(ctx, types.RequestID(1)) + require.NoError(t, err) + require.Equal(t, req, reqPacket) + require.Equal(t, res, resPacket) + + _, _, err = k.GetResult(ctx, types.RequestID(2)) require.Error(t, err) + require.Panics(t, func() { k.GetResult(ctx, types.RequestID(2)) }) + // Test HasResult func require.True(t, k.HasResult(ctx, types.RequestID(1))) require.False(t, k.HasResult(ctx, types.RequestID(2))) diff --git a/chain/x/oracle/types/error.go b/chain/x/oracle/types/error.go index d397e4d502..dcb09f31f4 100644 --- a/chain/x/oracle/types/error.go +++ b/chain/x/oracle/types/error.go @@ -40,6 +40,7 @@ var ( ErrInsufficientValidators = sdkerrors.Register(ModuleName, 33, "insufficent available validators") ErrCreateWithDoNotModify = sdkerrors.Register(ModuleName, 34, "create with [do-not-modify] content") ErrSelfReferenceAsReporter = sdkerrors.Register(ModuleName, 35, "cannot reference self as reporter") + ErrOBIDecode = sdkerrors.Register(ModuleName, 36, "cannot obi decode") ) // WrapMaxError wraps an error message with additional info of the current and max values. diff --git a/chain/x/oracle/types/querier.go b/chain/x/oracle/types/querier.go index cd5f9ff257..2a50f5e7b6 100644 --- a/chain/x/oracle/types/querier.go +++ b/chain/x/oracle/types/querier.go @@ -17,15 +17,9 @@ type QueryCountsResult struct { RequestCount int64 `json:"request_count"` } -// Result is the struct for meaning result -type Result struct { - RequestPacketData OracleRequestPacketData - ResponsePacketData OracleResponsePacketData -} - // QueryRequestResult is the struct for the result of request query. type QueryRequestResult struct { Request Request `json:"request"` Reports []Report `json:"reports"` - Result Result `json:"result"` + Result *Result `json:"result"` } diff --git a/chain/x/oracle/types/result.go b/chain/x/oracle/types/result.go new file mode 100644 index 0000000000..edb3c3d7f7 --- /dev/null +++ b/chain/x/oracle/types/result.go @@ -0,0 +1,7 @@ +package types + +// Result is the struct for meaning result +type Result struct { + RequestPacketData OracleRequestPacketData + ResponsePacketData OracleResponsePacketData +} From 5a68f07c6cada9b69b4c65aefac998d779f740dd Mon Sep 17 00:00:00 2001 From: Nattharat Wiriyakulnan Date: Tue, 9 Jun 2020 20:26:03 +0700 Subject: [PATCH 5/8] fix get result return struct result --- CHANGELOG.md | 1 - chain/x/oracle/client/common/request_search.go | 2 +- chain/x/oracle/keeper/owasm_test.go | 11 +++++------ chain/x/oracle/keeper/querier.go | 3 +-- chain/x/oracle/keeper/result.go | 12 ++++++------ chain/x/oracle/keeper/result_test.go | 14 ++++++-------- 6 files changed, 19 insertions(+), 24 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index bb939523c5..bbfd7363fd 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -33,7 +33,6 @@ - (imprv) [\#1904](https://github.com/bandprotocol/bandchain/pull/1904) Added helper tooltips. - (imprv) [\#1900](https://github.com/bandprotocol/bandchain/pull/1900) Shorten marketcap amount on landing page - (feat) [\#1888](https://github.com/bandprotocol/bandchain/pull/1888) Added OBI bindings and patched scan to use OBI standard -- (impv) [\#1900](https://github.com/bandprotocol/bandchain/pull/1900) Shorten marketcap amount on landing page - (bug) [\#1861](https://github.com/bandprotocol/bandchain/pull/1861) Fix name, endpoint of guanyu-devnet on chain-id selection - (feat) [\#1856](https://github.com/bandprotocol/bandchain/pull/1856) Add sorting on Validator Home Page. diff --git a/chain/x/oracle/client/common/request_search.go b/chain/x/oracle/client/common/request_search.go index 4ab4434a79..71a21a58da 100644 --- a/chain/x/oracle/client/common/request_search.go +++ b/chain/x/oracle/client/common/request_search.go @@ -54,7 +54,7 @@ func QuerySearchLatestRequest( if ok && rid != "" { res, h, err := queryRequest(route, cliCtx, rid) if err != nil { - continue + return nil, 0, err } var out types.QueryRequestResult cliCtx.Codec.MustUnmarshalJSON(res, &out) diff --git a/chain/x/oracle/keeper/owasm_test.go b/chain/x/oracle/keeper/owasm_test.go index 970dadfc0d..ff7d451186 100644 --- a/chain/x/oracle/keeper/owasm_test.go +++ b/chain/x/oracle/keeper/owasm_test.go @@ -319,20 +319,19 @@ func TestResolveRequestSuccess(t *testing.T) { reqID := k.AddRequest(ctx, req) k.ResolveRequest(ctx, reqID) - reqPacket, resPacket, err := k.GetResult(ctx, reqID) + res, err := k.GetResult(ctx, reqID) require.NoError(t, err) r := k.MustGetRequest(ctx, reqID) + expectedReqPacket := types.NewOracleRequestPacketData( + r.ClientID, r.OracleScriptID, r.Calldata, r.MinCount, uint64(len(r.RequestedValidators)), + ) expectedResPacket := types.NewOracleResponsePacketData( r.ClientID, reqID, k.GetReportCount(ctx, reqID), r.RequestTime, ctx.BlockTime().Unix(), types.ResolveStatus_Success, []byte("beeb"), ) - expectedReqPacket := types.NewOracleRequestPacketData( - r.ClientID, r.OracleScriptID, r.Calldata, r.MinCount, uint64(len(r.RequestedValidators)), - ) - require.Equal(t, expectedReqPacket, reqPacket) - require.Equal(t, expectedResPacket, resPacket) + require.Equal(t, res, types.Result{RequestPacketData: expectedReqPacket, ResponsePacketData: expectedResPacket}) } diff --git a/chain/x/oracle/keeper/querier.go b/chain/x/oracle/keeper/querier.go index 69cc42629c..665402a335 100644 --- a/chain/x/oracle/keeper/querier.go +++ b/chain/x/oracle/keeper/querier.go @@ -95,8 +95,7 @@ func queryRequestByID(ctx sdk.Context, path []string, k Keeper) ([]byte, error) return nil, err } reports := k.GetReports(ctx, types.RequestID(id)) - req, res := k.MustGetResult(ctx, types.RequestID(id)) - result := types.Result{RequestPacketData: req, ResponsePacketData: res} + result := k.MustGetResult(ctx, types.RequestID(id)) return codec.MarshalJSONIndent(types.ModuleCdc, types.QueryRequestResult{ Request: request, Reports: reports, diff --git a/chain/x/oracle/keeper/result.go b/chain/x/oracle/keeper/result.go index 102ee50e24..9d626b7b5f 100644 --- a/chain/x/oracle/keeper/result.go +++ b/chain/x/oracle/keeper/result.go @@ -20,26 +20,26 @@ func (k Keeper) SetResult(ctx sdk.Context, reqID types.RequestID, result []byte) } // GetResult returns the result bytes for the given request ID or error if not exists. -func (k Keeper) GetResult(ctx sdk.Context, id types.RequestID) (types.OracleRequestPacketData, types.OracleResponsePacketData, error) { +func (k Keeper) GetResult(ctx sdk.Context, id types.RequestID) (types.Result, error) { bz := ctx.KVStore(k.storeKey).Get(types.ResultStoreKey(id)) if bz == nil { - return types.OracleRequestPacketData{}, types.OracleResponsePacketData{}, sdkerrors.Wrapf(types.ErrResultNotFound, "id: %d", id) + return types.Result{}, sdkerrors.Wrapf(types.ErrResultNotFound, "id: %d", id) } var result types.Result err := obi.Decode(bz, &result) if err != nil { - return types.OracleRequestPacketData{}, types.OracleResponsePacketData{}, types.ErrOBIDecode + return types.Result{}, types.ErrOBIDecode } - return result.RequestPacketData, result.ResponsePacketData, nil + return result, nil } // MustGetResult returns the result bytes for the given request ID. Panics on error. -func (k Keeper) MustGetResult(ctx sdk.Context, id types.RequestID) (types.OracleRequestPacketData, types.OracleResponsePacketData) { +func (k Keeper) MustGetResult(ctx sdk.Context, id types.RequestID) types.Result { bz := ctx.KVStore(k.storeKey).Get(types.ResultStoreKey(id)) var result types.Result obi.MustDecode(bz, &result) - return result.RequestPacketData, result.ResponsePacketData + return result } // GetAllResults returns the list of all results in the store. Nil will be added for skipped results. diff --git a/chain/x/oracle/keeper/result_test.go b/chain/x/oracle/keeper/result_test.go index a8eee772a4..546e55796e 100644 --- a/chain/x/oracle/keeper/result_test.go +++ b/chain/x/oracle/keeper/result_test.go @@ -16,21 +16,19 @@ func TestResultBasicFunctions(t *testing.T) { k.SetResult(ctx, types.RequestID(1), encodedResult) // Test GetResult func - reqPacket, resPacket, err := k.GetResult(ctx, types.RequestID(1)) + result, err := k.GetResult(ctx, types.RequestID(1)) require.NoError(t, err) - require.Equal(t, req, reqPacket) - require.Equal(t, res, resPacket) + require.Equal(t, result, types.Result{RequestPacketData: req, ResponsePacketData: res}) // Test MustGetResult func - reqPacket, resPacket = k.MustGetResult(ctx, types.RequestID(1)) + result = k.MustGetResult(ctx, types.RequestID(1)) require.NoError(t, err) - require.Equal(t, req, reqPacket) - require.Equal(t, res, resPacket) + require.Equal(t, result, types.Result{RequestPacketData: req, ResponsePacketData: res}) - _, _, err = k.GetResult(ctx, types.RequestID(2)) + _, err = k.GetResult(ctx, types.RequestID(2)) require.Error(t, err) - require.Panics(t, func() { k.GetResult(ctx, types.RequestID(2)) }) + require.Panics(t, func() { k.MustGetResult(ctx, types.RequestID(2)) }) // Test HasResult func require.True(t, k.HasResult(ctx, types.RequestID(1))) From 2ac7e02f6b4e8abfd9be1eff1c2bc1d06b024f7c Mon Sep 17 00:00:00 2001 From: Nattharat Wiriyakulnan Date: Wed, 10 Jun 2020 09:55:17 +0700 Subject: [PATCH 6/8] fix as comment --- chain/x/oracle/keeper/querier.go | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/chain/x/oracle/keeper/querier.go b/chain/x/oracle/keeper/querier.go index 665402a335..19043e13e8 100644 --- a/chain/x/oracle/keeper/querier.go +++ b/chain/x/oracle/keeper/querier.go @@ -95,6 +95,15 @@ func queryRequestByID(ctx sdk.Context, path []string, k Keeper) ([]byte, error) return nil, err } reports := k.GetReports(ctx, types.RequestID(id)) + + if !k.HasRequest(ctx, types.RequestID(id)) { + return codec.MarshalJSONIndent(types.ModuleCdc, types.QueryRequestResult{ + Request: request, + Reports: reports, + Result: nil, + }) + } + result := k.MustGetResult(ctx, types.RequestID(id)) return codec.MarshalJSONIndent(types.ModuleCdc, types.QueryRequestResult{ Request: request, From 26aa24dd96f461fd3cc242ae7d5ac88212ee946a Mon Sep 17 00:00:00 2001 From: Nattharat Wiriyakulnan Date: Wed, 10 Jun 2020 10:23:23 +0700 Subject: [PATCH 7/8] fix result keeper --- chain/x/oracle/keeper/result.go | 11 ++++++----- 1 file changed, 6 insertions(+), 5 deletions(-) diff --git a/chain/x/oracle/keeper/result.go b/chain/x/oracle/keeper/result.go index 9d626b7b5f..f40ee24f31 100644 --- a/chain/x/oracle/keeper/result.go +++ b/chain/x/oracle/keeper/result.go @@ -19,7 +19,7 @@ func (k Keeper) SetResult(ctx sdk.Context, reqID types.RequestID, result []byte) store.Set(types.ResultStoreKey(reqID), result) } -// GetResult returns the result bytes for the given request ID or error if not exists. +// GetResult returns the result for the given request ID or error if not exists. func (k Keeper) GetResult(ctx sdk.Context, id types.RequestID) (types.Result, error) { bz := ctx.KVStore(k.storeKey).Get(types.ResultStoreKey(id)) if bz == nil { @@ -34,11 +34,12 @@ func (k Keeper) GetResult(ctx sdk.Context, id types.RequestID) (types.Result, er return result, nil } -// MustGetResult returns the result bytes for the given request ID. Panics on error. +// MustGetResult returns the result for the given request ID. Panics on error. func (k Keeper) MustGetResult(ctx sdk.Context, id types.RequestID) types.Result { - bz := ctx.KVStore(k.storeKey).Get(types.ResultStoreKey(id)) - var result types.Result - obi.MustDecode(bz, &result) + result, err := k.GetResult(ctx, id) + if err != nil { + panic(err) + } return result } From 1167cfc5f38818670e8f76b8b29eded9d9aad3a1 Mon Sep 17 00:00:00 2001 From: Nattharat Wiriyakulnan Date: Wed, 10 Jun 2020 11:04:19 +0700 Subject: [PATCH 8/8] fix bug --- chain/x/oracle/keeper/querier.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/chain/x/oracle/keeper/querier.go b/chain/x/oracle/keeper/querier.go index 19043e13e8..ca3bece6ff 100644 --- a/chain/x/oracle/keeper/querier.go +++ b/chain/x/oracle/keeper/querier.go @@ -96,7 +96,7 @@ func queryRequestByID(ctx sdk.Context, path []string, k Keeper) ([]byte, error) } reports := k.GetReports(ctx, types.RequestID(id)) - if !k.HasRequest(ctx, types.RequestID(id)) { + if !k.HasResult(ctx, types.RequestID(id)) { return codec.MarshalJSONIndent(types.ModuleCdc, types.QueryRequestResult{ Request: request, Reports: reports,