circom是一种用于编写零知识证明的算术电路的语言。 circomlib中给出了mimc的电路,但是没有直接给出mimc合约,需要通过 mimc_gencontract.js来编译,下面记录一下编译步骤。
初始化
truffle init
使用ganache,所以truffle-config.js中端口号设为7545
module.exports = {
networks: {
development: {
host: "127.0.0.1",
port: 7545,
network_id: "*",
}
}
};
添加合约
Hasher.sol
pragma solidity ^0.5.16;
library IMimc {
// Mimc hash函数
function MiMCpe7(uint256 in_x,uint256 in_k) public pure returns(uint256 out_x);
}
contract Hasher {
function getHash(uint256 _x, uint256 _k)public pure returns(uint256){
return IMimc.MiMCpe7(_x, _k);
}
}
添加迁移脚本
需要用到的包用npm提前安装好
从github上将circomlib下载下来放到truffle项目文件夹的平行目录下
2_deploy_mimc.js
const fs