UNPKG

send-crypto

Version:

A minimal JavaScript library / wallet for sending crypto assets

103 lines 9.94 kB
import BigNumber from "bignumber.js"; import { Message } from "@glif/filecoin-message"; import Filecoin from "@glif/filecoin-wallet-provider"; import { Network as FilNetwork } from "@glif/filecoin-address"; import { newPromiEvent } from "../../lib/promiEvent"; import { sleep } from "../../lib/retry"; import { SingleKeyProvider } from "./provider"; export class FILHandler { network; decimals = 18; sharedState; constructor(privateKey, network, options = {}, sharedState) { const filecoin = new Filecoin(SingleKeyProvider(Buffer.from(privateKey, "hex")), { apiAddress: options && options.apiAddress, token: options && options.token, }); this.network = network === "mainnet" ? FilNetwork.MAIN : FilNetwork.TEST; sharedState.filecoin = filecoin; this.sharedState = sharedState; } // Returns whether or not this can handle the asset handlesAsset = (asset) => typeof asset === "string" && ["FIL", "FILECOIN"].indexOf(asset.toUpperCase()) !== -1; address = async (asset, _options = {}) => { if (!this.handlesAsset(asset)) { throw new Error(`Asset ${asset} not supported.`); } const accounts = await this.sharedState.filecoin.wallet.getAccounts(0, 1, this.network); return accounts[0]; }; // Balance getBalance = async (asset, options = {}) => new BigNumber(await this.sharedState.filecoin.getBalance((options && options.address) || (await this.address(asset)))); getBalanceInSats = async (asset, options = {}) => (await this.getBalance(asset, options)).multipliedBy(new BigNumber(10).exponentiatedBy(this.decimals)); // Transfer send = (to, value, asset, options = {}) => this.sendSats(to, value.times(new BigNumber(10).exponentiatedBy(this.decimals)), asset, options); sendSats = (to, valueIn, asset, options = {}) => { const promiEvent = newPromiEvent(); (async () => { const address = await this.address(asset); const nonce = await this.sharedState.filecoin.getNonce(address); let value = valueIn; let message = new Message({ to, from: address, value: valueIn, method: 0, gasFeeCap: 0, gasLimit: 0, gasPremium: 0, nonce, params: undefined, ...options, }); message = await this.sharedState.filecoin.gasEstimateMessageGas(message.toLotusType()); if (options.subtractFee) { const { maxFee: fee } = await this.sharedState.filecoin.gasEstimateMaxFee(message.toLotusType()); 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 signed = await this.sharedState.filecoin.wallet.sign(address, message.toLotusType()); const tx = await this.sharedState.filecoin.sendMessage(signed.Message, signed.Signature.Data); const txHash = tx["/"]; promiEvent.emit("transactionHash", txHash); while (true) { const result = await this.sharedState.filecoin.jsonRpcEngine.request("StateSearchMsg", tx); /* { Message: { '/': 'bafy2bzacedtcalpfb5dj3de6jb5lfncqtxw4kia4xotpg3on3p7gcesiwlube' }, Receipt: { ExitCode: 0, Return: null, GasUsed: 433268 }, ReturnDec: null, TipSet: [ { '/': 'bafy2bzacedsqymqnjl2oir7q2rgbwyqscihvebkvr7hfzdq5b2tvcct3cwczy' }, { '/': 'bafy2bzacednrjqbsyooob3f76wwct4iupauehvq6wnzrbf6uc4dskptwu4er6' }, { '/': 'bafy2bzaceany2in5cadbyf27mecnmzc6ustqfewd5dobxquidzbn3wtnjd52y' } ], Height: 53025 } */ if (result) { promiEvent.emit("confirmation", 1); break; } await sleep(10 * 1000); } promiEvent.resolve(txHash); })().catch((error) => { promiEvent.reject(error); }); return promiEvent; }; } //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiRklMSGFuZGxlci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9oYW5kbGVycy9GSUwvRklMSGFuZGxlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLFNBQVMsTUFBTSxjQUFjLENBQUM7QUFDckMsT0FBTyxFQUFFLE9BQU8sRUFBYyxNQUFNLHdCQUF3QixDQUFDO0FBQzdELE9BQU8sUUFBUSxNQUFNLGdDQUFnQyxDQUFDO0FBQ3RELE9BQU8sRUFBRSxPQUFPLElBQUksVUFBVSxFQUFFLE1BQU0sd0JBQXdCLENBQUM7QUFFL0QsT0FBTyxFQUFFLGFBQWEsRUFBYyxNQUFNLHNCQUFzQixDQUFDO0FBQ2pFLE9BQU8sRUFBRSxLQUFLLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUV4QyxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSxZQUFZLENBQUM7QUFjL0MsTUFBTSxPQUFPLFVBQVU7SUFJRixPQUFPLENBQWE7SUFFcEIsUUFBUSxHQUFHLEVBQUUsQ0FBQztJQUVkLFdBQVcsQ0FFMUI7SUFFRixZQUNJLFVBQWtCLEVBQ2xCLE9BQWUsRUFDZixVQUE4QixFQUFFLEVBQ2hDLFdBQWlCO1FBRWpCLE1BQU0sUUFBUSxHQUFHLElBQUksUUFBUSxDQUN6QixpQkFBaUIsQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLFVBQVUsRUFBRSxLQUFLLENBQUMsQ0FBQyxFQUNqRDtZQUNJLFVBQVUsRUFBRSxPQUFPLElBQUksT0FBTyxDQUFDLFVBQVU7WUFDekMsS0FBSyxFQUFFLE9BQU8sSUFBSSxPQUFPLENBQUMsS0FBSztTQUNsQyxDQUNKLENBQUM7UUFFRixJQUFJLENBQUMsT0FBTztZQUNSLE9BQU8sS0FBSyxTQUFTLENBQUMsQ0FBQyxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUM7UUFFOUQsV0FBVyxDQUFDLFFBQVEsR0FBRyxRQUFRLENBQUM7UUFDaEMsSUFBSSxDQUFDLFdBQVcsR0FBRyxXQUFXLENBQUM7SUFDbkMsQ0FBQztJQUVELG1EQUFtRDtJQUNuQyxZQUFZLEdBQUcsQ0FBQyxLQUFZLEVBQVcsRUFBRSxDQUNyRCxPQUFPLEtBQUssS0FBSyxRQUFRO1FBQ3pCLENBQUMsS0FBSyxFQUFFLFVBQVUsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsV0FBVyxFQUFFLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQztJQUU1QyxPQUFPLEdBQUcsS0FBSyxFQUMzQixLQUFZLEVBQ1osV0FBMkIsRUFBRSxFQUNkLEVBQUU7UUFDakIsSUFBSSxDQUFDLElBQUksQ0FBQyxZQUFZLENBQUMsS0FBSyxDQUFDLEVBQUU7WUFDM0IsTUFBTSxJQUFJLEtBQUssQ0FBQyxTQUFTLEtBQUssaUJBQWlCLENBQUMsQ0FBQztTQUNwRDtRQUVELE1BQU0sUUFBUSxHQUFHLE1BQU0sSUFBSSxDQUFDLFdBQVcsQ0FBQyxRQUFRLENBQUMsTUFBTSxDQUFDLFdBQVcsQ0FDL0QsQ0FBQyxFQUNELENBQUMsRUFDRCxJQUFJLENBQUMsT0FBTyxDQUNmLENBQUM7UUFDRixPQUFPLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUN2QixDQUFDLENBQUM7SUFFRixVQUFVO0lBQ00sVUFBVSxHQUFHLEtBQUssRUFDOUIsS0FBWSxFQUNaLFVBQTBCLEVBQUUsRUFDVixFQUFFLENBQ3BCLElBQUksU0FBUyxDQUNULE1BQU0sSUFBSSxDQUFDLFdBQVcsQ0FBQyxRQUFRLENBQUMsVUFBVSxDQUN0QyxDQUFDLE9BQU8sSUFBSSxPQUFPLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxNQUFNLElBQUksQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FDOUQsQ0FDSixDQUFDO0lBRVUsZ0JBQWdCLEdBQUcsS0FBSyxFQUNwQyxLQUFZLEVBQ1osVUFBMEIsRUFBRSxFQUNWLEVBQUUsQ0FDcEIsQ0FBQyxNQUFNLElBQUksQ0FBQyxVQUFVLENBQUMsS0FBSyxFQUFFLE9BQU8sQ0FBQyxDQUFDLENBQUMsWUFBWSxDQUNoRCxJQUFJLFNBQVMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxlQUFlLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUNuRCxDQUFDO0lBRU4sV0FBVztJQUNLLElBQUksR0FBRyxDQUNuQixFQUFVLEVBQ1YsS0FBZ0IsRUFDaEIsS0FBWSxFQUNaLFVBQXFCLEVBQUUsRUFDTCxFQUFFLENBQ3BCLElBQUksQ0FBQyxRQUFRLENBQ1QsRUFBRSxFQUNGLEtBQUssQ0FBQyxLQUFLLENBQUMsSUFBSSxTQUFTLENBQUMsRUFBRSxDQUFDLENBQUMsZUFBZSxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQyxFQUM3RCxLQUFLLEVBQ0wsT0FBTyxDQUNWLENBQUM7SUFFVSxRQUFRLEdBQUcsQ0FDdkIsRUFBVSxFQUNWLE9BQWtCLEVBQ2xCLEtBQVksRUFDWixVQUFxQixFQUFFLEVBQ0wsRUFBRTtRQUNwQixNQUFNLFVBQVUsR0FBRyxhQUFhLEVBQVUsQ0FBQztRQUUzQyxDQUFDLEtBQUssSUFBSSxFQUFFO1lBQ1IsTUFBTSxPQUFPLEdBQUcsTUFBTSxJQUFJLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxDQUFDO1lBQzFDLE1BQU0sS0FBSyxHQUFHLE1BQU0sSUFBSSxDQUFDLFdBQVcsQ0FBQyxRQUFRLENBQUMsUUFBUSxDQUFDLE9BQU8sQ0FBQyxDQUFDO1lBRWhFLElBQUksS0FBSyxHQUFHLE9BQU8sQ0FBQztZQUVwQixJQUFJLE9BQU8sR0FBRyxJQUFJLE9BQU8sQ0FBQztnQkFDdEIsRUFBRTtnQkFDRixJQUFJLEVBQUUsT0FBTztnQkFDYixLQUFLLEVBQUUsT0FBTztnQkFDZCxNQUFNLEVBQUUsQ0FBQztnQkFDVCxTQUFTLEVBQUUsQ0FBQztnQkFDWixRQUFRLEVBQUUsQ0FBQztnQkFDWCxVQUFVLEVBQUUsQ0FBQztnQkFDYixLQUFLO2dCQUNMLE1BQU0sRUFBRSxTQUFTO2dCQUNqQixHQUFHLE9BQU87YUFDYixDQUFDLENBQUM7WUFFSCxPQUFPLEdBQUcsTUFBTSxJQUFJLENBQUMsV0FBVyxDQUFDLFFBQVEsQ0FBQyxxQkFBcUIsQ0FDM0QsT0FBTyxDQUFDLFdBQVcsRUFBRSxDQUN4QixDQUFDO1lBRUYsSUFBSSxPQUFPLENBQUMsV0FBVyxFQUFFO2dCQUNyQixNQUFNLEVBQUUsTUFBTSxFQUFFLEdBQUcsRUFBRSxHQUNqQixNQUFNLElBQUksQ0FBQyxXQUFXLENBQUMsUUFBUSxDQUFDLGlCQUFpQixDQUM3QyxPQUFPLENBQUMsV0FBVyxFQUFFLENBQ3hCLENBQUM7Z0JBRU4sSUFBSSxHQUFHLENBQUMsRUFBRSxDQUFDLEtBQUssQ0FBQyxFQUFFO29CQUNmLE1BQU0sSUFBSSxLQUFLLENBQ1gsc0RBQXNELEdBQUcsQ0FBQyxPQUFPLEVBQUUsTUFBTSxLQUFLLENBQUMsT0FBTyxFQUFFLEdBQUcsQ0FDOUYsQ0FBQztpQkFDTDtnQkFDRCxLQUFLLEdBQUcsS0FBSyxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQzthQUM1QjtZQUVELE1BQU0sTUFBTSxHQUFHLE1BQU0sSUFBSSxDQUFDLFdBQVcsQ0FBQyxRQUFRLENBQUMsTUFBTSxDQUFDLElBQUksQ0FDdEQsT0FBTyxFQUNQLE9BQU8sQ0FBQyxXQUFXLEVBQUUsQ0FDeEIsQ0FBQztZQUVGLE1BQU0sRUFBRSxHQUFHLE1BQU0sSUFBSSxDQUFDLFdBQVcsQ0FBQyxRQUFRLENBQUMsV0FBVyxDQUNsRCxNQUFNLENBQUMsT0FBTyxFQUNkLE1BQU0sQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUN4QixDQUFDO1lBRUYsTUFBTSxNQUFNLEdBQUcsRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDO1lBRXZCLFVBQVUsQ0FBQyxJQUFJLENBQUMsaUJBQWlCLEVBQUUsTUFBTSxDQUFDLENBQUM7WUFFM0MsT0FBTyxJQUFJLEVBQUU7Z0JBQ1QsTUFBTSxNQUFNLEdBQ1IsTUFBTSxJQUFJLENBQUMsV0FBVyxDQUFDLFFBQVEsQ0FBQyxhQUFhLENBQUMsT0FBTyxDQUNqRCxnQkFBZ0IsRUFDaEIsRUFBRSxDQUNMLENBQUM7Z0JBRU47Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O2tCQW9CRTtnQkFFRixJQUFJLE1BQU0sRUFBRTtvQkFDUixVQUFVLENBQUMsSUFBSSxDQUFDLGNBQWMsRUFBRSxDQUFDLENBQUMsQ0FBQztvQkFDbkMsTUFBTTtpQkFDVDtnQkFFRCxNQUFNLEtBQUssQ0FBQyxFQUFFLEdBQUcsSUFBSSxDQUFDLENBQUM7YUFDMUI7WUFFRCxVQUFVLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQyxDQUFDO1FBQy9CLENBQUMsQ0FBQyxFQUFFLENBQUMsS0FBSyxDQUFDLENBQUMsS0FBSyxFQUFFLEVBQUU7WUFDakIsVUFBVSxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUM3QixDQUFDLENBQUMsQ0FBQztRQUVILE9BQU8sVUFBVSxDQUFDO0lBQ3RCLENBQUMsQ0FBQztDQUNMIn0=