[Discussion] Client Libraries for Developers

Hey developers!

In recent years, many dApps have been created on the Waves protocol. The Waves team pays special attention to developer experience and tools that can be used for efficient and secure app development. We are convinced that one of the core elements for developer experience is a variety of client libraries. Several libraries and SDKs are supported by the community. They all are listed in the documentation: https://docs.waves.tech/en/building-apps/waves-api-and-sdk/client-libraries/.

The most powerful (and up-to-date) are libraries built for the JavaScript, Python, Java and PHP languages. All of them support such functionality, as accounts management, transactions signing & broadcasting and blockchain data reading.

But, as a developer, I do have some questions:

  • What libraries do you use for your product development?
  • What features do you use most often/like?
  • What features are missing in the library that you use?
  • All libraries have different architecture and interfaces, and I wonder which is the easiest for the majority of developers?

Please, feel free to share your feedback or any thoughts related to client libraries in this topic. Also, you can share links to Waves protocol-related libraries if you develop or use any.

1 Like

Let me begin :slight_smile:

At Certificado.one, we use the PyWaves library for issuing certificates to users. I’d really recommend this SDK to everyone coding in Python: it’s convenient for any need and pretty easy to start using. It only takes 3 lines of code to send a transaction.

The only thing we missed was operating with cyrrilic strings, since they couldn’t be encoded properly. But fixing it and updating the library code wasn’t a big deal.

Thanks to the PyWaves team!

Personally, I like the waves-transaction library approach with a few small libraries and one “wrapper.” I also like the approach with many functions (as opposed to the Object Oriented approach used elsewhere).

What we really missing, is websockets or something like this to allow subscribe - push or push diffs, this would allow to decrease the load greatly

1 Like

A little more libraries are listed there:
https://github.com/msmolyakov/awesome-waves#client-libraries

As for libraries, I use WavesJ (some custom version), it is only limited by node api itself

For SIGN in general i use waves signer, waves keeper and waves-transactions.
So far i like them, they are clear and easy to use.

What i find missing is encrypt/decrypt and orders on waves signer, would be nice to have them like we do in Keeper.

I also started use surfboard regularly (i was guilty of using waves-ide only until recently), its pretty nice.
Thing i miss there is a way to have some sort of “includes” based on the network we deploy the contract on, it would be nice.

For example the begining of my contract look like this:

######## MAINNET NETWORK CONFIG

# let oracleFee = value(addressFromString("3P...")) 
# let signDapp = value(addressFromString("3P..."))
# let feeReceiver = "3P..."
# let userDapp = value(addressFromString("3P..."))
# let whitelistDapp = value(addressFromString("3P..."))

# ACCEPTED TOKENS 

# let signAssetId = base58'9sQutD5HnRvjM1uui5cVC4w9xkMPAfYEV8ymug3Mon2Y' # SIGN
# let usdnAssetId = base58'DG2xFkPdDwKUoBkzGAhQtLpSGzfXLiCYPEzeKH2Ad24p' # USDN
# let wavesAssetId = base58'' # WAVES

# ADMINS

# let chris = "3P..."
# let admin2 = "3P..."

######## END MAINNET NETWORK CONFIG

######## TESTNET NETWORK CONFIG

let oracleFee = value(addressFromString("3N..."))
let signDapp = value(addressFromString("3N...")) 
let feeReceiver = "3N..." 
let userDapp = value(addressFromString("3M...")) 
let whitelistDapp = value(addressFromString("3N...")) 

# ACCEPTED TOKENS 

let signAssetId = base58'Gf9t8FA4H3ssoZPCwrg3KwUFCci8zuUFP9ssRsUY3s6a' # SIGN
let usdnAssetId = base58'25FEqEjRkqK6yCkiT7Lz6SAYz7gUFCtxfCChnrVFD5AT' # USDN
let wavesAssetId = base58'' # WAVES

# ADMINS

let chris = "3M..."
let admin2 = "3M..."

######## END TESTNET NETWORK CONFIG

A way to have such config as includes based on deploy network rather than comment /uncomment.

Or a quick comment/uncomment shortcut like usual vscode Ctrl+Shift+/ :slight_smile:

Have you ever heard of Blockchain Updates node extension? I think it will solve your problems.

1 Like