UNPKG

@ton-keychain/trx

Version:

SDK for creating multi account mnemonics, plugin for tron

86 lines (80 loc) 2.65 kB
// src/index.ts import { getNthAccountTon } from "@ton-keychain/core"; // src/keychain-trx-accounts-provider.ts import { entropyToMnemonic } from "@scure/bip39"; import { wordlist } from "@scure/bip39/wordlists/english"; import { hmac } from "@noble/hashes/hmac"; import { sha256 as sha2562 } from "@noble/hashes/sha256"; // src/utils.ts import { decodeBase58, encodeBase58, sha256 } from "ethers"; var TronAddress = { hexToBase58(address) { const tronAddressPayload = "0x41" + address.slice(2); const checkSumTail = sha256(sha256(tronAddressPayload)).slice(2, 10); return encodeBase58(tronAddressPayload + checkSumTail); }, base58ToHex(address) { const decoded = decodeBase58(address).toString(16); return "0x" + decoded.slice(2, -8); } }; // src/keychain-trx-account.ts var KeychainTrxAccount = class { constructor(hdAccount) { this.hdAccount = hdAccount; this.address = TronAddress.hexToBase58(this.hexAddress); } get hexAddress() { return this.hdAccount.address; } get privateKey() { return this.hdAccount.privateKey; } get publicKey() { return this.hdAccount.publicKey; } address; }; // src/keychain-trx-accounts-provider.ts import { ethers } from "ethers"; var KeychainTrxAccountsProvider = class _KeychainTrxAccountsProvider { constructor(mnemonics, hdAccount) { this.mnemonics = mnemonics; this.hdAccount = hdAccount; } static MNEMONICS_WORDS_NUMBER = 12; static CHECKSUM_BITS = 4; static BASE_DERIVATION_PATH = "m/44'/195'/0'/0"; static NETWORK_LABEL = "trx-0x2b6653dc_root"; static fromEntropy(entropy) { const networkEntropy = this.patchEntropy(entropy); const mnemonics = entropyToMnemonic(networkEntropy, wordlist); const hdAccount = ethers.HDNodeWallet.fromPhrase( mnemonics, void 0, this.BASE_DERIVATION_PATH ); return new _KeychainTrxAccountsProvider(mnemonics.split(" "), hdAccount); } static patchEntropy(seed) { return hmac(sha2562, this.NETWORK_LABEL, seed).subarray( 0, (_KeychainTrxAccountsProvider.MNEMONICS_WORDS_NUMBER * 11 - _KeychainTrxAccountsProvider.CHECKSUM_BITS) / 8 ); } getAccount(index = 0) { return new KeychainTrxAccount(this.hdAccount.deriveChild(index)); } }; // src/index.ts async function getNthAccountTrx(rootMnemonic, childIndex) { const tonAccount = await getNthAccountTon(rootMnemonic, childIndex); const trxProvider = KeychainTrxAccountsProvider.fromEntropy(tonAccount.entropy); return trxProvider.getAccount(); } export { KeychainTrxAccount, KeychainTrxAccountsProvider, TronAddress as TronAddressUtils, getNthAccountTrx };