Skip to content

Commit 984c3c9

Browse files
committed
PR comments
Signed-off-by: Ravindra Meena <rmeena840@gmail.com>
1 parent 3c25424 commit 984c3c9

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
@@ -41,7 +41,7 @@ import { ElectrsService, ELECTRS_URLS_BY_NETWORK } from "./electrs";
4141
import { fetchNbtcAddresses, fetchPackageConfigs, type Storage } from "./storage";
4242
import { CFStorage } from "./cf-storage";
4343
import type { PutNbtcTxResponse } from "./rpc-interface";
44-
import { extractSenderAddress } from "./btc-address-utils";
44+
import { extractAllSenderAddress } from "./btc-address-utils";
4545
import type { ComplianceRpc } from "@gonative-cc/lib/rpc-types";
4646

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

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

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

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

0 commit comments

Comments
 (0)