send-crypto
Version:
A minimal JavaScript library / wallet for sending crypto assets
70 lines • 8.47 kB
JavaScript
;
var __importDefault = (this && this.__importDefault) || function (mod) {
return (mod && mod.__esModule) ? mod : { "default": mod };
};
Object.defineProperty(exports, "__esModule", { value: true });
exports.ETHHandler = void 0;
const bignumber_js_1 = __importDefault(require("bignumber.js"));
const promiEvent_1 = require("../../lib/promiEvent");
const ethUtils_1 = require("./ethUtils");
class ETHHandler {
constructor(privateKey, network, options, sharedState) {
this.decimals = 18;
// Returns whether or not this can handle the asset
this.handlesAsset = (asset) => typeof asset === "string" &&
["ETH", "ETHER", "ETHEREUM"].indexOf(asset.toUpperCase()) !== -1;
this.address = async (asset, options) => this.unlockedAddress;
// Balance
this.getBalance = async (asset, options) => (await this.getBalanceInSats(asset, options)).dividedBy(new bignumber_js_1.default(10).exponentiatedBy(this.decimals));
this.getBalanceInSats = async (asset, options) => {
let atBlock;
if (options && options.confirmations && options.confirmations > 0) {
const currentBlock = new bignumber_js_1.default(await this.sharedState.ethSigner.provider.getBlockNumber());
atBlock = currentBlock
.minus(options.confirmations)
.plus(1)
.toNumber();
}
const address = (options && options.address) || (await this.address(asset));
return new bignumber_js_1.default((await this.sharedState.ethSigner.provider.getBalance(address, atBlock)).toString());
};
// Transfer
this.send = (to, value, asset, options) => this.sendSats(to, value.times(new bignumber_js_1.default(10).exponentiatedBy(this.decimals)), asset, options);
this.sendSats = (to, valueIn, asset, optionsIn) => {
const promiEvent = (0, promiEvent_1.newPromiEvent)();
(async () => {
const options = optionsIn || {};
let value = valueIn;
const txOptions = (0, ethUtils_1.getTransactionConfig)(options);
if (options.subtractFee) {
const gasPrice = txOptions.gasPrice ||
(await this.sharedState.ethSigner.provider.getGasPrice());
const gasPriceBN = new bignumber_js_1.default(gasPrice.toString());
const gasLimit = txOptions.gasLimit || 21000;
const gasLimitBN = new bignumber_js_1.default(gasLimit.toString());
const fee = gasPriceBN.times(gasLimitBN);
if (fee.gt(value)) {
throw new Error(`Unable to include fee in value, fee exceeds value (${fee.toFixed()} > ${value.toFixed()})`);
}
value = value.minus(fee);
}
const from = await this.address(asset);
const tx = await this.sharedState.ethSigner.sendTransaction(Object.assign(Object.assign({ from, gasLimit: 21000 }, txOptions), { to, value: value.toFixed() }));
promiEvent.emit("transactionHash", tx.hash);
await tx.wait();
promiEvent.resolve(tx.hash);
})().catch((error) => {
promiEvent.reject(error);
});
return promiEvent;
};
this.network = (0, ethUtils_1.getNetwork)(network);
this.privateKey = privateKey;
const [ethSigner, address] = (0, ethUtils_1.getEthersSigner)(this.privateKey, (0, ethUtils_1.getEndpoint)(this.network, options && options.ethereumNode, options && options.infuraKey));
this.unlockedAddress = address;
sharedState.ethSigner = ethSigner;
this.sharedState = sharedState;
}
}
exports.ETHHandler = ETHHandler;
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiRVRISGFuZGxlci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9oYW5kbGVycy9FVEgvRVRISGFuZGxlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7QUFBQSxnRUFBcUM7QUFHckMscURBQWlFO0FBRWpFLHlDQU1vQjtBQWtCcEIsTUFBYSxVQUFVO0lBZW5CLFlBQ0ksVUFBa0IsRUFDbEIsT0FBZSxFQUNmLE9BQTRCLEVBQzVCLFdBQWlCO1FBWkosYUFBUSxHQUFHLEVBQUUsQ0FBQztRQTZCL0IsbURBQW1EO1FBQ25DLGlCQUFZLEdBQUcsQ0FBQyxLQUFZLEVBQVcsRUFBRSxDQUNyRCxPQUFPLEtBQUssS0FBSyxRQUFRO1lBQ3pCLENBQUMsS0FBSyxFQUFFLE9BQU8sRUFBRSxVQUFVLENBQUMsQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLFdBQVcsRUFBRSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUM7UUFFckQsWUFBTyxHQUFHLEtBQUssRUFDM0IsS0FBWSxFQUNaLE9BQXdCLEVBQ1QsRUFBRSxDQUFDLElBQUksQ0FBQyxlQUFlLENBQUM7UUFFM0MsVUFBVTtRQUNNLGVBQVUsR0FBRyxLQUFLLEVBQzlCLEtBQVksRUFDWixPQUF3QixFQUNOLEVBQUUsQ0FDcEIsQ0FBQyxNQUFNLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxLQUFLLEVBQUUsT0FBTyxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQ25ELElBQUksc0JBQVMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxlQUFlLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUNuRCxDQUFDO1FBRVUscUJBQWdCLEdBQUcsS0FBSyxFQUNwQyxLQUFZLEVBQ1osT0FBd0IsRUFDTixFQUFFO1lBQ3BCLElBQUksT0FBTyxDQUFDO1lBQ1osSUFBSSxPQUFPLElBQUksT0FBTyxDQUFDLGFBQWEsSUFBSSxPQUFPLENBQUMsYUFBYSxHQUFHLENBQUMsRUFBRTtnQkFDL0QsTUFBTSxZQUFZ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