🤖技术对接
ZKSAFE Password 技术对接
准备工作
npm install -g snarkjsnpm install ethersresetPassword() 设置密码
工具方法
//util
async function getProof(pwd, address, nonce, datahash) {
let expiration = parseInt(Date.now() / 1000 + 600)
let chainId = (await provider.getNetwork()).chainId
let fullhash = utils.solidityKeccak256(['uint256','uint256','uint256','uint256'], [expiration, chainId, nonce, datahash])
fullhash = s(b(fullhash).div(8)) //fullhash必须是254位, solidityKeccak256是256位,所以要转换
let input = [stringToHex(pwd), address, fullhash]
let data = await snarkjs.groth16.fullProve({in:input}, "./zk/v1/circuit_js/circuit.wasm", "./zk/v1/circuit_final.zkey")
const vKey = JSON.parse(fs.readFileSync("./zk/v1/verification_key.json"))
const res = await snarkjs.groth16.verify(vKey, data.publicSignals, data.proof)
if (res === true) {
console.log("Verification OK")
let pwdhash = data.publicSignals[0]
let fullhash = data.publicSignals[1]
let allhash = data.publicSignals[2]
let proof = [
BigNumber.from(data.proof.pi_a[0]).toHexString(),
BigNumber.from(data.proof.pi_a[1]).toHexString(),
BigNumber.from(data.proof.pi_b[0][1]).toHexString(),
BigNumber.from(data.proof.pi_b[0][0]).toHexString(),
BigNumber.from(data.proof.pi_b[1][1]).toHexString(),
BigNumber.from(data.proof.pi_b[1][0]).toHexString(),
BigNumber.from(data.proof.pi_c[0]).toHexString(),
BigNumber.from(data.proof.pi_c[1]).toHexString()
]
return {proof, pwdhash, address, expiration, chainId, nonce, datahash, fullhash, allhash}
} else {
console.log("Invalid proof")
}
}
初始化密码
修改密码
verify() 校验密码
Last updated