UNPKG

newpay-wallet-js

Version:

160 lines (126 loc) 8.18 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); var _slicedToArray = function () { function sliceIterator(arr, i) { var _arr = []; var _n = true; var _d = false; var _e = undefined; try { for (var _i = arr[Symbol.iterator](), _s; !(_n = (_s = _i.next()).done); _n = true) { _arr.push(_s.value); if (i && _arr.length === i) break; } } catch (err) { _d = true; _e = err; } finally { try { if (!_n && _i["return"]) _i["return"](); } finally { if (_d) throw _e; } } return _arr; } return function (arr, i) { if (Array.isArray(arr)) { return arr; } else if (Symbol.iterator in Object(arr)) { return sliceIterator(arr, i); } else { throw new TypeError("Invalid attempt to destructure non-iterable instance"); } }; }(); var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }(); var _WalletUnlockActions = require("./WalletUnlockActions.js"); var _WalletUnlockActions2 = _interopRequireDefault(_WalletUnlockActions); var _WalletDb = require("./WalletDb.js"); var _WalletDb2 = _interopRequireDefault(_WalletDb); var _es = require("bitsharesjs/es"); var _bitsharesjsWs = require("bitsharesjs-ws"); function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } var ApplicationApi = function () { function ApplicationApi() { _classCallCheck(this, ApplicationApi); } _createClass(ApplicationApi, [{ key: "transfer", /** @param propose_account (or null) pays the fee to create the proposal, also used as memo from application_api.transfer( "tmp10099", "cui-yujie", 1*10000, "1.3.0", '备注') */ value: function transfer( // OBJECT: { ... } from_account, to_account, amount, //用户输入的钱*小数的精度,从查询余额里面拿到 asset, //资源ID,比如"1.3.0",从查询余额里面拿到 memo) { var broadcast = arguments.length > 5 && arguments[5] !== undefined ? arguments[5] : true; var encrypt_memo = arguments.length > 6 && arguments[6] !== undefined ? arguments[6] : true; var optional_nonce = arguments.length > 7 && arguments[7] !== undefined ? arguments[7] : null; var propose_account = arguments.length > 8 && arguments[8] !== undefined ? arguments[8] : null; var fee_asset_id = arguments.length > 9 && arguments[9] !== undefined ? arguments[9] : "1.3.0"; var memo_sender = propose_account || from_account; var unlock_promise = _WalletUnlockActions2.default.unlock(); fee_asset_id = asset; memo = memo ? new Buffer(memo, "utf-8") : memo; return Promise.all([ //FetchChain("getAccount", from_account), //FetchChain("getAccount", to_account), //FetchChain("getAccount", memo_sender), //FetchChain("getAccount", propose_account), //FetchChain("getAsset", asset), //FetchChain("getAsset", fee_asset_id), _bitsharesjsWs.Apis.instance().db_api().exec("get_full_accounts", [[from_account], true]), _bitsharesjsWs.Apis.instance().db_api().exec("get_full_accounts", [[to_account], true]), _bitsharesjsWs.Apis.instance().db_api().exec("get_full_accounts", [[memo_sender], true]), _bitsharesjsWs.Apis.instance().db_api().exec("get_objects", [[asset]]), _bitsharesjsWs.Apis.instance().db_api().exec("get_objects", [[fee_asset_id]])]).then(function (res) { var _res = _slicedToArray(res, 5), chain_from = _res[0], chain_to = _res[1], chain_memo_sender = _res[2], chain_asset = _res[3], chain_fee_asset = _res[4]; var chain_from_account = chain_from[0][1].account; var chain_to_account = chain_to[0][1].account; var chain_memo_sender_account = chain_memo_sender[0][1].account; var memo_from_public = void 0, memo_to_public = void 0; if (memo && encrypt_memo) { memo_from_public = chain_memo_sender_account.options.memo_key; //chain_memo_sender.getIn(["options","memo_key"]); // The 1s are base58 for all zeros (null) if (/111111111111111111111/.test(memo_from_public)) { memo_from_public = null; } memo_to_public = chain_to_account.options.memo_key; //chain_to.getIn(["options","memo_key"]) if (/111111111111111111111/.test(memo_to_public)) { memo_to_public = null; } } var propose_acount_id = null; var memo_from_privkey = void 0; if (encrypt_memo && memo) { memo_from_privkey = _WalletDb2.default.getPrivateKey(memo_from_public); if (!memo_from_privkey) { throw new Error("Missing private memo key for sender: " + memo_sender); } } var memo_object = void 0; if (memo && memo_to_public && memo_from_public) { var nonce = optional_nonce == null ? _es.TransactionHelper.unique_nonce_uint64() : optional_nonce; memo_object = { from: memo_from_public, to: memo_to_public, nonce: nonce, message: encrypt_memo ? _es.Aes.encrypt_with_checksum(memo_from_privkey, memo_to_public, nonce, memo) : Buffer.isBuffer(memo) ? memo.toString("utf-8") : memo }; } // Allow user to choose asset with which to pay fees #356 var fee_asset = chain_fee_asset[0]; //chain_fee_asset.toJS(); // Default to CORE in case of faulty core_exchange_rate if (fee_asset.options.core_exchange_rate.base.asset_id === "1.3.0" && fee_asset.options.core_exchange_rate.quote.asset_id === "1.3.0") { fee_asset_id = "1.3.0"; } var tr = new _es.TransactionBuilder(); var transfer_op = tr.get_type_operation("transfer", { fee: { amount: 0, asset_id: fee_asset_id }, from: chain_from_account.id, //chain_from.get("id"), to: chain_to_account.id, //chain_to.get("id"), //amount: { amount, asset_id: chain_asset.get("id") }, amount: { amount: amount, asset_id: chain_asset[0].id }, memo: memo_object }); return tr.update_head_block().then(function () { if (propose_account) { tr.add_type_operation("proposal_create", { proposed_ops: [{ op: transfer_op }], fee_paying_account: propose_acount_id }); } else { tr.add_operation(transfer_op); } return _WalletDb2.default.process_transaction(tr, null, //signer_private_keys, broadcast); }); }); } }]); return ApplicationApi; }(); exports.default = ApplicationApi;