send-crypto
Version:
A minimal JavaScript library / wallet for sending crypto assets
97 lines • 10.3 kB
JavaScript
;
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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