diff --git a/CHANGELOG.md b/CHANGELOG.md index 1191f03f..c50f4c09 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -44,8 +44,8 @@ and this project adheres to dependencies. This should also reduce the bundle size as only the English wordlist is shipped. ([#966]) - @cosmjs/cli: Rename binary `cosmwasm-cli` to `cosmjs-cli` ([#1033]). -- @cosmjs/stargate & @cosmjs/cosmwasm-stargate: Removed default types from AminoTypes. ([1079]) -- @cosmjs/cosmwasm-stargate: getCodes() automatically loops through all pagination pages now. ([#1078]) +- @cosmjs/stargate & @cosmjs/cosmwasm-stargate: Removed default types from AminoTypes. ([#1079]) +- @cosmjs/cosmwasm-stargate: getCodes() automatically loops through all pagination pages now. ([#1077]) [#927]: https://github.com/cosmos/cosmjs/issues/927 [#955]: https://github.com/cosmos/cosmjs/issues/955 @@ -57,6 +57,7 @@ and this project adheres to [#1026]: https://github.com/cosmos/cosmjs/issues/1026 [#1033]: https://github.com/cosmos/cosmjs/issues/1033 [#1053]: https://github.com/cosmos/cosmjs/issues/1053 +[#1077]: https://github.com/cosmos/cosmjs/issues/1077 [#1078]: https://github.com/cosmos/cosmjs/issues/1078 [#1079]: https://github.com/cosmos/cosmjs/issues/1079 diff --git a/README.md b/README.md index 686cb5ed..6c8b9316 100644 --- a/README.md +++ b/README.md @@ -96,6 +96,70 @@ We're happy to adjust this list according to users' needs as long as you don't ask for Internet Explorer support. If your environment does not support Wasm, we can work on a solution with swappable implementations. + +## Webpack Configs + +With WebPack 5, you have to be explicit about the usage of Node.js types and +modules that were simply replaced with re-implementations for browsers in +Webpack 4. + +Configs for 0.28 and later: + +```js +module.exports = [ + { + ..., + resolve: { + fallback: { + buffer: false, + crypto: false, + events: false, + path: false, + stream: false, + string_decoder: false, + }, + }, + }, +]; +``` + +Configs for CosmJS < 0.28 + +```js +module.exports = [ + { + ..., + resolve: { + fallback: { + buffer: false, + crypto: false, + events: false, + path: false, + stream: require.resolve("stream-browserify"), + string_decoder: false, + }, + }, + }, +]; +``` + +Also, in both cases you need the Buffer plugin: + +```ts +module.exports = [ + { + ..., + plugins: [ + ..., + new webpack.ProvidePlugin({ + Buffer: ["buffer", "Buffer"], + }), + ], + ... + }, +]; +``` + ## Roadmap We maintain a [development board](https://github.com/orgs/cosmos/projects/6), diff --git a/packages/cosmwasm-stargate/src/cosmwasmclient.ts b/packages/cosmwasm-stargate/src/cosmwasmclient.ts index 4e32d8de..4ef0bd34 100644 --- a/packages/cosmwasm-stargate/src/cosmwasmclient.ts +++ b/packages/cosmwasm-stargate/src/cosmwasmclient.ts @@ -25,7 +25,11 @@ import { } from "@cosmjs/stargate"; import { Tendermint34Client, toRfc3339WithNanoseconds } from "@cosmjs/tendermint-rpc"; import { assert, sleep } from "@cosmjs/utils"; -import { CodeInfoResponse, QueryCodesResponse } from "cosmjs-types/cosmwasm/wasm/v1/query"; +import { + CodeInfoResponse, + QueryCodesResponse, + QueryContractsByCodeResponse, +} from "cosmjs-types/cosmwasm/wasm/v1/query"; import { ContractCodeHistoryOperationType } from "cosmjs-types/cosmwasm/wasm/v1/types"; import { JsonObject, setupWasmExtension, WasmExtension } from "./modules"; @@ -350,10 +354,24 @@ export class CosmWasmClient { return codeDetails; } + /** + * getContracts() returns all contract instances for one code and is just looping through all pagination pages. + * + * This is potentially inefficient and advanced apps should consider creating + * their own query client to handle pagination together with the app's screens. + */ public async getContracts(codeId: number): Promise { - // TODO: handle pagination - accept as arg or auto-loop - const { contracts } = await this.forceGetQueryClient().wasm.listContractsByCodeId(codeId); - return contracts; + const allContracts = []; + let startAtKey: Uint8Array | undefined = undefined; + do { + const { contracts, pagination }: QueryContractsByCodeResponse = + await this.forceGetQueryClient().wasm.listContractsByCodeId(codeId, startAtKey); + const loadedContracts = contracts || []; + allContracts.push(...loadedContracts); + startAtKey = pagination?.nextKey; + } while (startAtKey?.length !== 0 && startAtKey !== undefined); + + return allContracts; } /**