locklift
Version:
Node JS framework for working with Ever contracts. Inspired by Truffle and Hardhat. Helps you to build, test, run and maintain your smart contracts.
109 lines (108 loc) • 4.23 kB
JavaScript
;
var __importDefault = (this && this.__importDefault) || function (mod) {
return (mod && mod.__esModule) ? mod : { "default": mod };
};
Object.defineProperty(exports, "__esModule", { value: true });
exports.Transactions = exports.extractTransactionFromParams = exports.getKeyPairFromSecret = exports.errorExtractor = exports.getRandomNonce = exports.convertAmount = exports.stringToBytesArray = exports.isValidEverAddress = exports.fromNano = exports.toNano = exports.tryLoadTvcFromFile = exports.loadBase64FromFile = exports.loadJSONFromFile = void 0;
const fs_1 = __importDefault(require("fs"));
const bignumber_js_1 = __importDefault(require("bignumber.js"));
const everscale_crypto_1 = require("everscale-crypto");
const constants_1 = require("../constants");
const loadJSONFromFile = (filePath) => {
try {
return JSON.parse(fs_1.default.readFileSync(filePath, "utf8"));
// eslint-disable-next-line @typescript-eslint/no-unused-vars
}
catch (e) {
return undefined;
}
};
exports.loadJSONFromFile = loadJSONFromFile;
const loadBase64FromFile = (filePath) => {
try {
return fs_1.default.readFileSync(filePath, "utf8").split("\n").join("");
// eslint-disable-next-line @typescript-eslint/no-unused-vars
}
catch (e) {
return undefined;
}
};
exports.loadBase64FromFile = loadBase64FromFile;
const tryLoadTvcFromFile = (filePath) => {
try {
return fs_1.default.readFileSync(filePath, "base64");
// eslint-disable-next-line @typescript-eslint/no-unused-vars
}
catch (e) {
return;
}
};
exports.tryLoadTvcFromFile = tryLoadTvcFromFile;
const toNano = (amount) => new bignumber_js_1.default(amount).shiftedBy(9).toFixed(0);
exports.toNano = toNano;
const fromNano = (amount) => new bignumber_js_1.default(amount).shiftedBy(-9).toString();
exports.fromNano = fromNano;
const isValidEverAddress = (address) => /^(?:-1|0):[0-9a-fA-F]{64}$/.test(address);
exports.isValidEverAddress = isValidEverAddress;
const stringToBytesArray = (dataString, encoding = "base64") => {
return Buffer.from(dataString).toString(encoding);
};
exports.stringToBytesArray = stringToBytesArray;
const convertAmount = (amount, dimension) => {
const crystalBN = new bignumber_js_1.default(amount);
switch (dimension) {
case constants_1.Dimension.ToNano:
return crystalBN.times(10 ** 9).toFixed(0);
case constants_1.Dimension.FromNano:
return crystalBN.div(new bignumber_js_1.default(10).pow(9)).toString();
}
};
exports.convertAmount = convertAmount;
const getRandomNonce = () => (Math.random() * 64000) | 0;
exports.getRandomNonce = getRandomNonce;
const errorExtractor = async (transactionResult) => {
return transactionResult.then(res => {
if (res.transaction.aborted) {
throw {
message: `Transaction aborted with code ${res.transaction.exitCode}`,
name: "TransactionAborted",
transaction: res,
};
}
return res;
});
};
exports.errorExtractor = errorExtractor;
const getKeyPairFromSecret = (secretKey) => {
return {
secretKey,
publicKey: (0, everscale_crypto_1.getPublicKey)(secretKey),
};
};
exports.getKeyPairFromSecret = getKeyPairFromSecret;
const extractTransactionFromParams = (transaction) => {
if ("tx" in transaction) {
return transaction.tx.transaction;
}
if ("transaction" in transaction) {
return transaction.transaction;
}
return transaction;
};
exports.extractTransactionFromParams = extractTransactionFromParams;
class Transactions {
provider;
constructor(provider) {
this.provider = provider;
}
waitFinalized = async (transactionProm) => {
const extTransaction = await transactionProm;
const subscription = new this.provider.Subscriber();
const transactions = await subscription
.trace((0, exports.extractTransactionFromParams)(extTransaction))
.fold([], (acc, n) => [...acc, n]);
await subscription.unsubscribe();
return { extTransaction, transactions };
};
}
exports.Transactions = Transactions;