Skip to content

Releases: semaphore-protocol/semaphore

v3.11.0

21 Aug 14:29
Compare
Choose a tag to compare

   🚀 Features

   ♻️ Refactoring

    View changes on GitHub

v3.10.1

17 May 10:00
Compare
Choose a tag to compare

   🐞 Bug Fixes

    View changes on GitHub

v3.10.0

15 May 15:16
Compare
Choose a tag to compare

📣 Important news

Off-chain groups

In order for a member of a Semaphore group to generate a valid zero-knowledge proof, it is necessary to create an off-chain group and add all members so that the Merkle proof for that member can be calculated. This step can take place in a server or on the browser, but in any case it is important that the time for adding members is reasonable. The old addMembers method has been replaced with a third parameter in the Group class, which is more than 10 times faster.

import { Group } from "@semaphore-protocol/group"
import { SemaphoreSubgraph } from "@semaphore-protocol/data"

const semaphoreSubgraph = new SemaphoreSubgraph()
const members = await semaphoreEthers.getGroupMembers("42")

const group = new Group("42", 20, members)

PR: #322

Documentation

Answers to frequently asked questions have been added to a separate page in the documentation, along with the troubleshooting page and a new guide to fetch on-chain data with the @semaphore-protocol/data package. Also, the search bar can now also be used in Spanish.


   🚀 Features

    View changes on GitHub

v3.9.0

28 Apr 11:47
Compare
Choose a tag to compare

   🚀 Features

    View changes on GitHub

v3.8.0

26 Apr 14:37
Compare
Choose a tag to compare

   🚀 Features

   ♻️ Refactoring

    View changes on GitHub

v3.7.0

20 Apr 10:33
Compare
Choose a tag to compare

No significant changes

    View changes on GitHub

v3.6.0

11 Apr 18:02
Compare
Choose a tag to compare

📣 Important news

CLI

CLI templates

There are two new templates in the CLI: monorepo-ethers and monorepo-subgraph. You can select which one you prefer when creating your project:

Supported templates:

CLI commands

The get-group command in the CLI was split into get-group, get-members and get-proofs.

Commands:

  • get-group: It returns the data of a group from a supported network.
  • get-members: It returns the members of a group from a supported network.
  • get-proofs: It returns the proofs of a group from a supported network.

PR: #303

Contracts

All contracts are using the same addresses on almost all the supported networks. You can take a look at the new contract addresses in the documentation.

PR: #304

Discord Bot

Semaphore has a new Discord bot that can be used to show the data of on-chain groups with a simple command: /get-group . The output of the command is private by default, but you can make it public by adding a third parameter /get-group true. Exciting new features will be integrated in the future, stay tuned!

Repository: https://github.com/semaphore-protocol/discord-bot


   🚀 Features

   🐞 Bug Fixes

   🏎 Performance

   ♻️ Refactoring

    View changes on GitHub

v3.5.0

31 Mar 12:17
Compare
Choose a tag to compare

   🚀 Features

   🐞 Bug Fixes

    View changes on GitHub

v3.4.0

21 Mar 19:43
Compare
Choose a tag to compare

📣 Important news

HeyAuthn

HeyAuthn (@semaphore-protocol/heyauthn) is a new library to allow developers to create and manage Semaphore identities using WebAuthn as a cross-device biometric authentication in a way that is more convenient, smoother and secure than localStorage, Chrome extensions, or password manager based solutions.

PR: #285
Special thanks to @vb7401, @rrrliu, @emmaguo13, @sehyunc and @enricobottazzi!

Arbitrum Goerli

Semaphore is now available on Arbitrum Goerli. Please, check the contract addresses in our documentation, or the subgraph endpoint here.

PR: #282

CLI

The Semaphore CLI also supports Sepolia and Arbitrum Goerli now. The commands try to use the Semaphore subgraphs when available, otherwise they use SemaphoreEthers. The template has been updated in accordance with the Semaphore boilerplate.

PRs: #281, #283

OpenZeppelin relay

The Semaphore boilerplate integrated a new relay (no need to deploy backend code anymore!). Relays are a key component in zero-knowledge applications. In order to preserve the user's anonymity, applications need a relay to post the proof transaction to Ethereum (where all transactions are public) on behalf of the user. OpenZeppelin Defender has been used to:

  1. Create a OZ Relay for Arbitrum Goerli to send transactions via a regular HTTP API, which takes care of private key secure storage, transaction signing, nonce management, gas pricing estimation, and resubmissions.
  2. Create a OZ Autotask to run a code snippet via webhooks and trigger the OZ Relay:
const { DefenderRelayProvider, DefenderRelaySigner } = require('defender-relay-client/lib/ethers');
const { ethers } = require('ethers');

exports.handler = async function(event) {
    const { body } = event.request;
  
	console.info(body)

	if (!body || !body.abi || !body.address || !body.functionName || !body.functionParameters) {
    	throw Error("The request body was not formatted correctly")
    }
  
  	const { abi, address, functionName,  functionParameters } = body

    const provider = new DefenderRelayProvider(event);
    const signer = new DefenderRelaySigner(event, provider, { speed: 'fast' });

    const contract = new ethers.Contract(address, abi, signer);

    const tx = await contract[functionName](...functionParameters);

    return tx.wait();
}

This code can be used for any contract and function, but you are free to customize it or set a whitelist in your relay.

PR: semaphore-protocol/boilerplate#36


   🚀 Features

   🐞 Bug Fixes

   ♻️ Refactoring

    View changes on GitHub

v3.2.3

13 Mar 22:55
Compare
Choose a tag to compare

No significant changes

    View changes on GitHub