@xchainjs/xchain-doge 0.6.0 → 0.6.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/README.md CHANGED
@@ -80,6 +80,13 @@ import { Network, UtxoClientParams } from '@xchainjs/xchain-client'
80
80
  // override with your API key
81
81
  SochainDataProviders[Network.Mainnet].apiKey = 'YOU_SOCHAIN_API_KEY'
82
82
 
83
+ // or set in env variables so default config can access.
84
+ `SOCHAIN_API_KEY={YOURKEY}`
85
+ `BLOCKCYPHER_API_KEY={YOURKEY}`
86
+ //Default config can access.
87
+ process.env["BLOCKCYPHER_API_KEY"]
88
+ process.env["SOCHAIN_API_KEY"]
89
+
83
90
  //overridde the default init params with your onfig
84
91
  const initParams: UtxoClientParams = {
85
92
  ...defaultDogeParams,
package/lib/client.d.ts CHANGED
@@ -1,4 +1,4 @@
1
- import { Fee, FeeRate, TxHash, TxParams, UTXO, UTXOClient, UtxoClientParams } from '@xchainjs/xchain-client';
1
+ import { AssetInfo, Fee, FeeRate, TxHash, TxParams, UTXO, UTXOClient, UtxoClientParams } from '@xchainjs/xchain-client';
2
2
  import { Address } from '@xchainjs/xchain-util';
3
3
  import * as Dogecoin from 'bitcoinjs-lib';
4
4
  import { LedgerTxInfo, LedgerTxInfoParams } from './types/ledger';
@@ -27,6 +27,11 @@ declare class Client extends UTXOClient {
27
27
  * @throws {"Address not defined"} Thrown if failed creating account from phrase.
28
28
  */
29
29
  getAddress(index?: number): Address;
30
+ /**
31
+ *
32
+ * @returns Doge asset info
33
+ */
34
+ getAssetInfo(): AssetInfo;
30
35
  /**
31
36
  * @private
32
37
  * Get private key.
package/lib/index.esm.js CHANGED
@@ -64,8 +64,8 @@ const blockstreamExplorerProviders = {
64
64
  //======================
65
65
  // sochain
66
66
  //======================
67
- const testnetSochainProvider = new SochainProvider('https://sochain.com/api/v3', 'PLACEHOLDER_APIKEY', DOGEChain, AssetDOGE, 8, SochainNetwork.DOGETEST);
68
- const mainnetSochainProvider = new SochainProvider('https://sochain.com/api/v3', 'PLACEHOLDER_APIKEY', DOGEChain, AssetDOGE, 8, SochainNetwork.DOGE);
67
+ const testnetSochainProvider = new SochainProvider('https://sochain.com/api/v3', process.env['SOCHAIN_API_KEY'] || '', DOGEChain, AssetDOGE, 8, SochainNetwork.DOGETEST);
68
+ const mainnetSochainProvider = new SochainProvider('https://sochain.com/api/v3', process.env['SOCHAIN_API_KEY'] || '', DOGEChain, AssetDOGE, 8, SochainNetwork.DOGE);
69
69
  const sochainDataProviders = {
70
70
  [Network.Testnet]: testnetSochainProvider,
71
71
  [Network.Stagenet]: mainnetSochainProvider,
@@ -74,7 +74,7 @@ const sochainDataProviders = {
74
74
  //======================
75
75
  // Blockcypher
76
76
  //======================
77
- const mainnetBlockcypherProvider = new BlockcypherProvider('https://api.blockcypher.com/v1', DOGEChain, AssetDOGE, 8, BlockcypherNetwork.DOGE);
77
+ const mainnetBlockcypherProvider = new BlockcypherProvider('https://api.blockcypher.com/v1', DOGEChain, AssetDOGE, 8, BlockcypherNetwork.DOGE, process.env['BlOCKCYPHER_API_KEY'] || '');
78
78
  const blockcypherDataProviders = {
79
79
  [Network.Testnet]: undefined,
80
80
  [Network.Stagenet]: mainnetBlockcypherProvider,
@@ -340,6 +340,17 @@ class Client extends UTXOClient {
340
340
  }
341
341
  throw new Error('Phrase must be provided');
342
342
  }
343
+ /**
344
+ *
345
+ * @returns Doge asset info
346
+ */
347
+ getAssetInfo() {
348
+ const assetInfo = {
349
+ asset: AssetDOGE,
350
+ decimal: DOGE_DECIMAL,
351
+ };
352
+ return assetInfo;
353
+ }
343
354
  /**
344
355
  * @private
345
356
  * Get private key.
@@ -1 +1 @@
1
- {"version":3,"file":"index.esm.js","sources":["../src/const.ts","../src/utils.ts","../src/client.ts","../src/blockcypher-api.ts"],"sourcesContent":["import { ExplorerProvider, Network } from '@xchainjs/xchain-client'\nimport { Asset } from '@xchainjs/xchain-util'\nimport {\n BlockcypherNetwork,\n BlockcypherProvider,\n SochainNetwork,\n SochainProvider,\n} from '@xchainjs/xchain-utxo-providers'\n/**\n * Minimum transaction fee\n * 100000 satoshi/kB (similar to current `minrelaytxfee`)\n * @see https://github.com/dogecoin/dogecoin/blob/master/src/validation.h#L58\n */\nexport const MIN_TX_FEE = 100000\nexport const DOGE_DECIMAL = 8\nexport const LOWER_FEE_BOUND = 40_000\nexport const UPPER_FEE_BOUND = 20_000_000\n\n/**\n * Chain identifier for Dogecoin\n *\n */\nexport const DOGEChain = 'DOGE' as const\n\n/**\n * Base \"chain\" asset on dogecoin\n *\n * Based on definition in Thorchain `common`\n * @see https://gitlab.com/thorchain/thornode/-/blob/master/common/asset.go#L12-24\n */\nexport const AssetDOGE: Asset = { chain: DOGEChain, symbol: 'DOGE', ticker: 'DOGE', synth: false }\n\n// https://blockchair.com/\n\nconst DOGE_MAINNET_EXPLORER = new ExplorerProvider(\n 'https://blockchair.com/dogecoin',\n 'https://blockchair.com/dogecoin/address/%%ADDRESS%%',\n 'https://blockchair.com/dogecoin/transaction/%%TX_ID%%',\n)\nconst DOGE_TESTNET_EXPLORER = new ExplorerProvider(\n 'https://blockexplorer.one/dogecoin/testnet',\n 'https://blockexplorer.one/dogecoin/testnet/address/%%ADDRESS%%',\n 'https://blockexplorer.one/dogecoin/testnet/tx/%%TX_ID%%',\n)\nexport const blockstreamExplorerProviders = {\n [Network.Testnet]: DOGE_TESTNET_EXPLORER,\n [Network.Stagenet]: DOGE_MAINNET_EXPLORER,\n [Network.Mainnet]: DOGE_MAINNET_EXPLORER,\n}\n\n//======================\n// sochain\n//======================\n\nconst testnetSochainProvider = new SochainProvider(\n 'https://sochain.com/api/v3',\n 'PLACEHOLDER_APIKEY',\n DOGEChain,\n AssetDOGE,\n 8,\n SochainNetwork.DOGETEST,\n)\nconst mainnetSochainProvider = new SochainProvider(\n 'https://sochain.com/api/v3',\n 'PLACEHOLDER_APIKEY',\n DOGEChain,\n AssetDOGE,\n 8,\n SochainNetwork.DOGE,\n)\nexport const sochainDataProviders = {\n [Network.Testnet]: testnetSochainProvider,\n [Network.Stagenet]: mainnetSochainProvider,\n [Network.Mainnet]: mainnetSochainProvider,\n}\n\n//======================\n// Blockcypher\n//======================\n\nconst mainnetBlockcypherProvider = new BlockcypherProvider(\n 'https://api.blockcypher.com/v1',\n DOGEChain,\n AssetDOGE,\n 8,\n BlockcypherNetwork.DOGE,\n)\nexport const blockcypherDataProviders = {\n [Network.Testnet]: undefined, //no provider here\n [Network.Stagenet]: mainnetBlockcypherProvider,\n [Network.Mainnet]: mainnetBlockcypherProvider,\n}\n","import { FeeRate, Fees, FeesWithRates, Network, UTXO, calcFees, standardFeeRates } from '@xchainjs/xchain-client'\nimport { Address, BaseAmount, baseAmount } from '@xchainjs/xchain-util'\nimport * as Dogecoin from 'bitcoinjs-lib'\nimport coininfo from 'coininfo'\n\nimport { MIN_TX_FEE } from './const'\n\nconst TX_EMPTY_SIZE = 4 + 1 + 1 + 4 //10\nconst TX_INPUT_BASE = 32 + 4 + 1 + 4 // 41\nconst TX_INPUT_PUBKEYHASH = 107\nconst TX_OUTPUT_BASE = 8 + 1 //9\nconst TX_OUTPUT_PUBKEYHASH = 25\n\nfunction inputBytes(): number {\n return TX_INPUT_BASE + TX_INPUT_PUBKEYHASH\n}\n\n/**\n * Compile memo.\n *\n * @param {string} memo The memo to be compiled.\n * @returns {Buffer} The compiled memo.\n */\nexport const compileMemo = (memo: string): Buffer => {\n const data = Buffer.from(memo, 'utf8') // converts MEMO to buffer\n return Dogecoin.script.compile([Dogecoin.opcodes.OP_RETURN, data]) // Compile OP_RETURN script\n}\n\n/**\n * Get the transaction fee.\n *\n * @param {UTXO[]} inputs The UTXOs.\n * @param {FeeRate} feeRate The fee rate.\n * @param {Buffer} data The compiled memo (Optional).\n * @returns {number} The fee amount.\n */\nexport function getFee(inputs: UTXO[], feeRate: FeeRate, data: Buffer | null = null): number {\n let sum =\n TX_EMPTY_SIZE +\n inputs.reduce(function (a) {\n return a + inputBytes()\n }, 0) +\n inputs.length + // +1 byte for each input signature\n TX_OUTPUT_BASE +\n TX_OUTPUT_PUBKEYHASH +\n TX_OUTPUT_BASE +\n TX_OUTPUT_PUBKEYHASH\n\n if (data) {\n sum += TX_OUTPUT_BASE + data.length\n }\n const fee = sum * feeRate\n return fee > MIN_TX_FEE ? fee : MIN_TX_FEE\n}\n\n/**\n * Get the average value of an array.\n *\n * @param {number[]} array\n * @returns {number} The average value.\n */\nexport function arrayAverage(array: number[]): number {\n let sum = 0\n array.forEach((value) => (sum += value))\n return sum / array.length\n}\n\n/**\n * Get Dogecoin network to be used with bitcoinjs.\n *\n * @param {Network} network\n * @returns {Dogecoin.networks.Network} The Doge network.\n */\nexport const dogeNetwork = (network: Network): Dogecoin.networks.Network => {\n switch (network) {\n case Network.Mainnet:\n return coininfo.dogecoin.main.toBitcoinJS()\n case Network.Stagenet:\n return coininfo.dogecoin.main.toBitcoinJS()\n case Network.Testnet: {\n // Latest coininfo on NPM doesn't contain dogetest config information\n const bip32 = {\n private: 0x04358394,\n public: 0x043587cf,\n }\n const test = coininfo.dogecoin.test\n test.versions.bip32 = bip32\n return test.toBitcoinJS()\n }\n }\n}\n\n/**\n * Validate the Doge address.\n *\n * @param {string} address\n * @param {Network} network\n * @returns {boolean} `true` or `false`.\n */\nexport const validateAddress = (address: Address, network: Network): boolean => {\n try {\n Dogecoin.address.toOutputScript(address, dogeNetwork(network))\n return true\n } catch (error) {\n return false\n }\n}\n\n/**\n * Calculate fees based on fee rate and memo.\n *\n * @param {FeeRate} feeRate\n * @param {string} memo\n * @returns {BaseAmount} The calculated fees based on fee rate and the memo.\n */\nexport const calcFee = (feeRate: FeeRate, memo?: string): BaseAmount => {\n const compiledMemo = memo ? compileMemo(memo) : null\n const fee = getFee([], feeRate, compiledMemo)\n return baseAmount(fee)\n}\n\n/**\n * Get the default fees with rates.\n *\n * @returns {FeesWithRates} The default fees and rates.\n */\nexport const getDefaultFeesWithRates = (): FeesWithRates => {\n const rates = {\n ...standardFeeRates(MIN_TX_FEE),\n }\n\n return {\n fees: calcFees(rates, calcFee),\n rates,\n }\n}\n\n/**\n * Get the default fees.\n *\n * @returns {Fees} The default fees.\n */\nexport const getDefaultFees = (): Fees => {\n const { fees } = getDefaultFeesWithRates()\n return fees\n}\n\n/**\n * Get address prefix based on the network.\n *\n * @param {Network} network\n * @returns {string} The address prefix based on the network.\n *\n **/\nexport const getPrefix = (network: Network) => {\n switch (network) {\n case Network.Mainnet:\n case Network.Stagenet:\n return ''\n case Network.Testnet:\n return 'n'\n }\n}\n","import {\n Fee,\n FeeRate,\n Network,\n TxHash,\n TxParams,\n UTXO,\n UTXOClient,\n UtxoClientParams,\n checkFeeBounds,\n} from '@xchainjs/xchain-client'\nimport { getSeed } from '@xchainjs/xchain-crypto'\nimport { Address } from '@xchainjs/xchain-util'\nimport axios from 'axios'\nimport * as Dogecoin from 'bitcoinjs-lib'\nimport accumulative from 'coinselect/accumulative'\n\nimport {\n DOGEChain,\n LOWER_FEE_BOUND,\n UPPER_FEE_BOUND,\n blockcypherDataProviders,\n blockstreamExplorerProviders,\n} from './const'\nimport { LedgerTxInfo, LedgerTxInfoParams } from './types/ledger'\nimport * as Utils from './utils'\n\nconst DEFAULT_SUGGESTED_TRANSACTION_FEE = 150000\n\nexport const defaultDogeParams: UtxoClientParams = {\n network: Network.Mainnet,\n phrase: '',\n explorerProviders: blockstreamExplorerProviders,\n dataProviders: [blockcypherDataProviders],\n rootDerivationPaths: {\n [Network.Mainnet]: `m/44'/3'/0'/0/`,\n [Network.Stagenet]: `m/44'/3'/0'/0/`,\n [Network.Testnet]: `m/44'/1'/0'/0/`,\n },\n feeBounds: {\n lower: LOWER_FEE_BOUND,\n upper: UPPER_FEE_BOUND,\n },\n}\n/**\n * Custom Dogecoin client\n */\nclass Client extends UTXOClient {\n /**\n * Constructor\n * Client is initialised with network type\n * Pass strict null as nodeAuth to disable auth for node json rpc\n *\n * @param {DogecoinClientParams} params\n */\n constructor(params = defaultDogeParams) {\n super(DOGEChain, {\n network: params.network,\n rootDerivationPaths: params.rootDerivationPaths,\n phrase: params.phrase,\n feeBounds: params.feeBounds,\n explorerProviders: params.explorerProviders,\n dataProviders: params.dataProviders,\n })\n }\n\n /**\n * Get the current address.\n *\n * Generates a network-specific key-pair by first converting the buffer to a Wallet-Import-Format (WIF)\n * The address is then decoded into type P2WPKH and returned.\n *\n * @returns {Address} The current address.\n *\n * @throws {\"Phrase must be provided\"} Thrown if phrase has not been set before.\n * @throws {\"Address not defined\"} Thrown if failed creating account from phrase.\n */\n getAddress(index = 0): Address {\n if (index < 0) {\n throw new Error('index must be greater than zero')\n }\n if (this.phrase) {\n const dogeNetwork = Utils.dogeNetwork(this.network)\n const dogeKeys = this.getDogeKeys(this.phrase, index)\n\n const { address } = Dogecoin.payments.p2pkh({\n pubkey: dogeKeys.publicKey,\n network: dogeNetwork,\n })\n if (!address) {\n throw new Error('Address not defined')\n }\n return address\n }\n throw new Error('Phrase must be provided')\n }\n\n /**\n * @private\n * Get private key.\n *\n * Private function to get keyPair from the this.phrase\n *\n * @param {string} phrase The phrase to be used for generating privkey\n * @returns {ECPairInterface} The privkey generated from the given phrase\n *\n * @throws {\"Could not get private key from phrase\"} Throws an error if failed creating Doge keys from the given phrase\n * */\n private getDogeKeys(phrase: string, index = 0): Dogecoin.ECPairInterface {\n const dogeNetwork = Utils.dogeNetwork(this.network)\n\n const seed = getSeed(phrase)\n const master = Dogecoin.bip32.fromSeed(seed, dogeNetwork).derivePath(this.getFullDerivationPath(index))\n\n if (!master.privateKey) {\n throw new Error('Could not get private key from phrase')\n }\n\n return Dogecoin.ECPair.fromPrivateKey(master.privateKey, { network: dogeNetwork })\n }\n\n /**\n * Validate the given address.\n *\n * @param {Address} address\n * @returns {boolean} `true` or `false`\n */\n validateAddress(address: string): boolean {\n return Utils.validateAddress(address, this.network)\n }\n\n protected async getSuggestedFeeRate(): Promise<FeeRate> {\n try {\n const response = await axios.get(`https://api.blockcypher.com/v1/doge/main`)\n return response.data.low_fee_per_kb / 1000 // feePerKb to feePerByte\n } catch (error) {\n return DEFAULT_SUGGESTED_TRANSACTION_FEE\n }\n }\n\n protected async calcFee(feeRate: FeeRate, memo?: string): Promise<Fee> {\n return Utils.calcFee(feeRate, memo)\n }\n\n /**\n * Transfer Doge.\n *\n * @param {TxParams&FeeRate} params The transfer options.\n * @returns {TxHash} The transaction hash.\n */\n async transfer(params: TxParams & { feeRate?: FeeRate }): Promise<TxHash> {\n const fromAddressIndex = params?.walletIndex || 0\n const feeRate = params.feeRate || (await this.getSuggestedFeeRate())\n checkFeeBounds(this.feeBounds, feeRate)\n const { psbt } = await this.buildTx({\n ...params,\n feeRate,\n sender: this.getAddress(fromAddressIndex),\n })\n const dogeKeys = this.getDogeKeys(this.phrase, fromAddressIndex)\n psbt.signAllInputs(dogeKeys) // Sign all inputs\n psbt.finalizeAllInputs() // Finalise inputs\n const txHex = psbt.extractTransaction().toHex() // TX extracted and formatted to hex\n\n return await this.roundRobinBroadcastTx(txHex)\n }\n\n /**\n * Build transcation.\n *\n * @param {BuildParams} params The transaction build options.\n * @returns {Transaction}\n */\n public buildTx = async ({\n amount,\n recipient,\n memo,\n feeRate,\n sender,\n }: TxParams & {\n feeRate: FeeRate\n sender: Address\n }): Promise<{ psbt: Dogecoin.Psbt; utxos: UTXO[] }> => {\n if (!this.validateAddress(recipient)) throw new Error('Invalid address')\n\n const utxos = await this.scanUTXOs(sender)\n if (utxos.length === 0) throw new Error('No utxos to send')\n const feeRateWhole = Number(feeRate.toFixed(0))\n const compiledMemo = memo ? Utils.compileMemo(memo) : null\n\n const targetOutputs = []\n //1. output to recipient\n targetOutputs.push({\n address: recipient,\n value: amount.amount().toNumber(),\n })\n //2. add output memo to targets (optional)\n if (compiledMemo) {\n targetOutputs.push({ script: compiledMemo, value: 0 })\n }\n const { inputs, outputs } = accumulative(utxos, targetOutputs, feeRateWhole)\n\n // .inputs and .outputs will be undefined if no solution was found\n if (!inputs || !outputs) throw new Error('Balance insufficient for transaction')\n\n const psbt = new Dogecoin.Psbt({ network: Utils.dogeNetwork(this.network) }) // Network-specific\n // TODO: Doge recommended fees is greater than the recommended by Bitcoinjs-lib (for BTC),\n // so we need to increase the maximum fee rate. Currently, the fast rate fee is near ~750000sats/byte\n // https://thornode.ninerealms.com/thorchain/inbound_addresses?height=7526662 (09-27-2022)\n // For now we increase it by 10x\n psbt.setMaximumFeeRate(7500000)\n // const params = { sochainUrl, network, address: sender }\n for (const utxo of inputs) {\n psbt.addInput({\n hash: utxo.hash,\n index: utxo.index,\n nonWitnessUtxo: Buffer.from(utxo.txHex, 'hex'),\n })\n }\n\n // Outputs\n outputs.forEach((output: Dogecoin.PsbtTxOutput) => {\n if (!output.address) {\n //an empty address means this is the change address\n output.address = sender\n }\n if (!output.script) {\n psbt.addOutput(output)\n } else {\n //we need to add the compiled memo this way to\n //avoid dust error tx when accumulating memo output with 0 value\n if (compiledMemo) {\n psbt.addOutput({ script: compiledMemo, value: 0 })\n }\n }\n })\n\n return { psbt, utxos }\n }\n\n /**\n * Create transaction info.\n *\n * @param {LedgerTxInfoParams} params The transaction build options.\n * @returns {LedgerTxInfo} The transaction info used for ledger sign.\n */\n public async createTxInfo(params: LedgerTxInfoParams): Promise<LedgerTxInfo> {\n const { psbt, utxos } = await this.buildTx(params)\n const ledgerTxInfo: LedgerTxInfo = {\n utxos,\n newTxHex: psbt.data.globalMap.unsignedTx.toBuffer().toString('hex'),\n }\n return ledgerTxInfo\n }\n}\n\nexport { Client }\n","import { Network } from '@xchainjs/xchain-client'\nimport axios from 'axios'\n\nconst DEFAULT_SUGGESTED_TRANSACTION_FEE = 150000\n\n/**\n * Get Dogecoin suggested transaction fee.\n *\n * @returns {number} The Dogecoin suggested transaction fee per bytes in sat.\n */\nexport const getSuggestedTxFee = async ({ blockcypherUrl }: { blockcypherUrl: string }): Promise<number> => {\n try {\n const response = await axios.get(`${blockcypherUrl}/doge/main`)\n return response.data.low_fee_per_kb / 1000 // feePerKb to feePerByte\n } catch (error) {\n return DEFAULT_SUGGESTED_TRANSACTION_FEE\n }\n}\n\nexport const getSendTxUrl = ({ blockcypherUrl, network }: { blockcypherUrl: string; network: Network }) => {\n if (network === 'testnet') {\n throw new Error('Testnet URL is not available for blockcypher')\n } else {\n return `${blockcypherUrl}/doge/main/txs/push`\n }\n}\n"],"names":["Utils.compileMemo","Utils.dogeNetwork","dogeNetwork","Utils.validateAddress","Utils.calcFee"],"mappings":"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"}
1
+ {"version":3,"file":"index.esm.js","sources":["../src/const.ts","../src/utils.ts","../src/client.ts","../src/blockcypher-api.ts"],"sourcesContent":["import { ExplorerProvider, Network } from '@xchainjs/xchain-client'\nimport { Asset } from '@xchainjs/xchain-util'\nimport {\n BlockcypherNetwork,\n BlockcypherProvider,\n SochainNetwork,\n SochainProvider,\n} from '@xchainjs/xchain-utxo-providers'\n/**\n * Minimum transaction fee\n * 100000 satoshi/kB (similar to current `minrelaytxfee`)\n * @see https://github.com/dogecoin/dogecoin/blob/master/src/validation.h#L58\n */\nexport const MIN_TX_FEE = 100000\nexport const DOGE_DECIMAL = 8\nexport const LOWER_FEE_BOUND = 40_000\nexport const UPPER_FEE_BOUND = 20_000_000\n\n/**\n * Chain identifier for Dogecoin\n *\n */\nexport const DOGEChain = 'DOGE' as const\n\n/**\n * Base \"chain\" asset on dogecoin\n *\n * Based on definition in Thorchain `common`\n * @see https://gitlab.com/thorchain/thornode/-/blob/master/common/asset.go#L12-24\n */\nexport const AssetDOGE: Asset = { chain: DOGEChain, symbol: 'DOGE', ticker: 'DOGE', synth: false }\n\n// https://blockchair.com/\n\nconst DOGE_MAINNET_EXPLORER = new ExplorerProvider(\n 'https://blockchair.com/dogecoin',\n 'https://blockchair.com/dogecoin/address/%%ADDRESS%%',\n 'https://blockchair.com/dogecoin/transaction/%%TX_ID%%',\n)\nconst DOGE_TESTNET_EXPLORER = new ExplorerProvider(\n 'https://blockexplorer.one/dogecoin/testnet',\n 'https://blockexplorer.one/dogecoin/testnet/address/%%ADDRESS%%',\n 'https://blockexplorer.one/dogecoin/testnet/tx/%%TX_ID%%',\n)\nexport const blockstreamExplorerProviders = {\n [Network.Testnet]: DOGE_TESTNET_EXPLORER,\n [Network.Stagenet]: DOGE_MAINNET_EXPLORER,\n [Network.Mainnet]: DOGE_MAINNET_EXPLORER,\n}\n\n//======================\n// sochain\n//======================\n\nconst testnetSochainProvider = new SochainProvider(\n 'https://sochain.com/api/v3',\n process.env['SOCHAIN_API_KEY'] || '',\n DOGEChain,\n AssetDOGE,\n 8,\n SochainNetwork.DOGETEST,\n)\nconst mainnetSochainProvider = new SochainProvider(\n 'https://sochain.com/api/v3',\n process.env['SOCHAIN_API_KEY'] || '',\n DOGEChain,\n AssetDOGE,\n 8,\n SochainNetwork.DOGE,\n)\nexport const sochainDataProviders = {\n [Network.Testnet]: testnetSochainProvider,\n [Network.Stagenet]: mainnetSochainProvider,\n [Network.Mainnet]: mainnetSochainProvider,\n}\n\n//======================\n// Blockcypher\n//======================\n\nconst mainnetBlockcypherProvider = new BlockcypherProvider(\n 'https://api.blockcypher.com/v1',\n DOGEChain,\n AssetDOGE,\n 8,\n BlockcypherNetwork.DOGE,\n process.env['BlOCKCYPHER_API_KEY'] || '',\n)\nexport const blockcypherDataProviders = {\n [Network.Testnet]: undefined, //no provider here\n [Network.Stagenet]: mainnetBlockcypherProvider,\n [Network.Mainnet]: mainnetBlockcypherProvider,\n}\n","import { FeeRate, Fees, FeesWithRates, Network, UTXO, calcFees, standardFeeRates } from '@xchainjs/xchain-client'\nimport { Address, BaseAmount, baseAmount } from '@xchainjs/xchain-util'\nimport * as Dogecoin from 'bitcoinjs-lib'\nimport coininfo from 'coininfo'\n\nimport { MIN_TX_FEE } from './const'\n\nconst TX_EMPTY_SIZE = 4 + 1 + 1 + 4 //10\nconst TX_INPUT_BASE = 32 + 4 + 1 + 4 // 41\nconst TX_INPUT_PUBKEYHASH = 107\nconst TX_OUTPUT_BASE = 8 + 1 //9\nconst TX_OUTPUT_PUBKEYHASH = 25\n\nfunction inputBytes(): number {\n return TX_INPUT_BASE + TX_INPUT_PUBKEYHASH\n}\n\n/**\n * Compile memo.\n *\n * @param {string} memo The memo to be compiled.\n * @returns {Buffer} The compiled memo.\n */\nexport const compileMemo = (memo: string): Buffer => {\n const data = Buffer.from(memo, 'utf8') // converts MEMO to buffer\n return Dogecoin.script.compile([Dogecoin.opcodes.OP_RETURN, data]) // Compile OP_RETURN script\n}\n\n/**\n * Get the transaction fee.\n *\n * @param {UTXO[]} inputs The UTXOs.\n * @param {FeeRate} feeRate The fee rate.\n * @param {Buffer} data The compiled memo (Optional).\n * @returns {number} The fee amount.\n */\nexport function getFee(inputs: UTXO[], feeRate: FeeRate, data: Buffer | null = null): number {\n let sum =\n TX_EMPTY_SIZE +\n inputs.reduce(function (a) {\n return a + inputBytes()\n }, 0) +\n inputs.length + // +1 byte for each input signature\n TX_OUTPUT_BASE +\n TX_OUTPUT_PUBKEYHASH +\n TX_OUTPUT_BASE +\n TX_OUTPUT_PUBKEYHASH\n\n if (data) {\n sum += TX_OUTPUT_BASE + data.length\n }\n const fee = sum * feeRate\n return fee > MIN_TX_FEE ? fee : MIN_TX_FEE\n}\n\n/**\n * Get the average value of an array.\n *\n * @param {number[]} array\n * @returns {number} The average value.\n */\nexport function arrayAverage(array: number[]): number {\n let sum = 0\n array.forEach((value) => (sum += value))\n return sum / array.length\n}\n\n/**\n * Get Dogecoin network to be used with bitcoinjs.\n *\n * @param {Network} network\n * @returns {Dogecoin.networks.Network} The Doge network.\n */\nexport const dogeNetwork = (network: Network): Dogecoin.networks.Network => {\n switch (network) {\n case Network.Mainnet:\n return coininfo.dogecoin.main.toBitcoinJS()\n case Network.Stagenet:\n return coininfo.dogecoin.main.toBitcoinJS()\n case Network.Testnet: {\n // Latest coininfo on NPM doesn't contain dogetest config information\n const bip32 = {\n private: 0x04358394,\n public: 0x043587cf,\n }\n const test = coininfo.dogecoin.test\n test.versions.bip32 = bip32\n return test.toBitcoinJS()\n }\n }\n}\n\n/**\n * Validate the Doge address.\n *\n * @param {string} address\n * @param {Network} network\n * @returns {boolean} `true` or `false`.\n */\nexport const validateAddress = (address: Address, network: Network): boolean => {\n try {\n Dogecoin.address.toOutputScript(address, dogeNetwork(network))\n return true\n } catch (error) {\n return false\n }\n}\n\n/**\n * Calculate fees based on fee rate and memo.\n *\n * @param {FeeRate} feeRate\n * @param {string} memo\n * @returns {BaseAmount} The calculated fees based on fee rate and the memo.\n */\nexport const calcFee = (feeRate: FeeRate, memo?: string): BaseAmount => {\n const compiledMemo = memo ? compileMemo(memo) : null\n const fee = getFee([], feeRate, compiledMemo)\n return baseAmount(fee)\n}\n\n/**\n * Get the default fees with rates.\n *\n * @returns {FeesWithRates} The default fees and rates.\n */\nexport const getDefaultFeesWithRates = (): FeesWithRates => {\n const rates = {\n ...standardFeeRates(MIN_TX_FEE),\n }\n\n return {\n fees: calcFees(rates, calcFee),\n rates,\n }\n}\n\n/**\n * Get the default fees.\n *\n * @returns {Fees} The default fees.\n */\nexport const getDefaultFees = (): Fees => {\n const { fees } = getDefaultFeesWithRates()\n return fees\n}\n\n/**\n * Get address prefix based on the network.\n *\n * @param {Network} network\n * @returns {string} The address prefix based on the network.\n *\n **/\nexport const getPrefix = (network: Network) => {\n switch (network) {\n case Network.Mainnet:\n case Network.Stagenet:\n return ''\n case Network.Testnet:\n return 'n'\n }\n}\n","import {\n AssetInfo,\n Fee,\n FeeRate,\n Network,\n TxHash,\n TxParams,\n UTXO,\n UTXOClient,\n UtxoClientParams,\n checkFeeBounds,\n} from '@xchainjs/xchain-client'\nimport { getSeed } from '@xchainjs/xchain-crypto'\nimport { Address } from '@xchainjs/xchain-util'\nimport axios from 'axios'\nimport * as Dogecoin from 'bitcoinjs-lib'\nimport accumulative from 'coinselect/accumulative'\n\nimport {\n AssetDOGE,\n DOGEChain,\n DOGE_DECIMAL,\n LOWER_FEE_BOUND,\n UPPER_FEE_BOUND,\n blockcypherDataProviders,\n blockstreamExplorerProviders,\n} from './const'\nimport { LedgerTxInfo, LedgerTxInfoParams } from './types/ledger'\nimport * as Utils from './utils'\n\nconst DEFAULT_SUGGESTED_TRANSACTION_FEE = 150000\n\nexport const defaultDogeParams: UtxoClientParams = {\n network: Network.Mainnet,\n phrase: '',\n explorerProviders: blockstreamExplorerProviders,\n dataProviders: [blockcypherDataProviders],\n rootDerivationPaths: {\n [Network.Mainnet]: `m/44'/3'/0'/0/`,\n [Network.Stagenet]: `m/44'/3'/0'/0/`,\n [Network.Testnet]: `m/44'/1'/0'/0/`,\n },\n feeBounds: {\n lower: LOWER_FEE_BOUND,\n upper: UPPER_FEE_BOUND,\n },\n}\n/**\n * Custom Dogecoin client\n */\nclass Client extends UTXOClient {\n /**\n * Constructor\n * Client is initialised with network type\n * Pass strict null as nodeAuth to disable auth for node json rpc\n *\n * @param {DogecoinClientParams} params\n */\n constructor(params = defaultDogeParams) {\n super(DOGEChain, {\n network: params.network,\n rootDerivationPaths: params.rootDerivationPaths,\n phrase: params.phrase,\n feeBounds: params.feeBounds,\n explorerProviders: params.explorerProviders,\n dataProviders: params.dataProviders,\n })\n }\n\n /**\n * Get the current address.\n *\n * Generates a network-specific key-pair by first converting the buffer to a Wallet-Import-Format (WIF)\n * The address is then decoded into type P2WPKH and returned.\n *\n * @returns {Address} The current address.\n *\n * @throws {\"Phrase must be provided\"} Thrown if phrase has not been set before.\n * @throws {\"Address not defined\"} Thrown if failed creating account from phrase.\n */\n getAddress(index = 0): Address {\n if (index < 0) {\n throw new Error('index must be greater than zero')\n }\n if (this.phrase) {\n const dogeNetwork = Utils.dogeNetwork(this.network)\n const dogeKeys = this.getDogeKeys(this.phrase, index)\n\n const { address } = Dogecoin.payments.p2pkh({\n pubkey: dogeKeys.publicKey,\n network: dogeNetwork,\n })\n if (!address) {\n throw new Error('Address not defined')\n }\n return address\n }\n throw new Error('Phrase must be provided')\n }\n\n /**\n *\n * @returns Doge asset info\n */\n getAssetInfo(): AssetInfo {\n const assetInfo: AssetInfo = {\n asset: AssetDOGE,\n decimal: DOGE_DECIMAL,\n }\n return assetInfo\n }\n\n /**\n * @private\n * Get private key.\n *\n * Private function to get keyPair from the this.phrase\n *\n * @param {string} phrase The phrase to be used for generating privkey\n * @returns {ECPairInterface} The privkey generated from the given phrase\n *\n * @throws {\"Could not get private key from phrase\"} Throws an error if failed creating Doge keys from the given phrase\n * */\n private getDogeKeys(phrase: string, index = 0): Dogecoin.ECPairInterface {\n const dogeNetwork = Utils.dogeNetwork(this.network)\n\n const seed = getSeed(phrase)\n const master = Dogecoin.bip32.fromSeed(seed, dogeNetwork).derivePath(this.getFullDerivationPath(index))\n\n if (!master.privateKey) {\n throw new Error('Could not get private key from phrase')\n }\n\n return Dogecoin.ECPair.fromPrivateKey(master.privateKey, { network: dogeNetwork })\n }\n\n /**\n * Validate the given address.\n *\n * @param {Address} address\n * @returns {boolean} `true` or `false`\n */\n validateAddress(address: string): boolean {\n return Utils.validateAddress(address, this.network)\n }\n\n protected async getSuggestedFeeRate(): Promise<FeeRate> {\n try {\n const response = await axios.get(`https://api.blockcypher.com/v1/doge/main`)\n return response.data.low_fee_per_kb / 1000 // feePerKb to feePerByte\n } catch (error) {\n return DEFAULT_SUGGESTED_TRANSACTION_FEE\n }\n }\n\n protected async calcFee(feeRate: FeeRate, memo?: string): Promise<Fee> {\n return Utils.calcFee(feeRate, memo)\n }\n\n /**\n * Transfer Doge.\n *\n * @param {TxParams&FeeRate} params The transfer options.\n * @returns {TxHash} The transaction hash.\n */\n async transfer(params: TxParams & { feeRate?: FeeRate }): Promise<TxHash> {\n const fromAddressIndex = params?.walletIndex || 0\n const feeRate = params.feeRate || (await this.getSuggestedFeeRate())\n checkFeeBounds(this.feeBounds, feeRate)\n const { psbt } = await this.buildTx({\n ...params,\n feeRate,\n sender: this.getAddress(fromAddressIndex),\n })\n const dogeKeys = this.getDogeKeys(this.phrase, fromAddressIndex)\n psbt.signAllInputs(dogeKeys) // Sign all inputs\n psbt.finalizeAllInputs() // Finalise inputs\n const txHex = psbt.extractTransaction().toHex() // TX extracted and formatted to hex\n\n return await this.roundRobinBroadcastTx(txHex)\n }\n\n /**\n * Build transcation.\n *\n * @param {BuildParams} params The transaction build options.\n * @returns {Transaction}\n */\n public buildTx = async ({\n amount,\n recipient,\n memo,\n feeRate,\n sender,\n }: TxParams & {\n feeRate: FeeRate\n sender: Address\n }): Promise<{ psbt: Dogecoin.Psbt; utxos: UTXO[] }> => {\n if (!this.validateAddress(recipient)) throw new Error('Invalid address')\n\n const utxos = await this.scanUTXOs(sender)\n if (utxos.length === 0) throw new Error('No utxos to send')\n const feeRateWhole = Number(feeRate.toFixed(0))\n const compiledMemo = memo ? Utils.compileMemo(memo) : null\n\n const targetOutputs = []\n //1. output to recipient\n targetOutputs.push({\n address: recipient,\n value: amount.amount().toNumber(),\n })\n //2. add output memo to targets (optional)\n if (compiledMemo) {\n targetOutputs.push({ script: compiledMemo, value: 0 })\n }\n const { inputs, outputs } = accumulative(utxos, targetOutputs, feeRateWhole)\n\n // .inputs and .outputs will be undefined if no solution was found\n if (!inputs || !outputs) throw new Error('Balance insufficient for transaction')\n\n const psbt = new Dogecoin.Psbt({ network: Utils.dogeNetwork(this.network) }) // Network-specific\n // TODO: Doge recommended fees is greater than the recommended by Bitcoinjs-lib (for BTC),\n // so we need to increase the maximum fee rate. Currently, the fast rate fee is near ~750000sats/byte\n // https://thornode.ninerealms.com/thorchain/inbound_addresses?height=7526662 (09-27-2022)\n // For now we increase it by 10x\n psbt.setMaximumFeeRate(7500000)\n // const params = { sochainUrl, network, address: sender }\n for (const utxo of inputs) {\n psbt.addInput({\n hash: utxo.hash,\n index: utxo.index,\n nonWitnessUtxo: Buffer.from(utxo.txHex, 'hex'),\n })\n }\n\n // Outputs\n outputs.forEach((output: Dogecoin.PsbtTxOutput) => {\n if (!output.address) {\n //an empty address means this is the change address\n output.address = sender\n }\n if (!output.script) {\n psbt.addOutput(output)\n } else {\n //we need to add the compiled memo this way to\n //avoid dust error tx when accumulating memo output with 0 value\n if (compiledMemo) {\n psbt.addOutput({ script: compiledMemo, value: 0 })\n }\n }\n })\n\n return { psbt, utxos }\n }\n\n /**\n * Create transaction info.\n *\n * @param {LedgerTxInfoParams} params The transaction build options.\n * @returns {LedgerTxInfo} The transaction info used for ledger sign.\n */\n public async createTxInfo(params: LedgerTxInfoParams): Promise<LedgerTxInfo> {\n const { psbt, utxos } = await this.buildTx(params)\n const ledgerTxInfo: LedgerTxInfo = {\n utxos,\n newTxHex: psbt.data.globalMap.unsignedTx.toBuffer().toString('hex'),\n }\n return ledgerTxInfo\n }\n}\n\nexport { Client }\n","import { Network } from '@xchainjs/xchain-client'\nimport axios from 'axios'\n\nconst DEFAULT_SUGGESTED_TRANSACTION_FEE = 150000\n\n/**\n * Get Dogecoin suggested transaction fee.\n *\n * @returns {number} The Dogecoin suggested transaction fee per bytes in sat.\n */\nexport const getSuggestedTxFee = async ({ blockcypherUrl }: { blockcypherUrl: string }): Promise<number> => {\n try {\n const response = await axios.get(`${blockcypherUrl}/doge/main`)\n return response.data.low_fee_per_kb / 1000 // feePerKb to feePerByte\n } catch (error) {\n return DEFAULT_SUGGESTED_TRANSACTION_FEE\n }\n}\n\nexport const getSendTxUrl = ({ blockcypherUrl, network }: { blockcypherUrl: string; network: Network }) => {\n if (network === 'testnet') {\n throw new Error('Testnet URL is not available for blockcypher')\n } else {\n return `${blockcypherUrl}/doge/main/txs/push`\n }\n}\n"],"names":["Utils.compileMemo","Utils.dogeNetwork","dogeNetwork","Utils.validateAddress","Utils.calcFee"],"mappings":"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"}
package/lib/index.js CHANGED
@@ -93,8 +93,8 @@ const blockstreamExplorerProviders = {
93
93
  //======================
94
94
  // sochain
95
95
  //======================
96
- const testnetSochainProvider = new xchainUtxoProviders.SochainProvider('https://sochain.com/api/v3', 'PLACEHOLDER_APIKEY', DOGEChain, AssetDOGE, 8, xchainUtxoProviders.SochainNetwork.DOGETEST);
97
- const mainnetSochainProvider = new xchainUtxoProviders.SochainProvider('https://sochain.com/api/v3', 'PLACEHOLDER_APIKEY', DOGEChain, AssetDOGE, 8, xchainUtxoProviders.SochainNetwork.DOGE);
96
+ const testnetSochainProvider = new xchainUtxoProviders.SochainProvider('https://sochain.com/api/v3', process.env['SOCHAIN_API_KEY'] || '', DOGEChain, AssetDOGE, 8, xchainUtxoProviders.SochainNetwork.DOGETEST);
97
+ const mainnetSochainProvider = new xchainUtxoProviders.SochainProvider('https://sochain.com/api/v3', process.env['SOCHAIN_API_KEY'] || '', DOGEChain, AssetDOGE, 8, xchainUtxoProviders.SochainNetwork.DOGE);
98
98
  const sochainDataProviders = {
99
99
  [xchainClient.Network.Testnet]: testnetSochainProvider,
100
100
  [xchainClient.Network.Stagenet]: mainnetSochainProvider,
@@ -103,7 +103,7 @@ const sochainDataProviders = {
103
103
  //======================
104
104
  // Blockcypher
105
105
  //======================
106
- const mainnetBlockcypherProvider = new xchainUtxoProviders.BlockcypherProvider('https://api.blockcypher.com/v1', DOGEChain, AssetDOGE, 8, xchainUtxoProviders.BlockcypherNetwork.DOGE);
106
+ const mainnetBlockcypherProvider = new xchainUtxoProviders.BlockcypherProvider('https://api.blockcypher.com/v1', DOGEChain, AssetDOGE, 8, xchainUtxoProviders.BlockcypherNetwork.DOGE, process.env['BlOCKCYPHER_API_KEY'] || '');
107
107
  const blockcypherDataProviders = {
108
108
  [xchainClient.Network.Testnet]: undefined,
109
109
  [xchainClient.Network.Stagenet]: mainnetBlockcypherProvider,
@@ -369,6 +369,17 @@ class Client extends xchainClient.UTXOClient {
369
369
  }
370
370
  throw new Error('Phrase must be provided');
371
371
  }
372
+ /**
373
+ *
374
+ * @returns Doge asset info
375
+ */
376
+ getAssetInfo() {
377
+ const assetInfo = {
378
+ asset: AssetDOGE,
379
+ decimal: DOGE_DECIMAL,
380
+ };
381
+ return assetInfo;
382
+ }
372
383
  /**
373
384
  * @private
374
385
  * Get private key.
package/lib/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sources":["../src/const.ts","../src/utils.ts","../src/client.ts","../src/blockcypher-api.ts"],"sourcesContent":["import { ExplorerProvider, Network } from '@xchainjs/xchain-client'\nimport { Asset } from '@xchainjs/xchain-util'\nimport {\n BlockcypherNetwork,\n BlockcypherProvider,\n SochainNetwork,\n SochainProvider,\n} from '@xchainjs/xchain-utxo-providers'\n/**\n * Minimum transaction fee\n * 100000 satoshi/kB (similar to current `minrelaytxfee`)\n * @see https://github.com/dogecoin/dogecoin/blob/master/src/validation.h#L58\n */\nexport const MIN_TX_FEE = 100000\nexport const DOGE_DECIMAL = 8\nexport const LOWER_FEE_BOUND = 40_000\nexport const UPPER_FEE_BOUND = 20_000_000\n\n/**\n * Chain identifier for Dogecoin\n *\n */\nexport const DOGEChain = 'DOGE' as const\n\n/**\n * Base \"chain\" asset on dogecoin\n *\n * Based on definition in Thorchain `common`\n * @see https://gitlab.com/thorchain/thornode/-/blob/master/common/asset.go#L12-24\n */\nexport const AssetDOGE: Asset = { chain: DOGEChain, symbol: 'DOGE', ticker: 'DOGE', synth: false }\n\n// https://blockchair.com/\n\nconst DOGE_MAINNET_EXPLORER = new ExplorerProvider(\n 'https://blockchair.com/dogecoin',\n 'https://blockchair.com/dogecoin/address/%%ADDRESS%%',\n 'https://blockchair.com/dogecoin/transaction/%%TX_ID%%',\n)\nconst DOGE_TESTNET_EXPLORER = new ExplorerProvider(\n 'https://blockexplorer.one/dogecoin/testnet',\n 'https://blockexplorer.one/dogecoin/testnet/address/%%ADDRESS%%',\n 'https://blockexplorer.one/dogecoin/testnet/tx/%%TX_ID%%',\n)\nexport const blockstreamExplorerProviders = {\n [Network.Testnet]: DOGE_TESTNET_EXPLORER,\n [Network.Stagenet]: DOGE_MAINNET_EXPLORER,\n [Network.Mainnet]: DOGE_MAINNET_EXPLORER,\n}\n\n//======================\n// sochain\n//======================\n\nconst testnetSochainProvider = new SochainProvider(\n 'https://sochain.com/api/v3',\n 'PLACEHOLDER_APIKEY',\n DOGEChain,\n AssetDOGE,\n 8,\n SochainNetwork.DOGETEST,\n)\nconst mainnetSochainProvider = new SochainProvider(\n 'https://sochain.com/api/v3',\n 'PLACEHOLDER_APIKEY',\n DOGEChain,\n AssetDOGE,\n 8,\n SochainNetwork.DOGE,\n)\nexport const sochainDataProviders = {\n [Network.Testnet]: testnetSochainProvider,\n [Network.Stagenet]: mainnetSochainProvider,\n [Network.Mainnet]: mainnetSochainProvider,\n}\n\n//======================\n// Blockcypher\n//======================\n\nconst mainnetBlockcypherProvider = new BlockcypherProvider(\n 'https://api.blockcypher.com/v1',\n DOGEChain,\n AssetDOGE,\n 8,\n BlockcypherNetwork.DOGE,\n)\nexport const blockcypherDataProviders = {\n [Network.Testnet]: undefined, //no provider here\n [Network.Stagenet]: mainnetBlockcypherProvider,\n [Network.Mainnet]: mainnetBlockcypherProvider,\n}\n","import { FeeRate, Fees, FeesWithRates, Network, UTXO, calcFees, standardFeeRates } from '@xchainjs/xchain-client'\nimport { Address, BaseAmount, baseAmount } from '@xchainjs/xchain-util'\nimport * as Dogecoin from 'bitcoinjs-lib'\nimport coininfo from 'coininfo'\n\nimport { MIN_TX_FEE } from './const'\n\nconst TX_EMPTY_SIZE = 4 + 1 + 1 + 4 //10\nconst TX_INPUT_BASE = 32 + 4 + 1 + 4 // 41\nconst TX_INPUT_PUBKEYHASH = 107\nconst TX_OUTPUT_BASE = 8 + 1 //9\nconst TX_OUTPUT_PUBKEYHASH = 25\n\nfunction inputBytes(): number {\n return TX_INPUT_BASE + TX_INPUT_PUBKEYHASH\n}\n\n/**\n * Compile memo.\n *\n * @param {string} memo The memo to be compiled.\n * @returns {Buffer} The compiled memo.\n */\nexport const compileMemo = (memo: string): Buffer => {\n const data = Buffer.from(memo, 'utf8') // converts MEMO to buffer\n return Dogecoin.script.compile([Dogecoin.opcodes.OP_RETURN, data]) // Compile OP_RETURN script\n}\n\n/**\n * Get the transaction fee.\n *\n * @param {UTXO[]} inputs The UTXOs.\n * @param {FeeRate} feeRate The fee rate.\n * @param {Buffer} data The compiled memo (Optional).\n * @returns {number} The fee amount.\n */\nexport function getFee(inputs: UTXO[], feeRate: FeeRate, data: Buffer | null = null): number {\n let sum =\n TX_EMPTY_SIZE +\n inputs.reduce(function (a) {\n return a + inputBytes()\n }, 0) +\n inputs.length + // +1 byte for each input signature\n TX_OUTPUT_BASE +\n TX_OUTPUT_PUBKEYHASH +\n TX_OUTPUT_BASE +\n TX_OUTPUT_PUBKEYHASH\n\n if (data) {\n sum += TX_OUTPUT_BASE + data.length\n }\n const fee = sum * feeRate\n return fee > MIN_TX_FEE ? fee : MIN_TX_FEE\n}\n\n/**\n * Get the average value of an array.\n *\n * @param {number[]} array\n * @returns {number} The average value.\n */\nexport function arrayAverage(array: number[]): number {\n let sum = 0\n array.forEach((value) => (sum += value))\n return sum / array.length\n}\n\n/**\n * Get Dogecoin network to be used with bitcoinjs.\n *\n * @param {Network} network\n * @returns {Dogecoin.networks.Network} The Doge network.\n */\nexport const dogeNetwork = (network: Network): Dogecoin.networks.Network => {\n switch (network) {\n case Network.Mainnet:\n return coininfo.dogecoin.main.toBitcoinJS()\n case Network.Stagenet:\n return coininfo.dogecoin.main.toBitcoinJS()\n case Network.Testnet: {\n // Latest coininfo on NPM doesn't contain dogetest config information\n const bip32 = {\n private: 0x04358394,\n public: 0x043587cf,\n }\n const test = coininfo.dogecoin.test\n test.versions.bip32 = bip32\n return test.toBitcoinJS()\n }\n }\n}\n\n/**\n * Validate the Doge address.\n *\n * @param {string} address\n * @param {Network} network\n * @returns {boolean} `true` or `false`.\n */\nexport const validateAddress = (address: Address, network: Network): boolean => {\n try {\n Dogecoin.address.toOutputScript(address, dogeNetwork(network))\n return true\n } catch (error) {\n return false\n }\n}\n\n/**\n * Calculate fees based on fee rate and memo.\n *\n * @param {FeeRate} feeRate\n * @param {string} memo\n * @returns {BaseAmount} The calculated fees based on fee rate and the memo.\n */\nexport const calcFee = (feeRate: FeeRate, memo?: string): BaseAmount => {\n const compiledMemo = memo ? compileMemo(memo) : null\n const fee = getFee([], feeRate, compiledMemo)\n return baseAmount(fee)\n}\n\n/**\n * Get the default fees with rates.\n *\n * @returns {FeesWithRates} The default fees and rates.\n */\nexport const getDefaultFeesWithRates = (): FeesWithRates => {\n const rates = {\n ...standardFeeRates(MIN_TX_FEE),\n }\n\n return {\n fees: calcFees(rates, calcFee),\n rates,\n }\n}\n\n/**\n * Get the default fees.\n *\n * @returns {Fees} The default fees.\n */\nexport const getDefaultFees = (): Fees => {\n const { fees } = getDefaultFeesWithRates()\n return fees\n}\n\n/**\n * Get address prefix based on the network.\n *\n * @param {Network} network\n * @returns {string} The address prefix based on the network.\n *\n **/\nexport const getPrefix = (network: Network) => {\n switch (network) {\n case Network.Mainnet:\n case Network.Stagenet:\n return ''\n case Network.Testnet:\n return 'n'\n }\n}\n","import {\n Fee,\n FeeRate,\n Network,\n TxHash,\n TxParams,\n UTXO,\n UTXOClient,\n UtxoClientParams,\n checkFeeBounds,\n} from '@xchainjs/xchain-client'\nimport { getSeed } from '@xchainjs/xchain-crypto'\nimport { Address } from '@xchainjs/xchain-util'\nimport axios from 'axios'\nimport * as Dogecoin from 'bitcoinjs-lib'\nimport accumulative from 'coinselect/accumulative'\n\nimport {\n DOGEChain,\n LOWER_FEE_BOUND,\n UPPER_FEE_BOUND,\n blockcypherDataProviders,\n blockstreamExplorerProviders,\n} from './const'\nimport { LedgerTxInfo, LedgerTxInfoParams } from './types/ledger'\nimport * as Utils from './utils'\n\nconst DEFAULT_SUGGESTED_TRANSACTION_FEE = 150000\n\nexport const defaultDogeParams: UtxoClientParams = {\n network: Network.Mainnet,\n phrase: '',\n explorerProviders: blockstreamExplorerProviders,\n dataProviders: [blockcypherDataProviders],\n rootDerivationPaths: {\n [Network.Mainnet]: `m/44'/3'/0'/0/`,\n [Network.Stagenet]: `m/44'/3'/0'/0/`,\n [Network.Testnet]: `m/44'/1'/0'/0/`,\n },\n feeBounds: {\n lower: LOWER_FEE_BOUND,\n upper: UPPER_FEE_BOUND,\n },\n}\n/**\n * Custom Dogecoin client\n */\nclass Client extends UTXOClient {\n /**\n * Constructor\n * Client is initialised with network type\n * Pass strict null as nodeAuth to disable auth for node json rpc\n *\n * @param {DogecoinClientParams} params\n */\n constructor(params = defaultDogeParams) {\n super(DOGEChain, {\n network: params.network,\n rootDerivationPaths: params.rootDerivationPaths,\n phrase: params.phrase,\n feeBounds: params.feeBounds,\n explorerProviders: params.explorerProviders,\n dataProviders: params.dataProviders,\n })\n }\n\n /**\n * Get the current address.\n *\n * Generates a network-specific key-pair by first converting the buffer to a Wallet-Import-Format (WIF)\n * The address is then decoded into type P2WPKH and returned.\n *\n * @returns {Address} The current address.\n *\n * @throws {\"Phrase must be provided\"} Thrown if phrase has not been set before.\n * @throws {\"Address not defined\"} Thrown if failed creating account from phrase.\n */\n getAddress(index = 0): Address {\n if (index < 0) {\n throw new Error('index must be greater than zero')\n }\n if (this.phrase) {\n const dogeNetwork = Utils.dogeNetwork(this.network)\n const dogeKeys = this.getDogeKeys(this.phrase, index)\n\n const { address } = Dogecoin.payments.p2pkh({\n pubkey: dogeKeys.publicKey,\n network: dogeNetwork,\n })\n if (!address) {\n throw new Error('Address not defined')\n }\n return address\n }\n throw new Error('Phrase must be provided')\n }\n\n /**\n * @private\n * Get private key.\n *\n * Private function to get keyPair from the this.phrase\n *\n * @param {string} phrase The phrase to be used for generating privkey\n * @returns {ECPairInterface} The privkey generated from the given phrase\n *\n * @throws {\"Could not get private key from phrase\"} Throws an error if failed creating Doge keys from the given phrase\n * */\n private getDogeKeys(phrase: string, index = 0): Dogecoin.ECPairInterface {\n const dogeNetwork = Utils.dogeNetwork(this.network)\n\n const seed = getSeed(phrase)\n const master = Dogecoin.bip32.fromSeed(seed, dogeNetwork).derivePath(this.getFullDerivationPath(index))\n\n if (!master.privateKey) {\n throw new Error('Could not get private key from phrase')\n }\n\n return Dogecoin.ECPair.fromPrivateKey(master.privateKey, { network: dogeNetwork })\n }\n\n /**\n * Validate the given address.\n *\n * @param {Address} address\n * @returns {boolean} `true` or `false`\n */\n validateAddress(address: string): boolean {\n return Utils.validateAddress(address, this.network)\n }\n\n protected async getSuggestedFeeRate(): Promise<FeeRate> {\n try {\n const response = await axios.get(`https://api.blockcypher.com/v1/doge/main`)\n return response.data.low_fee_per_kb / 1000 // feePerKb to feePerByte\n } catch (error) {\n return DEFAULT_SUGGESTED_TRANSACTION_FEE\n }\n }\n\n protected async calcFee(feeRate: FeeRate, memo?: string): Promise<Fee> {\n return Utils.calcFee(feeRate, memo)\n }\n\n /**\n * Transfer Doge.\n *\n * @param {TxParams&FeeRate} params The transfer options.\n * @returns {TxHash} The transaction hash.\n */\n async transfer(params: TxParams & { feeRate?: FeeRate }): Promise<TxHash> {\n const fromAddressIndex = params?.walletIndex || 0\n const feeRate = params.feeRate || (await this.getSuggestedFeeRate())\n checkFeeBounds(this.feeBounds, feeRate)\n const { psbt } = await this.buildTx({\n ...params,\n feeRate,\n sender: this.getAddress(fromAddressIndex),\n })\n const dogeKeys = this.getDogeKeys(this.phrase, fromAddressIndex)\n psbt.signAllInputs(dogeKeys) // Sign all inputs\n psbt.finalizeAllInputs() // Finalise inputs\n const txHex = psbt.extractTransaction().toHex() // TX extracted and formatted to hex\n\n return await this.roundRobinBroadcastTx(txHex)\n }\n\n /**\n * Build transcation.\n *\n * @param {BuildParams} params The transaction build options.\n * @returns {Transaction}\n */\n public buildTx = async ({\n amount,\n recipient,\n memo,\n feeRate,\n sender,\n }: TxParams & {\n feeRate: FeeRate\n sender: Address\n }): Promise<{ psbt: Dogecoin.Psbt; utxos: UTXO[] }> => {\n if (!this.validateAddress(recipient)) throw new Error('Invalid address')\n\n const utxos = await this.scanUTXOs(sender)\n if (utxos.length === 0) throw new Error('No utxos to send')\n const feeRateWhole = Number(feeRate.toFixed(0))\n const compiledMemo = memo ? Utils.compileMemo(memo) : null\n\n const targetOutputs = []\n //1. output to recipient\n targetOutputs.push({\n address: recipient,\n value: amount.amount().toNumber(),\n })\n //2. add output memo to targets (optional)\n if (compiledMemo) {\n targetOutputs.push({ script: compiledMemo, value: 0 })\n }\n const { inputs, outputs } = accumulative(utxos, targetOutputs, feeRateWhole)\n\n // .inputs and .outputs will be undefined if no solution was found\n if (!inputs || !outputs) throw new Error('Balance insufficient for transaction')\n\n const psbt = new Dogecoin.Psbt({ network: Utils.dogeNetwork(this.network) }) // Network-specific\n // TODO: Doge recommended fees is greater than the recommended by Bitcoinjs-lib (for BTC),\n // so we need to increase the maximum fee rate. Currently, the fast rate fee is near ~750000sats/byte\n // https://thornode.ninerealms.com/thorchain/inbound_addresses?height=7526662 (09-27-2022)\n // For now we increase it by 10x\n psbt.setMaximumFeeRate(7500000)\n // const params = { sochainUrl, network, address: sender }\n for (const utxo of inputs) {\n psbt.addInput({\n hash: utxo.hash,\n index: utxo.index,\n nonWitnessUtxo: Buffer.from(utxo.txHex, 'hex'),\n })\n }\n\n // Outputs\n outputs.forEach((output: Dogecoin.PsbtTxOutput) => {\n if (!output.address) {\n //an empty address means this is the change address\n output.address = sender\n }\n if (!output.script) {\n psbt.addOutput(output)\n } else {\n //we need to add the compiled memo this way to\n //avoid dust error tx when accumulating memo output with 0 value\n if (compiledMemo) {\n psbt.addOutput({ script: compiledMemo, value: 0 })\n }\n }\n })\n\n return { psbt, utxos }\n }\n\n /**\n * Create transaction info.\n *\n * @param {LedgerTxInfoParams} params The transaction build options.\n * @returns {LedgerTxInfo} The transaction info used for ledger sign.\n */\n public async createTxInfo(params: LedgerTxInfoParams): Promise<LedgerTxInfo> {\n const { psbt, utxos } = await this.buildTx(params)\n const ledgerTxInfo: LedgerTxInfo = {\n utxos,\n newTxHex: psbt.data.globalMap.unsignedTx.toBuffer().toString('hex'),\n }\n return ledgerTxInfo\n }\n}\n\nexport { Client }\n","import { Network } from '@xchainjs/xchain-client'\nimport axios from 'axios'\n\nconst DEFAULT_SUGGESTED_TRANSACTION_FEE = 150000\n\n/**\n * Get Dogecoin suggested transaction fee.\n *\n * @returns {number} The Dogecoin suggested transaction fee per bytes in sat.\n */\nexport const getSuggestedTxFee = async ({ blockcypherUrl }: { blockcypherUrl: string }): Promise<number> => {\n try {\n const response = await axios.get(`${blockcypherUrl}/doge/main`)\n return response.data.low_fee_per_kb / 1000 // feePerKb to feePerByte\n } catch (error) {\n return DEFAULT_SUGGESTED_TRANSACTION_FEE\n }\n}\n\nexport const getSendTxUrl = ({ blockcypherUrl, network }: { blockcypherUrl: string; network: Network }) => {\n if (network === 'testnet') {\n throw new Error('Testnet URL is not available for blockcypher')\n } else {\n return `${blockcypherUrl}/doge/main/txs/push`\n }\n}\n"],"names":["ExplorerProvider","Network","SochainProvider","SochainNetwork","BlockcypherProvider","BlockcypherNetwork","Dogecoin","coininfo","baseAmount","standardFeeRates","calcFees","UTXOClient","Utils.compileMemo","accumulative","Utils.dogeNetwork","dogeNetwork","getSeed","Utils.validateAddress","axios","Utils.calcFee","checkFeeBounds"],"mappings":"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"}
1
+ {"version":3,"file":"index.js","sources":["../src/const.ts","../src/utils.ts","../src/client.ts","../src/blockcypher-api.ts"],"sourcesContent":["import { ExplorerProvider, Network } from '@xchainjs/xchain-client'\nimport { Asset } from '@xchainjs/xchain-util'\nimport {\n BlockcypherNetwork,\n BlockcypherProvider,\n SochainNetwork,\n SochainProvider,\n} from '@xchainjs/xchain-utxo-providers'\n/**\n * Minimum transaction fee\n * 100000 satoshi/kB (similar to current `minrelaytxfee`)\n * @see https://github.com/dogecoin/dogecoin/blob/master/src/validation.h#L58\n */\nexport const MIN_TX_FEE = 100000\nexport const DOGE_DECIMAL = 8\nexport const LOWER_FEE_BOUND = 40_000\nexport const UPPER_FEE_BOUND = 20_000_000\n\n/**\n * Chain identifier for Dogecoin\n *\n */\nexport const DOGEChain = 'DOGE' as const\n\n/**\n * Base \"chain\" asset on dogecoin\n *\n * Based on definition in Thorchain `common`\n * @see https://gitlab.com/thorchain/thornode/-/blob/master/common/asset.go#L12-24\n */\nexport const AssetDOGE: Asset = { chain: DOGEChain, symbol: 'DOGE', ticker: 'DOGE', synth: false }\n\n// https://blockchair.com/\n\nconst DOGE_MAINNET_EXPLORER = new ExplorerProvider(\n 'https://blockchair.com/dogecoin',\n 'https://blockchair.com/dogecoin/address/%%ADDRESS%%',\n 'https://blockchair.com/dogecoin/transaction/%%TX_ID%%',\n)\nconst DOGE_TESTNET_EXPLORER = new ExplorerProvider(\n 'https://blockexplorer.one/dogecoin/testnet',\n 'https://blockexplorer.one/dogecoin/testnet/address/%%ADDRESS%%',\n 'https://blockexplorer.one/dogecoin/testnet/tx/%%TX_ID%%',\n)\nexport const blockstreamExplorerProviders = {\n [Network.Testnet]: DOGE_TESTNET_EXPLORER,\n [Network.Stagenet]: DOGE_MAINNET_EXPLORER,\n [Network.Mainnet]: DOGE_MAINNET_EXPLORER,\n}\n\n//======================\n// sochain\n//======================\n\nconst testnetSochainProvider = new SochainProvider(\n 'https://sochain.com/api/v3',\n process.env['SOCHAIN_API_KEY'] || '',\n DOGEChain,\n AssetDOGE,\n 8,\n SochainNetwork.DOGETEST,\n)\nconst mainnetSochainProvider = new SochainProvider(\n 'https://sochain.com/api/v3',\n process.env['SOCHAIN_API_KEY'] || '',\n DOGEChain,\n AssetDOGE,\n 8,\n SochainNetwork.DOGE,\n)\nexport const sochainDataProviders = {\n [Network.Testnet]: testnetSochainProvider,\n [Network.Stagenet]: mainnetSochainProvider,\n [Network.Mainnet]: mainnetSochainProvider,\n}\n\n//======================\n// Blockcypher\n//======================\n\nconst mainnetBlockcypherProvider = new BlockcypherProvider(\n 'https://api.blockcypher.com/v1',\n DOGEChain,\n AssetDOGE,\n 8,\n BlockcypherNetwork.DOGE,\n process.env['BlOCKCYPHER_API_KEY'] || '',\n)\nexport const blockcypherDataProviders = {\n [Network.Testnet]: undefined, //no provider here\n [Network.Stagenet]: mainnetBlockcypherProvider,\n [Network.Mainnet]: mainnetBlockcypherProvider,\n}\n","import { FeeRate, Fees, FeesWithRates, Network, UTXO, calcFees, standardFeeRates } from '@xchainjs/xchain-client'\nimport { Address, BaseAmount, baseAmount } from '@xchainjs/xchain-util'\nimport * as Dogecoin from 'bitcoinjs-lib'\nimport coininfo from 'coininfo'\n\nimport { MIN_TX_FEE } from './const'\n\nconst TX_EMPTY_SIZE = 4 + 1 + 1 + 4 //10\nconst TX_INPUT_BASE = 32 + 4 + 1 + 4 // 41\nconst TX_INPUT_PUBKEYHASH = 107\nconst TX_OUTPUT_BASE = 8 + 1 //9\nconst TX_OUTPUT_PUBKEYHASH = 25\n\nfunction inputBytes(): number {\n return TX_INPUT_BASE + TX_INPUT_PUBKEYHASH\n}\n\n/**\n * Compile memo.\n *\n * @param {string} memo The memo to be compiled.\n * @returns {Buffer} The compiled memo.\n */\nexport const compileMemo = (memo: string): Buffer => {\n const data = Buffer.from(memo, 'utf8') // converts MEMO to buffer\n return Dogecoin.script.compile([Dogecoin.opcodes.OP_RETURN, data]) // Compile OP_RETURN script\n}\n\n/**\n * Get the transaction fee.\n *\n * @param {UTXO[]} inputs The UTXOs.\n * @param {FeeRate} feeRate The fee rate.\n * @param {Buffer} data The compiled memo (Optional).\n * @returns {number} The fee amount.\n */\nexport function getFee(inputs: UTXO[], feeRate: FeeRate, data: Buffer | null = null): number {\n let sum =\n TX_EMPTY_SIZE +\n inputs.reduce(function (a) {\n return a + inputBytes()\n }, 0) +\n inputs.length + // +1 byte for each input signature\n TX_OUTPUT_BASE +\n TX_OUTPUT_PUBKEYHASH +\n TX_OUTPUT_BASE +\n TX_OUTPUT_PUBKEYHASH\n\n if (data) {\n sum += TX_OUTPUT_BASE + data.length\n }\n const fee = sum * feeRate\n return fee > MIN_TX_FEE ? fee : MIN_TX_FEE\n}\n\n/**\n * Get the average value of an array.\n *\n * @param {number[]} array\n * @returns {number} The average value.\n */\nexport function arrayAverage(array: number[]): number {\n let sum = 0\n array.forEach((value) => (sum += value))\n return sum / array.length\n}\n\n/**\n * Get Dogecoin network to be used with bitcoinjs.\n *\n * @param {Network} network\n * @returns {Dogecoin.networks.Network} The Doge network.\n */\nexport const dogeNetwork = (network: Network): Dogecoin.networks.Network => {\n switch (network) {\n case Network.Mainnet:\n return coininfo.dogecoin.main.toBitcoinJS()\n case Network.Stagenet:\n return coininfo.dogecoin.main.toBitcoinJS()\n case Network.Testnet: {\n // Latest coininfo on NPM doesn't contain dogetest config information\n const bip32 = {\n private: 0x04358394,\n public: 0x043587cf,\n }\n const test = coininfo.dogecoin.test\n test.versions.bip32 = bip32\n return test.toBitcoinJS()\n }\n }\n}\n\n/**\n * Validate the Doge address.\n *\n * @param {string} address\n * @param {Network} network\n * @returns {boolean} `true` or `false`.\n */\nexport const validateAddress = (address: Address, network: Network): boolean => {\n try {\n Dogecoin.address.toOutputScript(address, dogeNetwork(network))\n return true\n } catch (error) {\n return false\n }\n}\n\n/**\n * Calculate fees based on fee rate and memo.\n *\n * @param {FeeRate} feeRate\n * @param {string} memo\n * @returns {BaseAmount} The calculated fees based on fee rate and the memo.\n */\nexport const calcFee = (feeRate: FeeRate, memo?: string): BaseAmount => {\n const compiledMemo = memo ? compileMemo(memo) : null\n const fee = getFee([], feeRate, compiledMemo)\n return baseAmount(fee)\n}\n\n/**\n * Get the default fees with rates.\n *\n * @returns {FeesWithRates} The default fees and rates.\n */\nexport const getDefaultFeesWithRates = (): FeesWithRates => {\n const rates = {\n ...standardFeeRates(MIN_TX_FEE),\n }\n\n return {\n fees: calcFees(rates, calcFee),\n rates,\n }\n}\n\n/**\n * Get the default fees.\n *\n * @returns {Fees} The default fees.\n */\nexport const getDefaultFees = (): Fees => {\n const { fees } = getDefaultFeesWithRates()\n return fees\n}\n\n/**\n * Get address prefix based on the network.\n *\n * @param {Network} network\n * @returns {string} The address prefix based on the network.\n *\n **/\nexport const getPrefix = (network: Network) => {\n switch (network) {\n case Network.Mainnet:\n case Network.Stagenet:\n return ''\n case Network.Testnet:\n return 'n'\n }\n}\n","import {\n AssetInfo,\n Fee,\n FeeRate,\n Network,\n TxHash,\n TxParams,\n UTXO,\n UTXOClient,\n UtxoClientParams,\n checkFeeBounds,\n} from '@xchainjs/xchain-client'\nimport { getSeed } from '@xchainjs/xchain-crypto'\nimport { Address } from '@xchainjs/xchain-util'\nimport axios from 'axios'\nimport * as Dogecoin from 'bitcoinjs-lib'\nimport accumulative from 'coinselect/accumulative'\n\nimport {\n AssetDOGE,\n DOGEChain,\n DOGE_DECIMAL,\n LOWER_FEE_BOUND,\n UPPER_FEE_BOUND,\n blockcypherDataProviders,\n blockstreamExplorerProviders,\n} from './const'\nimport { LedgerTxInfo, LedgerTxInfoParams } from './types/ledger'\nimport * as Utils from './utils'\n\nconst DEFAULT_SUGGESTED_TRANSACTION_FEE = 150000\n\nexport const defaultDogeParams: UtxoClientParams = {\n network: Network.Mainnet,\n phrase: '',\n explorerProviders: blockstreamExplorerProviders,\n dataProviders: [blockcypherDataProviders],\n rootDerivationPaths: {\n [Network.Mainnet]: `m/44'/3'/0'/0/`,\n [Network.Stagenet]: `m/44'/3'/0'/0/`,\n [Network.Testnet]: `m/44'/1'/0'/0/`,\n },\n feeBounds: {\n lower: LOWER_FEE_BOUND,\n upper: UPPER_FEE_BOUND,\n },\n}\n/**\n * Custom Dogecoin client\n */\nclass Client extends UTXOClient {\n /**\n * Constructor\n * Client is initialised with network type\n * Pass strict null as nodeAuth to disable auth for node json rpc\n *\n * @param {DogecoinClientParams} params\n */\n constructor(params = defaultDogeParams) {\n super(DOGEChain, {\n network: params.network,\n rootDerivationPaths: params.rootDerivationPaths,\n phrase: params.phrase,\n feeBounds: params.feeBounds,\n explorerProviders: params.explorerProviders,\n dataProviders: params.dataProviders,\n })\n }\n\n /**\n * Get the current address.\n *\n * Generates a network-specific key-pair by first converting the buffer to a Wallet-Import-Format (WIF)\n * The address is then decoded into type P2WPKH and returned.\n *\n * @returns {Address} The current address.\n *\n * @throws {\"Phrase must be provided\"} Thrown if phrase has not been set before.\n * @throws {\"Address not defined\"} Thrown if failed creating account from phrase.\n */\n getAddress(index = 0): Address {\n if (index < 0) {\n throw new Error('index must be greater than zero')\n }\n if (this.phrase) {\n const dogeNetwork = Utils.dogeNetwork(this.network)\n const dogeKeys = this.getDogeKeys(this.phrase, index)\n\n const { address } = Dogecoin.payments.p2pkh({\n pubkey: dogeKeys.publicKey,\n network: dogeNetwork,\n })\n if (!address) {\n throw new Error('Address not defined')\n }\n return address\n }\n throw new Error('Phrase must be provided')\n }\n\n /**\n *\n * @returns Doge asset info\n */\n getAssetInfo(): AssetInfo {\n const assetInfo: AssetInfo = {\n asset: AssetDOGE,\n decimal: DOGE_DECIMAL,\n }\n return assetInfo\n }\n\n /**\n * @private\n * Get private key.\n *\n * Private function to get keyPair from the this.phrase\n *\n * @param {string} phrase The phrase to be used for generating privkey\n * @returns {ECPairInterface} The privkey generated from the given phrase\n *\n * @throws {\"Could not get private key from phrase\"} Throws an error if failed creating Doge keys from the given phrase\n * */\n private getDogeKeys(phrase: string, index = 0): Dogecoin.ECPairInterface {\n const dogeNetwork = Utils.dogeNetwork(this.network)\n\n const seed = getSeed(phrase)\n const master = Dogecoin.bip32.fromSeed(seed, dogeNetwork).derivePath(this.getFullDerivationPath(index))\n\n if (!master.privateKey) {\n throw new Error('Could not get private key from phrase')\n }\n\n return Dogecoin.ECPair.fromPrivateKey(master.privateKey, { network: dogeNetwork })\n }\n\n /**\n * Validate the given address.\n *\n * @param {Address} address\n * @returns {boolean} `true` or `false`\n */\n validateAddress(address: string): boolean {\n return Utils.validateAddress(address, this.network)\n }\n\n protected async getSuggestedFeeRate(): Promise<FeeRate> {\n try {\n const response = await axios.get(`https://api.blockcypher.com/v1/doge/main`)\n return response.data.low_fee_per_kb / 1000 // feePerKb to feePerByte\n } catch (error) {\n return DEFAULT_SUGGESTED_TRANSACTION_FEE\n }\n }\n\n protected async calcFee(feeRate: FeeRate, memo?: string): Promise<Fee> {\n return Utils.calcFee(feeRate, memo)\n }\n\n /**\n * Transfer Doge.\n *\n * @param {TxParams&FeeRate} params The transfer options.\n * @returns {TxHash} The transaction hash.\n */\n async transfer(params: TxParams & { feeRate?: FeeRate }): Promise<TxHash> {\n const fromAddressIndex = params?.walletIndex || 0\n const feeRate = params.feeRate || (await this.getSuggestedFeeRate())\n checkFeeBounds(this.feeBounds, feeRate)\n const { psbt } = await this.buildTx({\n ...params,\n feeRate,\n sender: this.getAddress(fromAddressIndex),\n })\n const dogeKeys = this.getDogeKeys(this.phrase, fromAddressIndex)\n psbt.signAllInputs(dogeKeys) // Sign all inputs\n psbt.finalizeAllInputs() // Finalise inputs\n const txHex = psbt.extractTransaction().toHex() // TX extracted and formatted to hex\n\n return await this.roundRobinBroadcastTx(txHex)\n }\n\n /**\n * Build transcation.\n *\n * @param {BuildParams} params The transaction build options.\n * @returns {Transaction}\n */\n public buildTx = async ({\n amount,\n recipient,\n memo,\n feeRate,\n sender,\n }: TxParams & {\n feeRate: FeeRate\n sender: Address\n }): Promise<{ psbt: Dogecoin.Psbt; utxos: UTXO[] }> => {\n if (!this.validateAddress(recipient)) throw new Error('Invalid address')\n\n const utxos = await this.scanUTXOs(sender)\n if (utxos.length === 0) throw new Error('No utxos to send')\n const feeRateWhole = Number(feeRate.toFixed(0))\n const compiledMemo = memo ? Utils.compileMemo(memo) : null\n\n const targetOutputs = []\n //1. output to recipient\n targetOutputs.push({\n address: recipient,\n value: amount.amount().toNumber(),\n })\n //2. add output memo to targets (optional)\n if (compiledMemo) {\n targetOutputs.push({ script: compiledMemo, value: 0 })\n }\n const { inputs, outputs } = accumulative(utxos, targetOutputs, feeRateWhole)\n\n // .inputs and .outputs will be undefined if no solution was found\n if (!inputs || !outputs) throw new Error('Balance insufficient for transaction')\n\n const psbt = new Dogecoin.Psbt({ network: Utils.dogeNetwork(this.network) }) // Network-specific\n // TODO: Doge recommended fees is greater than the recommended by Bitcoinjs-lib (for BTC),\n // so we need to increase the maximum fee rate. Currently, the fast rate fee is near ~750000sats/byte\n // https://thornode.ninerealms.com/thorchain/inbound_addresses?height=7526662 (09-27-2022)\n // For now we increase it by 10x\n psbt.setMaximumFeeRate(7500000)\n // const params = { sochainUrl, network, address: sender }\n for (const utxo of inputs) {\n psbt.addInput({\n hash: utxo.hash,\n index: utxo.index,\n nonWitnessUtxo: Buffer.from(utxo.txHex, 'hex'),\n })\n }\n\n // Outputs\n outputs.forEach((output: Dogecoin.PsbtTxOutput) => {\n if (!output.address) {\n //an empty address means this is the change address\n output.address = sender\n }\n if (!output.script) {\n psbt.addOutput(output)\n } else {\n //we need to add the compiled memo this way to\n //avoid dust error tx when accumulating memo output with 0 value\n if (compiledMemo) {\n psbt.addOutput({ script: compiledMemo, value: 0 })\n }\n }\n })\n\n return { psbt, utxos }\n }\n\n /**\n * Create transaction info.\n *\n * @param {LedgerTxInfoParams} params The transaction build options.\n * @returns {LedgerTxInfo} The transaction info used for ledger sign.\n */\n public async createTxInfo(params: LedgerTxInfoParams): Promise<LedgerTxInfo> {\n const { psbt, utxos } = await this.buildTx(params)\n const ledgerTxInfo: LedgerTxInfo = {\n utxos,\n newTxHex: psbt.data.globalMap.unsignedTx.toBuffer().toString('hex'),\n }\n return ledgerTxInfo\n }\n}\n\nexport { Client }\n","import { Network } from '@xchainjs/xchain-client'\nimport axios from 'axios'\n\nconst DEFAULT_SUGGESTED_TRANSACTION_FEE = 150000\n\n/**\n * Get Dogecoin suggested transaction fee.\n *\n * @returns {number} The Dogecoin suggested transaction fee per bytes in sat.\n */\nexport const getSuggestedTxFee = async ({ blockcypherUrl }: { blockcypherUrl: string }): Promise<number> => {\n try {\n const response = await axios.get(`${blockcypherUrl}/doge/main`)\n return response.data.low_fee_per_kb / 1000 // feePerKb to feePerByte\n } catch (error) {\n return DEFAULT_SUGGESTED_TRANSACTION_FEE\n }\n}\n\nexport const getSendTxUrl = ({ blockcypherUrl, network }: { blockcypherUrl: string; network: Network }) => {\n if (network === 'testnet') {\n throw new Error('Testnet URL is not available for blockcypher')\n } else {\n return `${blockcypherUrl}/doge/main/txs/push`\n }\n}\n"],"names":["ExplorerProvider","Network","SochainProvider","SochainNetwork","BlockcypherProvider","BlockcypherNetwork","Dogecoin","coininfo","baseAmount","standardFeeRates","calcFees","UTXOClient","Utils.compileMemo","accumulative","Utils.dogeNetwork","dogeNetwork","getSeed","Utils.validateAddress","axios","Utils.calcFee","checkFeeBounds"],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@xchainjs/xchain-doge",
3
- "version": "0.6.0",
3
+ "version": "0.6.2",
4
4
  "description": "Custom Doge client and utilities used by XChain clients",
5
5
  "keywords": [
6
6
  "Xchain",
@@ -33,10 +33,10 @@
33
33
  "postversion": "git push --follow-tags"
34
34
  },
35
35
  "devDependencies": {
36
- "@xchainjs/xchain-client": "^0.14.0",
36
+ "@xchainjs/xchain-client": "^0.14.1",
37
37
  "@xchainjs/xchain-crypto": "^0.3.0",
38
38
  "@xchainjs/xchain-util": "^0.13.0",
39
- "@xchainjs/xchain-utxo-providers": "^0.2.0",
39
+ "@xchainjs/xchain-utxo-providers": "^0.2.1",
40
40
  "@types/wif": "^2.0.2",
41
41
  "axios": "^1.3.6",
42
42
  "axios-mock-adapter": "^1.20.0",
@@ -46,10 +46,10 @@
46
46
  "wif": "^2.0.6"
47
47
  },
48
48
  "peerDependencies": {
49
- "@xchainjs/xchain-client": "^0.14.0",
49
+ "@xchainjs/xchain-client": "^0.14.1",
50
50
  "@xchainjs/xchain-crypto": "^0.3.0",
51
51
  "@xchainjs/xchain-util": "^0.13.0",
52
- "@xchainjs/xchain-utxo-providers": "^0.2.0",
52
+ "@xchainjs/xchain-utxo-providers": "^0.2.1",
53
53
  "axios": "^1.3.6",
54
54
  "bitcoinjs-lib": "5.2.0",
55
55
  "coininfo": "5.1.0",
@@ -59,4 +59,4 @@
59
59
  "publishConfig": {
60
60
  "access": "public"
61
61
  }
62
- }
62
+ }