npm package discovery and stats viewer.

Discover Tips

  • General search

    [free text search, go nuts!]

  • Package details

    pkg:[package-name]

  • User packages

    @[username]

Sponsor

Optimize Toolset

I’ve always been into building performant and accessible sites, but lately I’ve been taking it extremely seriously. So much so that I’ve been building a tool to help me optimize and monitor the sites that I build to make sure that I’m making an attempt to offer the best experience to those who visit them. If you’re into performant, accessible and SEO friendly sites, you might like it too! You can check it out at Optimize Toolset.

About

Hi, 👋, I’m Ryan Hefner  and I built this site for me, and you! The goal of this site was to provide an easy way for me to check the stats on my npm packages, both for prioritizing issues and updates, and to give me a little kick in the pants to keep up on stuff.

As I was building it, I realized that I was actually using the tool to build the tool, and figured I might as well put this out there and hopefully others will find it to be a fast and useful way to search and browse npm packages as I have.

If you’re interested in other things I’m working on, follow me on Twitter or check out the open source projects I’ve been publishing on GitHub.

I am also working on a Twitter bot for this site to tweet the most popular, newest, random packages from npm. Please follow that account now and it will start sending out packages soon–ish.

Open Software & Tools

This site wouldn’t be possible without the immense generosity and tireless efforts from the people who make contributions to the world and share their work via open source initiatives. Thank you 🙏

© 2024 – Pkg Stats / Ryan Hefner

@solar-republic/neutrino

v1.4.3

Published

Ultra light-weight client library for Secret Network

Downloads

895

Readme

Neutrino

An ultra-lightweight Secret Network client and wallet for the Web.

Engineered to produce the smallest possible javascript bundle sizes after gzip, with even greater savings when tree-shaking is used.

Description

The goal of this project is to provide the necessary tools to run a self-contained Secret Web dApp and an optionaly embedded hot hot wallet. Users are able to:

  • query the Secret Network chain
  • construct and broadcast transactions to the chain
  • query and execute Secret Contracts
  • sign and verify Secp256k1 messages (to enable hot hot wallets)

Consequently, the following prerequisite tools are also available to users:

  • Bech32 encoding/decoding
  • Curve25519 scalar multiplication
  • RIPEMD-160 hashing
  • Secp256k1 key generation, signing/verification, and ECDH
  • AES-128-SIV encryption/decryption
  • Schema-less Protobuf reading/writing

Additionally, some dApp-enhancing features are also included:

  • ChaCha20 + Poly1305 AEAD
  • SNIP-52 WebSocket notification client

API Usage

Tuples (EC Arrays []) are used in places you might normally expect a named struct, such as return values. Similarly, virtually all functions opt for ordered parameters instead of named structs.

This practice allows for much smaller bundle sizes, but comes at the cost of less destructuring verbosity. However, a TypeScript IDE should make this drawback neglible since types and documentation explain every parameter and return value.

Examples

Basic SNIP-20 example:

import type {Snip20} from '@solar-republic/contractor';
import {Wallet, SecretContract, SecretApp} from '@solar-republic/neutrino';
import {hex_to_bytes} from '@blake.regalia/belt';

// create a mainnet wallet using an imported private key in hexadecimal
const wallet = await Wallet(
  hex_to_bytes(import.meta.env.PRIVATE_KEY_HEX),
  import.meta.env.CHAIN_ID,
  import.meta.env.LCD_URL,
  import.meta.env.RPC_URL,
);

// create a handle for communicating with some SNIP-20 contract
const contract = await SecretContract<Snip20>(wallet.lcd, import.meta.env.TOKEN_ADDRESS);

// create a context for querying and executing the contract using the wallet and some gas price
const token = await SecretApp(wallet, contract, 0.125);


// prepare a viewing key
const viewingKey = 'my-secret-viewing-key';

{
  // execute the contract and specify the gas limit
  const [result, code, text] = await token.exec('set_viewing_key', {
    key: viewingKey,
  }, 50_000n);
  
  // handle any errors
  if(code) throw Error(`Execution error: ${text}`);
}

{
  // query the contract, providing a viewing key as auth
  const [result, code, text] = await token.query('balance', {
    address: wallet.addr,
  }, viewingKey);

  // handle any errors
  if(code) throw Error(`Query error: ${text}`);

  // print the result
  console.log(`Balance is: ${result.amount}`);
}