Skip to content

Commit 773d99b

Browse files
committed
PR comments
Signed-off-by: Ravindra Meena <rmeena840@gmail.com>
1 parent 0662d07 commit 773d99b

File tree

2 files changed

+43
-10
lines changed

2 files changed

+43
-10
lines changed

packages/btcindexer/src/btc-address-utils.ts

Lines changed: 18 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,13 +1,9 @@
11
import { Transaction, payments, script } from "bitcoinjs-lib";
22
import { logError } from "@gonative-cc/lib/logger";
3-
import type { D1Database } from "@cloudflare/workers-types";
43
import { BtcNet } from "@gonative-cc/lib/nbtc";
5-
import { btcNetworkCfg } from "./models";
4+
import { btcNetworkCfg, type MintBatchArg } from "./models";
65

7-
export async function extractSenderAddress(
8-
tx: Transaction,
9-
btcNetwork: BtcNet,
10-
): Promise<string | null> {
6+
async function extractSenderAddress(tx: Transaction, btcNetwork: BtcNet): Promise<string | null> {
117
try {
128
if (tx.ins.length === 0) return null;
139

@@ -49,3 +45,19 @@ export async function extractSenderAddress(
4945
return null;
5046
}
5147
}
48+
49+
export async function extractAllSenderAddress(
50+
mintArgs: MintBatchArg[],
51+
btcNet: BtcNet,
52+
): Promise<Map<number, string | null>> {
53+
const senderAddressMap = new Map<number, string | null>();
54+
await Promise.all(
55+
mintArgs.map(async (args, i) => {
56+
if (args) {
57+
const senderAddress = await extractSenderAddress(args.tx, btcNet);
58+
senderAddressMap.set(i, senderAddress);
59+
}
60+
}),
61+
);
62+
return senderAddressMap;
63+
}

packages/btcindexer/src/btcindexer.ts

Lines changed: 25 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -42,7 +42,7 @@ import { ElectrsService, ELECTRS_URLS_BY_NETWORK } from "./electrs";
4242
import { fetchNbtcAddresses, fetchPackageConfigs, type Storage } from "./storage";
4343
import { CFStorage } from "./cf-storage";
4444
import type { PutNbtcTxResponse } from "./rpc-interface";
45-
import { extractSenderAddress } from "./btc-address-utils";
45+
import { extractAllSenderAddress } from "./btc-address-utils";
4646
import type { ComplianceRpc } from "@gonative-cc/lib/rpc-types";
4747

4848
interface ConfirmingTxCandidate<T> {
@@ -710,16 +710,37 @@ export class Indexer {
710710
const client = this.getSuiClient(config.sui_network);
711711
const pkgKey = config.nbtc_pkg;
712712

713-
// Filter out sanctioned addresses before minting
713+
// Extract all sender addresses at once
714+
const senderAddressMap: Map<number, string | null> = await extractAllSenderAddress(
715+
mintArgs,
716+
config.btc_network,
717+
);
718+
719+
// Check all addresses for blocking at once
720+
const uniqueAddresses = [
721+
...new Set(
722+
Array.from(senderAddressMap.values()).filter((a): a is string => a !== null),
723+
),
724+
];
725+
const blockedAddressSet = new Set<string>();
726+
await Promise.all(
727+
uniqueAddresses.map(async (addr) => {
728+
if (await this.compliance.isBtcBlocked(addr)) {
729+
blockedAddressSet.add(addr);
730+
}
731+
}),
732+
);
733+
734+
// Filter out sanctioned addresses
714735
const filteredMintArgs: MintBatchArg[] = [];
715736
const filteredProcessedKeys: ProcessedKey[] = [];
716737

717738
for (let i = 0; i < mintArgs.length; i++) {
718739
const args = mintArgs[i];
719740
if (!args) continue;
720741

721-
const senderAddress = await extractSenderAddress(args.tx, config.btc_network);
722-
if (senderAddress && (await this.compliance.isBtcBlocked(senderAddress))) {
742+
const senderAddress = senderAddressMap.get(i);
743+
if (senderAddress && blockedAddressSet.has(senderAddress)) {
723744
logger.error({
724745
msg: "Sanctioned address detected, skipping mint",
725746
txId: args.tx.getId(),

0 commit comments

Comments
 (0)