send-crypto
Version:
A minimal JavaScript library / wallet for sending crypto assets
71 lines • 7.55 kB
JavaScript
import BigNumber from "bignumber.js";
import { LCDClient, MsgSend, RawKey, } from "@terra-money/terra.js";
import { newPromiEvent } from "../../lib/promiEvent";
import { strip0x } from "../../lib/utils";
export var TerraNetwork;
(function (TerraNetwork) {
TerraNetwork["Bombay"] = "bombay-12";
TerraNetwork["Columbus"] = "columbus-3";
})(TerraNetwork || (TerraNetwork = {}));
const toDenom = (asset) => "uluna";
export class TERRAHandler {
network;
decimals = 6;
client;
wallet;
key;
constructor(privateKey, network, options = {}, sharedState) {
this.network =
network === "mainnet" ? TerraNetwork.Columbus : TerraNetwork.Bombay;
const client = sharedState.client ||
new LCDClient({
URL: options && options.terra ? options.terra.URL : "",
chainID: this.network,
});
const key = new RawKey(Buffer.from(strip0x(privateKey), "hex"));
const wallet = client.wallet(key);
this.client = client;
this.wallet = wallet;
this.key = key;
}
// Returns whether or not this can handle the asset
handlesAsset = (asset) => typeof asset === "string" &&
["LUNA"].indexOf(asset.toUpperCase()) !== -1;
address = (asset, _options = {}) => {
if (!this.handlesAsset(asset)) {
throw new Error(`Asset ${asset} not supported.`);
}
return this.key.accAddress;
};
// Balance
getBalance = async (asset, options = {}) => (await this.getBalanceInSats(asset, options)).dividedBy(new BigNumber(10).exponentiatedBy(this.decimals));
getBalanceInSats = async (asset, options = {}) => {
if (!this.handlesAsset(asset)) {
throw new Error(`Asset ${asset} not supported.`);
}
const balances = (await this.client.bank.balance((options && options.address) || (await this.address(asset))))[0];
const balance = balances.get(toDenom(asset));
return new BigNumber(balance ? balance.amount.toFixed() : 0);
};
// Transfer
send = (to, value, asset, options = {}) => this.sendSats(to, value.times(new BigNumber(10).exponentiatedBy(this.decimals)), asset, options);
sendSats = (to, value, asset, options = {}) => {
const promiEvent = newPromiEvent();
(async () => {
const address = await this.address(asset);
const send = new MsgSend(address, to, { uluna: value.toFixed() });
const signedTx = await this.wallet.createAndSignTx({
msgs: [send],
memo: options.memo,
});
const result = await this.client.tx.broadcast(signedTx);
const txHash = result.txhash;
promiEvent.emit("transactionHash", txHash);
promiEvent.resolve(txHash);
})().catch((error) => {
promiEvent.reject(error);
});
return promiEvent;
};
}
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiVEVSUkFIYW5kbGVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vc3JjL2hhbmRsZXJzL1RFUlJBL1RFUlJBSGFuZGxlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLFNBQVMsTUFBTSxjQUFjLENBQUM7QUFFckMsT0FBTyxFQUVILFNBQVMsRUFDVCxPQUFPLEVBQ1AsTUFBTSxHQUVULE1BQU0sdUJBQXVCLENBQUM7QUFFL0IsT0FBTyxFQUFFLGFBQWEsRUFBYyxNQUFNLHNCQUFzQixDQUFDO0FBQ2pFLE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUcxQyxNQUFNLENBQU4sSUFBWSxZQUdYO0FBSEQsV0FBWSxZQUFZO0lBQ3BCLG9DQUFvQixDQUFBO0lBQ3BCLHVDQUF1QixDQUFBO0FBQzNCLENBQUMsRUFIVyxZQUFZLEtBQVosWUFBWSxRQUd2QjtBQWdCRCxNQUFNLE9BQU8sR0FBRyxDQUFDLEtBQWEsRUFBRSxFQUFFLENBQUMsT0FBTyxDQUFDO0FBRTNDLE1BQU0sT0FBTyxZQUFZO0lBSUosT0FBTyxDQUFlO0lBRXRCLFFBQVEsR0FBRyxDQUFDLENBQUM7SUFFdkIsTUFBTSxDQUFZO0lBQ2xCLE1BQU0sQ0FBUztJQUNmLEdBQUcsQ0FBUztJQUVuQixZQUNJLFVBQWtCLEVBQ2xCLE9BQWUsRUFDZixVQUE4QixFQUFFLEVBQ2hDLFdBQWlCO1FBRWpCLElBQUksQ0FBQyxPQUFPO1lBQ1IsT0FBTyxLQUFLLFNBQVMsQ0FBQyxDQUFDLENBQUMsWUFBWSxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsWUFBWSxDQUFDLE1BQU0sQ0FBQztRQUV4RSxNQUFNLE1BQU0sR0FDUixXQUFXLENBQUMsTUFBTTtZQUNsQixJQUFJLFNBQVMsQ0FBQztnQkFDVixHQUFHLEVBQUUsT0FBTyxJQUFJLE9BQU8sQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFD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