- I want to make some improvements on this project
- upgrade login function
- group handling function
- try to make good UI
- upgrade NFT contract for group verification
-
private value
trapdoor
nulifier
- these two secret values are similar to Ethereum private keys and are used to generate Semaphore zero-knowledge proofs and authenticate signals
-
public value
Identity commitment
- identity commitment is similarly to Ethereum addresses
-
generate identites
import { Identity } from "@semaphore-protocol/identity" const { trapdoor, nullifier, commitment } = new Identity()
// solidity contract
mapping(address => mapping(bytes32 => uint)) private users;
function getUserInfo(bytes32 _username) external view returns(uint){
require(users[msg.sender][_username] != 0, "there is no user");
return users[msg.sender][_username];
}
// next.js
const contract = new ethers.Contract(env.FEEDBACK_CONTRACT_ADDRESS, Feedback.abi, signer)
await contract.getUserInfo(formatBytes32String(_name))
- ์๊ธฐ ์ ์๋ commitment ๊ฐ์ด private key ๊ฐ์ธ ์ค ์์์ง๋ง, ์ด๊ฒ public key ๊ฐ์ด์๋ค.
- ๊ทธ๋์ ์ด ๊ฐ์ด ๋ ธ์ถ๋๋๊ฒ ๋ฌธ์ ๊ฐ ๋๋ ์ค ์์์ง๋ง ์๋์๋ค.
- ๊ทธ๋ฌ๋ฉด public ๊ฐ์ ํตํด ๋ณธ์ธ์์ ์ฆ๋ช
ํ๊ฒ ๋๋ฉด login ํ๊ณ ๋ฐ๋ก proof๋ฅผ ๊ฐ๋๋ฐ, ๋น๋ฐ๋ฒํธ ์
๋ ฅ ์ฐฝ์ผ๋ก ์ด๋ํด์ ๋น๋ฐ๋ฒํธ ๊ฐ์ ํ๋ผ๋ฏธํฐ๋ก ๋ฐ์์
new Idenenty('parameter')
๋ฅผ ํตํด ๋์จ ๊ฐ์ setStorageํด์ฃผ๋ฉด ๋ฌธ์ ๊ฐ ํด๊ฒฐ๋ ๊ฒ ๊ฐ๋ค
const identity = new Identity("secret-message")
console.log(identity.toString())
// '["8255d...", "62c41..."]'
'["8255d...", "62c41..."]'
์ด ๊ฐ์ดnew Identity("secret-message")
๊ฐ์ด ๊ฐ์ ๊ฒฝ์ฐ์ ๋๊ฐ๋ค- ๊ทธ๋ฌ๋ฉด ์ด ๊ฐ์ setStorageํด์ ์ฌ์ฉํ๋ฉด
nulifier
,trapdoor
๊ฐ์ proof ํ ๋ ์ฌ์ฉํ ์ ์๋ค
new Identity("secret-message")
์์ ํ๋ผ๋ฏธํฐ๋ก ๋ฐ์ ๊ฐ์ด ๊ฐ์ ๊ฒฝ์ฐ ์ฒ์์ ์์ฑ๋ ๋๋ ๋ค์ ์์ฑํ ๋์ ๊ฐ์ ์ง ์ฆ๋ช ๋์ด์ผํ๋ค- ๊ฐ๋ค๋ฉด mapping ์ ์ ์ฅํ public value๊ฐ joinGroup transaction์ ์๋ช ํ ๋ mapping์ ์ ์ฅ๋์๊ณ , ๊ทธ๋ฃน NFT๋ฅผ ๋ณด์ ํจ์ด ์ฆ๋ช ๋์๊ธฐ ๋๋ฌธ์ ๋ณด์์ด ์ ์ฉ๋๋ค
- ๋ง์ฝ mapping์ ์ ์ฅ๋
commitment
๊ฐ์ด ๋ ธ์ถ๋๋๋ผ๋, ์ฒ์ joinGroupํ ๋ ์ ๋ ฅํnew Identity("secret-message")
๊ฐ์ ์ ์ ๋ณธ์ธ๋ง ์๊ธฐ ๋๋ฌธ์ ์๊ด์ด ์๋ค - ๊ทธ ๊ฐ๊น์ง ์์์ผํ๊ณ , ์๋ช ํ๋ ์ง๊ฐ์ private key๊น์ง ํ์ทจํด์ผ ์ง๊ฐ์ ์ฐ๊ฒฐํด์ ์๋ช ์ ํตํด ์ธ์ฆ๋์ด์ผ password ํ์ด์ง๋ก ์ด๋ํ๋ค