Releases: semaphore-protocol/semaphore
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
View changes on GitHub
v3.2.2
🐞 Bug Fixes
- @semaphore-protocol/data: Set correct check for group existence - by @cedoor (7b938)
View changes on GitHub
v3.2.1
No significant changes
View changes on GitHub
v3.2.0
📣 Important news
Testnet networks
We are excited to announce that Semaphore is now available in the following testnet networks: Sepolia, Mumbai and Optimism Goerli. Please, check the contract addresses in our documentation. We will work to deploy the contracts on the mainnets as soon as possible!
New Semaphore package
@semaphore-protocol/subgraph
package has been replaced by @semaphore-protocol/data
, which contains the former subgraph class (now SemaphoreSubgraph
) and a new class (SemaphoreEthers
). SemaphoreEthers
supports all Ethers providers and networks and thus provides devs with a more flexible and simple solution to directly fetch on-chain data, potentially more convenient in the early stages of development.
Please, check out its README file for more information.
PR: #264
Special thanks to @vplasencia for the idea!
New subgraph endpoints
Semaphore discontinued TheGraph Hosting Service and is using TheGraph Studio now. You can find the new endpoints in our subgraph repository. New endpoints for Mumbai and Optimism Goerli are also available!
More security
identity
, group
, proof
) will not have any breaking changes in the future unless there are major bugs.
PR: #262
Special thanks to @vimwitch!
More efforts on packages' size
We know that package size is a key issue in adoption, especially in countries where connectivity is still slow. @semaphore-protocol/identity
package's size has been drastically reduced, decreasing from 1.2 MB to 114.6 kB. Check out the progress on Bundlephobia!
PR: #271
Special thanks to @vimwitch!
Semaphore benchmarks
Semaphore has a new repository to collect benchmarks. Currently there is a simple web page that can be used to test the speed of generating a Semaphore proof in your devices. Try generating a Semaphore proof yourself on https://benchmarks.semaphore.appliedzkp.org!
🚀 Features
- @semaphore-protocol/data:
- @semaphore-protocol/identity:
- @semaphore-protocol/hardhat: add hardhat task to deploy semaphore verifier only - by @shiyingt (97279)
♻️ Refactoring
- @semaphore-protocol/contracts: Change Semaphore__InvalidProof to InvalidProof - by @0xdeenz (dc39c)