@getomnichain/omnichain 0.2.0
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/LICENSE +21 -0
- package/README.md +66 -0
- package/dist/abstract_gas_pricing.d.ts +31 -0
- package/dist/abstract_gas_pricing.d.ts.map +1 -0
- package/dist/abstract_gas_pricing.js +22 -0
- package/dist/abstract_gas_pricing.js.map +1 -0
- package/dist/address.d.ts +10 -0
- package/dist/address.d.ts.map +1 -0
- package/dist/address.factory.d.ts +26 -0
- package/dist/address.factory.d.ts.map +1 -0
- package/dist/address.factory.js +75 -0
- package/dist/address.factory.js.map +1 -0
- package/dist/address.js +13 -0
- package/dist/address.js.map +1 -0
- package/dist/address_field.decorator.d.ts +17 -0
- package/dist/address_field.decorator.d.ts.map +1 -0
- package/dist/address_field.decorator.js +34 -0
- package/dist/address_field.decorator.js.map +1 -0
- package/dist/chain.base.d.ts +79 -0
- package/dist/chain.base.d.ts.map +1 -0
- package/dist/chain.base.js +113 -0
- package/dist/chain.base.js.map +1 -0
- package/dist/chain_ids.d.ts +122 -0
- package/dist/chain_ids.d.ts.map +1 -0
- package/dist/chain_ids.js +193 -0
- package/dist/chain_ids.js.map +1 -0
- package/dist/errors.d.ts +42 -0
- package/dist/errors.d.ts.map +1 -0
- package/dist/errors.js +62 -0
- package/dist/errors.js.map +1 -0
- package/dist/evm/evm_address.d.ts +11 -0
- package/dist/evm/evm_address.d.ts.map +1 -0
- package/dist/evm/evm_address.js +56 -0
- package/dist/evm/evm_address.js.map +1 -0
- package/dist/evm/evm_chain.d.ts +123 -0
- package/dist/evm/evm_chain.d.ts.map +1 -0
- package/dist/evm/evm_chain.js +685 -0
- package/dist/evm/evm_chain.js.map +1 -0
- package/dist/evm/evm_chains.d.ts +83 -0
- package/dist/evm/evm_chains.d.ts.map +1 -0
- package/dist/evm/evm_chains.js +493 -0
- package/dist/evm/evm_chains.js.map +1 -0
- package/dist/evm/evm_gas_estimate.d.ts +45 -0
- package/dist/evm/evm_gas_estimate.d.ts.map +1 -0
- package/dist/evm/evm_gas_estimate.js +70 -0
- package/dist/evm/evm_gas_estimate.js.map +1 -0
- package/dist/evm/evm_gas_pricing.d.ts +40 -0
- package/dist/evm/evm_gas_pricing.d.ts.map +1 -0
- package/dist/evm/evm_gas_pricing.js +56 -0
- package/dist/evm/evm_gas_pricing.js.map +1 -0
- package/dist/evm/evm_token.d.ts +7 -0
- package/dist/evm/evm_token.d.ts.map +1 -0
- package/dist/evm/evm_token.js +22 -0
- package/dist/evm/evm_token.js.map +1 -0
- package/dist/evm/evm_tokens.d.ts +81 -0
- package/dist/evm/evm_tokens.d.ts.map +1 -0
- package/dist/evm/evm_tokens.js +104 -0
- package/dist/evm/evm_tokens.js.map +1 -0
- package/dist/evm/evm_transaction_status.d.ts +108 -0
- package/dist/evm/evm_transaction_status.d.ts.map +1 -0
- package/dist/evm/evm_transaction_status.js +177 -0
- package/dist/evm/evm_transaction_status.js.map +1 -0
- package/dist/evm/index.d.ts +10 -0
- package/dist/evm/index.d.ts.map +1 -0
- package/dist/evm/index.js +10 -0
- package/dist/evm/index.js.map +1 -0
- package/dist/evm/unsigned_evm_transaction.d.ts +19 -0
- package/dist/evm/unsigned_evm_transaction.d.ts.map +1 -0
- package/dist/evm/unsigned_evm_transaction.js +18 -0
- package/dist/evm/unsigned_evm_transaction.js.map +1 -0
- package/dist/index.d.ts +18 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +18 -0
- package/dist/index.js.map +1 -0
- package/dist/is_address.decorator.d.ts +3 -0
- package/dist/is_address.decorator.d.ts.map +1 -0
- package/dist/is_address.decorator.js +51 -0
- package/dist/is_address.decorator.js.map +1 -0
- package/dist/network_type.d.ts +73 -0
- package/dist/network_type.d.ts.map +1 -0
- package/dist/network_type.js +144 -0
- package/dist/network_type.js.map +1 -0
- package/dist/priority.d.ts +23 -0
- package/dist/priority.d.ts.map +1 -0
- package/dist/priority.js +23 -0
- package/dist/priority.js.map +1 -0
- package/dist/solana/index.d.ts +9 -0
- package/dist/solana/index.d.ts.map +1 -0
- package/dist/solana/index.js +9 -0
- package/dist/solana/index.js.map +1 -0
- package/dist/solana/solana_address.d.ts +20 -0
- package/dist/solana/solana_address.d.ts.map +1 -0
- package/dist/solana/solana_address.js +45 -0
- package/dist/solana/solana_address.js.map +1 -0
- package/dist/solana/solana_chain.d.ts +213 -0
- package/dist/solana/solana_chain.d.ts.map +1 -0
- package/dist/solana/solana_chain.js +704 -0
- package/dist/solana/solana_chain.js.map +1 -0
- package/dist/solana/solana_chains.d.ts +24 -0
- package/dist/solana/solana_chains.d.ts.map +1 -0
- package/dist/solana/solana_chains.js +84 -0
- package/dist/solana/solana_chains.js.map +1 -0
- package/dist/solana/solana_gas_pricing.d.ts +30 -0
- package/dist/solana/solana_gas_pricing.d.ts.map +1 -0
- package/dist/solana/solana_gas_pricing.js +26 -0
- package/dist/solana/solana_gas_pricing.js.map +1 -0
- package/dist/solana/solana_token.d.ts +19 -0
- package/dist/solana/solana_token.d.ts.map +1 -0
- package/dist/solana/solana_token.js +34 -0
- package/dist/solana/solana_token.js.map +1 -0
- package/dist/solana/solana_tokens.d.ts +22 -0
- package/dist/solana/solana_tokens.d.ts.map +1 -0
- package/dist/solana/solana_tokens.js +26 -0
- package/dist/solana/solana_tokens.js.map +1 -0
- package/dist/solana/solana_transaction_status.d.ts +59 -0
- package/dist/solana/solana_transaction_status.d.ts.map +1 -0
- package/dist/solana/solana_transaction_status.js +144 -0
- package/dist/solana/solana_transaction_status.js.map +1 -0
- package/dist/solana/unsigned_solana_transaction.d.ts +31 -0
- package/dist/solana/unsigned_solana_transaction.d.ts.map +1 -0
- package/dist/solana/unsigned_solana_transaction.js +26 -0
- package/dist/solana/unsigned_solana_transaction.js.map +1 -0
- package/dist/token.d.ts +35 -0
- package/dist/token.d.ts.map +1 -0
- package/dist/token.js +62 -0
- package/dist/token.js.map +1 -0
- package/dist/ton/index.d.ts +2 -0
- package/dist/ton/index.d.ts.map +1 -0
- package/dist/ton/index.js +2 -0
- package/dist/ton/index.js.map +1 -0
- package/dist/ton/ton_address.d.ts +10 -0
- package/dist/ton/ton_address.d.ts.map +1 -0
- package/dist/ton/ton_address.js +53 -0
- package/dist/ton/ton_address.js.map +1 -0
- package/dist/transaction_status.d.ts +140 -0
- package/dist/transaction_status.d.ts.map +1 -0
- package/dist/transaction_status.js +271 -0
- package/dist/transaction_status.js.map +1 -0
- package/dist/unsigned_transaction.d.ts +7 -0
- package/dist/unsigned_transaction.d.ts.map +1 -0
- package/dist/unsigned_transaction.js +9 -0
- package/dist/unsigned_transaction.js.map +1 -0
- package/dist/utxo/btc/btc_address.d.ts +15 -0
- package/dist/utxo/btc/btc_address.d.ts.map +1 -0
- package/dist/utxo/btc/btc_address.js +39 -0
- package/dist/utxo/btc/btc_address.js.map +1 -0
- package/dist/utxo/btc/btc_chain.d.ts +34 -0
- package/dist/utxo/btc/btc_chain.d.ts.map +1 -0
- package/dist/utxo/btc/btc_chain.js +62 -0
- package/dist/utxo/btc/btc_chain.js.map +1 -0
- package/dist/utxo/btc/btc_chains.d.ts +25 -0
- package/dist/utxo/btc/btc_chains.d.ts.map +1 -0
- package/dist/utxo/btc/btc_chains.js +43 -0
- package/dist/utxo/btc/btc_chains.js.map +1 -0
- package/dist/utxo/btc/btc_token.d.ts +6 -0
- package/dist/utxo/btc/btc_token.d.ts.map +1 -0
- package/dist/utxo/btc/btc_token.js +11 -0
- package/dist/utxo/btc/btc_token.js.map +1 -0
- package/dist/utxo/btc/index.d.ts +14 -0
- package/dist/utxo/btc/index.d.ts.map +1 -0
- package/dist/utxo/btc/index.js +14 -0
- package/dist/utxo/btc/index.js.map +1 -0
- package/dist/utxo/btc/network_params.d.ts +50 -0
- package/dist/utxo/btc/network_params.d.ts.map +1 -0
- package/dist/utxo/btc/network_params.js +188 -0
- package/dist/utxo/btc/network_params.js.map +1 -0
- package/dist/utxo/btc/tools/asset_outpoint.d.ts +7 -0
- package/dist/utxo/btc/tools/asset_outpoint.d.ts.map +1 -0
- package/dist/utxo/btc/tools/asset_outpoint.js +12 -0
- package/dist/utxo/btc/tools/asset_outpoint.js.map +1 -0
- package/dist/utxo/btc/tools/bitcoin_core.tool.d.ts +41 -0
- package/dist/utxo/btc/tools/bitcoin_core.tool.d.ts.map +1 -0
- package/dist/utxo/btc/tools/bitcoin_core.tool.js +172 -0
- package/dist/utxo/btc/tools/bitcoin_core.tool.js.map +1 -0
- package/dist/utxo/btc/tools/esplora.tool.d.ts +27 -0
- package/dist/utxo/btc/tools/esplora.tool.d.ts.map +1 -0
- package/dist/utxo/btc/tools/esplora.tool.js +113 -0
- package/dist/utxo/btc/tools/esplora.tool.js.map +1 -0
- package/dist/utxo/btc/tools/inscription_index.d.ts +6 -0
- package/dist/utxo/btc/tools/inscription_index.d.ts.map +1 -0
- package/dist/utxo/btc/tools/inscription_index.js +2 -0
- package/dist/utxo/btc/tools/inscription_index.js.map +1 -0
- package/dist/utxo/btc/tools/ordiscan.tool.d.ts +19 -0
- package/dist/utxo/btc/tools/ordiscan.tool.d.ts.map +1 -0
- package/dist/utxo/btc/tools/ordiscan.tool.js +53 -0
- package/dist/utxo/btc/tools/ordiscan.tool.js.map +1 -0
- package/dist/utxo/btc/tools/rare_sat_index.d.ts +6 -0
- package/dist/utxo/btc/tools/rare_sat_index.d.ts.map +1 -0
- package/dist/utxo/btc/tools/rare_sat_index.js +2 -0
- package/dist/utxo/btc/tools/rare_sat_index.js.map +1 -0
- package/dist/utxo/btc/tools/rune_index.d.ts +6 -0
- package/dist/utxo/btc/tools/rune_index.d.ts.map +1 -0
- package/dist/utxo/btc/tools/rune_index.js +2 -0
- package/dist/utxo/btc/tools/rune_index.js.map +1 -0
- package/dist/utxo/btc/tools/unisat.tool.d.ts +18 -0
- package/dist/utxo/btc/tools/unisat.tool.d.ts.map +1 -0
- package/dist/utxo/btc/tools/unisat.tool.js +49 -0
- package/dist/utxo/btc/tools/unisat.tool.js.map +1 -0
- package/dist/utxo/coin_selection.d.ts +29 -0
- package/dist/utxo/coin_selection.d.ts.map +1 -0
- package/dist/utxo/coin_selection.js +156 -0
- package/dist/utxo/coin_selection.js.map +1 -0
- package/dist/utxo/doge/doge_chains.d.ts +17 -0
- package/dist/utxo/doge/doge_chains.d.ts.map +1 -0
- package/dist/utxo/doge/doge_chains.js +28 -0
- package/dist/utxo/doge/doge_chains.js.map +1 -0
- package/dist/utxo/doge/index.d.ts +3 -0
- package/dist/utxo/doge/index.d.ts.map +1 -0
- package/dist/utxo/doge/index.js +3 -0
- package/dist/utxo/doge/index.js.map +1 -0
- package/dist/utxo/doge/network_params.d.ts +4 -0
- package/dist/utxo/doge/network_params.d.ts.map +1 -0
- package/dist/utxo/doge/network_params.js +24 -0
- package/dist/utxo/doge/network_params.js.map +1 -0
- package/dist/utxo/ecc.d.ts +2 -0
- package/dist/utxo/ecc.d.ts.map +1 -0
- package/dist/utxo/ecc.js +11 -0
- package/dist/utxo/ecc.js.map +1 -0
- package/dist/utxo/fee.d.ts +12 -0
- package/dist/utxo/fee.d.ts.map +1 -0
- package/dist/utxo/fee.js +51 -0
- package/dist/utxo/fee.js.map +1 -0
- package/dist/utxo/index.d.ts +20 -0
- package/dist/utxo/index.d.ts.map +1 -0
- package/dist/utxo/index.js +20 -0
- package/dist/utxo/index.js.map +1 -0
- package/dist/utxo/ltc/index.d.ts +3 -0
- package/dist/utxo/ltc/index.d.ts.map +1 -0
- package/dist/utxo/ltc/index.js +3 -0
- package/dist/utxo/ltc/index.js.map +1 -0
- package/dist/utxo/ltc/ltc_chains.d.ts +17 -0
- package/dist/utxo/ltc/ltc_chains.d.ts.map +1 -0
- package/dist/utxo/ltc/ltc_chains.js +28 -0
- package/dist/utxo/ltc/ltc_chains.js.map +1 -0
- package/dist/utxo/ltc/network_params.d.ts +4 -0
- package/dist/utxo/ltc/network_params.d.ts.map +1 -0
- package/dist/utxo/ltc/network_params.js +27 -0
- package/dist/utxo/ltc/network_params.js.map +1 -0
- package/dist/utxo/script.d.ts +16 -0
- package/dist/utxo/script.d.ts.map +1 -0
- package/dist/utxo/script.js +52 -0
- package/dist/utxo/script.js.map +1 -0
- package/dist/utxo/tools/broadcaster.d.ts +6 -0
- package/dist/utxo/tools/broadcaster.d.ts.map +1 -0
- package/dist/utxo/tools/broadcaster.js +2 -0
- package/dist/utxo/tools/broadcaster.js.map +1 -0
- package/dist/utxo/tools/chain_tip_provider.d.ts +5 -0
- package/dist/utxo/tools/chain_tip_provider.d.ts.map +1 -0
- package/dist/utxo/tools/chain_tip_provider.js +2 -0
- package/dist/utxo/tools/chain_tip_provider.js.map +1 -0
- package/dist/utxo/tools/fee_estimator.d.ts +6 -0
- package/dist/utxo/tools/fee_estimator.d.ts.map +1 -0
- package/dist/utxo/tools/fee_estimator.js +2 -0
- package/dist/utxo/tools/fee_estimator.js.map +1 -0
- package/dist/utxo/tools/raw_transaction_provider.d.ts +8 -0
- package/dist/utxo/tools/raw_transaction_provider.d.ts.map +1 -0
- package/dist/utxo/tools/raw_transaction_provider.js +2 -0
- package/dist/utxo/tools/raw_transaction_provider.js.map +1 -0
- package/dist/utxo/tools/utxo_provider.d.ts +7 -0
- package/dist/utxo/tools/utxo_provider.d.ts.map +1 -0
- package/dist/utxo/tools/utxo_provider.js +2 -0
- package/dist/utxo/tools/utxo_provider.js.map +1 -0
- package/dist/utxo/unsigned_utxo_transaction.d.ts +32 -0
- package/dist/utxo/unsigned_utxo_transaction.d.ts.map +1 -0
- package/dist/utxo/unsigned_utxo_transaction.js +32 -0
- package/dist/utxo/unsigned_utxo_transaction.js.map +1 -0
- package/dist/utxo/utxo.d.ts +43 -0
- package/dist/utxo/utxo.d.ts.map +1 -0
- package/dist/utxo/utxo.js +2 -0
- package/dist/utxo/utxo.js.map +1 -0
- package/dist/utxo/utxo_chain.d.ts +102 -0
- package/dist/utxo/utxo_chain.d.ts.map +1 -0
- package/dist/utxo/utxo_chain.js +524 -0
- package/dist/utxo/utxo_chain.js.map +1 -0
- package/dist/utxo/utxo_chains.d.ts +29 -0
- package/dist/utxo/utxo_chains.d.ts.map +1 -0
- package/dist/utxo/utxo_chains.js +63 -0
- package/dist/utxo/utxo_chains.js.map +1 -0
- package/dist/utxo/utxo_gas_pricing.d.ts +22 -0
- package/dist/utxo/utxo_gas_pricing.d.ts.map +1 -0
- package/dist/utxo/utxo_gas_pricing.js +20 -0
- package/dist/utxo/utxo_gas_pricing.js.map +1 -0
- package/dist/utxo/utxo_network_params.d.ts +25 -0
- package/dist/utxo/utxo_network_params.d.ts.map +1 -0
- package/dist/utxo/utxo_network_params.js +15 -0
- package/dist/utxo/utxo_network_params.js.map +1 -0
- package/dist/utxo/utxo_transaction_status.d.ts +73 -0
- package/dist/utxo/utxo_transaction_status.d.ts.map +1 -0
- package/dist/utxo/utxo_transaction_status.js +89 -0
- package/dist/utxo/utxo_transaction_status.js.map +1 -0
- package/docs/PUBLISHING.md +119 -0
- package/docs/README.md +273 -0
- package/docs/evm.md +205 -0
- package/docs/solana.md +220 -0
- package/docs/utxo.md +364 -0
- package/package.json +94 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"unisat.tool.js","sourceRoot":"","sources":["../../../../utxo/btc/tools/unisat.tool.ts"],"names":[],"mappings":"AAAA,OAAO,KAAwB,MAAM,OAAO,CAAC;AAiC7C,MAAM,gBAAgB,GAAG,4BAA4B,CAAC;AACtD,MAAM,iBAAiB,GAAG,GAAG,CAAC;AAC9B,MAAM,iBAAiB,GAAG,GAAG,CAAC;AAE9B,MAAM,OAAO,WAAW;IACL,MAAM,CAAgB;IACtB,QAAQ,CAAS;IACjB,QAAQ,CAAS;IAElC,YAAY,OAA2B;QACrC,IAAI,CAAC,OAAO,CAAC,MAAM,IAAI,OAAO,CAAC,MAAM,CAAC,IAAI,EAAE,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YAC1D,MAAM,IAAI,KAAK,CAAC,iCAAiC,CAAC,CAAC;QACrD,CAAC;QACD,IAAI,CAAC,MAAM,GAAG,KAAK,CAAC,MAAM,CAAC;YACzB,OAAO,EAAE,CAAC,OAAO,CAAC,OAAO,IAAI,gBAAgB,CAAC,CAAC,OAAO,CAAC,KAAK,EAAE,EAAE,CAAC;YACjE,OAAO,EAAE,OAAO,CAAC,SAAS,IAAI,MAAM;YACpC,OAAO,EAAE,EAAE,aAAa,EAAE,UAAU,OAAO,CAAC,MAAM,EAAE,EAAE;SACvD,CAAC,CAAC;QACH,IAAI,CAAC,QAAQ,GAAG,OAAO,CAAC,QAAQ,IAAI,iBAAiB,CAAC;QACtD,IAAI,CAAC,QAAQ,GAAG,OAAO,CAAC,QAAQ,IAAI,iBAAiB,CAAC;IACxD,CAAC;IAED,IAAI,IAAI;QACN,OAAO,QAAQ,CAAC;IAClB,CAAC;IAED,KAAK,CAAC,yBAAyB,CAAC,OAAe;QAC7C,MAAM,IAAI,GAAG,IAAI,GAAG,EAAU,CAAC;QAC/B,MAAM,GAAG,GAA2B,EAAE,CAAC;QACvC,IAAI,MAAM,GAAG,CAAC,CAAC;QACf,KAAK,IAAI,IAAI,GAAG,CAAC,EAAE,IAAI,GAAG,IAAI,CAAC,QAAQ,EAAE,IAAI,EAAE,EAAE,CAAC;YAChD,MAAM,EAAE,IAAI,EAAE,GAAG,MAAM,IAAI,CAAC,MAAM,CAAC,GAAG,CACpC,uBAAuB,OAAO,mBAAmB,EACjD,EAAE,MAAM,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE,IAAI,CAAC,QAAQ,EAAE,EAAE,CAC5C,CAAC;YACF,IAAI,IAAI,CAAC,IAAI,KAAK,CAAC,IAAI,IAAI,CAAC,IAAI,KAAK,SAAS,IAAI,IAAI,CAAC,IAAI,KAAK,GAAG,EAAE,CAAC;gBACpE,MAAM,IAAI,KAAK,CAAC,gBAAgB,IAAI,CAAC,IAAI,IAAI,IAAI,CAAC,GAAG,EAAE,CAAC,CAAC;YAC3D,CAAC;YACD,MAAM,KAAK,GAAG,IAAI,CAAC,IAAI,CAAC,WAAW,IAAI,IAAI,CAAC,IAAI,CAAC,IAAI,IAAI,EAAE,CAAC;YAC5D,KAAK,MAAM,CAAC,IAAI,KAAK,EAAE,CAAC;gBACtB,MAAM,GAAG,GAAG,GAAG,CAAC,CAAC,IAAI,IAAI,CAAC,CAAC,IAAI,EAAE,CAAC;gBAClC,IAAI,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC;oBAAE,SAAS;gBAC5B,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;gBACd,GAAG,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC;YAC3C,CAAC;YACD,MAAM,IAAI,KAAK,CAAC,MAAM,CAAC;YACvB,MAAM,KAAK,GAAG,IAAI,CAAC,IAAI,CAAC,KAAK,IAAI,CAAC,CAAC;YACnC,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC,IAAI,MAAM,IAAI,KAAK;gBAAE,MAAM;QACnD,CAAC;QACD,OAAO,GAAG,CAAC;IACb,CAAC;CACF"}
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
import { UtxoScriptType } from './script.ts';
|
|
2
|
+
import { UnspentTransactionOutput } from './utxo.ts';
|
|
3
|
+
export interface CoinSelectionParams {
|
|
4
|
+
utxos: readonly UnspentTransactionOutput[];
|
|
5
|
+
targetSats: number;
|
|
6
|
+
feeRateSatsPerVByte: number;
|
|
7
|
+
longTermFeeRateSatsPerVByte?: number;
|
|
8
|
+
changeOutputType: UtxoScriptType;
|
|
9
|
+
outputsFixedVBytes: number;
|
|
10
|
+
costOfChangeSats: number;
|
|
11
|
+
maxIterations?: number;
|
|
12
|
+
}
|
|
13
|
+
export declare const CoinSelectionOutcomes: {
|
|
14
|
+
readonly Success: "success";
|
|
15
|
+
readonly InsufficientFunds: "insufficient_funds";
|
|
16
|
+
readonly NoSolution: "no_solution";
|
|
17
|
+
};
|
|
18
|
+
export type CoinSelectionOutcome = (typeof CoinSelectionOutcomes)[keyof typeof CoinSelectionOutcomes];
|
|
19
|
+
export interface CoinSelectionResult {
|
|
20
|
+
outcome: CoinSelectionOutcome;
|
|
21
|
+
selected: UnspentTransactionOutput[];
|
|
22
|
+
totalValueSats: number;
|
|
23
|
+
feeSats: number;
|
|
24
|
+
changeSats: number;
|
|
25
|
+
hasChange: boolean;
|
|
26
|
+
algorithm: 'bnb' | 'accumulator' | null;
|
|
27
|
+
}
|
|
28
|
+
export declare function selectCoins(params: CoinSelectionParams): CoinSelectionResult;
|
|
29
|
+
//# sourceMappingURL=coin_selection.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"coin_selection.d.ts","sourceRoot":"","sources":["../../utxo/coin_selection.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,cAAc,EAAmB,MAAM,aAAa,CAAC;AAC9D,OAAO,EAAE,wBAAwB,EAAE,MAAM,WAAW,CAAC;AAErD,MAAM,WAAW,mBAAmB;IAClC,KAAK,EAAE,SAAS,wBAAwB,EAAE,CAAC;IAC3C,UAAU,EAAE,MAAM,CAAC;IACnB,mBAAmB,EAAE,MAAM,CAAC;IAC5B,2BAA2B,CAAC,EAAE,MAAM,CAAC;IACrC,gBAAgB,EAAE,cAAc,CAAC;IACjC,kBAAkB,EAAE,MAAM,CAAC;IAC3B,gBAAgB,EAAE,MAAM,CAAC;IACzB,aAAa,CAAC,EAAE,MAAM,CAAC;CACxB;AAED,eAAO,MAAM,qBAAqB;;;;CAIxB,CAAC;AAEX,MAAM,MAAM,oBAAoB,GAC9B,CAAC,OAAO,qBAAqB,CAAC,CAAC,MAAM,OAAO,qBAAqB,CAAC,CAAC;AAErE,MAAM,WAAW,mBAAmB;IAClC,OAAO,EAAE,oBAAoB,CAAC;IAC9B,QAAQ,EAAE,wBAAwB,EAAE,CAAC;IACrC,cAAc,EAAE,MAAM,CAAC;IACvB,OAAO,EAAE,MAAM,CAAC;IAChB,UAAU,EAAE,MAAM,CAAC;IACnB,SAAS,EAAE,OAAO,CAAC;IACnB,SAAS,EAAE,KAAK,GAAG,aAAa,GAAG,IAAI,CAAC;CACzC;AAWD,wBAAgB,WAAW,CAAC,MAAM,EAAE,mBAAmB,GAAG,mBAAmB,CAgD5E"}
|
|
@@ -0,0 +1,156 @@
|
|
|
1
|
+
import { effectiveValueSats, inputVBytes } from "./fee.js";
|
|
2
|
+
import { UtxoScriptTypes } from "./script.js";
|
|
3
|
+
export const CoinSelectionOutcomes = {
|
|
4
|
+
Success: 'success',
|
|
5
|
+
InsufficientFunds: 'insufficient_funds',
|
|
6
|
+
NoSolution: 'no_solution',
|
|
7
|
+
};
|
|
8
|
+
const DEFAULT_MAX_ITERATIONS = 100_000;
|
|
9
|
+
export function selectCoins(params) {
|
|
10
|
+
const { utxos, targetSats, feeRateSatsPerVByte, changeOutputType, outputsFixedVBytes, costOfChangeSats, maxIterations = DEFAULT_MAX_ITERATIONS, } = params;
|
|
11
|
+
if (targetSats <= 0) {
|
|
12
|
+
return emptyResult(CoinSelectionOutcomes.NoSolution);
|
|
13
|
+
}
|
|
14
|
+
const coins = utxos.map((utxo) => {
|
|
15
|
+
const inputCost = Math.ceil(inputVBytes(utxo.scriptType) * feeRateSatsPerVByte);
|
|
16
|
+
return {
|
|
17
|
+
utxo,
|
|
18
|
+
rawValue: utxo.valueSats,
|
|
19
|
+
effectiveValue: effectiveValueSats(utxo.valueSats, utxo.scriptType, feeRateSatsPerVByte),
|
|
20
|
+
inputCost,
|
|
21
|
+
};
|
|
22
|
+
});
|
|
23
|
+
const positiveCoins = coins.filter((c) => c.effectiveValue > 0);
|
|
24
|
+
const totalEffective = positiveCoins.reduce((s, c) => s + c.effectiveValue, 0);
|
|
25
|
+
if (totalEffective < targetSats) {
|
|
26
|
+
return emptyResult(CoinSelectionOutcomes.InsufficientFunds);
|
|
27
|
+
}
|
|
28
|
+
const bnbResult = branchAndBound(positiveCoins, targetSats, costOfChangeSats, maxIterations);
|
|
29
|
+
if (bnbResult) {
|
|
30
|
+
return finalize(bnbResult, params, outputsFixedVBytes, feeRateSatsPerVByte, changeOutputType, 'bnb');
|
|
31
|
+
}
|
|
32
|
+
const accumulator = accumulatorFallback(positiveCoins, targetSats);
|
|
33
|
+
if (!accumulator) {
|
|
34
|
+
return emptyResult(CoinSelectionOutcomes.NoSolution);
|
|
35
|
+
}
|
|
36
|
+
return finalize(accumulator, params, outputsFixedVBytes, feeRateSatsPerVByte, changeOutputType, 'accumulator');
|
|
37
|
+
}
|
|
38
|
+
function branchAndBound(coins, target, costOfChange, maxIterations) {
|
|
39
|
+
const sorted = [...coins].sort((a, b) => b.effectiveValue - a.effectiveValue);
|
|
40
|
+
const tail = new Array(sorted.length + 1).fill(0);
|
|
41
|
+
for (let i = sorted.length - 1; i >= 0; i--) {
|
|
42
|
+
tail[i] = tail[i + 1] + sorted[i].effectiveValue;
|
|
43
|
+
}
|
|
44
|
+
let iterations = 0;
|
|
45
|
+
let best = null;
|
|
46
|
+
let bestOver = Infinity;
|
|
47
|
+
const current = [];
|
|
48
|
+
function recurse(depth, sum) {
|
|
49
|
+
if (++iterations > maxIterations)
|
|
50
|
+
return false;
|
|
51
|
+
if (sum > target + costOfChange)
|
|
52
|
+
return false;
|
|
53
|
+
if (sum >= target) {
|
|
54
|
+
const over = sum - target;
|
|
55
|
+
if (over < bestOver) {
|
|
56
|
+
bestOver = over;
|
|
57
|
+
best = [...current];
|
|
58
|
+
}
|
|
59
|
+
return over === 0;
|
|
60
|
+
}
|
|
61
|
+
if (sum + tail[depth] < target)
|
|
62
|
+
return false;
|
|
63
|
+
if (depth === sorted.length)
|
|
64
|
+
return false;
|
|
65
|
+
current.push(sorted[depth]);
|
|
66
|
+
if (recurse(depth + 1, sum + sorted[depth].effectiveValue)) {
|
|
67
|
+
current.pop();
|
|
68
|
+
return true;
|
|
69
|
+
}
|
|
70
|
+
current.pop();
|
|
71
|
+
return recurse(depth + 1, sum);
|
|
72
|
+
}
|
|
73
|
+
recurse(0, 0);
|
|
74
|
+
return best;
|
|
75
|
+
}
|
|
76
|
+
function accumulatorFallback(coins, target) {
|
|
77
|
+
const sorted = [...coins].sort((a, b) => b.effectiveValue - a.effectiveValue);
|
|
78
|
+
const selected = [];
|
|
79
|
+
let sum = 0;
|
|
80
|
+
for (const c of sorted) {
|
|
81
|
+
selected.push(c);
|
|
82
|
+
sum += c.effectiveValue;
|
|
83
|
+
if (sum >= target)
|
|
84
|
+
return selected;
|
|
85
|
+
}
|
|
86
|
+
return null;
|
|
87
|
+
}
|
|
88
|
+
function finalize(selected, params, outputsFixedVBytes, feeRateSatsPerVByte, changeOutputType, algorithm) {
|
|
89
|
+
const totalValueSats = selected.reduce((s, c) => s + c.rawValue, 0);
|
|
90
|
+
const inputsVBytes = selected.reduce((s, c) => s + inputVBytes(c.utxo.scriptType), 0);
|
|
91
|
+
const baseFeeSats = Math.ceil((outputsFixedVBytes + inputsVBytes) * feeRateSatsPerVByte);
|
|
92
|
+
const surplusBeforeChange = totalValueSats - params.targetSats - baseFeeSats;
|
|
93
|
+
if (surplusBeforeChange < 0) {
|
|
94
|
+
return {
|
|
95
|
+
outcome: CoinSelectionOutcomes.InsufficientFunds,
|
|
96
|
+
selected: [],
|
|
97
|
+
totalValueSats: 0,
|
|
98
|
+
feeSats: 0,
|
|
99
|
+
changeSats: 0,
|
|
100
|
+
hasChange: false,
|
|
101
|
+
algorithm: null,
|
|
102
|
+
};
|
|
103
|
+
}
|
|
104
|
+
const changeOutputCost = Math.ceil(outputVBytesFor(changeOutputType) * feeRateSatsPerVByte);
|
|
105
|
+
const changeIfAdded = surplusBeforeChange - changeOutputCost;
|
|
106
|
+
const dustValue = params.costOfChangeSats;
|
|
107
|
+
let feeSats;
|
|
108
|
+
let changeSats;
|
|
109
|
+
let hasChange;
|
|
110
|
+
if (changeIfAdded >= dustValue) {
|
|
111
|
+
hasChange = true;
|
|
112
|
+
changeSats = changeIfAdded;
|
|
113
|
+
feeSats = baseFeeSats + changeOutputCost;
|
|
114
|
+
}
|
|
115
|
+
else {
|
|
116
|
+
hasChange = false;
|
|
117
|
+
changeSats = 0;
|
|
118
|
+
feeSats = baseFeeSats + surplusBeforeChange;
|
|
119
|
+
}
|
|
120
|
+
return {
|
|
121
|
+
outcome: CoinSelectionOutcomes.Success,
|
|
122
|
+
selected: selected.map((c) => c.utxo),
|
|
123
|
+
totalValueSats,
|
|
124
|
+
feeSats,
|
|
125
|
+
changeSats,
|
|
126
|
+
hasChange,
|
|
127
|
+
algorithm,
|
|
128
|
+
};
|
|
129
|
+
}
|
|
130
|
+
function outputVBytesFor(type) {
|
|
131
|
+
switch (type) {
|
|
132
|
+
case UtxoScriptTypes.P2PKH:
|
|
133
|
+
return 34;
|
|
134
|
+
case UtxoScriptTypes.P2SH:
|
|
135
|
+
return 32;
|
|
136
|
+
case UtxoScriptTypes.P2WPKH:
|
|
137
|
+
return 31;
|
|
138
|
+
case UtxoScriptTypes.P2WSH:
|
|
139
|
+
case UtxoScriptTypes.P2TR:
|
|
140
|
+
return 43;
|
|
141
|
+
default:
|
|
142
|
+
return 0;
|
|
143
|
+
}
|
|
144
|
+
}
|
|
145
|
+
function emptyResult(outcome) {
|
|
146
|
+
return {
|
|
147
|
+
outcome,
|
|
148
|
+
selected: [],
|
|
149
|
+
totalValueSats: 0,
|
|
150
|
+
feeSats: 0,
|
|
151
|
+
changeSats: 0,
|
|
152
|
+
hasChange: false,
|
|
153
|
+
algorithm: null,
|
|
154
|
+
};
|
|
155
|
+
}
|
|
156
|
+
//# sourceMappingURL=coin_selection.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"coin_selection.js","sourceRoot":"","sources":["../../utxo/coin_selection.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
import { UtxoBroadcaster } from '../tools/broadcaster.ts';
|
|
2
|
+
import { UtxoChainTipProvider } from '../tools/chain_tip_provider.ts';
|
|
3
|
+
import { UtxoFeeEstimator } from '../tools/fee_estimator.ts';
|
|
4
|
+
import { UtxoRawTransactionProvider } from '../tools/raw_transaction_provider.ts';
|
|
5
|
+
import { UtxoProvider } from '../tools/utxo_provider.ts';
|
|
6
|
+
import { UtxoChain } from '../utxo_chain.ts';
|
|
7
|
+
export interface DogecoinChainFactoryOptions {
|
|
8
|
+
chainId: number;
|
|
9
|
+
utxoProvider: UtxoProvider;
|
|
10
|
+
rawTxProvider: UtxoRawTransactionProvider;
|
|
11
|
+
feeEstimator: UtxoFeeEstimator;
|
|
12
|
+
broadcaster: UtxoBroadcaster;
|
|
13
|
+
chainTipProvider: UtxoChainTipProvider;
|
|
14
|
+
}
|
|
15
|
+
export declare function dogecoinMainnetChain(options: DogecoinChainFactoryOptions): UtxoChain;
|
|
16
|
+
export declare function dogecoinTestnetChain(options: DogecoinChainFactoryOptions): UtxoChain;
|
|
17
|
+
//# sourceMappingURL=doge_chains.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"doge_chains.d.ts","sourceRoot":"","sources":["../../../utxo/doge/doge_chains.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,MAAM,yBAAyB,CAAC;AAC1D,OAAO,EAAE,oBAAoB,EAAE,MAAM,gCAAgC,CAAC;AACtE,OAAO,EAAE,gBAAgB,EAAE,MAAM,2BAA2B,CAAC;AAC7D,OAAO,EAAE,0BAA0B,EAAE,MAAM,sCAAsC,CAAC;AAClF,OAAO,EAAE,YAAY,EAAE,MAAM,2BAA2B,CAAC;AACzD,OAAO,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAC;AAG7C,MAAM,WAAW,2BAA2B;IAC1C,OAAO,EAAE,MAAM,CAAC;IAChB,YAAY,EAAE,YAAY,CAAC;IAC3B,aAAa,EAAE,0BAA0B,CAAC;IAC1C,YAAY,EAAE,gBAAgB,CAAC;IAC/B,WAAW,EAAE,eAAe,CAAC;IAC7B,gBAAgB,EAAE,oBAAoB,CAAC;CACxC;AAED,wBAAgB,oBAAoB,CAAC,OAAO,EAAE,2BAA2B,GAAG,SAAS,CAUpF;AAED,wBAAgB,oBAAoB,CAAC,OAAO,EAAE,2BAA2B,GAAG,SAAS,CAapF"}
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
import { UtxoChain } from "../utxo_chain.js";
|
|
2
|
+
import { DOGECOIN_MAINNET_PARAMS, DOGECOIN_TESTNET_PARAMS } from "./network_params.js";
|
|
3
|
+
export function dogecoinMainnetChain(options) {
|
|
4
|
+
return new UtxoChain({
|
|
5
|
+
name: 'Dogecoin',
|
|
6
|
+
params: DOGECOIN_MAINNET_PARAMS,
|
|
7
|
+
nativeSymbol: 'DOGE',
|
|
8
|
+
blockTimeSeconds: 60,
|
|
9
|
+
...options,
|
|
10
|
+
walletExplorerUrlTemplate: 'https://blockchair.com/dogecoin/address/{wallet_address}',
|
|
11
|
+
transactionExplorerUrlTemplate: 'https://blockchair.com/dogecoin/transaction/{tx_hash}',
|
|
12
|
+
});
|
|
13
|
+
}
|
|
14
|
+
export function dogecoinTestnetChain(options) {
|
|
15
|
+
if (DOGECOIN_TESTNET_PARAMS === null) {
|
|
16
|
+
throw new Error('Dogecoin testnet params unavailable (coininfo.dogecoin.test missing)');
|
|
17
|
+
}
|
|
18
|
+
return new UtxoChain({
|
|
19
|
+
name: 'Dogecoin Testnet',
|
|
20
|
+
params: DOGECOIN_TESTNET_PARAMS,
|
|
21
|
+
nativeSymbol: 'tDOGE',
|
|
22
|
+
blockTimeSeconds: 60,
|
|
23
|
+
...options,
|
|
24
|
+
walletExplorerUrlTemplate: 'https://sochain.com/address/DOGETEST/{wallet_address}',
|
|
25
|
+
transactionExplorerUrlTemplate: 'https://sochain.com/tx/DOGETEST/{tx_hash}',
|
|
26
|
+
});
|
|
27
|
+
}
|
|
28
|
+
//# sourceMappingURL=doge_chains.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"doge_chains.js","sourceRoot":"","sources":["../../../utxo/doge/doge_chains.ts"],"names":[],"mappings":"AAKA,OAAO,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAC;AAC7C,OAAO,EAAE,uBAAuB,EAAE,uBAAuB,EAAE,MAAM,qBAAqB,CAAC;AAWvF,MAAM,UAAU,oBAAoB,CAAC,OAAoC;IACvE,OAAO,IAAI,SAAS,CAAC;QACnB,IAAI,EAAE,UAAU;QAChB,MAAM,EAAE,uBAAuB;QAC/B,YAAY,EAAE,MAAM;QACpB,gBAAgB,EAAE,EAAE;QACpB,GAAG,OAAO;QACV,yBAAyB,EAAE,0DAA0D;QACrF,8BAA8B,EAAE,uDAAuD;KACxF,CAAC,CAAC;AACL,CAAC;AAED,MAAM,UAAU,oBAAoB,CAAC,OAAoC;IACvE,IAAI,uBAAuB,KAAK,IAAI,EAAE,CAAC;QACrC,MAAM,IAAI,KAAK,CAAC,sEAAsE,CAAC,CAAC;IAC1F,CAAC;IACD,OAAO,IAAI,SAAS,CAAC;QACnB,IAAI,EAAE,kBAAkB;QACxB,MAAM,EAAE,uBAAuB;QAC/B,YAAY,EAAE,OAAO;QACrB,gBAAgB,EAAE,EAAE;QACpB,GAAG,OAAO;QACV,yBAAyB,EAAE,uDAAuD;QAClF,8BAA8B,EAAE,2CAA2C;KAC5E,CAAC,CAAC;AACL,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../utxo/doge/index.ts"],"names":[],"mappings":"AAAA,cAAc,kBAAkB,CAAC;AACjC,cAAc,qBAAqB,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../utxo/doge/index.ts"],"names":[],"mappings":"AAAA,cAAc,kBAAkB,CAAC;AACjC,cAAc,qBAAqB,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"network_params.d.ts","sourceRoot":"","sources":["../../../utxo/doge/network_params.ts"],"names":[],"mappings":"AAEA,OAAO,EAGL,iBAAiB,EAClB,MAAM,2BAA2B,CAAC;AAMnC,eAAO,MAAM,uBAAuB,EAAE,iBAOrC,CAAC;AAGF,eAAO,MAAM,uBAAuB,EAAE,iBAAiB,GAAG,IASlD,CAAC"}
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
import coininfo from 'coininfo';
|
|
2
|
+
import { BIP32_PURPOSE_P2PKH, Slip44, } from "../utxo_network_params.js";
|
|
3
|
+
const DOGE_PURPOSES = new Set([BIP32_PURPOSE_P2PKH]);
|
|
4
|
+
const DOGE_DUST_SATS = 1_000_000;
|
|
5
|
+
export const DOGECOIN_MAINNET_PARAMS = {
|
|
6
|
+
name: 'mainnet',
|
|
7
|
+
slip44CoinId: Slip44.DOGE,
|
|
8
|
+
networkInfo: coininfo.dogecoin.main.toBitcoinJS(),
|
|
9
|
+
supportedDerivationPurposes: DOGE_PURPOSES,
|
|
10
|
+
dustValueSats: DOGE_DUST_SATS,
|
|
11
|
+
walletAddressRegex: /^D[1-9A-HJ-NP-Za-km-z]{25,34}$/,
|
|
12
|
+
};
|
|
13
|
+
const dogecoinTest = coininfo.dogecoin.test;
|
|
14
|
+
export const DOGECOIN_TESTNET_PARAMS = dogecoinTest
|
|
15
|
+
? {
|
|
16
|
+
name: 'testnet',
|
|
17
|
+
slip44CoinId: Slip44.Testnet,
|
|
18
|
+
networkInfo: dogecoinTest.toBitcoinJS(),
|
|
19
|
+
supportedDerivationPurposes: DOGE_PURPOSES,
|
|
20
|
+
dustValueSats: DOGE_DUST_SATS,
|
|
21
|
+
walletAddressRegex: /^[mn][1-9A-HJ-NP-Za-km-z]{25,34}$/,
|
|
22
|
+
}
|
|
23
|
+
: null;
|
|
24
|
+
//# sourceMappingURL=network_params.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"network_params.js","sourceRoot":"","sources":["../../../utxo/doge/network_params.ts"],"names":[],"mappings":"AAAA,OAAO,QAAQ,MAAM,UAAU,CAAC;AAEhC,OAAO,EACL,mBAAmB,EACnB,MAAM,GAEP,MAAM,2BAA2B,CAAC;AAEnC,MAAM,aAAa,GAAG,IAAI,GAAG,CAAC,CAAC,mBAAmB,CAAC,CAAC,CAAC;AAErD,MAAM,cAAc,GAAG,SAAS,CAAC;AAEjC,MAAM,CAAC,MAAM,uBAAuB,GAAsB;IACxD,IAAI,EAAE,SAAS;IACf,YAAY,EAAE,MAAM,CAAC,IAAI;IACzB,WAAW,EAAE,QAAQ,CAAC,QAAQ,CAAC,IAAI,CAAC,WAAW,EAAE;IACjD,2BAA2B,EAAE,aAAa;IAC1C,aAAa,EAAE,cAAc;IAC7B,kBAAkB,EAAE,gCAAgC;CACrD,CAAC;AAEF,MAAM,YAAY,GAAG,QAAQ,CAAC,QAAQ,CAAC,IAAI,CAAC;AAC5C,MAAM,CAAC,MAAM,uBAAuB,GAA6B,YAAY;IAC3E,CAAC,CAAC;QACE,IAAI,EAAE,SAAS;QACf,YAAY,EAAE,MAAM,CAAC,OAAO;QAC5B,WAAW,EAAE,YAAY,CAAC,WAAW,EAAE;QACvC,2BAA2B,EAAE,aAAa;QAC1C,aAAa,EAAE,cAAc;QAC7B,kBAAkB,EAAE,mCAAmC;KACxD;IACH,CAAC,CAAC,IAAI,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ecc.d.ts","sourceRoot":"","sources":["../../utxo/ecc.ts"],"names":[],"mappings":"AAKA,wBAAgB,oBAAoB,IAAI,IAAI,CAI3C"}
|
package/dist/utxo/ecc.js
ADDED
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import { initEccLib } from 'bitcoinjs-lib';
|
|
2
|
+
import * as ecc from 'tiny-secp256k1';
|
|
3
|
+
let initialized = false;
|
|
4
|
+
export function ensureEccInitialized() {
|
|
5
|
+
if (initialized)
|
|
6
|
+
return;
|
|
7
|
+
initEccLib(ecc);
|
|
8
|
+
initialized = true;
|
|
9
|
+
}
|
|
10
|
+
ensureEccInitialized();
|
|
11
|
+
//# sourceMappingURL=ecc.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ecc.js","sourceRoot":"","sources":["../../utxo/ecc.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,eAAe,CAAC;AAC3C,OAAO,KAAK,GAAG,MAAM,gBAAgB,CAAC;AAEtC,IAAI,WAAW,GAAG,KAAK,CAAC;AAExB,MAAM,UAAU,oBAAoB;IAClC,IAAI,WAAW;QAAE,OAAO;IACxB,UAAU,CAAC,GAAG,CAAC,CAAC;IAChB,WAAW,GAAG,IAAI,CAAC;AACrB,CAAC;AAED,oBAAoB,EAAE,CAAC"}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import { UtxoScriptType } from './script.ts';
|
|
2
|
+
export declare const TX_OVERHEAD_VBYTES = 10.5;
|
|
3
|
+
export declare const INPUT_VBYTES: Record<UtxoScriptType, number>;
|
|
4
|
+
export declare const OUTPUT_VBYTES: Record<UtxoScriptType, number>;
|
|
5
|
+
export declare function inputVBytes(type: UtxoScriptType): number;
|
|
6
|
+
export declare function outputVBytes(type: UtxoScriptType): number;
|
|
7
|
+
export declare function opReturnOutputVBytes(dataLengthBytes: number): number;
|
|
8
|
+
export declare function estimateTxVBytes(inputTypes: readonly UtxoScriptType[], outputTypes: readonly UtxoScriptType[], opReturnDataLengths?: readonly number[]): number;
|
|
9
|
+
export declare function feeForVBytes(vBytes: number, satsPerVByte: number): number;
|
|
10
|
+
export declare function effectiveValueSats(utxoValueSats: number, inputType: UtxoScriptType, satsPerVByte: number): number;
|
|
11
|
+
export declare function costOfChangeSats(changeOutputType: UtxoScriptType, shortTermFeeRateSatsPerVByte: number, longTermFeeRateSatsPerVByte: number): number;
|
|
12
|
+
//# sourceMappingURL=fee.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"fee.d.ts","sourceRoot":"","sources":["../../utxo/fee.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAmB,MAAM,aAAa,CAAC;AAE9D,eAAO,MAAM,kBAAkB,OAAO,CAAC;AAEvC,eAAO,MAAM,YAAY,EAAE,MAAM,CAAC,cAAc,EAAE,MAAM,CAQvD,CAAC;AAEF,eAAO,MAAM,aAAa,EAAE,MAAM,CAAC,cAAc,EAAE,MAAM,CAQxD,CAAC;AAEF,wBAAgB,WAAW,CAAC,IAAI,EAAE,cAAc,GAAG,MAAM,CAExD;AAED,wBAAgB,YAAY,CAAC,IAAI,EAAE,cAAc,GAAG,MAAM,CAEzD;AAED,wBAAgB,oBAAoB,CAAC,eAAe,EAAE,MAAM,GAAG,MAAM,CAEpE;AAED,wBAAgB,gBAAgB,CAC9B,UAAU,EAAE,SAAS,cAAc,EAAE,EACrC,WAAW,EAAE,SAAS,cAAc,EAAE,EACtC,mBAAmB,GAAE,SAAS,MAAM,EAAO,GAC1C,MAAM,CAMR;AAED,wBAAgB,YAAY,CAAC,MAAM,EAAE,MAAM,EAAE,YAAY,EAAE,MAAM,GAAG,MAAM,CAEzE;AAED,wBAAgB,kBAAkB,CAAC,aAAa,EAAE,MAAM,EAAE,SAAS,EAAE,cAAc,EAAE,YAAY,EAAE,MAAM,GAAG,MAAM,CAEjH;AAED,wBAAgB,gBAAgB,CAC9B,gBAAgB,EAAE,cAAc,EAChC,4BAA4B,EAAE,MAAM,EACpC,2BAA2B,EAAE,MAAM,GAClC,MAAM,CAIR"}
|
package/dist/utxo/fee.js
ADDED
|
@@ -0,0 +1,51 @@
|
|
|
1
|
+
import { UtxoScriptTypes } from "./script.js";
|
|
2
|
+
export const TX_OVERHEAD_VBYTES = 10.5;
|
|
3
|
+
export const INPUT_VBYTES = {
|
|
4
|
+
[UtxoScriptTypes.P2PKH]: 148,
|
|
5
|
+
[UtxoScriptTypes.P2SH]: 91,
|
|
6
|
+
[UtxoScriptTypes.P2WPKH]: 68,
|
|
7
|
+
[UtxoScriptTypes.P2WSH]: 105,
|
|
8
|
+
[UtxoScriptTypes.P2TR]: 57.5,
|
|
9
|
+
[UtxoScriptTypes.OpReturn]: 0,
|
|
10
|
+
[UtxoScriptTypes.NonStandard]: 0,
|
|
11
|
+
};
|
|
12
|
+
export const OUTPUT_VBYTES = {
|
|
13
|
+
[UtxoScriptTypes.P2PKH]: 34,
|
|
14
|
+
[UtxoScriptTypes.P2SH]: 32,
|
|
15
|
+
[UtxoScriptTypes.P2WPKH]: 31,
|
|
16
|
+
[UtxoScriptTypes.P2WSH]: 43,
|
|
17
|
+
[UtxoScriptTypes.P2TR]: 43,
|
|
18
|
+
[UtxoScriptTypes.OpReturn]: 0,
|
|
19
|
+
[UtxoScriptTypes.NonStandard]: 0,
|
|
20
|
+
};
|
|
21
|
+
export function inputVBytes(type) {
|
|
22
|
+
return INPUT_VBYTES[type];
|
|
23
|
+
}
|
|
24
|
+
export function outputVBytes(type) {
|
|
25
|
+
return OUTPUT_VBYTES[type];
|
|
26
|
+
}
|
|
27
|
+
export function opReturnOutputVBytes(dataLengthBytes) {
|
|
28
|
+
return Math.ceil(8 + 1 + 1 + 1 + (dataLengthBytes < 76 ? 0 : 1) + dataLengthBytes);
|
|
29
|
+
}
|
|
30
|
+
export function estimateTxVBytes(inputTypes, outputTypes, opReturnDataLengths = []) {
|
|
31
|
+
let total = TX_OVERHEAD_VBYTES;
|
|
32
|
+
for (const t of inputTypes)
|
|
33
|
+
total += inputVBytes(t);
|
|
34
|
+
for (const t of outputTypes)
|
|
35
|
+
total += outputVBytes(t);
|
|
36
|
+
for (const len of opReturnDataLengths)
|
|
37
|
+
total += opReturnOutputVBytes(len);
|
|
38
|
+
return Math.ceil(total);
|
|
39
|
+
}
|
|
40
|
+
export function feeForVBytes(vBytes, satsPerVByte) {
|
|
41
|
+
return Math.ceil(vBytes * satsPerVByte);
|
|
42
|
+
}
|
|
43
|
+
export function effectiveValueSats(utxoValueSats, inputType, satsPerVByte) {
|
|
44
|
+
return utxoValueSats - Math.ceil(inputVBytes(inputType) * satsPerVByte);
|
|
45
|
+
}
|
|
46
|
+
export function costOfChangeSats(changeOutputType, shortTermFeeRateSatsPerVByte, longTermFeeRateSatsPerVByte) {
|
|
47
|
+
const create = outputVBytes(changeOutputType) * shortTermFeeRateSatsPerVByte;
|
|
48
|
+
const spend = inputVBytes(changeOutputType) * longTermFeeRateSatsPerVByte;
|
|
49
|
+
return Math.ceil(create + spend);
|
|
50
|
+
}
|
|
51
|
+
//# sourceMappingURL=fee.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"fee.js","sourceRoot":"","sources":["../../utxo/fee.ts"],"names":[],"mappings":"AAAA,OAAO,EAAkB,eAAe,EAAE,MAAM,aAAa,CAAC;AAE9D,MAAM,CAAC,MAAM,kBAAkB,GAAG,IAAI,CAAC;AAEvC,MAAM,CAAC,MAAM,YAAY,GAAmC;IAC1D,CAAC,eAAe,CAAC,KAAK,CAAC,EAAE,GAAG;IAC5B,CAAC,eAAe,CAAC,IAAI,CAAC,EAAE,EAAE;IAC1B,CAAC,eAAe,CAAC,MAAM,CAAC,EAAE,EAAE;IAC5B,CAAC,eAAe,CAAC,KAAK,CAAC,EAAE,GAAG;IAC5B,CAAC,eAAe,CAAC,IAAI,CAAC,EAAE,IAAI;IAC5B,CAAC,eAAe,CAAC,QAAQ,CAAC,EAAE,CAAC;IAC7B,CAAC,eAAe,CAAC,WAAW,CAAC,EAAE,CAAC;CACjC,CAAC;AAEF,MAAM,CAAC,MAAM,aAAa,GAAmC;IAC3D,CAAC,eAAe,CAAC,KAAK,CAAC,EAAE,EAAE;IAC3B,CAAC,eAAe,CAAC,IAAI,CAAC,EAAE,EAAE;IAC1B,CAAC,eAAe,CAAC,MAAM,CAAC,EAAE,EAAE;IAC5B,CAAC,eAAe,CAAC,KAAK,CAAC,EAAE,EAAE;IAC3B,CAAC,eAAe,CAAC,IAAI,CAAC,EAAE,EAAE;IAC1B,CAAC,eAAe,CAAC,QAAQ,CAAC,EAAE,CAAC;IAC7B,CAAC,eAAe,CAAC,WAAW,CAAC,EAAE,CAAC;CACjC,CAAC;AAEF,MAAM,UAAU,WAAW,CAAC,IAAoB;IAC9C,OAAO,YAAY,CAAC,IAAI,CAAC,CAAC;AAC5B,CAAC;AAED,MAAM,UAAU,YAAY,CAAC,IAAoB;IAC/C,OAAO,aAAa,CAAC,IAAI,CAAC,CAAC;AAC7B,CAAC;AAED,MAAM,UAAU,oBAAoB,CAAC,eAAuB;IAC1D,OAAO,IAAI,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,eAAe,GAAG,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,eAAe,CAAC,CAAC;AACrF,CAAC;AAED,MAAM,UAAU,gBAAgB,CAC9B,UAAqC,EACrC,WAAsC,EACtC,sBAAyC,EAAE;IAE3C,IAAI,KAAK,GAAG,kBAAkB,CAAC;IAC/B,KAAK,MAAM,CAAC,IAAI,UAAU;QAAE,KAAK,IAAI,WAAW,CAAC,CAAC,CAAC,CAAC;IACpD,KAAK,MAAM,CAAC,IAAI,WAAW;QAAE,KAAK,IAAI,YAAY,CAAC,CAAC,CAAC,CAAC;IACtD,KAAK,MAAM,GAAG,IAAI,mBAAmB;QAAE,KAAK,IAAI,oBAAoB,CAAC,GAAG,CAAC,CAAC;IAC1E,OAAO,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;AAC1B,CAAC;AAED,MAAM,UAAU,YAAY,CAAC,MAAc,EAAE,YAAoB;IAC/D,OAAO,IAAI,CAAC,IAAI,CAAC,MAAM,GAAG,YAAY,CAAC,CAAC;AAC1C,CAAC;AAED,MAAM,UAAU,kBAAkB,CAAC,aAAqB,EAAE,SAAyB,EAAE,YAAoB;IACvG,OAAO,aAAa,GAAG,IAAI,CAAC,IAAI,CAAC,WAAW,CAAC,SAAS,CAAC,GAAG,YAAY,CAAC,CAAC;AAC1E,CAAC;AAED,MAAM,UAAU,gBAAgB,CAC9B,gBAAgC,EAChC,4BAAoC,EACpC,2BAAmC;IAEnC,MAAM,MAAM,GAAG,YAAY,CAAC,gBAAgB,CAAC,GAAG,4BAA4B,CAAC;IAC7E,MAAM,KAAK,GAAG,WAAW,CAAC,gBAAgB,CAAC,GAAG,2BAA2B,CAAC;IAC1E,OAAO,IAAI,CAAC,IAAI,CAAC,MAAM,GAAG,KAAK,CAAC,CAAC;AACnC,CAAC"}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
export * from './coin_selection.ts';
|
|
2
|
+
export * from './ecc.ts';
|
|
3
|
+
export * from './fee.ts';
|
|
4
|
+
export * from './script.ts';
|
|
5
|
+
export * from './tools/broadcaster.ts';
|
|
6
|
+
export * from './tools/chain_tip_provider.ts';
|
|
7
|
+
export * from './tools/fee_estimator.ts';
|
|
8
|
+
export * from './tools/raw_transaction_provider.ts';
|
|
9
|
+
export * from './tools/utxo_provider.ts';
|
|
10
|
+
export * from './unsigned_utxo_transaction.ts';
|
|
11
|
+
export * from './utxo.ts';
|
|
12
|
+
export * from './utxo_chain.ts';
|
|
13
|
+
export * from './utxo_chains.ts';
|
|
14
|
+
export * from './utxo_gas_pricing.ts';
|
|
15
|
+
export * from './utxo_network_params.ts';
|
|
16
|
+
export * from './utxo_transaction_status.ts';
|
|
17
|
+
export * from './btc/index.ts';
|
|
18
|
+
export * from './ltc/index.ts';
|
|
19
|
+
export * from './doge/index.ts';
|
|
20
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../utxo/index.ts"],"names":[],"mappings":"AAAA,cAAc,qBAAqB,CAAC;AACpC,cAAc,UAAU,CAAC;AACzB,cAAc,UAAU,CAAC;AACzB,cAAc,aAAa,CAAC;AAC5B,cAAc,wBAAwB,CAAC;AACvC,cAAc,+BAA+B,CAAC;AAC9C,cAAc,0BAA0B,CAAC;AACzC,cAAc,qCAAqC,CAAC;AACpD,cAAc,0BAA0B,CAAC;AACzC,cAAc,gCAAgC,CAAC;AAC/C,cAAc,WAAW,CAAC;AAC1B,cAAc,iBAAiB,CAAC;AAChC,cAAc,kBAAkB,CAAC;AACjC,cAAc,uBAAuB,CAAC;AACtC,cAAc,0BAA0B,CAAC;AACzC,cAAc,8BAA8B,CAAC;AAC7C,cAAc,gBAAgB,CAAC;AAC/B,cAAc,gBAAgB,CAAC;AAC/B,cAAc,iBAAiB,CAAC"}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
export * from "./coin_selection.js";
|
|
2
|
+
export * from "./ecc.js";
|
|
3
|
+
export * from "./fee.js";
|
|
4
|
+
export * from "./script.js";
|
|
5
|
+
export * from "./tools/broadcaster.js";
|
|
6
|
+
export * from "./tools/chain_tip_provider.js";
|
|
7
|
+
export * from "./tools/fee_estimator.js";
|
|
8
|
+
export * from "./tools/raw_transaction_provider.js";
|
|
9
|
+
export * from "./tools/utxo_provider.js";
|
|
10
|
+
export * from "./unsigned_utxo_transaction.js";
|
|
11
|
+
export * from "./utxo.js";
|
|
12
|
+
export * from "./utxo_chain.js";
|
|
13
|
+
export * from "./utxo_chains.js";
|
|
14
|
+
export * from "./utxo_gas_pricing.js";
|
|
15
|
+
export * from "./utxo_network_params.js";
|
|
16
|
+
export * from "./utxo_transaction_status.js";
|
|
17
|
+
export * from "./btc/index.js";
|
|
18
|
+
export * from "./ltc/index.js";
|
|
19
|
+
export * from "./doge/index.js";
|
|
20
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../utxo/index.ts"],"names":[],"mappings":"AAAA,cAAc,qBAAqB,CAAC;AACpC,cAAc,UAAU,CAAC;AACzB,cAAc,UAAU,CAAC;AACzB,cAAc,aAAa,CAAC;AAC5B,cAAc,wBAAwB,CAAC;AACvC,cAAc,+BAA+B,CAAC;AAC9C,cAAc,0BAA0B,CAAC;AACzC,cAAc,qCAAqC,CAAC;AACpD,cAAc,0BAA0B,CAAC;AACzC,cAAc,gCAAgC,CAAC;AAC/C,cAAc,WAAW,CAAC;AAC1B,cAAc,iBAAiB,CAAC;AAChC,cAAc,kBAAkB,CAAC;AACjC,cAAc,uBAAuB,CAAC;AACtC,cAAc,0BAA0B,CAAC;AACzC,cAAc,8BAA8B,CAAC;AAC7C,cAAc,gBAAgB,CAAC;AAC/B,cAAc,gBAAgB,CAAC;AAC/B,cAAc,iBAAiB,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../utxo/ltc/index.ts"],"names":[],"mappings":"AAAA,cAAc,iBAAiB,CAAC;AAChC,cAAc,qBAAqB,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../utxo/ltc/index.ts"],"names":[],"mappings":"AAAA,cAAc,iBAAiB,CAAC;AAChC,cAAc,qBAAqB,CAAC"}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
import { UtxoBroadcaster } from '../tools/broadcaster.ts';
|
|
2
|
+
import { UtxoChainTipProvider } from '../tools/chain_tip_provider.ts';
|
|
3
|
+
import { UtxoFeeEstimator } from '../tools/fee_estimator.ts';
|
|
4
|
+
import { UtxoRawTransactionProvider } from '../tools/raw_transaction_provider.ts';
|
|
5
|
+
import { UtxoProvider } from '../tools/utxo_provider.ts';
|
|
6
|
+
import { UtxoChain } from '../utxo_chain.ts';
|
|
7
|
+
export interface LitecoinChainFactoryOptions {
|
|
8
|
+
chainId: number;
|
|
9
|
+
utxoProvider: UtxoProvider;
|
|
10
|
+
rawTxProvider: UtxoRawTransactionProvider;
|
|
11
|
+
feeEstimator: UtxoFeeEstimator;
|
|
12
|
+
broadcaster: UtxoBroadcaster;
|
|
13
|
+
chainTipProvider: UtxoChainTipProvider;
|
|
14
|
+
}
|
|
15
|
+
export declare function litecoinMainnetChain(options: LitecoinChainFactoryOptions): UtxoChain;
|
|
16
|
+
export declare function litecoinTestnetChain(options: LitecoinChainFactoryOptions): UtxoChain;
|
|
17
|
+
//# sourceMappingURL=ltc_chains.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ltc_chains.d.ts","sourceRoot":"","sources":["../../../utxo/ltc/ltc_chains.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,MAAM,yBAAyB,CAAC;AAC1D,OAAO,EAAE,oBAAoB,EAAE,MAAM,gCAAgC,CAAC;AACtE,OAAO,EAAE,gBAAgB,EAAE,MAAM,2BAA2B,CAAC;AAC7D,OAAO,EAAE,0BAA0B,EAAE,MAAM,sCAAsC,CAAC;AAClF,OAAO,EAAE,YAAY,EAAE,MAAM,2BAA2B,CAAC;AACzD,OAAO,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAC;AAG7C,MAAM,WAAW,2BAA2B;IAC1C,OAAO,EAAE,MAAM,CAAC;IAChB,YAAY,EAAE,YAAY,CAAC;IAC3B,aAAa,EAAE,0BAA0B,CAAC;IAC1C,YAAY,EAAE,gBAAgB,CAAC;IAC/B,WAAW,EAAE,eAAe,CAAC;IAC7B,gBAAgB,EAAE,oBAAoB,CAAC;CACxC;AAED,wBAAgB,oBAAoB,CAAC,OAAO,EAAE,2BAA2B,GAAG,SAAS,CAUpF;AAED,wBAAgB,oBAAoB,CAAC,OAAO,EAAE,2BAA2B,GAAG,SAAS,CAapF"}
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
import { UtxoChain } from "../utxo_chain.js";
|
|
2
|
+
import { LITECOIN_MAINNET_PARAMS, LITECOIN_TESTNET_PARAMS } from "./network_params.js";
|
|
3
|
+
export function litecoinMainnetChain(options) {
|
|
4
|
+
return new UtxoChain({
|
|
5
|
+
name: 'Litecoin',
|
|
6
|
+
params: LITECOIN_MAINNET_PARAMS,
|
|
7
|
+
nativeSymbol: 'LTC',
|
|
8
|
+
blockTimeSeconds: 150,
|
|
9
|
+
...options,
|
|
10
|
+
walletExplorerUrlTemplate: 'https://blockchair.com/litecoin/address/{wallet_address}',
|
|
11
|
+
transactionExplorerUrlTemplate: 'https://blockchair.com/litecoin/transaction/{tx_hash}',
|
|
12
|
+
});
|
|
13
|
+
}
|
|
14
|
+
export function litecoinTestnetChain(options) {
|
|
15
|
+
if (LITECOIN_TESTNET_PARAMS === null) {
|
|
16
|
+
throw new Error('Litecoin testnet params unavailable (coininfo.litecoin.test missing)');
|
|
17
|
+
}
|
|
18
|
+
return new UtxoChain({
|
|
19
|
+
name: 'Litecoin Testnet',
|
|
20
|
+
params: LITECOIN_TESTNET_PARAMS,
|
|
21
|
+
nativeSymbol: 'tLTC',
|
|
22
|
+
blockTimeSeconds: 150,
|
|
23
|
+
...options,
|
|
24
|
+
walletExplorerUrlTemplate: 'https://blockexplorer.one/litecoin/testnet/address/{wallet_address}',
|
|
25
|
+
transactionExplorerUrlTemplate: 'https://blockexplorer.one/litecoin/testnet/tx/{tx_hash}',
|
|
26
|
+
});
|
|
27
|
+
}
|
|
28
|
+
//# sourceMappingURL=ltc_chains.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ltc_chains.js","sourceRoot":"","sources":["../../../utxo/ltc/ltc_chains.ts"],"names":[],"mappings":"AAKA,OAAO,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAC;AAC7C,OAAO,EAAE,uBAAuB,EAAE,uBAAuB,EAAE,MAAM,qBAAqB,CAAC;AAWvF,MAAM,UAAU,oBAAoB,CAAC,OAAoC;IACvE,OAAO,IAAI,SAAS,CAAC;QACnB,IAAI,EAAE,UAAU;QAChB,MAAM,EAAE,uBAAuB;QAC/B,YAAY,EAAE,KAAK;QACnB,gBAAgB,EAAE,GAAG;QACrB,GAAG,OAAO;QACV,yBAAyB,EAAE,0DAA0D;QACrF,8BAA8B,EAAE,uDAAuD;KACxF,CAAC,CAAC;AACL,CAAC;AAED,MAAM,UAAU,oBAAoB,CAAC,OAAoC;IACvE,IAAI,uBAAuB,KAAK,IAAI,EAAE,CAAC;QACrC,MAAM,IAAI,KAAK,CAAC,sEAAsE,CAAC,CAAC;IAC1F,CAAC;IACD,OAAO,IAAI,SAAS,CAAC;QACnB,IAAI,EAAE,kBAAkB;QACxB,MAAM,EAAE,uBAAuB;QAC/B,YAAY,EAAE,MAAM;QACpB,gBAAgB,EAAE,GAAG;QACrB,GAAG,OAAO;QACV,yBAAyB,EAAE,qEAAqE;QAChG,8BAA8B,EAAE,yDAAyD;KAC1F,CAAC,CAAC;AACL,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"network_params.d.ts","sourceRoot":"","sources":["../../../utxo/ltc/network_params.ts"],"names":[],"mappings":"AAEA,OAAO,EAML,iBAAiB,EAClB,MAAM,2BAA2B,CAAC;AAQnC,eAAO,MAAM,uBAAuB,EAAE,iBAOrC,CAAC;AAGF,eAAO,MAAM,uBAAuB,EAAE,iBAAiB,GAAG,IASlD,CAAC"}
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
import coininfo from 'coininfo';
|
|
2
|
+
import { BIP32_PURPOSE_P2PKH, BIP32_PURPOSE_P2SH_P2WPKH, BIP32_PURPOSE_P2WPKH, DEFAULT_DUST_SATS, Slip44, } from "../utxo_network_params.js";
|
|
3
|
+
const LTC_PURPOSES = new Set([
|
|
4
|
+
BIP32_PURPOSE_P2PKH,
|
|
5
|
+
BIP32_PURPOSE_P2SH_P2WPKH,
|
|
6
|
+
BIP32_PURPOSE_P2WPKH,
|
|
7
|
+
]);
|
|
8
|
+
export const LITECOIN_MAINNET_PARAMS = {
|
|
9
|
+
name: 'mainnet',
|
|
10
|
+
slip44CoinId: Slip44.LTC,
|
|
11
|
+
networkInfo: coininfo.litecoin.main.toBitcoinJS(),
|
|
12
|
+
supportedDerivationPurposes: LTC_PURPOSES,
|
|
13
|
+
dustValueSats: DEFAULT_DUST_SATS,
|
|
14
|
+
walletAddressRegex: /^(ltc1[qp][ac-hj-np-z02-9]{11,71}|[LM3][a-km-zA-HJ-NP-Z1-9]{25,34})$/,
|
|
15
|
+
};
|
|
16
|
+
const litecoinTest = coininfo.litecoin.test;
|
|
17
|
+
export const LITECOIN_TESTNET_PARAMS = litecoinTest
|
|
18
|
+
? {
|
|
19
|
+
name: 'testnet',
|
|
20
|
+
slip44CoinId: Slip44.Testnet,
|
|
21
|
+
networkInfo: litecoinTest.toBitcoinJS(),
|
|
22
|
+
supportedDerivationPurposes: LTC_PURPOSES,
|
|
23
|
+
dustValueSats: DEFAULT_DUST_SATS,
|
|
24
|
+
walletAddressRegex: /^(tltc1[qp][ac-hj-np-z02-9]{11,71}|[mn2][a-km-zA-HJ-NP-Z1-9]{25,34})$/,
|
|
25
|
+
}
|
|
26
|
+
: null;
|
|
27
|
+
//# sourceMappingURL=network_params.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"network_params.js","sourceRoot":"","sources":["../../../utxo/ltc/network_params.ts"],"names":[],"mappings":"AAAA,OAAO,QAAQ,MAAM,UAAU,CAAC;AAEhC,OAAO,EACL,mBAAmB,EACnB,yBAAyB,EACzB,oBAAoB,EACpB,iBAAiB,EACjB,MAAM,GAEP,MAAM,2BAA2B,CAAC;AAEnC,MAAM,YAAY,GAAG,IAAI,GAAG,CAAC;IAC3B,mBAAmB;IACnB,yBAAyB;IACzB,oBAAoB;CACrB,CAAC,CAAC;AAEH,MAAM,CAAC,MAAM,uBAAuB,GAAsB;IACxD,IAAI,EAAE,SAAS;IACf,YAAY,EAAE,MAAM,CAAC,GAAG;IACxB,WAAW,EAAE,QAAQ,CAAC,QAAQ,CAAC,IAAI,CAAC,WAAW,EAAE;IACjD,2BAA2B,EAAE,YAAY;IACzC,aAAa,EAAE,iBAAiB;IAChC,kBAAkB,EAAE,sEAAsE;CAC3F,CAAC;AAEF,MAAM,YAAY,GAAG,QAAQ,CAAC,QAAQ,CAAC,IAAI,CAAC;AAC5C,MAAM,CAAC,MAAM,uBAAuB,GAA6B,YAAY;IAC3E,CAAC,CAAC;QACE,IAAI,EAAE,SAAS;QACf,YAAY,EAAE,MAAM,CAAC,OAAO;QAC5B,WAAW,EAAE,YAAY,CAAC,WAAW,EAAE;QACvC,2BAA2B,EAAE,YAAY;QACzC,aAAa,EAAE,iBAAiB;QAChC,kBAAkB,EAAE,uEAAuE;KAC5F;IACH,CAAC,CAAC,IAAI,CAAC"}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
import { networks } from 'bitcoinjs-lib';
|
|
2
|
+
export declare const UtxoScriptTypes: {
|
|
3
|
+
readonly P2PKH: "p2pkh";
|
|
4
|
+
readonly P2SH: "p2sh";
|
|
5
|
+
readonly P2WPKH: "p2wpkh";
|
|
6
|
+
readonly P2WSH: "p2wsh";
|
|
7
|
+
readonly P2TR: "p2tr";
|
|
8
|
+
readonly OpReturn: "op_return";
|
|
9
|
+
readonly NonStandard: "non_standard";
|
|
10
|
+
};
|
|
11
|
+
export type UtxoScriptType = (typeof UtxoScriptTypes)[keyof typeof UtxoScriptTypes];
|
|
12
|
+
export declare function detectScriptType(script: Uint8Array): UtxoScriptType;
|
|
13
|
+
export declare function addressToScriptPubKey(addressStr: string, network: networks.Network): Uint8Array;
|
|
14
|
+
export declare function scriptTypeForAddress(addressStr: string, network: networks.Network): UtxoScriptType;
|
|
15
|
+
export declare function buildOpReturnScript(data: Uint8Array): Uint8Array;
|
|
16
|
+
//# sourceMappingURL=script.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"script.d.ts","sourceRoot":"","sources":["../../utxo/script.ts"],"names":[],"mappings":"AAAA,OAAO,EAAyB,QAAQ,EAAgC,MAAM,eAAe,CAAC;AAI9F,eAAO,MAAM,eAAe;;;;;;;;CAQlB,CAAC;AAEX,MAAM,MAAM,cAAc,GAAG,CAAC,OAAO,eAAe,CAAC,CAAC,MAAM,OAAO,eAAe,CAAC,CAAC;AAEpF,wBAAgB,gBAAgB,CAAC,MAAM,EAAE,UAAU,GAAG,cAAc,CA4BnE;AAED,wBAAgB,qBAAqB,CAAC,UAAU,EAAE,MAAM,EAAE,OAAO,EAAE,QAAQ,CAAC,OAAO,GAAG,UAAU,CAE/F;AAED,wBAAgB,oBAAoB,CAAC,UAAU,EAAE,MAAM,EAAE,OAAO,EAAE,QAAQ,CAAC,OAAO,GAAG,cAAc,CAGlG;AAED,wBAAgB,mBAAmB,CAAC,IAAI,EAAE,UAAU,GAAG,UAAU,CAOhE"}
|