Releases: semaphore-protocol/semaphore
v3.11.0
🚀 Features
♻️ Refactoring
- @semaphore-protocol/proof: Add MerkleProof type to exports - by @cedoor (8afa3)
View changes on GitHub
v3.10.1
🐞 Bug Fixes
- @semaphore-protocol/group: Make members bigint types - by @cedoor (d1d30)
View changes on GitHub
v3.10.0
📣 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
- @semaphore-protocol/data: Create function to check if a member exists - by @cedoor (9d707)
- @semaphore-protocol/group: Add new class parameter to add members - by @cedoor (ed015)
View changes on GitHub
v3.9.0
v3.8.0
🚀 Features
- @semaphore-protocol/proof: Add function to calculate nullifier hash - by @cedoor (6cc2b)
♻️ Refactoring
- @semaphore-protocol/cli: Update get-proofs description - by @vplasencia (eb634)
View changes on GitHub
v3.7.0
No significant changes
View changes on GitHub
v3.6.0
📣 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:
contracts-hardhat
: It contains a simple contract, a task to deploy it and some tests.monorepo-ethers
: It is a complete application that contains a simple contract, a task to deploy it, some tests and a Next.js application to interact with that contract. It uses the SemaphoreEthers class to query the Semaphore.sol contract data.SemaphoreEthers
is part of the@semaphore-protocol/data
package and uses the Ethers library under the hood.monorepo-subgraph
: It is a complete application that contains a simple contract, a task to deploy it, some tests and a Next.js application to interact with that contract. It uses the SemaphoreSubgraph class to query the Semaphore.sol contract data.SemaphoreSubgraph
is part of the@semaphore-protocol/data
package and uses The Graph protocol under the hood.
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
- @semaphore-protocol/cli:
- Split the get-group command to make it easier to query group data - by @vplasencia (0cbbd)
- Add checks for template integrity - by @vplasencia (14e39)
- Add inquirer to select a template when creating a project - by @vplasencia (4d1a6)
- Add the hardhat-nextjs-semaphoreethers template - by @vplasencia (53d87)
- Add hardhat-nextjs-semaphoresubgraph template - by @vplasencia (58310)
🐞 Bug Fixes
- Limit some npm scripts to public packages - by @cedoor (94bbf)
- @semaphore-protocol/cli:
- Add solhint file in monorepo-ethers and monorepo-subgraph templates - by @vplasencia (7d487)
- Add gitignore file - by @vplasencia (bd897)
- Update package.json file in monorepos with correct package names - by @vplasencia (c4f35)
- Set the correct env file path - by @vplasencia (d9b0a)
- @semaphore-protocol/contracts:
- @semaphore-protocol/data:
🏎 Performance
- @semaphore-protocol/cli:
- Optimize get-members command - by @vplasencia (bb0b5)
- Optimize get-proofs command - by @vplasencia (0b060)
♻️ Refactoring
- Ignore .next and public folders - by @vplasencia (6afb0)
- @semaphore-protocol/cli:
- Organize inquirer prompts - by @vplasencia (d8ab9)
- Organize get group ids logic - by @vplasencia (93e4a)
- Change cli template names - by @vplasencia (84c1d)
- Update template apps' names - by @cedoor (58de9)
- Add the next-env.d.ts file to gitignore - by @vplasencia (02d13)
- Set the monorepo-ethers template as default when creating a project - by @vplasencia (27ba2)
- Copy the contents of the .env.example file to a new .env file - by @vplasencia (74c2e)
- Rename the cli hardhat template package - by @vplasencia (e38b0)
- Add access public in package.json file - by @vplasencia (abfff)
- Update package names - by @vplasencia (eb997)
- Remove unused code - by @vplasencia (e5cf4)
- Remove unused import statement - by @vplasencia (5dbbd)
- Remove unused code - by @vplasencia (fcaac)
- Rename cli hardhat-nextjs-semaphoreethers template package - by @vplasencia (1c0d1)
- Add yarn.lock file - by @vplasencia (b363c)
- Rename cli hardhat-nextjs-semaphoresubgraph template - by @vplasencia (ee6e1)
View changes on GitHub
v3.5.0
🚀 Features
- @semaphore-protocol/identity: Add new identity secret attribute and getter - by @cedoor (99ea3)
🐞 Bug Fixes
- @semaphore-protocol/data: Set correct nullifier hash parameter - by @cedoor (d36a7)
View changes on GitHub
v3.4.0
📣 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.
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:
- 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.
- 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
- @semaphore-protocol/cli:
- Add support for sepolia network in the cli - by @vplasencia (63666)
- Update get-group command to use sepolia - by @vplasencia (4ddf7)
- Add support for arbitrum goerli - by @cedoor (7c4a2)
- @semaphore-protocol/cli-template-hardhat:
- Add new version of cli-template-hardhat - by @vplasencia (4133a)
- @semaphore-protocol/data:
- @semaphore-protocol/heyauthn:
🐞 Bug Fixes
- @semaphore-protocol/cli: Add admin in get-group when using SemaphoreEthers - by @vplasencia (46417)
♻️ Refactoring
- @semaphore-protocol/cli:
- Organize get-groups command code - by @vplasencia (eefff)
- Remove unused code - by @vplasencia (4ecf2)
- Remove unnecessary code in get-group command - by @vplasencia (716a2)
View changes on GitHub
v3.2.3
No significant changes