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

solowei

v0.2.0

Published

A library for solidity smart contract development. It contrains helpers that are not added to openzeppelin, but can also be very useful.

Downloads

19

Readme

SOLOWEI

A library for solidity smart contract development. It contrains helpers that are not added to openzeppelin, but can also be very useful.

Usage

Package contains abstract contracts and libraries. They may be imported using

import "solowei/contracts/{NAME_OF_CONTRACT_OR_LIBRARY}";

Example of usage:

pragma solidity ^0.8.6;

import "solowei/contracts/AttoDecimal.sol";
import "solowei/contracts/TwoStageOwnable.sol";

contract Example is TwoStageOwnable {
    using AttoDecimal for AttoDecimal.Instance;

    AttoDecimal.Instance private _decimal;

    function decimal()
        public
        view
        returns (
            uint256 mantissa,
            uint256 base,
            uint256 exponentiation
        )
    {
        return _decimal.toTuple();
    }

    constructor() TwoStageOwnable(msg.sender) {
        _decimal = AttoDecimal.convert(123).div(234);
    }

    function double() external onlyOwner returns (bool success) {
        _decimal = _decimal.mul(2);
        return true;
    }

    function set(uint256 mantissa) external onlyOwner returns (bool success) {
        _decimal = AttoDecimal.Instance(mantissa);
        return true;
    }
}

Entities

TrySafeMath

Library to working with safe math. But instead of revert transaction it returns result as tuple of operation status (succeed or not) and answer. Most likely this will be implemented in openzepplin, but for now you may use this implementation.

TwoStageOwnable

Abstract contract similar to openzepplin's Ownable but with two step ownership transfering.

view nominatedOwner(): address
view owner(): address
acceptOwnership()
nominateNewOwner(address)
modifier onlyOwner()
event OwnerChanged(address indexed)
event OwnerNominated(address indexed)
internal _nominateNewOwner(address)
internal _setOwner(address)

Note that when owner is changed (also using internal _setOwner method) nominated owner is cleared.

AttoDecimal

Library for working with float numbers with 18 decimal places.

BASE: 10
EXPONENTIATION: 18
ONE_MANTISSA: 1e18
ONE_TENTH_MANTISSA: 1e17
HALF_MANTISSA: 5e17
SQUARED_ONE_MANTISSA: 1e36
MAX_INTEGER: 115792089237316195423570985008687907853269984665640564039457
static maximum(): MAX_INTEGER + 0.584007913129639935
static zero(): 0.0
static one(): 1.0
static convert(uint): decimal
static sub(uint, decimal): decimal
static div(uint, decimal): decimal
static div(uint, uint): decimal
static idiv(uint, decimal): decimal
static mod(uint, decimal): decimal
static sum(decimal[]): decimal
compare(decimal): -1| 0 | 1
compare(uint): -1 | 0 | 1
add(uint|decimal): decimal
sub(uint|decimal): decimal
mul(uint|decimal): decimal
div(uint|decimal): decimal
idiv(uint|decimal): decimal
mod(uint|decimal): decimal
floor(): uint
ceil(): uint
round(): uint
eq(decimal|uint): bool
gt(decimal|uint): bool
gte(decimal|uint): bool
lt(decimal|uint): bool
lte(decimal|uint): bool
isInteger(): bool
isPositive(): bool
isZero(): bool
toTuple(): [mantissa:uint, base:10, exponentiation:18]

AttoDecimalAdvanced

Library that provides rounding operations for atto-decimals. For methods mul and div rounding mode affects 18th digit.

enum RoundingMode { ROUND_UP, ROUND_DOWN, ROUND_HALF_UP, ROUND_HALF_DOWN }
static div(uint, decimal, RoundingMode)
round(?RoundingMode): uint
mul(decimal, RoundingMode): decimal
div(decimal|uint, RoundingMode): decimal
toPrecision(uint): decimal
toPrecision(uint, RoundingMode): decimal
toFraction() // note: not constant gas cost