GithubHelp home page GithubHelp logo

project-serum / serum-ts Goto Github PK

View Code? Open in Web Editor NEW
268.0 12.0 245.0 22.06 MB

Project Serum TypeScript monorepo

Home Page: https://projectserum.com

License: Apache License 2.0

TypeScript 86.59% JavaScript 13.41%

serum-ts's Introduction

serum-ts

Project Serum Monorepo

Build Status Discord Chat License

Packages

Package Version Description
@project-serum/borsh npm Borsh serialization primitives
@project-serum/common npm Common utilities
@project-serum/serum npm Library for interacting with the Serum DEX
@project-serum/pool npm Client for interacting with Pools
@project-serum/spl-token-swap npm Client for interacting with the SPL Token Swap Program
@project-serum/swap npm Client for swapping on the Serum DEX
@project-serum/tokens npm Solana token addresses

Contributing

Installing

To get started first install the required build tools:

npm install -g lerna
npm install -g yarn

Then bootstrap the workspace:

yarn

Building

To build the workspace:

yarn build

Testing

To run all tests:

yarn test

Linting

To lint:

yarn lint

To apply lint fixes:

yarn lint:fix

serum-ts's People

Contributors

0xalexbai avatar armaniferrante avatar badass-commits avatar colekennelly1 avatar dr497 avatar fallingoak avatar garywang avatar henry-e avatar jhlx avatar joaompfe avatar keone avatar kootszhin avatar leofisg avatar macalinao avatar maximilianr avatar michaelhly avatar mindlapse avatar mschneider avatar nathanielparke avatar nishadsingh1 avatar pashpashkin avatar philippe-ftx avatar sconybeare avatar secretshardul avatar taylor123 avatar thaaddeus avatar timonpeng avatar tlrjs avatar tomjohn1028 avatar wentokay avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

serum-ts's Issues

Calling loadInfo() function of pool js library fails

How to reproduce:

  1. create a pool with a deployed pool program
  2. import and call loadInfo() with params

Observed Error:

Uncaught (in promise) TypeError: exports.POOL_STATE_TAG.toBuffer is not a function
    at Object.isPoolState (schema.js?b2c4:48)
    at loadPoolInfo (index.js?4485:36)

Check lot size <= coin decimals

Screen Shot 2021-09-16 at 3 30 04 PM

I had a real fun error where the MarketProxy wasn't even making it to the Serum DEX. Turns out it was caused by a Mint decimal change during a refactor and the lot size became larger than the mint's decimals. So everything was failing silently. The market initialized fine, but posting orders failed to proxy because the instruction data got mangled.

A simple fix would be on initialize market & new order instruction creation, validate the lots against the mint decimals.

subscription utility onAccountChange for asks/bids?

I'd be happy to provide a PR for this, but first I want to know if there's interest. From what I see, the Dex UI ends up accessing the _decoded.asks and _decoded.bids and then set up a listener using connection.onAccountChange() on the public key of the ask/bid accounts.

  1. First of all, (and this might belong on the UI repo, but I think maybe some of the contributors here can be knowledgable on that particular choice), why access market._decoded.asks and not market. asksAddress? The latter seems cleaner.
  2. Would there be interest in a PR that adds the ability to onBidsChange and onAsksChange?

stake-ui: Unlock all button

Currently, the Lockup page's unlock button allows a user to withdraw/unlock all tokens from a single vesting account. We should add an additional button that does this for all available vesting accounts, automatically, instead of requiring the user to go through each vesting account one by one.

Secret key for New Account ('...')

I'm using Phantom wallet which gives me a 88 character long private key. Adding this key to New Account gives me the error that the size of the private key is wrong.

market.settleFunds() returns an error

This is for DEX V3, RAY/USDC market, 2xiv8A5xrJ7RnGdxXB42uFEkYHJjszEhaJyKKt4WaLep

๐Ÿ“„ Settling funds...
Transaction simulation failed: Error processing Instruction 0: custom program error: 0x100076b
Program 9xQeWvG816bUx9EPjHmaT23yvVM2ZWbrrpZb9PusVFin invoke [1]
Program 9xQeWvG816bUx9EPjHmaT23yvVM2ZWbrrpZb9PusVFin consumed 4284 of 200000 compute units
Program 9xQeWvG816bUx9EPjHmaT23yvVM2ZWbrrpZb9PusVFin failed: custom program error: 0x100076b
2021-03-12T21:32:09.174Z ๐Ÿ›‘ Error:
Error: failed to send transaction: Transaction simulation failed: Error processing Instruction 0: custom program error: 0x100076b
at Connection.sendEncodedTransaction (/home/zenpoet/goldorak/node_modules/@solana/web3.js/lib/index.cjs.js:3556:13)
at processTicksAndRejections (internal/process/task_queues.js:93:5)
at async Connection.sendRawTransaction (/home/zenpoet/goldorak/node_modules/@solana/web3.js/lib/index.cjs.js:3517:20)
at async Connection.sendTransaction (/home/zenpoet/goldorak/node_modules/@solana/web3.js/lib/index.cjs.js:3507:12)
at async Market._sendTransaction (/home/zenpoet/goldorak/node_modules/@project-serum/serum/lib/market.js:446:27)
at async Market.settleFunds (/home/zenpoet/goldorak/node_modules/@project-serum/serum/lib/market.js:530:16)
at async main (/home/zenpoet/goldorak/settle.js:18:4)

Implement getBalances

My suggestion is to make the process of getting free and total balances as seamless as using a CEX API.

This can be done with a getBalances method that'd return a JSON with the free and total balances for each currency.

This is the only missing part to make the trading example entirely functional, since it's an essential part of any trading algorithm.

borsh: OptionLayout should be u32?

this.discriminator = u8();

https://github.com/solana-labs/solana-program-library/blob/6eac7bc33122412a6ab7fa8b84869ca040d3c1cc/token/js/client/token.js#L129

export const MintLayout: typeof BufferLayout.Structure = BufferLayout.struct([
  BufferLayout.u32('mintAuthorityOption'),
  Layout.publicKey('mintAuthority'),
  Layout.uint64('supply'),
  BufferLayout.u8('decimals'),
  BufferLayout.u8('isInitialized'),
  BufferLayout.u32('freezeAuthorityOption'),
  Layout.publicKey('freezeAuthority'),
]);

Getting wrong token balance

Sometimes I get wrong balance. I'm fetching "unsettled" balance with the code below. Sometimes however I'm getting a result back that does not match with the gui. (The gui is correct.) If I settle the coins into my wallet and then resubmit them to the dex this usually fixes itself but then the problem reappears.

// Get balances
let openOrders = await market.findOpenOrdersAccountsForOwner(
connection,
owner.publicKey
);
baseTokenBalance = Math.floor(
openOrders[0].baseTokenFree.toNumber() / 1000000
);
quoteTokenBalance = Math.floor(
openOrders[0].quoteTokenFree.toNumber() / 1000000
);
console.log("--------------------------------------");
console.log("baseTokenBalanceFreeRAW: " + openOrders[0].baseTokenFree.toNumber());
console.log("quoteTokenBalanceFreeRAW: " + openOrders[0].quoteTokenFree.toNumber());
console.log("baseTokenBalanceFree: " + baseTokenBalance);
console.log("quoteTokenBalanceFree: " + quoteTokenBalance);
console.log("--------------------------------------");

Place Order error when duplicate token accounts

makePlaceOrderTransaction accepts as argument the payer public key that in this case is the SPL Token Account.
For some reason, many users has duplicate accounts with same token address. When order is executed, we don't have the ability to set the Token Metadata of the token to sell, so in many times we get transactions errors due this issue, the Serum Market Program tries to debit to a random account without check the balance.

Do we have a way to avoid duplicated accounts from same token address? or maybe better, do we have a way to merge duplicate accounts using json rpc?

Serum making localhost requests, while solana config is set to devnet

I am using anchor 0.16.2, and following typescript packages

"@project-serum/anchor": "^0.16.2",
"@solana/spl-token": "^0.1.8",
"dotenv": "^10.0.0",
  "yargs": "^16.2.0"

I set my solana config to the following variables

$ solana config get
Config File: /Users/raven/.config/solana/cli/config.yml
RPC URL: https://api.devnet.solana.com 
WebSocket URL: wss://api.devnet.solana.com/ (computed)
Keypair Path: /Users/raven/.config/solana/id.json 
Commitment: confirmed 

and am invoking the following code

ANCHOR_PROVIDER_URL="https://api.devnet.solana.com" ANCHOR_WALLET=/Users/raven/.config/solana/id.json npm run serve 

to run an expressJS server (typescript).

whenever I make an API call through the following code

    const provider = anchor.getProvider()
    const poolSigner = _poolSigner;
    const currentBid = await getTokenAccount(provider, userRedeemable)
    await exchangeUsdcForRedeemableRpc(
        poolAccount,
        poolSigner,
        provider.wallet.publicKey,
        userUsdc,
        account.redeemableMint,
        userRedeemable,
        account.poolUsdc,
        depositAmount,
    ); 

I get an error

Error making the bidding request!
{}
Error: failed to get info about account AfQRhis7aZg6NmPpjrFN1KpZviMEp6H1VnKBzHkBxckK: FetchError: request to http://localhost:8899/ failed, reason: connect ECONNREFUSED 127.0.0.1:8899
    at Connection.getAccountInfo (/Users/raven/imo-launchpad/example-server/node_modules/@solana/web3.js/src/connection.ts:2443:13)
    at processTicksAndRejections (node:internal/process/task_queues:96:5)
    at async AccountClient.fetchNullable (/Users/raven/imo-launchpad/example-server/node_modules/@project-serum/anchor/src/program/namespace/account.ts:128:25)
    at async AccountClient.fetch (/Users/raven/imo-launchpad/example-server/node_modules/@project-serum/anchor/src/program/namespace/account.ts:152:18)

In short: The request is made to the local testnet, instead of to devnet / the development cluster.
I find this weird, as in all instances that I could do, I have made sure to set the Solana cluster to https://api.devnet.solana.com.

When I control-F the entire project, I only see the following code-snippet to include localhost:8899 as the link

static local(url?: string, opts?: ConfirmOptions): Provider {
    opts = opts ?? Provider.defaultOptions();
    const connection = new Connection(
      url ?? "http://localhost:8899",
      opts.preflightCommitment
    );
    const wallet = NodeWallet.local();
    return new Provider(connection, wallet, opts);
  }

manualy changing this in the node_modules did not resolve this, however.

Is there anything wrong that I do, or anything I'm missing? The request is made to the local testnet, instead of to devnet / the development cluster.
Any help would be greatly appreciated, this is the last bug that stands between me and devnet.
This is for the ignition hackathon in 2 days, so I would appreciate any help a lot! :)

market.placeOrder side : 'buy' error = Invalid payer account

Hello , I've got problem with 'placeOrder / side : buy'
but side : 'sell' is perfectly worked.
How to fix this problem ?
** This is my errors of side : 'buy' **

Desktop/serum/node_modules/@project-serum/serum/lib/market.js:409
throw new Error('Invalid payer account');

Error: Invalid payer account
at Market.makePlaceOrderTransaction (/Users/chain/Desktop/serum/node_modules/@project-serum/serum/lib/market.js:409:23)
at processTicksAndRejections (internal/process/task_queues.js:95:5)
at async Market.placeOrder (/Desktop/serum/node_modules/@project-serum/serum/lib/market.js:236:42)
at async file:///Desktop/serum/old.js:62:1

This is my config
PAIR : SOL/USDT
let marketAddress = new PublicKey('HWHvQhFmJB3NUcu1aihKmrKegfVxBEHzwVX6yZCKEsi1');
let programAddress = new PublicKey("9xQeWvG816bUx9EPjHmaT23yvVM2ZWbrrpZb9PusVFin");

โŒ await market.placeOrder(connection, {owner,payer,side: 'buy',price: 10,size: 0.1,orderType: 'limit',});
โœ… await market.placeOrder(connection, {owner,payer,side: 'sell',price: 50,size: 0.1,orderType: 'limit',});

Thank You

stake-ui: OwnedTokenAccountsSelector should stream updates

If a token account is created after the app has been loaded, the OwnedTokenAccountsSelector won't pickup the new account. This is because we do a fetch on initially loading the react app. Instead, we should open a websocket connection and stream updates.

Error: 410 Gone

Getting this error when try to run this example https://github.com/project-serum/serum-ts/blob/master/packages/swap/examples/swap.js from swap package:
Error: 410 Gone: {"jsonrpc":"2.0","error":{"code": 410, "message":"The RPC call or parameters have been disabled."}, "id": "3b56fc88-1bd6-4b12-86b1-42482f87a777" }

at ClientBrowser.callServer (/home/aven/WebstormProjects/serum-ts/packages/swap/node_modules/@solana/web3.js/lib/index.cjs.js:4423:18)
at processTicksAndRejections (internal/process/task_queues.js:95:5)

Screenshot from 2021-11-12 13-59-54

What is wrong?

market.findOpenOrdersAccountsForOwner() irregular results.

the function market.findOpenOrdersAccountsForOwner() seems to be unreliable as it some times does not include all the accounts. For example the below code gave the following result:

  async function getOpenOrderAccounts() {
      
    let openOrderAccounts = await market.findOpenOrdersAccountsForOwner(
        connection,
        owner.publicKey,
      )
      console.log(openOrderAccounts.length)
      for (let index = 0; index < openOrderAccounts.length; index++) {
          const element = openOrderAccounts[index];
          //console.log(element.address.toString())
          if (element.address.toString() == openOrdersAccountAddress){
              console.log('found our account')
              for (let index2 = 0; index2 < element.orders.length; index2++) {
                  const element2 = element.orders[index2];
                  if (element2.toString() !== '0') {console.log(element2.toString())}           
              }
          }
      }
  }

$ node test.js
95
found our account
5755384150997379837575
5755384150997379837573
5755384150997379837572
5755384150997379837571
$ node test.js
94
$ % node test.js
94
$ % node test.js
94
$ % node test.js
94
$ % node test.js
95
found our account
5755384150997379837575
5755384150997379837573
5755384150997379837572
5755384150997379837571

JS example throwing errors

Was just wondering if the JS example for interfacing with a Serum market needs updating. I've tried running it and run into the same error that the Market.load() expects a programId, otherwise it tries to do equality operations on an undefined argument. I imagine perhaps the API has changed in the meantime?
https://github.com/project-serum/serum-ts/blob/master/packages/serum/README.md

import { Account, Connection, PublicKey } from '@solana/web3.js';
import { Market } from '@project-serum/serum';

let connection = new Connection('https://testnet.solana.com');
let marketAddress = new PublicKey('...');
let market = await Market.load(connection, marketAddress);

Which throws the following error as described above:

    return this._bn.eq(publicKey._bn);
                                 ^

TypeError: Cannot read property '_bn' of undefined

Managed to get around it simply by passing in the programId of the Serum v3 program:

let programId = new PublicKey('9xQeWvG816bUx9EPjHmaT23yvVM2ZWbrrpZb9PusVFin'); // Serum program v3
let market = await Market.load(connection, marketAddress, {}, programId);

Replace `Account` to `Keypair`

Since v1.10.0 at @solana/web3.js, Account was deprecated. So we should update @solana/web3.js package and replace Account with KeyPair.

es6 module for the packages

for bundling purposes, I am trying to get it work for cloudflare worker. To enable tree shake, we should implement es6 module.

For easier setup, we can check out https://github.com/egoist/tsup for zero config configuration.

Let me know if I should create the PR for this

lockup-ui: Staking safeguards

We should disable the staking UI if a user has staking rewards available. This will help prevent a user from forgetting to collect the reward and therefore missing it once staking again.

This is a stopgap until we have either 1) separate event queues for each staker (which will make it safe to stake when a reward is outstanding) or 2) reward collection cranks to auto collect rewards.

UI for locking up arbitrary mints

Currently the lockup UI only shows SRM + MSRM. We should allow users to lockup arbitrary tokens (the backend program already allows it).

Consider Dependabot installation

We are using many packages that are old versions. So I think we need to install Dependabot to resolve this problem radically. I'm not an expert on Dependabot, so we need more discussions :)

serum: market.loadFills is not returning all maker orders

I started working on a candle batcher for the serum dex, based on the loadFills method in the serum-ts repo. From inspecting the output I figured that the eventQueue always contains both the taker & maker side of the trade. I started working on a bit of logic to match those and filter out duplicates, basically recover the actual matching in order to be able to record actual trades.

During testing I observed this scenario which doesn't really make sense to me, so I was wondering if anyone knows how to interpret this output: https://gist.github.com/mschneider/8a9a10b9bf7b7b37de43db6fc231c739

From what I understand we see here an order that got filled at two price levels:

  1. 0.006 btc @ 47042 USDC
  2. 0.006 btc @ 47030.2 USDC

For the first price level a corresponding maker order can be found. For the second it seems to be MIA.

I looked more into the matching engine to find if there is a case in which only a single Fill gets emitted, and it seems to be possible for multiple maker orders that collectively add up to a single larger taker fill to be emitted at once. The above scenario with more taker fills than maker fills seems not possible. ๐Ÿคท๐Ÿปโ€โ™‚๏ธ Any thoughts on what happened to the maker fill in that case?

maxQuoteQuantity is being set incorrectly for bids

maxQuoteQuantity is being calculated as price*quantity, which fails to take fees into account when the order is a bid that matches against a resting offer. Instead, maxQuoteQuantity should be set to price*quantity*(1+fee_rate), unless the order is post-only.

stake-ui: Claim all rewards button

Currently, the claim button allows a user to claim a single reward from the event queue. We should either add a new button, or replace the existing button, with one that claims all the available rewards.

serum package readme out-of-date

Loading market method described in packages/serum/readme is out of date. Can't run readme example.

let market = await Market.load(connection, marketAddress);

Sometimes get error's when creating a new order

Sometimes new order fails with the following:

Transaction simulation failed: Error processing Instruction 0: custom program error: 0x22
Program 9xQeWvG816bUx9EPjHmaT23yvVM2ZWbrrpZb9PusVFin invoke [1]
Program 9xQeWvG816bUx9EPjHmaT23yvVM2ZWbrrpZb9PusVFin consumed 8970 of 200000 compute units
Program 9xQeWvG816bUx9EPjHmaT23yvVM2ZWbrrpZb9PusVFin failed: custom program error: 0x22
/Users/borkur/Desktop/Coding/server-sunny/node_modules/@solana/web3.js/lib/index.cjs.js:4882
throw new SendTransactionError('failed to send transaction: ' + res.error.message, logs);
^

SendTransactionError: failed to send transaction: Transaction simulation failed: Error processing Instruction 0: custom program error: 0x22
at Connection.sendEncodedTransaction (/Users/borkur/Desktop/Coding/server-sunny/node_modules/@solana/web3.js/lib/index.cjs.js:4882:13)
at processTicksAndRejections (node:internal/process/task_queues:96:5)
at async Connection.sendRawTransaction (/Users/borkur/Desktop/Coding/server-sunny/node_modules/@solana/web3.js/lib/index.cjs.js:4840:20)
at async Connection.sendTransaction (/Users/borkur/Desktop/Coding/server-sunny/node_modules/@solana/web3.js/lib/index.cjs.js:4830:12)
at async Market._sendTransaction (/Users/borkur/Desktop/Coding/server-sunny/node_modules/@project-serum/serum/lib/market.js:504:27)
at async Market.placeOrder (/Users/borkur/Desktop/Coding/server-sunny/node_modules/@project-serum/serum/lib/market.js:249:16)
at async Timeout.startServer [as _onTimeout] (file:///Users/borkur/Desktop/Coding/server-sunny/server-sunny.js:215:5) {
logs: [
'Program 9xQeWvG816bUx9EPjHmaT23yvVM2ZWbrrpZb9PusVFin invoke [1]',
'Program 9xQeWvG816bUx9EPjHmaT23yvVM2ZWbrrpZb9PusVFin consumed 8970 of 200000 compute units',
'Program 9xQeWvG816bUx9EPjHmaT23yvVM2ZWbrrpZb9PusVFin failed: custom program error: 0x22'
]
}

stake-ui: Validate lockup beneficiary

If a user places a non-sol account (e.g., a token account) into the beneficiary field, the user bricks the lockup, since it won't be able to sign with the address.

Remove `any` from types/buffer-layout

Added any here https://github.com/project-serum/serum-ts/blob/master/types/buffer-layout/index.d.ts#L2, so that @solana/spl-token would compile for the swap package. We should remove this any.

Current error without the any:

$ tsc -b && rollup -c rollup/rollup.config.ts
../../node_modules/@solana/spl-token/lib/index.d.ts(25,28): error TS2314: Generic type 'Layout<T>' requires 1 type argument(s).
../../node_modules/@solana/spl-token/lib/index.d.ts(34,31): error TS2314: Generic type 'Layout<T>' requires 1 type argument(s).
../../node_modules/@solana/spl-token-swap/lib/index.d.ts(29,33): error TS2314: Generic type 'Layout<T>' requires 1 type argument(s).

Serum Example Is Out Of Date

Overview

The given example here is out of date. The Market.load function requires additional parameters including MarketOptions as well as programId. For example the following is a valid invocation of Market.load

await Market.load(
      provider.connection, 
      new anchor.web3.PublicKey("JCFHBoAxpFrKi9kShQdZCDUWjwCe1W25EvVza8DL8xwz"), 
      {}, 
      new anchor.web3.PublicKey("DESVgJVGajEgKGXhb6XmqDHGz3VjdgP7rEVESBgxmroY"),
    );

CancelOrderByClientId not working?

    const connection = new Connection('...');
    const marketAddress = new PublicKey('...');
    const programAccount = new PublicKey("...");
    let market = await Market.load(connection, marketAddress,  { skipPreflight: false, confirmations: 0 }, programAccount);

    const owner = new Account(...)
    const payer = new PublicKey(...)

    const openOrders = await market.findOpenOrdersAccountsForOwner(connection, payer)
    for (const openOrder of openOrders) {
        console.log(openOrder)
        await market.cancelOrderByClientId(connection, owner, openOrder, 0)
    }

And it's telling me:

(node:10605) UnhandledPromiseRejectionWarning: TypeError: src.toArrayLike is not a function
    at BNLayout.encode (/home/wangge/serum_exp/node_modules/@project-serum/serum/lib/layout.js:44:33)
    at Structure.encode (/home/wangge/serum_exp/node_modules/buffer-layout/lib/Layout.js:1272:26)
    at VariantLayout.encode (/home/wangge/serum_exp/node_modules/buffer-layout/lib/Layout.js:1914:19)
    at Union.encode (/home/wangge/serum_exp/node_modules/buffer-layout/lib/Layout.js:1730:16)
    at VersionedLayout.encode (/home/wangge/serum_exp/node_modules/@project-serum/serum/lib/layout.js:94:31)
    at encodeInstruction (/home/wangge/serum_exp/node_modules/@project-serum/serum/lib/instructions.js:41:50)
    at Function.cancelOrderByClientId (/home/wangge/serum_exp/node_modules/@project-serum/serum/lib/instructions.js:156:19)
    at Market.makeCancelOrderByClientIdTransaction (/home/wangge/serum_exp/node_modules/@project-serum/serum/lib/market.js:412:56)
    at Market.cancelOrderByClientId (/home/wangge/serum_exp/node_modules/@project-serum/serum/lib/market.js:407:40)
    at main (file:///home/wangge/serum_exp/index.js:24:22)
(node:10605) UnhandledPromiseRejectionWarning: Unhandled promise rejection. This error originated either by throwing inside of an async function without a catch block, or by rejecting a promise which was not handled with .catch(). To terminate the node process on unhandled promise rejection, use the CLI flag `--unhandled-rejections=strict` (see https://nodejs.org/api/cli.html#cli_unhandled_rejections_mode). (rejection id: 2)
(node:10605) [DEP0018] DeprecationWarning: Unhandled promise rejections are deprecated. In the future, promise rejections that are not handled will terminate the Node.js process with a non-zero exit code.

If it's due to the error on my side, it will be really appreciated if someone can provide a working example. Many thanks~

Swap: update the npm package

I think the NPM package is old. For example, it doesn't expose swapMarkets, and has no estimate method. Please publish the latest code?

WalletSendTransactionError: Signature verification failed

Im using @solana/wallet-adapter, phantom adapter works fine with the integration, but coin98 or sollet, after signing the transactions, shows WalletSendTransactionError: Signature verification failed
I dont know if this is regarding the signTransaction implementation or something that I need to change in the integration itself

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.