Merge pull request #497 from CosmWasm/list_contract_323
Improve list contracts by code query
This commit is contained in:
@@ -25,7 +25,7 @@ wasmd tx wasm instantiate "$CODE_ID" "$INIT" --admin=$(wasmd keys show validator
|
||||
--from validator --amount="100ustake" --label "local0.1.0" \
|
||||
--gas 1000000 -y --chain-id=testing -b block | jq
|
||||
|
||||
CONTRACT=$(wasmd query wasm list-contract-by-code "$CODE_ID" -o json | jq -r '.contract_infos[-1].address')
|
||||
CONTRACT=$(wasmd query wasm list-contract-by-code "$CODE_ID" -o json | jq -r '.contracts[-1]')
|
||||
echo "* Contract address: $CONTRACT"
|
||||
echo "### Query all"
|
||||
RESP=$(wasmd query wasm contract-state all "$CONTRACT" -o json)
|
||||
|
||||
@@ -4,26 +4,28 @@ set -o errexit -o nounset -o pipefail
|
||||
DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" >/dev/null 2>&1 && pwd)"
|
||||
|
||||
echo "-----------------------"
|
||||
COSMOS_SDK_DIR=${COSMOS_SDK_DIR:-$(go list -f "{{ .Dir }}" -m github.com/cosmos/cosmos-sdk)}
|
||||
PROTO_THRD="$DIR/../../third_party/proto"
|
||||
PROTO_WASMD="$DIR/../../proto"
|
||||
PROTO_WASMD_QUERY="$PROTO_WASMD/cosmwasm/wasm/v1beta1/query.proto"
|
||||
|
||||
echo "### List all codes"
|
||||
RESP=$(grpcurl -plaintext -import-path $COSMOS_SDK_DIR/third_party/proto -import-path $COSMOS_SDK_DIR/proto -import-path . -proto ./x/wasm/types/query.proto \
|
||||
RESP=$(grpcurl -plaintext -import-path $PROTO_THRD -import-path $PROTO_WASMD -proto $PROTO_WASMD_QUERY \
|
||||
localhost:9090 cosmwasm.wasm.v1beta1.Query/Codes)
|
||||
echo "$RESP" | jq
|
||||
|
||||
CODE_ID=$(echo "$RESP" | jq -r '.codeInfos[-1].codeId')
|
||||
echo "### List contract by code"
|
||||
RESP=$(grpcurl -plaintext -import-path $COSMOS_SDK_DIR/third_party/proto -import-path $COSMOS_SDK_DIR/proto -import-path . -proto ./x/wasm/types/query.proto \
|
||||
echo "### List contracts by code"
|
||||
RESP=$(grpcurl -plaintext -import-path $PROTO_THRD -import-path $PROTO_WASMD -proto $PROTO_WASMD_QUERY \
|
||||
-d "{\"codeId\": $CODE_ID}" localhost:9090 cosmwasm.wasm.v1beta1.Query/ContractsByCode )
|
||||
echo $RESP | jq
|
||||
|
||||
echo "### Show history for contract"
|
||||
CONTRACT=$(echo $RESP | jq -r ".contractInfos[-1].address")
|
||||
grpcurl -plaintext -import-path $COSMOS_SDK_DIR/third_party/proto -import-path $COSMOS_SDK_DIR/proto -import-path . -proto ./x/wasm/types/query.proto \
|
||||
CONTRACT=$(echo $RESP | jq -r ".contracts[-1]")
|
||||
grpcurl -plaintext -import-path $PROTO_THRD -import-path $PROTO_WASMD -proto $PROTO_WASMD_QUERY \
|
||||
-d "{\"address\": \"$CONTRACT\"}" localhost:9090 cosmwasm.wasm.v1beta1.Query/ContractHistory | jq
|
||||
|
||||
echo "### Show contract state"
|
||||
grpcurl -plaintext -import-path $COSMOS_SDK_DIR/third_party/proto -import-path $COSMOS_SDK_DIR/proto -import-path . -proto ./x/wasm/types/query.proto \
|
||||
grpcurl -plaintext -import-path $PROTO_THRD -import-path $PROTO_WASMD -proto $PROTO_WASMD_QUERY \
|
||||
-d "{\"address\": \"$CONTRACT\"}" localhost:9090 cosmwasm.wasm.v1beta1.Query/AllContractState | jq
|
||||
|
||||
echo "Empty state due to 'burner' contract cleanup"
|
||||
|
||||
@@ -55,7 +55,6 @@
|
||||
|
||||
- [cosmwasm/wasm/v1beta1/query.proto](#cosmwasm/wasm/v1beta1/query.proto)
|
||||
- [CodeInfoResponse](#cosmwasm.wasm.v1beta1.CodeInfoResponse)
|
||||
- [ContractInfoWithAddress](#cosmwasm.wasm.v1beta1.ContractInfoWithAddress)
|
||||
- [QueryAllContractStateRequest](#cosmwasm.wasm.v1beta1.QueryAllContractStateRequest)
|
||||
- [QueryAllContractStateResponse](#cosmwasm.wasm.v1beta1.QueryAllContractStateResponse)
|
||||
- [QueryCodeRequest](#cosmwasm.wasm.v1beta1.QueryCodeRequest)
|
||||
@@ -814,23 +813,6 @@ CodeInfoResponse contains code meta data from CodeInfo
|
||||
|
||||
|
||||
|
||||
<a name="cosmwasm.wasm.v1beta1.ContractInfoWithAddress"></a>
|
||||
|
||||
### ContractInfoWithAddress
|
||||
ContractInfoWithAddress adds the address (key) to the ContractInfo
|
||||
representation
|
||||
|
||||
|
||||
| Field | Type | Label | Description |
|
||||
| ----- | ---- | ----- | ----------- |
|
||||
| `address` | [string](#string) | | |
|
||||
| `contract_info` | [ContractInfo](#cosmwasm.wasm.v1beta1.ContractInfo) | | |
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
<a name="cosmwasm.wasm.v1beta1.QueryAllContractStateRequest"></a>
|
||||
|
||||
### QueryAllContractStateRequest
|
||||
@@ -1020,7 +1002,7 @@ Query/ContractsByCode RPC method
|
||||
|
||||
| Field | Type | Label | Description |
|
||||
| ----- | ---- | ----- | ----------- |
|
||||
| `contract_infos` | [ContractInfoWithAddress](#cosmwasm.wasm.v1beta1.ContractInfoWithAddress) | repeated | |
|
||||
| `contracts` | [string](#string) | repeated | contracts are a set of contract addresses |
|
||||
| `pagination` | [cosmos.base.query.v1beta1.PageResponse](#cosmos.base.query.v1beta1.PageResponse) | | pagination defines the pagination in the response. |
|
||||
|
||||
|
||||
|
||||
@@ -100,23 +100,12 @@ message QueryContractsByCodeRequest {
|
||||
cosmos.base.query.v1beta1.PageRequest pagination = 2;
|
||||
}
|
||||
|
||||
// ContractInfoWithAddress adds the address (key) to the ContractInfo
|
||||
// representation
|
||||
message ContractInfoWithAddress {
|
||||
option (gogoproto.equal) = true;
|
||||
|
||||
string address = 1;
|
||||
ContractInfo contract_info = 2 [
|
||||
(gogoproto.embed) = true,
|
||||
(gogoproto.nullable) = false,
|
||||
(gogoproto.jsontag) = ""
|
||||
];
|
||||
}
|
||||
// QueryContractsByCodeResponse is the response type for the
|
||||
// Query/ContractsByCode RPC method
|
||||
message QueryContractsByCodeResponse {
|
||||
repeated ContractInfoWithAddress contract_infos = 1
|
||||
[ (gogoproto.nullable) = false ];
|
||||
// contracts are a set of contract addresses
|
||||
repeated string contracts = 1;
|
||||
|
||||
// pagination defines the pagination in the response.
|
||||
cosmos.base.query.v1beta1.PageResponse pagination = 2;
|
||||
}
|
||||
|
||||
@@ -125,7 +125,6 @@ type (
|
||||
ContractInfo = types.ContractInfo
|
||||
CreatedAt = types.AbsoluteTxPosition
|
||||
Config = types.WasmConfig
|
||||
ContractInfoWithAddress = types.ContractInfoWithAddress
|
||||
CodeInfoResponse = types.CodeInfoResponse
|
||||
MessageHandler = keeper.SDKMessageHandler
|
||||
BankEncoder = keeper.BankEncoder
|
||||
|
||||
@@ -6,19 +6,14 @@ import (
|
||||
"encoding/base64"
|
||||
"errors"
|
||||
"fmt"
|
||||
govtypes "github.com/cosmos/cosmos-sdk/x/gov/types"
|
||||
"io/ioutil"
|
||||
"math/rand"
|
||||
"os"
|
||||
"testing"
|
||||
"time"
|
||||
|
||||
"github.com/CosmWasm/wasmd/x/wasm/types"
|
||||
wasmTypes "github.com/CosmWasm/wasmd/x/wasm/types"
|
||||
"github.com/cosmos/cosmos-sdk/store"
|
||||
"github.com/cosmos/cosmos-sdk/store/prefix"
|
||||
sdk "github.com/cosmos/cosmos-sdk/types"
|
||||
authkeeper "github.com/cosmos/cosmos-sdk/x/auth/keeper"
|
||||
distributionkeeper "github.com/cosmos/cosmos-sdk/x/distribution/keeper"
|
||||
govtypes "github.com/cosmos/cosmos-sdk/x/gov/types"
|
||||
paramskeeper "github.com/cosmos/cosmos-sdk/x/params/keeper"
|
||||
paramtypes "github.com/cosmos/cosmos-sdk/x/params/types"
|
||||
stakingkeeper "github.com/cosmos/cosmos-sdk/x/staking/keeper"
|
||||
@@ -30,6 +25,11 @@ import (
|
||||
"github.com/tendermint/tendermint/proto/tendermint/crypto"
|
||||
tmproto "github.com/tendermint/tendermint/proto/tendermint/types"
|
||||
dbm "github.com/tendermint/tm-db"
|
||||
"io/ioutil"
|
||||
"math/rand"
|
||||
"os"
|
||||
"testing"
|
||||
"time"
|
||||
)
|
||||
|
||||
const firstCodeID = 1
|
||||
@@ -103,19 +103,27 @@ func TestGenesisExportImport(t *testing.T) {
|
||||
exportedGenesis, err := wasmKeeper.cdc.MarshalJSON(exportedState)
|
||||
require.NoError(t, err)
|
||||
|
||||
// reset ContractInfo in source DB for comparison with dest DB
|
||||
// setup new instances
|
||||
dstKeeper, dstCtx, dstStoreKeys := setupKeeper(t)
|
||||
|
||||
// reset contract code index in source DB for comparison with dest DB
|
||||
wasmKeeper.IterateContractInfo(srcCtx, func(address sdk.AccAddress, info wasmTypes.ContractInfo) bool {
|
||||
wasmKeeper.deleteContractSecondIndex(srcCtx, address, &info)
|
||||
info.ResetFromGenesis(srcCtx)
|
||||
wasmKeeper.storeContractInfo(srcCtx, address, &info)
|
||||
wasmKeeper.removeFromContractCodeSecondaryIndex(srcCtx, address, wasmKeeper.getLastContractHistoryEntry(srcCtx, address))
|
||||
prefixStore := prefix.NewStore(srcCtx.KVStore(wasmKeeper.storeKey), types.GetContractCodeHistoryElementPrefix(address))
|
||||
for iter := prefixStore.Iterator(nil, nil); iter.Valid(); iter.Next() {
|
||||
prefixStore.Delete(iter.Key())
|
||||
}
|
||||
x := &info
|
||||
newHistory := x.ResetFromGenesis(dstCtx)
|
||||
wasmKeeper.storeContractInfo(srcCtx, address, x)
|
||||
wasmKeeper.addToContractCodeSecondaryIndex(srcCtx, address, newHistory)
|
||||
wasmKeeper.appendToContractHistory(srcCtx, address, newHistory)
|
||||
return false
|
||||
})
|
||||
|
||||
// re-import
|
||||
dstKeeper, dstCtx, dstStoreKeys := setupKeeper(t)
|
||||
|
||||
var importState wasmTypes.GenesisState
|
||||
err = wasmKeeper.cdc.UnmarshalJSON(exportedGenesis, &importState)
|
||||
err = dstKeeper.cdc.UnmarshalJSON(exportedGenesis, &importState)
|
||||
require.NoError(t, err)
|
||||
InitGenesis(dstCtx, dstKeeper, importState, &StakingKeeperMock{}, TestHandler(contractKeeper))
|
||||
|
||||
@@ -125,16 +133,6 @@ func TestGenesisExportImport(t *testing.T) {
|
||||
dstIT := dstCtx.KVStore(dstStoreKeys[j]).Iterator(nil, nil)
|
||||
|
||||
for i := 0; srcIT.Valid(); i++ {
|
||||
isContractHistory := srcStoreKeys[j].Name() == types.StoreKey && bytes.HasPrefix(srcIT.Key(), types.ContractCodeHistoryElementPrefix)
|
||||
if isContractHistory {
|
||||
// only skip history entries because we know they are different
|
||||
// from genesis they are merged into 1 single entry
|
||||
srcIT.Next()
|
||||
if bytes.HasPrefix(dstIT.Key(), types.ContractCodeHistoryElementPrefix) {
|
||||
dstIT.Next()
|
||||
}
|
||||
continue
|
||||
}
|
||||
require.True(t, dstIT.Valid(), "[%s] destination DB has less elements than source. Missing: %x", srcStoreKeys[j].Name(), srcIT.Key())
|
||||
require.Equal(t, srcIT.Key(), dstIT.Key(), i)
|
||||
require.Equal(t, srcIT.Value(), dstIT.Value(), "[%s] element (%d): %X", srcStoreKeys[j].Name(), i, srcIT.Key())
|
||||
|
||||
@@ -296,8 +296,10 @@ func (k Keeper) instantiate(ctx sdk.Context, codeID uint64, creator, admin sdk.A
|
||||
}
|
||||
|
||||
// store contract before dispatch so that contract could be called back
|
||||
historyEntry := contractInfo.InitialHistory(initMsg)
|
||||
k.addToContractCodeSecondaryIndex(ctx, contractAddress, historyEntry)
|
||||
k.appendToContractHistory(ctx, contractAddress, historyEntry)
|
||||
k.storeContractInfo(ctx, contractAddress, &contractInfo)
|
||||
k.appendToContractHistory(ctx, contractAddress, contractInfo.InitialHistory(initMsg))
|
||||
|
||||
// dispatch submessages then messages
|
||||
err = k.dispatchAll(ctx, contractAddress, contractInfo.IBCPortID, res.Submessages, res.Messages)
|
||||
@@ -408,10 +410,11 @@ func (k Keeper) migrate(ctx sdk.Context, contractAddress sdk.AccAddress, caller
|
||||
ctx.EventManager().EmitEvents(events)
|
||||
|
||||
// delete old secondary index entry
|
||||
k.deleteContractSecondIndex(ctx, contractAddress, contractInfo)
|
||||
k.removeFromContractCodeSecondaryIndex(ctx, contractAddress, k.getLastContractHistoryEntry(ctx, contractAddress))
|
||||
// persist migration updates
|
||||
historyEntry := contractInfo.AddMigration(ctx, newCodeID, msg)
|
||||
k.appendToContractHistory(ctx, contractAddress, historyEntry)
|
||||
k.addToContractCodeSecondaryIndex(ctx, contractAddress, historyEntry)
|
||||
k.storeContractInfo(ctx, contractAddress, contractInfo)
|
||||
|
||||
// dispatch submessages then messages
|
||||
@@ -507,8 +510,26 @@ func (k Keeper) reply(ctx sdk.Context, contractAddress sdk.AccAddress, reply was
|
||||
}, nil
|
||||
}
|
||||
|
||||
func (k Keeper) deleteContractSecondIndex(ctx sdk.Context, contractAddress sdk.AccAddress, contractInfo *types.ContractInfo) {
|
||||
ctx.KVStore(k.storeKey).Delete(types.GetContractByCreatedSecondaryIndexKey(contractAddress, contractInfo))
|
||||
// addToContractCodeSecondaryIndex adds element to the index for contracts-by-codeid queries
|
||||
func (k Keeper) addToContractCodeSecondaryIndex(ctx sdk.Context, contractAddress sdk.AccAddress, entry types.ContractCodeHistoryEntry) {
|
||||
store := ctx.KVStore(k.storeKey)
|
||||
store.Set(types.GetContractByCreatedSecondaryIndexKey(contractAddress, entry), []byte{})
|
||||
}
|
||||
|
||||
// removeFromContractCodeSecondaryIndex removes element to the index for contracts-by-codeid queries
|
||||
func (k Keeper) removeFromContractCodeSecondaryIndex(ctx sdk.Context, contractAddress sdk.AccAddress, entry types.ContractCodeHistoryEntry) {
|
||||
ctx.KVStore(k.storeKey).Delete(types.GetContractByCreatedSecondaryIndexKey(contractAddress, entry))
|
||||
}
|
||||
|
||||
// IterateContractsByCode iterates over all contracts with given codeID ASC on code update time.
|
||||
func (k Keeper) IterateContractsByCode(ctx sdk.Context, codeID uint64, cb func(address sdk.AccAddress) bool) {
|
||||
prefixStore := prefix.NewStore(ctx.KVStore(k.storeKey), types.GetContractByCodeIDSecondaryIndexPrefix(codeID))
|
||||
for iter := prefixStore.Iterator(nil, nil); iter.Valid(); iter.Next() {
|
||||
key := iter.Key()
|
||||
if cb(key[types.AbsoluteTxPositionLen:]) {
|
||||
return
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
func (k Keeper) setContractAdmin(ctx sdk.Context, contractAddress, caller, newAdmin sdk.AccAddress, authZ AuthorizationPolicy) error {
|
||||
@@ -552,6 +573,19 @@ func (k Keeper) GetContractHistory(ctx sdk.Context, contractAddr sdk.AccAddress)
|
||||
return r
|
||||
}
|
||||
|
||||
// getLastContractHistoryEntry returns the last element from history. To be used internally only as it panics when none exists
|
||||
func (k Keeper) getLastContractHistoryEntry(ctx sdk.Context, contractAddr sdk.AccAddress) types.ContractCodeHistoryEntry {
|
||||
prefixStore := prefix.NewStore(ctx.KVStore(k.storeKey), types.GetContractCodeHistoryElementPrefix(contractAddr))
|
||||
iter := prefixStore.ReverseIterator(nil, nil)
|
||||
var r types.ContractCodeHistoryEntry
|
||||
if !iter.Valid() {
|
||||
// all contracts have a history
|
||||
panic(fmt.Sprintf("no history for %s", contractAddr.String()))
|
||||
}
|
||||
k.cdc.MustUnmarshalBinaryBare(iter.Value(), &r)
|
||||
return r
|
||||
}
|
||||
|
||||
// QuerySmart queries the smart contract itself.
|
||||
func (k Keeper) QuerySmart(ctx sdk.Context, contractAddr sdk.AccAddress, req []byte) ([]byte, error) {
|
||||
defer telemetry.MeasureSince(time.Now(), "wasm", "contract", "query-smart")
|
||||
@@ -623,10 +657,10 @@ func (k Keeper) HasContractInfo(ctx sdk.Context, contractAddress sdk.AccAddress)
|
||||
return store.Has(types.GetContractAddressKey(contractAddress))
|
||||
}
|
||||
|
||||
// storeContractInfo persists the ContractInfo. No secondary index updated here.
|
||||
func (k Keeper) storeContractInfo(ctx sdk.Context, contractAddress sdk.AccAddress, contract *types.ContractInfo) {
|
||||
store := ctx.KVStore(k.storeKey)
|
||||
store.Set(types.GetContractAddressKey(contractAddress), k.cdc.MustMarshalBinaryBare(contract))
|
||||
store.Set(types.GetContractByCreatedSecondaryIndexKey(contractAddress, contract), []byte{})
|
||||
}
|
||||
|
||||
func (k Keeper) IterateContractInfo(ctx sdk.Context, cb func(sdk.AccAddress, types.ContractInfo) bool) {
|
||||
@@ -1003,6 +1037,7 @@ func (k Keeper) importContract(ctx sdk.Context, contractAddr sdk.AccAddress, c *
|
||||
historyEntry := c.ResetFromGenesis(ctx)
|
||||
k.appendToContractHistory(ctx, contractAddr, historyEntry)
|
||||
k.storeContractInfo(ctx, contractAddr, c)
|
||||
k.addToContractCodeSecondaryIndex(ctx, contractAddr, historyEntry)
|
||||
return k.importContractState(ctx, contractAddr, state)
|
||||
}
|
||||
|
||||
|
||||
@@ -950,20 +950,29 @@ func TestMigrateReplacesTheSecondIndex(t *testing.T) {
|
||||
store := ctx.KVStore(keepers.WasmKeeper.storeKey)
|
||||
oldContractInfo := keepers.WasmKeeper.GetContractInfo(ctx, example.Contract)
|
||||
require.NotNil(t, oldContractInfo)
|
||||
exists := store.Has(types.GetContractByCreatedSecondaryIndexKey(example.Contract, oldContractInfo))
|
||||
createHistoryEntry := types.ContractCodeHistoryEntry{
|
||||
CodeID: example.CodeID,
|
||||
Updated: types.NewAbsoluteTxPosition(ctx),
|
||||
}
|
||||
exists := store.Has(types.GetContractByCreatedSecondaryIndexKey(example.Contract, createHistoryEntry))
|
||||
require.True(t, exists)
|
||||
|
||||
ctx = ctx.WithBlockHeight(ctx.BlockHeight() + 1) // increment for different block
|
||||
// when do migrate
|
||||
newCodeExample := StoreBurnerExampleContract(t, ctx, keepers)
|
||||
migMsgBz := BurnerExampleInitMsg{Payout: example.CreatorAddr}.GetBytes(t)
|
||||
_, err := keepers.ContractKeeper.Migrate(ctx, example.Contract, example.CreatorAddr, newCodeExample.CodeID, migMsgBz)
|
||||
require.NoError(t, err)
|
||||
|
||||
// then the new index exists
|
||||
newContractInfo := keepers.WasmKeeper.GetContractInfo(ctx, example.Contract)
|
||||
exists = store.Has(types.GetContractByCreatedSecondaryIndexKey(example.Contract, newContractInfo))
|
||||
migrateHistoryEntry := types.ContractCodeHistoryEntry{
|
||||
CodeID: newCodeExample.CodeID,
|
||||
Updated: types.NewAbsoluteTxPosition(ctx),
|
||||
}
|
||||
exists = store.Has(types.GetContractByCreatedSecondaryIndexKey(example.Contract, migrateHistoryEntry))
|
||||
require.True(t, exists)
|
||||
// and the old index was removed
|
||||
exists = store.Has(types.GetContractByCreatedSecondaryIndexKey(example.Contract, oldContractInfo))
|
||||
exists = store.Has(types.GetContractByCreatedSecondaryIndexKey(example.Contract, createHistoryEntry))
|
||||
require.False(t, exists)
|
||||
}
|
||||
|
||||
@@ -1046,6 +1055,74 @@ func TestMigrateWithDispatchedMessage(t *testing.T) {
|
||||
assert.Equal(t, deposit, balance)
|
||||
}
|
||||
|
||||
func TestIterateContractsByCode(t *testing.T) {
|
||||
ctx, keepers := CreateTestInput(t, false, SupportedFeatures)
|
||||
k, c := keepers.WasmKeeper, keepers.ContractKeeper
|
||||
example1 := InstantiateHackatomExampleContract(t, ctx, keepers)
|
||||
ctx = ctx.WithBlockHeight(ctx.BlockHeight() + 1)
|
||||
example2 := InstantiateIBCReflectContract(t, ctx, keepers)
|
||||
ctx = ctx.WithBlockHeight(ctx.BlockHeight() + 1)
|
||||
initMsg := HackatomExampleInitMsg{
|
||||
Verifier: RandomAccountAddress(t),
|
||||
Beneficiary: RandomAccountAddress(t),
|
||||
}.GetBytes(t)
|
||||
contractAddr3, _, err := c.Instantiate(ctx, example1.CodeID, example1.CreatorAddr, nil, initMsg, "foo", nil)
|
||||
require.NoError(t, err)
|
||||
specs := map[string]struct {
|
||||
codeID uint64
|
||||
exp []sdk.AccAddress
|
||||
}{
|
||||
"multiple results": {
|
||||
codeID: example1.CodeID,
|
||||
exp: []sdk.AccAddress{example1.Contract, contractAddr3},
|
||||
},
|
||||
"single results": {
|
||||
codeID: example2.CodeID,
|
||||
exp: []sdk.AccAddress{example2.Contract},
|
||||
},
|
||||
"empty results": {
|
||||
codeID: 99999,
|
||||
},
|
||||
}
|
||||
for name, spec := range specs {
|
||||
t.Run(name, func(t *testing.T) {
|
||||
var gotAddr []sdk.AccAddress
|
||||
k.IterateContractsByCode(ctx, spec.codeID, func(address sdk.AccAddress) bool {
|
||||
gotAddr = append(gotAddr, address)
|
||||
return false
|
||||
})
|
||||
assert.Equal(t, spec.exp, gotAddr)
|
||||
})
|
||||
}
|
||||
}
|
||||
|
||||
func TestIterateContractsByCodeWithMigration(t *testing.T) {
|
||||
// mock migration so that it does not fail when migrate example1 to example2.codeID
|
||||
mockWasmVM := wasmtesting.MockWasmer{MigrateFn: func(codeID wasmvm.Checksum, env wasmvmtypes.Env, migrateMsg []byte, store wasmvm.KVStore, goapi wasmvm.GoAPI, querier wasmvm.Querier, gasMeter wasmvm.GasMeter, gasLimit uint64) (*wasmvmtypes.Response, uint64, error) {
|
||||
return &wasmvmtypes.Response{}, 1, nil
|
||||
}}
|
||||
wasmtesting.MakeInstantiable(&mockWasmVM)
|
||||
ctx, keepers := CreateTestInput(t, false, SupportedFeatures, WithWasmEngine(&mockWasmVM))
|
||||
k, c := keepers.WasmKeeper, keepers.ContractKeeper
|
||||
example1 := InstantiateHackatomExampleContract(t, ctx, keepers)
|
||||
ctx = ctx.WithBlockHeight(ctx.BlockHeight() + 1)
|
||||
example2 := InstantiateIBCReflectContract(t, ctx, keepers)
|
||||
ctx = ctx.WithBlockHeight(ctx.BlockHeight() + 1)
|
||||
_, err := c.Migrate(ctx, example1.Contract, example1.CreatorAddr, example2.CodeID, []byte("{}"))
|
||||
require.NoError(t, err)
|
||||
|
||||
// when
|
||||
var gotAddr []sdk.AccAddress
|
||||
k.IterateContractsByCode(ctx, example2.CodeID, func(address sdk.AccAddress) bool {
|
||||
gotAddr = append(gotAddr, address)
|
||||
return false
|
||||
})
|
||||
|
||||
// then
|
||||
exp := []sdk.AccAddress{example2.Contract, example1.Contract}
|
||||
assert.Equal(t, exp, gotAddr)
|
||||
}
|
||||
|
||||
type sudoMsg struct {
|
||||
// This is a tongue-in-check demo command. This is not the intended purpose of Sudo.
|
||||
// Here we show that some priviledged Go module can make a call that should never be exposed
|
||||
|
||||
@@ -2,15 +2,12 @@ package keeper
|
||||
|
||||
import (
|
||||
"encoding/json"
|
||||
"reflect"
|
||||
"sort"
|
||||
"strconv"
|
||||
"strings"
|
||||
|
||||
"github.com/CosmWasm/wasmd/x/wasm/types"
|
||||
sdk "github.com/cosmos/cosmos-sdk/types"
|
||||
sdkerrors "github.com/cosmos/cosmos-sdk/types/errors"
|
||||
abci "github.com/tendermint/tendermint/abci/types"
|
||||
"reflect"
|
||||
"strconv"
|
||||
)
|
||||
|
||||
const (
|
||||
@@ -47,7 +44,7 @@ func NewLegacyQuerier(keeper types.ViewKeeper, gasLimit sdk.Gas) sdk.Querier {
|
||||
if err != nil {
|
||||
return nil, sdkerrors.Wrapf(types.ErrInvalid, "code id: %s", err.Error())
|
||||
}
|
||||
rsp, err = queryContractListByCode(ctx, codeID, keeper)
|
||||
rsp = queryContractListByCode(ctx, codeID, keeper)
|
||||
case QueryGetContractState:
|
||||
if len(path) < 3 {
|
||||
return nil, sdkerrors.Wrap(sdkerrors.ErrUnknownRequest, "unknown data query endpoint")
|
||||
@@ -145,32 +142,11 @@ func queryContractHistory(ctx sdk.Context, contractAddr sdk.AccAddress, keeper t
|
||||
return history, nil
|
||||
}
|
||||
|
||||
func queryContractListByCode(ctx sdk.Context, codeID uint64, keeper types.ViewKeeper) ([]types.ContractInfoWithAddress, error) {
|
||||
var contracts []types.ContractInfoWithAddress
|
||||
keeper.IterateContractInfo(ctx, func(addr sdk.AccAddress, info types.ContractInfo) bool {
|
||||
if info.CodeID == codeID {
|
||||
// and add the address
|
||||
infoWithAddress := types.ContractInfoWithAddress{
|
||||
Address: addr.String(),
|
||||
ContractInfo: info,
|
||||
}
|
||||
contracts = append(contracts, infoWithAddress)
|
||||
}
|
||||
func queryContractListByCode(ctx sdk.Context, codeID uint64, keeper types.ViewKeeper) []string {
|
||||
var contracts []string
|
||||
keeper.IterateContractsByCode(ctx, codeID, func(addr sdk.AccAddress) bool {
|
||||
contracts = append(contracts, addr.String())
|
||||
return false
|
||||
})
|
||||
|
||||
// now we sort them by AbsoluteTxPosition
|
||||
sort.Slice(contracts, func(i, j int) bool {
|
||||
this := contracts[i].ContractInfo.Created
|
||||
other := contracts[j].ContractInfo.Created
|
||||
if this.Equal(other) {
|
||||
return strings.Compare(contracts[i].Address, contracts[j].Address) < 0
|
||||
}
|
||||
return this.LessThan(other)
|
||||
})
|
||||
|
||||
for i := range contracts {
|
||||
contracts[i].Created = nil
|
||||
}
|
||||
return contracts, nil
|
||||
return contracts
|
||||
}
|
||||
|
||||
@@ -205,17 +205,14 @@ func TestLegacyQueryContractListByCodeOrdering(t *testing.T) {
|
||||
res, err := q(ctx, query, data)
|
||||
require.NoError(t, err)
|
||||
|
||||
var contracts []map[string]interface{}
|
||||
var contracts []string
|
||||
err = json.Unmarshal(res, &contracts)
|
||||
require.NoError(t, err)
|
||||
|
||||
require.Equal(t, 10, len(contracts))
|
||||
|
||||
for i, contract := range contracts {
|
||||
assert.Equal(t, fmt.Sprintf("contract %d", i), contract["label"])
|
||||
assert.NotEmpty(t, contract["address"])
|
||||
// ensure these are not shown
|
||||
assert.Nil(t, contract["created"])
|
||||
for _, contract := range contracts {
|
||||
assert.NotEmpty(t, contract)
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -43,10 +43,7 @@ func (q grpcQuerier) ContractInfo(c context.Context, req *types.QueryContractInf
|
||||
case rsp == nil:
|
||||
return nil, types.ErrNotFound
|
||||
}
|
||||
return &types.QueryContractInfoResponse{
|
||||
Address: rsp.Address,
|
||||
ContractInfo: rsp.ContractInfo,
|
||||
}, nil
|
||||
return rsp, nil
|
||||
}
|
||||
|
||||
func (q grpcQuerier) ContractHistory(c context.Context, req *types.QueryContractHistoryRequest) (*types.QueryContractHistoryResponse, error) {
|
||||
@@ -82,6 +79,7 @@ func (q grpcQuerier) ContractHistory(c context.Context, req *types.QueryContract
|
||||
}, nil
|
||||
}
|
||||
|
||||
// ContractsByCode lists all smart contracts for a code id
|
||||
func (q grpcQuerier) ContractsByCode(c context.Context, req *types.QueryContractsByCodeRequest) (*types.QueryContractsByCodeResponse, error) {
|
||||
if req == nil {
|
||||
return nil, status.Error(codes.InvalidArgument, "empty request")
|
||||
@@ -90,21 +88,13 @@ func (q grpcQuerier) ContractsByCode(c context.Context, req *types.QueryContract
|
||||
return nil, sdkerrors.Wrap(types.ErrInvalid, "code id")
|
||||
}
|
||||
ctx := sdk.UnwrapSDKContext(c)
|
||||
r := make([]types.ContractInfoWithAddress, 0)
|
||||
r := make([]string, 0)
|
||||
|
||||
prefixStore := prefix.NewStore(ctx.KVStore(q.storeKey), types.GetContractByCodeIDSecondaryIndexPrefix(req.CodeId))
|
||||
pageRes, err := query.FilteredPaginate(prefixStore, req.Pagination, func(key []byte, value []byte, accumulate bool) (bool, error) {
|
||||
var contractAddr sdk.AccAddress = key[types.AbsoluteTxPositionLen:]
|
||||
c := q.keeper.GetContractInfo(ctx, contractAddr)
|
||||
if c == nil {
|
||||
return false, types.ErrNotFound
|
||||
}
|
||||
c.Created = nil // redact
|
||||
if accumulate {
|
||||
r = append(r, types.ContractInfoWithAddress{
|
||||
Address: contractAddr.String(),
|
||||
ContractInfo: *c,
|
||||
})
|
||||
var contractAddr sdk.AccAddress = key[types.AbsoluteTxPositionLen:]
|
||||
r = append(r, contractAddr.String())
|
||||
}
|
||||
return true, nil
|
||||
})
|
||||
@@ -112,8 +102,8 @@ func (q grpcQuerier) ContractsByCode(c context.Context, req *types.QueryContract
|
||||
return nil, err
|
||||
}
|
||||
return &types.QueryContractsByCodeResponse{
|
||||
ContractInfos: r,
|
||||
Pagination: pageRes,
|
||||
Contracts: r,
|
||||
Pagination: pageRes,
|
||||
}, nil
|
||||
}
|
||||
|
||||
@@ -258,14 +248,14 @@ func (q grpcQuerier) Codes(c context.Context, req *types.QueryCodesRequest) (*ty
|
||||
return &types.QueryCodesResponse{CodeInfos: r, Pagination: pageRes}, nil
|
||||
}
|
||||
|
||||
func queryContractInfo(ctx sdk.Context, addr sdk.AccAddress, keeper types.ViewKeeper) (*types.ContractInfoWithAddress, error) {
|
||||
func queryContractInfo(ctx sdk.Context, addr sdk.AccAddress, keeper types.ViewKeeper) (*types.QueryContractInfoResponse, error) {
|
||||
info := keeper.GetContractInfo(ctx, addr)
|
||||
if info == nil {
|
||||
return nil, types.ErrNotFound
|
||||
}
|
||||
// redact the Created field (just used for sorting, not part of public API)
|
||||
info.Created = nil
|
||||
return &types.ContractInfoWithAddress{
|
||||
return &types.QueryContractInfoResponse{
|
||||
Address: addr.String(),
|
||||
ContractInfo: *info,
|
||||
}, nil
|
||||
|
||||
@@ -283,7 +283,7 @@ func TestQueryContractListByCodeOrdering(t *testing.T) {
|
||||
}
|
||||
|
||||
// create 10 contracts with real block/gas setup
|
||||
for i := range [10]int{} {
|
||||
for i := 0; i < 10; i++ {
|
||||
// 3 tx per block, so we ensure both comparisons work
|
||||
if i%3 == 0 {
|
||||
ctx = setBlock(ctx, h)
|
||||
@@ -298,13 +298,10 @@ func TestQueryContractListByCodeOrdering(t *testing.T) {
|
||||
res, err := q.ContractsByCode(sdk.WrapSDKContext(ctx), &types.QueryContractsByCodeRequest{CodeId: codeID})
|
||||
require.NoError(t, err)
|
||||
|
||||
require.Equal(t, 10, len(res.ContractInfos))
|
||||
require.Equal(t, 10, len(res.Contracts))
|
||||
|
||||
for i, contract := range res.ContractInfos {
|
||||
assert.Equal(t, fmt.Sprintf("contract %d", i), contract.Label)
|
||||
assert.NotEmpty(t, contract.Address)
|
||||
// ensure these are not shown
|
||||
assert.Nil(t, contract.Created)
|
||||
for _, contractAddr := range res.Contracts {
|
||||
assert.NotEmpty(t, contractAddr)
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -271,10 +271,16 @@ type contractExecutable interface {
|
||||
) (*wasmvmtypes.Response, uint64, error)
|
||||
}
|
||||
|
||||
//MakeIBCInstantiable adds some noop functions to not fail when contract is used for instantiation
|
||||
func MakeIBCInstantiable(m *MockWasmer) {
|
||||
//MakeInstantiable adds some noop functions to not fail when contract is used for instantiation
|
||||
func MakeInstantiable(m *MockWasmer) {
|
||||
m.CreateFn = HashOnlyCreateFn
|
||||
m.InstantiateFn = NoOpInstantiateFn
|
||||
m.AnalyzeCodeFn = WithoutIBCAnalyzeFn
|
||||
}
|
||||
|
||||
//MakeIBCInstantiable adds some noop functions to not fail when contract is used for instantiation
|
||||
func MakeIBCInstantiable(m *MockWasmer) {
|
||||
MakeInstantiable(m)
|
||||
m.AnalyzeCodeFn = HasIBCAnalyzeFn
|
||||
}
|
||||
|
||||
|
||||
@@ -509,25 +509,25 @@ func assertCodeBytes(t *testing.T, q sdk.Querier, ctx sdk.Context, codeID uint64
|
||||
assert.EqualValues(t, codeID, res["id"])
|
||||
}
|
||||
|
||||
func assertContractList(t *testing.T, q sdk.Querier, ctx sdk.Context, codeID uint64, addrs []string) {
|
||||
func assertContractList(t *testing.T, q sdk.Querier, ctx sdk.Context, codeID uint64, expContractAddrs []string) {
|
||||
bz, sdkerr := q(ctx, []string{QueryListContractByCode, fmt.Sprintf("%d", codeID)}, abci.RequestQuery{})
|
||||
require.NoError(t, sdkerr)
|
||||
|
||||
if len(bz) == 0 {
|
||||
require.Equal(t, len(addrs), 0)
|
||||
require.Equal(t, len(expContractAddrs), 0)
|
||||
return
|
||||
}
|
||||
|
||||
var res []ContractInfoWithAddress
|
||||
var res []string
|
||||
err := json.Unmarshal(bz, &res)
|
||||
require.NoError(t, err)
|
||||
|
||||
var hasAddrs = make([]string, len(res))
|
||||
for i, r := range res {
|
||||
hasAddrs[i] = r.Address
|
||||
hasAddrs[i] = r
|
||||
}
|
||||
|
||||
assert.Equal(t, hasAddrs, addrs)
|
||||
assert.Equal(t, expContractAddrs, hasAddrs)
|
||||
}
|
||||
|
||||
func assertContractState(t *testing.T, q sdk.Querier, ctx sdk.Context, contractBech32Addr string, expected state) {
|
||||
|
||||
@@ -15,6 +15,7 @@ type ViewKeeper interface {
|
||||
HasContractInfo(ctx sdk.Context, contractAddress sdk.AccAddress) bool
|
||||
GetContractInfo(ctx types.Context, contractAddress types.AccAddress) *ContractInfo
|
||||
IterateContractInfo(ctx types.Context, cb func(types.AccAddress, ContractInfo) bool)
|
||||
IterateContractsByCode(ctx sdk.Context, codeID uint64, cb func(address sdk.AccAddress) bool)
|
||||
GetContractState(ctx types.Context, contractAddress types.AccAddress) types.Iterator
|
||||
GetCodeInfo(ctx types.Context, codeID uint64) *CodeInfo
|
||||
IterateCodeInfos(ctx types.Context, cb func(uint64, CodeInfo) bool)
|
||||
|
||||
@@ -52,13 +52,13 @@ func GetContractStorePrefix(addr sdk.AccAddress) []byte {
|
||||
}
|
||||
|
||||
// GetContractByCreatedSecondaryIndexKey returns the key for the secondary index:
|
||||
// `<prefix><codeID><created><contractAddr>`
|
||||
func GetContractByCreatedSecondaryIndexKey(contractAddr sdk.AccAddress, c *ContractInfo) []byte {
|
||||
// `<prefix><codeID><created/last-migrated><contractAddr>`
|
||||
func GetContractByCreatedSecondaryIndexKey(contractAddr sdk.AccAddress, c ContractCodeHistoryEntry) []byte {
|
||||
prefix := GetContractByCodeIDSecondaryIndexPrefix(c.CodeID)
|
||||
prefixLen := len(prefix)
|
||||
r := make([]byte, prefixLen+AbsoluteTxPositionLen+sdk.AddrLen)
|
||||
copy(r[0:], prefix)
|
||||
copy(r[prefixLen:], c.Created.Bytes())
|
||||
copy(r[prefixLen:], c.Updated.Bytes())
|
||||
copy(r[prefixLen+AbsoluteTxPositionLen:], contractAddr)
|
||||
return r
|
||||
}
|
||||
|
||||
@@ -29,12 +29,12 @@ func TestGetContractByCodeIDSecondaryIndexPrefix(t *testing.T) {
|
||||
}
|
||||
|
||||
func TestGetContractByCreatedSecondaryIndexKey(t *testing.T) {
|
||||
c := &ContractInfo{
|
||||
e := ContractCodeHistoryEntry{
|
||||
CodeID: 1,
|
||||
Created: &AbsoluteTxPosition{2 + 1<<(8*7), 3 + 1<<(8*7)},
|
||||
Updated: &AbsoluteTxPosition{2 + 1<<(8*7), 3 + 1<<(8*7)},
|
||||
}
|
||||
addr := bytes.Repeat([]byte{4}, sdk.AddrLen)
|
||||
got := GetContractByCreatedSecondaryIndexKey(addr, c)
|
||||
got := GetContractByCreatedSecondaryIndexKey(addr, e)
|
||||
exp := []byte{6, // prefix
|
||||
0, 0, 0, 0, 0, 0, 0, 1, // codeID
|
||||
1, 0, 0, 0, 0, 0, 0, 2, // height
|
||||
|
||||
@@ -238,50 +238,11 @@ func (m *QueryContractsByCodeRequest) XXX_DiscardUnknown() {
|
||||
|
||||
var xxx_messageInfo_QueryContractsByCodeRequest proto.InternalMessageInfo
|
||||
|
||||
// ContractInfoWithAddress adds the address (key) to the ContractInfo
|
||||
// representation
|
||||
type ContractInfoWithAddress struct {
|
||||
Address string `protobuf:"bytes,1,opt,name=address,proto3" json:"address,omitempty"`
|
||||
ContractInfo `protobuf:"bytes,2,opt,name=contract_info,json=contractInfo,proto3,embedded=contract_info" json:""`
|
||||
}
|
||||
|
||||
func (m *ContractInfoWithAddress) Reset() { *m = ContractInfoWithAddress{} }
|
||||
func (m *ContractInfoWithAddress) String() string { return proto.CompactTextString(m) }
|
||||
func (*ContractInfoWithAddress) ProtoMessage() {}
|
||||
func (*ContractInfoWithAddress) Descriptor() ([]byte, []int) {
|
||||
return fileDescriptor_e8595715dfdf95d1, []int{5}
|
||||
}
|
||||
func (m *ContractInfoWithAddress) XXX_Unmarshal(b []byte) error {
|
||||
return m.Unmarshal(b)
|
||||
}
|
||||
func (m *ContractInfoWithAddress) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
|
||||
if deterministic {
|
||||
return xxx_messageInfo_ContractInfoWithAddress.Marshal(b, m, deterministic)
|
||||
} else {
|
||||
b = b[:cap(b)]
|
||||
n, err := m.MarshalToSizedBuffer(b)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
return b[:n], nil
|
||||
}
|
||||
}
|
||||
func (m *ContractInfoWithAddress) XXX_Merge(src proto.Message) {
|
||||
xxx_messageInfo_ContractInfoWithAddress.Merge(m, src)
|
||||
}
|
||||
func (m *ContractInfoWithAddress) XXX_Size() int {
|
||||
return m.Size()
|
||||
}
|
||||
func (m *ContractInfoWithAddress) XXX_DiscardUnknown() {
|
||||
xxx_messageInfo_ContractInfoWithAddress.DiscardUnknown(m)
|
||||
}
|
||||
|
||||
var xxx_messageInfo_ContractInfoWithAddress proto.InternalMessageInfo
|
||||
|
||||
// QueryContractsByCodeResponse is the response type for the
|
||||
// Query/ContractsByCode RPC method
|
||||
type QueryContractsByCodeResponse struct {
|
||||
ContractInfos []ContractInfoWithAddress `protobuf:"bytes,1,rep,name=contract_infos,json=contractInfos,proto3" json:"contract_infos"`
|
||||
// contracts are a set of contract addresses
|
||||
Contracts []string `protobuf:"bytes,1,rep,name=contracts,proto3" json:"contracts,omitempty"`
|
||||
// pagination defines the pagination in the response.
|
||||
Pagination *query.PageResponse `protobuf:"bytes,2,opt,name=pagination,proto3" json:"pagination,omitempty"`
|
||||
}
|
||||
@@ -290,7 +251,7 @@ func (m *QueryContractsByCodeResponse) Reset() { *m = QueryContractsByCo
|
||||
func (m *QueryContractsByCodeResponse) String() string { return proto.CompactTextString(m) }
|
||||
func (*QueryContractsByCodeResponse) ProtoMessage() {}
|
||||
func (*QueryContractsByCodeResponse) Descriptor() ([]byte, []int) {
|
||||
return fileDescriptor_e8595715dfdf95d1, []int{6}
|
||||
return fileDescriptor_e8595715dfdf95d1, []int{5}
|
||||
}
|
||||
func (m *QueryContractsByCodeResponse) XXX_Unmarshal(b []byte) error {
|
||||
return m.Unmarshal(b)
|
||||
@@ -332,7 +293,7 @@ func (m *QueryAllContractStateRequest) Reset() { *m = QueryAllContractSt
|
||||
func (m *QueryAllContractStateRequest) String() string { return proto.CompactTextString(m) }
|
||||
func (*QueryAllContractStateRequest) ProtoMessage() {}
|
||||
func (*QueryAllContractStateRequest) Descriptor() ([]byte, []int) {
|
||||
return fileDescriptor_e8595715dfdf95d1, []int{7}
|
||||
return fileDescriptor_e8595715dfdf95d1, []int{6}
|
||||
}
|
||||
func (m *QueryAllContractStateRequest) XXX_Unmarshal(b []byte) error {
|
||||
return m.Unmarshal(b)
|
||||
@@ -373,7 +334,7 @@ func (m *QueryAllContractStateResponse) Reset() { *m = QueryAllContractS
|
||||
func (m *QueryAllContractStateResponse) String() string { return proto.CompactTextString(m) }
|
||||
func (*QueryAllContractStateResponse) ProtoMessage() {}
|
||||
func (*QueryAllContractStateResponse) Descriptor() ([]byte, []int) {
|
||||
return fileDescriptor_e8595715dfdf95d1, []int{8}
|
||||
return fileDescriptor_e8595715dfdf95d1, []int{7}
|
||||
}
|
||||
func (m *QueryAllContractStateResponse) XXX_Unmarshal(b []byte) error {
|
||||
return m.Unmarshal(b)
|
||||
@@ -414,7 +375,7 @@ func (m *QueryRawContractStateRequest) Reset() { *m = QueryRawContractSt
|
||||
func (m *QueryRawContractStateRequest) String() string { return proto.CompactTextString(m) }
|
||||
func (*QueryRawContractStateRequest) ProtoMessage() {}
|
||||
func (*QueryRawContractStateRequest) Descriptor() ([]byte, []int) {
|
||||
return fileDescriptor_e8595715dfdf95d1, []int{9}
|
||||
return fileDescriptor_e8595715dfdf95d1, []int{8}
|
||||
}
|
||||
func (m *QueryRawContractStateRequest) XXX_Unmarshal(b []byte) error {
|
||||
return m.Unmarshal(b)
|
||||
@@ -454,7 +415,7 @@ func (m *QueryRawContractStateResponse) Reset() { *m = QueryRawContractS
|
||||
func (m *QueryRawContractStateResponse) String() string { return proto.CompactTextString(m) }
|
||||
func (*QueryRawContractStateResponse) ProtoMessage() {}
|
||||
func (*QueryRawContractStateResponse) Descriptor() ([]byte, []int) {
|
||||
return fileDescriptor_e8595715dfdf95d1, []int{10}
|
||||
return fileDescriptor_e8595715dfdf95d1, []int{9}
|
||||
}
|
||||
func (m *QueryRawContractStateResponse) XXX_Unmarshal(b []byte) error {
|
||||
return m.Unmarshal(b)
|
||||
@@ -496,7 +457,7 @@ func (m *QuerySmartContractStateRequest) Reset() { *m = QuerySmartContra
|
||||
func (m *QuerySmartContractStateRequest) String() string { return proto.CompactTextString(m) }
|
||||
func (*QuerySmartContractStateRequest) ProtoMessage() {}
|
||||
func (*QuerySmartContractStateRequest) Descriptor() ([]byte, []int) {
|
||||
return fileDescriptor_e8595715dfdf95d1, []int{11}
|
||||
return fileDescriptor_e8595715dfdf95d1, []int{10}
|
||||
}
|
||||
func (m *QuerySmartContractStateRequest) XXX_Unmarshal(b []byte) error {
|
||||
return m.Unmarshal(b)
|
||||
@@ -536,7 +497,7 @@ func (m *QuerySmartContractStateResponse) Reset() { *m = QuerySmartContr
|
||||
func (m *QuerySmartContractStateResponse) String() string { return proto.CompactTextString(m) }
|
||||
func (*QuerySmartContractStateResponse) ProtoMessage() {}
|
||||
func (*QuerySmartContractStateResponse) Descriptor() ([]byte, []int) {
|
||||
return fileDescriptor_e8595715dfdf95d1, []int{12}
|
||||
return fileDescriptor_e8595715dfdf95d1, []int{11}
|
||||
}
|
||||
func (m *QuerySmartContractStateResponse) XXX_Unmarshal(b []byte) error {
|
||||
return m.Unmarshal(b)
|
||||
@@ -574,7 +535,7 @@ func (m *QueryCodeRequest) Reset() { *m = QueryCodeRequest{} }
|
||||
func (m *QueryCodeRequest) String() string { return proto.CompactTextString(m) }
|
||||
func (*QueryCodeRequest) ProtoMessage() {}
|
||||
func (*QueryCodeRequest) Descriptor() ([]byte, []int) {
|
||||
return fileDescriptor_e8595715dfdf95d1, []int{13}
|
||||
return fileDescriptor_e8595715dfdf95d1, []int{12}
|
||||
}
|
||||
func (m *QueryCodeRequest) XXX_Unmarshal(b []byte) error {
|
||||
return m.Unmarshal(b)
|
||||
@@ -616,7 +577,7 @@ func (m *CodeInfoResponse) Reset() { *m = CodeInfoResponse{} }
|
||||
func (m *CodeInfoResponse) String() string { return proto.CompactTextString(m) }
|
||||
func (*CodeInfoResponse) ProtoMessage() {}
|
||||
func (*CodeInfoResponse) Descriptor() ([]byte, []int) {
|
||||
return fileDescriptor_e8595715dfdf95d1, []int{14}
|
||||
return fileDescriptor_e8595715dfdf95d1, []int{13}
|
||||
}
|
||||
func (m *CodeInfoResponse) XXX_Unmarshal(b []byte) error {
|
||||
return m.Unmarshal(b)
|
||||
@@ -655,7 +616,7 @@ func (m *QueryCodeResponse) Reset() { *m = QueryCodeResponse{} }
|
||||
func (m *QueryCodeResponse) String() string { return proto.CompactTextString(m) }
|
||||
func (*QueryCodeResponse) ProtoMessage() {}
|
||||
func (*QueryCodeResponse) Descriptor() ([]byte, []int) {
|
||||
return fileDescriptor_e8595715dfdf95d1, []int{15}
|
||||
return fileDescriptor_e8595715dfdf95d1, []int{14}
|
||||
}
|
||||
func (m *QueryCodeResponse) XXX_Unmarshal(b []byte) error {
|
||||
return m.Unmarshal(b)
|
||||
@@ -694,7 +655,7 @@ func (m *QueryCodesRequest) Reset() { *m = QueryCodesRequest{} }
|
||||
func (m *QueryCodesRequest) String() string { return proto.CompactTextString(m) }
|
||||
func (*QueryCodesRequest) ProtoMessage() {}
|
||||
func (*QueryCodesRequest) Descriptor() ([]byte, []int) {
|
||||
return fileDescriptor_e8595715dfdf95d1, []int{16}
|
||||
return fileDescriptor_e8595715dfdf95d1, []int{15}
|
||||
}
|
||||
func (m *QueryCodesRequest) XXX_Unmarshal(b []byte) error {
|
||||
return m.Unmarshal(b)
|
||||
@@ -734,7 +695,7 @@ func (m *QueryCodesResponse) Reset() { *m = QueryCodesResponse{} }
|
||||
func (m *QueryCodesResponse) String() string { return proto.CompactTextString(m) }
|
||||
func (*QueryCodesResponse) ProtoMessage() {}
|
||||
func (*QueryCodesResponse) Descriptor() ([]byte, []int) {
|
||||
return fileDescriptor_e8595715dfdf95d1, []int{17}
|
||||
return fileDescriptor_e8595715dfdf95d1, []int{16}
|
||||
}
|
||||
func (m *QueryCodesResponse) XXX_Unmarshal(b []byte) error {
|
||||
return m.Unmarshal(b)
|
||||
@@ -769,7 +730,6 @@ func init() {
|
||||
proto.RegisterType((*QueryContractHistoryRequest)(nil), "cosmwasm.wasm.v1beta1.QueryContractHistoryRequest")
|
||||
proto.RegisterType((*QueryContractHistoryResponse)(nil), "cosmwasm.wasm.v1beta1.QueryContractHistoryResponse")
|
||||
proto.RegisterType((*QueryContractsByCodeRequest)(nil), "cosmwasm.wasm.v1beta1.QueryContractsByCodeRequest")
|
||||
proto.RegisterType((*ContractInfoWithAddress)(nil), "cosmwasm.wasm.v1beta1.ContractInfoWithAddress")
|
||||
proto.RegisterType((*QueryContractsByCodeResponse)(nil), "cosmwasm.wasm.v1beta1.QueryContractsByCodeResponse")
|
||||
proto.RegisterType((*QueryAllContractStateRequest)(nil), "cosmwasm.wasm.v1beta1.QueryAllContractStateRequest")
|
||||
proto.RegisterType((*QueryAllContractStateResponse)(nil), "cosmwasm.wasm.v1beta1.QueryAllContractStateResponse")
|
||||
@@ -787,77 +747,75 @@ func init() {
|
||||
func init() { proto.RegisterFile("cosmwasm/wasm/v1beta1/query.proto", fileDescriptor_e8595715dfdf95d1) }
|
||||
|
||||
var fileDescriptor_e8595715dfdf95d1 = []byte{
|
||||
// 1111 bytes of a gzipped FileDescriptorProto
|
||||
0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xc4, 0x97, 0xcd, 0x6f, 0x1b, 0xc5,
|
||||
0x1b, 0xc7, 0x3d, 0xa9, 0xf3, 0xe2, 0x69, 0xfa, 0xfb, 0x85, 0x51, 0xa1, 0xc6, 0xb8, 0xbb, 0x61,
|
||||
0x41, 0xa9, 0x5b, 0xa4, 0xdd, 0x24, 0x4e, 0x11, 0x94, 0x53, 0x9d, 0x02, 0xa9, 0x44, 0x79, 0xd9,
|
||||
0x08, 0x22, 0xe8, 0x21, 0x1a, 0xef, 0x4e, 0xed, 0x45, 0xf6, 0x8e, 0xbb, 0x33, 0x26, 0xb1, 0xa2,
|
||||
0x50, 0xc4, 0x85, 0x2b, 0xa8, 0x47, 0x2e, 0x1c, 0x38, 0xa0, 0x02, 0xf7, 0x1e, 0x39, 0x70, 0xc8,
|
||||
0x31, 0x12, 0x17, 0x4e, 0x16, 0x38, 0x08, 0xa1, 0xfc, 0x09, 0x3d, 0xa1, 0x9d, 0x9d, 0x75, 0x76,
|
||||
0x1d, 0xaf, 0xd7, 0x41, 0x16, 0x5c, 0xa2, 0x9d, 0xf8, 0x79, 0x9e, 0xf9, 0x3c, 0xdf, 0x67, 0xe6,
|
||||
0x79, 0x76, 0xe1, 0xf3, 0x16, 0x65, 0xcd, 0x1d, 0xcc, 0x9a, 0x86, 0xf8, 0xf3, 0xc9, 0x4a, 0x95,
|
||||
0x70, 0xbc, 0x62, 0xdc, 0x6f, 0x13, 0xaf, 0xa3, 0xb7, 0x3c, 0xca, 0x29, 0x7a, 0x3a, 0x34, 0xd1,
|
||||
0xc5, 0x1f, 0x69, 0x52, 0xb8, 0x58, 0xa3, 0x35, 0x2a, 0x2c, 0x0c, 0xff, 0x29, 0x30, 0x2e, 0x24,
|
||||
0xc4, 0xe3, 0x9d, 0x16, 0x61, 0xd2, 0xa4, 0x58, 0xa3, 0xb4, 0xd6, 0x20, 0x06, 0x6e, 0x39, 0x06,
|
||||
0x76, 0x5d, 0xca, 0x31, 0x77, 0xa8, 0x1b, 0xfe, 0x7a, 0xcd, 0x0f, 0x40, 0x99, 0x51, 0xc5, 0x8c,
|
||||
0x04, 0x18, 0xfd, 0x20, 0x2d, 0x5c, 0x73, 0x5c, 0x61, 0x1c, 0xd8, 0x6a, 0x6b, 0x30, 0xff, 0x9e,
|
||||
0x6f, 0xb1, 0x4e, 0x5d, 0xee, 0x61, 0x8b, 0xdf, 0x76, 0xef, 0x51, 0x93, 0xdc, 0x6f, 0x13, 0xc6,
|
||||
0x51, 0x1e, 0xce, 0x62, 0xdb, 0xf6, 0x08, 0x63, 0x79, 0xb0, 0x08, 0x4a, 0x39, 0x33, 0x5c, 0x6a,
|
||||
0x0f, 0x01, 0x7c, 0x76, 0x88, 0x1b, 0x6b, 0x51, 0x97, 0x91, 0x64, 0x3f, 0xf4, 0x01, 0xbc, 0x60,
|
||||
0x49, 0x8f, 0x6d, 0xc7, 0xbd, 0x47, 0xf3, 0x53, 0x8b, 0xa0, 0x74, 0x7e, 0xf5, 0x05, 0x7d, 0xa8,
|
||||
0x3e, 0x7a, 0x34, 0x7a, 0x65, 0xfe, 0xa0, 0xab, 0x66, 0x0e, 0xbb, 0x2a, 0x38, 0xee, 0xaa, 0x19,
|
||||
0x73, 0xde, 0x8a, 0xfc, 0x76, 0x23, 0xfb, 0xd7, 0x37, 0x2a, 0xd0, 0x1e, 0xc0, 0xe7, 0x62, 0x50,
|
||||
0x1b, 0x0e, 0xe3, 0xd4, 0xeb, 0xa4, 0xa6, 0x83, 0xde, 0x80, 0xf0, 0x44, 0x18, 0xc9, 0xb4, 0xa4,
|
||||
0x07, 0x2a, 0xea, 0xbe, 0x8a, 0x7a, 0x50, 0xcc, 0x90, 0xeb, 0x5d, 0x5c, 0x23, 0x32, 0xaa, 0x19,
|
||||
0xf1, 0xd4, 0x1e, 0x03, 0x58, 0x1c, 0x4e, 0x20, 0x95, 0x79, 0x07, 0xce, 0x12, 0x97, 0x7b, 0x0e,
|
||||
0xf1, 0x11, 0xce, 0x95, 0xce, 0xaf, 0x1a, 0x29, 0x99, 0xaf, 0x53, 0x9b, 0xc8, 0x20, 0xaf, 0xbb,
|
||||
0xdc, 0xeb, 0x54, 0xb2, 0xbe, 0x0a, 0x66, 0x18, 0x05, 0xbd, 0x39, 0x84, 0xfc, 0x4a, 0x2a, 0x79,
|
||||
0x40, 0x13, 0x43, 0xff, 0x74, 0x40, 0x3b, 0x56, 0xe9, 0xf8, 0x7b, 0x87, 0xda, 0x5d, 0x82, 0xb3,
|
||||
0x16, 0xb5, 0xc9, 0xb6, 0x63, 0x0b, 0xed, 0xb2, 0xe6, 0x8c, 0xbf, 0xbc, 0x6d, 0x4f, 0x4c, 0xba,
|
||||
0xaf, 0x00, 0xbc, 0x14, 0x2d, 0xf7, 0x96, 0xc3, 0xeb, 0x37, 0x65, 0x79, 0xfe, 0xab, 0xf3, 0xf4,
|
||||
0xf3, 0x60, 0x39, 0xfb, 0xa2, 0xc8, 0x72, 0xde, 0x85, 0xff, 0x8b, 0x6d, 0x1f, 0x56, 0x55, 0x1f,
|
||||
0x63, 0xff, 0x48, 0x82, 0xb2, 0xa8, 0x17, 0xa2, 0x08, 0x13, 0x2c, 0xed, 0x67, 0x61, 0x1a, 0x37,
|
||||
0x1b, 0x8d, 0x90, 0x60, 0x93, 0x63, 0x4e, 0xfe, 0xbd, 0x8b, 0xf1, 0x2d, 0x80, 0x97, 0x13, 0x10,
|
||||
0xa4, 0x94, 0x37, 0xe0, 0x4c, 0x93, 0xda, 0xa4, 0x11, 0x4a, 0x58, 0x4c, 0x90, 0xf0, 0x8e, 0x6f,
|
||||
0x24, 0x05, 0x93, 0x1e, 0x93, 0x53, 0x6a, 0x4b, 0x0a, 0x65, 0xe2, 0x9d, 0x33, 0x0a, 0x75, 0x19,
|
||||
0x42, 0xb1, 0xc7, 0xb6, 0x8d, 0x39, 0x16, 0x08, 0xf3, 0x66, 0x4e, 0xfc, 0xe7, 0x16, 0xe6, 0x58,
|
||||
0x2b, 0xcb, 0xf4, 0x4f, 0x07, 0x96, 0xe9, 0x23, 0x98, 0x15, 0x9e, 0x40, 0x78, 0x8a, 0x67, 0xed,
|
||||
0x43, 0xa8, 0x08, 0xa7, 0xcd, 0x26, 0xf6, 0xf8, 0x64, 0x79, 0x36, 0xa1, 0x9a, 0x18, 0x5a, 0x12,
|
||||
0x2d, 0x47, 0x89, 0x2a, 0xc5, 0x27, 0x5d, 0x35, 0x4f, 0x5c, 0x8b, 0xda, 0x8e, 0x5b, 0x33, 0x3e,
|
||||
0x66, 0xd4, 0xd5, 0x4d, 0xbc, 0x73, 0x87, 0x30, 0xe6, 0x6b, 0x19, 0xf0, 0xbe, 0x04, 0x17, 0xe4,
|
||||
0x6d, 0x49, 0xef, 0x1b, 0xda, 0x9f, 0x00, 0x2e, 0xf8, 0x86, 0xb1, 0xc1, 0x71, 0x75, 0xc0, 0xba,
|
||||
0xb2, 0xd0, 0xeb, 0xaa, 0x33, 0xc2, 0xec, 0xd6, 0x71, 0x57, 0x9d, 0x72, 0xec, 0x7e, 0xdf, 0xc9,
|
||||
0xc3, 0x59, 0xcb, 0x23, 0x98, 0x53, 0x4f, 0x64, 0x97, 0x33, 0xc3, 0x25, 0x7a, 0x1f, 0xe6, 0x7c,
|
||||
0x9c, 0xed, 0x3a, 0x66, 0xf5, 0xfc, 0x39, 0x41, 0xff, 0xca, 0x93, 0xae, 0xba, 0x56, 0x73, 0x78,
|
||||
0xbd, 0x5d, 0xd5, 0x2d, 0xda, 0x34, 0x38, 0x71, 0x6d, 0xe2, 0x35, 0x1d, 0x97, 0x47, 0x1f, 0x1b,
|
||||
0x4e, 0x95, 0x19, 0xd5, 0x0e, 0x27, 0x4c, 0xdf, 0x20, 0xbb, 0x15, 0xff, 0xc1, 0x9c, 0xf3, 0x43,
|
||||
0x6d, 0x60, 0x56, 0x47, 0xcf, 0xc0, 0x19, 0x46, 0xdb, 0x9e, 0x45, 0xf2, 0x59, 0xb1, 0x9f, 0x5c,
|
||||
0xf9, 0x20, 0xd5, 0xb6, 0xd3, 0xb0, 0x89, 0x97, 0x9f, 0x0e, 0x40, 0xe4, 0x52, 0x36, 0x91, 0x2f,
|
||||
0x00, 0x7c, 0x2a, 0x22, 0x8b, 0xcc, 0xf4, 0x6d, 0x98, 0x0b, 0x32, 0xf5, 0x9b, 0x16, 0x88, 0x9c,
|
||||
0xd8, 0x61, 0x4d, 0x23, 0xae, 0x52, 0x65, 0xae, 0xdf, 0xb4, 0xe6, 0x2c, 0xf9, 0x1b, 0x2a, 0xca,
|
||||
0x6a, 0x89, 0x4a, 0x57, 0xe6, 0x8e, 0xbb, 0xaa, 0x58, 0x07, 0x95, 0x91, 0x24, 0x77, 0x23, 0x20,
|
||||
0x2c, 0x2c, 0x50, 0xfc, 0x86, 0x83, 0x7f, 0x7c, 0xc3, 0xbf, 0x07, 0x10, 0x45, 0xa3, 0xcb, 0x3c,
|
||||
0xdf, 0x82, 0xb0, 0x9f, 0x67, 0x78, 0xb5, 0xc7, 0x4e, 0x34, 0xb8, 0xe5, 0xb9, 0x30, 0xc9, 0xc9,
|
||||
0x5d, 0xf4, 0xd5, 0x47, 0x10, 0x4e, 0x0b, 0x5a, 0xf4, 0x35, 0x80, 0xf3, 0xd1, 0xb6, 0x8c, 0x92,
|
||||
0x26, 0x72, 0xd2, 0x5b, 0x52, 0x61, 0x79, 0x7c, 0x87, 0x80, 0x44, 0x2b, 0x7d, 0xfe, 0xcb, 0x1f,
|
||||
0x0f, 0xa7, 0x34, 0xb4, 0x18, 0x7f, 0xc1, 0x0b, 0xdb, 0xbf, 0xb1, 0x27, 0x6f, 0xf1, 0x3e, 0xfa,
|
||||
0x01, 0xc0, 0xff, 0x0f, 0xbc, 0x4b, 0xa0, 0xd5, 0x71, 0xf6, 0x8b, 0xbf, 0xfa, 0x14, 0xca, 0x67,
|
||||
0xf2, 0x91, 0x98, 0xcb, 0x02, 0xf3, 0x1a, 0x2a, 0xa5, 0x61, 0x1a, 0x75, 0x89, 0xf6, 0x28, 0x82,
|
||||
0x2b, 0x67, 0xe5, 0x78, 0xb8, 0xf1, 0xb7, 0x8d, 0xf1, 0x70, 0x07, 0x86, 0xb1, 0xa6, 0x0b, 0xdc,
|
||||
0x12, 0x5a, 0x1a, 0xc4, 0xb5, 0x89, 0xb1, 0x27, 0xdb, 0xca, 0x7e, 0x9f, 0x9e, 0xa1, 0x1f, 0x01,
|
||||
0x5c, 0x18, 0x1c, 0x47, 0x68, 0xe4, 0xce, 0x09, 0xf3, 0xb3, 0xb0, 0x76, 0x36, 0xa7, 0x34, 0xde,
|
||||
0x53, 0xf2, 0x32, 0x81, 0xf6, 0x18, 0xc0, 0x85, 0xc1, 0xf9, 0x31, 0x9a, 0x37, 0x61, 0x8c, 0x8d,
|
||||
0xe6, 0x4d, 0x1a, 0x51, 0xda, 0xab, 0x82, 0xb7, 0x8c, 0x56, 0x52, 0x79, 0x3d, 0xbc, 0x63, 0xec,
|
||||
0x9d, 0x8c, 0x9f, 0x7d, 0xf4, 0x13, 0x80, 0xe8, 0xf4, 0xa8, 0x41, 0xd7, 0x47, 0x71, 0x24, 0x4e,
|
||||
0xbd, 0xc2, 0xcb, 0x67, 0x75, 0x93, 0x09, 0xbc, 0x26, 0x12, 0xb8, 0x8e, 0xca, 0xe9, 0x82, 0xfb,
|
||||
0x41, 0xe2, 0x29, 0x3c, 0x80, 0x59, 0x71, 0x9c, 0xaf, 0x8c, 0x3e, 0x9a, 0x27, 0x67, 0xb8, 0x94,
|
||||
0x6e, 0x28, 0xb9, 0x5e, 0x14, 0x5c, 0x0a, 0x2a, 0x8e, 0x3a, 0xb8, 0x68, 0x17, 0x4e, 0x8b, 0xd6,
|
||||
0x8a, 0x52, 0x03, 0x87, 0xbd, 0xbd, 0x70, 0x75, 0x0c, 0x4b, 0xc9, 0x50, 0x10, 0x0c, 0x17, 0x11,
|
||||
0x3a, 0xcd, 0x50, 0xd9, 0x38, 0xf8, 0x5d, 0xc9, 0x7c, 0xd7, 0x53, 0x32, 0x07, 0x3d, 0x05, 0x1c,
|
||||
0xf6, 0x14, 0xf0, 0x5b, 0x4f, 0x01, 0x5f, 0x1e, 0x29, 0x99, 0xc3, 0x23, 0x25, 0xf3, 0xeb, 0x91,
|
||||
0x92, 0xf9, 0x68, 0x29, 0x32, 0x5b, 0xd7, 0x29, 0x6b, 0x6e, 0x85, 0x1f, 0xaf, 0xb6, 0xb1, 0x1b,
|
||||
0x04, 0x14, 0x1f, 0xaf, 0xd5, 0x19, 0xf1, 0xcd, 0x59, 0xfe, 0x3b, 0x00, 0x00, 0xff, 0xff, 0x99,
|
||||
0xbc, 0xec, 0x7a, 0x32, 0x0f, 0x00, 0x00,
|
||||
// 1084 bytes of a gzipped FileDescriptorProto
|
||||
0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xbc, 0x97, 0xcf, 0x6f, 0xe3, 0x44,
|
||||
0x14, 0xc7, 0x33, 0xdd, 0xf4, 0x47, 0x66, 0x8b, 0x28, 0xa3, 0x05, 0x42, 0xc8, 0xda, 0xc5, 0xa0,
|
||||
0x6e, 0x76, 0x91, 0xec, 0xfe, 0x5a, 0x04, 0xcb, 0x89, 0x74, 0x81, 0xae, 0xc4, 0xf2, 0xc3, 0x15,
|
||||
0xac, 0x80, 0x43, 0x35, 0xb1, 0x67, 0x13, 0xa3, 0xc4, 0x93, 0xf5, 0x4c, 0x68, 0xa3, 0xaa, 0x2c,
|
||||
0x42, 0x42, 0x5c, 0x91, 0xf6, 0xc8, 0x85, 0x03, 0x07, 0xb4, 0xc0, 0x7d, 0x8f, 0x1c, 0x7b, 0xac,
|
||||
0xc4, 0x85, 0x53, 0x04, 0x29, 0x42, 0xa8, 0x7f, 0xc2, 0x9e, 0xd0, 0x8c, 0xc7, 0x89, 0x93, 0xc6,
|
||||
0x71, 0x8a, 0x22, 0x2e, 0x91, 0x27, 0x7e, 0xef, 0xf9, 0xf3, 0xbe, 0xf3, 0xde, 0x3c, 0x1b, 0xbe,
|
||||
0xe0, 0x50, 0xd6, 0xd8, 0xc3, 0xac, 0x61, 0xc9, 0x9f, 0xcf, 0xd7, 0x2a, 0x84, 0xe3, 0x35, 0xeb,
|
||||
0x5e, 0x8b, 0x04, 0x6d, 0xb3, 0x19, 0x50, 0x4e, 0xd1, 0xd3, 0x91, 0x89, 0x29, 0x7f, 0x94, 0x49,
|
||||
0xe1, 0x52, 0x95, 0x56, 0xa9, 0xb4, 0xb0, 0xc4, 0x55, 0x68, 0x5c, 0x48, 0x88, 0xc7, 0xdb, 0x4d,
|
||||
0xc2, 0x94, 0x49, 0xb1, 0x4a, 0x69, 0xb5, 0x4e, 0x2c, 0xdc, 0xf4, 0x2c, 0xec, 0xfb, 0x94, 0x63,
|
||||
0xee, 0x51, 0x3f, 0xba, 0x7b, 0x4d, 0x04, 0xa0, 0xcc, 0xaa, 0x60, 0x46, 0x42, 0x8c, 0x5e, 0x90,
|
||||
0x26, 0xae, 0x7a, 0xbe, 0x34, 0x0e, 0x6d, 0x8d, 0x4d, 0x98, 0xff, 0x40, 0x58, 0x6c, 0x51, 0x9f,
|
||||
0x07, 0xd8, 0xe1, 0xb7, 0xfc, 0xbb, 0xd4, 0x26, 0xf7, 0x5a, 0x84, 0x71, 0x94, 0x87, 0xf3, 0xd8,
|
||||
0x75, 0x03, 0xc2, 0x58, 0x1e, 0x2c, 0x83, 0x52, 0xce, 0x8e, 0x96, 0xc6, 0x03, 0x00, 0x9f, 0x1b,
|
||||
0xe1, 0xc6, 0x9a, 0xd4, 0x67, 0x24, 0xd9, 0x0f, 0x7d, 0x04, 0x9f, 0x70, 0x94, 0xc7, 0xae, 0xe7,
|
||||
0xdf, 0xa5, 0xf9, 0x99, 0x65, 0x50, 0xba, 0xb8, 0xfe, 0xa2, 0x39, 0x52, 0x1f, 0x33, 0x1e, 0xbd,
|
||||
0xbc, 0x78, 0xd4, 0xd1, 0x33, 0xc7, 0x1d, 0x1d, 0x9c, 0x76, 0xf4, 0x8c, 0xbd, 0xe8, 0xc4, 0xee,
|
||||
0xdd, 0xc8, 0xfe, 0xf3, 0xbd, 0x0e, 0x8c, 0xfb, 0xf0, 0xf9, 0x01, 0xa8, 0x6d, 0x8f, 0x71, 0x1a,
|
||||
0xb4, 0x53, 0xd3, 0x41, 0x6f, 0x41, 0xd8, 0x17, 0x46, 0x31, 0xad, 0x98, 0xa1, 0x8a, 0xa6, 0x50,
|
||||
0xd1, 0x0c, 0x37, 0x33, 0xe2, 0x7a, 0x1f, 0x57, 0x89, 0x8a, 0x6a, 0xc7, 0x3c, 0x8d, 0x47, 0x00,
|
||||
0x16, 0x47, 0x13, 0x28, 0x65, 0xde, 0x83, 0xf3, 0xc4, 0xe7, 0x81, 0x47, 0x04, 0xc2, 0x85, 0xd2,
|
||||
0xc5, 0x75, 0x2b, 0x25, 0xf3, 0x2d, 0xea, 0x12, 0x15, 0xe4, 0x4d, 0x9f, 0x07, 0xed, 0x72, 0x56,
|
||||
0xa8, 0x60, 0x47, 0x51, 0xd0, 0xdb, 0x23, 0xc8, 0xaf, 0xa4, 0x92, 0x87, 0x34, 0x03, 0xe8, 0x5f,
|
||||
0x0c, 0x69, 0xc7, 0xca, 0x6d, 0xf1, 0xec, 0x48, 0xbb, 0x67, 0xe1, 0xbc, 0x43, 0x5d, 0xb2, 0xeb,
|
||||
0xb9, 0x52, 0xbb, 0xac, 0x3d, 0x27, 0x96, 0xb7, 0xdc, 0xa9, 0x49, 0xf7, 0xf5, 0xb0, 0x74, 0x3d,
|
||||
0x00, 0x25, 0x5d, 0x11, 0xe6, 0xa2, 0x2d, 0x0f, 0xc5, 0xcb, 0xd9, 0xfd, 0x3f, 0xa6, 0xa7, 0xc3,
|
||||
0x97, 0x11, 0xc7, 0x1b, 0xf5, 0x7a, 0x84, 0xb2, 0xc3, 0x31, 0x27, 0xff, 0x5f, 0x15, 0xfd, 0x00,
|
||||
0xe0, 0xe5, 0x04, 0x04, 0xa5, 0xc5, 0x0d, 0x38, 0xd7, 0xa0, 0x2e, 0xa9, 0x47, 0x55, 0x54, 0x4c,
|
||||
0xa8, 0xa2, 0xdb, 0xc2, 0x48, 0x95, 0x8c, 0xf2, 0x98, 0x9e, 0x52, 0x77, 0x94, 0x50, 0x36, 0xde,
|
||||
0x3b, 0xa7, 0x50, 0x97, 0x21, 0x94, 0xcf, 0xd8, 0x75, 0x31, 0xc7, 0x12, 0x61, 0xd1, 0xce, 0xc9,
|
||||
0x7f, 0x6e, 0x62, 0x8e, 0x8d, 0x0d, 0x95, 0xfe, 0xd9, 0xc0, 0x2a, 0x7d, 0x04, 0xb3, 0xd2, 0x13,
|
||||
0x48, 0x4f, 0x79, 0x6d, 0x7c, 0x0c, 0x35, 0xe9, 0xb4, 0xd3, 0xc0, 0x01, 0x9f, 0x2e, 0xcf, 0x0e,
|
||||
0xd4, 0x13, 0x43, 0x2b, 0xa2, 0xd5, 0x38, 0x51, 0xb9, 0xf8, 0xb8, 0xa3, 0xe7, 0x89, 0xef, 0x50,
|
||||
0xd7, 0xf3, 0xab, 0xd6, 0x67, 0x8c, 0xfa, 0xa6, 0x8d, 0xf7, 0x6e, 0x13, 0xc6, 0x84, 0x96, 0x21,
|
||||
0xef, 0xcb, 0x70, 0x49, 0x95, 0x7b, 0x7a, 0x93, 0x19, 0x7f, 0x03, 0xb8, 0x24, 0x0c, 0x07, 0x4e,
|
||||
0xd9, 0xab, 0x43, 0xd6, 0xe5, 0xa5, 0x6e, 0x47, 0x9f, 0x93, 0x66, 0x37, 0x4f, 0x3b, 0xfa, 0x8c,
|
||||
0xe7, 0xf6, 0x9a, 0x34, 0x0f, 0xe7, 0x9d, 0x80, 0x60, 0x4e, 0x03, 0x99, 0x5d, 0xce, 0x8e, 0x96,
|
||||
0xe8, 0x43, 0x98, 0x13, 0x38, 0xbb, 0x35, 0xcc, 0x6a, 0xf9, 0x0b, 0x92, 0xfe, 0xd5, 0xc7, 0x1d,
|
||||
0x7d, 0xb3, 0xea, 0xf1, 0x5a, 0xab, 0x62, 0x3a, 0xb4, 0x61, 0x71, 0xe2, 0xbb, 0x24, 0x68, 0x78,
|
||||
0x3e, 0x8f, 0x5f, 0xd6, 0xbd, 0x0a, 0xb3, 0x2a, 0x6d, 0x4e, 0x98, 0xb9, 0x4d, 0xf6, 0xcb, 0xe2,
|
||||
0xc2, 0x5e, 0x10, 0xa1, 0xb6, 0x31, 0xab, 0xa1, 0x67, 0xe0, 0x1c, 0xa3, 0xad, 0xc0, 0x21, 0xf9,
|
||||
0xac, 0x7c, 0x9e, 0x5a, 0x09, 0x90, 0x4a, 0xcb, 0xab, 0xbb, 0x24, 0xc8, 0xcf, 0x86, 0x20, 0x6a,
|
||||
0xa9, 0x4e, 0xf0, 0x6f, 0x00, 0x7c, 0x2a, 0x26, 0x8b, 0xca, 0xf4, 0x5d, 0xd1, 0xfa, 0x22, 0x53,
|
||||
0x31, 0x31, 0x40, 0xac, 0x62, 0x47, 0x9d, 0x9b, 0x83, 0x2a, 0x95, 0x17, 0x7a, 0x13, 0x63, 0xc1,
|
||||
0x51, 0xf7, 0x50, 0x51, 0xed, 0x96, 0xdc, 0xe9, 0xf2, 0xc2, 0x69, 0x47, 0x97, 0xeb, 0x70, 0x67,
|
||||
0x14, 0xc9, 0xa7, 0x31, 0x10, 0x16, 0x6d, 0xd0, 0x60, 0x87, 0x83, 0xff, 0xdc, 0xe1, 0x3f, 0x01,
|
||||
0x88, 0xe2, 0xd1, 0x55, 0x9e, 0xef, 0x40, 0xd8, 0xcb, 0x33, 0x6a, 0xed, 0x89, 0x13, 0x0d, 0xbb,
|
||||
0x3c, 0x17, 0x25, 0x39, 0xbd, 0x46, 0x5f, 0x7f, 0x08, 0xe1, 0xac, 0xa4, 0x45, 0xdf, 0x01, 0xb8,
|
||||
0x18, 0x9f, 0xc9, 0x28, 0x69, 0x7c, 0x25, 0xbd, 0x52, 0x14, 0x56, 0x27, 0x77, 0x08, 0x49, 0x8c,
|
||||
0xd2, 0x57, 0xbf, 0xfd, 0xf5, 0x60, 0xc6, 0x40, 0xcb, 0x83, 0x6f, 0x43, 0xd1, 0xd1, 0x6f, 0x1d,
|
||||
0xa8, 0x2e, 0x3e, 0x44, 0x3f, 0x03, 0xf8, 0xe4, 0xd0, 0xe0, 0x45, 0xeb, 0x93, 0x3c, 0x6f, 0xf0,
|
||||
0x3d, 0xa1, 0xb0, 0x71, 0x2e, 0x1f, 0x85, 0xb9, 0x2a, 0x31, 0xaf, 0xa1, 0x52, 0x1a, 0xa6, 0x55,
|
||||
0x53, 0x68, 0x0f, 0x63, 0xb8, 0x6a, 0xd8, 0x4d, 0x86, 0x3b, 0x38, 0x9a, 0x27, 0xc3, 0x1d, 0x9a,
|
||||
0xa6, 0x86, 0x29, 0x71, 0x4b, 0x68, 0x65, 0x18, 0xd7, 0x25, 0xd6, 0x81, 0x3a, 0x56, 0x0e, 0xad,
|
||||
0xfe, 0x7c, 0xfd, 0x05, 0xc0, 0xa5, 0xe1, 0x71, 0x84, 0xc6, 0x3e, 0x39, 0x61, 0x7e, 0x16, 0x36,
|
||||
0xcf, 0xe7, 0x94, 0xc6, 0x7b, 0x46, 0x5e, 0x26, 0xd1, 0x1e, 0x01, 0xb8, 0x34, 0x3c, 0x3f, 0xc6,
|
||||
0xf3, 0x26, 0x8c, 0xb1, 0xf1, 0xbc, 0x49, 0x23, 0xca, 0x78, 0x4d, 0xf2, 0x6e, 0xa0, 0xb5, 0x54,
|
||||
0xde, 0x00, 0xef, 0x59, 0x07, 0xfd, 0xf1, 0x73, 0x88, 0x7e, 0x05, 0x10, 0x9d, 0x1d, 0x35, 0xe8,
|
||||
0xfa, 0x38, 0x8e, 0xc4, 0xa9, 0x57, 0x78, 0xe5, 0xbc, 0x6e, 0x2a, 0x81, 0xd7, 0x65, 0x02, 0xd7,
|
||||
0xd1, 0x46, 0xba, 0xe0, 0x22, 0xc8, 0x60, 0x0a, 0xf7, 0x61, 0x56, 0x96, 0xf3, 0x95, 0xf1, 0xa5,
|
||||
0xd9, 0xaf, 0xe1, 0x52, 0xba, 0xa1, 0xe2, 0x7a, 0x49, 0x72, 0x69, 0xa8, 0x38, 0xae, 0x70, 0xd1,
|
||||
0x3e, 0x9c, 0x95, 0x47, 0x2b, 0x4a, 0x0d, 0x1c, 0x9d, 0xed, 0x85, 0xab, 0x13, 0x58, 0x2a, 0x86,
|
||||
0x82, 0x64, 0xb8, 0x84, 0xd0, 0x59, 0x86, 0xf2, 0xf6, 0xd1, 0x9f, 0x5a, 0xe6, 0xc7, 0xae, 0x96,
|
||||
0x39, 0xea, 0x6a, 0xe0, 0xb8, 0xab, 0x81, 0x3f, 0xba, 0x1a, 0xf8, 0xf6, 0x44, 0xcb, 0x1c, 0x9f,
|
||||
0x68, 0x99, 0xdf, 0x4f, 0xb4, 0xcc, 0x27, 0x2b, 0xb1, 0xd9, 0xba, 0x45, 0x59, 0xe3, 0x4e, 0xf4,
|
||||
0xa5, 0xe7, 0x5a, 0xfb, 0x61, 0x40, 0xf9, 0xa5, 0x57, 0x99, 0x93, 0x1f, 0x68, 0x1b, 0xff, 0x06,
|
||||
0x00, 0x00, 0xff, 0xff, 0xcc, 0x4d, 0x4e, 0xc2, 0x5f, 0x0e, 0x00, 0x00,
|
||||
}
|
||||
|
||||
func (this *QueryContractInfoResponse) Equal(that interface{}) bool {
|
||||
@@ -887,33 +845,6 @@ func (this *QueryContractInfoResponse) Equal(that interface{}) bool {
|
||||
}
|
||||
return true
|
||||
}
|
||||
func (this *ContractInfoWithAddress) Equal(that interface{}) bool {
|
||||
if that == nil {
|
||||
return this == nil
|
||||
}
|
||||
|
||||
that1, ok := that.(*ContractInfoWithAddress)
|
||||
if !ok {
|
||||
that2, ok := that.(ContractInfoWithAddress)
|
||||
if ok {
|
||||
that1 = &that2
|
||||
} else {
|
||||
return false
|
||||
}
|
||||
}
|
||||
if that1 == nil {
|
||||
return this == nil
|
||||
} else if this == nil {
|
||||
return false
|
||||
}
|
||||
if this.Address != that1.Address {
|
||||
return false
|
||||
}
|
||||
if !this.ContractInfo.Equal(&that1.ContractInfo) {
|
||||
return false
|
||||
}
|
||||
return true
|
||||
}
|
||||
func (this *CodeInfoResponse) Equal(that interface{}) bool {
|
||||
if that == nil {
|
||||
return this == nil
|
||||
@@ -1527,46 +1458,6 @@ func (m *QueryContractsByCodeRequest) MarshalToSizedBuffer(dAtA []byte) (int, er
|
||||
return len(dAtA) - i, nil
|
||||
}
|
||||
|
||||
func (m *ContractInfoWithAddress) Marshal() (dAtA []byte, err error) {
|
||||
size := m.Size()
|
||||
dAtA = make([]byte, size)
|
||||
n, err := m.MarshalToSizedBuffer(dAtA[:size])
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
return dAtA[:n], nil
|
||||
}
|
||||
|
||||
func (m *ContractInfoWithAddress) MarshalTo(dAtA []byte) (int, error) {
|
||||
size := m.Size()
|
||||
return m.MarshalToSizedBuffer(dAtA[:size])
|
||||
}
|
||||
|
||||
func (m *ContractInfoWithAddress) MarshalToSizedBuffer(dAtA []byte) (int, error) {
|
||||
i := len(dAtA)
|
||||
_ = i
|
||||
var l int
|
||||
_ = l
|
||||
{
|
||||
size, err := m.ContractInfo.MarshalToSizedBuffer(dAtA[:i])
|
||||
if err != nil {
|
||||
return 0, err
|
||||
}
|
||||
i -= size
|
||||
i = encodeVarintQuery(dAtA, i, uint64(size))
|
||||
}
|
||||
i--
|
||||
dAtA[i] = 0x12
|
||||
if len(m.Address) > 0 {
|
||||
i -= len(m.Address)
|
||||
copy(dAtA[i:], m.Address)
|
||||
i = encodeVarintQuery(dAtA, i, uint64(len(m.Address)))
|
||||
i--
|
||||
dAtA[i] = 0xa
|
||||
}
|
||||
return len(dAtA) - i, nil
|
||||
}
|
||||
|
||||
func (m *QueryContractsByCodeResponse) Marshal() (dAtA []byte, err error) {
|
||||
size := m.Size()
|
||||
dAtA = make([]byte, size)
|
||||
@@ -1599,16 +1490,11 @@ func (m *QueryContractsByCodeResponse) MarshalToSizedBuffer(dAtA []byte) (int, e
|
||||
i--
|
||||
dAtA[i] = 0x12
|
||||
}
|
||||
if len(m.ContractInfos) > 0 {
|
||||
for iNdEx := len(m.ContractInfos) - 1; iNdEx >= 0; iNdEx-- {
|
||||
{
|
||||
size, err := m.ContractInfos[iNdEx].MarshalToSizedBuffer(dAtA[:i])
|
||||
if err != nil {
|
||||
return 0, err
|
||||
}
|
||||
i -= size
|
||||
i = encodeVarintQuery(dAtA, i, uint64(size))
|
||||
}
|
||||
if len(m.Contracts) > 0 {
|
||||
for iNdEx := len(m.Contracts) - 1; iNdEx >= 0; iNdEx-- {
|
||||
i -= len(m.Contracts[iNdEx])
|
||||
copy(dAtA[i:], m.Contracts[iNdEx])
|
||||
i = encodeVarintQuery(dAtA, i, uint64(len(m.Contracts[iNdEx])))
|
||||
i--
|
||||
dAtA[i] = 0xa
|
||||
}
|
||||
@@ -2142,30 +2028,15 @@ func (m *QueryContractsByCodeRequest) Size() (n int) {
|
||||
return n
|
||||
}
|
||||
|
||||
func (m *ContractInfoWithAddress) Size() (n int) {
|
||||
if m == nil {
|
||||
return 0
|
||||
}
|
||||
var l int
|
||||
_ = l
|
||||
l = len(m.Address)
|
||||
if l > 0 {
|
||||
n += 1 + l + sovQuery(uint64(l))
|
||||
}
|
||||
l = m.ContractInfo.Size()
|
||||
n += 1 + l + sovQuery(uint64(l))
|
||||
return n
|
||||
}
|
||||
|
||||
func (m *QueryContractsByCodeResponse) Size() (n int) {
|
||||
if m == nil {
|
||||
return 0
|
||||
}
|
||||
var l int
|
||||
_ = l
|
||||
if len(m.ContractInfos) > 0 {
|
||||
for _, e := range m.ContractInfos {
|
||||
l = e.Size()
|
||||
if len(m.Contracts) > 0 {
|
||||
for _, s := range m.Contracts {
|
||||
l = len(s)
|
||||
n += 1 + l + sovQuery(uint64(l))
|
||||
}
|
||||
}
|
||||
@@ -2907,121 +2778,6 @@ func (m *QueryContractsByCodeRequest) Unmarshal(dAtA []byte) error {
|
||||
}
|
||||
return nil
|
||||
}
|
||||
func (m *ContractInfoWithAddress) Unmarshal(dAtA []byte) error {
|
||||
l := len(dAtA)
|
||||
iNdEx := 0
|
||||
for iNdEx < l {
|
||||
preIndex := iNdEx
|
||||
var wire uint64
|
||||
for shift := uint(0); ; shift += 7 {
|
||||
if shift >= 64 {
|
||||
return ErrIntOverflowQuery
|
||||
}
|
||||
if iNdEx >= l {
|
||||
return io.ErrUnexpectedEOF
|
||||
}
|
||||
b := dAtA[iNdEx]
|
||||
iNdEx++
|
||||
wire |= uint64(b&0x7F) << shift
|
||||
if b < 0x80 {
|
||||
break
|
||||
}
|
||||
}
|
||||
fieldNum := int32(wire >> 3)
|
||||
wireType := int(wire & 0x7)
|
||||
if wireType == 4 {
|
||||
return fmt.Errorf("proto: ContractInfoWithAddress: wiretype end group for non-group")
|
||||
}
|
||||
if fieldNum <= 0 {
|
||||
return fmt.Errorf("proto: ContractInfoWithAddress: illegal tag %d (wire type %d)", fieldNum, wire)
|
||||
}
|
||||
switch fieldNum {
|
||||
case 1:
|
||||
if wireType != 2 {
|
||||
return fmt.Errorf("proto: wrong wireType = %d for field Address", wireType)
|
||||
}
|
||||
var stringLen uint64
|
||||
for shift := uint(0); ; shift += 7 {
|
||||
if shift >= 64 {
|
||||
return ErrIntOverflowQuery
|
||||
}
|
||||
if iNdEx >= l {
|
||||
return io.ErrUnexpectedEOF
|
||||
}
|
||||
b := dAtA[iNdEx]
|
||||
iNdEx++
|
||||
stringLen |= uint64(b&0x7F) << shift
|
||||
if b < 0x80 {
|
||||
break
|
||||
}
|
||||
}
|
||||
intStringLen := int(stringLen)
|
||||
if intStringLen < 0 {
|
||||
return ErrInvalidLengthQuery
|
||||
}
|
||||
postIndex := iNdEx + intStringLen
|
||||
if postIndex < 0 {
|
||||
return ErrInvalidLengthQuery
|
||||
}
|
||||
if postIndex > l {
|
||||
return io.ErrUnexpectedEOF
|
||||
}
|
||||
m.Address = string(dAtA[iNdEx:postIndex])
|
||||
iNdEx = postIndex
|
||||
case 2:
|
||||
if wireType != 2 {
|
||||
return fmt.Errorf("proto: wrong wireType = %d for field ContractInfo", wireType)
|
||||
}
|
||||
var msglen int
|
||||
for shift := uint(0); ; shift += 7 {
|
||||
if shift >= 64 {
|
||||
return ErrIntOverflowQuery
|
||||
}
|
||||
if iNdEx >= l {
|
||||
return io.ErrUnexpectedEOF
|
||||
}
|
||||
b := dAtA[iNdEx]
|
||||
iNdEx++
|
||||
msglen |= int(b&0x7F) << shift
|
||||
if b < 0x80 {
|
||||
break
|
||||
}
|
||||
}
|
||||
if msglen < 0 {
|
||||
return ErrInvalidLengthQuery
|
||||
}
|
||||
postIndex := iNdEx + msglen
|
||||
if postIndex < 0 {
|
||||
return ErrInvalidLengthQuery
|
||||
}
|
||||
if postIndex > l {
|
||||
return io.ErrUnexpectedEOF
|
||||
}
|
||||
if err := m.ContractInfo.Unmarshal(dAtA[iNdEx:postIndex]); err != nil {
|
||||
return err
|
||||
}
|
||||
iNdEx = postIndex
|
||||
default:
|
||||
iNdEx = preIndex
|
||||
skippy, err := skipQuery(dAtA[iNdEx:])
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
if (skippy < 0) || (iNdEx+skippy) < 0 {
|
||||
return ErrInvalidLengthQuery
|
||||
}
|
||||
if (iNdEx + skippy) > l {
|
||||
return io.ErrUnexpectedEOF
|
||||
}
|
||||
iNdEx += skippy
|
||||
}
|
||||
}
|
||||
|
||||
if iNdEx > l {
|
||||
return io.ErrUnexpectedEOF
|
||||
}
|
||||
return nil
|
||||
}
|
||||
func (m *QueryContractsByCodeResponse) Unmarshal(dAtA []byte) error {
|
||||
l := len(dAtA)
|
||||
iNdEx := 0
|
||||
@@ -3053,9 +2809,9 @@ func (m *QueryContractsByCodeResponse) Unmarshal(dAtA []byte) error {
|
||||
switch fieldNum {
|
||||
case 1:
|
||||
if wireType != 2 {
|
||||
return fmt.Errorf("proto: wrong wireType = %d for field ContractInfos", wireType)
|
||||
return fmt.Errorf("proto: wrong wireType = %d for field Contracts", wireType)
|
||||
}
|
||||
var msglen int
|
||||
var stringLen uint64
|
||||
for shift := uint(0); ; shift += 7 {
|
||||
if shift >= 64 {
|
||||
return ErrIntOverflowQuery
|
||||
@@ -3065,25 +2821,23 @@ func (m *QueryContractsByCodeResponse) Unmarshal(dAtA []byte) error {
|
||||
}
|
||||
b := dAtA[iNdEx]
|
||||
iNdEx++
|
||||
msglen |= int(b&0x7F) << shift
|
||||
stringLen |= uint64(b&0x7F) << shift
|
||||
if b < 0x80 {
|
||||
break
|
||||
}
|
||||
}
|
||||
if msglen < 0 {
|
||||
intStringLen := int(stringLen)
|
||||
if intStringLen < 0 {
|
||||
return ErrInvalidLengthQuery
|
||||
}
|
||||
postIndex := iNdEx + msglen
|
||||
postIndex := iNdEx + intStringLen
|
||||
if postIndex < 0 {
|
||||
return ErrInvalidLengthQuery
|
||||
}
|
||||
if postIndex > l {
|
||||
return io.ErrUnexpectedEOF
|
||||
}
|
||||
m.ContractInfos = append(m.ContractInfos, ContractInfoWithAddress{})
|
||||
if err := m.ContractInfos[len(m.ContractInfos)-1].Unmarshal(dAtA[iNdEx:postIndex]); err != nil {
|
||||
return err
|
||||
}
|
||||
m.Contracts = append(m.Contracts, string(dAtA[iNdEx:postIndex]))
|
||||
iNdEx = postIndex
|
||||
case 2:
|
||||
if wireType != 2 {
|
||||
|
||||
Reference in New Issue
Block a user