Added PermitTornado Contract

This commit is contained in:
Tornado Contrib 2024-10-13 10:25:29 +00:00
parent cc57528ae1
commit eb805332de
Signed by: tornadocontrib
GPG Key ID: 60B4DF1A076C64B1
56 changed files with 8599 additions and 2574 deletions

@ -30,7 +30,7 @@ contract ERC20Tornado is Tornado {
token = _token;
}
function _processDeposit() internal override {
function _processDeposit() internal virtual override {
require(msg.value == 0, "ETH value is supposed to be 0 for ERC20 instance");
token.safeTransferFrom(msg.sender, address(this), denomination);
}

@ -0,0 +1,81 @@
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.20;
import { ISignatureTransfer } from './interfaces/ISignatureTransfer.sol';
import { IVerifier, IHasher, IERC20, SafeERC20, ERC20Tornado } from './ERC20Tornado.sol';
/**
* Extends ERC20Tornado with ERC-2612 and TornadoProxyLight Router contract support
*
* For new chains deploy permit2 contract first using the tool (present at foundry https://github.com/Arachnid/deterministic-deployment-proxy)
*/
contract PermitTornado is ERC20Tornado {
using SafeERC20 for IERC20;
// https://docs.uniswap.org/contracts/v3/reference/deployments/ethereum-deployments
ISignatureTransfer public constant permit2 = ISignatureTransfer(0x000000000022D473030F116dDEE9F6B43aC78BA3);
address public immutable tornadoProxyLight;
constructor(
IVerifier _verifier,
IHasher _hasher,
uint256 _denomination,
uint32 _merkleTreeHeight,
IERC20 _token,
address _tornadoProxyLight
) ERC20Tornado(_verifier, _hasher, _denomination, _merkleTreeHeight, _token) {
tornadoProxyLight = _tornadoProxyLight;
}
function _processDeposit() internal virtual override {
if (msg.sender == tornadoProxyLight) {
token.safeTransferFrom(tx.origin, address(this), denomination);
return;
}
super._processDeposit();
}
function addCommitment(bytes32 _commitment) internal {
require(!commitments[_commitment], "The commitment has been submitted");
uint32 insertedIndex = _insert(_commitment);
commitments[_commitment] = true;
emit Deposit(_commitment, insertedIndex, block.timestamp);
}
function depositWithPermit(
bytes32 commitment,
address owner,
uint256 deadline,
uint8 v,
bytes32 r,
bytes32 s
) external nonReentrant {
token.permit(owner, address(this), denomination, deadline, v, r, s);
token.safeTransferFrom(owner, address(this), denomination);
addCommitment(commitment);
}
function depositWithPermit2(
bytes32 commitment,
address owner,
ISignatureTransfer.PermitTransferFrom calldata _permit,
bytes calldata _signature
) external nonReentrant {
permit2.permitTransferFrom(
_permit,
ISignatureTransfer.SignatureTransferDetails({
to: address(this),
requestedAmount: denomination
}),
owner,
_signature
);
addCommitment(commitment);
}
}

@ -0,0 +1,136 @@
// SPDX-License-Identifier: MIT
// Copied from https://github.com/Uniswap/permit2/blob/main/src/interfaces/ISignatureTransfer.sol
pragma solidity ^0.8.20;
/// @title SignatureTransfer
/// @notice Handles ERC20 token transfers through signature based actions
/// @dev Requires user's token approval on the Permit2 contract
interface ISignatureTransfer {
/// @notice Thrown when the requested amount for a transfer is larger than the permissioned amount
/// @param maxAmount The maximum amount a spender can request to transfer
error InvalidAmount(uint256 maxAmount);
/// @notice Thrown when the number of tokens permissioned to a spender does not match the number of tokens being transferred
/// @dev If the spender does not need to transfer the number of tokens permitted, the spender can request amount 0 to be transferred
error LengthMismatch();
/// @notice Emits an event when the owner successfully invalidates an unordered nonce.
event UnorderedNonceInvalidation(address indexed owner, uint256 word, uint256 mask);
/// @notice The token and amount details for a transfer signed in the permit transfer signature
struct TokenPermissions {
// ERC20 token address
address token;
// the maximum amount that can be spent
uint256 amount;
}
/// @notice The signed permit message for a single token transfer
struct PermitTransferFrom {
TokenPermissions permitted;
// a unique value for every token owner's signature to prevent signature replays
uint256 nonce;
// deadline on the permit signature
uint256 deadline;
}
/// @notice Specifies the recipient address and amount for batched transfers.
/// @dev Recipients and amounts correspond to the index of the signed token permissions array.
/// @dev Reverts if the requested amount is greater than the permitted signed amount.
struct SignatureTransferDetails {
// recipient address
address to;
// spender requested amount
uint256 requestedAmount;
}
/// @notice Used to reconstruct the signed permit message for multiple token transfers
/// @dev Do not need to pass in spender address as it is required that it is msg.sender
/// @dev Note that a user still signs over a spender address
struct PermitBatchTransferFrom {
// the tokens and corresponding amounts permitted for a transfer
TokenPermissions[] permitted;
// a unique value for every token owner's signature to prevent signature replays
uint256 nonce;
// deadline on the permit signature
uint256 deadline;
}
function DOMAIN_SEPARATOR() external view returns (bytes32);
/// @notice A map from token owner address and a caller specified word index to a bitmap. Used to set bits in the bitmap to prevent against signature replay protection
/// @dev Uses unordered nonces so that permit messages do not need to be spent in a certain order
/// @dev The mapping is indexed first by the token owner, then by an index specified in the nonce
/// @dev It returns a uint256 bitmap
/// @dev The index, or wordPosition is capped at type(uint248).max
function nonceBitmap(address, uint256) external view returns (uint256);
/// @notice Transfers a token using a signed permit message
/// @dev Reverts if the requested amount is greater than the permitted signed amount
/// @param permit The permit data signed over by the owner
/// @param owner The owner of the tokens to transfer
/// @param transferDetails The spender's requested transfer details for the permitted token
/// @param signature The signature to verify
function permitTransferFrom(
PermitTransferFrom memory permit,
SignatureTransferDetails calldata transferDetails,
address owner,
bytes calldata signature
) external;
/// @notice Transfers a token using a signed permit message
/// @notice Includes extra data provided by the caller to verify signature over
/// @dev The witness type string must follow EIP712 ordering of nested structs and must include the TokenPermissions type definition
/// @dev Reverts if the requested amount is greater than the permitted signed amount
/// @param permit The permit data signed over by the owner
/// @param owner The owner of the tokens to transfer
/// @param transferDetails The spender's requested transfer details for the permitted token
/// @param witness Extra data to include when checking the user signature
/// @param witnessTypeString The EIP-712 type definition for remaining string stub of the typehash
/// @param signature The signature to verify
function permitWitnessTransferFrom(
PermitTransferFrom memory permit,
SignatureTransferDetails calldata transferDetails,
address owner,
bytes32 witness,
string calldata witnessTypeString,
bytes calldata signature
) external;
/// @notice Transfers multiple tokens using a signed permit message
/// @param permit The permit data signed over by the owner
/// @param owner The owner of the tokens to transfer
/// @param transferDetails Specifies the recipient and requested amount for the token transfer
/// @param signature The signature to verify
function permitTransferFrom(
PermitBatchTransferFrom memory permit,
SignatureTransferDetails[] calldata transferDetails,
address owner,
bytes calldata signature
) external;
/// @notice Transfers multiple tokens using a signed permit message
/// @dev The witness type string must follow EIP712 ordering of nested structs and must include the TokenPermissions type definition
/// @notice Includes extra data provided by the caller to verify signature over
/// @param permit The permit data signed over by the owner
/// @param owner The owner of the tokens to transfer
/// @param transferDetails Specifies the recipient and requested amount for the token transfer
/// @param witness Extra data to include when checking the user signature
/// @param witnessTypeString The EIP-712 type definition for remaining string stub of the typehash
/// @param signature The signature to verify
function permitWitnessTransferFrom(
PermitBatchTransferFrom memory permit,
SignatureTransferDetails[] calldata transferDetails,
address owner,
bytes32 witness,
string calldata witnessTypeString,
bytes calldata signature
) external;
/// @notice Invalidates the bits specified in mask for the bitmap at the word position
/// @dev The wordPos is maxed at type(uint248).max
/// @param wordPos A number to index the nonceBitmap at
/// @param mask A bitmap masked against msg.sender's current bitmap at the word position
function invalidateUnorderedNonces(uint256 wordPos, uint256 mask) external;
}

@ -0,0 +1,26 @@
// SPDX-License-Identifier: MIT
pragma solidity ^0.6.2;
/**
* @title Singleton Factory (EIP-2470)
* @notice Exposes CREATE2 (EIP-1014) to deploy bytecode on deterministic addresses based on initialization code and salt.
* @author Ricardo Guilherme Schmidt (Status Research & Development GmbH)
*/
contract SingletonFactory {
/**
* @notice Deploys `_initCode` using `_salt` for defining the deterministic address.
* @param _initCode Initialization code.
* @param _salt Arbitrary value to modify resulting address.
* @return createdContract Created contract address.
*/
function deploy(bytes memory _initCode, bytes32 _salt)
public
returns (address payable createdContract)
{
assembly {
createdContract := create2(0, add(_initCode, 0x20), mload(_initCode), _salt)
}
}
}

@ -0,0 +1,290 @@
import type { BaseContract, BigNumberish, BytesLike, FunctionFragment, Result, Interface, EventFragment, AddressLike, ContractRunner, ContractMethod, Listener } from "ethers";
import type { TypedContractEvent, TypedDeferredTopicFilter, TypedEventLog, TypedLogDescription, TypedListener, TypedContractMethod } from "../../common";
export declare namespace ISignatureTransfer {
type TokenPermissionsStruct = {
token: AddressLike;
amount: BigNumberish;
};
type TokenPermissionsStructOutput = [token: string, amount: bigint] & {
token: string;
amount: bigint;
};
type PermitTransferFromStruct = {
permitted: ISignatureTransfer.TokenPermissionsStruct;
nonce: BigNumberish;
deadline: BigNumberish;
};
type PermitTransferFromStructOutput = [
permitted: ISignatureTransfer.TokenPermissionsStructOutput,
nonce: bigint,
deadline: bigint
] & {
permitted: ISignatureTransfer.TokenPermissionsStructOutput;
nonce: bigint;
deadline: bigint;
};
}
export interface PermitTornadoInterface extends Interface {
getFunction(nameOrSignature: "FIELD_SIZE" | "ROOT_HISTORY_SIZE" | "ZERO_VALUE" | "commitments" | "currentRootIndex" | "denomination" | "deposit" | "depositWithPermit" | "depositWithPermit2" | "filledSubtrees" | "getLastRoot" | "hashLeftRight" | "hasher" | "isKnownRoot" | "isSpent" | "isSpentArray" | "levels" | "nextIndex" | "nullifierHashes" | "permit2" | "roots" | "token" | "tornadoProxyLight" | "verifier" | "withdraw" | "zeros"): FunctionFragment;
getEvent(nameOrSignatureOrTopic: "Deposit" | "Withdrawal"): EventFragment;
encodeFunctionData(functionFragment: "FIELD_SIZE", values?: undefined): string;
encodeFunctionData(functionFragment: "ROOT_HISTORY_SIZE", values?: undefined): string;
encodeFunctionData(functionFragment: "ZERO_VALUE", values?: undefined): string;
encodeFunctionData(functionFragment: "commitments", values: [BytesLike]): string;
encodeFunctionData(functionFragment: "currentRootIndex", values?: undefined): string;
encodeFunctionData(functionFragment: "denomination", values?: undefined): string;
encodeFunctionData(functionFragment: "deposit", values: [BytesLike]): string;
encodeFunctionData(functionFragment: "depositWithPermit", values: [
BytesLike,
AddressLike,
BigNumberish,
BigNumberish,
BytesLike,
BytesLike
]): string;
encodeFunctionData(functionFragment: "depositWithPermit2", values: [
BytesLike,
AddressLike,
ISignatureTransfer.PermitTransferFromStruct,
BytesLike
]): string;
encodeFunctionData(functionFragment: "filledSubtrees", values: [BigNumberish]): string;
encodeFunctionData(functionFragment: "getLastRoot", values?: undefined): string;
encodeFunctionData(functionFragment: "hashLeftRight", values: [AddressLike, BytesLike, BytesLike]): string;
encodeFunctionData(functionFragment: "hasher", values?: undefined): string;
encodeFunctionData(functionFragment: "isKnownRoot", values: [BytesLike]): string;
encodeFunctionData(functionFragment: "isSpent", values: [BytesLike]): string;
encodeFunctionData(functionFragment: "isSpentArray", values: [BytesLike[]]): string;
encodeFunctionData(functionFragment: "levels", values?: undefined): string;
encodeFunctionData(functionFragment: "nextIndex", values?: undefined): string;
encodeFunctionData(functionFragment: "nullifierHashes", values: [BytesLike]): string;
encodeFunctionData(functionFragment: "permit2", values?: undefined): string;
encodeFunctionData(functionFragment: "roots", values: [BigNumberish]): string;
encodeFunctionData(functionFragment: "token", values?: undefined): string;
encodeFunctionData(functionFragment: "tornadoProxyLight", values?: undefined): string;
encodeFunctionData(functionFragment: "verifier", values?: undefined): string;
encodeFunctionData(functionFragment: "withdraw", values: [
BytesLike,
BytesLike,
BytesLike,
AddressLike,
AddressLike,
BigNumberish,
BigNumberish
]): string;
encodeFunctionData(functionFragment: "zeros", values: [BigNumberish]): string;
decodeFunctionResult(functionFragment: "FIELD_SIZE", data: BytesLike): Result;
decodeFunctionResult(functionFragment: "ROOT_HISTORY_SIZE", data: BytesLike): Result;
decodeFunctionResult(functionFragment: "ZERO_VALUE", data: BytesLike): Result;
decodeFunctionResult(functionFragment: "commitments", data: BytesLike): Result;
decodeFunctionResult(functionFragment: "currentRootIndex", data: BytesLike): Result;
decodeFunctionResult(functionFragment: "denomination", data: BytesLike): Result;
decodeFunctionResult(functionFragment: "deposit", data: BytesLike): Result;
decodeFunctionResult(functionFragment: "depositWithPermit", data: BytesLike): Result;
decodeFunctionResult(functionFragment: "depositWithPermit2", data: BytesLike): Result;
decodeFunctionResult(functionFragment: "filledSubtrees", data: BytesLike): Result;
decodeFunctionResult(functionFragment: "getLastRoot", data: BytesLike): Result;
decodeFunctionResult(functionFragment: "hashLeftRight", data: BytesLike): Result;
decodeFunctionResult(functionFragment: "hasher", data: BytesLike): Result;
decodeFunctionResult(functionFragment: "isKnownRoot", data: BytesLike): Result;
decodeFunctionResult(functionFragment: "isSpent", data: BytesLike): Result;
decodeFunctionResult(functionFragment: "isSpentArray", data: BytesLike): Result;
decodeFunctionResult(functionFragment: "levels", data: BytesLike): Result;
decodeFunctionResult(functionFragment: "nextIndex", data: BytesLike): Result;
decodeFunctionResult(functionFragment: "nullifierHashes", data: BytesLike): Result;
decodeFunctionResult(functionFragment: "permit2", data: BytesLike): Result;
decodeFunctionResult(functionFragment: "roots", data: BytesLike): Result;
decodeFunctionResult(functionFragment: "token", data: BytesLike): Result;
decodeFunctionResult(functionFragment: "tornadoProxyLight", data: BytesLike): Result;
decodeFunctionResult(functionFragment: "verifier", data: BytesLike): Result;
decodeFunctionResult(functionFragment: "withdraw", data: BytesLike): Result;
decodeFunctionResult(functionFragment: "zeros", data: BytesLike): Result;
}
export declare namespace DepositEvent {
type InputTuple = [
commitment: BytesLike,
leafIndex: BigNumberish,
timestamp: BigNumberish
];
type OutputTuple = [
commitment: string,
leafIndex: bigint,
timestamp: bigint
];
interface OutputObject {
commitment: string;
leafIndex: bigint;
timestamp: bigint;
}
type Event = TypedContractEvent<InputTuple, OutputTuple, OutputObject>;
type Filter = TypedDeferredTopicFilter<Event>;
type Log = TypedEventLog<Event>;
type LogDescription = TypedLogDescription<Event>;
}
export declare namespace WithdrawalEvent {
type InputTuple = [
to: AddressLike,
nullifierHash: BytesLike,
relayer: AddressLike,
fee: BigNumberish
];
type OutputTuple = [
to: string,
nullifierHash: string,
relayer: string,
fee: bigint
];
interface OutputObject {
to: string;
nullifierHash: string;
relayer: string;
fee: bigint;
}
type Event = TypedContractEvent<InputTuple, OutputTuple, OutputObject>;
type Filter = TypedDeferredTopicFilter<Event>;
type Log = TypedEventLog<Event>;
type LogDescription = TypedLogDescription<Event>;
}
export interface PermitTornado extends BaseContract {
connect(runner?: ContractRunner | null): PermitTornado;
waitForDeployment(): Promise<this>;
interface: PermitTornadoInterface;
queryFilter<TCEvent extends TypedContractEvent>(event: TCEvent, fromBlockOrBlockhash?: string | number | undefined, toBlock?: string | number | undefined): Promise<Array<TypedEventLog<TCEvent>>>;
queryFilter<TCEvent extends TypedContractEvent>(filter: TypedDeferredTopicFilter<TCEvent>, fromBlockOrBlockhash?: string | number | undefined, toBlock?: string | number | undefined): Promise<Array<TypedEventLog<TCEvent>>>;
on<TCEvent extends TypedContractEvent>(event: TCEvent, listener: TypedListener<TCEvent>): Promise<this>;
on<TCEvent extends TypedContractEvent>(filter: TypedDeferredTopicFilter<TCEvent>, listener: TypedListener<TCEvent>): Promise<this>;
once<TCEvent extends TypedContractEvent>(event: TCEvent, listener: TypedListener<TCEvent>): Promise<this>;
once<TCEvent extends TypedContractEvent>(filter: TypedDeferredTopicFilter<TCEvent>, listener: TypedListener<TCEvent>): Promise<this>;
listeners<TCEvent extends TypedContractEvent>(event: TCEvent): Promise<Array<TypedListener<TCEvent>>>;
listeners(eventName?: string): Promise<Array<Listener>>;
removeAllListeners<TCEvent extends TypedContractEvent>(event?: TCEvent): Promise<this>;
FIELD_SIZE: TypedContractMethod<[], [bigint], "view">;
ROOT_HISTORY_SIZE: TypedContractMethod<[], [bigint], "view">;
ZERO_VALUE: TypedContractMethod<[], [bigint], "view">;
commitments: TypedContractMethod<[arg0: BytesLike], [boolean], "view">;
currentRootIndex: TypedContractMethod<[], [bigint], "view">;
denomination: TypedContractMethod<[], [bigint], "view">;
deposit: TypedContractMethod<[_commitment: BytesLike], [void], "payable">;
depositWithPermit: TypedContractMethod<[
commitment: BytesLike,
owner: AddressLike,
deadline: BigNumberish,
v: BigNumberish,
r: BytesLike,
s: BytesLike
], [
void
], "nonpayable">;
depositWithPermit2: TypedContractMethod<[
commitment: BytesLike,
owner: AddressLike,
_permit: ISignatureTransfer.PermitTransferFromStruct,
_signature: BytesLike
], [
void
], "nonpayable">;
filledSubtrees: TypedContractMethod<[arg0: BigNumberish], [string], "view">;
getLastRoot: TypedContractMethod<[], [string], "view">;
hashLeftRight: TypedContractMethod<[
_hasher: AddressLike,
_left: BytesLike,
_right: BytesLike
], [
string
], "view">;
hasher: TypedContractMethod<[], [string], "view">;
isKnownRoot: TypedContractMethod<[_root: BytesLike], [boolean], "view">;
isSpent: TypedContractMethod<[_nullifierHash: BytesLike], [boolean], "view">;
isSpentArray: TypedContractMethod<[
_nullifierHashes: BytesLike[]
], [
boolean[]
], "view">;
levels: TypedContractMethod<[], [bigint], "view">;
nextIndex: TypedContractMethod<[], [bigint], "view">;
nullifierHashes: TypedContractMethod<[arg0: BytesLike], [boolean], "view">;
permit2: TypedContractMethod<[], [string], "view">;
roots: TypedContractMethod<[arg0: BigNumberish], [string], "view">;
token: TypedContractMethod<[], [string], "view">;
tornadoProxyLight: TypedContractMethod<[], [string], "view">;
verifier: TypedContractMethod<[], [string], "view">;
withdraw: TypedContractMethod<[
_proof: BytesLike,
_root: BytesLike,
_nullifierHash: BytesLike,
_recipient: AddressLike,
_relayer: AddressLike,
_fee: BigNumberish,
_refund: BigNumberish
], [
void
], "payable">;
zeros: TypedContractMethod<[arg0: BigNumberish], [string], "view">;
getFunction<T extends ContractMethod = ContractMethod>(key: string | FunctionFragment): T;
getFunction(nameOrSignature: "FIELD_SIZE"): TypedContractMethod<[], [bigint], "view">;
getFunction(nameOrSignature: "ROOT_HISTORY_SIZE"): TypedContractMethod<[], [bigint], "view">;
getFunction(nameOrSignature: "ZERO_VALUE"): TypedContractMethod<[], [bigint], "view">;
getFunction(nameOrSignature: "commitments"): TypedContractMethod<[arg0: BytesLike], [boolean], "view">;
getFunction(nameOrSignature: "currentRootIndex"): TypedContractMethod<[], [bigint], "view">;
getFunction(nameOrSignature: "denomination"): TypedContractMethod<[], [bigint], "view">;
getFunction(nameOrSignature: "deposit"): TypedContractMethod<[_commitment: BytesLike], [void], "payable">;
getFunction(nameOrSignature: "depositWithPermit"): TypedContractMethod<[
commitment: BytesLike,
owner: AddressLike,
deadline: BigNumberish,
v: BigNumberish,
r: BytesLike,
s: BytesLike
], [
void
], "nonpayable">;
getFunction(nameOrSignature: "depositWithPermit2"): TypedContractMethod<[
commitment: BytesLike,
owner: AddressLike,
_permit: ISignatureTransfer.PermitTransferFromStruct,
_signature: BytesLike
], [
void
], "nonpayable">;
getFunction(nameOrSignature: "filledSubtrees"): TypedContractMethod<[arg0: BigNumberish], [string], "view">;
getFunction(nameOrSignature: "getLastRoot"): TypedContractMethod<[], [string], "view">;
getFunction(nameOrSignature: "hashLeftRight"): TypedContractMethod<[
_hasher: AddressLike,
_left: BytesLike,
_right: BytesLike
], [
string
], "view">;
getFunction(nameOrSignature: "hasher"): TypedContractMethod<[], [string], "view">;
getFunction(nameOrSignature: "isKnownRoot"): TypedContractMethod<[_root: BytesLike], [boolean], "view">;
getFunction(nameOrSignature: "isSpent"): TypedContractMethod<[_nullifierHash: BytesLike], [boolean], "view">;
getFunction(nameOrSignature: "isSpentArray"): TypedContractMethod<[_nullifierHashes: BytesLike[]], [boolean[]], "view">;
getFunction(nameOrSignature: "levels"): TypedContractMethod<[], [bigint], "view">;
getFunction(nameOrSignature: "nextIndex"): TypedContractMethod<[], [bigint], "view">;
getFunction(nameOrSignature: "nullifierHashes"): TypedContractMethod<[arg0: BytesLike], [boolean], "view">;
getFunction(nameOrSignature: "permit2"): TypedContractMethod<[], [string], "view">;
getFunction(nameOrSignature: "roots"): TypedContractMethod<[arg0: BigNumberish], [string], "view">;
getFunction(nameOrSignature: "token"): TypedContractMethod<[], [string], "view">;
getFunction(nameOrSignature: "tornadoProxyLight"): TypedContractMethod<[], [string], "view">;
getFunction(nameOrSignature: "verifier"): TypedContractMethod<[], [string], "view">;
getFunction(nameOrSignature: "withdraw"): TypedContractMethod<[
_proof: BytesLike,
_root: BytesLike,
_nullifierHash: BytesLike,
_recipient: AddressLike,
_relayer: AddressLike,
_fee: BigNumberish,
_refund: BigNumberish
], [
void
], "payable">;
getFunction(nameOrSignature: "zeros"): TypedContractMethod<[arg0: BigNumberish], [string], "view">;
getEvent(key: "Deposit"): TypedContractEvent<DepositEvent.InputTuple, DepositEvent.OutputTuple, DepositEvent.OutputObject>;
getEvent(key: "Withdrawal"): TypedContractEvent<WithdrawalEvent.InputTuple, WithdrawalEvent.OutputTuple, WithdrawalEvent.OutputObject>;
filters: {
"Deposit(bytes32,uint32,uint256)": TypedContractEvent<DepositEvent.InputTuple, DepositEvent.OutputTuple, DepositEvent.OutputObject>;
Deposit: TypedContractEvent<DepositEvent.InputTuple, DepositEvent.OutputTuple, DepositEvent.OutputObject>;
"Withdrawal(address,bytes32,address,uint256)": TypedContractEvent<WithdrawalEvent.InputTuple, WithdrawalEvent.OutputTuple, WithdrawalEvent.OutputObject>;
Withdrawal: TypedContractEvent<WithdrawalEvent.InputTuple, WithdrawalEvent.OutputTuple, WithdrawalEvent.OutputObject>;
};
}

@ -11,5 +11,6 @@ export type { interfaces };
export type { ERC20Tornado } from "./ERC20Tornado";
export type { ETHTornado } from "./ETHTornado";
export type { Echoer } from "./Echoer";
export type { PermitTornado } from "./PermitTornado";
export type { Verifier } from "./Verifier";
export type { CTornado } from "./CTornado";

@ -0,0 +1,228 @@
import type { BaseContract, BigNumberish, BytesLike, FunctionFragment, Result, Interface, EventFragment, AddressLike, ContractRunner, ContractMethod, Listener } from "ethers";
import type { TypedContractEvent, TypedDeferredTopicFilter, TypedEventLog, TypedLogDescription, TypedListener, TypedContractMethod } from "../../../common";
export declare namespace ISignatureTransfer {
type TokenPermissionsStruct = {
token: AddressLike;
amount: BigNumberish;
};
type TokenPermissionsStructOutput = [token: string, amount: bigint] & {
token: string;
amount: bigint;
};
type PermitTransferFromStruct = {
permitted: ISignatureTransfer.TokenPermissionsStruct;
nonce: BigNumberish;
deadline: BigNumberish;
};
type PermitTransferFromStructOutput = [
permitted: ISignatureTransfer.TokenPermissionsStructOutput,
nonce: bigint,
deadline: bigint
] & {
permitted: ISignatureTransfer.TokenPermissionsStructOutput;
nonce: bigint;
deadline: bigint;
};
type SignatureTransferDetailsStruct = {
to: AddressLike;
requestedAmount: BigNumberish;
};
type SignatureTransferDetailsStructOutput = [
to: string,
requestedAmount: bigint
] & {
to: string;
requestedAmount: bigint;
};
type PermitBatchTransferFromStruct = {
permitted: ISignatureTransfer.TokenPermissionsStruct[];
nonce: BigNumberish;
deadline: BigNumberish;
};
type PermitBatchTransferFromStructOutput = [
permitted: ISignatureTransfer.TokenPermissionsStructOutput[],
nonce: bigint,
deadline: bigint
] & {
permitted: ISignatureTransfer.TokenPermissionsStructOutput[];
nonce: bigint;
deadline: bigint;
};
}
export interface ISignatureTransferInterface extends Interface {
getFunction(nameOrSignature: "DOMAIN_SEPARATOR" | "invalidateUnorderedNonces" | "nonceBitmap" | "permitTransferFrom(((address,uint256),uint256,uint256),(address,uint256),address,bytes)" | "permitTransferFrom(((address,uint256)[],uint256,uint256),(address,uint256)[],address,bytes)" | "permitWitnessTransferFrom(((address,uint256),uint256,uint256),(address,uint256),address,bytes32,string,bytes)" | "permitWitnessTransferFrom(((address,uint256)[],uint256,uint256),(address,uint256)[],address,bytes32,string,bytes)"): FunctionFragment;
getEvent(nameOrSignatureOrTopic: "UnorderedNonceInvalidation"): EventFragment;
encodeFunctionData(functionFragment: "DOMAIN_SEPARATOR", values?: undefined): string;
encodeFunctionData(functionFragment: "invalidateUnorderedNonces", values: [BigNumberish, BigNumberish]): string;
encodeFunctionData(functionFragment: "nonceBitmap", values: [AddressLike, BigNumberish]): string;
encodeFunctionData(functionFragment: "permitTransferFrom(((address,uint256),uint256,uint256),(address,uint256),address,bytes)", values: [
ISignatureTransfer.PermitTransferFromStruct,
ISignatureTransfer.SignatureTransferDetailsStruct,
AddressLike,
BytesLike
]): string;
encodeFunctionData(functionFragment: "permitTransferFrom(((address,uint256)[],uint256,uint256),(address,uint256)[],address,bytes)", values: [
ISignatureTransfer.PermitBatchTransferFromStruct,
ISignatureTransfer.SignatureTransferDetailsStruct[],
AddressLike,
BytesLike
]): string;
encodeFunctionData(functionFragment: "permitWitnessTransferFrom(((address,uint256),uint256,uint256),(address,uint256),address,bytes32,string,bytes)", values: [
ISignatureTransfer.PermitTransferFromStruct,
ISignatureTransfer.SignatureTransferDetailsStruct,
AddressLike,
BytesLike,
string,
BytesLike
]): string;
encodeFunctionData(functionFragment: "permitWitnessTransferFrom(((address,uint256)[],uint256,uint256),(address,uint256)[],address,bytes32,string,bytes)", values: [
ISignatureTransfer.PermitBatchTransferFromStruct,
ISignatureTransfer.SignatureTransferDetailsStruct[],
AddressLike,
BytesLike,
string,
BytesLike
]): string;
decodeFunctionResult(functionFragment: "DOMAIN_SEPARATOR", data: BytesLike): Result;
decodeFunctionResult(functionFragment: "invalidateUnorderedNonces", data: BytesLike): Result;
decodeFunctionResult(functionFragment: "nonceBitmap", data: BytesLike): Result;
decodeFunctionResult(functionFragment: "permitTransferFrom(((address,uint256),uint256,uint256),(address,uint256),address,bytes)", data: BytesLike): Result;
decodeFunctionResult(functionFragment: "permitTransferFrom(((address,uint256)[],uint256,uint256),(address,uint256)[],address,bytes)", data: BytesLike): Result;
decodeFunctionResult(functionFragment: "permitWitnessTransferFrom(((address,uint256),uint256,uint256),(address,uint256),address,bytes32,string,bytes)", data: BytesLike): Result;
decodeFunctionResult(functionFragment: "permitWitnessTransferFrom(((address,uint256)[],uint256,uint256),(address,uint256)[],address,bytes32,string,bytes)", data: BytesLike): Result;
}
export declare namespace UnorderedNonceInvalidationEvent {
type InputTuple = [
owner: AddressLike,
word: BigNumberish,
mask: BigNumberish
];
type OutputTuple = [owner: string, word: bigint, mask: bigint];
interface OutputObject {
owner: string;
word: bigint;
mask: bigint;
}
type Event = TypedContractEvent<InputTuple, OutputTuple, OutputObject>;
type Filter = TypedDeferredTopicFilter<Event>;
type Log = TypedEventLog<Event>;
type LogDescription = TypedLogDescription<Event>;
}
export interface ISignatureTransfer extends BaseContract {
connect(runner?: ContractRunner | null): ISignatureTransfer;
waitForDeployment(): Promise<this>;
interface: ISignatureTransferInterface;
queryFilter<TCEvent extends TypedContractEvent>(event: TCEvent, fromBlockOrBlockhash?: string | number | undefined, toBlock?: string | number | undefined): Promise<Array<TypedEventLog<TCEvent>>>;
queryFilter<TCEvent extends TypedContractEvent>(filter: TypedDeferredTopicFilter<TCEvent>, fromBlockOrBlockhash?: string | number | undefined, toBlock?: string | number | undefined): Promise<Array<TypedEventLog<TCEvent>>>;
on<TCEvent extends TypedContractEvent>(event: TCEvent, listener: TypedListener<TCEvent>): Promise<this>;
on<TCEvent extends TypedContractEvent>(filter: TypedDeferredTopicFilter<TCEvent>, listener: TypedListener<TCEvent>): Promise<this>;
once<TCEvent extends TypedContractEvent>(event: TCEvent, listener: TypedListener<TCEvent>): Promise<this>;
once<TCEvent extends TypedContractEvent>(filter: TypedDeferredTopicFilter<TCEvent>, listener: TypedListener<TCEvent>): Promise<this>;
listeners<TCEvent extends TypedContractEvent>(event: TCEvent): Promise<Array<TypedListener<TCEvent>>>;
listeners(eventName?: string): Promise<Array<Listener>>;
removeAllListeners<TCEvent extends TypedContractEvent>(event?: TCEvent): Promise<this>;
DOMAIN_SEPARATOR: TypedContractMethod<[], [string], "view">;
invalidateUnorderedNonces: TypedContractMethod<[
wordPos: BigNumberish,
mask: BigNumberish
], [
void
], "nonpayable">;
nonceBitmap: TypedContractMethod<[
arg0: AddressLike,
arg1: BigNumberish
], [
bigint
], "view">;
"permitTransferFrom(((address,uint256),uint256,uint256),(address,uint256),address,bytes)": TypedContractMethod<[
permit: ISignatureTransfer.PermitTransferFromStruct,
transferDetails: ISignatureTransfer.SignatureTransferDetailsStruct,
owner: AddressLike,
signature: BytesLike
], [
void
], "nonpayable">;
"permitTransferFrom(((address,uint256)[],uint256,uint256),(address,uint256)[],address,bytes)": TypedContractMethod<[
permit: ISignatureTransfer.PermitBatchTransferFromStruct,
transferDetails: ISignatureTransfer.SignatureTransferDetailsStruct[],
owner: AddressLike,
signature: BytesLike
], [
void
], "nonpayable">;
"permitWitnessTransferFrom(((address,uint256),uint256,uint256),(address,uint256),address,bytes32,string,bytes)": TypedContractMethod<[
permit: ISignatureTransfer.PermitTransferFromStruct,
transferDetails: ISignatureTransfer.SignatureTransferDetailsStruct,
owner: AddressLike,
witness: BytesLike,
witnessTypeString: string,
signature: BytesLike
], [
void
], "nonpayable">;
"permitWitnessTransferFrom(((address,uint256)[],uint256,uint256),(address,uint256)[],address,bytes32,string,bytes)": TypedContractMethod<[
permit: ISignatureTransfer.PermitBatchTransferFromStruct,
transferDetails: ISignatureTransfer.SignatureTransferDetailsStruct[],
owner: AddressLike,
witness: BytesLike,
witnessTypeString: string,
signature: BytesLike
], [
void
], "nonpayable">;
getFunction<T extends ContractMethod = ContractMethod>(key: string | FunctionFragment): T;
getFunction(nameOrSignature: "DOMAIN_SEPARATOR"): TypedContractMethod<[], [string], "view">;
getFunction(nameOrSignature: "invalidateUnorderedNonces"): TypedContractMethod<[
wordPos: BigNumberish,
mask: BigNumberish
], [
void
], "nonpayable">;
getFunction(nameOrSignature: "nonceBitmap"): TypedContractMethod<[
arg0: AddressLike,
arg1: BigNumberish
], [
bigint
], "view">;
getFunction(nameOrSignature: "permitTransferFrom(((address,uint256),uint256,uint256),(address,uint256),address,bytes)"): TypedContractMethod<[
permit: ISignatureTransfer.PermitTransferFromStruct,
transferDetails: ISignatureTransfer.SignatureTransferDetailsStruct,
owner: AddressLike,
signature: BytesLike
], [
void
], "nonpayable">;
getFunction(nameOrSignature: "permitTransferFrom(((address,uint256)[],uint256,uint256),(address,uint256)[],address,bytes)"): TypedContractMethod<[
permit: ISignatureTransfer.PermitBatchTransferFromStruct,
transferDetails: ISignatureTransfer.SignatureTransferDetailsStruct[],
owner: AddressLike,
signature: BytesLike
], [
void
], "nonpayable">;
getFunction(nameOrSignature: "permitWitnessTransferFrom(((address,uint256),uint256,uint256),(address,uint256),address,bytes32,string,bytes)"): TypedContractMethod<[
permit: ISignatureTransfer.PermitTransferFromStruct,
transferDetails: ISignatureTransfer.SignatureTransferDetailsStruct,
owner: AddressLike,
witness: BytesLike,
witnessTypeString: string,
signature: BytesLike
], [
void
], "nonpayable">;
getFunction(nameOrSignature: "permitWitnessTransferFrom(((address,uint256)[],uint256,uint256),(address,uint256)[],address,bytes32,string,bytes)"): TypedContractMethod<[
permit: ISignatureTransfer.PermitBatchTransferFromStruct,
transferDetails: ISignatureTransfer.SignatureTransferDetailsStruct[],
owner: AddressLike,
witness: BytesLike,
witnessTypeString: string,
signature: BytesLike
], [
void
], "nonpayable">;
getEvent(key: "UnorderedNonceInvalidation"): TypedContractEvent<UnorderedNonceInvalidationEvent.InputTuple, UnorderedNonceInvalidationEvent.OutputTuple, UnorderedNonceInvalidationEvent.OutputObject>;
filters: {
"UnorderedNonceInvalidation(address,uint256,uint256)": TypedContractEvent<UnorderedNonceInvalidationEvent.InputTuple, UnorderedNonceInvalidationEvent.OutputTuple, UnorderedNonceInvalidationEvent.OutputObject>;
UnorderedNonceInvalidation: TypedContractEvent<UnorderedNonceInvalidationEvent.InputTuple, UnorderedNonceInvalidationEvent.OutputTuple, UnorderedNonceInvalidationEvent.OutputObject>;
};
}

@ -1 +1,2 @@
export type { IERC20 } from "./IERC20";
export type { ISignatureTransfer } from "./ISignatureTransfer";

@ -0,0 +1,35 @@
import type { BaseContract, BytesLike, FunctionFragment, Result, Interface, ContractRunner, ContractMethod, Listener } from "ethers";
import type { TypedContractEvent, TypedDeferredTopicFilter, TypedEventLog, TypedListener, TypedContractMethod } from "../../common";
export interface SingletonFactoryInterface extends Interface {
getFunction(nameOrSignature: "deploy"): FunctionFragment;
encodeFunctionData(functionFragment: "deploy", values: [BytesLike, BytesLike]): string;
decodeFunctionResult(functionFragment: "deploy", data: BytesLike): Result;
}
export interface SingletonFactory extends BaseContract {
connect(runner?: ContractRunner | null): SingletonFactory;
waitForDeployment(): Promise<this>;
interface: SingletonFactoryInterface;
queryFilter<TCEvent extends TypedContractEvent>(event: TCEvent, fromBlockOrBlockhash?: string | number | undefined, toBlock?: string | number | undefined): Promise<Array<TypedEventLog<TCEvent>>>;
queryFilter<TCEvent extends TypedContractEvent>(filter: TypedDeferredTopicFilter<TCEvent>, fromBlockOrBlockhash?: string | number | undefined, toBlock?: string | number | undefined): Promise<Array<TypedEventLog<TCEvent>>>;
on<TCEvent extends TypedContractEvent>(event: TCEvent, listener: TypedListener<TCEvent>): Promise<this>;
on<TCEvent extends TypedContractEvent>(filter: TypedDeferredTopicFilter<TCEvent>, listener: TypedListener<TCEvent>): Promise<this>;
once<TCEvent extends TypedContractEvent>(event: TCEvent, listener: TypedListener<TCEvent>): Promise<this>;
once<TCEvent extends TypedContractEvent>(filter: TypedDeferredTopicFilter<TCEvent>, listener: TypedListener<TCEvent>): Promise<this>;
listeners<TCEvent extends TypedContractEvent>(event: TCEvent): Promise<Array<TypedListener<TCEvent>>>;
listeners(eventName?: string): Promise<Array<Listener>>;
removeAllListeners<TCEvent extends TypedContractEvent>(event?: TCEvent): Promise<this>;
deploy: TypedContractMethod<[
_initCode: BytesLike,
_salt: BytesLike
], [
string
], "nonpayable">;
getFunction<T extends ContractMethod = ContractMethod>(key: string | FunctionFragment): T;
getFunction(nameOrSignature: "deploy"): TypedContractMethod<[
_initCode: BytesLike,
_salt: BytesLike
], [
string
], "nonpayable">;
filters: {};
}

@ -32,5 +32,6 @@ export type { AdminUpgradeableProxy } from "./AdminUpgradeableProxy";
export type { FeeManager } from "./FeeManager";
export type { GasCompensationVault } from "./GasCompensationVault";
export type { LoopbackProxy } from "./LoopbackProxy";
export type { SingletonFactory } from "./SingletonFactory";
export type { TornadoRouter } from "./TornadoRouter";
export type { TornadoVault } from "./TornadoVault";

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

@ -14,7 +14,7 @@ export declare class Echoer__factory extends ContractFactory {
deploymentTransaction(): ContractTransactionResponse;
}>;
connect(runner: ContractRunner | null): Echoer__factory;
static readonly bytecode = "0x6080604052348015600f57600080fd5b506101638061001f6000396000f3fe608060405234801561001057600080fd5b506004361061002b5760003560e01c8063624fbfdc14610030575b600080fd5b61004361003e36600461008c565b610045565b005b336001600160a01b03167f50d6f3fc915efd1695d8a4cb50da185984f50d256834b9cb308295eb3c872c9c83836040516100809291906100fe565b60405180910390a25050565b6000806020838503121561009f57600080fd5b823567ffffffffffffffff808211156100b757600080fd5b818501915085601f8301126100cb57600080fd5b8135818111156100da57600080fd5b8660208285010111156100ec57600080fd5b60209290920196919550909350505050565b60208152816020820152818360408301376000818301604090810191909152601f909201601f1916010191905056fea2646970667358221220cadc2288aafcfeb373ae536503c025419ca51a0b1642ad003ff215a6bff8658464736f6c63430008190033";
static readonly bytecode = "0x6080604052348015600f57600080fd5b506101658061001f6000396000f3fe608060405234801561001057600080fd5b506004361061002b5760003560e01c8063624fbfdc14610030575b600080fd5b61004361003e36600461008c565b610045565b005b336001600160a01b03167f50d6f3fc915efd1695d8a4cb50da185984f50d256834b9cb308295eb3c872c9c8383604051610080929190610100565b60405180910390a25050565b6000806020838503121561009f57600080fd5b823567ffffffffffffffff8111156100b657600080fd5b8301601f810185136100c757600080fd5b803567ffffffffffffffff8111156100de57600080fd5b8560208284010111156100f057600080fd5b6020919091019590945092505050565b60208152816020820152818360408301376000818301604090810191909152601f909201601f1916010191905056fea264697066735822122050c4191eadbd3981b9be4954b8abbadae91d7cfb743a47cc6930c8fe566e1c6e64736f6c634300081c0033";
static readonly abi: readonly [{
readonly anonymous: false;
readonly inputs: readonly [{

File diff suppressed because one or more lines are too long

@ -14,7 +14,7 @@ export declare class BadRecipient__factory extends ContractFactory {
deploymentTransaction(): ContractTransactionResponse;
}>;
connect(runner: ContractRunner | null): BadRecipient__factory;
static readonly bytecode = "0x6080604052348015600f57600080fd5b50609c80601d6000396000f3fe6080604052348015600f57600080fd5b5060405162461bcd60e51b815260206004820152602160248201527f7468697320636f6e747261637420646f6573206e6f74206163636570742045546044820152600960fb1b606482015260840160405180910390fdfea264697066735822122034c2432feedadd0f30a6f66555381c20922b6ab7c9b3ede4c27896b23e802a8264736f6c63430008190033";
static readonly bytecode = "0x6080604052348015600f57600080fd5b50609c80601d6000396000f3fe6080604052348015600f57600080fd5b5060405162461bcd60e51b815260206004820152602160248201527f7468697320636f6e747261637420646f6573206e6f74206163636570742045546044820152600960fb1b606482015260840160405180910390fdfea2646970667358221220e3ea6c7cc6115518097ca37048fbc2dbf908554443ac49cb9f0f128dbca7c44e64736f6c634300081c0033";
static readonly abi: readonly [{
readonly stateMutability: "nonpayable";
readonly type: "fallback";

@ -14,7 +14,7 @@ export declare class ERC20Mock__factory extends ContractFactory {
deploymentTransaction(): ContractTransactionResponse;
}>;
connect(runner: ContractRunner | null): ERC20Mock__factory;
static readonly bytecode = "0x608060405234801561001057600080fd5b50604051806040016040528060078152602001664441494d6f636b60c81b815250604051806040016040528060048152602001634441494d60e01b815250816003908161005d9190610113565b50600461006a8282610113565b5050506101d2565b634e487b7160e01b600052604160045260246000fd5b600181811c9082168061009c57607f821691505b6020821081036100bc57634e487b7160e01b600052602260045260246000fd5b50919050565b601f82111561010e576000816000526020600020601f850160051c810160208610156100eb5750805b601f850160051c820191505b8181101561010a578281556001016100f7565b5050505b505050565b81516001600160401b0381111561012c5761012c610072565b6101408161013a8454610088565b846100c2565b602080601f831160018114610175576000841561015d5750858301515b600019600386901b1c1916600185901b17855561010a565b600085815260208120601f198616915b828110156101a457888601518255948401946001909101908401610185565b50858210156101c25787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b610785806101e16000396000f3fe608060405234801561001057600080fd5b506004361061009e5760003560e01c806340c10f191161006657806340c10f191461011857806370a082311461012d57806395d89b4114610156578063a9059cbb1461015e578063dd62ed3e1461017157600080fd5b806306fdde03146100a3578063095ea7b3146100c157806318160ddd146100e457806323b872dd146100f6578063313ce56714610109575b600080fd5b6100ab6101aa565b6040516100b891906105ce565b60405180910390f35b6100d46100cf366004610639565b61023c565b60405190151581526020016100b8565b6002545b6040519081526020016100b8565b6100d4610104366004610663565b610256565b604051601281526020016100b8565b61012b610126366004610639565b61027a565b005b6100e861013b36600461069f565b6001600160a01b031660009081526020819052604090205490565b6100ab610288565b6100d461016c366004610639565b610297565b6100e861017f3660046106c1565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205490565b6060600380546101b9906106f4565b80601f01602080910402602001604051908101604052809291908181526020018280546101e5906106f4565b80156102325780601f1061020757610100808354040283529160200191610232565b820191906000526020600020905b81548152906001019060200180831161021557829003601f168201915b5050505050905090565b60003361024a8185856102a5565b60019150505b92915050565b6000336102648582856102b7565b61026f85858561033a565b506001949350505050565b6102848282610399565b5050565b6060600480546101b9906106f4565b60003361024a81858561033a565b6102b283838360016103cf565b505050565b6001600160a01b038381166000908152600160209081526040808320938616835292905220546000198114610334578181101561032557604051637dc7a0d960e11b81526001600160a01b038416600482015260248101829052604481018390526064015b60405180910390fd5b610334848484840360006103cf565b50505050565b6001600160a01b03831661036457604051634b637e8f60e11b81526000600482015260240161031c565b6001600160a01b03821661038e5760405163ec442f0560e01b81526000600482015260240161031c565b6102b28383836104a4565b6001600160a01b0382166103c35760405163ec442f0560e01b81526000600482015260240161031c565b610284600083836104a4565b6001600160a01b0384166103f95760405163e602df0560e01b81526000600482015260240161031c565b6001600160a01b03831661042357604051634a1406b160e11b81526000600482015260240161031c565b6001600160a01b038085166000908152600160209081526040808320938716835292905220829055801561033457826001600160a01b0316846001600160a01b03167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9258460405161049691815260200190565b60405180910390a350505050565b6001600160a01b0383166104cf5780600260008282546104c4919061072e565b909155506105419050565b6001600160a01b038316600090815260208190526040902054818110156105225760405163391434e360e21b81526001600160a01b0385166004820152602481018290526044810183905260640161031c565b6001600160a01b03841660009081526020819052604090209082900390555b6001600160a01b03821661055d5760028054829003905561057c565b6001600160a01b03821660009081526020819052604090208054820190555b816001600160a01b0316836001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040516105c191815260200190565b60405180910390a3505050565b60006020808352835180602085015260005b818110156105fc578581018301518582016040015282016105e0565b506000604082860101526040601f19601f8301168501019250505092915050565b80356001600160a01b038116811461063457600080fd5b919050565b6000806040838503121561064c57600080fd5b6106558361061d565b946020939093013593505050565b60008060006060848603121561067857600080fd5b6106818461061d565b925061068f6020850161061d565b9150604084013590509250925092565b6000602082840312156106b157600080fd5b6106ba8261061d565b9392505050565b600080604083850312156106d457600080fd5b6106dd8361061d565b91506106eb6020840161061d565b90509250929050565b600181811c9082168061070857607f821691505b60208210810361072857634e487b7160e01b600052602260045260246000fd5b50919050565b8082018082111561025057634e487b7160e01b600052601160045260246000fdfea264697066735822122058942fcc650d3670455590fabbf6c5726b3ae7df7b57e75bc02cb2c66259d45b64736f6c63430008190033";
static readonly bytecode = "0x608060405234801561001057600080fd5b50604051806040016040528060078152602001664441494d6f636b60c81b815250604051806040016040528060048152602001634441494d60e01b815250816003908161005d9190610111565b50600461006a8282610111565b5050506101cf565b634e487b7160e01b600052604160045260246000fd5b600181811c9082168061009c57607f821691505b6020821081036100bc57634e487b7160e01b600052602260045260246000fd5b50919050565b601f82111561010c57806000526020600020601f840160051c810160208510156100e95750805b601f840160051c820191505b8181101561010957600081556001016100f5565b50505b505050565b81516001600160401b0381111561012a5761012a610072565b61013e816101388454610088565b846100c2565b6020601f821160018114610172576000831561015a5750848201515b600019600385901b1c1916600184901b178455610109565b600084815260208120601f198516915b828110156101a25787850151825560209485019460019092019101610182565b50848210156101c05786840151600019600387901b60f8161c191681555b50505050600190811b01905550565b610785806101de6000396000f3fe608060405234801561001057600080fd5b506004361061009e5760003560e01c806340c10f191161006657806340c10f191461011857806370a082311461012d57806395d89b4114610156578063a9059cbb1461015e578063dd62ed3e1461017157600080fd5b806306fdde03146100a3578063095ea7b3146100c157806318160ddd146100e457806323b872dd146100f6578063313ce56714610109575b600080fd5b6100ab6101aa565b6040516100b891906105ce565b60405180910390f35b6100d46100cf366004610638565b61023c565b60405190151581526020016100b8565b6002545b6040519081526020016100b8565b6100d4610104366004610662565b610256565b604051601281526020016100b8565b61012b610126366004610638565b61027a565b005b6100e861013b36600461069f565b6001600160a01b031660009081526020819052604090205490565b6100ab610288565b6100d461016c366004610638565b610297565b6100e861017f3660046106c1565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205490565b6060600380546101b9906106f4565b80601f01602080910402602001604051908101604052809291908181526020018280546101e5906106f4565b80156102325780601f1061020757610100808354040283529160200191610232565b820191906000526020600020905b81548152906001019060200180831161021557829003601f168201915b5050505050905090565b60003361024a8185856102a5565b60019150505b92915050565b6000336102648582856102b7565b61026f85858561033a565b506001949350505050565b6102848282610399565b5050565b6060600480546101b9906106f4565b60003361024a81858561033a565b6102b283838360016103cf565b505050565b6001600160a01b038381166000908152600160209081526040808320938616835292905220546000198114610334578181101561032557604051637dc7a0d960e11b81526001600160a01b038416600482015260248101829052604481018390526064015b60405180910390fd5b610334848484840360006103cf565b50505050565b6001600160a01b03831661036457604051634b637e8f60e11b81526000600482015260240161031c565b6001600160a01b03821661038e5760405163ec442f0560e01b81526000600482015260240161031c565b6102b28383836104a4565b6001600160a01b0382166103c35760405163ec442f0560e01b81526000600482015260240161031c565b610284600083836104a4565b6001600160a01b0384166103f95760405163e602df0560e01b81526000600482015260240161031c565b6001600160a01b03831661042357604051634a1406b160e11b81526000600482015260240161031c565b6001600160a01b038085166000908152600160209081526040808320938716835292905220829055801561033457826001600160a01b0316846001600160a01b03167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9258460405161049691815260200190565b60405180910390a350505050565b6001600160a01b0383166104cf5780600260008282546104c4919061072e565b909155506105419050565b6001600160a01b038316600090815260208190526040902054818110156105225760405163391434e360e21b81526001600160a01b0385166004820152602481018290526044810183905260640161031c565b6001600160a01b03841660009081526020819052604090209082900390555b6001600160a01b03821661055d5760028054829003905561057c565b6001600160a01b03821660009081526020819052604090208054820190555b816001600160a01b0316836001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040516105c191815260200190565b60405180910390a3505050565b602081526000825180602084015260005b818110156105fc57602081860181015160408684010152016105df565b506000604082850101526040601f19601f83011684010191505092915050565b80356001600160a01b038116811461063357600080fd5b919050565b6000806040838503121561064b57600080fd5b6106548361061c565b946020939093013593505050565b60008060006060848603121561067757600080fd5b6106808461061c565b925061068e6020850161061c565b929592945050506040919091013590565b6000602082840312156106b157600080fd5b6106ba8261061c565b9392505050565b600080604083850312156106d457600080fd5b6106dd8361061c565b91506106eb6020840161061c565b90509250929050565b600181811c9082168061070857607f821691505b60208210810361072857634e487b7160e01b600052602260045260246000fd5b50919050565b8082018082111561025057634e487b7160e01b600052601160045260246000fdfea2646970667358221220df85cece2633b7b39a7e3c92023521dbd4a76129843a0efc262b8e208f146bdf64736f6c634300081c0033";
static readonly abi: readonly [{
readonly inputs: readonly [{
readonly internalType: "address";

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

@ -6,5 +6,6 @@ export * as interfaces from "./interfaces";
export { ERC20Tornado__factory } from "./ERC20Tornado__factory";
export { ETHTornado__factory } from "./ETHTornado__factory";
export { Echoer__factory } from "./Echoer__factory";
export { PermitTornado__factory } from "./PermitTornado__factory";
export { Verifier__factory } from "./Verifier__factory";
export { CTornado__factory } from "./CTornado__factory";

@ -0,0 +1,309 @@
import { type ContractRunner } from "ethers";
import type { ISignatureTransfer, ISignatureTransferInterface } from "../../../../contracts/Classic/interfaces/ISignatureTransfer";
export declare class ISignatureTransfer__factory {
static readonly abi: readonly [{
readonly inputs: readonly [{
readonly internalType: "uint256";
readonly name: "maxAmount";
readonly type: "uint256";
}];
readonly name: "InvalidAmount";
readonly type: "error";
}, {
readonly inputs: readonly [];
readonly name: "LengthMismatch";
readonly type: "error";
}, {
readonly anonymous: false;
readonly inputs: readonly [{
readonly indexed: true;
readonly internalType: "address";
readonly name: "owner";
readonly type: "address";
}, {
readonly indexed: false;
readonly internalType: "uint256";
readonly name: "word";
readonly type: "uint256";
}, {
readonly indexed: false;
readonly internalType: "uint256";
readonly name: "mask";
readonly type: "uint256";
}];
readonly name: "UnorderedNonceInvalidation";
readonly type: "event";
}, {
readonly inputs: readonly [];
readonly name: "DOMAIN_SEPARATOR";
readonly outputs: readonly [{
readonly internalType: "bytes32";
readonly name: "";
readonly type: "bytes32";
}];
readonly stateMutability: "view";
readonly type: "function";
}, {
readonly inputs: readonly [{
readonly internalType: "uint256";
readonly name: "wordPos";
readonly type: "uint256";
}, {
readonly internalType: "uint256";
readonly name: "mask";
readonly type: "uint256";
}];
readonly name: "invalidateUnorderedNonces";
readonly outputs: readonly [];
readonly stateMutability: "nonpayable";
readonly type: "function";
}, {
readonly inputs: readonly [{
readonly internalType: "address";
readonly name: "";
readonly type: "address";
}, {
readonly internalType: "uint256";
readonly name: "";
readonly type: "uint256";
}];
readonly name: "nonceBitmap";
readonly outputs: readonly [{
readonly internalType: "uint256";
readonly name: "";
readonly type: "uint256";
}];
readonly stateMutability: "view";
readonly type: "function";
}, {
readonly inputs: readonly [{
readonly components: readonly [{
readonly components: readonly [{
readonly internalType: "address";
readonly name: "token";
readonly type: "address";
}, {
readonly internalType: "uint256";
readonly name: "amount";
readonly type: "uint256";
}];
readonly internalType: "struct ISignatureTransfer.TokenPermissions";
readonly name: "permitted";
readonly type: "tuple";
}, {
readonly internalType: "uint256";
readonly name: "nonce";
readonly type: "uint256";
}, {
readonly internalType: "uint256";
readonly name: "deadline";
readonly type: "uint256";
}];
readonly internalType: "struct ISignatureTransfer.PermitTransferFrom";
readonly name: "permit";
readonly type: "tuple";
}, {
readonly components: readonly [{
readonly internalType: "address";
readonly name: "to";
readonly type: "address";
}, {
readonly internalType: "uint256";
readonly name: "requestedAmount";
readonly type: "uint256";
}];
readonly internalType: "struct ISignatureTransfer.SignatureTransferDetails";
readonly name: "transferDetails";
readonly type: "tuple";
}, {
readonly internalType: "address";
readonly name: "owner";
readonly type: "address";
}, {
readonly internalType: "bytes";
readonly name: "signature";
readonly type: "bytes";
}];
readonly name: "permitTransferFrom";
readonly outputs: readonly [];
readonly stateMutability: "nonpayable";
readonly type: "function";
}, {
readonly inputs: readonly [{
readonly components: readonly [{
readonly components: readonly [{
readonly internalType: "address";
readonly name: "token";
readonly type: "address";
}, {
readonly internalType: "uint256";
readonly name: "amount";
readonly type: "uint256";
}];
readonly internalType: "struct ISignatureTransfer.TokenPermissions[]";
readonly name: "permitted";
readonly type: "tuple[]";
}, {
readonly internalType: "uint256";
readonly name: "nonce";
readonly type: "uint256";
}, {
readonly internalType: "uint256";
readonly name: "deadline";
readonly type: "uint256";
}];
readonly internalType: "struct ISignatureTransfer.PermitBatchTransferFrom";
readonly name: "permit";
readonly type: "tuple";
}, {
readonly components: readonly [{
readonly internalType: "address";
readonly name: "to";
readonly type: "address";
}, {
readonly internalType: "uint256";
readonly name: "requestedAmount";
readonly type: "uint256";
}];
readonly internalType: "struct ISignatureTransfer.SignatureTransferDetails[]";
readonly name: "transferDetails";
readonly type: "tuple[]";
}, {
readonly internalType: "address";
readonly name: "owner";
readonly type: "address";
}, {
readonly internalType: "bytes";
readonly name: "signature";
readonly type: "bytes";
}];
readonly name: "permitTransferFrom";
readonly outputs: readonly [];
readonly stateMutability: "nonpayable";
readonly type: "function";
}, {
readonly inputs: readonly [{
readonly components: readonly [{
readonly components: readonly [{
readonly internalType: "address";
readonly name: "token";
readonly type: "address";
}, {
readonly internalType: "uint256";
readonly name: "amount";
readonly type: "uint256";
}];
readonly internalType: "struct ISignatureTransfer.TokenPermissions";
readonly name: "permitted";
readonly type: "tuple";
}, {
readonly internalType: "uint256";
readonly name: "nonce";
readonly type: "uint256";
}, {
readonly internalType: "uint256";
readonly name: "deadline";
readonly type: "uint256";
}];
readonly internalType: "struct ISignatureTransfer.PermitTransferFrom";
readonly name: "permit";
readonly type: "tuple";
}, {
readonly components: readonly [{
readonly internalType: "address";
readonly name: "to";
readonly type: "address";
}, {
readonly internalType: "uint256";
readonly name: "requestedAmount";
readonly type: "uint256";
}];
readonly internalType: "struct ISignatureTransfer.SignatureTransferDetails";
readonly name: "transferDetails";
readonly type: "tuple";
}, {
readonly internalType: "address";
readonly name: "owner";
readonly type: "address";
}, {
readonly internalType: "bytes32";
readonly name: "witness";
readonly type: "bytes32";
}, {
readonly internalType: "string";
readonly name: "witnessTypeString";
readonly type: "string";
}, {
readonly internalType: "bytes";
readonly name: "signature";
readonly type: "bytes";
}];
readonly name: "permitWitnessTransferFrom";
readonly outputs: readonly [];
readonly stateMutability: "nonpayable";
readonly type: "function";
}, {
readonly inputs: readonly [{
readonly components: readonly [{
readonly components: readonly [{
readonly internalType: "address";
readonly name: "token";
readonly type: "address";
}, {
readonly internalType: "uint256";
readonly name: "amount";
readonly type: "uint256";
}];
readonly internalType: "struct ISignatureTransfer.TokenPermissions[]";
readonly name: "permitted";
readonly type: "tuple[]";
}, {
readonly internalType: "uint256";
readonly name: "nonce";
readonly type: "uint256";
}, {
readonly internalType: "uint256";
readonly name: "deadline";
readonly type: "uint256";
}];
readonly internalType: "struct ISignatureTransfer.PermitBatchTransferFrom";
readonly name: "permit";
readonly type: "tuple";
}, {
readonly components: readonly [{
readonly internalType: "address";
readonly name: "to";
readonly type: "address";
}, {
readonly internalType: "uint256";
readonly name: "requestedAmount";
readonly type: "uint256";
}];
readonly internalType: "struct ISignatureTransfer.SignatureTransferDetails[]";
readonly name: "transferDetails";
readonly type: "tuple[]";
}, {
readonly internalType: "address";
readonly name: "owner";
readonly type: "address";
}, {
readonly internalType: "bytes32";
readonly name: "witness";
readonly type: "bytes32";
}, {
readonly internalType: "string";
readonly name: "witnessTypeString";
readonly type: "string";
}, {
readonly internalType: "bytes";
readonly name: "signature";
readonly type: "bytes";
}];
readonly name: "permitWitnessTransferFrom";
readonly outputs: readonly [];
readonly stateMutability: "nonpayable";
readonly type: "function";
}];
static createInterface(): ISignatureTransferInterface;
static connect(address: string, runner?: ContractRunner | null): ISignatureTransfer;
}

@ -1 +1,2 @@
export { IERC20__factory } from "./IERC20__factory";
export { ISignatureTransfer__factory } from "./ISignatureTransfer__factory";

@ -14,7 +14,7 @@ export declare class GasCompensationVault__factory extends ContractFactory {
deploymentTransaction(): ContractTransactionResponse;
}>;
connect(runner: ContractRunner | null): GasCompensationVault__factory;
static readonly bytecode = "0x60a0604052348015600f57600080fd5b50604051610472380380610472833981016040819052602c91603c565b6001600160a01b0316608052606a565b600060208284031215604d57600080fd5b81516001600160a01b0381168114606357600080fd5b9392505050565b6080516103da6100986000396000818160560152818160e101528181610212015261027701526103da6000f3fe6080604052600436106100385760003560e01c8063a3221c2e14610044578063a99ce80714610094578063e822f784146100b657600080fd5b3661003f57005b600080fd5b34801561005057600080fd5b506100787f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b03909116815260200160405180910390f35b3480156100a057600080fd5b506100b46100af366004610328565b6100d6565b005b3480156100c257600080fd5b506100b46100d1366004610360565b610207565b336001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000161461013e5760405162461bcd60e51b815260206004820152600860248201526737b7363c9033b7bb60c11b60448201526064015b60405180910390fd5b47600061014b4884610379565b90508160000361015b5750505050565b6000846001600160a01b03168383116101745782610176565b835b604051600081818185875af1925050503d80600081146101b2576040519150601f19603f3d011682016040523d82523d6000602084013e6101b7565b606091505b50509050806102005760405162461bcd60e51b815260206004820152601560248201527418dbdb5c195b9cd85d194819d85cc819985a5b1959605a1b6044820152606401610135565b5050505050565b336001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000161461026a5760405162461bcd60e51b815260206004820152600860248201526737b7363c9033b7bb60c11b6044820152606401610135565b4760006001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000168284116102a457836102a6565b825b604051600081818185875af1925050503d80600081146102e2576040519150601f19603f3d011682016040523d82523d6000602084013e6102e7565b606091505b50509050806103235760405162461bcd60e51b81526020600482015260086024820152671c185e4819985a5b60c21b6044820152606401610135565b505050565b6000806040838503121561033b57600080fd5b82356001600160a01b038116811461035257600080fd5b946020939093013593505050565b60006020828403121561037257600080fd5b5035919050565b808202811582820484141761039e57634e487b7160e01b600052601160045260246000fd5b9291505056fea264697066735822122073841dd5b5d8687d927814633a2fcb7944a306bb89a9b65a0aab4cc361c8312264736f6c63430008190033";
static readonly bytecode = "0x60a060405234801561001057600080fd5b5060405161047838038061047883398101604081905261002f91610040565b6001600160a01b0316608052610070565b60006020828403121561005257600080fd5b81516001600160a01b038116811461006957600080fd5b9392505050565b6080516103da61009e6000396000818160560152818160e101528181610212015261027701526103da6000f3fe6080604052600436106100385760003560e01c8063a3221c2e14610044578063a99ce80714610094578063e822f784146100b657600080fd5b3661003f57005b600080fd5b34801561005057600080fd5b506100787f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b03909116815260200160405180910390f35b3480156100a057600080fd5b506100b46100af366004610328565b6100d6565b005b3480156100c257600080fd5b506100b46100d1366004610360565b610207565b336001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000161461013e5760405162461bcd60e51b815260206004820152600860248201526737b7363c9033b7bb60c11b60448201526064015b60405180910390fd5b47600061014b4884610379565b90508160000361015b5750505050565b6000846001600160a01b03168383116101745782610176565b835b604051600081818185875af1925050503d80600081146101b2576040519150601f19603f3d011682016040523d82523d6000602084013e6101b7565b606091505b50509050806102005760405162461bcd60e51b815260206004820152601560248201527418dbdb5c195b9cd85d194819d85cc819985a5b1959605a1b6044820152606401610135565b5050505050565b336001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000161461026a5760405162461bcd60e51b815260206004820152600860248201526737b7363c9033b7bb60c11b6044820152606401610135565b4760006001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000168284116102a457836102a6565b825b604051600081818185875af1925050503d80600081146102e2576040519150601f19603f3d011682016040523d82523d6000602084013e6102e7565b606091505b50509050806103235760405162461bcd60e51b81526020600482015260086024820152671c185e4819985a5b60c21b6044820152606401610135565b505050565b6000806040838503121561033b57600080fd5b82356001600160a01b038116811461035257600080fd5b946020939093013593505050565b60006020828403121561037257600080fd5b5035919050565b808202811582820484141761039e57634e487b7160e01b600052601160045260246000fd5b9291505056fea2646970667358221220fbe5a836dfa015bd3b2b1ffb61149001940255ee2f1f9b05c13681937e89ff9264736f6c634300081c0033";
static readonly abi: readonly [{
readonly inputs: readonly [{
readonly internalType: "address";

@ -0,0 +1,40 @@
import { ContractFactory, ContractTransactionResponse } from "ethers";
import type { Signer, ContractDeployTransaction, ContractRunner } from "ethers";
import type { NonPayableOverrides } from "../../../common";
import type { SingletonFactory, SingletonFactoryInterface } from "../../../contracts/Governance/SingletonFactory";
type SingletonFactoryConstructorParams = [signer?: Signer] | ConstructorParameters<typeof ContractFactory>;
export declare class SingletonFactory__factory extends ContractFactory {
constructor(...args: SingletonFactoryConstructorParams);
getDeployTransaction(overrides?: NonPayableOverrides & {
from?: string;
}): Promise<ContractDeployTransaction>;
deploy(overrides?: NonPayableOverrides & {
from?: string;
}): Promise<SingletonFactory & {
deploymentTransaction(): ContractTransactionResponse;
}>;
connect(runner: ContractRunner | null): SingletonFactory__factory;
static readonly bytecode = "0x608060405234801561001057600080fd5b50610134806100206000396000f3fe6080604052348015600f57600080fd5b506004361060285760003560e01c80634af63f0214602d575b600080fd5b60cf60048036036040811015604157600080fd5b810190602081018135640100000000811115605b57600080fd5b820183602082011115606c57600080fd5b80359060200191846001830284011164010000000083111715608d57600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250929550509135925060eb915050565b604080516001600160a01b039092168252519081900360200190f35b6000818351602085016000f5939250505056fea26469706673582212208761ae5cfc40689ce98cd25a56b929c259b167501a941e4f0164890ebab1c0bb64736f6c634300060c0033";
static readonly abi: readonly [{
readonly inputs: readonly [{
readonly internalType: "bytes";
readonly name: "_initCode";
readonly type: "bytes";
}, {
readonly internalType: "bytes32";
readonly name: "_salt";
readonly type: "bytes32";
}];
readonly name: "deploy";
readonly outputs: readonly [{
readonly internalType: "address payable";
readonly name: "createdContract";
readonly type: "address";
}];
readonly stateMutability: "nonpayable";
readonly type: "function";
}];
static createInterface(): SingletonFactoryInterface;
static connect(address: string, runner?: ContractRunner | null): SingletonFactory;
}
export {};

@ -17,5 +17,6 @@ export { AdminUpgradeableProxy__factory } from "./AdminUpgradeableProxy__factory
export { FeeManager__factory } from "./FeeManager__factory";
export { GasCompensationVault__factory } from "./GasCompensationVault__factory";
export { LoopbackProxy__factory } from "./LoopbackProxy__factory";
export { SingletonFactory__factory } from "./SingletonFactory__factory";
export { TornadoRouter__factory } from "./TornadoRouter__factory";
export { TornadoVault__factory } from "./TornadoVault__factory";

6
dist/index.d.ts vendored

@ -35,6 +35,8 @@ export type { ERC20Tornado } from "./contracts/Classic/ERC20Tornado";
export { ERC20Tornado__factory } from "./factories/contracts/Classic/ERC20Tornado__factory";
export type { ETHTornado } from "./contracts/Classic/ETHTornado";
export { ETHTornado__factory } from "./factories/contracts/Classic/ETHTornado__factory";
export type { ISignatureTransfer } from "./contracts/Classic/interfaces/ISignatureTransfer";
export { ISignatureTransfer__factory } from "./factories/contracts/Classic/interfaces/ISignatureTransfer__factory";
export type { IHasher } from "./contracts/Classic/MerkleTreeWithHistory.sol/IHasher";
export { IHasher__factory } from "./factories/contracts/Classic/MerkleTreeWithHistory.sol/IHasher__factory";
export type { MerkleTreeWithHistory } from "./contracts/Classic/MerkleTreeWithHistory.sol/MerkleTreeWithHistory";
@ -51,6 +53,8 @@ export type { IUSDT } from "./contracts/Classic/Mocks/IUSDT.sol/IUSDT";
export { IUSDT__factory } from "./factories/contracts/Classic/Mocks/IUSDT.sol/IUSDT__factory";
export type { MerkleTreeWithHistoryMock } from "./contracts/Classic/Mocks/MerkleTreeWithHistoryMock";
export { MerkleTreeWithHistoryMock__factory } from "./factories/contracts/Classic/Mocks/MerkleTreeWithHistoryMock__factory";
export type { PermitTornado } from "./contracts/Classic/PermitTornado";
export { PermitTornado__factory } from "./factories/contracts/Classic/PermitTornado__factory";
export type { IVerifier } from "./contracts/Classic/Tornado.sol/IVerifier";
export { IVerifier__factory } from "./factories/contracts/Classic/Tornado.sol/IVerifier__factory";
export type { Tornado } from "./contracts/Classic/Tornado.sol/Tornado";
@ -95,6 +99,8 @@ export type { IFeeManager } from "./contracts/Governance/RelayerRegistry.sol/IFe
export { IFeeManager__factory } from "./factories/contracts/Governance/RelayerRegistry.sol/IFeeManager__factory";
export type { RelayerRegistry } from "./contracts/Governance/RelayerRegistry.sol/RelayerRegistry";
export { RelayerRegistry__factory } from "./factories/contracts/Governance/RelayerRegistry.sol/RelayerRegistry__factory";
export type { SingletonFactory } from "./contracts/Governance/SingletonFactory";
export { SingletonFactory__factory } from "./factories/contracts/Governance/SingletonFactory__factory";
export type { TestnetAdminProxy } from "./contracts/Governance/Testnet/TestnetAdminProxy";
export { TestnetAdminProxy__factory } from "./factories/contracts/Governance/Testnet/TestnetAdminProxy__factory";
export type { TestnetFeeManager } from "./contracts/Governance/Testnet/TestnetFeeManager";

2687
dist/index.js vendored

File diff suppressed because one or more lines are too long

2686
dist/index.mjs vendored

File diff suppressed because one or more lines are too long

@ -39,7 +39,7 @@ const config: HardhatUserConfig = {
solidity: {
compilers: [
{
version: '0.8.25',
version: '0.8.28',
settings: {
evmVersion: 'paris',
optimizer: {

@ -1,6 +1,6 @@
{
"name": "@tornado/contracts",
"version": "1.0.1",
"version": "1.0.2",
"main": "./dist/index.js",
"module": "./dist/index.mjs",
"types": "./dist/index.d.ts",
@ -10,7 +10,7 @@
"compile": "hardhat clean && hardhat compile && hardhat flatten:all",
"build": "yarn compile && yarn types && rollup -c",
"deploy": "hardhat run ./scripts/deploy.ts",
"lint": "eslint . --ext .ts --fix"
"lint": "eslint . --ext .ts --ignore-pattern dist"
},
"files": [
"contracts",
@ -29,35 +29,41 @@
"devDependencies": {
"@nomicfoundation/hardhat-chai-matchers": "^2.0.6",
"@nomicfoundation/hardhat-ethers": "^3.0.5",
"@nomicfoundation/hardhat-ignition": "0.15.0",
"@nomicfoundation/hardhat-ignition-ethers": "0.15.0",
"@nomicfoundation/hardhat-network-helpers": "^1.0.10",
"@nomicfoundation/hardhat-toolbox": "4.0.0",
"@nomicfoundation/hardhat-toolbox": "^5.0.0",
"@nomicfoundation/hardhat-verify": "^2.0.5",
"@rollup/plugin-commonjs": "^25.0.7",
"@rollup/plugin-node-resolve": "^15.2.3",
"@nomicfoundation/ignition-core": "0.15.0",
"@rollup/plugin-commonjs": "^28.0.0",
"@rollup/plugin-node-resolve": "^15.3.0",
"@typechain/ethers-v6": "^0.5.1",
"@typechain/hardhat": "^9.1.0",
"@types/chai": "^4.3.14",
"@types/chai": "^4.3.20",
"@types/mocha": "^9.1.1",
"@types/node": "^20.12.2",
"@typescript-eslint/eslint-plugin": "^7.4.0",
"@typescript-eslint/parser": "^7.4.0",
"@types/node": "^22.7.5",
"@typescript-eslint/eslint-plugin": "^8.8.1",
"@typescript-eslint/parser": "^8.8.1",
"chai": "^4.4.1",
"esbuild": "^0.20.2",
"eslint": "^8.57.0",
"hardhat": "2.20.1",
"hardhat-gas-reporter": "^1.0.10",
"esbuild": "^0.24.0",
"eslint": "8.57.0",
"hardhat": "^2.22.13",
"hardhat-gas-reporter": "^2.2.1",
"hardhat-storage-layout": "^0.1.7",
"hardhat-tracer": "^2.8.1",
"rollup": "^4.14.1",
"hardhat-tracer": "^3.1.0",
"rollup": "^4.24.0",
"rollup-plugin-esbuild": "^6.1.1",
"solidity-coverage": "^0.8.11",
"ts-node": "^10.9.2",
"typechain": "^8.3.2",
"typescript": "^5.4.3"
"typescript": "^5.6.3"
},
"dependencies": {
"ethers": "^6.4.0",
"@openzeppelin/contracts": "5.0.2",
"@openzeppelin/contracts-v3": "npm:@openzeppelin/contracts@3.2.0-rc.0"
"@openzeppelin/contracts-v3": "npm:@openzeppelin/contracts@3.2.0-rc.0",
"ethers": "^6.13.4"
},
"resolutions": {
"strip-ansi": "6.0.1"
}
}

@ -0,0 +1,588 @@
/* Autogenerated file. Do not edit manually. */
/* tslint:disable */
/* eslint-disable */
import type {
BaseContract,
BigNumberish,
BytesLike,
FunctionFragment,
Result,
Interface,
EventFragment,
AddressLike,
ContractRunner,
ContractMethod,
Listener,
} from "ethers";
import type {
TypedContractEvent,
TypedDeferredTopicFilter,
TypedEventLog,
TypedLogDescription,
TypedListener,
TypedContractMethod,
} from "../../common";
export declare namespace ISignatureTransfer {
export type TokenPermissionsStruct = {
token: AddressLike;
amount: BigNumberish;
};
export type TokenPermissionsStructOutput = [token: string, amount: bigint] & {
token: string;
amount: bigint;
};
export type PermitTransferFromStruct = {
permitted: ISignatureTransfer.TokenPermissionsStruct;
nonce: BigNumberish;
deadline: BigNumberish;
};
export type PermitTransferFromStructOutput = [
permitted: ISignatureTransfer.TokenPermissionsStructOutput,
nonce: bigint,
deadline: bigint
] & {
permitted: ISignatureTransfer.TokenPermissionsStructOutput;
nonce: bigint;
deadline: bigint;
};
}
export interface PermitTornadoInterface extends Interface {
getFunction(
nameOrSignature:
| "FIELD_SIZE"
| "ROOT_HISTORY_SIZE"
| "ZERO_VALUE"
| "commitments"
| "currentRootIndex"
| "denomination"
| "deposit"
| "depositWithPermit"
| "depositWithPermit2"
| "filledSubtrees"
| "getLastRoot"
| "hashLeftRight"
| "hasher"
| "isKnownRoot"
| "isSpent"
| "isSpentArray"
| "levels"
| "nextIndex"
| "nullifierHashes"
| "permit2"
| "roots"
| "token"
| "tornadoProxyLight"
| "verifier"
| "withdraw"
| "zeros"
): FunctionFragment;
getEvent(nameOrSignatureOrTopic: "Deposit" | "Withdrawal"): EventFragment;
encodeFunctionData(
functionFragment: "FIELD_SIZE",
values?: undefined
): string;
encodeFunctionData(
functionFragment: "ROOT_HISTORY_SIZE",
values?: undefined
): string;
encodeFunctionData(
functionFragment: "ZERO_VALUE",
values?: undefined
): string;
encodeFunctionData(
functionFragment: "commitments",
values: [BytesLike]
): string;
encodeFunctionData(
functionFragment: "currentRootIndex",
values?: undefined
): string;
encodeFunctionData(
functionFragment: "denomination",
values?: undefined
): string;
encodeFunctionData(functionFragment: "deposit", values: [BytesLike]): string;
encodeFunctionData(
functionFragment: "depositWithPermit",
values: [
BytesLike,
AddressLike,
BigNumberish,
BigNumberish,
BytesLike,
BytesLike
]
): string;
encodeFunctionData(
functionFragment: "depositWithPermit2",
values: [
BytesLike,
AddressLike,
ISignatureTransfer.PermitTransferFromStruct,
BytesLike
]
): string;
encodeFunctionData(
functionFragment: "filledSubtrees",
values: [BigNumberish]
): string;
encodeFunctionData(
functionFragment: "getLastRoot",
values?: undefined
): string;
encodeFunctionData(
functionFragment: "hashLeftRight",
values: [AddressLike, BytesLike, BytesLike]
): string;
encodeFunctionData(functionFragment: "hasher", values?: undefined): string;
encodeFunctionData(
functionFragment: "isKnownRoot",
values: [BytesLike]
): string;
encodeFunctionData(functionFragment: "isSpent", values: [BytesLike]): string;
encodeFunctionData(
functionFragment: "isSpentArray",
values: [BytesLike[]]
): string;
encodeFunctionData(functionFragment: "levels", values?: undefined): string;
encodeFunctionData(functionFragment: "nextIndex", values?: undefined): string;
encodeFunctionData(
functionFragment: "nullifierHashes",
values: [BytesLike]
): string;
encodeFunctionData(functionFragment: "permit2", values?: undefined): string;
encodeFunctionData(functionFragment: "roots", values: [BigNumberish]): string;
encodeFunctionData(functionFragment: "token", values?: undefined): string;
encodeFunctionData(
functionFragment: "tornadoProxyLight",
values?: undefined
): string;
encodeFunctionData(functionFragment: "verifier", values?: undefined): string;
encodeFunctionData(
functionFragment: "withdraw",
values: [
BytesLike,
BytesLike,
BytesLike,
AddressLike,
AddressLike,
BigNumberish,
BigNumberish
]
): string;
encodeFunctionData(functionFragment: "zeros", values: [BigNumberish]): string;
decodeFunctionResult(functionFragment: "FIELD_SIZE", data: BytesLike): Result;
decodeFunctionResult(
functionFragment: "ROOT_HISTORY_SIZE",
data: BytesLike
): Result;
decodeFunctionResult(functionFragment: "ZERO_VALUE", data: BytesLike): Result;
decodeFunctionResult(
functionFragment: "commitments",
data: BytesLike
): Result;
decodeFunctionResult(
functionFragment: "currentRootIndex",
data: BytesLike
): Result;
decodeFunctionResult(
functionFragment: "denomination",
data: BytesLike
): Result;
decodeFunctionResult(functionFragment: "deposit", data: BytesLike): Result;
decodeFunctionResult(
functionFragment: "depositWithPermit",
data: BytesLike
): Result;
decodeFunctionResult(
functionFragment: "depositWithPermit2",
data: BytesLike
): Result;
decodeFunctionResult(
functionFragment: "filledSubtrees",
data: BytesLike
): Result;
decodeFunctionResult(
functionFragment: "getLastRoot",
data: BytesLike
): Result;
decodeFunctionResult(
functionFragment: "hashLeftRight",
data: BytesLike
): Result;
decodeFunctionResult(functionFragment: "hasher", data: BytesLike): Result;
decodeFunctionResult(
functionFragment: "isKnownRoot",
data: BytesLike
): Result;
decodeFunctionResult(functionFragment: "isSpent", data: BytesLike): Result;
decodeFunctionResult(
functionFragment: "isSpentArray",
data: BytesLike
): Result;
decodeFunctionResult(functionFragment: "levels", data: BytesLike): Result;
decodeFunctionResult(functionFragment: "nextIndex", data: BytesLike): Result;
decodeFunctionResult(
functionFragment: "nullifierHashes",
data: BytesLike
): Result;
decodeFunctionResult(functionFragment: "permit2", data: BytesLike): Result;
decodeFunctionResult(functionFragment: "roots", data: BytesLike): Result;
decodeFunctionResult(functionFragment: "token", data: BytesLike): Result;
decodeFunctionResult(
functionFragment: "tornadoProxyLight",
data: BytesLike
): Result;
decodeFunctionResult(functionFragment: "verifier", data: BytesLike): Result;
decodeFunctionResult(functionFragment: "withdraw", data: BytesLike): Result;
decodeFunctionResult(functionFragment: "zeros", data: BytesLike): Result;
}
export namespace DepositEvent {
export type InputTuple = [
commitment: BytesLike,
leafIndex: BigNumberish,
timestamp: BigNumberish
];
export type OutputTuple = [
commitment: string,
leafIndex: bigint,
timestamp: bigint
];
export interface OutputObject {
commitment: string;
leafIndex: bigint;
timestamp: bigint;
}
export type Event = TypedContractEvent<InputTuple, OutputTuple, OutputObject>;
export type Filter = TypedDeferredTopicFilter<Event>;
export type Log = TypedEventLog<Event>;
export type LogDescription = TypedLogDescription<Event>;
}
export namespace WithdrawalEvent {
export type InputTuple = [
to: AddressLike,
nullifierHash: BytesLike,
relayer: AddressLike,
fee: BigNumberish
];
export type OutputTuple = [
to: string,
nullifierHash: string,
relayer: string,
fee: bigint
];
export interface OutputObject {
to: string;
nullifierHash: string;
relayer: string;
fee: bigint;
}
export type Event = TypedContractEvent<InputTuple, OutputTuple, OutputObject>;
export type Filter = TypedDeferredTopicFilter<Event>;
export type Log = TypedEventLog<Event>;
export type LogDescription = TypedLogDescription<Event>;
}
export interface PermitTornado extends BaseContract {
connect(runner?: ContractRunner | null): PermitTornado;
waitForDeployment(): Promise<this>;
interface: PermitTornadoInterface;
queryFilter<TCEvent extends TypedContractEvent>(
event: TCEvent,
fromBlockOrBlockhash?: string | number | undefined,
toBlock?: string | number | undefined
): Promise<Array<TypedEventLog<TCEvent>>>;
queryFilter<TCEvent extends TypedContractEvent>(
filter: TypedDeferredTopicFilter<TCEvent>,
fromBlockOrBlockhash?: string | number | undefined,
toBlock?: string | number | undefined
): Promise<Array<TypedEventLog<TCEvent>>>;
on<TCEvent extends TypedContractEvent>(
event: TCEvent,
listener: TypedListener<TCEvent>
): Promise<this>;
on<TCEvent extends TypedContractEvent>(
filter: TypedDeferredTopicFilter<TCEvent>,
listener: TypedListener<TCEvent>
): Promise<this>;
once<TCEvent extends TypedContractEvent>(
event: TCEvent,
listener: TypedListener<TCEvent>
): Promise<this>;
once<TCEvent extends TypedContractEvent>(
filter: TypedDeferredTopicFilter<TCEvent>,
listener: TypedListener<TCEvent>
): Promise<this>;
listeners<TCEvent extends TypedContractEvent>(
event: TCEvent
): Promise<Array<TypedListener<TCEvent>>>;
listeners(eventName?: string): Promise<Array<Listener>>;
removeAllListeners<TCEvent extends TypedContractEvent>(
event?: TCEvent
): Promise<this>;
FIELD_SIZE: TypedContractMethod<[], [bigint], "view">;
ROOT_HISTORY_SIZE: TypedContractMethod<[], [bigint], "view">;
ZERO_VALUE: TypedContractMethod<[], [bigint], "view">;
commitments: TypedContractMethod<[arg0: BytesLike], [boolean], "view">;
currentRootIndex: TypedContractMethod<[], [bigint], "view">;
denomination: TypedContractMethod<[], [bigint], "view">;
deposit: TypedContractMethod<[_commitment: BytesLike], [void], "payable">;
depositWithPermit: TypedContractMethod<
[
commitment: BytesLike,
owner: AddressLike,
deadline: BigNumberish,
v: BigNumberish,
r: BytesLike,
s: BytesLike
],
[void],
"nonpayable"
>;
depositWithPermit2: TypedContractMethod<
[
commitment: BytesLike,
owner: AddressLike,
_permit: ISignatureTransfer.PermitTransferFromStruct,
_signature: BytesLike
],
[void],
"nonpayable"
>;
filledSubtrees: TypedContractMethod<[arg0: BigNumberish], [string], "view">;
getLastRoot: TypedContractMethod<[], [string], "view">;
hashLeftRight: TypedContractMethod<
[_hasher: AddressLike, _left: BytesLike, _right: BytesLike],
[string],
"view"
>;
hasher: TypedContractMethod<[], [string], "view">;
isKnownRoot: TypedContractMethod<[_root: BytesLike], [boolean], "view">;
isSpent: TypedContractMethod<[_nullifierHash: BytesLike], [boolean], "view">;
isSpentArray: TypedContractMethod<
[_nullifierHashes: BytesLike[]],
[boolean[]],
"view"
>;
levels: TypedContractMethod<[], [bigint], "view">;
nextIndex: TypedContractMethod<[], [bigint], "view">;
nullifierHashes: TypedContractMethod<[arg0: BytesLike], [boolean], "view">;
permit2: TypedContractMethod<[], [string], "view">;
roots: TypedContractMethod<[arg0: BigNumberish], [string], "view">;
token: TypedContractMethod<[], [string], "view">;
tornadoProxyLight: TypedContractMethod<[], [string], "view">;
verifier: TypedContractMethod<[], [string], "view">;
withdraw: TypedContractMethod<
[
_proof: BytesLike,
_root: BytesLike,
_nullifierHash: BytesLike,
_recipient: AddressLike,
_relayer: AddressLike,
_fee: BigNumberish,
_refund: BigNumberish
],
[void],
"payable"
>;
zeros: TypedContractMethod<[arg0: BigNumberish], [string], "view">;
getFunction<T extends ContractMethod = ContractMethod>(
key: string | FunctionFragment
): T;
getFunction(
nameOrSignature: "FIELD_SIZE"
): TypedContractMethod<[], [bigint], "view">;
getFunction(
nameOrSignature: "ROOT_HISTORY_SIZE"
): TypedContractMethod<[], [bigint], "view">;
getFunction(
nameOrSignature: "ZERO_VALUE"
): TypedContractMethod<[], [bigint], "view">;
getFunction(
nameOrSignature: "commitments"
): TypedContractMethod<[arg0: BytesLike], [boolean], "view">;
getFunction(
nameOrSignature: "currentRootIndex"
): TypedContractMethod<[], [bigint], "view">;
getFunction(
nameOrSignature: "denomination"
): TypedContractMethod<[], [bigint], "view">;
getFunction(
nameOrSignature: "deposit"
): TypedContractMethod<[_commitment: BytesLike], [void], "payable">;
getFunction(
nameOrSignature: "depositWithPermit"
): TypedContractMethod<
[
commitment: BytesLike,
owner: AddressLike,
deadline: BigNumberish,
v: BigNumberish,
r: BytesLike,
s: BytesLike
],
[void],
"nonpayable"
>;
getFunction(
nameOrSignature: "depositWithPermit2"
): TypedContractMethod<
[
commitment: BytesLike,
owner: AddressLike,
_permit: ISignatureTransfer.PermitTransferFromStruct,
_signature: BytesLike
],
[void],
"nonpayable"
>;
getFunction(
nameOrSignature: "filledSubtrees"
): TypedContractMethod<[arg0: BigNumberish], [string], "view">;
getFunction(
nameOrSignature: "getLastRoot"
): TypedContractMethod<[], [string], "view">;
getFunction(
nameOrSignature: "hashLeftRight"
): TypedContractMethod<
[_hasher: AddressLike, _left: BytesLike, _right: BytesLike],
[string],
"view"
>;
getFunction(
nameOrSignature: "hasher"
): TypedContractMethod<[], [string], "view">;
getFunction(
nameOrSignature: "isKnownRoot"
): TypedContractMethod<[_root: BytesLike], [boolean], "view">;
getFunction(
nameOrSignature: "isSpent"
): TypedContractMethod<[_nullifierHash: BytesLike], [boolean], "view">;
getFunction(
nameOrSignature: "isSpentArray"
): TypedContractMethod<[_nullifierHashes: BytesLike[]], [boolean[]], "view">;
getFunction(
nameOrSignature: "levels"
): TypedContractMethod<[], [bigint], "view">;
getFunction(
nameOrSignature: "nextIndex"
): TypedContractMethod<[], [bigint], "view">;
getFunction(
nameOrSignature: "nullifierHashes"
): TypedContractMethod<[arg0: BytesLike], [boolean], "view">;
getFunction(
nameOrSignature: "permit2"
): TypedContractMethod<[], [string], "view">;
getFunction(
nameOrSignature: "roots"
): TypedContractMethod<[arg0: BigNumberish], [string], "view">;
getFunction(
nameOrSignature: "token"
): TypedContractMethod<[], [string], "view">;
getFunction(
nameOrSignature: "tornadoProxyLight"
): TypedContractMethod<[], [string], "view">;
getFunction(
nameOrSignature: "verifier"
): TypedContractMethod<[], [string], "view">;
getFunction(
nameOrSignature: "withdraw"
): TypedContractMethod<
[
_proof: BytesLike,
_root: BytesLike,
_nullifierHash: BytesLike,
_recipient: AddressLike,
_relayer: AddressLike,
_fee: BigNumberish,
_refund: BigNumberish
],
[void],
"payable"
>;
getFunction(
nameOrSignature: "zeros"
): TypedContractMethod<[arg0: BigNumberish], [string], "view">;
getEvent(
key: "Deposit"
): TypedContractEvent<
DepositEvent.InputTuple,
DepositEvent.OutputTuple,
DepositEvent.OutputObject
>;
getEvent(
key: "Withdrawal"
): TypedContractEvent<
WithdrawalEvent.InputTuple,
WithdrawalEvent.OutputTuple,
WithdrawalEvent.OutputObject
>;
filters: {
"Deposit(bytes32,uint32,uint256)": TypedContractEvent<
DepositEvent.InputTuple,
DepositEvent.OutputTuple,
DepositEvent.OutputObject
>;
Deposit: TypedContractEvent<
DepositEvent.InputTuple,
DepositEvent.OutputTuple,
DepositEvent.OutputObject
>;
"Withdrawal(address,bytes32,address,uint256)": TypedContractEvent<
WithdrawalEvent.InputTuple,
WithdrawalEvent.OutputTuple,
WithdrawalEvent.OutputObject
>;
Withdrawal: TypedContractEvent<
WithdrawalEvent.InputTuple,
WithdrawalEvent.OutputTuple,
WithdrawalEvent.OutputObject
>;
};
}

@ -14,5 +14,6 @@ export type { interfaces };
export type { ERC20Tornado } from "./ERC20Tornado";
export type { ETHTornado } from "./ETHTornado";
export type { Echoer } from "./Echoer";
export type { PermitTornado } from "./PermitTornado";
export type { Verifier } from "./Verifier";
export type { CTornado } from "./CTornado";

@ -0,0 +1,394 @@
/* Autogenerated file. Do not edit manually. */
/* tslint:disable */
/* eslint-disable */
import type {
BaseContract,
BigNumberish,
BytesLike,
FunctionFragment,
Result,
Interface,
EventFragment,
AddressLike,
ContractRunner,
ContractMethod,
Listener,
} from "ethers";
import type {
TypedContractEvent,
TypedDeferredTopicFilter,
TypedEventLog,
TypedLogDescription,
TypedListener,
TypedContractMethod,
} from "../../../common";
export declare namespace ISignatureTransfer {
export type TokenPermissionsStruct = {
token: AddressLike;
amount: BigNumberish;
};
export type TokenPermissionsStructOutput = [token: string, amount: bigint] & {
token: string;
amount: bigint;
};
export type PermitTransferFromStruct = {
permitted: ISignatureTransfer.TokenPermissionsStruct;
nonce: BigNumberish;
deadline: BigNumberish;
};
export type PermitTransferFromStructOutput = [
permitted: ISignatureTransfer.TokenPermissionsStructOutput,
nonce: bigint,
deadline: bigint
] & {
permitted: ISignatureTransfer.TokenPermissionsStructOutput;
nonce: bigint;
deadline: bigint;
};
export type SignatureTransferDetailsStruct = {
to: AddressLike;
requestedAmount: BigNumberish;
};
export type SignatureTransferDetailsStructOutput = [
to: string,
requestedAmount: bigint
] & { to: string; requestedAmount: bigint };
export type PermitBatchTransferFromStruct = {
permitted: ISignatureTransfer.TokenPermissionsStruct[];
nonce: BigNumberish;
deadline: BigNumberish;
};
export type PermitBatchTransferFromStructOutput = [
permitted: ISignatureTransfer.TokenPermissionsStructOutput[],
nonce: bigint,
deadline: bigint
] & {
permitted: ISignatureTransfer.TokenPermissionsStructOutput[];
nonce: bigint;
deadline: bigint;
};
}
export interface ISignatureTransferInterface extends Interface {
getFunction(
nameOrSignature:
| "DOMAIN_SEPARATOR"
| "invalidateUnorderedNonces"
| "nonceBitmap"
| "permitTransferFrom(((address,uint256),uint256,uint256),(address,uint256),address,bytes)"
| "permitTransferFrom(((address,uint256)[],uint256,uint256),(address,uint256)[],address,bytes)"
| "permitWitnessTransferFrom(((address,uint256),uint256,uint256),(address,uint256),address,bytes32,string,bytes)"
| "permitWitnessTransferFrom(((address,uint256)[],uint256,uint256),(address,uint256)[],address,bytes32,string,bytes)"
): FunctionFragment;
getEvent(nameOrSignatureOrTopic: "UnorderedNonceInvalidation"): EventFragment;
encodeFunctionData(
functionFragment: "DOMAIN_SEPARATOR",
values?: undefined
): string;
encodeFunctionData(
functionFragment: "invalidateUnorderedNonces",
values: [BigNumberish, BigNumberish]
): string;
encodeFunctionData(
functionFragment: "nonceBitmap",
values: [AddressLike, BigNumberish]
): string;
encodeFunctionData(
functionFragment: "permitTransferFrom(((address,uint256),uint256,uint256),(address,uint256),address,bytes)",
values: [
ISignatureTransfer.PermitTransferFromStruct,
ISignatureTransfer.SignatureTransferDetailsStruct,
AddressLike,
BytesLike
]
): string;
encodeFunctionData(
functionFragment: "permitTransferFrom(((address,uint256)[],uint256,uint256),(address,uint256)[],address,bytes)",
values: [
ISignatureTransfer.PermitBatchTransferFromStruct,
ISignatureTransfer.SignatureTransferDetailsStruct[],
AddressLike,
BytesLike
]
): string;
encodeFunctionData(
functionFragment: "permitWitnessTransferFrom(((address,uint256),uint256,uint256),(address,uint256),address,bytes32,string,bytes)",
values: [
ISignatureTransfer.PermitTransferFromStruct,
ISignatureTransfer.SignatureTransferDetailsStruct,
AddressLike,
BytesLike,
string,
BytesLike
]
): string;
encodeFunctionData(
functionFragment: "permitWitnessTransferFrom(((address,uint256)[],uint256,uint256),(address,uint256)[],address,bytes32,string,bytes)",
values: [
ISignatureTransfer.PermitBatchTransferFromStruct,
ISignatureTransfer.SignatureTransferDetailsStruct[],
AddressLike,
BytesLike,
string,
BytesLike
]
): string;
decodeFunctionResult(
functionFragment: "DOMAIN_SEPARATOR",
data: BytesLike
): Result;
decodeFunctionResult(
functionFragment: "invalidateUnorderedNonces",
data: BytesLike
): Result;
decodeFunctionResult(
functionFragment: "nonceBitmap",
data: BytesLike
): Result;
decodeFunctionResult(
functionFragment: "permitTransferFrom(((address,uint256),uint256,uint256),(address,uint256),address,bytes)",
data: BytesLike
): Result;
decodeFunctionResult(
functionFragment: "permitTransferFrom(((address,uint256)[],uint256,uint256),(address,uint256)[],address,bytes)",
data: BytesLike
): Result;
decodeFunctionResult(
functionFragment: "permitWitnessTransferFrom(((address,uint256),uint256,uint256),(address,uint256),address,bytes32,string,bytes)",
data: BytesLike
): Result;
decodeFunctionResult(
functionFragment: "permitWitnessTransferFrom(((address,uint256)[],uint256,uint256),(address,uint256)[],address,bytes32,string,bytes)",
data: BytesLike
): Result;
}
export namespace UnorderedNonceInvalidationEvent {
export type InputTuple = [
owner: AddressLike,
word: BigNumberish,
mask: BigNumberish
];
export type OutputTuple = [owner: string, word: bigint, mask: bigint];
export interface OutputObject {
owner: string;
word: bigint;
mask: bigint;
}
export type Event = TypedContractEvent<InputTuple, OutputTuple, OutputObject>;
export type Filter = TypedDeferredTopicFilter<Event>;
export type Log = TypedEventLog<Event>;
export type LogDescription = TypedLogDescription<Event>;
}
export interface ISignatureTransfer extends BaseContract {
connect(runner?: ContractRunner | null): ISignatureTransfer;
waitForDeployment(): Promise<this>;
interface: ISignatureTransferInterface;
queryFilter<TCEvent extends TypedContractEvent>(
event: TCEvent,
fromBlockOrBlockhash?: string | number | undefined,
toBlock?: string | number | undefined
): Promise<Array<TypedEventLog<TCEvent>>>;
queryFilter<TCEvent extends TypedContractEvent>(
filter: TypedDeferredTopicFilter<TCEvent>,
fromBlockOrBlockhash?: string | number | undefined,
toBlock?: string | number | undefined
): Promise<Array<TypedEventLog<TCEvent>>>;
on<TCEvent extends TypedContractEvent>(
event: TCEvent,
listener: TypedListener<TCEvent>
): Promise<this>;
on<TCEvent extends TypedContractEvent>(
filter: TypedDeferredTopicFilter<TCEvent>,
listener: TypedListener<TCEvent>
): Promise<this>;
once<TCEvent extends TypedContractEvent>(
event: TCEvent,
listener: TypedListener<TCEvent>
): Promise<this>;
once<TCEvent extends TypedContractEvent>(
filter: TypedDeferredTopicFilter<TCEvent>,
listener: TypedListener<TCEvent>
): Promise<this>;
listeners<TCEvent extends TypedContractEvent>(
event: TCEvent
): Promise<Array<TypedListener<TCEvent>>>;
listeners(eventName?: string): Promise<Array<Listener>>;
removeAllListeners<TCEvent extends TypedContractEvent>(
event?: TCEvent
): Promise<this>;
DOMAIN_SEPARATOR: TypedContractMethod<[], [string], "view">;
invalidateUnorderedNonces: TypedContractMethod<
[wordPos: BigNumberish, mask: BigNumberish],
[void],
"nonpayable"
>;
nonceBitmap: TypedContractMethod<
[arg0: AddressLike, arg1: BigNumberish],
[bigint],
"view"
>;
"permitTransferFrom(((address,uint256),uint256,uint256),(address,uint256),address,bytes)": TypedContractMethod<
[
permit: ISignatureTransfer.PermitTransferFromStruct,
transferDetails: ISignatureTransfer.SignatureTransferDetailsStruct,
owner: AddressLike,
signature: BytesLike
],
[void],
"nonpayable"
>;
"permitTransferFrom(((address,uint256)[],uint256,uint256),(address,uint256)[],address,bytes)": TypedContractMethod<
[
permit: ISignatureTransfer.PermitBatchTransferFromStruct,
transferDetails: ISignatureTransfer.SignatureTransferDetailsStruct[],
owner: AddressLike,
signature: BytesLike
],
[void],
"nonpayable"
>;
"permitWitnessTransferFrom(((address,uint256),uint256,uint256),(address,uint256),address,bytes32,string,bytes)": TypedContractMethod<
[
permit: ISignatureTransfer.PermitTransferFromStruct,
transferDetails: ISignatureTransfer.SignatureTransferDetailsStruct,
owner: AddressLike,
witness: BytesLike,
witnessTypeString: string,
signature: BytesLike
],
[void],
"nonpayable"
>;
"permitWitnessTransferFrom(((address,uint256)[],uint256,uint256),(address,uint256)[],address,bytes32,string,bytes)": TypedContractMethod<
[
permit: ISignatureTransfer.PermitBatchTransferFromStruct,
transferDetails: ISignatureTransfer.SignatureTransferDetailsStruct[],
owner: AddressLike,
witness: BytesLike,
witnessTypeString: string,
signature: BytesLike
],
[void],
"nonpayable"
>;
getFunction<T extends ContractMethod = ContractMethod>(
key: string | FunctionFragment
): T;
getFunction(
nameOrSignature: "DOMAIN_SEPARATOR"
): TypedContractMethod<[], [string], "view">;
getFunction(
nameOrSignature: "invalidateUnorderedNonces"
): TypedContractMethod<
[wordPos: BigNumberish, mask: BigNumberish],
[void],
"nonpayable"
>;
getFunction(
nameOrSignature: "nonceBitmap"
): TypedContractMethod<
[arg0: AddressLike, arg1: BigNumberish],
[bigint],
"view"
>;
getFunction(
nameOrSignature: "permitTransferFrom(((address,uint256),uint256,uint256),(address,uint256),address,bytes)"
): TypedContractMethod<
[
permit: ISignatureTransfer.PermitTransferFromStruct,
transferDetails: ISignatureTransfer.SignatureTransferDetailsStruct,
owner: AddressLike,
signature: BytesLike
],
[void],
"nonpayable"
>;
getFunction(
nameOrSignature: "permitTransferFrom(((address,uint256)[],uint256,uint256),(address,uint256)[],address,bytes)"
): TypedContractMethod<
[
permit: ISignatureTransfer.PermitBatchTransferFromStruct,
transferDetails: ISignatureTransfer.SignatureTransferDetailsStruct[],
owner: AddressLike,
signature: BytesLike
],
[void],
"nonpayable"
>;
getFunction(
nameOrSignature: "permitWitnessTransferFrom(((address,uint256),uint256,uint256),(address,uint256),address,bytes32,string,bytes)"
): TypedContractMethod<
[
permit: ISignatureTransfer.PermitTransferFromStruct,
transferDetails: ISignatureTransfer.SignatureTransferDetailsStruct,
owner: AddressLike,
witness: BytesLike,
witnessTypeString: string,
signature: BytesLike
],
[void],
"nonpayable"
>;
getFunction(
nameOrSignature: "permitWitnessTransferFrom(((address,uint256)[],uint256,uint256),(address,uint256)[],address,bytes32,string,bytes)"
): TypedContractMethod<
[
permit: ISignatureTransfer.PermitBatchTransferFromStruct,
transferDetails: ISignatureTransfer.SignatureTransferDetailsStruct[],
owner: AddressLike,
witness: BytesLike,
witnessTypeString: string,
signature: BytesLike
],
[void],
"nonpayable"
>;
getEvent(
key: "UnorderedNonceInvalidation"
): TypedContractEvent<
UnorderedNonceInvalidationEvent.InputTuple,
UnorderedNonceInvalidationEvent.OutputTuple,
UnorderedNonceInvalidationEvent.OutputObject
>;
filters: {
"UnorderedNonceInvalidation(address,uint256,uint256)": TypedContractEvent<
UnorderedNonceInvalidationEvent.InputTuple,
UnorderedNonceInvalidationEvent.OutputTuple,
UnorderedNonceInvalidationEvent.OutputObject
>;
UnorderedNonceInvalidation: TypedContractEvent<
UnorderedNonceInvalidationEvent.InputTuple,
UnorderedNonceInvalidationEvent.OutputTuple,
UnorderedNonceInvalidationEvent.OutputObject
>;
};
}

@ -2,3 +2,4 @@
/* tslint:disable */
/* eslint-disable */
export type { IERC20 } from "./IERC20";
export type { ISignatureTransfer } from "./ISignatureTransfer";

@ -0,0 +1,95 @@
/* Autogenerated file. Do not edit manually. */
/* tslint:disable */
/* eslint-disable */
import type {
BaseContract,
BytesLike,
FunctionFragment,
Result,
Interface,
ContractRunner,
ContractMethod,
Listener,
} from "ethers";
import type {
TypedContractEvent,
TypedDeferredTopicFilter,
TypedEventLog,
TypedListener,
TypedContractMethod,
} from "../../common";
export interface SingletonFactoryInterface extends Interface {
getFunction(nameOrSignature: "deploy"): FunctionFragment;
encodeFunctionData(
functionFragment: "deploy",
values: [BytesLike, BytesLike]
): string;
decodeFunctionResult(functionFragment: "deploy", data: BytesLike): Result;
}
export interface SingletonFactory extends BaseContract {
connect(runner?: ContractRunner | null): SingletonFactory;
waitForDeployment(): Promise<this>;
interface: SingletonFactoryInterface;
queryFilter<TCEvent extends TypedContractEvent>(
event: TCEvent,
fromBlockOrBlockhash?: string | number | undefined,
toBlock?: string | number | undefined
): Promise<Array<TypedEventLog<TCEvent>>>;
queryFilter<TCEvent extends TypedContractEvent>(
filter: TypedDeferredTopicFilter<TCEvent>,
fromBlockOrBlockhash?: string | number | undefined,
toBlock?: string | number | undefined
): Promise<Array<TypedEventLog<TCEvent>>>;
on<TCEvent extends TypedContractEvent>(
event: TCEvent,
listener: TypedListener<TCEvent>
): Promise<this>;
on<TCEvent extends TypedContractEvent>(
filter: TypedDeferredTopicFilter<TCEvent>,
listener: TypedListener<TCEvent>
): Promise<this>;
once<TCEvent extends TypedContractEvent>(
event: TCEvent,
listener: TypedListener<TCEvent>
): Promise<this>;
once<TCEvent extends TypedContractEvent>(
filter: TypedDeferredTopicFilter<TCEvent>,
listener: TypedListener<TCEvent>
): Promise<this>;
listeners<TCEvent extends TypedContractEvent>(
event: TCEvent
): Promise<Array<TypedListener<TCEvent>>>;
listeners(eventName?: string): Promise<Array<Listener>>;
removeAllListeners<TCEvent extends TypedContractEvent>(
event?: TCEvent
): Promise<this>;
deploy: TypedContractMethod<
[_initCode: BytesLike, _salt: BytesLike],
[string],
"nonpayable"
>;
getFunction<T extends ContractMethod = ContractMethod>(
key: string | FunctionFragment
): T;
getFunction(
nameOrSignature: "deploy"
): TypedContractMethod<
[_initCode: BytesLike, _salt: BytesLike],
[string],
"nonpayable"
>;
filters: {};
}

@ -35,5 +35,6 @@ export type { AdminUpgradeableProxy } from "./AdminUpgradeableProxy";
export type { FeeManager } from "./FeeManager";
export type { GasCompensationVault } from "./GasCompensationVault";
export type { LoopbackProxy } from "./LoopbackProxy";
export type { SingletonFactory } from "./SingletonFactory";
export type { TornadoRouter } from "./TornadoRouter";
export type { TornadoVault } from "./TornadoVault";

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

@ -50,7 +50,7 @@ const _abi = [
] as const;
const _bytecode =
"0x6080604052348015600f57600080fd5b506101638061001f6000396000f3fe608060405234801561001057600080fd5b506004361061002b5760003560e01c8063624fbfdc14610030575b600080fd5b61004361003e36600461008c565b610045565b005b336001600160a01b03167f50d6f3fc915efd1695d8a4cb50da185984f50d256834b9cb308295eb3c872c9c83836040516100809291906100fe565b60405180910390a25050565b6000806020838503121561009f57600080fd5b823567ffffffffffffffff808211156100b757600080fd5b818501915085601f8301126100cb57600080fd5b8135818111156100da57600080fd5b8660208285010111156100ec57600080fd5b60209290920196919550909350505050565b60208152816020820152818360408301376000818301604090810191909152601f909201601f1916010191905056fea2646970667358221220cadc2288aafcfeb373ae536503c025419ca51a0b1642ad003ff215a6bff8658464736f6c63430008190033";
"0x6080604052348015600f57600080fd5b506101658061001f6000396000f3fe608060405234801561001057600080fd5b506004361061002b5760003560e01c8063624fbfdc14610030575b600080fd5b61004361003e36600461008c565b610045565b005b336001600160a01b03167f50d6f3fc915efd1695d8a4cb50da185984f50d256834b9cb308295eb3c872c9c8383604051610080929190610100565b60405180910390a25050565b6000806020838503121561009f57600080fd5b823567ffffffffffffffff8111156100b657600080fd5b8301601f810185136100c757600080fd5b803567ffffffffffffffff8111156100de57600080fd5b8560208284010111156100f057600080fd5b6020919091019590945092505050565b60208152816020820152818360408301376000818301604090810191909152601f909201601f1916010191905056fea264697066735822122050c4191eadbd3981b9be4954b8abbadae91d7cfb743a47cc6930c8fe566e1c6e64736f6c634300081c0033";
type EchoerConstructorParams =
| [signer?: Signer]

@ -22,7 +22,7 @@ const _abi = [
] as const;
const _bytecode =
"0x6080604052348015600f57600080fd5b50609c80601d6000396000f3fe6080604052348015600f57600080fd5b5060405162461bcd60e51b815260206004820152602160248201527f7468697320636f6e747261637420646f6573206e6f74206163636570742045546044820152600960fb1b606482015260840160405180910390fdfea264697066735822122034c2432feedadd0f30a6f66555381c20922b6ab7c9b3ede4c27896b23e802a8264736f6c63430008190033";
"0x6080604052348015600f57600080fd5b50609c80601d6000396000f3fe6080604052348015600f57600080fd5b5060405162461bcd60e51b815260206004820152602160248201527f7468697320636f6e747261637420646f6573206e6f74206163636570742045546044820152600960fb1b606482015260840160405180910390fdfea2646970667358221220e3ea6c7cc6115518097ca37048fbc2dbf908554443ac49cb9f0f128dbca7c44e64736f6c634300081c0033";
type BadRecipientConstructorParams =
| [signer?: Signer]

@ -344,7 +344,7 @@ const _abi = [
] as const;
const _bytecode =
"0x608060405234801561001057600080fd5b50604051806040016040528060078152602001664441494d6f636b60c81b815250604051806040016040528060048152602001634441494d60e01b815250816003908161005d9190610113565b50600461006a8282610113565b5050506101d2565b634e487b7160e01b600052604160045260246000fd5b600181811c9082168061009c57607f821691505b6020821081036100bc57634e487b7160e01b600052602260045260246000fd5b50919050565b601f82111561010e576000816000526020600020601f850160051c810160208610156100eb5750805b601f850160051c820191505b8181101561010a578281556001016100f7565b5050505b505050565b81516001600160401b0381111561012c5761012c610072565b6101408161013a8454610088565b846100c2565b602080601f831160018114610175576000841561015d5750858301515b600019600386901b1c1916600185901b17855561010a565b600085815260208120601f198616915b828110156101a457888601518255948401946001909101908401610185565b50858210156101c25787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b610785806101e16000396000f3fe608060405234801561001057600080fd5b506004361061009e5760003560e01c806340c10f191161006657806340c10f191461011857806370a082311461012d57806395d89b4114610156578063a9059cbb1461015e578063dd62ed3e1461017157600080fd5b806306fdde03146100a3578063095ea7b3146100c157806318160ddd146100e457806323b872dd146100f6578063313ce56714610109575b600080fd5b6100ab6101aa565b6040516100b891906105ce565b60405180910390f35b6100d46100cf366004610639565b61023c565b60405190151581526020016100b8565b6002545b6040519081526020016100b8565b6100d4610104366004610663565b610256565b604051601281526020016100b8565b61012b610126366004610639565b61027a565b005b6100e861013b36600461069f565b6001600160a01b031660009081526020819052604090205490565b6100ab610288565b6100d461016c366004610639565b610297565b6100e861017f3660046106c1565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205490565b6060600380546101b9906106f4565b80601f01602080910402602001604051908101604052809291908181526020018280546101e5906106f4565b80156102325780601f1061020757610100808354040283529160200191610232565b820191906000526020600020905b81548152906001019060200180831161021557829003601f168201915b5050505050905090565b60003361024a8185856102a5565b60019150505b92915050565b6000336102648582856102b7565b61026f85858561033a565b506001949350505050565b6102848282610399565b5050565b6060600480546101b9906106f4565b60003361024a81858561033a565b6102b283838360016103cf565b505050565b6001600160a01b038381166000908152600160209081526040808320938616835292905220546000198114610334578181101561032557604051637dc7a0d960e11b81526001600160a01b038416600482015260248101829052604481018390526064015b60405180910390fd5b610334848484840360006103cf565b50505050565b6001600160a01b03831661036457604051634b637e8f60e11b81526000600482015260240161031c565b6001600160a01b03821661038e5760405163ec442f0560e01b81526000600482015260240161031c565b6102b28383836104a4565b6001600160a01b0382166103c35760405163ec442f0560e01b81526000600482015260240161031c565b610284600083836104a4565b6001600160a01b0384166103f95760405163e602df0560e01b81526000600482015260240161031c565b6001600160a01b03831661042357604051634a1406b160e11b81526000600482015260240161031c565b6001600160a01b038085166000908152600160209081526040808320938716835292905220829055801561033457826001600160a01b0316846001600160a01b03167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9258460405161049691815260200190565b60405180910390a350505050565b6001600160a01b0383166104cf5780600260008282546104c4919061072e565b909155506105419050565b6001600160a01b038316600090815260208190526040902054818110156105225760405163391434e360e21b81526001600160a01b0385166004820152602481018290526044810183905260640161031c565b6001600160a01b03841660009081526020819052604090209082900390555b6001600160a01b03821661055d5760028054829003905561057c565b6001600160a01b03821660009081526020819052604090208054820190555b816001600160a01b0316836001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040516105c191815260200190565b60405180910390a3505050565b60006020808352835180602085015260005b818110156105fc578581018301518582016040015282016105e0565b506000604082860101526040601f19601f8301168501019250505092915050565b80356001600160a01b038116811461063457600080fd5b919050565b6000806040838503121561064c57600080fd5b6106558361061d565b946020939093013593505050565b60008060006060848603121561067857600080fd5b6106818461061d565b925061068f6020850161061d565b9150604084013590509250925092565b6000602082840312156106b157600080fd5b6106ba8261061d565b9392505050565b600080604083850312156106d457600080fd5b6106dd8361061d565b91506106eb6020840161061d565b90509250929050565b600181811c9082168061070857607f821691505b60208210810361072857634e487b7160e01b600052602260045260246000fd5b50919050565b8082018082111561025057634e487b7160e01b600052601160045260246000fdfea264697066735822122058942fcc650d3670455590fabbf6c5726b3ae7df7b57e75bc02cb2c66259d45b64736f6c63430008190033";
"0x608060405234801561001057600080fd5b50604051806040016040528060078152602001664441494d6f636b60c81b815250604051806040016040528060048152602001634441494d60e01b815250816003908161005d9190610111565b50600461006a8282610111565b5050506101cf565b634e487b7160e01b600052604160045260246000fd5b600181811c9082168061009c57607f821691505b6020821081036100bc57634e487b7160e01b600052602260045260246000fd5b50919050565b601f82111561010c57806000526020600020601f840160051c810160208510156100e95750805b601f840160051c820191505b8181101561010957600081556001016100f5565b50505b505050565b81516001600160401b0381111561012a5761012a610072565b61013e816101388454610088565b846100c2565b6020601f821160018114610172576000831561015a5750848201515b600019600385901b1c1916600184901b178455610109565b600084815260208120601f198516915b828110156101a25787850151825560209485019460019092019101610182565b50848210156101c05786840151600019600387901b60f8161c191681555b50505050600190811b01905550565b610785806101de6000396000f3fe608060405234801561001057600080fd5b506004361061009e5760003560e01c806340c10f191161006657806340c10f191461011857806370a082311461012d57806395d89b4114610156578063a9059cbb1461015e578063dd62ed3e1461017157600080fd5b806306fdde03146100a3578063095ea7b3146100c157806318160ddd146100e457806323b872dd146100f6578063313ce56714610109575b600080fd5b6100ab6101aa565b6040516100b891906105ce565b60405180910390f35b6100d46100cf366004610638565b61023c565b60405190151581526020016100b8565b6002545b6040519081526020016100b8565b6100d4610104366004610662565b610256565b604051601281526020016100b8565b61012b610126366004610638565b61027a565b005b6100e861013b36600461069f565b6001600160a01b031660009081526020819052604090205490565b6100ab610288565b6100d461016c366004610638565b610297565b6100e861017f3660046106c1565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205490565b6060600380546101b9906106f4565b80601f01602080910402602001604051908101604052809291908181526020018280546101e5906106f4565b80156102325780601f1061020757610100808354040283529160200191610232565b820191906000526020600020905b81548152906001019060200180831161021557829003601f168201915b5050505050905090565b60003361024a8185856102a5565b60019150505b92915050565b6000336102648582856102b7565b61026f85858561033a565b506001949350505050565b6102848282610399565b5050565b6060600480546101b9906106f4565b60003361024a81858561033a565b6102b283838360016103cf565b505050565b6001600160a01b038381166000908152600160209081526040808320938616835292905220546000198114610334578181101561032557604051637dc7a0d960e11b81526001600160a01b038416600482015260248101829052604481018390526064015b60405180910390fd5b610334848484840360006103cf565b50505050565b6001600160a01b03831661036457604051634b637e8f60e11b81526000600482015260240161031c565b6001600160a01b03821661038e5760405163ec442f0560e01b81526000600482015260240161031c565b6102b28383836104a4565b6001600160a01b0382166103c35760405163ec442f0560e01b81526000600482015260240161031c565b610284600083836104a4565b6001600160a01b0384166103f95760405163e602df0560e01b81526000600482015260240161031c565b6001600160a01b03831661042357604051634a1406b160e11b81526000600482015260240161031c565b6001600160a01b038085166000908152600160209081526040808320938716835292905220829055801561033457826001600160a01b0316846001600160a01b03167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9258460405161049691815260200190565b60405180910390a350505050565b6001600160a01b0383166104cf5780600260008282546104c4919061072e565b909155506105419050565b6001600160a01b038316600090815260208190526040902054818110156105225760405163391434e360e21b81526001600160a01b0385166004820152602481018290526044810183905260640161031c565b6001600160a01b03841660009081526020819052604090209082900390555b6001600160a01b03821661055d5760028054829003905561057c565b6001600160a01b03821660009081526020819052604090208054820190555b816001600160a01b0316836001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040516105c191815260200190565b60405180910390a3505050565b602081526000825180602084015260005b818110156105fc57602081860181015160408684010152016105df565b506000604082850101526040601f19601f83011684010191505092915050565b80356001600160a01b038116811461063357600080fd5b919050565b6000806040838503121561064b57600080fd5b6106548361061c565b946020939093013593505050565b60008060006060848603121561067757600080fd5b6106808461061c565b925061068e6020850161061c565b929592945050506040919091013590565b6000602082840312156106b157600080fd5b6106ba8261061c565b9392505050565b600080604083850312156106d457600080fd5b6106dd8361061c565b91506106eb6020840161061c565b90509250929050565b600181811c9082168061070857607f821691505b60208210810361072857634e487b7160e01b600052602260045260246000fd5b50919050565b8082018082111561025057634e487b7160e01b600052601160045260246000fdfea2646970667358221220df85cece2633b7b39a7e3c92023521dbd4a76129843a0efc262b8e208f146bdf64736f6c634300081c0033";
type ERC20MockConstructorParams =
| [signer?: Signer]

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

@ -9,5 +9,6 @@ export * as interfaces from "./interfaces";
export { ERC20Tornado__factory } from "./ERC20Tornado__factory";
export { ETHTornado__factory } from "./ETHTornado__factory";
export { Echoer__factory } from "./Echoer__factory";
export { PermitTornado__factory } from "./PermitTornado__factory";
export { Verifier__factory } from "./Verifier__factory";
export { CTornado__factory } from "./CTornado__factory";

@ -0,0 +1,417 @@
/* Autogenerated file. Do not edit manually. */
/* tslint:disable */
/* eslint-disable */
import { Contract, Interface, type ContractRunner } from "ethers";
import type {
ISignatureTransfer,
ISignatureTransferInterface,
} from "../../../../contracts/Classic/interfaces/ISignatureTransfer";
const _abi = [
{
inputs: [
{
internalType: "uint256",
name: "maxAmount",
type: "uint256",
},
],
name: "InvalidAmount",
type: "error",
},
{
inputs: [],
name: "LengthMismatch",
type: "error",
},
{
anonymous: false,
inputs: [
{
indexed: true,
internalType: "address",
name: "owner",
type: "address",
},
{
indexed: false,
internalType: "uint256",
name: "word",
type: "uint256",
},
{
indexed: false,
internalType: "uint256",
name: "mask",
type: "uint256",
},
],
name: "UnorderedNonceInvalidation",
type: "event",
},
{
inputs: [],
name: "DOMAIN_SEPARATOR",
outputs: [
{
internalType: "bytes32",
name: "",
type: "bytes32",
},
],
stateMutability: "view",
type: "function",
},
{
inputs: [
{
internalType: "uint256",
name: "wordPos",
type: "uint256",
},
{
internalType: "uint256",
name: "mask",
type: "uint256",
},
],
name: "invalidateUnorderedNonces",
outputs: [],
stateMutability: "nonpayable",
type: "function",
},
{
inputs: [
{
internalType: "address",
name: "",
type: "address",
},
{
internalType: "uint256",
name: "",
type: "uint256",
},
],
name: "nonceBitmap",
outputs: [
{
internalType: "uint256",
name: "",
type: "uint256",
},
],
stateMutability: "view",
type: "function",
},
{
inputs: [
{
components: [
{
components: [
{
internalType: "address",
name: "token",
type: "address",
},
{
internalType: "uint256",
name: "amount",
type: "uint256",
},
],
internalType: "struct ISignatureTransfer.TokenPermissions",
name: "permitted",
type: "tuple",
},
{
internalType: "uint256",
name: "nonce",
type: "uint256",
},
{
internalType: "uint256",
name: "deadline",
type: "uint256",
},
],
internalType: "struct ISignatureTransfer.PermitTransferFrom",
name: "permit",
type: "tuple",
},
{
components: [
{
internalType: "address",
name: "to",
type: "address",
},
{
internalType: "uint256",
name: "requestedAmount",
type: "uint256",
},
],
internalType: "struct ISignatureTransfer.SignatureTransferDetails",
name: "transferDetails",
type: "tuple",
},
{
internalType: "address",
name: "owner",
type: "address",
},
{
internalType: "bytes",
name: "signature",
type: "bytes",
},
],
name: "permitTransferFrom",
outputs: [],
stateMutability: "nonpayable",
type: "function",
},
{
inputs: [
{
components: [
{
components: [
{
internalType: "address",
name: "token",
type: "address",
},
{
internalType: "uint256",
name: "amount",
type: "uint256",
},
],
internalType: "struct ISignatureTransfer.TokenPermissions[]",
name: "permitted",
type: "tuple[]",
},
{
internalType: "uint256",
name: "nonce",
type: "uint256",
},
{
internalType: "uint256",
name: "deadline",
type: "uint256",
},
],
internalType: "struct ISignatureTransfer.PermitBatchTransferFrom",
name: "permit",
type: "tuple",
},
{
components: [
{
internalType: "address",
name: "to",
type: "address",
},
{
internalType: "uint256",
name: "requestedAmount",
type: "uint256",
},
],
internalType: "struct ISignatureTransfer.SignatureTransferDetails[]",
name: "transferDetails",
type: "tuple[]",
},
{
internalType: "address",
name: "owner",
type: "address",
},
{
internalType: "bytes",
name: "signature",
type: "bytes",
},
],
name: "permitTransferFrom",
outputs: [],
stateMutability: "nonpayable",
type: "function",
},
{
inputs: [
{
components: [
{
components: [
{
internalType: "address",
name: "token",
type: "address",
},
{
internalType: "uint256",
name: "amount",
type: "uint256",
},
],
internalType: "struct ISignatureTransfer.TokenPermissions",
name: "permitted",
type: "tuple",
},
{
internalType: "uint256",
name: "nonce",
type: "uint256",
},
{
internalType: "uint256",
name: "deadline",
type: "uint256",
},
],
internalType: "struct ISignatureTransfer.PermitTransferFrom",
name: "permit",
type: "tuple",
},
{
components: [
{
internalType: "address",
name: "to",
type: "address",
},
{
internalType: "uint256",
name: "requestedAmount",
type: "uint256",
},
],
internalType: "struct ISignatureTransfer.SignatureTransferDetails",
name: "transferDetails",
type: "tuple",
},
{
internalType: "address",
name: "owner",
type: "address",
},
{
internalType: "bytes32",
name: "witness",
type: "bytes32",
},
{
internalType: "string",
name: "witnessTypeString",
type: "string",
},
{
internalType: "bytes",
name: "signature",
type: "bytes",
},
],
name: "permitWitnessTransferFrom",
outputs: [],
stateMutability: "nonpayable",
type: "function",
},
{
inputs: [
{
components: [
{
components: [
{
internalType: "address",
name: "token",
type: "address",
},
{
internalType: "uint256",
name: "amount",
type: "uint256",
},
],
internalType: "struct ISignatureTransfer.TokenPermissions[]",
name: "permitted",
type: "tuple[]",
},
{
internalType: "uint256",
name: "nonce",
type: "uint256",
},
{
internalType: "uint256",
name: "deadline",
type: "uint256",
},
],
internalType: "struct ISignatureTransfer.PermitBatchTransferFrom",
name: "permit",
type: "tuple",
},
{
components: [
{
internalType: "address",
name: "to",
type: "address",
},
{
internalType: "uint256",
name: "requestedAmount",
type: "uint256",
},
],
internalType: "struct ISignatureTransfer.SignatureTransferDetails[]",
name: "transferDetails",
type: "tuple[]",
},
{
internalType: "address",
name: "owner",
type: "address",
},
{
internalType: "bytes32",
name: "witness",
type: "bytes32",
},
{
internalType: "string",
name: "witnessTypeString",
type: "string",
},
{
internalType: "bytes",
name: "signature",
type: "bytes",
},
],
name: "permitWitnessTransferFrom",
outputs: [],
stateMutability: "nonpayable",
type: "function",
},
] as const;
export class ISignatureTransfer__factory {
static readonly abi = _abi;
static createInterface(): ISignatureTransferInterface {
return new Interface(_abi) as ISignatureTransferInterface;
}
static connect(
address: string,
runner?: ContractRunner | null
): ISignatureTransfer {
return new Contract(address, _abi, runner) as unknown as ISignatureTransfer;
}
}

@ -2,3 +2,4 @@
/* tslint:disable */
/* eslint-disable */
export { IERC20__factory } from "./IERC20__factory";
export { ISignatureTransfer__factory } from "./ISignatureTransfer__factory";

@ -82,7 +82,7 @@ const _abi = [
] as const;
const _bytecode =
"0x60a0604052348015600f57600080fd5b50604051610472380380610472833981016040819052602c91603c565b6001600160a01b0316608052606a565b600060208284031215604d57600080fd5b81516001600160a01b0381168114606357600080fd5b9392505050565b6080516103da6100986000396000818160560152818160e101528181610212015261027701526103da6000f3fe6080604052600436106100385760003560e01c8063a3221c2e14610044578063a99ce80714610094578063e822f784146100b657600080fd5b3661003f57005b600080fd5b34801561005057600080fd5b506100787f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b03909116815260200160405180910390f35b3480156100a057600080fd5b506100b46100af366004610328565b6100d6565b005b3480156100c257600080fd5b506100b46100d1366004610360565b610207565b336001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000161461013e5760405162461bcd60e51b815260206004820152600860248201526737b7363c9033b7bb60c11b60448201526064015b60405180910390fd5b47600061014b4884610379565b90508160000361015b5750505050565b6000846001600160a01b03168383116101745782610176565b835b604051600081818185875af1925050503d80600081146101b2576040519150601f19603f3d011682016040523d82523d6000602084013e6101b7565b606091505b50509050806102005760405162461bcd60e51b815260206004820152601560248201527418dbdb5c195b9cd85d194819d85cc819985a5b1959605a1b6044820152606401610135565b5050505050565b336001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000161461026a5760405162461bcd60e51b815260206004820152600860248201526737b7363c9033b7bb60c11b6044820152606401610135565b4760006001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000168284116102a457836102a6565b825b604051600081818185875af1925050503d80600081146102e2576040519150601f19603f3d011682016040523d82523d6000602084013e6102e7565b606091505b50509050806103235760405162461bcd60e51b81526020600482015260086024820152671c185e4819985a5b60c21b6044820152606401610135565b505050565b6000806040838503121561033b57600080fd5b82356001600160a01b038116811461035257600080fd5b946020939093013593505050565b60006020828403121561037257600080fd5b5035919050565b808202811582820484141761039e57634e487b7160e01b600052601160045260246000fd5b9291505056fea264697066735822122073841dd5b5d8687d927814633a2fcb7944a306bb89a9b65a0aab4cc361c8312264736f6c63430008190033";
"0x60a060405234801561001057600080fd5b5060405161047838038061047883398101604081905261002f91610040565b6001600160a01b0316608052610070565b60006020828403121561005257600080fd5b81516001600160a01b038116811461006957600080fd5b9392505050565b6080516103da61009e6000396000818160560152818160e101528181610212015261027701526103da6000f3fe6080604052600436106100385760003560e01c8063a3221c2e14610044578063a99ce80714610094578063e822f784146100b657600080fd5b3661003f57005b600080fd5b34801561005057600080fd5b506100787f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b03909116815260200160405180910390f35b3480156100a057600080fd5b506100b46100af366004610328565b6100d6565b005b3480156100c257600080fd5b506100b46100d1366004610360565b610207565b336001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000161461013e5760405162461bcd60e51b815260206004820152600860248201526737b7363c9033b7bb60c11b60448201526064015b60405180910390fd5b47600061014b4884610379565b90508160000361015b5750505050565b6000846001600160a01b03168383116101745782610176565b835b604051600081818185875af1925050503d80600081146101b2576040519150601f19603f3d011682016040523d82523d6000602084013e6101b7565b606091505b50509050806102005760405162461bcd60e51b815260206004820152601560248201527418dbdb5c195b9cd85d194819d85cc819985a5b1959605a1b6044820152606401610135565b5050505050565b336001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000161461026a5760405162461bcd60e51b815260206004820152600860248201526737b7363c9033b7bb60c11b6044820152606401610135565b4760006001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000168284116102a457836102a6565b825b604051600081818185875af1925050503d80600081146102e2576040519150601f19603f3d011682016040523d82523d6000602084013e6102e7565b606091505b50509050806103235760405162461bcd60e51b81526020600482015260086024820152671c185e4819985a5b60c21b6044820152606401610135565b505050565b6000806040838503121561033b57600080fd5b82356001600160a01b038116811461035257600080fd5b946020939093013593505050565b60006020828403121561037257600080fd5b5035919050565b808202811582820484141761039e57634e487b7160e01b600052601160045260246000fd5b9291505056fea2646970667358221220fbe5a836dfa015bd3b2b1ffb61149001940255ee2f1f9b05c13681937e89ff9264736f6c634300081c0033";
type GasCompensationVaultConstructorParams =
| [signer?: Signer]

@ -0,0 +1,91 @@
/* Autogenerated file. Do not edit manually. */
/* tslint:disable */
/* eslint-disable */
import {
Contract,
ContractFactory,
ContractTransactionResponse,
Interface,
} from "ethers";
import type { Signer, ContractDeployTransaction, ContractRunner } from "ethers";
import type { NonPayableOverrides } from "../../../common";
import type {
SingletonFactory,
SingletonFactoryInterface,
} from "../../../contracts/Governance/SingletonFactory";
const _abi = [
{
inputs: [
{
internalType: "bytes",
name: "_initCode",
type: "bytes",
},
{
internalType: "bytes32",
name: "_salt",
type: "bytes32",
},
],
name: "deploy",
outputs: [
{
internalType: "address payable",
name: "createdContract",
type: "address",
},
],
stateMutability: "nonpayable",
type: "function",
},
] as const;
const _bytecode =
"0x608060405234801561001057600080fd5b50610134806100206000396000f3fe6080604052348015600f57600080fd5b506004361060285760003560e01c80634af63f0214602d575b600080fd5b60cf60048036036040811015604157600080fd5b810190602081018135640100000000811115605b57600080fd5b820183602082011115606c57600080fd5b80359060200191846001830284011164010000000083111715608d57600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250929550509135925060eb915050565b604080516001600160a01b039092168252519081900360200190f35b6000818351602085016000f5939250505056fea26469706673582212208761ae5cfc40689ce98cd25a56b929c259b167501a941e4f0164890ebab1c0bb64736f6c634300060c0033";
type SingletonFactoryConstructorParams =
| [signer?: Signer]
| ConstructorParameters<typeof ContractFactory>;
const isSuperArgs = (
xs: SingletonFactoryConstructorParams
): xs is ConstructorParameters<typeof ContractFactory> => xs.length > 1;
export class SingletonFactory__factory extends ContractFactory {
constructor(...args: SingletonFactoryConstructorParams) {
if (isSuperArgs(args)) {
super(...args);
} else {
super(_abi, _bytecode, args[0]);
}
}
override getDeployTransaction(
overrides?: NonPayableOverrides & { from?: string }
): Promise<ContractDeployTransaction> {
return super.getDeployTransaction(overrides || {});
}
override deploy(overrides?: NonPayableOverrides & { from?: string }) {
return super.deploy(overrides || {}) as Promise<
SingletonFactory & {
deploymentTransaction(): ContractTransactionResponse;
}
>;
}
override connect(runner: ContractRunner | null): SingletonFactory__factory {
return super.connect(runner) as SingletonFactory__factory;
}
static readonly bytecode = _bytecode;
static readonly abi = _abi;
static createInterface(): SingletonFactoryInterface {
return new Interface(_abi) as SingletonFactoryInterface;
}
static connect(
address: string,
runner?: ContractRunner | null
): SingletonFactory {
return new Contract(address, _abi, runner) as unknown as SingletonFactory;
}
}

@ -20,5 +20,6 @@ export { AdminUpgradeableProxy__factory } from "./AdminUpgradeableProxy__factory
export { FeeManager__factory } from "./FeeManager__factory";
export { GasCompensationVault__factory } from "./GasCompensationVault__factory";
export { LoopbackProxy__factory } from "./LoopbackProxy__factory";
export { SingletonFactory__factory } from "./SingletonFactory__factory";
export { TornadoRouter__factory } from "./TornadoRouter__factory";
export { TornadoVault__factory } from "./TornadoVault__factory";

@ -89,6 +89,10 @@ declare module "hardhat/types/runtime" {
name: "IERC20",
signerOrOptions?: ethers.Signer | FactoryOptions
): Promise<Contracts.IERC20__factory>;
getContractFactory(
name: "ISignatureTransfer",
signerOrOptions?: ethers.Signer | FactoryOptions
): Promise<Contracts.ISignatureTransfer__factory>;
getContractFactory(
name: "IHasher",
signerOrOptions?: ethers.Signer | FactoryOptions
@ -121,6 +125,10 @@ declare module "hardhat/types/runtime" {
name: "MerkleTreeWithHistoryMock",
signerOrOptions?: ethers.Signer | FactoryOptions
): Promise<Contracts.MerkleTreeWithHistoryMock__factory>;
getContractFactory(
name: "PermitTornado",
signerOrOptions?: ethers.Signer | FactoryOptions
): Promise<Contracts.PermitTornado__factory>;
getContractFactory(
name: "IVerifier",
signerOrOptions?: ethers.Signer | FactoryOptions
@ -217,6 +225,10 @@ declare module "hardhat/types/runtime" {
name: "RelayerRegistry",
signerOrOptions?: ethers.Signer | FactoryOptions
): Promise<Contracts.RelayerRegistry__factory>;
getContractFactory(
name: "SingletonFactory",
signerOrOptions?: ethers.Signer | FactoryOptions
): Promise<Contracts.SingletonFactory__factory>;
getContractFactory(
name: "TestnetAdminProxy",
signerOrOptions?: ethers.Signer | FactoryOptions
@ -541,6 +553,11 @@ declare module "hardhat/types/runtime" {
address: string | ethers.Addressable,
signer?: ethers.Signer
): Promise<Contracts.IERC20>;
getContractAt(
name: "ISignatureTransfer",
address: string | ethers.Addressable,
signer?: ethers.Signer
): Promise<Contracts.ISignatureTransfer>;
getContractAt(
name: "IHasher",
address: string | ethers.Addressable,
@ -581,6 +598,11 @@ declare module "hardhat/types/runtime" {
address: string | ethers.Addressable,
signer?: ethers.Signer
): Promise<Contracts.MerkleTreeWithHistoryMock>;
getContractAt(
name: "PermitTornado",
address: string | ethers.Addressable,
signer?: ethers.Signer
): Promise<Contracts.PermitTornado>;
getContractAt(
name: "IVerifier",
address: string | ethers.Addressable,
@ -701,6 +723,11 @@ declare module "hardhat/types/runtime" {
address: string | ethers.Addressable,
signer?: ethers.Signer
): Promise<Contracts.RelayerRegistry>;
getContractAt(
name: "SingletonFactory",
address: string | ethers.Addressable,
signer?: ethers.Signer
): Promise<Contracts.SingletonFactory>;
getContractAt(
name: "TestnetAdminProxy",
address: string | ethers.Addressable,
@ -1063,6 +1090,10 @@ declare module "hardhat/types/runtime" {
name: "IERC20",
signerOrOptions?: ethers.Signer | DeployContractOptions
): Promise<Contracts.IERC20>;
deployContract(
name: "ISignatureTransfer",
signerOrOptions?: ethers.Signer | DeployContractOptions
): Promise<Contracts.ISignatureTransfer>;
deployContract(
name: "IHasher",
signerOrOptions?: ethers.Signer | DeployContractOptions
@ -1095,6 +1126,10 @@ declare module "hardhat/types/runtime" {
name: "MerkleTreeWithHistoryMock",
signerOrOptions?: ethers.Signer | DeployContractOptions
): Promise<Contracts.MerkleTreeWithHistoryMock>;
deployContract(
name: "PermitTornado",
signerOrOptions?: ethers.Signer | DeployContractOptions
): Promise<Contracts.PermitTornado>;
deployContract(
name: "IVerifier",
signerOrOptions?: ethers.Signer | DeployContractOptions
@ -1191,6 +1226,10 @@ declare module "hardhat/types/runtime" {
name: "RelayerRegistry",
signerOrOptions?: ethers.Signer | DeployContractOptions
): Promise<Contracts.RelayerRegistry>;
deployContract(
name: "SingletonFactory",
signerOrOptions?: ethers.Signer | DeployContractOptions
): Promise<Contracts.SingletonFactory>;
deployContract(
name: "TestnetAdminProxy",
signerOrOptions?: ethers.Signer | DeployContractOptions
@ -1515,6 +1554,11 @@ declare module "hardhat/types/runtime" {
args: any[],
signerOrOptions?: ethers.Signer | DeployContractOptions
): Promise<Contracts.IERC20>;
deployContract(
name: "ISignatureTransfer",
args: any[],
signerOrOptions?: ethers.Signer | DeployContractOptions
): Promise<Contracts.ISignatureTransfer>;
deployContract(
name: "IHasher",
args: any[],
@ -1555,6 +1599,11 @@ declare module "hardhat/types/runtime" {
args: any[],
signerOrOptions?: ethers.Signer | DeployContractOptions
): Promise<Contracts.MerkleTreeWithHistoryMock>;
deployContract(
name: "PermitTornado",
args: any[],
signerOrOptions?: ethers.Signer | DeployContractOptions
): Promise<Contracts.PermitTornado>;
deployContract(
name: "IVerifier",
args: any[],
@ -1675,6 +1724,11 @@ declare module "hardhat/types/runtime" {
args: any[],
signerOrOptions?: ethers.Signer | DeployContractOptions
): Promise<Contracts.RelayerRegistry>;
deployContract(
name: "SingletonFactory",
args: any[],
signerOrOptions?: ethers.Signer | DeployContractOptions
): Promise<Contracts.SingletonFactory>;
deployContract(
name: "TestnetAdminProxy",
args: any[],

@ -38,6 +38,8 @@ export type { ERC20Tornado } from "./contracts/Classic/ERC20Tornado";
export { ERC20Tornado__factory } from "./factories/contracts/Classic/ERC20Tornado__factory";
export type { ETHTornado } from "./contracts/Classic/ETHTornado";
export { ETHTornado__factory } from "./factories/contracts/Classic/ETHTornado__factory";
export type { ISignatureTransfer } from "./contracts/Classic/interfaces/ISignatureTransfer";
export { ISignatureTransfer__factory } from "./factories/contracts/Classic/interfaces/ISignatureTransfer__factory";
export type { IHasher } from "./contracts/Classic/MerkleTreeWithHistory.sol/IHasher";
export { IHasher__factory } from "./factories/contracts/Classic/MerkleTreeWithHistory.sol/IHasher__factory";
export type { MerkleTreeWithHistory } from "./contracts/Classic/MerkleTreeWithHistory.sol/MerkleTreeWithHistory";
@ -54,6 +56,8 @@ export type { IUSDT } from "./contracts/Classic/Mocks/IUSDT.sol/IUSDT";
export { IUSDT__factory } from "./factories/contracts/Classic/Mocks/IUSDT.sol/IUSDT__factory";
export type { MerkleTreeWithHistoryMock } from "./contracts/Classic/Mocks/MerkleTreeWithHistoryMock";
export { MerkleTreeWithHistoryMock__factory } from "./factories/contracts/Classic/Mocks/MerkleTreeWithHistoryMock__factory";
export type { PermitTornado } from "./contracts/Classic/PermitTornado";
export { PermitTornado__factory } from "./factories/contracts/Classic/PermitTornado__factory";
export type { IVerifier } from "./contracts/Classic/Tornado.sol/IVerifier";
export { IVerifier__factory } from "./factories/contracts/Classic/Tornado.sol/IVerifier__factory";
export type { Tornado } from "./contracts/Classic/Tornado.sol/Tornado";
@ -98,6 +102,8 @@ export type { IFeeManager } from "./contracts/Governance/RelayerRegistry.sol/IFe
export { IFeeManager__factory } from "./factories/contracts/Governance/RelayerRegistry.sol/IFeeManager__factory";
export type { RelayerRegistry } from "./contracts/Governance/RelayerRegistry.sol/RelayerRegistry";
export { RelayerRegistry__factory } from "./factories/contracts/Governance/RelayerRegistry.sol/RelayerRegistry__factory";
export type { SingletonFactory } from "./contracts/Governance/SingletonFactory";
export { SingletonFactory__factory } from "./factories/contracts/Governance/SingletonFactory__factory";
export type { TestnetAdminProxy } from "./contracts/Governance/Testnet/TestnetAdminProxy";
export { TestnetAdminProxy__factory } from "./factories/contracts/Governance/Testnet/TestnetAdminProxy__factory";
export type { TestnetFeeManager } from "./contracts/Governance/Testnet/TestnetFeeManager";

1733
yarn.lock

File diff suppressed because it is too large Load Diff