@ledgerhq/coin-tron
Version:
Ledger Tron Coin integration
81 lines (72 loc) • 2.45 kB
text/typescript
import getAddressWrapper from "@ledgerhq/coin-framework/bridge/getAddressWrapper";
import {
getSerializedAddressParameters,
updateTransaction,
makeAccountBridgeReceive,
makeScanAccounts,
} from "@ledgerhq/coin-framework/bridge/jsHelpers";
import { CoinConfig } from "@ledgerhq/coin-framework/config";
import { SignerContext } from "@ledgerhq/coin-framework/signer";
import type { AccountBridge, CurrencyBridge } from "@ledgerhq/types-live";
import { type Transaction, TronAccount, TronSigner } from "../types";
import signerGetAddress from "../signer";
import broadcast from "./broadcast";
import createTransaction from "./createTransaction";
import estimateMaxSpendable from "./estimateMaxSpendable";
import getTransactionStatus from "./getTransactionStatus";
import { hydrate, preload } from "./preload";
import { prepareTransaction } from "./prepareTransaction";
import {
assignFromAccountRaw,
assignToAccountRaw,
fromOperationExtraRaw,
toOperationExtraRaw,
} from "./serialization";
import { buildSignOperation } from "./signOperation";
import { getAccountShape, sync } from "./synchronization";
import tronCoinConfig, { type TronCoinConfig } from "../config";
function buildCurrencyBridge(signerContext: SignerContext<TronSigner>): CurrencyBridge {
const getAddress = signerGetAddress(signerContext);
const scanAccounts = makeScanAccounts({
getAccountShape,
getAddressFn: getAddressWrapper(getAddress),
});
return {
preload,
hydrate,
scanAccounts,
};
}
function buildAccountBridge(
signerContext: SignerContext<TronSigner>,
): AccountBridge<Transaction, TronAccount> {
const getAddress = signerGetAddress(signerContext);
const receive = makeAccountBridgeReceive(getAddressWrapper(getAddress));
const signOperation = buildSignOperation(signerContext);
return {
estimateMaxSpendable,
createTransaction,
updateTransaction,
getTransactionStatus,
prepareTransaction,
sync,
receive,
signOperation,
broadcast,
assignFromAccountRaw,
assignToAccountRaw,
fromOperationExtraRaw,
toOperationExtraRaw,
getSerializedAddressParameters,
};
}
export function createBridges(
signerContext: SignerContext<TronSigner>,
coinConfig: CoinConfig<TronCoinConfig>,
) {
tronCoinConfig.setCoinConfig(coinConfig);
return {
currencyBridge: buildCurrencyBridge(signerContext),
accountBridge: buildAccountBridge(signerContext),
};
}