Socket
Socket
Sign inDemoInstall

@project-serum/serum

Package Overview
Dependencies
Maintainers
1
Versions
135
Alerts
File Explorer

Advanced tools

Socket logo

Install Socket

Detect and block malicious and high-risk dependencies

Install

@project-serum/serum - npm Package Compare versions

Comparing version 0.1.1 to 0.2.0

lib/token-instructions.js

8

lib/instructions.js

@@ -23,2 +23,4 @@ "use strict";

var _tokenInstructions = require("./token-instructions");
var DEX_PROGRAM_ID = new _web.PublicKey('9o1FisE366msTQcEvXapyMorTLmvezrxSD8DnM5e5XKw');

@@ -149,6 +151,10 @@ exports.DEX_PROGRAM_ID = DEX_PROGRAM_ID;

isSigner: false,
isWritable: false
isWritable: true
}, {
pubkey: quoteVault,
isSigner: false,
isWritable: true
}, {
pubkey: _tokenInstructions.TOKEN_PROGRAM_ID,
isSigner: false,
isWritable: false

@@ -155,0 +161,0 @@ }],

@@ -32,2 +32,4 @@ "use strict";

var _web = require("@solana/web3.js");
function _createForOfIteratorHelper(o, allowArrayLike) { var it; if (typeof Symbol === "undefined" || o[Symbol.iterator] == null) { if (Array.isArray(o) || (it = _unsupportedIterableToArray(o)) || allowArrayLike && o && typeof o.length === "number") { if (it) o = it; var i = 0; var F = function F() {}; return { s: F, n: function n() { if (i >= o.length) return { done: true }; return { done: false, value: o[i++] }; }, e: function e(_e) { throw _e; }, f: F }; } throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); } var normalCompletion = true, didErr = false, err; return { s: function s() { it = o[Symbol.iterator](); }, n: function n() { var step = it.next(); normalCompletion = step.done; return step; }, e: function e(_e2) { didErr = true; err = _e2; }, f: function f() { try { if (!normalCompletion && it.return != null) it.return(); } finally { if (didErr) throw err; } } }; }

@@ -53,3 +55,3 @@

var MARKET_STATE_LAYOUT = (0, _bufferLayout.struct)([accountFlags('accountFlags'), (0, _layout.publicKeyLayout)('ownAddress'), (0, _layout.u64)('vaultSignerNonce'), (0, _layout.publicKeyLayout)('baseMint'), (0, _layout.publicKeyLayout)('quoteMint'), (0, _layout.publicKeyLayout)('baseVault'), (0, _layout.u64)('baseDepositsTotal'), (0, _layout.u64)('baseFeesAccrued'), (0, _layout.publicKeyLayout)('quoteVault'), (0, _layout.u64)('quoteDepositsTotal'), (0, _layout.u64)('quoteFeesAccrued'), (0, _layout.u64)('quoteDustThreshold'), (0, _layout.publicKeyLayout)('requestQueue'), (0, _layout.publicKeyLayout)('eventQueue'), (0, _layout.publicKeyLayout)('bids'), (0, _layout.publicKeyLayout)('asks'), (0, _layout.u64)('baseLotSize'), (0, _layout.u64)('quoteLotSize')]);
var MARKET_STATE_LAYOUT = (0, _bufferLayout.struct)([accountFlags('accountFlags'), (0, _layout.publicKeyLayout)('ownAddress'), (0, _layout.u64)('vaultSignerNonce'), (0, _layout.publicKeyLayout)('baseMint'), (0, _layout.publicKeyLayout)('quoteMint'), (0, _layout.publicKeyLayout)('baseVault'), (0, _layout.u64)('baseDepositsTotal'), (0, _layout.u64)('baseFeesAccrued'), (0, _layout.publicKeyLayout)('quoteVault'), (0, _layout.u64)('quoteDepositsTotal'), (0, _layout.u64)('quoteFeesAccrued'), (0, _layout.u64)('quoteDustThreshold'), (0, _layout.publicKeyLayout)('requestQueue'), (0, _layout.publicKeyLayout)('eventQueue'), (0, _layout.publicKeyLayout)('bids'), (0, _layout.publicKeyLayout)('asks'), (0, _layout.u64)('baseLotSize'), (0, _layout.u64)('quoteLotSize'), (0, _layout.u64)('feeRateBps')]);
exports.MARKET_STATE_LAYOUT = MARKET_STATE_LAYOUT;

@@ -135,7 +137,5 @@

}, {
key: "placeOrder",
key: "findBaseTokenAccountsForOwner",
value: function () {
var _placeOrder = (0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee3(connection, _ref) {
var owner, payer, side, price, size, _ref$orderType, orderType;
var _findBaseTokenAccountsForOwner = (0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee3(connection, ownerAddress) {
return _regenerator.default.wrap(function _callee3$(_context3) {

@@ -145,6 +145,11 @@ while (1) {

case 0:
owner = _ref.owner, payer = _ref.payer, side = _ref.side, price = _ref.price, size = _ref.size, _ref$orderType = _ref.orderType, orderType = _ref$orderType === void 0 ? 'limit' : _ref$orderType;
throw new Error('not yet implemented');
_context3.next = 2;
return connection.getTokenAccountsByOwner(ownerAddress, {
mint: this.baseMintAddress
});
case 2:
return _context3.abrupt("return", _context3.sent.value);
case 3:
case "end":

@@ -154,6 +159,105 @@ return _context3.stop();

}
}, _callee3);
}, _callee3, this);
}));
function placeOrder(_x3, _x4) {
function findBaseTokenAccountsForOwner(_x3, _x4) {
return _findBaseTokenAccountsForOwner.apply(this, arguments);
}
return findBaseTokenAccountsForOwner;
}()
}, {
key: "findQuoteTokenAccountsForOwner",
value: function () {
var _findQuoteTokenAccountsForOwner = (0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee4(connection, ownerAddress) {
return _regenerator.default.wrap(function _callee4$(_context4) {
while (1) {
switch (_context4.prev = _context4.next) {
case 0:
_context4.next = 2;
return connection.getTokenAccountsByOwner(ownerAddress, {
mint: this.quoteMintAddress
});
case 2:
return _context4.abrupt("return", _context4.sent.value);
case 3:
case "end":
return _context4.stop();
}
}
}, _callee4, this);
}));
function findQuoteTokenAccountsForOwner(_x5, _x6) {
return _findQuoteTokenAccountsForOwner.apply(this, arguments);
}
return findQuoteTokenAccountsForOwner;
}()
}, {
key: "findOpenOrdersAccountsForOwner",
value: function () {
var _findOpenOrdersAccountsForOwner = (0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee5(connection, ownerAddress) {
return _regenerator.default.wrap(function _callee5$(_context5) {
while (1) {
switch (_context5.prev = _context5.next) {
case 0:
return _context5.abrupt("return", OpenOrders.findForMarketAndOwner(connection, this.address, ownerAddress));
case 1:
case "end":
return _context5.stop();
}
}
}, _callee5, this);
}));
function findOpenOrdersAccountsForOwner(_x7, _x8) {
return _findOpenOrdersAccountsForOwner.apply(this, arguments);
}
return findOpenOrdersAccountsForOwner;
}()
}, {
key: "placeOrder",
value: function () {
var _placeOrder = (0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee6(connection, _ref) {
var owner, payer, side, price, size, _ref$orderType, orderType, _yield$this$makePlace, transaction, signers;
return _regenerator.default.wrap(function _callee6$(_context6) {
while (1) {
switch (_context6.prev = _context6.next) {
case 0:
owner = _ref.owner, payer = _ref.payer, side = _ref.side, price = _ref.price, size = _ref.size, _ref$orderType = _ref.orderType, orderType = _ref$orderType === void 0 ? 'limit' : _ref$orderType;
_context6.next = 3;
return this.makePlaceOrderTransaction(connection, {
owner: owner,
payer: payer,
side: side,
price: price,
size: size,
orderType: orderType
});
case 3:
_yield$this$makePlace = _context6.sent;
transaction = _yield$this$makePlace.transaction;
signers = _yield$this$makePlace.signers;
_context6.next = 8;
return connection.sendTransaction(transaction, signers);
case 8:
return _context6.abrupt("return", _context6.sent);
case 9:
case "end":
return _context6.stop();
}
}
}, _callee6, this);
}));
function placeOrder(_x9, _x10) {
return _placeOrder.apply(this, arguments);

@@ -165,8 +269,87 @@ }

}, {
key: "makePlaceOrderTransaction",
value: function () {
var _makePlaceOrderTransaction = (0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee7(connection, _ref2) {
var _owner$publicKey;
var owner, payer, side, price, size, _ref2$orderType, orderType, ownerAddress, openOrdersAccounts, transaction, signers, openOrdersAddress, newOpenOrdersAccount;
return _regenerator.default.wrap(function _callee7$(_context7) {
while (1) {
switch (_context7.prev = _context7.next) {
case 0:
owner = _ref2.owner, payer = _ref2.payer, side = _ref2.side, price = _ref2.price, size = _ref2.size, _ref2$orderType = _ref2.orderType, orderType = _ref2$orderType === void 0 ? 'limit' : _ref2$orderType;
ownerAddress = (_owner$publicKey = owner.publicKey) !== null && _owner$publicKey !== void 0 ? _owner$publicKey : owner;
_context7.next = 4;
return this.findOpenOrdersAccountsForOwner(connection, ownerAddress);
case 4:
openOrdersAccounts = _context7.sent;
// TODO: cache this
transaction = new _web.Transaction();
signers = [owner];
if (!(openOrdersAccounts.length === 0)) {
_context7.next = 18;
break;
}
newOpenOrdersAccount = new _web.Account();
_context7.t0 = transaction;
_context7.next = 12;
return OpenOrders.makeCreateAccountTransaction(connection, this.address, ownerAddress, newOpenOrdersAccount.publicKey);
case 12:
_context7.t1 = _context7.sent;
_context7.t0.add.call(_context7.t0, _context7.t1);
openOrdersAddress = newOpenOrdersAccount.publicKey;
signers.push(newOpenOrdersAccount);
_context7.next = 19;
break;
case 18:
openOrdersAddress = openOrdersAccounts[0].address;
case 19:
transaction.add(_instructions.DexInstructions.newOrder({
market: this.address,
requestQueue: this._decoded.requestQueue,
baseVault: this._decoded.baseVault,
quoteVault: this._decoded.quoteVault,
openOrders: openOrdersAddress,
owner: ownerAddress,
payer: payer,
side: side,
limitPrice: this.priceNumberToLots(price),
maxQuantity: this.baseSizeNumberToLots(size),
orderType: orderType
}));
return _context7.abrupt("return", {
transaction: transaction,
signers: signers
});
case 21:
case "end":
return _context7.stop();
}
}
}, _callee7, this);
}));
function makePlaceOrderTransaction(_x11, _x12) {
return _makePlaceOrderTransaction.apply(this, arguments);
}
return makePlaceOrderTransaction;
}()
}, {
key: "cancelOrder",
value: function () {
var _cancelOrder = (0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee4(connection, order) {
return _regenerator.default.wrap(function _callee4$(_context4) {
var _cancelOrder = (0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee8(connection, order) {
return _regenerator.default.wrap(function _callee8$(_context8) {
while (1) {
switch (_context4.prev = _context4.next) {
switch (_context8.prev = _context8.next) {
case 0:

@@ -177,9 +360,9 @@ throw new Error('not yet implemented');

case "end":
return _context4.stop();
return _context8.stop();
}
}
}, _callee4);
}, _callee8);
}));
function cancelOrder(_x5, _x6) {
function cancelOrder(_x13, _x14) {
return _cancelOrder.apply(this, arguments);

@@ -191,36 +374,70 @@ }

}, {
key: "priceBnToNumber",
value: function priceBnToNumber(price) {
key: "priceLotsToNumber",
value: function priceLotsToNumber(price) {
return divideBnToNumber(price.mul(this._decoded.quoteLotSize).mul(new _bn.default(10).pow(this._baseMintDecimals)), this._decoded.baseLotSize.mul(new _bn.default(10).pow(this._quoteMintDecimals)));
}
}, {
key: "baseSizeBnToNumber",
value: function baseSizeBnToNumber(size) {
key: "priceNumberToLots",
value: function priceNumberToLots(price) {
return new _bn.default(Math.round(price * Math.pow(10, this._quoteMintDecimals) * this._decoded.baseLotSize.toNumber() / (Math.pow(10, this._baseMintDecimals) * this._decoded.quoteLotSize.toNumber())));
}
}, {
key: "baseSizeLotsToNumber",
value: function baseSizeLotsToNumber(size) {
return divideBnToNumber(size.mul(this._decoded.baseLotSize), new _bn.default(10).pow(this._baseMintDecimals));
}
}, {
key: "quoteSizeBnToNumber",
value: function quoteSizeBnToNumber(size) {
key: "baseSizeNumberToLots",
value: function baseSizeNumberToLots(size) {
var native = new _bn.default(Math.round(size * Math.pow(10, this._baseMintDecimals))); // rounds down to the nearest lot size
return native.div(this._decoded.baseLotSize);
}
}, {
key: "quoteSizeLotsToNumber",
value: function quoteSizeLotsToNumber(size) {
return divideBnToNumber(size.mul(this._decoded.quoteLotSize), new _bn.default(10).pow(this._quoteMintDecimals));
}
}], [{
key: "decode",
value: function decode(buffer) {
return MARKET_STATE_LAYOUT.decode(buffer);
}, {
key: "quoteSizeNumberToLots",
value: function quoteSizeNumberToLots(size) {
var native = new _bn.default(Math.round(size * Math.pow(10, this._quoteMintDecimals))); // rounds down to the nearest lot size
return native.div(this._decoded.quoteLotSize);
}
}, {
key: "address",
get: function get() {
return this._decoded.ownAddress;
}
}, {
key: "publicKey",
get: function get() {
return this.address;
}
}, {
key: "baseMintAddress",
get: function get() {
return this._decoded.baseMint;
}
}, {
key: "quoteMintAddress",
get: function get() {
return this._decoded.quoteMint;
}
}], [{
key: "load",
value: function () {
var _load = (0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee5(connection, address) {
var _yield$connection$get3, owner, data, decoded, _Promise$all, _Promise$all2, baseMintDecimals, quoteMintDecimals;
var _load = (0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee9(connection, address) {
var _yield$connection$get3, owner, data, decoded, _yield$Promise$all, _yield$Promise$all2, baseMintDecimals, quoteMintDecimals;
return _regenerator.default.wrap(function _callee5$(_context5) {
return _regenerator.default.wrap(function _callee9$(_context9) {
while (1) {
switch (_context5.prev = _context5.next) {
switch (_context9.prev = _context9.next) {
case 0:
_context5.next = 2;
_context9.next = 2;
return connection.getAccountInfo(address);
case 2:
_yield$connection$get3 = _context5.sent;
_yield$connection$get3 = _context9.sent;
owner = _yield$connection$get3.owner;

@@ -230,3 +447,3 @@ data = _yield$connection$get3.data;

if (owner.equals(_instructions.DEX_PROGRAM_ID)) {
_context5.next = 7;
_context9.next = 7;
break;

@@ -239,14 +456,30 @@ }

decoded = MARKET_STATE_LAYOUT.decode(data);
_Promise$all = Promise.all([getMintDecimals(decoded.baseMint), getMintDecimals(decoded.quoteMint)]), _Promise$all2 = (0, _slicedToArray2.default)(_Promise$all, 2), baseMintDecimals = _Promise$all2[0], quoteMintDecimals = _Promise$all2[1];
return _context5.abrupt("return", new Market(decoded, baseMintDecimals, quoteMintDecimals));
if (!(!decoded.accountFlags.initialized || !decoded.accountFlags.market || !decoded.ownAddress.equals(address))) {
_context9.next = 10;
break;
}
throw new Error('Invalid market');
case 10:
_context9.next = 12;
return Promise.all([getMintDecimals(connection, decoded.baseMint), getMintDecimals(connection, decoded.quoteMint)]);
case 12:
_yield$Promise$all = _context9.sent;
_yield$Promise$all2 = (0, _slicedToArray2.default)(_yield$Promise$all, 2);
baseMintDecimals = _yield$Promise$all2[0];
quoteMintDecimals = _yield$Promise$all2[1];
return _context9.abrupt("return", new Market(decoded, baseMintDecimals, quoteMintDecimals));
case 17:
case "end":
return _context5.stop();
return _context9.stop();
}
}
}, _callee5);
}, _callee9);
}));
function load(_x7, _x8) {
function load(_x15, _x16) {
return _load.apply(this, arguments);

@@ -257,2 +490,7 @@ }

}()
}, {
key: "LAYOUT",
get: function get() {
return MARKET_STATE_LAYOUT;
}
}]);

@@ -267,6 +505,168 @@ return Market;

var OpenOrders = function OpenOrders() {
(0, _classCallCheck2.default)(this, OpenOrders);
};
var OpenOrders = /*#__PURE__*/function () {
function OpenOrders(address, decoded) {
(0, _classCallCheck2.default)(this, OpenOrders);
this.address = address;
Object.assign(this, decoded);
}
(0, _createClass2.default)(OpenOrders, [{
key: "publicKey",
get: function get() {
return this.address;
}
}], [{
key: "findForMarketAndOwner",
value: function () {
var _findForMarketAndOwner = (0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee10(connection, marketAddress, ownerAddress) {
var filters, accounts;
return _regenerator.default.wrap(function _callee10$(_context10) {
while (1) {
switch (_context10.prev = _context10.next) {
case 0:
filters = [{
memcmp: {
offset: OPEN_ORDERS_LAYOUT.offsetOf('market'),
bytes: marketAddress.toBase58()
}
}, {
memcmp: {
offset: OPEN_ORDERS_LAYOUT.offsetOf('owner'),
bytes: ownerAddress.toBase58()
}
}, {
dataSize: OPEN_ORDERS_LAYOUT.span
}];
_context10.next = 3;
return getFilteredProgramAccounts(connection, _instructions.DEX_PROGRAM_ID, filters);
case 3:
accounts = _context10.sent;
return _context10.abrupt("return", accounts.map(function (_ref3) {
var publicKey = _ref3.publicKey,
accountInfo = _ref3.accountInfo;
return OpenOrders.fromAccountInfo(publicKey, accountInfo);
}));
case 5:
case "end":
return _context10.stop();
}
}
}, _callee10);
}));
function findForMarketAndOwner(_x17, _x18, _x19) {
return _findForMarketAndOwner.apply(this, arguments);
}
return findForMarketAndOwner;
}()
}, {
key: "load",
value: function () {
var _load2 = (0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee11(connection, address) {
var accountInfo;
return _regenerator.default.wrap(function _callee11$(_context11) {
while (1) {
switch (_context11.prev = _context11.next) {
case 0:
_context11.next = 2;
return connection.getAccountInfo(address);
case 2:
accountInfo = _context11.sent;
if (!(accountInfo === null)) {
_context11.next = 5;
break;
}
throw new Error('Open orders account not found');
case 5:
return _context11.abrupt("return", OpenOrders.fromAccountInfo(connection, accountInfo));
case 6:
case "end":
return _context11.stop();
}
}
}, _callee11);
}));
function load(_x20, _x21) {
return _load2.apply(this, arguments);
}
return load;
}()
}, {
key: "fromAccountInfo",
value: function fromAccountInfo(address, accountInfo) {
var owner = accountInfo.owner,
data = accountInfo.data;
if (!owner.equals(_instructions.DEX_PROGRAM_ID)) {
throw new Error('Address not owned by program');
}
var decoded = OPEN_ORDERS_LAYOUT.decode(data);
if (!decoded.accountFlags.initialized || !decoded.accountFlags.openOrders) {
throw new Error('Invalid open orders account');
}
return new OpenOrders(address, decoded);
}
}, {
key: "makeCreateAccountTransaction",
value: function () {
var _makeCreateAccountTransaction = (0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee12(connection, marketAddress, ownerAddress, newAccountAddress) {
return _regenerator.default.wrap(function _callee12$(_context12) {
while (1) {
switch (_context12.prev = _context12.next) {
case 0:
_context12.t0 = _web.SystemProgram;
_context12.t1 = ownerAddress;
_context12.t2 = newAccountAddress;
_context12.next = 5;
return connection.getMinimumBalanceForRentExemption(OPEN_ORDERS_LAYOUT.span);
case 5:
_context12.t3 = _context12.sent;
_context12.t4 = OPEN_ORDERS_LAYOUT.span;
_context12.t5 = _instructions.DEX_PROGRAM_ID;
_context12.t6 = {
fromPubkey: _context12.t1,
newAccountPubkey: _context12.t2,
lamports: _context12.t3,
space: _context12.t4,
programId: _context12.t5
};
return _context12.abrupt("return", _context12.t0.createAccount.call(_context12.t0, _context12.t6));
case 10:
case "end":
return _context12.stop();
}
}
}, _callee12);
}));
function makeCreateAccountTransaction(_x22, _x23, _x24, _x25) {
return _makeCreateAccountTransaction.apply(this, arguments);
}
return makeCreateAccountTransaction;
}()
}, {
key: "LAYOUT",
get: function get() {
return OPEN_ORDERS_LAYOUT;
}
}]);
return OpenOrders;
}();
exports.OpenOrders = OpenOrders;

@@ -321,8 +721,8 @@ var ORDERBOOK_LAYOUT = (0, _bufferLayout.struct)([accountFlags('accountFlags'), _slab.SLAB_LAYOUT.replicate('slab')]);

return levels.map(function (_ref2) {
var _ref3 = (0, _slicedToArray2.default)(_ref2, 2),
price = _ref3[0],
size = _ref3[1];
return levels.map(function (_ref4) {
var _ref5 = (0, _slicedToArray2.default)(_ref4, 2),
priceLots = _ref5[0],
sizeLots = _ref5[1];
return [_this.market.priceBnToNumber(price), _this.market.baseSizeBnToNumber(size.mul(_this.market.baseLotSize))];
return [_this.market.priceLotsToNumber(priceLots), _this.market.baseSizeLotsToNumber(sizeLots.mul(_this.market.baseLotSize)), priceLots, sizeLots];
});

@@ -335,8 +735,8 @@ }

return _regenerator.default.wrap(function value$(_context6) {
return _regenerator.default.wrap(function value$(_context13) {
while (1) {
switch (_context6.prev = _context6.next) {
switch (_context13.prev = _context13.next) {
case 0:
_iterator2 = _createForOfIteratorHelper(this.slab);
_context6.prev = 1;
_context13.prev = 1;

@@ -347,3 +747,3 @@ _iterator2.s();

if ((_step2 = _iterator2.n()).done) {
_context6.next = 10;
_context13.next = 10;
break;

@@ -354,3 +754,3 @@ }

price = getPriceFromKey(key);
_context6.next = 8;
_context13.next = 8;
return {

@@ -360,4 +760,6 @@ orderId: key,

owner: owner,
price: this.market.priceBnToNumber(price),
quantity: this.market.baseSizeBnToNumber(quantity),
price: this.market.priceLotsToNumber(price),
priceLots: price,
size: this.market.baseSizeLotsToNumber(quantity),
sizeLots: quantity,
side: this.isBids ? 'buy' : 'sell'

@@ -367,25 +769,25 @@ };

case 8:
_context6.next = 3;
_context13.next = 3;
break;
case 10:
_context6.next = 15;
_context13.next = 15;
break;
case 12:
_context6.prev = 12;
_context6.t0 = _context6["catch"](1);
_context13.prev = 12;
_context13.t0 = _context13["catch"](1);
_iterator2.e(_context6.t0);
_iterator2.e(_context13.t0);
case 15:
_context6.prev = 15;
_context13.prev = 15;
_iterator2.f();
return _context6.finish(15);
return _context13.finish(15);
case 18:
case "end":
return _context6.stop();
return _context13.stop();
}

@@ -423,3 +825,3 @@ }

function getMintDecimals(_x9, _x10) {
function getMintDecimals(_x26, _x27) {
return _getMintDecimals.apply(this, arguments);

@@ -429,26 +831,83 @@ }

function _getMintDecimals() {
_getMintDecimals = (0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee6(connection, mint) {
_getMintDecimals = (0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee13(connection, mint) {
var _yield$connection$get4, data, _MINT_LAYOUT$decode, decimals;
return _regenerator.default.wrap(function _callee6$(_context7) {
return _regenerator.default.wrap(function _callee13$(_context14) {
while (1) {
switch (_context7.prev = _context7.next) {
switch (_context14.prev = _context14.next) {
case 0:
_context7.next = 2;
_context14.next = 2;
return connection.getAccountInfo(mint);
case 2:
_yield$connection$get4 = _context7.sent;
_yield$connection$get4 = _context14.sent;
data = _yield$connection$get4.data;
_MINT_LAYOUT$decode = MINT_LAYOUT.decode(data), decimals = _MINT_LAYOUT$decode.decimals;
return _context7.abrupt("return", decimals);
return _context14.abrupt("return", decimals);
case 6:
case "end":
return _context7.stop();
return _context14.stop();
}
}
}, _callee6);
}, _callee13);
}));
return _getMintDecimals.apply(this, arguments);
}
function getFilteredProgramAccounts(_x28, _x29, _x30) {
return _getFilteredProgramAccounts.apply(this, arguments);
}
function _getFilteredProgramAccounts() {
_getFilteredProgramAccounts = (0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee14(connection, programId, filters) {
var resp;
return _regenerator.default.wrap(function _callee14$(_context15) {
while (1) {
switch (_context15.prev = _context15.next) {
case 0:
_context15.next = 2;
return connection._rpcRequest('getProgramAccounts', [programId.toBase58(), {
commitment: connection.commitment,
filters: filters,
encoding: 'binary64'
}]);
case 2:
resp = _context15.sent;
if (!resp.error) {
_context15.next = 5;
break;
}
throw new Error(resp.error.message);
case 5:
return _context15.abrupt("return", resp.result.map(function (_ref6) {
var pubkey = _ref6.pubkey,
_ref6$account = _ref6.account,
data = _ref6$account.data,
executable = _ref6$account.executable,
owner = _ref6$account.owner,
lamports = _ref6$account.lamports;
return {
publicKey: new _web.PublicKey(pubkey),
accountInfo: {
data: Buffer.from(data, 'base64'),
executable: executable,
owner: new _web.PublicKey(owner),
lamports: lamports
}
};
}));
case 6:
case "end":
return _context15.stop();
}
}
}, _callee14);
}));
return _getFilteredProgramAccounts.apply(this, arguments);
}

8

package.json
{
"name": "@project-serum/serum",
"version": "0.1.1",
"version": "0.2.0",
"description": "Library for interacting with the serum dex",

@@ -13,5 +13,5 @@ "license": "MIT",

"scripts": {
"build": "yarn babel src --out-dir lib",
"build": "babel src --out-dir lib",
"start": "babel src --out-dir lib --watch",
"clean": "rm -rf lib",
"start": "yarn babel src --out-dir lib --watch",
"prepare": "run-s clean build",

@@ -61,3 +61,3 @@ "test": "run-s test:unit test:lint test:build",

"dependencies": {
"@solana/web3.js": "^0.66.3",
"@solana/web3.js": "^0.68",
"bn.js": "^5.1.2",

@@ -64,0 +64,0 @@ "buffer-layout": "^1.2.0"

@@ -1,2 +0,2 @@

![npm (scoped)](https://img.shields.io/npm/v/@project-serum/serum)
[![npm (scoped)](https://img.shields.io/npm/v/@project-serum/serum)](https://www.npmjs.com/package/@project-serum/serum)
[![Build Status](https://travis-ci.com/project-serum/serum-js.svg?token=1ySaVeP6gHs8QRr2VTEi&branch=master)](https://travis-ci.com/project-serum/serum-js)

@@ -27,3 +27,3 @@

order.price,
order.quantity,
order.size,
order.side,

@@ -30,0 +30,0 @@ );

SocketSocket SOC 2 Logo

Product

  • Package Alerts
  • Integrations
  • Docs
  • Pricing
  • FAQ
  • Roadmap
  • Changelog

Packages

npm

Stay in touch

Get open source security insights delivered straight into your inbox.


  • Terms
  • Privacy
  • Security

Made with ⚡️ by Socket Inc