UNPKG

send-crypto

Version:

A minimal JavaScript library / wallet for sending crypto assets

97 lines 10.3 kB
"use strict"; var __importDefault = (this && this.__importDefault) || function (mod) { return (mod && mod.__esModule) ? mod : { "default": mod }; }; Object.defineProperty(exports, "__esModule", { value: true }); exports.FILHandler = void 0; const bignumber_js_1 = __importDefault(require("bignumber.js")); const filecoin_message_1 = require("@glif/filecoin-message"); const filecoin_wallet_provider_1 = __importDefault(require("@glif/filecoin-wallet-provider")); const filecoin_address_1 = require("@glif/filecoin-address"); const promiEvent_1 = require("../../lib/promiEvent"); const retry_1 = require("../../lib/retry"); const provider_1 = require("./provider"); class FILHandler { constructor(privateKey, network, options = {}, sharedState) { this.decimals = 18; // Returns whether or not this can handle the asset this.handlesAsset = (asset) => typeof asset === "string" && ["FIL", "FILECOIN"].indexOf(asset.toUpperCase()) !== -1; this.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 this.getBalance = async (asset, options = {}) => new bignumber_js_1.default(await this.sharedState.filecoin.getBalance((options && options.address) || (await this.address(asset)))); this.getBalanceInSats = async (asset, options = {}) => (await this.getBalance(asset, options)).multipliedBy(new bignumber_js_1.default(10).exponentiatedBy(this.decimals)); // 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, options = {}) => { const promiEvent = (0, promiEvent_1.newPromiEvent)(); (async () => { const address = await this.address(asset); const nonce = await this.sharedState.filecoin.getNonce(address); let value = valueIn; let message = new filecoin_message_1.Message(Object.assign({ 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 (0, retry_1.sleep)(10 * 1000); } promiEvent.resolve(txHash); })().catch((error) => { promiEvent.reject(error); }); return promiEvent; }; const filecoin = new filecoin_wallet_provider_1.default((0, provider_1.SingleKeyProvider)(Buffer.from(privateKey, "hex")), { apiAddress: options && options.apiAddress, token: options && options.token, }); this.network = network === "mainnet" ? filecoin_address_1.Network.MAIN : filecoin_address_1.Network.TEST; sharedState.filecoin = filecoin; this.sharedState = sharedState; } } exports.FILHandler = FILHandler; //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiRklMSGFuZGxlci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9oYW5kbGVycy9GSUwvRklMSGFuZGxlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7QUFBQSxnRUFBcUM7QUFDckMsNkRBQTZEO0FBQzdELDhGQUFzRDtBQUN0RCw2REFBK0Q7QUFFL0QscURBQWlFO0FBQ2pFLDJDQUF3QztBQUV4Qyx5Q0FBK0M7QUFjL0MsTUFBYSxVQUFVO0lBWW5CLFlBQ0ksVUFBa0IsRUFDbEIsT0FBZSxFQUNmLFVBQThCLEVBQUUsRUFDaEMsV0FBaUI7UUFWSixhQUFRLEdBQUcsRUFBRSxDQUFDO1FBMkIvQixtREFBbUQ7UUFDbkMsaUJBQVksR0FBRyxDQUFDLEtBQVksRUFBVyxFQUFFLENBQ3JELE9BQU8sS0FBSyxLQUFLLFFBQVE7WUFDekIsQ0FBQyxLQUFLLEVBQUUsVUFBVSxDQUFDLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxXQUFXLEVBQUUsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDO1FBRTVDLFlBQU8sR0FBRyxLQUFLLEVBQzNCLEtBQVksRUFDWixXQUEyQixFQUFFLEVBQ2QsRUFBRTtZQUNqQixJQUFJLENBQUMsSUFBSSxDQUFDLFlBQVksQ0FBQyxLQUFLLENBQUMsRUFBRTtnQkFDM0IsTUFBTSxJQUFJLEtBQUssQ0FBQyxTQUFTLEtBQUssaUJBQWlCLENBQUMsQ0FBQzthQUNwRDtZQUVELE1BQU0sUUFBUSxHQUFHLE1BQU0sSUFBSSxDQUFDLFdBQVcsQ0FBQyxRQUFRLENBQUMsTUFBTSxDQUFDLFdBQVcsQ0FDL0QsQ0FBQyxFQUNELENBQUMsRUFDRCxJQUFJLENBQUMsT0FBTyxDQUNmLENBQUM7WUFDRixPQUFPLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUN2QixDQUFDLENBQUM7UUFFRixVQUFVO1FBQ00sZUFBVSxHQUFHLEtBQUssRUFDOUIsS0FBWSxFQUNaLFVBQTBCLEVBQUUsRUFDVixFQUFF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