@unification-com/und-js-v2
Version:
Unification Mainchain Wallet SDK v2
1,128 lines (1,117 loc) • 78.3 kB
JavaScript
"use strict";
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
var _typeof = require("@babel/runtime/helpers/typeof");
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.UndClient = void 0;
var _regenerator = _interopRequireDefault(require("@babel/runtime/regenerator"));
var _asyncToGenerator2 = _interopRequireDefault(require("@babel/runtime/helpers/asyncToGenerator"));
var _classCallCheck2 = _interopRequireDefault(require("@babel/runtime/helpers/classCallCheck"));
var _createClass2 = _interopRequireDefault(require("@babel/runtime/helpers/createClass"));
var _crypto = _interopRequireDefault(require("crypto"));
var _nodeFetch = _interopRequireDefault(require("node-fetch"));
var _proto = _interopRequireDefault(require("../messages/proto"));
var _secp256k = _interopRequireDefault(require("secp256k1"));
var _config = _interopRequireDefault(require("../config"));
var fundCrypto = _interopRequireWildcard(require("../crypto"));
var _validateHelper = require("../utils/validateHelper");
var _utils = require("../utils");
var msgFactory = _interopRequireWildcard(require("../messages/factory"));
function _getRequireWildcardCache(nodeInterop) { if (typeof WeakMap !== "function") return null; var cacheBabelInterop = new WeakMap(); var cacheNodeInterop = new WeakMap(); return (_getRequireWildcardCache = function _getRequireWildcardCache(nodeInterop) { return nodeInterop ? cacheNodeInterop : cacheBabelInterop; })(nodeInterop); }
function _interopRequireWildcard(obj, nodeInterop) { if (!nodeInterop && obj && obj.__esModule) { return obj; } if (obj === null || _typeof(obj) !== "object" && typeof obj !== "function") { return { "default": obj }; } var cache = _getRequireWildcardCache(nodeInterop); if (cache && cache.has(obj)) { return cache.get(obj); } var newObj = {}; var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var key in obj) { if (key !== "default" && Object.prototype.hasOwnProperty.call(obj, key)) { var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null; if (desc && (desc.get || desc.set)) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } newObj["default"] = obj; if (cache) { cache.set(obj, newObj); } return newObj; }
var UndClient = /*#__PURE__*/function () {
function UndClient(url) {
var broadcastMode = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : "BROADCAST_MODE_SYNC";
(0, _classCallCheck2["default"])(this, UndClient);
if (!url) {
throw new Error("FUND Mainchain API url should not be null");
}
this.url = url;
this.chainId = null;
this.path = "".concat(_config["default"].HD_PATH, "0");
this.bech32MainPrefix = _config["default"].BECH32_PREFIX;
this.broadcastMode = broadcastMode;
this.accountNumber = -1;
this.address = null;
this.privKey = null;
this.pubKeyAny = null;
}
/*
* Class setters and intialiser
*/
/**
* Initialize the client with the chain's ID. Asynchronous.
* @return {Promise}
*/
(0, _createClass2["default"])(UndClient, [{
key: "initChain",
value: function () {
var _initChain = (0, _asyncToGenerator2["default"])( /*#__PURE__*/_regenerator["default"].mark(function _callee() {
var data;
return _regenerator["default"].wrap(function _callee$(_context) {
while (1) switch (_context.prev = _context.next) {
case 0:
if (this.chainId) {
_context.next = 7;
break;
}
_context.next = 3;
return this.getChainInfo();
case 3:
data = _context.sent;
this.chainId = data.default_node_info.network;
this.node_info = data.default_node_info;
this.node_app_version = data.application_version;
case 7:
return _context.abrupt("return", this);
case 8:
case "end":
return _context.stop();
}
}, _callee, this);
}));
function initChain() {
return _initChain.apply(this, arguments);
}
return initChain;
}()
/**
* Set the private key for the client
* @param {String|Buffer} privKey private key as a hex string or Buffer
*/
}, {
key: "setPrivateKey",
value: function () {
var _setPrivateKey = (0, _asyncToGenerator2["default"])( /*#__PURE__*/_regenerator["default"].mark(function _callee2(privKey) {
var accData;
return _regenerator["default"].wrap(function _callee2$(_context2) {
while (1) switch (_context2.prev = _context2.next) {
case 0:
this.privKey = Buffer.from(privKey, "hex");
this.pubKeyAny = msgFactory.getPubKeyAny(this.privKey);
this.address = fundCrypto.getAddressFromPrivateKey(this.privKey.toString("hex"), this.bech32MainPrefix);
_context2.next = 5;
return this.getAccount(this.address);
case 5:
accData = _context2.sent;
if (accData !== null && accData !== void 0 && accData.account) {
this.accountNumber = accData.account.account_number;
}
case 7:
case "end":
return _context2.stop();
}
}, _callee2, this);
}));
function setPrivateKey(_x) {
return _setPrivateKey.apply(this, arguments);
}
return setPrivateKey;
}()
}, {
key: "clean",
value: function clean() {
this.accountNumber = -1;
this.address = null;
this.privKey = null;
this.pubKeyAny = null;
}
}, {
key: "getPubKeyAny",
value: function getPubKeyAny() {
return this.pubKeyAny;
}
/**
* Set the mode for broadcasting a Tx
* "BROADCAST_MODE_UNSPECIFIED", "BROADCAST_MODE_BLOCK", "BROADCAST_MODE_SYNC", "BROADCAST_MODE_ASYNC"
* @param {String} broadcastMode sync = wait for checkTx, async = send and forget (faster but less guarantees), block = wait for block to process (default sync)
*/
}, {
key: "setBroadcastMode",
value: function setBroadcastMode(broadcastMode) {
this.broadcastMode = broadcastMode;
}
/*
* Send Transaction functions
*/
/**
* Transfer FUND to an address
* @param {String} toAddress
* @param {Number} amount
* @param {Object} fee
* @param {String} denom optional denom
* @param {String} fromAddress optional fromAddress
* @param {String} memo optional memo
* @returns {Promise<*>}
*/
}, {
key: "transferUnd",
value: function () {
var _transferUnd = (0, _asyncToGenerator2["default"])(function (toAddress, amount, fee) {
var _this = this;
var denom = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : "nund";
var fromAddress = arguments.length > 4 && arguments[4] !== undefined ? arguments[4] : this.address;
var memo = arguments.length > 5 && arguments[5] !== undefined ? arguments[5] : "";
return /*#__PURE__*/_regenerator["default"].mark(function _callee3() {
var _convertAmount, amt, dnm, _convertAmount2, feeAmt, feeDnm, accData, txBody, authInfo, signedTxBytes;
return _regenerator["default"].wrap(function _callee3$(_context3) {
while (1) switch (_context3.prev = _context3.next) {
case 0:
if (fromAddress) {
_context3.next = 2;
break;
}
throw new Error("fromAddress should not be empty");
case 2:
if (toAddress) {
_context3.next = 4;
break;
}
throw new Error("toAddress should not be empty");
case 4:
if (!(amount === 0)) {
_context3.next = 6;
break;
}
throw new Error("amount should not be zero");
case 6:
if (fundCrypto.checkAddress(toAddress, _this.bech32MainPrefix)) {
_context3.next = 8;
break;
}
throw new Error("invalid toAddress");
case 8:
if (fundCrypto.checkAddress(fromAddress, _this.bech32MainPrefix)) {
_context3.next = 10;
break;
}
throw new Error("invalid fromAddress");
case 10:
(0, _validateHelper.checkNumber)(amount, "amount");
_convertAmount = (0, _utils.convertAmount)(amount, denom), amt = _convertAmount.amt, dnm = _convertAmount.dnm;
_convertAmount2 = (0, _utils.convertAmount)(fee.amount, fee.denom), feeAmt = _convertAmount2.amt, feeDnm = _convertAmount2.dnm;
_context3.next = 15;
return _this.getAccount(fromAddress);
case 15:
accData = _context3.sent;
if (!(accData !== null && accData !== void 0 && accData.code)) {
_context3.next = 18;
break;
}
throw new Error(accData.message);
case 18:
// ---------------------------------- (1)txBody ----------------------------------
txBody = msgFactory.getMsgSendTx(fromAddress, toAddress, amt, dnm, memo); // --------------------------------- (2)authInfo ---------------------------------
authInfo = _this.compileAuthInfo(accData.account.sequence, feeAmt, feeDnm, fee.gas); // -------------------------------- sign --------------------------------
signedTxBytes = _this.sign(txBody, authInfo);
return _context3.abrupt("return", _this.broadcast(signedTxBytes));
case 22:
case "end":
return _context3.stop();
}
}, _callee3);
})();
});
function transferUnd(_x2, _x3, _x4) {
return _transferUnd.apply(this, arguments);
}
return transferUnd;
}()
/**
* Register a BEACON
* @param moniker {String} moniker
* @param name {String} name optional name
* @param fromAddress {String} fromAddress
* @param gas {Number} gas optional gas
* @param memo {String} memo optional memo
* @returns {Promise<*>}
*/
}, {
key: "registerBeacon",
value: function () {
var _registerBeacon = (0, _asyncToGenerator2["default"])(function (moniker) {
var _this2 = this;
var name = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : "";
var fromAddress = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : this.address;
var gas = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : 100000;
var memo = arguments.length > 4 && arguments[4] !== undefined ? arguments[4] : "";
return /*#__PURE__*/_regenerator["default"].mark(function _callee4() {
var accData, beaconParams, txBody, authInfo, signedTxBytes;
return _regenerator["default"].wrap(function _callee4$(_context4) {
while (1) switch (_context4.prev = _context4.next) {
case 0:
if (fromAddress) {
_context4.next = 2;
break;
}
throw new Error("fromAddress should not be empty");
case 2:
if (fundCrypto.checkAddress(fromAddress, _config["default"].BECH32_PREFIX)) {
_context4.next = 4;
break;
}
throw new Error("invalid fromAddress");
case 4:
if (!(moniker === "" || moniker === null || moniker === undefined)) {
_context4.next = 6;
break;
}
throw new Error("beacon must have a moniker");
case 6:
_context4.next = 8;
return _this2.getAccount(fromAddress);
case 8:
accData = _context4.sent;
if (!(accData !== null && accData !== void 0 && accData.code)) {
_context4.next = 11;
break;
}
throw new Error(accData.message);
case 11:
_context4.next = 13;
return _this2.getBeaconParams();
case 13:
beaconParams = _context4.sent;
txBody = msgFactory.getMsgRegisterBeacon(moniker, name, fromAddress);
authInfo = _this2.compileAuthInfo(accData.account.sequence, beaconParams.params.fee_register, beaconParams.params.denom, gas); // -------------------------------- sign --------------------------------
signedTxBytes = _this2.sign(txBody, authInfo);
return _context4.abrupt("return", _this2.broadcast(signedTxBytes));
case 18:
case "end":
return _context4.stop();
}
}, _callee4);
})();
});
function registerBeacon(_x5) {
return _registerBeacon.apply(this, arguments);
}
return registerBeacon;
}()
/**
* Submit a BEACON timestamp
* @param beaconId {Number} beacon_id
* @param hash {String} hash
* @param submitTime {Number} submit_time
* @param fromAddress {String} fromAddress
* @param gas {Number} gas optional gas
* @param memo {String} memo optional memo
* @returns {Promise<*>}
*/
}, {
key: "recordBeaconTimestamp",
value: function () {
var _recordBeaconTimestamp = (0, _asyncToGenerator2["default"])(function (beaconId, hash, submitTime) {
var _this3 = this;
var fromAddress = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : this.address;
var gas = arguments.length > 4 && arguments[4] !== undefined ? arguments[4] : 100000;
var memo = arguments.length > 5 && arguments[5] !== undefined ? arguments[5] : "";
return /*#__PURE__*/_regenerator["default"].mark(function _callee5() {
var accData, beaconParams, txBody, authInfo, signedTxBytes;
return _regenerator["default"].wrap(function _callee5$(_context5) {
while (1) switch (_context5.prev = _context5.next) {
case 0:
if (fromAddress) {
_context5.next = 2;
break;
}
throw new Error("fromAddress should not be empty");
case 2:
if (fundCrypto.checkAddress(fromAddress, _config["default"].BECH32_PREFIX)) {
_context5.next = 4;
break;
}
throw new Error("invalid fromAddress");
case 4:
if (!(parseInt(beaconId) <= 0)) {
_context5.next = 6;
break;
}
throw new Error("must have beacon id");
case 6:
if (!(hash === "" || hash === null || hash === undefined)) {
_context5.next = 8;
break;
}
throw new Error("beacon must have hash");
case 8:
if (!(parseInt(submitTime, 10) <= 0)) {
_context5.next = 10;
break;
}
throw new Error("must have submit time");
case 10:
_context5.next = 12;
return _this3.getAccount(fromAddress);
case 12:
accData = _context5.sent;
if (!(accData !== null && accData !== void 0 && accData.code)) {
_context5.next = 15;
break;
}
throw new Error(accData.message);
case 15:
_context5.next = 17;
return _this3.getBeaconParams();
case 17:
beaconParams = _context5.sent;
txBody = msgFactory.getMsgRecordBeaconTimestamp(beaconId, hash, submitTime, fromAddress);
authInfo = _this3.compileAuthInfo(accData.account.sequence, beaconParams.params.fee_record, beaconParams.params.denom, gas); // -------------------------------- sign --------------------------------
signedTxBytes = _this3.sign(txBody, authInfo);
return _context5.abrupt("return", _this3.broadcast(signedTxBytes));
case 22:
case "end":
return _context5.stop();
}
}, _callee5);
})();
});
function recordBeaconTimestamp(_x6, _x7, _x8) {
return _recordBeaconTimestamp.apply(this, arguments);
}
return recordBeaconTimestamp;
}()
/**
* Register a WRKChain
* @param moniker {String} moniker
* @param baseType {String} base_type optional base_type
* @param name {String} name optional name
* @param genesis {String} genesis optional genesis
* @param fromAddress {String} fromAddress
* @param gas {Number} gas optional gas
* @param memo {String} memo optional memo
* @returns {Promise<*>}
*/
}, {
key: "registerWRKChain",
value: function () {
var _registerWRKChain = (0, _asyncToGenerator2["default"])(function (moniker, baseType) {
var _this4 = this;
var name = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : "";
var genesis = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : "";
var fromAddress = arguments.length > 4 && arguments[4] !== undefined ? arguments[4] : this.address;
var gas = arguments.length > 5 && arguments[5] !== undefined ? arguments[5] : 100000;
var memo = arguments.length > 6 && arguments[6] !== undefined ? arguments[6] : "";
return /*#__PURE__*/_regenerator["default"].mark(function _callee6() {
var accData, params, txBody, authInfo, signedTxBytes;
return _regenerator["default"].wrap(function _callee6$(_context6) {
while (1) switch (_context6.prev = _context6.next) {
case 0:
if (fromAddress) {
_context6.next = 2;
break;
}
throw new Error("fromAddress should not be empty");
case 2:
if (fundCrypto.checkAddress(fromAddress, _config["default"].BECH32_PREFIX)) {
_context6.next = 4;
break;
}
throw new Error("invalid fromAddress");
case 4:
if (!(moniker === "" || moniker === null || moniker === undefined)) {
_context6.next = 6;
break;
}
throw new Error("wrkchain must have a moniker");
case 6:
if (!(baseType === "" || baseType === null || baseType === undefined)) {
_context6.next = 8;
break;
}
throw new Error("wrkchain must have a type");
case 8:
_context6.next = 10;
return _this4.getAccount(fromAddress);
case 10:
accData = _context6.sent;
if (!(accData !== null && accData !== void 0 && accData.code)) {
_context6.next = 13;
break;
}
throw new Error(accData.message);
case 13:
_context6.next = 15;
return _this4.getWRKChainParams();
case 15:
params = _context6.sent;
txBody = msgFactory.getMsgRegisterWrkChain(moniker, name, genesis, baseType, fromAddress);
authInfo = _this4.compileAuthInfo(accData.account.sequence, params.params.fee_register, params.params.denom, gas); // -------------------------------- sign --------------------------------
signedTxBytes = _this4.sign(txBody, authInfo);
return _context6.abrupt("return", _this4.broadcast(signedTxBytes));
case 20:
case "end":
return _context6.stop();
}
}, _callee6);
})();
});
function registerWRKChain(_x9, _x10) {
return _registerWRKChain.apply(this, arguments);
}
return registerWRKChain;
}()
/**
* Submit WRKChain block header hashes
* @param wrkchainId {Number} wrkchain_id
* @param height {String} height
* @param blockHash {String} blockhash
* @param parentHash {String} parenthash optional parenthash
* @param hash1 {String} hash1 optional hash1
* @param hash2 {String} hash2 optional hash2
* @param hash3 {String} hash3 optional hash3
* @param fromAddress {String} fromAddress
* @param gas {Number} gas optional gas
* @param memo {String} memo optional memo
* @param sequence {Number} sequence optional sequence
* @returns {Promise<*>}
*/
}, {
key: "recordWRKChainBlock",
value: function () {
var _recordWRKChainBlock = (0, _asyncToGenerator2["default"])(function (wrkchainId, height, blockHash, parentHash, hash1, hash2, hash3) {
var _this5 = this;
var fromAddress = arguments.length > 7 && arguments[7] !== undefined ? arguments[7] : this.address;
var gas = arguments.length > 8 && arguments[8] !== undefined ? arguments[8] : 120000;
var memo = arguments.length > 9 && arguments[9] !== undefined ? arguments[9] : "";
var sequence = arguments.length > 10 && arguments[10] !== undefined ? arguments[10] : null;
return /*#__PURE__*/_regenerator["default"].mark(function _callee7() {
var accData, params, txBody, authInfo, signedTxBytes;
return _regenerator["default"].wrap(function _callee7$(_context7) {
while (1) switch (_context7.prev = _context7.next) {
case 0:
if (fromAddress) {
_context7.next = 2;
break;
}
throw new Error("fromAddress should not be empty");
case 2:
if (fundCrypto.checkAddress(fromAddress, _config["default"].BECH32_PREFIX)) {
_context7.next = 4;
break;
}
throw new Error("invalid fromAddress");
case 4:
if (!(parseInt(wrkchainId) <= 0)) {
_context7.next = 6;
break;
}
throw new Error("must have wrkchain id");
case 6:
if (!(blockHash === "" || blockHash === null || blockHash === undefined)) {
_context7.next = 8;
break;
}
throw new Error("wrkchain must have blockhash");
case 8:
if (!(parseInt(height) <= 0)) {
_context7.next = 10;
break;
}
throw new Error("must have height");
case 10:
_context7.next = 12;
return _this5.getAccount(fromAddress);
case 12:
accData = _context7.sent;
if (!(accData !== null && accData !== void 0 && accData.code)) {
_context7.next = 15;
break;
}
throw new Error(accData.message);
case 15:
_context7.next = 17;
return _this5.getWRKChainParams();
case 17:
params = _context7.sent;
txBody = msgFactory.getMsgRecordWrkChainBlock(wrkchainId, height, blockHash, parentHash, hash1, hash2, hash3, fromAddress);
authInfo = _this5.compileAuthInfo(accData.account.sequence, params.params.fee_record, params.params.denom, gas); // -------------------------------- sign --------------------------------
signedTxBytes = _this5.sign(txBody, authInfo);
return _context7.abrupt("return", _this5.broadcast(signedTxBytes));
case 22:
case "end":
return _context7.stop();
}
}, _callee7);
})();
});
function recordWRKChainBlock(_x11, _x12, _x13, _x14, _x15, _x16, _x17) {
return _recordWRKChainBlock.apply(this, arguments);
}
return recordWRKChainBlock;
}()
/**
* Delegate FUND to a validator
* @param {String} validator
* @param {Number} amount
* @param {Object} fee
* @param {String} denom optional denom
* @param {String} delegator optional delegator
* @param {String} memo optional memo
* @returns {Promise<*>}
*/
}, {
key: "delegate",
value: function () {
var _delegate = (0, _asyncToGenerator2["default"])(function (validator, amount, fee) {
var _this6 = this;
var denom = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : "nund";
var delegator = arguments.length > 4 && arguments[4] !== undefined ? arguments[4] : this.address;
var memo = arguments.length > 5 && arguments[5] !== undefined ? arguments[5] : "";
return /*#__PURE__*/_regenerator["default"].mark(function _callee8() {
var _convertAmount3, amt, dnm, _convertAmount4, feeAmt, feeDnm, accData, txBody, authInfo, signedTxBytes;
return _regenerator["default"].wrap(function _callee8$(_context8) {
while (1) switch (_context8.prev = _context8.next) {
case 0:
if (delegator) {
_context8.next = 2;
break;
}
throw new Error("delegator should not be empty");
case 2:
if (fundCrypto.checkAddress(delegator, _config["default"].BECH32_PREFIX)) {
_context8.next = 4;
break;
}
throw new Error("invalid delegator");
case 4:
if (validator) {
_context8.next = 6;
break;
}
throw new Error("validator should not be empty");
case 6:
if (fundCrypto.checkAddress(validator, _config["default"].BECH32_VAL_PREFIX)) {
_context8.next = 8;
break;
}
throw new Error("invalid validator");
case 8:
if (!(amount === 0)) {
_context8.next = 10;
break;
}
throw new Error("amount should not be zero");
case 10:
(0, _validateHelper.checkNumber)(amount, "amount");
_convertAmount3 = (0, _utils.convertAmount)(amount, denom), amt = _convertAmount3.amt, dnm = _convertAmount3.dnm;
_convertAmount4 = (0, _utils.convertAmount)(fee.amount, fee.denom), feeAmt = _convertAmount4.amt, feeDnm = _convertAmount4.dnm;
_context8.next = 15;
return _this6.getAccount(delegator);
case 15:
accData = _context8.sent;
if (!(accData !== null && accData !== void 0 && accData.code)) {
_context8.next = 18;
break;
}
throw new Error(accData.message);
case 18:
txBody = msgFactory.getMsgDelegate(delegator, validator, amt, dnm, memo);
authInfo = _this6.compileAuthInfo(accData.account.sequence, feeAmt, feeDnm, fee.gas); // -------------------------------- sign --------------------------------
signedTxBytes = _this6.sign(txBody, authInfo);
return _context8.abrupt("return", _this6.broadcast(signedTxBytes));
case 22:
case "end":
return _context8.stop();
}
}, _callee8);
})();
});
function delegate(_x18, _x19, _x20) {
return _delegate.apply(this, arguments);
}
return delegate;
}()
/**
* Undelegate FUND from a validator
* @param {String} validator
* @param {Number} amount
* @param {Object} fee
* @param {String} denom optional denom
* @param {String} delegator optional delegator
* @param {String} memo optional memo
* @returns {Promise<*>}
*/
}, {
key: "undelegate",
value: function () {
var _undelegate = (0, _asyncToGenerator2["default"])(function (validator, amount, fee) {
var _this7 = this;
var denom = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : "nund";
var delegator = arguments.length > 4 && arguments[4] !== undefined ? arguments[4] : this.address;
var memo = arguments.length > 5 && arguments[5] !== undefined ? arguments[5] : "";
return /*#__PURE__*/_regenerator["default"].mark(function _callee9() {
var _convertAmount5, amt, dnm, _convertAmount6, feeAmt, feeDnm, accData, txBody, authInfo, signedTxBytes;
return _regenerator["default"].wrap(function _callee9$(_context9) {
while (1) switch (_context9.prev = _context9.next) {
case 0:
if (delegator) {
_context9.next = 2;
break;
}
throw new Error("delegator should not be empty");
case 2:
if (fundCrypto.checkAddress(delegator, _config["default"].BECH32_PREFIX)) {
_context9.next = 4;
break;
}
throw new Error("invalid delegator");
case 4:
if (validator) {
_context9.next = 6;
break;
}
throw new Error("validator should not be empty");
case 6:
if (fundCrypto.checkAddress(validator, _config["default"].BECH32_VAL_PREFIX)) {
_context9.next = 8;
break;
}
throw new Error("invalid validator");
case 8:
if (!(amount === 0)) {
_context9.next = 10;
break;
}
throw new Error("amount should not be zero");
case 10:
(0, _validateHelper.checkNumber)(amount, "amount");
_convertAmount5 = (0, _utils.convertAmount)(amount, denom), amt = _convertAmount5.amt, dnm = _convertAmount5.dnm;
_convertAmount6 = (0, _utils.convertAmount)(fee.amount, fee.denom), feeAmt = _convertAmount6.amt, feeDnm = _convertAmount6.dnm;
_context9.next = 15;
return _this7.getAccount(delegator);
case 15:
accData = _context9.sent;
if (!(accData !== null && accData !== void 0 && accData.code)) {
_context9.next = 18;
break;
}
throw new Error(accData.message);
case 18:
txBody = msgFactory.getMsgUndelegate(delegator, validator, amt, dnm, memo);
authInfo = _this7.compileAuthInfo(accData.account.sequence, feeAmt, feeDnm, fee.gas); // -------------------------------- sign --------------------------------
signedTxBytes = _this7.sign(txBody, authInfo);
return _context9.abrupt("return", _this7.broadcast(signedTxBytes));
case 22:
case "end":
return _context9.stop();
}
}, _callee9);
})();
});
function undelegate(_x21, _x22, _x23) {
return _undelegate.apply(this, arguments);
}
return undelegate;
}()
/**
* Redelegate FUND from one validator to another
* @param {String} validatorFrom
* @param {String} validatorTo
* @param {Number} amount
* @param {Object} fee
* @param {String} denom optional denom
* @param {String} delegator optional delegator
* @param {String} memo optional memo
* @param {Number} sequence optional sequence
* @returns {Promise<*>}
*/
}, {
key: "redelegate",
value: function () {
var _redelegate = (0, _asyncToGenerator2["default"])(function (validatorFrom, validatorTo, amount, fee) {
var _this8 = this;
var denom = arguments.length > 4 && arguments[4] !== undefined ? arguments[4] : "nund";
var delegator = arguments.length > 5 && arguments[5] !== undefined ? arguments[5] : this.address;
var memo = arguments.length > 6 && arguments[6] !== undefined ? arguments[6] : "";
return /*#__PURE__*/_regenerator["default"].mark(function _callee10() {
var _convertAmount7, amt, dnm, _convertAmount8, feeAmt, feeDnm, accData, txBody, authInfo, signedTxBytes;
return _regenerator["default"].wrap(function _callee10$(_context10) {
while (1) switch (_context10.prev = _context10.next) {
case 0:
if (delegator) {
_context10.next = 2;
break;
}
throw new Error("delegator should not be empty");
case 2:
if (fundCrypto.checkAddress(delegator, _config["default"].BECH32_PREFIX)) {
_context10.next = 4;
break;
}
throw new Error("invalid delegator");
case 4:
if (validatorFrom) {
_context10.next = 6;
break;
}
throw new Error("validator should not be empty");
case 6:
if (fundCrypto.checkAddress(validatorFrom, _config["default"].BECH32_VAL_PREFIX)) {
_context10.next = 8;
break;
}
throw new Error("invalid validatorFrom");
case 8:
if (validatorTo) {
_context10.next = 10;
break;
}
throw new Error("validator should not be empty");
case 10:
if (fundCrypto.checkAddress(validatorTo, _config["default"].BECH32_VAL_PREFIX)) {
_context10.next = 12;
break;
}
throw new Error("invalid validatorTo");
case 12:
if (!(amount === 0)) {
_context10.next = 14;
break;
}
throw new Error("amount should not be zero");
case 14:
(0, _validateHelper.checkNumber)(amount, "amount");
_convertAmount7 = (0, _utils.convertAmount)(amount, denom), amt = _convertAmount7.amt, dnm = _convertAmount7.dnm;
_convertAmount8 = (0, _utils.convertAmount)(fee.amount, fee.denom), feeAmt = _convertAmount8.amt, feeDnm = _convertAmount8.dnm;
_context10.next = 19;
return _this8.getAccount(delegator);
case 19:
accData = _context10.sent;
if (!(accData !== null && accData !== void 0 && accData.code)) {
_context10.next = 22;
break;
}
throw new Error(accData.message);
case 22:
txBody = msgFactory.getMsgBeginRedelegate(delegator, validatorFrom, validatorTo, amt, dnm, memo);
authInfo = _this8.compileAuthInfo(accData.account.sequence, feeAmt, feeDnm, fee.gas); // -------------------------------- sign --------------------------------
signedTxBytes = _this8.sign(txBody, authInfo);
return _context10.abrupt("return", _this8.broadcast(signedTxBytes));
case 26:
case "end":
return _context10.stop();
}
}, _callee10);
})();
});
function redelegate(_x24, _x25, _x26, _x27) {
return _redelegate.apply(this, arguments);
}
return redelegate;
}()
/**
* Withdraw Delegator rewards
* @param {String} validator
* @param {Object} fee
* @param {Boolean} commission optional include validator commission
* @param {String} delegator optional delegator
* @param {String} memo optional memo
* @returns {Promise<*>}
*/
}, {
key: "withdrawDelegationReward",
value: function () {
var _withdrawDelegationReward = (0, _asyncToGenerator2["default"])(function (validator, fee) {
var _this9 = this;
var commission = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : false;
var delegator = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : this.address;
var memo = arguments.length > 4 && arguments[4] !== undefined ? arguments[4] : "";
return /*#__PURE__*/_regenerator["default"].mark(function _callee11() {
var _convertAmount9, feeAmt, feeDnm, accData, txBody, authInfo, signedTxBytes;
return _regenerator["default"].wrap(function _callee11$(_context11) {
while (1) switch (_context11.prev = _context11.next) {
case 0:
if (delegator) {
_context11.next = 2;
break;
}
throw new Error("delegator should not be empty");
case 2:
if (fundCrypto.checkAddress(delegator, _config["default"].BECH32_PREFIX)) {
_context11.next = 4;
break;
}
throw new Error("invalid delegator");
case 4:
if (validator) {
_context11.next = 6;
break;
}
throw new Error("validator should not be empty");
case 6:
if (!commission) {
_context11.next = 9;
break;
}
if ((0, _validateHelper.isSelfDelegator)(validator, delegator, _config["default"].BECH32_PREFIX)) {
_context11.next = 9;
break;
}
throw new Error("delegator is not the delf delegator address");
case 9:
_convertAmount9 = (0, _utils.convertAmount)(fee.amount, fee.denom), feeAmt = _convertAmount9.amt, feeDnm = _convertAmount9.dnm;
_context11.next = 12;
return _this9.getAccount(delegator);
case 12:
accData = _context11.sent;
if (!(accData !== null && accData !== void 0 && accData.code)) {
_context11.next = 15;
break;
}
throw new Error(accData.message);
case 15:
txBody = msgFactory.getMsgWithdrawDelegatorReward(delegator, validator, commission, memo);
authInfo = _this9.compileAuthInfo(accData.account.sequence, feeAmt, feeDnm, fee.gas); // -------------------------------- sign --------------------------------
signedTxBytes = _this9.sign(txBody, authInfo);
return _context11.abrupt("return", _this9.broadcast(signedTxBytes));
case 19:
case "end":
return _context11.stop();
}
}, _callee11);
})();
});
function withdrawDelegationReward(_x28, _x29) {
return _withdrawDelegationReward.apply(this, arguments);
}
return withdrawDelegationReward;
}()
/**
* Vote on a Governance Proposal
* @param {Number} proposalId
* @param {String} option yes | no | abstain | nowithveto
* @param {Object} fee
* @param {String} voter optional voter
* @param {String} memo optional memo
* @returns {Promise<*>}
*/
}, {
key: "voteOnProposal",
value: function () {
var _voteOnProposal = (0, _asyncToGenerator2["default"])(function (proposalId, option, fee) {
var _this10 = this;
var voter = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : this.address;
var memo = arguments.length > 4 && arguments[4] !== undefined ? arguments[4] : "";
return /*#__PURE__*/_regenerator["default"].mark(function _callee12() {
var _convertAmount10, feeAmt, feeDnm, accData, txBody, authInfo, signedTxBytes;
return _regenerator["default"].wrap(function _callee12$(_context12) {
while (1) switch (_context12.prev = _context12.next) {
case 0:
if (voter) {
_context12.next = 2;
break;
}
throw new Error("voter should not be empty");
case 2:
if (fundCrypto.checkAddress(voter, _config["default"].BECH32_PREFIX)) {
_context12.next = 4;
break;
}
throw new Error("invalid voter");
case 4:
_context12.t0 = option;
_context12.next = _context12.t0 === "VOTE_OPTION_YES" ? 7 : _context12.t0 === "VOTE_OPTION_ABSTAIN" ? 7 : _context12.t0 === "VOTE_OPTION_NO" ? 7 : _context12.t0 === "VOTE_OPTION_NO_WITH_VETO" ? 7 : 8;
break;
case 7:
return _context12.abrupt("break", 9);
case 8:
throw new Error("\"".concat(option, "\" is an invalid vote option"));
case 9:
_convertAmount10 = (0, _utils.convertAmount)(fee.amount, fee.denom), feeAmt = _convertAmount10.amt, feeDnm = _convertAmount10.dnm;
_context12.next = 12;
return _this10.getAccount(voter);
case 12:
accData = _context12.sent;
if (!(accData !== null && accData !== void 0 && accData.code)) {
_context12.next = 15;
break;
}
throw new Error(accData.message);
case 15:
txBody = msgFactory.getMsgVote(proposalId, option, voter, memo);
authInfo = _this10.compileAuthInfo(accData.account.sequence, feeAmt, feeDnm, fee.gas); // -------------------------------- sign --------------------------------
signedTxBytes = _this10.sign(txBody, authInfo);
return _context12.abrupt("return", _this10.broadcast(signedTxBytes));
case 19:
case "end":
return _context12.stop();
}
}, _callee12);
})();
});
function voteOnProposal(_x30, _x31, _x32) {
return _voteOnProposal.apply(this, arguments);
}
return voteOnProposal;
}()
/**
* generates the required auth info to be included with the tx body for signing
* @param sequence {Number} account sequence
* @param feeAmount {Number} fee amount
* @param feeDenom {String} fee denomination
* @param gas {Number} gas limit
* @param pubKeyAny
* @returns {*}
*/
}, {
key: "compileAuthInfo",
value: function compileAuthInfo(sequence, feeAmount, feeDenom, gas) {
var pubKeyAny = arguments.length > 4 && arguments[4] !== undefined ? arguments[4] : this.pubKeyAny;
var signerInfo = msgFactory.getSignerInfo(pubKeyAny, sequence);
var feeValue = msgFactory.getFee(feeAmount, feeDenom, gas);
return msgFactory.getAuthInfo(signerInfo, feeValue);
}
/*
* API getters
*/
/**
* get chain & network info
* @returns {Promise<{result: {error: *}, status: number}|{result: *, status: *}|void>}
*/
}, {
key: "getChainInfo",
value: function getChainInfo() {
var nodeInfo = "/cosmos/base/tendermint/v1beta1/node_info";
return (0, _nodeFetch["default"])(this.url + nodeInfo).then(function (response) {
return response.json();
});
}
/**
* get account info
* @param {String} address optional address
* @returns {Promise<{result: {error: *}, status: number}|{result: *, status: *}|void>}
*/
}, {
key: "getAccount",
value: function getAccount() {
var address = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : this.address;
var api = "/cosmos/auth/v1beta1/accounts/";
return (0, _nodeFetch["default"])(this.url + api + address).then(function (response) {
return response.json();
});
}
/**
* get BEACON params
* @returns {Promise<{result: {error: *}, status: number}|{result: *, status: *}|void>}
*/
}, {
key: "getBeaconParams",
value: function () {
var _getBeaconParams = (0, _asyncToGenerator2["default"])( /*#__PURE__*/_regenerator["default"].mark(function _callee13() {
var api;
return _regenerator["default"].wrap(function _callee13$(_context13) {
while (1) switch (_context13.prev = _context13.next) {
case 0:
api = "/mainchain/beacon/v1/params";
return _context13.abrupt("return", (0, _nodeFetch["default"])(this.url + api).then(function (response) {
return response.json();
}));
case 2:
case "end":
return _context13.stop();
}
}, _callee13, this);
}));
function getBeaconParams() {
return _getBeaconParams.apply(this, arguments);
}
return getBeaconParams;
}()
/**
* get WRKChain params
* @returns {Promise<{result: {error: *}, status: number}|{result: *, status: *}|void>}
*/
}, {
key: "getWRKChainParams",
value: function () {
var _getWRKChainParams = (0, _asyncToGenerator2["default"])( /*#__PURE__*/_regenerator["default"].mark(function _callee14() {
var api;
return _regenerator["default"].wrap(function _callee14$(_context14) {
while (1) switch (_context14.prev = _context14.next) {
case 0:
api = "/mainchain/wrkchain/v1/params";
return _context14.abrupt("return", (0, _nodeFetch["default"])(this.url + api).then(function (response) {
return response.json();
}));
case 2:
case "end":
return _context14.stop();
}
}, _callee14, this);
}));
function getWRKChainParams() {
return _getWRKChainParams.apply(this, arguments);
}
return getWRKChainParams;
}()
/**
* get balances for given address
* @param {String} address optional address
* @param {String} denom optional denomination
* @return {Promise} resolves with http response
*/
}, {
key: "getBalance",
value: function () {
var _getBalance = (0, _asyncToGenerator2["default"])(function () {
var _this11 = this;
var address = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : this.address;
var denom = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : "nund";
return /*#__PURE__*/_regenerator["default"].mark(function _callee15() {
var api, res;
return _regenerator["default"].wrap(function _callee15$(_context15) {
while (1) switch (_context15.prev = _context15.next) {
case 0:
api = "/cosmos/bank/v1beta1/balances/".concat(address);
_context15.next = 3;
return (0, _nodeFetch["default"])(_this11.url + api).then(function (response) {
return response.json();
});
case 3:
res = _context15.sent;
return _context15.abrupt("return", (res === null || res === void 0 ? void 0 : res.balances) || []);
case 5:
case "end":
return _context15.stop();
}
}, _callee15);
})();
});
function getBalance() {
return _getBalance.apply(this, arguments);
}
return getBalance;
}()
/**
* get transactions for an account
* @param {String} address optional address
* @param {Number} page page number, default 1
* @param {Number} limit number of results per page, default 100, max 100
* @param {String} order optional order
* @return {Promise} resolves with http response
*/
}, {
key: "getTransactions",
value: function () {
var _getTransactions = (0, _asyncToGenerator2["default"])(function () {
var _this12 = this;
var address = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : this.address;
var page = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 1;
var limit = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : 100;
var order = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : "ORDER_BY_DESC";
return /*#__PURE__*/_regenerator["default"].mark(function _callee16() {
var order_by, api;
return _regenerator["default"].wrap(function _callee16$(_context16) {
while (1) switch (_context16.prev = _context16.next) {
case 0:
order_by = 0;
_context16.t0 = order;
_context16.next = _context16.t0 === "ORDER_BY_UNSPECIFIED" ? 4 : _context16.t0 === "ORDER_BY_ASC" ? 6 : _context16.t0 === "ORDER_BY_DESC" ? 8 : 4;
break;
case 4:
order_by = 0;
return _context16.abrupt("break", 10);
case 6:
order_by = 1;