newpay-wallet-js
Version:
160 lines (126 loc) • 8.18 kB
JavaScript
;
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;