Skip to content

Commit

Permalink
feat: add utility for displaying shortened Stacks and Bitcoin addresses
Browse files Browse the repository at this point in the history
- 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.
  • Loading branch information
moodmosaic committed Oct 25, 2023
1 parent 84f1bb9 commit 59f7b54
Show file tree
Hide file tree
Showing 9 changed files with 51 additions and 14 deletions.
3 changes: 2 additions & 1 deletion romeo/asset-contract/tests/asset_BurnCommand.ts
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,7 @@ import {
BitcoinTxData,
Real,
Stub,
shortenString
} from "./asset_CommandModel.ts";

import { tx } from "@hirosystems/clarinet-sdk";
Expand Down Expand Up @@ -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, " ")}`
);
}

Expand Down
3 changes: 2 additions & 1 deletion romeo/asset-contract/tests/asset_BurnCommand_500.ts
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,7 @@ import {
BitcoinTxData,
Real,
Stub,
shortenString
} from "./asset_CommandModel.ts";

import { tx } from "@hirosystems/clarinet-sdk";
Expand Down Expand Up @@ -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)`
);
}

Expand Down
13 changes: 13 additions & 0 deletions romeo/asset-contract/tests/asset_CommandModel.ts
Original file line number Diff line number Diff line change
Expand Up @@ -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;
}
9 changes: 7 additions & 2 deletions romeo/asset-contract/tests/asset_GetBalanceCommand.ts
Original file line number Diff line number Diff line change
@@ -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";

Expand Down Expand Up @@ -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, " ")}`,
);
}

Expand Down
9 changes: 7 additions & 2 deletions romeo/asset-contract/tests/asset_GetTotalSupplyCommand.ts
Original file line number Diff line number Diff line change
@@ -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";

Expand Down Expand Up @@ -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, " ")}`,
);
}

Expand Down
5 changes: 3 additions & 2 deletions romeo/asset-contract/tests/asset_MintCommand.ts
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,7 @@ import {
BitcoinTxData,
Real,
Stub,
shortenString
} from "./asset_CommandModel.ts";

import { tx } from "@hirosystems/clarinet-sdk";
Expand Down Expand Up @@ -88,15 +89,15 @@ 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, " ")}`
);
}

toString() {
// 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, " ")})`;
}
}

Expand Down
3 changes: 2 additions & 1 deletion romeo/asset-contract/tests/asset_MintCommand_500.ts
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,7 @@ import {
BitcoinTxData,
Real,
Stub,
shortenString
} from "./asset_CommandModel.ts";

import { tx } from "@hirosystems/clarinet-sdk";
Expand Down Expand Up @@ -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)`
);
}

Expand Down
11 changes: 8 additions & 3 deletions romeo/asset-contract/tests/asset_TransferCommand.ts
Original file line number Diff line number Diff line change
@@ -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";
Expand Down Expand Up @@ -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;
}
Expand Down Expand Up @@ -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, " ") }`
);
}

Expand Down
9 changes: 7 additions & 2 deletions romeo/asset-contract/tests/asset_TransferCommand_NonOwner.ts
Original file line number Diff line number Diff line change
@@ -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";
Expand Down Expand Up @@ -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)`
);
}

Expand Down

0 comments on commit 59f7b54

Please sign in to comment.