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

@streamr/network-contracts

v8.2.0

Published

Smart contracts for Streamr Network

Downloads

80,155

Readme

Streamr Network contracts

Solidity files plus Typescript interfaces for the Streamr Network smart contracts.

Exported interfaces are Ethers v5 format for versions 7.x.x and below, and Ethers v6 format for versions 8.0.0 and above.

Contracts

Listed by file path:

  • StreamRegistry: Streams are added here along with metadata how to join them
  • NodeRegistry: Storage nodes can register themselves here
  • StreamStorageRegistry: Connects storage nodes to streams that they store
  • OperatorTokenomics: Operator and Sponsorship contracts that govern how to pay for better service in the Network, and how to get paid for providing it
    • Spoiler: you '''sponsor''' streams by deploying a Sponsorship and sending DATA tokens to it, and operators '''stake''' into that Sponsorship to receive that DATA over time
    • if operators stake but don't actually provide service, they get kicked out and their stake gets slashed
    • additionally, 3rd parties can '''delegate''' their DATA tokens to the Operator contracts and receive a share of the operator's earnings. This way the operator gets more DATA to stake to more Sponsorships, in order to more fully utilize their network resources to earn more DATA.

Usage from Typescript

Snippet from the Operator client:

import { operatorABI, sponsorshipABI } from "@streamr/network-contracts"
import type { Operator, Sponsorship } from "@streamr/network-contracts"

...

const contract = new Contract(operatorContractAddress, operatorABI, this.provider) as unknown as Operator
contract.on("Staked", async (sponsorship: string) => {
    log(`got Staked event ${sponsorship}`)
})

The functions that end with ForUserId take an arbitrary bytes argument for the user ID. Addresses can also be given to these functions but they need to be padded to 32 bytes first, e.g.: ethers.utils.hexZeroPad("0x1234567890123456789012345678901234567890", 32) => 0x0000000000000000000000001234567890123456789012345678901234567890.

Developer notes

The package exports all of the artifacts needed to interact with the contracts, and also a class that deploys them into a chain and then gives an object with all addresses and with all contract objects.

An example of how to use it can be seen in network-contracts/packages/network-contracts/scripts/tatum/streamrEnvDeployer.ts, that can be run with the streamrEnvDeployer npm task

The proxy enables upgradability of contract code without the need to change all addresses in software that talks to the contract and without the need to migrate data that is inside the old contract, that is being upgraded. Also the upgrade can only be controlled by a ProxyAdmin contract. To find out more visit https://docs.openzeppelin.com/contracts/3.x/api/proxy and https://docs.openzeppelin.com/upgrades-plugins/1.x/proxies

To deploy the contract with a proxy into a locally running eth environment run

npm run localDeployProxy

then copy the Proxy and Proxyadmin addresses to the upgradeProxy.ts script and run it with

npm run localUpgradeImpl

Changelog

StreamRegistryV5: added functions for arbitrary bytes user IDs (they can only publish and subscribe, not grant/edit/delete) 8.0.0 switch ethers v5 -> v6 7.0.8 export ENS type 4.2.0 export ERC677 ABI and type

Publish package

  • npm version [major/minor]
  • npm run clean
  • npm run build
  • npm publish --dry-run
  • npm publish
  • git add .
  • git commit -m"release(network-contracts): vx.x.x"
  • git tag network-contracts/vx.x.x
  • git push
  • git push --tags