Socket
Socket
Sign inDemoInstall

@trezor/blockchain-link-utils

Package Overview
Dependencies
Maintainers
6
Versions
27
Alerts
File Explorer

Advanced tools

Socket logo

Install Socket

Detect and block malicious and high-risk dependencies

Install

@trezor/blockchain-link-utils - npm Package Compare versions

Comparing version 1.0.9 to 1.0.10

7

CHANGELOG.md

@@ -0,1 +1,8 @@

# 1.0.10
- fix(blockchain-link): add solana vout for self txs (ab6f0acf0)
- chore(connect): use `tslib` as dependency in all public libs (606ecc63b)
- chore(repo): update tsx (53de3e3a8)
- feat(suite): add Solana support (f2a89b34f)
# 1.0.9

@@ -2,0 +9,0 @@

6

lib/blockbook.js
"use strict";
var __importDefault = (this && this.__importDefault) || function (mod) {
return (mod && mod.__esModule) ? mod : { "default": mod };
};
Object.defineProperty(exports, "__esModule", { value: true });
exports.transformAccountUtxo = exports.transformAccountInfo = exports.transformAddresses = exports.transformTokenInfo = exports.transformTransaction = exports.isTxFailed = exports.filterEthereumInternalTransfers = exports.filterTokenTransfers = exports.transformServerInfo = void 0;
const bignumber_js_1 = __importDefault(require("bignumber.js"));
const tslib_1 = require("tslib");
const bignumber_js_1 = tslib_1.__importDefault(require("bignumber.js"));
const utils_1 = require("./utils");

@@ -9,0 +7,0 @@ const transformServerInfo = (payload) => {

"use strict";
var __importDefault = (this && this.__importDefault) || function (mod) {
return (mod && mod.__esModule) ? mod : { "default": mod };
};
Object.defineProperty(exports, "__esModule", { value: true });
exports.transformAccountInfo = exports.transformTransaction = exports.filterTokenTransfers = exports.transformInputOutput = exports.transformTokenInfo = exports.parseAsset = exports.getSubtype = exports.transformUtxos = void 0;
const bignumber_js_1 = __importDefault(require("bignumber.js"));
const tslib_1 = require("tslib");
const bignumber_js_1 = tslib_1.__importDefault(require("bignumber.js"));
const utils_1 = require("./utils");

@@ -9,0 +7,0 @@ const transformUtxos = (utxos) => {

"use strict";
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
if (k2 === undefined) k2 = k;
var desc = Object.getOwnPropertyDescriptor(m, k);
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
desc = { enumerable: true, get: function() { return m[k]; } };
}
Object.defineProperty(o, k2, desc);
}) : (function(o, m, k, k2) {
if (k2 === undefined) k2 = k;
o[k2] = m[k];
}));
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
Object.defineProperty(o, "default", { enumerable: true, value: v });
}) : function(o, v) {
o["default"] = v;
});
var __exportStar = (this && this.__exportStar) || function(m, exports) {
for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
};
var __importStar = (this && this.__importStar) || function (mod) {
if (mod && mod.__esModule) return mod;
var result = {};
if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
__setModuleDefault(result, mod);
return result;
};
Object.defineProperty(exports, "__esModule", { value: true });
exports.solanaUtils = exports.blockfrostUtils = exports.blockbookUtils = void 0;
__exportStar(require("./utils"), exports);
exports.blockbookUtils = __importStar(require("./blockbook"));
exports.blockfrostUtils = __importStar(require("./blockfrost"));
exports.solanaUtils = __importStar(require("./solana"));
const tslib_1 = require("tslib");
tslib_1.__exportStar(require("./utils"), exports);
exports.blockbookUtils = tslib_1.__importStar(require("./blockbook"));
exports.blockfrostUtils = tslib_1.__importStar(require("./blockfrost"));
exports.solanaUtils = tslib_1.__importStar(require("./solana"));
//# sourceMappingURL=index.js.map

@@ -12,3 +12,4 @@ import BigNumber from 'bignumber.js';

export declare const SYSTEM_PROGRAM_PUBLIC_KEY = "11111111111111111111111111111111";
export declare const WSOL_MINT_LOWERCASE: string;
export declare const WSOL_MINT = "So11111111111111111111111111111111111111112";
export declare const getTokenMetadata: () => Promise<TokenDetailByMint>;
export declare const getTokenNameAndSymbol: (mint: string, tokenDetailByMint: TokenDetailByMint) => {

@@ -30,7 +31,7 @@ name: string;

export declare const getTxType: (transaction: ParsedTransactionWithMeta, effects: TransactionEffect[], accountAddress: string, tokenTransfers: TokenTransfer[]) => Transaction['type'];
export declare const getDetails: (transaction: ParsedTransactionWithMeta, effects: TransactionEffect[], accountAddress: string) => Transaction['details'];
export declare const getDetails: (transaction: ParsedTransactionWithMeta, effects: TransactionEffect[], accountAddress: string, txType: Transaction['type']) => Transaction['details'];
export declare const getAmount: (accountEffect: TransactionEffect | undefined, txType: Transaction['type']) => string;
export declare const getTokens: (tx: ParsedTransactionWithMeta, accountAddress: string) => TokenTransfer[];
export declare const transformTransaction: (tx: SolanaValidParsedTxWithMeta, accountAddress: string, slotToBlockHeightMapping: Record<number, number | null>) => Transaction;
export declare const getTokens: (tx: ParsedTransactionWithMeta, accountAddress: string, tokenDetailByMint: TokenDetailByMint) => TokenTransfer[];
export declare const transformTransaction: (tx: SolanaValidParsedTxWithMeta, accountAddress: string) => Promise<Transaction>;
export {};
//# sourceMappingURL=solana.d.ts.map
"use strict";
var __importDefault = (this && this.__importDefault) || function (mod) {
return (mod && mod.__esModule) ? mod : { "default": mod };
};
Object.defineProperty(exports, "__esModule", { value: true });
exports.transformTransaction = exports.getTokens = exports.getAmount = exports.getDetails = exports.getTxType = exports.getTargets = exports.getNativeEffects = exports.extractAccountBalanceDiff = exports.transformTokenInfo = exports.getTokenNameAndSymbol = exports.WSOL_MINT_LOWERCASE = exports.SYSTEM_PROGRAM_PUBLIC_KEY = exports.ASSOCIATED_TOKEN_PROGRAM_PUBLIC_KEY = exports.TOKEN_PROGRAM_PUBLIC_KEY = void 0;
exports.transformTransaction = exports.getTokens = exports.getAmount = exports.getDetails = exports.getTxType = exports.getTargets = exports.getNativeEffects = exports.extractAccountBalanceDiff = exports.transformTokenInfo = exports.getTokenNameAndSymbol = exports.getTokenMetadata = exports.WSOL_MINT = exports.SYSTEM_PROGRAM_PUBLIC_KEY = exports.ASSOCIATED_TOKEN_PROGRAM_PUBLIC_KEY = exports.TOKEN_PROGRAM_PUBLIC_KEY = void 0;
const tslib_1 = require("tslib");
const ts_belt_1 = require("@mobily/ts-belt");
const bignumber_js_1 = __importDefault(require("bignumber.js"));
const bignumber_js_1 = tslib_1.__importDefault(require("bignumber.js"));
const utils_1 = require("@trezor/utils");

@@ -13,6 +11,16 @@ exports.TOKEN_PROGRAM_PUBLIC_KEY = 'TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA';

exports.SYSTEM_PROGRAM_PUBLIC_KEY = '11111111111111111111111111111111';
const WSOL_MINT = 'So11111111111111111111111111111111111111112';
exports.WSOL_MINT_LOWERCASE = WSOL_MINT.toLowerCase();
exports.WSOL_MINT = 'So11111111111111111111111111111111111111112';
const solanaTokenListUrl = 'https://cdn.jsdelivr.net/gh/viaprotocol/tokenlists/all_tokens/solana.json';
const getTokenMetadata = () => tslib_1.__awaiter(void 0, void 0, void 0, function* () {
const tokenListResult = yield (yield fetch(solanaTokenListUrl)).json();
const tokenMap = tokenListResult.reduce((acc, token) => (Object.assign({ [token.address]: {
name: token.name,
symbol: token.symbol,
} }, acc)), {});
tokenMap[exports.WSOL_MINT].symbol = 'WSOL';
return tokenMap;
});
exports.getTokenMetadata = getTokenMetadata;
const getTokenNameAndSymbol = (mint, tokenDetailByMint) => {
const tokenDetail = tokenDetailByMint[mint.toLowerCase()];
const tokenDetail = tokenDetailByMint[mint];
return tokenDetail

@@ -79,3 +87,3 @@ ? { name: tokenDetail.name, symbol: tokenDetail.symbol }

exports.extractAccountBalanceDiff = extractAccountBalanceDiff;
const isWSolTransfer = (ixs) => ixs.find(ix => { var _a; return 'parsed' in ix && ((_a = ix.parsed.info) === null || _a === void 0 ? void 0 : _a.mint) === WSOL_MINT; });
const isWSolTransfer = (ixs) => ixs.find(ix => { var _a; return 'parsed' in ix && ((_a = ix.parsed.info) === null || _a === void 0 ? void 0 : _a.mint) === exports.WSOL_MINT; });
function getNativeEffects(transaction) {

@@ -173,15 +181,20 @@ const wSolTransferInstruction = isWSolTransfer(transaction.transaction.message.instructions || []);

exports.getTxType = getTxType;
const getDetails = (transaction, effects, accountAddress) => {
const getDetails = (transaction, effects, accountAddress, txType) => {
var _a;
const senders = effects.filter(({ amount }) => amount.isNegative());
const receivers = effects.filter(({ amount }) => amount.isPositive());
const getVin = (effect, i) => ({
const getVin = ({ address, amount }, i) => ({
txid: transaction.transaction.signatures[0].toString(),
version: transaction.version,
isAddress: true,
isAccountOwned: effect.address === accountAddress,
isAccountOwned: address === accountAddress,
n: i,
value: effect.amount.abs().toString(),
addresses: [effect.address],
value: amount === null || amount === void 0 ? void 0 : amount.abs().toString(),
addresses: [address],
});
const vin = senders.map((sender, i) => getVin(sender, i));
const vout = receivers.map((receiver, i) => getVin(receiver, i));
if (txType === 'self') {
vout.push(getVin({ address: accountAddress }, vout.length));
}
return {

@@ -195,4 +208,4 @@ size: ((_a = transaction.meta) === null || _a === void 0 ? void 0 : _a.computeUnitsConsumed) || 0,

.toString(),
vin: senders.map((sender, i) => getVin(sender, i)),
vout: receivers.map((receiver, i) => getVin(receiver, i)),
vin,
vout,
};

@@ -212,3 +225,3 @@ };

exports.getAmount = getAmount;
const getTokens = (tx, accountAddress) => {
const getTokens = (tx, accountAddress, tokenDetailByMint) => {
const effects = tx.transaction.message.instructions

@@ -222,13 +235,3 @@ .filter((ix) => 'parsed' in ix)

const uiType = parsed.info.authority === accountAddress ? 'sent' : 'recv';
return {
type: uiType,
standard: 'SPL',
from: parsed.info.authority,
to: parsed.info.destination,
contract: parsed.info.mint,
decimals: ((_a = parsed.info.tokenAmount) === null || _a === void 0 ? void 0 : _a.decimals) || 0,
name: parsed.info.mint,
symbol: `${parsed.info.mint.slice(0, 3)}...`,
amount: ((_b = parsed.info.tokenAmount) === null || _b === void 0 ? void 0 : _b.amount) || '-1',
};
return Object.assign(Object.assign({ type: uiType, standard: 'SPL', from: parsed.info.authority, to: parsed.info.destination, contract: parsed.info.mint, decimals: ((_a = parsed.info.tokenAmount) === null || _a === void 0 ? void 0 : _a.decimals) || 0 }, (0, exports.getTokenNameAndSymbol)(parsed.info.mint, tokenDetailByMint)), { amount: ((_b = parsed.info.tokenAmount) === null || _b === void 0 ? void 0 : _b.amount) || '-1' });
});

@@ -238,9 +241,10 @@ return effects;

exports.getTokens = getTokens;
const transformTransaction = (tx, accountAddress, slotToBlockHeightMapping) => {
const transformTransaction = (tx, accountAddress) => tslib_1.__awaiter(void 0, void 0, void 0, function* () {
const tokenDetailByMint = yield (0, exports.getTokenMetadata)();
const nativeEffects = getNativeEffects(tx);
const tokens = (0, exports.getTokens)(tx, accountAddress);
const tokens = (0, exports.getTokens)(tx, accountAddress, tokenDetailByMint);
const type = (0, exports.getTxType)(tx, nativeEffects, accountAddress, tokens);
const targets = (0, exports.getTargets)(nativeEffects, type, accountAddress);
const amount = (0, exports.getAmount)(nativeEffects.find(({ address }) => address === accountAddress), type);
const details = (0, exports.getDetails)(tx, nativeEffects, accountAddress);
const details = (0, exports.getDetails)(tx, nativeEffects, accountAddress, type);
return {

@@ -256,7 +260,9 @@ type,

details,
blockHeight: slotToBlockHeightMapping[tx.slot] || undefined,
blockHash: tx.transaction.message.recentBlockhash,
solanaSpecific: {
status: 'confirmed',
},
};
};
});
exports.transformTransaction = transformTransaction;
//# sourceMappingURL=solana.js.map
"use strict";
var __importDefault = (this && this.__importDefault) || function (mod) {
return (mod && mod.__esModule) ? mod : { "default": mod };
};
Object.defineProperty(exports, "__esModule", { value: true });
exports.sortTxsFromLatest = exports.transformTarget = exports.sumVinVout = exports.enhanceVinVout = exports.filterTargets = exports.isAccountOwned = void 0;
const bignumber_js_1 = __importDefault(require("bignumber.js"));
const tslib_1 = require("tslib");
const bignumber_js_1 = tslib_1.__importDefault(require("bignumber.js"));
const utils_1 = require("@trezor/utils");

@@ -9,0 +7,0 @@ const isAccountOwned = (addresses) => (vinVout) => Array.isArray(vinVout === null || vinVout === void 0 ? void 0 : vinVout.addresses) && vinVout.addresses.some(a => addresses.includes(a));

{
"name": "@trezor/blockchain-link-utils",
"version": "1.0.9",
"version": "1.0.10",
"license": "See LICENSE.md in repo root",

@@ -22,13 +22,16 @@ "sideEffects": false,

"@solana/web3.js": "^1.87.6",
"@trezor/utils": "9.0.15",
"@trezor/utils": "9.0.16",
"bignumber.js": "^9.1.1"
},
"devDependencies": {
"@trezor/blockchain-link-types": "1.0.8",
"@trezor/blockchain-link-types": "1.0.9",
"@trezor/type-utils": "1.0.2",
"jest": "29.5.0",
"rimraf": "^5.0.5",
"tsx": "^3.14.0",
"tsx": "^4.6.2",
"typescript": "5.3.2"
},
"peerDependencies": {
"tslib": "^2.6.2"
}
}
SocketSocket SOC 2 Logo

Product

  • Package Alerts
  • Integrations
  • Docs
  • Pricing
  • FAQ
  • Roadmap
  • Changelog

Packages

npm

Stay in touch

Get open source security insights delivered straight into your inbox.


  • Terms
  • Privacy
  • Security

Made with ⚡️ by Socket Inc