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

@w3bstream/wasm-sdk

v0.12.0

Published

This is the official assemblyscript sdk for W3bstream.

Downloads

425

Readme

@w3bstream/wasm-sdk

This is the official assemblyscript sdk for W3bstream.

Installation

The package requires node.js >=16.0.0

npm install @w3bstream/wasm-sdk

Useage

Your must export alloc function from @w3bstream/wasm-sdk for w3bstream vm

Log

Log(message: string)

import { Log } from "@w3bstream/wasm-sdk";
//export alloc for w3bstream vm
export { alloc } from "@w3bstream/wasm-sdk";

export function start(rid: i32): i32 {
  Log("Start from assemblyscript");
  const message = GetDataByRID(rid);
  Log("wasm received message:" + message);
  return 0;
}

SendTx

SendTx(chainId:i32, tx: string) : string

import { SendTx } from "@w3bstream/wasm-sdk";
export { alloc } from "@w3bstream/wasm-sdk";

export function start(rid: i32): i32 {
  const ERC20Addr = `0xb73eE6EB5b1984c78CCcC49eA7Ad773E71d74F51`;
  const account = `9117f5EF4156709092f79740a97b1638cA399A00`;
  const hash = SendTx(
    4690,
    `
  {
      "to": "${ERC20Addr}",
      "value": "0",
      "data": "40c10f19000000000000000000000000${account}0000000000000000000000000000000000000000000000000de0b6b3a7640000"
  }`
  );
  Log("wasm send tx:" + hash);
  return 0;
}

GetDB & SetDB

SetDB(key: string, value: i32)

GetDB(key: string)

import { SetDB, Log, GetDB } from "@w3bstream/wasm-sdk";
export { alloc } from "@w3bstream/wasm-sdk";

export function start(rid: i32): i32 {
  SetDB("wordCount", word.length);
  let value = GetDB("wordCount");
  Log("wasm get value:" + value.toString());
  return 0;
}

ExecSQL & QuerySQL

First, you need to create a project with database schema for wasm db storage

Create Database Schema

curl --location --request GET 'http://localhost:8888/srv-applet-mgr/v0/project_config/project_01/PROJECT_SCHEMA' \
--header 'Authorization: eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJQYXlsb2FkIjoiOTAxNjYzODYzNTI5Njc3NSIsImlzcyI6InczYnN0cmVhbSIsImV4cCI6MTY3NTE0MzA0Nn0.okRRanlER4OwZTSS60m4qdg5F4qjVWDcPys-eAJ5KkE' \
--header 'Content-Type: application/json' \
--data-raw '{
  "tables": [
    {
      "name": "f_table",
      "desc": "test table",
      "cols": [
        {
          "name": "f_gender",
          "constrains": {
            "datatype": "UINT8",
            "length": 255,
            "default": "0",
            "desc": "user name"
          }
        }
      ],
      "keys": [
        {
          "name": "ui_gender",
          "isUnique": true,
          "columnNames": [
            "f_gender"
          ]
        }
      ],
      "withSoftDeletion": true,
      "withPrimaryKey": true
    }
  ]
}'
export { alloc } from "@w3bstream/wasm-sdk";
import { ExecSQL, QuerySQL, Log } from "@w3bstream/wasm-sdk";

export function start(rid: i32): i32 {
  Log("start from typescript");
  const key = GetDataByRID(rid);
  const v = new Map<string, i32>();
  v.set("int32", 1);
  const value = ExecSQL(`INSERT INTO "f_table" (f_id,f_gender) VALUES (?,?);`, [v, v]);
  const res = QuerySQL(`SELECT * FROM "f_table" WHERE f_id = ?;`, [v]);
  Log("wasm get value:" + value);
  Log("wasm get res:" + res);  
  return 0;
}

GetEnv(key:string)

import { GetEnv, Log } from "@w3bstream/wasm-sdk";
export { alloc } from "@w3bstream/wasm-sdk";

export function start(rid: i32): i32 {
  const key = GetDataByRID(rid);
  const value = GetEnv(key);
  Log("wasm get env:" + value);
  return 0;
}

CallContract(chainId:i32,to:string,data:string) : string

import { CallContract, GetDataByRID, Log, SendTx } from "@w3bstream/wasm-sdk";
import { hexToAddress, hexToBool, hexToUtf8 } from "@w3bstream/wasm-sdk/assembly/utility";

export { alloc } from "@w3bstream/wasm-sdk";

export function start(rid: i32): i32 {
  const message = GetDataByRID(rid);
  Log("wasm received message:" + message);
  const ERC20Addr = "0xa00744882684c3e4747faefd68d283ea44099d03";
  const balanceOfHex = CallContract(4689, ERC20Addr, `0x70a082310000000000000000000000009117f5ef4156709092f79740a97b1638ca399a00`);

  Log("balanceOfHex:" + balanceOfHex);
  Log("balanceOfInt:" + parseInt(balanceOfHex, 16).toString());

  const symbolHex = CallContract(4689, ERC20Addr, `0x95d89b41`);
  Log("symbolHex:" + symbolHex);
  Log("symbol:" + hexToUtf8(symbolHex));

  //if return type is 'bool'
  //use hexToBool

  //if return type is 'address'
  //use hexToAddress
  return 0;
}

Api call document

https://github.com/machinefi/w3bstream-wasm-golang-sdk/blob/main/api.md#send-zero-knowledge-proof

Build

https://www.assemblyscript.org/concepts.html#special-imports

The abort method will be exposed inside w3bstream in later versions issues/308

export function abort(message: string | null, fileName: string | null, lineNumber: u32, columnNumber: u32): void {}

package.json

"scripts": {
    "asbuild:release": "asc assembly/index.ts --use abort=assembly/index/abort --target release",
  },

Some language features need support from the host environment to function, yielding a few special module imports depending on the feature set used within the module. Generated bindings provide these automatically where necessary.

  • function env.abort?(message: usize, fileName: usize, line: u32, column: u32): void

The respective implementations of , and can be overridden with, for example, , here redirecting calls to to a custom function in . Useful if an environment does not provide compatible implementations, or when the respective imports are not desired and custom implementations are sufficient.aborttraceseed--use abort=assembly/index/myAbortabortmyAbortassembly/index.ts

Known Issues

  • If the pnpm installation package is used, dependencies may not be correctly installed. You can use npm or yarn to install dependencies

Run examples

Examples can be found in the ./examples folder.

To build an example, from the main SDK folder type:

npm install
npm run build:<example_name>

Available examples are:

  • abort - Tests the call of the abort function on the W3bstream VM side by calling assert in your applet.
  • click2earn - a simple applet that mints ERC20 tokens every 5 "click" messages are received
  • env - shows how to retrieve env variable for the parent project (a defined in the project's settings on dev.w3bstream.com)
  • erc20_mint - a basic example that shows how to mint ERC20 tokens from an applet according to the info included in the data message
  • json - shows how to parse a data message and extract specific fields
  • sql - shows how to insert and query data from W3bstreams database using SQL
  • token_distribute - another basic example that sends ERC20 tokens to a wallet
  • vm - another example of using assert in your applet
  • word_count - counts the number of words included in a message payload and shows how to save it in W3bstream's key/value storage.