From 16f67a7ed15a10529ec0e0a5fd19b548f6dafb55 Mon Sep 17 00:00:00 2001 From: Brian Faust Date: Sun, 23 Aug 2020 14:38:51 +0300 Subject: [PATCH 1/2] wip --- .../platform-sdk-profiles/src/dto/transaction.ts | 3 +-- .../src/environment/coin-repository.ts | 10 +++++++++- .../src/wallets/aggregates/entity-aggregate.ts | 4 +++- .../src/wallets/mappers/delegate-mapper.test.ts | 2 +- .../src/wallets/mappers/delegate-mapper.ts | 11 ++--------- .../src/wallets/wallet-transaction-service.ts | 6 +++--- .../src/wallets/wallet.models.ts | 1 - .../platform-sdk-profiles/src/wallets/wallet.ts | 13 ++----------- 8 files changed, 21 insertions(+), 29 deletions(-) diff --git a/packages/platform-sdk-profiles/src/dto/transaction.ts b/packages/platform-sdk-profiles/src/dto/transaction.ts index 10f8b01289..510be4bc32 100644 --- a/packages/platform-sdk-profiles/src/dto/transaction.ts +++ b/packages/platform-sdk-profiles/src/dto/transaction.ts @@ -1,6 +1,7 @@ import { Coins, Contracts } from "@arkecosystem/platform-sdk"; import { DateTime } from "@arkecosystem/platform-sdk-intl"; import { BigNumber } from "@arkecosystem/platform-sdk-support"; +import { ReadOnlyWallet } from "../wallets/read-only-wallet"; import { ReadWriteWallet } from "../wallets/wallet.models"; @@ -489,12 +490,10 @@ export class SecondSignatureData extends TransactionData implements Contracts.Se export class TransferData extends TransactionData implements Contracts.TransferData {} export class VoteData extends TransactionData implements Contracts.VoteData { - // TODO: map those to delegate wallets public votes(): string[] { return this.data().votes(); } - // TODO: map those to delegate wallets public unvotes(): string[] { return this.data().unvotes(); } diff --git a/packages/platform-sdk-profiles/src/environment/coin-repository.ts b/packages/platform-sdk-profiles/src/environment/coin-repository.ts index 2fd5741af9..71e20601b6 100644 --- a/packages/platform-sdk-profiles/src/environment/coin-repository.ts +++ b/packages/platform-sdk-profiles/src/environment/coin-repository.ts @@ -7,7 +7,15 @@ export class CoinRepository { readonly #dataRepository: DataRepository = new DataRepository(); public delegates(coin: string, network: string): any { - return this.#dataRepository.get(`${coin}.${network}.delegates`); + const delegates = this.#dataRepository.get(`${coin}.${network}.delegates`); + + if (delegates === undefined) { + throw new Error( + `The delegates for [${coin}.${network}] have not been synchronized yet. Please call [syncDelegates] before using this method.`, + ); + } + + return delegates; } public async syncDelegates(coin: string, network: string): Promise { diff --git a/packages/platform-sdk-profiles/src/wallets/aggregates/entity-aggregate.ts b/packages/platform-sdk-profiles/src/wallets/aggregates/entity-aggregate.ts index b339fb1e3d..65c8412dc6 100644 --- a/packages/platform-sdk-profiles/src/wallets/aggregates/entity-aggregate.ts +++ b/packages/platform-sdk-profiles/src/wallets/aggregates/entity-aggregate.ts @@ -23,7 +23,9 @@ export class EntityAggregate { senderPublicKey: this.#wallet.publicKey(), }); - result.transform((transaction) => transformTransactionData(this.#wallet, transaction)); + result.transform((transaction: Contracts.TransactionDataType) => + transformTransactionData(this.#wallet, transaction), + ); return result; } diff --git a/packages/platform-sdk-profiles/src/wallets/mappers/delegate-mapper.test.ts b/packages/platform-sdk-profiles/src/wallets/mappers/delegate-mapper.test.ts index 4a9141bea8..32d97cc4d8 100644 --- a/packages/platform-sdk-profiles/src/wallets/mappers/delegate-mapper.test.ts +++ b/packages/platform-sdk-profiles/src/wallets/mappers/delegate-mapper.test.ts @@ -56,7 +56,7 @@ it("should map the public keys to read-only wallets", async () => { await container.get(Identifiers.CoinRepository).syncDelegates(wallet.coinId(), wallet.networkId()); - const mappedDelegates = new DelegateMapper(wallet).map(publicKeys); + const mappedDelegates = DelegateMapper.execute("ARK", "devnet", publicKeys); expect(mappedDelegates).toBeArray(); expect(mappedDelegates).toHaveLength(100); diff --git a/packages/platform-sdk-profiles/src/wallets/mappers/delegate-mapper.ts b/packages/platform-sdk-profiles/src/wallets/mappers/delegate-mapper.ts index b1b7c3df58..44afc7d395 100644 --- a/packages/platform-sdk-profiles/src/wallets/mappers/delegate-mapper.ts +++ b/packages/platform-sdk-profiles/src/wallets/mappers/delegate-mapper.ts @@ -2,19 +2,12 @@ import { CoinRepository } from "../../environment/coin-repository"; import { container } from "../../environment/container"; import { Identifiers } from "../../environment/container.models"; import { ReadOnlyWallet } from "../read-only-wallet"; -import { ReadWriteWallet } from "../wallet.models"; export class DelegateMapper { - readonly #wallet: ReadWriteWallet; - - public constructor(wallet: ReadWriteWallet) { - this.#wallet = wallet; - } - - public map(publicKeys: string[]): ReadOnlyWallet[] { + public static execute(coin: string, network: string, publicKeys: string[]): ReadOnlyWallet[] { const delegates: Record[] = container .get(Identifiers.CoinRepository) - .delegates(this.#wallet.coinId(), this.#wallet.networkId()); + .delegates(coin, network); return publicKeys .map((publicKey: string) => { diff --git a/packages/platform-sdk-profiles/src/wallets/wallet-transaction-service.ts b/packages/platform-sdk-profiles/src/wallets/wallet-transaction-service.ts index 03c5410dbc..5b00f10291 100644 --- a/packages/platform-sdk-profiles/src/wallets/wallet-transaction-service.ts +++ b/packages/platform-sdk-profiles/src/wallets/wallet-transaction-service.ts @@ -1,7 +1,7 @@ import { Contracts, DTO } from "@arkecosystem/platform-sdk"; import { SignedTransactionData } from "./dto/signed-transaction"; -import { WalletData } from "./wallet.models"; +import { ReadWriteWallet, WalletData } from "./wallet.models"; type SignedTransactionDataDictionary = Record; @@ -16,11 +16,11 @@ type SignedTransactionDataDictionary = Record; syncVotes(): Promise; syncExchangeRate(): Promise; diff --git a/packages/platform-sdk-profiles/src/wallets/wallet.ts b/packages/platform-sdk-profiles/src/wallets/wallet.ts index cc7ab690b5..757ddf579b 100644 --- a/packages/platform-sdk-profiles/src/wallets/wallet.ts +++ b/packages/platform-sdk-profiles/src/wallets/wallet.ts @@ -370,7 +370,7 @@ export class Wallet implements ReadWriteWallet { throw new Error("The voting data has not been synced. Please call [syncVotes] before accessing votes."); } - return this.mapDelegates(votes); + return DelegateMapper.execute(this.coinId(), this.networkId(), votes); } public votesAvailable(): number { @@ -417,15 +417,6 @@ export class Wallet implements ReadWriteWallet { return this.#entityUpdateAggregate; } - /** - * These methods serve as helpers to map wallet identifiers to various - * wallet instances that expose information like an avatar or balances. - */ - - public mapDelegates(publicKeys: string[]): ReadOnlyWallet[] { - return new DelegateMapper(this).map(publicKeys); - } - /** * These methods serve as helpers to keep the wallet data updated. */ @@ -482,7 +473,7 @@ export class Wallet implements ReadWriteWallet { transaction.setMeta("publicKey", this.publicKey()); } - result.transform((transaction) => transformTransactionData(this, transaction)); + result.transform((transaction: Contracts.TransactionDataType) => transformTransactionData(this, transaction)); return result; } From 565559a0a9d2ce05910825f4b0ed5627d70147cb Mon Sep 17 00:00:00 2001 From: Brian Faust Date: Sun, 23 Aug 2020 15:10:44 +0300 Subject: [PATCH 2/2] wip --- .../src/wallets/wallet-transaction-service.ts | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/packages/platform-sdk-profiles/src/wallets/wallet-transaction-service.ts b/packages/platform-sdk-profiles/src/wallets/wallet-transaction-service.ts index 5b00f10291..0ac64b5df2 100644 --- a/packages/platform-sdk-profiles/src/wallets/wallet-transaction-service.ts +++ b/packages/platform-sdk-profiles/src/wallets/wallet-transaction-service.ts @@ -215,7 +215,11 @@ export class TransactionService { */ public restore(): void { const restoreStorage = (storage: object, storageKey: string) => { - const transactions = this.#wallet.data().get(storageKey, {}); + const transactions: object | undefined = this.#wallet.data().get(storageKey, {}); + + if (!transactions) { + return; + } for (const [id, transaction] of Object.entries(transactions)) { this.assertHasValidIdentifier(id);