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

@3loop/transaction-interpreter

v0.10.7

Published

## Current Exploration

Downloads

534

Readme

Loop Interpreter

Current Exploration

Initial implemnetation will load all the interpreters in one JavaScript bundle. This should not be a problem if used in a node environment or with a small amount of interpreters. We are open to explore approches that will allow an universal approch to dynamically import interpreters.

The current implementation uses 2 tables to quickly find the interpertation for a given contract. The first table is a map of contract address to the index of the contract in the second table. The second table is a list of all interpreters. This allows us to quickly access all the interpreters and share the same interpreter for multiple contracts.

To avoid security issues, we will run each interpreter in a QuickJS sandbox.

Usage

Example how to run in browser environment:

import {
  Interpreter,
  QuickjsInterpreterLive,
  QuickjsConfig,
  TransactionInterpreter,
} from '@3loop/transaction-interpreter'
import { Effect, Layer } from 'effect'
import variant from '@jitl/quickjs-singlefile-browser-release-sync'

// Create a QuickJS VM configuration
const config = Layer.succeed(QuickjsConfig, {
  variant: variant,
  runtimeConfig: { timeout: 1000 },
})

// Provide the QuickJS VM configuration to interpreter
const layer = Layer.provide(QuickjsInterpreterLive, config)

const decodedTx = {} // Decoded transaction

// Run interpreter over default interpreters
const runnable = Effect.gen(function* () {
  const interpreterService = yield* TransactionInterpreter

  // NOTE: Search the interpreter in the default interpreters
  const interpreter = interpreterService.findInterpreter(decodedTx)

  const interpretation = yield* interpreterService.interpretTx(decodedTx, interpreter)

  return interpretation
}).pipe(Effect.provide(layer))

return Effect.runPromise(runnable)
  .then((interpretation) => {
    console.log(interpretation)
  })
  .catch((e) => {
    console.error(e)
  })

Build

All interpreters are stored in the interpreters directory. Each interpreter must export a function transformEvent and an array contracts that contains the concatenated chainid and contract address (${chainId}:${address}).

Before using the library, we need compiles all interpreters into a format that can be consumed by the loop interpreter.

pnpm run build:interpreters

You can compile the library with the following command:

pnpm run build