blocto / solana-go-sdk

Solana Golang SDK
https://blocto.github.io/solana-go-sdk/
MIT License
373 stars 96 forks source link

timeout inside the context #56

Closed scottywm closed 2 years ago

scottywm commented 2 years ago

Can i make the context timeout when creating the transaction (tx) and also sending the tokens, or must the context be epty as done in the example?

yihau commented 2 years ago

I don't get it. could you explain it more?

the context is used for making http request. https://github.com/portto/solana-go-sdk/blob/main/rpc/client.go#L63

your sending tokens behavior will be packed in a tx and then you send it.

scottywm commented 2 years ago

An empty context is used when sending the tokens in this line of code

txhash, err := c.SendTransaction(context.Background(), tx)

I'm asking if I could give the context a timeout like so.

ctx, cancel := context.WithTimeout(context.Background(), 5)

And then insert this context into the transaction like so

txhash, err := c.SendTransaction(ctx, tx)

Would this work?

yihau commented 2 years ago

It will be a very very short time if you only give 5 here. iirc WithTimeout default is nano second maybe try to use some thing like

context.WithTimeout(context.Background(), 1*time.Second)
scottywm commented 2 years ago

Ok so if I do it like this will it terminate the transaction after 5 seconds?

context.WithTimeout(context.Background(), 5*time.Second)

yihau commented 2 years ago

to be more precisely, the transaction will fail by

  1. the sending process over 5 secs or
  2. your transaction don't pass the preflight check
scottywm commented 2 years ago

So how can I put a timeout on this transaction so the transaction will fail after say 3, 4 or even 5 seconds?

yihau commented 2 years ago

Your transaction will execute by validators after you send it. You can only wait for the result. This thing I don't think can fulfill in SDK level, even program level.

scottywm commented 2 years ago

Ok. So then how can I put a timeout on this transaction?

yihau commented 2 years ago

As I said, the timeout is only for http request and I don't think you can put a timeout for a transaction in SDK level even program level.

scottywm commented 2 years ago

So if the solana Blockchain goes down while a transaction is being processed, what happens?

yihau commented 2 years ago

It may succeed or not. There are too many factors need to be considered in your question. If you have more questions about Solana, you can join Solana's Discord.

I'm going to close this issue. Feel free to open another issue for questions related to this SDK.