对于SnarkJS (https://github.com/iden3/snarkjs),有一个HTML示例显示了如何使用它们的ES6 javascript库:
<!doctype html>
<html>
<body>
<script src="snarkjs.min.js"> </script>
<script>
async function calculateProof() {
const { proof, publicSignals } =
await snarkjs.groth16.fullProve( { a: 3, b: 11}, "circuit.wasm", "circuit_final.zkey");
</script>
</body>
</html>这个对snarkjs.groth16.FulProve的调用在浏览器中工作得很好。
在Blazor中,我将snarkjs.min.js加载到一个IJSObjectReference (myJSmodule)中,但我不知道如何模拟snarkjs.groth16。类似于:
await myJSmodule.InvokeVoidAsync("snarkjs.groth16.fullProve", args...)但这就产生了
找不到“snarkjs.groth16”.“snarkjs”未定义
编辑:最后,我遇到了两个问题:
发布于 2022-09-02 18:09:41
您可以创建一个helper js模块,该模块导出calculateProof函数:
snarkJsInteropHelper.js
export async function calculateProof() {
const { proof, publicSignals } =
await snarkjs.groth16.fullProve({ a: 3, b: 11 }, "circuit.wasm", "circuit_final.zkey");
}然后在blazor组件中:
protected override async Task OnAfterRenderAsync(bool firstRender)
{
if (firstRender)
{
var module = await JS.InvokeAsync<IJSObjectReference>(
"import", "./snarkJsInteropHelper.js");
await module.InvokeVoidAsync("calculateProof");
}
}https://stackoverflow.com/questions/73586009
复制相似问题