From 59f7b545b00e8dbf96b7d261cdc25c909903dc73 Mon Sep 17 00:00:00 2001 From: Nikos Baxevanis Date: Mon, 23 Oct 2023 17:55:02 +0200 Subject: [PATCH] feat: add utility for displaying shortened Stacks and Bitcoin addresses - Implement `shortenString` function for concise representation in property-based tests. - Enhance readability in asset.clar contract tests by abbreviating Stacks addresses and Bitcoin transaction hashes. --- romeo/asset-contract/tests/asset_BurnCommand.ts | 3 ++- romeo/asset-contract/tests/asset_BurnCommand_500.ts | 3 ++- romeo/asset-contract/tests/asset_CommandModel.ts | 13 +++++++++++++ .../asset-contract/tests/asset_GetBalanceCommand.ts | 9 +++++++-- .../tests/asset_GetTotalSupplyCommand.ts | 9 +++++++-- romeo/asset-contract/tests/asset_MintCommand.ts | 5 +++-- romeo/asset-contract/tests/asset_MintCommand_500.ts | 3 ++- romeo/asset-contract/tests/asset_TransferCommand.ts | 11 ++++++++--- .../tests/asset_TransferCommand_NonOwner.ts | 9 +++++++-- 9 files changed, 51 insertions(+), 14 deletions(-) diff --git a/romeo/asset-contract/tests/asset_BurnCommand.ts b/romeo/asset-contract/tests/asset_BurnCommand.ts index ceb6f8de..07cdc1e9 100644 --- a/romeo/asset-contract/tests/asset_BurnCommand.ts +++ b/romeo/asset-contract/tests/asset_BurnCommand.ts @@ -3,6 +3,7 @@ import { BitcoinTxData, Real, Stub, + shortenString } from "./asset_CommandModel.ts"; import { tx } from "@hirosystems/clarinet-sdk"; @@ -92,7 +93,7 @@ export class BurnCommand implements AssetCommand { ]); console.log( - `✓ ${this.sender.padStart(8, " ")} ${"burn".padStart(16, " ") } ${this.wallet.padStart(8, " ")} ${this.amount.toString().padStart(12, " ")} bitcoin tx ${uint8ArrayToHexString(this.params.depositTx).padStart(12, " ")}` + `✓ ${shortenString(this.sender).padStart(8, " ")} ${"burn".padStart(16, " ") } ${shortenString(this.wallet).padStart(8, " ")} ${this.amount.toString().padStart(12, " ")} bitcoin tx ${shortenString(uint8ArrayToHexString(this.params.depositTx)).padStart(12, " ")}` ); } diff --git a/romeo/asset-contract/tests/asset_BurnCommand_500.ts b/romeo/asset-contract/tests/asset_BurnCommand_500.ts index d0854828..c4174403 100644 --- a/romeo/asset-contract/tests/asset_BurnCommand_500.ts +++ b/romeo/asset-contract/tests/asset_BurnCommand_500.ts @@ -3,6 +3,7 @@ import { BitcoinTxData, Real, Stub, + shortenString } from "./asset_CommandModel.ts"; import { tx } from "@hirosystems/clarinet-sdk"; @@ -68,7 +69,7 @@ export class BurnCommand_500 implements AssetCommand { expect(block[1].result).toBeErr(Cl.uint(500)); console.log( - `! ${this.sender.padStart(8, " ")} ${"burn".padStart(16, " ") } ${this.wallet.padStart(8, " ")} ${this.amount.toString().padStart(12, " ")} bitcoin tx ${uint8ArrayToHexString(this.params.depositTx).padStart(12, " ")} (expected, same bitcoin tx)` + `! ${shortenString(this.sender).padStart(8, " ")} ${"burn".padStart(16, " ") } ${shortenString(this.wallet).padStart(8, " ")} ${this.amount.toString().padStart(12, " ")} bitcoin tx ${shortenString(uint8ArrayToHexString(this.params.depositTx)).padStart(12, " ")} (expected, same bitcoin tx)` ); } diff --git a/romeo/asset-contract/tests/asset_CommandModel.ts b/romeo/asset-contract/tests/asset_CommandModel.ts index f7d60bee..0b1f4866 100644 --- a/romeo/asset-contract/tests/asset_CommandModel.ts +++ b/romeo/asset-contract/tests/asset_CommandModel.ts @@ -22,3 +22,16 @@ export interface BitcoinTxData { blockHeader: Uint8Array; blockHeaderHash: Uint8Array; } + +export function shortenString( + address: string, + charsToShow: number = 4, + delimiter: string = "...", +): string { + if (address.length <= charsToShow * 2 + delimiter.length) { + return address; + } + const start = address.substring(0, charsToShow); + const end = address.substring(address.length - charsToShow); + return start + delimiter + end; +} diff --git a/romeo/asset-contract/tests/asset_GetBalanceCommand.ts b/romeo/asset-contract/tests/asset_GetBalanceCommand.ts index c0733a5f..dd1127f3 100644 --- a/romeo/asset-contract/tests/asset_GetBalanceCommand.ts +++ b/romeo/asset-contract/tests/asset_GetBalanceCommand.ts @@ -1,4 +1,9 @@ -import { AssetCommand, Real, Stub } from "./asset_CommandModel.ts"; +import { + AssetCommand, + Real, + Stub, + shortenString +} from "./asset_CommandModel.ts"; import { Cl } from "@stacks/transactions"; @@ -40,7 +45,7 @@ export class GetBalanceCommand implements AssetCommand { ); console.log( - `✓ ${this.sender.padStart(8, " ")} ${`get-balance`.padStart(16, " ")} ${this.wallet.padStart(8, " ")} ${expected.toString().padStart(12, " ")}`, + `✓ ${shortenString(this.sender).padStart(8, " ")} ${`get-balance`.padStart(16, " ")} ${shortenString(this.wallet).padStart(8, " ")} ${expected.toString().padStart(12, " ")}`, ); } diff --git a/romeo/asset-contract/tests/asset_GetTotalSupplyCommand.ts b/romeo/asset-contract/tests/asset_GetTotalSupplyCommand.ts index d0682a2b..017b6b49 100644 --- a/romeo/asset-contract/tests/asset_GetTotalSupplyCommand.ts +++ b/romeo/asset-contract/tests/asset_GetTotalSupplyCommand.ts @@ -1,4 +1,9 @@ -import { AssetCommand, Real, Stub } from "./asset_CommandModel.ts"; +import { + AssetCommand, + Real, + Stub, + shortenString +} from "./asset_CommandModel.ts"; import { Cl } from "@stacks/transactions"; @@ -31,7 +36,7 @@ export class GetTotalSupplyCommand implements AssetCommand { expect(result).toBeOk(Cl.uint(supply)); console.log( - `✓ ${this.sender.padStart(8, " ")} ${`get-total-supply`.padStart(16, " ")} ${supply.toString().padStart(21, " ")}`, + `✓ ${shortenString(this.sender).padStart(8, " ")} ${`get-total-supply`.padStart(16, " ")} ${supply.toString().padStart(24, " ")}`, ); } diff --git a/romeo/asset-contract/tests/asset_MintCommand.ts b/romeo/asset-contract/tests/asset_MintCommand.ts index 8e4fd03e..0a0e8c50 100644 --- a/romeo/asset-contract/tests/asset_MintCommand.ts +++ b/romeo/asset-contract/tests/asset_MintCommand.ts @@ -3,6 +3,7 @@ import { BitcoinTxData, Real, Stub, + shortenString } from "./asset_CommandModel.ts"; import { tx } from "@hirosystems/clarinet-sdk"; @@ -88,7 +89,7 @@ export class MintCommand implements AssetCommand { ]); console.log( - `✓ ${this.sender.padStart(8, " ")} ${"mint".padStart(16, " ") } ${this.wallet.padStart(8, " ")} ${this.amount.toString().padStart(12, " ")} bitcoin tx ${uint8ArrayToHexString(this.params.depositTx).padStart(12, " ")}` + `✓ ${shortenString(this.sender).padStart(8, " ")} ${"mint".padStart(16, " ") } ${shortenString(this.wallet).padStart(8, " ")} ${this.amount.toString().padStart(12, " ")} bitcoin tx ${shortenString(uint8ArrayToHexString(this.params.depositTx)).padStart(12, " ")}` ); } @@ -96,7 +97,7 @@ export class MintCommand implements AssetCommand { // fast-check will call toString() in case of errors, e.g. property failed. // It will then make a minimal counterexample, a process called 'shrinking' // https://github.com/dubzzz/fast-check/issues/2864#issuecomment-1098002642 - return `${this.sender} mint ${this.amount} to ${this.wallet} (bitcoin tx ${uint8ArrayToHexString(this.params.depositTx).padStart(12, " ")})`; + return `${shortenString(this.sender)} mint ${this.amount} to ${shortenString(this.wallet)} (bitcoin tx ${uint8ArrayToHexString(this.params.depositTx).padStart(12, " ")})`; } } diff --git a/romeo/asset-contract/tests/asset_MintCommand_500.ts b/romeo/asset-contract/tests/asset_MintCommand_500.ts index 2ff0d8d7..b3a0571a 100644 --- a/romeo/asset-contract/tests/asset_MintCommand_500.ts +++ b/romeo/asset-contract/tests/asset_MintCommand_500.ts @@ -3,6 +3,7 @@ import { BitcoinTxData, Real, Stub, + shortenString } from "./asset_CommandModel.ts"; import { tx } from "@hirosystems/clarinet-sdk"; @@ -67,7 +68,7 @@ export class MintCommand_500 implements AssetCommand { expect(block[1].result).toBeErr(Cl.uint(500)); console.log( - `! ${this.sender.padStart(8, " ")} ${"mint".padStart(16, " ") } ${this.wallet.padStart(8, " ")} ${this.amount.toString().padStart(12, " ")} bitcoin tx ${uint8ArrayToHexString(this.params.depositTx).padStart(12, " ")} (expected, same bitcoin tx)` + `! ${shortenString(this.sender).padStart(8, " ")} ${"mint".padStart(16, " ") } ${shortenString(this.wallet).padStart(8, " ")} ${this.amount.toString().padStart(12, " ")} bitcoin tx ${shortenString(uint8ArrayToHexString(this.params.depositTx)).padStart(12, " ")} (expected, same bitcoin tx)` ); } diff --git a/romeo/asset-contract/tests/asset_TransferCommand.ts b/romeo/asset-contract/tests/asset_TransferCommand.ts index 1bac764a..0321584f 100644 --- a/romeo/asset-contract/tests/asset_TransferCommand.ts +++ b/romeo/asset-contract/tests/asset_TransferCommand.ts @@ -1,4 +1,9 @@ -import { AssetCommand, Real, Stub } from "./asset_CommandModel.ts"; +import { + AssetCommand, + Real, + Stub, + shortenString +} from "./asset_CommandModel.ts"; import { tx } from "@hirosystems/clarinet-sdk"; import { Cl } from "@stacks/transactions"; @@ -30,7 +35,7 @@ export class TransferCommand implements AssetCommand { return true; } else { console.log( - `! ${this.sender.padStart(8, " ")} ${"transfer".padStart(16, " ") } ${this.wallet.padStart(8, " ")} ${this.amount.toString().padStart(12, " ") } (discarded)` + `! ${shortenString(this.sender).padStart(8, " ")} ${"transfer".padStart(16, " ") } ${shortenString(this.wallet).padStart(8, " ")} ${this.amount.toString().padStart(12, " ") } (discarded)` ); return false; } @@ -63,7 +68,7 @@ export class TransferCommand implements AssetCommand { ); console.log( - `✓ ${this.sender.padStart(8, " ")} ${"transfer".padStart(16, " ") } ${this.wallet.padStart(8, " ")} ${this.amount.toString().padStart(12, " ") }` + `✓ ${shortenString(this.sender).padStart(8, " ")} ${"transfer".padStart(16, " ") } ${shortenString(this.wallet).padStart(8, " ")} ${this.amount.toString().padStart(12, " ") }` ); } diff --git a/romeo/asset-contract/tests/asset_TransferCommand_NonOwner.ts b/romeo/asset-contract/tests/asset_TransferCommand_NonOwner.ts index 754360d7..3af7bfc6 100644 --- a/romeo/asset-contract/tests/asset_TransferCommand_NonOwner.ts +++ b/romeo/asset-contract/tests/asset_TransferCommand_NonOwner.ts @@ -1,4 +1,9 @@ -import { AssetCommand, Real, Stub } from "./asset_CommandModel.ts"; +import { + AssetCommand, + Real, + Stub, + shortenString +} from "./asset_CommandModel.ts"; import { tx } from "@hirosystems/clarinet-sdk"; import { Cl } from "@stacks/transactions"; @@ -47,7 +52,7 @@ export class TransferCommand_NonOwner implements AssetCommand { expect(block[0].result).toBeErr(Cl.uint(2)); console.log( - `! ${this.sender.padStart(8, " ")} ${"transfer".padStart(16, " ") } ${this.wallet.padStart(8, " ")} ${this.amount.toString().padStart(12, " ") } (expected, non-owner)` + `! ${shortenString(this.sender).padStart(8, " ")} ${"transfer".padStart(16, " ") } ${shortenString(this.wallet).padStart(8, " ")} ${this.amount.toString().padStart(12, " ") } (expected, non-owner)` ); }