# Snapshot report for `src/zip-hardhat.test.ts`
The actual snapshot is saved in `zip-hardhat.test.ts.snap`.
Generated by [AVA](https://avajs.dev).
## erc7984 basic
> Snapshot 1
[
`// SPDX-License-Identifier: MIT␊
// Compatible with OpenZeppelin Confidential Contracts ^0.3.1␊
pragma solidity ^0.8.27;␊
␊
import {ZamaEthereumConfig} from "@fhevm/solidity/config/ZamaConfig.sol";␊
import {euint64} from "@fhevm/solidity/lib/FHE.sol";␊
import {ERC7984} from "@openzeppelin/confidential-contracts/token/ERC7984/ERC7984.sol";␊
␊
contract MyToken is ERC7984, ZamaEthereumConfig {␊
constructor() ERC7984("My Token", "MTK", "https://example.com") {}␊
}␊
`,
`import { HardhatUserConfig } from "hardhat/config";␊
import "@nomicfoundation/hardhat-toolbox";␊
import "@fhevm/hardhat-plugin";␊
␊
␊
const config: HardhatUserConfig = {␊
solidity: {␊
version: "0.8.27",␊
settings: {␊
evmVersion: 'cancun',␊
optimizer: {␊
enabled: true,␊
},␊
},␊
},␊
};␊
␊
export default config;␊
`,
`{␊
"name": "hardhat-sample",␊
"version": "0.0.1",␊
"description": "",␊
"main": "index.js",␊
"scripts": {␊
"test": "hardhat test"␊
},␊
"author": "",␊
"license": "MIT",␊
"devDependencies": {␊
"@openzeppelin/contracts": "^5.4.0",␊
"@openzeppelin/confidential-contracts": "^0.3.1",␊
"@fhevm/hardhat-plugin": "^0.3.0-1",␊
"@fhevm/solidity": "^0.9.1",␊
"@zama-fhe/relayer-sdk": "0.3.0-5",␊
"@nomicfoundation/hardhat-toolbox": "^6.1.0",␊
"hardhat": "^2.16.1"␊
}␊
}`,
`import { buildModule } from "@nomicfoundation/hardhat-ignition/modules";␊
␊
export default buildModule("MyTokenModule", (m) => {␊
␊
␊
const myToken = m.contract("MyToken", []);␊
␊
return { myToken };␊
});␊
`,
`import { expect } from "chai";␊
import { ethers, fhevm } from "hardhat";␊
␊
describe("MyToken", function () {␊
it("Test contract", async function () {␊
const ContractFactory = await ethers.getContractFactory("MyToken");␊
␊
const instance = await ContractFactory.deploy();␊
await instance.waitForDeployment();␊
});␊
});␊
`,
]
## erc7984 full
> Snapshot 1
[
`// SPDX-License-Identifier: AGPL-3.0-only␊
// Compatible with OpenZeppelin Contracts ^5.5.0 and Confidential Contracts ^0.3.1␊
pragma solidity ^0.8.27;␊
␊
import {ZamaEthereumConfig} from "@fhevm/solidity/config/ZamaConfig.sol";␊
import {FHE, euint64} from "@fhevm/solidity/lib/FHE.sol";␊
import {ERC7984} from "@openzeppelin/confidential-contracts/token/ERC7984/ERC7984.sol";␊
import {ERC7984ERC20Wrapper} from "@openzeppelin/confidential-contracts/token/ERC7984/extensions/ERC7984ERC20Wrapper.sol";␊
import {ERC7984Votes} from "@openzeppelin/confidential-contracts/token/ERC7984/extensions/ERC7984Votes.sol";␊
import {AccessControl} from "@openzeppelin/contracts/access/AccessControl.sol";␊
import {IERC20} from "@openzeppelin/contracts/interfaces/IERC20.sol";␊
import {EIP712} from "@openzeppelin/contracts/utils/cryptography/EIP712.sol";␊
import {SafeCast} from "@openzeppelin/contracts/utils/math/SafeCast.sol";␊
␊
contract MyToken is ERC7984, ZamaEthereumConfig, ERC7984ERC20Wrapper, EIP712, ERC7984Votes, AccessControl {␊
bytes32 public constant HANDLE_VIEWER_ROLE = keccak256("HANDLE_VIEWER_ROLE");␊
␊
constructor(address recipient, IERC20 underlying, address defaultAdmin, address handleViewer)␊
ERC7984("My Token", "MTK", "https://example.com")␊
ERC7984ERC20Wrapper(underlying)␊
EIP712("My Token", "1")␊
{␊
_mint(recipient, FHE.asEuint64(SafeCast.toUint64(2000 * 10 ** decimals())));␊
_grantRole(DEFAULT_ADMIN_ROLE, defaultAdmin);␊
_grantRole(HANDLE_VIEWER_ROLE, handleViewer);␊
}␊
␊
function clock() public view override returns (uint48) {␊
return uint48(block.timestamp);␊
}␊
␊
// solhint-disable-next-line func-name-mixedcase␊
function CLOCK_MODE() public pure override returns (string memory) {␊
return "mode=timestamp";␊
}␊
␊
function _validateHandleAllowance(bytes32 handle)␊
internal␊
view␊
override␊
onlyRole(HANDLE_VIEWER_ROLE)␊
{}␊
␊
// The following functions are overrides required by Solidity.␊
␊
function supportsInterface(bytes4 interfaceId)␊
public␊
view␊
override(ERC7984, AccessControl)␊
returns (bool)␊
{␊
return super.supportsInterface(interfaceId);␊
}␊
␊
function _update(address from, address to, euint64 amount)␊
internal␊
override(ERC7984, ERC7984ERC20Wrapper, ERC7984Votes)␊
returns (euint64 transferred)␊
{␊
return super._update(from, to, amount);␊
}␊
␊
function confidentialTotalSupply()␊
public␊
view␊
override(ERC7984, ERC7984Votes)␊
returns (euint64)␊
{␊
return super.confidentialTotalSupply();␊
}␊
␊
function decimals()␊
public␊
view␊
override(ERC7984, ERC7984ERC20Wrapper)␊
returns (uint8)␊
{␊
return super.decimals();␊
}␊
}␊
`,
`import { HardhatUserConfig } from "hardhat/config";␊
import "@nomicfoundation/hardhat-toolbox";␊
import "@fhevm/hardhat-plugin";␊
␊
␊
const config: HardhatUserConfig = {␊
solidity: {␊
version: "0.8.27",␊
settings: {␊
evmVersion: 'cancun',␊
optimizer: {␊
enabled: true,␊
},␊
},␊
},␊
};␊
␊
export default config;␊
`,
`{␊
"name": "hardhat-sample",␊
"version": "0.0.1",␊
"description": "",␊
"main": "index.js",␊
"scripts": {␊
"test": "hardhat test"␊
},␊
"author": "",␊
"license": "AGPL-3.0-only",␊
"devDependencies": {␊
"@openzeppelin/contracts": "^5.4.0",␊
"@openzeppelin/confidential-contracts": "^0.3.1",␊
"@fhevm/hardhat-plugin": "^0.3.0-1",␊
"@fhevm/solidity": "^0.9.1",␊
"@zama-fhe/relayer-sdk": "0.3.0-5",␊
"@nomicfoundation/hardhat-toolbox": "^6.1.0",␊
"hardhat": "^2.16.1"␊
}␊
}`,
`import { buildModule } from "@nomicfoundation/hardhat-ignition/modules";␊
␊
export default buildModule("MyTokenModule", (m) => {␊
␊
// TODO: Set values for the constructor arguments below␊
const myToken = m.contract("MyToken", [recipient, underlying, defaultAdmin, handleViewer]);␊
␊
return { myToken };␊
});␊
`,
`import { expect } from "chai";␊
import { ethers, fhevm } from "hardhat";␊
␊
describe("MyToken", function () {␊
it("Test contract", async function () {␊
const ContractFactory = await ethers.getContractFactory("MyToken");␊
␊
const recipient = (await ethers.getSigners())[0].address;␊
// TODO: Set the following constructor argument␊
// const underlying = ...;␊
const defaultAdmin = (await ethers.getSigners())[2].address;␊
const handleViewer = (await ethers.getSigners())[3].address;␊
␊
// TODO: Uncomment the below when the missing constructor arguments are set above␊
// const instance = await ContractFactory.deploy(recipient, underlying, defaultAdmin, handleViewer);␊
// await instance.waitForDeployment();␊
});␊
});␊
`,
]