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 🙏

© 2025 – Pkg Stats / Ryan Hefner

@timeholder/asset-locker

v1.1.8

Published

Features have been expanded based on the AssetBox.

Readme

🔒 Asset Locker

npm version License Tests

🔌 Features have been expanded based on the AssetBox.

🤔 Why Use

In the decade-long cryptocurrency bull market, why haven't many people made money?

  • 🚨 Impulsive Transactions: Due to market fluctuations, people often make impulsive decisions: buying high and selling low, which ultimately leads to significant asset losses.
  • 🚨 Short Sightedness: Most people lack foresight and are short-sighted, often selling off potentially valuable assets too soon and, as a result, missing the boat to financial freedom.

So, we need a solution that helps users overcome human weaknesses and firmly hold onto valuable assets.

✨ Features

  • Lock-in Period: Allows users to set a lock-in period for the Contract Wallet, during which all assets within the Contract Wallet cannot be withdrawn. This effectively helps users overcome human weaknesses, curbing the impulse to sell off assets prematurely, and become a true Diamond Hands.
  • Guardian: This feature allows for the appointment of a guardian, who is usually a wallet address not controlled by the user (for example, the TIME Holder Official contract address). The guardian's permissions are limited solely to assisting with the early unlocking of Contract Wallet, without any other permissions.

💡 Application Scenario

  • 🧘 I have poor self-control, am prone to impulsive investing, and the moment I have some money, I want to gamble it away, ultimately losing everything. I need an asset lock to forcibly secure my assets for me.
  • 📈 I discovered an asset with potential for appreciation, but I am worried about not being able to hold onto it for the long term due to fears of making an impulsive sale in the future. I need an asset lock to ensure I won't sell out in the short term.
  • 👨‍👧‍👦 I want to set up a "Growth Fund" for my child, to save a long-term asset that will be unlocked when my child comes of age, helping my child grow better.
  • 🔑 I lack confidence in someone's ability to manage their assets. Although he has assured me that he will hold onto the assets for a long term, I do not trust his capacity to handle his assets and am concerned that he might squander them. However, since I cannot fully control his right to manage his assets, I might consider helping him by locking the assets in the capacity of a guardian.

🛠️ Technology Stack

Our project leverages a range of technologies to ensure robust smart contract development, testing, and deployment. Below is a detailed list of the technology stack we use:

  • Solidity: The primary programming language for writing our smart contracts. Solidity is a statically-typed programming language designed for developing smart contracts that run on the Ethereum Virtual Machine (EVM).

  • OpenZeppelin: A library for secure smart contract development. OpenZeppelin Contracts is a library of modular, reusable, secure smart contracts, written in Solidity. It's an open-source framework for the Ethereum community.

  • Hardhat: A development environment to compile, deploy, test, and debug Ethereum software. Hardhat is designed to help developers manage and automate the recurring tasks inherent to the process of building smart contracts and dApps.

  • Viem: A TypeScript Interface for Ethereum that provides low-level stateless primitives for interacting with Ethereum. An alternative to ethers.js and web3.js with a focus on reliability, efficiency, and excellent developer experience.

  • Chai: An assertion library for node and the browser that can be delightfully paired with any javascript testing framework. Chai is often used as the testing framework for writing tests for Ethereum smart contracts.

This technology stack provides us with the tools necessary to ensure our smart contracts are secure, reliable, and efficient. We encourage contributors to familiarize themselves with these technologies to better understand our development and testing processes.

🔍 Running Tests

To ensure the reliability and security of our smart contracts, we have implemented comprehensive test suites using the Chai testing framework. Follow the steps below to run the tests and verify the contracts' functionalities.

Before running the tests, make sure you have the following installed:

  • Node.js (recommend using the latest stable version)
  • npm (Node.js package manager)
npm install
npm run test

After running the tests, you'll see output in the terminal indicating whether each test has passed or failed.

📖 How To Use

Before starting, please make sure that the npm package @timeholder/asset-locker has already been installed.

If it is not installed, please execute the following code to install:

npm install @timeholder/asset-locker

Create your own AssetLocker

Use JavaScript to create deployment code deploy.js.

Example:

import { abi, bytecode } from '@timeholder/asset-locker/artifacts/contracts/AssetLocker.sol/AssetLocker.json'
import { createPublicClient, createWalletClient, http } from 'viem'
import { privateKeyToAccount } from 'viem/accounts'
import { mainnet } from 'viem/chains'

const publicClient = createPublicClient({
  chain: mainnet,
  transport: http()
})

const walletClient = createWalletClient({
  account: privateKeyToAccount('<YOUR_PRIVATE_KEY>'),
  chain: mainnet,
  transport: http()
})

(async () => {
  const hash = await walletClient.deployContract({
    abi,
    bytecode,
    args: [
      '<YOUR_WALLET_ADDRESS>',
      '<YOUR_GUARDIAN_WALLET_ADDRESS>',
      31_536_000 // Lock-in period in seconds
    ]
  })

  const transaction = await publicClient.waitForTransactionReceipt({ hash })
  console.log(`AssetLocker deployed to: ${transaction.contractAddress}`)
})()

Finally, run the script to complete the deployment 🎉.

node deploy.js

Licensing

See LICENSE.