
Security News
pnpm 10.16 Adds New Setting for Delayed Dependency Updates
pnpm's new minimumReleaseAge setting delays package updates to prevent supply chain attacks, with other tools like Taze and NCU following suit.
@0xdoublesharp/sloth-vdf
Advanced tools
Sloth Verifiable Delay Function for Javascript and Solidity 0.8
This module implements the Sloth VDF algorithm in JavaScript, TypeScript, and Soldity 0.8 for generating provable random numbers.
npm install -D @0xdoublesharp/sloth-vdf
yarn add -D @0xdoublesharp/sloth-vdf
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.19;
import { SlothVDF } from '@0xdoublesharp/sloth-vdf/contracts/SlothVDF.sol';
contract RandomVDFv1 {
// large prime
uint256 public prime = 432211379112113246928842014508850435796007;
// adjust for block finality
uint256 public iterations = 1000;
// increment nonce to increase entropy
uint256 private nonce;
// address -> vdf seed
mapping(address => uint256) public seeds;
uint256 public proof;
error InvalidProof();
error AlreadyProven();
function createSeed() external payable {
// commit funds/tokens/etc here
// create a pseudo random seed as the input
uint256 _nonce = nonce++;
seeds[msg.sender] = uint256(
keccak256(abi.encodePacked(msg.sender, _nonce, block.timestamp, blockhash(block.number - 1)))
);
}
function prove(uint256 _proof) external {
if (proof != 0) revert AlreadyProven();
if (!SlothVDF.verify(_proof, seeds[msg.sender], prime, iterations)) revert InvalidProof();
// use the proof as a provable random number
proof = _proof;
}
}
describe('Sloth VDF', () => {
it('Prove', async () => {
const { sender, randomVDFv1 } = await loadFixture(fixtures);
const prime = BigInt((await randomVDFv1.prime()).toString());
const iterations = BigInt((await randomVDFv1.iterations()).toNumber());
console.log('prime', prime.toString());
console.log('iterations', iterations.toString());
const tx = await randomVDFv1.createSeed();
await tx.wait();
const seed = BigInt((await randomVDFv1.seeds(sender.address)).toString());
console.log('seed', seed.toString());
let start = Date.now();
const badproof = sloth.computeBeacon(seed, prime, BigInt(1));
console.log('compute time', Date.now() - start, 'ms', 'bad proof', badproof);
start = Date.now();
const proof = sloth.computeBeacon(seed, prime, iterations);
console.log('compute time', Date.now() - start, 'ms', 'vdf proof', proof);
await expect(randomVDFv1.prove(badproof)).to.be.revertedWithCustomError(randomVDFv1, 'InvalidProof');
await expect(randomVDFv1.prove(proof)).to.not.be.reverted;
await expect(randomVDFv1.prove(proof)).to.be.revertedWithCustomError(randomVDFv1, 'AlreadyProven');
});
});
FAQs
Sloth Verifiable Delay Function for Javascript and Solidity 0.8
The npm package @0xdoublesharp/sloth-vdf receives a total of 3 weekly downloads. As such, @0xdoublesharp/sloth-vdf popularity was classified as not popular.
We found that @0xdoublesharp/sloth-vdf demonstrated a not healthy version release cadence and project activity because the last version was released a year ago. It has 1 open source maintainer collaborating on the project.
Did you know?
Socket for GitHub automatically highlights issues in each pull request and monitors the health of all your open source dependencies. Discover the contents of your packages and block harmful activity before you install or update your dependencies.
Security News
pnpm's new minimumReleaseAge setting delays package updates to prevent supply chain attacks, with other tools like Taze and NCU following suit.
Security News
The Rust Security Response WG is warning of phishing emails from rustfoundation.dev targeting crates.io users.
Product
Socket now lets you customize pull request alert headers, helping security teams share clear guidance right in PRs to speed reviews and reduce back-and-forth.