send-crypto
Version:
A minimal JavaScript library / wallet for sending crypto assets
74 lines • 6.94 kB
JavaScript
import axios from "axios";
import { fixUTXO, fixUTXOs, fixValue, sortUTXOs } from "../../lib/utxo";
import { DEFAULT_TIMEOUT } from "./timeout";
const endpoint = (testnet) => testnet ? "https://trest.bitcoin.com/v2/" : "https://rest.bitcoin.com/v2/";
const endpointV2 = (testnet) => testnet
? "https://explorer-tbch.api.bitcoin.com/tbch/v1"
: "https://explorer.api.bitcoin.com/bch/v1";
const fetchUTXO = (testnet) => async (txHash, vOut) => {
const url = `${endpointV2(testnet)}/tx/${txHash}`;
const response = await axios.get(`${url}`, {
timeout: DEFAULT_TIMEOUT,
});
const utxo = response.data;
return fixUTXO({
txHash,
amount: parseFloat(utxo.vout[vOut].value),
// script_hex: utxo.scriptPubKey,
vOut,
confirmations: utxo.confirmations,
}, 8);
};
const fetchUTXOs = (testnet) => async (address, confirmations) => {
const url = `${endpointV2(testnet)}/addr/${address}/utxo`;
const response = await axios.get(url, {
timeout: DEFAULT_TIMEOUT,
});
return fixUTXOs(response.data
.map((utxo) => ({
txHash: utxo.txid,
amount: utxo.amount,
// script_hex: utxo.scriptPubKey,
vOut: utxo.vout,
confirmations: utxo.confirmations,
}))
.filter((utxo) => confirmations === 0 || utxo.confirmations >= confirmations), 8).sort(sortUTXOs);
};
const fetchTXs = (testnet) => async (address, confirmations) => {
const url = `${endpoint(testnet).replace(/\/$/, "")}/address/transactions/${address}`;
const { data } = await axios.get(url, {
timeout: DEFAULT_TIMEOUT,
});
const received = [];
for (const tx of data.txs) {
for (let i = 0; i < tx.vout.length; i++) {
const vout = tx.vout[i];
if (vout.scriptPubKey.addresses.indexOf(address) >= 0) {
received.push({
txHash: tx.txid,
amount: fixValue(parseFloat(vout.value), 8),
vOut: i,
confirmations: tx.confirmations,
});
}
}
}
return received
.filter((utxo) => confirmations === 0 || utxo.confirmations >= confirmations)
.sort(sortUTXOs);
};
export const broadcastTransaction = (testnet) => async (txHex) => {
const url = `${endpoint(testnet).replace(/\/$/, "")}/rawtransactions/sendRawTransaction`;
const response = await axios.post(url, { hexes: [txHex] }, { timeout: DEFAULT_TIMEOUT });
if (response.data.error) {
throw new Error(response.data.error);
}
return response.data[0];
};
export const BitcoinDotCom = {
fetchUTXO,
fetchUTXOs,
fetchTXs,
broadcastTransaction,
};
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYml0Y29pbkRvdENvbS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9jb21tb24vYXBpcy9iaXRjb2luRG90Q29tLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sS0FBSyxNQUFNLE9BQU8sQ0FBQztBQUUxQixPQUFPLEVBQUUsT0FBTyxFQUFFLFFBQVEsRUFBRSxRQUFRLEVBQUUsU0FBUyxFQUFRLE1BQU0sZ0JBQWdCLENBQUM7QUFFOUUsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLFdBQVcsQ0FBQztBQUU1QyxNQUFNLFFBQVEsR0FBRyxDQUFDLE9BQWdCLEVBQUUsRUFBRSxDQUNsQyxPQUFPLENBQUMsQ0FBQyxDQUFDLCtCQUErQixDQUFDLENBQUMsQ0FBQyw4QkFBOEIsQ0FBQztBQUUvRSxNQUFNLFVBQVUsR0FBRyxDQUFDLE9BQWdCLEVBQUUsRUFBRSxDQUNwQyxPQUFPO0lBQ0gsQ0FBQyxDQUFDLCtDQUErQztJQUNqRCxDQUFDLENBQUMseUNBQXlDLENBQUM7QUFFcEQsTUFBTSxTQUFTLEdBQUcsQ0FBQyxPQUFnQixFQUFFLEVBQUUsQ0FBQyxLQUFLLEVBQ3pDLE1BQWMsRUFDZCxJQUFZLEVBQ0MsRUFBRTtJQUNmLE1BQU0sR0FBRyxHQUFHLEdBQUcsVUFBVSxDQUFDLE9BQU8sQ0FBQyxPQUFPLE1BQU0sRUFBRSxDQUFDO0lBRWxELE1BQU0sUUFBUSxHQUFHLE1BQU0sS0FBSyxDQUFDLEdBQUcsQ0FBa0IsR0FBRyxHQUFHLEVBQUUsRUFBRTtRQUN4RCxPQUFPLEVBQUUsZUFBZTtLQUMzQixDQUFDLENBQUM7SUFFSCxNQUFNLElBQUksR0FBRyxRQUFRLENBQUMsSUFBSSxDQUFDO0lBRTNCLE9BQU8sT0FBTyxDQUNWO1FBQ0ksTUFBTTtRQUNOLE1BQU0sRUFBRSxVQUFVLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxLQUFLLENBQUM7UUFDekMsaUNBQWlDO1FBQ2pDLElB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