From 46ddff93ec19284d6e5614fce7662a906faa76f8 Mon Sep 17 00:00:00 2001 From: Simon Warta Date: Mon, 10 Feb 2020 11:48:21 +0100 Subject: [PATCH] Move and test loadAccounts --- packages/faucet/src/actions/start/start.ts | 8 +++--- packages/faucet/src/faucet.spec.ts | 16 ++++++++++++ packages/faucet/src/faucet.ts | 30 +++++++++++++++++++--- packages/faucet/src/multichainhelpers.ts | 29 +-------------------- 4 files changed, 48 insertions(+), 35 deletions(-) diff --git a/packages/faucet/src/actions/start/start.ts b/packages/faucet/src/actions/start/start.ts index 90af7ca1..660e536b 100644 --- a/packages/faucet/src/actions/start/start.ts +++ b/packages/faucet/src/actions/start/start.ts @@ -8,7 +8,7 @@ import { isValidAddress } from "../../addresses"; import * as constants from "../../constants"; import { logAccountsState, logSendJob } from "../../debugging"; import { Faucet } from "../../faucet"; -import { availableTokensFromHolder, identitiesOfFirstWallet, loadAccounts } from "../../multichainhelpers"; +import { availableTokensFromHolder, identitiesOfFirstWallet } from "../../multichainhelpers"; import { setSecretAndCreateIdentities } from "../../profile"; import { SendJob } from "../../types"; import { HttpError } from "./httperror"; @@ -55,13 +55,13 @@ export async function start(args: ReadonlyArray): Promise { const chainTokens = await faucet.loadTokenTickers(); console.info("Chain tokens:", chainTokens); - const accounts = await loadAccounts(profile, connection); + const accounts = await faucet.loadAccounts(); logAccountsState(accounts); let availableTokens = availableTokensFromHolder(accounts[0]); console.info("Available tokens:", availableTokens); setInterval(async () => { - const updatedAccounts = await loadAccounts(profile, connection); + const updatedAccounts = await faucet.loadAccounts(); availableTokens = availableTokensFromHolder(updatedAccounts[0]); console.info("Available tokens:", availableTokens); }, 60_000); @@ -88,7 +88,7 @@ export async function start(args: ReadonlyArray): Promise { "See https://github.com/iov-one/iov-faucet for all further information.\n"; break; case "/status": { - const updatedAccounts = await loadAccounts(profile, connection); + const updatedAccounts = await faucet.loadAccounts(); context.response.body = { status: "ok", nodeUrl: blockchainBaseUrl, diff --git a/packages/faucet/src/faucet.spec.ts b/packages/faucet/src/faucet.spec.ts index 6526a504..72fc670f 100644 --- a/packages/faucet/src/faucet.spec.ts +++ b/packages/faucet/src/faucet.spec.ts @@ -119,4 +119,20 @@ describe("Faucet", () => { connection.disconnect(); }); }); + + describe("loadAccounts", () => { + it("works", async () => { + pendingWithoutCosmos(); + const connection = await CosmWasmConnection.establish(httpUrl, defaultPrefix, defaultConfig); + const { profile, holder } = await makeProfile(); + const faucet = new Faucet(defaultConfig, connection, codec, profile); + const accounts = await faucet.loadAccounts(); + const expectedHolderAccount = await connection.getAccount({ pubkey: holder.pubkey }); + assert(expectedHolderAccount); + expect(accounts).toEqual([ + { address: expectedHolderAccount.address, balance: expectedHolderAccount.balance }, + ]); + connection.disconnect(); + }); + }); }); diff --git a/packages/faucet/src/faucet.ts b/packages/faucet/src/faucet.ts index c8e49a8b..eecd6c5e 100644 --- a/packages/faucet/src/faucet.ts +++ b/packages/faucet/src/faucet.ts @@ -1,5 +1,6 @@ import { TokenConfiguration } from "@cosmwasm/bcp"; import { + Account, BlockchainConnection, isBlockInfoFailed, isBlockInfoPending, @@ -10,8 +11,9 @@ import { import { UserProfile } from "@iov/keycontrol"; import { sleep } from "@iov/utils"; +import { identityToAddress } from "./addresses"; import { debugAccount, logAccountsState, logSendJob } from "./debugging"; -import { availableTokensFromHolder, identitiesOfFirstWallet, loadAccounts } from "./multichainhelpers"; +import { availableTokensFromHolder, identitiesOfFirstWallet } from "./multichainhelpers"; import { TokenManager } from "./tokenmanager"; import { SendJob } from "./types"; @@ -63,13 +65,35 @@ export class Faucet { return (await this.connection.getAllTokens()).map(token => token.tokenTicker); } + public async loadAccounts(): Promise>> { + const addresses = identitiesOfFirstWallet(this.profile).map(identity => identityToAddress(identity)); + + const out: Account[] = []; + for (const address of addresses) { + const response = await this.connection.getAccount({ address: address }); + if (response) { + out.push({ + address: response.address, + balance: response.balance, + }); + } else { + out.push({ + address: address, + balance: [], + }); + } + } + + return out; + } + public async refill(): Promise { console.info(`Connected to network: ${this.connection.chainId()}`); console.info(`Tokens on network: ${(await this.loadTokenTickers()).join(", ")}`); const holderIdentity = identitiesOfFirstWallet(this.profile)[0]; - const accounts = await loadAccounts(this.profile, this.connection); + const accounts = await this.loadAccounts(); logAccountsState(accounts); const holderAccount = accounts[0]; const distributorAccounts = accounts.slice(1); @@ -103,7 +127,7 @@ export class Faucet { } console.info("Done refilling accounts."); - logAccountsState(await loadAccounts(this.profile, this.connection)); + logAccountsState(await this.loadAccounts()); } else { console.info("Nothing to be done. Anyways, thanks for checking."); } diff --git a/packages/faucet/src/multichainhelpers.ts b/packages/faucet/src/multichainhelpers.ts index dc9e1164..26be6198 100644 --- a/packages/faucet/src/multichainhelpers.ts +++ b/packages/faucet/src/multichainhelpers.ts @@ -1,38 +1,11 @@ -import { Account, BlockchainConnection, Identity, TokenTicker } from "@iov/bcp"; +import { Account, Identity, TokenTicker } from "@iov/bcp"; import { UserProfile } from "@iov/keycontrol"; -import { identityToAddress } from "./addresses"; - export function identitiesOfFirstWallet(profile: UserProfile): ReadonlyArray { const wallet = profile.wallets.value[0]; return profile.getIdentities(wallet.id); } -export async function loadAccounts( - profile: UserProfile, - connection: BlockchainConnection, -): Promise> { - const addresses = identitiesOfFirstWallet(profile).map(identity => identityToAddress(identity)); - - const out: Account[] = []; - for (const address of addresses) { - const response = await connection.getAccount({ address: address }); - if (response) { - out.push({ - address: response.address, - balance: response.balance, - }); - } else { - out.push({ - address: address, - balance: [], - }); - } - } - - return out; -} - export function availableTokensFromHolder(holderAccount: Account): ReadonlyArray { return holderAccount.balance.map(coin => coin.tokenTicker); }